aprx-2.9.0/000775 000000 000000 00000000000 13040775352 012462 5ustar00rootroot000000 000000 aprx-2.9.0/.gitignore000664 000000 000000 00000000516 13040775352 014454 0ustar00rootroot000000 000000 Makefile aprx-complex.conf aprx.conf config.h config.log config.status aprx aprx-stat aprx-stat.8 aprx.8 build-stamp configure-stamp debian/aprx.debhelper.log debian/aprx.logrotate debian/aprx.postinst.debhelper debian/aprx.postrm.debhelper debian/aprx.prerm.debhelper debian/aprx.substvars debian/changelog debian/files *.o *.d aprx-2.9.0/ChangeLog000664 000000 000000 00000246370 13040775352 014250 0ustar00rootroot000000 000000 2014-08-29 Matti Aarnio - OH2MQK - KP20NG * beacon.c: Demote some nuisance logging to "-dd" level. 2014-03-31 Matti Aarnio - OH2MQK - KP20NG * aprx.h, interface.c, igate.c, dprsgw.c: Deliver all APRS-IS supplied tokens to the interface 3rd-party receiver * beacon.c: Limit read amount of 256 bytes, excess is rejected and usually also the beaconing is skipped. * aprx.c, aprx.h, igate.c: Moved rflog() from igate.c to aprx.c. 2014-03-24 Matti Aarnio - OH2MQK - KP20NG * interface.c: Igated 3rd-party frames are produced with different TNC2 format message from AX.25 frame message. This is because TNC2 format is used at filter processing, and needs to have original source address arriving from APRS-IS. * ttyreader.c: Set default read timeout to 60 minutes, it can be configured to any value from 1 second to 4 hours as channel busyness supports, and even disabled. * ttyreader.c: Use aprxlog() to record tty state changes: close/open * netresolver.c: Use same "die_now" flag as all other thread loops do. * historydb.c: Fix key pickup of sourcename. Debug print key in history_db_insert_() * agwpesocket.c: Code cleaning. * cellmalloc.c: No need to include * configure.in: Make pthread autoconfig default with option to disable it. * pbuf.c: Declare pbuf_alloc() static. 2014-03-22 Matti Aarnio - OH2MQK - KP20NG * aprx.c: Fix aprxlog() function internal varargs usage. It must be reset for each vfprintf() call... * aprx.c: Initial value of time_reset = 1; start in "reset state", which does time resetting in all prepoll codes in main loop. At second round and there after of the main loop the reset_time flag will be reset after execution of all prepoll functions. * aprsis.c: Do initial connect at about current tick + 10 seconds. Reset phase will also put next connect attempt at that time. * aprx.c: Change stdout and stderr buffering definition to have a buffer, and make line buffering in a way that works.. * aprsis.c: Correct calls to aprxlog(). * configure.in, Makefile.in: Revised the pthread support autoconfig to really find where the libraries are, and set correct definitions and compile/link time parameters. 2014-03-21 Matti Aarnio - OH2MQK - KP20NG * aprx.h, interface.c, beacon.c, config.c, digipeater.c, telemetry.c: Change the "flags are bits in an int" to "packet bit fields" allowing direct setting of flags. * aprx.c, beacon.c: Do not use stdout FILE* to print things out of signal handler. Use sprintf(3) to put things into local buffer, then use write(2) to send them to file handle 1. Otherwise GLIBC has some interlock issue causing a deadlock in rare case. (Happened with debug printouts in development.) * beacon.c: Correct close() of exec type beacon file descriptor. * interface.c: Correct primary flags defaults, and setting of "telem-to-is " and "telem-t-rf " flags. * telemetry.c: Debug-printout (debug>1) of telemetry about time until next output, plus packet that is being telemetered along with hex coding of interface flags. Also streamlined the telemetry label output code. 2014-03-11 Matti Aarnio - OH2MQK - KP20NG * ttyreader.c: Do open /dev/ttySnnn up front in non-blocking mode so that if the serial port hardware needs to be wired specially to be considered active ( = flow control ) the serial port open will not stop -- hang -- at it missing. * agwpesocket.c: Update time comparison codes to current model. * aprx.c: time_reset gets cleared only after first round through the main loop. * beacon.c: The 'file' and 'exec' directives need at most 256 bytes of read buffer to get beacon body content. No need for 2kB buffer alloc. 2014-03-08 Matti Aarnio - OH2MQK - KP20NG * digipeater.c: Corrected the digipeating recognition algorithm. If the current leading VIA field value without H-bit set is not recognized as transmitter callsign, transmitter alias, or value of or directive at digipeater source or digipeater transmitter configuration, then the packet is _not_ eligible for digipeat. 2014-03-08 Matti Aarnio - OH2MQK - KP20NG * aprx.h, beacon.c, digipeater.c, parse_aprs.c, telemetry.c, timercmp.c, ttyreader.c: Fix all things flagged at CFLAGS="-g -O2 -Wall". * configure.in, config.h.in, aprx.c: Autoconf test for , and include if available. * aprx.h, beacon.c, config.c, digipeater.c, interface.c, netax25.c, telemetry.c, doc/aprx-manual.odt, aprx.8.in: Change single boolean flag 'txok' into multiple interface flags where the 'txok' is just one bit. Added 'telem-to-is ' option to * aprsis.c: Warn at startup if an block does not contain passcode. 2014-03-04 Matti Aarnio - OH2MQK - KP20NG * aprx.c, aprx.h, beacon.c: Pickup child process exit SIGCHLD signals, and track which child did exit. * beacon.c, aprx.c, aprx.h, aprx.conf.in, aprx.8.in: Kamil Palkowiski SQ8KFH's beacon exec idea rewritten to be non-blocking in execution. The Aprx main loop does not tolerate blocking programs. * aprsis.c, ttyreader.c: poll(2) results on file handles asking for POLLIN can include POLLHUP and POLLERR. 2014-03-04 Matti Aarnio - OH2MQK - KP20NG * aprx.8.in, doc/aprx-manual.odt: Document passcode a bit more. * aprsis.c, aprx.c, aprx.h, netax25.c: Move aprxlog() from aprsis.c to aprx.c. Use aprxlog() instead of open coded logger at netax25.c. Modify which type of APRSIS events get logged without the runtime -L option to the aprxlogfile. 2014-02-26 Matti Aarnio - OH2MQK - KP20NG * Makefile.in, agwpesocket.c, aprsis.c, aprx-stat.c, aprx.c, aprx.h, aprxpolls.c, beacon.c, config.h.in, configure.in, digipeater.c, dprsgw.c, dupecheck.c, erlang.c, filter.c, historydb.c, hlog.c, igate.c, interface.c, kiss.c, netax25.c, netresolver.c, pbuf.c, telemetry.c, timercmp.c, ttyreader.c: Change primary time management to use system monotonic clock instead of time-of-day clock that can jump back/forward. This clock is in -lrt as: clock_gettime(CLOCK_MONOTONIC, ...) and it is the kernel internal primary jiffy lock. This value is not synchronized with wall clock, although it does proceeds at about same rate. It is also present at FreeBSD, and presumably several other platforms too. (It is a POSIX thing, after all.) The system also watches over if the delta in between subsequent value extracts exceeds about 30 seconds, or the time jumps backwards at all. If such happens, next call cycle on all prepoll routines are resetting all time management things in particular subsystem. Renamed the primary time tracking variable from "now" to "tick", as it has no correlation with current wall-clock time. There are no Y2038 issues in this code approach. 2014-02-24 Matti Aarnio - OH2MQK - KP20NG * agwpesocket.c, aprsis.c, digipeater.c, dptsgw.c, dupecheck.c, filter.c, interface.c, netresolver.c: Y2038 comparison things of time values. Somewhat premature, but gets things in line with uses of 'struct timeval' -- tv_timercmp(). 2014-02-23 Matti Aarnio - OH2MQK - KP20NG * all files: Change copyright statement to read 2007-2014. * timercmp.c, Makefile.in: New file bringing all struct timeval tools to one place. Added tv_timerbounds() that monitors time targets vs. current time value -- if machine has hibernated a lot without running timers and the 'now' jumps ahead a lot (or backwards for complete coverage), then the target time is reset. This avoids running a burst of beacon events when 'now' jumps ahead a lot, as an example. * netax25.c, digipeater.c, beacon.c, ttyreader.c, telemetry.c, dprsgw.c, agwpesocket.c, aprsis.c, aprx.h, historydb.c, dupecheck.c, erlang.c: Timer tracking against possibly jumping 'now' with conditional resetting. * beacon.c, dupecheck.c, netax25.c, telemetry.c, timercmp.c: Few wrong initializations of timers fixed. 2014-02-13 Forgot to record the author * debian/control: Add build and run dependency of OpenSSL. (Actually not yet necessary, SSL support is not being compilable / compiled yet.) 2014-02-13 Heikki Hannikainen * parse_aprs.c: Check that the timestamp ends with one of valid timestamp type ids. Those being: 'z', 'h', '/' 2014-02-03 Matti Aarnio - OH2MQK - KP20NG * ttyreader.c: Read only when poll reports data availability. (uh3ack) 2014-02-01 Matti Aarnio - OH2MQK - KP20NG * rpm/aprx.spec.in: Forcing RPM building to produce i386 package. (There is no need to produce x86-64 binary package. Small footprint is the goal.) * erlang.c: Do not call aprx_syslog_init() from this module. * ssl.c, ssl.h, hlog.c, hlog.h: Copied SSL client code material from Aprsc. Not yet functional. * agwpesocket.c, beacon.c, digipeater.c, dupecheck.c, erlang.c, telemetry.c, ttyreader.c: If the time reported by time(2) seems to jump ahead or backwards too much, various deadline schedulers keeping time goals in mind will reset themselves upon detection of the condition. 2013-11-01 Matti Aarnio - OH2MQK - KP20NG * historydb.c: Initialize also tokenbucket value so that freshly arrived packet at the historydb will have at least 1.0 tokens at hand to permit one initial digipeat. Will not be enough for multi-transmitter case. * digipeater.c: Display Ratelimit caused packet drops at all debug levels. ( Instead of >1 ) * filter.c: Correct parse of s// filter. (Original author not recorded.) 2013-10-08 Matti Aarnio - OH2MQK - KP20NG * config.c, digipeater.c: Add conditionals so that --disable-igate works. 2013-10-07 Matti Aarnio - OH2MQK - KP20NG * Makefile.in, svnversion-test.sh: A bit more complicated way to pick up SVNVERSION information. * aprx.c, VERSION, README, TODO, INSTALL, doc/aprx-manual.odt Version 2.08 under way. * aprx.h, aprx.c, aprsis.c, aprx-stat.c, aprxpolls.c, beacon.c, digipeater.c, dupecheck.c, erlang.c, interface.c, telemetry.c, ttyreader.c: Changed time tracking from "time_t" to "struct timeval". This supports (sub)millisecond granularity e.g. in KISS polling, and overall smoothness of processing. No, it isn't really necessary besides of that KISS polling, but unified API is always better. 2013-10-06 Matti Aarnio - OH2MQK - KP20NG * filter.c: Add 'g/call1/call2..' filter to match "group messaging" recently added on javAPRSSrvr. * doc/aprx-manual.odt: Document internally supported APRS-IS style filter tokens. * filter.c: Code cleaning around reference definitions. * filter.c: * Add feature to recognize 3rd-party frames by type (t/3) * Enable support of D filter (they are meaningful at RF too) * filter.c, aprx.c, aprx.h, config.c: * Fix M filter preparation to include cos(lat). * aprx.h, interface.c, parse_aprs.c: Always look inside 3rd party APRS frames too to determine their content for filtering uses. RF->RF relaying didn't do that. 2013-10-05 Matti Aarnio - OH2MQK - KP20NG * configure.in, Makefile.in, aprx.c, aprx.8.in: Support integrated binary version printout: aprx -V * configure.in, Makefile.in: Preparing for new code features, picking up more library locations. * aprsis.c: Improve the error diagnostics on upstream socket connection error situations. * beacon.c: Debug report number of parsed beacons. 2013-10-03 Geoffrey F4FXL * digipeater.c: Fixed badly formatted AX.25 after insertion of MYCALL value on VIA path. The end-pointer was mis-managed. 2013-08-10 Matti Aarnio - OH2MQK - KP20NG * configure.in: Look for OpenSSL library, SCTP network protocol. 2013-08-03 Heikki Hannikainen * aprsis.c, aprs-complex.conf.in, aprx.8.in, aprx.conf.in, doc/aprx-manual.odt: Require manually configured APRS-IS passcode. 2013-08-03 Matti Aarnio - OH2MQK - KP20NG * agwpesocket.c, aprsis.c, beacon.c, cellmalloc.c, dprsgw.c, dupecheck.c, filter.c, historydb.c, keyhash.c, pbuf.c, telemetry.c, ttyreader.c: Coding style change: Use cmalloc() instead of malloc() + memset(). 2013-08-03 Frank Knobbe * interface.c: Correct the way how messages are passed from APRS-IS to RF. There was a parse bug around pb->dstname field. 2013-04-25 Matti Aarnio - OH2MQK - KP20NG * netax25.c: Receive from AX.25 interface only if it has associated an Aprx interface configuration object with it. Less noise on logs that way. 2013-04-25 Matti Aarnio - OH2MQK - KP20NG * filter.c: Commented out code, but make it conform with API of historydb. * parse_aprs.c: The call parameter 'historydb' can be NULL, don't SEGV on it. * telemetry.c: Pointer writing to beyond end of buffer (one last time) * ttyreader.c: hexdumpfp() text dump fix * beacon.c: Restructured the beacon data preparation for transmit. Lots of mistakes had crept in recently (2.06?) * interface.c, netax25.c: Debug printouts of processing errors, and transmissions. 2013-04-23 Matti Aarnio - OH2MQK - KP20NG * config.c: Show 'myloc' lat/lon in degrees instead of radians. * digipeater.c: debugging.. * filter.c: A fence-post error while parsing o/A8CDEF-12 -- accepted only A8CDEF-1. 2013-04-22 Matti Aarnio - OH2MQK - KP20NG * aprx.8.in, aprx-complex.conf.in, aprx.conf.in, doc/aprx-manual.odt, doc/aprx-manual.pdf: Change documentation wording around . * config.c: Fix myloc config parameter parsing. * beacon.c: Every group is now independent from each other. If you define multiple groups, they will be running in parallel with their own scheduling. Meaning that you can have different cycles, and defaults at each. * all source files: Change Copyright claim years to 2007-2013. * configure.in: Auto-test for header file. 2013-04-22 Geoffrey F4FXL * digipeater.c: Recent rewrite of viafield tracking code forgot to initialize it in many cases -- and Covarity tool did not notice that :-( 2013-04-20 Matti Aarnio - OH2MQK - KP20NG * aprsis.c: Preparing for new communication modes * parse_aprs.c: Two condition expression goofups that were always "false" * filter.c: Match filter parsing with aprsc (issue found with Covarity testing) * aprsis.c, aprx.c, aprx.h, aprxpolls.c, cellmalloc.c, config.c, digipeater.c, dprsgw.c, filter.c, interface.c, kiss.c, netax25.c, telemetry.c, ttyreader.c: Covarity testing revealed unclear error cases, unnecessary comparisons against NULL, and other mostly harmless things. There is still a memory leak in interface.c configuration parsing in error path -- but that is not a big deal. * digipeater.c: Modified "fixall" processing to put transmitter callsign into first VIA field in every case, possibly truncating the VIA list in order to make room for the callsign in the incoming request. Replacing numeric literals with #define constants to inline document of what is going on at places. 2013-04-18 Matti Aarnio - OH2MQK - KP20NG * aprx.c, VERSION: Version 2.07 (APRX27) * aprx.8.in: Document "myloc" and "$myloc", "filter m/100", etc. * aprx.c, aprx.h: Variables for myloc_lat, myloc_lon, and string forms. * config.c: Parse "myloc lat xx long yy" entry. Moved couple tool functions here from beacon.c. * filter.c: Support "m/100", if top-level configuration has "myloc lat xx lon yy" entry. * beacon.c: new "macro" definition of "$myloc", which takes lat+lon of top-level configuration "myloc.." entry. * interface.c: Recognizing incoming messages targeted to this server (by $mycall, and transmit interface callsigns.) Processing them by rudimentary acknowledgement, and optional place to actually process them. Actual processing is still not written. 2013-02-02 Matti Aarnio - OH2MQK - KP20NG * ttyreader.c: Improve the error report, when serial port opening failed. * filter.c: Coverity reports over aprsc reflect directly to aprx too. We use same code in parts... 2012-12-29 Matti Aarnio - OH2MQK - KP20NG * digipeater.c, aprx.h, historydb.h: Track digipeated messages by source callsign. * aprsis.c: Use A->rdlin_len instead of strlen(A->rdline) * aprx-stat.c, aprx.c, aprx.h, erlang.c: Moved syslog init from erlang to aprx core. * parse_aprs.c, aprx.h: Function parse_aprs_message() for planned future use. 2012-12-09 Matt Maguire VK2RQ * telemetry.c: Sometimes the Erlang registery contains interface entries that are no longer actually in the system. Avoid NULL referral at such situations. 2012-11-09 Matti Aarnio - OH2MQK - KP20NG * dprsgw.c: Better accounting on DPRS side-channel data occupancy, assuming the DPRS gw does send bytes all the time. 2012-11-09 FUJIURA Toyonori JG2RZF * dprsgw.c: Add receiver Erlang estimators to received packets. 2012-11-01 Matti Aarnio - OH2MQK - KP20NG * aprsis.c: Move CRLF appending later into APRSIS transmission. 2012-10-31 Matti Aarnio - OH2MQK - KP20NG * aprx.c: Use thread-safe gmtime_r() instead of gmtime() for time printout. 2012-10-29 Matti Aarnio - OH2MQK - KP20NG * Makefile.in: Improve distribution tar RPM building support. * rpm/aprx.init, rpm/aprx.service, rpm/aprx.spec.in: RPM package packing files * filter.c: Clean filter parser. * aprx.c: Acquire a lock on pid-file, and keep the file open. 2012-10-29 FUJIURA Toyonori JG2RZF * dprsgw.c: D-STAR callsign formatting for suffixless ones: * "JG2RZF A" -> "JG2RZF-A" * "JG2RZF " -> "JG2RZF-" Oops! 2012-10-12 Matti Aarnio - OH2MQK - KP20NG * rpm/aprx.spec.in, rpm/aprx.service: Andrew Elwell supplied better version of Fedora, and rhel. * filter.c: Leave the "over-long parameters are rejected" logic, but don't support alternate group field splitter input. 2012-10-03 Matti Aarnio - OH2MQK - KP20NG * TODO, INSTALL, aprx.c, aprx-manual.odt, aprx-manual.pdf, VERSION: 2.06 2012-10-02 Matti Aarnio - OH2MQK - KP20NG * filter.c: Parse filters with callsign sets without overflowing buffer. Officially syntax is: OP/callsign1/callsign2 but support also: OP/callsign1,callsign2 * digipeater.c: Correct analysis of first "via" field, bail out of the loop only after it has been parsed. 2012-10-01 Matti Aarnio - OH2MQK - KP20NG * debian/postinst, debian/aprx.init: Removed postinst from debian installations. That script is bad and causes install/upgrade to stall. Modernized the aprx init-script. 2012-09-30 Matti Aarnio - OH2MQK - KP20NG * aprx.h, digipeater.c, interface.c, pbuf.h, pbuf.c, parse_aprs.c: Sync pbuf_new() implementation with aprsc's approach, and sync parse_aprs() with aprsc's code. This should fix some strange MICe bugs, among others. 2012-09-18 Matti Aarnio - OH2MQK - KP20NG * parse_aprs.c: Corrected MICe longitude degrees parser. Again. (Sorry, F4FXL's parser fix was wrong.) 2012-09-05 Matti Aarnio - OH2MQK - KP20NG * apparmor.aprx, debian/rules, debian/dirs, debian/postint: Copied bits of Aprsc's debian packaging to Aprx. (Original packaging stuff was copied from Aprx to Aprsc.) 2012-09-02 Matti Aarnio - OH2MQK - KP20NG * aprx.8.in, aprx.conf.in, aprx-complex.conf.in, aprx-rxigate.conf.in, configure.in: Exterminated all instances of yours truly's own address from the sample configurations, and replaced them with 0000.00N 00000.00E coordinate, which aprs.fi treats as invalid. * beacon.c: In addition to the long time used qTYPE_LOCALGEN, added on APRSIS beacons also ",TCPIP*" at the tail of whatever is being sent. Pete is not happy with q-code alone... 2012-08-26 Matti Aarnio - OH2MQK - KP20NG * digipeater.c, interface.c, aprx.h, TODO, aprx-manual.*: Add to APRSIS tx-gated packets optionally different via-path (parameter: msg-path) for message packets, than for any other type packets. For example: via-path WIDE1-1, msg-path WIDE2-2 (By request of OH3BK.) * VERSION: 2.05 * beacon.c, interface.c: Support beaconin to APRSIS without having any radio interfaces. Make null-device interface and (in special conditions the internal APRSIS interface) beaconable. * doc/aprx-manual.*: Fixes on explanations. Diagrams on subsystem configuration examples describing message flows. 2012-08-07 Matti Aarnio - OH2MQK - KP20NG * configure.in, aprsis.c, ROADMAP, doc/aprx-manual.odt: Fix the "pthreads" typo by using correct "pthread" spelling in the documents + "--with-pthreads" option alias in configure. 2012-08-07 Matti Aarnio - OH2MQK - KP20NG * interface.c: Automatically create igate-group N values for radio interfaces start from 1, and go onwards. Manually defined values start from one, and it is up to the configuration writers to have a sane upper limit. * aprx.c, aprx.h, ttyreader.c, erlang.c, kiss.c: Fixed a) poll of KISS subinterfaces, b) KISS polling time management issues. The polling does not yet have serial-device specific timing management, rather a global cadence. * aprx.c: Version 2.05 * ttyreader.c, aprxpolls.c, aprx.c, aprx.h: Do millisecond timings, send KISS POLL (0x0E) code requests every configured number of milliseconds per serial-device: serial-device ... KISS pollmillis 100 * agwpesocket.c, aprsis.c, aprx.c, aprx.h, aprxpolls.c, aprx-stat.c, beacon.c, configure.in, digipeater.c, dprsgw.c, dupecheck.c, erlang.c, filter.c, historydb.c, igate.c, interface.c, kiss.c, netax25.c, netresolver.c, pbuf.c, telemetry.c, ttyreader.c: Changed "now" from type "time_t" to "struct timeval" enabling the ttyreader to do millisecond level timing operations. 2012-08-06 Matti Aarnio - OH2MQK - KP20NG * debian/aprx.init, rpm/aprx.init: Correct the package start dependency definitions. 2012-08-04 Matti Aarnio - OH2MQK - KP20NG * interface.c, kiss.c: Debug printout claimed reversed logical meaning in history-db lookup. Typo fixes at kiss processing comments. * interface.c: Config parser bug in defining multiple . Thanks to N2PYI for report. 2012-07-31 Matti Aarnio - OH2MQK - KP20NG * configure.in, digipeater.c, aprx.h, valgrind.c: Supply implementation of memrchr() if the platform does not have it. (GNU Libc extension, not a standard POSIX thing.) * Makefile.in: Fixing details around how to run "make make-deb". Fixing how SVNVERSION is determined. * interface.c, igate.c, aprx.h: rflog() parameter set modification, show directly at calls if the logged item is 'R' or 'T'. * dupecheck.c, aprsis.c, igate.c, aprx.h, digipeater.c: Prepare for the duplicate checker to be able to control the time window of the duplicate checks - minimum will be 30 seconds, maximum can be higher. * digipeater.c: TNC2 format quirks in "VIA field" data caused missed identification of "ping pong relay" - where a packet contains this node's transmitter callsign, and this node has logged its address as "sent through me". Also known as TRACE mode: SRC>DEST,MYTRANS,OTHERTX*,WIDE3-1 2012-07-30 Matti Aarnio - OH2MQK - KP20NG * keyhash.c, keyhash.h, netax25.c, netresolver.c, interface.c, cellmalloc.c, config.c, dprsgw.c, ax25.c: A compiler test with -Wall complained a bit around missing ANSI-C prototypes. 2012-07-29 Matti Aarnio - OH2MQK - KP20NG * keyhash.c, filter.c: Threw away the long unused CRC32 stuff, and added a hashkeyuc() function. Fixed the way how filter_entrycall_*() and filter_wx_*() functions processed the key. Now both of them store keys as converted to upper case, and lookup with mixed case. * aprx-config.xsd: An attempt at writing a "formal" configuration file syntax description. It is really not XML that config file, nor can XSD define it clearly, I think.. 2012-07-28 Matti Aarnio - OH2MQK - KP20NG * VERSION: 2.04 * filter.c: Wrong way to put len* fields into an union vs. a few other things. * dupecheck.c, digipeater.c: Fix from iw3ijq + k3pdk about AX25 duplicate tracking dropping null pointers. This has _not_ been validated for TNC mode frames yet, but now AX.25 works properly. 2012-01-18 Matti Aarnio - OH2MQK - KP20NG * VERSION: 2.03test4 * interface.c: Record outbound "history heard" per interface. * historydb.c: Simple refactoring to use same hash function all the time. * digipeater.c: Feed all transmitted packets to dupe-filter of that transmitter. This will handle cross-band digipeat + tx-gates so that an APRS packet transmitted to a channel won't be digipeated again by this transmitter. * igate.c: When constructing APRSIS originated 3rd-party tx-igate packets, use correct version of "TCPIP" in the header. 2012-01-07 Matti Aarnio - OH2MQK - KP20NG * VERSION: 2.03test3 * pbuf.h, pbuf.c, aprx.h: New infrastructure function: pbuf_fill() that does former two (then 3) copies of same code in interface.c * interface.c: Use new pbuf_fill(). On 3rd-party receiver, parse original (sort of) TNC2 frame to temporary AX.25 frame for filter analysis. Rearranged filter running and reactioning. * filter.c: Debug printouts * All files... Copyright text update. 2011-12-30 Matti Aarnio - OH2MQK - KP20NG * interface.c: 3rd-party igate tx processing fixes, now it allows also other than messages 2011-12-25 Matti Aarnio - OH2MQK - KP20NG * VERSION, aprx.c, TODO, INSTALL, doc/aprx-manual.*: Version 2.03 * interface.c: At top-level of the the "callsign" parameter did not override device defined callsign and its AX.25 parse result. * aprx.h, config.c, dprsgw.c, logrotate.aprx.in, aprx.conf.in, aprx-complex.conf.in: Configurability of logging parameter "dprslog". * aprx.h, aprsis.c, beacon.c, igate.c, telemetry.c: Supply qcode on outgoing packets depending it being locally generated (qAS) or rx-i-gated (qAR) * telemetry.c: Fix telemetry "tocall" to use software identifier, and to put "TCPIP*" on APRSIS beacon path. * aprx.conf.in: Fix default server list * crc.c, kiss.c: Document polynomes and fix comments 2011-08-29 Matti Aarnio - OH2MQK - KP20NG * parse_aprs.c: F4FXL found bug in position parser cos() pre-calculator. Input needs to be in radians, it was in degrees. 2011-07-26 Matti Aarnio - OH2MQK - KP20NG * interface.c: If preceding address processing detects an error, do not call packet transmitter. * aprx.h, dprsgw.c, parse_aprs.c: Moved DPRS related APRS symbol translation from parse_aprs.c to dprsgw.c. * parse_aprs.c: Introduced APRS symbol mapper/generator for GPS messages. * parse_aprs.c: Rewrite of parse_aprs_mice() degrees parser inspired by F4FXL. 2011-03-16 Matti Aarnio - OH2MQK - KP20NG * beacon.c, telemetry.c, aprx.h, interface.c: Transmit only radio data port related beacons, and telemetry. Don't touch on other pseudo-interfaces. 2011-01-02 Matti Aarnio - OH2MQK - KP20NG * interface.c, agwpesocket.c, aprx.h: Configure agwpe-device. * netresolv.c: Oops.. fixed functionality. Tuned debugging. * aprsis.c, aprx.c: Tuned debugging. * configure.in, aprsis.c: Autoconfig stdarg.h existence, use varargs on debug printout code. * agwpesocket.c: Debug printout on received frame. * interface.c, doc/aprx-manual.odt: Unlimit the number of "igate-group N" parameter's N value range. * aprsis.c, aprx.c, beacon.c, config.c, digipeater.c, dprsgw.c, filter.c, historydb.c, igate.c, interface.c, keyhash.c, kiss.c, netresolver.c, ttyreader.c: Cleaning compiling on a very old FreeBSD -- essentially K&R C compiler (gcc 2.95.4) not permitting variable declarations anywhere but beginning of code block. 2011-01-01 Matti Aarnio - OH2MQK - KP20NG * interface.c: Always init interface specific Erlang accounting * filter.c: Negative ranges on filters means "outside the distance". This allows adding "substractive" filters that tell "don't pass messages to receipients outside given range". * configure.in, interface.c, cellmalloc.c, timestamp.c, kiss.c, historydb.h, netax25.c, pbuf.h, aprx.c, aprx.h, filter.c: Clean autoconfig tests, make the code compilable on oldish FreeBSD. * configure.in, aprx.h, aprx.c, agwpesocket.c, interface.c: Configuration option --enable-agwpe to enable AGWPE socket interface code. * configure.in, aprx.h, aprx.c, aprsis.c, ax25.c, beacon.c, digipeater.c, dpwsgw.c, erlang.c, filter.c, historydb.c, igate.c, interface.c, parse_aprs.c, telemetry.c, ttyreader.c: Configuration option --disable-igate for embedding code without igate network connection. Disables DPRS GW code, and all of historydb, igate.c, aprsis.c. * aprx.c, VERSION, INSTALL, README, TODO Version: 2.02 * aprx.h, interface.c: A null-device for sinking infinite digipeat output. A debug tool. * aprx.h, interface.c, historydb.c, historydb.h, pbuf.h: Properly track "heard from interface(group)" information for tx-igate processing. Now a full APRSIS traffic feed won't transmit anything to RF, unless explicit manual filter definitions tells to transmit, or message recipient has been recently heard behind a radio channel X. See the new 'igate-group' parameter on documents. * aprsis.c, netresolver.c: Cleaned pthreads thread creation calls. * agwpesocket.c: Erlang account on outbound socket. * digipeater.c: Allow ratelimit parameter to be defined very high. This way a full APRSIS traffic feed can be sent to null-device. * aprx.conf.in, aprx-complex.conf.in: Some new notes on digipeater and tx-igate controls. * doc/aprx-manual.odt: Document update. 2010-12-18 Matti Aarnio - OH2MQK - KP20NG * interface.c, aprx.h: Add a "null-device" for system. Never receive anything from it, have infinite transmit capacity. * netresolver.c, aprx.h, aprx.c: A pthread that resolves dynamic DNS names on background, and updates static copy of address data so that main loop can safely do asynchronous connections without needing to do synchronous DNS resolving processing. * aprsis.c: Use pthread_cancel() in smart way to expedite shutdown. * agwpesocket.c, aprx.h, aprx.c: Draft of a socket communication mechanism with AGWPE, and LDSPED. 2010-12-17 Matti Aarnio - OH2MQK - KP20NG * VERSION, INSTALL, README, TODO Version: 2.01 * doc/aprx-manual.odt: Write a few pages about debugging * aprx.c: Version tocall code: APRX21 * aprx.c, aprx.8.in: Add '-i' option to keep the program foreground without enabling any debug printouts. * digipeater.c: Correct the recognition of "probably heard on first hop" * historydb.c: Memory realloc() bug fixed. * kiss.c: Recognize a write attempt on closed file handle, don't write. 2010-08-08 Matti Aarnio - OH2MQK - KP20NG * VERSION: 2.00 * aprx.c: Version tocall code: APRX20 * doc/aprx-manual.odt: version 2.00/1.00 2010-08-02 Matti Aarnio - OH2MQK - KP20NG * aprx.c: Version tocall code: APRX1M * ROADMAP: Planning update. * beacon.c, aprx.8.in, aprx.conf.in, aprx-complex.conf.in: OH7MMT complained difficulty of defining beacons on Rx-iGate. The default aprx.conf shows the use of "interface ..", which requires tx-enabled target interfaces. Something that rx-only will not have. * doc/aprx-manual.odt: Cross references, additional notes on digipeat of non-APRS packets. 2010-07-27 Matti Aarnio - OH2MQK - KP20NG * config.c: Accept valid APRSIS login callsigns for "mycall" parameter value. Will complain latter if end usage did want valid AX.25 callsigns instead. 2010-06-25 Matti Aarnio - OH2MQK - KP20NG * interface.c: Account the number of created interfaces and subinterfaces, and if there is just one and no callsign has been defined, only then supply a default value ("callsign $mycall"). * interface.c: Check interface callsigns to be unique. * aprsis.c, beacon.c, digipeater.c, interface.c, telemetry.c: Recognize "$mycall" in case insensitive matching. 2010-06-22 Matti Aarnio - OH2MQK - KP20NG * aprx.c: Version tocall code: APRX1L * digipeater.c: If there is a viscous-delay defined, add a random value of 0..2 to the configured number of seconds delay. This way similarly configured adjacent Tx-iGates can at random find a first transmitter and others will drop the Tx-iGate. * digipeater.c: Digipeater didn't detect interface callsigns and aliases properly, when determining if there is some work to be done. It did detect them when to avoid doing duplicate work. 2010-06-19 Matti Aarnio - OH2MQK - KP20NG * aprx.c, aprx.h, aprsis.c, beacon.c, config.c, digipeater.c, interface.c, telemetry.c, ttyreader.c: Improve config file parsing error reporting. Any ERROR observed on configuration parsing causes immediate abort with exit-code 1. * aprx.conf.in, aprx-complex.conf.in, aprx.8.in: Clarify the documentation at man-page, and at config templates. * firmware/* Copied one source of TNC2 firmwares * windows/* Just a placeholder. * Makefile.in: Improving "make dist" behaviour. 2010-06-13 Matti Aarnio - OH2MQK - KP20NG * aprx.8.in, doc/aprx-manual.odt: Some notes on available baud-rates, fixes on documentation about CRC algorithms. * ttyreader.c: Missed baud speed 57600. * dupecheck.c: Shrink the arena allocation size to 4 kB. This allows 14 reference packets in the dupecheck dataset within that arena alone, and will possibly request second arena when this get really busy. * historydb.c, dupecheck.c, pbuf.c, filter.c: Made cell object sizes readable with a debugger * crc.c: Object visibility adjustments. * Makefile.in, crc.c, aprx.h, kiss.c, ttyreader.c, interface.c: Separated KISS processing to kiss.c, and CRC processing to crc.c. Disabled unused codes. * pbuf.c, historydb.c, dupecheck.c: Shrink RAM usage, cellmalloc() does perfectly good job of using free-chains, no need to do it in applications. * interface.c, pbuf.c: The pbuf_new() has a limit on maximum total size that a packet can be: 2150 bytes. If ax25len + tnc2len are more than that, pbuf_new() returns NULL. * historydb.c, historydb.h: Instead of historydb instance specific history entry pools, have one global pool. 2010-06-12 Matti Aarnio - OH2MQK - KP20NG * cellmalloc.c: Remove pthread_mutex_t usage, not needed in this application! Conditionalize debugging code. * pbuf.c, aprx.c, aprx.h: Using cellmalloc() on pbuf storage. Support up to 2150 byte received AX.25 frames. (Up to 7 pbufs of that size on 16 kB cell arena .. and there never should be larger than around 512 byte AX.25 frames.) * dupecheck.c: Shrink dupecheck to 16 kB per alloc arena (from 256 KB). That should be enough for a very busy 1200 bps channel, and probably even for a 9600 bps channel. * filter.c: Shrink filter cell storage to 4 kB per alloc arena (from 512 kB!) * historydb.c: Shrink historydb cell storage to 32 kB per alloc arena (from 128 kB) * debian/aprx.init: Pleasing init-script behaviour during package re-install * telemetry.c, doc/aprx-manual.odt: Stagger telemetry transmissions a bit. All RF reported telemetry sources are reported at the same time, but telemetry data is time-wise separated from labels, and labels are sent so that 3 different labels are sent every 2 hours, and total label carouselle time is 6 hours. * aprx.c: Giving this version code: APRX1K * telemetry.c: Correct AX.25 data frame for RF transmission * telemetry.c, config.c, aprx.h, doc/aprx-manual.odt, aprx.conf.in, aprx-complex.conf.in: New config section, be able to tx telemetry to RF ports. * beacon.c: Error reporting additions. * erlang.c, aprx-stat.c, aprx.h, telemetry.c: Use pre-processor conditionals to select only small subset of storage and processing codes used for erlang data in embedded mode. * parse_aprs.c: Compile warning silencing. 2010-06-10 Matti Aarnio - OH2MQK - KP20NG * kiss.c, ttyreader.c, dprsgw.c, aprx.h: Tracked specification origins of each of the three different CRC-16 calculations that this code has. What was called "crc_ccitt" was in fact something totally different: the SMACK CRC16. 2010-06-07 Matti Aarnio - OH2MQK - KP20NG * README, ROADMAP, TODO, INSTALL, PROTOCOLS: Updates on plans and rough guides. * TIMESTAMP-AT-APRSIS, timestamp.c: A proposal to put about 1ms resolution timestamps on APRSIS with full backwards compatibility. * aprx.c: Giving this version code: APRX1J * dprsgw.c, digipeater.c, aprx.h, doc/aprx-manual.odt: Clean DPRS Rx gateway code. * interface.c: Correct 3rd-party packet gating filter behaviour: If there are _no_ filters, pass all packets thru. * interface.c, aprx.h, dprsgw.c, igate.c: Rate-limit source callsigns per source interface to once per 30 seconds. RF iGate DPRS messages to APRS as 3rd-party messages. 2010-06-06 Matti Aarnio - OH2MQK - KP20NG * parse_aprs.c, dprsgw.c: Rudimentary GPSxyz -> APRS symbol mapping for DPRS, with GPSxyz overlay character where possible. Also IDENT TEXT, if any. * debian/aprx.init: The "restart" command fails to work quite often. The reason being "set -e"... * aprx.h, igate.c, dprsgw.c, ttyreader.c, ax25.c: igate_to_aprsis(... , STRICTAX25) -- new flag to control source specific information about TNC2 format address formats. * parse_aprs.c: Remove unnecessary double precission floating point math. Use of 'float' is quite enough. * debian/control: Change package name a bit * dprsgw.c: Data collection code fixes * telemetry.c: Send first telemetry at 20.0 minutes after start. This is related to defaulting to EMBEDDED operation mode. * configure.in, aprx.h, erlang.c: Change defaults so that System is always "--with-embedded", and requires explicit "--with-erlangstorage" to compile with a filesystem based backing storage codes. 2010-06-04 Matti Aarnio - OH2MQK - KP20NG * aprx.h, dprsgw.c: Couple steps onwards with DPRS Rx-IGate. 2010-06-01 Matti Aarnio - OH2MQK - KP20NG * aprx.c: Set software tocall to 'APRX1H'. * interface.c: Found a memory leak on AX.25 type packet receiver. Oops! Ax.25 packets that were rejected by 's filters were just leaked, not disposed. * historydb.c: Allocate cell arenas in 128 kB blocks. * digipeater.c: Valgrind complained about uninitialized variables. Default zero is not good enough... 2010-05-30 Matti Aarnio - OH2MQK - KP20NG * aprx.h, digipeater.c: Use 'float' for ratelimit variables. Permitting as low rate definitions as 'once per 10 minutes. * dprsgw.c: XOR checksums of "GPS" mode packets. No Rx-iGate of them yet. 2010-05-29 Matti Aarnio - OH2MQK - KP20NG * dprsgw.c, ttyreader.c, aprx.c, aprx.h: Experimental DPRS receiver. Studying packet identification from serial port datastream with Rx-IGate of GPS-A type DPRS packets. * interface.c, doc/aprx-manual.odt: Effects of 'filter ...' on different sections are subtly different. See the manual! * aprx.h, digipeater.c, doc/aprx-manual.odt, aprx.conf.in, aprx-complex.conf.in: Remodelled the ratelimiting to use 'token bucket filter': ratelimit average burst both values are packets per minute, and both default to 60. * digipeater.c, interface.c: Return adjunk filters to RF->RF digipeating. They got lost a bit back with Tx-IGate needing them placed a bit differently. * man-to-html.sh: groff has changed its -Tascii output a bit, and its own HTML output is horrible... 2010-05-27 Matti Aarnio - OH2MQK - KP20NG * parse_aprs.c: Correct parse of message recipients. Fix from Patrick Domack K3PDK. 2010-05-26 Matti Aarnio - OH2MQK - KP20NG * debian/rules, rpm/aprx.spec.in, aprsis.c: Fixes on pthread:ed aprsis implementation. Default packaging for Debian and RPM to use --with-pthread. Now it shows only one "process", and two threads. This makes the program portable to uCLinux, and possibly to Windows. * dprsgw.c, aprx.h, ttyreader.c, Makefile.in, interface.c, aprx.8.in, aprx.conf.in, aprx-complex.conf.in: Add basic configuration and infra of DPRS-to-APRS gw. * interface.c, igate.c: Comment editing, adding Tx-IGate Rule 4, second half. First half probably exists in igate.. 2010-05-25 Matti Aarnio - OH2MQK - KP20NG * aprx.c, README, TODO, VERSION: Mark version 1.99, APRX1G 2010-05-25 Matti Aarnio - OH2MQK - KP20NG * interface.c, filter.c: Filtering logic change on 3rd-party digipeating. 2010-05-24 Matti Aarnio - OH2MQK - KP20NG * interface.c, TODO: Notes about missing bits for full Tx-IGate. * historydb.c, historydb.h: Keep knowledge of last coordinate on historydb. Mark also last coordinate update time. * aprx.h, pbuf.h, parse_aprs.c, interface.c, digipeater.c: Tx-IGate processing details.. 2010-05-23 Matti Aarnio - OH2MQK - KP20NG * aprx.c, aprx.h, digipeater.c, filter.c, historydb.c, historydb.h, igate.c, interface.c, parse_aprs.c: Rearranged bits so that Tx-IGate's processing has transmitter specific history database. Better (but yet a bit incomplete) Tx-IGate filtering is in interface.c. * kiss.c, aprx.8.in, aprx.conf.in, aprx-complex.conf.in, netax25.c, aprx.h, ttyreader.c: Add FLEXNET support. (Finnish HamDR speaks it by default!) * interface.c: Corrections on definitions, in particular the aliases. Fixed Tx-IGate workhorse interface_receive_3rdparty()'s packet address header construction. * digipeater.c, aprx.h: APRSIS specific via-path parameter parsing fixes, additional debugging outputs, config error detection outputs. * netax25.c, ax25.c: Debugging outputs. * ttyreader.c, aprx.h: Debugging outputs. Special KISS subtype "RFCRC" - received KISS frames have two RANDOM bytes at their end. Looks like CRC16, but is random junk. * erlang.c: Debug printout. * beacon.c: When an interface has no callsign, do not send beacon to it. (It could be tty master interface which has multiple KISS sub-interfaces.) * igate.c: Parse packet to be tx-igated for acceptable address syntaxes. Debug printouts. 2010-05-16 Matti Aarnio - OH2MQK - KP20NG * aprsis.c, aprx.conf.in, aprx.8.in, doc/aprx-manual.odt: Emphasize that 's login parameter is to be set ONLY when it needs to be different than mycall value. (But tolerate also '$mycall' alias.) * aprx.c: Update internal tocall default to 'APRX1F'. * interface.c, digipeater.c: Tx-iGate fixes for case where outgoing packet has no VIA field(s). System saw that "requested hops = 0, done hops = 0 -> no need to send out". * parse_aprs.c: Make sure that all things creating debug output are followed by a "\n". * igate.c: Relax station callsign format rules inside a received 3rd-party frame. 2010-05-13 Matti Aarnio - OH2MQK - KP20NG * interface.c: Under all situations, fill in pbuf_t->dstcall_end. * debian/rules: Do not strip resulting objects. We want debug symbols! * digipeater.c: Improve config error reporting. * config.c: Tolerate config file ending without a newline. 2009-12-27 Matti Aarnio - OH2MQK - KP20NG * aprx.c, VERSION: 1.98 * rpm/aprx.spec, debian/docs, debian/control: More documents into the packages * beacon.c, aprx.8.in, aprx.conf.in, aprx-complex.conf.in, doc/aprx-manual.odt, doc/aprx-manual.pdf: Changes on beacon definition keywords to make them clearer for a user. Old forms continue as silently accepted aliases. 2009-12-27 Matti Aarnio - OH2MQK - KP20NG * VERSION: 1.97 * beacon.c, aprx.8.in, aprx.conf.in, aprx-complex.conf.in: Never send to APRSIS interface. Define 'object' and 'item' type named entities. Uppercasify several of input fields. * interface.c, digipeater.c, aprx.h: On tx-igate behaviour, add configured via-path on outgoing 3rd-party frames 2009-12-16 Matti Aarnio - OH2MQK - KP20NG * beacon.c: Reworked more.. beacons were sent only for "tx-ok true" interfaces, while netbeacons are to be sent for all interfaces. 2009-12-03 Matti Aarnio - OH2MQK - KP20NG * beacon.c: Reworked things a bit, on how and with what content to send beacons. * netax25.c: Valgrind pleasing * telemetry.c, ttyreader.c, beacon.c, netax25.c, aprx.h: Debug printouts. 2009-12-01 Matti Aarnio - OH2MQK - KP20NG * interface.c: Register tty KISS subinterface 0 only once. * beacon.c: When a file-beacon is defined, the message content is no longer at bm->msg, instead at local variable msg. * netax25.c, aprsis.c: Pleasing valgrind. 2009-11-26 Matti Aarnio - OH2MQK - KP20NG * parse_aprs.c: Sometimes ran memchr() with bad length. Caused rare crash. * digipeater.c, aprxpolls.c, netax25.c, aprsis.c, aprx.c, aprx.h: Valgrind tested minor changes. 2009-11-17 Matti Aarnio - OH2MQK - KP20NG * aprx.8.in: Big rewrite. * aprx.h, interface.c, digipeater.c, netax25.c: Digipeater "relay-type directonly" mode. Interface parsing error detection improvement. 2009-11-08 Matti Aarnio - OH2MQK - KP20NG * VERSION 1.96 * beacon.c, aprx.8.in, aprx.conf.in, aprx-complex.conf.in: Rewrote beacon transmission interval codes, and documents of the beacon system. * configure.in, Makefile.in: Added --with-pthread option, rewrote the --with-embedded option processing. * aprsis.c, configure.in: Optionally support pthreads(3) where available, this can be important for uCLinux and perhaps Windows, where fork(2) is not available. 2009-11-07 Matti Aarnio - OH2MQK - KP20NG * aprx.c: Software tocall identity: APRX1C * cellmalloc.c: Drop semaphores. Not used in this codebase. * filter.c, aprx.h, parse_aprs.c, Makefile.in: Port Aprsc's filter code to Aprx. * debian/aprx.init, rpm/aprx.init: Update Debian's version, sync the rpm's version * telemetry.c: Report every 20 minutes, but scale values telling 10 minute traffic. Start sending telemetry PARM blocks from system start. * aprx.c: Init configurations before starting erlang accounting subsystem. 2009-11-02 Matti Aarnio - OH2MQK - KP20NG * VERSION 1.95 * aprx.c: Software tocall identity: APRX1B * telemetry.c: Erlang reporting confusion fixed. 2009-10-30 Matti Aarnio - OH2MQK - KP20NG * interface.c: More logging of interface setups. * beacon.c, aprx.8.in, aprx.conf.in, aprx-complex.conf.in New type of beacon: file /path/to/file, the first line in given file is read every time this beacon entry is executed, and the text is sent out sans line end LF. There are no quote processing available. . Validate latitude and longitude input, and complain if validate failed. . Beacon timefixing on all message types that support it, and only upon special "timefix" option set on the beacon. . Beacon construction from small parts supports 6 different fundamental packet types with coordinates. * config.c: Make config parser debugging needs -ddd runtime options. * telemetry.c: Report higher of 10 minute integrated packet/byte counts in the 20 minute account interval. This makes graphs smoother. 2009-10-27 Matti Aarnio - OH2MQK - KP20NG * aprx.h, aprx.c, aprsis.c, beacon.c, netax25.c, ttyreader.c, erlang.c, aprx-stat.c, igate.c: Modify the printtime() to print millisecond resolution times. 2009-10-26 Matti Aarnio - OH2MQK - KP20NG * beacon.c, config.c, aprx.h, aprx.conf.in, aprx-complex.conf.in, aprx.8.in: Added a 'beaconmode { aprsis | both | radio }' config option, which says where the beacons are sent to. * ROADMAP Development roadmap for first digit of version number 2009-10-25 Matti Aarnio - OH2MQK - KP20NG * digipeater.c, beacon.c, interface.c, aprx.h: Put all beacons on digipeater's transmitter duplicate checker storage. Now a beacon with WIDE2-2 path will not be repeated by message originator. Re-organized beacon's code base. * netax25.c, interface.c, aprx.h: Use Link-Level mechanism to send arbitrary AX.25 packets to desired devices. Added also a about once minute run code that checks current AX.25 devices in the system, and maps necessary ifindex:es to netdevices wanting to do IO. And all parameters to 'netax25_sendto()' are const.. * aprx.h, aprx.c, aprx-stat.c, aprsis.c, erlang.c, igate.c: Commonly used strftime() got put into printtime() function. * VERSION 1.94 * interface.c: That final part of thing (below) can only be done, if this interface has non-null tty field. * Makefile.in "make valgrind" - helps debugging some screwups.. * digipeater.c: Stop scanning the viscous queue, once time limit exceeds current time. * aprxpolls.c: A screwup on allocations found with valgrind. Oops! * netax25.c, aprsis.c, dupecheck.c, ttyreader.c, erlang.c, aprx.c, aprx.h, ax25.c, beacon.c, igate.c, historydb.c, valgrind.c, Makefile.in: Code changes to clean valgrind outputs on nuisance messages. And at least one bugfix for valgrind environment... 2009-10-24 Matti Aarnio - OH2MQK - KP20NG * telemetry.c: Changed telemetry channel 2: Erlangs from bytes_tx accounting. Now there is separate channel load graph showing how much this transmitter is affecting the channel. Give also better label for channel 4: IGateDropRx * rfbeacon.c -> beacon.c, aprx.h, aprx.c, config.c, Makefile.in: Rename rfbeacon.c to beacon.c. * interface.c: As a final part of definition, check if the default tnc-subid (0) has associated ttycallsign defined, and netax25 pty not enabled. If so, create it. * parse_aprs.c, interface.c, aprx.h: Depending upon usage, either do not look inside 3rd-party frame, or do look inside. For Tx-iGate call paths we need the analysis! * parse_aprs.c, interface.c, historydb.c, digipeater.c, rfbeacon.c, dupecheck.c, igate.c: Removed codes ignoring "trailing CRLF in APRS frame tail". They kept causing more trouble than good. The parse_aprs.c is anyway diverged from its origins a bit more than I would like, so no need to maintain mess related on its original environment. * dupecheck.c, aprx.h: Adjust dupecheck hash bucket size - 16 is quite sufficient enough even for a very busy igate/digi! * igate.c, aprx.h, ax25.c, ttyreader.c Restructured 3rd-party frame rx-igate processing so that it does not need to alter TNC2 format buffer in any way. This caused some weird things to happen in digipeater on cases of 3rd-party frames. Also modified ax25-to-tnc2 UI-formatter so that there will always be zero termination of output text string. * interface.c, digipeater.c: Small restructuring while debugging other things. * parse_aprs.c: Parse APRS 3rd-party frame content, and recognize real 3rd-party frame for sure. 2009-10-24 Matti Aarnio - OH2MQK - KP20NG * VERSION: 1.93 * ttyreader.c, erlang.c: Feeding in generated random noise did raise a few errors in KISS frame processing, and erlang accounting. KISS tncid:s sometimes did not have a callsign associated with them, and then erlang accounting blew up... * interface.c, rfbeacon.c, ax25.c, aprx.h: Beacons to radio interfaces, KISS works best, NET-AX.25 less well -- transmits OK UI frames, transmit of arbitrary other types of frames is necessary for generic digipeating. * digipeater.c: Add alias to config parameter 'transmit' -> 'transmitter'. * netax25.c, config.c: Removed unused parameter on netax25_addrxport(). Rebuilt netax25_sendto(), however it sends out only UI frames.. Removed pre-created tx_socket, and associated codes. * configure.in: Remove unused autoconf test for cfmakeraw().. 2009-10-23 Matti Aarnio - OH2MQK - KP20NG * rfbeacon.c: Fix the debug printout of beacon to be sent. * aprx.h, config.c: readconfigline() Keep the cf->linenum showing first source line number on continued multiline. This helps a bit on debugging, and similar things are already done when a (sub)group parser is reporting where that subgroup begins in case of missing parameters in a group. * digipeater.c: Validating received requests better. Now marking also probable situations that can say "this came from originator to me directly" * netbeacon.c, rfbeacon.c, config.c, aprx.h, aprx.c, aprsis.c, Makefile.in: Removing the old netbeacon code. 2009-10-22 Matti Aarnio - OH2MQK - KP20NG * aprx.h, rfbeacon.c, interface.c: Implemented new infra for sending APRS beacons to radio interfaces. Incoming request will at first construct the AX.25 header, then send that to physical interfaces. * aprx.h, ax25.c, digipeater.c, interface.c, kiss.c, pbuf.h, pbuf.c, netax25.c, parse_aprs.c, rfbeacon.c, ttyreader.c: Changed all instances of 'unsigned char' to 'uint8_t'. 2009-10-21 Matti Aarnio - OH2MQK - KP20NG * config.c: Clean away some superflous debugs. * digipeater.c: Viscous mode debug printout crashes on SEGV.. Oops. (without debug the bug does not hit.) * README.ViscousDigipeater, digipeater.c: Thinking about what are correct rules on Viscous Digipeat. * digipeater.c: On configuration, make sure that no two definitions within single definition have same :s. 2009-10-20 Matti Aarnio - OH2MQK - KP20NG * aprx.h, digipeater.c: Viscous digipeater special corner cases.. * aprx.h, config.c, aprx.conf.in, aprx-complex.conf.in Interval parser for "timeout" and "interval" parameters used in several places. * config.c, aprx.conf.in, aprx-complex.conf.in: Line continuation (the '\' character at the end of input line - with possible whitespaces following it) is now supported. An interval parser is added; timeouts and intervals can be defined in human readable way: 3m2s * aprx.8.in: Larger rewrite to bring it up to current version. * aprsis.c, aprx.conf.in, aprx-complex.conf.in: Reworked details of configuring, and internal operational semantics. Most notable difference is on possibility to define used filters in small fragments, which the system will then catenate. * aprx.h, digipeater.c, dupecheck.c: Returned the viscous delay processing back to version just before "simplified viscous delay and dupechecking". It really needs to check delayed vs. immediate counts. 2009-10-19 Matti Aarnio - OH2MQK - KP20NG * VERSION: 1.92 * digipeater.c, interface.c: Clean variable naming on digipeater subsystem. * aprx.h, aprx.conf.in, aprx-complex.conf.in, igate.c: Update documentation * igate.c: Reject packets with destcall=RXTLM-* from Tx-IGate. * digipeater.c: Simplify control flow when feeding to viscous queue vs. when running the backend directly. * aprx.h, digipeater.c, dupecheck.c, igate.c: - Fixed 3rd party dupechecking - Simplified viscous delay and dupechecking. The dupechecking happens at the start of digipeater_backend(), which is called after pbuf's have been subjected to a viscous delay, if ever necessary. First arriving packet is digipeated, if it has steps to do. If not, rest are still considered dupes, and not digipeated. * aprx.h, igate.c: Make rflog() public function to be used by multiple parties. Also mark on the log line the direction to which the packet was going (R/T), and not only its source interface. * ax25.c: Moved igate_to_aprsis() call before interface_receive_ax25(), and thus also log received packet on rf.log before it is sent out anywhere. * aprx.h, interface.c, digipeater.c, aprx.8.in, aprx.conf.in, aprx-complex.conf.in, dupecheck.c: Moved viscous-delay processor into digipeater's control area. Implemented Tx-IGate's packet re-formatting rules on interface.c. Implemented viscous-delay processing in digipeater. Added refcounting on dupe_record_t objects. * digipeater.c, igate.c, config.c, aprx.h, aprx-complex.conf.in: Moved regexp reject filters from old style setup at igate.c to new style at digipeater.c. This will not be able to reject trivially configurable things from Rx-IGate datastreams, but it can be used to control digipeating. * ax25.c: Remove unnecessary debug printout. 2009-10-18 Matti Aarnio - OH2MQK - KP20NG * VERSION: 1.91 * aprx.h, dupecheck.c, digipeater.c, pbuf.c, pbuf.h, aprsis.c, igate.c, keyhash.c: Digipeater local instance of dupechecker. The dupe-checker does recursive analysis of APRS packets for 3rd party frames, and dupecheck the innermost frame of them. Cleaned the keyhash.c to contain only FVN-1a hasher. * digipeater.c, interface.c, telemetry.c, aprx.h, ttyreader.c, erlang.c, aprx-stat.c: Start transmitting digipeated frames to ttyreader's KISS output. netax25's similar interface is not tested. Changed also the Erlang dataset format, and begun to produce Tx packet counts on telemetry. Accounting saves also tx byte counts, but they are not reported. * aprx.h, interface.c, digipeater.c, pbuf.h, pbuf.c, ax25.c: Pass the UI PID information all the way to interface, where it can be matched against a list of PIDs that will be treated alike APRS in digipeating. Have two modes in digipeating: one with interface (and aliases) as recognized work targets, and other with APRS wide/trace tags in addition to interface (and aliases). * aprx.h, ax25.c, interface.c, digipeater.c, aprx.conf.in, aprx-complex.conf.in: - Prefill AX.25 address field formatted ax25callsign field on all datastructures. That comes handy when doing TRACE processing. - Put exact "callsigns" of "WIDE", "TRACE", and "RELAY" into system as interface callsign aliases. When they are present in the request path, substitute interface callsign there with H-bit set. - Update aprx.conf samples to how the system can be configured. 2009-10-17 Matti Aarnio - OH2MQK - KP20NG * aprx.h, digipeater.c, interface.c, pbuf.h, parse_aprs.c: Digipeater preparation, system counts done and requested distribution operations with source specific as well as transmitter specific keywords. * aprx.h, ax25.c, interface.c, aprsis.c, pbuf.c, parse_aprs.c: Changed a few "parse failed" returns to "parse OK". Systematic feed of datapacket "with TNC2 line end CRLF pair". 2009-10-16 Matti Aarnio - OH2MQK - KP20NG * erlang.c, aprx.h, ttyreader.c, netax25.c, igate.c: Clean Erlang accountig API. Removed unused parameters. * interface.c, aprsis.c, igate.c, aprx.h, aprx.c, digipeater.c: Minimal definition parsers. Additionally internal "APRSIS" pseudo-interface. 2009-10-15 Matti Aarnio - OH2MQK - KP20NG * aprx.h, aprx.c, rfbeacon.c: Add internal "tocall" constant with value "APRX19". That one will track software versions. The 'for' keyword on beacons defaults to $mycall. * aprx.h, aprx.c, interface.c, config.c, rfbeacon.c, aprsis.c, ttyreader.c, netbeacon.c: Config machinery redone towards new style. Rx-IGate works again. (Old config should work too.) * aprx.h, pbuf.c, pbuf.h, interface.c, digipeater.c, aprx.c: Skeletons for pbufs, digipeaters, and their uses in the interface layer. * aprsdigi.c, ax25.c, Makefile.in: Remove obsolete placeholder. Things will be done differently. * config.c, rfbeacon.c: The rfbeacon code will be doing all variants of beacons.. * interface.c, netax25.c, ttyreader.c, aprx.h, ax25.c: interface_transmit_ax25() is able to transmit a fully formed AX.25 header+control+body frame to Linux internal AX.25 network devices as well as to any serial port attached KISS device. Transmission to TNC2 devices is not supported. Code is also very careful on checking the AX.25 frame header structure, and rejecting outright any with invalid header structure (bad continuation flags, bad chars in callsigns, not so careful with SSID byte contents - too many are careless with those :-( ) 2009-10-14 Matti Aarnio - OH2MQK - KP20NG * rfbeacon.c, interface.c, Makefile.in, config.c, aprx.c, aprx.h, aprx.conf.in, aprsis.c, netbeacon.c: Add a stub of rfbeacon. 2009-10-13 Matti Aarnio - OH2MQK - KP20NG * interface.c, config.c, netax25.c, ttyreader.c, ax25.c, aprx.h, ChangeLog: Feed received AX.25 frames to interface layer for possible digipeat processing. (Missing: APRSIS originated frames!) * interface.c, ttyreader.c, aprx.h, aprx.conf.in, aprx.8.in: Remodelled serial-device definitions into interface layer. Documentation updates to match new system. 2009-10-13 Matti Aarnio - OH2MQK - KP20NG * aprsis.c, aprx.h, config.c, netbeacon.c, aprx.conf.in, VERSION, README, INSTALL, TODO: interface config with new style entry. More of definitions. Experiments at aprx.conf.in writing. * Makefile.in, aprx.8.in, aprx.conf.in, aprx.h, config.c, filter.c, interface.c, netax25.c, netbeacon.c, pbuf.c, pbuf.h, ttyreader.c: Incremental work on new style of configurations as outlined in the Requirement Specification document. Old style configurations do still work. Serial port initstring is now binary transparent. 2009-10-05 Matti Aarnio - OH2MQK - KP20NG * VERSION: 1.06 * netbeacon.c: Complete beacon coordinate validator code, now it can detect invalid input values properly. * netax25.c, aprsis.c, ttyreader.c, igate.c, aprx.h: Cleaning gcc -Wall warnings on various platforms, including OpenBSD. 2009-10-01 Matti Aarnio - OH2MQK - KP20NG * VERSION: 1.05 * kiss.c, netax25.c, ttyreader.c, aprx.h, ax25.c: Write the SMACK frame with correctly escaped CRC. Fixed also serial-port initstring handling. 2009-09-30 Matti Aarnio - OH2MQK - KP20NG * VERSION: 1.04 * netax25.c: When writing AX.25 KISS frame to kernel, try to do it up to 3 times. Also add some debug statements on ax25-rxport processing. * VERSION: 1.03 * ttyreader.c: Fix on serial port startup - always turn on flows on the port, and explicitely flush the driver level buffers discarding possibly accumulated data. 2009-09-28 Matti Aarnio - OH2MQK - KP20NG * VERSION: 1.02 * erlang.c, aprx-stat.c, aprx.h: Remove subport from erlang codes, having "tncid N" on serial port definitions takes care of this kind of things. * kiss.c, ttyreader.c, netax25.c, ax25.h: Moved KISS/SMACK encoder to separate module, the CRC16 calculator went there as well. For each ttyreader sub-tncid there is separately opened KISS-pty channel on Linux systems with given callsign as interface's writer channel. The netax25 ax25-port reader does not accept packets with source callsign as any of our ttyreader callsigns. * erlang.c: Fix the erlang_find() to really find the interface call. 2009-09-07 Matti Aarnio - OH2MQK - KP20NG * cellmalloc.c, netax25.c, keyhash.c: Compiling at OS/X found a few odd problems, corrected. 2009-08-30 Matti Aarnio - OH2MQK - KP20NG * aprx.8.in, aprx.conf.in, config.c, aprx.h, aprx.c, telemetry.c, netax25.c, netbeacon.c, aprsis.c, ttyreader.c, erlang.c, aprx-stat.c: Rename the "mycall" configuration parameter to "aprsis-login", what it really is being used at. There is no "mycall", anywhere! * dupecheck.c, aprx.h, aprx.c, [dupecheck.h]: Removed dupecheck.h after incorporating it into aprx.h. Added the poll-interfaces to handle housekeeping operations. * beacon.c -> netbeacon.c, Makefile.in, aprsis.c, aprx.c, aprx.h: Change file name, and all references therein. A preparation for separate RF beacons. * netbeacon.c, aprx.8.in, aprx.conf.in: Add "netbeacon dest APRS via NOGATE ..." options for configuration. * netbeacon.c: Use float math to determine next event times for all beacons for smoother distribution. 2009-08-29 Matti Aarnio - OH2MQK - KP20NG * Makefile.in, dupecheck.c, dupecheck.h, aprx.c, aprx.h, aprsis.c: Add infrastructure for future: dupecheck() * telemetry.c: Add "NOGATE" on telemetry messages transmitted to APRSIS. * igate.c: Deeper look into Rx-IGate specs revealed couple missing details. More bits towards Tx-IGate. 2009-08-23 Matti Aarnio - OH2MQK - KP20NG * VERSION, INSTALL: Mark version as: 1.00 * aprx.c: Document '-L' option. * aprx.h, aprsis.c, beacon.c, igate.c: New internal API to pass data from aprx proper, and APRS-IS communicator. This is able to carry binary (including NUL bytes) data both on received AX.25 address, and frame content. * telemetry.c: Change a bit on information texts, and transmit frequency. * aprx.conf.in, aprx.8.in: Edit prototype configurations, and documentation * aprx.c, aprx.h, igate.c, cellmalloc.h, historydb.h, historydb.c, keyhash.h, keyhash.c, pbuf.h, parse_aprs.c: Preparing infrastructure for TX capable i-gate, and digipeater. 2009-02-10 Matti Aarnio - OH2MQK - KP20NG * Makefile.in, aprsdigi.c, igate.c, aprx.h, ax25.c, ttyreader.c, netax25.c, aprsis.c: Move rx-igate code to igate.c,and make initial moves to collect information about what to do for tx-igate. * PROTOCOLS, TODO, README: Document updates. 2008-12-07 Matti Aarnio - OH2MQK - KP20NG * aprx.c, aprsis.c, netax25.c, configure.in, ttyreader.c, Makefile.in: Compile testing to get this to work on Solaris 10. Also fixes on PIPE failure handling (correct SIGPIPE ignoring) on platforms other than Linux -- and possibly also for Linux. Now this should drop in to FreeBSD and OS/X as well. 2008-10-28 Matti Aarnio - OH2MQK - KP20NG * netax25.c, aprx.8.in: Turned upside-down the meaning of ax25-rxport config parameter. There is no longer a wild-card receiving mode in Linux internal AX.25 network receiving. All APRS receiving interface callsigns must be listed explicitely. * netax25.c, ttyreader.c, aprx.h: SMACK probe transmits on link that is configured for it. Also offers some debug messages on SMACK activation. * beacon.c, ax25.c: Cleaning debug printouts 2008-07-18 Matti Aarnio - OH2MQK - KP20NG * config.c: Function for validate of callsign input syntax * telemetry.c: Please the compiler a bit, increment the telemetry sequence number only after all telemetered interfaces have been reported. * aprsis.c: If there is need to reconnect to APRSIS, pick all possible IP addresses for it, and use them all. Also improved the use of new IP resolver API a bit. * ttyreader.c: Explicitely set "KISSSTATE_SYNCHUNT = 0" in enumeration. Memory blocks are created with memset() call clearing them. * aprx.h, beacon.c: Compiler pleasing * erlang.c: One-off array size handling, resulted in SEGV... 2008-04-11 Matti Aarnio - OH2MQK - KP20NG * VERSION: 0.22: * erlang.c: Auto-embed the erlang-dataset if backing-store open fails. * ttyreader.c: Mark closed socket as closed. 2008-03-29 Matti Aarnio - OH2MQK - KP20NG * VERSION: 0.21 * telemetry.c: New "send Erlang data as telemetry packets to APRS-IS" subsystem. * aprsis.c: Fix the APRS-IS network login protocol. There are TWO parameter strings after the "vers" keyword. * configure.in, Makefile.in, erlang.c: Support compilation as embedded target. Then the erlang datasets are not off-loadable to the memory mapped files, rather they are very small in-memory tables. * erlang.c, aprx.h, telemetry.c, ax25.c, aprx-stat.c: Support for telemetry sending out info on received packets. * beacon.c: Improve input validation. 2008-02-18 Matti Aarnio - OH2MQK - KP20NG * VERSION: aprx-0.18 * aprx.8.in, aprx.conf.in, beacon.c: New syntax to define netbeacons. Also support older methods. * config.c: Bug in config_SKIPTEXT quoted string termination scanning. * netax25.c, aprsis.c, aprx.h: Removing dead code, hooks for future "TNC2 -> AX.25" * ttyreader.c: Send received KISS frames to system internal AX.25 network, if host has such (such as Linux) 2008-02-03 Matti Aarnio - OH2MQK - KP20NG * configure.in, netax25.c, autodetect header , and libutil function openpty(). * netax25.c, aprx.h, aprx.c: Rearranged netax25 module initing - to happen _latter_. * ttyreader.c, aprx.h, netax25.c: kissencoder() function * ttyreader.c, aprx.h, netax25.c: On Linux, use openpty() to create an AX.25pseudo-device on which we then can push AX.25 format packets received from non-AX.25 interfaces. This will itself also _ignore_ packets received from this created interface. * beacon.c: "for" attribute for beacon messages, thus this system can claim to be sending the beacons on behalf of others. * ax25.c, aprx.h: parse_ax25addr() function. * config.c, aprx.8.in, aprx.conf.in: The mycall parameter must be all uppercase AX.25 valid callsign, and must not be same as any other callsign in system internal AX.25 network. (This is meaningful only on Linux systems..) * Makefile.in: Just some cleanup 2008-01-30 Matti Aarnio - OH2MQK - KP20NG * aprsis.c: Spotted watchdog doing reconnects every 2 minutes (like it is supposed to be), and realized that it really should not care what the server says, just that server is saying something... * erlang.c: A bug in backing-store map protection logic. * aprx.c: See if pidfile exists. If it does and the start is not for foreground, refuse to run if process given in the pidfile does exist. * aprx.8.in, config.c, netax25.c, ttyreader.c, aprsis.c, aprx.h, ax25.c, aprx.conf.in, beacon.c: New "callsign" config parameter for "radio serial" ports. messages received from given port are sent out using that callsign. Revamp the whole config parsing. * aprsis.c: Smarter main-loop to aprs-is loop message pass preparation and usage codes -- pass a struct block as message leader. * ttyreader.c, netax25.c, aprsis, ax25.c, beacon.c, aprx.h: Pass explicite parameter towards the APRSIS telling, which callsign (radio receiver) the message came in from. * aprx.h, config.c, ttyreader.c, beacon.c: Rework config parameter line parsing. Just one param is processed by the main config reader loop, any further are tasks of the individual subroutines (ttyreader, beacon) 2008-01-26 Matti Aarnio - OH2MQK - KP20NG * erlang.c: Properly handle r/o share mapping of the aprx.state erlang dataset. This mode is used by the aprx-stat program. * netax25.c, aprx.conf.in, aprx.8.in: For each AX.25 socket received packet, query reception interface address and reformat it to TNC2 format. Use that for reception reports, logs, filters etc. Reason: port names given in /etc/ax25/axports do not persist at all! Even clean system boot may yield different port names than what the file lists. * Version 0.17 * INSTALL, README: Minor edits * configure.in, Makefile.in, debian/rules, rpm/aprx.spec.in, Makefile: A bit more coherency on make system regarding linking. Remove generated Makefile. (Keep generated configure !) * config.c, ttyreader.c, aprx.conf.in, aprx.8.in: Call the "serialport" now with name "radio". (Also old one works, so old config does not break.) * aprx.h, netax25.c, ax25.c, ttyreader.c: Pass port name down to tnc2_rxgate() function where it is used in rf.log outputs. A distributed multi- receiver setup log is somewhat .. odd looking when most receivers get same packet. * logrotate.arpx.in: Rotate weekly, and compress immediately. Monthly turned out to be too much for "embedded" OH1GSM-1 system. 2008-01-12 Matti Aarnio - OH2MQK - KP20NG * configure.in, configure, debian/rules, rpm/aprx.spec.in, rpm/aprx.init, Makefile, config.h.in: More RPM / configure rework. * configure.in, configure, Makefile.in, Makefile, config.h.in, install-sh, rpm/aprx.spec.in, debian/rules: Had to add minimalistic configure script into system for the RPM multi-target compilation to work. * Makefile, rpm/aprx.spec.in, rpm/aprx.default, rpm/aprx.init: RPM package build framework, including init and logrotate -scripts 2008-01-10 Matti Aarnio - OH2MQK - KP20NG * version 0.16 * erlang.c: Make the logged data narrower - to usually fit in 80 char lines. * aprx.c: Always close STDIN from reading, and replace it with a file handle opened on /dev/null. When daemoning, close also STDOUT and STDERR, and replace them with handles writing to /dev/null. .. and do it as late as possible. * aprx.h, aprx.c, config.c, erlang.c, aprx.8.in, aprx.conf.in, aprx-stat.c: Add (and document) option for logging erlang data on separate file without any runtime options or need to divert stdout or syslog anywhere. 2008-01-08 Matti Aarnio - OH2MQK - KP20NG * aprx.h, ttyreader.c, erlang.c, netax25.c, aprx-stat.c: When talking with multi-drop KISS, account each TNC separately. 2008-01-07 Matti Aarnio - OH2MQK - KP20NG * version 0.15 * erlang.c: Do not double-open the state backingstore file * aprsis.c: Remember to close the opened log files. * ttyreader.c: Support case of _no_ serialports (reading only via AX.25 net) * Makefile, logrotate.aprx.in: Put aprx logs on /var/log/aprx/, and have monthly rotate. * debian/*, Makefile: Debian package building infrastructure * aprx.8.in, aprx.conf.in: A bit elaboration on how to add multiple entries of aprsis-server, and serialport definitions. * aprsis.c, ttyreader.c, aprx.8.in, aprx.conf.in: Remove last vestiges of program having any hardwired limits on number of anything. There are (of course) lots of parameters that are singletons, but all multiples are now unlimited (within memory limits..) * Makefile: "make install" does install the CFGFILE (aprx.conf) if it does not have to overwrite the thing. "make dist" is even more interesting beast.. 2008-01-06 Matti Aarnio - OH2MQK - KP20NG * version 0.14 * ttyreader.c, aprx.conf.in, aprx.8.in: Support TNC2 monitor format on reception. * ttyreader.c, aprx.conf.in, aprx.8.in: Overload the "serialport" configuration option with a mechanism to define a IP-literal addressable remote TCP port somewhere with e.g. KISS TNC on it. 2008-01-05 Matti Aarnio - OH2MQK - KP20NG * Makefile: Radical revisioning, Best Current Practice * aprx.c: Write aprx.pid file in all cases, not only when starting as daemon. * version 0.13 * aprx.h, aprx.c, erlang.c, aprx-stat.c: Modifications on shared memory segment head, stores MYCALL, correct running process PID. * INSTALL: Some text fixes * aprx-stat.c, aprx.h, erlang.c: Report also server process PID on the SNMP dataset, and time in seconds since it was started. * ax25.c: Verify TNC2 format APRS message's FROM>DEST,VIA,VIA: callsigns to be of proper syntax. * Makefile, aprx.8, aprx.8.in, aprx-stat.8, aprx-stat.8.in, aprx.conf, aprx.conf.in: Centralized a bit of configuring into Makefile, generating files from *.in versions. * aprxpolls.c: Library function used everywhere, part of "eliminate fixed size preallocations" -task. * aprsis.c: Debug logging improvements, parent death detection. Preserved MAXAPRSIS setting - of 10 servers. * ttyreader.c: Unfix the number of TTYs, now can be as many as one wants. * config.c, aprx.c, aprx.h, aprx.conf.in, aprx.8.in: pidfile configuration parameter, and its usage 2008-01-04 Matti Aarnio - OH2MQK - KP20NG * VERSION, arpx.c, Makefile, aprx.8, aprx.8.in, aprx-stat.8, aprx-stat.8.in: Define system version in VERSION file, have it stamped on programs and packages. * config.c: The "aprxlog" and "rflog" parameters were interchanged at some point. * aprx.c, aprsis.c, beacon.c: Complain loudly with -d or -v options on, and if the configuration does not set global mycall parameter. Do not refuse to run, though! This is perfectly valid for things like Erlang-monitoring. 2007-12-29 Matti Aarnio - OH2MQK - KP20NG * version aprx-v0.12 * PROTOCOLS: Writeup of existing (and planned) protocols that this software uses. * ax25.c: Correct processing of 3rd-party frames. Also separate TNC2 formatted frame Rx-igateing rules from AX.25-to-TNC2 format translation routine. * ax25.c, beacon.c, aprsis.c: Centralize the APRSIS communication line ending CRLF char pair addition into common code, not distributed all over. 2007-12-25 Matti Aarnio - OH2MQK - KP20NG * version aprx-v0.11 * TODO, README: Cleanup * config.c, netax25.c, aprx.8, aprx.conf: Config option "ax25-rxport" - Limits acceptance of APRS packets only from listed Linux AX.25 ports. * ttyreader.c, aprx.conf, aprx.8: Reworked a bit of the serialport config options. Now initstring, and various KISS modes are configurable * erlang.c: Carefull approach on erlang-file opening, if file exists, and is non-zero size, open it only if magics match. * config.c: config_SKIPTEXT() terminates all scanned strings with NUL byte, and moves to byte following it, if the termination byte was not a NUL byte originally. * aprx-stat.c, aprx-stat.8: Option -t to show timestamps differently. * Makefile, man-to-html.sh: Produce decent format HTML versions of the man-pages. * config.c, erlang.c, aprx.8, aprx.conf: Added "erlang-log1min" option to control 1 minute interval Erlang sampling logging behaviour. * Makefile: Fix "make install" of man-pages * version aprx-v0.10 * aprx-stat.c, aprx-stat.8, erlang.c, Makefile: Statistics reporter tool. * aprsis.c, config.c, aprx.8, aprx.conf: Multiple aprsis-server config definitions are now supported, and used in round-robin fashion. * ax25.c, config.c, aprx.8, aprx.conf: Config option ax25-filter * ttyreader.c, erlang.c: Magic channel capacity constant expressions updated.. 2007-12-23 Matti Aarnio - OH2MQK - KP20NG * aprx.c, aprx.h, aprsis.c, aprx.8, aprx.conf, ax25.c, erlang.c: Multiple configuration file options, rf-log, and aprx-log -files, related documentation. * config.c, aprx.8: Special quoted-string escape processing. * version aprx-v0.08 * erlang.c, aprx.c, aprx.h: Erlang data has now a mmap():ed filesystem based backing-store. Erlang-data can be syslog()ed, and independently of that, it can be printed on STDOUT. Default syslog facility is "NONE". * Great Rename -- the thing is now called: aprx 2007-12-06 Matti Aarnio - OH2MQK - KP20NG * aprsg.8, erlang.c, aprsg.c, netax25.c, ttyreader.c: Erlang logging now uses syslog(3), unless explicitely told to use output to stdout. Also the Erlang log format was altered a bit, now it reports also number of packets in the interval. * erlang.c, Makefile: "make ERLANG1=1" compiles in also 1 minute erlang logging interval. * aprsis.c: Code refactored to put the APRS-IS communication into its own fork()ed sub-process communicating via a socketpair() with the main loop. Now reconnection time with the APRS-IS server does not affect functionality of the main loop. 2007-12-05 Matti Aarnio - OH2MQK - KP20NG * ChangeLog Opened for the first time. Version 0.06. aprx-2.9.0/INSTALL000664 000000 000000 00000002510 13040775352 013511 0ustar00rootroot000000 000000 INSTALL of APRX 2 Instructions for how to build Debian apt packages are provided at the end of this file A rough-cut version of the installation instructions 0) Prerequisites: Does not need anything beside standard libc! (In particular the Linux version does not need libax25 / libax25-dev !) 1) Start with ./configure --parameters For a small memory system without writable /tmp you have to use --with-embedded option. 2) Cleanliness is good start: $ make clean 3) Compile the thing: $ make 4) There is automatic "install" as: # make install with several presumptions about directories fixed into the Makefile (possibly some adjustments are required, depending upon your environment.) 5) Edit the configuration file to match your system: # $EDITOR /etc/aprx.conf See the aprx(8) man-page for more info (man 8 aprx) 6) Program startup scripts ("init-scripts") exist for a couple system environments, others may need manual adapting. For Debian users wanting to compile themselves instead of using precompiled binaries: # aptitude install git build-essential debhelper libssl-dev $ git clone https://github.com/PhirePhly/aprx.git $ cd aprx $ ./configure $ make make-deb # dpkg -i ../aprx_....deb aprx-2.9.0/LICENSE000664 000000 000000 00000002757 13040775352 013502 0ustar00rootroot000000 000000 Copyright (c) 2007-2014, Matti Aarnio 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 Matti Aarnio 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 OWNER 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. aprx-2.9.0/Makefile.in000664 000000 000000 00000014000 13040775352 014522 0ustar00rootroot000000 000000 # # APRX -- 2nd generation receive-only APRS-i-gate with # minimal requirement of esoteric facilities or # libraries of any kind beyond UNIX system libc. # # Note: This makefile uses features from GNU make # -------------------------------------------------------------------- # # target paths VARRUN= /var/run # directory for aprx.state and pid-file VARLOG= /var/log/aprx # directory for direct logfiles CFGFILE= @sysconfdir@/aprx.conf # default configuration file SBINDIR= @sbindir@ # installation path for programs MANDIR= @mandir@ # installation path for manual pages # -------------------------------------------------------------------- # srcdir = @srcdir@ VPATH = @srcdir@ @SET_MAKE@ PROF= # used by 'make profile' # Compiler and flags CC= @CC@ CFLAGS= @CFLAGS@ @CCPTHREAD@ # Linker and flags LD= @CC@ LDFLAGS= @LDFLAGS@ $(PROF) datarootdir= @datarootdir@ INSTALL= $(srcdir)/install-sh INSTALL_PROGRAM=$(INSTALL) -m 755 INSTALL_DATA= $(INSTALL) -m 644 # -------------------------------------------------------------------- # # no user serviceable parts below # -------------------------------------------------------------------- # # strip extra whitespace from paths VARRUN:=$(strip $(VARRUN)) VARLOG:=$(strip $(VARLOG)) CFGFILE:=$(strip $(CFGFILE)) SBINDIR:=$(strip $(SBINDIR)) MANDIR:=$(strip $(MANDIR)) # generate version strings VERSION = $(shell echo @VERSION_STRING@ | cut -b 2-) DATE:=$(shell date +"%Y %B %d") RFCDATE:=$(shell date +"%a, %d %b %Y %H:%M:%S %z") DEFS= -DAPRXVERSION="\"$(VERSION)\"" \ -DVARRUN="\"$(VARRUN)\"" -DVARLOG="\"$(VARLOG)\"" \ -DCFGFILE="\"$(CFGFILE)\"" # program names PROGAPRX= aprx PROGSTAT= $(PROGAPRX)-stat LIBS= @LIBS@ @LIBRESOLV@ @LIBSOCKET@ @LIBM@ @LIBPTHREAD@ @LIBGETADDRINFO@ @LIBRT@ OBJSAPRX= aprx.o ttyreader.o ax25.o aprsis.o beacon.o config.o \ netax25.o erlang.o aprxpolls.o telemetry.o igate.o \ cellmalloc.o historydb.o keyhash.o parse_aprs.o \ dupecheck.o kiss.o interface.o pbuf.o digipeater.o \ valgrind.o filter.o dprsgw.o crc.o agwpesocket.o \ netresolver.o timercmp.o #ssl.o OBJSSTAT= erlang.o aprx-stat.o aprxpolls.o valgrind.o timercmp.o # man page sources, will be installed as $(PROGAPRX).8 / $(PROGSTAT).8 MANAPRX := aprx.8 MANSTAT := aprx-stat.8 OBJS= $(OBJSAPRX) $(OBJSSTAT) MAN= $(MANAPRX) $(MANSTAT) # -------------------------------------------------------------------- # .PHONY: all all: $(PROGAPRX) $(PROGSTAT) man aprx.conf aprx-complex.conf valgrind: @echo "Did you do 'make clean' before 'make valgrind' ?" make all CFLAGS="${CFLAGS} -D_FOR_VALGRIND_" profile: @echo "Did you do 'make clean' before 'make profile' ?" make all PROF="-pg" $(PROGAPRX): $(OBJSAPRX) VERSION Makefile $(LD) $(LDFLAGS) -o $@ $(OBJSAPRX) $(LIBS) $(PROGSTAT): $(OBJSSTAT) VERSION Makefile $(LD) $(LDFLAGS) -o $@ $(OBJSSTAT) $(LIBS) .PHONY: man man: $(MAN) .PHONY: doc html pdf doc: html pdf pdf: $(MAN:=.pdf) html: $(MAN:=.html) # -------------------------------------------------------------------- # .PHONY: install install-deb install: all $(INSTALL_PROGRAM) $(PROGAPRX) $(DESTDIR)$(SBINDIR)/$(PROGAPRX) $(INSTALL_PROGRAM) $(PROGSTAT) $(DESTDIR)$(SBINDIR)/$(PROGSTAT) $(INSTALL_DATA) $(MANAPRX) $(DESTDIR)$(MANDIR)/man8/$(PROGAPRX).8 $(INSTALL_DATA) $(MANSTAT) $(DESTDIR)$(MANDIR)/man8/$(PROGSTAT).8 if [ ! -f $(DESTDIR)$(CFGFILE) ] ; then \ $(INSTALL_DATA) aprx.conf $(DESTDIR)$(CFGFILE) ; \ else true ; fi .PHONY: clean clean: rm -f $(PROGAPRX) $(PROGSTAT) rm -f $(MAN) $(MAN:=.html) $(MAN:=.ps) $(MAN:=.pdf) \ rm -f aprx.conf logrotate.aprx rm -f *~ *.o *.d .PHONY: distclean distclean: clean rm -f config.log config.status config.h rm -rf autom4te.cache *.log* doc/.~*# # -------------------------------------------------------------------- # %.o: %.c VERSION Makefile $(CC) $(CFLAGS) $(PROF) $(DEFS) -c $< @$(CC) -MM $(CFLAGS) $(PROF) $(DEFS) $< > $(@:.o=.d) $(MAN:=.html): %.html : % sh man-to-html.sh $< > $@ $(MAN:=.ps): %.ps : % groff -man $< > $@ $(MAN:=.pdf): %.pdf : %.ps ps2pdf $< logrotate.aprx $(MAN) aprx-complex.conf aprx.conf: % : %.in VERSION Makefile perl -ne "s{\@DATEVERSION\@}{$(VERSION) - $(DATE)}g; \ s{\@VARRUN\@}{$(VARRUN)}g; \ s{\@VARLOG\@}{$(VARLOG)}g; \ s{\@CFGFILE\@}{$(CFGFILE)}g; \ print;" \ < $< > $@ # -------------------------------------------------------------------- # # # Following is for the original author only... # DISTVERSION:=aprx-$(VERSION) DISTTARGET:=../$(DISTVERSION) RPMVERSION:=$(shell echo "${DISTVERSION}" | sed -e 's/aprx-//') .PHONY: dist dist: if [ ! -d $(DISTTARGET) ] ; then \ mkdir $(DISTTARGET) ; \ fi tar cf - --exclude-backups --exclude-vcs --exclude=windows --exclude=*.log* --exclude=*.conf . | (cd $(DISTTARGET) ; tar xf -) echo "$(DISTVERSION)" > $(DISTTARGET)/VERSION perl -ne "\$$ver = '$(DISTVERSION)'; \ \$$ver =~ tr/0-9.//cd; \ \$$ver .= '-1'; \ s{\@VERSION\@}{\$$ver}g; \ s{\@RFCDATE\@}{$(RFCDATE)}g; \ print;" \ < $(DISTTARGET)/debian/changelog.release \ > $(DISTTARGET)/debian/changelog rm -f $(DISTTARGET)/debian/changelog.release rm -f $(DISTTARGET)/aprx.spec perl -ne "s{\@VERSION\@}{$(RPMVERSION)}g; \ s{\@DATE0\@}{$(DATE0)}g; \ print;" \ < $(DISTTARGET)/rpm/aprx.spec.in \ > $(DISTTARGET)/aprx.spec rm -f $(DISTTARGET)/rpm/aprx.spec.in make -C $(DISTTARGET) distclean cd .. && \ tar czvf $(DISTVERSION).tar.gz $(DISTVERSION) # -------------------------------------------------------------------- # .PHONY: make-deb make-rpm make-deb: if [ -f debian/changelog.release ] ; then \ perl -ne "\$$ver = '$(VERSION)'; \ s{\@VERSION\@}{\$$ver}g; \ s{\@RFCDATE\@}{$(RFCDATE)}g; \ print;" \ < debian/changelog.release \ > debian/changelog ; \ fi dpkg-buildpackage -b -us -uc -rfakeroot make-rpm: # actually just a reminder of how to do it.. rpmbuild --target i386 -ta ../$(DISTVERSION).tar.gz # -------------------------------------------------------------------- # # include object depencies if available -include $(OBJS:.o=.d) aprx-2.9.0/PROTOCOLS000664 000000 000000 00000017450 13040775352 014000 0ustar00rootroot000000 000000 Protocols spoken by APRX There are a few protocols spoken by the APRX: 1) APRS-IS interchange 2) Proprietary monitoring via shared memory segment 3) APRX-APRXC linkage APRS-IS interchange This protocol is fairly simple. http://wiki.ham.fi/IGate_properties APRS iGate Common Properties Communication is over TCP streams of text lines terminating at CR+LF pair. No CR or LF is permitted inside the text line, however. APRS-IS user authentication: user USERID pass PASSCODE vers VERS STRINGS \ filter FILTER STRINGS where 'USERID' is uppercase callsign plus possible "-SSID" tail. The 'PASSCODE' is calculated with semi-secret algorithm out of the uppercase callsign characters without '-' and SSID tail. The 'VERS STRINGS' are free to be anything, except string 'filter', and the 'FILTER STRINGS' are explained in document: http://www.aprs-is.net/ServerCmds.htm http://www.aprs-is.net/javAPRSSrvr/javaprsfilter.htm Messages: Lines beginning with '#' character are line noise (usually something that the server replies..) After successfull login, communication carries "TNC2" format APRS messages. Namely text encoding of AX.25 UI frames in what became known as "TNC2 monitor style": SOURCE>DESTIN:payload SOURCE>DESTIN,VIA,VIA:payload The SOURCE, DESTIN, and VIA fields are AX.25 address fields, and have "-SSID" value annexed if the SSID is not zero. Also in VIA-fields, if the "HAS BEEN DIGIPEATED" bit is set (AX.25 v2 protocol feature) a star ('*') character is appended. VIA-fields are separated by comma (',') from DESTIN, and each other. A double-colon (':') separates address data from payload. The payload is passed _AS_IS_ without altering any message content bytes, however ending at first CR or LF character encountered in the packet. APRS-RX iGate Basic Rules Packets with source addresses: NOCALL*, N0CALL*, WIDE*, TRACE*, TCP*, are dropped and not relayed to APRS-IS. Packets with VIA addresses: RFONLY, NOGATE, TCPIP, TCPXX are not to be relayed to APRS-IS. Sometimes the VIA fields have '*' on their tails. Packets with payload beginning with character '?' are not to be relayed to APRS-IS. Packets with payload beginning with character '}' are so called 3rd-party frames, and they are to be re-processed starting from character following the '}' character. When packet is sent to APRS-IS, the address gets appended either a "q-construct", or equivalent: ,qAR,gatecallsign ,gatecallsign,I The "qAR" et.al. are explained at: http://www.aprs-is.net/q.aspx APRS-TX iGate has additional rules: All rules: http://www.aprs-is.net/IGateDetails.aspx Specifically forbidden to relay to RF is "qAX", maybe some others too. (See: http://www.aprs-is.net/q.aspx) If the packet VIA-path received from APRS-IS contains TCPXX, NOGATE, RFONLY, then the packet is to be dropped, and not relayed to radio network. (Note: TCPIP is permitted.) Packets relayed from APRS-IS to radio must use so called 3rd-party format. Signature is '}' character. Rules on re-sending recently heard packets are a bit more complex, and are covered adequately in above referenced document. Proprietary monitoring mechanism There is a tool for monitoring channel activity. See aprx-stat(8) APRX-APRXC linkage (For a feature in planning...) With introduction of APRX-Cluster (APRXC) mode, multiple APRX instances are used as remote attachments to TNCs, and one central system runs more complicated business logic deciding which messages to pass where, what beacons to send, etc. The central business-logic server runs also connection with APRS-IS, and all things that it implies. Actually the APRX-Cluster-Server is APRX program version with embedded Perl for business logic. Some very flexibly configurable APRS digi software has practical limitations of what the config can do. Environmental pre-requisite: APRXC and APRX nodes are in NTP sync! The Protocol: Communication is of text lines over TCP stream, they are canonic Internet format ending with CRLF pairs. However no embedded CR, nor LF is permitted. (detail under study: UDP frames, or SCTP SEQPACKET ?) The protocol is bidirectional, and is intended to be connected from edge systems to cluster server. Upon receiving a connection the server sends a greeting containing time-varying string. This will be used by the connecting party to do authentication in APOP-style. The timestamps in this protocol are "U" format: sprintf(timestamp, "U%ld", (long)time(NULL)); which is to say, integer presentation of UNIX internal time in whole seconds. In following ">>" mean data sent by central system and received by the edge, whereas "<<" means data sent by edge system to central system. << (connection formation from edge to the server) >> Hello <++counter> some greeting string << LOGIN >> OK << SERVICE { RX | TX } >> OK The is formed by hex (lower case) encoding of 16 byte MD5() checksum over the whole greeting string (sans CRLF), plus userid, plus shared plaintext password. Replies can also be "FAIL", if "LOGIN" or "SERVICE" is somehow bad. The is local interface name in given node. The is radio channel bitrate. The are filter statements in APRS-IS style. The edge system compares every received timestamp (aside of the login-sequence above) with its internal time reference, and if the time varies more than 3 seconds from expected, the received frame is discarded. If APRXC Server notes that the time stamp it received is more than 3 seconds in future or in past, it rejects the message. (This does not apply to ERLANG verbs.) The APRXC server acknowledges every received message with: >> OK Link idle jabber is by done by both systems by sending "TIME" verbs. They are sent every 20 seconds since previous transmit of anything on the connection, and if either notes that link has not received anything for 120 seconds, the link is considered to be down, closed, and re-initiated. << TIME >> OK >> TIME << OK Either system can initiate the "heartbeat", sometimes even both may send the TIME verbs at the same time, but both are not required to do so. The edge system sends received APRS frames to the central system in "TNC2" format in a command: << APRS The is the data received from radio as is without any APRS-IS -type additional parameters inserted into address field. When central system wants that a TX capable edge system transmits something, it sends following message: >> APRSTX the edge system will transmit the frame as is (the APRXC will format the message to be ready for transmit.) If the edge system can not transmit on given interface, it reports: << FAILTX which results from APRXC and/or APRX software bug listing/flagging tx-interface to be non-tx-interface.. Otherwise it acks the packet with "OK" message. << OK Edge systems send 1 minute ERLANG data to central system with verb: << ERLANG \ [ ] >> OK (Long line is folded in UNIX-style in this documentation. Data is ACKed with OK.) The APRXC collates these to 1 minute, 10 minute and 60 minute datasets of given timestamp. The measured erlang-values are optional, if edge system can produce truthfull ones. The time-series collation database is persistent, for example RRD. aprx-2.9.0/README000664 000000 000000 00000007331 13040775352 013346 0ustar00rootroot000000 000000 APRX v2.9 A multitalented APRS / DPRS / APRSIS "i-gate" with following properties: Config file (-f option) default is: /etc/aprx.conf Other runtime options are: -v, -d, -h/-? (verbout, debug and help) - Rx-IGate functionality works correctly - Tx-IGate functionality works correctly - Can do APRS New-N and generic AX.25 node digipeater functionality with transmitters - Has same-channel Viscous Digipeater functionality to not to digipeat at all, if during initial wait period the packet is heard again. - Has cross-interface Viscous Digipeater functionality to not to digipeat, if during the initial wait period the packet is heard on destination interface at least once, and at least once from other sources. - Can receive data from multiple receivers/modems on local machine serial ports, both classical and USB. - Can receive data from remote TCP stream connectable serial ports over the internet. - Understands on serial ports (local and remote TCP ones): - several KISS protocol variants, checksummed variants preferred - TNC2 debug style text (Rx-iGate receive only.) - D-STAR data side-channel "D-PRS" - Connects with one callsign-ssid pair to APRS-IS core for all received radio ports (the "mycall" parameter), but reports receiving radio port at each Rx-iGated packet - Knows that messages with following tokens in VIA fields of the path are not to be relayed into network: RFONLY, NOGATE, TCPIP, TCPXX - Knows that following source address prefixes are bogus and thus to be junked at Rx-iGate: WIDE, RELAY, TRACE, TCPIP, TCPXX, NOCALL, N0CALL (Actually these are string prefixes, so any WIDE*-* will block, etc.) - Has integrated D-PRS -> APRS/APRSIS Rx-iGate. Can even do D-PRS -> APRS RF conversion. This is experimental quality for "GPS" packets, the "GPS-A" is OK. - Does not require machine to have AX.25 protocol support internally! - On Linux machine with kernel internal AX.25 protocol support, does listen on internal AX.25 network in promiscuous form, and requires to be running as root to do that. Does not fail to start in case the port fails to open (running as non-root.) - Built-in "erlang-monitor" actually counts bytes per time interval (1 min, 10 min, and 20 min) on each receiving interface, including all that feed internal AX.25 network. - Telemetry reported erlang data is sent out every 20 minutes, and contains summarized data from 10 minute round-robin memory arrays. These are _not_ sent at exact 10 minutes of wall-clock, but exact 20 minutes from previous telemetry reporting, and first one is sent 20 minutes after program start. - Telemetry reported erlang data can be sent also over APRS radio port, but only for ports with valid AX.25 callsigns. See aprx-manual.pdf - The netbeacons are distributed timewise more evenly around the interval, and even the interval length is varied at random in between 20 and 30 minutes. Number of netbeacons are unlimited, but their minimum transmit interval is 3 seconds making the amount of beacons sendable in 20 minutes to be: 20*60/3 = 400. All will be sent, but the cycle will just take longer. - Source code is at SVN repository: http://repo.ham.fi/svn/aprx - A Wiki page of this package: http://wiki.ham.fi/Aprx.en - A google-group for Aprx: http://groups.google.com/group/aprx-software - This program is also compilable as "EMBEDDED" target without any statistics buffer required at the system disk (or RAM-disk). See the INSTALL file. by Matti Aarnio - OH2MQK - oh2mqk-at-sral-fi - 2007-2014 aprx-2.9.0/ROADMAP000664 000000 000000 00000000404 13040775352 013466 0ustar00rootroot000000 000000 APRX ROADMAP v2.9.x - Stable release with only bug-fixes Pretty much everyone should be using this version v2.10.x - Development branch for new feature experimentation Version for developers who'd like to help test new features for Aprx aprx-2.9.0/TIMESTAMP-AT-APRSIS000664 000000 000000 00000022363 13040775352 015257 0ustar00rootroot000000 000000 A PROPOSAL FOR TIMESTAMPS AT APRSIS It can be taken as granted that today at least server systems are running with NTP service keeping their system clocks within a few milliseconds of UTC time. Systems utilized as APRS IGATE should be able to utilize NTP service as well, and keep their internal time well disciplined. SimpleNTP clients are available even for embedded system code bases making all kinds of internet capable systems able to have high quality time management. Timestamps are added on APRS text lines as prefixes of 8 characters. Eighth character is always ':'. Details are in "ENCODING" part. TRANSPORT COMPATIBILITY As APRSIS clients would not know at first what to do with the timestamps, a transport compatibility must be introduced: * APRSIS server announces on its connection message that it is TIMESTAMP capable, and clients MUST NOT send timestamps to APRSIS server without that capability # telnet aprsisserver 14580 Connected to aprsisserver Escape character is '^]'. # javAPRSSrvr 4.0b1 [APRSIS TIMESTAMP] Capability announcements follow style of IMAPv4 protocol, where capability tokens are in square brackets, and are separated by space character. * If a client does not send timestamped data to APRSIS, APRSIS server adds the timestamp upon receiving the line. APRSIS server does this conditional timestamping also for packets received via UDP for initial deployment compatibility. * An APRSIS server connected to upstream with TCP is a client, and must strip received/internal timestamps from packets sent to upstream, if the upstream does not announce TIMESTAMP capability. If upstream does not send timestamps for any reason, APRSIS server adds it locally. * A client that has not announced timestamp awareness does not receive timestamps from APRSIS, and furthermore, APRSIS is filtering all packets with maximum age of 15 seconds. * A client that sends to APRSIS a text line with recognized timestamp will get also timestampped lines sent up to itself. No maximum age filtering is applied to clients that are timestamp capable, and therefore those clients must be able to do timestamp age analysis themselves. Special timestamp-line "AAAAAAA:\n" tells APRSIS server, that the client is APRSIS aware, and while it has nothing to actually send to APRSIS at this time, it does want all data sent to it to contain timestamps. APRSIS server software needs a configuration parameter udptimestamps = which defaults to "false". When the value is "false" the software will not send timestampped data to core peer machines over UDP. There probably is no need for an Adjunct Filter that knows about timestamps. INITIAL DEPLOYMENT OF TIMESTAMP CAPABILITY Because APRSIS core uses UDP protocol, and thus can not be aware of remote node capabilities, the deployment of timestamp aware APRSIS servers at APRSIS core has two phases: 1) Software has configuration parameter "udptimestamps" non defined or defined as "false". 2) After all core APRSIS systems are running timestamp aware software, the configuration parameter can be changed to "udptimestamps = true" and APRSIS server starts to send timestamped packets over UDP to all of its peers. --> peer machines do not need to locally add timestamps at reception time. Everybody else can take TIMESTAMP capable system into use at any time that is convenient to them, unless communication involves UDP. ENCODING Use NTP timestamp (see RFC 2030) based time abstraction: Since NTP timestamps are cherished data and, in fact, represent the main product of the protocol, a special timestamp format has been established. NTP timestamps are represented as a 64-bit unsigned fixed-point number, in seconds relative to 0h on 1 January 1900. The integer part is in the first 32 bits and the fraction part in the last 32 bits. In the fraction part, the non-significant low order can be set to 0. Take highest 32+10 bits of the timestamp, and encode those in BASE64 characters, most significant character first. This produces 7 encoded characters with time resolution of 1/1024 seconds. With 6 encoded characters the time resolution would be 1/16, which is felt to be too coarse. A hex encoded byte sequence of NTP timestamp looks like this: cf b4 ff a4 b5 a8 8b f9 it represent timestamp 3484745636.709603071 (2010/06/05 19:53:56) and encoded timestamp value is: z7T/pLW The APRSIS passes around APRS messages as lines of text: OH2JCQ>APX195,TCPIP*,qAC,T2FINLAND:=6013.63N/02445.59E-Jani Adding 7 character encoded timestamp + ":" character in the beginning of a line would make this: z7T/pLW:OH2JCQ>APX195,TCPIP*,qAC,T2FINLAND:=6013.63N/02445.59E-Jani There 8th character is always ':', and preceding 7 bytes present _current_ timestamp at 1/1024 second resolution. Timestamp value "AAAAAAA:" is "no timestamp" (decodes as time 0.0) and a client can use it to tell that it has no idea of timestamp, but it wants to receive timestamped data. An APRSIS data collector can enable timestamp reception by sending line: "AAAAAAA:\n". Packets with timestamps outside -1 to +N seconds limits are sign that communication is retrying too much, or otherwise delayed, and such packets are to be discarded. (Services like APRSFI, FINDU et.al. may want even older packets!) To be compatible with NTP Era roll-over, the timestamp must really be treated as 64-bit unsigned long integer, and compared with twos complement arithmetic using overflows. TIMESTAMP ENCODING CODE EXAMPLE Example UNIX system C code to produce and encode a timestamp: // Time Base Conversion Macros // // The NTP timebase is 00:00 Jan 1 1900. The local // time base is 00:00 Jan 1 1970. Convert between // these two by added or substracting 70 years // worth of time. Note that 17 of these years were // leap years. #define TIME_BASEDIFF (((70U*365U + 17U) * 24U*3600U)) #define TIME_LOCAL_TO_NTP(t) ((t)+TIME_BASEDIFF) void unix_tv_to_ntp(struct timeval *tv, uint64_t *ntp) { // Reciprocal conversion of tv_usec to fractional NTP seconds // Multiply tv_usec by ((2^64)/1_000_000) / (2^32) uint64_t fract = 18446744073709ULL * (uint32_t)(tv->tv_usec); // Scale it back by 32 bit positions fract >>= 32; // Place seconds on upper 32 bits fract += ((uint64_t)TIME_LOCAL_TO_NTP(tv->tv_sec)) << 32; // Deliver time to caller *ntp = fract; } static const char *BASE64EncodingDictionary = "ABCDEFGHIJKLMNOPQRSTUVWXYZ" "abcdefghijklmnopqrstuvwxyz" "0123456789" "+/"; void encode_aprsis_ntptimestamp(uint64_t ntptime, char timestamp[8]) { int i; ntptime >>= 22; // scale to 1/1024 seconds for (i = 6; i >= 0; --i) { int n = (((int)ntptime) & 0x3F); // lowest 6 bits // printf(" [n=%d]\n", n); ntptime >>= 6; timestamp[i] = BASE64EncodingDictionary[n]; } timestamp[7] = 0; } static const int8_t BASE64DecodingDictionary[128] = { -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, -1, -1, -1, -1, -1, -1, -1, -1, // ' ', '!', '"', '#' -1, -1, -1, -1, // '$', '%', '&'', '\'' -1, -1, -1, 62, // '(', ')', '*', '+', -1, -1, -1, 63, // ',', '-', '.', '/' 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, // '0' .. '9' -1, -1, -1, -1, -1, -1, // ':', ';', '<', '=', '>', '?' -1, 0, 1, 2, 3, 4, 5, 6, // '@', 'A' .. 'G' 7, 8, 9, 10, 11, 12, 13, 14, // 'H' .. 'O' 15, 16, 17, 18, 19, 20, 21, 22, // 'P' .. 'W' 23, 24, 25, -1, -1, -1, -1, -1, // 'X'..'Z', '[', '\\', ']', '^', '_' -1, 26, 27, 28, 29, 30, 31, 32, // '`', 'a' .. 'g' 33, 34, 35, 36, 37, 38, 39, 40, // 'h' .. 'o' 41, 42, 43, 44, 45, 46, 47, 48, // 'p' .. 'w' 49, 50, 51, -1, -1, -1, -1, -1 }; // 'x'..'z', ... int decode_aprsis_ntptimestamp(char timestamp[8], uint64_t *ntptimep) { uint64_t ntptime = 0; int i, n; char c; for (i = 0; i < 7; ++i) { c = timestamp[i]; if (c <= 0 || c > 127) return -1; // BARF! n = BASE64DecodingDictionary[(int)c]; // printf(" [n=%d]\n", n); if (n < 0) { // Should not happen! return -1; // Decode fail! } ntptime <<= 6; ntptime |= n; } ntptime <<= 22; *ntptimep = ntptime; return 0; // Decode OK } You may choose to produce timestamps with coarser resolution than 1/1024 seconds. Let least significant bits to be zero. The about 1 millisecond resolution is a compromise in between 1 second, and sub-nanosecond resolutions. A heavy producer and consumer of timestamps, like an APRSIS server, may have single thread waking up 10 times per second and producing a new timestamp object every time, and overwriting global storage pointer to "current" one. For access there is no need to do any sort of synchronizations. Then received messages just copy that timestamp if necessary, and not run its production by themselves. Note: There is no need to convert NTP timestamps to local time in this application. It is quite enough that system receiving NTP timestamps does regularly create current reference NTP timestamp to be able to determine offset from received timestamp to reference time. aprx-2.9.0/TODO000664 000000 000000 00000012360 13040775352 013154 0ustar00rootroot000000 000000 APRX 2.09 BUGS / TODO / Wishlist - Digipeater working wrong: oz1ekd> oh2mqk - it seems like KG4PID is right, aprx does not digipeat as it should, mine set to "non viscous" and "not direct-only" live log at: http://stave.dk/aprx From: kg4pid@yahoo.com Subject: Re: RF beacons vs TCPIP* (was: 2.08 r593 Not digipeating correctly) As far as I know all the digi's in this area insert their calsign in the packet. I do see some beacons being digied and igated by other stations just not as many as I think I should. You maybe right about receiving my own beacon after a digipeat as I have seen that happen before. It would be nice if it was marked somehow and what digi heard me. They look just like the telemetry packets that I know are sent direct. Max 20140417070330,KG4PID-14>APRX28,TCPIP*,qAC,FIRENET1:T#014,23.6,4.3,101.0,0.0,17.0,00000000 20140417070351,KG4PID-14>APRX28,TCPIP*,qAC,FIRENET1:>Digi/Igate kg4pid at yahoo dot com 20140417071955,KG4PID-14>APRX28,WIDE2-2,qAR,N4XWC:!3417.45N/08742.32W#PHG7250 Bear Creek, Al - Add to RF-log all packets dropped due to bad bits; use HEX dump, and type tag 'D'. Use type tag 'd' with text dump when APRS-IS dropped the frame for one reason or other (network timeouts mostly) - "[Aprx] Re: Bi-Directional Cross-band Digipeater" Probably heard sources accounting bucket initializing as zero, which was fixed recently. (2.07ish) - SSL mode to talk to APRS-IS. (Aprsc speaks SSL very efficiently.) - SCTP communication protocol to APRS-IS matching Aprsc's code - Embedded Perl and/or Python? That would allow folks to cook up arbitrary action scripts for who knows what purposes... - Socket API to send/receive/monitor packets? To get Protocol Buffer or JSON/BSON wrapped datasets of parsed frame including lat/lon of the packet, type info, etc. ? - BPQ32 protocol? - AWGPE protocol? - Copy-of-APRSIS ? (okay(ish) for monitor + transmit to APRS-IS..) - Message destined to $MYCALL to be logged at at syslog INFO level, and acknowledged(?) - Tx-IGate filter rules (interface.c) Tx-IGate is lacking following things, but it is already doing most important ones ('recipient heard recently in my service area') - figure out (at parse_aprs() ?) the number of hops a packet has traversed so far, and log that on historydb (for recipient "locality" analysis) - test that message recipients known coordinates are within "my service area" --> separate filter from adjunct-style areas or distances? - for position-less packets, send at first a position packet for same source callsign, if available - Digipeater behaviour on "requested wideness exceeds allowed max limit" and this is a directly heard packet: - now mark all H-bits set - ADDITION: inject transmitter callsign into first VIA slot. - Digipeating details of non-APRS UI protocols? Some way to handle "WIDEn-N" on selected PIDs? - OpenTRAC support ? (UI, PID=0x77) - Yes, on DIGIPEATER ONLY - what about WIDEn-N ? Y/N ? - Windows port? - Colorize debug printout (or make another tool to colorize aprx-rf.log) - rx-packets green (or blue), tx-packets red - port names/callsigns bolded, same with packet source callsigns - Use internal APRS packet parser to validate beacon configurations. This should be able to flag bad input on RAW beacon data. - Calculate and note APRS DXes (like digi_ned does) ? - Calculate ALOHA range, and publish it? - Embedded SNTP client? (Reads NTP time from 127.0.0.1:123 - or configured external source) Supports Aprx-Aprx clustered protocol where all messages are equipped with NTP timestamp and if in receiver's opinnion the time is too far off, the network delays have been excessive and message is discarded. This SNTP client _does_ _not_ adjust host system clock, only tracks difference of it against a high(er)-quality NTP service elsewere. The difference and drift parameters are used to convert current system gettimeofday() result to NTP timestamp within the code, and to determine how old something is, a NTP timestamp is compared against "current time." If Aprx System has no time at all, one SNTP probe is made to determine "initial system time". This SNTP client will have two time management states: - "current time" - "new time" If SNTP probes return times that agree with "current time", the "new time" accumulator is discarded, and possible minor drift sync is done on "current time." If SNTP probes return times that do not agree with "current time", then a "new time" accumulator is used to track the time. If the "new time" is consistently tracked for 5 samples, "new time" becomes "current time". BoB: Shucks, it would sure be nice if EVERY DIGIPEATER also had a little smarts and could also report on its own RSSI. That would give some people a clue what the digipeater is hearing on its input. In its 10 minute beacon it could report: "176RX, 109TX, 243 busy" ON a ten minute basis (total 600 1 sec slots) this tells us that 176 packets were decoded at this site, 109 were elegible for further digipeating, and another 243 seconds the channel was busy with other collisions and non decodable traffic. Leaving 72 secnds the channel was clear. by Matti Aarnio - OH2MQK - oh2mqk-at-sral-fi - 2007-2014 aprx-2.9.0/VERSION000664 000000 000000 00000000007 13040775352 013527 0ustar00rootroot000000 000000 v2.9.0 aprx-2.9.0/ViscousDigipeater.README000664 000000 000000 00000004533 13040775352 016777 0ustar00rootroot000000 000000 Viscous Digipeater in APRX The Viscous Digipeater is variation of AX.25 Digipeater, which puts arriving packets into a time delay probation pipe (up to 9 seconds), before digipeating them. One can use a Viscous Digipeater as a fill-in system, which does not repeat on band a packet that it hears having already been repeated. It does have also benefits on Tx-IGate, which will not re-transmit to band something that already was heard there within the small window of a few seconds that the probation pipe takes. The trick is that duplicate accounting is done right up front at arrival packet arrival time, and depending on what kind of source a similar packet arrives from (or none at all), that delayed packet may get bumped off the delay pipe, or even be sent out. The rules are a bit more complicated than for plain simple digipeater, but not impossibly so: Packets arriving from non-viscous sources trump those waiting in viscous queues. First one arriving will be transmitted, unless the viscous queue has no longer this packet (but it was there.) ( delayed_seen > 0, seen == 1, pbuf == NULL -> drop this ) ( delayed_seen > 0, seen == 1, pbuf != NULL -> clean pbuf, transmit this ) ( delayed_seen == 0, seen == 1 -> transmit this ) Subsequent packets arriving from non-viscous sources are dropped as duplicates ( seen > 1 -> drop this ) Packets arriving from any viscous source are dropped, if there already was some direct delivery packet ( delayed_seen > 0, seen > 0 -> drop ) First packet arriving from any viscous source is put on viscous queue, unless there was non-viscous packet previously. ( delayed_seen == 1, seen == 0 -> put this on viscous queue ) Then among viscous sources: - "Transmitter" kind source: an which is same as that of 's transmitter . - "Elsewhere" kind source: an which is some other than that of transmitter's, but has viscous-delay > 0 Account the number of viscous sourced packets sourced from "transmitter" if (source_is_transmitter) seen_on_transmitter += 1; For second and subsequent viscous sourced packets, if any of observed packets came from transmitter (seen_on_transmitter > 0), then drop current packet, and clear possible viscous queued pbuf. Matti Aarnio, OH2MQK, 2009-10-21 aprx-2.9.0/ViscousDigipeaterTxEffect.png000664 000000 000000 00000072461 13040775352 020264 0ustar00rootroot000000 000000 ‰PNG  IHDRe$Ðé˹sRGB®ÎébKGDÿÿÿ ½§“ pHYs  šœtIMEÙ E. IDATxÚìwX×ûöe-ØA–ÄoŒF¥Š€€ˆ-VŠ`A vEDVÄvco1v –DQ£‚Héņ"EeÑ—¢»ï'ëîì°ôÝûsqqÍžÓžSîóœ™Q …¬¨Âô€^ÐKz @/B]ôûw°¥¥U+-ø—@Õ^V…Ï_¾À½ü†ˆ'‘N®îClì\Ý£cãèðÃlÄΤCâg¸Ìbcï<{nö³gT “«û¥ËWé“/]¾êäê.–Ë`«N®îQÑ1Òr ¼|ðÈQÉBò‹‹ÇMœÊXþÃlè¿a¶#çý¶èÅË—ìg±±Ÿå>/-=CZMgºÎ©š¹-“‘™5yÆ,*ÓħI,oóòæ,X8ÜnôzŸÍ¥eeŒYHš‚1© KÅnUÆ4EM=Øj„,¹ÈR£Ø¸xÑ&xöü…ëÜùClìÝæ-xù*§Ê]ŸCm!­XÒ;wïµ¶ã8ezl\¼X”‚ÂBÑÆ’% c[0¦Sá!E,nâÓ¤‹–·½mçîÜ·o1A.éerJªï¶B.]puvZ·qSfVv…‰nÜ´e–Óô«Ïÿ< ¿ïÖT`fV¶ÿ…À’’BHIIÉi?:)*—¹n.×/¹:;­÷Ý’‘™%™làÅàÔôtWg'±ðüü‚Ež+òòó¥•'ôæ5ê/ÈÿŒ±QOºHÒμ~9ÈÎÖzóöÒN{öüyÕÌÍh¿€óv¶Ö!—.ôém~áb0KàÎ=ûFް½zñü€þ}Ož>+™>£)“ª°TìVeL“¶ó ÏÅ“':Ê’K…5"„üyâÔ7élÞê6kæÍ+]œ¦ûlÙVå®Ï¡¶` dOóÒ•kM›6½xÞoÞl7Éžœ’šÖÇœn/Y¢0¶c:"z¾èqZzÆ*ïõ£G^ 8ûË8ß­;‚‚¯`ŽœÑËÓçü]g:õ26âñx榽¦MžxÆÏ¿ÂDýNëÓÛ¼aƒcÇŒJÏȤÃuu´cã!±ñ z:Út¸ÿ… ×™NÆF=é\NKär>èRDdÔ’Ù¹ÌùÕÖz¸,µmÒ¤ÉDÇñ)©i„¥+½(G6<âÉr/oÑÓÔÕÔ†’•-¾?íç¿ïàazL¹ÿàáûÁV#œgÏKH¬šeRRÓ¬‡ åñx6VÃè…c`ttì€þ}ÕÕÔz›™†ÞûGFS0&Ua©Ø­Ê’&¿¸Øÿ|àä ¿ˆ9Œ¹0ÖHÔ/‘tt22³ ôUUU{ô0 šR®sç_¹vZ¢qº-¤ (–4oß Яoà ,ûô>}ì1榥kwë&–{ƶ`L§ÊœñóŸ9cj?Ë>5úþ»K<¤¤¦bŽœÑËø„D3Sú£¥Eïè¸8ÙSÿðáÃÿ:~O4Ð×‹ŠŽ%„DEÇöèa@‡ÇÄÆ‰æÒ×Ò"&6NL,ïܽ·fÕrUU†Þ¿ÛÞÖF–ò|þòåòÕîݺBÜ]œ÷:R^^~ðÈQw—Y¢§•——_¾úS—΢çÎfdf¹»Î¢×Å„ï ¾óf»Þº_T,#£¢пaƒŒ¹hij²ƒ.gÏȨçêåK !?ü¯£¾žÇ’e½Œ¾ÿ®ƒè™ x¼®]ò\ô›h®ß¼uhï.±”{öˆˆŒúî»ææ¦ýûYÊnwQË””–RëWöõJc ¾^xx„¾ÞŽ]{Ê?–ÑŒIUX*v«JK³¤¤äï;wOüqPÆ\ØkD94†"K+j¡3÷·EŸ?VWWß³c+KF]:ÿ8ÏÝÍÅÙiÇ®=.s~•¶a(ÿmÁȘfqñÇâââ ÿ3‘Q;÷ìÛê³þ¿0=}Å’E= {¤¤¦mû}7õ-{ƶ`L§Êñù-Z4Ǥ ¸ª—-Z´(.þؼy³¯ËÛ"Qa›€Ää33+ûÇýÇÓ!?ü¯c~AÁËW9ors»tþ‘oÞ¬YŸß²E F‘NIMõY·fÿ¡?Ÿ&ééêˆf$ã%ê´ûùóÄêeKš4iB…;Œ9y†óÊeK¤Õˆ&99¥¸øã‡E­[óÓœ•ž‹W¯Ýà¹Ò‹§®þû¶Íݺþ$KyÄ,Ó¨aC@ ªªúùË—F ².˜ë¾Ê{]îÛ¼i“'>x&£)$“bŒ%Ù^,0ò0ü±¾žn£Fd¬»dD‘th!;÷ìÛæ»Á@_/*&vïC»E$S¬^™Y!7o=xÖËØHr­Ã¹¶Ö@ŒÅã©«OrÏãñÌL{yoð‹ráì¿—!u´»Ç}ÝeeÂØŒéü7¹¨«Sû×#ÔÕÕYg›æïÞ¿]gð‹‹›5mŠipC/ ôÃG 2èëlnh /Kºoóò.\¼´`®»X¸¾®î?îÝż´Ga­‡=yÆO(jiiŠæ²t‘!ÄyÆÔ•Þë—xÌ×ÒÔ”ýÎQúYö),|ç»mǺÕ+ÿí/èé^œëæÂwå²%AÁWŽ;.¶AÔ²E‹]Û6———ßüû¶çJ¯Às§«`™6mZSÓÄûwïÛ´iÍøýwþ<´Ÿòìù‹sd\1H&%KZ{Éž&Åãˆ'¢[ëæ"Y#Qbââç/ZJk!UìÌÌ,ÊËéiØÃs¥—äˆÆwëv;[k§ƒ{57æz[°4cñÚµkKy½B€']¥Aƒ¯Û6ìQÛ‚1šŸºt~“›Û¡}{ê㫜ö¥¡AØã[«/ú&>MÚ¸y+}%€z§‚ë—“':>z,*:æó—/QÑ1GŸœ(ƒÿ—¸c×Þ_ç̦/bÑèëýuûŽØ®Î$ÇñGŽŠŽémfúàQØþƒGDsQWS£öšæÍvõÙ²½:¿}igûéã§ûRÓ\BâÓí›}¢¢c¤ýÂ䛸#lRÓÒ©û)ÔTU‹Šø„iÎn¡÷î«©©Q.rÕ,£«£}íúÍ’’’+!שk«Ò'Ϙñ¤´¬ìQx¸žžŽŒµfLJÆöªlšIÉ©ÚLYHË…½Fb7RRÝ»uMJN‰‰OEw)$9¼o·½­4±äP[°7cš}ûX\»~S <Žˆ43í%ÅqÊtê‚îӤ侖²Dal Æth\œ¦ïܽïå«@óúõÁ#ºÍšÉbœñ£=þ¸¼¼<3+{ëÎ]ãÆ`ŽòƒŠP(¤?0>/*:fÏCÏž=ÿá‡ÿÍus16ê)mI‡Œ›8Uô6z*ú69%ÕmÞ‚]Û·ôÐ×MáITôÞ‡^¼|ebl¤¯«“ð4iÓzoÉ\nݾ—°pÁ<ÉrJ–‡1üõ›\Ï•^‡öíZ½vÃ/£z>‰Š¼¸i½w…)<‰Šö ¸°Õgýr/ï'O¢n^½”ø4ióöߟ¿x¡¦¦æµÂ³Ÿevs3Z&)9e½ïæÜ·yíÚ¶õ^µœÒÆÀ¨èß­;Þ¿onnê1on«V-s«cR–ŠÝªÒÒn7úRÀYÑýXö^ÁX#–®EÉ~öÌgËöôôŒŸ~ê²l±G§~¨Z×çP[°4´4KJJ|¶lÞ½[×5«–S›œtaâ·îø=çõc£•ž‹©=Oö(Œ5bLG”[·ï:òg~AAk-­Ù®Îƒôg³ÃÂüyüÙ³ç-[µï0æ—±ÐKP×°<¯b½¬¢¢cha —ôÏ*æÿ²Þ ¡"Åà_\ÖKú?½ —Õp.%è%½¬’s ôà6øý%ÿ7½|ýæ¡©9ýG‰Š‰±¶ebaéà8!<"‚1¤–˜÷ÛBÉÀ·yyƒ¬¬éuV¨cœ  }(vÀÿã§Ó—®‹Ô Y/rù%¤fÐå¬\äW/#žDÚÙÚÄF„S„ã'OÍœ>-ì^¨­íÙsŒ!µÄ½þ ììæ^PPH‡ÔYa Þy–óF쀜ܼm[‹Ô ·„µ4×ïÖÅmâ±ì”C/##{›™‰†$%§ØX çñxv¶6IÉÉŒ!’. û¯óM-ûÙ;ŒK|ú”r[§;»˜XXNéüúÍBå¼RPdž¦æfkgbay;4”MùØÉSÛ6ù²ÏÐÔ<èRpŸƒüΟöó3ïÛÿvh(†€‹¤f=÷»ró_PÖ‹Ê;p&> þç¼Í;p9ðÆ¢âb^iÎÛ¼ÿ׆>ÈÍ/¼pýö!¿ A×R2ŸI‹—œæí/Úƒë×6nÔhØÁÆ &„DFEoÛ¼‰Çã͘:e°•´ˆNÓ¦òx¼A~þü¹:µ6x0Ç{öüù€~}UUU«™ÔFzÝÕÕÔ~ìØA úCnêjj=u»¼*Îÿø‰Ò¬‰}`?¤ÿÓôÌô/óÞ½++/—½ÓwÔÔT !æ=õŸÄ?½§­ß­ËDûáìE¥sQÿ’¦KçÎYÙÙ„-MÍ">ŸÂçóµ45CÄ R˪ªª¢úM?}úDóx¼Ê–“±0t:ªª¸yÀaÔÕÔ*<‡Ò6"$*Då[oOüâeÈ݇ëuël;Ð’%ú¿!„tï2ÔÒ¼©Fã÷ž¦e±Cþ/^Ö°^ZÛzšœLIKÏèi؃¢¯§{íúÒÒÒ+!!:ÚÝCÄ016:~òTiiéíÐБcÇBŒzö<~òTyyù±“§Œ{BÔÕÕo‡†ñùK<¥FEE…ÒB*, (¥eeb=ˆ(þô)êiJÇöm¿°o/^B ßµnÕB³EóÈ„ÿn=‘rîÊ­Òò2c=mýnÇ%V —rñ²†õrÃÚ5ËV®6±°ôÙ¼eý/BÈx‡£ÇŽ[ øùÄ©3S&Md cÕòe#žô8hïƒ×®!„¬ô\úàá£Þý>Žx²jù2Bu‘ÒvÔ˜AH+Œ™i/–Í[Š  ÃwíÚœ¼&z@éô}{¿+·ÞöíeHDï¾ùöâ%!ļ§þ•Ûÿœ»z«fK:M±è¢ ìmü$.éàÙ °˜„fÆT ä¯\IJ“gð|PRœ »é¦.£s\¢äÌ¿LHΆÅÈ‚¾v'åÕK©…a?6!9[ÞlW/À0ìSÀõöcè%½ —ô€^ÐKz è%½ —ô€^ÐKz @/P·zy÷þ}CSsê8*&ÆÚ~”‰…¥ƒã„ðˆÆ@éô²¼¼|×Þ}ôÇã'OÍœ>-ì^¨­íÙsŒ!€ÒéåÇŽ[ FLJN±±Îãñìlm’’“CåÒËW99ݾ3}Êd:¤ °PCCƒÒªeËü‚Æ@¹ôÒwË6ùóx<Ì eÜf>ŒPëzyïŸfÏ›OÝìCý×ÒÔ,âó !|>_KS“1$S¹ô26"œú£Ž !úzº×®ß(--½¢£Ý1€\°¤$³võR’ñG·ðó‰Sg¦LšÈ@~<Ë€%Í`FÔk#Qʹ$„ô67»yõ²èW’!äÓÅ„vÖ €Ó’ ;Ш…Â:Ë,!9¹Å;XË˾€=¤ÎÐ×z)µ*#!9[ÞlW/À0ìSÔž÷`±1KýXÐEè%€ê ™ÐK /KZH&ô€^çEŒ¸x ½r öyÀP…^ÐKªöÐKð*À½ ºàºõ¾¬—e³Gɇ*ôÎ¥\O€^Ây½p¡z @Í®$à…À ”y¨B/á\0Ya²‚^ÐK®¬×°ÙÐËÿÈÈÌœ0uº‰…åØ “"žDB¢bb¬íG™XX:8Nˆ` J¾˜Àªn¡´Cµ&õrÙªÕ“':†Ý ?Ç}éÊ•„ã'OÍœ>-ì^¨­íÙsŒ!ämý jW/ýOŸ²µ²RQQùôÿ>µÖÒ"„$%§ØX çñxv¶6IÉÉŒ!èäõšMîÓ§OÃlíŠ?~ô^µ’RPX¨¡¡AiÕ²e~AcÀb”Ë¿$„hhhüsçï k×ìÞ·¿FæVÎí’ãâ\u€•ÀPUÿ’bØàÁ«½×B´45‹øüæÍšñù|-MMÆ …çk«h‘`¸&¸ï_ÚŒO xbܳ'!D_O÷Úõ¥¥¥WBBt´»3†È² XÒÌ˾€ZÑÈó¢›°’ð/+f£·÷šuž¿xah`°q7!d¼ƒÃêµë6oÛÞ¦uë k×0†Tªim\÷㊶"ôò?zöò÷ émnvóêeö*@oË•j*ªŠÓ¦–]ùDϬ¬M¨Œ°@ÎQ¡ª.‡e’¥ ¸èhr®{‰-Jd,?Ô® p UùÕË„älÆðø¤,ú+ï`-/û‚„äY¢{Ù“q›‰—}ýÿ.…¥Øß¢%ÍÕ7cÍV‡ ûm¥d)õë(k u` N;ÀU²CÝ Õª¡¯ÝI¾Ì*”D‹1vSã9ñIYÒ¢ÝT$-VÝ {îÕ/'‹ê¦:Õù¶f­T¦à°LQ;ÔåPUäëyëUÛ n ­¯ûJlOCªƒ_aÀ ”m¨ª¢å@¥Ä’Åθ–Å Œº6!‹¬V¶•-s=ÞòSa¾B@,7ô²¦\Ìê¨B¥zçºËp*UF;c „(Õ¯Jäe?VN,®¨›º”yé ½bu”ÃîŽÝuà\B/¥Îu0ÏÖ`_án·SÍ*ßc%jg B”V,e_Ýr}¬Š>TÙ¶§”†ëò@«&tP’©;FªÊÓr²kC…·€VGcäj§±F*Rï‹V@}9—•ÊëƒZ}EöÉš£ÞœH@=º˜ 3©*[ËUYr :Òì\{f‹ ×ÍbYszP«¢¯T8YW”ÐÅT07CUyZNý'XWÖ¶qàbÀ!çRtÀ*Þžœ*úJÝë4æ@i'^îŽhEÖK̳±0õ2ñ*ä,Ueh<¥Õ…éµUXúPu‡d ‡³.GǦª’7œ'E5îÏcz ¸½F«ÕÊŠýò.&˜¾äQ/£bb'÷î3z¼c|B"bm?ÊÄÂÒÁqBxDcú ÖŒ5»”†eò®—+V¯ùuŽ{øý»“Yᵆrüä©™Ó§…Ý µ³µ={.€1Ð^‘ä›C*K¥z{3ãËU*¬/\ÌJõ.€4jòý—!Á©;[›-ÛwB’’S|Ö­åñxv¶6gÏù3†(ùDFÏéðe”L»i‘`>R—/çP‰YFL2ÑÓ~†‘ç&æÜ´µò¾èè˜ØaC‡B 544!­Z¶Ì/(` Qò©¿²}È;XKì+%|ÍUÙ„äl}íN²X˜H4#®\²œxË7U¦æï÷)âóýÎ/]èãVsÙÅ8ýyÙË´ÈPžy°.XÒ÷qè6"<ñXIÜGEë”B/ßæåùnÙºt‘GÓ¦M !ZššE|>!„Ïçkij2†€êw#\¢«%I*%'l.û}Oè9Ô^> [²lÅbßÚ·kG…èëé^»~£´´ôJHˆŽvwÆP©IvÕa¿ÿýÔAC³t?®ô-ÚjR/W{¯‹Ž8t¸¡©¹¡©9!d¼ƒÃÑcÇ-ü|âÔ™)“&2†YºQ…]_±s,·ÃRÞ^[…¦‡‹ €ŒÔäý>…\ émnvóêeöPá\ñ“sáA3úꟊÑ÷¸R <ßGqz…z4‘<¿Ê3z² " ë,³„älX¼VñÖò²/ þÃ,&ªþ9Ò"BêËøÕiwôN÷aYB¸X/}íNòUD¡ K1⓲„@;ŒÝTSTÓDÕ´áØMEuÙ ”ªŸ£ô%™%$[J,$>)‹£­)çÅÆ~,5³«)º½)Ÿ·ÎEíŸØQ¯ —Šî:‘ÅDu0¹ÈÛ­³rbP¡blB/àÀ°¬ñ›ôêfüãî\H¦hO“|j&$z Æ?\LÅñíèGd(ÏK‡¸ô@Æäz2ªp¯YgBi%³ÂÇå`¹ƒŠ@/ßñ_/“¸ì9*Œ²Šýü¿~Ë ­p.¡—È…ŒÕödT…‰¸çÇ KK?‰¾²·ËÛ›«%_ä"'÷6WM¹©X ðSZ9u1ñûKüÂLÉMAýä«n~ø%{.bgJ‹8vSQíu ÆL]Ê^/*ŠXÄÚ0xeMQa±ëýw‡tx¥zf‰ZB ôÈÛNã{žë¾’™J+ƒ´âÉò6ïš²!„-,kŽ2¾Ã€s[ Kš%$ãQMµô`W¶îv~jv ¦’ªÕÉ‘.p…Ê'vŽŒçWߢ%$gSOPclPY„¿^$“% Y, —Ô©dÖ½œüh¼ŒJYS5bɈ1PTD+ûò™*w’꫞#½@Ùå™qú–Ï ÀJ©²'W¡ÊU¡*–n¯J¥ æmWvyT_ë9½@®ZZ;e¿¢¦0¿.¨¬dÖWÅe/§¤œc[z ¨kNQßM-K¥ê]reOr³”e‹XÆû§ôPwê¹å‹ÊsƲ—®ÌËè%@NÕE!o“¢ÊÞ=$ŸûìÍá„^äw¾æJÕø‚Ÿ¤“ 8A ?ïm^Þ +kúcTLŒµý( KÇ áŒ!À(*Ší~Á¹”CSsɆ¦æ¢ÔW~ç­íG™Zö›¿pчäW/ÃÂ;»¹Ò!ÇOžš9}ZؽP;[Û³çC€Ê.z|åjàÅ‹ûví¼{ëFÇŽ×ùøÊ¯^;yjÛ¦oÊ—”œbc5œÇãÙÙÚ$%'3†Õ笀çâE?vꤡ¡1Ç͵—‰Iͦ_“×/ìÙ%RPX¨¡¡AiÕ²e~AcP}233 ôô¨ãÆ9Ž+¿þ%PÛ¨¨¨0‡«ª ‚ÚË·võRKS³ˆÏ'„ðù|-MMÆ€…&MšÐ7ï6kÆ|«To3³¤äúc|B"—ôR_O÷Úõ¥¥¥WBBt´»3†,˜õê|¹¼¼¼¸¸øÐG{›™1ž6ÏÝmçî=¯rrJKKùãÚõ\ÒËñG·ðó‰Sg¦LšÈ°°ÒsitLL¿ÁC‡°ÏËË[¾t1ãi]:w;fôäéN} ÉÎ~¶`Þ–4¥mê²E …õn •Š‹A¿ÙNÉ` ئ€jDw¨ÙEÏ÷á¬X8¿qìªàŸVŠø¤,´ Y0Ðù±î3eQMÎìÇÊrŽ’,…`˜v€)`‡šr+eQJ îýþRò ´aáGŽoÜ»ƒã„'QQì'+Òl%ŸÖëà8Á¸wŸÑãÅn¤VøùŠ™¢´´tùj/ó¾ý­íG)O—ì,USì.Q©Ú)v—`¬ÈÝû÷ÅžÈJ”øq߯TâÔzD–bÐçüê±0àB`YYÙŸ'NÎ_¸X(:<5-](¦¤¦¶²%y²d· íð(,ÜnÌØ½Ì诬ìF†Þ»WVVp!ÐnÌXŶ»)ö8¸kï¾’’’Û¡wmGQ’.!ÙXª¦Ø]¢RµSà.ÁX‘²²²1¿8ŠŽîÕÔñ(œ+÷P›?~ …ùÃlí„B¡í¨1éB¡0=#ƒšé® y²dGq3?ÔªÔ IDAT/5-]²Ó …Â’’3Ë~JbFSŒ÷KJjªè9Jb ± Y5%±ƒ,µSS0Vdÿ¡Ã‡þ8JW_©†F5áÞý±’O ]³jÅøIS>þ¬®®~xÿ^Bõ¬z¢Ð°•|Z/MtLì°¡C”ÄŒ¦xùêÕíлÓg¹¶ÖÒòݰNW[[IL!Ö$«¦$v¥vÊ` ÉŠ¼ÊÉùëö³'ŽíÙ€:G©†F5Q„çÇîØµûàÞÝÑáöîܱkÏ>%oÑ">ß/àüÒ…Êl„/_¾4kÖôî­kW¯Zí½ ß-Û<æÏãñx0…Rè¥ähSÓÒ{«ªªö21ŽOLd?Y±`û6/ÏwËÖ¥‹<š6mªÌvh­¥5vôh§¯§›•­<¦ë,USl;Tªv l ÉŠÜûçŸÙóæÓï[VæYB)ôRò ´z::ñ ‰ &.®[×®ì'+ðl†…-Y¶b±ÇoíÛµ«ÐhŠý _K êÑ‘1qqôû}Þ’€¥jŠÝ%*U;6…dE¨W+Ó¯YVæY¢*pî~ŸGaáCmF™[ ³µ‹ˆŒ¤nóqœ2ÍÈÜÂqÊ4êÆú ¶äÉ’!œFô&—ÁV6=z™ÑJe1S|(*rŸ¿ WŸ¾ã&NÊÌÊRSHvɪ)I—¥vÊ` –ŠHÞï£ ³D5áÌó ìÇÐKz @/½ —ô€^ÐK€CàÁ:üKz @/è%½ —ôÐKz @/è%½ —ôPfÔE?¼{W‹PZZµÒ‚ Tè¥\ðù˸­—O"\Ý‡ØØ;¹ºGÇÆÑá‡ÙˆI‡Ä%$Îp™=ÄÆÞyöÜìgϨ@'W÷K—¯Ò'_º|ÕÉÕ],—ÁV#œ\Ý£¢c¤åx1øà‘£’…ä›8•±ü‡ÙÐClìï?xXM“‰&8Ìvä¼ß½xù’ýÌ!6ö³Ü祥gH3ÝL×9U+ £©32³&ϘEešø4‰%ðm^Þœ ‡Û^ï³¹´¬Œ1 IÛ2&Ua©Ø›‰1MQS¶!K.²Ô(6.^´ ž=á:wþ{·y ^¾Ê©rÇàP[Hk –4ÁÎÝ{­íÇ8N™/¥ °P´±d‰ÂØŒéT8çˆF‹›ø4iÁ¢¥ÃíFoÛ¹;÷í[Ìø õ29%ÕwÛw×Y!—.¸:;­Û¸)3+»ÂD7nÚ2ËiúÕ‹çÐßwë*03+ÛÿB`II !¤¤¤ä´Ÿ?•Ë\7—ë—ƒ\ÖûnÉÈÌ’L6ðbpjzº«³“Xx~~Á"ÏyùùÒÊzóõçµÂs½ï–êK&`ÿc£žt¥yýr­õæí;¥öìù󪕄ÑÔ~çíl­C.]èÓÛüÂÅ`–À{öa{õâùýûž<}V2}FÛ2&Ua©Ø›‰1MÚÎ+<Ožè(K.Öˆòç‰Sߤ³y«Û¬™7¯\tqšî³e[•{‡Ú‚1=ÍKW®5mÚôây¿y³Ý${rJjZ sº½d‰ÂØŒéÈ>ÅŽÓÒ3Vy¯w=òRÀÙ_Æ9ønÝ|“>¨-½<}Îßu¦S/c#gnÚkÚä‰güü+LÔïä±>½Í6h0v̨ôŒL:\WG;6>Ÿ §£M‡û_rédlÔ“Îå´D.çƒ.EDF-ñX ™Ëœ_m­‡ËRÛ~–}Vz.öÞàK/NOžñ›á2›RTÄ_¸tùû…K—ñéBïÝ1zܯ —¼ÿðA2Á&MšLtŸ’šFYºÒ‹òŒÃ#ž,÷ò=M]MmøÐ!YÙâ ùÓ~þû¦×È„û±±l5Âyöܸ„Ī™:%5ÍzØPgc5Œ^y0FGÇèßW]M­·™iè½d´-cR–н™XÒäûŸœ<á1'ƒ1Ɖú%’ŽNFf–¡¾ªªjTSJÃuîü+×®Sk>N·…´Ê’æí;¡úõmØ eŸÞ§ý!fØÔ´tínÝÄÒaÂØŒéT™3~þ3gLígÙ§Q£Fß×a‰Ç‚”ÔTLú ¶ô2>!ÑÌÔ„þhiÑ;:.NöÔ?|øð¿ŽßÓ ôõ¢¢c !Qѱ=zÐá1±q¢¹ôµ´ˆ‰Ë;wï­Yµ\U•¡À‡÷ï¶·µ‘±Hý,û|þü™þئMëý»vBö:üó€þ×/õïkyàðÿmGF]8wzðÀ‡Žü)™Úç/_._ éÞ­+!ÄÝÅyß¡#åååuw™%zZyyyðå«?ué,xî|`Ff–»ë,z]LñÞà;o¶ë­kÁS'NØ´u{ÕL——ß´iBˆf«VorsYB¡šš!¤¬¬ì-Ón£m“ª°TìÍÄ’æ?ÿÖV<v&Xra¬‘h”?Oœš1u²ht]íø„DBÈÓ¤dîl“õYÙÙ3\Ü·íÜš–Îݶ`dL3ûùóˆÈ¨£ÇÍp™MïZÓ†MIM{>Ün´ëÜù¯ßÈ…±-Ó©2±ñ }ÌÍéíÛµõ\äITuö¯ùEüæÍšÑ55[}øPD”¼œ Æ­¿ïˆŽCƒà+×!Q11¢·ˆÿM.-Z´(âóEÅ22*úçý6hÀ˜‹–¦f•ë߯E£F!a#~3[]MmÈ žüohê¤ 42hàñSg$+Þ€Ç32ê¹zùRBÈÿëh ¯ç±dY/c£ï¿ë zf¯kן<ý&Z©ë7oÚ»K¬<= {DDF}÷]ssÓþý,e¯ˆ¨©KJK©…Ç+ûz%Œ1Ð@_/<<Â@_oÇ®=å"ËvÛ2&Ua©Ø›IZš%%%ß¹{âƒ2æÂ^#Ê¡1Y«Q ¹¿-úüù³ººúž[Y2êÒùÇyîn.ÎN;víq™ó«´ Cùo ö@Æ4‹‹?ùŸ‰ˆŒÚ¹gßVŸõßø…éé+–,êiØ#%5mÛﻩoÙ£0¶c:U¦ˆÏoÑ¢9fyPGzÙ¢E‹ââÍ›7ûº-6±ùBL>3³²?|øÐÏq<òÃÿ:æ¼|•ó&7·KçéðæÍšñù-[´`é”ÔTŸuköú#ñi’ž®ŽhF²_áF“&MèL57¦BD×mÿïÿ¨@Q §ò½ÿàá‘?O¬^¶„NÄaÔÈÉ3œW.["ÍD4ÉÉ)ÅÅ?|(jÝú›ßú¬ô\¼zíÏ•^¨½44Ð{1lÈ ¯“W¸¡¾,é¾ÍË»pñÒ‚¹îbáúººgüüuºwsª…=¶>ôä?¡P¨¥¥)šËÒE„çSWz¯_â1_KS³:2yÿÁCÆ1Ö¬y³Ò²²† |üøQT­ß½{ߪUK~q±f«V’[»……ï|·íX·zå¿£ýâ%=Ý€À‹sÝ\Ø‹±rÙ’ à+GŽÛ j٢Ům›ËËËoþ}Ûs¥Wà¹ÓU0u›6­©iâý»÷mÚ´f üþ»ÚOyöüŹ€ 2.A$“’Œ%­Èž&Åãˆ'¢{õæ"Y#Qbââç/ZJk!UìÌÌ,ÊËéiØÃs¥—èùbõòݺÝÎÖÚéà^jiÅé¶`i Æâµk×–òz…OºJ ‚_÷Ø£0¶c:4?uéü&7·CûöÔÇW99ì JCƒ°Ç¶Vÿ^ôM|š´qóVúJ*•¥‚ë—“':>z,*:æó—/QÑ1GŸœ(ƒ»—¸c×Þ_ç̦¯9ÑèëýuûŽØ&Ì$ÇñGŽŠŽémfúàQØþƒGDsQWS£¶†æÍvõÙ²½:?U¼ÿàázß-^+<%¿2ïÕëQXøç/_þ½ÛÛÌ”?ëP^^þ×íÐ~–’±FÚÙ~úø‰ºáöÙó ‰O·oö‰ŠŽ‘ö “o⎰IMK§î§PSU¥n2šæìzレšåsWÍÔº:Ú×®ß,))¹rº¶*-pòŒYáOJËÊ…‡ëééÈhFƤdì•M3)9U›) i¹°×HìFJ*°{·®IÉ) 1ñ©è¶‡$‡÷í¶·µ‘&–j öbL³o‹k×o ‚Ç‘f¦½Ä¢8N™N]Ð}š”Ü÷ëHaÂØŒéи8Mß¹{ßËW9 çõëƒGþt›5“Å8ãF>z,,üqyyyfVöÖ»Æ;ŒÁ¤jË¿ìÒùÇe‹=ö8ôìÙó~øßŠ%‹ºþÔ¥ÂD×mÜ”—Ÿ?|Ä(ÉEº¡~Yy¹¾žD. wï?øâå+c£¾},Ž;±i½·X²ß×aøÐÁ¿ïÞ·pÁ¼JU’Þ¡RWW÷ZáÙϲä9³]׬۸qÓÖž†=Vzþ·¡Ú¦uk{‡_LŒ–/]Ęø¢ßæ{®ô23íµïБٳfòx[¶§§güôS—e‹«~?‡Ú‚½Óœ:i‚Ï–íVv£»wëºæk mØåK¯÷Ýœóú‰±ÑJÏŲDa„1c£žïÞý¶Ø3¿  µ–ÖlWçßÎ$bhwï¶ÄcÁ¡£Çžy­mÙªåx‡1#íl1éƒ*£" Eöååù±QÑ1ÆF=ë½ìc€‚Á½çÇʃXòî_rå_~£—õ&Ú*rQ @x? À½TQQ¡ÿÐKzY çRò€^ÐË*9—p1@/nƒß_ð/ù×ËŒÌÌ S§›XXŽ0)âI$!$*&ÆÚ~”‰…¥ƒã„ðˆˆÚËzÞo %ßæå ²²¦?ÖYa Ž9p&P,$$ô¡Ø;üŸN_º.zPƒd½È9䔚A—³6rá’^.[µzòDǰ{¡óç¸/]¹’rüä©™Ó§…Ý µ³µ={. ö²¾÷Ï?b!aáÝÜ é:+ Ô;ÏrÞˆ°““›×¡mkуäÖƒð¡–æúݺ¸M#–’ê¥ÿéS¶VV***Ÿþß§ÖZZ„¤ä«á<ÏÎÖ&)9™Ñtÿu¾©e?{‡q‰OŸB^¿y3ÝÙÅÄÂrêLç×oÞB MÍéó©cCSó‡ ³µ3±°¼JЦ|ìä©m›|EC$ chjt)¸ÏÀA~çOûù™÷í;4à ÀER³žû]¹yÈ/(ëEåÆ8HPÿsÞæ ¸xãNQñG1¯4çm^‡ÿkCäæ^¸~û_Љ k)™Ï¤EKNó¿öíA<ò÷ë·ùb¾¯@ ¼q?L4G:;%ÕKBȧOŸ¾tŪIŽŽ„‚ÂB BH«–-ó ^‡²qÓ–n]»ÞûûÖÜÙn«×®#„¬ÛèÓÛÜ,ì^¨©‰Éº>Ò2RQQ¹x~‹Ï†ÅËVÄF„B¨ÿÿµÐž]b/»f,Lƒ† Ž Îy‘“;uŒMÇöm<‰ '„ääæwhÛ†> ‹4Òíî<~¤õ‹‘qŒÑ !M4þ3!äï‡];utqe¢§}',R´`beËNyõRCCãŸ;oX»f÷¾ý²œöø±ë,çÆ 2ø‚ßYBHdTô´)“y<ÞŒ©S"£¢¥Etš6µaƃüüùsu  _ßê§õ…‘^wu5µ;v¤þÁP§›ºšZOÝn¯Þ扆ó?~"„4k¢AØéÿ®¨è¯7ÿ /+/—½ÓwÔÕÔ!æ=õ³_¾¾Ý¢yÓ‰öÃÙ‹Jç¢ÔzI‹Ð»÷ï !ZššE|>!„ÏçkijJž)¤–UUUEUUÌy¥y<^eKÅX:UUÜ< à0”n±£¦¦J!B¢BT¾õöÄ/^†Ü}¨Ñ¸±^·Î¶-Y¢ÿBˆA÷.C-Í›j4¾q/ìiZ{1äÿâe­ë¥Í¨Ñ±ññ„ðˆ'Æ={Bôõt¯]¿QZZz%$DG»»dc£ã'O•––Þ 9vþ%†XRÀ °'ô€¹L¡×ÖÕÏÎô¾#€Ô¼}0^ä³ÐE¡—h €EµŽw°Œ½@~×Cò¯ÁX/b=‡n¦Ôz‰)ÈUoTΑ¢Àð.Õ‹6#¶@ —XÁ¸¶rW<ŒE{ª.^ö˜ß —ÕÒBx¢˜õ°XÓ襒*Œê`%Q…ž†éžr[/mÄݾ½Ež d± {™!{ŠÚ—¨¾A½SÖ†^Pš$?’YSË8‹ ¼ü XÒ¬US±/{q[/eo\¼„s ³À¶ò¼\¨qSW¸m ¶Èƒ¯©¤þ¥,ý[~ä¤ðÓ=wËPï;œ•|ÀƒTÔQM#­{Ъ‰µ¯é%–½Ë:3]e_C_4â–‡ÊRfù™ãªð\8Ðz ”e5PÛó]M¹˜´RÖÁ쬴;±Jþ»CÉ&cD¶,.W+µ^b ‰öªÇb0*eíMIÊÙÛûÉ8õµà_Å™&ê}ð³€*¿4Ÿ².¯KUÖÚŒépEŠàÕ—5^ŒUÑKœËÚëHXË..ÌŸŠ¦—ÕŸXÑ'8½îñÖâºÕl¬Á d¶ŽçŠ:°¹\5+Gç^ÅßUÈ-EÝ÷ÏzÕêØ–«‰£ÂÂÈç4ÇéÝcˆ‡P‡ €œË!}P,)/ûBêóUŠºj©T¥*|óI=š¨ÂÔxñ¤É’<ô“Ê–¡Þ›OýË·yyƒ¬¬éQ11Öö£L,,'„GD ”P2•M~8çbÂY©¦Åþä¡“pbdÉÿ P»zþØÙͽ  9~òÔÌéÓÂî…ÚÙÚž=€]å©#}§hõ_vQ#ãªR%©m;W?}¸õ>@XšÃÅÇé¡Öµ^;yjÛ&_Ѥä«á<ÏÎÖ&)9¹Þ×ËX,ËÉƹÁ}BC`µ¡lÔ®^س«ëO]DC 544!­Z¶Ì/(À Á8¬l¾jÈ•¹©F¼a4f3è¥Üuq´±üÏ>œ˜/äYϸ8áÖ™1á$Áz\ÕK-MÍ">ŸÂçóµ45ÑJBÜñ_g7ìU˜K-s“‚õp´¬‚Q׿'Ñ×Ó½výÆh{»+!!:ÚÝ•d Õ¬û«H»7ܺgwØ× )d”Ú³6çšÝOéôr¼ƒÃêµë6oÛÞ¦uë k×(ÏäR)U¶™·–NVêñ9GU›¾EŸ^嵦â­9­ÓUh.Ê]ìÇÆF„ÓǽÍÍn^½öðÆ•à^ÆÆòÓ”'_¸5SËÿX“eÞÇxW8y¿•h/y^k+É* cCLÙ¨ÓýØ„älÆðø¤,i_I‰®%Ëù•¡Æüï`-/û‚„䂚ÍW4–—=·™xÙÈq7«-óV3YFÓUÔdµXª¦_Ûå©NÖŒ'TªÀì'‹+ýdÉt*m7écMƤN“¡¿É’‘ìv¨±‘Rð¿XŒvÐ×î$_3™P¥ñIYôñØME5[€OPö”+›u|R–d”Ú+¿<›W´KÔ`Ùêݘ•*ÀØME5b‡º¬Ne-,í|ÉpvSˆ_µ†®fuj<:cxmt örVߘr>‰Qà}Ñl`rér𝾀^r νôWV0'Åî–Ê3Æ¡—õˆ+XûèemI;±’oÉbÒ£Ãz‰¥SmX£Ré  VcÿRÞG{2ŬJ§—ðlêÞª[€ÉIK `ƒF€I¡—• *&ÆÚ~”‰…¥ƒã„ðˆÌÔi`ÇÐÔ\ò£¡©¹èõ•_ÀykûQ¦–ýæ/\ôáÃnëåñ“§fNŸv/ÔÎÖöì¹ÅS/¹{¬BŠDlDxlD¸èAð•«/îÛµóî­;v\çãËm½LJN±±Îãñìlm’’“1­Ë•‹Ig‡Vp޳þž‹ýØ©“††Æ7×^&&ÜÖË‚ÂB BH«–-ó ¸ÕõµAZ}õ‚þz;0¨m233 ôô¨ãÆ9ŽËm½\”[TTT˜ÃUUAíå[×z©¥©YÄçBø|¾–¦&çfözyz]Š%Þ^ 7š4iBß¼SPXجóÕÛÌ,)9…þŸÈm½Ô×Ó½výFiié•íîèµ*çP>€`Ö«WPðåòòòâââCðì„; IDATímfÆxÚþ¬®®~xÿ^"r‡±äÉœ~€­(öì’öUtLì°¡C”ÄŒ¦xùêÕíлÓg¹¶ÖÒòݰNW[[IL!Ö$«¦$v¥vÊ` ÉŠ¼ÊÉùëö³'ŽíÙ€:G©†F5Q„çÇîØµûàÞÝÑáöîܱkÏ>%oÑ">ß/àüÒ…Êl„/_¾4kÖôî­kW¯Zí½ ß-Û<æÏãñx0…Rè¥ähSÓÒ{«ªªö21ŽOLd?™ý¶\çm^žï–­Ky4mÚT™íÐZKkìèÑ<O_O7+;[yL!ÖXª¦Øv¨TíØ’¹÷Ï?³çͧ߷¬Ì³„Rè¥ähõttâAL\\·®]ÙOVàØ> [²lÅbßÚ·kW¡ÑûA¾–Ô£#cââè÷û(¼)$;KÕ»KTªv l ÉŠP¯V¦_³¬Ì³DUàÜý>‡ڌ02·fkIÝæã8e𑹅ã”iÔ?ôlÉ“%C8èM.ƒ­lzô2£ÿ”Êb¦øPTä>A¯>}ÇMœ”™•¥$¦ì’US’.!Kí”Á,‘¼ßGf‰j™çØ —ô€^z @/è%½ —‡Àƒuø—ô€^ÐKz @/è% —ô€^ÐKz @/è% Ì¨‹~x÷® ´´j¥ÿ¨:ÐËÊñùË — D<‰trubcïäêG‡f#v&—8Ãeö{çÙs³Ÿ=£\Ý/]¾JŸ|éòU'Ww±\[pruŠŽ‘–KàÅàƒGŽJ’_\›KËʳ4cR–ŠÅžÒÒ5ï`«²ä"KbãâE›àÙó®sç±±w›·à嫜*wzµ…´bIS ìܽ×Ú~Œã”é±qñbQ %Ç{ƶ`L§ÂÉe<&>MZ°hép»ÑÛvîÎ}ûS3àž^&§¤únÛáî:+äÒWg§u7efeW˜èÆM[f9M¿zñüÏúûnÝAffeû_,))!„”””œöó§“¢r™ëærýr«³Ózß-™Y’É^ NMOwuv ÏÏ/Xä¹"/?_2JèÍkԟر´3¯_²³µÞ¼}§´ª={þ¼j†f´‰_Ày;[ëKúô6¿p1˜%pçž}#GØ^½x~@ÿ¾'OŸ•LŸÑŒIUX*{JK“¶í ÏÅ“':Ê’K…5"„üyâÔ7élÞê6kæÍ+]œ¦ûlÙVåNÏ¡¶` dOóÒ•kM›6½xÞoÞl7Éžœ’šÖÇÂ\l,°Gal Æt*DÚxLKÏXå½ÞaôÈKgçà»uGPðÌ΀czyúœ¿ëL§^ÆF<ÏÜ´×´ÉÏøùW˜¨ßÉc}z›7lÐ`ì˜Qé™t¸®Žvl|!$6>AOG›÷¿ä:ÓÉØ¨'Ëi‰\Î]ŠˆŒZâ±@2;—9¿ÚZ—½ÎKWzQ.lxÄ“å^Þ¢_©«© :$+[|!ÚÏßÁÃô™rÿÁÃ!6öƒ­F8Ïž—X5›¤¤¦YÊãñl¬†ÑKÆÀèèØýûª«©õ63 ½÷ŒF`LªÂR±Û“%M~q±ÿùÀÉ~s2sa¬‘¨_"éèddf諪ªöèa’šÆbm×¹ó¯\»N-Î8ÝÒ†Kš·ï„è×·aƒ–}zŸ>ö‡˜aSÓÒµ»uK‡= c[0¦SeÎøùÏœ1µŸeŸF}ÿ]‡% RRS1;Žée|B¢™© ýÑÒ¢wt\œì©øðá¿§?èëEEÇB¢¢c{ô0 ÃcbãDséki'&–wîÞ[³j¹ª*Cïßmok#{©Ü]œ÷:R^^~ðÈQw—Y¢_•——_¾úS—΢çÎfdf¹»Î¢×Å„ï ¾óf»Þº_T,#£¢пaƒŒ¹hijVªÎ?ü¯£¾žÇ’e½Œ¾ÿ®ƒh]ðx]»þä¹è7Ñܯ߼uhï.±DzöˆˆŒúî»ææ¦ýûYÊž»¨MJJK©Ç+ûz%Œ1Ð@_/<<Â@_oÇ®=åŸ?ËhƤ*,»=¥¥YRRò÷»'þ8(c.ì5¢C‘EµÐ™ûۢϟ?«««ïÙ±•%£.œçîæâì´c×—9¿JÛ0”ÿ¶`dL³¸øcqqqÿ™ˆÈ¨{ömõYÿ_˜ž¾bÉ¢ž†=RRÓ¶ý¾›ú–= c[0¦SeŠøü-šc:ÜÖË-ZlÞ¼Ù×En‘¨°‰MCbò™™•ýáÇ~ŽãE…*¿ à嫜7¹¹]:ÿH‡7oÖ¬ˆÏoÙ¢£H§¤¦ú¬[³ÿЉO“ôtuD3’ý‰£FNžá¼rÙiu¡INN).þøáCQëÖßü(g¥çâÕk7x®ôâ©«ÿ¾ms·®?É’¯˜M5l(TUU?ùÒ¨aC–ÀsÝWy¯Ë}›7mòÄÂd4‚dRŒ±$[ŠÆâB†?Ö×ÓmÔ¨‘Œu—¬‘(’ !dçž}Û|7èëEÅÄî=ph·ˆdŠÕ+#3+äæ­ÃzI®u8×Òˆ±x[¶WÿÏž¿HH|º}³OTtÌ‹—/+<ä›Ô´tê~ 5UÕ¢">!dš³[è½ûjjj”s\5›èêh_»~³¤¤äJÈõîݺ²Nž1+<âIiYÙ£ðp==kʘ”Œ-UÙ4“’Sµ™²– {Än¤¤»wëš”œ"ŸŠîOHrxßn{[ibÉ¡¶`o Æ4ûö±¸vý¦@ xifÚK,Šã”éÔݧIÉ}--d‰ÂØŒéи8Mß¹{ßËW9 çõëƒGþt›5“Å8ãF>z,,üqyyyfVöÖ»Æ;ŒÁì ä ¡PH`|^TtÌž‡ž={þÃÿ›ëæblÔSÚJ“7qªèÍôT õmrJªÛ¼»¶o顯'šÂ“¨è½½xùÊÄØH_W'áiÒ¦õÞ’¹Üº}'..aá‚y’å”,´o—®ôúÅa´±QÏ'QÑ7­÷–—ípa«Ïúå^ÞOžDݼz)ñiÒæí¿?ñBMMÍk…g?Ë>ì†f´IRrÊzß͹oóÚµmë½j9¥ŒQÑ1¾[w¼ÿÞÜÜÔcÞÜV­ZVXMiIUX*v{JKs¸ÝèKgE÷cÙûcX:!$ûÙ3Ÿ-ÛÓÓ3~ú©Ë²Å~ø¡jžCmÁÒ@ÒÒ,))ñÙ²ýQXx÷n]׬ZNmrÒ…‰KHܺã÷œ×oLŒVz.¦ö<Ù£0Öˆ1QnݾsèÈŸù­µ´f»:П}´> ?òçñgÏž·lÕr¼Ã˜_ÆB/AýÀò<¼Šõ²^ˆŠŽ¡…€^ÐK>Ôí[U眺]oŸ{oÝÊOX²tñ‚ùÎNNTI(ü—Š BÈÕkUBwù]Fy¾œ¹c§D"9yêÔ¤ˆ©„—=<2wì|úôiÆŽžBBˆ™™ÙÉS§47/HøXÙ©y<¥…,¸p=zL,‘Hróò† †áÛ0l$­­2üû¿…?.ùåÊççÿ$`¼$„4ýþ w/{GûžÅet5e»BöæžNüïÙŸ}_õ/(,ZþÉB5HþÖxÿ×”ÚÇÛ‹¥ó–bê”)Û22ý^{}ûάéÑïà»0`ú9õÙ~ð(óBÈÀþÎ{rOÜmlë%$ÌÙ7¼$„ŒöpË=ùÓÞ#'ú8:Ðǔى¿¯gÑÅò¯w—_Zöš'U(ÿ”‹Ìét¬ïFÊæ¬ƒ2“n´¹»Þ!:@Çò˲ŠZDÜW/•Á¡?¶¬¢V×b×- â€P Ýúcè%½ —ô€^ÐKz è%½ —€èåÝúúñAôfIii(|”ߘ)QoŸ+,TX—^æŸ+ø`öœÆÆ&º$sÇÎïÅæŸ>²{ï~…%€qéeÆŽŸ¶–YR^q%8ðMssó°àòŠ …%€îc¦ÁcmÞ´A¦¤±©ÉÆÆ†ÒËÁ¡¡±Qa `\ù%½ì|GÇÍÍ„ææf¾££Â`äD¦5#c×K·®G‰%In^ÞpÁ0…%€±ëåÔ)S¶edú½öúöYÓ£ßQX\€îc¦ñ#^(@MùAÐK@¿1C@·€gH Ç£þÐæôC_ÐKz ŒùÎXLù@/è%½ÝŒ½ËŽÄO’ôŽ®}þRè=šþÛÔÔ´$ÿì­Û·Ã&Ñ…Ì—#/ö¯^Òr˜}ð»ÇB ‹ŠÃB‚W%'U"}Gý±µuuG‰cÞ&„ûúø î —²|þå†Yq3¨¿‹ŠKö8à=f\Ô»1W¯U©ÌÏ ¹ z©šªêê;wïŒöö¦6ór¾ßž¾µð¿gV§&/Y¾BåóeºEÒºëÔ¸âãÕËÜ£yòåƒ]\jjk‘Eé¦å‘iÍÐ-Ъ^öö¢7ƒDá¿TTB®^«òº«ÔÃH8ô΋ý vHõ€I—¿Ï«ªºfÐÀôæêÔä%ËV\¿qC8räêÔd$—ºl9-™šrƒ—è¥RòOŸbnzzxÊÞ×»v’«{MòLjfg¤©*`¯½äñx!!!¹¹¹zz|è%0êäR¡jªåS#¹ïˆU ó./_X__ß»wotCƒÔæ/»²ŠZ•uRrøI¢FîåÝEJŸ"o‹ºæBÌã育àhÐ` Œ>H pýK³0 0ØÂÂÂð<}õµñ_mNï¢ãK$SSS33=KÜ7¿Tæ<ÇíœfÅÕ”•wk*™¦01R’iÂ…²ŠÚ®ˆƒ Ëi$2ME²ÈÈ;š#r T…Bï0ì8 <èã„yÆ »Öš2_.B·Ö[géˆK5êà5Ô¨f“²{Š®T qZ[[%½ÅÅÅqqqB¡ðÖ­[›6mòõõ-**4h!äéÓ§¡¡¡Ç~ï½÷lllÊËË¿ûî;êà÷ïß3fLmmíìÙ³=<<Ο?¿yóæ“'OØÙý¯åWUUEDD̘1#&&&33såÊ•|>?>>žúôÞ½{ãÆkhhˆ2dˆX, âî‚ NNNÛ·oÿè£z\›ŸŸ?þ|…°ìÇ×HØQËAÝBªPfD|ö€¥Î¥ò•u´C‡mЈñTºÝ#ù]4{i¸­+B¡@”ÝŽÆŽ»~ýúÜÜ܃þío333ëׯß7XBammíç秬Âúõëy<Þ™3gè’ªª*++«˜˜º!$%%…¹W{{;õÇ'Ÿ|BùöÛoé¶lÙBY¶lÓWPP@m677ÛÛÛ …BºBbb"!$;;›.‰%„„„„P›ì.ȳhÑ"BÈåË—é’Yý!¤´´”iÇãk$ô¹(BBB˜W]u¨¡B/µ©y·_ã7GȿƯ ôz)Ovv6•°„¢ÿþ|>Ÿ–+<==…BaýŸñóósvv¦*…ÂÞ½{·¶¶*Ü}øðáNNN´xH¥Ò¶¶¶çŸ~ĈL_<<<˜{ùûû[[[Ó› _¿~Ì %%%LawA×—.BimëÛ¯¿»»»L„9_#`×KuÔteü’cW–jÓÁLtÃí0eÊ@päÈ–:6lH$>>> ˜6mÚÖ­[>|HZ^^~áÂ…>æçŸ¾sçU¡²²ÒÝÝÝÜÜ\áÁkjjFŒÁŠ311qss«®®fV“é1¶µµmiiadøðáÌ 2›ì.Èãæææéé¹k×®öövBÈéÓ§oÞ¸Ó±i$ì¨ë î`¢wßzr ýOgÇùtز“áYI e^xá…††– “'Oþí·ß²²²ÂÃÃ+**âââ^zé¥+W®PŸ¶··5ê„b±XƒF*|l”;ì.($&&æúõë'Ož$„lß¾ÝÄÔ4::ZƒÇïü¨_÷`€ã—îtŠøìõOÇ;cu¡?–Ž•.Œ£?ý±jõÇJ¥Ò!C†ôïߟ{(:ÄìÂuss{ñÅYŽïááÁÒéêêêììÜÉÞH•ý±ì.(äîÝ»æææÓ§OüøqÏž=Ǿê/aŽÇï|¬¬¬üýýeúxY..Ñ«áŒÉ%Çl’þ§½Àh‘À`Û¶m×®] cÙ«©©‰¹éççG¡»û¢££ëêêÒÓÓ•kúôé iii Ó£ððð[·níØ±ƒþ(##ãÎ;“'Oæî—H$ºqãÆ˜ý“Ü]PHŸ>}‚‚‚<¸k×®L ŸÒáu>Æ ;þ<}Àüüü .tÒAÁpž'Ñ‹¾Áî2½¦@ïØ¸qã¡C‡BCCøìÙ³~øaß¾}ƒNIIaÙ«ÿþAAA~~~}úôi1}ñAIDAThhÈÈÈàñxô`Þ‚ Äbq\\œX,?~¼¥¥eMMX,vww§æyÎ;÷èѣ˖-ËÏÏ ´¶¶®¬¬{ö¬L¡Pheeeaa!âãã™=Ÿ³gϦ¬êׯߜ9sêëëÙ{>eúc¥RiuuµH$²µµµ··Ÿ:uê­[·˜{©tA!‰ÄÑÑ‘êØ”oj¿“hkk[¶lÙóÏ?oeeõÊ+¯äççËD cêDC5$½ì:aÐM½äx(}K.–C/pü?¡ƒ¿¼uû¶Ð{4ýRRZ$ å7fJÔÛç »q$Oß;3)« {£˜c¿,,* ^•œD—dîØ9ã½ØIa¡»öìݽwÿhoïîÉÓì›u}¹Ôø;« ctm~YX\ìëãÃ,)¯¸ø¦¹¹yXHp9cXû‰ÌsœZÓäL´UÆÕrö#Í/‹ŠKê~ý5eõšÁƒ­LN:dpcS“ !¤—ƒCƒÖ¤—?zSoÇ,sn iZ,ÖF²^æå|OýQU]¸työî]:{cÕ£1Gï O]Ð7 0X½¤ìâRS[Ká;:>hnîig×ÜÜÌwtÔA™Aî¥ãž2:ø$'@Ktíøe(ü—Š BÈÕkUBwBˆÛ×£Çĉ$7/o¸`XW'"º)–KÉágr)Àý vI¢F¬¿0½\š¼dÙŠQ~c>M[GÍ’:eʶŒL¿×^ß¾3kzô;¸º Á L½FþALeðx¼ÐÐPe›êî®û¼ƒq¤óΪ{„®íõôð8”½Yâ;Úçø‘ÃZ½Á$[‘iÍI¢FBìX$Ó8çÅhÁk¦$ë{xi_Л­²²²*++“““ }ÇÌPÃtJã̰5{Åj¤žæ²Ê|ÑëïHKK‹©©i×Õ×”^9rz ½T²ŠZ…å—Êk”}ÄewåðË*jSrøI¢Æ²ŠF‹<_]w(GØã$"‘iD'ýÕF‹¢Ý×ÈÁé€ÿq®Æ®8‹fã’ÃWÞ6øÒvØí4?la±YÝi~ØÒÃØýÕøét-nº…­+¿©Î®žª®aT}¬ ÉÞ$´³Ò¯N5ª,)¬/Ë ×ÖÖ†‡‡÷èÑÃÁÁaÚ´i2ë’Ë/n~T|*,,ÌÖÖ¶W¯^ï¼óÎ;wØëS›?þø£¯¯¯µµµ³³sbb¢D"aÚÐÒÒ’’’2lØ0 GGLjˆˆÊÊJúÓÛ·oÏŸ?ßÓÓ³Gæææ/¾øâìÙ³ïÞ½Ë2"ÛÙ¡=¢š»m"‘ÈÚÚúþýûÌÝ !))),Fr´¡  `ܸqÖÖÖNNNË—/g¾2SeÐ8^uƒ£2¼*1ØþXù®'}é+Sh3ú–µÜ+Ë~Ýìí7°FrïÞ½qãÆ544ÄÇÇ2D,±Ôohhˆ}wêãÇ>úè£ÁƒŸ8q"88XåY®]»6yò丸¸>ø //ï³Ï>«««Û½{7õikkk@@@qqq\\œP(¼uëÖ¦M›|}}‹ŠŠ D)//ÏÉÉ ›5k–©©é¹sçÒÓÓOž}ú´©©©¾¾þ·ß~#„ÄÆÆª«—*ýåb S/UÚ–””D¹xñ"µ™™™)£(òp´ÁÃù—¿¿¿µµµüÑX‚¦òÒÈ\M•†qiNèÕûžd>|ØIU#ÛBBBúöíûõ×_gffŽ3F °©® 6Lå¥Q×0u›òK€\Sʨ iÇ%øõ.ÅLHHÈÊÊŠ‰‰)**2dÈñãÇ+++Ùëgfnûí·ããã©çI¨úìéÝK/½4sæLêÇŽËÎÎŽŒŒ;v,õé‚ Äbq\\œX,?~¼¥¥eMMX,vwwß²e !$222###88X$µµµ¿¨Ù³w…/Ìc*NMý|—i—.]"„,\¸åΣÖíÒ ¿7oÞ4559s&n)*Áø%0ÞîYæp¦ÎŽ\²¹þñÊš® K%wÑÁ% s“ñš8q"Z; ß|óM[[ÛÌ™3Šn¿,)-]½ö³šÚº_x!uÅò‘n#nݾ6‰®p¡ð®èvÉÔÙÉ¥Ýò‚6ÍžQ᡺ȩ¹s>éæêååõìٳÇçååM˜0! M]!{öìùõ×_ÓÒÒÞ|óÍQ£F! Ý<~6éÔéÓ­­­û {+B*•:œ»4)ý±èÕ©Phaý¼N–eÀµ‹š„FÞUÀqÍzMÝŽæ-Hpuuµ¶¶677dÌý±„333ÿëׯã~¢Cã—Ož<ñ3N*•.KN9|ä(ôzix¡Ð¸d*[CX;zÙy§¸¯ÁÛEã—øj½¿<_z!`âBHQqɾ¼ÇŒ‹z7æêµ*ä÷pìÆìê‘EŽÃ™Ôc¬ô?\)€ñKMò ¹yÏþìUÉ+!y9ßS…UÕÕ‰K—gïÞ…kŒm4T oë:É”9©2—±ò€^ªÍÝúú/7nJ\´ GÌòÁ..5µµ¸ÀÀ$“]*hua—eŸvג쯕WMˆ%€^ªÍÙüüo¶nûûú´^TI(üó´µ®ÁÕkUBw\`¨‰&{Ö᩹ššÓÛE?Ô2 ÖèåÿX‘²²¾¡Áâ›Ôæ…Âs«S“—,[qýÆ áÈ‘«S“q€K&»¼)KFUJH· dj$½z©”ç‘)ñôð8”½qÆ ™ÜÅOÝžL]¤ØÆœ" €Î‚õ}èfñàøî@÷ÂÓæ/»²ŠZDe¤äð5»¸\z›` ñê¥R#xªÍ(«¨ÕµØu ˆBa`qÐàx'šâÐ¥ ?€^ÐKz @/@‡—_z @/è%½#ÂzB† Ë¿ô )&nå]$–ÌÀ*Kå|ÓË’ÒÒ¥+’ïÖ×|ñ…„… F{{ã€vÄ’EetT§äSè=úBá9™M¡÷hfªÂžýÙ™;v646¾â;:uÅr{{{=ÖËÌ;g¼;),tמ½»÷î‡^bjM,Ùã¯L>uó¢PɔҜÜ#¿ÿþŸ¾|þ¹çþùÍ–•Ÿ®]¿öS=ÖËòŠ+Ÿ®L577 Þ½/Ž@2»_,Ùå“}6V'¯—¯øî}û?^¼hÐÀ„gÏ:t8W³!Õ¶^665ÙØØBz9844â½w€nbèÃušýÙÁ~¨Ÿ‹¾šº"ÕÕÕ#GŒ þ¶¶²ŠŠŒÐo½€îJ1™÷ež2š’ÃצG¸d2I_ŽáñxŠËMLÚÛÛ»ÎSmë%ßÑñAssO;»ææf¾£#îíH¦Ì1•õ7ê©v2]H5b§ýKÆ%z,ÕXbkk{ÿþ}jòNcS“â³øúø”W\ñºS›—Ê.t¡Çzé6Âõè1ñdQXn^ÞpÁ0ÜÚ‘–[¹F´“Þ‘Ë^jUV)2Ç)«è†¡.ö‘£¿ÌÔŸYÓÇË뻜ÃÑQÓ$É7éÛ|}|î>wÎì•kÖ®NMîÍçgìØùûï÷õ[/§N™²"ueÚç_ôéÝ{uj2¾Æî)fdFݱ1…Úɲ»|–3*«¬M¡ÕÚ…ëð/yé]öqâÊO?ݼe«‰‰‰¯÷òO–(Üq°‹KÄ[“ß}ïý‡MxýõäåKYÎÂãñ¤R©ZÞ©½CWÀÅZ7Á@ÜG„ÂHâÀ~ÛU¨I2¡Ðà¼î6(;;cØŸ€äîN·7 ½˜QE‚rAè%nŽâ »’©VnWVQ›’ÃïXNÓíìêt°Ã à«¡–^Ò¨”¡? •²IG ËD|ö€ú#;±'¢:‹jêM~Ù¾fCýM„8 ˆB8h?¿Ô¿÷y•”–‰ÂGù™õö¹ÂBBHþ¹‚IS=}_™õvQI {eùýån}ýøÀ ¦³S¢Þöô}eòÔ¨Ke—'ò¡H$Ÿ¬H=öÕ Q¸ñ4 ùÀâša7 µ¼3ì&¡Ð‘Ïœ‘Y|Õî, %…U».fÐu>Z°pÿƒ­­­ßnß¿p±T*õŸøfåÕkR©ôJeåÁ̽ä+Ë—èt~Î?öV„»—ýQ`ؤS§O·¶¶î?p0ì­ÃŽ{(¾Úüõ†¯þùäÉ““§~ ËHš„|`qͰ›„ZÞp“PèHkkë[Ó¢˜ßnÔÙ]ôÎî‰Á¡=’J¥ !aR©4$ü­kUUR©ôZUus¤›‚|eù=eÖ‡s+¯^“oôR©ôÉ“'>cÆI†"üRÙåöööÒ‹_:”½²|‰Áp6??aÉÒÅ æ;;9© šÇ2ÆÏïè11!¤ôâEúý> ùÀâša7 µ¼3àPÈ;r¡ðõ0zbó.Ñôn¾ÏÏùç&‡¾<Ú/ $¬°¸˜šæ5=öåÑ~QÓc©‰?ô¶|eù½†9ÉåÀ`w/úŸQÅA&÷<˜?Ï땱‘ïDW×ÔI(䀼kFÒ$¸xg ¡`qD~¾1Ü%:‰Þ¬W ?€^ÐKz è%½ —ô€^zÖTó:=7þ+ºIEND®B`‚aprx-2.9.0/agwpesocket.c000664 000000 000000 00000047247 13040775352 015160 0ustar00rootroot000000 000000 /* **************************************************************** * * * * APRX -- 2nd generation APRS iGate and digi with * * minimal requirement of esoteric facilities or * * libraries of any kind beyond UNIX system libc. * * * * (c) Matti Aarnio - OH2MQK, 2007-2014 * * * * **************************************************************** */ #include "aprx.h" #ifdef ENABLE_AGWPE /*** AGWPE interface description from Xastir + AGWPE documents. *** As those documents are unclear, I am using Xastir to supply *** clue as to what really needs to be done. // How to Start your application and register with AGW Packet Engine // First of all create a stream socket and connect with // AGW Packet Engine ip address at port 8000. // If your application is running at the same machine with // AGWPE then as ip address use localhost (127.0.0.1). // // After connecting you need to register your application's // callsign if your application need to establish AX.25 connections. // If your application just do monitoring and sends Unproto frames, // no need for callsign registration. // You can register as many as 100 different callsigns. // If you register a callsign then AGW Packet Engine accepts AX.25 // connections for this call. // You then ask AGWPE to send you the radioport information. // How many radioports are with their description. // After that you can create your windows or anything else. // // Now you are ready. // If you wish to do monitoring then you must enable monitoring. // Transmit a special frame in Raw AX25 format // // The frame must be in RAW AX25 format as should be txed by // the modem (no need for bit stuffing etc) // You can use this function to tx for instance an unproto // frame with a special PID or any other frame different from normal AX25 Format. // // Port field is the port where we want the data to tx // DataKind field = MAKELONG('K',0); The ASCII value of letter K // CallFrom empty (NULL) // CallTo empty (NULL) // DataLen is the length of the data that follow // USER is Undefined // // the whole frame with the header is // // [ HEADER ] // [port][DataKind][CallFrom][CallTo ][DataLen][USER][Data ] // 4bytes 4bytes 10bytes 10bytes 4bytes 4bytes DataLen Bytes // // ASK RadioPorts Number and descriptions // // Port field must be 0 // DataKind field =MAKELONG('G',0); The ASCII value of letter G // CallFrom is empty (NULL) // CallTo is empty(NULL) // DataLen must be 0 // USER is undefined // No data field must exists // [ HEADER ] // [port][DataKind][CallFrom][CallTo ][DataLen][USER] // 4bytes 4bytes 10bytes 10bytes 4bytes 4bytes // // ASK To start receiving AX25 RAW Frames // // Sending again thos command will disable this service. // You can start and stop this service any times you needed // // Port field no needed set it to 0 // DataKind field =MAKELONG('k',0); The ASCII value of lower case letter k // CallFrom is empty no needed // CallTo is empty no needed // DataLen must be 0 // USER is undefined // No data field must be present // // the whole frame with the header is // // [ HEADER ] // [port][DataKind][CallFrom][CallTo ][DataLen][USER] // 4bytes 4bytes 10bytes 10bytes 4bytes 4bytes // Raw AX25 Frames // // You can receive RAW AX25 frames if you enable this service. // Those frames are all the packet valid frames received from // any radioport. The frame is exactly the same as the pure // AX25 frame with the follow additions. // // The first byte always contains the radioport number 0 for 1st radioport. // There is no FCS field at the end of the frame. // There is no bit stuffing. // The LOWORD Port field is the port which heard the frame // The LOWORD DataKind field ='K'; The ASCII value of letter K // CallFrom the callsign of the station who TX the frame(Source station) // CallTo The callsign of the destination station // DataLen is the length of the DATA field(the length of the frame // USER is undefined. // the whole frame with the header is // [port][DataKind][CallFrom][CallTo ][DataLen][USER][DATA ] // 4bytes 4bytes 10bytes 10bytes 4bytes 4bytes DataLen Bytes // 1.UNPROTO monitor frame // // The LOWORD Port field is the port which heard the frame // The LOWORD DataKind field ='U'; The ASCII value of letter U // CallFrom= is the call from the station we heard the Packet // CallTo =is the destination call (CQ,BEACON etc) // DataLen= is the length of the data that follow // the whole frame with the header is // [port][DataKind][CallFrom][CallTo ][DataLen][USER][Data ] // 4bytes 4bytes 10bytes 10bytes 4bytes 4bytes DataLen Bytes // 4.RadioPort information // // The LOWORD Port field is always 0 // The LOWORD DataKind field ='G'; The ASCII value of letter G // CallFrom empty(NULL) // CallTo empty(NULL) // DataLen is the length of the data that follow // USER is undefined // the whole frame with the header is // [port][DataKind][CallFrom][CallTo ][DataLen][USER][Data ] // 4bytes 4bytes 10bytes 10bytes 4bytes 4bytes DataLen Bytes // the data field format is as follow in plain text // howmany ports ;1st radioport description;2nd radioport;....;last radioport describtion // like // 2;TNC2 on serialport 1;OE5DXL on serialport2; // We have here 2 radioports. The separator is the ';' // 10. Reply to a 'G' command. This frame returns the radioport number // and description // // Port field is always 0 // LOWORD DataKind field ='G'. The ASCII value of letter G // CallFrom is empty (NULL) // CallTo is empty(NULL) // DataLen =The number of bytes of DATA field // USER is undefined // DATA field conatins the radioport description // [ HEADER ] // [port][DataKind][CallFrom][CallTo ][DataLen][USER] [DATA] // 4bytes 4bytes 10bytes 10bytes 4bytes 4bytes Datalen bytes. // // The DATA field is organised as follow and is in plain ASCII. // // Number of Radioports;First radioport description(Friendlyname);Second radioport description(Friendly name)........... // // Number of radioports=a Decimal Value. A value of 3 means 3 radioports // Radioport description= A string that describes the radioport. // The separator between fields is the letter ';'. // Just parse the whole DATA field and use as separator the ';' // // Xastir parses integer data like this: That is, it is LITTLE ENDIAN // // Fetch the length of the data portion of the packet // data_length = (unsigned char)(input_string[31]); // data_length = (data_length << 8) + (unsigned char)(input_string[30]); // data_length = (data_length << 8) + (unsigned char)(input_string[29]); // data_length = (data_length << 8) + (unsigned char)(input_string[28]); // ***/ // Socket communication packet header struct agwpeheader { uint32_t radioPort; // 0..3 uint32_t dataKind; // 4..7 uint8_t fromCall[10]; // 8..17 uint8_t toCall[10]; // 18..27 uint32_t dataLength; // 28..31 uint32_t userField; // 32..35 }; struct agwpesocket; // forward declarator // One agwpecom per connection to AGWPE struct agwpecom { int fd; struct timeval wait_until; const struct netresolver *netaddr; int socketscount; const struct agwpesocket **sockets; int wrlen; int wrcursor; int rdneed; // this much in rdbuf before decision int rdlen; int rdcursor; uint8_t wrbuf[4196]; uint8_t rdbuf[4196]; }; // One agwpesocket per interface struct agwpesocket { int portnum; const struct aprx_interface *iface; struct agwpecom *com; }; static struct agwpecom **pecom; static int pecomcount; static uint32_t get_le32(uint8_t *u) { return (u[3] << 24 | u[2] << 16 | u[1] << 8 | u[0]); } static void set_le32(uint8_t *u, uint32_t value) { u[0] = (uint8_t)value; value >>= 8; u[1] = (uint8_t)value; value >>= 8; u[2] = (uint8_t)value; value >>= 8; u[3] = (uint8_t)value; } static struct agwpecom *agwpe_find_or_add_com(const char *hostname, const char *hostport) { struct agwpecom *com; int i; for (i = 0; i < pecomcount; ++i) { com = pecom[i]; if (strcasecmp(hostname,com->netaddr->hostname) == 0 && strcasecmp(hostport,com->netaddr->port) == 0) { return com; // Found it! } } // Did not find it, create it.. com = calloc(1, sizeof(*com)); com->fd = -1; com->netaddr = netresolv_add(hostname, hostport); com->rdneed = sizeof(struct agwpeheader); tv_timeradd_millis(&com->wait_until, &tick, 30000); // redo in 30 seconds or so ++pecomcount; pecom = realloc(pecom, sizeof(void*)*pecomcount); pecom[pecomcount-1] = com; return com; } void *agwpe_addport(const char *hostname, const char *hostport, const char *agwpeport, const struct aprx_interface *interface) { int agwpeportnum = atoi(agwpeport); struct agwpesocket *S; struct agwpecom *com; if (agwpeportnum < 1 || agwpeportnum > 999) { if (debug) printf("ERROR: Bad AGWPE port number value, accepted range: 1 to 999\n"); return NULL; } S = calloc(1, sizeof(*S)); com = agwpe_find_or_add_com(hostname, hostport); com->socketscount++; com->sockets = realloc(com->sockets, sizeof(void*)*com->socketscount); com->sockets[com->socketscount-1] = S; S->iface = interface; S->com = com; S->portnum = agwpeportnum-1; return S; } // close the AGWPE communication socket, retry its call at some point latter static void agwpe_reset(struct agwpecom *com, const char *why) { com->wrlen = com->wrcursor = 0; tv_timeradd_millis(&com->wait_until, &tick, 30000); // redo in 30 seconds or so if (debug>1) printf("Resetting AGWPE socket; %s\n", why); if (com->fd < 0) { // Should not happen.. return; } close(com->fd); com->fd = -1; } /* * agwpe_flush() -- write out buffered data - at least partially */ static void agwpe_flush(struct agwpecom *com) { int i, len; if (com->fd < 0) return; // nothing to do! if ((com->wrlen == 0) || (com->wrlen > 0 && com->wrcursor >= com->wrlen)) { com->wrlen = com->wrcursor = 0; /* already all written */ return; } /* Now there is some data in between wrcursor and wrlen */ #ifndef MSG_NOSIGNAL # define MSG_NOSIGNAL 0 /* This exists only on Linux */ #endif len = com->wrlen - com->wrcursor; if (len > 0) { i = send(com->fd, com->wrbuf + com->wrcursor, len, MSG_NOSIGNAL); /* No SIGPIPE if the receiver is out, or pipe is full because it is doing slow reconnection. */ } else i = 0; if (i < 0 && (errno == EPIPE || errno == ECONNRESET || errno == ECONNREFUSED || errno == ENOTCONN)) { /* Sending failed, reset it.. */ agwpe_reset(com,"write to remote closed socket"); return; } if (i > 0) { /* wrote something */ com->wrcursor += i; len = com->wrlen - com->wrcursor; if (len == 0) { com->wrcursor = com->wrlen = 0; /* wrote all ! */ } else { /* compact the buffer a bit */ memcpy(com->wrbuf, com->wrbuf + com->wrcursor, len); com->wrcursor = 0; com->wrlen = len; } } } void agwpe_sendto(const void *_ap, const uint8_t *axaddr, const int axaddrlen, const char *axdata, const int axdatalen) { struct agwpesocket *agwpe = (struct agwpesocket*)_ap; struct agwpecom *com = agwpe->com; int space = sizeof(com->wrbuf) - com->wrlen; struct agwpeheader hdr; if (debug) { // printf("agwpe_sendto(->%s, axlen=%d)", S->ttycallsign[tncid], ax25rawlen); } if (com->fd < 0) { if (debug) printf("NOTE: Write to non-open AGWPE socket discarded."); return; } agwpe_flush(com); // write out buffered data, if any if (space < (sizeof(struct agwpeheader) + axaddrlen + axdatalen)) { // Uh, no space at all! if (debug) printf("ERROR: No buffer space to send data to AGWPE socket"); return; } memset(&hdr, 0, sizeof(hdr)); set_le32((uint8_t*)(&hdr.radioPort), agwpe->portnum); set_le32((uint8_t*)(&hdr.dataKind), 'K'); set_le32((uint8_t*)(&hdr.dataLength), axaddrlen + axdatalen); memcpy(com->wrbuf + com->wrlen, &hdr, sizeof(hdr)); com->wrlen += sizeof(hdr); memcpy(com->wrbuf + com->wrlen, axaddr, axaddrlen); com->wrlen += axaddrlen; memcpy(com->wrbuf + com->wrlen, axdata, axdatalen); com->wrlen += axdatalen; agwpe_flush(com); // write out buffered data // Account transmission erlang_add(agwpe->iface->callsign, ERLANG_TX, axaddrlen+axdatalen + 10, 1); // agwpe_sendto() } static int agwpe_controlwrite(struct agwpecom *com, const uint32_t oper) { int space = sizeof(com->wrbuf) - com->wrlen; struct agwpeheader hdr; if (debug) { printf("agwpe_controlwrite(oper=%x (%c))\n", oper, oper); } if (com->fd < 0) { if (debug) printf("NOTE: Write to non-open AGWPE socket discarded.\n"); return -1; } agwpe_flush(com); // write out buffered data, if any if (space < sizeof(hdr)) { // No room :-( return -1; } memset(&hdr, 0, sizeof(hdr)); set_le32((uint8_t*)(&hdr.dataKind), oper); if (debug) hexdumpfp(stdout, (const uint8_t *)&hdr, sizeof(hdr), 0); memcpy(com->wrbuf + com->wrlen, &hdr, sizeof(hdr)); com->wrlen += sizeof(hdr); agwpe_flush(com); // write out buffered data return 0; } static void agwpe_parse_raw_ax25(struct agwpecom *com, struct agwpeheader *hdr, const uint8_t *rxbuf) { #warning "WRITEME: AGWPE Raw AX.25 reception" } static void agwpe_parsereceived(struct agwpecom *com, struct agwpeheader *hdr, const uint8_t *rxbuf) { uint8_t frameType = hdr->dataKind; if (debug) { int i; int rcvlen = hdr->dataLength; printf("AGWPE hdr radioPort=%d dataKind=0x%x fromcall='%s' tocall='%s'" " datalen=%d userfield=%x\n", hdr->radioPort, hdr->dataKind, hdr->fromCall, hdr->toCall, rcvlen, hdr->userField); if (rcvlen > 512) rcvlen=512; printf("AGWPE Data: "); for (i = 0; i < rcvlen; ++i) printf(" %02x", rxbuf[i]); printf("\n"); printf("AGWPE Text: "); for (i = 0; i < rcvlen; ++i) { uint8_t c = rxbuf[i]; if (32 <= c && c <= 126) printf(" %c", c); else printf(" %02x", c); } printf("\n"); printf("AGWPE AX25: "); for (i = 0; i < rcvlen; ++i) { uint8_t c = rxbuf[i] >> 1; if (32 <= c && c <= 126) printf(" %c", c); else printf(" %02x", c); } printf("\n"); } switch (frameType) { case 'K': // Raw AX.25 frame received agwpe_parse_raw_ax25(com, hdr, rxbuf); break; default: // Everything else: discard break; } } static void agwpe_read(struct agwpecom *com) { int rcvspace = sizeof(com->rdbuf) - com->rdlen; int rcvlen; struct agwpeheader hdr; if (com->fd < 0) { // Should not happen.. return; } if (com->rdlen > com->rdcursor) { memcpy(com->rdbuf, com->rdbuf + com->rdcursor, com->rdlen - com->rdcursor); com->rdlen -= com->rdcursor; } com->rdcursor = 0; rcvlen = read(com->fd, com->rdbuf + com->rdlen, rcvspace); if (rcvlen > 0) com->rdlen += rcvlen; if (com->rdlen < com->rdneed) { // insufficient amount received, continue with it latter return; } while (com->rdlen >= com->rdneed) { hdr.radioPort = get_le32(com->rdbuf + 0); hdr.dataKind = get_le32(com->rdbuf + 4); memcpy(hdr.fromCall, com->rdbuf + 8, 10); memcpy(hdr.toCall, com->rdbuf + 18, 10); hdr.dataLength = get_le32(com->rdbuf + 28); hdr.userField = get_le32(com->rdbuf + 32); if (com->rdneed < (sizeof(hdr) + hdr.dataLength)) { // recalculate needed data size com->rdneed = sizeof(hdr) + hdr.dataLength; } if (com->rdneed > sizeof(com->rdbuf)) { // line noise or something... agwpe_reset(com,"received junk data"); return; } if (com->rdlen < com->rdneed) { // insufficient amount received.. break; } // Process received frame agwpe_parsereceived(com, &hdr, com->rdbuf + sizeof(hdr)); com->rdcursor += sizeof(hdr) + hdr.dataLength; if (com->rdlen > com->rdcursor) { memcpy(com->rdbuf, com->rdbuf + com->rdcursor, com->rdlen - com->rdcursor); com->rdlen -= com->rdcursor; } com->rdcursor = 0; com->rdneed = sizeof(hdr); } } static void agwpe_connect(struct agwpecom *com) { int i; // Initial protocol reading parameters com->rdcursor = 0; com->rdneed = sizeof(struct agwpeheader); // Create socket if (debug>1) { printf("AGWPE socket(%d %d %d)\n", com->netaddr->ai.ai_family, com->netaddr->ai.ai_socktype, com->netaddr->ai.ai_protocol); } com->fd = socket(com->netaddr->ai.ai_family, com->netaddr->ai.ai_socktype, com->netaddr->ai.ai_protocol); if (com->fd < 0) { if (debug) printf("ERROR at AGWPE socket creation: errno=%d %s\n",errno,strerror(errno)); agwpe_reset(com,"error at socket() creation"); return; } // Put it on non-blocking mode fd_nonblockingmode(com->fd); // Connect i = connect(com->fd, com->netaddr->ai.ai_addr, com->netaddr->ai.ai_addrlen); // Should result "EINPROGRESS" if (i < 0 && (errno != EINPROGRESS && errno != EINTR)) { // Unexpected fault! if (debug) printf("ERROR on non-blocking connect(): errno=%d (%s)\n", errno, strerror(errno)); agwpe_reset(com,"connect failure"); return; } // Aprx will snoop everything that happens on radio ports, // and receive frames in raw AX.25. // Queue necessary configuration parameters on newly constructed socket agwpe_controlwrite(com, 'k'); // Ask for raw AX.25 frames agwpe_controlwrite(com, 'm'); // Ask for full monitoring of all interfaces } /* * agwpe_init() */ void agwpe_init(void) { /* nothing.. */ } /* * agwpe_start() */ void agwpe_start(void) { /* nothing.. */ } /* * agwpe_prepoll() -- prepare system for next round of polling */ int agwpe_prepoll(struct aprxpolls *app) { int idx = 0; /* returns number of *fds filled.. */ int i; struct agwpecom *S; struct pollfd *pfd; for (i = 0; i < pecomcount; ++i) { S = pecom[i]; if (S->fd < 0) { /* Not an open TTY, but perhaps waiting ? */ if ((S->wait_until.tv_sec != 0) && tv_timercmp(&S->wait_until, &tick) > 0) { if (tv_timerdelta_millis(&S->wait_until, &tick) > 60000) { // Verify that wait is not too long -- system time jumped backwards? (but not 68 years..) S->wait_until = tick; } /* .. waiting for future! */ if (tv_timercmp(&app->next_timeout, &S->wait_until) > 0) app->next_timeout = S->wait_until; /* .. but only until our timeout, if it is sooner than global one. */ continue; /* Waiting on this one.. */ } /* Waiting or not, FD is not open, and deadline is past. Lets try to open! */ agwpe_connect(S); } /* .. No open FD */ /* Still no open FD ? */ if (S->fd < 0) continue; // FD is open, lets mark it for poll read.. pfd = aprxpolls_new(app); pfd->fd = S->fd; pfd->events = POLLIN | POLLPRI; pfd->revents = 0; // .. and if needed, poll write. if (S->wrlen > S->wrcursor) pfd->events |= POLLOUT; ++idx; } return idx; } /* * agwpe_postpoll() -- Done polling, what happened ? */ int agwpe_postpoll(struct aprxpolls *app) { int idx, i; struct agwpecom *S; struct pollfd *P; for (idx = 0, P = app->polls; idx < app->pollcount; ++idx, ++P) { if (!(P->revents & (POLLIN | POLLPRI | POLLERR | POLLHUP))) continue; /* No read event we are interested in... */ for (i = 0; i < pecomcount; ++i) { S = pecom[i]; if (S->fd != P->fd) continue; /* Not this one ? */ /* It is this one! */ if (P->revents & POLLOUT) agwpe_flush(S); agwpe_read(S); } } return 0; } #endif aprx-2.9.0/apparmor.aprx000664 000000 000000 00000000450 13040775352 015176 0ustar00rootroot000000 000000 #include /sbin/aprx { #include #include capability setgid, capability setuid, capability sys_chroot, /etc/aprx.conf r, owner /var/run/aprx.pid rwk, owner /var/run/aprx.state rwk, owner /var/log/aprx/* rwk, } aprx-2.9.0/aprsis.c000664 000000 000000 00000072601 13040775352 014135 0ustar00rootroot000000 000000 /* **************************************************************** * * * * APRX -- 2nd generation receive-only APRS-i-gate with * * minimal requirement of esoteric facilities or * * libraries of any kind beyond UNIX system libc. * * * * (c) Matti Aarnio - OH2MQK, 2007-2014 * * * * **************************************************************** */ /* This code works only with single aprsis-server instance! */ #include "aprx.h" #ifndef DISABLE_IGATE #include #include #include #include #include #ifdef HAVE_NETINET_SCTP_H #include #endif #if defined(HAVE_PTHREAD_CREATE) && defined(ENABLE_PTHREAD) #include pthread_t aprsis_thread; pthread_attr_t pthr_attrs; #endif /* * $aprsserver = "rotate.aprs.net:14580"; * * re-resolve the $aprsserver at each connection setup! * * The APRS-IS system connection runs as separate sub-process, once it starts. * This way the main-loop is independent from uncertainties of DNS resolving * delay times in this part of the code. * */ enum aprsis_mode { MODE_TCP, MODE_SSL, MODE_SCTP, MODE_DTLS }; static char default_passcode[] = "-1"; struct aprsis_host { char *server_name; char *server_port; char *login; char *pass; char *filterparam; int heartbeat_monitor_timeout; enum aprsis_mode mode; }; struct aprsis { int server_socket; struct aprsis_host *H; time_t next_reconnect; time_t last_read; int wrbuf_len; int wrbuf_cur; int rdbuf_len; int rdbuf_cur; int rdlin_len; char wrbuf[16000]; char rdbuf[3000]; char rdline[500]; }; char * const aprsis_loginid; static struct aprsis *AprsIS; static struct aprsis_host **AISh; static int AIShcount; static int AIShindex; static int aprsis_up = -1; /* up & down talking socket(pair), The aprsis talker (thread/child) uses this socket. */ static int aprsis_down = -1; /* down talking socket(pair), The aprx main loop uses this socket */ //static dupecheck_t *aprsis_rx_dupecheck; //int aprsis_dupecheck_storetime = 30; extern int log_aprsis; extern int die_now; void aprsis_init(void) { aprsis_up = -1; aprsis_down = -1; } //void enable_aprsis_rx_dupecheck(void) { // aprsis_rx_dupecheck = dupecheck_new(aprsis_dupecheck_storetime); //} #if !(defined(HAVE_PTHREAD_CREATE) && defined(ENABLE_PTHREAD)) static void sig_handler(int sig) { die_now = 1; signal(sig, sig_handler); } #endif /* *Close APRS-IS server_socket, clean state.. */ // APRS-IS communicator static void aprsis_close(struct aprsis *A, const char *why) { if (A->server_socket >= 0) close(A->server_socket); /* close, and flush write buffers */ A->server_socket = -1; A->wrbuf_len = A->wrbuf_cur = 0; A->next_reconnect = tick.tv_sec + 10; A->last_read = tick.tv_sec; if (!A->H) return; /* Not connected, nor defined.. */ aprxlog("CLOSE APRSIS %s:%s %s", A->H->server_name, A->H->server_port, why ? why : ""); } /* * aprsis_queue_() - internal routine - queue data to specific APRS-IS instance */ // APRS-IS communicator static int aprsis_queue_(struct aprsis *A, const char * const addr, const char qtype, const char *gwcall, const char * const text, int textlen) { int i; char addrbuf[1000]; int addrlen, len; char * p; /* Queue for sending to APRS-IS only when the socket is operational */ if (A->server_socket < 0) return 1; /* Here the A->H->login is always set. */ /* * Append stuff on the writebuf, if it fits. * If it does not fit, something is broken already * and we just drop it.. * * Just to make sure that the write pointer is not left * rewound when all has been done... */ if (A->wrbuf_cur >= A->wrbuf_len && A->wrbuf_len > 0) A->wrbuf_cur = A->wrbuf_len = 0; addrlen = 0; if (addr) addrlen = sprintf(addrbuf, "%s,qA%c,%s:", addr, qtype, (gwcall && *gwcall) ? gwcall : A->H->login); aprsis_login = A->H->login; len = addrlen + textlen; /* Does it fit in ? */ if ((sizeof(A->wrbuf) - 10) <= (A->wrbuf_len + len)) { /* The string does not fit in, perhaps it needs compacting ? */ if (A->wrbuf_cur > 0) { /* Compacting is possible ! */ memcpy(A->wrbuf, A->wrbuf + A->wrbuf_cur, A->wrbuf_len - A->wrbuf_cur); A->wrbuf_len -= A->wrbuf_cur; A->wrbuf_cur = 0; } /* Check again if it fits in.. */ if ((sizeof(A->wrbuf) - 10) <= (A->wrbuf_len + len)) { /* NOT! Too bad, drop it.. */ return 2; } } /* Place it on our send buffer */ if (addrlen > 0) { memcpy(A->wrbuf + A->wrbuf_len, addrbuf, addrlen); A->wrbuf_len += addrlen; } /* If there is CR or LF within the packet, terminate packet at it.. */ p = memchr(text, '\r', textlen); if (p != NULL) { textlen = p - text; } p = memchr(text, '\n', textlen); if (p != NULL) { textlen = p - text; } /* Append CR+LF at the end of the packet */ p = (char*)(text + textlen); *p++ = '\r'; *p++ = '\n'; textlen += 2; memcpy(A->wrbuf + A->wrbuf_len, text, textlen); A->wrbuf_len += textlen; /* Always supplied with tail newline.. */ /* -- debug -- fwrite(A->wrbuf,A->wrbuf_len,1,stdout); return 0; */ /* Try writing it right away: */ i = write(A->server_socket, A->wrbuf + A->wrbuf_cur, A->wrbuf_len - A->wrbuf_cur); if (i > 0) { // the buffer's last character is \n, don't write it if (log_aprsis) aprxlog(A->wrbuf + A->wrbuf_cur, (A->wrbuf_len - A->wrbuf_cur) -1, "<< %s:%s << ", A->H->server_name, A->H->server_port); A->wrbuf_cur += i; if (A->wrbuf_cur >= A->wrbuf_len) { /* Wrote all ! */ A->wrbuf_cur = A->wrbuf_len = 0; } } return 0; } /* * THIS CONNECT ROUTINE WILL BLOCK (At DNS resolving) * * This is why APRSIS communication is run at either * a fork()ed child, or separate pthread from main loop. */ // APRS-IS communicator static void aprsis_reconnect(struct aprsis *A) { struct addrinfo req, *ai, *a; int i; char *s; char aprsislogincmd[3000]; const char *errstr; int errcode; memset(aprsislogincmd, 0, sizeof(aprsislogincmd)); // please valgrind aprsis_close(A, "reconnect"); if (A->H == NULL) { A->H = AISh[AIShindex=0]; } else { ++AIShindex; if (AIShindex >= AIShcount) AIShindex = 0; A->H = AISh[AIShindex]; } if (!A->H->login) { if (log_aprsis) aprxlog("FAIL - APRSIS-LOGIN not defined, no APRSIS connection!"); return; /* Will try to reconnect in about 60 seconds.. */ } aprsis_login = A->H->login; memset(&req, 0, sizeof(req)); req.ai_socktype = SOCK_STREAM; req.ai_protocol = IPPROTO_TCP; req.ai_flags = 0; req.ai_family = AF_UNSPEC; ai = NULL; i = getaddrinfo(A->H->server_name, A->H->server_port, &req, &ai); errstr = "address resolution failure"; errcode = errno; if (i != 0) { fail_out:; /* Discard stuff and redo latter.. */ if (ai) freeaddrinfo(ai); aprsis_close(A, "fail on connect"); aprxlog("FAIL - Connect to %s:%s failed: %s - errno=%d - %s", A->H->server_name, A->H->server_port, errstr, errno, strerror(errcode)); return; } for (a = ai; (a != NULL) && (A->server_socket < 0); a = a->ai_next) { errstr = "socket formation failed"; A->server_socket = socket(a->ai_family, a->ai_socktype, a->ai_protocol); errcode = errno; if (A->server_socket < 0) { if (debug) printf("aprsis failed to open socket.\n"); continue; } if(debug) { char addrstr[INET6_ADDRSTRLEN]; void *sin_ptr = NULL; switch (a->ai_family) { case AF_INET: sin_ptr = &((struct sockaddr_in *) a->ai_addr)->sin_addr; break; case AF_INET6: sin_ptr = &((struct sockaddr_in6 *) a->ai_addr)->sin6_addr; break; } inet_ntop (a->ai_family, sin_ptr, addrstr, INET6_ADDRSTRLEN); printf("aprsis connection attempt IPv%d address: %s\n", (a->ai_family == PF_INET6) ? 6 : 4, addrstr); } errstr = "connection failed"; i = connect(A->server_socket, a->ai_addr, a->ai_addrlen); errcode = errno; if (i < 0) { if (debug) printf("aprsis connection failed.\n"); /* If connection fails, try next possible address */ close(A->server_socket); A->server_socket = -1; continue; } } if (A->server_socket < 0) goto fail_out; freeaddrinfo(ai); ai = NULL; timetick(); // unpredictable time since system did last poll.. if (time_reset) { if (debug) printf("In time_reset mode, no touching yet!\n"); A->next_reconnect = tick.tv_sec + 10; return; } aprxlog("CONNECT APRSIS %s:%s", A->H->server_name, A->H->server_port); /* From now the socket will be non-blocking for its entire lifetime.. */ fd_nonblockingmode(A->server_socket); /* We do at first sync writing of login, and such.. */ s = aprsislogincmd; s += sprintf(s, "user %s pass %s vers %s %s", A->H->login, A->H->pass, swname, swversion); if (A->H->filterparam) s += sprintf(s, " filter %s", A->H->filterparam); A->last_read = tick.tv_sec; aprsis_queue_(A, NULL, qTYPE_LOCALGEN, "", aprsislogincmd, strlen(aprsislogincmd)); return; /* just a place-holder */ } // APRS-IS communicator static int aprsis_sockreadline(struct aprsis *A) { int i, c; /* Reads multiple lines from buffer, Last one is left into incomplete state */ for (i = A->rdbuf_cur; i < A->rdbuf_len; ++i) { c = 0xFF & (A->rdbuf[i]); if (c == '\r' || c == '\n') { /* End of line, process.. */ if (A->rdlin_len > 0) { A->rdline[A->rdlin_len] = 0; /* */ A->last_read = tick.tv_sec; /* Time stamp me ! */ if (log_aprsis) aprxlog(A->rdline, A->rdlin_len, ">> %s:%s >> ", A->H->server_name, A->H->server_port); /* Send the A->rdline content to main program */ c = send(aprsis_up, A->rdline, A->rdlin_len, 0); /* This may fail with SIGPIPE.. */ if (c < 0 && (errno == EPIPE || errno == ECONNRESET || errno == ECONNREFUSED || errno == ENOTCONN)) { die_now = 1; // upstream socket send failed } } A->rdlin_len = 0; continue; } if (A->rdlin_len < sizeof(A->rdline) - 2) { A->rdline[A->rdlin_len++] = c; } } A->rdbuf_cur = 0; A->rdbuf_len = 0; /* we ignore line reading */ return 0; /* .. this is placeholder.. */ } // APRS-IS communicator static int aprsis_sockread(struct aprsis *A) { int i; int rdspace = sizeof(A->rdbuf) - A->rdbuf_len; if (A->rdbuf_cur > 0) { /* Read-out cursor is not at block beginning, is there unread data too ? */ if (A->rdbuf_cur > A->rdbuf_len) { memcpy(A->rdbuf, A->rdbuf + A->rdbuf_cur, A->rdbuf_len - A->rdbuf_cur); A->rdbuf_len -= A->rdbuf_cur; } else A->rdbuf_len = 0; /* all processed, mark its size zero */ A->rdbuf_cur = 0; /* recalculate */ rdspace = sizeof(A->rdbuf) - A->rdbuf_len; } i = read(A->server_socket, A->rdbuf + A->rdbuf_len, rdspace); if (i > 0) { A->rdbuf_len += i; /* we just ignore the readback.. but do time-stamp the event */ A->last_read = tick.tv_sec; aprsis_sockreadline(A); } return i; } struct aprsis_tx_msg_head { time_t then; int addrlen; int gwlen; int textlen; char qtype; }; /* * Read frame from a socket in between main-program and * APRS-IS interface subprogram. (At APRS-IS side.) * */ // APRS-IS communicator static void aprsis_readup(void) { int i; char buf[10000]; const char *addr; const char *gwcall; const char *text; int textlen; struct aprsis_tx_msg_head head; i = recv(aprsis_up, buf, sizeof(buf), 0); if (i == 0) { /* EOF ! */ if (debug>1) printf("Upstream fd read resulted eof status.\n"); die_now = 1; return; } if (i < 0) { return; /* Whatever was the reason.. */ } buf[i] = 0; /* String Termination NUL byte */ memcpy(&head, buf, sizeof(head)); addr = buf + sizeof(head); gwcall = addr + head.addrlen + 1; text = gwcall + head.gwlen + 1; textlen = head.textlen; if (head.then + 10 < tick.tv_sec) { return; /* Too old, discard */ // rflog(); } if (textlen <= 2) { return; // BAD! } if ((text + textlen) > (buf + i)) { return; // BAD! } /* printf("addrlen=%d addr=%s\n",head.addrlen, addr); printf("gwlen=%d gwcall=%s\n",head.gwlen,gwcall); printf("textlen=%d text=%s",head.textlen, text); return; */ /* Now queue the thing! */ if (AprsIS != NULL) aprsis_queue_(AprsIS, addr, head.qtype, gwcall, text, textlen); } // main program side int aprsis_queue(const char *addr, int addrlen, const char qtype, const char *gwcall, const char *text, int textlen) { static char *buf; /* Dynamically allocated buffer... */ static int buflen; int i, len, gwlen = strlen(gwcall); char *p; struct aprsis_tx_msg_head head; int newlen; // dupe_record_t *dp; if (aprsis_down < 0) return -1; // No socket! if (addrlen == 0) /* should never be... */ addrlen = strlen(addr); // if (aprsis_rx_dupecheck != NULL) { // dp = dupecheck_aprs( aprsis_rx_dupecheck, // addr, addrlen, // text, textlen ); // if (dp != NULL) return 1; // Bad either as dupe, or due to alloc failure // } newlen = sizeof(head) + addrlen + gwlen + textlen + 6; if (newlen > buflen) { buflen = newlen; buf = realloc(buf, buflen); memset(buf, 0, buflen); // (re)init it to silence valgrind } memset(&head, 0, sizeof(head)); head.then = tick.tv_sec; head.addrlen = addrlen; head.gwlen = gwlen; head.textlen = textlen; head.qtype = qtype; memcpy(buf, &head, sizeof(head)); p = buf + sizeof(head); memcpy(p, addr, addrlen); p += addrlen; *p++ = 0; /* string terminating 0 byte */ memcpy(p, gwcall, gwlen); p += gwlen; *p++ = 0; /* string terminating 0 byte */ memcpy(p, text, textlen); p += textlen; len = p - buf; *p++ = 0; #ifndef MSG_NOSIGNAL # define MSG_NOSIGNAL 0 /* This exists only on Linux */ #endif i = send(aprsis_down, buf, len, MSG_NOSIGNAL); /* No SIGPIPE if the receiver is out, or pipe is full because it is doing slow reconnection. */ return (i != len); /* Return 0 if ANY of the queue operations was successfull Return 1 if there was some error.. */ } // APRS-IS communicator static int aprsis_prepoll_(struct aprxpolls *app) { struct pollfd *pfd; struct aprsis *A = AprsIS; if (A->last_read == 0) A->last_read = tick.tv_sec; /* mark it non-zero.. */ if (A->server_socket < 0) return -1; /* Not open, do nothing */ if (debug>3) printf("aprsis_prepoll_()\n"); if (time_reset) { aprsis_close(A, "time_reset!"); } /* Not all aprs-is systems send "heartbeat", but when they do.. */ if ((A->H->heartbeat_monitor_timeout > 0) && ((A->last_read + A->H->heartbeat_monitor_timeout - tick.tv_sec) < 0)) { /* * More than 120 seconds (2 minutes) since last time * that APRS-IS systems told us something on the connection. * There is a heart-beat ticking every 20 or so seconds. */ aprsis_close(A, "heartbeat timeout"); } /* FD is open, lets mark it for poll read.. */ pfd = aprxpolls_new(app); pfd->fd = A->server_socket; pfd->events = POLLIN | POLLPRI | POLLERR | POLLHUP; pfd->revents = 0; /* Do we have something for writing ? */ if (A->wrbuf_len) { pfd->events |= POLLOUT; } return 0; } // APRS-IS communicator static int aprsis_postpoll_(struct aprxpolls *app) { int i; struct pollfd *pfd = app->polls; struct aprsis *A = AprsIS; if (debug>3) printf("aprsis_postpoll_() cnt=%d\n", app->pollcount); for (i = 0; i < app->pollcount; ++i, ++pfd) { if (pfd->fd == A->server_socket && pfd->fd >= 0) { /* This is APRS-IS socket, and we may have some results.. */ if (pfd->revents & (POLLERR)) { /* Errors ? */ aprsis_close(A,"postpoll_ POLLERR"); continue; } if (pfd->revents & (POLLHUP)) { /* Errors ? */ aprsis_close(A,"postpoll_ POLLHUP"); continue; } if (pfd->revents & (POLLIN | POLLPRI)) { /* Ready for reading */ for (;;) { i = aprsis_sockread(A); if (i == 0) { /* EOF ! */ aprsis_close(A,"postpoll_ EOF"); continue; } if (i < 0) break; } } if (pfd->revents & POLLOUT) { /* Ready for writing */ /* Normal queue write processing */ if (A->wrbuf_len > 0 && A->wrbuf_cur < A->wrbuf_len) { i = write(A->server_socket, A->wrbuf + A->wrbuf_cur, A->wrbuf_len - A->wrbuf_cur); if (debug>2) printf("%ld << %s:%s << write() rc= %d\n", tick.tv_sec, A->H->server_name, A->H->server_port, i); if (i < 0) continue; /* Argh.. nothing */ // if (i == 0); /* What ? */ if (log_aprsis) aprxlog(A->wrbuf + A->wrbuf_cur, (A->wrbuf_len - A->wrbuf_cur) -1, "<< %s:%s << ", A->H->server_name, A->H->server_port); A->wrbuf_cur += i; if (A->wrbuf_cur >= A->wrbuf_len) { /* Wrote all! */ A->wrbuf_len = A->wrbuf_cur = 0; } else { /* partial write .. do nothing.. */ } } /* .. normal queue */ } /* .. POLLOUT */ } /* .. if fd == server_socket */ } /* .. for .. nfds .. */ return 1; /* there was something we did, maybe.. */ } // APRS-IS communicator static void aprsis_cond_reconnect(void) { if (AprsIS && /* First time around it may trip.. */ AprsIS->server_socket < 0 && (AprsIS->next_reconnect - tick.tv_sec) <= 0) { aprsis_reconnect(AprsIS); } } /* * Main-loop of subprogram handling communication with * APRS-IS network servers. * * This starts only when we have at least one defined without errors. */ // APRS-IS communicator static void aprsis_main(void) { #if !(defined(HAVE_PTHREAD_CREATE) && defined(ENABLE_PTHREAD)) int ppid = getppid(); #endif struct aprxpolls app = APRXPOLLS_INIT; #if !(defined(HAVE_PTHREAD_CREATE) && defined(ENABLE_PTHREAD)) signal(SIGHUP, sig_handler); signal(SIGPIPE, SIG_IGN); #endif /* The main loop */ while (!die_now) { struct pollfd *pfd; timetick(); aprsis_cond_reconnect(); // may take unpredictable time.. timetick(); #if !(defined(HAVE_PTHREAD_CREATE) && defined(ENABLE_PTHREAD)) // Parent-pid makes no sense in threaded setup int i; i = getppid(); if (i != ppid) break; /* die now, my parent is gone.. */ if (i == 1) break; /* a safety fallback case.. */ #endif aprxpolls_reset(&app); tv_timeradd_seconds( &app.next_timeout, &tick, 5 ); if (aprsis_up >= 0) { pfd = aprxpolls_new(&app); pfd->fd = aprsis_up; pfd->events = POLLIN | POLLPRI | POLLERR | POLLHUP; pfd->revents = 0; } aprsis_prepoll_(&app); // Prepolls are done time_reset = 0; if (tv_timercmp(&app.next_timeout, &tick) <= 0) { tv_timeradd_seconds( &app.next_timeout, &tick, 1 ); // Just to be on safe side.. } poll(app.polls, app.pollcount, aprxpolls_millis(&app)); timetick(); assert(app.polls != NULL); if (app.polls[0]. revents & (POLLIN | POLLPRI | POLLERR | POLLHUP)) { /* messaging channel has something for us, if the channel reports EOF, we exit there and then. */ aprsis_readup(); } aprsis_postpoll_(&app); } aprxpolls_free(&app); // valgrind.. /* Got "DIE NOW" signal... */ // exit(0); } /* * aprsis_add_server() - old style configuration */ int aprsis_add_server(const char *server, const char *port) { struct aprsis_host *H; if (AprsIS == NULL) { AprsIS = calloc(1,sizeof(*AprsIS)); } H = calloc(1,sizeof(*H)); AISh = realloc(AISh, sizeof(AISh[0]) * (AIShcount + 1)); AISh[AIShcount] = H; ++AIShcount; /* No inc on AprsIScount */ H->server_name = strdup(server); H->server_port = strdup(port); H->heartbeat_monitor_timeout = 120; // Default timeout 120 seconds H->login = strdup(aprsis_login); // global aprsis_login H->pass = default_passcode; if (H->login == NULL) H->login = strdup(mycall); AprsIS->server_socket = -1; AprsIS->next_reconnect = tick.tv_sec +10; /* perhaps somewhen latter.. */ return 0; } // old style configuration int aprsis_set_heartbeat_timeout(const int tout) { int i = AIShcount; struct aprsis_host *H; if (i > 0) --i; H = AISh[i]; H->heartbeat_monitor_timeout = tout; return 0; } // old style configuration int aprsis_set_filter(const char *filter) { int i = AIShcount; struct aprsis_host *H; if (i > 0) --i; H = AISh[i]; H->filterparam = strdup(filter); return 0; } // old style configuration int aprsis_set_login(const char *login) { int i = AIShcount; struct aprsis_host *H; if (i > 0) --i; H = AISh[i]; H->login = strdup(login); return 0; } #if defined(HAVE_PTHREAD_CREATE) && defined(ENABLE_PTHREAD) static void aprsis_runthread(void) { sigset_t sigs_to_block; sigemptyset(&sigs_to_block); sigaddset(&sigs_to_block, SIGALRM); sigaddset(&sigs_to_block, SIGINT); sigaddset(&sigs_to_block, SIGTERM); sigaddset(&sigs_to_block, SIGQUIT); sigaddset(&sigs_to_block, SIGHUP); sigaddset(&sigs_to_block, SIGURG); sigaddset(&sigs_to_block, SIGPIPE); sigaddset(&sigs_to_block, SIGUSR1); pthread_sigmask(SIG_BLOCK, &sigs_to_block, NULL); // generally the cancelability is enabled pthread_setcancelstate(PTHREAD_CANCEL_ENABLE, NULL); if (debug) printf("aprsis_runthread()\n"); aprsis_main(); } void aprsis_start(void) { int i; int pipes[2]; if (AISh == NULL || AprsIS == NULL) { fprintf(stderr,"***** NO APRSIS SERVER CONNECTION DEFINED *****"); return; } i = socketpair(AF_UNIX, SOCK_DGRAM, PF_UNSPEC, pipes); if (i != 0) { return; /* FAIL ! */ } fd_nonblockingmode(pipes[0]); fd_nonblockingmode(pipes[1]); aprsis_down = pipes[0]; aprsis_up = pipes[1]; if (debug)printf("aprsis_start() PTHREAD socketpair(up=%d,down=%d)\n", aprsis_up, aprsis_down); pthread_attr_init(&pthr_attrs); /* 64 kB stack is enough for this thread (I hope!) default of 2 MB is way too much...*/ pthread_attr_setstacksize(&pthr_attrs, 64*1024); i = pthread_create(&aprsis_thread, &pthr_attrs, (void*)aprsis_runthread, NULL); if (i == 0) { if (debug) printf("APRSIS pthread_create() OK!\n"); } else { // FAIL! close(pipes[0]); close(pipes[1]); aprsis_down = -1; aprsis_up = -1; } } // Shutdown the aprsis thread void aprsis_stop(void) { die_now = 1; pthread_cancel(aprsis_thread); pthread_join(aprsis_thread, NULL); } #else // No pthread(3p) void aprsis_start(void) { int i; int pipes[2]; if (AISh == NULL || AprsIS == NULL) { fprintf(stderr,"***** NO APRSIS SERVER CONNECTION DEFINED *****"); return; } i = socketpair(AF_UNIX, SOCK_DGRAM, PF_UNSPEC, pipes); if (i != 0) { return; /* FAIL ! */ } i = fork(); if (i < 0) { close(pipes[0]); close(pipes[1]); return; /* FAIL ! */ } if (i == 0) { /* Child -- the APRSIS talker */ aprsis_up = pipes[1]; fd_nonblockingmode(pipes[1]); close(pipes[0]); aprsis_main(); exit(0); } /* Parent */ close(pipes[1]); fd_nonblockingmode(pipes[0]); aprsis_down = pipes[0]; } void aprsis_stop(void) { } #endif /* * main-program side pre-poll */ int aprsis_prepoll(struct aprxpolls *app) { int idx = 0; /* returns number of *fds filled.. */ struct pollfd *pfd; // if (debug>3) printf("aprsis_prepoll()\n"); pfd = aprxpolls_new(app); pfd->fd = aprsis_down; /* APRS-IS communicator server Sub-process */ pfd->events = POLLIN | POLLPRI; pfd->revents = 0; /* We react only for reading, if write fails because the socket is jammed, that is just too bad... */ ++idx; return idx; } /* * main-program side reading of aprsis_down */ static int aprsis_comssockread(int fd) { int i; char buf[10000]; i = recv(fd, buf, sizeof(buf), 0); if (debug>3) printf("aprsis_comsockread(fd=%d) -> i = %d\n", fd, i); if (i == 0) return 0; /* TODO: do something with the data ? A receive-only iGate does nothing, but Rx/Tx would do... */ /* Send the frame to Tx-IGate function */ if (i > 0) igate_from_aprsis(buf, i); return 1; } /* * main-program side post-poll */ int aprsis_postpoll(struct aprxpolls *app) { int i; struct pollfd *pfd = app->polls; // if (debug>3) printf("aprsis_postpoll()\n"); for (i = 0; i < app->pollcount; ++i, ++pfd) { if (pfd->fd == aprsis_down) { /* This is APRS-IS communicator subprocess socket, and we may have some results.. */ if (pfd->revents) { /* Ready for reading */ i = aprsis_comssockread(pfd->fd); if (i == 0) { /* EOF ! */ printf("APRS-IS coms subprocess socket EOF from main program side!\n"); continue; } if (i < 0) continue; } } } /* .. for .. nfds .. */ return 1; /* there was something we did, maybe.. */ } // main program side int aprsis_config(struct configfile *cf) { char *name, *param1; char *str = cf->buf; int has_fault = 0; int line0 = cf->linenum; struct aprsis_host *AIH = calloc(1,sizeof(*AIH)); AIH->login = strdup(mycall); AIH->pass = default_passcode; AIH->heartbeat_monitor_timeout = 120; AIH->mode = MODE_TCP; // default mode while (readconfigline(cf) != NULL) { if (configline_is_comment(cf)) continue; /* Comment line, or empty line */ // It can be severely indented... str = config_SKIPSPACE(cf->buf); name = str; str = config_SKIPTEXT(str, NULL); str = config_SKIPSPACE(str); config_STRLOWER(name); param1 = str; str = config_SKIPTEXT(str, NULL); str = config_SKIPSPACE(str); if (strcmp(name, "") == 0) { // End of this interface definition block break; } // APRSIS parameters // login // server // filter // heartbeat-timeout // mode if (strcmp(name, "login") == 0) { if (strcasecmp("$mycall",param1) != 0) { // If not "$mycall" .. config_STRUPPER(param1); if (!validate_callsign_input(param1,0)) { // bad input... } if (debug) printf("%s:%d: INFO: LOGIN = '%s' '%s'\n", cf->name, cf->linenum, param1, str); if (AIH->login) free(AIH->login); AIH->login = strdup(param1); } } else if (strcmp(name, "passcode") == 0) { if (debug) printf("%s:%d: INFO: PASSCODE = '%s' '%s'\n", cf->name, cf->linenum, param1, str); AIH->pass = strdup(param1); } else if (strcmp(name, "server") == 0) { if (AIH->server_name) free(AIH->server_name); AIH->server_name = strdup(param1); param1 = str; str = config_SKIPTEXT(str, NULL); // coverity[returned_pointer] str = config_SKIPSPACE(str); if ('1' <= *param1 && *param1 <= '9') { // fixme: more input analysis? int port = atoi(param1); if (port < 1 || port > 65535) { printf("%s:%d INFO: SERVER = '%s' port='%s' is not supplying valid TCP port number, defaulting to '14580'\n", cf->name, cf->linenum, AIH->server_name, param1); param1 = "14580"; } AIH->server_port = strdup(param1); } else if (*param1 == 0) { // Default silently! AIH->server_port = strdup("14580"); } else { AIH->server_port = strdup("14580"); printf("%s:%d INFO: SERVER = '%s' port='%s' is not supplying valid TCP port number, defaulting to '14580'\n", cf->name, cf->linenum, AIH->server_name, param1); } if (debug) printf("%s:%d: INFO: SERVER = '%s':'%s'\n", cf->name, cf->linenum, AIH->server_name, AIH->server_port); } else if (strcmp(name, "heartbeat-timeout") == 0) { int i = 0; if (config_parse_interval(param1, &i)) { // FIXME: Report parameter failure ... printf("%s:%d: ERROR: HEARTBEAT-TIMEOUT = '%s' - bad parameter'\n", cf->name, cf->linenum, param1); has_fault = 1; } if (i < 0) { /* param failure ? */ i = 0; /* no timeout */ printf("%s:%d: ERROR: HEARTBEAT-TIMEOUT = '%s' - bad parameter'\n", cf->name, cf->linenum, param1); has_fault = 1; } AIH->heartbeat_monitor_timeout = i; if (debug) printf("%s:%d: INFO: HEARTBEAT-TIMEOUT = '%d' '%s'\n", cf->name, cf->linenum, i, str); } else if (strcmp(name, "filter") == 0) { int l1 = (AIH->filterparam != NULL) ? strlen(AIH->filterparam) : 0; int l2 = strlen(param1); AIH->filterparam = realloc( AIH->filterparam, l1 + l2 +2 ); if (l1 > 0) { AIH->filterparam[l1] = ' '; memcpy(&(AIH->filterparam[l1+1]), param1, l2+1); } else { memcpy(&(AIH->filterparam[0]), param1, l2+1); } if (debug) printf("%s:%d: INFO: FILTER = '%s' --> '%s'\n", cf->name, cf->linenum, param1, AIH->filterparam); } else if (strcmp(name, "mode") == 0) { if (strcmp(param1,"tcp") == 0) { AIH->mode = MODE_TCP; } else if (strcmp(param1,"ssl") == 0) { AIH->mode = MODE_SSL; } else if (strcmp(param1,"sctp") == 0) { AIH->mode = MODE_SCTP; } else if (strcmp(param1,"dtls") == 0) { AIH->mode = MODE_DTLS; } else { printf("%s:%d: ERROR: Unknown mode keyword in block: '%s'\n", cf->name, cf->linenum, param1); has_fault = 1; } } else { printf("%s:%d: ERROR: Unknown configuration keyword in block: '%s'\n", cf->name, cf->linenum, name); has_fault = 1; } } if (AIH->server_name == NULL) { printf("%s:%d ERROR: This block does not define server!\n", cf->name, line0); has_fault = 1; } if (has_fault) { if (AIH->server_name != NULL) free(AIH->server_name); if (AIH->server_port != NULL) free(AIH->server_port); if (AIH->filterparam != NULL) free(AIH->filterparam); if (AIH->login != NULL) free(AIH->login); free(AIH); } else { if (AprsIS == NULL) { AprsIS = calloc(1, sizeof(*AprsIS)); AprsIS->server_socket = -1; AprsIS->next_reconnect = tick.tv_sec +10; } if (AIH->pass == default_passcode) { printf("%s:%d WARNING: This block does not define passcode!\n", cf->name, line0); printf("%s:%d WARNING: Your beacons and RF received will not make it to APRS-IS.\n", cf->name, line0); } AISh = realloc(AISh, sizeof(AISh[0]) * (AIShcount + 1)); AISh[AIShcount++] = AIH; } return has_fault; } #endif aprx-2.9.0/aprx-complex.conf.in000664 000000 000000 00000047623 13040775352 016371 0ustar00rootroot000000 000000 # # Sample configuration file for the APRX-2 -- an APRS iGate and Digipeater # # This configuration is structured with Apache HTTPD style tags # which then contain subsystem parameters. # # Define the parameters in following order: # 1) ** zero to many # 2) ** zero or one # 3) ** there can be multiple! # 4) ** zero to many # 5) ** zero to many # 5) ** zero to many (at most one for each Tx) # # # Global macro for simplified callsign definition: # Usable for 99+% of cases. # mycall N0CALL-1 # # Global macro for simplified "my location" definition in # place of explicit "lat nn lon mm" at beacons. Will also # give "my location" reference for "filter m/100". # #myloc lat ddmm.mmN lon dddmm.mmE # Define possibly multiple APRSIS servers, they are connected to # in Round-Robin fashion. There also exist DNS RR servers for # this use, one of them is "rotate.aprsis.net". # The aprsis-login parameter: # Station callsignSSID used for relaying APRS frames into APRS-IS. # #login $mycall # login defaults to $mycall macro # # Passcode for your callsign # passcode -1 # APRS-IS server name and optional portnumber. # # WARNING: Do not change from default port number [14580] # unless you are absolutely certain you want # something else, and you allow that something # else also affect your tx-igate behaviour! # server rotate.aprs2.net #server euro.aprs2.net #server asia.aprs2.net #server noam.aprs2.net #server soam.aprs2.net #server aunz.aprs2.net # Some APRS-IS servers tell every about 20 seconds to all contact # ports that they are there and alive. Others are just silent. # Default value 3*"heartbeat" + some --> 120 (seconds) # #heartbeat-timeout 0 # Disabler in case your server does not do heartbeat #heartbeat-timeout 1m # Interval of one minute (60 seconds) # APRS-IS server may support some filter commands. # See: http://www.aprs-is.net/javAPRSFilter.aspx # # You can define the filter as single long quoted string, or as # many short segments with explaining comments following them. # # Usability of these filters for a Tx-iGate is dubious, but # they exist in case you for example want to Tx-iGate packets # from some source callsigns in all cases even when they are # not in your local area. # #filter "possibly multiple filter specs in quotes" # #filter "m/100" # My-Range filter: positions within 100 km from my location #filter "f/OH2XYZ-3/50" # Friend-Range filter: 50 km of friend's last beacon position # pidfile is UNIX way to tell that others that this program is # running with given process-id number. This has compiled-in # default value of: pidfile @VARRUN@/aprx.pid # pidfile @VARRUN@/aprx.pid # rflog defines a rotatable file into which all RF-received packets # are logged. The host system can rotate it at any time without # need to signal the aprx that the file has been moved. # rflog @VARLOG@/aprx-rf.log # aprxlog defines a rotatable file into which most important # events on APRS-IS connection are logged, namely connects and # disconnects. The host system can rotate it at any time without # need to signal the aprx that the file has been moved. # aprxlog @VARLOG@/aprx.log # dprslog defines a rotatable file into which most important # events on DPRS receiver gateways are logged. # The host system can rotate it at any time without need to # signal the aprx that the file has been moved. # #dprslog @VARLOG@/dprs.log # erlangfile defines a mmap():able binary file, which stores # running sums of interfaces upon which the channel erlang # estimator runs, and collects data. # Depending on the system, it may be running on a filesystem # that actually retains data over reboots, or it may not. # With this backing store, the system does not loose cumulating # erlang data over the current period, if the restart is quick, # and does not stradle any exact minute. # (Do restarts at 15 seconds over an even minute..) # This file is around 0.7 MB per each interface talking APRS. # If this file is not defined or can not be created, internal # non-persistent in-memory storage will be used. # # Built-in default value is: @VARRUN@/aprx.state # #erlangfile @VARRUN@/aprx.state # erlang-loglevel is config file version of the "-l" option # pushing erlang data to syslog(3). # Valid values are (possibly) following: NONE, LOG_DAEMON, # LOG_FTP, LOG_LPR, LOG_MAIL, LOG_NEWS, LOG_USER, LOG_UUCP, # LOG_LOCAL0, LOG_LOCAL1, LOG_LOCAL2, LOG_LOCAL3, LOG_LOCAL4, # LOG_LOCAL5, LOG_LOCAL6, LOG_LOCAL7. If the parameter value is # not acceptable, list of accepted values are printed at startup. # #erlang-loglevel NONE # erlanglog defines a rotatable file into which erlang data # is written in text form. # #erlanglog @VARLOG@/erlang.log # erlang-log1min option logs to syslog/file also 1 minute # interval data from the program. (In addition to 10m and 60m.) # #erlang-log1min # *********** Multiple definitions follow ********* # ax25-device Lists AX.25 ports by their callsigns that in Linux # systems receive APRS packets. If none are defined, # or the system is not Linux, the AX.25 network receiver # is not enabled. Used technologies need at least # Linux kernel 2.4.x # # tx-ok Boolean telling if this device is able to transmit. # # # ax25-device $mycall # tx-ok true # There be transmitter there! # #alias RELAY,WIDE,TRACE # #telem-to-is true # set to 'false' to disable # # The radio serial option. Parameters are: # - /dev/ttyUSB1 -- tty device # - 19200 -- baud rate, supported ones are: # 1200, 2400, 4800, 9600, 19200, 38400 # - 8n1 -- 8-bits, no parity, one stop-bit, # no other supported modes # - KISS/XORSUM/SMACK -- KISS mode variants # TNC2 -- non-KISS text format variant # DPRS -- DPRS (RX) Gateway # # ### KISS mode example with KISS TNC using TNCID 0 # # serial-device /dev/ttyUSB0 19200 8n1 KISS # #alias RELAY,WIDE,TRACE # callsign N0CALL-14 # #telem-to-is true # set to 'false' to disable # ### KISS mode example with multiple sub-interfaces via TNCID multiplexing # # serial-device /dev/ttyUSB0 19200 8n1 KISS # #alias RELAY,WIDE,TRACE # ## kiss-subif 0 == KISS TNCID 0 # # callsign N0CALL-14 # tx-ok true # #telem-to-is true # set to 'false' to disable # # ## kiss-subif 3 == KISS TNCID 3 # # callsign N0CALL-15 # tx-ok false # #telem-to-is true # set to 'false' to disable # # # # serial-device /dev/ttyUSB1 19200 8n1 TNC2 # callsign N0CALL-13 # #telem-to-is true # set to 'false' to disable # # # serial-device /dev/ttyUSB1 19200 8n1 DPRS # callsign dprsgwcallsign # must define actual callsign # #tx-ok false # DPRS monitor can not do transmit # #telem-to-is true # set to 'false' to disable # # # "KISS" - plain basic KISS mode # "XORSUM" alias "BPQCRC" - KISS with BPQ "CRC" byte # "SMACK" alias "CRC16" - KISS with better CRC # "FLEXNET" - KISS with better CRC # "TNC2" - TNC2 monitor format # "DPRS" - DPRS (RX) GW # # Additional/alternate options for the serial-device # # "timeout 15m" sets a timeout monitor (an interval) to make # reopen/reconnect if the serial port/connection to radio # has failed somehow and nothing is heard. Local serial # ports do not in general need this. At APRS silent sites # this may cause repeated reconnects, but it should not # harm either. At busy sites this will handle reconnect # gracefully in case of network failures, and timeout # value can be shortened. # # "" sets optional multiplexer index on KISS type # connections. This id is specific for the multiplexer connection # on given port, and can be in range of 0 thru 7 for SMACK type # links, and up to 15 for KISS, and BPQ type links. # The kiss-subif is settable only for KISS-type connections. # The subif 0 is settable for TNC2 monitor format. # # "callsign NAME" sets callsign used in statistics displays, # and when the message is sent to APRS-IS. # If none are given, then it will use physical port name. # There can be multiple callsign parameters, if each are # prefixed with their own tncid setting. # # "tx-ok true" enables transmit. System will then also require # that used callsign is valid for AX.25. # # "initstring" is of two parts, the keyword, and then a string. # initstring "\xC0\xC0\xFF\xC0\r\nMO 0\rKISS $01\r" # The initstring is a binary string, "\x00" is encodable. # Of the usual C-style codes only "\r" and "\n" are understood. # The initstring is kiss-subif level option. # # # The tcp-device option defines a connection to remote socket # beyond which is a binary transparent connection to a serial # port. The parameter fields: literal IP address (IPv4 or IPv6), # then literal port number, and finally protocol mode. # KISS-protocol parameters are same as with normal serial port. # # # tcp-device 12.34.56.78 4001 KISS # timeout 15m # 15 minutes # #alias RELAY,WIDE,TRACE # # callsign N0CALL-12 # tx-ok false # # # # # tcp-device 12.34.56.78 4002 TNC2 # timeout 5m # 5 minutes # #alias RELAY,WIDE,TRACE # # callsign N0CALL-12 # tx-ok false # # # *********** Multiple definitions follow ********* # # Beacons are sent out to radio transmitters AND/OR APRSIS. # Default is "both", other modes are settable. # #beaconmode { aprsis | both | radio } # # Beacons are sent from a circullar transmission queue, total cycle time # of that queue is 20 minutes by default, and beacons are "evenly" # distributed along it. Actual intervals are randomized to be anything # in between 80% and 100% of the cycle-size / number-of-beacons. # First beacon is sent out 30 seconds after system start. # Tune the cycle-size to be suitable to your number of defined beacons. # #cycle-size 20m # # # Basic beaconed thing is positional message of type "!": # #beacon symbol "R&" lat "0000.00N" lon "00000.00E" comment "Rx-only iGate" #beacon symbol "R&" $myloc comment "Rx-only iGate" # # Following are basic options: # 'symbol' no default, must be defined! # 'lat' coordinate latitude: ddmm.mmN (no default!) # 'lon' coordinate longitude: dddmm.mmE (no default!) # '$myloc' coordinate values taken from global 'myloc' entry, # and usable in place of explicit 'lat'+'lon'. # 'comment' optional tail part of the item, default is nothing # # Sample symbols: # R& is for "Rx-only iGate" # I& is for "Tx-iGate" # /# is for "Digipeater" # I# is for "Tx-iGate + Digipeater"" # # Additional options are: # 'srccall' parameter sets claimed origination address. # 'dstcall' sets destination address, default "APRXnn" # 'interface' parameter picks an interface (must be "tx-ok true" type) # 'via' sets radio distribution pattern, default: none. # 'timefix' On APRS messages with HMS timestamp (hour:min:sec), the # system fixes appropriate field with transmit time timestamp. # # Message type is by default '!', which is positional no timestamp format. # Other possible formats are definable with options: # 'type' Single character setting type: ! = / @, default: ! # 'item' Defines a name of Item (')') type beacons. # 'object' Defines a name of Object (';') type beacons. # # 'file' option tells a file at which a _raw_ APRS message content is # expected to be found as first line of text. Line ending newline # is removed, and no escapes are supported. The timefix is # available, though probably should not be used. # No \-processing is done on read text line. # # 'exec' option tells a computer program which returns to stdout _raw_ APRS # message content without newline. The timefix is # available, though probably should not be used. # No \-processing is done on read text line. # 'timeout' defines number of seconds the exec:ed program has to produce # a single text line of APRS data + ending newline, until it is # considered overdue and will be killed + processing moves to next # beacon item. # # The parameter sets can vary: # a) 'srccall nnn-n dstcall "string" symbol "R&" lat "ddmm.mmN" lon "dddmm.mmE" [comment "any text"] # b) 'srccall nnn-n dstcall "string" symbol "R&" $myloc [comment "any text"] # c) 'srccall nnn-n dstcall "string" raw "string"' # # The a) form flags on some of possible syntax errors in parameters. # It will also create only "!" type messages. The dest parameter # defaults to "APRS", but can be used to give other destinations. # The via parameter can be used to add other keywords, like "NOGATE". # # Writing correct RAW format beacon message is very hard, # which is evidenced by the frequency of bad syntax texts # people so often put there... If you can not be persuaded # not to do it, then at least VERIFY the beacon result on # web service like findu.com, or aprs.fi # # Do remember that the \ -character has special treatment in the # Aprx configuration parser. If you want a '\' on APRS content, # then you encode it on configuration file as: '\\' # # Stranger combinations with explicite "transmit this to interface X": # # #beacon file /tmp/wxbeacon.txt #beacon interface N0CALL-3 srccall N0CALL-3 \ # raw "!0000.00NR00000.00E&aprx - an Rx-only iGate" #beacon interface $mycall symbol "R&" lat "0000.00N" lon "00000.00E" \ # comment "aprx - an Rx-only iGate" #beacon interface $mycall symbol "R&" $myloc \ # comment "aprx - an Rx-only iGate" #beacon interface $mycall symbol "I&" $myloc \ # comment "Tx-iGate" # # *********** definition(s) follow ********* # # The system will always send telemetry for all of its interfaces # to APRSIS, but there is an option to define telemetry to be sent # to radio channel by using following sections for each transmitter # that is wanted to send out the telemetry. # # transmitter - callsign referring to # via - optional via-path, only 1 callsign! # source - one or more of callsigns for which # the telemetry transmission is wanted for # # # transmitter $mycall # via TRACE1-1 # source $mycall # # ## FIXME: to be written # AX.25 filters block selected messages matching on selected regular # expressions. The expressions are case sensitive, and AX.25 address # elements are in all uppercase text. There can be unlimited number # of patterns, type fields are four: "source", "destination", "via", # and "data". These patterns can be used in addition to built-in # hard-coded reject rules listed in documentation. # # ax25-reject-filter source "^NOCALL" # ax25-reject-filter destination "^NOCALL" # ax25-reject-filter via "^NOGATE" # ax25-reject-filter data "^\\?" # # Source interfaces from which the IGATE functionality feeds the data out # By default it feeds from all configured s. # # source IFCALL-1 # source IFCALL-2 # # *********** Multiple definitions follow ********* # The digipeater definitions tell transmitters that receive # AX.25 packets from possibly multiple sources, and then what # to do on the AX.25 headers of those messages. # # There is one transmitter per digipeater -- and inversely, there # can be at most one digipeater for each transmitter. # # In each digipeater there is at least one , usually same # as the transmitter. You may use same on multiple # s. Using multiple instances of same on # a single does not crash the system, but it can cause # packet duplication in case of non-APRS protocols (like AX.25 CONS) # # Use only at most two levels of viscous-delay in your . # Immediate sending is by "0", and a delayed sending is any value # from 1 to 9. This system does not correctly support other than # immediate sending and one level of delay. # # Note: In order to igate correct when multiple receivers and # transmitters are used on single channel, the # definitions of each radio port must have associated # "igate-group N" parameter which has N of value 1 to 3. # See the aprx-manual.pdf for details. # (Default software compilation allows you to have up to # three channels of APRS operation.) # # # # transmitter TXCALL-1 # #ratelimit 60 120 # default: average 60 packets/minute, # # # burst max 120 packets/minute # #srcratelimit 10 20 # Example: by sourcecall: # # average 10 packets/minute, # # burst max 20 packets/minute # # # # # maxreq 4 # # maxdone 4 # # keys TRACE,WIDE,RELAY # # # # # # maxreq 4 # # maxdone 4 # # keys WIDE # # # # # interface TXCALL-1 # # ratelimit 60 120 # default: average 60 packets/minute, # # # burst max 120 packets/minute # # #relay-type digipeat # default mode is "digipeat" # # viscous-delay 0 # default: no viscous delay # # #regex-filter source "RE-pattern" # can define multiple patterns # # #regex-filter destination "RE-pattern" # --"--; generic # # #regex-filter via "RE-pattern" # --"--; generic VIA # # #regex-filter data "RE-pattern" # --"--; APRS payload # # ##filter "javAPRSSrvr adjunct filters" # # # # # Extra receiver(s) # # interface RXCALL-1 # # ratelimit 60 120 # default: average 60 packets/minute, # # # burst max 120 packets/minute # # #relay-type digipeat # default mode is "digipeat" # # #regex-filter source "RE-pattern" # can define multiple patterns # # #regex-filter destination "RE-pattern" # --"--; generic # # #regex-filter via "RE-pattern" # --"--; generic VIA # # #regex-filter data "RE-pattern" # --"--; APRS payload # # ##filter "javAPRSSrvr adjunct filters" # # # # # # APRSIS source makes this tx-igate # # interface APRSIS # # ratelimit 60 120 # default: average 60 packets/minute, # # # burst max 120 packets/minute # # relay-type third-party # Must define this for APRSIS source! # # viscous-delay 5 # recommendation: 5 seconds delay to give # # # RF delivery time make itself known. # # #via-path WIDE2-2 # You can define a via-path for this source # # # # # # DPRS source makes this DPRS->APRS RF gate # # interface DPRS # # ratelimit 60 120 # default: average 60 packets/minute, # # # burst max 120 packets/minute # # relay-type third-party # Must define this for DPRS source! # # #viscous-delay 5 # recommendation: 5 seconds delay to give # # # RF delivery time make itself known. # # #via-path WIDE2-2 # You can define a via-path for this source # # # # aprx-2.9.0/aprx-config.xsd000664 000000 000000 00000021045 13040775352 015421 0ustar00rootroot000000 000000 The Aprx uses following configuration schema, which took its model very much from how Apache HTTPD configuration is done. To denote elements without < .. > around them as Apache does, we use "uri:apache:config" style bits, like: <ht:element> Because Apache's configuration predates XML and schemas, there has never been proper XML-like schema for it or anything alike it, nor is this intended to be validatable by XML tools. The overall syntax is line oriented, along with \ -characters at the end of line as continuation markers to append next line in place of that character plus the end-of-line character(s). Anywhere (except when previous line ends with \ -character) if the first non-white-space character is '#' the whole line is comment, and is discarded. Lines containing only white-space characters are also comments and are discarded. Presence of non-quoted '#' at the tails of parameter lines should also behave as comment, but it is not universal. Presence of extra parameter values is not always flagged as an error. The overall Aprx config contains parameter groups, and one top-level parameter label. The "mycall" parameter label must be before anything else. The <interface> and <aprsis> groups follow, and the rest that use those interfaces then follow. The <logging> group can be anywhere. Each group can occur multiple times. The Aprx configuration has flexible time interval definitions. A string of decimal numbers followed by multiplier character: 12 d 2 h 20 m 24 s 50 h 70 m 200 s 200 s 3 h Whatever notation is easiest to understand for the use. The multipliers are single characters and case insensitive. Embedding white-space is permitted for readability. ("d" = days, "h" = hours, "m" = minutes, "s" = seconds) This is ASCII representation of AX.25 callsign. Up to 6 upper-case letters (A-Z) and digits (0-9), then possibly a minus ('-') and decimal number 0 to 15. By convention a "-0" is never used. This is more relaxed form of AX.25 callsign: Regular expression: [a-zA-Z0-9]{1,6}($|-[a-zA-Z0-9]{1,2}) Or verbally: Up to 6 alphanumeric characters + optional tail of a minus ('-') followed by one or two alphanumeric characters. Also lowercase letters are allowed in alphanumerics. The APRSIS group defines communication parameters to APRS-IS network. The Login parameter for APRS-IS network. The Aprx will calculate correct authentication parameter for that login value. Defines server to which the Aprx connects for the APRS-IS service. serverhost [portnum] Chosen servers should be regional round-robin ones, see http://www.aprs2.net/ noam.aprs2.net soam.aprs2.net euro.aprs2.net asia.aprs2.net aunz.aprs2.net or the global pool: rotate.aprs2.net You SHOULD NOT connect to any specific one, as none of the servers are behind a load-balancing fail-over mechanisms. One white-space terminated parameter that is fed to APRS-IS server immediately after a login. If multiple filters are needed, they are defined with successive 'filter' parameter entries. The Logging group defines how the Aprx does logs. Without it, or any parameters inside it, no logging happens. aprx-2.9.0/aprx-rxigate.conf.in000664 000000 000000 00000006554 13040775352 016363 0ustar00rootroot000000 000000 # # Minimal sample configuration file for the APRX-2 as Rx-only iGate. # # This configuration is structured with Apache HTTPD style tags # which then contain subsystem parameters. # # # For simple case, you need to adjust 4 things: # - Mycall parameter # - Select correct type of interface (ax25-device or serial-device) # - Optionally set a beacon telling where this system is # - Optionally enable digipeater with or without tx-igate # # # Define the parameters in following order: # 1) mycall # 2) ** one # 3) ** one # 4) ** possibly multiple for each of radio receivers # # # Global macro for simplified callsign definition: # Usable for 99+% of cases. # mycall N0CALL-1 #login OTHERCALL-7 # login defaults to $mycall # APRS-IS server name and optional portnumber. # Default port is 14580, and it should be enough for you. server rotate.aprs2.net #server euro.aprs2.net #server asia.aprs2.net #server noam.aprs2.net #server soam.aprs2.net #server aunz.aprs2.net # # Passcode for your callsign # passcode -1 # rflog defines a rotatable file into which all RF-received packets # are logged. The host system can rotate it at any time without # need to signal the aprx that the file has been moved. # # rflog @VARLOG@/aprx-rf.log # aprxlog defines a rotatable file into which most important # events on APRS-IS connection are logged, namely connects and # disconnects. The host system can rotate it at any time without # need to signal the aprx that the file has been moved. # # aprxlog @VARLOG@/aprx.log # *********** Multiple definitions can follow ********* # ax25-device Lists AX.25 ports by their callsigns that in Linux # systems receive APRS packets. If none are defined, # or the system is not Linux, the AX.25 network receiver # is not enabled. Used technologies need at least # Linux kernel 2.4.x # # tx-ok Boolean telling if this device is able to transmit. # # # ax25-device $mycall # #tx-ok false # transmitter enable defaults to false # # # The TNC serial options. Parameters are: # - /dev/ttyUSB1 -- tty device # - 19200 -- baud rate, supported ones are: # 1200, 2400, 4800, 9600, 19200, 38400 # - 8n1 -- 8-bits, no parity, one stop-bit, # no other supported modes # - "KISS" - plain basic KISS mode # - "XORSUM" alias "BPQCRC" - KISS with BPQ "CRC" byte # - "SMACK" alias "CRC16" - KISS with real CRC # - "FLEXNET" - KISS with real CRC # - "TNC2" - TNC2 monitor format # - "DPRS" - DPRS (RX) GW # # # serial-device /dev/ttyUSB0 19200 8n1 KISS # #callsign $mycall # callsign defaults to $mycall # #tx-ok false # transmitter enable defaults to false # # # serial-device /dev/ttyUSB1 19200 8n1 TNC2 # #callsign $mycall # callsign defaults to $mycall # #tx-ok false # TNC2 monitor can not have transmitter # # # serial-device /dev/ttyUSB1 19200 8n1 DPRS # callsign dprsgwcallsign # must define actual callsign # #tx-ok false # DPRS monitor can not do transmit # aprx-2.9.0/aprx-stat.8.in000664 000000 000000 00000013375 13040775352 015114 0ustar00rootroot000000 000000 .TH aprx\-stat 8 "@DATEVERSION@" .LO 8 .SH NAME .B aprx\-stat \- statistics utility for .BR aprx (8) .SH SYNOPSIS .B aprx\-stat .RB [ \-t ] .RB [ \-f \fI@VARRUN@/aprx.state\fR] .RB { \-S | \-x | \-X } .SH DESCRIPTION .B aprx\-stat is a statistics utility for .BR aprx (8) program. .SH OPTIONS The .B aprx\-stat has following runtime options: .TP .B "\-f \fI@VARRUN@/aprx.state\fR" Turn on verbose debugging, outputs data to STDOUT. .TP .B "\-S" SNMP data mode, current counter and gauge values. .TP .B "\-t" Use UNIX .I time_t for timestamps, instead of human readable text format. .TP .B "\-x" Lattest of extended historical gauge values. This gives for each input interface .RS .IP \(bu 2 SNMP data .IP \(bu 2 last 90 of 1 minute values, .IP \(bu 2 10 of 10 minute values, .IP \(bu 2 3 of 60 minute values. .RE .TP .B "\-X" Full extended historical gauge values. This gives all the contents of historical value data ring-buffers. .RS .IP \(bu 2 SNMP data .IP \(bu 2 1 minute resolution: 24 hours .IP \(bu 2 10 minute resolution: 7 days .IP \(bu 2 60 minute resolution: 3 months .RE .SH SNMP DATA OUTPUT For each interface feeding AX.25 packets and/or KISS frames to this program, there are following kind of .nf \fC SNMP /dev/ttyUSB1 798282 11088 0 0 3 SNMP ax0 798282 11088 0 0 7 SNMP ax1 798282 11088 0 0 94 .fi .PP where columns are: .IP \(bu 2 "SNMP" - keyword .IP \(bu 2 Interface (AX.25 IF name, or serial port device name) .IP \(bu 2 Received byte counter .IP \(bu 2 Received frame (packet) counter .IP \(bu 2 .\" Transmitted byte counter (will stay zero) .I Dropped byte counter .IP \(bu 2 .\" Transmitted frame counter (will stay zero) .I Dropped frame counter .IP \(bu 2 Age in seconds of last update of this statistics. .SH EXTENDED DATA OUTPUT Extended data output gives formatted historical periodic accumulates of interface traffic counters, and Erlang value estimates based on that. .PP .nf \fC SNMP /dev/ttyUSB1 816675 11332 0 0 15 1min data 2007-12-24 14:10 /dev/ttyUSB1 1m 374 6 0 0 0.047 0.000 2007-12-24 14:09 /dev/ttyUSB1 1m 377 5 0 0 0.047 0.000 2007-12-24 14:08 /dev/ttyUSB1 1m 347 5 0 0 0.043 0.000 2007-12-24 14:07 /dev/ttyUSB1 1m 140 2 0 0 0.018 0.000 \(bu\(bu\(bu 10min data 2007-12-24 14:10 /dev/ttyUSB1 10m 3829 55 0 0 0.048 0.000 2007-12-24 14:00 /dev/ttyUSB1 10m 2182 28 0 0 0.027 0.000 2007-12-24 13:50 /dev/ttyUSB1 10m 3205 44 0 0 0.040 0.000 2007-12-24 13:40 /dev/ttyUSB1 10m 3811 50 0 0 0.048 0.000 \(bu\(bu\(bu 60min data 2007-12-24 14:00 /dev/ttyUSB1 60m 22510 295 0 0 0.047 0.000 2007-12-24 13:00 /dev/ttyUSB1 60m 24886 347 0 0 0.052 0.000 \(bu\(bu\(bu .fi .PP The output repeats for all interfaces. .PP The SNMP dataset is given in the beginning, and described above. Then each extended output line has following fields: .IP \(bu 2 Timestamp is two fields, date and time (in minute resolution) is in UTC. .IP \(bu 2 Alternate timestamp format is UNIX .I time_t as an integer, counting seconds from epoch, and as single field. .IP \(bu 2 Interface name is same as in SNMP case. .IP \(bu 2 Data qualifier tells what integration period the data is valid for: .IR 1m ", " 10m ", " 60m . .IP \(bu 2 Counter of received bytes on interface (including KISS flags etc.) .IP \(bu 2 Counter of received frames. .IP \(bu 2 .\" Counter of transmitted bytes on interface Counter of dropped bytes. .IP \(bu 2 .\" Counter of transmitted frames. Counter of dropped frames. .IP \(bu 2 Reception .I Erlang value estimate. .IP \(bu 2 .\" Transmission Dropped bytes .I Erlang value estimate. .PP .SH TODO .SH BUGS .SH SEE ALSO .BR aprx (8) .SH CONFIGURATION FILE There is no configuration file. .SH NOTES: ERLANG The .I Erlang is telecom measurement of channel occupancy, and in this application sense it does tell how much traffic there is on the radio channel. .PP Most radio transmitters are not aware of all transmitters on channel, and thus there can happen a collision causing loss of both messages. The higher the channel activity, the more likely that collision is. For further details, refer to statistical mathematics books, or perhaps on Wikipedia. .PP In order to measure channel activity, the .B aprx program suite has these built-in statistics counter and summary estimators. .PP The .I Erlag value that the estimators present are likely somewhat .I underestimating the true channel occupancy simply because it calculates estimate of channel bit transmit rate, and thus a per-minute character capacity. It does not know true frequency of bit-stuffing events of the HDLC framing, nor each transmitter pre- and port frame PTT times. The transmitters need to stabilize their transmit oscillators in many cases, which may take up to around 500 ms! The counters are not aware of this preamble-, nor postamble-times. .PP The HDLC bit stuffing ratio is guessed to be 8.2 bits for each 8 bits of payload. .SH NOTES: SUID ROOT This program needs probably to be run as .I "suid\-root" ! It is considered safe to do so, as this checks that the .B "\-f" parameter file is of correct "magic value", and will not try to create it if it does not exist, nor modify that file under any circumstances, nor reveal content of "wrong magic kind" of file. .SH AUTHOR This little piece was written by .I "Matti Aarnio, OH2MQK" during a dark and rainy fall and winter of 2007-2008 after a number of discussions grumbling about current breed of available software for APRS iGate use in Linux (or of any UNIX) platforms. Fall and winter 2009-2010 saw appearance of digipeater functionality. .PP Principal contributors and test users include: .IR "Pentti Gronlund, OH3BK" , .IR "Reijo Hakala, OH1GWK" . Debian packaging by .IR "Kimmo Jukarinen, OH3GNU" . aprx-2.9.0/aprx-stat.c000664 000000 000000 00000014673 13040775352 014564 0ustar00rootroot000000 000000 /* **************************************************************** * * * * APRX -- 2nd generation APRS iGate and digi with * * minimal requirement of esoteric facilities or * * libraries of any kind beyond UNIX system libc. * * * * (c) Matti Aarnio - OH2MQK, 2007-2014 * * * * **************************************************************** */ #include "aprx.h" int time_reset; int debug; /* linkage dummy */ int erlangout; int epochtime; const char *aprxlogfile; /* linkage dummy */ const char *mycall; /* linkage dummy */ #ifdef ERLANGSTORAGE void printtime(char *buf, int buflen) { struct tm *t = gmtime(&now.tv_sec); // strftime(timebuf, 60, "%Y-%m-%d %H:%M:%S", t); sprintf(buf, "%04d-%02d-%02d %02d:%02d:%02d", t->tm_year+1900,t->tm_mon+1,t->tm_mday, t->tm_hour,t->tm_min,t->tm_sec); } void erlang_snmp(void) { int i; /* SNMP data output - continuously growing counters */ printf("APRX.pid %8ld\n", (long) ErlangHead->server_pid); printf("APRX.uptime %8ld\n", (long) (time(NULL) - ErlangHead->start_time)); printf("APRX.mycall %s\n", ErlangHead->mycall); for (i = 0; i < ErlangLinesCount; ++i) { struct erlangline *E = ErlangLines[i]; printf("%s", E->name); printf(" %ld %ld %ld %ld %ld %ld %d\n", E->SNMP.bytes_rx, E->SNMP.packets_rx, E->SNMP.bytes_rxdrop, E->SNMP.packets_rxdrop, E->SNMP.bytes_tx, E->SNMP.packets_tx, (int) (now.tv_sec - E->last_update)); } } void erlang_xml(int topmode) { int i, j, k, t; /* What this outputs is not XML, but a mild approximation of the data that XML version would output.. It is not even the whole dataset, just last 60 samples of each type. */ printf("APRX.pid %8ld\n", (long) ErlangHead->server_pid); printf("APRX.uptime %8ld\n", (long) (time(NULL) - ErlangHead->start_time)); printf("APRX.mycall %s\n", ErlangHead->mycall); for (i = 0; i < ErlangLinesCount; ++i) { struct erlangline *E = ErlangLines[i]; char logtime[40]; struct tm *wallclock; printf("\nSNMP %s", E->name); printf(" %ld %ld %ld %ld %ld %ld %d\n", E->SNMP.bytes_rx, E->SNMP.packets_rx, E->SNMP.bytes_rxdrop, E->SNMP.packets_rxdrop, E->SNMP.bytes_tx, E->SNMP.packets_tx, (int) (now.tv_sec - E->last_update)); printf("\n1min data\n"); k = E->e1_cursor; t = E->e1_max; if (topmode) t = 90; for (j = 0; j < t; ++j) { --k; if (k < 0) k = E->e1_max - 1; if (E->e1[k].update == 0) continue; if (epochtime) { sprintf(logtime, "%ld", (long) E->e1[k].update); } else { wallclock = gmtime(&E->e1[k].update); strftime(logtime, sizeof(logtime), "%Y-%m-%d %H:%M", wallclock); } printf("%s %s", logtime, E->name); printf(" %2dm %5ld %3ld %5ld %3ld %5ld %3ld %5.3f %5.3f %5.3f\n", 1, E->e1[k].bytes_rx, E->e1[k].packets_rx, E->e1[k].bytes_rxdrop, E->e1[k].packets_rxdrop, E->e1[k].bytes_tx, E->e1[k].packets_tx, (float) E->e1[k].bytes_rx / ((float) E->erlang_capa * 60.0), (float) E->e1[k].bytes_rxdrop / ((float) E->erlang_capa * 60.0), (float)E->e1[k].bytes_tx/((float)E->erlang_capa*60.0) ); } printf("\n10min data\n"); k = E->e10_cursor; t = E->e10_max; if (topmode) t = 10; for (j = 0; j < t; ++j) { --k; if (k < 0) k = E->e10_max - 1; if (E->e10[k].update == 0) continue; if (epochtime) { sprintf(logtime, "%ld", (long) E->e10[k].update); } else { wallclock = gmtime(&E->e10[k].update); strftime(logtime, sizeof(logtime), "%Y-%m-%d %H:%M", wallclock); } printf("%s %s", logtime, E->name); printf(" %2dm %5ld %3ld %5ld %3ld %5ld %3ld %5.3f %5.3f %5.3f\n", 10, E->e10[k].bytes_rx, E->e10[k].packets_rx, E->e10[k].bytes_rxdrop, E->e10[k].packets_rxdrop, E->e10[k].bytes_tx, E->e10[k].packets_tx, (float) E->e10[k].bytes_rx / ((float) E->erlang_capa * 60.0), (float) E->e10[k].bytes_rxdrop / ((float) E->erlang_capa * 60.0), (float)E->e10[k].bytes_tx/((float)E->erlang_capa*60.0) ); } printf("\n60min data\n"); k = E->e60_cursor; t = E->e60_max; if (topmode) t = 3; for (j = 0; j < t; ++j) { --k; if (k < 0) k = E->e60_max - 1; if (E->e60[k].update == 0) continue; if (epochtime) { sprintf(logtime, "%ld", (long) E->e60[k].update); } else { wallclock = gmtime(&E->e60[k].update); strftime(logtime, sizeof(logtime), "%Y-%m-%d %H:%M", wallclock); } printf("%s %s", logtime, E->name); printf(" %2dm %5ld %3ld %5ld %3ld %5ld %3ld %5.3f %5.3f %5.3f\n", 60, E->e60[k].bytes_rx, E->e60[k].packets_rx, E->e60[k].bytes_rxdrop, E->e60[k].packets_rxdrop, E->e60[k].bytes_tx, E->e60[k].packets_tx, (float) E->e60[k].bytes_rx / ((float) E->erlang_capa * 60.0), (float) E->e60[k].bytes_rxdrop / ((float) E->erlang_capa * 60.0), (float)E->e60[k].bytes_tx/((float)E->erlang_capa*60.0) ); } } exit(0); } void usage(void) { printf("Usage: aprx-stat [-t] [-f arpx-erlang.dat] {-S|-x|-X}\n"); exit(64); } int main(int argc, char **argv) { int opt; int mode_snmp = 0; int mode_xml = 0; gettimeofday(&now, NULL); while ((opt = getopt(argc, argv, "f:StxX?h")) != -1) { switch (opt) { case 'f': erlang_backingstore = optarg; break; case 'S': /* SNMP */ ++mode_snmp; break; case 'X': mode_xml = 1; break; case 'x': mode_xml = 2; break; case 't': epochtime = 1; break; default: usage(); break; } } erlang_start(0); /* Open the backing-store */ if (!ErlangHead) exit(1); if (mode_snmp) { erlang_snmp(); } else if (mode_xml == 1) { erlang_xml(0); } else if (mode_xml == 2) { erlang_xml(1); } else usage(); return 0; } #else void printtime(char *buf, int buflen) {} /* linkage dummy */ void aprx_syslog_init(const char *p) {} int main(int argc, char **argv) { fprintf(stderr,"Sorry - aprx-stat program not available in system configured without ERLANGSTORAGE\n"); return 1; } #endif aprx-2.9.0/aprx.8.in000664 000000 000000 00000127422 13040775352 014142 0ustar00rootroot000000 000000 .TH aprx 8 "@DATEVERSION@" .LO 8 .SH NAME .B Aprx-2 \- An APRS iGate application with integrated Digipeater. .SH SYNOPSIS .B aprx .RB [ \-d [ d [ d ]]] .RB [ \-e ] .RB [ \-i ] .RB [ \-v ] .RB [ \-V ] .RB [ \-l " \fIsyslogfacilityname\fR]" .RB [ \-f " \fI@CFGFILE@\fR]" .SH DESCRIPTION The .B aprx program is a special purpose Ham-radio application supplying infrastructure services for APRS protocol use. .PP A more detailed manual is available at: .br http://ham.zmailer.org/oh2mqk/aprx/aprx-manual.pdf .PP .SH FEATURES The Aprx begun as a receive-only APRS iGate application with minimum system support technology requirements. This version has also multi-port digipeater support, transmit iGate, and experimental D-PRS-to-APRS RF/Rx-iGate. .PP .IP \(bu 3 The Aprx does not require machine to have any other software in it, than things in UNIX standard libc. In particular no special AX.25 libraries at all, nor widgets or even C++ runtime. .IP \(bu 3 Important goal has been to keep R/W memory footprint as small as possible, and on general purpose i386 Linux a single radio port iGate+digipeater is now around 250 kB of R/W memory allocations. .IP \(bu 3 Any UNIX (and UNIX like) platform should work for the Aprx, or be trivially ported. .IP \(bu 3 The Aprx can listen "TNC2 monitor" and "KISS" speaking TNCs on any serial ports. .IP \(bu 3 For Aprx the serial port can be ordinary host computer port, a USB serial port, or remote port on a remote server behind the internet, like cisco router AUX ports (port 4001, TCP STREAM without TELNET escapes.) .IP \(bu 3 The Aprx does not require machine to have AX.25 protocol support internally! (Thus this works also on e.g. Solaris and BSD machines without PF\_AX25 sockets.) .IP \(bu 3 On Linux machine with kernel internal AX.25 protocol support, the Aprx can listen on it with promiscuous mode and in order to use that, the Aprx must be started as .I root user, and be configured to list interface callsigns that APRS packets are coming in. The AX.25 socket listening is not in itself configurable, it is always exists in Linux systems, and related configuration parameters are ignored in other platforms. This socket listening does not need auxiliary "libax25" to function. .IP \(bu 3 The Aprx program can be run without root privileges at least against remote serial port servers. One must change local serial port ownership or access-groups (if any are used) to userid that runs the program and possibly do several changes of file paths in configuration file beginning with its location (startup parameter). How that is done is up to the user or system integrator of this program. .IP \(bu 3 The Aprx connects with one callsign-ssid pair to APRS-IS core for all received radio ports. .IP \(bu 3 The Aprx Rx-iGate knows that messages with following tokens in AX.25 VIA fields are not to be relayed into APRS-IS network: .RS 9 .B "RFONLY, NOGATE, TCPIP, TCPXX" .RE .IP \(bu 3 The Aprx Rx-iGate knows that following source address prefixes are bogus and thus messages with them are to be junked: .RS 9 .B "WIDE, RELAY, TRACE, TCPIP, TCPXX, NOCALL, N0CALL" .RE .IP \(bu 3 The Aprx Rx-iGate Drops all .I query messages ("?"). .IP \(bu 3 The Aprx Rx-iGate opens up all 3rd party messages ("}"), and checks the internal data if it is OK to be gated out to APRS-IS. .IP \(bu 3 The Aprx has built-in "Erlang monitor" mechanism that telemeters each receiving interface to APRS-IS. It can also syslog the interface specific channel occupancy, and optionally can output to STDOUT. .IP \(bu 3 The Aprx (since version 1.91) can do digipeater functions. .IP \(bu 3 The Aprx (since version 1.99) does have experimental D-STAR D-PRS to APRS gateway functionality. See the .I aprx-manual.pdf for details. .IP \(bu 3 The Aprx can be run on systems without writable storage, even with very little memory, like on NSLU2, and OpenWrt platforms. The experiments have shown that a single radio Tx-iGate+digipeater works with less than 300 kB of writable RAM for the Aprx itself. Additional memory is necessary for operating system services of TCP/IP networking, and serial port drivers. .PP .SH OPTIONS The .B aprx has following runtime options: .TP .B "\-i" Keep the program foreground without debugging outputs. .TP .B "\-d" Turn on verbose debugging, outputs data to STDOUT. .TP .B "\-dd" the "more debug" mode shows also details of network interaction with the APRS-IS network service. .TP .B "\-ddd" the "even more debug" mode shows also detail classification of every kind of frame received in KISS variants. .TP .B "\-e" .I "Erlang output" prints 10 minute and 60 minute traffic accumulation byte counts, and guestimates on channel occupancy, alias "Erlang". These outputs are sent to STDOUT, which system operator may choose to log elsewere. This is independent if the "\-l" option below. .TP .BI "\-f " "@CFGFILE@" Configuration file, given path is built-in default, and can be overridden by the program runner. .TP .BR "\-l" " \fIsyslogfacilityname\fR" Defines .RB syslog (3) facility code used by the erlang reporter by defining its name. Default value is: .BR NONE , and accepted values are: .BR LOG_DAEMON , .BR LOG_FTP , .BR LOG_LPR , .BR LOG_MAIL , .BR LOG_NEWS , .BR LOG_USER , .BR LOG_UUCP , .BR LOG_LOCAL0 , .BR LOG_LOCAL1 , .BR LOG_LOCAL2 , .BR LOG_LOCAL3 , .BR LOG_LOCAL4 , .BR LOG_LOCAL5 , .BR LOG_LOCAL6 , .BR LOG_LOCAL7 . That list is subject to actual facility code set in the system, and in any case if you specify a code that is not known, then the program will complain during the startup, and report it. This is independent of the "\-e" option above. .TP .B "\-v" Verbose logging of received traffic to STDOUT. Lines begin with reception timestamp (UNIX time_t seconds), then TAB, and either data as is, or with prefix byte: "*" for "discarded due to data content", or possibly "#" for "discarded due to APRS-IS being unreachable". .TP .B "\-V" Print source version compiled to this binary, and exit. .PP .SS DEBUGGING SYSTEM Use parameter set .B "\-ddv" (or .BR "\-dddv" ) to test new configuration by running it synchronously to console. .PP .SS NORMAL OPERATION Running the .B aprx program without any of option flags: .BR "\-d" , .BR "\-v" ", or" .B "\-e" reads possibly given configuration, then automatically backgrounds the process, and writes .IR pidfile . When the process whose number written in .I pidfile is then sent a SIGTERM signal, it automatically shuts down itself, and removes the .IR pidfile . The .I pidfile can be runtime configured with the .BI \-f " @CFGFILE@" file, and it has default name of: .IR "@VARRUN@/aprx.pid" . .PP .SH CONFIGURATION FILE The configuration file is used to setup the program to do its job. .PP You can construct following configurations: .PP .IP \(bu 3 A .I receive-only iGate server. .IP \(bu 3 A digipeater with bi-directional iGate server. .IP \(bu 3 A .I "single radio" digipeater. (The most common type of digipeater.) .IP \(bu 3 A .I multi-interfaced digipeater relaying traffic in between multiple radios. (On same or on separate frequencies.) .IP \(bu 3 A .I "viscuous digipeater," which relays a packet it heard from viscuous source after the viscuous delay, .I unless it was heard more times than only once, or it was heard from non-viscuous source before the viscuous one was digipeated. This allows of making fill-in digipeaters that will not digipeat the packet, if that same packet was heard twice or more before the viscuos delay expired. .PP In the configuration file a line ending backslash (\\) character concatenates next input line into itself. Combined result can be up to 8000 bytes long. This combination can be a bit surprising: .RS 3em .nf \fC#beacon .... long text \\ continuation\fR .fi .RE results in single long input line that begins with '#' (it is comment) and all continuations following it have been folded in. Presented line number of combined continuation is the line number of the .I last line segment in this type of multi-line input. .PP In the configuration file there is special treatment for quoted strings. They are stripped of the outer quotes, and "\fC\\\fR" character is processed within the source string to produce an output string. The escapes are: .TP .B "\fC\\\\n" Produces newline character (Control-J) on the output string. .TP .B "\fC\\\\r" Produces carriage return character (Control-M) on the output string. .TP .B "\fC\\\\\\\\" Places a back-slash on the output string. .TP .B "\fC\\\\"" .\" foo " Places a double-quote on the output string. .TP .B "\fC\\\\'" Places a single-quote on the output string. .TP .B "\fC\\\\xHH" Lower-case "x" precedes two hex digits which ensemble is then converted to a single byte in the output string. .PP The complex encodings are for possible initstrings of the external devices, and in particular for initstrings even a nul byte ( \\x00 ) is supported. .PP A configuration token without surrounding quotes does not understand the backslash escapes. .PP .nf \fC # # Sample configuration file for the APRX -- an Rx-only APRS iGate with # Digipeater functionality. # # # Simple sample configuration file for the APRX-2 # # This configuration is structured with Apache HTTPD style tags # which then contain subsystem parameters. # # # For simple case, you need to adjust 4 things: # - Mycall parameter # - Select correct type of interface (ax25-device or serial-device) # - Optionally set a beacon telling where this system is # - Optionally enable digipeater with or without tx-igate # # # # Define the parameters in following order: # 1) ** zero to many # 2) ** zero or one # 3) ** one to many # 4) ** zero to many # 5) ** zero to many (at most one for each Tx) # # # Global macro for simplified callsign definition: # Usable for 99+% of cases. # mycall N0CALL-1 # # Global macro for simplified "my location" definition in # place of explicit "lat nn lon mm" at beacons. Will also # give "my location" reference for "filter m/100". # #myloc lat ddmm.mmN lon dddmm.mmE # The login parameter: # Station call\-id used for relaying APRS frames into APRS\-IS. # Use this only to define other callsign for APRS\-IS login. # #login OTHERCALL-7 # login defaults to $mycall # # The passcode parameter: # Unique code for your callsign to allow transmitting packets # into the APRS-IS. # passcode -1 # APRS-IS server name and portnumber. # Every reconnect does re\-resolve the name to IP address. # Some alternates are shown below, choose something local to you. # server rotate.aprs2.net 14580 #server noam.aprs2.net 14580 #server soam.aprs2.net 14580 #server euro.aprs2.net 14580 #server asia.aprs2.net 14580 #server aunz.aprs2.net 14580 # Some APRS\-IS servers tell every about 20 seconds to all contact # ports that they are there and alive. Others are just silent. # Recommended value 3*"heartbeat" + some \-> 120 (seconds) # #heartbeat\-timeout 0 # Disabler of heartbeat timeout # APRS-IS server may support some filter commands. # See: http://www.aprs-is.net/javAPRSFilter.aspx # # You can define the filter as single long quoted string, or as # many short segments with explaining comments following them. # # Usability of these filters for a Tx-iGate is dubious, but # they exist in case you for example want to Tx-iGate packets # from some source callsigns in all cases even when they are # not in your local area. # #filter "possibly multiple filter specs in quotes" # #filter "m/100" # My-Range filter #filter "f/OH2XYZ\-3/50" # Friend-Range filter # pidfile is UNIX way to tell that others that this program is # running with given process-id number. This has compiled-in # default value of: pidfile @VARRUN@/aprx.pid # #pidfile @VARRUN@/aprx.pid # rflog defines a rotatable file into which all RF-received packets # are logged. # #rflog @VARLOG@/aprx\-rf.log # aprxlog defines a rotatable file into which most important # events on APRS\-IS connection are logged, namely connects and # disconnects. # #aprxlog @VARLOG@/aprx.log # erlangfile defines a mmap():able binary file, which stores # running sums of interfaces upon which the channel erlang # estimator runs, and collects data. # Depending on the system, it may be running on a filesystem # that actually retains data over reboots, or it may not. # With this backing store, the system does not loose cumulating # erlang data over the current period, if the restart is quick, # and does not stradle any exact minute. # (Do restarts at 15 seconds over an even minute..) # This file is around 0.7 MB per each interface talking APRS. # If this file is not defined and can not be created, # internal non-persistent in-memory storage will be used. # # Built-in default value is: @VARRUN@/aprx.state # #erlangfile @VARRUN@/aprx.state # erlang\-loglevel is config file edition of the "\-l" option # pushing erlang data to syslog(3). # Valid values are (possibly) following: NONE, LOG_DAEMON, # LOG_FTP, LOG_LPR, LOG_MAIL, LOG_NEWS, LOG_USER, LOG_UUCP, # LOG_LOCAL0, LOG_LOCAL1, LOG_LOCAL2, LOG_LOCAL3, LOG_LOCAL4, # LOG_LOCAL5, LOG_LOCAL6, LOG_LOCAL7. If the parameter value is # not acceptable, list of accepted values are printed at startup. # #erlang\-loglevel NONE # erlanglog defines a rotatable file into which erlang data # is written in text form. # #erlanglog @VARLOG@/erlang.log # erlang\-log1min option logs to syslog/file also 1 minute # interval data from the program. (In addition to 10m and 60m.) # #erlang\-log1min # *********** Multiple definitions can follow ********* # ax25\-device Lists AX.25 ports by their callsigns that in Linux # systems receive APRS packets. If none are defined, # or the system is not Linux, the AX.25 network receiver # is not enabled. Used technologies need at least # Linux kernel 2.4.x # # tx\-ok Boolean telling if this device is able to transmit. # # # ax25\-device $mycall # Either $mycall macro, or actual callsign # #tx\-ok false # transmitter enable defaults to false # #telem\-to\-is true # set to false to disable # # The TNC serial options. Parameters are: # \- /dev/ttyUSB1 \-\- tty device # \- 19200 \-\- baud rate, supported ones are: # 1200, 2400, 4800, 9600, 19200, 38400, ... # \- 8n1 \-\- 8\-bits, no parity, one stop\-bit, # no other supported modes # \- "KISS" \- plain basic KISS mode # \- "XORSUM" alias "BPQCRC" \- KISS with BPQ "CRC" byte # \- "SMACK" alias "CRC16" \- KISS with real CRC # \- "FLEXNET" \- KISS with real CRC # \- "TNC2" \- TNC2 monitor format # \- "DPRS" \- DPRS (rx) Gateway # # # serial\-device /dev/ttyUSB0 19200 8n1 KISS # #callsign $mycall # Either $mycall macro, or actual callsign # #tx\-ok false # transmitter enable defaults to false # #telem\-to\-is true # set to false to disable # # # # serial\-device /dev/ttyUSB1 19200 8n1 TNC2 # #callsign $mycall # Either $mycall macro, or actual callsign # #tx\-ok false # TNC2 monitor can not have transmitter # #telem\-to\-is true # set to false to disable # # # # serial\-device /dev/ttyUSB1 19200 8n1 DPRS # callsign dprsgwcallsign # must define actual callsign # #tx\-ok false # DPRS monitor can not do transmit # #telem\-to\-is true # set to false to disable # # # *********** Multiple definitions can follow ********* # # Beacons are sent out to radio transmitters AND/OR APRSIS. # Default is "both", other modes are settable. # #beaconmode { aprsis | both | radio } # # Beacons are sent from a circullar transmission queue, total cycle time # of that queue is 20 minutes by default, and beacons are "evenly" # distributed along it. Actual intervals are randomized to be anything # in between 80% and 100% of the cycle-size / number-of-beacons. # First beacon is sent out 30 seconds after system start. # Tune the cycle-size to be suitable to your number of defined beacons. # #cycle-size 20m # # # Basic beaconed thing is positional message of type "!": # #beacon symbol "R&" lat "0000.00N" lon "00000.00E" comment "Rx-only iGate" #beacon symbol "R&" $myloc comment "Rx-only iGate" # # Following are basic options: # 'symbol' no default, must be defined! # 'lat' coordinate latitude: ddmm.mmN (no default!) # 'lon' coordinate longitude: dddmm.mmE (no default!) # '$myloc' coordinate values taken from global 'myloc' entry, # and usable in place of explicit 'lat'+'lon'. # 'comment' optional tail part of the item, default is nothing # # Sample symbols: # R& is for "Rx-only iGate" # I& is for "Tx-iGate" # /# is for "Digipeater" # I# is for "Tx-iGate + Digipeater" # # Additional options are: # 'srccall' parameter sets claimed origination address. # 'dstcall' sets destination address, default "APRXnn" # 'interface' parameter picks an interface (must be "tx-ok true" type) # 'via' sets radio distribution pattern, default: none. # 'timefix' On APRS messages with HMS timestamp (hour:min:sec), the # system fixes appropriate field with transmit time timestamp. # # Message type is by default '!', which is positional no timestamp format. # Other possible formats are definable with options: # 'type' Single character setting type: ! = / @ # 'item' Defines a name of Item (')') type beacons. # 'object' Defines a name of Object (';') type beacons. # # 'file' option tells a file at which a _raw_ APRS message content is # expected to be found as first line of text. Line ending newline # is removed, and no escapes are supported. The timefix is # available, though probably should not be used. # # 'exec' option defines program path for a program whose stdout is # read up to first newline (which must be present), and then # transmit as beacon content. No format helpers are supplied, # although 'timefix' can be used. # 'timeout' option is associated with 'exec', and defines when the # exec must by latest produce the output, or the subprogram # execution is killed. Default value is 10 seconds. # # The parameter sets can vary: # a) 'srccall nnn-n dstcall "string" symbol "R&" lat "ddmm.mmN" lon "dddmm.mmE" [comment "any text"] # b) 'srccall nnn-n dstcall "string" raw "string"' # # The a) form flags on some of possible syntax errors in parameters. # It will also create only "!" type messages. The dest parameter # defaults to "APRS", but can be used to give other destinations. # The via parameter can be used to add other keywords, like "NOGATE". # # Writing correct RAW format beacon message is very hard, # which is evidenced by the frequency of bad syntax texts # people so often put there... If you can not be persuaded # not to do it, then at least VERIFY the beacon result on # web service like findu.com, or aprs.fi # #beacon file /tmp/wxbeacon.txt #beacon srccall N0CALL\-3 raw "!0000.00NR00000.00E&aprx \- an Rx\-only iGate" #beacon srccall N0CALL\-3 raw "!0000.00NI00000.00E&aprx \- an iGate" #beacon srccall $mycall symbol "R&" lat "0000.00N" lon "00000.00E" \\ comment "aprx \- an Rx\-only iGate" #beacon srccall $mycall symbol "I&" lat "0000.00N" lon "00000.00E" \\ comment "aprx iGate" # *********** definition(s) follow ********* # # The system will always send telemetry for all of its interfaces # to APRSIS, but there is an option to define telemetry to be sent # to radio channel by using following sections for each transmitter # that is wanted to send out the telemetry. # # transmitter - callsign referring to # via - optional via-path, only 1 callsign! # source - one or more of callsigns for which # the telemetry transmission is wanted for # # # transmitter $mycall # via TRACE1-1 # source $mycall # # *********** definition(s) follow ********* # # The digipeater definitions tell transmitters that receive # AX.25 packets from possibly multiple sources, and then what # to do on the AX.25 headers of those messages. # # There is one transmitter per digipeater \-\- and inversely, there # can be at most one digipeater for each transmitter. # # In each digipeater there is at least one , usually same # as the transmitter. # # # transmitter $mycall # #ratelimit 60 120 # default: average 60 packets/minute, # # burst max 120 packets/minute # #srcratelimit 10 20 # Example: by sourcecall: # # average 10 packets/minute, # # burst max 20 packets/minute # # # source $mycall # # ratelimit 60 120 # default: average 60 packets/minute, # # # burst max 120 packets/minute # # viscous\-delay 0 # no viscous delay for RF\->RF digipeat # # ratelimit 120 # default: max 120 packets/minute # # # # # Adding APRSIS source makes this tx-igate # # source APRSIS # # ratelimit 60 120 # default: average 60 packets/minute, # # # burst max 120 packets/minute # # relay\-type third\-party # Must define this for APRSIS source! # # viscous\-delay 5 # Recommendation: 5 seconds delay to give # # # RF delivery time make itself known. # # filter t/m # Tx-iGate only messages sent to me by APRSIS # # # # \fR .fi .PP .SH GLOBAL MYCALL PARAMETER In majority of usage models, system needs single configured callsign. This is set by using the .B mycall configuration option, and latter referred to in configurations as .B $mycall parameter in place of callsigns. .PP .SH GLOBAL MYLOC PARAMETER Usually multiple beacons, and simple filter rules are wanted to be using same reference coordinate for this system. This is set by using the .B myloc configuration option, and latter referred to in configurations as .B $myloc parameter in place of "lat nn lon mm" coordinate pair of beacons. .SH APRSIS SECTION FOR APRSIS CONNECTIVITY Settings in the .B section define connectivity with the APRS-IS network service. .PP Necessary option is .IR server , and others are optional. .PP Available options are: .IP "\fClogin $mycall\fR" 8em The APRSIS network login. Defaults to the .B mycall configuration entry. .IP "\fCpasscode -1\fR" 8em Defining a small integer in range of 0 to 32767 authenticating your login to APRS-IS server. Ask for assistance from your APRS-IS managers, or calculate it yourself with .I aprspass program. (Web search engines do find several of them.) .IP "\fCserver \fIserver-name 14850\fR" 8em Define which APRS-IS is being connected to. Multiple definitions are used in round-robin style, if the connection with the previous one fails for some reason. .PP .IP "\fCfilter \fI'filter specs in quotes'\fC # \fIcomments" 8em Set filter adjunct definitions on APRS-IS server. Multiple entries are catenated together in entry order, when connecting to the server. .PP .SH LOGGING SECTION The .B section defines miscellaneous file names and options for state tracking and logging use. .PP .IP "\fCpidfile \fI@VARRUN@/aprx.pid\fR" 8em The pidfile is UNIX way to tell that others that this program is running with given process-id number. This has compiled-in default value of: \fCpidfile @VARRUN@/aprx.pid .IP "\fCrflog \fI@VARLOG@/aprx\-rf.log\fR" 8em The .I rflog defines a rotatable file into which all RF-received packets are logged. There is no default. .IP "\fCaprxlog \fI@VARLOG@/aprx.log\fR" 8em The .I aprxlog defines a rotatable file into which most important events on APRS-IS connection are logged, namely connects and disconnects. There is no default. .IP "\fCerlangfile \fI@VARRUN@/aprx.state\fR" 8em The .I erlangfile defines a mmap():able binary file, which stores running sums of interfaces upon which the channel erlang estimator runs, and collects data. Depending on the system, it may be running on a filesystem that actually retains data over reboots, or it may not. With this backing store, the system does not loose cumulating erlang data over the current period, if the restart is quick, and does not stradle any exact minute. This file is around 0.7 MB per each interface talking APRS. If this file is not defined and can not be created, internal non-persistent in-memory storage will be used. Built-in default value is: @VARRUN@/aprx.state .IP "\fCerlang\-loglevel \fINONE\fR" 8em The .I erlang\-loglevel is config file edition of the "\-l" option pushing erlang data to .IR syslog (3). Valid values are (possibly) following: NONE, LOG_DAEMON, LOG_FTP, LOG_LPR, LOG_MAIL, LOG_NEWS, LOG_USER, LOG_UUCP, LOG_LOCAL0, LOG_LOCAL1, LOG_LOCAL2, LOG_LOCAL3, LOG_LOCAL4, LOG_LOCAL5, LOG_LOCAL6, LOG_LOCAL7. If the parameter value is not acceptable, list of accepted values are printed at startup. .IP "\fCerlanglog \fI@VARLOG@/erlang.log\fR" 8em The erlanglog defines a rotatable file into which erlang data is written in text form. There is no default. .IP "\fCerlang\-log1min\fR" 8em The .I erlang\-log1min option logs to syslog/file also 1 minute interval data from the program. (In addition to 10m and 60m.) Default is off. .PP .SH INTERFACE SECTIONS FOR RADIO PORTS The .B sections define connections to radio modems. Several different styles are available: .IP \(bu 2 Local serial ports in the machine .RB ( "device\-serial /dev/ttyS0 " "\fIspeed encapsulation\fR)" .IP \(bu 2 Local USB serial ports in the machine .RB ( "device\-serial /dev/ttyUSB0 " "\fIspeed encapsulation\fR)" .IP \(bu 2 Remote served serial ports over a TCP stream. Implemented to talk with Cisco AUX ports on "range 4000" (TCP STREAM, no TELNET escapes) .RB ( "tcp\-device 12.34.56.78 4001 " "\fIencapsulation\fR)" .IP \(bu 2 Linux internal AX.25 network attached devices .RB ( "ax25\-device CALLSIGN\-1" ) are only available when running on a Linux system. On a non-Linux system it connects to a null interface, never getting anything and can always sink everything. .PP The serial port name tells what kind of port is in question, and while port baud-rate (9600) and character settings (8n1) must always be set, they are ignored for the remote connection. .PP Following .I speed modes are available: .br .B " " 1200, .I 1800, .B 2400, 4800, 9600, 19200, .I 38400, 57600, .br .I " " 115200, 230400, 460800, 500000, 576000 .br Likely available speeds are in bold, other supported values are listed in italics. .PP Following .I encapsulation modes are available: .TP 10em .B TNC2 is capable only to monitor the packets reported by TNC2 type debug output, and Rx-iGate, but they are not acceptable as source for a . .TP 10em .B DPRS is special mode for gateway from D-STAR D-PRS to APRS. This must always have a callsign definition for the gateway. .TP 10em .B KISS Basic KISS encapsulation. No checksums. Will autodetect (sometimes) packets with SMACK or FLEXNET characteristics. .TP 10em .B SMACK .IR "Stuttgart Modified Amateurradio-CRC-KISS" , which runs CRC-16 checksum on KISS datastream much in the same way as HDLC has CCITT-CRC checksum on it. .TP 10em .B FLEXNET .IR "FLEXNET" which runs a CRC checksum of its own polynomial on KISS datastream much in the same way as HDLC has CCITT-CRC checksum on it. .TP 10em .B BPQCRC XOR "checksum" on dataframes. Also known as "XKISS", and "XORSUM". This detects single bit failure, but weakly any multibit failures. Extra 0x00 bytes have no effect on checksum, etc. .PP On .BI "" sub-options the parameter is .IR tncid , which sets up KISS multiplexer parameter so that subsequent options applies only on designated KISS sub-port. .PP The .I callsign option sets port specific callsign when relaying to APRS-IS. .PP The .I "telem\-to\-is true" option can be used to disable (by explicitly setting it to 'false') radio interface telemetry transmission to APRS-IS. By default it is on. This is separate from sections, which send telemetry to RF interfaces. .PP .nf \fC serial\-device /dev/ttyUSB1 19200 8n1 KISS tx\-ok false # receive only (default) callsign OH2XYZ\-R2 # KISS subif 0 initstring "...." # initstring option timeout 900 # 900 seconds of no Rx serial\-device /dev/ttyUSB1 19200 8n1 SMACK tx\-ok false # receive only (default) callsign OH2XYZ\-R2 # KISS subif 0 initstring "...." # initstring option timeout 900 # 900 seconds of no Rx serial\-device /dev/ttyUSB2 19200 8n1 KISS initstring "...." timeout 900 # 900 seconds of no Rx callsign OH2XYZ\-2 tx\-ok true # This is our transmitter callsign OH2XYZ\-R3 # This is receiver tx\-ok false # receive only (default) tcp\-device 172.168.1.1 4001 KISS tx\-ok false # receive only (default) callsign OH2XYZ\-R4 # KISS subif 0 initstring "...." # initstring option timeout 900 # 900 seconds of no Rx ax25\-device OH2XYZ\-6 # Works only on Linux systems tx\-ok true # This is also transmitter # \fBRX-IGATE ONLY, NOT USABLE AS DIGIPEATER SOURCE\fR\fC serial\-device /dev/ttyUSB1 19200 8n1 TNC2 callsign OH2XYZ\-R6 # TNC2 has no sub-ports initstring "...." # initstring option timeout 900 # 900 seconds of no Rx .fi .SH BEACON DEFINITIONS The beacons are defined using .B configuration sections. .PP Because classical beacon definitions are highly error\-prone, this program has a new way to define them: .IP \(bu 2 The new way to define beacons: .nf \fCbeacon symbol "R&" lat "0000.00N" lon "00000.00E" \\\fR \fC comment "aprx \- iGate" \fR .fi .IP \(bu 2 Semi-clasical definition of raw APRS packet: .nf \fCbeacon raw "!0000.00NR00000.00E&aprx \- iGate"\fR .fi .IP \(bu 2 Load beacon text from a file, path data is configurable: .nf \fCbeacon file \fR\fI/path/to/file\fR .fi .IP \(bu 2 Run a program to produce beacon data in raw format: .nf \fCbeacon exec \fR\fI/path/to/file\fR\fC timeout \fR\fI10\fR .fi .PP The fields and parameters: .TP 12em .B interface An .I optional "interface" parameter tells that this beacon shall be sent only to interface whose callsign is named. Default is to send to all interfaces that have "tx\-ok true" setting. .TP 12em .B type An .I optional one character string parameter, with one of following contents: "!", "=", "/", "@", ";" and ")". .TP 12em .B srccall An .I optional "srccall" parameter tells callsign which is claimed as this particular beacon source. It must be valid AX.25 callsign in text format. When this "srccall" parameter is not given, value of "mycall" configuration entry is used. .TP 12em .B dstcall An .I optional "dstcall" parameter has built-in software version dependent value, but it can be used to define another value. .TP 12em .B via An .I optional "via" parameter defaults to nothing, but can be used to define additional "VIA" path tokens, for example: "WIDE1\-1". .TP 12em .B item An .I optional "item" parameter is for defining a name for an item type APRS packet. .TP 12em .B object An .I optional "object" parameter is for defining a name for an object type APRS packet. .TP 12em .B symbol A .I mandatory "symbol" parameter is two character code, which for Rx-only iGate is pair: "R&" .TP 12em .B lat This .I mandatory parameter defines .I latitude coordinate (that is: north/south.) It is expected to be of format: "ddmm.mmN" where "dd" defines .I two digits of .I degrees of latitude, and "mm.mm" defines two digits + decimal dot + two digits of .I minutes of latitude. Then comes literal "N" or "S" indicating hemisphere. .TP 12em .B lon This .I mandatory parameter defines .I longitude coordinate (that is: east/west.) It is expected to be of format: "dddmm.mmE" where "ddd" defines .I three digits of .I degrees of longitude, and "mm.mm" defines two digits + decimal dot + two digits of .I minutes of longitude. Then comes literal "E" or "W" indicating hemisphere. .TP 12em .B comment This .I optional parameter defines commentary text tail on the beacon packet. If you need characters outside US-ASCII character set, use of UTF-8 encoded UNICODE character set is recommended. .TP 12em .B raw This .I alternate format defines whole APRS packet content in raw text format. .I Currently this type of packets are not validated for syntax at all! .TP 12em .B file This .I alternative way defines path to a file with single text line defining content of .I raw message data. .TP 12em .B exec This .I alternative mode runs designated program, and waits for at most a .I timeout number of seconds (default 10) for the program to produce the result. .TP 12em .B timeout This is optional parameter for .I exec allowing altered timeout (number of seconds) for waiting the program to respond. Default is 10 seconds. .PP The type/symbol/lat/lon/comment-format supports only a few types of APRS packets. It splits input into small slices that are possible to validate in detail. (See "DEBUGGING SYSTEM" above.) .PP .SH RF-TELEMETRY The .I aprx system will always send telemetry for all of its interfaces to APRSIS, but there is an option to define telemetry to be sent to radio channel by using following sections for each transmitter that is wanted to send out the telemetry. .PP The parameters of .B configuration section are: .TP 12em .B transmitter A mandatory callsign referring to an .I interface. .TP 12em .B via An optional .I via-path parameter. Only 1 callsign! .TP 12em .B source One or more of .I interface callsigns for which the telemetry transmission is made. .SH DIGIPEATER The .I aprx is possible to configure as a AX.25 digipeater with APRS twists. This is done with .B configuration section and its subsections. .PP .I There can be at most one definition per each .I transmit capable interface in the system. .I On a system with multiple transmitters, this means there can .I be multiple digipeaters, each with different behaviour rules. .PP Minimalistic setup for a digipeater will be as follows: .PP .nf \fC transmitter $mycall source $mycall \fR .fi .PP In minimalistic approach the system does digipeating of packets heard on the .I $mycall interface back to same interface. Single requirement is that the .I block has .I "tx\-ok true" setting on it. .PP In more complicated approaches it is possible to define multiple sources for packets: .IP \(bu 3 Multiple device ports. .IP \(bu 3 APRSIS pseudoport, which creates the Tx-iGate functionality. .PP .SS options Main-level options are: .PP .IP \(bu 3 .I transmitter defines which interface the digipeater will output to. .IP \(bu 3 .IR " and " sub-options are explained below. .IP \(bu 3 .I sub-option is explained below. .PP .SS and sub-options The .I sub-option has priority over the .I sub-option, otherwise they are configured the same way. .PP The .I sub-option defines which AX.25 address contained keywords are treated with APRS "New-N paradigm" rules in a way where each processing node always marks its transmitter callsign on the transmitted AX.25 packet address header. .PP The .I sub-option defines which AX.25 address contained keywords are treated with APRS "New-N paradigm" rules in a way where processing node does not mark its transmitter callsign on the transmitted AX.25 packet address header. .PP Available parameters are: .TP 9em .B keys A string of comma-separated set of string tokens: .br \fC keys "TRACE,WIDE"\fR .br Alternative form for this entry is: .br \fC keys "TRACE"\fR .br \fC keys "WIDE"\fR .TP 9em .B maxdone Defines maximum number of redistribution hops that these keywords can have completed when reaching here. If accounting finds more done, the system will just drop the packet instead of digipeating it onwards. .TP 9em .B maxreq Defines maximum number of redistribution hops that these keywords can define. If accounting finds more requested, the system will just drop the packet instead of digipeating it onwards. .PP .SS sub-options Primary definer option is .B source which gives callsign of an .I from which the AX.25 packets are received for this .I block. .PP Available .B relay\-type modes on definitions are: .TP 14em .B digipeater Normal AX.25 digipeater behaviour with APRS New-N paradigm support. This is default mode. .TP 14em .B directonly Digipeat only directly heard packets. Useful for systems that are designated as "fill-in". See also "viscous\-delay". .TP 14em .B third\-party Special mode for Tx-iGate. .PP The .B ratelimit defines two parameters: .I average and .I limit number of packets sent in 60 seconds. Its definitions can be both in .I and in digipeater's .I sections, and therefore you can limit each individual source to a max accepted rate as well as define separate rate limits for the transmitter. .PP The .B viscous\-delay defines a number of seconds from 0 (default) maximum of 9 that the source will put the message on duplicate detector delay processing. All occurrances of same packet per duplicate detector during that time will be accounted on duplicate detection, and if at the end of the delay period there are more than one hit, the packet is discarded. Use delay of 0 seconds for normal digipeater, 5 seconds for a fill-in, or a Tx-iGate. .PP A javAPRSSrvr filter-adjunct style rules are possible with the .B filter options. When you want multiple filters, use multiple options with associated parameters: .nf \fC filter t/m # APRS messaging type packets filter a/la/lo/la/lo # APRS positional packets within this area \fR .fi .LP Also negative filters are possible (prefixed with minus character), which upon match cause rejection of the packet. Filters are evaluated in definition order, and first matching one will terminate the evaluation. When no filters are defined, everything is passed thru. When any filter is defined, only those matching non-negative filters are passed thru, and no default "pass everything else" behaviour exists. .LP Supported "adjunct filters" are following: .TP 8em .B A/latN/lonW/latS/lonE Area filter, defined as area enclosing within latS/latN and lonW/lonE. Latitude and longitude are entered as degrees and decimals. .TP 8em .B B/call1/call2... Budlist filter. Supports *-wildcards. .TP 8em .B D/digi1/digi2... .I Not supported at APRX internal filters .TP 8em .B E/call1/call2/... .I Not supported at APRX internal filters .TP 8em .B F/call/dist_km Great-circle distance in kilometers from friend's coordinates. No wildcarding. .br .I (TODO: check that it really works!) .TP 8em .B M/dist The .I "range around my location" filter requires that you have defined also the "myloc" configuration entry. It defines acceptance of positions and messages with senders within .I dist kilometers of the "myloc" position. .TP 8em .B O/object1/obj2... Object name filter. Supports *-wildcards. .TP 8em .B P/aa/bb/cc... Prefix filter. .TP 8em .B Q/con/ana .I The Q-construct filter is not supported. .TP 8em .B R/lat/lon/dist Range filter. Latitude and longitude are in degrees and decimals. Distance is in kilometers. No wildcards. .TP 8em .B S/pri/alt/over Symbol filter .TP 8em .B T/..../call/km .RS Type filter. Couple possible usages: .IP "\fC -t/c\fR" 22em Everything except CWOP .IP "\fC t/*/OH2RDY/50\fR" 22em Everything within 50 km of OH2RDY's last known position .PP Type code characters are: .TP 3em .B * An "all" wild-card. .TP 3em .B C A CWOP. .TP 3em .B I An ITEM. .TP 3em .B M A MESSAGE. .TP 3em .B N A NWS message. .TP 3em .B O An OBJECT. .TP 3em .B Q A QUERY. .TP 3em .B S A STATUS response. .TP 3em .B T A TELEMETRY packet or parameter message. .TP 3em .B U A USERDEF message. .TP 3em .B W A WX data packet .RE .TP 8em .B U/unproto1/unproto2... Filters by value in destination address field, supports wildcard. .PP The .B and .B sub-options exist also within each . Where such occur, the specific sub-option trumps the definition on level, and same with sub-options. This allows things like overriding flooding control keywords on source basis, should such be necessary. .PP A set of .B regex\-filter rules can be used to reject packets that are not of approved kind. Available syntax is: .IP "regex\-filter source RE" source address field .IP "regex\-filter destination RE" destination address field .IP "regex\-filter via RE" any via path field .IP "regex\-filter data RE" payload content .PP The regex\-filter exists as ad-hoc method when all else fails. .PP .SH NOTES: ERLANG The .I Erlang is telecom measurement of channel occupancy, and in this application sense it does tell how much traffic there is on the radio channel. .PP Most radio transmitters are not aware of all transmitters on channel, and thus there can happen a collision causing loss of both messages. The higher the channel activity, the more likely that collision is. For further details, refer to statistical mathematics books, or perhaps on Wikipedia. .PP In order to measure channel activity, the .B aprx program suite has these built-in statistics counter and summary estimators. .PP The .I Erlag value that the estimators present are likely somewhat .I underestimating the true channel occupancy simply because it calculates estimate of channel bit transmit rate, and thus a per-minute character capacity. It does not know true frequency of bit-stuffing events of the HDLC framing, nor each transmitter pre- and port frame PTT times. The transmitters need to stabilize their transmit oscillators in many cases, which may take up to around 500 ms! The counters are not aware of this preamble-, nor postamble-times. .PP The HDLC bit stuffing ratio is guessed to be 1:1.025 (1 extra bit every 5 bytes) .SH NOTES: PROGRAM NAME Initially this program had name .IR aprsg-ng , which was too close to another (a less low-tech C++ approach) program had. .SH BUGS/WARTS The .IR Erlang -monitor mechanisms are of rudimentary quality, and can seriously underestimate the channel occupancy by ignoring pre- and postample transmissions, which can be as high as 50 centiseconds for preample, and 20 centiseconds for postample! When entire packet takes 50 centiseconds, such preample alone doubles channel occupancy. A 6pack protocol on serial link (instead of KISS) could inform receiver better on carrier presense times, however even that underestimates RF power presense (RSSI) signal. (6pack is not supported.) .PP On serial lines supports really only 8n1 mode, not at all like: 7e1. On the other hand, there really is no sensible usage for anything but 8n1... .SH SEE ALSO Couple web sites: .br .IR "http://www.aprs2.net/" , .br .IR "http://www.aprs-is.net/" , .br .IR "http://wiki.ham.fi/Aprx.en" , .br .I "http://ham.zmailer.org/oh2mqk/aprx/aprx-manual.pdf" .PP .BR aprx-stat (8) .SH AUTHOR This little piece was written by .I "Matti Aarnio, OH2MQK" during a dark and rainy fall and winter of 2007-2008 after a number of discussions grumbling about current breed of available software for APRS iGate use in Linux (or of any UNIX) platforms. Fall and winter 2009-2010 saw appearance of digipeater functionality. .PP Principal contributors and test users include: .IR "Pentti Gronlund, OH3BK" , .IR "Reijo Hakala, OH1GWK" . Debian packaging by .IR "Kimmo Jukarinen, OH3GNU" . Testing of SMACK variant of KISS by .IR "Patrick Hertenstein, DL1GHN" . The beacon exec functionality prototype by .IR "Kamil Palkowiski SQ8KFH" . aprx-2.9.0/aprx.c000664 000000 000000 00000041413 13040775352 013603 0ustar00rootroot000000 000000 /* **************************************************************** * * * * APRX -- 2nd generation APRS iGate and digi with * * minimal requirement of esoteric facilities or * * libraries of any kind beyond UNIX system libc. * * * * (c) Matti Aarnio - OH2MQK, 2007-2014 * * * * **************************************************************** */ #include "aprx.h" /* Bits used only in the main program.. */ #include #ifdef HAVE_SYS_TIME_H # include #endif #ifdef HAVE_TIME_H # include #endif #include #ifdef HAVE_SYS_WAIT_H #include #endif int debug; int verbout; int erlangout; const char *rflogfile; const char *aprxlogfile; const char *mycall; float myloc_lat; float myloc_coslat; float myloc_lon; const char *myloc_latstr; const char *myloc_lonstr; const char *tocall = "APRX29"; #ifndef CFGFILE #define CFGFILE "/etc/aprx.conf" #endif const char *pidfile = VARRUN "/aprx.pid"; int die_now; int log_aprsis; const char *swname = "aprx"; const char *swversion = APRXVERSION; static void sig_handler(int sig) { die_now = 1; signal(sig, sig_handler); aprxlog("aprx ending (SIG %d) - %s",sig,swversion); if (debug) { // Avoid stdio FILE* interlocks within signal handler char buf[64]; sprintf(buf, "SIGNAL %d - DYING!\n", sig); write(1, buf, strlen(buf)); } } static void sig_child(int sig) { int status; int pid; while ((pid = waitpid(-1, &status, WNOHANG)) > 0) { beacon_childexit(pid); } } static void usage(void) { printf("aprx: [-d[d[d]]][-e][-i][-v][-L][-l logfacility] [-f %s]\n", CFGFILE); printf(" version: %s\n", swversion); printf(" -f %s: where the configuration is\n", CFGFILE); printf(" -v: Outputs textual format of received packets, and data on STDOUT.\n"); printf(" -e: Outputs raw ERLANG-report lines on SYSLOG.\n"); printf(" -i: Keep the program foreground without debugging printouts.\n"); printf(" -l ...: sets syslog FACILITY code for erlang reports, default: LOG_DAEMON\n"); printf(" -d: turn debug printout on, use to verify config file!\n"); printf(" twice: prints also interaction with aprs-is system..\n"); printf(" -L: Log also all of APRS-IS traffic on relevant log.\n"); exit(64); /* EX_USAGE */ } static void versionprint() { printf("aprx: %s\n", swversion); exit(1); } void fd_nonblockingmode(int fd) { int __i = fcntl(fd, F_GETFL, 0); if (__i >= 0) { /* set up non-blocking I/O */ __i |= O_NONBLOCK; __i = fcntl(fd, F_SETFL, __i); } // return __i; } int time_reset = 1; // observed time jump, initially as "reset is happening!" static struct timeval old_tick; // monotonic // static struct timeval old_now; // wall-clock static int timetick_count; void timetick(void) { ++timetick_count; old_tick = tick; //old_now = now; // Monotonic (or as near as possible) clock.. // .. which is NOT wall clock time. #ifdef HAVE_CLOCK_GETTIME struct timespec ts; clock_gettime(CLOCK_MONOTONIC, &ts); tick.tv_usec = ts.tv_nsec/1000; tick.tv_sec = ts.tv_sec; // if (debug) printf("newtick: %d.%6d\n", tick.tv_sec, tick.tv_usec); #else gettimeofday(&tick, NULL); // fallback when no clock_gettime() is available #endif // Wall clock time // gettimeofday(&tick, NULL); // Main program clears this when appropriate int delta = 0; if (old_tick.tv_sec != 0) { delta = tv_timerdelta_millis(&old_tick, &tick); if (delta < -1) { // Up to 0.99999 seconds backwards for a leap second if (debug) { printf("MONOTONIC TIME JUMPED BACK BY %g SECONDS. ttcallcount=%d\n", delta/1000.0, timetick_count); } time_reset = 1; } else if (delta > 32000) { // 30.0 + leap second + margin if (debug) { printf("MONOTONIC TIME JUMPED FORWARD BY %g SECONDS. ttcallcount=%d mypid=%d\n", delta/1000.0, timetick_count, getpid()); } time_reset = 1; } else { // Time is OK. // time_reset = 0; } } else { time_reset = 1; // This happens before argv is parsed, thus debug is never set. // But if it sets happens afterwards... if (debug) printf("Initializing MONOTONIC time\n"); } // if (debug>1) printf("TIMETICK %ld:%6d %d delta=%d ms\n", tick.tv_sec, tick.tv_usec, timetick_count, delta); } int main(int argc, char *const argv[]) { int i; const char *cfgfile = "/etc/aprx.conf"; const char *syslog_facility = "NONE"; int foreground = 0; int millis; int can_clear_timereset; /* Init the poll(2) descriptor array */ struct aprxpolls app = APRXPOLLS_INIT; timetick(); // init global time references setvbuf(stdout, NULL, _IOLBF, BUFSIZ); setvbuf(stderr, NULL, _IOLBF, BUFSIZ); while ((i = getopt(argc, argv, "def:hiLl:vV?")) != -1) { switch (i) { case '?': case 'h': usage(); break; case 'd': ++debug; ++foreground; break; case 'e': ++erlangout; ++foreground; break; case 'i': ++foreground; break; case 'L': log_aprsis = 1; break; case 'l': syslog_facility = optarg; break; case 'v': ++verbout; ++foreground; break; case 'f': cfgfile = optarg; break; case 'V': versionprint(); break; default: break; } } interface_init(); // before any interface system and aprsis init ! erlang_init(syslog_facility); ttyreader_init(); #ifdef PF_AX25 /* PF_AX25 exists -- highly likely a Linux system ! */ netax25_init(); #endif #ifdef ENABLE_AGWPE agwpe_init(); #endif dupecheck_init(); // before aprsis_init() ! #ifndef DISABLE_IGATE aprsis_init(); #endif filter_init(); pbuf_init(); i = readconfig(cfgfile); if (i) { fflush(stdout); fprintf(stderr, "Seen configuration errors. Aborting!\n"); fflush(stderr); exit(1); // CONFIION ERRORS SEEN! ABORT! } erlang_start(1); #ifndef DISABLE_IGATE historydb_init(); #endif if (debug || verbout) { if (!mycall #ifndef DISABLE_IGATE && !aprsis_login #endif ) { fflush(stdout); fprintf(stderr, "APRX: NO GLOBAL MYCALL= PARAMETER CONFIGURED, WILL NOT CONNECT APRS-IS\n(This is OK, if no connection to APRS-IS is needed.)\n"); } else if (!mycall #ifndef DISABLE_IGATE && !aprsis_login #endif ) { fflush(stdout); fprintf(stderr, "APRX: NO GLOBAL APRSIS-LOGIN= PARAMETER CONFIGURED, WILL NOT CONNECT APRS-IS\n(This is OK, if no connection to APRS-IS is needed.)\n"); } } if (!foreground) { /* See if pidfile exists ? */ FILE *pf = fopen(pidfile, "r"); if (pf) { /* See if the pid exists ? */ int rc, er; int pid = -1; fscanf(pf, "%d", &pid); fclose(pf); if (pid > 0) { rc = kill(pid, 0); er = errno; if ((rc == 0) || (er == EPERM)) { fflush(stdout); fprintf(stderr, "APRX: PIDFILE '%s' EXISTS, AND PROCESSID %d INDICATED THERE EXISTS TOO. FURTHER INSTANCES CAN ONLY BE RUN ON FOREGROUND!\n", pidfile, pid); fflush(stderr); exit(1); } } } } if (!foreground) { int pid = fork(); if (pid > 0) { /* This is parent */ exit(0); } /* child and error cases continue on main program.. */ poll((void*)&pid, 0, 500); } if (1) { /* Open the pidfile, if you can.. */ FILE *pf = fopen(pidfile, "w"); setsid(); /* Happens or not ... */ if (!pf) { /* Could not open pidfile! */ fflush(stdout); fprintf(stderr, "COULD NOT OPEN PIDFILE: '%s'\n", pidfile); pidfile = NULL; } else { int f = fileno(pf); if (flock(f, LOCK_EX|LOCK_NB) < 0) { if (errno == EWOULDBLOCK) { printf("Could not lock pid file file %s, another process has a lock on it. Another process running - bailing out.\n", pidfile); } else { printf("Failed to lock pid file %s: %s\n", pidfile, strerror(errno)); } exit(1); } fprintf(pf, "%ld\n", (long) getpid()); // Leave it open - flock will prevent double-activation dup(f); // don't care what the fd number is fclose(pf); } } erlang_start(2); // reset PID, etc.. // Do following as late as possible.. // In all cases we close STDIN/FD=0.. // .. and replace it with reading from /dev/null.. i = open("/dev/null", O_RDONLY, 0); if (i >= 0) { dup2(i, 0); close(i); } // Leave STDOUT and STDERR open if (!foreground) { // when daemoning, we close also stdout and stderr.. dup2(0, 1); dup2(0, 2); } // .. but not latter than this. // Set default signal handling signal(SIGTERM, sig_handler); signal(SIGINT, sig_handler); signal(SIGHUP, sig_handler); signal(SIGPIPE, SIG_IGN); signal(SIGCHLD, sig_child); // Must be after config reading ... netresolv_start(); #ifndef DISABLE_IGATE aprsis_start(); #endif #ifdef PF_AX25 /* PF_AX25 exists -- highly likely a Linux system ! */ netax25_start(); #endif #ifdef ENABLE_AGWPE agwpe_start(); #endif telemetry_start(); #ifndef DISABLE_IGATE igate_start(); #endif aprxlog("aprx start - %s",swversion); // The main loop can_clear_timereset = 0; while (!die_now) { timetick(); // pre-poll aprxpolls_reset(&app); tv_timeradd_millis( &app.next_timeout, &tick, 30000 ); // 30 seconds i = ttyreader_prepoll(&app); // if (debug>3)printf("after ttyreader prepoll - timeout millis=%d\n",aprxpolls_millis(&app)); #ifndef DISABLE_IGATE i = aprsis_prepoll(&app); // if (debug>3)printf("after aprsis prepoll - timeout millis=%d\n",aprxpolls_millis(&app)); #endif i = beacon_prepoll(&app); // if (debug>3)printf("after beacon prepoll - timeout millis=%d\n",aprxpolls_millis(&app)); #ifdef PF_AX25 /* PF_AX25 exists -- highly likely a Linux system ! */ i = netax25_prepoll(&app); // if (debug>3)printf("after netax25 prepoll - timeout millis=%d\n",aprxpolls_millis(&app)); #endif #ifdef ENABLE_AGWPE i = agwpe_prepoll(&app); // if (debug>3)printf("after agwpe prepoll - timeout millis=%d\n",aprxpolls_millis(&app)); #endif i = erlang_prepoll(&app); // if (debug>3)printf("after erlang prepoll - timeout millis=%d\n",aprxpolls_millis(&app)); i = telemetry_prepoll(&app); // if (debug>3)printf("after telemetry prepoll - timeout millis=%d\n",aprxpolls_millis(&app)); i = dupecheck_prepoll(&app); // if (debug>3)printf("after dupecheck prepoll - timeout millis=%d\n",aprxpolls_millis(&app)); i = digipeater_prepoll(&app); // if (debug>3)printf("after digipeater prepoll - timeout millis=%d\n",aprxpolls_millis(&app)); #ifndef DISABLE_IGATE i = historydb_prepoll(&app); // if (debug>3)printf("after historydb prepoll - timeout millis=%d\n",aprxpolls_millis(&app)); i = dprsgw_prepoll(&app); // if (debug>3)printf("after dprsgw prepoll - timeout millis=%d\n",aprxpolls_millis(&app)); #endif // All pre-polls are done if (can_clear_timereset) { // if (time_reset) { // printf("Clearing time_reset.\n"); // } time_reset = 0; } else { can_clear_timereset = 1; } // if (app.next_timeout <= now.tv_sec) // app.next_timeout = now.tv_sec + 1; // Just to be on safe side.. millis = aprxpolls_millis(&app); if (millis < 10) millis = 10; i = poll(app.polls, app.pollcount, millis); timetick(); // post-poll i = beacon_postpoll(&app); i = ttyreader_postpoll(&app); #ifdef PF_AX25 /* PF_AX25 exists -- highly likely a Linux system ! */ i = netax25_postpoll(&app); #endif #ifdef ENABLE_AGWPE i = agwpe_postpoll(&app); #endif #ifndef DISABLE_IGATE i = aprsis_postpoll(&app); #endif i = erlang_postpoll(&app); i = telemetry_postpoll(&app); i = dupecheck_postpoll(&app); i = digipeater_postpoll(&app); #ifndef DISABLE_IGATE i = historydb_postpoll(&app); i = dprsgw_postpoll(&app); #endif } aprxpolls_free(&app); // valgrind.. #ifndef DISABLE_IGATE aprsis_stop(); #endif netresolv_stop(); if (pidfile) { unlink(pidfile); } exit(0); } void printtime(char *buf, int buflen) { struct timeval tv; struct tm t; // Wall lock time for printouts gettimeofday(&tv, NULL); gmtime_r(&tv.tv_sec, &t); // strftime(timebuf, 60, "%Y-%m-%d %H:%M:%S", t); sprintf(buf, "%04d-%02d-%02d %02d:%02d:%02d.%03d", t.tm_year+1900,t.tm_mon+1,t.tm_mday, t.tm_hour,t.tm_min,t.tm_sec, (int)(tv.tv_usec / 1000)); } static struct syslog_facs { const char *name; int fac_code; } syslog_facs[] = { { "NONE", -1}, { "LOG_DAEMON", LOG_DAEMON}, #ifdef LOG_FTP { "LOG_FTP", LOG_FTP}, #endif #ifdef LOG_LPR { "LOG_LPR", LOG_LPR}, #endif #ifdef LOG_MAIL { "LOG_MAIL", LOG_MAIL}, #endif #ifdef LOG_USER { "LOG_USER", LOG_USER}, #endif #ifdef LOG_UUCP { "LOG_UUCP", LOG_UUCP}, #endif { "LOG_LOCAL0", LOG_LOCAL0}, { "LOG_LOCAL1", LOG_LOCAL1}, { "LOG_LOCAL2", LOG_LOCAL2}, { "LOG_LOCAL3", LOG_LOCAL3}, { "LOG_LOCAL4", LOG_LOCAL4}, { "LOG_LOCAL5", LOG_LOCAL5}, { "LOG_LOCAL6", LOG_LOCAL6}, { "LOG_LOCAL7", LOG_LOCAL7}, { NULL, 0} }; void aprx_syslog_init(const char *syslog_facility_name) { static int done_once = 0; int syslog_fac = LOG_DAEMON, i; if (done_once) { closelog(); /* We reconfigure from config file! */ } else ++done_once; for (i = 0;; ++i) { if (syslog_facs[i].name == NULL) { fprintf(stderr, "Sorry, unknown erlang syslog facility code name: %s, not supported in this system.\n", syslog_facility_name); fprintf(stderr, "Accepted list is:"); for (i = 0;; ++i) { if (syslog_facs[i].name == NULL) break; fprintf(stderr, " %s", syslog_facs[i].name); } fprintf(stderr, "\n"); break; } if (strcasecmp(syslog_facs[i].name, syslog_facility_name) == 0) { syslog_fac = syslog_facs[i].fac_code; break; } } if (syslog_fac >= 0) { erlangsyslog = 1; openlog("aprx", LOG_NDELAY | LOG_PID, syslog_fac); } } #ifdef HAVE_STDARG_H #ifdef __STDC__ void aprxlog(const char *fmt, ...) #else void aprxlog(fmt) #endif #else /* VARARGS */ void aprxlog(va_list) va_dcl #endif { va_list ap; char timebuf[60]; printtime(timebuf, sizeof(timebuf)); if (verbout) { #ifdef HAVE_STDARG_H va_start(ap, fmt); #else const char *fmt; va_start(ap); fmt = va_arg(ap, const char *); #endif fprintf(stdout, "%s ", timebuf); vfprintf(stdout, fmt, ap); (void)fprintf(stdout, "\n"); #ifdef HAVE_STDARG_H va_end(ap); #endif } if (aprxlogfile) { FILE *fp; #ifdef HAVE_STDARG_H va_start(ap, fmt); #else const char *fmt; va_start(ap); fmt = va_arg(ap, const char *); #endif #if defined(HAVE_PTHREAD_CREATE) && defined(ENABLE_PTHREAD) pthread_setcancelstate(PTHREAD_CANCEL_DISABLE, NULL); #endif fp = fopen(aprxlogfile, "a"); if (fp != NULL) { setlinebuf(fp); fprintf(fp, "%s ", timebuf); vfprintf(fp, fmt, ap); (void)fprintf(fp, "\n"); fclose(fp); } #if defined(HAVE_PTHREAD_CREATE) && defined(ENABLE_PTHREAD) pthread_setcancelstate(PTHREAD_CANCEL_ENABLE, NULL); #endif #ifdef HAVE_STDARG_H va_end(ap); #endif } } /* ---------------------------------------------------------- */ void rfloghex(const char *portname, char direction, int discard, const uint8_t *buf, int buflen) { } void rflog(const char *portname, char direction, int discard, const char *tnc2buf, int tnc2len) { if (rflogfile) { #if defined(HAVE_PTHREAD_CREATE) && defined(ENABLE_PTHREAD) pthread_setcancelstate(PTHREAD_CANCEL_DISABLE, NULL); #endif FILE *fp = NULL; const char *p; if (strcmp("-",rflogfile)==0) { if (debug < 2) return; fp = stdout; } else { fp = fopen(rflogfile, "a"); } if (fp) { char timebuf[60]; printtime(timebuf, sizeof(timebuf)); (void)fprintf(fp, "%s %-9s ", timebuf, portname); (void)fprintf(fp, "%c ", direction); if (discard < 0) { fprintf(fp, "*"); } if (discard > 0) { fprintf(fp, "#"); } //replace non printing TNC2 characters in log print for(p=tnc2buf;p0x7e) fprintf(fp,"<0x%02x>",*p); else fputc(*p,fp); } fputc('\n',fp); if (fp != stdout) fclose(fp); } #if defined(HAVE_PTHREAD_CREATE) && defined(ENABLE_PTHREAD) pthread_setcancelstate(PTHREAD_CANCEL_ENABLE, NULL); #endif } } aprx-2.9.0/aprx.conf.in000664 000000 000000 00000037654 13040775352 014727 0ustar00rootroot000000 000000 # # Simple sample configuration file for the APRX-2 -- an APRS iGate and Digipeater # # This configuration is structured with Apache HTTPD style tags # which then contain subsystem parameters. # # # For simple case, you need to adjust 4 things: # - Mycall parameter # - passcode parameter in APRS-IS configuration # - Select correct type of interface (ax25-device or serial-device) # - Optionally set a beacon telling where this system is # - Optionally enable digipeater with or without tx-igate # # # # Define the parameters in following order: # 1) ** zero or one # 2) ** zero or one # 3) ** there can be multiple! # 4) ** zero to many # 5) ** zero to many # 6) ** zero to many (at most one for each Tx) # # # Global macro for simplified callsign definition: # Usable for 99+% of cases. # mycall N0CALL-1 # # Global macro for simplified "my location" definition in # place of explicit "lat nn lon mm" at beacons. Will also # give "my location" reference for "filter m/100". # #myloc lat ddmm.mmN lon dddmm.mmE # The aprsis login parameter: # Station callsignSSID used for relaying APRS frames into APRS-IS. # Use this only to define other callsign for APRS\-IS login. # #login OTHERCALL-7 # login defaults to $mycall # # Passcode for your callsign: # Unique code for your callsign to allow transmitting packets # into the APRS-IS. # passcode -1 # APRS-IS server name and optional portnumber. # # WARNING: Do not change from default port number [14580] # unless you are absolutely certain you want # something else, and you allow that something # else also affect your tx-igate behaviour! # server rotate.aprs2.net #server euro.aprs2.net #server asia.aprs2.net #server noam.aprs2.net #server soam.aprs2.net #server aunz.aprs2.net # Some APRS-IS servers tell every about 20 seconds to all contact # ports that they are there and alive. Others are just silent. # Default value is 3*"heartbeat" + some --> 120 (seconds) # #heartbeat-timeout 0 # Disabler of heartbeat timeout # APRS-IS server may support some filter commands. # See: http://www.aprs-is.net/javAPRSFilter.aspx # # You can define the filter as single long quoted string, or as # many short segments with explaining comments following them. # # Usability of these filters for a Tx-iGate is dubious, but # they exist in case you for example want to Tx-iGate packets # from some source callsigns in all cases even when they are # not in your local area. # #filter "possibly multiple filter specs in quotes" # #filter "m/100" # My-Range filter: positions within 100 km from my location #filter "f/OH2XYZ-3/50" # Friend-Range filter: 50 km of friend's last beacon position # pidfile is UNIX way to tell that others that this program is # running with given process-id number. This has compiled-in # default value of: pidfile @VARRUN@/aprx.pid # pidfile @VARRUN@/aprx.pid # rflog defines a rotatable file into which all RF-received packets # are logged. The host system can rotate it at any time without # need to signal the aprx that the file has been moved. # rflog @VARLOG@/aprx-rf.log # aprxlog defines a rotatable file into which most important # events on APRS-IS connection are logged, namely connects and # disconnects. The host system can rotate it at any time without # need to signal the aprx that the file has been moved. # aprxlog @VARLOG@/aprx.log # dprslog defines a rotatable file into which most important # events on DPRS receiver gateways are logged. # The host system can rotate it at any time without need to # signal the aprx that the file has been moved. # #dprslog @VARLOG@/dprs.log # erlangfile defines a mmap():able binary file, which stores # running sums of interfaces upon which the channel erlang # estimator runs, and collects data. # Depending on the system, it may be running on a filesystem # that actually retains data over reboots, or it may not. # With this backing store, the system does not loose cumulating # erlang data over the current period, if the restart is quick, # and does not stradle any exact minute. # (Do restarts at 15 seconds over an even minute..) # This file is around 0.7 MB per each interface talking APRS. # If this file is not defined and it can not be created, # internal non-persistent in-memory storage will be used. # # Built-in default value is: @VARRUN@/aprx.state # #erlangfile @VARRUN@/aprx.state # *********** Multiple definitions can follow ********* # ax25-device Lists AX.25 ports by their callsigns that in Linux # systems receive APRS packets. If none are defined, # or the system is not Linux, the AX.25 network receiver # is not enabled. Used technologies need at least # Linux kernel 2.4.x # # tx-ok Boolean telling if this device is able to transmit. # # # ax25-device $mycall # #tx-ok false # transmitter enable defaults to false # #telem-to-is true # set to 'false' to disable # # # The TNC serial options. Parameters are: # - /dev/ttyUSB1 -- tty device # - 19200 -- baud rate, supported ones are: # 1200, 2400, 4800, 9600, 19200, 38400 # - 8n1 -- 8-bits, no parity, one stop-bit, # no other supported modes # - "KISS" - plain basic KISS mode # - "XORSUM" alias "BPQCRC" - KISS with BPQ "CRC" byte # - "SMACK" alias "CRC16" - KISS with real CRC # - "FLEXNET" - KISS with real CRC # - "TNC2" - TNC2 monitor format # - "DPRS" - DPRS (RX) GW # # # serial-device /dev/ttyUSB0 19200 8n1 KISS # #callsign $mycall # callsign defaults to $mycall # #tx-ok false # transmitter enable defaults to false # #telem-to-is true # set to 'false' to disable # # # serial-device /dev/ttyUSB1 19200 8n1 TNC2 # #callsign $mycall # callsign defaults to $mycall # #tx-ok false # TNC2 monitor can not have transmitter # #telem-to-is true # set to 'false' to disable # # # serial-device /dev/ttyUSB1 19200 8n1 DPRS # callsign dprsgwcallsign # must define actual callsign # #tx-ok false # DPRS monitor can not do transmit # #telem-to-is true # set to 'false' to disable # # # tcp-device behaves identically to local serial port, but allows # access to remote TCP/IP sockets. A common application is remote # KISS modems connected to Ethernet-to-serial adapters from suppliers # such as Lantronix. # It's important that this remote socket is a raw TCP socket and not # handle any byte codes as command escapes. # # tcp-device hostname portnumber mode # - hostname may be a domain name, IPv4 address, or a IPv6 address # - portnumber is any valid TCP port (1-65535) # - mode is the same as serial-device (KISS, TNC2, etc.) # # # tcp-device 192.0.2.10 10001 KISS # #callsign $mycall # callsign defaults to $mycall # #tx-ok false # transmitter enable defaults to false # #telem-to-is true # set to 'false' to disable # # *********** Multiple definitions can follow ********* # # Beacons are sent out to radio transmitters AND/OR APRSIS. # Default is "both", other modes are settable. # #beaconmode { aprsis | both | radio } # # Beacons are sent from a circullar transmission queue, total cycle time # of that queue is 20 minutes by default, and beacons are "evenly" # distributed along it. Actual intervals are randomized to be anything # in between 80% and 100% of the cycle-size / number-of-beacons. # First beacon is sent out 30 seconds after system start. # Tune the cycle-size to be suitable to your number of defined beacons. # #cycle-size 20m # # Basic beaconed thing is positional message of type "!": # #beacon symbol "R&" lat "0000.00N" lon "00000.00E" comment "Rx-only iGate" #beacon symbol "R&" $myloc comment "Rx-only iGate" # #Following are basic options: # 'symbol' no default, must be defined! # 'lat' coordinate latitude: ddmm.mmN (no default!) # 'lon' coordinate longitude: dddmm.mmE (no default!) # '$myloc' coordinate values taken from global 'myloc' entry, # and usable in place of explicit 'lat'+'lon'. # 'comment' optional tail part of the item, default is nothing # # Sample symbols: # R& is for "Rx-only iGate" # I& is for "Tx-iGate" # /# is for "Digipeater" # I# is for "Tx-iGate + Digipeater"" # #Additional options are: # 'srccall' parameter sets claimed origination address. # 'dstcall' sets destination address, default "APRXnn" # 'interface' parameter picks an interface (must be "tx-ok true" type) # 'via' sets radio distribution pattern, default: none. # 'timefix' On APRS messages with HMS timestamp (hour:min:sec), the # system fixes appropriate field with transmit time timestamp. # # Message type is by default '!', which is positional no timestamp format. # Other possible formats are definable with options: # 'type' Single character setting type: ! = / @, default: ! # 'item' Defines a name of Item (')') type beacons. # 'object' Defines a name of Object (';') type beacons. # # 'file' option tells a file at which a _raw_ APRS message content is # expected to be found as first line of text. Line ending newline # is removed, and no escapes are supported. The timefix is # available, though probably should not be used. # No \-processing is done on read text line. # # 'exec' option tells a computer program which returns to stdout _raw_ APRS # message content without newline. The timefix is # available, though probably should not be used. # No \-processing is done on read text line. # # The parameter sets can vary: # a) 'srccall nnn-n dstcall "string" symbol "R&" lat "ddmm.mmN" lon "dddmm.mmE" [comment "any text"] # b) 'srccall nnn-n dstcall "string" symbol "R&" $myloc [comment "any text"] # c) 'srccall nnn-n dstcall "string" raw "string"' # # The a) form flags on some of possible syntax errors in parameters. # It will also create only "!" type messages. The dest parameter # defaults to "APRS", but can be used to give other destinations. # The via parameter can be used to add other keywords, like "NOGATE". # # Writing correct RAW format beacon message is very hard, # which is evidenced by the frequency of bad syntax texts # people so often put there... If you can not be persuaded # not to do it, then at least VERIFY the beacon result on # web service like findu.com, or aprs.fi # # Do remember that the \ -character has special treatment in the # Aprx configuration parser. If you want a '\' on APRS content, # then you encode it on configuration file as: '\\' # # Stranger combinations with explicite "transmit this to interface X": # #beacon file /tmp/wxbeacon.txt #beacon interface N0CALL-3 srccall N0CALL-3 \ # raw "!0000.00NR00000.00E&Rx-only iGate" #beacon interface N0CALL-3 srccall N0CALL-3 \ # raw "!0000.00NI00000.00E&Tx-iGate" #beacon interface $mycall symbol "R&" $myloc \ # comment "Rx-only iGate" #beacon interface $mycall symbol "I&" $myloc \ # comment "Tx-iGate" #beacon exec /usr/bin/telemetry.pl #beacon timeout 20 exec /usr/bin/telemetry.pl #beacon interface N0CALL-3 srccall N0CALL-3 \ # timeout 20 exec /usr/bin/telemetry.pl # # *********** definition(s) follow ********* # # The system will always send telemetry for all of its interfaces # to APRSIS, but there is an option to define telemetry to be sent # to radio channel by using following sections for each transmitter # that is wanted to send out the telemetry. # # transmitter - callsign referring to # via - optional via-path, only 1 callsign! # source - one or more of callsigns for which # the telemetry transmission is wanted for # # # transmitter $mycall # via TRACE1-1 # source $mycall # # *********** definition(s) follow ********* # # The digipeater definitions tell transmitters that receive # AX.25 packets from possibly multiple sources, and then what # to do on the AX.25 headers of those messages. # # There is one transmitter per digipeater -- and inversely, there # can be at most one digipeater for each transmitter. # # In each digipeater there is at least one , usually same # as the transmitter. You may use same on multiple # s. Using multiple instances of same on # a single does not crash the system, but it can cause # packet duplication in case of non-APRS protocols (like AX.25 CONS) # # Use only at most two levels of viscous-delay in your . # Immediate sending is by "0", and a delayed sending is any value # from 1 to 9. This system does not correctly support other than # immediate sending and one level of delay. # # Note: In order to igate correct when multiple receivers and # transmitters are used on single channel, the # definitions of each radio port must have associated # "igate-group N" parameter which has N of value 1 to 3. # See the aprx-manual.pdf for details. # (Default software compilation allows you to have up to # three channels of APRS operation.) # # # transmitter $mycall # #ratelimit 60 120 # default: average 60 packets/minute, # # # burst max 120 packets/minute # #srcratelimit 10 20 # Example: by sourcecall: # # average 10 packets/minute, # # burst max 20 packets/minute # # # source $mycall # # #relay-type digipeated # default mode is "digipeated" # # viscous-delay 0 # no viscous delay for RF->RF digipeating # # ratelimit 60 120 # default: average 60 packets/minute, # # # burst max 120 packets/minute # ## filter a/la/lo/la/lo # service area filter # ## filter -b/CALL # always block these # # # # Diversity receiver which combines to the primary # # Tx/Rx transmitter. There can be as many of these # # as you can connect on this machine. # # # # source RXPORT-1 # # #relay-type digipeated # default mode is "digipeated" # # viscous-delay 0 # no viscous delay for RF->RF digipeating # # ratelimit 60 120 # default: average 60 packets/minute, # # # burst max 120 packets/minute # ## filter a/la/lo/la/lo # service area filter # ## filter -b/CALL # always block these # # # # # APRSIS source adds a TX-IGATE behaviour # # source APRSIS # # relay-type third-party # Must define this for APRSIS source! # # viscous-delay 5 # Recommendation: 5 seconds delay to give # # # RF delivery time make itself known. # # ratelimit 60 120 # default: average 60 packets/minute, # # # burst max 120 packets/minute # ## filter a/la/lo/la/lo # service area filter # ## filter -b/CALL # always block these # # # # # # DPRS source adds a DPRS->APRS RF gate # # interface DPRS # # ratelimit 60 120 # default: average 60 packets/minute, # # # burst max 120 packets/minute # # relay-type third-party # Must define this for DPRS source! # # # aprx-2.9.0/aprx.h000664 000000 000000 00000063722 13040775352 013617 0ustar00rootroot000000 000000 /* **************************************************************** * * * * APRX -- 2nd generation APRS iGate and digi with * * minimal requirement of esoteric facilities or * * libraries of any kind beyond UNIX system libc. * * * * (c) Matti Aarnio - OH2MQK, 2007-2014 * * * * **************************************************************** */ #include "config.h" #include #include #include #include #include #include #include #include #ifdef HAVE_SYS_TIME_H # include #endif #ifdef HAVE_TIME_H # include #endif #include #ifdef HAVE_STDLIB_H # include #endif #define __need_size_t #define __need_NULL #ifdef HAVE_STDDEF_H # include #endif #ifdef HAVE_STDARG_H #include #else #include #endif #if defined(HAVE_PTHREAD_CREATE) && defined(ENABLE_PTHREAD) #include pthread_t aprsis_thread; pthread_attr_t pthr_attrs; #endif #ifdef _FOR_VALGRIND_ #define strdup aprx_strdup #define strcmp aprx_strcmp #define strncmp aprx_strncmp #define memcmp aprx_memcmp #define memcpy aprx_memcpy #define memchr aprx_memchr #define memrchr aprx_memrchr #define strlen aprx_strlen #define strcpy aprx_strcpy #define strncpy aprx_strncpy #define strchr aprx_strchr // Single char at the time naive implementations for valgrind runs extern int memcmp(const void *p1, const void *p2, size_t n); extern void *memcpy(void *dest, const void *src, size_t n); extern size_t strlen(const char *p); extern char *strdup(const char *s); extern int strcmp(const char *s1, const char *s2); extern int strncmp(const char *s1, const char *s2, size_t n); extern char *strcpy(char *dest, const char *src); extern char *strncpy(char *dest, const char *src, size_t n); extern void *memchr(const void *s, int c, size_t n); extern char *strchr(const char *s, int c); // extern declarators for standard functions extern void *memset(void *s, int c, size_t n); extern char *strerror(const int n); extern void *memmove(void *dest, const void *src, size_t n); extern char *strtok(char *str, const char *delim); extern int strcasecmp(const char *s1, const char *s2); #else #ifdef HAVE_STRING_H # include #endif #ifdef HAVE_STRINGS_H # include #endif #endif extern void *memrchr(const void *s, int c, size_t n); #include #include #include #include #ifdef HAVE_ALLOCA_H # include #endif #include #ifdef HAVE_STDINT_H #include #endif #include #include #include #include /* Radio interface groups on igate receiption history tracking. * Value range: 1 to MAX_IF_GROUP-1. * Value 0 is reserved for APRSIS. */ #define MAX_IF_GROUP 4 #define CALLSIGNLEN_MAX 9 struct aprxpolls; // forward declarator #include "cellmalloc.h" #include "historydb.h" #include "keyhash.h" #include "pbuf.h" #if 0 #define static /*ignore statics during debug */ #endif struct aprx_interface; // Forward declarator struct configfile { const char *name; FILE *fp; int linenum_i; // internal linenum int linenum; // externally presented, first line of folded multilines char buf[8010]; }; /* aprxpolls.c */ struct aprxpolls { struct pollfd *polls; int pollcount; int pollsize; struct timeval next_timeout; }; #define APRXPOLLS_INIT { NULL, 0, 0, {0,0} } extern int aprxpolls_millis(struct aprxpolls *app); extern void aprxpolls_reset(struct aprxpolls *app); extern struct pollfd *aprxpolls_new(struct aprxpolls *app); extern void aprxpolls_free(struct aprxpolls *app); /* aprx.c */ #ifndef DISABLE_IGATE extern const char *aprsis_login; #endif extern int die_now; extern const char *mycall; extern const char *tocall; extern float myloc_lat; extern float myloc_coslat; extern float myloc_lon; extern const char *myloc_latstr; extern const char *myloc_lonstr; extern void fd_nonblockingmode(int fd); extern const char *swname; extern const char *swversion; extern void timetick(void); extern struct timeval tick; // Monotonic clock, progresses regularly from boot. NOT wall clock time. extern int time_reset; // Set during ONE call cycle of prepolls extern int debug; extern int verbout; extern int erlangout; extern const char *rflogfile; extern const char *aprxlogfile; extern const char *dprslogfile; extern const char *erlanglogfile; extern const char *pidfile; extern void printtime(char *buf, int buflen); extern void aprx_syslog_init(const char *syslog_fac); #ifdef HAVE_STDARG_H #ifdef __STDC__ extern void aprxlog(const char *fmt, ...); #endif #else /* VARARGS */ extern void aprxlog(va_list); #endif extern void rflog(const char *portname, char direction, int discard, const char *tnc2buf, int tnc2len); extern void rfloghex(const char *portname, char direction, int discard, const uint8_t *buf, int buflen); /* netresolver.c */ extern void netresolv_start(void); // separate thread working on this! extern void netresolv_stop(void); struct netresolver { char const *hostname; char const *port; time_t re_resolve_time; struct addrinfo ai; struct sockaddr sa; }; extern struct netresolver *netresolv_add(const char *hostname, const char *port); /* ttyreader.c */ typedef enum { LINETYPE_KISS, /* all KISS variants without CRC on line */ LINETYPE_KISSSMACK, /* KISS/SMACK variants with CRC on line */ LINETYPE_KISSFLEXNET, /* KISS/FLEXNET with CRC on line */ LINETYPE_KISSBPQCRC, /* BPQCRC - really XOR sum of data bytes, also "AEACRC" */ LINETYPE_TNC2, /* text line from TNC2 in monitor mode */ LINETYPE_AEA, /* not implemented... */ LINETYPE_DPRSGW /* Special DPRS RX GW mode */ } LineType; typedef enum { KISSSTATE_SYNCHUNT = 0, KISSSTATE_COLLECTING, KISSSTATE_KISSFESC } KissState; struct serialport { int fd; /* UNIX fd of the port */ struct timeval wait_until; time_t last_read_something; /* Used by serial port functionality watchdog */ int read_timeout; /* seconds */ int poll_millis; /* milliseconds (0 = none.) */ LineType linetype; KissState kissstate; /* state for KISS frame reader, also for line collector */ /* NOTE: The smack_probe is separate on all ** sub-tnc:s on SMACK loop */ time_t smack_probe[8]; /* if need to send SMACK probe, use this to limit their transmit frequency. */ int smack_subids; /* bitset; 0..7; could use char... */ struct termios tio; /* tcsetattr(fd, TCSAFLUSH, &tio) */ /* stty speed 19200 sane clocal pass8 min 1 time 5 -hupcl ignbrk -echo -ixon -ixoff -icanon */ const char *ttyname; /* "/dev/ttyUSB1234-bar22-xyz7" -- Linux TTY-names can be long.. */ const char *ttycallsign[16]; /* callsign */ const void *netax25[16]; char *initstring[16]; /* optional init-string to be sent to the TNC, NULL OK */ int initlen[16]; /* .. as it can have even NUL-bytes, length is important! */ struct aprx_interface *interface[16]; uint8_t rdbuf[2000]; /* buffering area for raw stream read */ int rdlen, rdcursor; /* rdlen = last byte in buffer, rdcursor = next to read. When rdlen == 0, buffer is empty. */ time_t rdline_time; /* last time something was added there */ uint8_t rdline[2000]; /* processed into lines/records */ int rdlinelen; /* length of this record */ uint8_t wrbuf[4000]; /* buffering area for raw stream read */ int wrlen, wrcursor; /* wrlen = last byte in buffer, wrcursor = next to write. When wrlen == 0, buffer is empty. */ void *dprsgw; /* opaque DPRS GW data */ }; extern int ttyreader_prepoll(struct aprxpolls *); extern int ttyreader_postpoll(struct aprxpolls *); extern void ttyreader_init(void); // Old style init: ttyreader_serialcfg() extern const char *ttyreader_serialcfg(struct configfile *cf, char *param1, char *str); // New style init: ttyreader_new() extern struct serialport *ttyreader_new(void); extern void ttyreader_register(struct serialport *tty); extern int ttyreader_getc(struct serialport *tty); // extern void ttyreader_setlineparam(struct serialport *tty, const char *ttyname, const int baud, int const kisstype); // extern void ttyreader_setkissparams(struct serialport *tty, const int tncid, const char *callsign, const int timeout); extern int ttyreader_parse_ttyparams(struct configfile *cf, struct serialport *tty, char *str); extern void ttyreader_linewrite(struct serialport *S); extern int ttyreader_parse_nullparams(struct configfile *cf, struct serialport *tty, char *str); extern void hexdumpfp(FILE *fp, const uint8_t *buf, const int len, int axaddr); extern void aprx_cfmakeraw(struct termios *, int f); extern void tv_timerbounds(const char *, struct timeval *tv, const int margin, void (*resetfunc)(void*), void *resetarg ); extern void tv_timeradd_millis(struct timeval *res, struct timeval * const a, const int millis); extern void tv_timeradd_seconds(struct timeval *res, struct timeval * const a, const int seconds); extern int tv_timerdelta_millis(struct timeval * const _now, struct timeval * const _target); extern int tv_timercmp(struct timeval * const a, struct timeval * const b); extern int timecmp(time_t a, time_t b); /* ax25.c */ extern int ax25_to_tnc2_fmtaddress(char *dest, const uint8_t *src, int markflag); extern int ax25_to_tnc2(const struct aprx_interface *aif, const char *portname, const int tncid, const int cmdbyte, const uint8_t *frame, const int framelen); extern void ax25_filter_add(const char *p1, const char *p2); extern int ax25_format_to_tnc(const uint8_t *frame, const int framelen, char *tnc2buf, const int tnc2buflen, int *frameaddrlen, int *tnc2addrlen, int *is_aprs, int *ui_pid); extern int parse_ax25addr(uint8_t ax25[7], const char *text, int ssidflags); #ifndef DISABLE_IGATE /* aprsis.c */ extern int aprsis_add_server(const char *server, const char *port); extern int aprsis_set_heartbeat_timeout(const int tout); extern int aprsis_set_filter(const char *filter); extern int aprsis_set_login(const char *login); #define qTYPE_IGATED 'R' #define qTYPE_LOCALGEN 'S' extern int aprsis_queue(const char *addr, int addrlen, const char qtype, const char *gwcall, const char *text, int textlen); extern int aprsis_prepoll(struct aprxpolls *app); extern int aprsis_postpoll(struct aprxpolls *app); extern void aprsis_init(void); extern void aprsis_start(void); extern void aprsis_stop(void); extern int aprsis_config(struct configfile *cf); extern char * const aprsis_loginid; #endif /* beacon.c */ extern int beacon_prepoll(struct aprxpolls *app); extern int beacon_postpoll(struct aprxpolls *app); extern int beacon_config(struct configfile *cf); extern void beacon_childexit(int pid); /* config.c */ extern void *readconfigline(struct configfile *cf); extern int configline_is_comment(struct configfile *cf); extern int readconfig(const char *cfgfile); extern char *config_SKIPSPACE(char *Y); extern char *config_SKIPTEXT(char *Y, int *lenp); extern void config_STRLOWER(char *Y); extern void config_STRUPPER(char *Y); extern int validate_callsign_input(char *callsign, int strict); // this modifies callsign string! extern int config_parse_interval(const char *par, int *resultp); extern int config_parse_boolean(const char *par, int *resultp); extern const char *scan_int(const char *p, int len, int*val, int*seen_space); extern int validate_degmin_input(const char *s, int maxdeg); /* dprsgw.c */ extern int dprsgw_pulldprs(struct serialport *S); extern int dprsgw_prepoll(struct aprxpolls *app); extern int dprsgw_postpoll(struct aprxpolls *app); /* erlang.c */ extern void erlang_init(const char *syslog_facility_name); extern void erlang_start(int do_create); extern int erlang_prepoll(struct aprxpolls *app); extern int erlang_postpoll(struct aprxpolls *app); /* igate.c */ #ifndef DISABLE_IGATE extern void igate_start(void); extern void igate_from_aprsis(const char *ax25, int ax25len); extern void igate_to_aprsis(const char *portname, const int tncid, const char *tnc2buf, int tnc2addrlen, int tnc2len, const int discard, const int strictax25); extern void enable_tx_igate(const char *, const char *); #endif extern const char *tnc2_verify_callsign_format(const char *t, int starok, int strictax25, const char *e); /* netax25.c */ #ifdef PF_AX25 /* PF_AX25 exists -- highly likely a Linux system ! */ extern void netax25_init(void); extern void netax25_start(void); extern const void* netax25_open(const char *ifcallsign); extern int netax25_prepoll(struct aprxpolls *); extern int netax25_postpoll(struct aprxpolls *); extern void * netax25_addrxport(const char *callsign, const struct aprx_interface *aif); extern void netax25_sendax25(const void *nax25, const void *ax25, int ax25len); extern void netax25_sendto(const void *nax25, const uint8_t *axaddr, const int axaddrlen, const char *axdata, const int axdatalen); #endif /* telemetry.c */ #define USE_ONE_MINUTE_DATA 0 extern void telemetry_start(void); extern int telemetry_prepoll(struct aprxpolls *app); extern int telemetry_postpoll(struct aprxpolls *app); extern int telemetry_config(struct configfile *cf); typedef enum { ERLANG_RX, ERLANG_DROP, ERLANG_TX } ErlangMode; extern void erlang_add(const char *portname, ErlangMode erl, int bytes, int packets); extern void erlang_set(const char *portname, int bytes_per_minute); extern int erlangsyslog; extern int erlanglog1min; extern const char *erlang_backingstore; /* The struct erlangline is shared in between the aprx, and erlang reporter application: aprx-stat */ struct erlang_rxtxbytepkt { long packets_rx, packets_rxdrop, packets_tx ; long bytes_rx, bytes_rxdrop, bytes_tx ; time_t update; }; struct erlangline { const void *refp; int index; char name[31]; uint8_t __subport; time_t last_update; int erlang_capa; /* bytes, 1 minute */ struct erlang_rxtxbytepkt SNMP; /* SNMPish counters */ #ifdef ERLANGSTORAGE struct erlang_rxtxbytepkt erl1m; /* 1 minute erlang period */ struct erlang_rxtxbytepkt erl10m; /* 10 minute erlang period */ struct erlang_rxtxbytepkt erl60m; /* 60 minute erlang period */ #else #if (USE_ONE_MINUTE_DATA == 1) struct erlang_rxtxbytepkt erl1m; /* 1 minute erlang period */ #else struct erlang_rxtxbytepkt erl10m; /* 10 minute erlang period */ #endif #endif #ifdef ERLANGSTORAGE int e1_cursor, e1_max; /* next store point + max cursor index */ int e10_cursor, e10_max; int e60_cursor, e60_max; #else #if (USE_ONE_MINUTE_DATA == 1) int e1_cursor, e1_max; /* next store point + max cursor index */ #else int e10_cursor, e10_max; #endif #endif #ifdef ERLANGSTORAGE #define APRXERL_1M_COUNT (60*24) // 1 day of 1 minute data #define APRXERL_10M_COUNT (60*24*7) // 1 week of 10 minute data #define APRXERL_60M_COUNT (24*31*3) // 3 months of hourly data struct erlang_rxtxbytepkt e1[APRXERL_1M_COUNT]; struct erlang_rxtxbytepkt e10[APRXERL_10M_COUNT]; struct erlang_rxtxbytepkt e60[APRXERL_60M_COUNT]; #else /* EMBEDDED */ /* When making very small memory footprint, like embedding on Linksys WRT54GL ... */ #define APRXERL_1M_COUNT (22) // 22 minutes of 1 minute data #define APRXERL_10M_COUNT (3) // 30 minutes of 10 minute data #if (USE_ONE_MINUTE_DATA == 1) struct erlang_rxtxbytepkt e1[APRXERL_1M_COUNT]; #else struct erlang_rxtxbytepkt e10[APRXERL_10M_COUNT]; #endif #endif }; struct erlanghead { char title[32]; int version; /* format version */ int linecount; time_t last_update; pid_t server_pid; time_t start_time; char mycall[16]; double align_filler; }; #define ERLANGLINE_STRUCT_VERSION ((sizeof(struct erlanghead)<<16)+sizeof(struct erlangline)) extern struct erlanghead *ErlangHead; extern struct erlangline **ErlangLines; extern int ErlangLinesCount; /* dupecheck.c */ typedef struct dupe_record_t { struct dupe_record_t *next; uint32_t hash; time_t t; // creation time time_t t_exp; // expiration time struct pbuf_t *pbuf; // To send packet out of delayed processing, // this pointer must be non-NULL. int16_t seen; // Count of times this packet has been seen // on non-delayed processing. First one will // be sent when pbuf is != NULL. int16_t delayed_seen; // Count of times this packet has been seen // on delayed processing. The packet may get // sent, if "seen" count is zero at delay end. int16_t seen_on_transmitter; // Source of where it was seen is same // as this digipeater transmitter. int16_t refcount; // number of references on this entry int16_t alen; // Address length int16_t plen; // Payload length char addresses[20]; char *packet; char packetbuf[200]; /* 99.9+ % of time this is enough.. */ } dupe_record_t; #define DUPECHECK_DB_SIZE 16 /* Hash index table size - per dupechecker */ typedef struct dupecheck_t { int storetime; struct dupe_record_t *dupecheck_db[DUPECHECK_DB_SIZE]; /* Hash index table */ } dupecheck_t; extern void dupecheck_init(void); /* Inits the dupechecker subsystem */ extern dupecheck_t *dupecheck_new(const int storetime); /* Makes a new dupechecker */ extern dupe_record_t *dupecheck_get(dupe_record_t *dp); // increment refcount extern void dupecheck_put(dupe_record_t *dp); // decrement refcount extern dupe_record_t *dupecheck_aprs(dupecheck_t *dp, const char *addr, const int alen, const char *data, const int dlen); /* aprs checker */ extern dupe_record_t *dupecheck_pbuf(dupecheck_t *dp, struct pbuf_t *pb, const int viscous_delay); /* pbuf checker */ extern int dupecheck_prepoll(struct aprxpolls *app); extern int dupecheck_postpoll(struct aprxpolls *app); /* crc.c */ // kissencoder() needs direct access to CRC tables.. extern const uint16_t crc16_table[256]; extern const uint16_t crc_flex_table[256]; extern uint16_t calc_crc_16(const uint8_t *buf, int n); /* SMACK's CRC-16 */ extern uint16_t calc_crc_flex(const uint8_t *buf, int n); /* FLEXNET's CRC */ extern uint16_t calc_crc_ccitt(uint16_t crc, const uint8_t *buf, int len); // X.25's FCS a.k.a. CRC-CCITT a.k.a. CCITT-CRC extern int check_crc_16(const uint8_t *buf, int n); /* SMACK's CRC-16 */ extern int check_crc_flex(const uint8_t *buf, int n); /* FLEXNET's CRC */ extern int check_crc_ccitt(const uint8_t *buf, int n); /* KISS protocol encoder/decoder specials */ #define KISS_FEND (0xC0) #define KISS_FESC (0xDB) #define KISS_TFEND (0xDC) #define KISS_TFESC (0xDD) extern int kissencoder(void *, int, LineType, const void *, int, int); extern void kiss_kisswrite(struct serialport *S, const int tncid, const uint8_t *ax25raw, const int ax25rawlen); extern int kiss_pullkiss(struct serialport *S); extern void kiss_poll(struct serialport *S); /* digipeater.c */ typedef enum { DIGIRELAY_UNSET, DIGIRELAY_DIGIPEAT, DIGIRELAY_DIGIPEAT_DIRECTONLY, DIGIRELAY_THIRDPARTY } digi_relaytype; struct filter_t; // Forward declarator struct digipeater; // Forward declarator struct tracewide { int maxreq; int maxdone; int is_trace; int nkeys; char **keys; int *keylens; }; struct digipeater_source { struct digipeater *parent; digi_relaytype src_relaytype; struct aprx_interface *src_if; struct filter_t *src_filters; struct tracewide *src_trace; struct tracewide *src_wide; #ifndef DISABLE_IGATE char *via_path; // for APRSIS only char *msg_path; // for APRSIS only uint8_t ax25viapath[7]; // APRSIS uint8_t msgviapath[7]; // APRSIS #endif float tokenbucket; float tbf_increment; float tbf_limit; // Viscous queue is at , but used dupechecker // is -wide, common to all sources in that // digipeater. int viscous_delay; int viscous_queue_size; int viscous_queue_space; struct dupe_record_t **viscous_queue; int sourceregscount; regex_t **sourceregs; int destinationregscount; regex_t **destinationregs; int viaregscount; regex_t **viaregs; int dataregscount; regex_t **dataregs; }; struct digipeater { struct aprx_interface *transmitter; float tokenbucket; // Per transmitter TokenBucket filter float tbf_increment; float tbf_limit; float src_tbf_increment; // Source call specific TokenBucket rules float src_tbf_limit; dupecheck_t *dupechecker; // Per transmitter dupecheck #ifndef DISABLE_IGATE historydb_t *historydb; // Per transmitter HistoryDB #endif const struct tracewide *trace; const struct tracewide *wide; int sourcecount; struct digipeater_source **sources; }; extern int digipeater_prepoll(struct aprxpolls *app); extern int digipeater_postpoll(struct aprxpolls *app); extern int digipeater_config(struct configfile *cf); extern void digipeater_receive(struct digipeater_source *src, struct pbuf_t *pb); extern int digipeater_receive_filter(struct digipeater_source *src, struct pbuf_t *pb); extern dupecheck_t *digipeater_find_dupecheck(const struct aprx_interface *aif); extern struct digipeater* digipeater_find_by_iface(const struct aprx_interface *aif); /* interface.c */ typedef enum { IFTYPE_UNSET, IFTYPE_AX25, IFTYPE_SERIAL, IFTYPE_TCPIP, IFTYPE_AGWPE, IFTYPE_NULL, IFTYPE_APRSIS } iftype_e; struct aprx_interface { iftype_e iftype; int timeout; int16_t ifindex; // Absolute index on this interface int16_t ifgroup; // Group definition on this interface char *callsign; // Callsign of this interface uint8_t ax25call[7]; // AX.25 address field format callsign int aliascount; char **aliases; // Alias callsigns for this interface int8_t subif; // Sub-interface index - for KISS uses uint8_t txrefcount; // Number of digipeaters using this as Tx unsigned tx_ok:1; // This is Tx interface unsigned telemeter_to_is:1; // Telemeter this to APRS-IS unsigned telemeter_to_rf:1; // Telemeter this to this radio port unsigned telemeter_newformat:1; // Telemeter in "new format" int initlength; char *initstring; const void *nax25p; // used on IFTYPE_AX25 #ifdef ENABLE_AGWPE const void *agwpe; // used on IFTYPE_AGWPE #endif struct serialport *tty; // used on IFTYPE_SERIAL, IFTYPE_TCPIP int digisourcecount; struct digipeater_source **digisources; }; extern struct aprx_interface aprsis_interface; extern int top_interfaces_group; extern int all_interfaces_count; extern struct aprx_interface **all_interfaces; extern void interface_init(void); extern int interface_config(struct configfile *cf); extern struct aprx_interface *find_interface_by_callsign(const char *callsign); extern int interface_is_beaconable( const struct aprx_interface *iface ); extern int interface_is_telemetrable(const struct aprx_interface *iface ); extern void interface_receive_ax25( const struct aprx_interface *aif, const char *ifaddress, const int is_aprs, const int ui_pid, const uint8_t *axbuf, const int axaddrlen, const int axlen, const char *tnc2buf, const int tnc2addrlen, const int tnc2len); extern void interface_transmit_ax25(const struct aprx_interface *aif, uint8_t *axaddr, const int axaddrlen, const char *axdata, const int axdatalen); extern void interface_receive_3rdparty(const struct aprx_interface *aif, char **heads, const int headscount, const char *gwtype, const char *tnc2data, const int tnc2datalen); extern int interface_transmit_beacon(const struct aprx_interface *aif, const char *src, const char *dest, const char *via, const char *tncbuf, const int tnclen); extern int process_message_to_myself(const struct aprx_interface*const srcif, const struct pbuf_t*const pb); /* pbuf.c */ extern void pbuf_init(void); extern struct pbuf_t *pbuf_get(struct pbuf_t *pb); extern void pbuf_put(struct pbuf_t *pb); extern struct pbuf_t *pbuf_new(const int is_aprs, const int digi_like_aprs, const int tnc2addrlen, const char *tnc2buf, const int tnc2len, const int ax25addrlen, const void *ax25buf, const int ax25len ); /* parse_aprs.c */ extern int parse_aprs(struct pbuf_t*const pb, historydb_t*const historydb); struct aprs_message_t { const char *body; /* message body */ const char *msgid; int body_len; int msgid_len; int is_ack; int is_rej; }; extern int parse_aprs_message(const struct pbuf_t*const pb, struct aprs_message_t*const am); /* filter.c */ struct filter_t; // Forward declarator struct client_t; // Forward declarator struct worker_t; // Forward declarator extern void filter_init(void); extern int filter_parse(struct filter_t **ffp, const char *filt); extern void filter_free(struct filter_t *c); extern int filter_process(struct pbuf_t *pb, struct filter_t *f, historydb_t *historydb); extern void filter_preprocess_dupefilter(struct pbuf_t *pb); extern void filter_postprocess_dupefilter(struct pbuf_t *pb, historydb_t *historydb); extern float filter_lat2rad(float lat); extern float filter_lon2rad(float lon); #ifdef ENABLE_AGWPE /* agwpesocket.c */ extern void *agwpe_addport(const char *hostname, const char *hostport, const char *agwpeport, const struct aprx_interface *interface); extern void agwpe_sendto(const void *_ap, const uint8_t *axaddr, const int axaddrlen, const char *axdata, const int axdatalen); extern int agwpe_prepoll(struct aprxpolls *); extern int agwpe_postpoll(struct aprxpolls *); extern void agwpe_init(void); extern void agwpe_start(void); #endif aprx-2.9.0/aprxpolls.c000664 000000 000000 00000002624 13040775352 014656 0ustar00rootroot000000 000000 /* **************************************************************** * * * * APRX -- 2nd generation APRS iGate and digi with * * minimal requirement of esoteric facilities or * * libraries of any kind beyond UNIX system libc. * * * * (c) Matti Aarnio - OH2MQK, 2007-2014 * * * * **************************************************************** */ #include "aprx.h" /* aprxpolls libary functions.. */ void aprxpolls_reset(struct aprxpolls *app) { app->pollcount = 0; } int aprxpolls_millis(struct aprxpolls *app) { return tv_timerdelta_millis(&tick,&app->next_timeout); } struct pollfd *aprxpolls_new(struct aprxpolls *app) { struct pollfd *p; app->pollcount += 1; if (app->pollcount >= app->pollsize) { app->pollsize += 8; app->polls = realloc(app->polls, sizeof(struct pollfd) * app->pollsize); // valgrind polishing.. p = &(app->polls[app->pollcount - 1]); memset(p, 0, sizeof(struct pollfd) * 8); } assert(app->polls); p = &(app->polls[app->pollcount - 1]); memset(p, 0, sizeof(struct pollfd)); return p; } void aprxpolls_free(struct aprxpolls *app) { free(app->polls); app->polls = NULL; } aprx-2.9.0/ax25.c000664 000000 000000 00000015411 13040775352 013407 0ustar00rootroot000000 000000 /* **************************************************************** * * * * APRX -- 2nd generation APRS iGate and digi with * * minimal requirement of esoteric facilities or * * libraries of any kind beyond UNIX system libc. * * * * (c) Matti Aarnio - OH2MQK, 2007-2014 * * * * **************************************************************** */ #include "aprx.h" /* * -- * C0 00 * 82 A0 B4 9A 88 A4 60 * 9E 90 64 90 A0 9C 72 * 9E 90 64 A4 88 A6 E0 * A4 8C 9E 9C 98 B2 61 * 03 F0 * 21 36 30 32 39 2E 35 30 4E 2F 30 32 35 30 35 2E 34 33 45 3E 20 47 43 53 2D 38 30 31 20 * C0 * -- */ int ax25_to_tnc2_fmtaddress(char *dest, const uint8_t *src, int markflag) { int i, c; int ssid; int seen_space = 0; /* 6 bytes of station callsigns in shifted ASCII format.. */ for (i = 0; i < 6; ++i, ++src) { c = (*src) & 0xFF; if (c & 1) { *dest = 0; return ~c; /* Bad address-end flag ? */ } /* Don't copy spaces or 0 bytes */ c = c >> 1; if (c == 0 || c == 0x20) { seen_space = 1; continue; } if (!seen_space && (('A' <= c && c <= 'Z') || ('0' <= c && c <= '9'))) { *dest++ = c; } else { *dest = 0; return ~c; // Bad character in callsign } } /* 7th byte carries SSID et.al. bits */ c = (*src) & 0xFF; /* (c & 1) can be non-zero - at last address! */ ssid = (c >> 1) & 0x0F; if (ssid) { /* don't print SSID==0 value */ dest += sprintf(dest, "-%d", ssid); } if ((c & 0x80) && markflag) { *dest++ = '*'; /* Has been digipeated.. */ } *dest = 0; return c; } // Return 0 on OK, != 0 on errors int parse_ax25addr(uint8_t ax25[7], const char *text, int ssidflags) { int i = 0; int ssid = 0; char c; while (i < 6) { c = *text; if (c == '-' || c == '*' || c == '\0') break; if (!(('A' <= c && c <= 'Z') || ('0' <= c && c <= '9'))) { // Valid chars: [A-Z0-9] return 1; } ax25[i] = c << 1; ++text; ++i; } while (i < 6) { ax25[i] = ' ' << 1; // they are wanted as spaces.. ++i; } ax25[6] = ssidflags; if (*text == 0) return 0; if (*text == '-') { ++text; } else if ( *text != '*' && *text != 0) { return 1; } for (; (*text != '\0') && (*text != '*') && ('0' <= *text) && (*text <= '9'); ++text) { ssid = ssid * 10 + (*text - '0'); } if (*text == '*') { ++text; ssidflags |= 0x80; // Set H-bit.. ax25[6] |= 0x80; // Set H-bit.. } if (ssid > 15 || *text != '\0') { return 1; // Bad values } ssid &= 0x0F; // Limit it to 4 bits ax25[6] = (ssid << 1) | ssidflags; return 0; } int ax25_format_to_tnc(const uint8_t *frame, const int framelen, char *tnc2buf, const int tnc2buflen, int *frameaddrlen, int *tnc2addrlen, int *is_aprs, int *ui_pid) { int i, j; const uint8_t *s = frame; const uint8_t *e = frame + framelen; char *t = tnc2buf; int viacount = 0; if (debug>1) { printf("ax25_format_to_tnc() len=%d ",framelen); hexdumpfp(stdout, frame, framelen, 1); printf("\n"); } if (framelen > sizeof(tnc2buf) - 80) { /* Too much ! Too much! */ return 0; } /* Phase 1: scan address fields. */ /* Source and Destination addresses must be printed in altered order.. */ *t = 0; i = ax25_to_tnc2_fmtaddress(t, frame + 7, 0); /* source */ t += strlen(t); *t++ = '>'; *t = 0; // end-string, just in case.. j = ax25_to_tnc2_fmtaddress(t, frame + 0, 0); /* destination */ t += strlen(t); // if (!((i & 0xE0) == 0x60 && (j & 0xE0) == 0xE0)) { // if (debug) printf("Ax25FmtToTNC2: %s SSID-bytes: %02x,%02x\n", tnc2buf, i,j); // } if (i < 0 /* || ((i & 0xE0) != 0x60)*/) { // Top 3 bits should be: 011 /* Bad format */ if (debug) printf("Ax25FmtToTNC2: Bad source address; SSID-byte=0x%02x\n",i); return 0; } if (j < 0/* || ((j & 0xE0) != 0xE0)*/) { // Top 3 bits should be: 111 /* Bad format */ if (debug) printf("Ax25FmtToTNC2: Bad destination address; SSID-byte=0x%x\n",j); return 0; } s = frame + 14; if ((i & 1) == 0) { /* addresses continue after the source! */ for (; s < e;) { *t++ = ','; /* separator char */ *t = 0; // end-string, just in case.. i = ax25_to_tnc2_fmtaddress(t, s, 1); // Top 3 bits are: H11 ( H = "has been digipeated" ) if (i < 0 /* || ((i & 0x60) != 0x60) */) { /* Bad format */ if (debug) printf("Ax25FmtToTNC2: Bad via address; addr='%s' SSID-byte=0x%x\n",t,i); return 0; } t += strlen(t); s += 7; ++ viacount; if (i & 1) break; /* last address */ } } if (viacount > 8) { if (debug) printf("Ax25FmtToTNC2: Found %d via fields, limit is 8!\n", viacount); return 0; } *frameaddrlen = s - frame; *tnc2addrlen = t - tnc2buf; /* Address completed */ if ((s + 2) >= e) // too short payload return 0; /* never happens ?? */ *t++ = ':'; /* end of address */ *t = 0; // end-string, just in case.. if (s[0] != 0x03) { // Not AX.25 UI frame *ui_pid = -1; return t - tnc2buf; /* But say that the frame is OK, and let it be possibly copied to Linux internal AX.25 network. */ } if (s[0] == 0x03 && s[1] != 0xF0) { // AX.25 UI frame, but no with APRS's PID value *ui_pid = s[1]; return t - tnc2buf; } s += 2; // Skip over Control and PID bytes *ui_pid = 0xF0; // This was previously verified /* Copy payload - stop at first LF char */ for (; s < e; ++s) { if (*s == '\n') /* Stop at first LF */ break; *t++ = *s; } *t = 0; /* Chop off possible immediately trailing CR characters */ for ( ;t > tnc2buf; --t ) { int c = t[-1]; if (c != '\r') { break; } t[-1] = 0; } *is_aprs = 1; return t - tnc2buf; } /* Convert the binary packet to TNC2 monitor text format. Return 0 if conversion fails (format errors), 1 when format is OK. */ int ax25_to_tnc2(const struct aprx_interface *aif, const char *portname, const int tncid, const int cmdbyte, const uint8_t *frame, const int framelen) { int frameaddrlen = 0; char tnc2buf[2800]; int tnc2len = 0, tnc2addrlen = 0, is_aprs = 0, ui_pid = 0; tnc2len = ax25_format_to_tnc( frame, framelen, tnc2buf, sizeof(tnc2buf), & frameaddrlen, &tnc2addrlen, & is_aprs, &ui_pid ); if (tnc2len == 0) return 0; // Bad parse result // APRS type packets are first rx-igated (and rflog()ed) #ifndef DISABLE_IGATE if (is_aprs) { igate_to_aprsis(portname, tncid, tnc2buf, tnc2addrlen, tnc2len, 0, 1); } #endif // Send to interface system to receive it.. (digipeater!) // A noop if the interface is actually NULL. interface_receive_ax25(aif, portname, is_aprs, ui_pid, frame, frameaddrlen, framelen, tnc2buf, tnc2addrlen, tnc2len); return 1; } aprx-2.9.0/beacon.c000664 000000 000000 00000106130 13040775352 014056 0ustar00rootroot000000 000000 /* **************************************************************** * * * * APRX -- 2nd generation APRS iGate and digi with * * minimal requirement of esoteric facilities or * * libraries of any kind beyond UNIX system libc. * * * * (c) Matti Aarnio - OH2MQK, 2007-2014 * * * * **************************************************************** */ #include "aprx.h" struct beaconmsg { time_t nexttime; int interval; const struct aprx_interface *interface; const char *src; const char *dest; const char *via; const char *msg; const char *filename; const char *execfile; int8_t beaconmode; // -1: net only, 0: both, +1: radio only int8_t timefix; int timeout; }; struct beaconset { struct beaconmsg **beacon_msgs; struct timeval beacon_nexttime; float beacon_cycle_size; int beacon_msgs_count; int beacon_msgs_cursor; int exec_pid; int exec_fd; time_t exec_deadline; // seconds char *exec_buf; int exec_buf_length; int exec_buf_space; struct beaconmsg *exec_bm; }; static struct beaconset **bsets; static int bsets_count; static void beacon_it(struct beaconset *bset, struct beaconmsg *bm); static void beacon_reset(struct beaconset *bset) { tv_timeradd_seconds(&bset->beacon_nexttime, &tick, 30); // start 30 seconds from now bset->beacon_msgs_cursor = 0; } static void beacon_set(struct configfile *cf, const char *p1, char *str, const int beaconmode, struct beaconset *bset) { const char *srcaddr = NULL; const char *destaddr = NULL; const char *via = NULL; const char *name = NULL; int buflen = strlen(p1) + strlen(str ? str : "") + 10; char *buf = alloca(buflen); const char *to = NULL; char *code = NULL; const char *lat = NULL; const char *lon = NULL; char *comment = NULL; char *type = NULL; const struct aprx_interface *aif = NULL; int has_fault = 0; struct beaconmsg *bm = calloc(1, sizeof(*bm)); *buf = 0; if (debug) { printf("BEACON parameters: "); } while (*p1) { /* if (debug) printf("p1='%s' ",p1); */ if (strcmp(p1, "interface") == 0 || strcmp(p1, "to") == 0) { if (to != NULL) { has_fault = 1; printf("%s:%d ERROR: Double definition of %s parameter\n", cf->name, cf->linenum, p1); } to = str; str = config_SKIPTEXT(str, NULL); str = config_SKIPSPACE(str); if (beaconmode < 0) { printf("%s:%d ERROR: beaconmode APRSIS is incompatible with beaconing to designated interface ('%s %s')\n", cf->name, cf->linenum, p1, to); has_fault = 1; goto discard_bm; // sigh.. } if (strcasecmp(to,"$mycall") == 0) { to = mycall; } else { config_STRUPPER((void*)to); } aif = find_interface_by_callsign(to); if ((aif != NULL) && (!aif->tx_ok)) { aif = NULL; // Not an TX interface :-( if (debug)printf("\n"); printf("%s:%d ERROR: beacon interface '%s' that is not a TX capable interface.\n", cf->name, cf->linenum, to); has_fault = 1; goto discard_bm; // sigh.. } else if (aif == NULL) { if (debug)printf("\n"); printf("%s:%d ERROR: beacon interface '%s' that is not a known interface.\n", cf->name, cf->linenum, to); has_fault = 1; } if (debug) printf("interface '%s' ", to); } else if (strcmp(p1, "srccall") == 0 || strcmp(p1, "for") == 0) { if (srcaddr != NULL) { has_fault = 1; printf("%s:%d ERROR: Double definition of %s parameter\n", cf->name, cf->linenum, p1); } srcaddr = str; str = config_SKIPTEXT(str, NULL); str = config_SKIPSPACE(str); if (strcasecmp(srcaddr,"$mycall") == 0) { srcaddr = mycall; } else { config_STRUPPER((void*)srcaddr); } // What about ITEM and OBJECT ? // if (!validate_callsign_input((char *) srcaddr),1) { // if (debug)printf("\n"); // printf("Invalid rfbeacon FOR callsign"); // } if (debug) printf("srccall '%s' ", srcaddr); } else if (strcmp(p1, "dstcall") == 0 || strcmp(p1, "dest") == 0) { if (destaddr != NULL) { has_fault = 1; printf("%s:%d ERROR: Double definition of %s parameter\n", cf->name, cf->linenum, p1); } destaddr = str; str = config_SKIPTEXT(str, NULL); str = config_SKIPSPACE(str); config_STRUPPER((void*)destaddr); if (debug) printf("dstcall '%s' ", destaddr); } else if (strcmp(p1, "via") == 0) { if (via != NULL) { has_fault = 1; printf("%s:%d ERROR: Double definition of %s parameter\n", cf->name, cf->linenum, p1); } via = str; str = config_SKIPTEXT(str, NULL); str = config_SKIPSPACE(str); config_STRUPPER((void*)via); if (debug) printf("via '%s' ", via); } else if (strcmp(p1, "name") == 0) { if (name != NULL) { has_fault = 1; printf("%s:%d ERROR: Double definition of %s parameter\n", cf->name, cf->linenum, p1); } name = str; str = config_SKIPTEXT(str, NULL); str = config_SKIPSPACE(str); if (debug) printf("name '%s' ", name); } else if (strcmp(p1, "item") == 0) { if (name != NULL) { has_fault = 1; printf("%s:%d ERROR: Double definition of %s parameter\n", cf->name, cf->linenum, p1); } if (type != NULL) { has_fault = 1; printf("%s:%d ERROR: Double definition of type parameter\n", cf->name, cf->linenum); } type = ")"; name = str; str = config_SKIPTEXT(str, NULL); str = config_SKIPSPACE(str); if (debug) printf("item '%s' ", name); } else if (strcmp(p1, "object") == 0) { if (name != NULL) { has_fault = 1; printf("%s:%d ERROR: Double definition of %s parameter\n", cf->name, cf->linenum, p1); } if (type != NULL) { has_fault = 1; printf("%s:%d ERROR: Double definition of type parameter\n", cf->name, cf->linenum); } type = ";"; name = str; str = config_SKIPTEXT(str, NULL); str = config_SKIPSPACE(str); if (debug) printf("object '%s' ", name); } else if (strcmp(p1, "type") == 0) { /* text up to .. 40 chars */ if (type != NULL) { has_fault = 1; printf("%s:%d ERROR: Double definition of %s parameter\n", cf->name, cf->linenum, p1); } type = str; str = config_SKIPTEXT(str, NULL); str = config_SKIPSPACE(str); type = strdup(type); if (debug) printf("type '%s' ", type); if (type[1] != 0 || (type[0] != '!' && type[0] != '=' && type[0] != '/' && type[0] != '@' && type[0] != ';' && type[0] != ')')) { has_fault = 1; printf("%s:%d Sorry, packet constructor's supported APRS packet types are only: ! = / @ ; )\n", cf->name, cf->linenum); } } else if (strcmp(p1, "$myloc") == 0) { if (myloc_latstr != NULL) { lat = myloc_latstr; lon = myloc_lonstr; } else { has_fault = 1; printf("%s:%d ERROR: $myloc has not been defined.\n", cf->name, cf->linenum); } } else if (strcmp(p1, "lat") == 0) { /* ddmm.mmN */ if (lat != NULL) { has_fault = 1; printf("%s:%d ERROR: Double definition of %s parameter\n", cf->name, cf->linenum, p1); } lat = str; str = config_SKIPTEXT(str, NULL); str = config_SKIPSPACE(str); if (!has_fault && validate_degmin_input(lat, 90)) { has_fault = 1; printf("%s:%d ERROR: Latitude input has bad format: '%s'\n", cf->name, cf->linenum, lat); } if (debug) printf("lat '%s' ", lat); } else if (strcmp(p1, "lon") == 0) { /* dddmm.mmE */ if (lon != NULL) { has_fault = 1; printf("%s:%d ERROR: Double definition of %s parameter\n", cf->name, cf->linenum, p1); } lon = str; str = config_SKIPTEXT(str, NULL); str = config_SKIPSPACE(str); if (validate_degmin_input(lon, 180)) { has_fault = 1; printf("Longitude input has bad format: '%s'\n",lon); } if (debug) printf("lon '%s' ", lon); } else if (strcmp(p1, "symbol") == 0) { /* R& */ if (code != NULL) { has_fault = 1; printf("%s:%d ERROR: Double definition of %s parameter\n", cf->name, cf->linenum, p1); } code = str; str = config_SKIPTEXT(str, NULL); str = config_SKIPSPACE(str); if (strlen(code) != 2) { has_fault = 1; printf("Symbol code length is not exactly 2 chars\n"); } if (debug) printf("symbol '%s' ", code); } else if (strcmp(p1, "comment") == 0) { /* text up to .. 40 chars */ if (comment != NULL) { has_fault = 1; printf("%s:%d ERROR: Double definition of %s parameter\n", cf->name, cf->linenum, p1); } comment = str; str = config_SKIPTEXT(str, NULL); str = config_SKIPSPACE(str); if (debug) printf("comment '%s' ", comment); } else if (strcmp(p1, "raw") == 0) { p1 = str; str = config_SKIPTEXT(str, NULL); str = config_SKIPSPACE(str); if (bm->msg != NULL) { has_fault = 1; printf("%s:%d ERROR: Double definition of %s parameter\n", cf->name, cf->linenum, p1); } else bm->msg = strdup(p1); // FIXME: validate the data with APRS parser... if (debug) printf("raw '%s' ", bm->msg); } else if (strcmp(p1, "file") == 0) { p1 = str; str = config_SKIPTEXT(str, NULL); str = config_SKIPSPACE(str); if (bm->filename != NULL) { has_fault = 1; printf("%s:%d ERROR: Double definition of %s parameter\n", cf->name, cf->linenum, p1); } else bm->filename = strdup(p1); if (debug) printf("file '%s' ", bm->filename); } else if (strcmp(p1, "exec") == 0) { p1 = str; str = config_SKIPTEXT(str, NULL); str = config_SKIPSPACE(str); if (bm->execfile != NULL) { has_fault = 1; printf("%s:%d ERROR: Double definition of %s parameter\n", cf->name, cf->linenum, p1); } else bm->execfile = strdup(p1); // Set default timeout if not yet set. if (bm->timeout == 0) bm->timeout = 10; if (debug) printf("exec file '%s' ", bm->execfile); } else if (strcmp(p1, "timeout") == 0) { p1 = str; str = config_SKIPTEXT(str, NULL); str = config_SKIPSPACE(str); bm->timeout = atoi(p1); if (debug) printf("timeout %d ", bm->timeout); } else if (strcmp(p1, "timefix") == 0) { if (bm->timefix) { has_fault = 1; printf("%s:%d ERROR: Double definition of %s parameter\n", cf->name, cf->linenum, p1); } bm->timefix = 1; if (debug) printf("timefix "); } else { has_fault = 1; #if 0 if (debug) printf("Unknown keyword: '%s'", p1); p1 = str; str = config_SKIPTEXT(str, NULL); str = config_SKIPSPACE(str); #else /* Unknown keyword, a raw message ? */ bm->msg = strdup(p1); if (debug) printf("ASSUMING raw '%s' ", bm->msg); break; #endif } p1 = str; str = config_SKIPTEXT(str, NULL); str = config_SKIPSPACE(str); } if (debug) printf("\n"); if (has_fault) goto discard_bm; if (aif == NULL && beaconmode >= 0) { if (debug) printf("%s:%d Note: Lacking 'interface' keyword for this beacon definition. Beaconing to all Tx capable interfaces + APRSIS (mode depending)\n", cf->name, cf->linenum); } /* if (srcaddr == NULL) srcaddr = mycall; if (srcaddr == NULL) { if (debug) printf("%s:%d Note: Lacking the 'for' keyword for this beacon definition.\n", cf->name, cf->linenum); has_fault = 1; goto discard_bm; } */ if (destaddr == NULL) destaddr = tocall; bm->src = srcaddr != NULL ? strdup(srcaddr) : NULL; bm->dest = strdup(destaddr); bm->via = via != NULL ? strdup(via) : NULL; bm->interface = aif; bm->beaconmode = beaconmode; if (!bm->msg && !bm->filename && !bm->execfile) { /* Not raw packet, perhaps composite ? */ if (!type) type = "!"; if (code && strlen(code) == 2 && lat && strlen(lat) == 8 && lon && strlen(lon) == 9) { if ( strcmp(type,"!") == 0 || strcmp(type,"=") == 0 ) { sprintf(buf, "%s%s%c%s%c%s", type, lat, code[0], lon, code[1], comment ? comment : ""); } else if ( strcmp(type,"/") == 0 || strcmp(type,"@") == 0) { sprintf(buf, "%s111111z%s%c%s%c%s", type, lat, code[0], lon, code[1], comment ? comment : ""); } else if ( strcmp(type,";") == 0 && name) { // Object sprintf(buf, ";%-9.9s*111111z%s%c%s%c%s", name, lat, code[0], lon, code[1], comment ? comment : ""); } else if ( strcmp(type,")") == 0 && name) { // Item sprintf(buf, ")%-3.9s!%s%c%s%c%s", name, lat, code[0], lon, code[1], comment ? comment : ""); } bm->msg = strdup(buf); } else { if (!code || (code && strlen(code) != 2)) printf("%s:%d .. BEACON definition failure; symbol parameter missing or wrong size\n", cf->name, cf->linenum); if (!lat || (lat && strlen(lat) != 8)) printf("%s:%d .. BEACON definition failure; lat(itude) parameter missing or wrong size\n", cf->name, cf->linenum); if (!lon || (lon && strlen(lon) != 9)) printf("%s:%d .. BEACON definition failure; lon(gitude) parameter missing or wrong size\n", cf->name, cf->linenum); /* parse failure, abandon the alloc too */ has_fault = 1; goto discard_bm; } } if (debug) { switch (beaconmode) { case 1: printf("RFONLY"); break; case 0: printf("RF+NET"); break; default: printf("NETONLY"); break; } printf(" BEACON FOR "); if (srcaddr == NULL) printf("***>%s", destaddr); else printf("%s>%s",srcaddr,destaddr); if (via != NULL) printf(",%s", via); if (bm->filename) printf("' file %s\n", bm->filename); else printf("' '%s'\n", bm->msg); } /* realloc() works also when old ptr is NULL */ bset->beacon_msgs = realloc(bset->beacon_msgs, sizeof(bm) * (bset->beacon_msgs_count + 3)); bset->beacon_msgs[bset->beacon_msgs_count++] = bm; bset->beacon_msgs[bset->beacon_msgs_count] = NULL; if (bm->msg != NULL) { // Make this into AX.25 UI frame // with leading control byte.. int len = strlen(bm->msg); char *msg = realloc((void*)bm->msg, len+3); // make room memmove(msg+2, msg, len+1); // move string end \0 also msg[0] = 0x03; // Control byte msg[1] = 0xF0; // PID 0xF0 bm->msg = msg; } beacon_reset(bset); if (0) { discard_bm: if (bm->dest != NULL) free((void*)(bm->dest)); if (bm->msg != NULL) free((void*)(bm->msg)); free(bm); } return; } static void free_beaconmsg(struct beaconmsg *bmsg) { if (bmsg == NULL) return; if (bmsg->src) free((void*)bmsg->src); if (bmsg->dest) free((void*)bmsg->dest); if (bmsg->via) free((void*)bmsg->via); if (bmsg->msg) free((void*)bmsg->msg); if (bmsg->filename) free((void*)bmsg->filename); if (bmsg->execfile) free((void*)bmsg->execfile); free(bmsg); } static void free_beaconset(struct beaconset *bset) { int i; if (bset == NULL) return; for (i = 0; i < bset->beacon_msgs_count; ++i) { free_beaconmsg(bset->beacon_msgs[i]); } free(bset); } int beacon_config(struct configfile *cf) { char *name, *param1; char *str = cf->buf; int beaconmode = 0; int has_fault = 0; struct beaconset *bset = calloc(1, sizeof(*bset)); bset->beacon_cycle_size = 20.0*60.0; // 20 minutes is the default while (readconfigline(cf) != NULL) { if (configline_is_comment(cf)) continue; /* Comment line, or empty line */ // It can be severely indented... str = config_SKIPSPACE(cf->buf); name = str; str = config_SKIPTEXT(str, NULL); str = config_SKIPSPACE(str); config_STRLOWER(name); param1 = str; str = config_SKIPTEXT(str, NULL); str = config_SKIPSPACE(str); if (strcmp(name, "") == 0) break; if (strcmp(name, "cycle-size") == 0) { int v; if (config_parse_interval(param1, &v)) { // Error has_fault = 1; continue; } bset->beacon_cycle_size = (float)v; if (debug) printf("Beacon cycle size: %.2f\n", bset->beacon_cycle_size/60.0); continue; } if (strcmp(name, "beacon") == 0) { beacon_set(cf, param1, str, beaconmode, bset); } else if (strcmp(name, "beaconmode") == 0) { if (strcasecmp(param1, "both") == 0) { beaconmode = 0; } else if (strcasecmp(param1,"radio") == 0) { beaconmode = 1; } else if (strcasecmp(param1,"aprsis") == 0) { beaconmode = -1; } else { printf("%s:%d ERROR: Unknown beaconmode parameter keyword: '%s'\n", cf->name, cf->linenum, param1); has_fault = 1; } } else { printf("%s:%d ERROR: Unknown block config keyword: '%s'\n", cf->name, cf->linenum, name); has_fault = 1; continue; } } if (has_fault) { // discard it.. free_beaconset(bset); } else { // save it.. ++bsets_count; bsets = realloc( bsets,sizeof(*bsets)*bsets_count ); bsets[bsets_count-1] = bset; if (debug > 0) { printf(" set %d defined with %d entries\n", bsets_count, bset->beacon_msgs_count); } } return has_fault; } static void fix_beacon_time(char *txt, int txtlen) { int hour, min, sec; char hms[8]; struct timeval zulutime; gettimeofday(&zulutime, NULL); sec = zulutime.tv_sec % (3600*24); // UNIX time is UTC -> no need to play with fancy timezone conversions and summer times... hour = sec / 3600; min = (sec / 60) % 60; sec = sec % 60; sprintf(hms, "%02d%02d%02dh", hour, min, sec); txt += 2; txtlen -= 2; // Skip Control+PID if (*txt == ';' && txtlen >= 36) { // Object // ;434.775-B*111111z6044.06N/02612.79Er memcpy( txt+11, hms, 7 ); // Overwrite with new time } else if ((*txt == '/' || *txt == '@') && txtlen >= 27) { // Position with timestamp memcpy( txt+1, hms, 7 ); // Overwrite with new time } } static char *msg_read_file(const char *filename, char *buf, int buflen) { FILE *fp = fopen(filename,"r"); if (!fp) return NULL; if (fgets(buf, buflen, fp)) { char *p = strchr(buf, '\n'); if (p) *p = 0; } else { *buf = 0; } fclose(fp); if (*buf == 0) return NULL; return buf; } static void beacon_resettimer(void *arg) { const struct beaconset *bset = (struct beaconset *)arg; float beacon_increment; int i; time_t t = tick.tv_sec; srand((long)t); beacon_increment = (bset->beacon_cycle_size / bset->beacon_msgs_count); if (debug) printf("beacons cycle: %.2f minutes, increment: %.2f minutes\n", bset->beacon_cycle_size/60.0, beacon_increment/60.0); for (i = 0; i < bset->beacon_msgs_count; ++i) { int r = rand() % 1024; int interval = (int)(beacon_increment - 0.2*beacon_increment * (r*0.001)); if (interval < 3) interval = 3; // Minimum interval: 3 seconds t += interval; if (debug) printf("beacons offset: %.2f minutes\n", (t-tick.tv_sec)/60.0); bset->beacon_msgs[i]->nexttime = t; } } static void msg_exec_read(struct beaconset *bset) { int rc; int space = bset->exec_buf_space - bset->exec_buf_length; if (debug) printf("msg_exec_read\n"); if (space < 1) { space += 256; bset->exec_buf_space += 256; bset->exec_buf = realloc(bset->exec_buf, bset->exec_buf_space); } while ((rc = read(bset->exec_fd, bset->exec_buf + bset->exec_buf_length, space)) > 0) { char *p; bset->exec_buf_length += rc; space -= rc; p = memrchr(bset->exec_buf, '\n', bset->exec_buf_length); if (p) { if (debug) printf("found newline in exec read data\n"); *p = 0; bset->exec_buf_length = p - bset->exec_buf; struct beaconmsg *bm = bset->exec_bm; if (bset->exec_buf_length > 2) { // Run that beacon! // Point it to read buffer bm->msg = bset->exec_buf; if (debug) printf(".. calling beacon_it() on buffer: %s\n", bm->msg+2); beacon_it(bset, bm); } else { if (debug) printf(".. nothing read from exec pipe\n"); } // erase the read buffer pointer bm->msg = NULL; // restore the nexttime bset->beacon_nexttime.tv_sec = bm->nexttime; close(bset->exec_fd); bset->exec_fd = -1; //bset->exec_pid = 0; return; } if (debug) printf("no newline in exec read data\n"); if (space < 1) { aprxlog("BEACON EXEC output overflowed read buffer."); rc = 0; // simulate as if.. and kill it. break; } } if (rc == 0) { // EOF read char *p; if (debug) printf("Seen EOF on exec-read\n"); p = memrchr(bset->exec_buf, '\n', bset->exec_buf_length); if (p) { *p = 0; bset->exec_buf_length = p - bset->exec_buf; struct beaconmsg *bm = bset->exec_bm; if (bset->exec_buf_length > 2) { // Run that beacon! // Point it to read buffer bm->msg = bset->exec_buf; if (debug) printf(".. calling beacon_it() on buffer: %s\n", bm->msg+2); beacon_it(bset, bm); } else { if (debug) printf(".. nothing read from exec pipe\n"); } // erase the read buffer pointer bm->msg = NULL; // restore the nexttime bset->beacon_nexttime.tv_sec = bm->nexttime; } else { aprxlog("BEACON EXEC abnormal close."); } close(bset->exec_fd); bset->exec_fd = -1; //bset->exec_pid = 0; } } static int msg_exec_file(const char *filename, int timeout, struct beaconset *bset) { int p[2]; int pid; int dev_null; if (pipe(p)) { return 0; } pid = fork(); if (pid < 0) { close(p[0]); close(p[1]); return 0; } if (pid == 0) { //child if (debug) fprintf(stderr,"execing child pid %d, file: %s\n", getpid(), filename); close(p[0]); if (p[1] != 1) { dup2(p[1], 1); close(p[1]); } dev_null = open("/dev/null", O_WRONLY); if (debug && dev_null < 0) fprintf(stderr,"child process: Failed to open file: /den/null\n"); if (dev_null >= 0) { if (dev_null != 2) { dup2(dev_null, 2); close(dev_null); } dup2(2, 0); } //FIXME: change second parameter execl(filename, "aprx", NULL); if (debug) fprintf(stderr,"child process: Failed to execute: %s\n", filename); exit(255); } // parent bset->exec_deadline = tick.tv_sec + timeout; bset->exec_pid = pid; bset->exec_fd = p[0]; bset->beacon_nexttime.tv_sec = bset->exec_deadline; close(p[1]); return 1; } // int val; // waitpid(pid, &val, 0); // if (WIFEXITED(val) && WEXITSTATUS(val) == 0) { // return buf; // } static void beacon_now(struct beaconset *bset) { struct beaconmsg *bm; if (bset->exec_pid > 0) { if (debug) printf("beacon_now - still an exec under way.\n"); // Wait 3 seconds before retrying. bset->beacon_nexttime.tv_sec += 3; return; } if (bset->beacon_msgs_cursor >= bset->beacon_msgs_count) // Last done.. bset->beacon_msgs_cursor = 0; if (bset->beacon_msgs_cursor == 0) { beacon_resettimer(bset); } /* --- now the business of sending ... */ //if (debug) printf("beacon_now idx=%d\n", bset->beacon_msgs_cursor ); bm = bset->beacon_msgs[bset->beacon_msgs_cursor++]; bset->beacon_nexttime.tv_sec = bm->nexttime; bset->beacon_nexttime.tv_usec = 0; beacon_it(bset, bm); } static void beacon_it(struct beaconset *bset, struct beaconmsg *bm) { int destlen; int txtlen, msglen; int i; char const *txt; char *msg; if (debug) printf("BEACON: idx=%d, nexttime= +%d sec\n", bset->beacon_msgs_cursor-1, (int)(bset->beacon_nexttime.tv_sec - tick.tv_sec)); destlen = strlen(bm->dest) + ((bm->via != NULL) ? strlen(bm->via): 0) +2; if (bm->filename != NULL) { msg = alloca(256); // This is a load-and-discard allocation txt = msg+2; msg[0] = 0x03; msg[1] = 0xF0; if (!msg_read_file(bm->filename, msg+2, 256-2)) { // Failed loading if (debug) printf("BEACON ERROR: Failed to load anything from file %s\n",bm->filename); syslog(LOG_ERR, "Failed to load anything from beacon file %s", bm->filename); return; } } else if (bm->msg != NULL) { msg = (char*)bm->msg; txt = bm->msg+2; // Skip Control+PID bytes } else if (bm->execfile != NULL) { bset->exec_buf = realloc(bset->exec_buf, 256); bset->exec_buf[0] = 0x03; bset->exec_buf[1] = 0xF0; bset->exec_buf_length = 2; bset->exec_buf_space = 256; bset->exec_bm = bm; if (!msg_exec_file(bm->execfile, bm->timeout, bset)) { if (debug) printf("BEACON ERROR: Failed to exec file %s\n",bm->execfile); syslog(LOG_ERR, "Failed to exec file %s", bm->execfile); return; } return; // spawning done, successfull or not.. } else { if (debug>1) printf("Nothing to beacon now.\n"); return; } txtlen = strlen(txt); msglen = txtlen+2; // this includes the control+pid bytes /* _NO_ ending CRLF, the APRSIS subsystem adds it. */ /* Send those (rf)beacons.. (a noop if interface == NULL) */ if (bm->interface != NULL) { const char *callsign = bm->interface->callsign; const char *src = (bm->src != NULL) ? bm->src : callsign; int len = destlen + 12 + strlen(src); // destlen contains bm->via plus room for ",TCPIP*" char *destbuf = alloca(len); // Now it is time to beacon something, lets make sure // the source callsign is not APRSIS ! if (strcmp(src,"APRSIS") == 0) { if (debug) printf("CONFIGURATION ERROR: Beacon with source callsign APRSIS. Skipped!\n"); return; } if (bm->timefix) fix_beacon_time(msg, msglen); #ifndef DISABLE_IGATE if (bm->beaconmode <= 0) { if (bm->via != NULL) sprintf(destbuf,"%s>%s,%s,TCPIP*", src, bm->dest, bm->via); else sprintf(destbuf,"%s>%s,TCPIP*", src, bm->dest); if (debug) { printf("%ld\tNow beaconing to APRSIS %s '%s' -> '%s',", tick.tv_sec, callsign, destbuf, txt); printf(" next beacon in %.2f minutes\n", ((bset->beacon_nexttime.tv_sec - tick.tv_sec)/60.0)); } // Send them all also as netbeacons.. aprsis_queue(destbuf, strlen(destbuf), qTYPE_LOCALGEN, aprsis_login, txt, txtlen); } #endif if (bm->beaconmode >= 0 && bm->interface->tx_ok) { // And to interfaces char *dp = destbuf; // destbuf collects ONLY the VIA data if (strcmp(src, callsign) != 0) { if (bm->via != NULL) dp += sprintf( dp, "%s*,%s", callsign, bm->via ); else dp += sprintf( dp, "%s*", callsign ); } else { if (bm->via != NULL) dp += sprintf( dp, "%s", bm->via ); else *dp = 0; } if (debug) { printf("%ld\tNow beaconing to interface[1] %s(%s) '%s' -> '%s',", tick.tv_sec, callsign, src, destbuf, txt); printf(" next beacon in %.2f minutes\n", ((bset->beacon_nexttime.tv_sec - tick.tv_sec)/60.0)); } interface_transmit_beacon(bm->interface, src, bm->dest, destbuf, // via data msg, msglen); } } else { for ( i = 0; i < all_interfaces_count; ++i ) { const struct aprx_interface *aif = all_interfaces[i]; const char *callsign = aif->callsign; const char *src = (bm->src != NULL) ? bm->src : callsign; int len = destlen + 12 + (src != NULL ? strlen(src) : 0); // destlen contains bm->via, plus room for ",TCPIP*" char *destbuf = alloca(len); if (debug>1) printf("Beacon: aif=%p callsign='%s' src='%s' bm->dest='%s' bm->via='%s'\n", aif, callsign, src, bm->dest, bm->via); if (!interface_is_beaconable(aif)) { if (debug>1) printf("Not a beaconable interface, skipping\n"); continue; // it is not a beaconable interface } if (callsign == NULL) { // Probably KISS master interface, and subIF 0 has no definition. if (debug>1) printf("No callsign on interface interface, skipping\n"); continue; } if (aif->iftype == IFTYPE_APRSIS) { // If we have no radio interfaces, we may still // want to do beacons to APRSIS. Ignore the // builtin APRSIS interface if there are more // interfaces available! if (all_interfaces_count > 1) { if (debug>2) printf("Beaconing to APRSIS interface ignored in presence of other interfaces. Skipping.\n"); continue; // Ignore the builtin APRSIS interface } } // Now it is time to beacon something, lets make sure // the source callsign is not APRSIS ! if (strcmp(src,"APRSIS") == 0) { if (debug) printf("CONFIGURATION ERROR: Beaconing with source callsign APRSIS! Skipping.\n"); continue; } if (bm->timefix) fix_beacon_time((char*)msg, msglen); #ifndef DISABLE_IGATE if (bm->beaconmode <= 0) { // Send them all also as netbeacons.. if (bm->via != NULL) sprintf(destbuf,"%s>%s,%s,TCPIP*", src, bm->dest, bm->via); else sprintf(destbuf,"%s>%s,TCPIP*", src, bm->dest); if (debug) { printf("%ld\tNow beaconing to APRSIS %s(%s) '%s' -> '%s',", tick.tv_sec, callsign, src, destbuf, txt); printf(" next beacon in %.2f minutes\n", ((bset->beacon_nexttime.tv_sec - tick.tv_sec)/60.0)); } aprsis_queue(destbuf, strlen(destbuf), qTYPE_LOCALGEN, aprsis_login, txt, txtlen); } #endif if (bm->beaconmode >= 0 && aif->tx_ok) { // And to transmit-capable interfaces char *dp = destbuf; // destbuf collects ONLY the VIA data // The 'destbuf' has a plenty of room if (strcmp(src, callsign) != 0) { if (bm->via != NULL) dp += sprintf( dp, "%s*,%s", callsign, bm->via ); else dp += sprintf( dp, "%s*", callsign ); } else { if (bm->via != NULL) dp += sprintf( dp, "%s", bm->via ); else *dp = 0; } if (debug) { printf("%ld\tNow beaconing to interface[2] %s(%s) '%s' -> '%s',", tick.tv_sec, callsign, src, destbuf, txt); printf(" next beacon in %.2f minutes\n", ((bset->beacon_nexttime.tv_sec - tick.tv_sec)/60.0)); } interface_transmit_beacon(aif, src, bm->dest, destbuf, // via data msg, msglen); } } } } int beacon_prepoll(struct aprxpolls *app) { int i; #ifndef DISABLE_IGATE if (!aprsis_login) return 0; /* No mycall ! hoh... */ #endif for (i = 0; i < bsets_count; ++i) { struct beaconset *bset = bsets[i]; if (bset->beacon_msgs == NULL) continue; // nothing here if (time_reset) { // master time pickup noticed time back-tracking beacon_resettimer(bset); } if (tv_timercmp(&bset->beacon_nexttime, &app->next_timeout) < 0) app->next_timeout = bset->beacon_nexttime; if (bset->exec_pid != 0 && bset->exec_fd >= 0) { struct pollfd *pfd; // FD is open, lets mark it for poll read.. pfd = aprxpolls_new(app); pfd->fd = bset->exec_fd; pfd->events = POLLIN | POLLPRI; pfd->revents = 0; } } return 0; /* No poll descriptors, only time.. */ } int beacon_postpoll(struct aprxpolls *app) { int idx, i; //struct serialport *S; struct pollfd *P; #ifndef DISABLE_IGATE if (!aprsis_login) return 0; /* No mycall ! hoh... */ #endif for (i = 0; i < bsets_count; ++i) { struct beaconset *bset = bsets[i]; if (bset->exec_pid > 0 && bset->exec_deadline < tick.tv_sec) { // Waited too long, discard it. //printf("killing subprogram pid=%d mypid=%d\n", bset->exec_pid, getpid()); if (debug) printf("Killing overdue beacon exec subprogram pid %d\n", bset->exec_pid); kill(bset->exec_pid, SIGKILL); bset->exec_pid = - bset->exec_pid; } for (idx = 0, P = app->polls; idx < app->pollcount; ++idx, ++P) { if (bset->exec_fd == P->fd) { if (debug>1) printf("revents of exec_fd = 0x%x\n", P->revents); if (P->revents & (POLLIN | POLLPRI | POLLHUP)) { msg_exec_read(bset); } } } if (bset->beacon_msgs == NULL) continue; // nothing.. if (tv_timercmp(&bset->beacon_nexttime, &tick) > 0) continue; // not yet beacon_now(bset); } if (debug>1) printf("beacon_postpoll()\n"); return 0; } void beacon_childexit(int pid) { int i; for (i = 0; i < bsets_count; ++i) { struct beaconset *bset = bsets[i]; if (pid == bset->exec_pid) { bset->exec_pid = -pid; if (debug) { // Avoid stdio FILE* interlocks within signal handler char buf[64]; sprintf(buf, "matched child exit, pid=%d\n", pid); write(1, buf, strlen(buf)); } break; } } } aprx-2.9.0/cellmalloc.c000664 000000 000000 00000017462 13040775352 014747 0ustar00rootroot000000 000000 /******************************************************************** * APRX -- 2nd generation APRS iGate and digi with * * minimal requirement of esoteric facilities or * * libraries of any kind beyond UNIX system libc. * * * * (c) Matti Aarnio - OH2MQK, 2007-2014 * * * ********************************************************************/ #include "config.h" #include #ifdef HAVE_STDLIB_H # include #endif #ifdef HAVE_UNISTD_H # include #endif #include #include #include // #if defined(HAVE_PTHREAD_CREATE) && defined(ENABLE_PTHREAD) // #include // #endif #include "cellmalloc.h" #define NO_MMAP_ON_CELLMALLOC #define MEMDEBUG /* * cellmalloc() -- manages arrays of cells of data * */ struct cellhead; struct cellarena_t { int cellsize; int alignment; int increment; /* alignment overhead applied.. */ int lifo_policy; int minfree; const char *arenaname; // pthread_mutex_t mutex; // we have a mutex-less usage environment! struct cellhead *free_head; struct cellhead *free_tail; int freecount; int createsize; #ifdef MEMDEBUG int cellblocks_count; #define CELLBLOCKS_MAX 40 /* track client cell allocator limit! */ char *cellblocks[CELLBLOCKS_MAX]; /* ref as 'char pointer' for pointer arithmetics... */ #endif }; #define CELLHEAD_DEBUG 0 struct cellhead { #if CELLHEAD_DEBUG == 1 struct cellarena_t *ca; #endif struct cellhead *next; }; /* * new_cellblock() -- must be called MUTEX PROTECTED * */ int new_cellblock(cellarena_t *ca) { int i; char *cb; #ifdef MEMDEBUG /* External backing-store files, unique ones for each cellblock, which at Linux names memory blocks in /proc/nnn/smaps "file" with this filename.. */ int fd; char name[2048]; sprintf(name, "/tmp/.-%d-%s-%d.mmap", getpid(), ca->arenaname, ca->cellblocks_count ); unlink(name); fd = open(name, O_RDWR|O_CREAT, 644); unlink(name); if (fd >= 0) { memset(name, 0, sizeof(name)); i = 0; while (i < ca->createsize) { int rc = write(fd, name, sizeof(name)); if (rc < 0) break; i += rc; } } cb = mmap( NULL, ca->createsize, PROT_READ|PROT_WRITE, MAP_SHARED, fd, 0); if (fd >= 0) close(fd); #else #ifndef MAP_ANON # define MAP_ANON 0 #endif #ifdef NO_MMAP_ON_CELLMALLOC cb = malloc( ca->createsize ); #else cb = mmap( NULL, ca->createsize, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANON, -1, 0); #endif #endif if (cb == NULL || cb == (char*)-1) return -1; #ifdef MEMDEBUG if (ca->cellblocks_count >= CELLBLOCKS_MAX) return -1; ca->cellblocks[ca->cellblocks_count++] = cb; #endif for (i = 0; i <= ca->createsize-ca->increment; i += ca->increment) { struct cellhead *ch = (struct cellhead *)(cb + i); /* pointer arithmentic! */ if (!ca->free_head) { ca->free_head = ch; } else { ca->free_tail->next = ch; } ca->free_tail = ch; ch->next = NULL; #if CELLHEAD_DEBUG == 1 ch->ca = ca; // cellhead pointer space #endif ca->freecount += 1; } return 0; } /* * cellinit() -- the main program calls this once for each used cell type/size * */ cellarena_t *cellinit( const char *arenaname, const int cellsize, const int alignment, const int policy, const int createkb, const int minfree ) { cellarena_t *ca = calloc(1, sizeof(*ca)); // int n; ca->arenaname = arenaname; #if CELLHEAD_DEBUG == 1 if (alignment < __alignof__(void*)) alignment = __alignof__(void*); // cellhead pointer space #endif ca->cellsize = cellsize; ca->alignment = alignment; ca->minfree = minfree; #if CELLHEAD_DEBUG == 1 ca->increment = cellsize + sizeof(void*); // cellhead pointer space #else ca->increment = cellsize; #endif if ((cellsize % alignment) != 0) { ca->increment += alignment - cellsize % alignment; } ca->lifo_policy = policy & CELLMALLOC_POLICY_LIFO; ca->createsize = createkb * 1024; #if !defined(MEMDEBUG) && defined(NO_MMAP_ON_CELLMALLOC) ca->createsize -= 16; #endif // n = ca->createsize / ca->increment; // hlog( LOG_DEBUG, "cellinit: %-12s block size %4d kB, cells/block: %d", arenaname, createkb, n ); // pthread_mutex_init(&ca->mutex, NULL); new_cellblock(ca); /* First block of cells, not yet need to be mutex protected */ while (ca->freecount < ca->minfree) new_cellblock(ca); /* more until minfree is full */ #if CELLHEAD_DEBUG == 1 // hlog(LOG_DEBUG, "cellinit() cellhead=%p", ca); #endif return ca; } inline void *cellhead_to_clientptr(struct cellhead *ch) { char *p = (char*)ch; #if CELLHEAD_DEBUG == 1 p += sizeof(void*); #endif return p; } inline struct cellhead *clientptr_to_cellhead(void *v) { #if CELLHEAD_DEBUG == 1 struct cellhead *ch = (struct cellhead *)(((char*)v) - sizeof(void*)); #else struct cellhead *ch = (struct cellhead*)v; #endif return ch; } void *cellmalloc(cellarena_t *ca) { void *cp; struct cellhead *ch; while (!ca->free_head || (ca->freecount < ca->minfree)) if (new_cellblock(ca)) { // pthread_mutex_unlock(&ca->mutex); return NULL; } /* Pick new one off the free-head ! */ ch = ca->free_head; ca->free_head = ch->next; ch->next = NULL; cp = ch; if (ca->free_head == NULL) ca->free_tail = NULL; ca->freecount -= 1; // hlog(LOG_DEBUG, "cellmalloc(%p at %p) freecount %d", cellhead_to_clientptr(cp), ca, ca->freecount); return cellhead_to_clientptr(cp); } /* * cellmallocmany() -- give many cells in single lock region * */ int cellmallocmany(cellarena_t *ca, void **array, int numcells) { int count; struct cellhead *ch; for (count = 0; count < numcells; ++count) { while (!ca->free_head || ca->freecount < ca->minfree) { /* Out of free cells ? alloc new set */ if (new_cellblock(ca)) { /* Failed ! */ break; } } /* Pick new one off the free-head ! */ ch = ca->free_head; // hlog( LOG_DEBUG, "cellmallocmany(%d of %d); freecount %d; %p at %p", // count, numcells, ca->freecount, cellhead_to_clientptr(ch), ca ); if (ch != NULL) { // should always be... ca->free_head = ch->next; ch->next = NULL; } if (ca->free_head == NULL) ca->free_tail = NULL; array[count] = cellhead_to_clientptr(ch); ca->freecount -= 1; } return count; } void cellfree(cellarena_t *ca, void *p) { struct cellhead *ch = clientptr_to_cellhead(p); ch->next = NULL; #if CELLHEAD_DEBUG == 1 if (ch->ca != ca) { // hlog(LOG_ERR, "cellfree(%p to %p) wrong cellhead->ca pointer %p", p, ca, ch->ca); } #endif // hlog(LOG_DEBUG, "cellfree() %p to %p", p, ca); if (ca->lifo_policy) { /* Put the cell on free-head */ ch->next = ca->free_head; ca->free_head = ch; } else { /* Put the cell on free-tail */ if (ca->free_tail) ca->free_tail->next = ch; ca->free_tail = ch; if (!ca->free_head) ca->free_head = ch; ch->next = NULL; } ca->freecount += 1; } /* * cellfreemany() -- release many cells in single lock region * */ void cellfreemany(cellarena_t *ca, void **array, int numcells) { int count; for (count = 0; count < numcells; ++count) { struct cellhead *ch = clientptr_to_cellhead(array[count]); #if CELLHEAD_DEBUG == 1 if (ch->ca != ca) { // hlog(LOG_ERR, "cellfreemany(%p to %p) wrong cellhead->ca pointer %p", array[count], ca, ch->ca); } #endif // hlog(LOG_DEBUG, "cellfreemany() %p to %p", ch, ca); if (ca->lifo_policy) { /* Put the cell on free-head */ ch->next = ca->free_head; ca->free_head = ch; } else { /* Put the cell on free-tail */ if (ca->free_tail) ca->free_tail->next = ch; ca->free_tail = ch; if (!ca->free_head) ca->free_head = ch; ch->next = NULL; } ca->freecount += 1; } } aprx-2.9.0/cellmalloc.h000664 000000 000000 00000002355 13040775352 014747 0ustar00rootroot000000 000000 /******************************************************************** * APRX -- 2nd generation APRS iGate and digi with * * minimal requirement of esoteric facilities or * * libraries of any kind beyond UNIX system libc. * * * * (c) Matti Aarnio - OH2MQK, 2007-2014 * * * ********************************************************************/ #ifndef _CELLMALLOC_H_ #define _CELLMALLOC_H_ /* * cellmalloc() -- manages arrays of cells of data * */ typedef struct cellarena_t cellarena_t; extern cellarena_t *cellinit(const char *arenaname, const int cellsize, const int alignment, const int policy, const int createkb, const int minfree); #define CELLMALLOC_POLICY_FIFO 0 #define CELLMALLOC_POLICY_LIFO 1 #define CELLMALLOC_POLICY_NOMUTEX 2 extern void *cellmalloc(cellarena_t *cellarena); extern int cellmallocmany(cellarena_t *cellarena, void **array, const int numcells); extern void cellfree(cellarena_t *cellarena, void *p); extern void cellfreemany(cellarena_t *cellarena, void **array, const int numcells); #endif aprx-2.9.0/config.c000664 000000 000000 00000050117 13040775352 014077 0ustar00rootroot000000 000000 /* **************************************************************** * * * * APRX -- 2nd generation APRS iGate and digi with * * minimal requirement of esoteric facilities or * * libraries of any kind beyond UNIX system libc. * * * * (c) Matti Aarnio - OH2MQK, 2007-2014 * * * * **************************************************************** */ #include "aprx.h" #ifndef DISABLE_IGATE const char *aprsis_login; #endif char *config_SKIPSPACE(char *Y) { assert(Y != NULL); while (*Y == ' ' || *Y == '\t') ++Y; return Y; } #if 0 char *config_SKIPDIGIT(char *Y) { assert(Y != NULL); while ('0' <= *Y && *Y <= '9') ++Y; return Y; } #endif // return 0 for failures, 1 for OK. int validate_callsign_input(char *callsign, int strict) { int i = strlen(callsign); char *p = callsign; char c = 0; int seen_minus = 0; int ssid = 0; for ( ; *p ; ++p ) { c = *p; if ('a' <= c && c <= 'z') { // Presuming ASCII c -= ('a'-'A'); *p = c; // Side-effect: translates the callsign to uppercase } if (!seen_minus && c == '-') { if (p == callsign || p[1] == 0) return 0; // Hyphen is at beginning or at end! if ((p - callsign) > 6) return 0; // Hyphen too far! Max 6 characters preceding it. seen_minus = 1; continue; } else if (seen_minus && c == '-') { return 0; // Seen a hyphen again! } // The "SSID" value can be alphanumeric here! if (!seen_minus) { // Callsign prefix if (('A' <= c && c <= 'Z') || ('0' <= c && c <= '9')) { // Valid character! } else { return 0; // Invalid characters in callsign part } } else { // SSID tail if (strict) { if ('0' <= c && c <= '9') { // Valid character! ssid = ssid * 10 + c - '0'; if (ssid > 15) { // SSID value range: 0 .. 15 return 0; } } else { return 0; // Invalid characters in SSID part } } else { // non-strict if (('A' <= c && c <= 'Z') || ('0' <= c && c <= '9')) { // Valid character! } else { return 0; // Invalid characters in SSID part } } } } if (i > 3 && (callsign[i - 1] == '0' && callsign[i - 2] == '-')) { callsign[i - 2] = 0; /* If tailed with "-0" SSID, chop it off.. */ } return 1; } /* SKIPTEXT: * * Detect "/' -> scan until matching double quote * Process \-escapes on string: \xFD, \n, \", \' * Detect non-eol, non-space(tab): scan until eol, or white-space * No \-escapes * * Will thus stop when found non-quoted space/tab, or * end of line/string. */ char *config_SKIPTEXT(char *Y, int *lenp) { char *O; char endc; int len; assert(Y != NULL); O = Y; endc = *Y; len = 0; if (*Y == '"' || *Y == '\'') { ++Y; while (*Y && *Y != endc) { if (*Y == '\\') { /* backslash escape.. */ ++Y; if (*Y == 'n') { *O++ = '\n'; ++len; } else if (*Y == 'r') { *O++ = '\r'; ++len; } else if (*Y == '"') { *O++ = '"'; ++len; } else if (*Y == '\'') { *O++ = '\''; } else if (*Y == '\\') { *O++ = '\\'; } else if (*Y == 'x') { /* Hex encoded char */ int i; char hx[3]; if (*Y) ++Y; hx[0] = *Y; if (*Y) ++Y; hx[1] = *Y; hx[2] = 0; i = (int) strtol(hx, NULL, 16); *O++ = i; ++len; } else { *O++ = '\\'; *O++ = *Y; } } else { *O++ = *Y; ++len; } if (*Y != 0) ++Y; } if (*Y == endc) ++Y; *O = 0; /* String end */ /* STOP at the tail-end " */ } else { while (*Y && *Y != ' ' && *Y != '\t') { ++Y; ++len; } /* Stop at white-space or end */ if (*Y) *Y++ = 0; } if (lenp != NULL) *lenp = len; return Y; } void config_STRLOWER(char *s) { int c; assert(s != NULL); for (; *s; ++s) { c = *s; if ('A' <= c && c <= 'Z') { *s = c + ('a' - 'A'); } } } void config_STRUPPER(char *s) { int c; assert(s != NULL); for (; *s; ++s) { c = *s; if ('a' <= c && c <= 'z') { *s = c + ('A' - 'a'); } } } static int logging_config(struct configfile *cf) { char *name, *param1; char *str = cf->buf; int has_fault = 0; while (readconfigline(cf) != NULL) { if (configline_is_comment(cf)) continue; /* Comment line, or empty line */ str = cf->buf; str = config_SKIPSPACE(str); // arbitrary indention name = str; str = config_SKIPTEXT(str, NULL); str = config_SKIPSPACE(str); config_STRLOWER(name); param1 = str; str = config_SKIPTEXT(str, NULL); str = config_SKIPSPACE(str); if (strcmp(name, "") == 0) break; if (strcmp(name, "aprxlog") == 0) { if (debug) printf("%s:%d: INFO: APRXLOG = '%s' '%s'\n", cf->name, cf->linenum, param1, str); aprxlogfile = strdup(param1); #ifndef DISABLE_IGATE } else if (strcmp(name, "dprslog") == 0) { if (debug) printf("%s:%d: INFO: DPRSLOG = '%s' '%s'\n", cf->name, cf->linenum, param1, str); dprslogfile = strdup(param1); #endif } else if (strcmp(name, "rflog") == 0) { if (debug) printf("%s:%d: INFO: RFLOG = '%s' '%s'\n", cf->name, cf->linenum, param1, str); rflogfile = strdup(param1); } else if (strcmp(name, "pidfile") == 0) { if (debug) printf("%s:%d: INFO: PIDFILE = '%s' '%s'\n", cf->name, cf->linenum, param1, str); pidfile = strdup(param1); } else if (strcmp(name, "erlangfile") == 0) { if (debug) printf("%s:%d: INFO: ERLANGFILE = '%s' '%s'\n", cf->name, cf->linenum, param1, str); erlang_backingstore = strdup(param1); } else if (strcmp(name, "erlang-loglevel") == 0) { if (debug) printf("%s:%d: INFO: ERLANG-LOGLEVEL = '%s' '%s'\n", cf->name, cf->linenum, param1, str); erlang_init(param1); } else if (strcmp(name, "erlanglog") == 0) { if (debug) printf("%s:%d: INFO: ERLANGLOG = '%s'\n", cf->name, cf->linenum, param1); erlanglogfile = strdup(param1); } else if (strcmp(name, "erlang-log1min") == 0) { if (debug) printf("%s:%d: INFO: ERLANG-LOG1MIN\n", cf->name, cf->linenum); erlanglog1min = 1; } else { printf("%s:%d: ERROR: Unknown keyword: '%s' '%s'\n", cf->name, cf->linenum, name, param1); has_fault = 1; } } return has_fault; } static int cfgparam(struct configfile *cf) { char *name, *param1; char *str = cf->buf; str = config_SKIPSPACE(str); // arbitrary indention name = str; str = config_SKIPTEXT(str, NULL); str = config_SKIPSPACE(str); config_STRLOWER(name); param1 = str; str = config_SKIPTEXT(str, NULL); str = config_SKIPSPACE(str); #ifndef DISABLE_IGATE if (strcmp(name, "") == 0) { return aprsis_config(cf); } #endif if (strcmp(name, "") == 0) { return interface_config(cf); } if (strcmp(name, "") == 0) { return telemetry_config(cf); } if (strcmp(name, "") == 0) { return digipeater_config(cf); } if (strcmp(name, "") == 0) { return beacon_config(cf); } if (strcmp(name, "") == 0) { return logging_config(cf); } if (strcmp(name, "mycall") == 0) { config_STRUPPER(param1); // Store these always, it helps with latter error diagnostics mycall = strdup(param1); #ifndef DISABLE_IGATE aprsis_login = mycall; #endif if (validate_callsign_input(param1,1)) { if (debug) printf("%s:%d: MYCALL = '%s' '%s'\n", cf->name, cf->linenum, mycall, str); } else { if (validate_callsign_input(param1,0)) { printf("%s:%d: MYCALL = '%s' value is OK for APRSIS login, and Rx-IGate, but not valid AX.25 node callsign.\n", cf->name, cf->linenum, param1); } else { // but sometimes the parser yields an error! printf("%s:%d: MYCALL = '%s' value is not valid AX.25 node callsign, nor valid for APRSIS login.\n", cf->name, cf->linenum, param1); return 1; } } } else if (strcmp(name, "myloc") == 0) { // lat xx lon yy char *latp; char *lonp; float lat, lng; int i, la, lo; char lac, loc; const char *const errmsg = "%s:%d: myloc parameters wrong, expected format: 'myloc' 'lat' 'ddmm.mmN' 'lon' 'dddmm.mmE'\n"; if (strcmp(param1, "lat") != 0) { printf(errmsg, cf->name, cf->linenum); printf(" .. 'lat' missing, got: '%s'\n", param1); return 1; } latp = str; str = config_SKIPTEXT(str, NULL); str = config_SKIPSPACE(str); param1 = str; str = config_SKIPTEXT(str, NULL); str = config_SKIPSPACE(str); if (strcmp(param1, "lon") != 0) { printf(errmsg, cf->name, cf->linenum); printf(" .. 'lon' missing, got: '%s'\n", param1); return 1; } lonp = str; str = config_SKIPTEXT(str, NULL); str = config_SKIPSPACE(str); if (validate_degmin_input(latp, 90)) { printf(errmsg, cf->name, cf->linenum); printf(" got lat: '%s'\n", latp); return 1; } if (validate_degmin_input(lonp, 180)) { printf(errmsg, cf->name, cf->linenum); printf(" got lon: '%s'\n", lonp); return 1; } i = sscanf(latp, "%2d%5f%c,", &la, &lat, &lac); if (i != 3) { printf(errmsg, cf->name, cf->linenum); printf(" got parse-field-count: %d on '%s'\n", i, latp); return 1; // parse failure } i = sscanf(lonp, "%3d%5f%c,", &lo, &lng, &loc); if (i != 3) { printf(errmsg, cf->name, cf->linenum); printf(" got parse-field-count: %d on '%s'\n", i, lonp); return 1; // parse failure } if (lac != 'N' && lac != 'S' && lac != 'n' && lac != 's') { printf(errmsg, cf->name, cf->linenum); printf(" .. lat expected N/S tail, got: '%c'\n", lac); return 1; // bad indicator value } if (loc != 'E' && loc != 'W' && loc != 'e' && loc != 'w') { printf(errmsg, cf->name, cf->linenum); printf(" .. lon expected E/W tail, got: '%c'\n", loc); return 1; // bad indicator value } myloc_latstr = strdup(latp); myloc_lonstr = strdup(lonp); myloc_lat = (float)la + lat/60.0; myloc_lon = (float)lo + lng/60.0; if (lac == 'S' || lac == 's') myloc_lat = -myloc_lat; if (loc == 'W' || loc == 'w') myloc_lon = -myloc_lon; if (debug) printf("%s:%d: MYLOC LAT %8.5f degrees LON %8.5f degrees\n", cf->name, cf->linenum, myloc_lat, myloc_lon); myloc_lat = filter_lat2rad(myloc_lat); myloc_lon = filter_lon2rad(myloc_lon); myloc_coslat = cos(myloc_lat); #ifndef DISABLE_IGATE } else if (strcmp(name, "aprsis-login") == 0) { printf("%s:%d WARNING: Old-style top-level 'aprsis-login' definition, it should be inside group tags.\n", cf->name, cf->linenum); config_STRUPPER(param1); aprsis_login = strdup(param1); if (validate_callsign_input(param1,0)) { if (debug) printf("%s:%d: APRSIS-LOGIN = '%s' '%s'\n", cf->name, cf->linenum, aprsis_login, str); } else { printf("%s:%d: APRSIS-LOGIN = '%s' value is not valid AX25-like node'\n", cf->name, cf->linenum, aprsis_login); return 1; } } else if (strcmp(name, "aprsis-server") == 0) { printf("%s:%d WARNING: Old-style top-level 'aprsis-server' definition, it should be inside group tags.\n", cf->name, cf->linenum); if (debug) printf("%s:%d: APRSIS-SERVER = '%s':'%s'\n", cf->name, cf->linenum, param1, str); return aprsis_add_server(param1, str); } else if (strcmp(name, "aprsis-heartbeat-timeout") == 0) { int i = atoi(param1); if (i < 0) /* param failure ? */ i = 0; /* no timeout */ printf("%s:%d WARNING: Old-style top-level 'aprsis-heartbeat-timeout' definition, it should be inside group tags.\n", cf->name, cf->linenum); if (debug) printf("%s:%d: APRSIS-HEARTBEAT-TIMEOUT = '%d' '%s'\n", cf->name, cf->linenum, i, str); return aprsis_set_heartbeat_timeout(i); } else if (strcmp(name, "aprsis-filter") == 0) { printf("%s:%d WARNING: Old-style top-level 'aprsis-filter' definition, it should be inside group tags.\n", cf->name, cf->linenum); return aprsis_set_filter(param1); #endif #ifdef PF_AX25 /* PF_AX25 exists -- highly likely a Linux system ! */ } else if (strcmp(name, "ax25-rxport") == 0) { printf("%s:%d WARNING: Old-style top-level 'ax25-rxport' definition. See groups, 'ax25-device' definitions.\n", cf->name, cf->linenum); if (debug) printf("%s:%d: AX25-RXPORT '%s' '%s'\n", cf->name, cf->linenum, param1, str); return (netax25_addrxport(param1, NULL) == NULL); #endif } else if (strcmp(name, "radio") == 0) { printf("%s:%d WARNING: Old-style top-level 'radio' definition. See groups, 'serial-device' or 'tcp-device' definitions.\n", cf->name, cf->linenum); if (debug) printf("%s:%d: RADIO = %s %s..\n", cf->name, cf->linenum, param1, str); return (ttyreader_serialcfg(cf, param1, str) == NULL); } else if (strcmp(name, "ax25-device") == 0) { printf("%s:%d ERROR: The 'ax25-device' entry must be inside an group tag.\n", cf->name, cf->linenum); return 1; } else if (strcmp(name, "serial-device") == 0) { printf("%s:%d ERROR: The 'serial-device' entry must be inside an group tag.\n", cf->name, cf->linenum); return 1; } else if (strcmp(name, "tcp-device") == 0) { printf("%s:%d ERROR: The 'tcp-device' entry must be inside an group tag.\n", cf->name, cf->linenum); return 1; } else if (strcmp(name, "beacon") == 0) { printf("%s:%d ERROR: The 'beacon' entry must be inside a group tag.\n", cf->name, cf->linenum); return 1; } else { printf("%s:%d: ERROR: Unknown config keyword: '%s' '%s'\n", cf->name, cf->linenum, name, param1); printf("%s:%d: Perhaps this is due to lack of some surrounding tag ?\n", cf->name, cf->linenum); return 1; } return 0; } const char* scan_int(const char *p, int len, int *val, int *seen_space) { int i; char c; *val = 0; for (i = 0; i < len; ++i, ++p) { c = *p; if (('0' <= c && c <= '9') && !(*seen_space)) { *val = (*val) * 10 + (c - '0'); } else if (c == ' ') { *val = (*val) * 10; *seen_space = 1; } else { return NULL; } } return p; } int validate_degmin_input(const char *s, int maxdeg) { int deg; int m1, m2; char c; const char *t; int seen_space = 0; if (maxdeg > 90) { t = scan_int(s, 3, °, &seen_space); if (t != s+3) return 1; // scan failure if (deg > 179) return 1; // too large value s = t; t = scan_int(s, 2, &m1, &seen_space); if (t != s+2) return 1; if (m1 > 59) return 1; s = t; c = *s; if (!seen_space && c == '.') { // OK } else if (!seen_space && c == ' ') { seen_space = 1; } else { return 1; // Bad char.. } ++s; t = scan_int(s, 2, &m2, &seen_space); if (t != s+2) return 1; s = t; c = *s; if (c != 'E' && c != 'e' && c != 'W' && c != 'w') return 1; } else { t = scan_int(s, 2, °, &seen_space); if (t != s+2) return 1; // scan failure if (deg > 89) return 1; // too large value s = t; t = scan_int(s, 2, &m1, &seen_space); if (t != s+2) return 1; if (m1 > 59) return 1; s = t; c = *s; if (!seen_space && c == '.') { // OK } else if (!seen_space && c == ' ') { seen_space = 1; } else { return 1; // Bad char.. } ++s; t = scan_int(s, 2, &m2, &seen_space); if (t != s+2) return 1; s = t; c = *s; if (c != 'N' && c != 'n' && c != 'S' && c != 's') return 1; } return 0; /* zero for OK */ } /* * This interval parser is originally from ZMailer MTA. * Slightly expanded to permit white-spaces inside the string. * (c) Matti Aarnio, Rayan Zachariassen.. */ static int parse_interval(const char *string, const char **restp) { int intvl = 0; int val; int c; for (; *string; ++string) { val = 0; c = *string; while ('0' <= c && c <= '9') { val = val * 10 + (c - '0'); c = *++string; } switch (c) { case 'd': /* days */ case 'D': /* days */ val *= (24*60*60); break; case 'h': /* hours */ case 'H': /* hours */ val *= 60*60; break; case 'm': /* minutes */ case 'M': /* minutes */ val *= 60; break; case 's': /* seconds */ case 'S': /* seconds */ /* val *= 1; */ case '\t': /* just whitespace */ case ' ': /* just whitespace */ break; default: /* Not of: "dhms" - maybe string end, maybe junk ? */ if (restp) *restp = string; return intvl + val; } intvl += val; } if (restp) *restp = string; return intvl; } // Return 0 on OK, != 0 on error int config_parse_interval(const char *par, int *resultp) { const char *rest = NULL; int ret = parse_interval(par, &rest); if (*rest != 0) return 1; // Did not consume whole input string *resultp = ret; return 0; } // Return 0 on OK, != 0 on error int config_parse_boolean(const char *par, int *resultp) { if (strcasecmp(par, "true") == 0 || strcmp(par, "1") == 0 || strcasecmp(par, "yes") == 0 || strcasecmp(par, "on") == 0 || strcasecmp(par, "y") == 0) { *resultp = 1; return 1; } else if (strcasecmp(par, "false") == 0 || strcmp(par, "0") == 0 || strcasecmp(par, "no") == 0 || strcasecmp(par, "off") == 0 || strcasecmp(par, "n") == 0) { *resultp = 0; return 1; } else { return 0; } } void *readconfigline(struct configfile *cf) { char *bufp = cf->buf; int buflen = sizeof(cf->buf); //int llen; cf->linenum = cf->linenum_i; for (;;) { char *p = fgets(bufp, buflen, cf->fp); bufp[buflen - 1] = 0; /* Trunc, just in case.. */ if (p == NULL) { if (bufp == cf->buf) return NULL; // EOF! return cf->buf; // Got EOF, but got also data before it! } cf->linenum_i += 1; // Line ending LF ? p = strchr(bufp, '\n'); if (p != NULL) { *p-- = 0; // Possible preceding CR ? if (*p == '\r') *p-- = 0; // Line ending whitespaces ? while (p > bufp && (*p == ' '||*p == '\t')) *p-- = 0; //llen = p - bufp; } if (p == NULL) { p = bufp + strlen(bufp); } if (*p == '\\') { bufp = p; buflen = sizeof(cf->buf) - (p - cf->buf) -1; continue; } else { // Not lone \ at line end. Not a line with continuation line.. break; } } if (debug > 2) printf("Config line: '%s'\n",cf->buf); return cf->buf; } int configline_is_comment(struct configfile *cf) { const char *buf = cf->buf; const int buflen = sizeof(cf->buf); char c = 0; int i; for (i = 0; buf[i] != 0 && i < buflen; ++i) { c = buf[i]; if (c == ' ' || c == '\t') continue; /* Anything else, stop scanning */ break; } if (c == '#' || c == '\n' || c == '\r' || c == 0) return 1; return 0; } int readconfig(const char *name) { struct configfile cf; int has_fault = 0; int i; cf.linenum_i = 1; cf.linenum = 1; cf.name = name; if ((cf.fp = fopen(name, "r")) == NULL) { int e = errno; printf("ERROR: Can not open named config file: '%s' -> %d %s\n", name, e, strerror(e)); return 1; } while (readconfigline(&cf) != NULL) { if (configline_is_comment(&cf)) continue; /* Comment line, or empty line */ i = cfgparam(&cf); if (i) has_fault = 1; } fclose(cf.fp); return has_fault; } aprx-2.9.0/config.h.in000664 000000 000000 00000011134 13040775352 014505 0ustar00rootroot000000 000000 /* config.h.in. Generated from configure.in by autoheader. */ /* Define if building universal (internal helper macro) */ #undef AC_APPLE_UNIVERSAL_BUILD /* Configuration command line */ #undef CONFIGURE_CMD /* Define to 1 if you want to disable all IGATE codes. */ #undef DISABLE_IGATE /* Define for pthread(3p) disabling */ #undef DISABLE_PTHREAD /* Define for an embedded target */ #undef EMBEDDED /* Define to 1 if you want to enable AGWPE socket interface. */ #undef ENABLE_AGWPE /* Define for pthread(3p) enabling */ #undef ENABLE_PTHREAD /* Define for a non-embedded system with filesystem based Erlang history storage */ #undef ERLANGSTORAGE /* Define to 1 if you have the header file. */ #undef HAVE_ALLOCA_H /* Define to 1 if you have the `atan2f' function. */ #undef HAVE_ATAN2F /* Have clock_gettime */ #undef HAVE_CLOCK_GETTIME /* Define to 1 if you don't have `vprintf' but do have `_doprnt.' */ #undef HAVE_DOPRNT /* Define to 1 if you have the `getaddrinfo' function. */ #undef HAVE_GETADDRINFO /* Define to 1 if you have the `gettimeofday' function. */ #undef HAVE_GETTIMEOFDAY /* Define to 1 if you have the header file. */ #undef HAVE_INTTYPES_H /* Define to 1 if you have the `memchr' function. */ #undef HAVE_MEMCHR /* Define to 1 if you have the header file. */ #undef HAVE_MEMORY_H /* Define to 1 if you have the `memrchr' function. */ #undef HAVE_MEMRCHR /* Define to 1 if you have the header file. */ #undef HAVE_NETINET_SCTP_H /* Define to 1 if you have the `openpty' function. */ #undef HAVE_OPENPTY /* Define to 1 if you have the header file. */ #undef HAVE_OPENSSL_SSL_H /* Define to 1 if you have the header file. */ #undef HAVE_POLL_H /* Have pthread_create() function */ #undef HAVE_PTHREAD_CREATE /* Define to 1 if you have the header file. */ #undef HAVE_PTHREAD_H /* Define to 1 if you have the header file. */ #undef HAVE_PTY_H /* Define to 1 if you have the `socket' function. */ #undef HAVE_SOCKET /* Define to 1 if you have the `socketpair' function. */ #undef HAVE_SOCKETPAIR /* Define to 1 if you have the header file. */ #undef HAVE_STDARG_H /* Define to 1 if you have the header file. */ #undef HAVE_STDDEF_H /* Define to 1 if you have the header file. */ #undef HAVE_STDINT_H /* Define to 1 if you have the header file. */ #undef HAVE_STDLIB_H /* Define to 1 if you have the header file. */ #undef HAVE_STRINGS_H /* Define to 1 if you have the header file. */ #undef HAVE_STRING_H /* Define to 1 if you have the header file. */ #undef HAVE_SYS_EPOLL_H /* Define to 1 if you have the header file. */ #undef HAVE_SYS_STAT_H /* Define to 1 if you have the header file. */ #undef HAVE_SYS_TIME_H /* Define to 1 if you have the header file. */ #undef HAVE_SYS_TYPES_H /* Define to 1 if you have the header file. */ #undef HAVE_SYS_WAIT_H /* Define to 1 if you have the header file. */ #undef HAVE_TIME_H /* OpenSSL 0.9.7 or later */ #undef HAVE_TLSV1_SERVER_METHOD /* Define to 1 if you have the header file. */ #undef HAVE_UNISTD_H /* Define to 1 if you have the header file. */ #undef HAVE_VARARGS_H /* Define to 1 if you have the `vprintf' function. */ #undef HAVE_VPRINTF /* OpenSSL 0.9.7 or later */ #undef HAVE_X509_FREE /* Define to the address where bug reports for this package should be sent. */ #undef PACKAGE_BUGREPORT /* Define to the full name of this package. */ #undef PACKAGE_NAME /* Define to the full name and version of this package. */ #undef PACKAGE_STRING /* Define to the one symbol short name of this package. */ #undef PACKAGE_TARNAME /* Define to the home page for this package. */ #undef PACKAGE_URL /* Define to the version of this package. */ #undef PACKAGE_VERSION /* The size of `double', as computed by sizeof. */ #undef SIZEOF_DOUBLE /* The size of `int', as computed by sizeof. */ #undef SIZEOF_INT /* The size of `long', as computed by sizeof. */ #undef SIZEOF_LONG /* The size of `short', as computed by sizeof. */ #undef SIZEOF_SHORT /* The size of `void *', as computed by sizeof. */ #undef SIZEOF_VOID_P /* Define to 1 if you have the ANSI C header files. */ #undef STDC_HEADERS /* Define WORDS_BIGENDIAN to 1 if your processor stores words with the most significant byte first (like Motorola and SPARC, unlike Intel). */ #if defined AC_APPLE_UNIVERSAL_BUILD # if defined __BIG_ENDIAN__ # define WORDS_BIGENDIAN 1 # endif #else # ifndef WORDS_BIGENDIAN # undef WORDS_BIGENDIAN # endif #endif aprx-2.9.0/configure000775 000000 000000 00000527436 13040775352 014412 0ustar00rootroot000000 000000 #! /bin/sh # Guess values for system-dependent variables and create Makefiles. # Generated by GNU Autoconf 2.69. # # # Copyright (C) 1992-1996, 1998-2012 Free Software Foundation, Inc. # # # This configure script is free software; the Free Software Foundation # gives unlimited permission to copy, distribute and modify it. ## -------------------- ## ## M4sh Initialization. ## ## -------------------- ## # Be more Bourne compatible DUALCASE=1; export DUALCASE # for MKS sh if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then : emulate sh NULLCMD=: # Pre-4.2 versions of Zsh do word splitting on ${1+"$@"}, which # is contrary to our usage. Disable this feature. alias -g '${1+"$@"}'='"$@"' setopt NO_GLOB_SUBST else case `(set -o) 2>/dev/null` in #( *posix*) : set -o posix ;; #( *) : ;; esac fi as_nl=' ' export as_nl # Printing a long string crashes Solaris 7 /usr/bin/printf. as_echo='\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\' as_echo=$as_echo$as_echo$as_echo$as_echo$as_echo as_echo=$as_echo$as_echo$as_echo$as_echo$as_echo$as_echo # Prefer a ksh shell builtin over an external printf program on Solaris, # but without wasting forks for bash or zsh. if test -z "$BASH_VERSION$ZSH_VERSION" \ && (test "X`print -r -- $as_echo`" = "X$as_echo") 2>/dev/null; then as_echo='print -r --' as_echo_n='print -rn --' elif (test "X`printf %s $as_echo`" = "X$as_echo") 2>/dev/null; then as_echo='printf %s\n' as_echo_n='printf %s' else if test "X`(/usr/ucb/echo -n -n $as_echo) 2>/dev/null`" = "X-n $as_echo"; then as_echo_body='eval /usr/ucb/echo -n "$1$as_nl"' as_echo_n='/usr/ucb/echo -n' else as_echo_body='eval expr "X$1" : "X\\(.*\\)"' as_echo_n_body='eval arg=$1; case $arg in #( *"$as_nl"*) expr "X$arg" : "X\\(.*\\)$as_nl"; arg=`expr "X$arg" : ".*$as_nl\\(.*\\)"`;; esac; expr "X$arg" : "X\\(.*\\)" | tr -d "$as_nl" ' export as_echo_n_body as_echo_n='sh -c $as_echo_n_body as_echo' fi export as_echo_body as_echo='sh -c $as_echo_body as_echo' fi # The user is always right. if test "${PATH_SEPARATOR+set}" != set; then PATH_SEPARATOR=: (PATH='/bin;/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 && { (PATH='/bin:/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 || PATH_SEPARATOR=';' } fi # IFS # We need space, tab and new line, in precisely that order. Quoting is # there to prevent editors from complaining about space-tab. # (If _AS_PATH_WALK were called with IFS unset, it would disable word # splitting by setting IFS to empty value.) IFS=" "" $as_nl" # Find who we are. Look in the path if we contain no directory separator. as_myself= case $0 in #(( *[\\/]* ) as_myself=$0 ;; *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. test -r "$as_dir/$0" && as_myself=$as_dir/$0 && break done IFS=$as_save_IFS ;; esac # We did not find ourselves, most probably we were run as `sh COMMAND' # in which case we are not to be found in the path. if test "x$as_myself" = x; then as_myself=$0 fi if test ! -f "$as_myself"; then $as_echo "$as_myself: error: cannot find myself; rerun with an absolute file name" >&2 exit 1 fi # Unset variables that we do not need and which cause bugs (e.g. in # pre-3.0 UWIN ksh). But do not cause bugs in bash 2.01; the "|| exit 1" # suppresses any "Segmentation fault" message there. '((' could # trigger a bug in pdksh 5.2.14. for as_var in BASH_ENV ENV MAIL MAILPATH do eval test x\${$as_var+set} = xset \ && ( (unset $as_var) || exit 1) >/dev/null 2>&1 && unset $as_var || : done PS1='$ ' PS2='> ' PS4='+ ' # NLS nuisances. LC_ALL=C export LC_ALL LANGUAGE=C export LANGUAGE # CDPATH. (unset CDPATH) >/dev/null 2>&1 && unset CDPATH # Use a proper internal environment variable to ensure we don't fall # into an infinite loop, continuously re-executing ourselves. if test x"${_as_can_reexec}" != xno && test "x$CONFIG_SHELL" != x; then _as_can_reexec=no; export _as_can_reexec; # We cannot yet assume a decent shell, so we have to provide a # neutralization value for shells without unset; and this also # works around shells that cannot unset nonexistent variables. # Preserve -v and -x to the replacement shell. BASH_ENV=/dev/null ENV=/dev/null (unset BASH_ENV) >/dev/null 2>&1 && unset BASH_ENV ENV case $- in # (((( *v*x* | *x*v* ) as_opts=-vx ;; *v* ) as_opts=-v ;; *x* ) as_opts=-x ;; * ) as_opts= ;; esac exec $CONFIG_SHELL $as_opts "$as_myself" ${1+"$@"} # Admittedly, this is quite paranoid, since all the known shells bail # out after a failed `exec'. $as_echo "$0: could not re-execute with $CONFIG_SHELL" >&2 as_fn_exit 255 fi # We don't want this to propagate to other subprocesses. { _as_can_reexec=; unset _as_can_reexec;} if test "x$CONFIG_SHELL" = x; then as_bourne_compatible="if test -n \"\${ZSH_VERSION+set}\" && (emulate sh) >/dev/null 2>&1; then : emulate sh NULLCMD=: # Pre-4.2 versions of Zsh do word splitting on \${1+\"\$@\"}, which # is contrary to our usage. Disable this feature. alias -g '\${1+\"\$@\"}'='\"\$@\"' setopt NO_GLOB_SUBST else case \`(set -o) 2>/dev/null\` in #( *posix*) : set -o posix ;; #( *) : ;; esac fi " as_required="as_fn_return () { (exit \$1); } as_fn_success () { as_fn_return 0; } as_fn_failure () { as_fn_return 1; } as_fn_ret_success () { return 0; } as_fn_ret_failure () { return 1; } exitcode=0 as_fn_success || { exitcode=1; echo as_fn_success failed.; } as_fn_failure && { exitcode=1; echo as_fn_failure succeeded.; } as_fn_ret_success || { exitcode=1; echo as_fn_ret_success failed.; } as_fn_ret_failure && { exitcode=1; echo as_fn_ret_failure succeeded.; } if ( set x; as_fn_ret_success y && test x = \"\$1\" ); then : else exitcode=1; echo positional parameters were not saved. fi test x\$exitcode = x0 || exit 1 test -x / || exit 1" as_suggested=" as_lineno_1=";as_suggested=$as_suggested$LINENO;as_suggested=$as_suggested" as_lineno_1a=\$LINENO as_lineno_2=";as_suggested=$as_suggested$LINENO;as_suggested=$as_suggested" as_lineno_2a=\$LINENO eval 'test \"x\$as_lineno_1'\$as_run'\" != \"x\$as_lineno_2'\$as_run'\" && test \"x\`expr \$as_lineno_1'\$as_run' + 1\`\" = \"x\$as_lineno_2'\$as_run'\"' || exit 1 test \$(( 1 + 1 )) = 2 || exit 1" if (eval "$as_required") 2>/dev/null; then : as_have_required=yes else as_have_required=no fi if test x$as_have_required = xyes && (eval "$as_suggested") 2>/dev/null; then : else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR as_found=false for as_dir in /bin$PATH_SEPARATOR/usr/bin$PATH_SEPARATOR$PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. as_found=: case $as_dir in #( /*) for as_base in sh bash ksh sh5; do # Try only shells that exist, to save several forks. as_shell=$as_dir/$as_base if { test -f "$as_shell" || test -f "$as_shell.exe"; } && { $as_echo "$as_bourne_compatible""$as_required" | as_run=a "$as_shell"; } 2>/dev/null; then : CONFIG_SHELL=$as_shell as_have_required=yes if { $as_echo "$as_bourne_compatible""$as_suggested" | as_run=a "$as_shell"; } 2>/dev/null; then : break 2 fi fi done;; esac as_found=false done $as_found || { if { test -f "$SHELL" || test -f "$SHELL.exe"; } && { $as_echo "$as_bourne_compatible""$as_required" | as_run=a "$SHELL"; } 2>/dev/null; then : CONFIG_SHELL=$SHELL as_have_required=yes fi; } IFS=$as_save_IFS if test "x$CONFIG_SHELL" != x; then : export CONFIG_SHELL # We cannot yet assume a decent shell, so we have to provide a # neutralization value for shells without unset; and this also # works around shells that cannot unset nonexistent variables. # Preserve -v and -x to the replacement shell. BASH_ENV=/dev/null ENV=/dev/null (unset BASH_ENV) >/dev/null 2>&1 && unset BASH_ENV ENV case $- in # (((( *v*x* | *x*v* ) as_opts=-vx ;; *v* ) as_opts=-v ;; *x* ) as_opts=-x ;; * ) as_opts= ;; esac exec $CONFIG_SHELL $as_opts "$as_myself" ${1+"$@"} # Admittedly, this is quite paranoid, since all the known shells bail # out after a failed `exec'. $as_echo "$0: could not re-execute with $CONFIG_SHELL" >&2 exit 255 fi if test x$as_have_required = xno; then : $as_echo "$0: This script requires a shell more modern than all" $as_echo "$0: the shells that I found on your system." if test x${ZSH_VERSION+set} = xset ; then $as_echo "$0: In particular, zsh $ZSH_VERSION has bugs and should" $as_echo "$0: be upgraded to zsh 4.3.4 or later." else $as_echo "$0: Please tell bug-autoconf@gnu.org about your system, $0: including any error possibly output before this $0: message. Then install a modern shell, or manually run $0: the script under such a shell if you do have one." fi exit 1 fi fi fi SHELL=${CONFIG_SHELL-/bin/sh} export SHELL # Unset more variables known to interfere with behavior of common tools. CLICOLOR_FORCE= GREP_OPTIONS= unset CLICOLOR_FORCE GREP_OPTIONS ## --------------------- ## ## M4sh Shell Functions. ## ## --------------------- ## # as_fn_unset VAR # --------------- # Portably unset VAR. as_fn_unset () { { eval $1=; unset $1;} } as_unset=as_fn_unset # as_fn_set_status STATUS # ----------------------- # Set $? to STATUS, without forking. as_fn_set_status () { return $1 } # as_fn_set_status # as_fn_exit STATUS # ----------------- # Exit the shell with STATUS, even in a "trap 0" or "set -e" context. as_fn_exit () { set +e as_fn_set_status $1 exit $1 } # as_fn_exit # as_fn_mkdir_p # ------------- # Create "$as_dir" as a directory, including parents if necessary. as_fn_mkdir_p () { case $as_dir in #( -*) as_dir=./$as_dir;; esac test -d "$as_dir" || eval $as_mkdir_p || { as_dirs= while :; do case $as_dir in #( *\'*) as_qdir=`$as_echo "$as_dir" | sed "s/'/'\\\\\\\\''/g"`;; #'( *) as_qdir=$as_dir;; esac as_dirs="'$as_qdir' $as_dirs" as_dir=`$as_dirname -- "$as_dir" || $as_expr X"$as_dir" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ X"$as_dir" : 'X\(//\)[^/]' \| \ X"$as_dir" : 'X\(//\)$' \| \ X"$as_dir" : 'X\(/\)' \| . 2>/dev/null || $as_echo X"$as_dir" | sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/ q } /^X\(\/\/\)[^/].*/{ s//\1/ q } /^X\(\/\/\)$/{ s//\1/ q } /^X\(\/\).*/{ s//\1/ q } s/.*/./; q'` test -d "$as_dir" && break done test -z "$as_dirs" || eval "mkdir $as_dirs" } || test -d "$as_dir" || as_fn_error $? "cannot create directory $as_dir" } # as_fn_mkdir_p # as_fn_executable_p FILE # ----------------------- # Test if FILE is an executable regular file. as_fn_executable_p () { test -f "$1" && test -x "$1" } # as_fn_executable_p # as_fn_append VAR VALUE # ---------------------- # Append the text in VALUE to the end of the definition contained in VAR. Take # advantage of any shell optimizations that allow amortized linear growth over # repeated appends, instead of the typical quadratic growth present in naive # implementations. if (eval "as_var=1; as_var+=2; test x\$as_var = x12") 2>/dev/null; then : eval 'as_fn_append () { eval $1+=\$2 }' else as_fn_append () { eval $1=\$$1\$2 } fi # as_fn_append # as_fn_arith ARG... # ------------------ # Perform arithmetic evaluation on the ARGs, and store the result in the # global $as_val. Take advantage of shells that can avoid forks. The arguments # must be portable across $(()) and expr. if (eval "test \$(( 1 + 1 )) = 2") 2>/dev/null; then : eval 'as_fn_arith () { as_val=$(( $* )) }' else as_fn_arith () { as_val=`expr "$@" || test $? -eq 1` } fi # as_fn_arith # as_fn_error STATUS ERROR [LINENO LOG_FD] # ---------------------------------------- # Output "`basename $0`: error: ERROR" to stderr. If LINENO and LOG_FD are # provided, also output the error to LOG_FD, referencing LINENO. Then exit the # script with STATUS, using 1 if that was 0. as_fn_error () { as_status=$1; test $as_status -eq 0 && as_status=1 if test "$4"; then as_lineno=${as_lineno-"$3"} as_lineno_stack=as_lineno_stack=$as_lineno_stack $as_echo "$as_me:${as_lineno-$LINENO}: error: $2" >&$4 fi $as_echo "$as_me: error: $2" >&2 as_fn_exit $as_status } # as_fn_error if expr a : '\(a\)' >/dev/null 2>&1 && test "X`expr 00001 : '.*\(...\)'`" = X001; then as_expr=expr else as_expr=false fi if (basename -- /) >/dev/null 2>&1 && test "X`basename -- / 2>&1`" = "X/"; then as_basename=basename else as_basename=false fi if (as_dir=`dirname -- /` && test "X$as_dir" = X/) >/dev/null 2>&1; then as_dirname=dirname else as_dirname=false fi as_me=`$as_basename -- "$0" || $as_expr X/"$0" : '.*/\([^/][^/]*\)/*$' \| \ X"$0" : 'X\(//\)$' \| \ X"$0" : 'X\(/\)' \| . 2>/dev/null || $as_echo X/"$0" | sed '/^.*\/\([^/][^/]*\)\/*$/{ s//\1/ q } /^X\/\(\/\/\)$/{ s//\1/ q } /^X\/\(\/\).*/{ s//\1/ q } s/.*/./; q'` # Avoid depending upon Character Ranges. as_cr_letters='abcdefghijklmnopqrstuvwxyz' as_cr_LETTERS='ABCDEFGHIJKLMNOPQRSTUVWXYZ' as_cr_Letters=$as_cr_letters$as_cr_LETTERS as_cr_digits='0123456789' as_cr_alnum=$as_cr_Letters$as_cr_digits as_lineno_1=$LINENO as_lineno_1a=$LINENO as_lineno_2=$LINENO as_lineno_2a=$LINENO eval 'test "x$as_lineno_1'$as_run'" != "x$as_lineno_2'$as_run'" && test "x`expr $as_lineno_1'$as_run' + 1`" = "x$as_lineno_2'$as_run'"' || { # Blame Lee E. McMahon (1931-1989) for sed's syntax. :-) sed -n ' p /[$]LINENO/= ' <$as_myself | sed ' s/[$]LINENO.*/&-/ t lineno b :lineno N :loop s/[$]LINENO\([^'$as_cr_alnum'_].*\n\)\(.*\)/\2\1\2/ t loop s/-\n.*// ' >$as_me.lineno && chmod +x "$as_me.lineno" || { $as_echo "$as_me: error: cannot create $as_me.lineno; rerun with a POSIX shell" >&2; as_fn_exit 1; } # If we had to re-execute with $CONFIG_SHELL, we're ensured to have # already done that, so ensure we don't try to do so again and fall # in an infinite loop. This has already happened in practice. _as_can_reexec=no; export _as_can_reexec # Don't try to exec as it changes $[0], causing all sort of problems # (the dirname of $[0] is not the place where we might find the # original and so on. Autoconf is especially sensitive to this). . "./$as_me.lineno" # Exit status is that of the last command. exit } ECHO_C= ECHO_N= ECHO_T= case `echo -n x` in #((((( -n*) case `echo 'xy\c'` in *c*) ECHO_T=' ';; # ECHO_T is single tab character. xy) ECHO_C='\c';; *) echo `echo ksh88 bug on AIX 6.1` > /dev/null ECHO_T=' ';; esac;; *) ECHO_N='-n';; esac rm -f conf$$ conf$$.exe conf$$.file if test -d conf$$.dir; then rm -f conf$$.dir/conf$$.file else rm -f conf$$.dir mkdir conf$$.dir 2>/dev/null fi if (echo >conf$$.file) 2>/dev/null; then if ln -s conf$$.file conf$$ 2>/dev/null; then as_ln_s='ln -s' # ... but there are two gotchas: # 1) On MSYS, both `ln -s file dir' and `ln file dir' fail. # 2) DJGPP < 2.04 has no symlinks; `ln -s' creates a wrapper executable. # In both cases, we have to default to `cp -pR'. ln -s conf$$.file conf$$.dir 2>/dev/null && test ! -f conf$$.exe || as_ln_s='cp -pR' elif ln conf$$.file conf$$ 2>/dev/null; then as_ln_s=ln else as_ln_s='cp -pR' fi else as_ln_s='cp -pR' fi rm -f conf$$ conf$$.exe conf$$.dir/conf$$.file conf$$.file rmdir conf$$.dir 2>/dev/null if mkdir -p . 2>/dev/null; then as_mkdir_p='mkdir -p "$as_dir"' else test -d ./-p && rmdir ./-p as_mkdir_p=false fi as_test_x='test -x' as_executable_p=as_fn_executable_p # Sed expression to map a string onto a valid CPP name. as_tr_cpp="eval sed 'y%*$as_cr_letters%P$as_cr_LETTERS%;s%[^_$as_cr_alnum]%_%g'" # Sed expression to map a string onto a valid variable name. as_tr_sh="eval sed 'y%*+%pp%;s%[^_$as_cr_alnum]%_%g'" test -n "$DJDIR" || exec 7<&0 &1 # Name of the host. # hostname on some systems (SVR3.2, old GNU/Linux) returns a bogus exit status, # so uname gets run too. ac_hostname=`(hostname || uname -n) 2>/dev/null | sed 1q` # # Initializations. # ac_default_prefix=/usr/local ac_clean_files= ac_config_libobj_dir=. LIBOBJS= cross_compiling=no subdirs= MFLAGS= MAKEFLAGS= # Identity of this package. PACKAGE_NAME= PACKAGE_TARNAME= PACKAGE_VERSION= PACKAGE_STRING= PACKAGE_BUGREPORT= PACKAGE_URL= ac_unique_file="aprx.h" # Factoring default headers for most tests. ac_includes_default="\ #include #ifdef HAVE_SYS_TYPES_H # include #endif #ifdef HAVE_SYS_STAT_H # include #endif #ifdef STDC_HEADERS # include # include #else # ifdef HAVE_STDLIB_H # include # endif #endif #ifdef HAVE_STRING_H # if !defined STDC_HEADERS && defined HAVE_MEMORY_H # include # endif # include #endif #ifdef HAVE_STRINGS_H # include #endif #ifdef HAVE_INTTYPES_H # include #endif #ifdef HAVE_STDINT_H # include #endif #ifdef HAVE_UNISTD_H # include #endif" ac_subst_vars='LTLIBOBJS LIBOBJS VERSION_STRING LIBCRYPTO LIBSSL LIBRESOLV LIBSOCKET LIBGETADDRINFO LIBRT CCPTHREAD LIBPTHREAD LIBM CFLAGS_ARCH LD EGREP GREP CPP OBJEXT EXEEXT ac_ct_CC CPPFLAGS LDFLAGS CFLAGS CC SET_MAKE target_alias host_alias build_alias LIBS ECHO_T ECHO_N ECHO_C DEFS mandir localedir libdir psdir pdfdir dvidir htmldir infodir docdir oldincludedir includedir localstatedir sharedstatedir sysconfdir datadir datarootdir libexecdir sbindir bindir program_transform_name prefix exec_prefix PACKAGE_URL PACKAGE_BUGREPORT PACKAGE_STRING PACKAGE_VERSION PACKAGE_TARNAME PACKAGE_NAME PATH_SEPARATOR SHELL' ac_subst_files='' ac_user_opts=' enable_option_checking with_embedded with_erlangstorage enable_igate enable_agwpe with_pthread with_pthreads with_openssl ' ac_precious_vars='build_alias host_alias target_alias CC CFLAGS LDFLAGS LIBS CPPFLAGS CPP' # Initialize some variables set by options. ac_init_help= ac_init_version=false ac_unrecognized_opts= ac_unrecognized_sep= # The variables have the same names as the options, with # dashes changed to underlines. cache_file=/dev/null exec_prefix=NONE no_create= no_recursion= prefix=NONE program_prefix=NONE program_suffix=NONE program_transform_name=s,x,x, silent= site= srcdir= verbose= x_includes=NONE x_libraries=NONE # Installation directory options. # These are left unexpanded so users can "make install exec_prefix=/foo" # and all the variables that are supposed to be based on exec_prefix # by default will actually change. # Use braces instead of parens because sh, perl, etc. also accept them. # (The list follows the same order as the GNU Coding Standards.) bindir='${exec_prefix}/bin' sbindir='${exec_prefix}/sbin' libexecdir='${exec_prefix}/libexec' datarootdir='${prefix}/share' datadir='${datarootdir}' sysconfdir='${prefix}/etc' sharedstatedir='${prefix}/com' localstatedir='${prefix}/var' includedir='${prefix}/include' oldincludedir='/usr/include' docdir='${datarootdir}/doc/${PACKAGE}' infodir='${datarootdir}/info' htmldir='${docdir}' dvidir='${docdir}' pdfdir='${docdir}' psdir='${docdir}' libdir='${exec_prefix}/lib' localedir='${datarootdir}/locale' mandir='${datarootdir}/man' ac_prev= ac_dashdash= for ac_option do # If the previous option needs an argument, assign it. if test -n "$ac_prev"; then eval $ac_prev=\$ac_option ac_prev= continue fi case $ac_option in *=?*) ac_optarg=`expr "X$ac_option" : '[^=]*=\(.*\)'` ;; *=) ac_optarg= ;; *) ac_optarg=yes ;; esac # Accept the important Cygnus configure options, so we can diagnose typos. case $ac_dashdash$ac_option in --) ac_dashdash=yes ;; -bindir | --bindir | --bindi | --bind | --bin | --bi) ac_prev=bindir ;; -bindir=* | --bindir=* | --bindi=* | --bind=* | --bin=* | --bi=*) bindir=$ac_optarg ;; -build | --build | --buil | --bui | --bu) ac_prev=build_alias ;; -build=* | --build=* | --buil=* | --bui=* | --bu=*) build_alias=$ac_optarg ;; -cache-file | --cache-file | --cache-fil | --cache-fi \ | --cache-f | --cache- | --cache | --cach | --cac | --ca | --c) ac_prev=cache_file ;; -cache-file=* | --cache-file=* | --cache-fil=* | --cache-fi=* \ | --cache-f=* | --cache-=* | --cache=* | --cach=* | --cac=* | --ca=* | --c=*) cache_file=$ac_optarg ;; --config-cache | -C) cache_file=config.cache ;; -datadir | --datadir | --datadi | --datad) ac_prev=datadir ;; -datadir=* | --datadir=* | --datadi=* | --datad=*) datadir=$ac_optarg ;; -datarootdir | --datarootdir | --datarootdi | --datarootd | --dataroot \ | --dataroo | --dataro | --datar) ac_prev=datarootdir ;; -datarootdir=* | --datarootdir=* | --datarootdi=* | --datarootd=* \ | --dataroot=* | --dataroo=* | --dataro=* | --datar=*) datarootdir=$ac_optarg ;; -disable-* | --disable-*) ac_useropt=`expr "x$ac_option" : 'x-*disable-\(.*\)'` # Reject names that are not valid shell variable names. expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null && as_fn_error $? "invalid feature name: $ac_useropt" ac_useropt_orig=$ac_useropt ac_useropt=`$as_echo "$ac_useropt" | sed 's/[-+.]/_/g'` case $ac_user_opts in *" "enable_$ac_useropt" "*) ;; *) ac_unrecognized_opts="$ac_unrecognized_opts$ac_unrecognized_sep--disable-$ac_useropt_orig" ac_unrecognized_sep=', ';; esac eval enable_$ac_useropt=no ;; -docdir | --docdir | --docdi | --doc | --do) ac_prev=docdir ;; -docdir=* | --docdir=* | --docdi=* | --doc=* | --do=*) docdir=$ac_optarg ;; -dvidir | --dvidir | --dvidi | --dvid | --dvi | --dv) ac_prev=dvidir ;; -dvidir=* | --dvidir=* | --dvidi=* | --dvid=* | --dvi=* | --dv=*) dvidir=$ac_optarg ;; -enable-* | --enable-*) ac_useropt=`expr "x$ac_option" : 'x-*enable-\([^=]*\)'` # Reject names that are not valid shell variable names. expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null && as_fn_error $? "invalid feature name: $ac_useropt" ac_useropt_orig=$ac_useropt ac_useropt=`$as_echo "$ac_useropt" | sed 's/[-+.]/_/g'` case $ac_user_opts in *" "enable_$ac_useropt" "*) ;; *) ac_unrecognized_opts="$ac_unrecognized_opts$ac_unrecognized_sep--enable-$ac_useropt_orig" ac_unrecognized_sep=', ';; esac eval enable_$ac_useropt=\$ac_optarg ;; -exec-prefix | --exec_prefix | --exec-prefix | --exec-prefi \ | --exec-pref | --exec-pre | --exec-pr | --exec-p | --exec- \ | --exec | --exe | --ex) ac_prev=exec_prefix ;; -exec-prefix=* | --exec_prefix=* | --exec-prefix=* | --exec-prefi=* \ | --exec-pref=* | --exec-pre=* | --exec-pr=* | --exec-p=* | --exec-=* \ | --exec=* | --exe=* | --ex=*) exec_prefix=$ac_optarg ;; -gas | --gas | --ga | --g) # Obsolete; use --with-gas. with_gas=yes ;; -help | --help | --hel | --he | -h) ac_init_help=long ;; -help=r* | --help=r* | --hel=r* | --he=r* | -hr*) ac_init_help=recursive ;; -help=s* | --help=s* | --hel=s* | --he=s* | -hs*) ac_init_help=short ;; -host | --host | --hos | --ho) ac_prev=host_alias ;; -host=* | --host=* | --hos=* | --ho=*) host_alias=$ac_optarg ;; -htmldir | --htmldir | --htmldi | --htmld | --html | --htm | --ht) ac_prev=htmldir ;; -htmldir=* | --htmldir=* | --htmldi=* | --htmld=* | --html=* | --htm=* \ | --ht=*) htmldir=$ac_optarg ;; -includedir | --includedir | --includedi | --included | --include \ | --includ | --inclu | --incl | --inc) ac_prev=includedir ;; -includedir=* | --includedir=* | --includedi=* | --included=* | --include=* \ | --includ=* | --inclu=* | --incl=* | --inc=*) includedir=$ac_optarg ;; -infodir | --infodir | --infodi | --infod | --info | --inf) ac_prev=infodir ;; -infodir=* | --infodir=* | --infodi=* | --infod=* | --info=* | --inf=*) infodir=$ac_optarg ;; -libdir | --libdir | --libdi | --libd) ac_prev=libdir ;; -libdir=* | --libdir=* | --libdi=* | --libd=*) libdir=$ac_optarg ;; -libexecdir | --libexecdir | --libexecdi | --libexecd | --libexec \ | --libexe | --libex | --libe) ac_prev=libexecdir ;; -libexecdir=* | --libexecdir=* | --libexecdi=* | --libexecd=* | --libexec=* \ | --libexe=* | --libex=* | --libe=*) libexecdir=$ac_optarg ;; -localedir | --localedir | --localedi | --localed | --locale) ac_prev=localedir ;; -localedir=* | --localedir=* | --localedi=* | --localed=* | --locale=*) localedir=$ac_optarg ;; -localstatedir | --localstatedir | --localstatedi | --localstated \ | --localstate | --localstat | --localsta | --localst | --locals) ac_prev=localstatedir ;; -localstatedir=* | --localstatedir=* | --localstatedi=* | --localstated=* \ | --localstate=* | --localstat=* | --localsta=* | --localst=* | --locals=*) localstatedir=$ac_optarg ;; -mandir | --mandir | --mandi | --mand | --man | --ma | --m) ac_prev=mandir ;; -mandir=* | --mandir=* | --mandi=* | --mand=* | --man=* | --ma=* | --m=*) mandir=$ac_optarg ;; -nfp | --nfp | --nf) # Obsolete; use --without-fp. with_fp=no ;; -no-create | --no-create | --no-creat | --no-crea | --no-cre \ | --no-cr | --no-c | -n) no_create=yes ;; -no-recursion | --no-recursion | --no-recursio | --no-recursi \ | --no-recurs | --no-recur | --no-recu | --no-rec | --no-re | --no-r) no_recursion=yes ;; -oldincludedir | --oldincludedir | --oldincludedi | --oldincluded \ | --oldinclude | --oldinclud | --oldinclu | --oldincl | --oldinc \ | --oldin | --oldi | --old | --ol | --o) ac_prev=oldincludedir ;; -oldincludedir=* | --oldincludedir=* | --oldincludedi=* | --oldincluded=* \ | --oldinclude=* | --oldinclud=* | --oldinclu=* | --oldincl=* | --oldinc=* \ | --oldin=* | --oldi=* | --old=* | --ol=* | --o=*) oldincludedir=$ac_optarg ;; -prefix | --prefix | --prefi | --pref | --pre | --pr | --p) ac_prev=prefix ;; -prefix=* | --prefix=* | --prefi=* | --pref=* | --pre=* | --pr=* | --p=*) prefix=$ac_optarg ;; -program-prefix | --program-prefix | --program-prefi | --program-pref \ | --program-pre | --program-pr | --program-p) ac_prev=program_prefix ;; -program-prefix=* | --program-prefix=* | --program-prefi=* \ | --program-pref=* | --program-pre=* | --program-pr=* | --program-p=*) program_prefix=$ac_optarg ;; -program-suffix | --program-suffix | --program-suffi | --program-suff \ | --program-suf | --program-su | --program-s) ac_prev=program_suffix ;; -program-suffix=* | --program-suffix=* | --program-suffi=* \ | --program-suff=* | --program-suf=* | --program-su=* | --program-s=*) program_suffix=$ac_optarg ;; -program-transform-name | --program-transform-name \ | --program-transform-nam | --program-transform-na \ | --program-transform-n | --program-transform- \ | --program-transform | --program-transfor \ | --program-transfo | --program-transf \ | --program-trans | --program-tran \ | --progr-tra | --program-tr | --program-t) ac_prev=program_transform_name ;; -program-transform-name=* | --program-transform-name=* \ | --program-transform-nam=* | --program-transform-na=* \ | --program-transform-n=* | --program-transform-=* \ | --program-transform=* | --program-transfor=* \ | --program-transfo=* | --program-transf=* \ | --program-trans=* | --program-tran=* \ | --progr-tra=* | --program-tr=* | --program-t=*) program_transform_name=$ac_optarg ;; -pdfdir | --pdfdir | --pdfdi | --pdfd | --pdf | --pd) ac_prev=pdfdir ;; -pdfdir=* | --pdfdir=* | --pdfdi=* | --pdfd=* | --pdf=* | --pd=*) pdfdir=$ac_optarg ;; -psdir | --psdir | --psdi | --psd | --ps) ac_prev=psdir ;; -psdir=* | --psdir=* | --psdi=* | --psd=* | --ps=*) psdir=$ac_optarg ;; -q | -quiet | --quiet | --quie | --qui | --qu | --q \ | -silent | --silent | --silen | --sile | --sil) silent=yes ;; -sbindir | --sbindir | --sbindi | --sbind | --sbin | --sbi | --sb) ac_prev=sbindir ;; -sbindir=* | --sbindir=* | --sbindi=* | --sbind=* | --sbin=* \ | --sbi=* | --sb=*) sbindir=$ac_optarg ;; -sharedstatedir | --sharedstatedir | --sharedstatedi \ | --sharedstated | --sharedstate | --sharedstat | --sharedsta \ | --sharedst | --shareds | --shared | --share | --shar \ | --sha | --sh) ac_prev=sharedstatedir ;; -sharedstatedir=* | --sharedstatedir=* | --sharedstatedi=* \ | --sharedstated=* | --sharedstate=* | --sharedstat=* | --sharedsta=* \ | --sharedst=* | --shareds=* | --shared=* | --share=* | --shar=* \ | --sha=* | --sh=*) sharedstatedir=$ac_optarg ;; -site | --site | --sit) ac_prev=site ;; -site=* | --site=* | --sit=*) site=$ac_optarg ;; -srcdir | --srcdir | --srcdi | --srcd | --src | --sr) ac_prev=srcdir ;; -srcdir=* | --srcdir=* | --srcdi=* | --srcd=* | --src=* | --sr=*) srcdir=$ac_optarg ;; -sysconfdir | --sysconfdir | --sysconfdi | --sysconfd | --sysconf \ | --syscon | --sysco | --sysc | --sys | --sy) ac_prev=sysconfdir ;; -sysconfdir=* | --sysconfdir=* | --sysconfdi=* | --sysconfd=* | --sysconf=* \ | --syscon=* | --sysco=* | --sysc=* | --sys=* | --sy=*) sysconfdir=$ac_optarg ;; -target | --target | --targe | --targ | --tar | --ta | --t) ac_prev=target_alias ;; -target=* | --target=* | --targe=* | --targ=* | --tar=* | --ta=* | --t=*) target_alias=$ac_optarg ;; -v | -verbose | --verbose | --verbos | --verbo | --verb) verbose=yes ;; -version | --version | --versio | --versi | --vers | -V) ac_init_version=: ;; -with-* | --with-*) ac_useropt=`expr "x$ac_option" : 'x-*with-\([^=]*\)'` # Reject names that are not valid shell variable names. expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null && as_fn_error $? "invalid package name: $ac_useropt" ac_useropt_orig=$ac_useropt ac_useropt=`$as_echo "$ac_useropt" | sed 's/[-+.]/_/g'` case $ac_user_opts in *" "with_$ac_useropt" "*) ;; *) ac_unrecognized_opts="$ac_unrecognized_opts$ac_unrecognized_sep--with-$ac_useropt_orig" ac_unrecognized_sep=', ';; esac eval with_$ac_useropt=\$ac_optarg ;; -without-* | --without-*) ac_useropt=`expr "x$ac_option" : 'x-*without-\(.*\)'` # Reject names that are not valid shell variable names. expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null && as_fn_error $? "invalid package name: $ac_useropt" ac_useropt_orig=$ac_useropt ac_useropt=`$as_echo "$ac_useropt" | sed 's/[-+.]/_/g'` case $ac_user_opts in *" "with_$ac_useropt" "*) ;; *) ac_unrecognized_opts="$ac_unrecognized_opts$ac_unrecognized_sep--without-$ac_useropt_orig" ac_unrecognized_sep=', ';; esac eval with_$ac_useropt=no ;; --x) # Obsolete; use --with-x. with_x=yes ;; -x-includes | --x-includes | --x-include | --x-includ | --x-inclu \ | --x-incl | --x-inc | --x-in | --x-i) ac_prev=x_includes ;; -x-includes=* | --x-includes=* | --x-include=* | --x-includ=* | --x-inclu=* \ | --x-incl=* | --x-inc=* | --x-in=* | --x-i=*) x_includes=$ac_optarg ;; -x-libraries | --x-libraries | --x-librarie | --x-librari \ | --x-librar | --x-libra | --x-libr | --x-lib | --x-li | --x-l) ac_prev=x_libraries ;; -x-libraries=* | --x-libraries=* | --x-librarie=* | --x-librari=* \ | --x-librar=* | --x-libra=* | --x-libr=* | --x-lib=* | --x-li=* | --x-l=*) x_libraries=$ac_optarg ;; -*) as_fn_error $? "unrecognized option: \`$ac_option' Try \`$0 --help' for more information" ;; *=*) ac_envvar=`expr "x$ac_option" : 'x\([^=]*\)='` # Reject names that are not valid shell variable names. case $ac_envvar in #( '' | [0-9]* | *[!_$as_cr_alnum]* ) as_fn_error $? "invalid variable name: \`$ac_envvar'" ;; esac eval $ac_envvar=\$ac_optarg export $ac_envvar ;; *) # FIXME: should be removed in autoconf 3.0. $as_echo "$as_me: WARNING: you should use --build, --host, --target" >&2 expr "x$ac_option" : ".*[^-._$as_cr_alnum]" >/dev/null && $as_echo "$as_me: WARNING: invalid host type: $ac_option" >&2 : "${build_alias=$ac_option} ${host_alias=$ac_option} ${target_alias=$ac_option}" ;; esac done if test -n "$ac_prev"; then ac_option=--`echo $ac_prev | sed 's/_/-/g'` as_fn_error $? "missing argument to $ac_option" fi if test -n "$ac_unrecognized_opts"; then case $enable_option_checking in no) ;; fatal) as_fn_error $? "unrecognized options: $ac_unrecognized_opts" ;; *) $as_echo "$as_me: WARNING: unrecognized options: $ac_unrecognized_opts" >&2 ;; esac fi # Check all directory arguments for consistency. for ac_var in exec_prefix prefix bindir sbindir libexecdir datarootdir \ datadir sysconfdir sharedstatedir localstatedir includedir \ oldincludedir docdir infodir htmldir dvidir pdfdir psdir \ libdir localedir mandir do eval ac_val=\$$ac_var # Remove trailing slashes. case $ac_val in */ ) ac_val=`expr "X$ac_val" : 'X\(.*[^/]\)' \| "X$ac_val" : 'X\(.*\)'` eval $ac_var=\$ac_val;; esac # Be sure to have absolute directory names. case $ac_val in [\\/$]* | ?:[\\/]* ) continue;; NONE | '' ) case $ac_var in *prefix ) continue;; esac;; esac as_fn_error $? "expected an absolute directory name for --$ac_var: $ac_val" done # There might be people who depend on the old broken behavior: `$host' # used to hold the argument of --host etc. # FIXME: To remove some day. build=$build_alias host=$host_alias target=$target_alias # FIXME: To remove some day. if test "x$host_alias" != x; then if test "x$build_alias" = x; then cross_compiling=maybe elif test "x$build_alias" != "x$host_alias"; then cross_compiling=yes fi fi ac_tool_prefix= test -n "$host_alias" && ac_tool_prefix=$host_alias- test "$silent" = yes && exec 6>/dev/null ac_pwd=`pwd` && test -n "$ac_pwd" && ac_ls_di=`ls -di .` && ac_pwd_ls_di=`cd "$ac_pwd" && ls -di .` || as_fn_error $? "working directory cannot be determined" test "X$ac_ls_di" = "X$ac_pwd_ls_di" || as_fn_error $? "pwd does not report name of working directory" # Find the source files, if location was not specified. if test -z "$srcdir"; then ac_srcdir_defaulted=yes # Try the directory containing this script, then the parent directory. ac_confdir=`$as_dirname -- "$as_myself" || $as_expr X"$as_myself" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ X"$as_myself" : 'X\(//\)[^/]' \| \ X"$as_myself" : 'X\(//\)$' \| \ X"$as_myself" : 'X\(/\)' \| . 2>/dev/null || $as_echo X"$as_myself" | sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/ q } /^X\(\/\/\)[^/].*/{ s//\1/ q } /^X\(\/\/\)$/{ s//\1/ q } /^X\(\/\).*/{ s//\1/ q } s/.*/./; q'` srcdir=$ac_confdir if test ! -r "$srcdir/$ac_unique_file"; then srcdir=.. fi else ac_srcdir_defaulted=no fi if test ! -r "$srcdir/$ac_unique_file"; then test "$ac_srcdir_defaulted" = yes && srcdir="$ac_confdir or .." as_fn_error $? "cannot find sources ($ac_unique_file) in $srcdir" fi ac_msg="sources are in $srcdir, but \`cd $srcdir' does not work" ac_abs_confdir=`( cd "$srcdir" && test -r "./$ac_unique_file" || as_fn_error $? "$ac_msg" pwd)` # When building in place, set srcdir=. if test "$ac_abs_confdir" = "$ac_pwd"; then srcdir=. fi # Remove unnecessary trailing slashes from srcdir. # Double slashes in file names in object file debugging info # mess up M-x gdb in Emacs. case $srcdir in */) srcdir=`expr "X$srcdir" : 'X\(.*[^/]\)' \| "X$srcdir" : 'X\(.*\)'`;; esac for ac_var in $ac_precious_vars; do eval ac_env_${ac_var}_set=\${${ac_var}+set} eval ac_env_${ac_var}_value=\$${ac_var} eval ac_cv_env_${ac_var}_set=\${${ac_var}+set} eval ac_cv_env_${ac_var}_value=\$${ac_var} done # # Report the --help message. # if test "$ac_init_help" = "long"; then # Omit some internal or obsolete options to make the list less imposing. # This message is too long to be a string in the A/UX 3.1 sh. cat <<_ACEOF \`configure' configures this package to adapt to many kinds of systems. Usage: $0 [OPTION]... [VAR=VALUE]... To assign environment variables (e.g., CC, CFLAGS...), specify them as VAR=VALUE. See below for descriptions of some of the useful variables. Defaults for the options are specified in brackets. Configuration: -h, --help display this help and exit --help=short display options specific to this package --help=recursive display the short help of all the included packages -V, --version display version information and exit -q, --quiet, --silent do not print \`checking ...' messages --cache-file=FILE cache test results in FILE [disabled] -C, --config-cache alias for \`--cache-file=config.cache' -n, --no-create do not create output files --srcdir=DIR find the sources in DIR [configure dir or \`..'] Installation directories: --prefix=PREFIX install architecture-independent files in PREFIX [$ac_default_prefix] --exec-prefix=EPREFIX install architecture-dependent files in EPREFIX [PREFIX] By default, \`make install' will install all the files in \`$ac_default_prefix/bin', \`$ac_default_prefix/lib' etc. You can specify an installation prefix other than \`$ac_default_prefix' using \`--prefix', for instance \`--prefix=\$HOME'. For better control, use the options below. Fine tuning of the installation directories: --bindir=DIR user executables [EPREFIX/bin] --sbindir=DIR system admin executables [EPREFIX/sbin] --libexecdir=DIR program executables [EPREFIX/libexec] --sysconfdir=DIR read-only single-machine data [PREFIX/etc] --sharedstatedir=DIR modifiable architecture-independent data [PREFIX/com] --localstatedir=DIR modifiable single-machine data [PREFIX/var] --libdir=DIR object code libraries [EPREFIX/lib] --includedir=DIR C header files [PREFIX/include] --oldincludedir=DIR C header files for non-gcc [/usr/include] --datarootdir=DIR read-only arch.-independent data root [PREFIX/share] --datadir=DIR read-only architecture-independent data [DATAROOTDIR] --infodir=DIR info documentation [DATAROOTDIR/info] --localedir=DIR locale-dependent data [DATAROOTDIR/locale] --mandir=DIR man documentation [DATAROOTDIR/man] --docdir=DIR documentation root [DATAROOTDIR/doc/PACKAGE] --htmldir=DIR html documentation [DOCDIR] --dvidir=DIR dvi documentation [DOCDIR] --pdfdir=DIR pdf documentation [DOCDIR] --psdir=DIR ps documentation [DOCDIR] _ACEOF cat <<\_ACEOF _ACEOF fi if test -n "$ac_init_help"; then cat <<\_ACEOF Optional Features: --disable-option-checking ignore unrecognized --enable/--with options --disable-FEATURE do not include FEATURE (same as --enable-FEATURE=no) --enable-FEATURE[=ARG] include FEATURE [ARG=yes] --disable-igate Disable all IGate codes --enable-agwpe Enable AGWPE socket interface code. Optional Packages: --with-PACKAGE[=ARG] use PACKAGE [ARG=yes] --without-PACKAGE do not use PACKAGE (same as --with-PACKAGE=no) --with-embedded When desiring to target as embedded --with-erlangstorage When desiring a longer term backing storage on erlang datasets. NOT compatible with EMBEDDED, REQUIRES FILESYSTEM! --without-pthread When desiring not to use pthread subsystem --with-pthreads (mistyped pthread) When desiring use pthread subsystem --with-openssl=DIR Include OpenSSL support (requires OpenSSL >= 0.9.7) Some influential environment variables: CC C compiler command CFLAGS C compiler flags LDFLAGS linker flags, e.g. -L if you have libraries in a nonstandard directory LIBS libraries to pass to the linker, e.g. -l CPPFLAGS (Objective) C/C++ preprocessor flags, e.g. -I if you have headers in a nonstandard directory CPP C preprocessor Use these variables to override the choices made by `configure' or to help it to find libraries and programs with nonstandard names/locations. Report bugs to the package provider. _ACEOF ac_status=$? fi if test "$ac_init_help" = "recursive"; then # If there are subdirs, report their specific --help. for ac_dir in : $ac_subdirs_all; do test "x$ac_dir" = x: && continue test -d "$ac_dir" || { cd "$srcdir" && ac_pwd=`pwd` && srcdir=. && test -d "$ac_dir"; } || continue ac_builddir=. case "$ac_dir" in .) ac_dir_suffix= ac_top_builddir_sub=. ac_top_build_prefix= ;; *) ac_dir_suffix=/`$as_echo "$ac_dir" | sed 's|^\.[\\/]||'` # A ".." for each directory in $ac_dir_suffix. ac_top_builddir_sub=`$as_echo "$ac_dir_suffix" | sed 's|/[^\\/]*|/..|g;s|/||'` case $ac_top_builddir_sub in "") ac_top_builddir_sub=. ac_top_build_prefix= ;; *) ac_top_build_prefix=$ac_top_builddir_sub/ ;; esac ;; esac ac_abs_top_builddir=$ac_pwd ac_abs_builddir=$ac_pwd$ac_dir_suffix # for backward compatibility: ac_top_builddir=$ac_top_build_prefix case $srcdir in .) # We are building in place. ac_srcdir=. ac_top_srcdir=$ac_top_builddir_sub ac_abs_top_srcdir=$ac_pwd ;; [\\/]* | ?:[\\/]* ) # Absolute name. ac_srcdir=$srcdir$ac_dir_suffix; ac_top_srcdir=$srcdir ac_abs_top_srcdir=$srcdir ;; *) # Relative name. ac_srcdir=$ac_top_build_prefix$srcdir$ac_dir_suffix ac_top_srcdir=$ac_top_build_prefix$srcdir ac_abs_top_srcdir=$ac_pwd/$srcdir ;; esac ac_abs_srcdir=$ac_abs_top_srcdir$ac_dir_suffix cd "$ac_dir" || { ac_status=$?; continue; } # Check for guested configure. if test -f "$ac_srcdir/configure.gnu"; then echo && $SHELL "$ac_srcdir/configure.gnu" --help=recursive elif test -f "$ac_srcdir/configure"; then echo && $SHELL "$ac_srcdir/configure" --help=recursive else $as_echo "$as_me: WARNING: no configuration information is in $ac_dir" >&2 fi || ac_status=$? cd "$ac_pwd" || { ac_status=$?; break; } done fi test -n "$ac_init_help" && exit $ac_status if $ac_init_version; then cat <<\_ACEOF configure generated by GNU Autoconf 2.69 Copyright (C) 2012 Free Software Foundation, Inc. This configure script is free software; the Free Software Foundation gives unlimited permission to copy, distribute and modify it. _ACEOF exit fi ## ------------------------ ## ## Autoconf initialization. ## ## ------------------------ ## # ac_fn_c_try_compile LINENO # -------------------------- # Try to compile conftest.$ac_ext, and return whether this succeeded. ac_fn_c_try_compile () { as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack rm -f conftest.$ac_objext if { { ac_try="$ac_compile" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" $as_echo "$ac_try_echo"; } >&5 (eval "$ac_compile") 2>conftest.err ac_status=$? if test -s conftest.err; then grep -v '^ *+' conftest.err >conftest.er1 cat conftest.er1 >&5 mv -f conftest.er1 conftest.err fi $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } && { test -z "$ac_c_werror_flag" || test ! -s conftest.err } && test -s conftest.$ac_objext; then : ac_retval=0 else $as_echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_retval=1 fi eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno as_fn_set_status $ac_retval } # ac_fn_c_try_compile # ac_fn_c_try_cpp LINENO # ---------------------- # Try to preprocess conftest.$ac_ext, and return whether this succeeded. ac_fn_c_try_cpp () { as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack if { { ac_try="$ac_cpp conftest.$ac_ext" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" $as_echo "$ac_try_echo"; } >&5 (eval "$ac_cpp conftest.$ac_ext") 2>conftest.err ac_status=$? if test -s conftest.err; then grep -v '^ *+' conftest.err >conftest.er1 cat conftest.er1 >&5 mv -f conftest.er1 conftest.err fi $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } > conftest.i && { test -z "$ac_c_preproc_warn_flag$ac_c_werror_flag" || test ! -s conftest.err }; then : ac_retval=0 else $as_echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_retval=1 fi eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno as_fn_set_status $ac_retval } # ac_fn_c_try_cpp # ac_fn_c_check_header_mongrel LINENO HEADER VAR INCLUDES # ------------------------------------------------------- # Tests whether HEADER exists, giving a warning if it cannot be compiled using # the include files in INCLUDES and setting the cache variable VAR # accordingly. ac_fn_c_check_header_mongrel () { as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack if eval \${$3+:} false; then : { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $2" >&5 $as_echo_n "checking for $2... " >&6; } if eval \${$3+:} false; then : $as_echo_n "(cached) " >&6 fi eval ac_res=\$$3 { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 $as_echo "$ac_res" >&6; } else # Is the header compilable? { $as_echo "$as_me:${as_lineno-$LINENO}: checking $2 usability" >&5 $as_echo_n "checking $2 usability... " >&6; } cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ $4 #include <$2> _ACEOF if ac_fn_c_try_compile "$LINENO"; then : ac_header_compiler=yes else ac_header_compiler=no fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_header_compiler" >&5 $as_echo "$ac_header_compiler" >&6; } # Is the header present? { $as_echo "$as_me:${as_lineno-$LINENO}: checking $2 presence" >&5 $as_echo_n "checking $2 presence... " >&6; } cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include <$2> _ACEOF if ac_fn_c_try_cpp "$LINENO"; then : ac_header_preproc=yes else ac_header_preproc=no fi rm -f conftest.err conftest.i conftest.$ac_ext { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_header_preproc" >&5 $as_echo "$ac_header_preproc" >&6; } # So? What about this header? case $ac_header_compiler:$ac_header_preproc:$ac_c_preproc_warn_flag in #(( yes:no: ) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: accepted by the compiler, rejected by the preprocessor!" >&5 $as_echo "$as_me: WARNING: $2: accepted by the compiler, rejected by the preprocessor!" >&2;} { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: proceeding with the compiler's result" >&5 $as_echo "$as_me: WARNING: $2: proceeding with the compiler's result" >&2;} ;; no:yes:* ) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: present but cannot be compiled" >&5 $as_echo "$as_me: WARNING: $2: present but cannot be compiled" >&2;} { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: check for missing prerequisite headers?" >&5 $as_echo "$as_me: WARNING: $2: check for missing prerequisite headers?" >&2;} { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: see the Autoconf documentation" >&5 $as_echo "$as_me: WARNING: $2: see the Autoconf documentation" >&2;} { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: section \"Present But Cannot Be Compiled\"" >&5 $as_echo "$as_me: WARNING: $2: section \"Present But Cannot Be Compiled\"" >&2;} { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: proceeding with the compiler's result" >&5 $as_echo "$as_me: WARNING: $2: proceeding with the compiler's result" >&2;} ;; esac { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $2" >&5 $as_echo_n "checking for $2... " >&6; } if eval \${$3+:} false; then : $as_echo_n "(cached) " >&6 else eval "$3=\$ac_header_compiler" fi eval ac_res=\$$3 { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 $as_echo "$ac_res" >&6; } fi eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno } # ac_fn_c_check_header_mongrel # ac_fn_c_try_run LINENO # ---------------------- # Try to link conftest.$ac_ext, and return whether this succeeded. Assumes # that executables *can* be run. ac_fn_c_try_run () { as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack if { { ac_try="$ac_link" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" $as_echo "$ac_try_echo"; } >&5 (eval "$ac_link") 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } && { ac_try='./conftest$ac_exeext' { { case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" $as_echo "$ac_try_echo"; } >&5 (eval "$ac_try") 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; }; then : ac_retval=0 else $as_echo "$as_me: program exited with status $ac_status" >&5 $as_echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_retval=$ac_status fi rm -rf conftest.dSYM conftest_ipa8_conftest.oo eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno as_fn_set_status $ac_retval } # ac_fn_c_try_run # ac_fn_c_check_header_compile LINENO HEADER VAR INCLUDES # ------------------------------------------------------- # Tests whether HEADER exists and can be compiled using the include files in # INCLUDES, setting the cache variable VAR accordingly. ac_fn_c_check_header_compile () { as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $2" >&5 $as_echo_n "checking for $2... " >&6; } if eval \${$3+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ $4 #include <$2> _ACEOF if ac_fn_c_try_compile "$LINENO"; then : eval "$3=yes" else eval "$3=no" fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi eval ac_res=\$$3 { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 $as_echo "$ac_res" >&6; } eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno } # ac_fn_c_check_header_compile # ac_fn_c_try_link LINENO # ----------------------- # Try to link conftest.$ac_ext, and return whether this succeeded. ac_fn_c_try_link () { as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack rm -f conftest.$ac_objext conftest$ac_exeext if { { ac_try="$ac_link" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" $as_echo "$ac_try_echo"; } >&5 (eval "$ac_link") 2>conftest.err ac_status=$? if test -s conftest.err; then grep -v '^ *+' conftest.err >conftest.er1 cat conftest.er1 >&5 mv -f conftest.er1 conftest.err fi $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } && { test -z "$ac_c_werror_flag" || test ! -s conftest.err } && test -s conftest$ac_exeext && { test "$cross_compiling" = yes || test -x conftest$ac_exeext }; then : ac_retval=0 else $as_echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_retval=1 fi # Delete the IPA/IPO (Inter Procedural Analysis/Optimization) information # created by the PGI compiler (conftest_ipa8_conftest.oo), as it would # interfere with the next link command; also delete a directory that is # left behind by Apple's compiler. We do this before executing the actions. rm -rf conftest.dSYM conftest_ipa8_conftest.oo eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno as_fn_set_status $ac_retval } # ac_fn_c_try_link # ac_fn_c_check_func LINENO FUNC VAR # ---------------------------------- # Tests whether FUNC exists, setting the cache variable VAR accordingly ac_fn_c_check_func () { as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $2" >&5 $as_echo_n "checking for $2... " >&6; } if eval \${$3+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ /* Define $2 to an innocuous variant, in case declares $2. For example, HP-UX 11i declares gettimeofday. */ #define $2 innocuous_$2 /* System header to define __stub macros and hopefully few prototypes, which can conflict with char $2 (); below. Prefer to if __STDC__ is defined, since exists even on freestanding compilers. */ #ifdef __STDC__ # include #else # include #endif #undef $2 /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ #ifdef __cplusplus extern "C" #endif char $2 (); /* The GNU C library defines this for functions which it implements to always fail with ENOSYS. Some functions are actually named something starting with __ and the normal name is an alias. */ #if defined __stub_$2 || defined __stub___$2 choke me #endif int main () { return $2 (); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : eval "$3=yes" else eval "$3=no" fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext fi eval ac_res=\$$3 { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 $as_echo "$ac_res" >&6; } eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno } # ac_fn_c_check_func # ac_fn_c_compute_int LINENO EXPR VAR INCLUDES # -------------------------------------------- # Tries to find the compile-time value of EXPR in a program that includes # INCLUDES, setting VAR accordingly. Returns whether the value could be # computed ac_fn_c_compute_int () { as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack if test "$cross_compiling" = yes; then # Depending upon the size, compute the lo and hi bounds. cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ $4 int main () { static int test_array [1 - 2 * !(($2) >= 0)]; test_array [0] = 0; return test_array [0]; ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : ac_lo=0 ac_mid=0 while :; do cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ $4 int main () { static int test_array [1 - 2 * !(($2) <= $ac_mid)]; test_array [0] = 0; return test_array [0]; ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : ac_hi=$ac_mid; break else as_fn_arith $ac_mid + 1 && ac_lo=$as_val if test $ac_lo -le $ac_mid; then ac_lo= ac_hi= break fi as_fn_arith 2 '*' $ac_mid + 1 && ac_mid=$as_val fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext done else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ $4 int main () { static int test_array [1 - 2 * !(($2) < 0)]; test_array [0] = 0; return test_array [0]; ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : ac_hi=-1 ac_mid=-1 while :; do cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ $4 int main () { static int test_array [1 - 2 * !(($2) >= $ac_mid)]; test_array [0] = 0; return test_array [0]; ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : ac_lo=$ac_mid; break else as_fn_arith '(' $ac_mid ')' - 1 && ac_hi=$as_val if test $ac_mid -le $ac_hi; then ac_lo= ac_hi= break fi as_fn_arith 2 '*' $ac_mid && ac_mid=$as_val fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext done else ac_lo= ac_hi= fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext # Binary search between lo and hi bounds. while test "x$ac_lo" != "x$ac_hi"; do as_fn_arith '(' $ac_hi - $ac_lo ')' / 2 + $ac_lo && ac_mid=$as_val cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ $4 int main () { static int test_array [1 - 2 * !(($2) <= $ac_mid)]; test_array [0] = 0; return test_array [0]; ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : ac_hi=$ac_mid else as_fn_arith '(' $ac_mid ')' + 1 && ac_lo=$as_val fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext done case $ac_lo in #(( ?*) eval "$3=\$ac_lo"; ac_retval=0 ;; '') ac_retval=1 ;; esac else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ $4 static long int longval () { return $2; } static unsigned long int ulongval () { return $2; } #include #include int main () { FILE *f = fopen ("conftest.val", "w"); if (! f) return 1; if (($2) < 0) { long int i = longval (); if (i != ($2)) return 1; fprintf (f, "%ld", i); } else { unsigned long int i = ulongval (); if (i != ($2)) return 1; fprintf (f, "%lu", i); } /* Do not output a trailing newline, as this causes \r\n confusion on some platforms. */ return ferror (f) || fclose (f) != 0; ; return 0; } _ACEOF if ac_fn_c_try_run "$LINENO"; then : echo >>conftest.val; read $3 config.log <<_ACEOF This file contains any messages produced by compilers while running configure, to aid debugging if configure makes a mistake. It was created by $as_me, which was generated by GNU Autoconf 2.69. Invocation command line was $ $0 $@ _ACEOF exec 5>>config.log { cat <<_ASUNAME ## --------- ## ## Platform. ## ## --------- ## hostname = `(hostname || uname -n) 2>/dev/null | sed 1q` uname -m = `(uname -m) 2>/dev/null || echo unknown` uname -r = `(uname -r) 2>/dev/null || echo unknown` uname -s = `(uname -s) 2>/dev/null || echo unknown` uname -v = `(uname -v) 2>/dev/null || echo unknown` /usr/bin/uname -p = `(/usr/bin/uname -p) 2>/dev/null || echo unknown` /bin/uname -X = `(/bin/uname -X) 2>/dev/null || echo unknown` /bin/arch = `(/bin/arch) 2>/dev/null || echo unknown` /usr/bin/arch -k = `(/usr/bin/arch -k) 2>/dev/null || echo unknown` /usr/convex/getsysinfo = `(/usr/convex/getsysinfo) 2>/dev/null || echo unknown` /usr/bin/hostinfo = `(/usr/bin/hostinfo) 2>/dev/null || echo unknown` /bin/machine = `(/bin/machine) 2>/dev/null || echo unknown` /usr/bin/oslevel = `(/usr/bin/oslevel) 2>/dev/null || echo unknown` /bin/universe = `(/bin/universe) 2>/dev/null || echo unknown` _ASUNAME as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. $as_echo "PATH: $as_dir" done IFS=$as_save_IFS } >&5 cat >&5 <<_ACEOF ## ----------- ## ## Core tests. ## ## ----------- ## _ACEOF # Keep a trace of the command line. # Strip out --no-create and --no-recursion so they do not pile up. # Strip out --silent because we don't want to record it for future runs. # Also quote any args containing shell meta-characters. # Make two passes to allow for proper duplicate-argument suppression. ac_configure_args= ac_configure_args0= ac_configure_args1= ac_must_keep_next=false for ac_pass in 1 2 do for ac_arg do case $ac_arg in -no-create | --no-c* | -n | -no-recursion | --no-r*) continue ;; -q | -quiet | --quiet | --quie | --qui | --qu | --q \ | -silent | --silent | --silen | --sile | --sil) continue ;; *\'*) ac_arg=`$as_echo "$ac_arg" | sed "s/'/'\\\\\\\\''/g"` ;; esac case $ac_pass in 1) as_fn_append ac_configure_args0 " '$ac_arg'" ;; 2) as_fn_append ac_configure_args1 " '$ac_arg'" if test $ac_must_keep_next = true; then ac_must_keep_next=false # Got value, back to normal. else case $ac_arg in *=* | --config-cache | -C | -disable-* | --disable-* \ | -enable-* | --enable-* | -gas | --g* | -nfp | --nf* \ | -q | -quiet | --q* | -silent | --sil* | -v | -verb* \ | -with-* | --with-* | -without-* | --without-* | --x) case "$ac_configure_args0 " in "$ac_configure_args1"*" '$ac_arg' "* ) continue ;; esac ;; -* ) ac_must_keep_next=true ;; esac fi as_fn_append ac_configure_args " '$ac_arg'" ;; esac done done { ac_configure_args0=; unset ac_configure_args0;} { ac_configure_args1=; unset ac_configure_args1;} # When interrupted or exit'd, cleanup temporary files, and complete # config.log. We remove comments because anyway the quotes in there # would cause problems or look ugly. # WARNING: Use '\'' to represent an apostrophe within the trap. # WARNING: Do not start the trap code with a newline, due to a FreeBSD 4.0 bug. trap 'exit_status=$? # Save into config.log some information that might help in debugging. { echo $as_echo "## ---------------- ## ## Cache variables. ## ## ---------------- ##" echo # The following way of writing the cache mishandles newlines in values, ( for ac_var in `(set) 2>&1 | sed -n '\''s/^\([a-zA-Z_][a-zA-Z0-9_]*\)=.*/\1/p'\''`; do eval ac_val=\$$ac_var case $ac_val in #( *${as_nl}*) case $ac_var in #( *_cv_*) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: cache variable $ac_var contains a newline" >&5 $as_echo "$as_me: WARNING: cache variable $ac_var contains a newline" >&2;} ;; esac case $ac_var in #( _ | IFS | as_nl) ;; #( BASH_ARGV | BASH_SOURCE) eval $ac_var= ;; #( *) { eval $ac_var=; unset $ac_var;} ;; esac ;; esac done (set) 2>&1 | case $as_nl`(ac_space='\'' '\''; set) 2>&1` in #( *${as_nl}ac_space=\ *) sed -n \ "s/'\''/'\''\\\\'\'''\''/g; s/^\\([_$as_cr_alnum]*_cv_[_$as_cr_alnum]*\\)=\\(.*\\)/\\1='\''\\2'\''/p" ;; #( *) sed -n "/^[_$as_cr_alnum]*_cv_[_$as_cr_alnum]*=/p" ;; esac | sort ) echo $as_echo "## ----------------- ## ## Output variables. ## ## ----------------- ##" echo for ac_var in $ac_subst_vars do eval ac_val=\$$ac_var case $ac_val in *\'\''*) ac_val=`$as_echo "$ac_val" | sed "s/'\''/'\''\\\\\\\\'\'''\''/g"`;; esac $as_echo "$ac_var='\''$ac_val'\''" done | sort echo if test -n "$ac_subst_files"; then $as_echo "## ------------------- ## ## File substitutions. ## ## ------------------- ##" echo for ac_var in $ac_subst_files do eval ac_val=\$$ac_var case $ac_val in *\'\''*) ac_val=`$as_echo "$ac_val" | sed "s/'\''/'\''\\\\\\\\'\'''\''/g"`;; esac $as_echo "$ac_var='\''$ac_val'\''" done | sort echo fi if test -s confdefs.h; then $as_echo "## ----------- ## ## confdefs.h. ## ## ----------- ##" echo cat confdefs.h echo fi test "$ac_signal" != 0 && $as_echo "$as_me: caught signal $ac_signal" $as_echo "$as_me: exit $exit_status" } >&5 rm -f core *.core core.conftest.* && rm -f -r conftest* confdefs* conf$$* $ac_clean_files && exit $exit_status ' 0 for ac_signal in 1 2 13 15; do trap 'ac_signal='$ac_signal'; as_fn_exit 1' $ac_signal done ac_signal=0 # confdefs.h avoids OS command line length limits that DEFS can exceed. rm -f -r conftest* confdefs.h $as_echo "/* confdefs.h */" > confdefs.h # Predefined preprocessor variables. cat >>confdefs.h <<_ACEOF #define PACKAGE_NAME "$PACKAGE_NAME" _ACEOF cat >>confdefs.h <<_ACEOF #define PACKAGE_TARNAME "$PACKAGE_TARNAME" _ACEOF cat >>confdefs.h <<_ACEOF #define PACKAGE_VERSION "$PACKAGE_VERSION" _ACEOF cat >>confdefs.h <<_ACEOF #define PACKAGE_STRING "$PACKAGE_STRING" _ACEOF cat >>confdefs.h <<_ACEOF #define PACKAGE_BUGREPORT "$PACKAGE_BUGREPORT" _ACEOF cat >>confdefs.h <<_ACEOF #define PACKAGE_URL "$PACKAGE_URL" _ACEOF # Let the site file select an alternate cache file if it wants to. # Prefer an explicitly selected file to automatically selected ones. ac_site_file1=NONE ac_site_file2=NONE if test -n "$CONFIG_SITE"; then # We do not want a PATH search for config.site. case $CONFIG_SITE in #(( -*) ac_site_file1=./$CONFIG_SITE;; */*) ac_site_file1=$CONFIG_SITE;; *) ac_site_file1=./$CONFIG_SITE;; esac elif test "x$prefix" != xNONE; then ac_site_file1=$prefix/share/config.site ac_site_file2=$prefix/etc/config.site else ac_site_file1=$ac_default_prefix/share/config.site ac_site_file2=$ac_default_prefix/etc/config.site fi for ac_site_file in "$ac_site_file1" "$ac_site_file2" do test "x$ac_site_file" = xNONE && continue if test /dev/null != "$ac_site_file" && test -r "$ac_site_file"; then { $as_echo "$as_me:${as_lineno-$LINENO}: loading site script $ac_site_file" >&5 $as_echo "$as_me: loading site script $ac_site_file" >&6;} sed 's/^/| /' "$ac_site_file" >&5 . "$ac_site_file" \ || { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 $as_echo "$as_me: error: in \`$ac_pwd':" >&2;} as_fn_error $? "failed to load site script $ac_site_file See \`config.log' for more details" "$LINENO" 5; } fi done if test -r "$cache_file"; then # Some versions of bash will fail to source /dev/null (special files # actually), so we avoid doing that. DJGPP emulates it as a regular file. if test /dev/null != "$cache_file" && test -f "$cache_file"; then { $as_echo "$as_me:${as_lineno-$LINENO}: loading cache $cache_file" >&5 $as_echo "$as_me: loading cache $cache_file" >&6;} case $cache_file in [\\/]* | ?:[\\/]* ) . "$cache_file";; *) . "./$cache_file";; esac fi else { $as_echo "$as_me:${as_lineno-$LINENO}: creating cache $cache_file" >&5 $as_echo "$as_me: creating cache $cache_file" >&6;} >$cache_file fi # Check that the precious variables saved in the cache have kept the same # value. ac_cache_corrupted=false for ac_var in $ac_precious_vars; do eval ac_old_set=\$ac_cv_env_${ac_var}_set eval ac_new_set=\$ac_env_${ac_var}_set eval ac_old_val=\$ac_cv_env_${ac_var}_value eval ac_new_val=\$ac_env_${ac_var}_value case $ac_old_set,$ac_new_set in set,) { $as_echo "$as_me:${as_lineno-$LINENO}: error: \`$ac_var' was set to \`$ac_old_val' in the previous run" >&5 $as_echo "$as_me: error: \`$ac_var' was set to \`$ac_old_val' in the previous run" >&2;} ac_cache_corrupted=: ;; ,set) { $as_echo "$as_me:${as_lineno-$LINENO}: error: \`$ac_var' was not set in the previous run" >&5 $as_echo "$as_me: error: \`$ac_var' was not set in the previous run" >&2;} ac_cache_corrupted=: ;; ,);; *) if test "x$ac_old_val" != "x$ac_new_val"; then # differences in whitespace do not lead to failure. ac_old_val_w=`echo x $ac_old_val` ac_new_val_w=`echo x $ac_new_val` if test "$ac_old_val_w" != "$ac_new_val_w"; then { $as_echo "$as_me:${as_lineno-$LINENO}: error: \`$ac_var' has changed since the previous run:" >&5 $as_echo "$as_me: error: \`$ac_var' has changed since the previous run:" >&2;} ac_cache_corrupted=: else { $as_echo "$as_me:${as_lineno-$LINENO}: warning: ignoring whitespace changes in \`$ac_var' since the previous run:" >&5 $as_echo "$as_me: warning: ignoring whitespace changes in \`$ac_var' since the previous run:" >&2;} eval $ac_var=\$ac_old_val fi { $as_echo "$as_me:${as_lineno-$LINENO}: former value: \`$ac_old_val'" >&5 $as_echo "$as_me: former value: \`$ac_old_val'" >&2;} { $as_echo "$as_me:${as_lineno-$LINENO}: current value: \`$ac_new_val'" >&5 $as_echo "$as_me: current value: \`$ac_new_val'" >&2;} fi;; esac # Pass precious variables to config.status. if test "$ac_new_set" = set; then case $ac_new_val in *\'*) ac_arg=$ac_var=`$as_echo "$ac_new_val" | sed "s/'/'\\\\\\\\''/g"` ;; *) ac_arg=$ac_var=$ac_new_val ;; esac case " $ac_configure_args " in *" '$ac_arg' "*) ;; # Avoid dups. Use of quotes ensures accuracy. *) as_fn_append ac_configure_args " '$ac_arg'" ;; esac fi done if $ac_cache_corrupted; then { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 $as_echo "$as_me: error: in \`$ac_pwd':" >&2;} { $as_echo "$as_me:${as_lineno-$LINENO}: error: changes in the environment can compromise the build" >&5 $as_echo "$as_me: error: changes in the environment can compromise the build" >&2;} as_fn_error $? "run \`make distclean' and/or \`rm $cache_file' and start over" "$LINENO" 5 fi ## -------------------- ## ## Main body of script. ## ## -------------------- ## ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu VERSION="`cat VERSION`" PACKAGE=aprx { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether ${MAKE-make} sets \$(MAKE)" >&5 $as_echo_n "checking whether ${MAKE-make} sets \$(MAKE)... " >&6; } set x ${MAKE-make} ac_make=`$as_echo "$2" | sed 's/+/p/g; s/[^a-zA-Z0-9_]/_/g'` if eval \${ac_cv_prog_make_${ac_make}_set+:} false; then : $as_echo_n "(cached) " >&6 else cat >conftest.make <<\_ACEOF SHELL = /bin/sh all: @echo '@@@%%%=$(MAKE)=@@@%%%' _ACEOF # GNU make sometimes prints "make[1]: Entering ...", which would confuse us. case `${MAKE-make} -f conftest.make 2>/dev/null` in *@@@%%%=?*=@@@%%%*) eval ac_cv_prog_make_${ac_make}_set=yes;; *) eval ac_cv_prog_make_${ac_make}_set=no;; esac rm -f conftest.make fi if eval test \$ac_cv_prog_make_${ac_make}_set = yes; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 $as_echo "yes" >&6; } SET_MAKE= else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } SET_MAKE="MAKE=${MAKE-make}" fi ac_config_headers="$ac_config_headers config.h" ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}gcc", so it can be a program name with args. set dummy ${ac_tool_prefix}gcc; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_CC+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$CC"; then ac_cv_prog_CC="$CC" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_CC="${ac_tool_prefix}gcc" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi CC=$ac_cv_prog_CC if test -n "$CC"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CC" >&5 $as_echo "$CC" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi fi if test -z "$ac_cv_prog_CC"; then ac_ct_CC=$CC # Extract the first word of "gcc", so it can be a program name with args. set dummy gcc; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_ac_ct_CC+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$ac_ct_CC"; then ac_cv_prog_ac_ct_CC="$ac_ct_CC" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_ac_ct_CC="gcc" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi ac_ct_CC=$ac_cv_prog_ac_ct_CC if test -n "$ac_ct_CC"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_CC" >&5 $as_echo "$ac_ct_CC" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi if test "x$ac_ct_CC" = x; then CC="" else case $cross_compiling:$ac_tool_warned in yes:) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 $as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac CC=$ac_ct_CC fi else CC="$ac_cv_prog_CC" fi if test -z "$CC"; then if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}cc", so it can be a program name with args. set dummy ${ac_tool_prefix}cc; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_CC+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$CC"; then ac_cv_prog_CC="$CC" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_CC="${ac_tool_prefix}cc" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi CC=$ac_cv_prog_CC if test -n "$CC"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CC" >&5 $as_echo "$CC" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi fi fi if test -z "$CC"; then # Extract the first word of "cc", so it can be a program name with args. set dummy cc; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_CC+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$CC"; then ac_cv_prog_CC="$CC" # Let the user override the test. else ac_prog_rejected=no as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then if test "$as_dir/$ac_word$ac_exec_ext" = "/usr/ucb/cc"; then ac_prog_rejected=yes continue fi ac_cv_prog_CC="cc" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS if test $ac_prog_rejected = yes; then # We found a bogon in the path, so make sure we never use it. set dummy $ac_cv_prog_CC shift if test $# != 0; then # We chose a different compiler from the bogus one. # However, it has the same basename, so the bogon will be chosen # first if we set CC to just the basename; use the full file name. shift ac_cv_prog_CC="$as_dir/$ac_word${1+' '}$@" fi fi fi fi CC=$ac_cv_prog_CC if test -n "$CC"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CC" >&5 $as_echo "$CC" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi fi if test -z "$CC"; then if test -n "$ac_tool_prefix"; then for ac_prog in cl.exe do # Extract the first word of "$ac_tool_prefix$ac_prog", so it can be a program name with args. set dummy $ac_tool_prefix$ac_prog; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_CC+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$CC"; then ac_cv_prog_CC="$CC" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_CC="$ac_tool_prefix$ac_prog" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi CC=$ac_cv_prog_CC if test -n "$CC"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CC" >&5 $as_echo "$CC" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi test -n "$CC" && break done fi if test -z "$CC"; then ac_ct_CC=$CC for ac_prog in cl.exe do # Extract the first word of "$ac_prog", so it can be a program name with args. set dummy $ac_prog; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_ac_ct_CC+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$ac_ct_CC"; then ac_cv_prog_ac_ct_CC="$ac_ct_CC" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_ac_ct_CC="$ac_prog" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi ac_ct_CC=$ac_cv_prog_ac_ct_CC if test -n "$ac_ct_CC"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_CC" >&5 $as_echo "$ac_ct_CC" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi test -n "$ac_ct_CC" && break done if test "x$ac_ct_CC" = x; then CC="" else case $cross_compiling:$ac_tool_warned in yes:) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 $as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac CC=$ac_ct_CC fi fi fi test -z "$CC" && { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 $as_echo "$as_me: error: in \`$ac_pwd':" >&2;} as_fn_error $? "no acceptable C compiler found in \$PATH See \`config.log' for more details" "$LINENO" 5; } # Provide some information about the compiler. $as_echo "$as_me:${as_lineno-$LINENO}: checking for C compiler version" >&5 set X $ac_compile ac_compiler=$2 for ac_option in --version -v -V -qversion; do { { ac_try="$ac_compiler $ac_option >&5" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" $as_echo "$ac_try_echo"; } >&5 (eval "$ac_compiler $ac_option >&5") 2>conftest.err ac_status=$? if test -s conftest.err; then sed '10a\ ... rest of stderr output deleted ... 10q' conftest.err >conftest.er1 cat conftest.er1 >&5 fi rm -f conftest.er1 conftest.err $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } done cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { ; return 0; } _ACEOF ac_clean_files_save=$ac_clean_files ac_clean_files="$ac_clean_files a.out a.out.dSYM a.exe b.out" # Try to create an executable without -o first, disregard a.out. # It will help us diagnose broken compilers, and finding out an intuition # of exeext. { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether the C compiler works" >&5 $as_echo_n "checking whether the C compiler works... " >&6; } ac_link_default=`$as_echo "$ac_link" | sed 's/ -o *conftest[^ ]*//'` # The possible output files: ac_files="a.out conftest.exe conftest a.exe a_out.exe b.out conftest.*" ac_rmfiles= for ac_file in $ac_files do case $ac_file in *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.dSYM | *.o | *.obj ) ;; * ) ac_rmfiles="$ac_rmfiles $ac_file";; esac done rm -f $ac_rmfiles if { { ac_try="$ac_link_default" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" $as_echo "$ac_try_echo"; } >&5 (eval "$ac_link_default") 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; then : # Autoconf-2.13 could set the ac_cv_exeext variable to `no'. # So ignore a value of `no', otherwise this would lead to `EXEEXT = no' # in a Makefile. We should not override ac_cv_exeext if it was cached, # so that the user can short-circuit this test for compilers unknown to # Autoconf. for ac_file in $ac_files '' do test -f "$ac_file" || continue case $ac_file in *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.dSYM | *.o | *.obj ) ;; [ab].out ) # We found the default executable, but exeext='' is most # certainly right. break;; *.* ) if test "${ac_cv_exeext+set}" = set && test "$ac_cv_exeext" != no; then :; else ac_cv_exeext=`expr "$ac_file" : '[^.]*\(\..*\)'` fi # We set ac_cv_exeext here because the later test for it is not # safe: cross compilers may not add the suffix if given an `-o' # argument, so we may need to know it at that point already. # Even if this section looks crufty: it has the advantage of # actually working. break;; * ) break;; esac done test "$ac_cv_exeext" = no && ac_cv_exeext= else ac_file='' fi if test -z "$ac_file"; then : { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } $as_echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 $as_echo "$as_me: error: in \`$ac_pwd':" >&2;} as_fn_error 77 "C compiler cannot create executables See \`config.log' for more details" "$LINENO" 5; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 $as_echo "yes" >&6; } fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking for C compiler default output file name" >&5 $as_echo_n "checking for C compiler default output file name... " >&6; } { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_file" >&5 $as_echo "$ac_file" >&6; } ac_exeext=$ac_cv_exeext rm -f -r a.out a.out.dSYM a.exe conftest$ac_cv_exeext b.out ac_clean_files=$ac_clean_files_save { $as_echo "$as_me:${as_lineno-$LINENO}: checking for suffix of executables" >&5 $as_echo_n "checking for suffix of executables... " >&6; } if { { ac_try="$ac_link" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" $as_echo "$ac_try_echo"; } >&5 (eval "$ac_link") 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; then : # If both `conftest.exe' and `conftest' are `present' (well, observable) # catch `conftest.exe'. For instance with Cygwin, `ls conftest' will # work properly (i.e., refer to `conftest.exe'), while it won't with # `rm'. for ac_file in conftest.exe conftest conftest.*; do test -f "$ac_file" || continue case $ac_file in *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.dSYM | *.o | *.obj ) ;; *.* ) ac_cv_exeext=`expr "$ac_file" : '[^.]*\(\..*\)'` break;; * ) break;; esac done else { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 $as_echo "$as_me: error: in \`$ac_pwd':" >&2;} as_fn_error $? "cannot compute suffix of executables: cannot compile and link See \`config.log' for more details" "$LINENO" 5; } fi rm -f conftest conftest$ac_cv_exeext { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_exeext" >&5 $as_echo "$ac_cv_exeext" >&6; } rm -f conftest.$ac_ext EXEEXT=$ac_cv_exeext ac_exeext=$EXEEXT cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include int main () { FILE *f = fopen ("conftest.out", "w"); return ferror (f) || fclose (f) != 0; ; return 0; } _ACEOF ac_clean_files="$ac_clean_files conftest.out" # Check that the compiler produces executables we can run. If not, either # the compiler is broken, or we cross compile. { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether we are cross compiling" >&5 $as_echo_n "checking whether we are cross compiling... " >&6; } if test "$cross_compiling" != yes; then { { ac_try="$ac_link" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" $as_echo "$ac_try_echo"; } >&5 (eval "$ac_link") 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } if { ac_try='./conftest$ac_cv_exeext' { { case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" $as_echo "$ac_try_echo"; } >&5 (eval "$ac_try") 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; }; then cross_compiling=no else if test "$cross_compiling" = maybe; then cross_compiling=yes else { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 $as_echo "$as_me: error: in \`$ac_pwd':" >&2;} as_fn_error $? "cannot run C compiled programs. If you meant to cross compile, use \`--host'. See \`config.log' for more details" "$LINENO" 5; } fi fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $cross_compiling" >&5 $as_echo "$cross_compiling" >&6; } rm -f conftest.$ac_ext conftest$ac_cv_exeext conftest.out ac_clean_files=$ac_clean_files_save { $as_echo "$as_me:${as_lineno-$LINENO}: checking for suffix of object files" >&5 $as_echo_n "checking for suffix of object files... " >&6; } if ${ac_cv_objext+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { ; return 0; } _ACEOF rm -f conftest.o conftest.obj if { { ac_try="$ac_compile" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" $as_echo "$ac_try_echo"; } >&5 (eval "$ac_compile") 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; then : for ac_file in conftest.o conftest.obj conftest.*; do test -f "$ac_file" || continue; case $ac_file in *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.dSYM ) ;; *) ac_cv_objext=`expr "$ac_file" : '.*\.\(.*\)'` break;; esac done else $as_echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 $as_echo "$as_me: error: in \`$ac_pwd':" >&2;} as_fn_error $? "cannot compute suffix of object files: cannot compile See \`config.log' for more details" "$LINENO" 5; } fi rm -f conftest.$ac_cv_objext conftest.$ac_ext fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_objext" >&5 $as_echo "$ac_cv_objext" >&6; } OBJEXT=$ac_cv_objext ac_objext=$OBJEXT { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether we are using the GNU C compiler" >&5 $as_echo_n "checking whether we are using the GNU C compiler... " >&6; } if ${ac_cv_c_compiler_gnu+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { #ifndef __GNUC__ choke me #endif ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : ac_compiler_gnu=yes else ac_compiler_gnu=no fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext ac_cv_c_compiler_gnu=$ac_compiler_gnu fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_c_compiler_gnu" >&5 $as_echo "$ac_cv_c_compiler_gnu" >&6; } if test $ac_compiler_gnu = yes; then GCC=yes else GCC= fi ac_test_CFLAGS=${CFLAGS+set} ac_save_CFLAGS=$CFLAGS { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $CC accepts -g" >&5 $as_echo_n "checking whether $CC accepts -g... " >&6; } if ${ac_cv_prog_cc_g+:} false; then : $as_echo_n "(cached) " >&6 else ac_save_c_werror_flag=$ac_c_werror_flag ac_c_werror_flag=yes ac_cv_prog_cc_g=no CFLAGS="-g" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : ac_cv_prog_cc_g=yes else CFLAGS="" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : else ac_c_werror_flag=$ac_save_c_werror_flag CFLAGS="-g" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : ac_cv_prog_cc_g=yes fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext ac_c_werror_flag=$ac_save_c_werror_flag fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cc_g" >&5 $as_echo "$ac_cv_prog_cc_g" >&6; } if test "$ac_test_CFLAGS" = set; then CFLAGS=$ac_save_CFLAGS elif test $ac_cv_prog_cc_g = yes; then if test "$GCC" = yes; then CFLAGS="-g -O2" else CFLAGS="-g" fi else if test "$GCC" = yes; then CFLAGS="-O2" else CFLAGS= fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $CC option to accept ISO C89" >&5 $as_echo_n "checking for $CC option to accept ISO C89... " >&6; } if ${ac_cv_prog_cc_c89+:} false; then : $as_echo_n "(cached) " >&6 else ac_cv_prog_cc_c89=no ac_save_CC=$CC cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include #include struct stat; /* Most of the following tests are stolen from RCS 5.7's src/conf.sh. */ struct buf { int x; }; FILE * (*rcsopen) (struct buf *, struct stat *, int); static char *e (p, i) char **p; int i; { return p[i]; } static char *f (char * (*g) (char **, int), char **p, ...) { char *s; va_list v; va_start (v,p); s = g (p, va_arg (v,int)); va_end (v); return s; } /* OSF 4.0 Compaq cc is some sort of almost-ANSI by default. It has function prototypes and stuff, but not '\xHH' hex character constants. These don't provoke an error unfortunately, instead are silently treated as 'x'. The following induces an error, until -std is added to get proper ANSI mode. Curiously '\x00'!='x' always comes out true, for an array size at least. It's necessary to write '\x00'==0 to get something that's true only with -std. */ int osf4_cc_array ['\x00' == 0 ? 1 : -1]; /* IBM C 6 for AIX is almost-ANSI by default, but it replaces macro parameters inside strings and character constants. */ #define FOO(x) 'x' int xlc6_cc_array[FOO(a) == 'x' ? 1 : -1]; int test (int i, double x); struct s1 {int (*f) (int a);}; struct s2 {int (*f) (double a);}; int pairnames (int, char **, FILE *(*)(struct buf *, struct stat *, int), int, int); int argc; char **argv; int main () { return f (e, argv, 0) != argv[0] || f (e, argv, 1) != argv[1]; ; return 0; } _ACEOF for ac_arg in '' -qlanglvl=extc89 -qlanglvl=ansi -std \ -Ae "-Aa -D_HPUX_SOURCE" "-Xc -D__EXTENSIONS__" do CC="$ac_save_CC $ac_arg" if ac_fn_c_try_compile "$LINENO"; then : ac_cv_prog_cc_c89=$ac_arg fi rm -f core conftest.err conftest.$ac_objext test "x$ac_cv_prog_cc_c89" != "xno" && break done rm -f conftest.$ac_ext CC=$ac_save_CC fi # AC_CACHE_VAL case "x$ac_cv_prog_cc_c89" in x) { $as_echo "$as_me:${as_lineno-$LINENO}: result: none needed" >&5 $as_echo "none needed" >&6; } ;; xno) { $as_echo "$as_me:${as_lineno-$LINENO}: result: unsupported" >&5 $as_echo "unsupported" >&6; } ;; *) CC="$CC $ac_cv_prog_cc_c89" { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cc_c89" >&5 $as_echo "$ac_cv_prog_cc_c89" >&6; } ;; esac if test "x$ac_cv_prog_cc_c89" != xno; then : fi ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu { $as_echo "$as_me:${as_lineno-$LINENO}: checking how to run the C preprocessor" >&5 $as_echo_n "checking how to run the C preprocessor... " >&6; } # On Suns, sometimes $CPP names a directory. if test -n "$CPP" && test -d "$CPP"; then CPP= fi if test -z "$CPP"; then if ${ac_cv_prog_CPP+:} false; then : $as_echo_n "(cached) " >&6 else # Double quotes because CPP needs to be expanded for CPP in "$CC -E" "$CC -E -traditional-cpp" "/lib/cpp" do ac_preproc_ok=false for ac_c_preproc_warn_flag in '' yes do # Use a header file that comes with gcc, so configuring glibc # with a fresh cross-compiler works. # Prefer to if __STDC__ is defined, since # exists even on freestanding compilers. # On the NeXT, cc -E runs the code through the compiler's parser, # not just through cpp. "Syntax error" is here to catch this case. cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #ifdef __STDC__ # include #else # include #endif Syntax error _ACEOF if ac_fn_c_try_cpp "$LINENO"; then : else # Broken: fails on valid input. continue fi rm -f conftest.err conftest.i conftest.$ac_ext # OK, works on sane cases. Now check whether nonexistent headers # can be detected and how. cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include _ACEOF if ac_fn_c_try_cpp "$LINENO"; then : # Broken: success on invalid input. continue else # Passes both tests. ac_preproc_ok=: break fi rm -f conftest.err conftest.i conftest.$ac_ext done # Because of `break', _AC_PREPROC_IFELSE's cleaning code was skipped. rm -f conftest.i conftest.err conftest.$ac_ext if $ac_preproc_ok; then : break fi done ac_cv_prog_CPP=$CPP fi CPP=$ac_cv_prog_CPP else ac_cv_prog_CPP=$CPP fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CPP" >&5 $as_echo "$CPP" >&6; } ac_preproc_ok=false for ac_c_preproc_warn_flag in '' yes do # Use a header file that comes with gcc, so configuring glibc # with a fresh cross-compiler works. # Prefer to if __STDC__ is defined, since # exists even on freestanding compilers. # On the NeXT, cc -E runs the code through the compiler's parser, # not just through cpp. "Syntax error" is here to catch this case. cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #ifdef __STDC__ # include #else # include #endif Syntax error _ACEOF if ac_fn_c_try_cpp "$LINENO"; then : else # Broken: fails on valid input. continue fi rm -f conftest.err conftest.i conftest.$ac_ext # OK, works on sane cases. Now check whether nonexistent headers # can be detected and how. cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include _ACEOF if ac_fn_c_try_cpp "$LINENO"; then : # Broken: success on invalid input. continue else # Passes both tests. ac_preproc_ok=: break fi rm -f conftest.err conftest.i conftest.$ac_ext done # Because of `break', _AC_PREPROC_IFELSE's cleaning code was skipped. rm -f conftest.i conftest.err conftest.$ac_ext if $ac_preproc_ok; then : else { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 $as_echo "$as_me: error: in \`$ac_pwd':" >&2;} as_fn_error $? "C preprocessor \"$CPP\" fails sanity check See \`config.log' for more details" "$LINENO" 5; } fi ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu { $as_echo "$as_me:${as_lineno-$LINENO}: checking for grep that handles long lines and -e" >&5 $as_echo_n "checking for grep that handles long lines and -e... " >&6; } if ${ac_cv_path_GREP+:} false; then : $as_echo_n "(cached) " >&6 else if test -z "$GREP"; then ac_path_GREP_found=false # Loop through the user's path and test for each of PROGNAME-LIST as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH$PATH_SEPARATOR/usr/xpg4/bin do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_prog in grep ggrep; do for ac_exec_ext in '' $ac_executable_extensions; do ac_path_GREP="$as_dir/$ac_prog$ac_exec_ext" as_fn_executable_p "$ac_path_GREP" || continue # Check for GNU ac_path_GREP and select it if it is found. # Check for GNU $ac_path_GREP case `"$ac_path_GREP" --version 2>&1` in *GNU*) ac_cv_path_GREP="$ac_path_GREP" ac_path_GREP_found=:;; *) ac_count=0 $as_echo_n 0123456789 >"conftest.in" while : do cat "conftest.in" "conftest.in" >"conftest.tmp" mv "conftest.tmp" "conftest.in" cp "conftest.in" "conftest.nl" $as_echo 'GREP' >> "conftest.nl" "$ac_path_GREP" -e 'GREP$' -e '-(cannot match)-' < "conftest.nl" >"conftest.out" 2>/dev/null || break diff "conftest.out" "conftest.nl" >/dev/null 2>&1 || break as_fn_arith $ac_count + 1 && ac_count=$as_val if test $ac_count -gt ${ac_path_GREP_max-0}; then # Best one so far, save it but keep looking for a better one ac_cv_path_GREP="$ac_path_GREP" ac_path_GREP_max=$ac_count fi # 10*(2^10) chars as input seems more than enough test $ac_count -gt 10 && break done rm -f conftest.in conftest.tmp conftest.nl conftest.out;; esac $ac_path_GREP_found && break 3 done done done IFS=$as_save_IFS if test -z "$ac_cv_path_GREP"; then as_fn_error $? "no acceptable grep could be found in $PATH$PATH_SEPARATOR/usr/xpg4/bin" "$LINENO" 5 fi else ac_cv_path_GREP=$GREP fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_path_GREP" >&5 $as_echo "$ac_cv_path_GREP" >&6; } GREP="$ac_cv_path_GREP" { $as_echo "$as_me:${as_lineno-$LINENO}: checking for egrep" >&5 $as_echo_n "checking for egrep... " >&6; } if ${ac_cv_path_EGREP+:} false; then : $as_echo_n "(cached) " >&6 else if echo a | $GREP -E '(a|b)' >/dev/null 2>&1 then ac_cv_path_EGREP="$GREP -E" else if test -z "$EGREP"; then ac_path_EGREP_found=false # Loop through the user's path and test for each of PROGNAME-LIST as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH$PATH_SEPARATOR/usr/xpg4/bin do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_prog in egrep; do for ac_exec_ext in '' $ac_executable_extensions; do ac_path_EGREP="$as_dir/$ac_prog$ac_exec_ext" as_fn_executable_p "$ac_path_EGREP" || continue # Check for GNU ac_path_EGREP and select it if it is found. # Check for GNU $ac_path_EGREP case `"$ac_path_EGREP" --version 2>&1` in *GNU*) ac_cv_path_EGREP="$ac_path_EGREP" ac_path_EGREP_found=:;; *) ac_count=0 $as_echo_n 0123456789 >"conftest.in" while : do cat "conftest.in" "conftest.in" >"conftest.tmp" mv "conftest.tmp" "conftest.in" cp "conftest.in" "conftest.nl" $as_echo 'EGREP' >> "conftest.nl" "$ac_path_EGREP" 'EGREP$' < "conftest.nl" >"conftest.out" 2>/dev/null || break diff "conftest.out" "conftest.nl" >/dev/null 2>&1 || break as_fn_arith $ac_count + 1 && ac_count=$as_val if test $ac_count -gt ${ac_path_EGREP_max-0}; then # Best one so far, save it but keep looking for a better one ac_cv_path_EGREP="$ac_path_EGREP" ac_path_EGREP_max=$ac_count fi # 10*(2^10) chars as input seems more than enough test $ac_count -gt 10 && break done rm -f conftest.in conftest.tmp conftest.nl conftest.out;; esac $ac_path_EGREP_found && break 3 done done done IFS=$as_save_IFS if test -z "$ac_cv_path_EGREP"; then as_fn_error $? "no acceptable egrep could be found in $PATH$PATH_SEPARATOR/usr/xpg4/bin" "$LINENO" 5 fi else ac_cv_path_EGREP=$EGREP fi fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_path_EGREP" >&5 $as_echo "$ac_cv_path_EGREP" >&6; } EGREP="$ac_cv_path_EGREP" if test $ac_cv_c_compiler_gnu = yes; then { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $CC needs -traditional" >&5 $as_echo_n "checking whether $CC needs -traditional... " >&6; } if ${ac_cv_prog_gcc_traditional+:} false; then : $as_echo_n "(cached) " >&6 else ac_pattern="Autoconf.*'x'" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include Autoconf TIOCGETP _ACEOF if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | $EGREP "$ac_pattern" >/dev/null 2>&1; then : ac_cv_prog_gcc_traditional=yes else ac_cv_prog_gcc_traditional=no fi rm -f conftest* if test $ac_cv_prog_gcc_traditional = no; then cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include Autoconf TCGETA _ACEOF if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | $EGREP "$ac_pattern" >/dev/null 2>&1; then : ac_cv_prog_gcc_traditional=yes fi rm -f conftest* fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_gcc_traditional" >&5 $as_echo "$ac_cv_prog_gcc_traditional" >&6; } if test $ac_cv_prog_gcc_traditional = yes; then CC="$CC -traditional" fi fi if test -z "$LD" ; then LD="$CC" fi LD="$LD" MACHINE="`uname -m`" if test "$MACHINE" == "i686" -o "$MACHINE" == "i386"; then CFLAGS_ARCH="-march=i686" fi OS="`uname`" if test "$OS" == "Darwin"; then CFLAGS_ARCH="" fi AX_CHECK_GNU_MAKE() { $as_echo "$as_me:${as_lineno-$LINENO}: checking for ANSI C header files" >&5 $as_echo_n "checking for ANSI C header files... " >&6; } if ${ac_cv_header_stdc+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include #include #include #include int main () { ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : ac_cv_header_stdc=yes else ac_cv_header_stdc=no fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext if test $ac_cv_header_stdc = yes; then # SunOS 4.x string.h does not declare mem*, contrary to ANSI. cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include _ACEOF if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | $EGREP "memchr" >/dev/null 2>&1; then : else ac_cv_header_stdc=no fi rm -f conftest* fi if test $ac_cv_header_stdc = yes; then # ISC 2.0.2 stdlib.h does not declare free, contrary to ANSI. cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include _ACEOF if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | $EGREP "free" >/dev/null 2>&1; then : else ac_cv_header_stdc=no fi rm -f conftest* fi if test $ac_cv_header_stdc = yes; then # /bin/cc in Irix-4.0.5 gets non-ANSI ctype macros unless using -ansi. if test "$cross_compiling" = yes; then : : else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include #include #if ((' ' & 0x0FF) == 0x020) # define ISLOWER(c) ('a' <= (c) && (c) <= 'z') # define TOUPPER(c) (ISLOWER(c) ? 'A' + ((c) - 'a') : (c)) #else # define ISLOWER(c) \ (('a' <= (c) && (c) <= 'i') \ || ('j' <= (c) && (c) <= 'r') \ || ('s' <= (c) && (c) <= 'z')) # define TOUPPER(c) (ISLOWER(c) ? ((c) | 0x40) : (c)) #endif #define XOR(e, f) (((e) && !(f)) || (!(e) && (f))) int main () { int i; for (i = 0; i < 256; i++) if (XOR (islower (i), ISLOWER (i)) || toupper (i) != TOUPPER (i)) return 2; return 0; } _ACEOF if ac_fn_c_try_run "$LINENO"; then : else ac_cv_header_stdc=no fi rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ conftest.$ac_objext conftest.beam conftest.$ac_ext fi fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_header_stdc" >&5 $as_echo "$ac_cv_header_stdc" >&6; } if test $ac_cv_header_stdc = yes; then $as_echo "#define STDC_HEADERS 1" >>confdefs.h fi # On IRIX 5.3, sys/types and inttypes.h are conflicting. for ac_header in sys/types.h sys/stat.h stdlib.h string.h memory.h strings.h \ inttypes.h stdint.h unistd.h do : as_ac_Header=`$as_echo "ac_cv_header_$ac_header" | $as_tr_sh` ac_fn_c_check_header_compile "$LINENO" "$ac_header" "$as_ac_Header" "$ac_includes_default " if eval test \"x\$"$as_ac_Header"\" = x"yes"; then : cat >>confdefs.h <<_ACEOF #define `$as_echo "HAVE_$ac_header" | $as_tr_cpp` 1 _ACEOF fi done for ac_header in time.h sys/time.h stdlib.h stddef.h stdint.h do : as_ac_Header=`$as_echo "ac_cv_header_$ac_header" | $as_tr_sh` ac_fn_c_check_header_mongrel "$LINENO" "$ac_header" "$as_ac_Header" "$ac_includes_default" if eval test \"x\$"$as_ac_Header"\" = x"yes"; then : cat >>confdefs.h <<_ACEOF #define `$as_echo "HAVE_$ac_header" | $as_tr_cpp` 1 _ACEOF fi done for ac_header in string.h strings.h do : as_ac_Header=`$as_echo "ac_cv_header_$ac_header" | $as_tr_sh` ac_fn_c_check_header_mongrel "$LINENO" "$ac_header" "$as_ac_Header" "$ac_includes_default" if eval test \"x\$"$as_ac_Header"\" = x"yes"; then : cat >>confdefs.h <<_ACEOF #define `$as_echo "HAVE_$ac_header" | $as_tr_cpp` 1 _ACEOF fi done for ac_header in pty.h do : ac_fn_c_check_header_mongrel "$LINENO" "pty.h" "ac_cv_header_pty_h" "$ac_includes_default" if test "x$ac_cv_header_pty_h" = xyes; then : cat >>confdefs.h <<_ACEOF #define HAVE_PTY_H 1 _ACEOF fi done for ac_header in pthread.h do : ac_fn_c_check_header_mongrel "$LINENO" "pthread.h" "ac_cv_header_pthread_h" "$ac_includes_default" if test "x$ac_cv_header_pthread_h" = xyes; then : cat >>confdefs.h <<_ACEOF #define HAVE_PTHREAD_H 1 _ACEOF fi done for ac_header in alloca.h do : ac_fn_c_check_header_mongrel "$LINENO" "alloca.h" "ac_cv_header_alloca_h" "$ac_includes_default" if test "x$ac_cv_header_alloca_h" = xyes; then : cat >>confdefs.h <<_ACEOF #define HAVE_ALLOCA_H 1 _ACEOF $as_echo "#define HAVE_ALLOCA_H 1" >>confdefs.h fi done for ac_header in poll.h do : ac_fn_c_check_header_mongrel "$LINENO" "poll.h" "ac_cv_header_poll_h" "$ac_includes_default" if test "x$ac_cv_header_poll_h" = xyes; then : cat >>confdefs.h <<_ACEOF #define HAVE_POLL_H 1 _ACEOF $as_echo "#define HAVE_POLL_H 1" >>confdefs.h fi done for ac_header in sys/epoll.h do : ac_fn_c_check_header_mongrel "$LINENO" "sys/epoll.h" "ac_cv_header_sys_epoll_h" "$ac_includes_default" if test "x$ac_cv_header_sys_epoll_h" = xyes; then : cat >>confdefs.h <<_ACEOF #define HAVE_SYS_EPOLL_H 1 _ACEOF $as_echo "#define HAVE_SYS_EPOLL_H 1" >>confdefs.h fi done for ac_header in netinet/sctp.h do : ac_fn_c_check_header_mongrel "$LINENO" "netinet/sctp.h" "ac_cv_header_netinet_sctp_h" "$ac_includes_default" if test "x$ac_cv_header_netinet_sctp_h" = xyes; then : cat >>confdefs.h <<_ACEOF #define HAVE_NETINET_SCTP_H 1 _ACEOF $as_echo "#define HAVE_NETINET_SCTP_H 1" >>confdefs.h fi done for ac_header in stdarg.h varargs.h sys/wait.h do : as_ac_Header=`$as_echo "ac_cv_header_$ac_header" | $as_tr_sh` ac_fn_c_check_header_mongrel "$LINENO" "$ac_header" "$as_ac_Header" "$ac_includes_default" if eval test \"x\$"$as_ac_Header"\" = x"yes"; then : cat >>confdefs.h <<_ACEOF #define `$as_echo "HAVE_$ac_header" | $as_tr_cpp` 1 _ACEOF fi done for ac_func in vprintf do : ac_fn_c_check_func "$LINENO" "vprintf" "ac_cv_func_vprintf" if test "x$ac_cv_func_vprintf" = xyes; then : cat >>confdefs.h <<_ACEOF #define HAVE_VPRINTF 1 _ACEOF ac_fn_c_check_func "$LINENO" "_doprnt" "ac_cv_func__doprnt" if test "x$ac_cv_func__doprnt" = xyes; then : $as_echo "#define HAVE_DOPRNT 1" >>confdefs.h fi fi done { $as_echo "$as_me:${as_lineno-$LINENO}: result: ** Using C compiler: $CC" >&5 $as_echo "** Using C compiler: $CC" >&6; } { $as_echo "$as_me:${as_lineno-$LINENO}: result: ** Using CFLAGS: $CFLAGS" >&5 $as_echo "** Using CFLAGS: $CFLAGS" >&6; } { $as_echo "$as_me:${as_lineno-$LINENO}: result: ** Using CPPDEP: $CPPDEP" >&5 $as_echo "** Using CPPDEP: $CPPDEP" >&6; } { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether byte ordering is bigendian" >&5 $as_echo_n "checking whether byte ordering is bigendian... " >&6; } if ${ac_cv_c_bigendian+:} false; then : $as_echo_n "(cached) " >&6 else ac_cv_c_bigendian=unknown # See if we're dealing with a universal compiler. cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #ifndef __APPLE_CC__ not a universal capable compiler #endif typedef int dummy; _ACEOF if ac_fn_c_try_compile "$LINENO"; then : # Check for potential -arch flags. It is not universal unless # there are at least two -arch flags with different values. ac_arch= ac_prev= for ac_word in $CC $CFLAGS $CPPFLAGS $LDFLAGS; do if test -n "$ac_prev"; then case $ac_word in i?86 | x86_64 | ppc | ppc64) if test -z "$ac_arch" || test "$ac_arch" = "$ac_word"; then ac_arch=$ac_word else ac_cv_c_bigendian=universal break fi ;; esac ac_prev= elif test "x$ac_word" = "x-arch"; then ac_prev=arch fi done fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext if test $ac_cv_c_bigendian = unknown; then # See if sys/param.h defines the BYTE_ORDER macro. cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include #include int main () { #if ! (defined BYTE_ORDER && defined BIG_ENDIAN \ && defined LITTLE_ENDIAN && BYTE_ORDER && BIG_ENDIAN \ && LITTLE_ENDIAN) bogus endian macros #endif ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : # It does; now see whether it defined to BIG_ENDIAN or not. cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include #include int main () { #if BYTE_ORDER != BIG_ENDIAN not big endian #endif ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : ac_cv_c_bigendian=yes else ac_cv_c_bigendian=no fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi if test $ac_cv_c_bigendian = unknown; then # See if defines _LITTLE_ENDIAN or _BIG_ENDIAN (e.g., Solaris). cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include int main () { #if ! (defined _LITTLE_ENDIAN || defined _BIG_ENDIAN) bogus endian macros #endif ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : # It does; now see whether it defined to _BIG_ENDIAN or not. cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include int main () { #ifndef _BIG_ENDIAN not big endian #endif ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : ac_cv_c_bigendian=yes else ac_cv_c_bigendian=no fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi if test $ac_cv_c_bigendian = unknown; then # Compile a test program. if test "$cross_compiling" = yes; then : # Try to guess by grepping values from an object file. cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ short int ascii_mm[] = { 0x4249, 0x4765, 0x6E44, 0x6961, 0x6E53, 0x7953, 0 }; short int ascii_ii[] = { 0x694C, 0x5454, 0x656C, 0x6E45, 0x6944, 0x6E61, 0 }; int use_ascii (int i) { return ascii_mm[i] + ascii_ii[i]; } short int ebcdic_ii[] = { 0x89D3, 0xE3E3, 0x8593, 0x95C5, 0x89C4, 0x9581, 0 }; short int ebcdic_mm[] = { 0xC2C9, 0xC785, 0x95C4, 0x8981, 0x95E2, 0xA8E2, 0 }; int use_ebcdic (int i) { return ebcdic_mm[i] + ebcdic_ii[i]; } extern int foo; int main () { return use_ascii (foo) == use_ebcdic (foo); ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : if grep BIGenDianSyS conftest.$ac_objext >/dev/null; then ac_cv_c_bigendian=yes fi if grep LiTTleEnDian conftest.$ac_objext >/dev/null ; then if test "$ac_cv_c_bigendian" = unknown; then ac_cv_c_bigendian=no else # finding both strings is unlikely to happen, but who knows? ac_cv_c_bigendian=unknown fi fi fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ $ac_includes_default int main () { /* Are we little or big endian? From Harbison&Steele. */ union { long int l; char c[sizeof (long int)]; } u; u.l = 1; return u.c[sizeof (long int) - 1] == 1; ; return 0; } _ACEOF if ac_fn_c_try_run "$LINENO"; then : ac_cv_c_bigendian=no else ac_cv_c_bigendian=yes fi rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ conftest.$ac_objext conftest.beam conftest.$ac_ext fi fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_c_bigendian" >&5 $as_echo "$ac_cv_c_bigendian" >&6; } case $ac_cv_c_bigendian in #( yes) $as_echo "#define WORDS_BIGENDIAN 1" >>confdefs.h ;; #( no) ;; #( universal) $as_echo "#define AC_APPLE_UNIVERSAL_BUILD 1" >>confdefs.h ;; #( *) as_fn_error $? "unknown endianness presetting ac_cv_c_bigendian=no (or yes) will help" "$LINENO" 5 ;; esac # The cast to long int works around a bug in the HP C Compiler # version HP92453-01 B.11.11.23709.GP, which incorrectly rejects # declarations like `int a3[[(sizeof (unsigned char)) >= 0]];'. # This bug is HP SR number 8606223364. { $as_echo "$as_me:${as_lineno-$LINENO}: checking size of void *" >&5 $as_echo_n "checking size of void *... " >&6; } if ${ac_cv_sizeof_void_p+:} false; then : $as_echo_n "(cached) " >&6 else if ac_fn_c_compute_int "$LINENO" "(long int) (sizeof (void *))" "ac_cv_sizeof_void_p" "$ac_includes_default"; then : else if test "$ac_cv_type_void_p" = yes; then { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 $as_echo "$as_me: error: in \`$ac_pwd':" >&2;} as_fn_error 77 "cannot compute sizeof (void *) See \`config.log' for more details" "$LINENO" 5; } else ac_cv_sizeof_void_p=0 fi fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_sizeof_void_p" >&5 $as_echo "$ac_cv_sizeof_void_p" >&6; } cat >>confdefs.h <<_ACEOF #define SIZEOF_VOID_P $ac_cv_sizeof_void_p _ACEOF # The cast to long int works around a bug in the HP C Compiler # version HP92453-01 B.11.11.23709.GP, which incorrectly rejects # declarations like `int a3[[(sizeof (unsigned char)) >= 0]];'. # This bug is HP SR number 8606223364. { $as_echo "$as_me:${as_lineno-$LINENO}: checking size of short" >&5 $as_echo_n "checking size of short... " >&6; } if ${ac_cv_sizeof_short+:} false; then : $as_echo_n "(cached) " >&6 else if ac_fn_c_compute_int "$LINENO" "(long int) (sizeof (short))" "ac_cv_sizeof_short" "$ac_includes_default"; then : else if test "$ac_cv_type_short" = yes; then { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 $as_echo "$as_me: error: in \`$ac_pwd':" >&2;} as_fn_error 77 "cannot compute sizeof (short) See \`config.log' for more details" "$LINENO" 5; } else ac_cv_sizeof_short=0 fi fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_sizeof_short" >&5 $as_echo "$ac_cv_sizeof_short" >&6; } cat >>confdefs.h <<_ACEOF #define SIZEOF_SHORT $ac_cv_sizeof_short _ACEOF # The cast to long int works around a bug in the HP C Compiler # version HP92453-01 B.11.11.23709.GP, which incorrectly rejects # declarations like `int a3[[(sizeof (unsigned char)) >= 0]];'. # This bug is HP SR number 8606223364. { $as_echo "$as_me:${as_lineno-$LINENO}: checking size of int" >&5 $as_echo_n "checking size of int... " >&6; } if ${ac_cv_sizeof_int+:} false; then : $as_echo_n "(cached) " >&6 else if ac_fn_c_compute_int "$LINENO" "(long int) (sizeof (int))" "ac_cv_sizeof_int" "$ac_includes_default"; then : else if test "$ac_cv_type_int" = yes; then { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 $as_echo "$as_me: error: in \`$ac_pwd':" >&2;} as_fn_error 77 "cannot compute sizeof (int) See \`config.log' for more details" "$LINENO" 5; } else ac_cv_sizeof_int=0 fi fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_sizeof_int" >&5 $as_echo "$ac_cv_sizeof_int" >&6; } cat >>confdefs.h <<_ACEOF #define SIZEOF_INT $ac_cv_sizeof_int _ACEOF # The cast to long int works around a bug in the HP C Compiler # version HP92453-01 B.11.11.23709.GP, which incorrectly rejects # declarations like `int a3[[(sizeof (unsigned char)) >= 0]];'. # This bug is HP SR number 8606223364. { $as_echo "$as_me:${as_lineno-$LINENO}: checking size of long" >&5 $as_echo_n "checking size of long... " >&6; } if ${ac_cv_sizeof_long+:} false; then : $as_echo_n "(cached) " >&6 else if ac_fn_c_compute_int "$LINENO" "(long int) (sizeof (long))" "ac_cv_sizeof_long" "$ac_includes_default"; then : else if test "$ac_cv_type_long" = yes; then { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 $as_echo "$as_me: error: in \`$ac_pwd':" >&2;} as_fn_error 77 "cannot compute sizeof (long) See \`config.log' for more details" "$LINENO" 5; } else ac_cv_sizeof_long=0 fi fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_sizeof_long" >&5 $as_echo "$ac_cv_sizeof_long" >&6; } cat >>confdefs.h <<_ACEOF #define SIZEOF_LONG $ac_cv_sizeof_long _ACEOF # The cast to long int works around a bug in the HP C Compiler # version HP92453-01 B.11.11.23709.GP, which incorrectly rejects # declarations like `int a3[[(sizeof (unsigned char)) >= 0]];'. # This bug is HP SR number 8606223364. { $as_echo "$as_me:${as_lineno-$LINENO}: checking size of double" >&5 $as_echo_n "checking size of double... " >&6; } if ${ac_cv_sizeof_double+:} false; then : $as_echo_n "(cached) " >&6 else if ac_fn_c_compute_int "$LINENO" "(long int) (sizeof (double))" "ac_cv_sizeof_double" "$ac_includes_default"; then : else if test "$ac_cv_type_double" = yes; then { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 $as_echo "$as_me: error: in \`$ac_pwd':" >&2;} as_fn_error 77 "cannot compute sizeof (double) See \`config.log' for more details" "$LINENO" 5; } else ac_cv_sizeof_double=0 fi fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_sizeof_double" >&5 $as_echo "$ac_cv_sizeof_double" >&6; } cat >>confdefs.h <<_ACEOF #define SIZEOF_DOUBLE $ac_cv_sizeof_double _ACEOF cat >>confdefs.h <<_ACEOF #define CONFIGURE_CMD "CC='$CC' CFLAGS='$CFLAGS' $0 $ac_configure_args" _ACEOF for ac_func in atan2f do : ac_fn_c_check_func "$LINENO" "atan2f" "ac_cv_func_atan2f" if test "x$ac_cv_func_atan2f" = xyes; then : cat >>confdefs.h <<_ACEOF #define HAVE_ATAN2F 1 _ACEOF else { $as_echo "$as_me:${as_lineno-$LINENO}: checking for atan2f in -lm" >&5 $as_echo_n "checking for atan2f in -lm... " >&6; } if ${ac_cv_lib_m_atan2f+:} false; then : $as_echo_n "(cached) " >&6 else ac_check_lib_save_LIBS=$LIBS LIBS="-lm $LIBS" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ #ifdef __cplusplus extern "C" #endif char atan2f (); int main () { return atan2f (); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : ac_cv_lib_m_atan2f=yes else ac_cv_lib_m_atan2f=no fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_m_atan2f" >&5 $as_echo "$ac_cv_lib_m_atan2f" >&6; } if test "x$ac_cv_lib_m_atan2f" = xyes; then : LIBM="-lm" fi fi done for ac_func in memchr memrchr gettimeofday do : as_ac_var=`$as_echo "ac_cv_func_$ac_func" | $as_tr_sh` ac_fn_c_check_func "$LINENO" "$ac_func" "$as_ac_var" if eval test \"x\$"$as_ac_var"\" = x"yes"; then : cat >>confdefs.h <<_ACEOF #define `$as_echo "HAVE_$ac_func" | $as_tr_cpp` 1 _ACEOF fi done for ac_func in openpty do : ac_fn_c_check_func "$LINENO" "openpty" "ac_cv_func_openpty" if test "x$ac_cv_func_openpty" = xyes; then : cat >>confdefs.h <<_ACEOF #define HAVE_OPENPTY 1 _ACEOF else { $as_echo "$as_me:${as_lineno-$LINENO}: checking for openpty in -lutil" >&5 $as_echo_n "checking for openpty in -lutil... " >&6; } if ${ac_cv_lib_util_openpty+:} false; then : $as_echo_n "(cached) " >&6 else ac_check_lib_save_LIBS=$LIBS LIBS="-lutil $LIBS" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ #ifdef __cplusplus extern "C" #endif char openpty (); int main () { return openpty (); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : ac_cv_lib_util_openpty=yes else ac_cv_lib_util_openpty=no fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_util_openpty" >&5 $as_echo "$ac_cv_lib_util_openpty" >&6; } if test "x$ac_cv_lib_util_openpty" = xyes; then : $as_echo "#define HAVE_OPENPTY 1" >>confdefs.h LIBS="$LIBS -lutil" fi fi done $as_echo "#define EMBEDDED 1" >>confdefs.h # Check whether --with-embedded was given. if test "${with_embedded+set}" = set; then : withval=$with_embedded; $as_echo "#define EMBEDDED 1" >>confdefs.h EMBEDDED=1 fi # Check whether --with-erlangstorage was given. if test "${with_erlangstorage+set}" = set; then : withval=$with_erlangstorage; $as_echo "#define ERLANGSTORAGE 1" >>confdefs.h ERLANGSTORAGE=1 fi # Check whether --enable-igate was given. if test "${enable_igate+set}" = set; then : enableval=$enable_igate; if test "${enable_igate}" = no ; then $as_echo "#define DISABLE_IGATE 1" >>confdefs.h fi fi # Check whether --enable-agwpe was given. if test "${enable_agwpe+set}" = set; then : enableval=$enable_agwpe; if test "${enable_agwpe}" != no ; then $as_echo "#define ENABLE_AGWPE 1" >>confdefs.h fi fi # Check whether --with-pthread was given. if test "${with_pthread+set}" = set; then : withval=$with_pthread; $as_echo "#define DISABLE_PTHREAD 1" >>confdefs.h DISABLE_PTHREAD=1 else $as_echo "#define ENABLE_PTHREAD 1" >>confdefs.h ENABLE_PTHREAD=1 fi # Check whether --with-pthreads was given. if test "${with_pthreads+set}" = set; then : withval=$with_pthreads; $as_echo "#define ENABLE_PTHREAD 1" >>confdefs.h ENABLE_PTHREAD=1 fi if test "${ENABLE_PTHREAD}" = "1" ; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: The --without-pthread option is not set, looking for pthread_create() function." >&5 $as_echo "The --without-pthread option is not set, looking for pthread_create() function." >&6; } have_pthread=no if test $have_pthread = no; then t_oldLibs="$LIBS" LIBS="$LIBS -pthread" t_oldCflags="$CFLAGS" CFLAGS="$CFLAGS -pthread" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include int main () { pthread_t pt; pthread_attr_t pat; int rc = pthread_create(&pt, &pat, NULL, NULL) ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : have_pthread=yes;{ $as_echo "$as_me:${as_lineno-$LINENO}: result: Have pthread_create()" >&5 $as_echo "Have pthread_create()" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: Not have pthread_create()" >&5 $as_echo "Not have pthread_create()" >&6; } fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext if test $have_pthread = no ; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: Failure at HAVE_PTHREAD_CREATE" >&5 $as_echo "Failure at HAVE_PTHREAD_CREATE" >&6; } else $as_echo "#define HAVE_PTHREAD_CREATE 1" >>confdefs.h { $as_echo "$as_me:${as_lineno-$LINENO}: result: Success at HAVE_PTHREAD_CREATE" >&5 $as_echo "Success at HAVE_PTHREAD_CREATE" >&6; } LIBPTHREAD="-pthread" CCPTHREAD="-pthread" fi LIBS="$t_oldLibs" CFLAGS="$t_oldCflags" fi if test $have_pthread = no; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: Failure at HAVE_PTHREAD_CREATE, trying second way." >&5 $as_echo "Failure at HAVE_PTHREAD_CREATE, trying second way." >&6; } t_oldLibs="$LIBS" LIBS="$LIBS -lpthread" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include int main () { pthread_t pt; pthread_attr_t pat; int rc = pthread_create(&pt, &pat, NULL, NULL) ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : have_pthread=yes;{ $as_echo "$as_me:${as_lineno-$LINENO}: result: Have pthread_create()" >&5 $as_echo "Have pthread_create()" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: Not have pthread_create()" >&5 $as_echo "Not have pthread_create()" >&6; } fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext if test $have_pthread = no ; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: Failure at HAVE_PTHREAD_CREATE" >&5 $as_echo "Failure at HAVE_PTHREAD_CREATE" >&6; } else $as_echo "#define HAVE_PTHREAD_CREATE 1" >>confdefs.h { $as_echo "$as_me:${as_lineno-$LINENO}: result: Success at HAVE_PTHREAD_CREATE" >&5 $as_echo "Success at HAVE_PTHREAD_CREATE" >&6; } LIBPTHREAD="-lpthread" CCPTHREAD="" fi LIBS="$t_oldLibs" CFLAGS="$t_oldCflags" fi if test $have_pthread = no; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: Still failure at HAVE_PTHREAD_CREATE, Run out of ways to set it up." >&5 $as_echo "Still failure at HAVE_PTHREAD_CREATE, Run out of ways to set it up." >&6; } fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking for library containing clock_gettime" >&5 $as_echo_n "checking for library containing clock_gettime... " >&6; } if ${ac_cv_search_clock_gettime+:} false; then : $as_echo_n "(cached) " >&6 else ac_func_search_save_LIBS=$LIBS cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ #ifdef __cplusplus extern "C" #endif char clock_gettime (); int main () { return clock_gettime (); ; return 0; } _ACEOF for ac_lib in '' rt; do if test -z "$ac_lib"; then ac_res="none required" else ac_res=-l$ac_lib LIBS="-l$ac_lib $ac_func_search_save_LIBS" fi if ac_fn_c_try_link "$LINENO"; then : ac_cv_search_clock_gettime=$ac_res fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext if ${ac_cv_search_clock_gettime+:} false; then : break fi done if ${ac_cv_search_clock_gettime+:} false; then : else ac_cv_search_clock_gettime=no fi rm conftest.$ac_ext LIBS=$ac_func_search_save_LIBS fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_search_clock_gettime" >&5 $as_echo "$ac_cv_search_clock_gettime" >&6; } ac_res=$ac_cv_search_clock_gettime if test "$ac_res" != no; then : test "$ac_res" = "none required" || LIBS="$ac_res $LIBS" $as_echo "#define HAVE_CLOCK_GETTIME 1" >>confdefs.h fi if test "$ac_cv_search_clock_gettime" = "-lrt"; then LIBRT="-lrt" fi for ac_func in getaddrinfo do : ac_fn_c_check_func "$LINENO" "getaddrinfo" "ac_cv_func_getaddrinfo" if test "x$ac_cv_func_getaddrinfo" = xyes; then : cat >>confdefs.h <<_ACEOF #define HAVE_GETADDRINFO 1 _ACEOF else { $as_echo "$as_me:${as_lineno-$LINENO}: checking for getaddrinfo in -lnsl" >&5 $as_echo_n "checking for getaddrinfo in -lnsl... " >&6; } if ${ac_cv_lib_nsl_getaddrinfo+:} false; then : $as_echo_n "(cached) " >&6 else ac_check_lib_save_LIBS=$LIBS LIBS="-lnsl $LIBS" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ #ifdef __cplusplus extern "C" #endif char getaddrinfo (); int main () { return getaddrinfo (); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : ac_cv_lib_nsl_getaddrinfo=yes else ac_cv_lib_nsl_getaddrinfo=no fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_nsl_getaddrinfo" >&5 $as_echo "$ac_cv_lib_nsl_getaddrinfo" >&6; } if test "x$ac_cv_lib_nsl_getaddrinfo" = xyes; then : LIBGETADDRINFO="-lnsl" fi fi done # # We check for various libraries # - SysVr4 style of "-lsocket" at first (unless in libc) # The hallmark is connect() routine (we presume) # ac_cv_libsocket_both=1 ac_fn_c_check_func "$LINENO" "connect" "ac_cv_func_connect" if test "x$ac_cv_func_connect" = xyes; then : ac_cv_libsocket_both=0 fi ac_fn_c_check_func "$LINENO" "gethostbyname" "ac_cv_func_gethostbyname" if test "x$ac_cv_func_gethostbyname" = xyes; then : ac_cv_libsocket_both=0 fi if test "$ac_cv_libsocket_both" = 1 ; then # Check cache if test "$ac_cv_func_socket_lxnet" = yes ; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: need -lxnet library (cached)" >&5 $as_echo "need -lxnet library (cached)" >&6; } LIBSOCKET="-lnsl -lsocket -lxnet" else if test "$ac_cv_func_socket_lsocket" = yes ; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: need -lsocket library (cached)" >&5 $as_echo "need -lsocket library (cached)" >&6; } LIBSOCKET="-lsocket" if test "$ac_cv_func_gethostbyname_lnsl" = yes ; then LIBSOCKET="-lnsl -lsocket" fi else # Well, will this work ? SysVR4, but not Sun Solaris ? { $as_echo "$as_me:${as_lineno-$LINENO}: checking for connect in -lxnet" >&5 $as_echo_n "checking for connect in -lxnet... " >&6; } if ${ac_cv_lib_xnet_connect+:} false; then : $as_echo_n "(cached) " >&6 else ac_check_lib_save_LIBS=$LIBS LIBS="-lxnet $LIBS" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ #ifdef __cplusplus extern "C" #endif char connect (); int main () { return connect (); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : ac_cv_lib_xnet_connect=yes else ac_cv_lib_xnet_connect=no fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_xnet_connect" >&5 $as_echo "$ac_cv_lib_xnet_connect" >&6; } if test "x$ac_cv_lib_xnet_connect" = xyes; then : LIBSOCKET="-lnsl -lsocket -lxnet" ac_cv_func_socket_lsocket=no ac_cv_func_socket_lxnet=yes else { $as_echo "$as_me:${as_lineno-$LINENO}: checking for connect in -lsocket" >&5 $as_echo_n "checking for connect in -lsocket... " >&6; } if ${ac_cv_lib_socket_connect+:} false; then : $as_echo_n "(cached) " >&6 else ac_check_lib_save_LIBS=$LIBS LIBS="-lsocket $LIBS" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ #ifdef __cplusplus extern "C" #endif char connect (); int main () { return connect (); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : ac_cv_lib_socket_connect=yes else ac_cv_lib_socket_connect=no fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_socket_connect" >&5 $as_echo "$ac_cv_lib_socket_connect" >&6; } if test "x$ac_cv_lib_socket_connect" = xyes; then : LIBSOCKET="-lsocket" ac_cv_func_socket_lsocket=yes else ac_cv_func_socket_lsocket=no fi if test "$ac_cv_func_socket_lsocket" = yes ; then t_oldLibs="$LIBS" LIBS="$LIBS -lsocket $LIBRESOLV" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { gethostbyname(); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : else LIBS="$LIBS -lnsl" # Add this Solaris library.. cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { gethostbyname(); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : LIBSOCKET="-lsocket -lnsl" ac_cv_func_gethostbyname_lnsl=yes else as_fn_error $? "Weird, '$LIBS' not enough to find gethostnyname() ?!" "$LINENO" 5 fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext LIBS="$t_oldLibs" fi fi fi fi fi if test "x$LIBRESOLV" = "x"; then # Ok, No -lresolv, is this enough for the _res to appear ? t_oldLibs="$LIBS" LIBS="$LIBS $LIBSOCKET" ac_cv_var__res_options=no # This following is for IRIX6.4, and I sincerely hope it # will not fail on other systems... It did! It did! # Many systems don't have idemponent headers, they need specific # includes before latter ones, or the latter ones won't be successful... cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include #include #include #include #include int main () { _res.options = RES_INIT; ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : ac_cv_var__res_options=yes fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext; if test "$ac_cv_var__res_options" != "yes"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: Can't do without -lresolv to link resolver's _res.options" >&5 $as_echo "Can't do without -lresolv to link resolver's _res.options" >&6; } LIBS="$LIBS -lresolv" fi LIBS="$t_oldLibs" fi # See about the routines that possibly exist at the libraries.. LIBS="$t_oldLibs $LIBSOCKET" for ac_func in socket socketpair do : as_ac_var=`$as_echo "ac_cv_func_$ac_func" | $as_tr_sh` ac_fn_c_check_func "$LINENO" "$ac_func" "$as_ac_var" if eval test \"x\$"$as_ac_var"\" = x"yes"; then : cat >>confdefs.h <<_ACEOF #define `$as_echo "HAVE_$ac_func" | $as_tr_cpp` 1 _ACEOF fi done LIBS="$t_oldLibs" if test "$ac_cv_func_socket" = no -a "$LIBSOCKET" != ""; then LIBS="$LIBS $LIBSOCKET" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { socket(); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : ac_cv_func_socket=yes fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext if test $ac_cv_func_socket = yes; then $as_echo "#define HAVE_SOCKET 1" >>confdefs.h { $as_echo "$as_me:${as_lineno-$LINENO}: result: Has socket() when using $LIBSOCKET" >&5 $as_echo "Has socket() when using $LIBSOCKET" >&6; } fi LIBS="$t_oldLibs" fi if test "$ac_cv_func_socketpair" = no -a "$LIBSOCKET" != ""; then LIBS="$LIBS $LIBSOCKET" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { socketpair(); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : ac_cv_func_socketpair=yes fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext if test $ac_cv_func_socketpair = yes; then $as_echo "#define HAVE_SOCKETPAIR 1" >>confdefs.h { $as_echo "$as_me:${as_lineno-$LINENO}: result: Has socketpair() when using $LIBSOCKET" >&5 $as_echo "Has socketpair() when using $LIBSOCKET" >&6; } fi LIBS="$t_oldLibs" fi # Check whether --with-openssl was given. if test "${with_openssl+set}" = set; then : withval=$with_openssl; with_openssl=$withval else with_openssl=no fi if test "$with_openssl" != "no" ; then for ac_header in openssl/ssl.h do : ac_fn_c_check_header_mongrel "$LINENO" "openssl/ssl.h" "ac_cv_header_openssl_ssl_h" "$ac_includes_default" if test "x$ac_cv_header_openssl_ssl_h" = xyes; then : cat >>confdefs.h <<_ACEOF #define HAVE_OPENSSL_SSL_H 1 _ACEOF fi done { $as_echo "$as_me:${as_lineno-$LINENO}: checking for library containing TLSv1_server_method" >&5 $as_echo_n "checking for library containing TLSv1_server_method... " >&6; } if ${ac_cv_search_TLSv1_server_method+:} false; then : $as_echo_n "(cached) " >&6 else ac_func_search_save_LIBS=$LIBS cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ #ifdef __cplusplus extern "C" #endif char TLSv1_server_method (); int main () { return TLSv1_server_method (); ; return 0; } _ACEOF for ac_lib in '' ssl; do if test -z "$ac_lib"; then ac_res="none required" else ac_res=-l$ac_lib LIBS="-l$ac_lib $ac_func_search_save_LIBS" fi if ac_fn_c_try_link "$LINENO"; then : ac_cv_search_TLSv1_server_method=$ac_res fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext if ${ac_cv_search_TLSv1_server_method+:} false; then : break fi done if ${ac_cv_search_TLSv1_server_method+:} false; then : else ac_cv_search_TLSv1_server_method=no fi rm conftest.$ac_ext LIBS=$ac_func_search_save_LIBS fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_search_TLSv1_server_method" >&5 $as_echo "$ac_cv_search_TLSv1_server_method" >&6; } ac_res=$ac_cv_search_TLSv1_server_method if test "$ac_res" != no; then : test "$ac_res" = "none required" || LIBS="$ac_res $LIBS" $as_echo "#define HAVE_TLSV1_SERVER_METHOD 1" >>confdefs.h fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking for library containing X509_free" >&5 $as_echo_n "checking for library containing X509_free... " >&6; } if ${ac_cv_search_X509_free+:} false; then : $as_echo_n "(cached) " >&6 else ac_func_search_save_LIBS=$LIBS cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ #ifdef __cplusplus extern "C" #endif char X509_free (); int main () { return X509_free (); ; return 0; } _ACEOF for ac_lib in '' crypto; do if test -z "$ac_lib"; then ac_res="none required" else ac_res=-l$ac_lib LIBS="-l$ac_lib $ac_func_search_save_LIBS" fi if ac_fn_c_try_link "$LINENO"; then : ac_cv_search_X509_free=$ac_res fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext if ${ac_cv_search_X509_free+:} false; then : break fi done if ${ac_cv_search_X509_free+:} false; then : else ac_cv_search_X509_free=no fi rm conftest.$ac_ext LIBS=$ac_func_search_save_LIBS fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_search_X509_free" >&5 $as_echo "$ac_cv_search_X509_free" >&6; } ac_res=$ac_cv_search_X509_free if test "$ac_res" != no; then : test "$ac_res" = "none required" || LIBS="$ac_res $LIBS" $as_echo "#define HAVE_X509_FREE 1" >>confdefs.h fi if test "$ac_cv_search_TLSv1_server_method" = "-lssl"; then LIBSSL="-lssl" fi if test "$ac_cv_search_X509_free" = "-lcrypto"; then LIBCRYPTO="-lcrypto" fi fi t_vers="`cat VERSION`" VERSION_STRING="`cat VERSION`" ac_config_files="$ac_config_files Makefile" cat >confcache <<\_ACEOF # This file is a shell script that caches the results of configure # tests run on this system so they can be shared between configure # scripts and configure runs, see configure's option --config-cache. # It is not useful on other systems. If it contains results you don't # want to keep, you may remove or edit it. # # config.status only pays attention to the cache file if you give it # the --recheck option to rerun configure. # # `ac_cv_env_foo' variables (set or unset) will be overridden when # loading this file, other *unset* `ac_cv_foo' will be assigned the # following values. _ACEOF # The following way of writing the cache mishandles newlines in values, # but we know of no workaround that is simple, portable, and efficient. # So, we kill variables containing newlines. # Ultrix sh set writes to stderr and can't be redirected directly, # and sets the high bit in the cache file unless we assign to the vars. ( for ac_var in `(set) 2>&1 | sed -n 's/^\([a-zA-Z_][a-zA-Z0-9_]*\)=.*/\1/p'`; do eval ac_val=\$$ac_var case $ac_val in #( *${as_nl}*) case $ac_var in #( *_cv_*) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: cache variable $ac_var contains a newline" >&5 $as_echo "$as_me: WARNING: cache variable $ac_var contains a newline" >&2;} ;; esac case $ac_var in #( _ | IFS | as_nl) ;; #( BASH_ARGV | BASH_SOURCE) eval $ac_var= ;; #( *) { eval $ac_var=; unset $ac_var;} ;; esac ;; esac done (set) 2>&1 | case $as_nl`(ac_space=' '; set) 2>&1` in #( *${as_nl}ac_space=\ *) # `set' does not quote correctly, so add quotes: double-quote # substitution turns \\\\ into \\, and sed turns \\ into \. sed -n \ "s/'/'\\\\''/g; s/^\\([_$as_cr_alnum]*_cv_[_$as_cr_alnum]*\\)=\\(.*\\)/\\1='\\2'/p" ;; #( *) # `set' quotes correctly as required by POSIX, so do not add quotes. sed -n "/^[_$as_cr_alnum]*_cv_[_$as_cr_alnum]*=/p" ;; esac | sort ) | sed ' /^ac_cv_env_/b end t clear :clear s/^\([^=]*\)=\(.*[{}].*\)$/test "${\1+set}" = set || &/ t end s/^\([^=]*\)=\(.*\)$/\1=${\1=\2}/ :end' >>confcache if diff "$cache_file" confcache >/dev/null 2>&1; then :; else if test -w "$cache_file"; then if test "x$cache_file" != "x/dev/null"; then { $as_echo "$as_me:${as_lineno-$LINENO}: updating cache $cache_file" >&5 $as_echo "$as_me: updating cache $cache_file" >&6;} if test ! -f "$cache_file" || test -h "$cache_file"; then cat confcache >"$cache_file" else case $cache_file in #( */* | ?:*) mv -f confcache "$cache_file"$$ && mv -f "$cache_file"$$ "$cache_file" ;; #( *) mv -f confcache "$cache_file" ;; esac fi fi else { $as_echo "$as_me:${as_lineno-$LINENO}: not updating unwritable cache $cache_file" >&5 $as_echo "$as_me: not updating unwritable cache $cache_file" >&6;} fi fi rm -f confcache test "x$prefix" = xNONE && prefix=$ac_default_prefix # Let make expand exec_prefix. test "x$exec_prefix" = xNONE && exec_prefix='${prefix}' DEFS=-DHAVE_CONFIG_H ac_libobjs= ac_ltlibobjs= U= for ac_i in : $LIBOBJS; do test "x$ac_i" = x: && continue # 1. Remove the extension, and $U if already installed. ac_script='s/\$U\././;s/\.o$//;s/\.obj$//' ac_i=`$as_echo "$ac_i" | sed "$ac_script"` # 2. Prepend LIBOBJDIR. When used with automake>=1.10 LIBOBJDIR # will be set to the directory where LIBOBJS objects are built. as_fn_append ac_libobjs " \${LIBOBJDIR}$ac_i\$U.$ac_objext" as_fn_append ac_ltlibobjs " \${LIBOBJDIR}$ac_i"'$U.lo' done LIBOBJS=$ac_libobjs LTLIBOBJS=$ac_ltlibobjs : "${CONFIG_STATUS=./config.status}" ac_write_fail=0 ac_clean_files_save=$ac_clean_files ac_clean_files="$ac_clean_files $CONFIG_STATUS" { $as_echo "$as_me:${as_lineno-$LINENO}: creating $CONFIG_STATUS" >&5 $as_echo "$as_me: creating $CONFIG_STATUS" >&6;} as_write_fail=0 cat >$CONFIG_STATUS <<_ASEOF || as_write_fail=1 #! $SHELL # Generated by $as_me. # Run this file to recreate the current configuration. # Compiler output produced by configure, useful for debugging # configure, is in config.log if it exists. debug=false ac_cs_recheck=false ac_cs_silent=false SHELL=\${CONFIG_SHELL-$SHELL} export SHELL _ASEOF cat >>$CONFIG_STATUS <<\_ASEOF || as_write_fail=1 ## -------------------- ## ## M4sh Initialization. ## ## -------------------- ## # Be more Bourne compatible DUALCASE=1; export DUALCASE # for MKS sh if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then : emulate sh NULLCMD=: # Pre-4.2 versions of Zsh do word splitting on ${1+"$@"}, which # is contrary to our usage. Disable this feature. alias -g '${1+"$@"}'='"$@"' setopt NO_GLOB_SUBST else case `(set -o) 2>/dev/null` in #( *posix*) : set -o posix ;; #( *) : ;; esac fi as_nl=' ' export as_nl # Printing a long string crashes Solaris 7 /usr/bin/printf. as_echo='\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\' as_echo=$as_echo$as_echo$as_echo$as_echo$as_echo as_echo=$as_echo$as_echo$as_echo$as_echo$as_echo$as_echo # Prefer a ksh shell builtin over an external printf program on Solaris, # but without wasting forks for bash or zsh. if test -z "$BASH_VERSION$ZSH_VERSION" \ && (test "X`print -r -- $as_echo`" = "X$as_echo") 2>/dev/null; then as_echo='print -r --' as_echo_n='print -rn --' elif (test "X`printf %s $as_echo`" = "X$as_echo") 2>/dev/null; then as_echo='printf %s\n' as_echo_n='printf %s' else if test "X`(/usr/ucb/echo -n -n $as_echo) 2>/dev/null`" = "X-n $as_echo"; then as_echo_body='eval /usr/ucb/echo -n "$1$as_nl"' as_echo_n='/usr/ucb/echo -n' else as_echo_body='eval expr "X$1" : "X\\(.*\\)"' as_echo_n_body='eval arg=$1; case $arg in #( *"$as_nl"*) expr "X$arg" : "X\\(.*\\)$as_nl"; arg=`expr "X$arg" : ".*$as_nl\\(.*\\)"`;; esac; expr "X$arg" : "X\\(.*\\)" | tr -d "$as_nl" ' export as_echo_n_body as_echo_n='sh -c $as_echo_n_body as_echo' fi export as_echo_body as_echo='sh -c $as_echo_body as_echo' fi # The user is always right. if test "${PATH_SEPARATOR+set}" != set; then PATH_SEPARATOR=: (PATH='/bin;/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 && { (PATH='/bin:/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 || PATH_SEPARATOR=';' } fi # IFS # We need space, tab and new line, in precisely that order. Quoting is # there to prevent editors from complaining about space-tab. # (If _AS_PATH_WALK were called with IFS unset, it would disable word # splitting by setting IFS to empty value.) IFS=" "" $as_nl" # Find who we are. Look in the path if we contain no directory separator. as_myself= case $0 in #(( *[\\/]* ) as_myself=$0 ;; *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. test -r "$as_dir/$0" && as_myself=$as_dir/$0 && break done IFS=$as_save_IFS ;; esac # We did not find ourselves, most probably we were run as `sh COMMAND' # in which case we are not to be found in the path. if test "x$as_myself" = x; then as_myself=$0 fi if test ! -f "$as_myself"; then $as_echo "$as_myself: error: cannot find myself; rerun with an absolute file name" >&2 exit 1 fi # Unset variables that we do not need and which cause bugs (e.g. in # pre-3.0 UWIN ksh). But do not cause bugs in bash 2.01; the "|| exit 1" # suppresses any "Segmentation fault" message there. '((' could # trigger a bug in pdksh 5.2.14. for as_var in BASH_ENV ENV MAIL MAILPATH do eval test x\${$as_var+set} = xset \ && ( (unset $as_var) || exit 1) >/dev/null 2>&1 && unset $as_var || : done PS1='$ ' PS2='> ' PS4='+ ' # NLS nuisances. LC_ALL=C export LC_ALL LANGUAGE=C export LANGUAGE # CDPATH. (unset CDPATH) >/dev/null 2>&1 && unset CDPATH # as_fn_error STATUS ERROR [LINENO LOG_FD] # ---------------------------------------- # Output "`basename $0`: error: ERROR" to stderr. If LINENO and LOG_FD are # provided, also output the error to LOG_FD, referencing LINENO. Then exit the # script with STATUS, using 1 if that was 0. as_fn_error () { as_status=$1; test $as_status -eq 0 && as_status=1 if test "$4"; then as_lineno=${as_lineno-"$3"} as_lineno_stack=as_lineno_stack=$as_lineno_stack $as_echo "$as_me:${as_lineno-$LINENO}: error: $2" >&$4 fi $as_echo "$as_me: error: $2" >&2 as_fn_exit $as_status } # as_fn_error # as_fn_set_status STATUS # ----------------------- # Set $? to STATUS, without forking. as_fn_set_status () { return $1 } # as_fn_set_status # as_fn_exit STATUS # ----------------- # Exit the shell with STATUS, even in a "trap 0" or "set -e" context. as_fn_exit () { set +e as_fn_set_status $1 exit $1 } # as_fn_exit # as_fn_unset VAR # --------------- # Portably unset VAR. as_fn_unset () { { eval $1=; unset $1;} } as_unset=as_fn_unset # as_fn_append VAR VALUE # ---------------------- # Append the text in VALUE to the end of the definition contained in VAR. Take # advantage of any shell optimizations that allow amortized linear growth over # repeated appends, instead of the typical quadratic growth present in naive # implementations. if (eval "as_var=1; as_var+=2; test x\$as_var = x12") 2>/dev/null; then : eval 'as_fn_append () { eval $1+=\$2 }' else as_fn_append () { eval $1=\$$1\$2 } fi # as_fn_append # as_fn_arith ARG... # ------------------ # Perform arithmetic evaluation on the ARGs, and store the result in the # global $as_val. Take advantage of shells that can avoid forks. The arguments # must be portable across $(()) and expr. if (eval "test \$(( 1 + 1 )) = 2") 2>/dev/null; then : eval 'as_fn_arith () { as_val=$(( $* )) }' else as_fn_arith () { as_val=`expr "$@" || test $? -eq 1` } fi # as_fn_arith if expr a : '\(a\)' >/dev/null 2>&1 && test "X`expr 00001 : '.*\(...\)'`" = X001; then as_expr=expr else as_expr=false fi if (basename -- /) >/dev/null 2>&1 && test "X`basename -- / 2>&1`" = "X/"; then as_basename=basename else as_basename=false fi if (as_dir=`dirname -- /` && test "X$as_dir" = X/) >/dev/null 2>&1; then as_dirname=dirname else as_dirname=false fi as_me=`$as_basename -- "$0" || $as_expr X/"$0" : '.*/\([^/][^/]*\)/*$' \| \ X"$0" : 'X\(//\)$' \| \ X"$0" : 'X\(/\)' \| . 2>/dev/null || $as_echo X/"$0" | sed '/^.*\/\([^/][^/]*\)\/*$/{ s//\1/ q } /^X\/\(\/\/\)$/{ s//\1/ q } /^X\/\(\/\).*/{ s//\1/ q } s/.*/./; q'` # Avoid depending upon Character Ranges. as_cr_letters='abcdefghijklmnopqrstuvwxyz' as_cr_LETTERS='ABCDEFGHIJKLMNOPQRSTUVWXYZ' as_cr_Letters=$as_cr_letters$as_cr_LETTERS as_cr_digits='0123456789' as_cr_alnum=$as_cr_Letters$as_cr_digits ECHO_C= ECHO_N= ECHO_T= case `echo -n x` in #((((( -n*) case `echo 'xy\c'` in *c*) ECHO_T=' ';; # ECHO_T is single tab character. xy) ECHO_C='\c';; *) echo `echo ksh88 bug on AIX 6.1` > /dev/null ECHO_T=' ';; esac;; *) ECHO_N='-n';; esac rm -f conf$$ conf$$.exe conf$$.file if test -d conf$$.dir; then rm -f conf$$.dir/conf$$.file else rm -f conf$$.dir mkdir conf$$.dir 2>/dev/null fi if (echo >conf$$.file) 2>/dev/null; then if ln -s conf$$.file conf$$ 2>/dev/null; then as_ln_s='ln -s' # ... but there are two gotchas: # 1) On MSYS, both `ln -s file dir' and `ln file dir' fail. # 2) DJGPP < 2.04 has no symlinks; `ln -s' creates a wrapper executable. # In both cases, we have to default to `cp -pR'. ln -s conf$$.file conf$$.dir 2>/dev/null && test ! -f conf$$.exe || as_ln_s='cp -pR' elif ln conf$$.file conf$$ 2>/dev/null; then as_ln_s=ln else as_ln_s='cp -pR' fi else as_ln_s='cp -pR' fi rm -f conf$$ conf$$.exe conf$$.dir/conf$$.file conf$$.file rmdir conf$$.dir 2>/dev/null # as_fn_mkdir_p # ------------- # Create "$as_dir" as a directory, including parents if necessary. as_fn_mkdir_p () { case $as_dir in #( -*) as_dir=./$as_dir;; esac test -d "$as_dir" || eval $as_mkdir_p || { as_dirs= while :; do case $as_dir in #( *\'*) as_qdir=`$as_echo "$as_dir" | sed "s/'/'\\\\\\\\''/g"`;; #'( *) as_qdir=$as_dir;; esac as_dirs="'$as_qdir' $as_dirs" as_dir=`$as_dirname -- "$as_dir" || $as_expr X"$as_dir" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ X"$as_dir" : 'X\(//\)[^/]' \| \ X"$as_dir" : 'X\(//\)$' \| \ X"$as_dir" : 'X\(/\)' \| . 2>/dev/null || $as_echo X"$as_dir" | sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/ q } /^X\(\/\/\)[^/].*/{ s//\1/ q } /^X\(\/\/\)$/{ s//\1/ q } /^X\(\/\).*/{ s//\1/ q } s/.*/./; q'` test -d "$as_dir" && break done test -z "$as_dirs" || eval "mkdir $as_dirs" } || test -d "$as_dir" || as_fn_error $? "cannot create directory $as_dir" } # as_fn_mkdir_p if mkdir -p . 2>/dev/null; then as_mkdir_p='mkdir -p "$as_dir"' else test -d ./-p && rmdir ./-p as_mkdir_p=false fi # as_fn_executable_p FILE # ----------------------- # Test if FILE is an executable regular file. as_fn_executable_p () { test -f "$1" && test -x "$1" } # as_fn_executable_p as_test_x='test -x' as_executable_p=as_fn_executable_p # Sed expression to map a string onto a valid CPP name. as_tr_cpp="eval sed 'y%*$as_cr_letters%P$as_cr_LETTERS%;s%[^_$as_cr_alnum]%_%g'" # Sed expression to map a string onto a valid variable name. as_tr_sh="eval sed 'y%*+%pp%;s%[^_$as_cr_alnum]%_%g'" exec 6>&1 ## ----------------------------------- ## ## Main body of $CONFIG_STATUS script. ## ## ----------------------------------- ## _ASEOF test $as_write_fail = 0 && chmod +x $CONFIG_STATUS || ac_write_fail=1 cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 # Save the log message, to keep $0 and so on meaningful, and to # report actual input values of CONFIG_FILES etc. instead of their # values after options handling. ac_log=" This file was extended by $as_me, which was generated by GNU Autoconf 2.69. Invocation command line was CONFIG_FILES = $CONFIG_FILES CONFIG_HEADERS = $CONFIG_HEADERS CONFIG_LINKS = $CONFIG_LINKS CONFIG_COMMANDS = $CONFIG_COMMANDS $ $0 $@ on `(hostname || uname -n) 2>/dev/null | sed 1q` " _ACEOF case $ac_config_files in *" "*) set x $ac_config_files; shift; ac_config_files=$*;; esac case $ac_config_headers in *" "*) set x $ac_config_headers; shift; ac_config_headers=$*;; esac cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 # Files that config.status was made for. config_files="$ac_config_files" config_headers="$ac_config_headers" _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 ac_cs_usage="\ \`$as_me' instantiates files and other configuration actions from templates according to the current configuration. Unless the files and actions are specified as TAGs, all are instantiated by default. Usage: $0 [OPTION]... [TAG]... -h, --help print this help, then exit -V, --version print version number and configuration settings, then exit --config print configuration, then exit -q, --quiet, --silent do not print progress messages -d, --debug don't remove temporary files --recheck update $as_me by reconfiguring in the same conditions --file=FILE[:TEMPLATE] instantiate the configuration file FILE --header=FILE[:TEMPLATE] instantiate the configuration header FILE Configuration files: $config_files Configuration headers: $config_headers Report bugs to the package provider." _ACEOF cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 ac_cs_config="`$as_echo "$ac_configure_args" | sed 's/^ //; s/[\\""\`\$]/\\\\&/g'`" ac_cs_version="\\ config.status configured by $0, generated by GNU Autoconf 2.69, with options \\"\$ac_cs_config\\" Copyright (C) 2012 Free Software Foundation, Inc. This config.status script is free software; the Free Software Foundation gives unlimited permission to copy, distribute and modify it." ac_pwd='$ac_pwd' srcdir='$srcdir' test -n "\$AWK" || AWK=awk _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 # The default lists apply if the user does not specify any file. ac_need_defaults=: while test $# != 0 do case $1 in --*=?*) ac_option=`expr "X$1" : 'X\([^=]*\)='` ac_optarg=`expr "X$1" : 'X[^=]*=\(.*\)'` ac_shift=: ;; --*=) ac_option=`expr "X$1" : 'X\([^=]*\)='` ac_optarg= ac_shift=: ;; *) ac_option=$1 ac_optarg=$2 ac_shift=shift ;; esac case $ac_option in # Handling of the options. -recheck | --recheck | --rechec | --reche | --rech | --rec | --re | --r) ac_cs_recheck=: ;; --version | --versio | --versi | --vers | --ver | --ve | --v | -V ) $as_echo "$ac_cs_version"; exit ;; --config | --confi | --conf | --con | --co | --c ) $as_echo "$ac_cs_config"; exit ;; --debug | --debu | --deb | --de | --d | -d ) debug=: ;; --file | --fil | --fi | --f ) $ac_shift case $ac_optarg in *\'*) ac_optarg=`$as_echo "$ac_optarg" | sed "s/'/'\\\\\\\\''/g"` ;; '') as_fn_error $? "missing file argument" ;; esac as_fn_append CONFIG_FILES " '$ac_optarg'" ac_need_defaults=false;; --header | --heade | --head | --hea ) $ac_shift case $ac_optarg in *\'*) ac_optarg=`$as_echo "$ac_optarg" | sed "s/'/'\\\\\\\\''/g"` ;; esac as_fn_append CONFIG_HEADERS " '$ac_optarg'" ac_need_defaults=false;; --he | --h) # Conflict between --help and --header as_fn_error $? "ambiguous option: \`$1' Try \`$0 --help' for more information.";; --help | --hel | -h ) $as_echo "$ac_cs_usage"; exit ;; -q | -quiet | --quiet | --quie | --qui | --qu | --q \ | -silent | --silent | --silen | --sile | --sil | --si | --s) ac_cs_silent=: ;; # This is an error. -*) as_fn_error $? "unrecognized option: \`$1' Try \`$0 --help' for more information." ;; *) as_fn_append ac_config_targets " $1" ac_need_defaults=false ;; esac shift done ac_configure_extra_args= if $ac_cs_silent; then exec 6>/dev/null ac_configure_extra_args="$ac_configure_extra_args --silent" fi _ACEOF cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 if \$ac_cs_recheck; then set X $SHELL '$0' $ac_configure_args \$ac_configure_extra_args --no-create --no-recursion shift \$as_echo "running CONFIG_SHELL=$SHELL \$*" >&6 CONFIG_SHELL='$SHELL' export CONFIG_SHELL exec "\$@" fi _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 exec 5>>config.log { echo sed 'h;s/./-/g;s/^.../## /;s/...$/ ##/;p;x;p;x' <<_ASBOX ## Running $as_me. ## _ASBOX $as_echo "$ac_log" } >&5 _ACEOF cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 # Handling of arguments. for ac_config_target in $ac_config_targets do case $ac_config_target in "config.h") CONFIG_HEADERS="$CONFIG_HEADERS config.h" ;; "Makefile") CONFIG_FILES="$CONFIG_FILES Makefile" ;; *) as_fn_error $? "invalid argument: \`$ac_config_target'" "$LINENO" 5;; esac done # If the user did not use the arguments to specify the items to instantiate, # then the envvar interface is used. Set only those that are not. # We use the long form for the default assignment because of an extremely # bizarre bug on SunOS 4.1.3. if $ac_need_defaults; then test "${CONFIG_FILES+set}" = set || CONFIG_FILES=$config_files test "${CONFIG_HEADERS+set}" = set || CONFIG_HEADERS=$config_headers fi # Have a temporary directory for convenience. Make it in the build tree # simply because there is no reason against having it here, and in addition, # creating and moving files from /tmp can sometimes cause problems. # Hook for its removal unless debugging. # Note that there is a small window in which the directory will not be cleaned: # after its creation but before its name has been assigned to `$tmp'. $debug || { tmp= ac_tmp= trap 'exit_status=$? : "${ac_tmp:=$tmp}" { test ! -d "$ac_tmp" || rm -fr "$ac_tmp"; } && exit $exit_status ' 0 trap 'as_fn_exit 1' 1 2 13 15 } # Create a (secure) tmp directory for tmp files. { tmp=`(umask 077 && mktemp -d "./confXXXXXX") 2>/dev/null` && test -d "$tmp" } || { tmp=./conf$$-$RANDOM (umask 077 && mkdir "$tmp") } || as_fn_error $? "cannot create a temporary directory in ." "$LINENO" 5 ac_tmp=$tmp # Set up the scripts for CONFIG_FILES section. # No need to generate them if there are no CONFIG_FILES. # This happens for instance with `./config.status config.h'. if test -n "$CONFIG_FILES"; then ac_cr=`echo X | tr X '\015'` # On cygwin, bash can eat \r inside `` if the user requested igncr. # But we know of no other shell where ac_cr would be empty at this # point, so we can use a bashism as a fallback. if test "x$ac_cr" = x; then eval ac_cr=\$\'\\r\' fi ac_cs_awk_cr=`$AWK 'BEGIN { print "a\rb" }' /dev/null` if test "$ac_cs_awk_cr" = "a${ac_cr}b"; then ac_cs_awk_cr='\\r' else ac_cs_awk_cr=$ac_cr fi echo 'BEGIN {' >"$ac_tmp/subs1.awk" && _ACEOF { echo "cat >conf$$subs.awk <<_ACEOF" && echo "$ac_subst_vars" | sed 's/.*/&!$&$ac_delim/' && echo "_ACEOF" } >conf$$subs.sh || as_fn_error $? "could not make $CONFIG_STATUS" "$LINENO" 5 ac_delim_num=`echo "$ac_subst_vars" | grep -c '^'` ac_delim='%!_!# ' for ac_last_try in false false false false false :; do . ./conf$$subs.sh || as_fn_error $? "could not make $CONFIG_STATUS" "$LINENO" 5 ac_delim_n=`sed -n "s/.*$ac_delim\$/X/p" conf$$subs.awk | grep -c X` if test $ac_delim_n = $ac_delim_num; then break elif $ac_last_try; then as_fn_error $? "could not make $CONFIG_STATUS" "$LINENO" 5 else ac_delim="$ac_delim!$ac_delim _$ac_delim!! " fi done rm -f conf$$subs.sh cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 cat >>"\$ac_tmp/subs1.awk" <<\\_ACAWK && _ACEOF sed -n ' h s/^/S["/; s/!.*/"]=/ p g s/^[^!]*!// :repl t repl s/'"$ac_delim"'$// t delim :nl h s/\(.\{148\}\)..*/\1/ t more1 s/["\\]/\\&/g; s/^/"/; s/$/\\n"\\/ p n b repl :more1 s/["\\]/\\&/g; s/^/"/; s/$/"\\/ p g s/.\{148\}// t nl :delim h s/\(.\{148\}\)..*/\1/ t more2 s/["\\]/\\&/g; s/^/"/; s/$/"/ p b :more2 s/["\\]/\\&/g; s/^/"/; s/$/"\\/ p g s/.\{148\}// t delim ' >$CONFIG_STATUS || ac_write_fail=1 rm -f conf$$subs.awk cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 _ACAWK cat >>"\$ac_tmp/subs1.awk" <<_ACAWK && for (key in S) S_is_set[key] = 1 FS = "" } { line = $ 0 nfields = split(line, field, "@") substed = 0 len = length(field[1]) for (i = 2; i < nfields; i++) { key = field[i] keylen = length(key) if (S_is_set[key]) { value = S[key] line = substr(line, 1, len) "" value "" substr(line, len + keylen + 3) len += length(value) + length(field[++i]) substed = 1 } else len += 1 + keylen } print line } _ACAWK _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 if sed "s/$ac_cr//" < /dev/null > /dev/null 2>&1; then sed "s/$ac_cr\$//; s/$ac_cr/$ac_cs_awk_cr/g" else cat fi < "$ac_tmp/subs1.awk" > "$ac_tmp/subs.awk" \ || as_fn_error $? "could not setup config files machinery" "$LINENO" 5 _ACEOF # VPATH may cause trouble with some makes, so we remove sole $(srcdir), # ${srcdir} and @srcdir@ entries from VPATH if srcdir is ".", strip leading and # trailing colons and then remove the whole line if VPATH becomes empty # (actually we leave an empty line to preserve line numbers). if test "x$srcdir" = x.; then ac_vpsub='/^[ ]*VPATH[ ]*=[ ]*/{ h s/// s/^/:/ s/[ ]*$/:/ s/:\$(srcdir):/:/g s/:\${srcdir}:/:/g s/:@srcdir@:/:/g s/^:*// s/:*$// x s/\(=[ ]*\).*/\1/ G s/\n// s/^[^=]*=[ ]*$// }' fi cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 fi # test -n "$CONFIG_FILES" # Set up the scripts for CONFIG_HEADERS section. # No need to generate them if there are no CONFIG_HEADERS. # This happens for instance with `./config.status Makefile'. if test -n "$CONFIG_HEADERS"; then cat >"$ac_tmp/defines.awk" <<\_ACAWK || BEGIN { _ACEOF # Transform confdefs.h into an awk script `defines.awk', embedded as # here-document in config.status, that substitutes the proper values into # config.h.in to produce config.h. # Create a delimiter string that does not exist in confdefs.h, to ease # handling of long lines. ac_delim='%!_!# ' for ac_last_try in false false :; do ac_tt=`sed -n "/$ac_delim/p" confdefs.h` if test -z "$ac_tt"; then break elif $ac_last_try; then as_fn_error $? "could not make $CONFIG_HEADERS" "$LINENO" 5 else ac_delim="$ac_delim!$ac_delim _$ac_delim!! " fi done # For the awk script, D is an array of macro values keyed by name, # likewise P contains macro parameters if any. Preserve backslash # newline sequences. ac_word_re=[_$as_cr_Letters][_$as_cr_alnum]* sed -n ' s/.\{148\}/&'"$ac_delim"'/g t rset :rset s/^[ ]*#[ ]*define[ ][ ]*/ / t def d :def s/\\$// t bsnl s/["\\]/\\&/g s/^ \('"$ac_word_re"'\)\(([^()]*)\)[ ]*\(.*\)/P["\1"]="\2"\ D["\1"]=" \3"/p s/^ \('"$ac_word_re"'\)[ ]*\(.*\)/D["\1"]=" \2"/p d :bsnl s/["\\]/\\&/g s/^ \('"$ac_word_re"'\)\(([^()]*)\)[ ]*\(.*\)/P["\1"]="\2"\ D["\1"]=" \3\\\\\\n"\\/p t cont s/^ \('"$ac_word_re"'\)[ ]*\(.*\)/D["\1"]=" \2\\\\\\n"\\/p t cont d :cont n s/.\{148\}/&'"$ac_delim"'/g t clear :clear s/\\$// t bsnlc s/["\\]/\\&/g; s/^/"/; s/$/"/p d :bsnlc s/["\\]/\\&/g; s/^/"/; s/$/\\\\\\n"\\/p b cont ' >$CONFIG_STATUS || ac_write_fail=1 cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 for (key in D) D_is_set[key] = 1 FS = "" } /^[\t ]*#[\t ]*(define|undef)[\t ]+$ac_word_re([\t (]|\$)/ { line = \$ 0 split(line, arg, " ") if (arg[1] == "#") { defundef = arg[2] mac1 = arg[3] } else { defundef = substr(arg[1], 2) mac1 = arg[2] } split(mac1, mac2, "(") #) macro = mac2[1] prefix = substr(line, 1, index(line, defundef) - 1) if (D_is_set[macro]) { # Preserve the white space surrounding the "#". print prefix "define", macro P[macro] D[macro] next } else { # Replace #undef with comments. This is necessary, for example, # in the case of _POSIX_SOURCE, which is predefined and required # on some systems where configure will not decide to define it. if (defundef == "undef") { print "/*", prefix defundef, macro, "*/" next } } } { print } _ACAWK _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 as_fn_error $? "could not setup config headers machinery" "$LINENO" 5 fi # test -n "$CONFIG_HEADERS" eval set X " :F $CONFIG_FILES :H $CONFIG_HEADERS " shift for ac_tag do case $ac_tag in :[FHLC]) ac_mode=$ac_tag; continue;; esac case $ac_mode$ac_tag in :[FHL]*:*);; :L* | :C*:*) as_fn_error $? "invalid tag \`$ac_tag'" "$LINENO" 5;; :[FH]-) ac_tag=-:-;; :[FH]*) ac_tag=$ac_tag:$ac_tag.in;; esac ac_save_IFS=$IFS IFS=: set x $ac_tag IFS=$ac_save_IFS shift ac_file=$1 shift case $ac_mode in :L) ac_source=$1;; :[FH]) ac_file_inputs= for ac_f do case $ac_f in -) ac_f="$ac_tmp/stdin";; *) # Look for the file first in the build tree, then in the source tree # (if the path is not absolute). The absolute path cannot be DOS-style, # because $ac_f cannot contain `:'. test -f "$ac_f" || case $ac_f in [\\/$]*) false;; *) test -f "$srcdir/$ac_f" && ac_f="$srcdir/$ac_f";; esac || as_fn_error 1 "cannot find input file: \`$ac_f'" "$LINENO" 5;; esac case $ac_f in *\'*) ac_f=`$as_echo "$ac_f" | sed "s/'/'\\\\\\\\''/g"`;; esac as_fn_append ac_file_inputs " '$ac_f'" done # Let's still pretend it is `configure' which instantiates (i.e., don't # use $as_me), people would be surprised to read: # /* config.h. Generated by config.status. */ configure_input='Generated from '` $as_echo "$*" | sed 's|^[^:]*/||;s|:[^:]*/|, |g' `' by configure.' if test x"$ac_file" != x-; then configure_input="$ac_file. $configure_input" { $as_echo "$as_me:${as_lineno-$LINENO}: creating $ac_file" >&5 $as_echo "$as_me: creating $ac_file" >&6;} fi # Neutralize special characters interpreted by sed in replacement strings. case $configure_input in #( *\&* | *\|* | *\\* ) ac_sed_conf_input=`$as_echo "$configure_input" | sed 's/[\\\\&|]/\\\\&/g'`;; #( *) ac_sed_conf_input=$configure_input;; esac case $ac_tag in *:-:* | *:-) cat >"$ac_tmp/stdin" \ || as_fn_error $? "could not create $ac_file" "$LINENO" 5 ;; esac ;; esac ac_dir=`$as_dirname -- "$ac_file" || $as_expr X"$ac_file" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ X"$ac_file" : 'X\(//\)[^/]' \| \ X"$ac_file" : 'X\(//\)$' \| \ X"$ac_file" : 'X\(/\)' \| . 2>/dev/null || $as_echo X"$ac_file" | sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/ q } /^X\(\/\/\)[^/].*/{ s//\1/ q } /^X\(\/\/\)$/{ s//\1/ q } /^X\(\/\).*/{ s//\1/ q } s/.*/./; q'` as_dir="$ac_dir"; as_fn_mkdir_p ac_builddir=. case "$ac_dir" in .) ac_dir_suffix= ac_top_builddir_sub=. ac_top_build_prefix= ;; *) ac_dir_suffix=/`$as_echo "$ac_dir" | sed 's|^\.[\\/]||'` # A ".." for each directory in $ac_dir_suffix. ac_top_builddir_sub=`$as_echo "$ac_dir_suffix" | sed 's|/[^\\/]*|/..|g;s|/||'` case $ac_top_builddir_sub in "") ac_top_builddir_sub=. ac_top_build_prefix= ;; *) ac_top_build_prefix=$ac_top_builddir_sub/ ;; esac ;; esac ac_abs_top_builddir=$ac_pwd ac_abs_builddir=$ac_pwd$ac_dir_suffix # for backward compatibility: ac_top_builddir=$ac_top_build_prefix case $srcdir in .) # We are building in place. ac_srcdir=. ac_top_srcdir=$ac_top_builddir_sub ac_abs_top_srcdir=$ac_pwd ;; [\\/]* | ?:[\\/]* ) # Absolute name. ac_srcdir=$srcdir$ac_dir_suffix; ac_top_srcdir=$srcdir ac_abs_top_srcdir=$srcdir ;; *) # Relative name. ac_srcdir=$ac_top_build_prefix$srcdir$ac_dir_suffix ac_top_srcdir=$ac_top_build_prefix$srcdir ac_abs_top_srcdir=$ac_pwd/$srcdir ;; esac ac_abs_srcdir=$ac_abs_top_srcdir$ac_dir_suffix case $ac_mode in :F) # # CONFIG_FILE # _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 # If the template does not know about datarootdir, expand it. # FIXME: This hack should be removed a few years after 2.60. ac_datarootdir_hack=; ac_datarootdir_seen= ac_sed_dataroot=' /datarootdir/ { p q } /@datadir@/p /@docdir@/p /@infodir@/p /@localedir@/p /@mandir@/p' case `eval "sed -n \"\$ac_sed_dataroot\" $ac_file_inputs"` in *datarootdir*) ac_datarootdir_seen=yes;; *@datadir@*|*@docdir@*|*@infodir@*|*@localedir@*|*@mandir@*) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $ac_file_inputs seems to ignore the --datarootdir setting" >&5 $as_echo "$as_me: WARNING: $ac_file_inputs seems to ignore the --datarootdir setting" >&2;} _ACEOF cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 ac_datarootdir_hack=' s&@datadir@&$datadir&g s&@docdir@&$docdir&g s&@infodir@&$infodir&g s&@localedir@&$localedir&g s&@mandir@&$mandir&g s&\\\${datarootdir}&$datarootdir&g' ;; esac _ACEOF # Neutralize VPATH when `$srcdir' = `.'. # Shell code in configure.ac might set extrasub. # FIXME: do we really want to maintain this feature? cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 ac_sed_extra="$ac_vpsub $extrasub _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 :t /@[a-zA-Z_][a-zA-Z_0-9]*@/!b s|@configure_input@|$ac_sed_conf_input|;t t s&@top_builddir@&$ac_top_builddir_sub&;t t s&@top_build_prefix@&$ac_top_build_prefix&;t t s&@srcdir@&$ac_srcdir&;t t s&@abs_srcdir@&$ac_abs_srcdir&;t t s&@top_srcdir@&$ac_top_srcdir&;t t s&@abs_top_srcdir@&$ac_abs_top_srcdir&;t t s&@builddir@&$ac_builddir&;t t s&@abs_builddir@&$ac_abs_builddir&;t t s&@abs_top_builddir@&$ac_abs_top_builddir&;t t $ac_datarootdir_hack " eval sed \"\$ac_sed_extra\" "$ac_file_inputs" | $AWK -f "$ac_tmp/subs.awk" \ >$ac_tmp/out || as_fn_error $? "could not create $ac_file" "$LINENO" 5 test -z "$ac_datarootdir_hack$ac_datarootdir_seen" && { ac_out=`sed -n '/\${datarootdir}/p' "$ac_tmp/out"`; test -n "$ac_out"; } && { ac_out=`sed -n '/^[ ]*datarootdir[ ]*:*=/p' \ "$ac_tmp/out"`; test -z "$ac_out"; } && { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $ac_file contains a reference to the variable \`datarootdir' which seems to be undefined. Please make sure it is defined" >&5 $as_echo "$as_me: WARNING: $ac_file contains a reference to the variable \`datarootdir' which seems to be undefined. Please make sure it is defined" >&2;} rm -f "$ac_tmp/stdin" case $ac_file in -) cat "$ac_tmp/out" && rm -f "$ac_tmp/out";; *) rm -f "$ac_file" && mv "$ac_tmp/out" "$ac_file";; esac \ || as_fn_error $? "could not create $ac_file" "$LINENO" 5 ;; :H) # # CONFIG_HEADER # if test x"$ac_file" != x-; then { $as_echo "/* $configure_input */" \ && eval '$AWK -f "$ac_tmp/defines.awk"' "$ac_file_inputs" } >"$ac_tmp/config.h" \ || as_fn_error $? "could not create $ac_file" "$LINENO" 5 if diff "$ac_file" "$ac_tmp/config.h" >/dev/null 2>&1; then { $as_echo "$as_me:${as_lineno-$LINENO}: $ac_file is unchanged" >&5 $as_echo "$as_me: $ac_file is unchanged" >&6;} else rm -f "$ac_file" mv "$ac_tmp/config.h" "$ac_file" \ || as_fn_error $? "could not create $ac_file" "$LINENO" 5 fi else $as_echo "/* $configure_input */" \ && eval '$AWK -f "$ac_tmp/defines.awk"' "$ac_file_inputs" \ || as_fn_error $? "could not create -" "$LINENO" 5 fi ;; esac done # for ac_tag as_fn_exit 0 _ACEOF ac_clean_files=$ac_clean_files_save test $ac_write_fail = 0 || as_fn_error $? "write failure creating $CONFIG_STATUS" "$LINENO" 5 # configure is writing to config.log, and then calls config.status. # config.status does its own redirection, appending to config.log. # Unfortunately, on DOS this fails, as config.log is still kept open # by configure, so config.status won't be able to write to it; its # output is simply discarded. So we exec the FD to /dev/null, # effectively closing config.log, so it can be properly (re)opened and # appended to by config.status. When coming back to configure, we # need to make the FD available again. if test "$no_create" != yes; then ac_cs_success=: ac_config_status_args= test "$silent" = yes && ac_config_status_args="$ac_config_status_args --quiet" exec 5>/dev/null $SHELL $CONFIG_STATUS $ac_config_status_args || ac_cs_success=false exec 5>>config.log # Use ||, not &&, to avoid exiting from the if with $? = 1, which # would make configure fail if this is the last instruction. $ac_cs_success || as_fn_exit 1 fi if test -n "$ac_unrecognized_opts" && test "$enable_option_checking" != no; then { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: unrecognized options: $ac_unrecognized_opts" >&5 $as_echo "$as_me: WARNING: unrecognized options: $ac_unrecognized_opts" >&2;} fi aprx-2.9.0/configure.in000664 000000 000000 00000024327 13040775352 015003 0ustar00rootroot000000 000000 dnl Process this file with autoconf to produce a configure script. AC_INIT AC_CONFIG_SRCDIR([aprx.h]) dnl For automake VERSION="`cat VERSION`" PACKAGE=aprx dnl AM_INIT_AUTOMAKE($PACKAGE, $VERSION) AC_PROG_MAKE_SET AC_CONFIG_HEADERS([config.h]) dnl Checks for programs. AC_PROG_CC AC_PROG_GCC_TRADITIONAL dnl AC_PATH_PROG(LD, ld, ld)dnl if test -z "$LD" ; then LD="$CC" fi AC_SUBST(LD,"$LD") dnl If on i686, we'll need -march=i686 to get the atomic instructions dnl On FreeBSD, the architecture is i386. MACHINE="`uname -m`" if test "$MACHINE" == "i686" -o "$MACHINE" == "i386"; then CFLAGS_ARCH="-march=i686" fi OS="`uname`" if test "$OS" == "Darwin"; then CFLAGS_ARCH="" fi AC_SUBST(CFLAGS_ARCH) dnl Check for GNU make AX_CHECK_GNU_MAKE() dnl Check for headers. AC_CHECK_HEADERS(time.h sys/time.h stdlib.h stddef.h stdint.h) AC_CHECK_HEADERS(string.h strings.h) AC_CHECK_HEADERS(pty.h) AC_CHECK_HEADERS(pthread.h) dnl Checks for system headers AC_CHECK_HEADERS([alloca.h], AC_DEFINE([HAVE_ALLOCA_H])) AC_CHECK_HEADERS([poll.h], AC_DEFINE([HAVE_POLL_H])) dnl AC_CHECK_FUNC(ppoll,,[Probably have ppoll of Linux]) AC_CHECK_HEADERS([sys/epoll.h], AC_DEFINE([HAVE_SYS_EPOLL_H])) dnl SCTP checks AC_CHECK_HEADERS([netinet/sctp.h], AC_DEFINE([HAVE_NETINET_SCTP_H])) dnl Check for varargs AC_CHECK_HEADERS(stdarg.h varargs.h sys/wait.h) AC_FUNC_VPRINTF dnl This group must be after header tests AC_MSG_RESULT([** Using C compiler: $CC]) AC_MSG_RESULT([** Using CFLAGS: $CFLAGS]) AC_MSG_RESULT([** Using CPPDEP: $CPPDEP]) AC_C_BIGENDIAN dnl AC_INLINE AC_CHECK_SIZEOF(void *) AC_CHECK_SIZEOF(short) AC_CHECK_SIZEOF(int) AC_CHECK_SIZEOF(long) AC_CHECK_SIZEOF(double) dnl AC_DEFINE_UNQUOTED(CONFIGURE_CMD,"$0 $ac_configure_args") AC_DEFINE_UNQUOTED(CONFIGURE_CMD, "CC='$CC' CFLAGS='$CFLAGS' $0 $ac_configure_args", [Configuration command line]) dnl Checks for libraries. AC_SUBST(LIBM) AC_CHECK_FUNCS(atan2f,, AC_CHECK_LIB(m, atan2f, [LIBM="-lm"])) AC_CHECK_FUNCS(memchr memrchr gettimeofday) dnl Checks for library functions. AC_CHECK_FUNCS(openpty,, AC_CHECK_LIB(util, openpty, [AC_DEFINE(HAVE_OPENPTY,1,[])] [LIBS="$LIBS -lutil"])) dnl Check for user options dnl The "EMBEDDED" is now always on, replaced with --with-erlangstorage AC_DEFINE(EMBEDDED,1,[Define for an embedded target]) AC_ARG_WITH(embedded, [ --with-embedded When desiring to target as embedded], [AC_DEFINE(EMBEDDED,1,[Define for an embedded target]) EMBEDDED=1]) AC_ARG_WITH(erlangstorage, [ --with-erlangstorage When desiring a longer term backing storage on erlang datasets. NOT compatible with EMBEDDED, REQUIRES FILESYSTEM!], [AC_DEFINE(ERLANGSTORAGE,1,[Define for a non-embedded system with filesystem based Erlang history storage]) ERLANGSTORAGE=1]) AC_ARG_ENABLE(igate, [ --disable-igate Disable all IGate codes], [if test "${enable_igate}" = no ; then AC_DEFINE(DISABLE_IGATE,1,[Define to 1 if you want to disable all IGATE codes.]) fi]) AC_ARG_ENABLE(agwpe, [ --enable-agwpe Enable AGWPE socket interface code.], [if test "${enable_agwpe}" != no ; then AC_DEFINE(ENABLE_AGWPE,1,[Define to 1 if you want to enable AGWPE socket interface.]) fi]) AC_ARG_WITH(pthread, [ --without-pthread When desiring not to use pthread subsystem], [AC_DEFINE(DISABLE_PTHREAD,1,[Define for pthread(3p) disabling]) DISABLE_PTHREAD=1], [AC_DEFINE(ENABLE_PTHREAD,1,[Define for pthread(3p) enabling]) ENABLE_PTHREAD=1]) AC_ARG_WITH(pthreads, [ --with-pthreads (mistyped pthread) When desiring use pthread subsystem], [AC_DEFINE(ENABLE_PTHREAD,1,[Define for pthread(3p) enabling]) ENABLE_PTHREAD=1]) dnl search for pthread libs and compilation option AC_SUBST(LIBPTHREAD) AC_SUBST(CCPTHREAD) if test "${ENABLE_PTHREAD}" = "1" ; then AC_MSG_RESULT([The --without-pthread option is not set, looking for pthread_create() function.]) have_pthread=no if test $have_pthread = no; then t_oldLibs="$LIBS" LIBS="$LIBS -pthread" t_oldCflags="$CFLAGS" CFLAGS="$CFLAGS -pthread" AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[#include ]],[[pthread_t pt; pthread_attr_t pat; int rc = pthread_create(&pt, &pat, NULL, NULL)]])], [have_pthread=yes;AC_MSG_RESULT([Have pthread_create()])], [AC_MSG_RESULT([Not have pthread_create()])]) if test $have_pthread = no ; then AC_MSG_RESULT([Failure at HAVE_PTHREAD_CREATE]) else AC_DEFINE(HAVE_PTHREAD_CREATE,1,[Have pthread_create() function]) AC_MSG_RESULT([Success at HAVE_PTHREAD_CREATE]) LIBPTHREAD="-pthread" CCPTHREAD="-pthread" fi LIBS="$t_oldLibs" CFLAGS="$t_oldCflags" fi if test $have_pthread = no; then AC_MSG_RESULT([Failure at HAVE_PTHREAD_CREATE, trying second way.]) t_oldLibs="$LIBS" LIBS="$LIBS -lpthread" AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[#include ]],[[pthread_t pt; pthread_attr_t pat; int rc = pthread_create(&pt, &pat, NULL, NULL)]])], [have_pthread=yes;AC_MSG_RESULT([Have pthread_create()])], [AC_MSG_RESULT([Not have pthread_create()])]) if test $have_pthread = no ; then AC_MSG_RESULT([Failure at HAVE_PTHREAD_CREATE]) else AC_DEFINE(HAVE_PTHREAD_CREATE,1,[Have pthread_create() function]) AC_MSG_RESULT([Success at HAVE_PTHREAD_CREATE]) LIBPTHREAD="-lpthread" CCPTHREAD="" fi LIBS="$t_oldLibs" CFLAGS="$t_oldCflags" fi if test $have_pthread = no; then AC_MSG_RESULT([Still failure at HAVE_PTHREAD_CREATE, Run out of ways to set it up.]) fi fi dnl Check for clock_gettime, and a library to have it AC_SUBST(LIBRT) AC_SEARCH_LIBS([clock_gettime], [rt], [ AC_DEFINE(HAVE_CLOCK_GETTIME, 1,[Have clock_gettime]) ]) if test "$ac_cv_search_clock_gettime" = "-lrt"; then LIBRT="-lrt" fi dnl Solaris resolver solution: AC_SUBST(LIBGETADDRINFO) AC_CHECK_FUNCS(getaddrinfo,, AC_CHECK_LIB(nsl, getaddrinfo, [LIBGETADDRINFO="-lnsl"])) AC_SUBST(LIBSOCKET)dnl AC_SUBST(LIBRESOLV)dnl # # We check for various libraries # - SysVr4 style of "-lsocket" at first (unless in libc) # The hallmark is connect() routine (we presume) # ac_cv_libsocket_both=1 AC_CHECK_FUNC(connect, ac_cv_libsocket_both=0) AC_CHECK_FUNC(gethostbyname, ac_cv_libsocket_both=0) if test "$ac_cv_libsocket_both" = 1 ; then # Check cache if test "$ac_cv_func_socket_lxnet" = yes ; then AC_MSG_RESULT([need -lxnet library (cached)]) LIBSOCKET="-lnsl -lsocket -lxnet" else if test "$ac_cv_func_socket_lsocket" = yes ; then AC_MSG_RESULT([need -lsocket library (cached)]) LIBSOCKET="-lsocket" if test "$ac_cv_func_gethostbyname_lnsl" = yes ; then LIBSOCKET="-lnsl -lsocket" fi else # Well, will this work ? SysVR4, but not Sun Solaris ? AC_CHECK_LIB(xnet, connect, [LIBSOCKET="-lnsl -lsocket -lxnet" ac_cv_func_socket_lsocket=no ac_cv_func_socket_lxnet=yes],[ AC_CHECK_LIB(socket, connect, [LIBSOCKET="-lsocket" ac_cv_func_socket_lsocket=yes], ac_cv_func_socket_lsocket=no) if test "$ac_cv_func_socket_lsocket" = yes ; then t_oldLibs="$LIBS" LIBS="$LIBS -lsocket $LIBRESOLV" AC_TRY_LINK([],[gethostbyname();], ,[ LIBS="$LIBS -lnsl" # Add this Solaris library.. AC_TRY_LINK([],[gethostbyname();],[ LIBSOCKET="-lsocket -lnsl" ac_cv_func_gethostbyname_lnsl=yes ], [ AC_MSG_ERROR([Weird, '$LIBS' not enough to find gethostnyname() ?!]) ]) ]) LIBS="$t_oldLibs" fi ]) fi fi fi if test "x$LIBRESOLV" = "x"; then # Ok, No -lresolv, is this enough for the _res to appear ? t_oldLibs="$LIBS" LIBS="$LIBS $LIBSOCKET" ac_cv_var__res_options=no # This following is for IRIX6.4, and I sincerely hope it # will not fail on other systems... It did! It did! # Many systems don't have idemponent headers, they need specific # includes before latter ones, or the latter ones won't be successful... AC_TRY_LINK([#include #include #include #include #include ], [_res.options = RES_INIT;], ac_cv_var__res_options=yes); if test "$ac_cv_var__res_options" != "yes"; then AC_MSG_RESULT([Can't do without -lresolv to link resolver's _res.options]) LIBS="$LIBS -lresolv" fi LIBS="$t_oldLibs" fi # See about the routines that possibly exist at the libraries.. LIBS="$t_oldLibs $LIBSOCKET" AC_CHECK_FUNCS(socket socketpair) LIBS="$t_oldLibs" if test "$ac_cv_func_socket" = no -a "$LIBSOCKET" != ""; then LIBS="$LIBS $LIBSOCKET" AC_TRY_LINK([],[socket();], ac_cv_func_socket=yes) if test $ac_cv_func_socket = yes; then AC_DEFINE(HAVE_SOCKET) AC_MSG_RESULT([Has socket() when using $LIBSOCKET]) fi LIBS="$t_oldLibs" fi if test "$ac_cv_func_socketpair" = no -a "$LIBSOCKET" != ""; then LIBS="$LIBS $LIBSOCKET" AC_TRY_LINK([],[socketpair();], ac_cv_func_socketpair=yes) if test $ac_cv_func_socketpair = yes; then AC_DEFINE(HAVE_SOCKETPAIR) AC_MSG_RESULT([Has socketpair() when using $LIBSOCKET]) fi LIBS="$t_oldLibs" fi dnl Check for openssl AC_ARG_WITH(openssl, [ --with-openssl[=DIR] Include OpenSSL support (requires OpenSSL >= 0.9.7)], [with_openssl=$withval], [with_openssl=no]) AC_SUBST(LIBSSL) AC_SUBST(LIBCRYPTO) if test "$with_openssl" != "no" ; then AC_CHECK_HEADERS([openssl/ssl.h]) AC_SEARCH_LIBS(TLSv1_server_method, ssl, AC_DEFINE(HAVE_TLSV1_SERVER_METHOD, 1, [OpenSSL 0.9.7 or later])) AC_SEARCH_LIBS(X509_free, crypto, AC_DEFINE(HAVE_X509_FREE, 1, [OpenSSL 0.9.7 or later])) if test "$ac_cv_search_TLSv1_server_method" = "-lssl"; then LIBSSL="-lssl" fi if test "$ac_cv_search_X509_free" = "-lcrypto"; then LIBCRYPTO="-lcrypto" fi fi dnl Define compilation variables supplying version information t_vers="`cat VERSION`" AC_SUBST(VERSION_STRING, "`cat VERSION`") dnl Output files AC_CONFIG_FILES([Makefile]) AC_OUTPUT aprx-2.9.0/coverity-build-submit.sh000664 000000 000000 00000001066 13040775352 017263 0ustar00rootroot000000 000000 #!/bin/bash set -e export PATH=$PATH:~/src/cov-analysis-linux64-6.5.1/bin make clean ./configure rm -rf cov-int cov-build --dir cov-int make tar cvfz aprx-coverity.tgz cov-int rm -rf cov-int VERSION="`cat VERSION`" PROJECT="Aprx" PASSWORD="`cat ~/.covpw`" echo "Uploading Aprx version $VERSION to Coverity..." curl --form file=@aprx-coverity.tgz --form project="$PROJECT" \ --form password="$PASSWORD" \ --form email=oh2mqk@sral.fi \ --form version="$VERSION" \ --form description="" \ http://scan5.coverity.com/cgi-bin/upload.py rm -f aprx-coverity.tgz aprx-2.9.0/crc.c000664 000000 000000 00000026241 13040775352 013402 0ustar00rootroot000000 000000 /* **************************************************************** * * * * APRX -- 2nd generation APRS iGate and digi with * * minimal requirement of esoteric facilities or * * libraries of any kind beyond UNIX system libc. * * * * (c) Matti Aarnio - OH2MQK, 2007-2014 * * * * **************************************************************** */ #include "aprx.h" /* 3 different CRC algorithms: 1) CRC-16 2) CRC-CCITT 3) CRC-FLEXNET - - - - - - - - - SYMEK et al. have defined a way to run CRC inside KISS frames to verify that the KISS-frame itself is correct: http://www.symek.com/g/smack.html http://www.ir3ip.net/iw3fqg/doc/smak.htm SMACK variation recycles the top-most bit of the TNC-id nibble, and thus permits up to 8 TNC ports on line. Top-most bit is always one on SMACK frames. SMACK runs CRC16 over whole KISS frame buffer, including the CMD byte. The CRC-code is thus _different_ from what will be sent out on radio, the latter being CRC-CCITT (see further below): Following CRC16-polynome is used: X^16 + X^15 + X^2 + 1 The CRC-generator is preset to zero. Chosen initialize to zero does mean that after a correct packet with a correct checksum is ran thru this CRC, the output checksum will be zero. - - - - - - - - - -- ITU-T V.42 / 1993: 8.1.1.6.1 16-bit frame check sequence The FCS field shall be the sixteen-bit sequence preceding the closing flag. The 16-bit FCS shall be the ones complement of the sum (modulo 2) of a) the remainder of x^k (x^15 + x^14 + x^13 + x^12 + x^11 + x^10 + x^9 + x^8 + x^7 + x^6 + x^5 + x^4 + x^3 + x^2 + x^1 + 1) divided (modulo 2) by the generator polynomial x^16 + x^12 + x^5 + 1, where k is the number of bits in the frame existing between, but not including, the final bit of the opening flag and the first bit of the FCS, excluding bits inserted for transparency; and b) the remainder of the division (modulo 2) by the generator polynomial x^16 + x^12 + x^5 + 1, of the product of x^16 by the content of the frame existing between, but not including, the final bit of the opening flag and the first bit of the FCS, excluding bits inserted for transparency. As a typical implementation at the transmitter, the initial content of the register of the device computing the remainder of the division is preset to all 1s and is then modified by division by the generator polynomial (as described above) of the address, control and information fields; the ones complement of the resulting remainder is transmitted as the sixteen-bit FCS. As a typical implementation at the receiver, the initial content of the register of the device computing the remainder is preset to all 1s. The final remainder, after multiplication by x^16 and then division (modulo 2) by the generator polynomial x^16 + x^12 + x^5 + 1 of the serial incoming protected bits and the FCS, will be “0001 1101 0000 1111†(x^15 through x^0, respectively) in the absence of transmission errors. Same wording is also on ITU-T X.25 specification. - - - - - - - - - Where is FLEXNET CRC specification? */ // Polynome 0xA001 // referred from kiss.c ! const uint16_t crc16_table[] = { 0x0000, 0xc0c1, 0xc181, 0x0140, 0xc301, 0x03c0, 0x0280, 0xc241, 0xc601, 0x06c0, 0x0780, 0xc741, 0x0500, 0xc5c1, 0xc481, 0x0440, 0xcc01, 0x0cc0, 0x0d80, 0xcd41, 0x0f00, 0xcfc1, 0xce81, 0x0e40, 0x0a00, 0xcac1, 0xcb81, 0x0b40, 0xc901, 0x09c0, 0x0880, 0xc841, 0xd801, 0x18c0, 0x1980, 0xd941, 0x1b00, 0xdbc1, 0xda81, 0x1a40, 0x1e00, 0xdec1, 0xdf81, 0x1f40, 0xdd01, 0x1dc0, 0x1c80, 0xdc41, 0x1400, 0xd4c1, 0xd581, 0x1540, 0xd701, 0x17c0, 0x1680, 0xd641, 0xd201, 0x12c0, 0x1380, 0xd341, 0x1100, 0xd1c1, 0xd081, 0x1040, 0xf001, 0x30c0, 0x3180, 0xf141, 0x3300, 0xf3c1, 0xf281, 0x3240, 0x3600, 0xf6c1, 0xf781, 0x3740, 0xf501, 0x35c0, 0x3480, 0xf441, 0x3c00, 0xfcc1, 0xfd81, 0x3d40, 0xff01, 0x3fc0, 0x3e80, 0xfe41, 0xfa01, 0x3ac0, 0x3b80, 0xfb41, 0x3900, 0xf9c1, 0xf881, 0x3840, 0x2800, 0xe8c1, 0xe981, 0x2940, 0xeb01, 0x2bc0, 0x2a80, 0xea41, 0xee01, 0x2ec0, 0x2f80, 0xef41, 0x2d00, 0xedc1, 0xec81, 0x2c40, 0xe401, 0x24c0, 0x2580, 0xe541, 0x2700, 0xe7c1, 0xe681, 0x2640, 0x2200, 0xe2c1, 0xe381, 0x2340, 0xe101, 0x21c0, 0x2080, 0xe041, 0xa001, 0x60c0, 0x6180, 0xa141, 0x6300, 0xa3c1, 0xa281, 0x6240, 0x6600, 0xa6c1, 0xa781, 0x6740, 0xa501, 0x65c0, 0x6480, 0xa441, 0x6c00, 0xacc1, 0xad81, 0x6d40, 0xaf01, 0x6fc0, 0x6e80, 0xae41, 0xaa01, 0x6ac0, 0x6b80, 0xab41, 0x6900, 0xa9c1, 0xa881, 0x6840, 0x7800, 0xb8c1, 0xb981, 0x7940, 0xbb01, 0x7bc0, 0x7a80, 0xba41, 0xbe01, 0x7ec0, 0x7f80, 0xbf41, 0x7d00, 0xbdc1, 0xbc81, 0x7c40, 0xb401, 0x74c0, 0x7580, 0xb541, 0x7700, 0xb7c1, 0xb681, 0x7640, 0x7200, 0xb2c1, 0xb381, 0x7340, 0xb101, 0x71c0, 0x7080, 0xb041, 0x5000, 0x90c1, 0x9181, 0x5140, 0x9301, 0x53c0, 0x5280, 0x9241, 0x9601, 0x56c0, 0x5780, 0x9741, 0x5500, 0x95c1, 0x9481, 0x5440, 0x9c01, 0x5cc0, 0x5d80, 0x9d41, 0x5f00, 0x9fc1, 0x9e81, 0x5e40, 0x5a00, 0x9ac1, 0x9b81, 0x5b40, 0x9901, 0x59c0, 0x5880, 0x9841, 0x8801, 0x48c0, 0x4980, 0x8941, 0x4b00, 0x8bc1, 0x8a81, 0x4a40, 0x4e00, 0x8ec1, 0x8f81, 0x4f40, 0x8d01, 0x4dc0, 0x4c80, 0x8c41, 0x4400, 0x84c1, 0x8581, 0x4540, 0x8701, 0x47c0, 0x4680, 0x8641, 0x8201, 0x42c0, 0x4380, 0x8341, 0x4100, 0x81c1, 0x8081, 0x4040 }; uint16_t calc_crc_16(const uint8_t *buf, int n) { uint16_t crc = 0; while (--n >= 0) { crc = (((crc >> 8) & 0xff) ^ crc16_table[(crc ^ *buf++) & 0xFF]); } return crc; } // Return 0 for correct result, anything else for incorrect one int check_crc_16(const uint8_t *buf, int n) { uint16_t crc = calc_crc_16(buf, n); return (crc != 0); // Correct result is when crc == 0 } // Polynome 0x8408 const uint16_t crc_ccitt_table[256] = { 0x0000, 0x1189, 0x2312, 0x329b, 0x4624, 0x57ad, 0x6536, 0x74bf, 0x8c48, 0x9dc1, 0xaf5a, 0xbed3, 0xca6c, 0xdbe5, 0xe97e, 0xf8f7, 0x1081, 0x0108, 0x3393, 0x221a, 0x56a5, 0x472c, 0x75b7, 0x643e, 0x9cc9, 0x8d40, 0xbfdb, 0xae52, 0xdaed, 0xcb64, 0xf9ff, 0xe876, 0x2102, 0x308b, 0x0210, 0x1399, 0x6726, 0x76af, 0x4434, 0x55bd, 0xad4a, 0xbcc3, 0x8e58, 0x9fd1, 0xeb6e, 0xfae7, 0xc87c, 0xd9f5, 0x3183, 0x200a, 0x1291, 0x0318, 0x77a7, 0x662e, 0x54b5, 0x453c, 0xbdcb, 0xac42, 0x9ed9, 0x8f50, 0xfbef, 0xea66, 0xd8fd, 0xc974, 0x4204, 0x538d, 0x6116, 0x709f, 0x0420, 0x15a9, 0x2732, 0x36bb, 0xce4c, 0xdfc5, 0xed5e, 0xfcd7, 0x8868, 0x99e1, 0xab7a, 0xbaf3, 0x5285, 0x430c, 0x7197, 0x601e, 0x14a1, 0x0528, 0x37b3, 0x263a, 0xdecd, 0xcf44, 0xfddf, 0xec56, 0x98e9, 0x8960, 0xbbfb, 0xaa72, 0x6306, 0x728f, 0x4014, 0x519d, 0x2522, 0x34ab, 0x0630, 0x17b9, 0xef4e, 0xfec7, 0xcc5c, 0xddd5, 0xa96a, 0xb8e3, 0x8a78, 0x9bf1, 0x7387, 0x620e, 0x5095, 0x411c, 0x35a3, 0x242a, 0x16b1, 0x0738, 0xffcf, 0xee46, 0xdcdd, 0xcd54, 0xb9eb, 0xa862, 0x9af9, 0x8b70, 0x8408, 0x9581, 0xa71a, 0xb693, 0xc22c, 0xd3a5, 0xe13e, 0xf0b7, 0x0840, 0x19c9, 0x2b52, 0x3adb, 0x4e64, 0x5fed, 0x6d76, 0x7cff, 0x9489, 0x8500, 0xb79b, 0xa612, 0xd2ad, 0xc324, 0xf1bf, 0xe036, 0x18c1, 0x0948, 0x3bd3, 0x2a5a, 0x5ee5, 0x4f6c, 0x7df7, 0x6c7e, 0xa50a, 0xb483, 0x8618, 0x9791, 0xe32e, 0xf2a7, 0xc03c, 0xd1b5, 0x2942, 0x38cb, 0x0a50, 0x1bd9, 0x6f66, 0x7eef, 0x4c74, 0x5dfd, 0xb58b, 0xa402, 0x9699, 0x8710, 0xf3af, 0xe226, 0xd0bd, 0xc134, 0x39c3, 0x284a, 0x1ad1, 0x0b58, 0x7fe7, 0x6e6e, 0x5cf5, 0x4d7c, 0xc60c, 0xd785, 0xe51e, 0xf497, 0x8028, 0x91a1, 0xa33a, 0xb2b3, 0x4a44, 0x5bcd, 0x6956, 0x78df, 0x0c60, 0x1de9, 0x2f72, 0x3efb, 0xd68d, 0xc704, 0xf59f, 0xe416, 0x90a9, 0x8120, 0xb3bb, 0xa232, 0x5ac5, 0x4b4c, 0x79d7, 0x685e, 0x1ce1, 0x0d68, 0x3ff3, 0x2e7a, 0xe70e, 0xf687, 0xc41c, 0xd595, 0xa12a, 0xb0a3, 0x8238, 0x93b1, 0x6b46, 0x7acf, 0x4854, 0x59dd, 0x2d62, 0x3ceb, 0x0e70, 0x1ff9, 0xf78f, 0xe606, 0xd49d, 0xc514, 0xb1ab, 0xa022, 0x92b9, 0x8330, 0x7bc7, 0x6a4e, 0x58d5, 0x495c, 0x3de3, 0x2c6a, 0x1ef1, 0x0f78 }; uint16_t calc_crc_ccitt(uint16_t crc, const uint8_t *buffer, int len) { while (len--) { uint8_t c = *buffer++; crc = (crc >> 8) ^ crc_ccitt_table[(crc ^ c) & 0xff]; } return crc; } #if 0 // not used! // From start of packet to end of packet _including_ 16 bits of FCS // Return 0 for OK, other values for errors int check_crc_ccitt(const uint8_t *buf, int n) { uint16_t crc = calc_crc_ccitt(0xFFFF, buf, n); return (crc != 0xF0B8); } #endif const uint16_t crc_flex_table[] = { 0x0f87, 0x1e0e, 0x2c95, 0x3d1c, 0x49a3, 0x582a, 0x6ab1, 0x7b38, 0x83cf, 0x9246, 0xa0dd, 0xb154, 0xc5eb, 0xd462, 0xe6f9, 0xf770, 0x1f06, 0x0e8f, 0x3c14, 0x2d9d, 0x5922, 0x48ab, 0x7a30, 0x6bb9, 0x934e, 0x82c7, 0xb05c, 0xa1d5, 0xd56a, 0xc4e3, 0xf678, 0xe7f1, 0x2e85, 0x3f0c, 0x0d97, 0x1c1e, 0x68a1, 0x7928, 0x4bb3, 0x5a3a, 0xa2cd, 0xb344, 0x81df, 0x9056, 0xe4e9, 0xf560, 0xc7fb, 0xd672, 0x3e04, 0x2f8d, 0x1d16, 0x0c9f, 0x7820, 0x69a9, 0x5b32, 0x4abb, 0xb24c, 0xa3c5, 0x915e, 0x80d7, 0xf468, 0xe5e1, 0xd77a, 0xc6f3, 0x4d83, 0x5c0a, 0x6e91, 0x7f18, 0x0ba7, 0x1a2e, 0x28b5, 0x393c, 0xc1cb, 0xd042, 0xe2d9, 0xf350, 0x87ef, 0x9666, 0xa4fd, 0xb574, 0x5d02, 0x4c8b, 0x7e10, 0x6f99, 0x1b26, 0x0aaf, 0x3834, 0x29bd, 0xd14a, 0xc0c3, 0xf258, 0xe3d1, 0x976e, 0x86e7, 0xb47c, 0xa5f5, 0x6c81, 0x7d08, 0x4f93, 0x5e1a, 0x2aa5, 0x3b2c, 0x09b7, 0x183e, 0xe0c9, 0xf140, 0xc3db, 0xd252, 0xa6ed, 0xb764, 0x85ff, 0x9476, 0x7c00, 0x6d89, 0x5f12, 0x4e9b, 0x3a24, 0x2bad, 0x1936, 0x08bf, 0xf048, 0xe1c1, 0xd35a, 0xc2d3, 0xb66c, 0xa7e5, 0x957e, 0x84f7, 0x8b8f, 0x9a06, 0xa89d, 0xb914, 0xcdab, 0xdc22, 0xeeb9, 0xff30, 0x07c7, 0x164e, 0x24d5, 0x355c, 0x41e3, 0x506a, 0x62f1, 0x7378, 0x9b0e, 0x8a87, 0xb81c, 0xa995, 0xdd2a, 0xcca3, 0xfe38, 0xefb1, 0x1746, 0x06cf, 0x3454, 0x25dd, 0x5162, 0x40eb, 0x7270, 0x63f9, 0xaa8d, 0xbb04, 0x899f, 0x9816, 0xeca9, 0xfd20, 0xcfbb, 0xde32, 0x26c5, 0x374c, 0x05d7, 0x145e, 0x60e1, 0x7168, 0x43f3, 0x527a, 0xba0c, 0xab85, 0x991e, 0x8897, 0xfc28, 0xeda1, 0xdf3a, 0xceb3, 0x3644, 0x27cd, 0x1556, 0x04df, 0x7060, 0x61e9, 0x5372, 0x42fb, 0xc98b, 0xd802, 0xea99, 0xfb10, 0x8faf, 0x9e26, 0xacbd, 0xbd34, 0x45c3, 0x544a, 0x66d1, 0x7758, 0x03e7, 0x126e, 0x20f5, 0x317c, 0xd90a, 0xc883, 0xfa18, 0xeb91, 0x9f2e, 0x8ea7, 0xbc3c, 0xadb5, 0x5542, 0x44cb, 0x7650, 0x67d9, 0x1366, 0x02ef, 0x3074, 0x21fd, 0xe889, 0xf900, 0xcb9b, 0xda12, 0xaead, 0xbf24, 0x8dbf, 0x9c36, 0x64c1, 0x7548, 0x47d3, 0x565a, 0x22e5, 0x336c, 0x01f7, 0x107e, 0xf808, 0xe981, 0xdb1a, 0xca93, 0xbe2c, 0xafa5, 0x9d3e, 0x8cb7, 0x7440, 0x65c9, 0x5752, 0x46db, 0x3264, 0x23ed, 0x1176, 0x00ff }; uint16_t calc_crc_flex(const uint8_t *cp, int size) { uint16_t crc = 0xffff; while (size--) { uint8_t c = *cp++; crc = (crc << 8) ^ crc_flex_table[((crc >> 8) ^ c) & 0xff]; } return crc; } #if 0 // not used! int check_crc_flex(const uint8_t *cp, int size) { uint16_t crc = calc_crc_flex(cp, size); if (size < 3) return -1; if (crc != 0x7070) return -1; return 0; } #endif aprx-2.9.0/debian/000775 000000 000000 00000000000 13040775352 013704 5ustar00rootroot000000 000000 aprx-2.9.0/debian/aprx.default000664 000000 000000 00000000277 13040775352 016232 0ustar00rootroot000000 000000 # # STARTAPRX: start aprx on boot. Should be set to "yes" once you have # configured aprx. # STARTAPRX="no" # # Additional options that are passed to the Daemon. # DAEMON_OPTS="" aprx-2.9.0/debian/aprx.init000664 000000 000000 00000010137 13040775352 015545 0ustar00rootroot000000 000000 #! /bin/sh ### BEGIN INIT INFO # Provides: aprx # Required-Start: $syslog $local_fs # Required-Stop: $syslog $local_fs # Should-Start: ax25ifs # Default-Start: 2 3 4 5 # Default-Stop: 0 1 6 # Short-Description: start and stop aprx # Description: Monitor and gateway radio amateur APRS radio network datagrams ### END INIT INFO # Do NOT "set -e" # PATH should only include /usr/* if it runs after the mountnfs.sh script PATH=/sbin:/usr/sbin:/bin:/usr/bin DESC="aprx igate" NAME=aprx DAEMON=/usr/sbin/$NAME DAEMON_ARGS="" PIDFILE=/var/run/$NAME.pid SCRIPTNAME=/etc/init.d/$NAME # Exit if the package is not installed [ -x "$DAEMON" ] || exit 0 # Read configuration variable file if it is present [ -r /etc/default/$NAME ] && . /etc/default/$NAME # Load the VERBOSE setting and other rcS variables . /lib/init/vars.sh # Define LSB log_* functions. # Depend on lsb-base (>= 3.2-14) to ensure that this file is present # and status_of_proc is working. . /lib/lsb/init-functions # # Function that starts the daemon/service # do_start() { # Return # 0 if daemon has been started # 1 if daemon was already running # 2 if daemon could not be started [ "$STARTAPRX" != "yes" ] && return 2 start-stop-daemon --start --quiet --pidfile $PIDFILE --exec $DAEMON --test > /dev/null \ || return 1 start-stop-daemon --start --quiet --pidfile $PIDFILE --exec $DAEMON -- \ $DAEMON_ARGS \ || return 2 # Add code here, if necessary, that waits for the process to be ready # to handle requests from services started subsequently which depend # on this one. As a last resort, sleep for some time. } # # Function that stops the daemon/service # do_stop() { # Return # 0 if daemon has been stopped # 1 if daemon was already stopped # 2 if daemon could not be stopped # other if a failure occurred start-stop-daemon --stop --quiet --retry=TERM/30/KILL/5 --pidfile $PIDFILE --name $NAME RETVAL="$?" [ "$RETVAL" = 2 ] && return 2 # Wait for children to finish too if this is a daemon that forks # and if the daemon is only ever run from this initscript. # If the above conditions are not satisfied then add some other code # that waits for the process to drop all resources that could be # needed by services started subsequently. A last resort is to # sleep for some time. start-stop-daemon --stop --quiet --oknodo --retry=0/30/KILL/5 --exec $DAEMON [ "$?" = 2 ] && return 2 # Many daemons don't delete their pidfiles when they exit. rm -f $PIDFILE return "$RETVAL" } # # Function that sends a SIGHUP to the daemon/service # do_reload() { # # If the daemon can reload its configuration without # restarting (for example, when it is sent a SIGHUP), # then implement that here. # start-stop-daemon --stop --signal 1 --quiet --pidfile $PIDFILE --name $NAME return 0 } case "$1" in start) [ "$VERBOSE" != no ] && log_daemon_msg "Starting $DESC" "$NAME" do_start case "$?" in 0|1) [ "$VERBOSE" != no ] && log_end_msg 0 ;; 2) [ "$VERBOSE" != no ] && log_end_msg 1 ;; esac ;; stop) [ "$VERBOSE" != no ] && log_daemon_msg "Stopping $DESC" "$NAME" do_stop case "$?" in 0|1) [ "$VERBOSE" != no ] && log_end_msg 0 ;; 2) [ "$VERBOSE" != no ] && log_end_msg 1 ;; esac ;; status) status_of_proc "$DAEMON" "$NAME" && exit 0 || exit $? ;; #reload|force-reload) # # If do_reload() is not implemented then leave this commented out # and leave 'force-reload' as an alias for 'restart'. # #log_daemon_msg "Reloading $DESC" "$NAME" #do_reload #log_end_msg $? #;; restart|force-reload) # # If the "reload" option is implemented then remove the # 'force-reload' alias # log_daemon_msg "Restarting $DESC" "$NAME" do_stop case "$?" in 0|1) do_start case "$?" in 0) log_end_msg 0 ;; 1) log_end_msg 1 ;; # Old process is still running *) log_end_msg 1 ;; # Failed to start esac ;; *) # Failed to stop log_end_msg 1 ;; esac ;; *) #echo "Usage: $SCRIPTNAME {start|stop|restart|reload|force-reload}" >&2 echo "Usage: $SCRIPTNAME {start|stop|status|restart|force-reload}" >&2 exit 3 ;; esac : aprx-2.9.0/debian/changelog.release000664 000000 000000 00000000464 13040775352 017201 0ustar00rootroot000000 000000 aprx (@VERSION@) unstable; urgency=low * See changelog: https://github.com/PhirePhly/aprx/commits/master -- Kenneth Finnegan @RFCDATE@ aprx (0.0.0-1) unstable; urgency=low * Initial debianization. -- Kimmo Jukarainen Thu, 3 Jan 2008 20:35:29 +0200 aprx-2.9.0/debian/compat000664 000000 000000 00000000002 13040775352 015102 0ustar00rootroot000000 000000 5 aprx-2.9.0/debian/control000664 000000 000000 00000001263 13040775352 015311 0ustar00rootroot000000 000000 Source: aprx Section: hamradio Priority: extra Maintainer: Kenneth Finnegan Build-Depends: debhelper (>= 4), libssl-dev Standards-Version: 3.7.2 Package: aprx Architecture: any Depends: ${shlibs:Depends}, openssl Description: APRS Digipeater and iGate Aprx is an APRS specific Digipeater and iGate. It supports multiple KISS-TNCs on serial ports and listening to any kernel AX.25 network interfaces. . Additional features include a built-in "erlang-monitor" to analyze activity level of radio channels. . This software requires a valid (and unique) ham radio callsign to operate fully and is therefore useful mainly for licensed radio amateurs. aprx-2.9.0/debian/copyright000664 000000 000000 00000000015 13040775352 015633 0ustar00rootroot000000 000000 See LICENSE. aprx-2.9.0/debian/dirs000664 000000 000000 00000000105 13040775352 014564 0ustar00rootroot000000 000000 etc/ etc/apparmor.d usr/sbin usr/share/man/man8 var/log/aprx var/run aprx-2.9.0/debian/docs000664 000000 000000 00000000126 13040775352 014556 0ustar00rootroot000000 000000 README TODO PROTOCOLS LICENSE ROADMAP aprx.conf aprx-complex.conf doc/aprx-manual.pdf aprx-2.9.0/debian/postinst.off000664 000000 000000 00000001647 13040775352 016273 0ustar00rootroot000000 000000 #!/bin/sh -e action="$1" oldversion="$2" . /usr/share/debconf/confmodule db_version 2.0 umask 022 if [ "$action" != configure ] ; then exit 0 fi # functions setup_aprx_user() { if ! getent passwd aprsc >/dev/null; then echo "Creating user account: 'aprsc'" adduser --quiet --system --no-create-home --home /var/run/aprx --shell /usr/sbin/nologin --group aprx fi } fix_permissions() { : # chown aprx:aprx /opt/aprsc/logs /opt/aprsc/data } apparmor_config() { # Reload AppArmor profile APP_PROFILE="/etc/apparmor.d/sbin.aprx" if [ -f "$APP_PROFILE" ] && aa-status --enabled 2>/dev/null; then echo "Installing apparmor profile..." apparmor_parser -r -T -W "$APP_PROFILE" || true fi } # main # setup_aprx_user # fix_permissions apparmor_config # dh_installdeb will replace this with shell code automatically # generated by other debhelper scripts. #DEBHELPER# exit 0 aprx-2.9.0/debian/rules000775 000000 000000 00000003655 13040775352 014775 0ustar00rootroot000000 000000 #!/usr/bin/make -f # Uncomment this to turn on verbose mode. #export DH_VERBOSE=1 CFLAGS = -Wall -g ifneq (,$(findstring noopt,$(DEB_BUILD_OPTIONS))) CFLAGS += -O0 else CFLAGS += -O2 endif configure: configure-stamp configure-stamp: dh_testdir # Add here commands to configure the package. ./configure --with-pthread --sbindir=/usr/sbin --sysconfdir=/etc \ --localstatedir=/var --mandir=/usr/share/man \ CC="gcc" \ CFLAGS="${CFLAGS}" \ AFLAGS="${CFLAGS} --noexecstack" \ LDFLAGS="${CFLAGS} -z noexecstack" touch configure-stamp build: build-stamp build-stamp: configure-stamp dh_testdir # Add here commands to compile the package. $(MAKE) #docbook-to-man debian/aprx.sgml > aprx.1 touch $@ clean: dh_testdir dh_testroot rm -f build-stamp configure-stamp # Add here commands to clean up after the build process. -$(MAKE) clean rm -f debian/aprx.logrotate dh_clean install: build dh_testdir dh_testroot dh_clean -k dh_installdirs # Add here commands to install the package into debian/aprx. $(MAKE) DESTDIR=$(CURDIR)/debian/aprx logrotate.aprx install cp logrotate.aprx debian/aprx.logrotate install -m 644 apparmor.aprx $(CURDIR)/debian/aprx/etc/apparmor.d/sbin.aprx # Build architecture-independent files here. binary-indep: build install # We have nothing to do by default. # Build architecture-dependent files here. binary-arch: build install dh_testdir dh_testroot # dh_installchangelogs ChangeLog dh_installdocs dh_installexamples # dh_install # dh_installmenu # dh_installdebconf dh_installlogrotate # dh_installemacsen # dh_installpam # dh_installmime # dh_python dh_installinit --restart-after-upgrade # dh_installcron # dh_installinfo dh_installman dh_link # dh_strip dh_compress dh_fixperms # dh_perl # dh_makeshlibs dh_installdeb dh_shlibdeps dh_gencontrol dh_md5sums dh_builddeb binary: binary-indep binary-arch .PHONY: build clean binary-indep binary-arch binary install configure aprx-2.9.0/digipeater.c000664 000000 000000 00000153601 13040775352 014751 0ustar00rootroot000000 000000 /* **************************************************************** * * * * APRX -- 2nd generation APRS iGate and digi with * * minimal requirement of esoteric facilities or * * libraries of any kind beyond UNIX system libc. * * * * (c) Matti Aarnio - OH2MQK, 2007-2014 * * * * **************************************************************** */ #include "aprx.h" static int digi_count; static struct digipeater **digis; #define TOKENBUCKET_INTERVAL 5 // 5 seconds per refill. // 60/5 part of "ratelimit" to be max // that token bucket can be filled to. static struct timeval tokenbucket_timer; struct viastate { int hopsreq; int hopsdone; int tracereq; int tracedone; int digireq; int digidone; int fixthis; int fixall; int probably_heard_direct; }; struct digistate { struct viastate v; int ax25addrlen; uint8_t ax25addr[90]; // 70 for address, a bit more for "body" }; #define AX25ADDRMAXLEN 70 // SRC + DEST + 8*VIA (7 bytes each) #define AX25ADDRLEN 7 #define AX25HBIT 0x80 #define AX25ATERM 0x01 static char * tracewords[] = { "WIDE","TRACE","RELAY" }; static int tracewordlens[] = { 4, 5, 5 }; static const struct tracewide default_trace_param = { 4, 4, 1, // maxreq, maxdone, is_trace 3, // Count of tracewords defined above tracewords, tracewordlens }; static char * widewords[] = { "WIDE","RELAY" }; static int widewordlens[] = { 4,5 }; static const struct tracewide default_wide_param = { 4, 4, 0, 2, widewords, widewordlens }; static int run_tokenbucket_timers(void); float ratelimitmax = 9999999.9; float rateincrementmax = 9999999.9; /* * regex_filter_add() -- adds configured regular expressions * into forbidden patterns list. * * These are actually processed on TNC2 format text line, and not * AX.25 datastream per se. */ static int regex_filter_add(struct configfile *cf, struct digipeater_source *src, char *param1, char *str) { int rc; int groupcode = -1; regex_t re, *rep; char errbuf[2000]; if (strcmp(param1, "source") == 0) { groupcode = 0; } else if (strcmp(param1, "destination") == 0) { groupcode = 1; } else if (strcmp(param1, "via") == 0) { groupcode = 2; } else if (strcmp(param1, "data") == 0) { groupcode = 3; } else { printf("%s:%d ERROR: Bad RE target: '%s' must be one of: source, destination, via\n", cf->name, cf->linenum, param1); return 1; } if (!*str) { printf("%s:%d ERROR: Expected RE pattern missing or a NUL string.\n", cf->name, cf->linenum); return 1; /* Bad input.. */ } param1 = str; str = config_SKIPTEXT(str, NULL); // Handle quoted string str = config_SKIPSPACE(str); memset(&re, 0, sizeof(re)); rc = regcomp(&re, param1, REG_EXTENDED | REG_NOSUB); if (rc != 0) { /* Something is bad.. */ *errbuf = 0; regerror(rc, &re, errbuf, sizeof(errbuf)); printf("%s:%d ERROR: Bad POSIX RE input, error: %s\n", cf->name, cf->linenum, errbuf); return 1; } /* param1 and str were processed successfully ... */ rep = calloc(1,sizeof(*rep)); *rep = re; switch (groupcode) { case 0: src->sourceregscount += 1; src->sourceregs = realloc(src->sourceregs, src->sourceregscount * sizeof(void *)); src->sourceregs[src->sourceregscount - 1] = rep; break; case 1: src->destinationregscount += 1; src->destinationregs = realloc(src->destinationregs, src->destinationregscount * sizeof(void *)); src->destinationregs[src->destinationregscount - 1] = rep; break; case 2: src->viaregscount += 1; src->viaregs = realloc(src->viaregs, src->viaregscount * sizeof(void *)); src->viaregs[src->viaregscount - 1] = rep; break; case 3: src->dataregscount += 1; src->dataregs = realloc(src->dataregs, src->dataregscount * sizeof(void *)); src->dataregs[src->dataregscount - 1] = rep; break; } return 0; // OK state } static int match_tracewide(const char *via, const struct tracewide *twp) { int i; if (twp == NULL) return 0; for (i = 0; i < twp->nkeys; ++i) { // if (debug>2) printf(" match:'%s'",twp->keys[i]); if (memcmp(via, twp->keys[i], twp->keylens[i]) == 0) { return twp->keylens[i]; } } return 0; } static int match_aliases(const char *via, struct aprx_interface *txif) { int i; for (i = 0; i < txif->aliascount; ++i) { if (strcmp(via, txif->aliases[i]) == 0) return 1; } return 0; } // Counts the number of requested and consumed hops in an alias // and adds those to the viastate->{digireq,digidone,tracereq,tracedone}. // returns 1 on horrific failure static int count_single_tnc2_tracewide(struct viastate *state, const char *viafield, const int istrace, const int matchlen, const int viaindex) { const char *p = viafield + matchlen; const char reqc = p[0]; const char c = p[1]; const char remc = p[2]; int req, done; int hasHflag = (strchr(viafield,'*') != NULL); // Non-matched case, may have H-bit flag if (matchlen == 0) { req = 1; done = hasHflag; if (viaindex == 2 && !hasHflag) state->probably_heard_direct = 1; // if (debug>1) printf(" a[req=%d,done=%d,trace=%d]",0,0,hasHflag); goto addtostate; } // Is the character following matched part not [1-7] if (!('1' <= reqc && reqc <= '7')) { // Not a digit, this is single matcher.. req = 1; done = hasHflag; if (viaindex == 2 && !hasHflag) state->probably_heard_direct = 1; // if (debug>1) printf(" d[req=%d,done=%d]",1,hasHflag); goto addtostate; } req = reqc - '0'; if (c == '*' && remc == 0) { // WIDE1* done = req; // if (debug>1) printf(" e[req=%d,done=%d]",req,req); goto addtostate; } if (c == 0) { // Bogus WIDE1 - uidigi puts these out. state->fixthis = 1; done = req; // if (debug>1) printf(" E[req=%d,done=%d]",req,req); goto addtostate; } // Not WIDE1- if (c != '-') { req = 1; done = hasHflag; // if (debug>1) printf(" f[req=%d,done=%d]",1,hasHflag); goto addtostate; } // OK, it is "WIDEn-" plus "N" if ('0' <= remc && remc <= '7' && p[3] == 0) { done = req - (remc - '0'); if (done < 0) { // Something like "WIDE3-7", which is definitely bogus! done = 0; state->fixall = 1; if (viaindex == 2 && !hasHflag) state->probably_heard_direct = 1; goto addtostate; } if (viaindex == 2) { if (istrace) // A real "TRACE" in first slot? state->probably_heard_direct = 1; else if (!hasHflag && done == 0) // WIDE1-1/2-2/3-3/etc on first slot state->probably_heard_direct = 1; } // if (debug>1) printf(" g[req=%d,done=%d%s]",req,done,hasHflag ? ",Hflag!":""); goto addtostate; } else if (('8' <= remc && remc <= '9' && p[3] == 0) || (remc == '1' && '0' <= p[3] && p[3] <= '5' && p[4] == 0)) { // The request has SSID value in range of 8 to 15 state->fixall = 1; if (viaindex == 2 && !hasHflag) state->probably_heard_direct = 1; return 0; } else { // Yuck, impossible/syntactically invalid state->hopsreq += 1; state->hopsdone += hasHflag; if (istrace) { state->tracereq += 1; state->tracedone += hasHflag; } if (viaindex == 2 && !hasHflag) state->probably_heard_direct = 1; // if (debug>1) printf(" h[req=%d,done=%d]",1,hasHflag); return 1; } addtostate:; // We've successfully parsed the field. Update the viastate and return 0 state->hopsreq += req; state->hopsdone += done; if (istrace) { state->tracereq += req; state->tracedone += done; } return 0; } static int match_transmitter(const char *viafield, const struct digipeater_source *src, const int lastviachar) { struct aprx_interface *aif = src->parent->transmitter; int tlen = strlen(aif->callsign); if (memcmp(viafield, aif->callsign, tlen) == 0) { if (viafield[tlen] == lastviachar) return 1; } return 0; } static int try_reject_filters(const int fieldtype, const char *field, struct digipeater_source *src) { int i; int stat = 0; switch (fieldtype) { case 0: // Source for (i = 0; i < src->sourceregscount; ++i) { stat = regexec(src->sourceregs[i], field, 0, NULL, 0); if (stat == 0) return 1; /* MATCH! */ } if (memcmp("MYCALL",field,6)==0) return 1; if (memcmp("N0CALL",field,6)==0) return 1; if (memcmp("NOCALL",field,6)==0) return 1; break; case 1: // Destination for (i = 0; i < src->destinationregscount; ++i) { int stat = regexec(src->destinationregs[i], field, 0, NULL, 0); if (stat == 0) return 1; /* MATCH! */ } if (memcmp("MYCALL",field,6)==0) return 1; if (memcmp("N0CALL",field,6)==0) return 1; if (memcmp("NOCALL",field,6)==0) return 1; break; case 2: // Via for (i = 0; i < src->viaregscount; ++i) { int stat = regexec(src->viaregs[i], field, 0, NULL, 0); if (stat == 0) return 1; /* MATCH! */ } if (memcmp("MYCALL",field,6)==0) return 1; if (memcmp("N0CALL",field,6)==0) return 1; if (memcmp("NOCALL",field,6)==0) return 1; break; case 3: // Data for (i = 0; i < src->dataregscount; ++i) { int stat = regexec(src->dataregs[i], field, 0, NULL, 0); if (stat == 0) return 1; /* MATCH! */ } break; default: if (debug) printf("try_reject_filters(fieldtype=%d) - CODE BUG\n", fieldtype); return 1; } if (stat != 0 && stat != REG_NOMATCH) { // Some odd reason for an error? } return 0; } /* Parse executed and requested WIDEn-N/TRACEn-N info */ static int parse_tnc2_hops(struct digistate *state, struct digipeater_source *src, struct pbuf_t *pb) { const char *p = pb->dstcall_end+1; const char *s; const struct digipeater *digi = src->parent; const char *lastviastar; char viafield[15]; // temp buffer for many uses int have_fault = 0; int viaindex = 1; // First via index will be 2.. int activeviacount = 0; int len; int digiok; if (debug>1) printf(" hops count of buffer: %s\n",p); if (src->src_relaytype == DIGIRELAY_THIRDPARTY) { state->v.hopsreq = 1; // Bonus for tx-igated 3rd-party frames state->v.tracereq = 1; // Bonus for tx-igated 3rd-party frames state->v.hopsdone = 0; state->v.tracedone = 0; state->v.probably_heard_direct = 1; return 0; } // Copy the SRCCALL part of SRCALL>DSTCALL to viafield[] buffer len = pb->srccall_end - pb->data; if (len >= sizeof(viafield)) len = sizeof(viafield)-1; memcpy(viafield, pb->data, len); viafield[len] = 0; // if (debug>2)printf(" srccall='%s'",viafield); if (try_reject_filters(0, viafield, src)) { if (debug>1) printf(" - Src filters reject\n"); return 1; // Src reject filters } // Copy the DSTCALL part of SRCALL>DSTCALL to viafield[] buffer len = pb->dstcall_end - pb->srccall_end -1; if (len >= sizeof(viafield)) len = sizeof(viafield)-1; memcpy(viafield, pb->srccall_end+1, len); viafield[len] = 0; // if (debug>2)printf(" destcall='%s'",viafield); if (try_reject_filters(1, viafield, src)) { if (debug>1) printf(" - Dest filters reject\n"); return 1; // Dest reject filters } // Where is the last via-field with a star on it? len = pb->info_start - p; if (len < 0) len=0; lastviastar = memrchr(p, len, '*'); // Loop over VIA fields to see if we need to digipeat anything. while (p < pb->info_start && !have_fault) { len = 0; if (*p == ':') { // A round may stop at ':' found at the end of the processed field, // then next round finds it at the start of the field. break; } // Scan for a VIA field ... for (s = p; s < pb->info_start; ++s) { if (*s == ',' || *s == ':') { // ... until comma or double-colon. break; } } // [p..s) is now one VIA field. if (s == p && *p != ':') { // BAD! have_fault = 1; if (debug>1) printf(" S==P "); break; } if (*p == 'q') break; // APRSIS q-constructs.. ++viaindex; // Pick-up a viafield to separate buffer for processing len = s-p; if (len >= sizeof(viafield)) len = sizeof(viafield)-2; memcpy(viafield, p, len); viafield[len] = 0; if (*s == ',') ++s; p = s; // Only last via field with H-bit is indicated at TNC2 format, // but this digi code logic needs it at every VIA field where // it is set. Therefore this crooked way to add it to picked // up fields. if (strchr(viafield,'*') == NULL) { // If it exists somewhere, and we are not yet at it.. if (lastviastar != NULL && p < lastviastar) strcat(viafield,"*"); // we do know that there is space for this. } if (debug>1) printf(" - ViaField[%d]: '%s'\n", viaindex, viafield); // VIA-field picked up, now analyze it.. if (try_reject_filters(2, viafield, src)) { if (debug>1) printf(" - Via filters reject\n"); return 1; // via reject filters } // Transmitter callsign match with H-flag set. if (match_transmitter(viafield, src, '*')) { if (debug>1) printf(" - Tx match reject\n"); // Oops, LOOP! I have transmit this in past // (according to my transmitter callsign present // in a VIA field!) return 1; } // If there is no '*' meaning this has not been // processed, then this is active field.. if (strchr(viafield, '*') == NULL) ++activeviacount; digiok = 0; // If first active field (without '*') matches // transmitter or alias, then this digi is accepted // regardless if it is APRS or some other protocol. if (activeviacount == 1 && (match_transmitter(viafield, src, 0) || match_aliases(viafield, digi->transmitter))) { if (debug>1) printf(" - Tx match accept!\n"); state->v.hopsreq += 1; state->v.tracereq += 1; digiok = 1; } // .. otherwise following rules are applied only to APRS packets. if (pb->is_aprs) { if ((len = match_tracewide(viafield, src->src_trace))) { // Match source specific list of trace aliases if (debug>1) printf("Trace (src specific)\n"); have_fault = count_single_tnc2_tracewide(&state->v, viafield, 1, len, viaindex); if (!have_fault) digiok = 1; } else if ((len = match_tracewide(viafield, digi->trace))) { // Match digipeater-wide list of trace aliases if (debug>1) printf("Trace (global)\n"); have_fault = count_single_tnc2_tracewide(&state->v, viafield, 1, len, viaindex); if (!have_fault) digiok = 1; } else if ((len = match_tracewide(viafield, src->src_wide))) { // Match source specific list of non-trace aliases if (debug>1) printf("Trace (src-specific, non-trace)\n"); have_fault = count_single_tnc2_tracewide(&state->v, viafield, 0, len, viaindex); if (!have_fault) digiok = 1; } else if ((len = match_tracewide(viafield, digi->wide))) { // Match digipeater-wide list of non-trace aliases if (debug>1) printf("Trace (global, non-trace)\n"); have_fault = count_single_tnc2_tracewide(&state->v, viafield, 0, len, viaindex); if (!have_fault) digiok = 1; } else { // No match on trace or wide, but if there was earlier // match on interface or alias, then it set "digiok" for us. state->v.digidone += (int) (strchr(viafield,'*') != NULL); if (debug>1) printf("Trace (non-alias) digi=%d\n",state->v.digidone); } } if (state->v.fixthis || state->v.fixall) { // Argh.. bogus WIDEn seen, which is what UIDIGIs put out.. // Also some other broken requests are "fixed": like WIDE3-7 // Fixing it: We set the missing H-bit, and continue processing. // (That fixing is done in incoming AX25 address field, which // we generally do not touch - with this exception.) pb->ax25addr[ AX25ADDRLEN*viaindex + AX25ADDRLEN-1 ] |= AX25HBIT; state->v.fixthis = 0; } if (digiok) { if (debug>1) printf(" via field match %s\n", viafield); if(state->v.hopsreq>state->v.hopsdone) break; } } return have_fault; } static void free_tracewide(struct tracewide *twp) { int i; if (twp == NULL) return; if (twp->keys) { for (i = 0; i < twp->nkeys; ++i) free((void*)(twp->keys[i])); free(twp->keys); } if (twp->keylens) free((void*)(twp->keylens)); free(twp); } static void free_source(struct digipeater_source *src) { if (src == NULL) return; free(src); } static struct tracewide *digipeater_config_tracewide(struct configfile *cf, int is_trace) { char *name, *param1; char *str = cf->buf; int has_fault = 0; int nkeys = 0; char **keywords = NULL; int *keylens = NULL; int maxreq = 4; int maxdone = 4; struct tracewide *tw; while (readconfigline(cf) != NULL) { if (configline_is_comment(cf)) continue; /* Comment line, or empty line */ // It can be severely indented... str = config_SKIPSPACE(cf->buf); name = str; str = config_SKIPTEXT(str, NULL); str = config_SKIPSPACE(str); config_STRLOWER(name); param1 = str; str = config_SKIPTEXT(str, NULL); str = config_SKIPSPACE(str); if (is_trace) { if (strcmp(name, "") == 0) { break; } } else { if (strcmp(name, "") == 0) { break; } } // ... actual parameters if (strcmp(name,"maxreq") == 0) { maxreq = atoi(param1); // if (debug) printf(" maxreq %d\n",maxreq); } else if (strcmp(name,"maxdone") == 0) { maxdone = atoi(param1); // if (debug) printf(" maxdone %d\n",maxdone); } else if (strcmp(name,"keys") == 0) { char *k = strtok(param1, ","); for (; k ; k = strtok(NULL,",")) { ++nkeys; // if (debug) printf(" n=%d key='%s'\n",nkeys,k); keywords = realloc(keywords, sizeof(char*) * nkeys); keywords[nkeys-1] = strdup(k); keylens = realloc(keylens, sizeof(int) * nkeys); keylens[nkeys-1] = strlen(k); } } else { has_fault = 1; printf("%s:%d ERROR: Unknown keyword inside %s subblock: '%s'\n", cf->name, cf->linenum, is_trace ? "":"", name); } } if (has_fault) { int i; for (i = 0; i < nkeys; ++i) free(keywords[i]); if (keywords != NULL) free(keywords); if (keylens != NULL) free(keylens); return NULL; } tw = calloc(1,sizeof(*tw)); tw->maxreq = maxreq; tw->maxdone = maxdone; tw->is_trace = is_trace; tw->nkeys = nkeys; tw->keys = keywords; tw->keylens = keylens; return tw; } static struct digipeater_source *digipeater_config_source(struct configfile *cf) { char *name, *param1; char *str = cf->buf; int has_fault = 0; int viscous_delay = 0; float ratelimit = 120; float rateincrement = 60; struct aprx_interface *source_aif = NULL; struct digipeater_source *source = NULL; digi_relaytype relaytype = DIGIRELAY_DIGIPEAT; struct filter_t *filters = NULL; struct tracewide *source_trace = NULL; struct tracewide *source_wide = NULL; struct digipeater_source regexsrc; #ifndef DISABLE_IGATE char *via_path = NULL; char *msg_path = NULL; uint8_t ax25viapath[AX25ADDRLEN]; uint8_t msgviapath[AX25ADDRLEN]; #endif memset(®exsrc, 0, sizeof(regexsrc)); #ifndef DISABLE_IGATE memset(ax25viapath, 0, sizeof(ax25viapath)); memset(msgviapath, 0, sizeof(msgviapath)); #endif while (readconfigline(cf) != NULL) { if (configline_is_comment(cf)) continue; /* Comment line, or empty line */ // It can be severely indented... str = config_SKIPSPACE(cf->buf); name = str; str = config_SKIPTEXT(str, NULL); str = config_SKIPSPACE(str); config_STRLOWER(name); param1 = str; str = config_SKIPTEXT(str, NULL); str = config_SKIPSPACE(str); if (strcmp(name, "") == 0) { break; // ... actual parameters } else if (strcmp(name,"source") == 0) { if (debug) printf("%s:%d source = '%s'\n", cf->name, cf->linenum, param1); if (strcasecmp(param1,"$mycall") == 0) param1 = (char*)mycall; source_aif = find_interface_by_callsign(param1); if (source_aif == NULL) { has_fault = 1; printf("%s:%d ERROR: Digipeater source '%s' not found\n", cf->name, cf->linenum, param1); } if (debug>1) printf(" .. source_aif = %p\n", source_aif); } else if (strcmp(name, "viscous-delay") == 0) { viscous_delay = atoi(param1); if (debug) printf(" viscous-delay = %d\n",viscous_delay); if (viscous_delay < 0) { printf("%s:%d ERROR: Bad value for viscous-delay: '%s'\n", cf->name, cf->linenum, param1); viscous_delay = 0; has_fault = 1; } if (viscous_delay > 9) { printf("%s:%d ERROR: Too large value for viscous-delay: '%s'\n", cf->name, cf->linenum, param1); viscous_delay = 9; has_fault = 1; } } else if (strcmp(name, "ratelimit") == 0) { char *param2 = str; str = config_SKIPTEXT(str, NULL); str = config_SKIPSPACE(str); rateincrement = (float)atof(param1); ratelimit = (float)atof(param2); if (rateincrement < 0.01 || rateincrement > rateincrementmax) rateincrement = 60; if (ratelimit < 0.01 || ratelimit > ratelimitmax) ratelimit = 120; if (ratelimit < rateincrement) rateincrement = ratelimit; if (debug) printf(" .. ratelimit %f %f\n", rateincrement, ratelimit); } else if (strcmp(name,"regex-filter") == 0) { if (regex_filter_add(cf, ®exsrc, param1, str)) { // prints errors internally has_fault = 1; } #ifndef DISABLE_IGATE } else if (strcmp(name, "via-path") == 0) { // Validate that source callsign is "APRSIS" // or "DPRS" for this parameter if (source_aif == NULL || (strcmp(source_aif->callsign,"APRSIS") != 0 && strcmp(source_aif->callsign,"DPRS") != 0)) { printf("%s:%d ERROR: via-path parameter is available only on 'source APRSIS' and 'source DPRS' cases.\n", cf->name, cf->linenum); has_fault = 1; continue; } via_path = strdup(param1); config_STRUPPER(via_path); if (parse_ax25addr(ax25viapath, via_path, 0x00)) { has_fault = 1; printf("%s:%d ERROR: via-path parameter is not valid AX.25 callsign: '%s'\n", cf->name, cf->linenum, via_path); free(via_path); via_path = NULL; continue; } if (debug) printf("via-path '%s'\n", via_path); } else if (strcmp(name, "msg-path") == 0) { // Validate that source callsign is "APRSIS" // or "DPRS" for this parameter if (source_aif == NULL || (strcmp(source_aif->callsign,"APRSIS") != 0 && strcmp(source_aif->callsign,"DPRS") != 0)) { printf("%s:%d ERROR: msg-path parameter is available only on 'source APRSIS' and 'source DPRS' cases.\n", cf->name, cf->linenum); has_fault = 1; continue; } msg_path = strdup(param1); config_STRUPPER(msg_path); if (parse_ax25addr(msgviapath, msg_path, 0x00)) { has_fault = 1; printf("%s:%d ERROR: msg-path parameter is not valid AX.25 callsign: '%s'\n", cf->name, cf->linenum, msg_path); free(msg_path); msg_path = NULL; continue; } if (debug) printf("msg-path '%s'\n", msg_path); #endif } else if (strcmp(name,"") == 0) { if (source_trace == NULL) { source_trace = digipeater_config_tracewide(cf, 1); // prints errors internally } else { has_fault = 1; printf("%s:%d ERROR: double definition of block.\n", cf->name, cf->linenum); } } else if (strcmp(name,"") == 0) { if (source_wide == NULL) { source_wide = digipeater_config_tracewide(cf, 0); // prints errors internally } else { has_fault = 1; printf("%s:%d ERROR: double definition of block.\n", cf->name, cf->linenum); } } else if (strcmp(name,"filter") == 0) { if (filter_parse(&filters, param1)) { // prints errors internally has_fault = 1; printf("%s:%d ERROR: Error at filter parser.\n", cf->name, cf->linenum); } else { if (debug) printf(" .. OK filter %s\n", param1); } } else if (strcmp(name,"relay-type") == 0 || // documented name strcmp(name,"relay-format") == 0 || // an alias strcmp(name,"digi-mode") == 0) { // very old alias config_STRLOWER(param1); if (strcmp(param1,"digipeat") == 0) { relaytype = DIGIRELAY_DIGIPEAT; } else if (strcmp(param1,"digipeated") == 0) { relaytype = DIGIRELAY_DIGIPEAT; } else if (strcmp(param1,"digipeater") == 0) { relaytype = DIGIRELAY_DIGIPEAT; } else if (strcmp(param1,"directonly") == 0) { relaytype = DIGIRELAY_DIGIPEAT_DIRECTONLY; } else if (strcmp(param1,"third-party") == 0) { relaytype = DIGIRELAY_THIRDPARTY; } else if (strcmp(param1,"3rd-party") == 0) { relaytype = DIGIRELAY_THIRDPARTY; } else { printf("%s:%d ERROR: Digipeater 's %s did not recognize: '%s' \n", cf->name, cf->linenum, name, param1); has_fault = 1; } } else { printf("%s:%d ERROR: Digipeater 's %s did not recognize: '%s' \n", cf->name, cf->linenum, name, param1); has_fault = 1; } } if (source_aif == NULL) { has_fault = 1; printf("%s:%d ERROR: Missing or bad 'source =' definition at this group.\n", cf->name, cf->linenum); } if (!has_fault && (source_aif != NULL)) { source = calloc(1,sizeof(*source)); source->src_if = source_aif; source->src_relaytype = relaytype; source->src_filters = filters; source->src_trace = source_trace; source->src_wide = source_wide; #ifndef DISABLE_IGATE source->via_path = via_path; source->msg_path = msg_path; memcpy(source->ax25viapath, ax25viapath, sizeof(ax25viapath)); memcpy(source->msgviapath, msgviapath, sizeof(msgviapath)); if (msg_path == NULL) { // default value of via-path ! source->msg_path = via_path; memcpy(source->msgviapath, ax25viapath, sizeof(ax25viapath)); } #endif source->viscous_delay = viscous_delay; source->tbf_limit = (ratelimit * TOKENBUCKET_INTERVAL)/60; source->tbf_increment = (rateincrement * TOKENBUCKET_INTERVAL)/60; source->tokenbucket = source->tbf_limit; // RE pattern reject filters source->sourceregscount = regexsrc.sourceregscount; source->sourceregs = regexsrc.sourceregs; source->destinationregscount = regexsrc.destinationregscount; source->destinationregs = regexsrc.destinationregs; source->viaregscount = regexsrc.viaregscount; source->viaregs = regexsrc.viaregs; source->dataregscount = regexsrc.dataregscount; source->dataregs = regexsrc.dataregs; } else { // Errors detected free_tracewide(source_trace); free_tracewide(source_wide); // filters_free(filters); // free regexsrc's allocations if (debug) printf("Seen errors at definition.\n"); } if (debug>1)printf(" .. definition returning %p\n",source); return source; } int digipeater_config(struct configfile *cf) { char *name, *param1; char *str = cf->buf; int has_fault = 0; int i; const int line0 = cf->linenum; struct aprx_interface *aif = NULL; float ratelimit = 60; float rateincrement = 60; float srcratelimit = 60; float srcrateincrement = 60; int sourcecount = 0; int dupestoretime = 30; // FIXME: parametrize! 30 is minimum.. struct digipeater_source **sources = NULL; struct digipeater *digi = NULL; struct tracewide *traceparam = NULL; struct tracewide *wideparam = NULL; while (readconfigline(cf) != NULL) { if (configline_is_comment(cf)) continue; /* Comment line, or empty line */ // It can be severely indented... str = config_SKIPSPACE(cf->buf); name = str; str = config_SKIPTEXT(str, NULL); str = config_SKIPSPACE(str); config_STRLOWER(name); param1 = str; str = config_SKIPTEXT(str, NULL); str = config_SKIPSPACE(str); if (strcmp(name, "") == 0) { break; } if (strcmp(name, "transmit") == 0 || strcmp(name, "transmitter") == 0) { if (strcasecmp(param1,"$mycall") == 0) param1 = (char*)mycall; aif = find_interface_by_callsign(param1); if (aif != NULL && (!aif->tx_ok)) { aif = NULL; // Not printf("%s:%d ERROR: This transmit interface has no TX-OK TRUE setting: '%s'\n", cf->name, cf->linenum, param1); has_fault = 1; } else if (aif != NULL && aif->txrefcount > 0) { aif = NULL; printf("%s:%d ERROR: This transmit interface is being used on multiple s as transmitter: '%s'\n", cf->name, cf->linenum, param1); has_fault = 1; } else if (aif == NULL) { printf("%s:%d ERROR: Unknown interface: '%s'\n", cf->name, cf->linenum, param1); has_fault = 1; } } else if (strcmp(name, "ratelimit") == 0) { char *param2 = str; str = config_SKIPTEXT(str, NULL); str = config_SKIPSPACE(str); rateincrement = (float)atof(param1); ratelimit = (float)atof(param2); if (rateincrement < 0.01 || rateincrement > rateincrementmax) rateincrement = 60; if (ratelimit < 0.01 || ratelimit > ratelimitmax) ratelimit = 60; if (ratelimit < rateincrement) rateincrement = ratelimit; if (debug) printf(" .. ratelimit %f %f\n", rateincrement, ratelimit); } else if (strcmp(name, "srcratelimit") == 0) { char *param2 = str; str = config_SKIPTEXT(str, NULL); str = config_SKIPSPACE(str); srcrateincrement = (float)atof(param1); srcratelimit = (float)atof(param2); if (srcrateincrement < 0.01 || srcrateincrement > rateincrementmax) srcrateincrement = 60; if (srcratelimit < 0.01 || srcratelimit > ratelimitmax) srcratelimit = 60; if (srcratelimit < srcrateincrement) srcrateincrement = srcratelimit; if (debug) printf(" .. srcratelimit %f %f\n", srcrateincrement, srcratelimit); } else if (strcmp(name, "") == 0) { if (traceparam == NULL) { traceparam = digipeater_config_tracewide(cf, 1); if (traceparam == NULL) { printf("%s:%d ERROR: definition failed!\n", cf->name, cf->linenum); has_fault = 1; } } else { printf("%s:%d ERROR: Double definition of !\n", cf->name, cf->linenum); has_fault = 1; } } else if (strcmp(name, "") == 0) { if (wideparam == NULL) { wideparam = digipeater_config_tracewide(cf, 0); if (wideparam == NULL) { printf("%s:%d ERROR: definition failed!\n", cf->name, cf->linenum); has_fault = 1; } } else { printf("%s:%d ERROR: Double definition of !\n", cf->name, cf->linenum); has_fault = 1; } } else if (strcmp(name, "") == 0) { struct digipeater_source *src = digipeater_config_source(cf); if (src != NULL) { // Found a source, link it! sources = realloc(sources, sizeof(void*) * (sourcecount+1)); sources[sourcecount] = src; ++sourcecount; } else { has_fault = 1; printf("%s:%d ERROR: definition failed\n", cf->name, cf->linenum); } } else { printf("%s:%d ERROR: Unknown config keyword: '%s'\n", cf->name, cf->linenum, name); has_fault = 1; continue; } } if (aif == NULL && !has_fault) { printf("%s:%d ERROR: Digipeater defined without transmit interface.\n", cf->name, cf->linenum); has_fault = 1; } if (sourcecount == 0 && !has_fault) { printf("%s:%d ERROR: Digipeater defined without :s.\n", cf->name, cf->linenum); has_fault = 1; } // Check that source definitions are unique for ( i = 0; i < sourcecount; ++i ) { int j; for (j = i+1; j < sourcecount; ++j) { if (sources[i]->src_if == sources[j]->src_if) { has_fault = 1; printf("%s:%d Two s on this definition use same : '%s'\n", cf->name, line0, sources[i]->src_if->callsign); } } } if (has_fault) { // Free allocated resources and link pointers, if any for ( i = 0; i < sourcecount; ++i ) { free_source(sources[i]); } if (sources != NULL) free(sources); free_tracewide(traceparam); free_tracewide(wideparam); printf("ERROR: Config fault observed on definitions! \n"); } else { // Construct the digipeater digi = calloc(1,sizeof(*digi)); if (debug>1)printf(" sourcecount=%d\n",sourcecount); // up-link all interfaces used as sources for ( i = 0; i < sourcecount; ++i ) { struct digipeater_source *src = sources[i]; src->parent = digi; // Set parent link src->src_if->digisources = realloc( src->src_if->digisources, (src->src_if->digisourcecount +1) * (sizeof(void*))); src->src_if->digisources[src->src_if->digisourcecount] = src; src->src_if->digisourcecount += 1; } aif->txrefcount += 1; // Increment Tx usage Reference count. // We permit only one to // use any given Tx-interface. (Rx:es // permit multiple uses.) digi->transmitter = aif; digi->tbf_limit = (ratelimit * TOKENBUCKET_INTERVAL)/60; digi->tbf_increment = (rateincrement * TOKENBUCKET_INTERVAL)/60; digi->src_tbf_limit = (srcratelimit * TOKENBUCKET_INTERVAL)/60; digi->src_tbf_increment = (srcrateincrement * TOKENBUCKET_INTERVAL)/60; digi->tokenbucket = digi->tbf_limit; digi->dupechecker = dupecheck_new(dupestoretime); // Dupecheck is per transmitter #ifndef DISABLE_IGATE digi->historydb = historydb_new(); // HistoryDB is per transmitter #endif digi->trace = (traceparam != NULL) ? traceparam : & default_trace_param; digi->wide = (wideparam != NULL) ? wideparam : & default_wide_param; digi->sourcecount = sourcecount; digi->sources = sources; digis = realloc( digis, sizeof(void*) * (digi_count+1)); digis[digi_count] = digi; ++digi_count; } return has_fault; } static int decrement_ssid(uint8_t *ax25addr) { // bit-field manipulation int ssid = (ax25addr[AX25ADDRLEN-1] >> 1) & 0x0F; if (ssid > 0) --ssid; ax25addr[AX25ADDRLEN-1] = (ax25addr[AX25ADDRLEN-1] & 0xE1) | (ssid << 1); return ssid; } /* 0 == accept, otherwise reject */ /* int digipeater_receive_filter(struct digipeater_source *src, struct pbuf_t *pb) { if (src->src_filters == NULL) { if (debug>1) printf("No source filters, accepted the packet from %s.\n", src->src_if->callsign); return 0; } int rc = filter_process(pb, src->src_filters, src->parent->historydb); if (rc != 1) { if (debug>1) printf("Source filtering rejected the packet from %s.\n", src->src_if->callsign); return 1; } if (debug>1) printf("Source filtering accepted the packet from %s.\n", src->src_if->callsign); return 0; } */ static void digipeater_receive_backend(struct digipeater_source *src, struct pbuf_t *pb) { int len, viaindex; struct digistate state; struct viastate viastate; struct digipeater *digi = src->parent; char viafield[14]; // room for text format uint8_t *axaddr, *e; memset(&state, 0, sizeof(state)); memset(&viastate, 0, sizeof(viastate)); // 2) Verify that none of our interface callsigns does match any // of already DIGIPEATED via fields! (fields that have H-bit set) // ( present implementation: this digi's transmitter callsign is // verified) // Parse executed and requested WIDEn-N/TRACEn-N info if (parse_tnc2_hops(&state, src, pb)) { // A fault was observed! -- tests include "not this transmitter" if (debug>1) printf("Parse_tnc2_hops rejected this."); return; } if (pb->is_aprs) { if (state.v.probably_heard_direct) { // Collect a decaying average of distances to stations? // .. could auto-beacon an aloha-circle - maybe // .. note: this does not get packets that have no VIA fields. // Score of direct DX:es? // .. note: this does not get packets that have no VIA fields. } else { if (src->src_relaytype == DIGIRELAY_DIGIPEAT_DIRECTONLY) { // Source relaytype is DIRECTONLY, and this was not // likely directly heard... if (debug>1) printf("DIRECTONLY -mode, and packet is probably not direct heard."); return; } } // Keep score of all DX packets? if (try_reject_filters(3, pb->info_start, src)) { if (debug>1) printf(" - Data body regexp filters reject\n"); return; // data body regexp reject filters } // FIXME: 3) aprsc style filters checking in service area of the packet.. } // 4) Hop-count filtering: // APRSIS sourced packets have different rules than DIGIPEAT // packets... if (state.v.hopsreq <= state.v.hopsdone) { if (debug>1) printf(" No remaining hops to execute.\n"); return; } if (state.v.hopsreq > digi->trace->maxreq || state.v.hopsreq > digi->wide->maxreq || state.v.tracereq > digi->trace->maxreq || state.v.digidone > digi->trace->maxdone || state.v.digidone > digi->wide->maxdone || state.v.hopsdone > digi->trace->maxdone || state.v.hopsdone > digi->wide->maxdone || state.v.tracedone > digi->trace->maxdone) { if (debug) printf(" Packet exceeds digipeat limits\n"); if (!state.v.probably_heard_direct) { if (debug) printf(".. discard.\n"); return; } else { state.v.fixall = 1; } } // if (debug) printf(" Packet accepted to digipeat!\n"); state.ax25addrlen = pb->ax25addrlen; memcpy(state.ax25addr, pb->ax25addr, pb->ax25addrlen); axaddr = state.ax25addr + 2*AX25ADDRLEN; e = state.ax25addr + state.ax25addrlen; if (state.v.fixall) { // Okay, insert my transmitter callsign on the first // VIA field, and mark the rest with H-bit // (in search loop below) int taillen = e - axaddr; if (state.ax25addrlen >= AX25ADDRMAXLEN) { if (debug) printf(" FIXALL TRACE overgrows the VIA fields! Dropping last of incoming ones.\n"); // Drop the last via field to make room for insert below. state.ax25addrlen -= AX25ADDRLEN; taillen -= AX25ADDRLEN; } // If we have a tail, move it up (there is always room for it) if (taillen > 0) memmove(axaddr+AX25ADDRLEN, axaddr, taillen); state.ax25addrlen += AX25ADDRLEN; e = state.ax25addr + state.ax25addrlen; // recalculate! // Put the transmitter callsign in memcpy(axaddr, digi->transmitter->ax25call, AX25ADDRLEN); // Set Address Termination bit at the last VIA field // (possibly ours, or maybe the previous one was truncated..) axaddr[state.ax25addrlen-1] |= AX25ATERM; } // Search for first AX.25 VIA field that does not have H-bit set: viaindex = 1; // First via field is number 2 *viafield = 0; // clear that buffer for starters for (; axaddr < e; axaddr += AX25ADDRLEN, ++viaindex) { ax25_to_tnc2_fmtaddress(viafield, axaddr, 0); // if (debug>1) { // printf(" via: %s", viafield); // } // Initial parsing said that things are seriously wrong.. // .. and we will digipeat the packet with all H-bits set. if (state.v.fixall) axaddr[AX25ADDRLEN-1] |= AX25HBIT; if (!(axaddr[AX25ADDRLEN-1] & AX25HBIT)) // No "Has Been Digipeated" bit set break; // this doesn't happen in "fixall" mode } switch (src->src_relaytype) { case DIGIRELAY_THIRDPARTY: // Effectively disable the digipeat modifying of address axaddr = e; break; case DIGIRELAY_DIGIPEAT: // Normal functionality break; default: ; } // Unprocessed VIA field found (not in FIXALL mode) if (axaddr < e) { // VIA-field of interest has been found // FIXME: 5) / 6) Cross-frequency/cross-band digipeat may add a special // label telling that the message originated on other band // 7) WIDEn-N treatment (as well as transmitter matching digi) if (pb->digi_like_aprs) { if (strcmp(viafield,digi->transmitter->callsign) == 0 || // Match on the transmitter callsign without the star... match_aliases(viafield, digi->transmitter)) { // .. or match transmitter interface alias. // Treat it as a TRACE request. int aterm = axaddr[AX25ADDRLEN-1] & AX25ATERM; // save old address termination bit // Put the transmitter callsign in, and set the H-bit. memcpy(axaddr, digi->transmitter->ax25call, AX25ADDRLEN); axaddr[AX25ADDRLEN-1] |= (AX25HBIT | aterm); // Set H-bit } else if ((len = match_tracewide(viafield, src->src_trace))) { count_single_tnc2_tracewide(&viastate, viafield, 1, len, viaindex); } else if ((len = match_tracewide(viafield, digi->trace))) { count_single_tnc2_tracewide(&viastate, viafield, 1, len, viaindex); } else if ((len = match_tracewide(viafield, src->src_wide))) { count_single_tnc2_tracewide(&viastate, viafield, 0, len, viaindex); } else if ((len = match_tracewide(viafield, digi->wide))) { count_single_tnc2_tracewide(&viastate, viafield, 0, len, viaindex); } } else { // Not "digi_as_aprs" rules if (strcmp(viafield,digi->transmitter->callsign) == 0) { // Match on the transmitter callsign without the star. // Treat it as a TRACE request. int aterm = axaddr[AX25ADDRLEN-1] & AX25ATERM; // save old address termination bit // Put the transmitter callsign in, and set the H-bit. memcpy(axaddr, digi->transmitter->ax25call, AX25ADDRLEN); axaddr[AX25ADDRLEN-1] |= (AX25HBIT | aterm); // Set H-bit } else if (match_aliases(viafield, digi->transmitter)) { // Match on the aliases. // Treat it as a TRACE request. int aterm = axaddr[AX25ADDRLEN-1] & AX25ATERM; // save old address termination bit // Put the transmitter callsign in, and set the H-bit. memcpy(axaddr, digi->transmitter->ax25call, AX25ADDRLEN); axaddr[AX25ADDRLEN-1] |= (AX25HBIT | aterm); // Set H-bit } } if (viastate.tracereq > viastate.tracedone) { // if (debug) printf(" TRACE on %s!\n",viafield); // Must move it up in memory to be able to put // transmitter callsign in int taillen = e - axaddr; int newssid; if (state.ax25addrlen >= AX25ADDRMAXLEN) { if (debug) printf(" TRACE overgrows the VIA fields! Discard.\n"); return; } memmove(axaddr+AX25ADDRLEN, axaddr, taillen); state.ax25addrlen += AX25ADDRLEN; newssid = decrement_ssid(axaddr+AX25ADDRLEN); if (newssid <= 0) axaddr[2*AX25ADDRLEN-1] |= AX25HBIT; // Set H-bit // Put the transmitter callsign in, and set the H-bit. memcpy(axaddr, digi->transmitter->ax25call, AX25ADDRLEN); axaddr[AX25ADDRLEN-1] |= AX25HBIT; // Set H-bit } else if (viastate.hopsreq > viastate.hopsdone) { // If configuration didn't process "WIDE" et.al. as // a TRACE, then here we process them without trace.. int newssid; if (debug) printf(" VIA on %s!\n",viafield); newssid = decrement_ssid(axaddr); if (newssid <= 0) axaddr[AX25ADDRLEN-1] |= AX25HBIT; // Set H-bit } } { history_cell_t *hcell; char tbuf[2800]; int is_ui = 0, ui_pid = -1, frameaddrlen = 0, tnc2addrlen = 0, t2l; // uint8_t *u = state.ax25addr + state.ax25addrlen; // *u++ = 0; // *u++ = 0; // *u++ = 0; t2l = ax25_format_to_tnc( state.ax25addr, state.ax25addrlen+AX25ADDRLEN-1, tbuf, sizeof(tbuf), & frameaddrlen, &tnc2addrlen, & is_ui, &ui_pid ); tbuf[t2l] = 0; if (debug) { printf(" out-hdr: '%s' data='",tbuf); (void)fwrite(pb->ax25data+2, pb->ax25datalen-2, // without Control+PID 1, stdout); printf("'\n"); } #ifndef DISABLE_IGATE // Insert into history database - track every packet hcell = historydb_insert_( digi->historydb, pb, 1 ); if (hcell != NULL) { if (hcell->tokenbucket < 1.0) { if (debug) printf("TRANSMITTER SOURCE CALLSIGN RATELIMIT DISCARD.\n"); return; } hcell->tokenbucket -= 1.0; } #endif // Now we do token bucket filtering -- rate limiting if (digi->tokenbucket < 1.0) { if (debug) printf("TRANSMITTER RATELIMIT DISCARD.\n"); return; } digi->tokenbucket -= 1.0; if (pb->is_aprs && rflogfile) { int t2l2; // Essentially Debug logging.. to file if (sizeof(tbuf) - pb->ax25datalen > t2l && t2l > 0) { // Have space for body too, skip leading Ctrl+PID bytes memcpy(tbuf+t2l, pb->ax25data+2, pb->ax25datalen-2); // Ctrl+PID skiped t2l2 = t2l + pb->ax25datalen-2; // tbuf size sans Ctrl+PID rflog( digi->transmitter->callsign, 'T', 0, tbuf, t2l2 ); tbuf[t2l]=0; } } // Feed to dupe-filter (transmitter specific) // this means we have already seen it, and when // it comes back from somewhere, we do not digipeat // it ourselves. // This recording is needed at output side of digipeater // for APRSIS and DPRS transmit gates. if (t2l>0) { dupecheck_aprs( digi->dupechecker, (const char *)tbuf, t2l, (const char *)pb->ax25data+2, pb->ax25datalen-2 ); // ignore Ctrl+PID } else { dupecheck_aprs( digi->dupechecker, (const char *)state.ax25addr, state.ax25addrlen, (const char *)pb->ax25data+2, pb->ax25datalen-2 ); // ignore Ctrl+PID } } // Feed to interface_transmit_ax25() with new header and body interface_transmit_ax25( digi->transmitter, state.ax25addr, state.ax25addrlen, (const char*)pb->ax25data, pb->ax25datalen ); if (debug>1) printf("Done.\n"); } void digipeater_receive( struct digipeater_source *src, struct pbuf_t *pb ) { // Below numbers like "4)" refer to Requirement Specification // paper chapter 2.6: Digipeater Rules // The dupe-filter exists for APRS frames, possibly for some // selected UI frame types, and definitely not for CONS frames. if (debug) printf("digipeater_receive() from %s, is_aprs=%d viscous_delay=%d\n", src->src_if->callsign, pb->is_aprs, src->viscous_delay); if (src->tokenbucket < 1.0) { if (debug) printf("SOURCE RATELIMIT DISCARD\n"); return; } src->tokenbucket -= 1.0; if (pb->is_aprs) { const int source_is_transmitter = (src->src_if == src->parent->transmitter); // 1) Feed to dupe-filter (transmitter specific) // If the dupe detector on this packet has reached // count > 1, drop it. int jittery = src->viscous_delay > 0 ? random() % 3 + src->viscous_delay : 0; dupe_record_t *dupe = dupecheck_pbuf( src->parent->dupechecker, pb, jittery); if (dupe == NULL) { // Oops.. allocation error! if (debug) printf("digipeater_receive() - dupecheck_pbuf() allocation error, packet discarded\n"); return; } // 1.1) optional viscous delay! if (src->viscous_delay == 0) { // No delay, direct cases // First packet on direct source arrives here // with seen = 1 // 1.x) Analyze dupe checking if (debug>1) printf("Seen this packet %d times (delayed=%d)\n", dupe->delayed_seen + dupe->seen, dupe->delayed_seen); if (dupe->seen > 1) { // N:th direct packet, duplicate. // Drop this direct packet. if (debug>1) printf(".. discarded\n"); return; } if (dupe->seen == 1 && dupe->delayed_seen > 0 && dupe->pbuf == NULL) { // First direct, but dupe record does not have // pbuf anymore indicating that a delayed // handling did process it sometime in past. // Drop this direct packet. if (debug>1) printf(".. discarded\n"); return; } if (dupe->seen == 1 && dupe->delayed_seen >= 0 && dupe->pbuf != NULL) { // First direct, and pbuf exists in dupe record. // It was added first to viscous queue, and // a bit latter came this direct one. // Remove one from viscous queue, and proceed // with direct processing. if (debug>1) printf(" .. discard dupe record, process immediately"); pbuf_put(dupe->pbuf); dupe->pbuf = NULL; dupe = NULL; // Do not do dupecheck_put() here! } } else { // src->viscous_delay > 0 // First packet on viscous source arrives here // with dupe->delayed_seen = 1 // Has this been seen on direct channel? if (dupe->seen > 0) { // Already processed thru direct processing, // no point in adding this to viscous delay queue if (debug>1) printf("Seen this packet %d times. Discarding it.\n", dupe->delayed_seen + dupe->seen); return; } // Depending on source definition, the transmitter is // either non-viscous or viscous. We care about it // only when the source is viscous: if (source_is_transmitter) dupe->seen_on_transmitter += 1; if (dupe->delayed_seen > 1) { // 2nd or more of same packet from delayed source if (debug>1) printf("Seen this packet %d times.\n", dupe->delayed_seen + dupe->seen); // If any of them is transmitter interface, then // drop the queued packet, and drop current one. if (dupe->seen_on_transmitter > 0) { // If pbuf is on delayed queue, drop it. if (dupe->pbuf != NULL) { pbuf_put(dupe->pbuf); dupe->pbuf = NULL; dupe = NULL; // Do not do dupecheck_put() here! } } if (debug>1) printf(".. discarded\n"); return; } // First time that we have seen this packet at all. // Put the pbuf_t on viscous delay queue.. (Put // this dupe_record_t there, and the pbuf_t pointer // is already in that dupe_record_t.) src->viscous_queue_size += 1; if (src->viscous_queue_size > src->viscous_queue_space) { src->viscous_queue_space += 16; src->viscous_queue = realloc( src->viscous_queue, sizeof(void*) * src->viscous_queue_space ); } src->viscous_queue[ src->viscous_queue_size -1 ] = dupecheck_get(dupe); if (debug) printf("%ld ENTER VISCOUS QUEUE: len=%d pbuf=%p\n", tick.tv_sec, src->viscous_queue_size, pb); return; // Put on viscous queue } } // Send directly to backend if (debug>1) printf(".. direct to processing\n"); digipeater_receive_backend(src, pb); } dupecheck_t *digipeater_find_dupecheck(const struct aprx_interface *aif) { int i; for (i = 0; i < digi_count; ++i) { if (aif == digis[i]->transmitter) return digis[i]->dupechecker; } return NULL; } struct digipeater* digipeater_find_by_iface(const struct aprx_interface *aif) { int i; for (i = 0; i < digi_count; i++) { if (aif == digis[i]->transmitter) return digis[i]; } if (debug > 1) printf(" Failed to find digipeater by aprx_interface\n"); return NULL; } static void digipeater_resettime(void *arg) { struct timeval *tv = (struct timeval *)arg; *tv = tick; } // Viscous queue processing needs poll digis s for delayed actions int digipeater_prepoll(struct aprxpolls *app) { int d, s; if (tokenbucket_timer.tv_sec == 0) { tokenbucket_timer = tick; // init this.. } // If the time(2) has jumped around a lot, // and we didn't get around to do our work, reset the timer. if (time_reset) { digipeater_resettime(&tokenbucket_timer); } if (tv_timercmp( &tokenbucket_timer, &tick ) <= 0) { // Run the digipeater timer handling now // Will also advance the timer! if (debug>2) printf("digipeater_prepoll() run tokenbucket_timers\n"); tv_timeradd_seconds( &tokenbucket_timer, &tokenbucket_timer, TOKENBUCKET_INTERVAL); run_tokenbucket_timers(); } if (tv_timercmp( &tokenbucket_timer, &app->next_timeout ) <= 0) { app->next_timeout = tokenbucket_timer; } // if (debug>2) printf("digipeater_prepoll - 1 - timeout millis=%d\n",aprxpolls_millis(app)); // Over all digipeaters.. for (d = 0; d < digi_count; ++d) { struct digipeater *digi = digis[d]; // Over all sources in those digipeaters for (s = 0; s < digi->sourcecount; ++s) { struct timeval tv; struct digipeater_source * src = digi->sources[s]; // If viscous delay is zero, there is no work... // if (src->viscous_delay == 0) // continue; // Delay is non-zero, perhaps there is work? if (src->viscous_queue_size == 0) // Empty queue continue; // First entry expires first tv.tv_sec = src->viscous_queue[0]->t + src->viscous_delay; tv.tv_usec = 0; if (tv_timercmp(&app->next_timeout, &tv) > 0) { app->next_timeout = tv; // if (debug>2) printf("digipeater_prepoll - 2 - timeout millis=%d\n",aprxpolls_millis(app)); } } } return 0; } static void sourcecalltick(struct digipeater *digi); int digipeater_postpoll(struct aprxpolls *app) { int d, s, i, donecount; if (tv_timercmp(&tokenbucket_timer, &tick) < 0) { tv_timeradd_seconds( &tokenbucket_timer, &tokenbucket_timer, TOKENBUCKET_INTERVAL); run_tokenbucket_timers(); } // Over all digipeaters.. for (d = 0; d < digi_count; ++d) { struct digipeater *digi = digis[d]; // Over all sources in those digipeaters for (s = 0; s < digi->sourcecount; ++s) { struct digipeater_source * src = digi->sources[s]; // If viscous delay is zero, there is no work... // if (src->viscous_delay == 0) // continue; // Delay is non-zero, perhaps there is work? if (src->viscous_queue_size == 0) // Empty queue continue; // Feed backend from viscous queue donecount = 0; for (i = 0; i < src->viscous_queue_size; ++i) { struct dupe_record_t *dupe = src->viscous_queue[i]; time_t t = dupe->t + src->viscous_delay; if ((t - tick.tv_sec) <= 0) { if (debug)printf("%ld LEAVE VISCOUS QUEUE: dupe=%p pbuf=%p\n", tick.tv_sec, dupe, dupe->pbuf); if (dupe->pbuf != NULL) { // We send the pbuf from viscous queue, if it still is // present in the dupe record. (For example direct sourced // packets remove a packet from queued dupe record.) digipeater_receive_backend(src, dupe->pbuf); // Remove the delayed pbuf from this dupe record. pbuf_put(dupe->pbuf); dupe->pbuf = NULL; } dupecheck_put(dupe); ++donecount; } else { break; // found a case we are not yet interested in. } } if (donecount > 0) { if (donecount >= src->viscous_queue_size) { // All cleared src->viscous_queue_size = 0; } else { // Compact the queue left after this processing round i = src->viscous_queue_size - donecount; memcpy(&src->viscous_queue[0], &src->viscous_queue[donecount], sizeof(void*) * i); src->viscous_queue_size = i; } } } } return 0; } static int run_tokenbucket_timers() { int d, s; // Over all digipeaters.. for (d = 0; d < digi_count; ++d) { struct digipeater *digi = digis[d]; digi->tokenbucket += digi->tbf_increment; if (digi->tokenbucket > digi->tbf_limit) digi->tokenbucket = digi->tbf_limit; #ifndef DISABLE_IGATE sourcecalltick(digi); #endif // Over all sources in those digipeaters for (s = 0; s < digi->sourcecount; ++s) { struct digipeater_source * src = digi->sources[s]; src->tokenbucket += src->tbf_increment; if (src->tokenbucket > src->tbf_limit) src->tokenbucket = src->tbf_limit; } } return 0; } #ifndef DISABLE_IGATE static void sourcecalltick(struct digipeater *digi) { int i; historydb_t *db = digi->historydb; if (db == NULL) return; // Should never happen.. for (i = 0; i < HISTORYDB_HASH_MODULO; ++i) { history_cell_t *c = db->hash[i]; for ( ; c != NULL; c = c->next ) { c->tokenbucket += digi->src_tbf_increment; if (c->tokenbucket > digi->src_tbf_limit) c->tokenbucket = digi->src_tbf_limit; } } } #endif // An utility function that exists at GNU Libc.. #if !defined(HAVE_MEMRCHR) && !defined(_FOR_VALGRIND_) void *memrchr(const void *s, int c, size_t n) { const unsigned char *p = s; c &= 0xFF; for (p = s+n; n > 0; --n, --p) { if (*p == c) return (void*)p; } return NULL; } #endif aprx-2.9.0/doc/000775 000000 000000 00000000000 13040775352 013227 5ustar00rootroot000000 000000 aprx-2.9.0/doc/aprx-manual-pics.odp000664 000000 000000 00000037431 13040775352 017124 0ustar00rootroot000000 000000 PK•4!I3&¬¨//mimetypeapplication/vnd.oasis.opendocument.presentationPK•4!I»¶²PººThumbnails/thumbnail.png‰PNG  IHDRÀÜ3MTýPLTE ,,,54418?<<<ÏîCÞÊ ­`¶‰”€O^q¡ ‹e_Àž3¥~UÎ3Œiõ-¦ò%_ ˜X-2–°öèÙMݸrBð‘¶Ë®6ÄÓ¡,’@k'—‚g'  äKEErï'À$™üò¿ÿ{ï s¥Ü÷ñB@ €@ €@€ÇYÆ} úù°ºqŸøH_g)ñ”ç~Tí“u¶Õ`õ˜V:_O‚À×ô0 €0 Ú†w›rw|ÁG€€,ÇRAî+Q%¯±£.ÊXÑ]EXæ 0‘?ùQî¨ €iιf ¥›»ìÒ}ð§@µv!G@žåh€¾.žBùA® 1`Í…œ¨ËÿÆök§¢2ß¿†gÞZøU ‹ße«qÍxhÎ5fÑÅ\9šøþgl5£Í‡r€U“€&@(‰ª #¦Ã ›a+°ð“ l!¸?þuÿYL–ùeYLä]“函p8¼à“ <  €oŒº-³[ÁñQelþL'ÁñV@¸Yg=t€ž–Þg)Ü÷ƒœeîܕщ­Æ<”qç˜BÐL ¯T -XÞj½[€Ñ^ƒËeàA ^{ül¾q&‰Ý‹¨p­Wé€JK(µÕ;U§A=â `™„qY Tj“W ¥¨4Øo†•FƒÚ`ÐÍÎÌ!@Ÿ·£Îèf‚šV˜úªü­—*‚ÅÔªRjQ† 4¤hÓ=WTðyx¯šáwbKŒ„&+<¿9BÊÏô wîú@oÀ0!iœk–'Su ’Âú×\Xޤ]®ú˜1·6¢»hm1wç‡e,Fxþúø#€Îfu:*ÛË¥[ö@c½{$Ë«x•M½Ì—„ü´<ù¥ìMEÉH,ÏïÄ›¹)¼ÓŸÚ×€—8A-ÌÓ‰–@v Rü+V ¶í9Ðæ [T0'Ôlb宪A!;ø[QdoM²_É!N=Ê)!WÜåòAtç3ZÍîYÍ„»VÀòKYi™`Þ³Û·™Ñm™DTåÅ9ð‹ÐÕ¬qbiÛ5Z”îõ¢KKE‡ÿøë/EÙ t€ýyÙ]ØŠŠÌ_¸›¼é¤DÉ@kqW½@í"óœD]wpU›ÝS›^Žef]¢ëš~wí×_„` áæ“!D“gïû&NÛZ Ëþ¨lû0â à]ðßHýä À®HLòIðÎØäg#‘€SÝ{pD.ûÛ¹q©ç4£H‹@×ød»3€±·ÉØÜÚú3 Ô? Xíö »ˆ?8ѹýˆ1h}*¨l#ß=­ëæÑŸ`l.Fù‹ÙÅ;ó§xà`ü€a-øci-Oµ„2æm+ðÂs“PMÉ8Vßõåñ§G¤Á]©çóS±v°˜B±õ¡R(uýäOC@5ƒtøjÓǼ þ_÷£›{R• tÿÍX*`N„Q(ysÚ ÈnMW¡yÀãõ¶—C%j[P¦K$Î^Ȩ Õχ×MàڵԎ׋²öK7wmÆ$©}û`tÝgX#àÕêû€p §fZ2Î#[ùQ5nÿG Õð󸶓TÐ0ŒOÆ¿!CËzzÅöd1€kÕ ½!FTkRU®6HGJö¿:g%ÁoW¢ŒzܤÇRÕ¹»‰s†&#Ú>#Ø îlÑeÈ.0åCHa‹Tî¼W)lwL‚w(£v¯RÎT«žúÛÍÙÚì‚îúïg÷j—1äªcÐ7"-þ7N u'/¶dï'Ò‡EÀ?±:N¾JPF=ó&º¥°*QP–_F5Û%AÀÏQúõ¨è6pú]fäáßÇ(‚gðKò]h½ê=ÇS1">~ïel]\¹uÙ½ßtç/E¹Xì® ×¦÷ú²N_`­EÊÿÅv†‹‚#FÀ22³#ôíʪÕàÌO¨ù=3òØ—ðx‡¯8I®¦[q~Ó WÕayβ¥X½'€d=7 –¨# Ö‘FE†!nwEçtÿÕk€$ÀÅe¢¤” Œ b%%½=k0ômH»Êú¨œ/YU³ù{çáÿ¯|'Ô3ªôo8³k•QÕL¨TòYý€:'ý€JÕ uíÖ@ÚbR)Îdò‚îÒW³9ÍB"]ÅŽ/$©9œ‘‡ðœO`,0 à,[Þ³ê£{þó 7Nº¢]_ì@üÛ<$§bGÐ}¯¡/ëNE_vÛp5‚™ÃÑàà# Ñrb]š¸xˉيTòÛR•¿½Ú÷?9'·Ó6p‘šíDUô•§Ð?`éײҊ²–¢¡,,µÇ»*PÕšò~Åö5âWØÛñ«z‚pÛ:Иyèmrðáä€1½&¦¾1zH‚n¡è]#\‡äýA7X—Vëb˜ú"o_?À˜Wa=¯€º8&Ø?ÿŠÚ´¶Ï‘ fEùãÁYýváe}ÔT™ ¶Þg ÀÛóu ë¼À|=—4ô¾°p#`Ðm_ðÞ[È"Žð–åÔ1=ž!´¾À0«ϵ"Â&¹ù¬)òprÍÓMè4 ¦!—ø’äå÷¨Œâe’ü€š¬_•.=šå#nÆÓúœòä @e(¤ŒKÏ\ +¤–3C>Ífë*Õ±k>;¾,»ãì©ä ÛÈuíu°–nSÖ{1òÅfpl'AÛA«‘0í½a-žlõ–ÁÍâçúO8@M2"R‹>ýPÆ6P%6€:²7xÇï¹°O¾_àÝëSè·ÒDŽH77f‚ƤÀ.Œ>±?z²|*²‡Z›ðª4¹š¦ ‰ê]_¨9×ÜHþ{ï 0Ô†4À×<þa™0òÏ^Rû0±|\ÂóU>— Xiâ}I&3Jq(ÑÇL¢”ÖuiG‹“ŽíSa©C‚í>Wˆ{Ç«ÐzD#ൖ#€­€Ï|ÝÛß;ÐÛßßÛo½ÓÛG.½}äݾòöý‚˜_@ €@ €@ Àã)c££ƒn–©íG=-£Ï&@¿Ûó!†ÉÍF‡=^ ƒ/h€±ùðµÁÍ„<†É '¿é5¸_Ɔ%è!µ\0gô€Kš¦±Î]àsýÒ· `ŽæuÐKµj“R·65€n%¸‹jÃ5·•SÏØX*ÚbÐaj­WiyÃLA*©Ikàî4£áqx}éì7Ž\pº )L²’/Nˆ+ ÎËŸLÂCÄ»—4ψëô#¡q»™kJíþU‹pÃåÀö†Éþ£Óá½áO à!#ã‚ä¬P‚–V´ï|²¿°Œ. fbþH9sfˆïAÿÇÛWû-Êñz " a\dnà"h†C7<嘸P5.lH¢—,æ„]ÌK¢_Œû{òKg]‹¢YCoÅ ?ãþ;µ™ÎV„ñ‚tNýº™q¯ÐK~W¾êµ}´µÈêÚP¶*fërq(ë«ÓSt¯ÿ—wtO Àq*-‚Å4oüò áDíÖœí`£&@aœ=%Ìd¸ˆ%I &Ë‹V€¦ýDšÝ%ÁV» jià $ù©ä€Ó+üþ°Åj{‰ó¢ÈÞÈÜx³§0À<+z'<¤4‚!7Í Þäl¢!»mÇˆÚæ`¹®{ÕúÌ®Uìc,gowÁYvtÇìËçéæ¾u1_Z¦º9xYPp”×ôKIàl€¯û‡–±¬W†çÞ´4™¶ß‡5;‰€qÇ鎎åsçàD¥~˜ÖñFËñ˜6•Ù>>³ä€ø›“löߤHZ#×03îóE3ÎF]#··F@×òêQ2¬=K“í9rås pû:è–6ÐÓÐv1¯¡ç*†ä›4ƒäøIÌŸÊÅ<¨\Œè\ô¬åœ°¶ÈÒ¥*ݰ¡G(w’Q#ÖBvÿPH+[ªÒGÈ5.”4ˆ L¢RÇV€œÊ7îÆTèw™Ü¢©êžxGˆ©Ï EÉÞ<´}±LÙî`.Cd4%…©9×—JùõF?3døÄ/Ä©O¼+¡ßU³ UG˜ ËÀítùIï*Ñ+'ÝhÁwIdõ8|=P)åÿ-=³#„8ŒÞxB¡é)KDÝåé•e»Möu·†Òý»Ô̳›îVtâJ‰Æ €Lá¯na†5¨@ÕThtÚú._Dè‚ÊÑGÄ­\%û†ù2š @Ħwæ”nažÏ“†n,±Ú]ÈXeDPc3\¶úP–_;†ìtÛ˜Ÿ£A'‚mš\Å[ÌÚ½þ¢=i7 Ù):'$BÏ¥E}Yx•TÑïM>k«“±À“x¨‰”&«€Iš§x; l+8Ðvº©ØhýöhA1=º…$f÷c9À¬³ñL•ÖÉ›í»Éy6±<¢•¼u“‹msüñ´Óc ¿=9a¡Õº –×¶¼8ŽÁc‚ó  wx˜&ÈÛð°õÞ0a$l?²”©75vwb;0IEND®B`‚PK•4!Imeta.xmlTËŽ›0Ý÷+3[ã„‹0j]ͨ•š‘º‹ãIÝ‚l3¤_cBJ:Ñ(Kß{ιç> |8¶Mô*Œ•Zmbœ 8ŠëZªÃ&~Þ~ëø¡úPê—É­5ï[¡h…c‘§*K§Ô&Yi©b­°Ôqª;¡f ]¢i(4EŽT¿7ñOç: á0 É&Ú .Š†ì ­ù×õ¦ ¨šCш±‚…8ÁpÆŽo55b—–:#¬Ï2†r›Æ’³ÔÒZŸM´iÁ:A(ƒÓ{FÛV6·V±€ë¶ó5÷ÍÅL™’í­2#ö냩ëæÚR¼çú©3ÇÀ«Ã]|qïw[œ»=ÁâðH\ÍW6®£*ÃR¤’N2ߦÌiS=1çdô‰%u ¯B&bxyiàŠŠ LúH±E˜"DÑêľÄM\Q{EuuoB®ú¶]O˜|?qÞä/iüo„­pöü/kNgS9@kâ-IišÓŒ$$Gi–¯ *á ›ÄB ú{”{#¾†IÁU‚“,!÷RõÇÝu¾Ë³hØuFÿÜAŒZtÿ¹—M ÈÉÖ?Å©ÂùÛ¶ã['yâz?*øCë•ó‹ÊW1¬Jx±*xí÷PýPK(C¶tÖ\PK•4!IConfigurations2/menubar/PK•4!IConfigurations2/floater/PK•4!IConfigurations2/toolbar/PK•4!IConfigurations2/progressbar/PK•4!I'Configurations2/accelerator/current.xmlPKPK•4!IConfigurations2/statusbar/PK•4!IConfigurations2/toolpanel/PK•4!IConfigurations2/popupmenu/PK•4!IConfigurations2/images/Bitmaps/PK•4!I styles.xmlí]K“ã¶¾çW¨ä²o¤øÐs¼3.Ç®T%ÙÙ¸¼ã\] IðR‹¤F3{Ê?È!‡ü¿ü’àIO‘õ í*{4ˆîF£Ñ?üð²özÏ0Œöïû¦nô{Ðw°‹üå}ÿ·§¿hÓþú€ äÀ;;›5ôc-Š_=õHc?ºã•÷ýMèßa¡èÎkÝÅΠ/Ý©Ôw¬+^ÂV·9#V[Çð%®Û˜Ò¦Ú‚yýž±ÚÚ Á¶ncJK0U›/pÝÆ/‘§-°æàub”áâÅCþ—ûþ*Žƒ»Á`»Ýê[[Çár`Îf³«Mvº`zŒÊuЃ´³h`êæ@Ò®a êòGiU–üÍzÃÚЀäF5aDHˆ¸T/ë=Hm“Ò¯çemíz^–Àì¬@X[ÏqZUl·¾ªØ®Úv âUÉøN¤’ýçñãN¯Âuݾ(m *'DAm19µÚcœ°JðÉÎØµ c8à¿êm%ù6D1 r§’Üž“ Ž×E :s@(4øLU>‘{¼ÚRÚ%>ª =¥Í©jHÁ/•p4a€Ã8dQßè’^¬Äd¬âµWn2h­$]†®[HJرÄ|É«=#¸ý¦ŸZ ªa–QfZ÷5aDªí­l`J“L_¢»…"\&KÙo|—¾0D´ x¬Ù]ê êhyø€GŠõOyBjQ@Г–"©ð1këHC>™ 8¸SZ§¬VÙqÑð=ý: u]‰Íý(Ž€Õ«þ“¨¹Ðñ¢‡ÜZ'Å=þ›2yßÿ1D€h1¤’€L—×]¹Ú”ÖhKè©ÈÄñø)ŠÅ1}Ï€´¥c?¨îú#"«ý÷øQßGßgèxáiY{"Ãõ>ÁmïWñ¨bÖ2tç`ígøøç¦1…¦KÑkÃõQ<…¹{XJHÎÂÑ_BKøQªNÉÁG¼Bqïgø |°$mÊÕ;Cx|>á³Ñèýô·¿÷>ÿÔû.7K¹,kpnŸÀŠL›Þ’Šc{”ÙNQÎ7PèE<¼ð {ìoiEC¼åüÑÅõÏøå¾oôŒžeôlƒ—“UâÑ$ežfÒ•e|݉íÂØxbŸ&Y2.C¬Ó—´â·u†1"ˆ>?ŠCüGÇÃÄ•ÿfjÐûœÉò¼¤ÆYÀÉbÔï-ðÝ–©œ)¢ÄÍimQc:£ Êç8«¡J È$ÓV8D_1uGÉ4EK2êl¢-^™úÀ¥a$ÌÊŠi(3JÅÇ1Ý¥Õyp3²!Z®”>+à²$r]ªûJ¡Fìmcí%Fºòµ°23JXôÈCQÚ¬ftH%óÈ&ÓãÄÚ|ãy0îñJZNœì>ÿÉ«44¸ïÿï¿ÿNNyˆ¢s¬Íùšæ¤&ë1`Pfx¤Íºý™Œàç×õ'>y¥QJ›œáè[6˪$m€ƒul½ÐæpC(A¸=„ìÖ2¹žßBÚÞ$B£Ö²ôáM"4n !û&ñ™´‡ÏÚéik oÔNÏZDè6í´i´Ñèmj¥ZìØe¯Êé›ìv–T`¾‹[Q(wéR¾KI—%QÌ+ÈÛ›†ñ-+eÈ!:थ˜ÖÞý³†xÓ“}šRʼnW!Þ,W+nñ+ˆâ× C£DDl>;äm„ì3Š`NE°‚—IÎõèŸ1.·s9‰6äGgT™åã¶bdäóÄl1Ùíjdóë³xNa”% ‡¨çœÜ‚¨qZ6, Êúj%‘ŸZÉ&¨MË­@RAŽËĘs2%ÄF›w(…#¡($!)$©/¥„„i\+ÀU67gBè!¸(POü\¤EbÊ樂´Ú¬Âó? oQL–#.ŒYÉ€)“t-©86¬¥›£’È–Áþ)ˆ\%¡íŠ˜×¤:æÅ'piÈËæ¸)šÜèœNaÕžQ„˜JŸ$Ju€äd¡±¾Óˆ¾O7xܑ͔ڬÿƒ±þ»eüNÙ§ÿ÷1ý/}ý?ájWHç›”ÁEQàWM}L>£çãmÝ#Méßj£Î,n ÆÚ”·Á廯—ä´ÚŮɘ,$¥¢ï‚¥gç“®ÌæGkéð|c1¹{{½B6ð÷ÓîºÜÕ„ÅÞE CE)2ɼ„L¥‡M†z,v¶e³þ,âŽHÝá°š‡uòµ8ñ–ŒÝ)Zj  Ǚͮk êLrÞKv[¯›%û¤¢`|›ííÓƒn7ZLV¸—v9jA/ÐZepZf}ŒšM ‰ÑELÕå@JLd„cŽ=·9t'2+W ݰ Ö„b2Éc]CmÂsÌ×ü滕-vQ^Ha»’lel¥I'}ã£XìÏ뎑ÕÄü,òyæÀù² i–uvÔW@NåmñÒ°â’ðýxt”@usΗ0s}Ãã@kuçÁÏ5ëí=´='0¼ô=ŸXFwZpÄi‡O­d+Ñ{>-(äfO ¤™Ö!ç<·h)yÍáÖÈŠ¶MÎIÓY¦1ññÄìŽV!ò¿ÐߤxOzeNŽ3¥YfÓ +{fWvž~dæ¿þsHòÜè:š\k¦U¶2}«:Tœ€yˆ]MêSË:Ô^æËë¹@æøF ÛKÁœÜhú\{)˜³›Ä§½LÓ¸C}½˜¦ù¶Luû)˜•y•Ì[ì ¥Ûê G@8|]Da¹’÷É¥ åç6ñ‡¬ß°Áai.ÍU ôVî‚^ÓCY„¨v;ˆYí f7<^.E¬°2ýúù¡ˆ ÛAÌn1«b¹àhe09X=±Q;ˆ ÛA¬I Ã¥·ƒØèý 6i±ñûAlÚb“÷ƒØ¬Ħï±h3/L¦mý@*ɉx¦-]FĹ®kž;%ìžüÜ隢G u7xt7xt7x\ãRwƒGwƒGwƒGwƒGwƒÇ•Ÿ½±“þËÜàÁ?æÝh( »ƒ¦î ©;hꚊ#o)ªÑ…4ºFÒèB]HãzêB]H£ it!.¤ñæCqŠ.$Q’]ßÐ…$ê†$†¹ ·w’(äFBjŒA è÷r<ðJ CjçÿãGãÉ¢9L©o¥1Ð+ì‘)ÓKUðK)îû+@lІ‚÷¼¼£9º1šÊ«?_éöd2´åoaÊMCƲP¾ ¬ºe‹,Îãx0ÉBb/ÌDâCšÖ¥¸Y OSóÒ@ÆÄ z>5œoæ“ÑxºÉbýÉfÙúl7æR*[“CU²³Ê†wjOkñ`ÚÙšÀ2Ç?éôS¹Ž&+¤ŸU ú/F¿€æ€ºtq³(ÖŸÄÔG3µ\bbMô×S"Ƈh÷Ákú•ß 5±®HK0¯€i¡ôf¥è™Õ‘X-{>ªýè¹û-Äg×™š%¨…¹èûîF&á‡ÎqèÒŃ/À%|å^;iÄWjŠÊ;Œé¥n»Û° IÇ{HXWòsíbóPH肘컢²ÑEMËðrWö^lIÿÙw[ Uo¢Û‰ÓíÙ$eÄöK}¹ÛööI]zxħýɱ òÑ0Q:mÚµèÉp8kˆÅ±¯¤]/ÍõâØ—ÍÎÅ¥gÒ/ù‰$cOý}14õ’Ì’BqåîÓÞ’{ü%¯é ³¦q¶²aª5&î=Èy…ÎOh!ôÝk”.ÿ¦ã‰ô c”·ñ hvçø9Ì¿ŠxA%¸Z˜žr–š²v1#]•ôøñl×ë½óŸ.a¨Kꆮ¡.a¨Kꆺ„¡Ë"Ô% u Cõ†ªm«s¶;g»s¶;gûúêœíÎÙîœíÎÙîœíëF¨s¶•ìüÒ¤1Q±QÌ>ˆÇKÙ¹ƒ^i}âî7?’àn:Ï=¢ ×+_¤«A#§KI‚Cˆ½ ñBš"̨Y98à"ERãB§S{Êòð´Tªprèž­§Yvò ý59‰gÉN‚éEHŠ HXFPr~ž:Èg‡Ä;QŠ@SSgº=žå2u{–$x¾ˆÌ4‘·ÈþN¡àx Šø72a(9g|Íñ‹˜ƒ˜))F“C2ü‚'3›÷ÉûH”š¶“rw=vƒç°uNKQ0gºÉæB{¾Ws¡5ßë@ÇM@žêÓÉhÈ3}4׆¹¹6ºv Àü±ZZlºÑá7籠bŸ+¯ÜR¯«í/7ÄÄÎÆÓÜ`‘õ}¢Z^bˆÓþžiUúΉcPsÍßooÀ÷D·&fŽo‹L[KÕ2ÝÍT%³e³"ÎgY2.¶£¼ØÇ¸v1V¶»XÈEÀíb"G.Áƒüœì•âîð sF ‹]ìlÖÉ»gÑÃÿPK¯€Ž»?>»PK•4!I content.xmlí][“›8~ß_áòÔæ ø†t¦²“šªÌvR©îÞ­­}“A¶IQ€Ûöü‰}Üÿ·¿d%q±¸Cl°•‡NGâèܤóé øug™½Wèz²ú²(õ{ÐÖnØ«‡þ?^~Ôþ¯ÿò-—†ç:Ò6´}AC¶ÿïáÖ¶7ž>ô7®=GÀ3¼¹ ,èÍ}mŽhG­æ,õœ¾+¸ãù{³tsJ̶öáÎ/Û˜Ð&Ú‚Eù7Sb¶µî‚mÙÆ„ •m¾Deï(Ë¡eY²7Öº¥E|ѪãB“àáÃ,×Û&a_¯«ÒÖõº:"fm ÜÒvF‰“¦2ÔË›ÊPgÛZÀ_ѯ:øŠÒ?_våZeßEh¢Ò\Ã)=Ì€šmŠY% g§ì*’4× õ¶|ë>tr­\¦KYyBÃtòSð•˜|ìDDÞ‘Ê x{úÑ®ÿõõñY[C ˆÓÄ‚a{>°’ñ,Ã,­L{Ähm”6B›q—ÃQ‰.tëÇ Z–Ÿð[”XFkß2‡0ò4"]¹ºžKŠÙp8ÃÁDx5àö—~bv*6ÌYÊ0i¨?Õ„±sAaYš8œ`S=L\î*ž[—hcëÂ]ƒ<&m6OôÀjËDoè2œ™“”Í(rÅCÊí!Áò°!c‡EΜiœó\kW®;â¤H_¦{L,Íó†~ž=¼< È3LùxR ßÄ,u”þÇh]Ä1oßXâõ°t¨™ÞÇÁüßîׄï‡þ'ר>ñÔ`‡Üî³MÉamØøˆ,04öUú7Á«îÈñËB.ÃôIpÀ ö£–ìMÁÁst}“D°ÚÏ•Kf@¼,ð šïùîOÜÇÈÐâÔ|¯\7<Ç{œ•!Ÿd:$”»(#ZÓ;Fˆ§h(ø†½‘È”Q‘¼”úäq³†@?1²V ~åfŒeågmhÑm¸³ BЈ,¶uàê±hÂ&¬Tˆ´(`€›a\ãOD–&0^AüØx¾±Ü÷S„¯¤¹v ³ ¼`…!ñ›Ù‹×X­ýH&F›Qõéѽ5ü5ÚøKÃ4OÛîOè xÙN–1˜ß~ú¾°5t’–JâP³Â§¤ë‡¾lXR(†=¼Ä°›ÀèØ ˜ ‡æb7Ó°­xÆŸ^édƒõ¼Á}†K°1}ÁÆïõJ §Ÿ&ÂþË’þ;jíA¤X¢¹eØñMYÇS[Qé¡}ÏŽ ¸€2³ßaÆo&*´¨A’[TxoÆùÎ}oІ>K’ÓY”(ËGuü î¿\‚7>ôÿ÷ßÿÄì10LÒ6Ä÷L°ÀOâ> ¼¯xd‘žqH|Þ[ '·â¾l{:¥ Õ{;#˜Ñø¯T.E#­ å 9xY¤.à¹0ÂíIhX›„dQ¹I j”z“×&!Eݤ„&µIhx“ò™Ö'ŸÓjmÝhœžÕ(¡ÛŒÓ²T›ˆÆÝ ÔÌãp­=8 ;†HßÇlfüñM4t¤a>¯å0³e³eŠV†èˆ‡Ó ób3éæÅ^Ô&Ø£6úô(¿Hý mãaþo ˜}7¿b¤"‘Ä“\•>Á}ð-xE‡jŠC‰† r/ÊÆQÆ7wäz<Š.±.'¢4#Ê­Ò m‡}qœÈ`‹²³Ïq^õñijŒDÚsÎë“îÜ9¿k* h¯É.».¬ ² ïîé°Èvñ߫ԓzŠ<‘¿‘h÷~… 5ثʋ»rhyÆ×iü6OtÓ;ü/õþÝûFÍ9£Ü‹è[©'õ­ˆê¤v…¿$”r‚¸ã¨Â€_…V!v—U¨AbííLs'ad<žœr’‰8×î#_ª(Ûs{>kŽª²zU¨—†ÙõU!öx̨¶:,œvt—cÊ„Œ±¨Ž”³CÆgce8à…Oýöï¡{l1uN¿ïLÿ=vÌó»•ÿžÛÔQ›RåS&¥âiiÔ€QU‰ «JÔN¥ðªE¾œà¥Z`ÿbWä¸Úôyí)1pÝ*L`7¯4u>$˜† ”£¡`x<ìäƒO>ŽoLEY>¬E•ÔbT9DºŽÙ%¼5Ŧ,á9pRȧ,‹£áõ•Å¡¬3Šã¬ª¶SF^2-ÎCF§,›ÁuÙLÌR9\†ÏßÂä°9&Ûaœ8“”н]žŠ’|}ãTd—F…œ&‘¤’Œ¶ âlzö’êS•Ið{âJYês%ˆá¹ÓñõÔ¤‡ÔeJ/Í@çm_¶r«{2ÉÃW~R·«–ûp|­F| þT>“ÿ\EƒÕp“Æzvƒ‹+á÷—B­ë;«¼U!Þ4†Ç· ª¶ëQ 9jÇ®Gç©kƒÔÉ|µ¾ÈÜàÖÇË®÷¥¸šä\¿¹‘ æÑNy$Î(BÜS\ïÌršÁ”®ÄjñÌa5y^×$N‡›É1Å•MĹ\F#Šë"Ÿ9ÍØé9œÖ~æØiý¼Ž*’¨*'|*•åõ≔,Ž•‚L*‚΄¾?=é6¢X¿Á'9íOnñ·DWÛϘ*ª³V/øx­Ë¬?îgâL:í#’ËNL?-Áé ?M|@?´Ïû²@‰> _ øëµ°aæntÒs <Él[à…ìhÊú.›Óí‰kËÊሇÄyrê»Íž|(AL‰6Xº˜¿$Ë·S‹JŒh**ÓLŸ'pØÒ“dzd6Ëc?8õ õņ‰3Á52'¢„ã\/Ð.Ö./¾Èê7¢ â)øÄ$²Ò¤!ðOLª†^þ‰IWö¨jªžo°yÚõ‚I¼Û;4¼4íø2û-Õ?×OÔ\iÇwž¨Ý²Já˪ú—UC¾¬â˪/«ÊœIªR»Æ*8ãç i®÷·•:ÉâDmâ»/°Þ¬U®Ó˜ˆÊ!ât¨x™ÏüOfþÃâTR±ôjŸÓH¢4)Æ(RË»¶‚—ùž¦Ó EkÒ…}ŸÂÓ…ÚÓ…æ]ñœ~y¢PC¢ÐÌ75º“ õ î / €ëŠ­qŠ:Âå\Õ—N$y]EU“T]{u_-«oήÇ–#¯Œòç†3Ó:¬»î|>?žŸ 9uO®®®Üøéjj(A!Ñ1áÃn®Ùë >¡ÓCQ–³7× !֤͂¥b1ñZµzæ.ÿ_ÍVe‡Ê2s+žBä SøBä”reOˆùݧ,Šxÿ žîJ´-d ð eªRèÄ,Rw„û T‹ÍÉ¢ñÃÅ7’L‡xјùe4 œh¶ˆ·­ºeÄ¥y¥“ój5¯6»²lQr}²À°·O\œµ‘„\8M÷àŸËF>.tšüWØô…÷ þ©¸?†º-ÞlãïEG0±K±¸±?F ¤Ípc\õg ÃÛr&$Þœg ]ø<ø,ïŒmá‹ðíx¯á6wõžGðªo}š„‹8þX@gFøŲP° ÎQÔ䣘—z f[RŽ ö¶9-æÿŸxŸZN¼?æO7;‚HÙìÏÏržê?àÙÜ‹¡w1ÜG¼ò^Öù¡MÞ“þýËgI´eÜ`µ'1éR ”Akßþ=¾ÙÑ£§âÄш¹å&ïÉ,‹ŠxbD·Ÿþ!DðÀS‚ìA*ep³ºÎzœìéèÃ[3ËHÆÑï-=šV²Å“yC4)?:·©FEGÆžûýƒwï±´Õ\5#Ü0¤?Ÿ¶ß½Ø‡D°«4–]DúÇJŒó±Á$AL¥dG¦¯hºb#¤Rjº'¯¥kìå#sCÔ¬t.~N.0!ÓHg¨Ó³’“ÚÇœ›~ŒÁ*ÊìvZWÈ1õ}àk[*Þ\ëcê¥$÷ÉÏkˆ‘‘Ÿú4Ì™BIÉN7-A= rlÔrÓiÊpËý½ë‹:ãRâS+ý^MóˆéF‰H«;!é_x+ßßí•ïHfy³ŒÏ yK¡"îéÈVÍ×Sq§-Ä3*c]@›xÏ6 äM{[á……`a§•°D—dn,Íû.ÕûÒ¿â $7Õ¢€84%¬ôñc÷Bg£Wá!Òl×»—(ÀìÎýžï ŠKQv iD­ð7a£ké~>/AüG ¾àl;‹)«Y‹¥ö$&uIíL䬵˜N% gÃ(lE§Ø~£z{{Š4cX=L‡ÌK ˜èôÉb×k­¬‰yK)Á"£f!‘)·òð¬0Á‚޶k‹·~¹1$/ðuùÎÄï0¡lܵu?9=($5hÎ6êSèc$ÆXŒ Ùž¨ü¶žFÜ“pw^ q³^1jþ PKââþ¤$PK•4!IMETA-INF/manifest.xml­SÁnà ½÷+"î­§ %íaÒ¾ ûFœ Sµ?©m¦)S³í„Ÿß{¹ÙŸ­N“ñزgþÄ*@í;ƒCËÞoõ Ûï6ShzH$¯AUú0ÝÒ–åˆÒ«d’Då IÒÒÀÎëìI~ÅËIé–Í lÙnSÝõzc¡.ýñrG÷ÙÚ:(:¶L,‘ܯtFÕt Ð2‚5ZQ‰v|2Ìç>yˆÊ9a˜XãåpÌIÐ5ä‡/Æ©ÄX_¥â€/Ã\`%8“Ë«H_=öfÈqzuÚ ¥5X(©BçÇÁ,kþMëÁ¯JG <®ç ëÄ],¤Ÿ_qD?Ïèw¼ ˆÊ&>j¸ßöt÷ PK>5Œ@âPK•4!I3&¬¨//mimetypePK•4!I»¶²PººUThumbnails/thumbnail.pngPK•4!I(C¶tÖ\Emeta.xmlPK•4!IQConfigurations2/menubar/PK•4!I‡Configurations2/floater/PK•4!I½Configurations2/toolbar/PK•4!IóConfigurations2/progressbar/PK•4!I'-Configurations2/accelerator/current.xmlPK•4!I„Configurations2/statusbar/PK•4!I¼Configurations2/toolpanel/PK•4!IôConfigurations2/popupmenu/PK•4!I,Configurations2/images/Bitmaps/PK•4!I¯€Ž»?>» istyles.xmlPK•4!I2D¢Ð Òâ à&content.xmlPK•4!Iââþ¤$ 4settings.xmlPK•4!I>5Œ@âu9META-INF/manifest.xmlPK6Í:aprx-2.9.0/doc/aprx-manual.odt000664 000000 000000 00000700032 13040775352 016166 0ustar00rootroot000000 000000 PKÖ5.I^Æ2 ''mimetypeapplication/vnd.oasis.opendocument.textPKÖ5.I z×»»Thumbnails/thumbnail.png‰PNG  IHDRµÂýÇéPLTE    $ *!%1):)!!##%#*!?+$&.$++)'&-('+*+%+5#,:-2=6,%5/1;1+24>98:1B$5H2;G/I[8AL0AU4EZ7H[;K];Nf;RgE3(K8'K:/F>8P:'MA1WB/[G4eO9BBEBEHOH@LLLOQT[M@SQOTTTEWhJ^sR_mJcwR`oRf{bREdUJdZKhUB`Z]q\Dmc[udS|eR~iTchlffpdkronsmtzvkc{rl||zZp„hw…h|‘s}ˆ|ynˆ“u€‡v…˜y“Ÿ{Œ¢€fQ†q]‰s^€rh†ylŽ{jŒ{p“~k†|Œ‚|”ƒt”†{›†qŠv¥’††‡…”‰‹Š’–‘‰…—“Š™™˜„“¢–ª‡›®Žš¡Ž«ƒ™²ˆž³™¥œ¢£·š¤§”¦¹—©µœ£²¦º§•ˆ¢œš±œˆ¢¥§£š¶¢‹± ’³¦˜¶¨™¼¦“¹¨˜¥¨¨¦¦°£«²¢¬¼ª­²¬±®ª²¸±¬©´®´¹²©´´²¶¸¶´º¾¹·²¸·¸¹¸µ»¼¼š­Àž³È¨·Æ°·Áº¼Â¿Âº«ÀÓ´À̼ÂûÃÊ¿ÈÇ¿ÊÍ·ÈØ½Îâ¾ÓãïœÄ³›Ä·«Ê·¦Íº©Â½ºÈ½°À¿ÀÄÁ½ÈÀ´ÊĺÕÉ¸ØÆ±Þ͹àϼàлÃÃÂÃÆËÆÈÅÄÉËÌÆÁËÈÀËËÊÄÌÓÉÍÓÉÎÛÀÑÝÊÐÔÌÓÚÔÎÇÔÑÍÚÔÌÔÕÕÑÖÙÕÙÚÚ×ÑÞØÓÛÜÜËÛèÓÜãÐÜêÚÝãÏàíØâèØçòæØÉãÜÕáÝØèÝÐíàÊêà×ìäÚâäääæéäéëéæäéçèìéæëëìáëóëîñìòïåòøìñöìôùîøýóíåðïðôñíûñáùóëýùíóóóóöúôùüøöóüúôþþþÿÿÿº6évIDATxÚíÜ}lepT0Šè|²ðªbFd¢QÇ‹ˆ"ï8Â`€@ B¡]é3´¨eE$·¹^YAeÔÉJ¯[àK·Ù`s¡ÀR72¨Cnc¬ëníýïÊÄ(ò§Ýf¾Ošçžü~¿\>¹>÷Ü“\r=¨;¶PC 5ÔPC 5ÔPC 5ÔPC 5ÔPC 5ÔPC 5ÔPC 5ÔPC 5ÔPC 5ÔPC 5ÔPC 5ÔPC 5ÔPC 5ÔPC 5ÔPC 5ÔPC 5ÔPÿÿÔí·Kˆ· ”&ÝþL%¾ˆ©gÜÑðoaiZ¿þ‚Ê():úUeÐz÷<¹ÿ¡‡ñ¶§zz_¤Ô­½¾Žè¬§b—®–UœqÕ–ËñmÃÒÈÝ ³O“ôƇJåÃ}›ˆ–=h¤P¡\L9¡‚R’rˆ.ËõgmU‘ToÿýDª¡³§h>– ôG«æÅáéôª›¤ÏRäØÖ—嶉âÏÑ¡¸){•ªÀÌ ´ü}’˜·>?Î3¥™Ž-¦ÃcfÚ–ÐÁWfz¦®—³}6ªwÇ'zÒìC †j¨¡†j¨¡†ên¨–NÞz)Pþluà×ð1ðe‘Ü_.íÔw²úެ™,5+9Ý™Ìv/Kåmz­ÁšÆx}*©ÍŸ3Kµ×}ÌJ4œþmŽMŽ­ŠÏä9ý·šäôNRëÍyG5ZƬ̙œœÈWéÓtÌlÎÔhvRjŽÍqðéuëuæµ >]ÈX0KgbilNÇ L»·“Ô-Ô"z9!äëý^ÁGœ ~®QüÍ_/ÔÒò^ ‰b{{¨åŠà½vM £¿Q”‹$¯ ^ñuÅ»±Ö××͙ֆn§Nã²–t¿k}ñb‘»k«Eñ¯·0â­Ëz°#|³JìDµ…ÒÕõÛM™'/Ï÷=_ï{ž …Š˜éÄÎ+g·“@eHµËAÀNB1Ol'ÄtŽrò2ç¹8—9ïqm^7 Ë£*Ǿä•C‡¶6ßl‚°u`¶Û Üd·–Æax5O¸âU6ù¦yè3Í`@›"î0î€_ã\ÀÄe¨ÉAAÈ5‚ ‚ ù &CA!Ôd‚ ‚ ä#UZQ‹“Æ I J—’èèke-î]¡¢£”DG©vdG Â%µ4Ú×Ê:²£h›Èu””Ú3w“„&_öÞ;WÁy·QªkihøÁ?ê¯]â¬Í¦£T»¨C{Óî\¡B©“ôQï]dG Ò*pdáqžx?‚ ‚ ù &C„#fôc|+ݾ½2µ·ªšUMÓÈt~/õ>M}$19‹ŽZú)„tZš!\ïh̤­‚š An¨®ªz—• ^Ç…Ÿ025·^êÜM¾'Ùqñ’øÈ“G):"ùÞ­C‘‰2²²¬¹ë‚tÒ_¾ ;уó ázGc† mÔd‚pCûÕúô…2â—‰ó,õX¿â]Væ±};ÿÚIvh<#ãås²Ca0C¤¥ &C¤µ¨kõsÙé³ÚÎìïØÓ“f˜ 2EÔ7zßÏÕ„˜›—’2Ò^ÔÕÔè1XðÇu-m»é¿~ˆ¹ó¬CGÖO}ÿV6üÐ Š¡ï<¹7òø¡7¯Ó$%%ûêüÏÄÉ3çýƸþüÜœ°#2_¥æ¿WUÓ€6ÓÍ,µõ3¶ùVö56ìÄ£;7>äåVUV(ªPuõ ,-ƒDƒ3ÁÁ~^Œÿ…Ë.Ÿ F³8ìâÛ×/æ @ŽŒLrërREù÷³·Ÿñ`[‹&fwéÁúAž§3! Ôd‚ð€>:º&– bNòà.]“±r|ÿž˜Ð@úÛû7®¦¿xæWþí¥áÌJ£Ÿ"ê+ËËaŒÜ¾Ú¡¶¶–¨|ï”Ì—/è§^`lóv[ƒ(ñöÍ«—P®'_½mÏø©3‰Ê/¥ŸWÙ˜ÂXK_ÿÛÌt(×/Äù†ÅQÕ5Ùÿ§œtñ#àŠŠ³'ÅG…²_¡˜ÀI†CzP0Cò@M† oÐÕF9uümF“÷úd¥§Áˆ+!!af»xêœyò J/_úxìÞ°²²¢ÀŸý ”Tý/UeeÅáÝ[ÇM™1¡ƒJ/µâÂ×.œ8vðïØÓ“MÌèÀPzÈíºªrÞïKæ˜÷TRþTTtýïøðß}[Ö 6EÜ`âçí¶Þà¥nÖè«ÓØËO÷Œ—Ï!·ýG¡fþïPXOäpØpEù÷„Ó§¯Þ8iÆlâ˜Ã>C„$=(˜!y &C„7hôÕ¦ÔŸQxÝTƒ¤èpXN1™»h¥ Q3È`¤WP”£ù ú¹ 6ÔTWÃX»n§7ñVUMÃÚÁùkéçø¨Ð¿Ï†A7æd ¼µX´Üî5D%j/xK«£…úû\8eµø¨Ì{÷VF¶ÓÚíž½4~ÌΟ]µÅÃÉʸÙÛƒ8ìB¢]½ƒVé§c [S›EÍþkbû ’ô `† äš AÞÐCA –% ›jðúyýí2Sç˜3VJ·oÿ›ƒ³×浜tÁ:zΜƒnæ«TxM,'N7aj3iº ‡îÜ †C€F.©iõk¾ˆ}vA‡µ¥8Ã>C„$=(˜!y &C„7¼ÏÉ¢4œŸhªAIqýx¦LíÅTß·¿‡]°ÞÊ£Lí ËO #%ÀòùÓï½è§(ûRz51öÞµK…ùy¥ŸŠkjj89Ó¢.Øl 1„}†OzP0C’@M† o fUÓìÛTƒ/Ÿ?Á²‹\w¦zEU»è©¨ÌT#Û¹ ,˾~å§"vç0è§gJ?•¸Ø[å¾}Ãa§ŒpØ.]å¸è¥­Â>C„$=(˜!y &C„7<¸õ,Õú4©É:uî£Ý·¯_äº÷`¬/úÏa_¿”öè©ÀXSö¥–]åºÁR^Q)?7çôõäN]º²YI°Ÿ' ·Š*ÔNkè ---))9k„N³pئnKOØgˆ¤3!Ôd‚ð€'îÞ¸˜ %-=vò´¦Úô詃îǦA7óe*‡½ä¿{Ë4èÂøG¬™Òp35¼Í}›¥3PŸÍJRŸ<†å¦½~ý ¢WrxR„Ã.VšÍ!I fBBªÉ˜¼l ¤¤¤”©jT Mc Û¡£Æ >*ñDØì~S’ïÛ·ë]öYÙð+÷É©çå³ÿîß¶^Ì_°´Q3r‚ÞšZYéiÿ$œÓÒ@¯¬®ª:p€ÃŽâ"‚õ†g¬¹– KAC`©7dø“ûwcB7îñcls1&òlèñqSfØ9®†·ÅE°døÃŽøJHHÐh´oe_;5\ð¢SYQNŸ§€Ã.&8É!I fˆˆÐ¨N`BxF.RMÖ(555p¤åþ«“ÍVoÝCvDH3ðÜ r`÷†•ŸKŠ) nz¼Z-Â…ùïßf¦ß¿yõâ¹Ó´º:SÍí—³io4Çüæ¥Ä„Ó§ºË+L˜6«s×n/Ÿß¿»GO…¼œìf»“nßþõ‹”Û7šÚØ+©R‹ ?ü“—t6¢~ͦõëͱ^zûÊEO×5¦6‹¨êšÙ¯Ÿ=¼~ì`Muõ÷oeÄz¨jši/‚zY,rì¡ ˜žä/Û©³2µw~nÎå¸èó¬ˆ)=a …á6):bš™eeù÷nò=9ì!hQ†IzP0CòjMÆ4–Ã\˜Ÿ_Ú3'®ÄÇ 2ÊŒ¬ØNà¹Aoqa!Èö ×Èl‡‚€FM%$$fη^èìÒ¾}6ŸÕ9zÔxÃû7ÿ9áç …¨ìÚ­»çñH‡¹FÍv ƒúr—-;×ýq).š±ÞÌÆž8³£æ*·ÝÞn.×/ÆCal£«?láŠ?‰×slym^{ãb¢FAIÅëÄé`?Oqyï‚Büøhë JI~èã…Òð‹Äaâ ×"$éAÁ ˜‚°]Òá¡ÖdLÀqI/>¿-]!×Cþ°‡ÛÕ„s¨É„žôVWU/ÁÛ5#\ÐU®›z_Í~:¿L™®7dx³ía`þkŸdÿ£;7Þf¼îÜ¥ë á£lVvm¸H$))Éþã555£&üºëH赤¸”Ǿ–~î7`ÐØ_Œf´‚Aýð餈c~™i©ï²2edeUÕ4&™šÓ×?iºI]mí¹° ¼œ·ð/ 5ÆzÙÊžJÊ¿98ÃG²3_+*ÿxÐÏiÓ_w׌—/à³ôéC9é!hQ†IzP0Cò%MFg¬¡h²ìô4J½7E¹³õì÷o³7l…ã0Æfç#Oxî ªkú†Åu”AÛ Þ@Øýªkõƒ8@Œ <”‘ö¢„D/ -ËÅŽcÆÍØôrdݘA¯º–ö«çO×I5ëÌÈÓ‡÷âƒa=°BªšæC#3;{¦cw]ŠÅ .@Y?"Ñ®Õâ?˜¦Í„‚¥’j/N:9Î^‘Ë+(ÂHÉ>°_g™BaªTí­~ ,–±FÙ½Üu!êÇë\ÐÒ™»ô`ßOÒƒ‚Ò†-‘ ’𬶦†ò?o ØŽëÜ÷ý¹Ð<èÀÄ @^N6h)))—ÞB²­Û„|©¨(rÿ®›³}MþRŸ&oYa¿ópS²ù8‡Àœô¶È-81:Ü÷VF¼ÕåÞõËžA‘tYÆa„d¼|þ.+S䦇ã.D×j ‘IŠ  0=~ Z"A$5Ùµ ç)õÖi?¦Šé7`ÍòU°q½Ý\ö ­F««óÙº¡²¢|¡³K_ݤÛÖl°Î-/+óÝéjdjala«¤JÍÍÎòuwMOM Eh²F z9÷nÔ WFV–ÂrÓ'nÁ¹oßõr—h·Àiõ¸)3:v”yüïíSG@ËÈÀÃÄÃPœGˆpAÈ!ïÇ÷n©ªi,^µA½¯6 ½ïsÏ„ý{þ:ÓܺÙ5 mL„OˆH%MV]U•Ÿ›s-).æÔqJÃC4ô?ͳ[’|÷VJòý¸ˆ¨?~"õi²þˆÑsmíÉ‹·mBÌpÚeÄ8CÇ [‰Ê>:ºKÖnr±·"æén Î=€97èåÜ-ør\tMu5¬ Ä"Qc8sNç®r»7¬L}ò¨¥"\à°nóF[8<ݾfÓŸ@øe"A!¦Â?DE$µ&c3ûˆÍ²•#ÇM¢¿…!|íO'Kc8ÒR¦ö=äÓE®ŒÓÄÐŽð+;Æ·ZÚ”úy}šôŸ¦´Ü·ÑÆLpîüøßÛõ}͘ÍX YsçYk"D8§—z¿°¸Äèðo\ùø¡ ²¢BQEUUMÃÄÒnÈHv—¼qÓá¢"„Z“5 ŒŽ3ÍmteªWPRYáºÃc½ó޵õó߬Ûé-¯¨DF€âÓí„‘H];›Þ–ºóR83èåÐ-˜X¿‚2;ï<."DZD7ùžÖÎPZúA¼!ZÀô@ø‡Hˆ¡ÖdŒ_3¶a©õóÇ;ÈȲ 2‚‘ã »õÿ\R ËácÇ *L1…¸»«E´Ô—ÂA/çnÁ„±l§Î¼A „_$µ&cDBBÂyóN'Kã‹1‘c §=޵ÍÉCÞ°­;w•ƒeÈ!ï%k6 >N„ -uç¥p`Ð˹[°\÷Å…ʾ”·‘‡"‚ "ð‹‘ÑdU]Ój©SÈÁ}vl:•È4j¦>MŽ î¡ èušqJɯ_Ù³qUÝ}Ágø!‚´ãú,l&9)É÷íÛõ.ûŒ¬lø•ûd‡ƒpƒ¨ˆÓd’’’«¶x¬¶›w5áÜXC£Q~%êOøyåådŸ:“¨±óŸÄØ·®A=lzRCk˜ zùáÎ˹[ð,s›³']‰é.¯0uö<ÙÎ]à§ö¸ÏJ½¡?Tú#ˆHyòˆç깚š¼ ›]úTÒˆÈ!*"AÄ4ÐWw œ1¡¾;7û1è*×-%ùABTh×nÝ—¹l¡7sܸ F\¨é6È`$‰‹3¬½ÛÖÓh´¥nf¼€ó‚?ÖÂüõpT’ð8'pÍÑ£GÿóŸÿ ,J? ¬½>>ÞÌÌLQQ‘ìXøEEy¹‰!ý¢²?ð‚40î*ýmÐùk63¶´ƒÂãÈÈãàÁƒ:::ó˜8cÝMíÖúF z9ôæ¼Ý‚ ô†‡Â¾k#BRRRA,ƒ$qöæÕ˸ˆà´”'Å…Úµk§ ¬:zÒK;8fel–ù*5:øèÛÌôyï ZŸ¾³ûéöÛ¦ÎÊ0Õ7j`öö™ÅÊ„þòåËþþþòòò¦¦¦gMÞ²Â~çáÂf·)8Ù§lÒ†•/¥ŸWÙ˜‚£×Àá”ëâ@k‚â¤×‹DÊÕÖÖþÓ@Ûg" j2QÅÒ,¤‹³Cû`øœ÷ûÒs­ä”*++ž?~xdïv›Ã| ¿Ôâ¢Âcûv‚ ›ffij½PQEµäcÑ…³gC‡ôúeò4%Õ^-ê´Q{ šÐ VœñÖõY²!Èò²2ß®F¦Æ¶JªÔÜì,_w×ôÔPQ Éæÿî…õd*‡û´Ñ´!fÆf]gˆŸ2m½ÁKÿܬѷ~*Ĭô—žîK>nûÍD.åPœ‘j2‘ÅÒ,d‰³Üìú‰âÌlì‰SbRÒÒ£æÑ޲¾¨ hXUU Úk…ëëÅÊÔÞ0lƒV»–w.ìDKŸŠjÊÀMèéFœñÐõ™˜;äˈq†„”úèè.Y»ÉÅÞê]V&›Ïr¸O›J›FÉ{÷VF¶ÓÚížÄm²À}ƒU[<œ¬ŒohÝ”CqF¨ÉÚ¬âŒìˆ¡CÀâL«ÿ€”äGön_¼f“¼ÂtúQ×ÑÛ¤§¦ÀÒÄrÓg§ÏµM–ÙŠÇ蘼äÑ„žVqVWWÇ«•óÃõÙÄêÿÝý£¡¥Mi8ÕÊæ#-ݧ¬-Yñhä⦚Výé´’?ýÙÚ@Ê±Š³™&sHŒ§ÍƒšŒöïß¿uëV>­üóçÏÅ Ðob@„ iiiÆ[¬H¡²²’H’oß¾ñO“s]¾àæ¥Ä[W.èè Ö1ZäèÃF2>ÁZ˜_ÂŒ~Ë%•úK–ôÓi\Àd`/œ&ô¥¥¥Íˆ ëD>ð63yîúLUÓd|K¸¹ÔÕÕ²ùHK÷)SÚ4EÙ—Ò«‰±÷®]‚.ýT¿Ý@¾4ºr¾¦œÀòþ;"C>—~@wb j2rXµj•››[‹>2xðà””6 ”””ÌÌÌà8füøñĘwóæÍVE‰ð‡êÿÝÌÎsüýýÙ4€Ä䕈¾ýõŽD_ˆ ;š,-å ”¨ ÿîò ¶Ž«Œæ˜m>—|¤°81ÐkJ?•pÝ;“½pšÐËÉÉñïØ ’R‚M™iÓ¦A>Ìš5«K—zÇ‹mÛ¶ñ6Þº>Ë´üø¡¥û”)mÒÒÅÞªQ7Fr­ÌSš½×E__Ÿ¸ð¢­]V²¢†ggRVP“‰<¬R A˜°cØBg(y9ÙÉ÷nݾráùㇾ;\««ªf™Û óß*ù¨ ¤ÂøAB«uï©À~ýåß¿5õ'¦óhBO‡UŠñÒ]Ÿ[ºO99íìç ‚LQ…ºÀiíýa]äºKKK÷lÖÆf"rLR  ¨ÉD”bH³(ÅXQUÓ€blazdïöذ„&SR¥‚&+È}Ç¤É Þ¿ƒ¥¢ÊÏë>íÚIÖÕÕ2z˜R&Îà04¡¤#×g~ìÓÔ'a¹i¯_¿ƒè•¬§ÍD1åPŠ‘ j2¥Ò,Â#żÝ\þûïm‡uý2ùçí2¦ƒ&ûòùñ¶Ÿn½W|ÔI&{bލ~~^Xé&/_RT˜“™®«?Œ^y>"„Ã`ÄÖ„^ðRŒ€D×gèšÞ?öiqQ…å‚{Ø_ F?l¡”C)&$p©É„Íæ,%ùþ±}»Þe¿‘‘• ¿rŸìpø‚­­íðáÃ/ň}Í„”””2Uª¡ila;tÔX^õÅ´M3aË=¡¢_¿~þþþ¤K1:í;t(ùXtx÷V#ûªDí]\XR?{“V=¢Í\»ÅIgÃï\ýÛ϶9Ö å‹ òÏGž¼ûÏ¥Ž22ŒsÆöRïš,ÐÇÃÉuUM£° ï|ÄÉ—ÏþÛ¹«\Ù—ÒfƒCú1cÆŒ7NÀRŒ)®Ï Å Ù’¢#¦™YV–ï&ß“û”ª¦™‘ö"ø —Å"Ç ŠÙéiQAþ²:+S{ççæ\Ž‹ž1Ϫ}‡ŽÂŸrrrrîîî|’bÂö[-:„ódñ‘'xîàá~ª©©Ã/Â&–>rÛcݺud‡ðØæ¹oß@¹ãêdc³Õ[÷ðd\ìGž§“H3¹²£ø‰Õb§ÇÿÞþð>×Ûm=c=ˆ-ú}E0j:¬ÛrÈcKÂéSPèmÚ·ï°ÌÅñ¢è³gþMKyâdiLÔHIKo;è³m=h2ÆþN 14¡·±±!«k²\ŸµõêO»‚p‡Biüاslym^{ãb¢FAIÅëÄé`?OÐdǼwA®…?åÔÔÔ\]]ùÚwˆ­NàR“µfK¥·b¡F#obCï9®=§Kå L{rº0?ïæ¥Ä3'à(pÁ(Pf­ì‚u?r’f¼ ëRÕ4Ç™ÙÙÓ b9 O<khš,;=Òppìl=ûýÛ,Ç [gηflv>òd€çªº¦oX\£ÇkÌcÝìoGàG:½]?¿ö›W/ã"‚ÓRž~h×®‚²êèISL,íºvëÞª… "6 NàB'ðì<YEEù“ûwÝœíé“A§>MÞ²Â~çá!£Æ°ù8l8o·õô«¼0(B¹žt~õ¶=ã§ÎüÑEÃÉÞÊŠŠ³'Ïd±áKéçU6¦°•é5o3Ó¡\¿²Ä½>1:Ü÷Vú´{°5¡Ü»~Ù3(’¾¹9 O<©mØÑ„Y ˆ­uîûþ\ht`|»è3³çådÃwLJJÊe§7?®V°ÒštbJ`à[Æ«ìŒW7þNð ŠbÚAáÔ ÍÂ3M&Ùà_[^Væ»ÓÕÈÔÂØÂVI•š›åëîšžš[¶õüß °jgØ.‡<ܪ«*çý¾ÔhŽyO%åOEE×ÿŽðÝ·eÝ`ƒQÝä{Ržõ£ÔŸŒùžpúÔâÕ'͘ÝFø†iY×âçôéÒ?7kô­ŸÇ/+ýe€§{ÆËç>nûÍrß¾9êå.!ÑnÓêqSftì(óøßÛ§Ž€f‘‡‰‡9 O<¹vá<,‰-L©Ÿ¹`ÍòU À¼Ý\ö ­F««óÙº¡²¢|¡³ 44µïhJ ŸÓáG:AMÈ¡}ðKŸ1×J^A©²²âùã‡GöneàK÷?FAZê„fá™&#žx‚°FŒ3¤[}tt—¬ÝäboÅ~^ǘ“_K?[,Zn÷Ç¢F‰Ú ÞÒêh¡þ>ÎE&¬ÄɘÒO%°#Mm±'ïÝ[ÙNk·{Òoó o°j‹‡“•1ã…êËqÑ5ÕÕ°6H¢ÆpæœÎ]åvoX™úäQ‹Â+ª«ªòss®%ÅÅœ:Nixœ›þ§yvK’ïÞJI¾õçÂOÀ1þˆÑsmí[+Ó)7»~âG3{┘”´ô¨s8Œk÷"‚ ˆ˜ƒ:¡Yx¿‰Õÿ»SC«~Ö“b¶Fª™¯Ra9qº Sý¤é&ðÏ<ºsƒéŸamÉŠG@#'-Õã*ùøÓ_ Ôn}G3f369nRÌg\‡×&it–2›e+a‹ÑßÂWbíO'KãCÞÊÔÞ¡‡|ºÈuƒ¤'¾* •é¤Õ@Jòƒ#{·/^³I^áÇ,_:õ£®=âgÔ‚ âꄦà½&£ªi2¾%<¼êêjÙ|ä}N,—ÏŸÞè_KXö“ªš'‘”})½š{ïÚ¥Âü¼ÒOÅ555µµÌa+WPVml\†'>@¶Í4·Ñ<”©^AIe…ëõÎ;Ö.‡·ëvzË+* ,ªV¦H1×å n^J¼u傎Þ`ý£õGŽ8l¤H?”Ž "< Nh Þk2âÂm‹øTTÄæ¯%™ÿ™.]åš]gé§{+V2&ʾ~¡4ÌÚÇÃðÚ$Œ×ài4Ú†¥ÖÏ?ì #Ë*ÈF6\ïû\R ËácÇ *ÌzZ™N}û뉾v4YZÊ(QAþÝålWÍ1ç}¸‚ bꄦ ¿KyE¥üÜœÓד ±Ü,ìgë&öó„ ­¨B]à´v€þ°.rÝ¥¥¥%%%gÐal&×½GqáPÊl¯Ö™úä1,7íõë7`½’U÷TT†m›ý†Í¶æGx¢U]Ój©SÈÁ}vl:•È”…©O“cÃ{((zZ³p~\DÈézCš™5‘Wðp©ªi@1¶° =²w{lØ Ôd‚ ‚GLti𬲢œn„£õ“ûwcB7îñcls1&òlèñqSfÏš¶ˆâ¢Jƒ¼e¬ ;â Ú™F£}+ûÚ©s½)¯þˆÑ¯ž?½|>šqn߯_Ù³qUÝ}Ágø^`®Ý’›—³^§x¹¯Ù¶—^{ÖgëZ]ÓÆí¦ËÖýµ{ÃÊý[7ŒŒoÖú†kx˜NÞn.ÿý÷¶Ãº¿~™üó΀ ÓŒA“}ùü‰Á#”ÆìY\6KcDÀ0%I£ù€IÒ–C@‚&ƒM :):bš™eeù÷nò=çX/Œ ½}墧ëS›ETuÍìŒ×ÏÞ ?v°¦ºúû·2.z¡ªif¤½>èe±È±‡‚bvzZT¿l§ÎÊÔÞ f/ÇEϘgÕ¾CÇYæ6gO»Ó]^aêìy²»À×þ¸ÏJ½¡?¶>?ÂkHJJ®Úâ±ÚnÞÕ„sc FMø•¨?áç•—“=~êL¢rñŸÄØ·®A=è3ž‡Áótjß¡CÉǢû·ÂjûªDí]\XR?QV=žÇPZaŒôâwI‚"¢ˆ­N A“ië JI~èã…Òp@›`•Ûno7—ëã¡06ÖÕ¶pÅŸ\ô2Çf‘׿µ7.&@!j”T¼Nœöó„m}Ì{èZ^QÉÉÕýЮ¿Î@¡\³_k‡Äk~„×6è«;Ž |wnöbÐU®ìÙ„¨Ð®Ýº/sÙBoæ¸qd0Ôƒtd0’·1ð<¬;=þ÷ö‡÷¹Þnëë;ÊÈò®8±¢Q{`t GaMÌ6ŒØê4™Ó¦¾î®/_HJJÒ'j5Þðð餈c~™i©ï²2edeUÕ4&™šs7Á¤é&uµµç‚òrÞ‚V2jŒõ²•=•”sp†õgg¾Vüßs­ {©jb"Ó_¤¨öÖøÏÄÉó,!,ø^›ÁvùÊ{×.AúöpƒŒôÙ¶žF£-ýs3ãÙ`Èò¬…£Uøëá¨$ÞÚ+ñ<àëçt:."øþ«?P(4eÕÃF˜Ù.V饯ÃÈÅ™ººÚ»ÿ\:w*ˆ8íϵ=0ÏŠ×þ>ŽqÇNm×N¬¿×ÂO’3DD[À¥&kô¥©£¦zؾ{#X›É+(Ânà¢ß¦êe …©Rµ·ú°X¦J½¡Ã¡°ïš“ðÚ$ìF!#ã®Òß¿Öh3cK;(-í‹“4ãG:õè©°pÅ:(Í„‹´œoe_ÿŽ=Z˜ÿžx0ªQûyJs7±1*æÄ¸)zˆÄc½³¢ ÕÄÒ~IÙ?ýŽð “„ë ¡pkeÒ"P'pP*tôÄÉs¬ l2ñ„çIÂ+k fÂgP“!Âjkko]N‚6=5…Ò0ÏœßN=Ÿ·72¹ 0{£b•a æ‹–_Š;ñßýçm½Áÿ/S¦‹ù-¤¼Eh“3!Ôd‚ð…EÆ’ ô0ÈÌÖþ—ÉÓø}[46ÀlŒŠA˜XÚÍ2·¾}åbLèñ×/žíu]ä»'$éÏ#[„?I0CA‚š A¾@Œµ¿-]aíà,˜¹°nÖ¨$Âø©3¡„ø†õ#þ)„W’`† ‚5‚ |0¡‡QêÑsí54"®ñ.l€›5*&fd8{2ðõ‹g”†‹V­‰aBø“3$¨Éá Á‰7¯_Œ †±Êc½³J/5S›E“Íøg±Å… 0£âÊŠòËçÏž;Tðþ¥a~ÈÙ¿ý>qš1obEþ$Á A j2Aø‚tûöSLæByòà. ºo_?¼{ë©#f™Û@aò˜ã ¼².ýTšxúÔ—ÒÏ0$7iŽõBý£y'BGD“3á¨Éá/CFŽòþmV\DÈÕ„˜ð£~Ñ!Ǧ›Í±Y¤Ú[½õë§·Þ8/'û\XЕó1UU•ed@̶ZÐìEHëák’ðÐÊ3á+¨ÉTuMÇ [ü±æBLTBThbtxRLdÂÃW­Y'“Qqëm€—Î5¢ÕÕ)(©Ì²°nfÁù5P„'ð¨ÉAAÈ5‚ ‚ ù &C¤žn¤$$pznqsAHäÿXÐA+5VŠIEND®B`‚PKÖ5.IÏB{7+7+5Pictures/100000000000032700000061FC18127E9BD83B22.png‰PNG  IHDR'aC"I*þIDATxœí \ÌÛûǧe)Ò:©¬!„,×¾d+Z”W–®.råÚB©«l))i•´©lWÈòC*©¨´)­¢EËÿ©ïý¹3Ó4Í^=ï×y}_3gÎ÷œ3ó}æ<Ÿó]ÎÓ¹¡¡„ H‡§´ªîÔñÂîEGÄÖÖ–ŸÍUÕÖ?rˆŸ-"œÃg#AxGgAwA¡ Ô8[b±KÐéX„ºÚ ¤]<Ðm…nEÎt/®ª AA„ êBAᨺAAøª.AA~€ª AA„ êBAᨺAAøA粪:\&•Ït!õìÚ‰ }­®Ã£+Ttë,Ò­³¨ { ÂŒŠšºÚzAw¢=".&Úùo\Z@ða­aÇcxp…\fAaæ¤ú^Ñx…)æ3ü\k®P!×]ì‚ãQA÷A¤Ðwð‚PW{¼¯ AA„ êB„%i¦~+Ö¥‹<¹Ÿ¢²*Y¹¿–Þr%•Íír#>•†Z»ÂЄCPu!Â?jj>}L‡¯C}/i阬ß*%ÝWÐýâ&áþ—ÏÛBßßhÒZPu!Ò (º*?'ûsnöƒ[7îE…EùÅ?yxÆÿ†¸„}aöš8©É‰‚î‚0‚6€ lƒª AvèÒµ›ò€AÆÿ:cÙªõvlùô1Ýíä‘­t׸FZò[AwA¨A@Ö‚ª ANQ8ØúˆÓv3ý›!3êŒÔœHä3¼;çnDðƒ[‘iïëkk‡Ö\µy‡ÊÀ!f ~-*øüèM×nâô{}ÿV±|Ú˜>2²ÞÑ^Å=ö¿xæÃûw:u4lÄ/3æ,Z¶‚ºþ¼ì,Ÿó§ÒS’ òr•U¡Ì}£!꣨Ë|«øâséÅ£ûŸs³kª«dÈÃ44 Í7À ¢ÀUOWOêoa}ÔiºÖb›øöµÜ`†&È‘Óþ BÞŽ¬ªü~-ö ~ka…§6Ð* ¡ B ª.A¸Àµa:F«‚¯\|õì1ÅãÒsñïãÁÞî”·q÷ï¦&¾qö ­üöÔtî„á^D~ue%øÈƒÛ-êêêˆü—OBJON¤œ\ßæhû8Qâ퇔dH1‘aÛÿ:>mÞ""³¼¬ÔÊT|-¥þÌôTH1Q¡Î>¡d•þÌ¿)+MüÛ᪪k—ݼ™WØnà °n$´D¸AÕ… w¦1–tåbfZ³wä|L}îVDDDåºyºË¤eäÒ’ÝìŽíÞV]U à#†;vîÜ8RUWW=v`êÜ…Ë×X(()|¾æçvúfHàýášàJÏØÙþ¨©^¶z½–®A_9ù’˜›á¾®Î'÷ï¥9‘¸ÑÛËÅÜíõQëß§:H­©cÉ®ö‡Ó’ßBglÿ¾9ËW[@¢?OÃbD‡«*¿G^Y·}ÏÌ…KºvçÞ/-¼ðÈX4Ëm¨ºáªƒ†Ï¼o®@d/lçê,5ßfMäŒÔœàà°É`!åìjü_»ëˆ#ñVQYÕÄbëײÒðï›×Áé_v‡·†æÍ6ï ÊÈ‘•àmC}ƒ÷9§¨ëÆë6Cfî§Lq‰î;Ú+©þ»ÒìkµßÎÒX»Å›xXlBD´1îSYI±¶áJ=Só¿Z»§6ТX>@hˆ @Õ… wè##Ûâ/Íxÿ¶ñ¦–yºÔ™b]º¬°Øê°o'+MÐ{¯Y‹tÁ馧$Ákb;cM™™ tÀ¾xtŸp‡v® .÷(ÜÔùBæ`± ô%Û7¼¶æ@B@„T]‚p‡œ¬¤¦3Í(.jôgòd%šüACÕYl‚þ†yr?Ø–4yJ¢—/`ÜzáO)PQ^v÷FÈ“{· òrËJŠjkkY9ÙÖª&˜üí^Ûs ¡ Bª.A¸±Z¦rÿAÍ(/-mOÉÞ4ù² Š,6ÑWVž&G¢GOØV|-‡mI!³³”0e%ÅÖk³3?°Ø(5,6A¡g/I6Zi»ðÚ˜ mzPu!ž=ü¶Êšõ¸Ý{ôo÷ík¹dï>Ôù…ŸóXlâkyYŸ¾2Ô9åe°í%)[iY¹¼ì¬À˜øî={1©ÄÓÅÜ­¬y•åÎácAˆ‰‰uêÔiñxµ;Àbš{> ½Âk`n$´DèAÕ… xõìñýèˆÎbbSæÌo®LŸ¾²àq¿äÓxÜôä$[Éû”IãtÁÿ5“šnj†·Ù™ÕFh0©$éÕKØî=á2xøHJ&‹§=Xl¢cÂ`n$´DèAÕ…´šƒ;6ÄÝ¿;zÂä#缚+C%€y¤¹Ÿ’JÿK'LÙbyRÓ£×òde²jmÕc&Ni®­÷‰on†\}ŸøºøK!L|aÖÛ[ZÓ9:K‡Cß }°Ök@’üæÿµ^,_µžad‚~ý~L}÷OÄõjÃ)™?jj®¸žb±¡P?Oõ1ã¨sîÝ­ÚÈѰU=îUÜã`o÷=Ç]¨ËDû_ó¾8uîB³MÛámQa>li¼¾Ïyg‘†††o_»7]´¢P]UIyæŸÅ&: ü±æ@Bh_0ô 4Oð(AÕ…´ŽÒ¢//bc`:ûúù“‚¼Ê:Î-RWW—›•éÙÃ{3ækSÿfBmm-Ì>!È›£­¿ýÀqš0>ºÞw3$:”¤ô”¤èëKŒW­ÿ}“&8¯¡#™ž÷ànôõÀ†úzp¨k72)¯¥kðàÖˆÀ+ j§Ï_Ü£—TZòÛ‹ëÓW £ÅæÄºtyŸ˜pêà=ÓµrŠä¢‚ÏÿD†F^ók¬Y¯ñ™8]“5áÞ±w¢ímv虚“Uúg¤½óü‰¯ÛéÚ?¾« ê!+÷O{—èyÚÁÐ|SÙŒÔwç$º÷'÷ËËκ´p™1±Ä%8Zp·‘A~óõª+¿KI÷e±‰Ž?m E ¡ Bª.¤uܽúÉxÍ?÷3w#®ÿfɤ0õ,¦³…ŸóÞŽ ¸x.&:|Ì/¿‚bRžÔ[· /Æè«—\ï„ÔœH³K×LÝ{öÒ7];qÚ,=áõ·¯å¹Ÿ2ïߌ€‘=ÔÏKyÀ .›ë!ç5t4Î>EDD-7Y³ÕºK—®LöÕ˜0 ~ä¸ÿ\r±‡Ddö’êmÑßb©V‹MƒSßh½ÿȮͷBƒ¨óáØ'NÀkZÙs´µƒD]f˜ÆØ5[~'^ëšš;ìÛy?:‘##§àp)ÐÓÅ<®›ãQH„)Q™ÿÌÝÉ©É>Yl¢}#(hÑHhí ÐÜÅŠ¶ª.¤uÜ ‚IªÑºÍ0ż~ ^°x¯(ÌSû©šo””êíräO¨‡^uÑsM%Õ+Öo‘ì#}ÖÎDÍ.OcîÀÖÆþ´ÆøI”LÉÞ} 5FeÀàÓGÿŒ‰Ž`¢™8¯¡#ÓKRJeZÿÁj¿Î] >z\‹åÁTþrÊl--ªÅŸÀ£Ÿ ŒôssI—ôécº¸„„¢²êt-m-=Jý3èÔ×Õ]÷ñÈÍÊ„¯0zâd“ ÛúÊɯ°Ø »d¤¿—•ÿ÷y:˽‡œÛ¤%'¾”å4Yi¢ãÀO`ÅHhˆpƒª iÉoþCŒŽ‘Yg1±éZ‹Ãü/¿}ùŒIÀ5†Lš9TWVz+æ+SfiêÊH}G“O,­2pýæëLš9Wª4“š9¯¡ãÀÆ“~QQãu›i–‘L{—[9E%V1v<$&¤edÁS2ïØìÅzh2aVpÊ'„:¼ì w?öšhë3r†ƒ ´h$´FUeåV“%9™7í>°h¹ õGà¤\í‘Uú;û„vŠˆL¨ºVp»éÄþ¬Eº°­­}+4¨µª«¾¾q)BÐm¬ïRW[KúÿÔÈ*(lºy=Àpí&ú½ |‹‚‰óÖIK~ ª]cÂdšÇТ‚½Y¹…ÃH;má: §v>ùûSÇ5'O#Îr³2<]:wîl}ÄQH$ UÂ:ÕU•nÝP0ˆxÖzÐPuÕAjîÞ„é…¸DwÖëys—Ô¯­åuq(Ü‹ c¸‹Ž±™Ëá}—Ï:¥%'ÎÓ]®1aó{Jèἄu¼Î8¾|òPQYuÕn•ACÀïæçd߸êC<ͰÈÀ¤Å¶Ú À+™n´åhk}ü‚L˜êëì·µf«õ a#ÝÁŸ êBX%öNTå÷o³ý<'?[[ï¢Ó1b4÷U0¤¶¶öËç¼ÇÿÜô½Ðø¸µŽñªwùQS“—u/24øÊERÓÓI4æë–ù¹¹<¾w ÌiU>ZsÔ¸_Fƒ~jz‰9œ×€°ŽÅ®}{,VÂôàŽ 4 ÿu† :…ð´„G,3û-þñÄø¸P?/p×}/%½Ž×?iéʵ‚îÚ@Õ…°Êí°k0˜¹p %gæOg{ÈoNu5·ÚŠîŠÕ ‡W&«³˜nØF¿Ê`´nÓ¬EK¢ƒžÞ¿“õ!-åíkHׯxtŸ»d¹©ÅÖ-…ã༄E”T¸ø„Þò…ŸúËçüêª*YEEeU#³Ñ& ºw?@@x¸§‡ì-´½Î8Ê“ûyŸqê))µó =ý­)‚UÂyÙYo_>ט0IZVŽ’Ù[Zf줩Ïccr2?ÒG¥¥AT´“¼R?•ƒš¶jxm·ÈÀ”Éj¥² d³Í; •—•&¿Š‡ù t)3=5Üÿòó‡÷.@?™7Áy ‹HI÷5±Ø ©µ;âÉíöl i9…-6‡ìþØzhgã¢q»Ž8R;,!U·î544¼Š{Ìðt|ºšÑ*5­(©ËCs»×›€Ôë*.Áâñ½$¥&NŸ iÍVë÷‰oìmvä~Êô:}ÒÊö‹à¼ADPL˜6KªtiqlÇM™&èî0UÒ2 õõw#‚™¸{ãºÙæí¢¢Ü\¨FDDdë¾#–FÚÑÁþSfÍ;ij«v¢>ÊêÀ1ëµÆ¯ž=a¯œ×€ ‚ð“ËgArõè% [¯3Ž¿íØ+èÑ‚ª i™—Oc¿|Î?eÆg7úO‰°ŒñrýNX²Jãõ–^§Ož:´÷lÀî={Qú<6&ùÍÿ´ M›»üGƒ«ªüÞ\ýœ×€ ‚ I¯ãC|=ûÈÈ:\ رfy¨Ÿ×äYóXY¼—ŸpMuaDäv cæ¢% ?µPýðk¼xþh©ÙonÝøøþ«Ãá þ(2È÷ÙÃ{¹Ù;ž`xšXobpóÏ s^‚´3øoXØ¢»$Äǹ<ú)ヸ„„ï8Awi5ÕU•Nv7Ô×[î9(GVÚ°ëÏc»·ý}`÷iÿpJära€;ª #"·c¾–—Å=¸+.Ñ}ÒŒ9 Lœ6«{Ï^Oïß-/+mÊÝÖA—[í·Ûn¶ìnÄõ)³´&NŸMùÈ`͆—O‚0ÊËÎÕ>\c¬dé®]»••–d}H}x+òVèUQÑ%+V7W9ç5 ÂÂý/Ÿ·?ÄEÅn²ïÜhMа¦1v¿“ëQkËw ¯ ÑïØM\|Ýö½ã¦Lo®fÎk@vF›ˆ7œšœÈÝ ‹ ò ÉuÜÍwȈQÜ­á ñÏ"¼{IõÞ`½Ÿ’¹iÏ_ ñq3ö‘šØ=j¸£º0"2¸páÂ/¿ü2j¿G8(°¥^¦‹žÙ‹uAuÝ â…êVnÜöäÞ­¼ì,8⻢äkNžv9*ö^TØ“{·A¾—|)lh¨ï+§ #§0bìø…ËMz¶´Ôç5¡¡¡=zô˜1cÆßí8ää䄇‡ëëëËÊÊ º/ü#-ù-w+„‰%ñ¢Åm‘#GŽß¿AUe¥Ó_444¬ÿ}ŸdSuÆWmÞyÞþ|z6 RH‚qAuaDdþpúôi 55µåMðM~¹ø†µXf¸†&Íl˜“5#è©íz—áGÝ{öZl` ‰íVZUƒ0sóæÍsçÎÉÈÈ€ ùõ!%9ÔÏó]«¢‚Ï¢¢¢2òŠð÷áf¥ÔÅÒS’‚¹×(͉RÒ}¹ÿ3q~Ê/®ÇîÔtà*+*œØhéj®”S$gg|t>l“š”: T×òÕèÏz²xàÚ†¸„‰Ñ™T/\CÔG­ÿ}áh>¦&»Úƒqw²³ýûQ¬ÍÙÊ/Á©êˆÈåÂʯ쌰Õ7]KœÖê,&6±iåèý[Öæçe‚½ÝkjªA]m±9DäÈ“ûÛ5óë>—Zûüqþ»¬¤ܶž©9%ÿvhh;È·MäÌZ¤Û£—ä±ÝÛ’^½ø·3—Ý¿–•šo4Û¼ƒÈ‘#+ÁÛ†úïsNQ׌×mfû×à'ü‘_Ü7LÜ eüÔY„"¨ ûmç^ëµÆŸ>¦3Ù—Åלm0$÷S¦¸D÷í•T9Ã54­öÛYkSßXÖví å—@àTuaDdá^~ ºGˆpÁù5pèð„øgçO\·c¯´Ì¿._m„FÀ½”2©I °Õ1¢q-Xjª+ƒ§Õf,С~ûòi,‰î¹@‚½¡¼MOI¢ß‘Ô4¬w|ñè~[Q]èå×"]nUΣxÃ:Æÿ¹Gµé[PáLvií£/I+ƒKÊýQñ—BJN;°+zù%Àδ{8R]™õÓð÷ß8p€íÝ™SZZZÔå>DHˆw  Áv£¢¢âKUUUÝ»·âN€ÖbËf㪷n<¼¥¦>Jcü$.FŒ@-õ òOzQn ¢ §Ðxa‘rJŒ •U©ß7¹myE&»äd}„íÆå ~ZÌÔñ³GYY‹O|sÈ/bX(-+åbµ¼ˆ7LVþã ‚R÷þ6Gkm4GEyÙÝ!OîÝ+-+)ª­­…Ÿ‘aå<µ+žú jÊËË #¡ÿš·àHuaDäV}j¬¬¬lmm[µË¨Q£˜““#N`L›6ðj<`»‡/Ð?FÏÖzÙ´iÓ¹sç˜_¸p!XÈâÅ‹y*¶( ª~>(*Äç¨.bQ´s0]Y¹ÉŠr.¼´ø ©ieš}‰œ²’b¶[§Yõ£âk9l%º÷`²KIa!“O‹¿p_uIJJr2;‚1¡Å; 444ˆC†4ž4ªª­g»9†p=Þ0q£U«híceE°=ëµÆÙ™˜ãƒ]±á/¨™:ujll,“}úôÑÕÕ ™={¶XÓ3mqq¸:?¯`_uaDdöjà:ôb A¨á¿Ø¢4LW åfeÄ?y{' fM·l~ÔÔ«u@‚¼œ’â/2r Ô;j¬wßÎ(W~ÿÖÜG4ç@Æ|®(/cò ²´¬\^vV`L“’–..,ÈJO¦1–’æçÅbg4ÆOJyûúvXõúãOcîßc5@mØIÏ«ð䫸ÇÁÞî{Ž»PïìÍûâÔ¹ ‰…„>‹-ÁƆÖ)­ðâÀæ“è®}ûœwihh ¨ÿ¶bW(¶„6UFDæDä•+WŽ7®­ˆ­„ø8·“G?e|—ð½ÇpUqá ñÖv™2eÊôéÓ…AlQèÒµkñ—³Ç€ƒ:rŒ¹_QA~WãBG‡ªe–š­‹¼æûèîÍsÇÿÒ5Y#-#[˜Ÿæùñ?·º‰‹S¯’ª¤2T—»“¥Í!²²jA~n˜ßåä7ÿëÑK²¢¼¬ÅÎ,60½vÙíNxpoi™yK–Iôè VzÑéXMMµú˜ý%tÔ^ìh{›z¦æd•þiïß<âëvºöÇïß*xð#q„¤¤äáÇù,¶(*Þ0ˆ-°¨È ¿ùúFՕߥ¤ûòâÀ‘•û§½Kô<í`h¾©ŒlFê»sÝ{È“ûw¸´p™q—®Ý„ß®–.]jccà ±%Tc8Ótwš…MÕ…‘ùy×®]|n‘mjkkaÊKD“¥¬ÅÜ"áþ—ÏÛ’?p[ÄÄĤåBüÅxå˧±Ÿs²mÿ Î‡?åîp™»öŸ±Ûx¥L—.]7XÛR_µöæÅSøWZi9ÅÄþ:åîô× º˜ß¬#-+gisøÌÑ?¯zºB¢ä÷<ÔÄb ñ|ª•í1G[ë˜èpHÔ»ÃȰ†ÑãA‚EYYª@š`¼á!êçGAC"5y}^8]Ss‡};ïGG@"rdä.zºØƒêrs< š~»²²²âiýlÀõÑž=§#ØT]™ߨÝPTOXÿq7ß!#¯±òïJå`e&D8‡äàêçwÿî—Ïù$RƒŒ¼"ü‰ôW®SPR¦›·dÙàa#ü/žÍHK)ÌÏ“'÷S<ÄÐ|“ÊÀÿ< S˜\<›“•k Úp‹­P[·n¼ÁPÛâU-hˆ¬¬쟚˜PT˜¯ØOõ—s–­úzö8qÚ¬³‘~n.éï’>}L‡y³¢²êt-m-=ƒ6qš™?6Þ°åÞC·mÒ’áˆP–0åú›¹@§¾®îºGnV&LìGOœl²a[_9ù[¡þŒô÷²ÿ¿ZD‡µ+¶e×G{z§#´°©º0"2„55Ä êZ„z¹g¤ÝЧ¯Ìš-» 1/ÖÈÐ=Ç[¬ \$šL×à›49L†õ1ã 1oEZFüz‹éð.Þ0Ú›kŽ&”Ö w?úb¬8› ˜½XM¦b?•S>!4™hW­‚ë£={NG p!ú5‚P³cÕ²”·¯‰×”«þÌ/ÿ_õtõtq ÞÅú¨Ót­ÅDN^v–ÏùSé)Iy90;4lÄ}£!ê?g3ß¾–ÌÐT0è´„ÛÉ#oGVU~¿Û¸0ô‡”äP?Ïw ¯Š >‹ŠŠÊÈ+Nš9WÇȬ—To^}AŽÍÀþý[ÅòicT>™ÿÌßýLÚ»DQ%ÕFë6iNn\Ë£½ÊÀ!ôNçßò_C|.½xtÿsnvMu•¬y˜†¦¡ùxAó]^?êë õ@…dåþ“gié›­¥ ÁÜb÷XU"ÔÀŸÊÑöÊuzPQb"öÿu|Ú¼ED&q¿ºªêÚe7âÁ7‚Wqm·®­­­¥ä|KKÉHK¹3ÂÁ#€~YNA„mRUUI3ö&½Žß¿e푳^£'2‹@ÃÉhÏò²R+S=Ð[”œÌôTH1Q¡Î>¡Ô±snùž;v€²^1è*HObnÛ{øS„+ÝcT]—qôj¼ç¯U϶,_m‰~øÏœ±³ýQS½lõz-]ƒ¾rò%……17Ã}]Oîß5Js¢”t_(Ö¹s£Ã%"ðʺí{f.\BÜßãuæ$üíaß…K¥e䪫«Þ¾|~þÄÁܬ WgJx]A„s:5 Å•ÎGl´ô µ WÊ)’³3>:¶IMJª‹£=Ì€¾N/\CÔG­ÿ}Ÿê Æµm?¦&»ÚNK~ëîdgû÷¢Xvæ‡ ‡EDDWYnŸ:wa·nâ/ŸÆ^9 Šù»Ÿ%õ`±{¬€ª ^‚/»-+54ßh¶y‘#GV‚· õ Þ眢®!c‰P»e%Åð'×35§ìžÑ¸ž¡¾éZâ´Vg1±‰M¡K`ÖÅIt?A„â!b(ã§Î¢Lk¨ ûmç^ëµÆÌ4æp´gHî§Lq‰î;ÚS¹®¡iµßÎÒX›úƲۡAµ?~@m ‰œY‹t{ô’<¶{[Ò«­ê+ êB„—ô”$ØÎX C“?sú‹G÷i ¦äÀ¡ÃâŸ?qpÝŽ½Ò2²D¦Ú€{/xÙkAŽñ§Pظ˜\Ó ßŽö ±sep R¹éÉèâ/?#c¾|Ú¤’fM† Sg?zÃv÷˜€ª ^r²>Âvãò ?-¦û+*«R¿±e³qÕƒ[7Þ‰RS¥1~’Æ„I#ÆNh»Ïi#‚?dåþÔo‰À}õõuLváp´oŽŠò²»7BžÜ»U—[VRT[[[WGÛ ¢ryEF°Ù=& êB„—’ÂB&Ÿ¡5tšuÔ U?âs T±æm€Ç¹ÞÒ2+7Yiép¿»‚ ‰DÜhÕ*8íRVRl½Ö˜>t& _ËIM+Ùr±{L@Õ…/Ò²ryÙY1ñ41Λƒ~irÐXk¶ZCÊÍʈò0öNÔÛ—ÏÙü¨©ÁÅØA„ÎG{z<]ìArÉ*WYî®1¶§do11±N:-¯F]L²wŸ¢‚ÏåeLâ—·¶{L@Õ…/rd%0ôìÌj#48¬JQY’¶áÊðïó'†ø\BÕ… "$pq´§ôê%l÷žp<|$%“þÔW_YyP]Ù˜¨..vU"\TWUR⺨÷*îq°·ûžã.Ôe¢ƒý¯y_œ:w!ñLos8ÚZÿïi¬Å®?óóbüôùÚ ºÊKKxÑy„mè#×Ò?.T¡v^€fСàâhÏ¢Â|RÓ©,êLŸóÎ""" ß*¾vïÑr4ÆOJyûúvXõºöOcîßc5@mØIÏ«Üíª.DX€¿ü #ƒüæëUW~—’î«k²&<À;öN´½Í=Ss²JÿŒ´÷ož?ñu;]ûãÇ÷oÌ+ìÒµkñ—³Ç@µCGŽ‘#÷+*Èòj\£eàPu¾|'„%ØŽ\‹ÓÛì™Ú@[„ë£=CÈÊýÓÞ%zžv04ßÔGF6#õ]€Ç9‰î=äÉýò²³n‡-\fÜ¥k·Å¦×.»Ý î--3oÉ2‰=Aý_t:VSS­>æ_ÆÅî¡êB„…!ê#⟹;ÙA"5Íeáïae{ÌÑÖ:&:uáac×lùy…Æë,_>ýœ“íhûu~7qñßvìåzÿ¶a¹#¦w4Ø3´¶×G{†èšš;ìÛy?:‘##§àp)ÐÓÅT—›ãQHд´¬œ¥Íá3Gÿ¼êé ‰²{ÿÁCM,¶¯¹Ø=T]ˆ°`¹÷óa›´äÄN:Qµ›8mÖÙÀH?7—ôwIŸ>¦‹KH(*«N×ÒÖÒ3hqø/9x†úyÆÝ¿ûås>‰Ô #¯8bìxý•ë””yÿ…f©¯¯{üÏ­ëW<ˆ³÷lG®åz Ý«—ÃDvò¬y¢¢¸¼Ïአ ´E¸>Ú3dæúººë>¹Y™½$¥FOœl²a[_9ù[¡þŒô÷²ÿ¿Zļ%ËÈʪQÁþ©‰ E…ùŠýT™1g٪߈DÜíª.„'ÐÌPNXi2á¿wÂݾ˜´Œ,üE[Õ…>}eÖlÙ©…î"üâ[Å×›!áþÞy9ÄSH Ã¥“Zº}‡I ]V"Ô61zb÷ÇVY²Ž‘ ¦Ì&G؆+fÀ‹8Êh­‚þ¸4÷‡åÃhÏ0öb=H4™ŠýTNù„Ðdª‰yÓ¬t¯EPu!Âòs>…ùyÝ ªüþM¬K-]ý•k¹Þ ‹j›‹¡{>(úš·û½ÈPw';Wg˜/1^-GVâz?;,Âchˆ@@Õ… oI|õ"ÄçÒ“˜; õõ=%¥ ×nÒ1\I ËF¸tR3ÓYPÛ\Ät˜‚oûóèªM;Âü/G^ó õó ðž4cŽ®ÉõÑ-̃æpÝ xG™„6€ðT]‚ð„ººº‡·#ÁѦ&%š¼Ñ]±fÞ’åÝÄÅyÔ"ëj™ÇЯ 5˜o¼zúÿøŸ[†¨‚þÿ:wF”jBkhˆ@@Õ… O0מÑôiðð‘ú+×þ:g>¯oOf#B-“º tŒÌ˜ÄÞ‰ö¾ø>ñÍ ›íÎǽ"r½çíá7´„Ÿ êB„'¾vÅú-&[ùÓ"j[Œ¡ aÚ¼E|\}/¸_ aá7´„Ÿ êB„'Hõ‘.-./õâÑý¥fë¦ÌÒ"®éð6"Ô¶C—XÝàÚe÷÷‰oHMž8éaDøÍmá'¨ºá ž7ÄD‡‡úz‚¯²ûc«‚’²ž©ùm}J ®ÃF„Z&1t««*o‡]»~Å#?ç©iÉÄ%+VϘ¯Í¾v„ß Ð~‚ª Až Ö¥Ë\¥^={ N÷ylÌÙc®œ?µØÀMp4®À­µe%ÅáÞ7¯”—•‚Kž0u¦®Éñ“¸ÕÏE5´„G êB„·Œž0RNæÇP?¯»Á¾\‚¼Üæjëëšš+öSá¼~J ]Î#Ôæfe\÷ñ¸\SSÝM\dÁãU-Þ÷ƒ°OÍ€‹q”Ñž‚ª A~@Vé¿i÷U›wDDxßò öxžÂI41t9P»~©VC}½ŒœÂbÕ ô Y¿R‰°×Í€ëq”Ñž‚ª Aþ>lÙªßÀ>ºâs‰ÃÚècèr¡vÈð‘à³§Ìž 2ñ.š×ã(£ <U‚ üüñ(>‡õÐÇÐå0B-±B:¸b\£Œ6€ðT]‚VÂèÒç0Œ¡Ëb„ZÖ£!|ƒ 3àEeᨺAAøª.AA~ªK$ÔÕ^ÐÝ@x\A¤µ ïàmm÷ º¯Àƒ‹ ‚´ô¼¯0"‚ ‚ðT]‚ ‚ üU‚ ‚ ?@Õ… ‚ ÂPu!‚ ‚ðT]‚ ‚ üU‚ ‚ ?@Õ… ‚ ÂPu!ÒˆT×Î""¸ uû§kgQ<Ð"(þ¶"Ä#ÍbP¨IEND®B`‚PKÖ5.I©­1u1u5Pictures/100000000000026500000224489F4E938F13828B.png‰PNG  IHDRe$Ðé˹sRGB®ÎébKGDÿÿÿ ½§“ pHYs  šœtIMEÙ E. IDATxÚìwX×ûöe-ØA–ÄoŒF¥Š€€ˆ-VŠ`A vEDVÄvco1v –DQ£‚Héņ"EeÑ—¢»ï'ëîì°ôÝûsqqÍžÓžSîóœ™Q …¬¨Âô€^ÐKz @/B]ôûw°¥¥U+-ø—@Õ^V…Ï_¾À½ü†ˆ'‘N®îClì\Ý£cãèðÃlÄΤCâg¸Ìbcï<{nö³gT “«û¥ËWé“/]¾êäê.–Ë`«N®îQÑ1Òr ¼|ðÈQÉBò‹‹ÇMœÊXþÃlè¿a¶#çý¶èÅË—ìg±±Ÿå>/-=CZMgºÎ©š¹-“‘™5yÆ,*ÓħI,oóòæ,X8ÜnôzŸÍ¥eeŒYHš‚1© KÅnUÆ4EM=Øj„,¹ÈR£Ø¸xÑ&xöü…ëÜùClìÝæ-xù*§Ê]ŸCm!­XÒ;wïµ¶ã8ezl\¼X”‚ÂBÑÆ’% c[0¦Sá!E,nâÓ¤‹–·½mçîÜ·o1A.éerJªï¶B.]puvZ·qSfVv…‰nÜ´e–Óô«Ïÿ< ¿ïÖT`fV¶ÿ…À’’BHIIÉi?:)*—¹n.×/¹:;­÷Ý’‘™%™làÅàÔôtWg'±ðüü‚Ež+òòó¥•'ôæ5ê/ÈÿŒ±QOºHÒμ~9ÈÎÖzóöÒN{öüyÕÌÍh¿€óv¶Ö!—.ôém~áb0KàÎ=ûFް½zñü€þ}Ož>+™>£)“ª°TìVeL“¶ó ÏÅ“':Ê’K…5"„üyâÔ7élÞê6kæÍ+]œ¦ûlÙVå®Ï¡¶` dOóÒ•kM›6½xÞoÞl7Éžœ’šÖÇœn/Y¢0¶c:"z¾èqZzÆ*ïõ£G^ 8ûË8ß­;‚‚¯`ŽœÑËÓçü]g:õ26âñx榽¦MžxÆÏ¿ÂDýNëÓÛ¼aƒcÇŒJÏȤÃuu´cã!±ñ z:Út¸ÿ… ×™NÆF=é\NKär>èRDdÔ’Ù¹ÌùÕÖz¸,µmÒ¤ÉDÇñ)©i„¥+½(G6<âÉr/oÑÓÔÕÔ†’•-¾?íç¿ïàazL¹ÿàáûÁV#œgÏKH¬šeRRÓ¬‡ åñx6VÃè…c`ttì€þ}ÕÕÔz›™†ÞûGFS0&Ua©Ø­Ê’&¿¸Øÿ|àä ¿ˆ9Œ¹0ÖHÔ/‘tt22³ ôUUU{ô0 šR®sç_¹vZ¢qº-¤ (–4oß Яoà ,ûô>}ì1榥kwë&–{ƶ`L§ÊœñóŸ9cj?Ë>5úþ»K<¤¤¦bŽœÑËø„D3Sú£¥Eïè¸8ÙSÿðáÃÿ:~O4Ð×‹ŠŽ%„DEÇöèa@‡ÇÄÆ‰æÒ×Ò"&6NL,ïܽ·fÕrUU†Þ¿ÛÞÖF–ò|þòåòÕîݺBÜ]œ÷:R^^~ðÈQw—Y¢§•——_¾úS—΢çÎfdf¹»Î¢×Å„ï ¾óf»Þº_T,#£¢пaƒŒ¹hij²ƒ.gÏȨçêåK !?ü¯£¾žÇ’e½Œ¾ÿ®ƒè™ x¼®]ò\ô›h®ß¼uhï.±”{öˆˆŒúî»ææ¦ýûYÊnwQË””–RëWöõJc ¾^xx„¾ÞŽ]{Ê?–ÑŒIUX*v«JK³¤¤äï;wOüqPÆ\ØkD94†"K+j¡3÷·EŸ?VWWß³c+KF]:ÿ8ÏÝÍÅÙiÇ®=.s~•¶a(ÿmÁȘfqñÇâââ ÿ3‘Q;÷ìÛê³þ¿0=}Å’E= {¤¤¦mû}7õ-{ƶ`L§Êñù-Z4Ǥ ¸ª—-Z´(.þؼy³¯ËÛ"Qa›€Ää33+ûÇýÇÓ!?ü¯c~AÁËW9ors»tþ‘oÞ¬YŸß²E F‘NIMõY·fÿ¡?Ÿ&ééêˆf$ã%ê´ûùóÄêeKš4iB…;Œ9y†óÊeK¤Õˆ&99¥¸øã‡E­[óÓœ•ž‹W¯Ýà¹Ò‹§®þû¶Íݺþ$KyÄ,Ó¨aC@ ªªúùË—F ².˜ë¾Ê{]îÛ¼i“'>x&£)$“bŒ%Ù^,0ò0ü±¾žn£Fd¬»dD‘th!;÷ìÛæ»Á@_/*&vïC»E$S¬^™Y!7o=xÖËØHr­Ã¹¶Ö@ŒÅã©«OrÏãñÌL{yoð‹ráì¿—!u´»Ç}ÝeeÂØŒéü7¹¨«Sû×#ÔÕÕYg›æïÞ¿]gð‹‹›5mŠipC/ ôÃG 2èëlnh /Kºoóò.\¼´`®»X¸¾®î?îÝż´Ga­‡=yÆO(jiiŠæ²t‘!ÄyÆÔ•Þë—xÌ×ÒÔ”ýÎQúYö),|ç»mǺÕ+ÿí/èé^œëæÂwå²%AÁWŽ;.¶AÔ²E‹]Û6———ßüû¶çJ¯Às§«`™6mZSÓÄûwïÛ´iÍøýwþ<´Ÿòìù‹sd\1H&%KZ{Éž&Åãˆ'¢[ëæ"Y#Qbââç/ZJk!UìÌÌ,ÊËéiØÃs¥—äˆÆwëv;[k§ƒ{57æz[°4cñÚµkKy½B€']¥Aƒ¯Û6ìQÛ‚1šŸºt~“›Û¡}{ê㫜ö¥¡AØã[«/ú&>MÚ¸y+}%€z§‚ë—“':>z,*:æó—/QÑ1GŸœ(ƒÿ—¸c×Þ_ç̦/bÑèëýuûŽØ®Î$ÇñGŽŠŽémfúàQØþƒGDsQWS£öšæÍvõÙ²½:¿}igûéã§ûRÓ\BâÓí›}¢¢c¤ýÂ䛸#lRÓÒ©û)ÔTU‹Šø„iÎn¡÷î«©©Q.rÕ,£«£}íúÍ’’’+!שk«Ò'Ϙñ¤´¬ìQx¸žžŽŒµfLJÆöªlšIÉ©ÚLYHË…½Fb7RRÝ»uMJN‰‰OEw)$9¼o·½­4±äP[°7cš}ûX\»~S <Žˆ43í%ÅqÊtê‚îӤ侖²Dal Æth\œ¦ïܽïå«@óúõÁ#ºÍšÉbœñ£=þ¸¼¼<3+{ëÎ]ãÆ`ŽòƒŠP(¤?0>/*:fÏCÏž=ÿá‡ÿÍus16ê)mI‡Œ›8Uô6z*ú69%ÕmÞ‚]Û·ôÐ×MáITôÞ‡^¼|ebl¤¯«“ð4iÓzoÉ\nݾ—°pÁ<ÉrJ–‡1üõ›\Ï•^‡öíZ½vÃ/£z>‰Š¼¸i½w…)<‰Šö ¸°Õgýr/ï'O¢n^½”ø4ióöߟ¿x¡¦¦æµÂ³Ÿevs3Z&)9e½ïæÜ·yíÚ¶õ^µœÒÆÀ¨èß­;Þ¿onnê1on«V-s«cR–ŠÝªÒÒn7úRÀYÑýXö^ÁX#–®EÉ~öÌgËöôôŒŸ~ê²l±G§~¨Z×çP[°4´4KJJ|¶lÞ½[×5«–S›œtaâ·îø=çõc£•ž‹©=Oö(Œ5bLG”[·ï:òg~AAk-­Ù®Îƒôg³ÃÂüyüÙ³ç-[µï0æ—±ÐKP×°<¯b½¬¢¢cha —ôÏ*æÿ²Þ ¡"Åà_\ÖKú?½ —Õp.%è%½¬’s ôà6øý%ÿ7½|ýæ¡©9ýG‰Š‰±¶ebaéà8!<"‚1¤–˜÷ÛBÉÀ·yyƒ¬¬éuV¨cœ  }(vÀÿã§Ó—®‹Ô Y/rù%¤fÐå¬\äW/#žDÚÙÚÄF„S„ã'OÍœ>-ì^¨­íÙsŒ!µÄ½þ ììæ^PPH‡ÔYa Þy–óF쀜ܼm[‹Ô ·„µ4×ïÖÅmâ±ì”C/##{›™‰†$%§ØX çñxv¶6IÉÉŒ!’. û¯óM-ûÙ;ŒK|ú”r[§;»˜XXNéüúÍBå¼RPdž¦æfkgbay;4”MùØÉSÛ6ù²ÏÐÔ<èRpŸƒüΟöó3ïÛÿvh(†€‹¤f=÷»ró_PÖ‹Ê;p&> þç¼Í;p9ðÆ¢âb^iÎÛ¼ÿ׆>ÈÍ/¼pýö!¿ A×R2ŸI‹—œæí/Úƒë×6nÔhØÁÆ &„DFEoÛ¼‰Çã͘:e°•´ˆNÓ¦òx¼A~þü¹:µ6x0Ç{öüù€~}UUU«™ÔFzÝÕÕÔ~ìØA úCnêjj=u»¼*Îÿø‰Ò¬‰}`?¤ÿÓôÌô/óÞ½++/—½ÓwÔÔT !æ=õŸÄ?½§­ß­ËDûáìE¥sQÿ’¦KçÎYÙÙ„-MÍ">ŸÂçóµ45CÄ R˪ªª¢úM?}úDóx¼Ê–“±0t:ªª¸yÀaÔÕÔ*<‡Ò6"$*Då[oOüâeÈ݇ëuël;Ð’%ú¿!„tï2ÔÒ¼©Fã÷ž¦e±Cþ/^Ö°^ZÛzšœLIKÏèi؃¢¯§{íúÒÒÒ+!!:ÚÝCÄ016:~òTiiéíÐБcÇBŒzö<~òTyyù±“§Œ{BÔÕÕo‡†ñùK<¥FEE…ÒB*, (¥eeb=ˆ(þô)êiJÇöm¿°o/^B ßµnÕB³EóÈ„ÿn=‘rîÊ­Òò2c=mýnÇ%V —rñ²†õrÃÚ5ËV®6±°ôÙ¼eý/BÈx‡£ÇŽ[ øùÄ©3S&Md cÕòe#žô8hïƒ×®!„¬ô\úàá£Þý>Žx²jù2Bu‘ÒvÔ˜AH+Œ™i/–Í[Š  ÃwíÚœ¼&z@éô}{¿+·ÞöíeHDï¾ùöâ%!ļ§þ•Ûÿœ»z«fK:M±è¢ ìmü$.éàÙ °˜„fÆT ä¯\IJ“gð|PRœ »é¦.£s\¢äÌ¿LHΆÅÈ‚¾v'åÕK©…a?6!9[ÞlW/À0ìSÀõöcè%½ —ô€^ÐKz è%½ —ô€^ÐKz @/P·zy÷þ}CSsê8*&ÆÚ~”‰…¥ƒã„ðˆÆ@éô²¼¼|×Þ}ôÇã'OÍœ>-ì^¨­íÙsŒ!€ÒéåÇŽ[ FLJN±±Îãñìlm’’“CåÒËW99ݾ3}Êd:¤ °PCCƒÒªeËü‚Æ@¹ôÒwË6ùóx<Ì eÜf>ŒPëzyïŸfÏ›OÝìCý×ÒÔ,âó !|>_KS“1$S¹ô26"œú£Ž !úzº×®ß(--½¢£Ý1€\°¤$³võR’ñG·ðó‰Sg¦LšÈ@~<Ë€%Í`FÔk#Qʹ$„ô67»yõ²èW’!äÓÅ„vÖ €Ó’ ;Ш…Â:Ë,!9¹Å;XË˾€=¤ÎÐ×z)µ*#!9[ÞlW/À0ìSÔž÷`±1KýXÐEè%€ê ™ÐK /KZH&ô€^çEŒ¸x ½r öyÀP…^ÐKªöÐKð*À½ ºàºõ¾¬—e³Gɇ*ôÎ¥\O€^Ây½p¡z @Í®$à…À ”y¨B/á\0Ya²‚^ÐK®¬×°ÙÐËÿÈÈÌœ0uº‰…åØ “"žDB¢bb¬íG™XX:8Nˆ` J¾˜Àªn¡´Cµ&õrÙªÕ“':†Ý ?Ç}éÊ•„ã'OÍœ>-ì^¨­íÙsŒ!ämý jW/ýOŸ²µ²RQQùôÿ>µÖÒ"„$%§ØX çñxv¶6IÉÉŒ!èäõšMîÓ§OÃlíŠ?~ô^µ’RPX¨¡¡AiÕ²e~AcÀb”Ë¿$„hhhüsçï k×ìÞ·¿FæVÎí’ãâ\u€•ÀPUÿ’bØàÁ«½×B´45‹øüæÍšñù|-MMÆ …çk«h‘`¸&¸ï_ÚŒO xbܳ'!D_O÷Úõ¥¥¥WBBt´»3†È² XÒÌ˾€ZÑÈó¢›°’ð/+f£·÷šuž¿xah`°q7!d¼ƒÃêµë6oÛÞ¦uë k×0†Tªim\÷㊶"ôò?zöò÷ émnvóêeö*@oË•j*ªŠÓ¦–]ùDϬ¬M¨Œ°@ÎQ¡ª.‡e’¥ ¸èhr®{‰-Jd,?Ô® p UùÕË„älÆðø¤,ú+ï`-/û‚„äY¢{Ù“q›‰—}ýÿ.…¥Øß¢%ÍÕ7cÍV‡ ûm¥d)õë(k u` N;ÀU²CÝ Õª¡¯ÝI¾Ì*”D‹1vSã9ñIYÒ¢ÝT$-VÝ {îÕ/'‹ê¦:Õù¶f­T¦à°LQ;ÔåPUäëyëUÛ n ­¯ûJlOCªƒ_aÀ ”m¨ª¢å@¥Ä’Åθ–Å Œº6!‹¬V¶•-s=ÞòSa¾B@,7ô²¦\Ìê¨B¥zçºËp*UF;c „(Õ¯Jäe?VN,®¨›º”yé ½bu”ÃîŽÝuà\B/¥Îu0ÏÖ`_án·SÍ*ßc%jg B”V,e_Ýr}¬Š>TÙ¶§”†ëò@«&tP’©;FªÊÓr²kC…·€VGcäj§±F*Rï‹V@}9—•ÊëƒZ}EöÉš£ÞœH@=º˜ 3©*[ËUYr :Òì\{f‹ ×ÍbYszP«¢¯T8YW”ÐÅT07CUyZNý'XWÖ¶qàbÀ!çRtÀ*Þžœ*úJÝë4æ@i'^îŽhEÖK̳±0õ2ñ*ä,Ueh<¥Õ…éµUXúPu‡d ‡³.GǦª’7œ'E5îÏcz ¸½F«ÕÊŠýò.&˜¾äQ/£bb'÷î3z¼c|B"bm?ÊÄÂÒÁqBxDcú ÖŒ5»”†eò®—+V¯ùuŽ{øý»“Yᵆrüä©™Ó§…Ý µ³µ={.€1Ð^‘ä›C*K¥z{3ãËU*¬/\ÌJõ.€4jòý—!Á©;[›-ÛwB’’S|Ö­åñxv¶6gÏù3†(ùDFÏéðe”L»i‘`>R—/çP‰YFL2ÑÓ~†‘ç&æÜ´µò¾èè˜ØaC‡B 544!­Z¶Ì/(` Qò©¿²}È;XKì+%|ÍUÙ„äl}íN²X˜H4#®\²œxË7U¦æï÷)âóýÎ/]èãVsÙÅ8ýyÙË´ÈPžy°.XÒ÷qè6"<ñXIÜGEë”B/ßæåùnÙºt‘GÓ¦M !ZššE|>!„Ïçkij2†€êw#\¢«%I*%'l.û}Oè9Ô^> [²lÅbßÚ·kG…èëé^»~£´´ôJHˆŽvwÆP©IvÕa¿ÿýÔAC³t?®ô-ÚjR/W{¯‹Ž8t¸¡©¹¡©9!d¼ƒÃÑcÇ-ü|âÔ™)“&2†YºQ…]_±s,·ÃRÞ^[…¦‡‹ €ŒÔäý>…\ émnvóêeöPá\ñ“sáA3úꟊÑ÷¸R <ßGqz…z4‘<¿Ê3z² " ë,³„älX¼VñÖò²/ þÃ,&ªþ9Ò"BêËøÕiwôN÷aYB¸X/}íNòUD¡ K1⓲„@;ŒÝTSTÓDÕ´áØMEuÙ ”ªŸ£ô%™%$[J,$>)‹£­)çÅÆ~,5³«)º½)Ÿ·ÎEíŸØQ¯ —Šî:‘ÅDu0¹ÈÛ­³rbP¡blB/àÀ°¬ñ›ôêfüãî\H¦hO“|j&$z Æ?\LÅñíèGd(ÏK‡¸ô@Æäz2ªp¯YgBi%³ÂÇå`¹ƒŠ@/ßñ_/“¸ì9*Œ²Šýü¿~Ë ­p.¡—È…ŒÕödT…‰¸çÇ KK?‰¾²·ËÛ›«%_ä"'÷6WM¹©X ðSZ9u1ñûKüÂLÉMAýä«n~ø%{.bgJ‹8vSQíu ÆL]Ê^/*ŠXÄÚ0xeMQa±ëýw‡tx¥zf‰ZB ôÈÛNã{žë¾’™J+ƒ´âÉò6ïš²!„-,kŽ2¾Ã€s[ Kš%$ãQMµô`W¶îv~jv ¦’ªÕÉ‘.p…Ê'vŽŒçWߢ%$gSOPclPY„¿^$“% Y, —Ô©dÖ½œüh¼ŒJYS5bɈ1PTD+ûò™*w’꫞#½@Ùå™qú–Ï ÀJ©²'W¡ÊU¡*–n¯J¥ æmWvyT_ë9½@®ZZ;e¿¢¦0¿.¨¬dÖWÅe/§¤œc[z ¨kNQßM-K¥ê]reOr³”e‹XÆû§ôPwê¹å‹ÊsƲ—®ÌËè%@NÕE!o“¢ÊÞ=$ŸûìÍá„^äw¾æJÕø‚Ÿ¤“ 8A ?ïm^Þ +kúcTLŒµý( KÇ áŒ!À(*Ší~Á¹”CSsɆ¦æ¢ÔW~ç­íG™Zö›¿pчäW/ÃÂ;»¹Ò!ÇOžš9}ZؽP;[Û³çC€Ê.z|åjàÅ‹ûví¼{ëFÇŽ×ùøÊ¯^;yjÛ¦oÊ—”œbc5œÇãÙÙÚ$%'3†Õ笀çâE?vꤡ¡1Ç͵—‰Iͦ_“×/ìÙ%RPX¨¡¡AiÕ²e~AcP}233 ôô¨ãÆ9Ž+¿þ%PÛ¨¨¨0‡«ª ‚ÚË·võRKS³ˆÏ'„ðù|-MMÆ€…&MšÐ7ï6kÆ|«To3³¤äúc|B"—ôR_O÷Úõ¥¥¥WBBt´»3†,˜õê|¹¼¼¼¸¸øÐG{›™1ž6ÏÝmçî=¯rrJKKùãÚõ\ÒËñG·ðó‰Sg¦LšÈ°°ÒsitLL¿ÁC‡°ÏËË[¾t1ãi]:w;fôäéN} ÉÎ~¶`Þ–4¥mê²E …õn •Š‹A¿ÙNÉ` ئ€jDw¨ÙEÏ÷á¬X8¿qìªàŸVŠø¤,´ Y0Ðù±î3eQMÎìÇÊrŽ’,…`˜v€)`‡šr+eQJ îýþRò ´aáGŽoÜ»ƒã„'QQì'+Òl%ŸÖëà8Á¸wŸÑãÅn¤VøùŠ™¢´´tùj/ó¾ý­íG)O—ì,USì.Q©Ú)v—`¬ÈÝû÷ÅžÈJ”øq߯TâÔzD–bÐçüê±0àB`YYÙŸ'NÎ_¸X(:<5-](¦¤¦¶²%y²d· íð(,ÜnÌØ½Ì诬ìF†Þ»WVVp!ÐnÌXŶ»)ö8¸kï¾’’’Û¡wmGQ’.!ÙXª¦Ø]¢RµSà.ÁX‘²²²1¿8ŠŽîÕÔñ(œ+÷P›?~ …ùÃlí„B¡í¨1éB¡0=#ƒšé® y²dGq3?ÔªÔ IDAT/5-]²Ó …Â’’3Ë~JbFSŒ÷KJjªè9Jb ± Y5%±ƒ,µSS0Vdÿ¡Ã‡þ8JW_©†F5áÞý±’O ]³jÅøIS>þ¬®®~xÿ^Bõ¬z¢Ð°•|Z/MtLì°¡C”ÄŒ¦xùêÕíлÓg¹¶ÖÒòݰNW[[IL!Ö$«¦$v¥vÊ` ÉŠ¼ÊÉùëö³'ŽíÙ€:G©†F5Q„çÇîØµûàÞÝÑáöîܱkÏ>%oÑ">ß/àüÒ…Êl„/_¾4kÖôî­kW¯Zí½ ß-Û<æÏãñx0…Rè¥ähSÓÒ{«ªªö21ŽOLd?Y±`û6/ÏwËÖ¥‹<š6mªÌvh­¥5vôh§¯§›•­<¦ë,USl;Tªv l ÉŠÜûçŸÙóæÓï[VæYB)ôRò ´z::ñ ‰ &.®[×®ì'+ðl†…-Y¶b±ÇoíÛµ«ÐhŠý _K êÑ‘1qqôû}Þ’€¥jŠÝ%*U;6…dE¨W+Ó¯YVæY¢*pî~ŸGaáCmF™[ ³µ‹ˆŒ¤nóqœ2ÍÈÜÂqÊ4êÆú ¶äÉ’!œFô&—ÁV6=z™ÑJe1S|(*rŸ¿ WŸ¾ã&NÊÌÊRSHvɪ)I—¥vÊ` –ŠHÞï£ ³D5áÌó ìÇÐKz @/½ —ô€^ÐK€CàÁ:üKz @/è%½ —ôÐKz @/è%½ —ôPfÔE?¼{W‹PZZµÒ‚ Tè¥\ðù˸­—O"\Ý‡ØØ;¹ºGÇÆÑá‡ÙˆI‡Ä%$Îp™=ÄÆÞyöÜìgϨ@'W÷K—¯Ò'_º|ÕÉÕ],—ÁV#œ\Ý£¢c¤åx1øà‘£’…ä›8•±ü‡ÙÐClìï?xXM“‰&8Ìvä¼ß½xù’ýÌ!6ö³Ü祥gH3ÝL×9U+ £©32³&ϘEešø4‰%ðm^Þœ ‡Û^ï³¹´¬Œ1 IÛ2&Ua©Ø›‰1MQS¶!K.²Ô(6.^´ ž=á:wþ{·y ^¾Ê©rÇàP[Hk –4ÁÎÝ{­íÇ8N™/¥ °P´±d‰ÂØŒéT8çˆF‹›ø4iÁ¢¥ÃíFoÛ¹;÷í[Ìø õ29%ÕwÛw×Y!—.¸:;­Û¸)3+»ÂD7nÚ2ËiúÕ‹çÐßwë*03+ÛÿB`II !¤¤¤ä´Ÿ?•Ë\7—ë—ƒ\ÖûnÉÈÌ’L6ðbpjzº«³“Xx~~Á"ÏyùùÒÊzóõçµÂs½ï–êK&`ÿc£žt¥yýr­õæí;¥öìù󪕄ÑÔ~çíl­C.]èÓÛüÂÅ`–À{öa{õâùýûž<}V2}FÛ2&Ua©Ø›‰1MÚÎ+<Ožè(K.Öˆòç‰Sߤ³y«Û¬™7¯\tqšî³e[•{‡Ú‚1=ÍKW®5mÚôây¿y³Ý${rJjZ sº½d‰ÂØŒéÈ>ÅŽÓÒ3Vy¯w=òRÀÙ_Æ9ønÝ|“>¨-½<}Îßu¦S/c#gnÚkÚä‰güü+LÔïä±>½Í6h0v̨ôŒL:\WG;6>Ÿ §£M‡û_rédlÔ“Îå´D.çƒ.EDF-ñX ™Ëœ_m­‡ËRÛ~–}Vz.öÞàK/NOžñ›á2›RTÄ_¸tùû…K—ñéBïÝ1zܯ —¼ÿðA2Á&MšLtŸ’šFYºÒ‹òŒÃ#ž,÷ò=M]MmøÐ!YÙâ ùÓ~þû¦×È„û±±l5Âyöܸ„Ī™:%5ÍzØPgc5Œ^y0FGÇèßW]M­·™iè½d´-cR–н™XÒäûŸœ<á1'ƒ1Ɖú%’ŽNFf–¡¾ªªjTSJÃuîü+×®Sk>N·…´Ê’æí;¡úõmØ eŸÞ§ý!fØÔ´tínÝÄÒaÂØŒéT™3~þ3gLígÙ§Q£Fß×a‰Ç‚”ÔTLú ¶ô2>!ÑÌÔ„þhiÑ;:.NöÔ?|øð¿ŽßÓ ôõ¢¢c !Qѱ=zÐá1±q¢¹ôµ´ˆ‰Ë;wï­Yµ\U•¡À‡÷ï¶·µ‘±Hý,û|þü™þئMëý»vBö:üó€þ×/õïkyàðÿmGF]8wzðÀ‡Žü)™Úç/_._ éÞ­+!ÄÝÅyß¡#åååuw™%zZyyyðå«?ué,xî|`Ff–»ë,z]LñÞà;o¶ë­kÁS'NØ´u{ÕL——ß´iBˆf«VorsYB¡šš!¤¬¬ì-Ón£m“ª°TìÍÄ’æ?ÿÖV<v&Xra¬‘h”?Oœš1u²ht]íø„DBÈÓ¤dîl“õYÙÙ3\Ü·íÜš–Îݶ`dL3ûùóˆÈ¨£ÇÍp™MïZÓ†MIM{>Ün´ëÜù¯ßÈ…±-Ó©2±ñ }ÌÍéíÛµõ\äITuö¯ùEüæÍšÑ55[}øPD”¼œ Æ­¿ïˆŽCƒà+×!Q11¢·ˆÿM.-Z´(âóEÅ22*úçý6hÀ˜‹–¦f•ë߯E£F!a#~3[]MmÈ žüohê¤ 42hàñSg$+Þ€Ç32ê¹zùRBÈÿëh ¯ç±dY/c£ï¿ë zf¯kן<ý&Z©ë7oÚ»K¬<= {DDF}÷]ssÓþý,e¯ˆ¨©KJK©…Ç+ûz%Œ1Ð@_/<<Â@_oÇ®=å"ËvÛ2&Ua©Ø›IZš%%%ß¹{âƒ2æÂ^#Ê¡1Y«Q ¹¿-úüù³ººúž[Y2êÒùÇyîn.ÎN;víq™ó«´ Cùo ö@Æ4‹‹?ùŸ‰ˆŒÚ¹gßVŸõßø…éé+–,êiØ#%5mÛﻩoÙ£0¶c:U¦ˆÏoÑ¢9fyPGzÙ¢E‹ââÍ›7ûº-6±ùBL>3³²?|øÐÏq<òÃÿ:æ¼|•ó&7·KçéðæÍšñù-[´`é”ÔTŸuköú#ñi’ž®ŽhF²_áF“&MèL57¦BD×mÿïÿ¨@Q §ò½ÿàá‘?O¬^¶„NÄaÔÈÉ3œW.["ÍD4ÉÉ)ÅÅ?|(jÝú›ßú¬ô\¼zíÏ•^¨½44Ð{1lÈ ¯“W¸¡¾,é¾ÍË»pñÒ‚¹îbáúººgüüuºwsª…=¶>ôä?¡P¨¥¥)šËÒE„çSWz¯_â1_KS³:2yÿÁCÆ1Ö¬y³Ò²²† |üøQT­ß½{ߪUK~q±f«V’[»……ï|·íX·zå¿£ýâ%=Ý€À‹sÝ\Ø‹±rÙ’ à+GŽÛ j٢Ům›ËËËoþ}Ûs¥Wà¹ÓU0u›6­©iâý»÷mÚ´f üþ»ÚOyöüŹ€ 2.A$“’Œ%­Èž&Åãˆ'¢{õæ"Y#Qbââç/ZJk!UìÌÌ,ÊËéiØÃs¥—èùbõòݺÝÎÖÚéà^jiÅé¶`i Æâµk×–òz…OºJ ‚_÷Ø£0¶c:4?uéü&7·CûöÔÇW99ì JCƒ°Ç¶Vÿ^ôM|š´qóVúJ*•¥‚ë—“':>z,*:æó—/QÑ1GŸœ(ƒ»—¸c×Þ_ç̦¯9ÑèëýuûŽØ&Ì$ÇñGŽŠŽémfúàQØþƒGDsQWS£¶†æÍvõÙ²½:?U¼ÿàázß-^+<%¿2ïÕëQXøç/_þ½ÛÛÌ”?ëP^^þ×íÐ~–’±FÚÙ~úø‰ºáöÙó ‰O·oö‰ŠŽ‘ö “o⎰IMK§î§PSU¥n2šæìzレšåsWÍÔº:Ú×®ß,))¹rº¶*-pòŒYáOJËÊ…‡ëééÈhFƤdì•M3)9U›) i¹°×HìFJ*°{·®IÉ) 1ñ©è¶‡$‡÷í¶·µ‘&–j öbL³o‹k×o ‚Ç‘f¦½Ä¢8N™N]Ð}š”Ü÷ëHaÂØŒéи8Mß¹{ßËW9 çõëƒGþt›5“Å8ãF>z,,üqyyyfVöÖ»Æ;ŒÁ¤jË¿ìÒùÇe‹=ö8ôìÙó~øßŠ%‹ºþÔ¥ÂD×mÜ”—Ÿ?|Ä(ÉEº¡~Yy¹¾žD. wï?øâå+c£¾},Ž;±i½·X²ß×aøÐÁ¿ïÞ·pÁ¼JU’Þ¡RWW÷ZáÙϲä9³]׬۸qÓÖž†=Vzþ·¡Ú¦uk{‡_LŒ–/]Ęø¢ßæ{®ô23íµïБٳfòx[¶§§güôS—e‹«~?‡Ú‚½Óœ:i‚Ï–íVv£»wëºæk mØåK¯÷Ýœóú‰±ÑJÏŲDa„1c£žïÞý¶Ø3¿  µ–ÖlWçßÎ$bhwï¶ÄcÁ¡£Çžy­mÙªåx‡1#íl1éƒ*£" Eöååù±QÑ1ÆF=ë½ìc€‚Á½çÇʃXòî_rå_~£—õ&Ú*rQ @x? À½TQQ¡ÿÐKzY çRò€^ÐË*9—p1@/nƒß_ð/ù×ËŒÌÌ S§›XXŽ0)âI$!$*&ÆÚ~”‰…¥ƒã„ðˆˆÚËzÞo %ßæå ²²¦?ÖYa Ž9p&P,$$ô¡Ø;üŸN_º.zPƒd½È9䔚A—³6rá’^.[µzòDǰ{¡óç¸/]¹’rüä©™Ó§…Ý µ³µ={. ö²¾÷Ï?b!aáÝÜ é:+ Ô;ÏrÞˆ°““›×¡mkуäÖƒð¡–æúݺ¸M#–’ê¥ÿéS¶VV***Ÿþß§ÖZZ„¤ä«á<ÏÎÖ&)9™Ñtÿu¾©e?{‡q‰OŸB^¿y3ÝÙÅÄÂrêLç×oÞB MÍéó©cCSó‡ ³µ3±°¼JЦ|ìä©m›|EC$ chjt)¸ÏÀA~çOûù™÷í;4à ÀER³žû]¹yÈ/(ëEåÆ8HPÿsÞæ ¸xãNQñG1¯4çm^‡ÿkCäæ^¸~û_Љ k)™Ï¤EKNó¿öíA<ò÷ë·ùb¾¯@ ¼q?L4G:;%ÕKBȧOŸ¾tŪIŽŽ„‚ÂB BH«–-ó ^‡²qÓ–n]»ÞûûÖÜÙn«×®#„¬ÛèÓÛÜ,ì^¨©‰Éº>Ò2RQQ¹x~‹Ï†ÅËVÄF„B¨ÿÿµÐž]b/»f,Lƒ† Ž Îy‘“;uŒMÇöm<‰ '„ääæwhÛ†> ‹4Òíî<~¤õ‹‘qŒÑ !M4þ3!äï‡];utqe¢§}',R´`beËNyõRCCãŸ;oX»f÷¾ý²œöø±ë,çÆ 2ø‚ßYBHdTô´)“y<ÞŒ©S"£¢¥Etš6µaƃüüùsu  _ßê§õ…‘^wu5µ;v¤þÁP§›ºšZOÝn¯Þ扆ó?~"„4k¢AØéÿ®¨è¯7ÿ /+/—½ÓwÔÕÔ!æ=õ³_¾¾Ý¢yÓ‰öÃÙ‹Jç¢ÔzI‹Ð»÷ï !ZššE|>!„ÏçkijJž)¤–UUUEUUÌy¥y<^eKÅX:UUÜ< à0”n±£¦¦J!B¢BT¾õöÄ/^†Ü}¨Ñ¸±^·Î¶-Y¢ÿBˆA÷.C-Í›j4¾q/ìiZ{1äÿâe­ë¥Í¨Ñ±ññ„ðˆ'Æ={Bôõt¯]¿QZZz%$DG»»dc£ã'O•––Þ 9vþ%†XRÀ °'ô€¹L¡×ÖÕÏÎô¾#€Ô¼}0^ä³ÐE¡—h €EµŽw°Œ½@~×Cò¯ÁX/b=‡n¦Ôz‰)ÈUoTΑ¢Àð.Õ‹6#¶@ —XÁ¸¶rW<ŒE{ª.^ö˜ß —ÕÒBx¢˜õ°XÓ襒*Œê`%Q…ž†éžr[/mÄݾ½Ež d± {™!{ŠÚ—¨¾A½SÖ†^Pš$?’YSË8‹ ¼ü XÒ¬US±/{q[/eo\¼„s ³À¶ò¼\¨qSW¸m ¶Èƒ¯©¤þ¥,ý[~ä¤ðÓ=wËPï;œ•|ÀƒTÔQM#­{Ъ‰µ¯é%–½Ë:3]e_C_4â–‡ÊRfù™ãªð\8Ðz ”e5PÛó]M¹˜´RÖÁ쬴;±Jþ»CÉ&cD¶,.W+µ^b ‰öªÇb0*eíMIÊÙÛûÉ8õµà_Å™&ê}ð³€*¿4Ÿ².¯KUÖÚŒépEŠàÕ—5^ŒUÑKœËÚëHXË..ÌŸŠ¦—ÕŸXÑ'8½îñÖâºÕl¬Á d¶ŽçŠ:°¹\5+Gç^ÅßUÈ-EÝ÷ÏzÕêØ–«‰£ÂÂÈç4ÇéÝcˆ‡P‡ €œË!}P,)/ûBêóUŠºj©T¥*|óI=š¨ÂÔxñ¤É’<ô“Ê–¡Þ›OýË·yyƒ¬¬éQ11Öö£L,,'„GD ”P2•M~8çbÂY©¦Åþä¡“pbdÉÿ P»zþØÙͽ  9~òÔÌéÓÂî…ÚÙÚž=€]å©#}§hõ_vQ#ãªR%©m;W?}¸õ>@XšÃÅÇé¡Öµ^;yjÛ&_Ѥä«á<ÏÎÖ&)9¹Þ×ËX,ËÉƹÁ}BC`µ¡lÔ®^س«ëO]DC 544!­Z¶Ì/(À Á8¬l¾jÈ•¹©F¼a4f3è¥Üuq´±üÏ>œ˜/äYϸ8áÖ™1á$Áz\ÕK-MÍ">ŸÂçóµ45ÑJBÜñ_g7ìU˜K-s“‚õp´¬‚Q׿'Ñ×Ó½výÆh{»+!!:ÚÝ•d Õ¬û«H»7ܺgwØ× )d”Ú³6çšÝOéôr¼ƒÃêµë6oÛÞ¦uë k×(ÏäR)U¶™·–NVêñ9GU›¾EŸ^嵦â­9­ÓUh.Ê]ìÇÆF„ÓǽÍÍn^½öðÆ•à^ÆÆòÓ”'_¸5SËÿX“eÞÇxW8y¿•h/y^k+É* cCLÙ¨ÓýØ„älÆðø¤,i_I‰®%Ëù•¡Æüï`-/û‚„䂚ÍW4–—=·™xÙÈq7«-óV3YFÓUÔdµXª¦_Ûå©NÖŒ'TªÀì'‹+ýdÉt*m7écMƤN“¡¿É’‘ìv¨±‘Rð¿XŒvÐ×î$_3™P¥ñIYôñØME5[€OPö”+›u|R–d”Ú+¿<›W´KÔ`Ùêݘ•*ÀØME5b‡º¬Ne-,í|ÉpvSˆ_µ†®fuj<:cxmt örVߘr>‰Qà}Ñl`rér𝾀^r νôWV0'Åî–Ê3Æ¡—õˆ+XûèemI;±’oÉbÒ£Ãz‰¥SmX£Ré  VcÿRÞG{2ŬJ§—ðlêÞª[€ÉIK `ƒF€I¡—• *&ÆÚ~”‰…¥ƒã„ðˆÌÔi`ÇÐÔ\ò£¡©¹èõ•_ÀykûQ¦–ýæ/\ôáÃnëåñ“§fNŸv/ÔÎÖöì¹ÅS/¹{¬BŠDlDxlD¸èAð•«/îÛµóî­;v\çãËm½LJN±±Îãñìlm’’“1­Ë•‹Ig‡Vp޳þž‹ýØ©“††Æ7×^&&ÜÖË‚ÂB BH«–-ó ¸ÕõµAZ}õ‚þz;0¨m233 ôô¨ãÆ9ŽËm½\”[TTT˜ÃUUAíå[×z©¥©YÄçBø|¾–¦&çfözyz]Š%Þ^ 7š4iBß¼SPXجóÕÛÌ,)9…þŸÈm½Ô×Ó½výFiié•íîèµ*çP>€`Ö«WPðåòòòâââCðì„; IDATímfÆxÚþ¬®®~xÿ^"r‡±äÉœ~€­(öì’öUtLì°¡C”ÄŒ¦xùêÕíлÓg¹¶ÖÒòݰNW[[IL!Ö$«¦$v¥vÊ` ÉŠ¼ÊÉùëö³'ŽíÙ€:G©†F5Q„çÇîØµûàÞÝÑáöîܱkÏ>%oÑ">ß/àüÒ…Êl„/_¾4kÖôî­kW¯Zí½ ß-Û<æÏãñx0…Rè¥ähSÓÒ{«ªªö21ŽOLd?™ý¶\çm^žï–­Ky4mÚT™íÐZKkìèÑ<O_O7+;[yL!ÖXª¦Øv¨TíØ’¹÷Ï?³çͧ߷¬Ì³„Rè¥ähõttâAL\\·®]ÙOVàØ> [²lÅbßÚ·kW¡ÑûA¾–Ô£#cââè÷û(¼)$;KÕ»KTªv l ÉŠP¯V¦_³¬Ì³DUàÜý>‡ڌ02·fkIÝæã8e𑹅ã”iÔ?ôlÉ“%C8èM.ƒ­lzô2£ÿ”Êb¦øPTä>A¯>}ÇMœ”™•¥$¦ì’US’.!Kí”Á,‘¼ßGf‰j™çØ —ô€^z @/è%½ —‡Àƒuø—ô€^ÐKz @/è% —ô€^ÐKz @/è% Ì¨‹~x÷® ´´j¥ÿ¨:ÐËÊñùË — D<‰trubcïäêG‡f#v&—8Ãeö{çÙs³Ÿ=£\Ý/]¾JŸ|éòU'Ww±\[pruŠŽ‘–KàÅàƒGŽJ’_\›KËʳ4cR–ŠÅžÒÒ5ï`«²ä"KbãâE›àÙó®sç±±w›·à嫜*wzµ…´bIS ìܽ×Ú~Œã”é±qñbQ %Ç{ƶ`L§ÂÉe<&>MZ°hép»ÑÛvîÎ}ûS3àž^&§¤únÛáî:+äÒWg§u7efeW˜èÆM[f9M¿zñüÏúûnÝAffeû_,))!„”””œöó§“¢r™ëærýr«³Ózß-™Y’É^ NMOwuv ÏÏ/Xä¹"/?_2JèÍkԟر´3¯_²³µÞ¼}§´ª={þ¼j†f´‰_Ày;[ëKúô6¿p1˜%pçž}#GØ^½x~@ÿ¾'OŸ•LŸÑŒIUX*{JK“¶í ÏÅ“':Ê’K…5"„üyâÔ7élÞê6kæÍ+]œ¦ûlÙVåNÏ¡¶` dOóÒ•kM›6½xÞoÞl7Éžœ’šÖÇÂ\l,°Gal Æt*DÚxLKÏXå½ÞaôÈKgçà»uGPðÌ΀czyúœ¿ëL§^ÆF<ÏÜ´×´ÉÏøùW˜¨ßÉc}z›7lÐ`ì˜Qé™t¸®Žvl|!$6>AOG›÷¿ä:ÓÉØ¨'Ëi‰\Î]ŠˆŒZâ±@2;—9¿ÚZ—½ÎKWzQ.lxÄ“å^Þ¢_©«© :$+[|!ÚÏßÁÃô™rÿÁÃ!6öƒ­F8Ïž—X5›¤¤¦YÊãñl¬†ÑKÆÀèèØýûª«©õ63 ½÷ŒF`LªÂR±Û“%M~q±ÿùÀÉ~s2sa¬‘¨_"éèddf諪ªöèa’šÆbm×¹ó¯\»N-Î8ÝÒ†Kš·ï„è×·aƒ–}zŸ>ö‡˜aSÓÒµ»uK‡= c[0¦SeÎøùÏœ1µŸeŸF}ÿ]‡% RRS1;Žée|B¢™© ýÑÒ¢wt\œì©øðá¿§?èëEEÇB¢¢c{ô0 ÃcbãDséki'&–wîÞ[³j¹ª*Cïßmok#{©Ü]œ÷:R^^~ðÈQw—Y¢_•——_¾úS—΢çÎfdf¹»Î¢×Å„ï ¾óf»Þº_T,#£¢пaƒŒ¹hijVªÎ?ü¯£¾žÇ’e½Œ¾ÿ®ƒh]ðx]»þä¹è7Ñܯ߼uhï.±DzöˆˆŒúî»ææ¦ýûYÊž»¨MJJK©Ç+ûz%Œ1Ð@_/<<Â@_oÇ®=åŸ?ËhƤ*,»=¥¥YRRò÷»'þ8(c.ì5¢C‘EµÐ™ûۢϟ?«««ïÙ±•%£.œçîæâì´c×—9¿JÛ0”ÿ¶`dL³¸øcqqqÿ™ˆÈ¨{ömõYÿ_˜ž¾bÉ¢ž†=RRÓ¶ý¾›ú–= c[0¦SeŠøü-šc:ÜÖË-ZlÞ¼Ù×En‘¨°‰MCbò™™•ýáÇ~ŽãE…*¿ à嫜7¹¹]:ÿH‡7oÖ¬ˆÏoÙ¢£H§¤¦ú¬[³ÿЉO“ôtuD3’ý‰£FNžá¼rÙiu¡INN).þøáCQëÖßü(g¥çâÕk7x®ôâ©«ÿ¾ms·®?É’¯˜M5l(TUU?ùÒ¨aC–ÀsÝWy¯Ë}›7mòÄÂd4‚dRŒ±$[ŠÆâB†?Ö×ÓmÔ¨‘Œu—¬‘(’ !dçž}Û|7èëEÅÄî=ph·ˆdŠÕ+#3+äæ­ÃzI®u8×Òˆ±x[¶WÿÏž¿HH|º}³OTtÌ‹—/+<ä›Ô´tê~ 5UÕ¢">!dš³[è½ûjjj”s\5›èêh_»~³¤¤äJÈõîݺ²Nž1+<âIiYÙ£ðp==kʘ”Œ-UÙ4“’Sµ™²– {Än¤¤»wëš”œ"ŸŠîOHrxßn{[ibÉ¡¶`o Æ4ûö±¸vý¦@ xifÚK,Šã”éÔݧIÉ}--d‰ÂØŒéи8Mß¹{ßËW9 çõëƒGþt›5“Å8ãF>z,,üqyyyfVöÖ»Æ;ŒÁì ä ¡PH`|^TtÌž‡ž={þÃÿ›ëæblÔSÚJ“7qªèÍôT õmrJªÛ¼»¶o顯'šÂ“¨è½½xùÊÄØH_W'áiÒ¦õÞ’¹Üº}'..aá‚y’å”,´o—®ôúÅa´±QÏ'QÑ7­÷–—ípa«Ïúå^ÞOžDݼz)ñiÒæí¿?ñBMMÍk…g?Ë>ì†f´IRrÊzß͹oóÚµmë½j9¥ŒQÑ1¾[w¼ÿÞÜÜÔcÞÜV­ZVXMiIUX*v{JKs¸ÝèKgE÷cÙûcX:!$ûÙ3Ÿ-ÛÓÓ3~ú©Ë²Å~ø¡jžCmÁÒ@ÒÒ,))ñÙ²ýQXx÷n]׬ZNmrÒ…‰KHܺã÷œ×oLŒVz.¦ö<Ù£0Öˆ1QnݾsèÈŸù­µ´f»:П}´> ?òçñgÏž·lÕr¼Ã˜_ÆB/AýÀò<¼Šõ²^ˆŠŽ¡…€^ÐK>Ôí[U眺]oŸ{oÝÊOX²tñ‚ùÎNNTI(ü—Š BÈÕkUBwù]Fy¾œ¹c§D"9yêÔ¤ˆ©„—=<2wì|úôiÆŽžBBˆ™™ÙÉS§47/HøXÙ©y<¥…,¸p=zL,‘Hróò† †áÛ0l$­­2üû¿…?.ùåÊççÿ$`¼$„4ýþ w/{GûžÅet5e»BöæžNüïÙŸ}_õ/(,ZþÉB5HþÖxÿ×”ÚÇÛ‹¥ó–bê”)Û22ý^{}ûάéÑïà»0`ú9õÙ~ð(óBÈÀþÎ{rOÜmlë%$ÌÙ7¼$„ŒöpË=ùÓÞ#'ú8:Ðǔى¿¯gÑÅò¯w—_Zöš'U(ÿ”‹Ìét¬ïFÊæ¬ƒ2“n´¹»Þ!:@Çò˲ŠZDÜW/•Á¡?¶¬¢V×b×- â€P Ýúcè%½ —ô€^ÐKz è%½ —€èåÝúúñAôfIii(|”ߘ)QoŸ+,TX—^æŸ+ø`öœÆÆ&º$sÇÎïÅæŸ>²{ï~…%€qéeÆŽŸ¶–YR^q%8ðMssó°àòŠ …%€îc¦ÁcmÞ´A¦¤±©ÉÆÆ†ÒËÁ¡¡±Qa `\ù%½ì|GÇÍÍ„ææf¾££Â`äD¦5#c×K·®G‰%In^ÞpÁ0…%€±ëåÔ)S¶edú½öúöYÓ£ßQX\€îc¦ñ#^(@MùAÐK@¿1C@·€gH Ç£þÐæôC_ÐKz ŒùÎXLù@/è%½ÝŒ½ËŽÄO’ôŽ®}þRè=šþÛÔÔ´$ÿì­Û·Ã&Ñ…Ì—#/ö¯^Òr˜}ð»ÇB ‹ŠÃB‚W%'U"}Gý±µuuG‰cÞ&„ûúø î —²|þå†Yq3¨¿‹ŠKö8à=f\Ô»1W¯U©ÌÏ ¹ z©šªêê;wïŒöö¦6ór¾ßž¾µð¿gV§&/Y¾BåóeºEÒºëÔ¸âãÕËÜ£yòåƒ]\jjk‘Eé¦å‘iÍÐ-Ъ^öö¢7ƒDá¿TTB®^«òº«ÔÃH8ô΋ý vHõ€I—¿Ï«ªºfÐÀôæêÔä%ËV\¿qC8räêÔd$—ºl9-™šrƒ—è¥RòOŸbnzzxÊÞ×»v’«{MòLjfg¤©*`¯½äñx!!!¹¹¹zz|è%0êäR¡jªåS#¹ïˆU ó./_X__ß»wotCƒÔæ/»²ŠZ•uRrøI¢FîåÝEJŸ"o‹ºæBÌã育àhÐ` Œ>H pýK³0 0ØÂÂÂð<}õµñ_mNï¢ãK$SSS33=KÜ7¿Tæ<ÇíœfÅÕ”•wk*™¦01R’iÂ…²ŠÚ®ˆƒ Ëi$2ME²ÈÈ;š#r T…Bï0ì8 <èã„yÆ »Öš2_.B·Ö[géˆK5êà5Ô¨f“²{Š®T qZ[[%½ÅÅÅqqqB¡ðÖ­[›6mòõõ-**4h!äéÓ§¡¡¡Ç~ï½÷lllÊËË¿ûî;êà÷ïß3fLmmíìÙ³=<<Ο?¿yóæ“'OØÙý¯åWUUEDD̘1#&&&33såÊ•|>?>>žúôÞ½{ãÆkhhˆ2dˆX, âî‚ NNNÛ·oÿè£z\›ŸŸ?þ|…°ìÇ×HØQËAÝBªPfD|ö€¥Î¥ò•u´C‡mЈñTºÝ#ù]4{i¸­+B¡@”ÝŽÆŽ»~ýúÜÜ܃þío333ëׯß7XBammíç秬Âúõëy<Þ™3gè’ªª*++«˜˜º!$%%…¹W{{;õÇ'Ÿ|BùöÛoé¶lÙBY¶lÓWPP@m677ÛÛÛ …BºBbb"!$;;›.‰%„„„„P›ì.ȳhÑ"BÈåË—é’Yý!¤´´”iÇãk$ô¹(BBB˜W]u¨¡B/µ©y·_ã7GȿƯ ôz)Ovv6•°„¢ÿþ|>Ÿ–+<==…BaýŸñóósvv¦*…ÂÞ½{·¶¶*Ü}øðáNNN´xH¥Ò¶¶¶çŸ~ĈL_<<<˜{ùûû[[[Ó› _¿~Ì %%%LawA×—.BimëÛ¯¿»»»L„9_#`×KuÔteü’cW–jÓÁLtÃí0eÊ@päÈ–:6lH$>>> ˜6mÚÖ­[>|HZ^^~áÂ…>æçŸ¾sçU¡²²ÒÝÝÝÜÜ\áÁkjjFŒÁŠ311qss«®®fV“é1¶µµmiiadøðáÌ 2›ì.Èãæææéé¹k×®öövBÈéÓ§oÞ¸Ó±i$ì¨ë î`¢wßzr ýOgÇùtز“áYI e^xá…††– “'Oþí·ß²²²ÂÃÃ+**âââ^zé¥+W®PŸ¶··5ê„b±XƒF*|l”;ì.($&&æúõë'Ož$„lß¾ÝÄÔ4::ZƒÇïü¨_÷`€ã—îtŠøìõOÇ;cu¡?–Ž•.Œ£?ý±jõÇJ¥Ò!C†ôïߟ{(:ÄìÂuss{ñÅYŽïááÁÒéêêêììÜÉÞH•ý±ì.(äîÝ»æææÓ§OüøqÏž=Ǿê/aŽÇï|¬¬¬üýýeúxY..Ñ«áŒÉ%Çl’þ§½Àh‘À`Û¶m×®] cÙ«©©‰¹éççG¡»û¢££ëêêÒÓÓ•kúôé iii Ó£ððð[·níØ±ƒþ(##ãÎ;“'Oæî—H$ºqãÆ˜ý“Ü]PHŸ>}‚‚‚<¸k×®L ŸÒáu>Æ ;þ<}Àüüü .tÒAÁpž'Ñ‹¾Áî2½¦@ïØ¸qã¡C‡BCCøìÙ³~øaß¾}ƒNIIaÙ«ÿþAAA~~~}úôi1}ñAIDAThhÈÈÈàñxô`Þ‚ Äbq\\œX,?~¼¥¥eMMX,vww§æyÎ;÷èѣ˖-ËÏÏ ´¶¶®¬¬{ö¬L¡Pheeeaa!âãã™=Ÿ³gϦ¬êׯߜ9sêëëÙ{>eúc¥RiuuµH$²µµµ··Ÿ:uê­[·˜{©tA!‰ÄÑÑ‘êØ”oj¿“hkk[¶lÙóÏ?oeeõÊ+¯äççËD cêDC5$½ì:aÐM½äx(}K.–C/pü?¡ƒ¿¼uû¶Ð{4ýRRZ$ å7fJÔÛç »q$Oß;3)« {£˜c¿,,* ^•œD—dîØ9ã½ØIa¡»öìݽwÿhoïîÉÓì›u}¹Ôø;« ctm~YX\ìëãÃ,)¯¸ø¦¹¹yXHp9cXû‰ÌsœZÓäL´UÆÕrö#Í/‹ŠKê~ý5eõšÁƒ­LN:dpcS“ !¤—ƒCƒÖ¤—?zSoÇ,sn iZ,ÖF²^æå|OýQU]¸työî]:{cÕ£1Gï O]Ð7 0X½¤ìâRS[Ká;:>hnîig×ÜÜÌwtÔA™Aî¥ãž2:ø$'@Ktíøe(ü—Š BÈÕkUBwBˆÛ×£Çĉ$7/o¸`XW'"º)–KÉágr)Àý vI¢F¬¿0½\š¼dÙŠQ~c>M[GÍ’:eʶŒL¿×^ß¾3kzô;¸º Á L½FþALeðx¼ÐÐPe›êî®û¼ƒq¤óΪ{„®íõôð8”½Yâ;Úçø‘ÃZ½Á$[‘iÍI¢FBìX$Ó8çÅhÁk¦$ë{xi_Л­²²²*++“““ }ÇÌPÃtJã̰5{Åj¤žæ²Ê|ÑëïHKK‹©©i×Õ×”^9rz ½T²ŠZ…å—Êk”}ÄewåðË*jSrøI¢Æ²ŠF‹<_]w(GØã$"‘iD'ýÕF‹¢Ý×ÈÁé€ÿq®Æ®8‹fã’ÃWÞ6øÒvØí4?la±YÝi~ØÒÃØýÕøét-nº…­+¿©Î®žª®aT}¬ ÉÞ$´³Ò¯N5ª,)¬/Ë ×ÖÖ†‡‡÷èÑÃÁÁaÚ´i2ë’Ë/n~T|*,,ÌÖÖ¶W¯^ï¼óÎ;wØëS›?þø£¯¯¯µµµ³³sbb¢D"aÚÐÒÒ’’’2lØ0 GGLjˆˆÊÊJúÓÛ·oÏŸ?ßÓÓ³Gæææ/¾øâìÙ³ïÞ½Ë2"ÛÙ¡=¢š»m"‘ÈÚÚúþýûÌÝ !))),Fr´¡  `ܸqÖÖÖNNNË—/g¾2SeÐ8^uƒ£2¼*1ØþXù®'}é+Sh3ú–µÜ+Ë~Ýìí7°FrïÞ½qãÆ544ÄÇÇ2D,±Ôohhˆ}wêãÇ>úè£ÁƒŸ8q"88XåY®]»6yò丸¸>ø //ï³Ï>«««Û½{7õikkk@@@qqq\\œP(¼uëÖ¦M›|}}‹ŠŠ D)//ÏÉÉ ›5k–©©é¹sçÒÓÓOž}ú´©©©¾¾þ·ß~#„ÄÆÆª«—*ýåb S/UÚ–””D¹xñ"µ™™™)£(òp´ÁÃù—¿¿¿µµµüÑX‚¦òÒÈ\M•†qiNèÕûžd>|ØIU#ÛBBBúöíûõ×_gffŽ3F °©® 6Lå¥Q×0u›òK€\Sʨ iÇ%øõ.ÅLHHÈÊÊŠ‰‰)**2dÈñãÇ+++Ùëgfnûí·ããã©çI¨úìéÝK/½4sæLêÇŽËÎÎŽŒŒ;v,õé‚ Äbq\\œX,?~¼¥¥eMMX,vwwß²e !$222###88X$µµµ¿¨Ù³w…/Ìc*NMý|—i—.]"„,\¸åΣÖíÒ ¿7oÞ4559s&n)*Áø%0ÞîYæp¦ÎŽ\²¹þñÊš® K%wÑÁ% s“ñš8q"Z; ß|óM[[ÛÌ™3Šn¿,)-]½ö³šÚº_x!uÅò‘n#nݾ6‰®p¡ð®èvÉÔÙÉ¥Ýò‚6ÍžQ᡺ȩ¹s>éæêååõìٳÇçååM˜0! M]!{öìùõ×_ÓÒÒÞ|óÍQ£F! Ý<~6éÔéÓ­­­û {+B*•:œ»4)ý±èÕ©Phaý¼N–eÀµ‹š„FÞUÀqÍzMÝŽæ-Hpuuµ¶¶677dÌý±„333ÿëׯã~¢Cã—Ož<ñ3N*•.KN9|ä(ôzix¡Ð¸d*[CX;zÙy§¸¯ÁÛEã—øj½¿<_z!`âBHQqɾ¼ÇŒ‹z7æêµ*ä÷pìÆìê‘EŽÃ™Ôc¬ô?\)€ñKMò ¹yÏþìUÉ+!y9ßS…UÕÕ‰K—gïÞ…kŒm4T oë:É”9©2—±ò€^ªÍÝúú/7nJ\´ GÌòÁ..5µµ¸ÀÀ$“]*hua—eŸvג쯕WMˆ%€^ªÍÙüüo¶nûûú´^TI(üó´µ®ÁÕkUBw\`¨‰&{Ö᩹ššÓÛE?Ô2 ÖèåÿX‘²²¾¡Áâ›Ôæ…Âs«S“—,[qýÆ áÈ‘«S“q€K&»¼)KFUJH· dj$½z©”ç‘)ñôð8”½qÆ ™ÜÅOÝžL]¤ØÆœ" €Î‚õ}èfñàøî@÷ÂÓæ/»²ŠZDe¤äð5»¸\z›` ñê¥R#xªÍ(«¨ÕµØu ˆBa`qÐàx'šâÐ¥ ?€^ÐKz @/@‡—_z @/è%½#ÂzB† Ë¿ô )&nå]$–ÌÀ*Kå|ÓË’ÒÒ¥+’ïÖ×|ñ…„… F{{ã€vÄ’EetT§äSè=úBá9™M¡÷hfªÂžýÙ™;v646¾â;:uÅr{{{=ÖËÌ;g¼;),tמ½»÷î‡^bjM,Ùã¯L>uó¢PɔҜÜ#¿ÿþŸ¾|þ¹çþùÍ–•Ÿ®]¿öS=ÖËòŠ+Ÿ®L577 Þ½/Ž@2»_,Ùå“}6V'¯—¯øî}û?^¼hÐÀ„gÏ:t8W³!Õ¶^665ÙØØBz9844â½w€nbèÃušýÙÁ~¨Ÿ‹¾šº"ÕÕÕ#GŒ þ¶¶²ŠŠŒÐo½€îJ1™÷ež2š’ÃצG¸d2I_ŽáñxŠËMLÚÛÛ»ÎSmë%ßÑñAssO;»ææf¾£#îíH¦Ì1•õ7ê©v2]H5b§ýKÆ%z,ÕXbkk{ÿþ}jòNcS“â³øúø”W\ñºS›—Ê.t¡Çzé6Âõè1ñdQXn^ÞpÁ0ÜÚ‘–[¹F´“Þ‘Ë^jUV)2Ç)«è†¡.ö‘£¿ÌÔŸYÓÇË뻜ÃÑQÓ$É7éÛ|}|î>wÎì•kÖ®NMîÍçgìØùûï÷õ[/§N™²"ueÚç_ôéÝ{uj2¾Æî)fdFݱ1…Úɲ»|–3*«¬M¡ÕÚ…ëð/yé]öqâÊO?ݼe«‰‰‰¯÷òO–(Üq°‹KÄ[“ß}ïý‡MxýõäåKYÎÂãñ¤R©ZÞ©½CWÀÅZ7Á@ÜG„ÂHâÀ~ÛU¨I2¡Ðà¼î6(;;cØŸ€äîN·7 ½˜QE‚rAè%nŽâ »’©VnWVQ›’ÃïXNÓíìêt°Ã à«¡–^Ò¨”¡? •²IG ËD|ö€ú#;±'¢:‹jêM~Ù¾fCýM„8 ˆB8h?¿Ô¿÷y•”–‰ÂGù™õö¹ÂBBHþ¹‚IS=}_™õvQI {eùýån}ýøÀ ¦³S¢Þöô}eòÔ¨Ke—'ò¡H$Ÿ¬H=öÕ Q¸ñ4 ùÀâša7 µ¼3ì&¡Ð‘Ïœ‘Y|Õî, %…U».fÐu>Z°pÿƒ­­­ßnß¿p±T*õŸøfåÕkR©ôJeåÁ̽ä+Ë—èt~Î?öV„»—ýQ`ؤS§O·¶¶î?p0ì­ÃŽ{(¾Úüõ†¯þùäÉ““§~ ËHš„|`qͰ›„ZÞp“PèHkkë[Ó¢˜ßnÔÙ]ôÎî‰Á¡=’J¥ !aR©4$ü­kUUR©ôZUus¤›‚|eù=eÖ‡s+¯^“oôR©ôÉ“'>cÆI†"üRÙåöööÒ‹_:”½²|‰Áp6??aÉÒÅ æ;;9© šÇ2ÆÏïè11!¤ôâEúý> ùÀâša7 µ¼3àPÈ;r¡ðõ0zbó.Ñôn¾ÏÏùç&‡¾<Ú/ $¬°¸˜šæ5=öåÑ~QÓc©‰?ô¶|eù½†9ÉåÀ`w/úŸQÅA&÷<˜?Ï땱‘ïDW×ÔI(䀼kFÒ$¸xg ¡`qD~¾1Ü%:‰Þ¬W ?€^ÐKz è%½ —ô€^zÖTó:=7þ+ºIEND®B`‚PKÖ5.IƶÿR2R25Pictures/100000000000034E000000B780F6EBF3088A9367.png‰PNG  IHDRN·ª·™š2IDATxœíÝ \LëÃði…ŠT•-B—þ¸¶,Q¡E‰ìK²wmWYCÉU¶®PÒF¢Ñ-ûš‹ì•’ˆ²µH½OûÎ;Õ4Õ¬g~ß{>ó1ÏœóœçÎyšç73gÎ#[^^Ά 6» ÊÕÕUØM‘v@¢M˜»RØM,Md¥Ãönv+@põh Q€¶õh Q€¶õh Q€¶õh Q€¶õh Q€¶õh Q€¶õh Q€¶õh Q€¶õh Q€¶õ@ìm\6ïæÅ„^ýlÙPÓ:c ;³•ÈÈȨk¶k«Ý~ÌDÛ~ƒ†Õº>!++ÛZSKS§½™õÔÞFkÚ×óGÎ>ñüÑýïó¾~.PTRn¡¢Ú¹[ã'êõì]u/±É©õ®€3D=oŸòßß¹’$Û¨ÑýÛ×ss^«µÑärß?¾ÉÊ$˭ˉCG›­ÜâUë&¥¥¥Ù/_…$Ëf–Kݶ³­P^^î³yݹÓÇY I\#Kú³ÇgO…M°6gÅ:»hx ¬õ@¼%Äž&¡ÍÖq^ˆßÞ„˜S¶³8¬ÌúùÙ’’¼w9—ÏÇ…ÚŸt6º÷ÿ~%éÃúDIqQnΛKñ±'Žø^ˆŽèahĶIxÀŸ$¥5m®hi?Óh°qKU5òïo_>¿yõò⹘˜ãÇ"C´:tmiSS ^+D=àéÓ§3fܸqM›6ä~ÏG…·PQµ™µ0îdÈùè“äRRRÜlØHNN£¶õŒùJÊ-|¶üNê©õØÈ5nÒV§Ã”9‹”Zªìsw%É’m“IÈíZ=}û3 •Z´$‹^ÏÞÚ:ïÙú{ÒÙA­á5°BÔÞ8}út@@€¼¼¼©©éäÉ““ùž<øûUFúxÙF†˜Œ‹ =úðî­†Fuª¤ÿ°Q$êe¥³Ÿ0ÇÁ@cõ2SŸ²•¿LNnµ;êV»Õh «þÃF*·TáPsÃk`…¨¼TXXx²’`2ßùÈprk<ÖœÜ7³$Q/>2¼®Q¯¬ì'¹%a‘ûM~––’[)ii¶rµ6mIV;w*Ìz悪[‘õkMi ¯€¢ð…2_qQá¥øX­:wëAîvꪯөËÕ„s V¹É+ÔaG7’È-Ù–ûMÏDU»Éx[ŸÍëŽîÛ•öäÑ(óÉýúËÉ5æ¾ZžÔÀ Qø‹™ïÊ…3…ß¿ kÁ,nfqh×6’ÿLÌ­jݼ´´ôý»œk þÓ‡Q‘±¦ÕºÉ’’œì¬Ä¸Èˆc‡È]s;G¶F[XÊÏ9ès-1ž,²²²»êwëeØó—ÿõ"¡­q“ZwÑðX!ꀀ°e>‡Vx>ꤔ´ô0Ó Ì’acÆû{{òš¢^µWË#̧LïûëPî×'ìç-®z5>ÂfÖã±ÎF„ݸx!ëEÚ³‡÷ÉrêØá&òò#'L¶ŸëÜLQ‰óÿWÃk`BÔ $c ½ £Gž8qâ°aÃþþûïzד“õðîmƒ~ýUÔÔ™…-TTûôtûJÒë—šÚí9× --Óºm;íÇYÛ÷ê7€û]“@9ÖʞåŒÕÚh:,\F–ÏŸžÜK~|?™4éezjtèÑÛ—=„‘vrÞEÃk  êH’óÊËËùT¹²²rAAAMR úö¶yóæ ßÝù¨“äÿåÞÍkÕ~ðF¾hEÕòªóRpƺ>Ùݪ9v$_6–WàrÊ E%e£!ÃÉâèìòüѵËÞ¼z°gç×m\6 á5€„CÔ>ây£”—•%ÄDpX!!ö”ÃÂ¥ÒÒ2¼Ú#!%%å¼n‹“ÙÙˆÐÆ£úôT§Íuõ{.qÛæ2ÓöÞ­ëõk@Ãk „¨¼Ç§„Çt÷Æ•÷ïÞö8ÔÍû`ÕG©)q“¯]®öô»†ÐÔno;Ç)`ÏÎÝ›Öì ‹mÚ\‘õÑÛW’ž<øÛÌÚ¾¦oWÛjw ·E…ßkª¿á5°AÔžáwÂcН¼œÞ°±ª}ÔØÔœD½ Ñ'yõˆ‰³/ÅÇf<êë¹yÙ†¬Å…ߺœ˜û&{ÙÆÕ~ H]¢¥³^÷š*ox lõ€7Ž92bľ&<Ê—Ï7/%È+4í?tDµ+ 6nÚ\ñÆÅ„ÏŸ•”y»w™%ëÝ—:LJˆ95ÐØÄhÈpæCVŽóî^¿LÒXNvÖ˜‰¶Ý ú(µTiܸIÁ§Y/R/ÇÇÅGž’–ž0ezM•7¼6ˆzÀµ¯Ä ‰q‘?JJ†Ž6«é"sää4=zñL”™MC/éRU'½îævŽ~Þ[ÖíïeÈL“z}ÖïòÝêâô4åYªnØD^~ÖÒ5¿ RSÍ ¯€ ¢ˆ™óQ•ßÞšVÿí-eø8sõâ£Âùõˆ©ó_OŒÏÉÎÚçîºjÛnf¹á€ÁGÏ\I<u=ñ|Þ»œïóÊËËZ©·QUoÓ½O_ÓÉvÍk»$^Ãk`…¨bÆ'8ªÖuº²]W¥!—Y©J®q¿È„jjÚ\qœ•=Yê½—:ÕÀ¢m!êТm!êТm!êТm!êТm!êТm!êТm!êТm!êТm!êТm!ê€0)7‘v$‹œŒ´°›…¨B#%%°{›°[@gˆz 4ëׯvhQ€¶õh Q€¶õh Q€¶õh Q€¶õh Q€¶õh Q€¶õh Q€¶õh Q€¶õh Q€¶õh Q€¶õh Q€¶õh Q€¶õh Q€¶õh Q„fÆ Ân‚„ruuäîp ÅŽ€{ð¢Ó„¹+…ÝÉÒDV:lïvÁïZŒDúz» ÀKˆz´…¨@[ˆz´…¨@[ˆz´…¨@[ˆz´…¨@[²¸ˆ¹°àZä8¸¢ —¡`õ©èçîí›…Ý ÚªøT10A^­W¤¨7mô§×Va·@´”“ÿ0`ñ•7ð.m!ꀈkØ™õn#9¹Öší4´t4µÚ›XLn«Ý¡Úõc“Së·£zl€nÐ@ˆz ~””¼ÊH' ùwdð +»9ÎÊ*­„Ý.^Š=zÀcÒèu…¨"9à•½}ýîMö¥øØÄ3Qqá!É×/ï •WP`[³Þ»ºÔ'„Ý…nPoˆz ä7ÑêЉ,}:iÚ÷ß½ÊH?¸s‹óï[„Ý4žI{òPØMuèu…¨âG»cg—-»–:Xž;}|˜éø†FŒεJˆ‰¸—öôQYi©^/Ãi —iwÔuók~«7‘¯ºá÷o_'îÝRU-ðìÕ{7¯…ÚûâùS™NzÝÿ7tÄØISXëÏÉÎ :°;ýÙãÜœ×Z:d1–6ºú=Ùüíë—ÓAGî\½øîMvIq‘ZM=CëóÈ?¨NøûúûxRÿ¦Úã²uדq\îåÛ—ÏVC IÚCrÏåóqE…ßO^yÀ“g[d‰W7¨µ08v®v!‘Ýj…¨b©C½ñ6Ó"Žºwë5ÆWuèí~Ì»7/&¤>zàYøí£òó¡j·¢Ê‹ ɨ¼qéÜŸ?Råw¯_&Kú“GÌÈPêåú¶©»/ž=!KR\ÔÒ ÛˬðsÁ§%öd€g–¼LO%KÒ™Hï HMíöœÿO¹ÙË?m.*:yô`tX ç éD\ºúC‚»p†¨âJÏ ãØ¡—iÕŸb•‘ú” ðRRR–Sg2Ÿ¤¢ªžöä‘ß.÷m«’ÈCÕn(+[ñÂX\\´o›Û ‘¦“ç¶i«•Ÿû.ñLTÈÁ=çN1Þ²›!¼÷º»þ()ž4}މ¹U+õÖóò’ÎEûzï\¿²§¡ó·>ždŒ×Õï9gÅ:N]*ÛöÄ×csÚ“‡¤=®üIJ&OŸK–ªŸHq¹ªÍE…ßcŽ›µtõ0Ó Ô'U’@,º7}€QC7ྦྷIr7õ@\étÒeT|:ò¼ÚGãƒÉíÈñg,v¡Jzöó<¶ÀÊ”ù ¥?~¡}å/ꮆ–ŽÝ\ç/Ÿ¢ÃÏ:NÆøˆ£~ä®õŒù —Që¨k¶%wËËÊ÷ï:s*ÌvÖBªüÍ«—ò M—oôh«óÏ•AÈæKÖ»;ÙšÕzV—{‘’–&·?˜YOµ°ŸQëÿˆE7@`Hv7õ@\µTU'·ÞçVûèó‡§(2·b-l$'7e®³çºåÜÔ_u°4kNÆøôgÉ¿©Û¡cƳ­3lÌx2ß¹z‘9»ûVóUšVÇΕÏãÜî÷B©º&í‰E7d¨vedˆz ®^ge0*?h©öÑù#hkͶlåºêsYÕ3¨Zk¶#·+Çfjïó'©~ïyÿI_?$Äž¾žŸ›ó¦àc~ii)7)Õu/ŒšŸ —n °>ÀÈn ꀸ¢®£«Õ¾Sµ~þô‘Ü6WjÁV®ÖFƒËú[©µf+QhÖœÜ~ýò™Ü~Ìãôa ë‡L?¸Ì´Í~ù‚Ëý²â~/”æŠJõØ‹X‹n È>ÀÈn ꀸºuù/r«Õ¡ú1¾i³æd|ýöå³R‹–¬åyïr¸¬ÿËç‚–­TYK¾~. ·ŠJÊäVEM=';ëxRrÓæŠœëñ÷ñ c¼ZÍiNË»ô!±£Q£F222ãúv©µ Üï…RÓ hL,º ûC"»p€¨béÞ­kÏÆÈ6j4pÄèjWhÙJŒñïsß²ñéOs¹‹œW/ÙÆx2âR53*O'w³_fténÀ¹žÇ÷î’Û5;|:wëÁ,äòî÷"™Ä¥ €‰hÔc›ßš"++ÛZSKS§½™õÔÞFß*É$jS€§$ß<¸së«Ìò Án »9 OüýdžÕä“§Í©:á=¥]ûŽ©OÿŠ9Õ±K7fá’’c¾»¹ÜKdˆ¿~ï_XKcO“Û.=z‘[ý^¿Ü»y-"ÐoõvÖuÎF„ž <4h¤©Ã‚¥TI~Þ[rË5‚xKII•——ûú¥iå‚LÅE…Ìkdp¿ $FÝ ®}€ÁÒ Ð©ÚøÁFtD.‰hÔ«Vii)yD–›F˜Y.uÛ.ìA-x>i7éÛV-þô!ŸQ9&¯ªq‘›óúezêÍK gO//+#£¸ÕÌù5­lbnu)>6æø±*ªCFk¦¨œöäá¡?¶µl¥ú&+³Ö}5’“{þ(e÷ÆÕö3Õ54ósßýw2¤¢f‹ŠŸsšÛ9F‡^¹pÖcí2 ûšÚí3Óž?¸}=øàžÒ?¾ûʬJS«}ÚÓGþ{<­g,h©ª–™ú4ìð~…¦ÍZk¶ËÉÎ:n:É–ºø-ÚÉ2ÚÒ¦¸ð»²J+î÷"9ıpßUºú4HG=¶ˆ@†öÜœ7äöÄß Ñ= HàVÛ€<Ÿ´;?÷-•ó¶ ÖíÎ>÷ÐRµo²¥¤¤ÆN¶stv‘“k\Ó†ýú 6¾yé¯#>d¡ •[x ;ѤÖý’ 1ßeý–• ã#ÃYË-ígRŸ‘qz‰ë6/W—¤³Ñda]GÏ ã¢Ì»æö3<×-¿x6†,T‰ªzÏ#Çý}<È0Ðk+Y¨—;]ý)É·üv¹“…QùÈý^èMÜ»÷}€Q]7@¶à!jßkÕHG=6äO[Sæ,Rj©²ÏÝ5!梞ˆãù¤Ý?JJ¨tïÓ—·5ƒXPTRÖîÔ¥}ç.¿Ž£ßëÎ+“ðûÎý¡‡÷ß¹zñeÚófÍ{übd?w±bå—h222œ7/--52|ëÀĸȔ»·¾|êÜ­ÇÀá&&,Wh#bßñ¸ƒ>éO¿ÊH—WPÐÐÒbbfbaÅZÿ°1ãË~þ<tøMÖKò¿ÐËh€Ý¼Å­Ô[O™ëL¶ÊL®ÖúŸ_ƒ:­Ùä½ymÚ“Gdsæµv¹Ü‹äÇnÀ}`T× Ð !Ä)ê1 46!Q/3õ)£b˜Bg» ¯_f,XåFÞÞ±®zÔ×c“¦v{ï È&ò˜†7¨)Àµ;v&¯;ä}g¨ßÞ´§¤¥¤Úêt´™µÀpÀ`j5~LÚ­ÝQ÷ÙÃû¬uRï´¸™Dœéþíë‘Áþ¤R¡¦VûÆ&–3Ù>àr{à·º¾“®º¾”´´í¬…l˜%=–ܪk´å°!ySÁù}…Šª˜kmÛðqda+Ôh§½;è4k ×wø…Ôo/âþÁCMhÓ ¸ìŒº—=®Ý@ÔˆWö˨÷³´”ñÿ3Àçqåæ+­ïÞNrueKâMV&‰²²².[¼D书*Þ»yÍÕyfiå± ßO^¿hæ–}äÝ*‡Íy>iw& Þ¿Í­¼¼œºKÂY®'÷8ÊL{\¶D_Ú“‡¯2Ò ú `ûùä™ðŠA”}!µ  ÝøA¼²‡XF½Ä3QŒŠyÿ¹Qçn=ìç/!O®—«Ëö?ƒH,/+Û嶪¸¨ÐÑÙ¥“^w¡6–nd*§Ó.üúÕ{ËZ k3ë©êšÙ™ޛצ>N!ÉŒŠzü˜´[^AQåÌ .'gT^×àOÏÍRRÒÓœ–iÚ¤‰üÝWŽØMÖ õÛGý„û‚è Øëu÷úe -YKViwÒ%#ýÛ×Ù±'‚Î>NkeWk @èÀ'b”=Ä)êý()ÉÉÎJŒ‹Œ8vˆQù»'æC“f'_»œ’|32$€”Ÿ >òø~²Aßþ§Î^{鉺2'‰D}/XåFvè¢7{ù—™¶ÔeëkÂI»¹ŸDü|dxé¤6’A©ã±æÍ•¶­ZüøÞº¶DßÜ•ëVÏJÞdo\6í!’ãûþ:TAC7þ—ì!ÒQÃåmìç-î7hó.IË7y8Ù˜‘7p­5ÛîÝÕ\I™ ÿTb~oëÀzW§£.£âÚQÕÏ8NáǤÝÜO"~÷Æ•Š}™N`-$½(âꃆ´DV[í>A‘±áÁ7.^xÿîmqQ‘Z -ñ6½úq:ÍèÝøG\²‡HG½j‘Aw¬•½^ÏÞlåªêm­Ýäþ›ó¦åXZ¹ÅKEM] ”lç¸P3ö”•qš½›O“vs9‰8U¿jkN_Ö£… Ê”UZÙÍu&K]7Ĺít‚nü#ÙC¤£ëŸYyyùª9vïÞn,¯P5çQú 6Vn©òéC>¹ýeà`A5SBQgÎÕ ?&íæ~qjnr…¦ÍxÛBd¢Ÿ=D:ê±’’’r^·ÅÉÆìlDè@ãQ}úªºÎѽ^ä¹n¦¨DnözÍ^¶Fðíø1i7÷“ˆ+µh™Ÿûîëçò×ÈÀ$ýì!6QÐÔno;Ç)`ÏÎÝ›Öì ‹eŒßO>ìßRUÍóPØ2ÇÉ‘!ŒGÕzuM$~LÚÍý$â­ÔZ“¨—ù‚CÔôâÀ=±Èâõˆ‰³/ÅÇf<êë¹yÙ†Ìòâ¢Â]n«ÊËÊœVo$£õ¼•¿o[µø·U{B£™³†ƒ°ðuÒnî'7èÛÿÙÃûç£ÂY/…z#éÂöÕK:tÑÛé‚O-Z—ì!fQOFFfÉz÷¥“bN 4612œ*?âãù&+sð¨±T ’ÿŠ=}ër")'O½P›,Ñ0i7÷“ˆ³²?yôà…èˆ*ª£&LRhÖ<%ùæ¡]ÛJJŠõ{ÿþ0­8€àq¸ØSÃ!!j“™’ןƒ;·¾Ê|!¯ |ᦰ›õ!.ÙCÌ¢ÑI¯;#ý¼·¬ÛßËPQI9%ùVLX ¢r‹y.뙫-X½ü!‘r’{öbƒ%™&íæ~q5u§µ›÷nýý„¿/Y˜5´ïÜÕnî"êߘZªŠ=zÀccbiié¶U‹?}È'ÿfÎÍâEŒ²‡øE=bêüÅ×ãÉ@¾ÏÝ• Ì»6üV^^>gÅ:ÖoñÈx?máròÇIÝ':ó“Ô[~~¾ŠJ'™‰&LÚ]§IÄGM˜¤©¥s&"4õQJ~Þ[v:ÿ:bÒ´ÙÔÇ~1šV\è]¢°°üé)Ôý·Ø ÖÞ¿ߪ/§a‹P¢öñ‘úäo+ÌÏ}Kå¼íƒu»Óm~í‚‚‚¦M›R“ÑUQa¡e=œÿÈÉÀì™À¼{8*±ÚÕÌlÈÂã– ±±1S'Ož aaañíÛ·É•:uê$ìæÛÔ; ÷£¤„úë©Ã´ëììLú é!däëÌWÓHD2œe1>’†¼{¸QiÅŠFFF‚Ï| j~þüùW%''§!C†%ó‘!ÿx%ò&^D2ß‹gO"CüŸ¦ÜËÏ}'--­ÚZ£ÿ°‘ãm•[°®–þìq¸ÿŸ/ÓSß½yEÖÑêÐi”éU7WÓ'L¬åß¾|¶jHjØspç–Ëç㊠¿Ÿ¼òÏ,,÷o_ ööð>)ÔÔj?ÀØÄÒa¦œ\cÖÚr²³‚ì&MÊÍy­¡¥ÓI¯ûK]}Ñý°çïJkÖ¬éÝ»·À2_Qa¡³Ý„×/3¬r;ù?s×F…õõؤ©ÝÞ;(’ûÏQ¾û:ypoíŽ÷KI¾ê·7íé#i)©¶:mf-0Pq´þ¾þ>žÔúÔAwÙºkˆÉ8ª¤ÖWmßÐî¨KúkÌöíë—ÓAGî\½øîMvIq‘ZM=CëóÈ?Ø/âý*??߯’ŠŠ =2ŸXÃó.~ù€ 2Ó½›×\g–––þÛ°´g™iÏ.ž‹ñ<Æüž%.<Ä×sSéÔÝWéd¹žxaú¢fÕu§Ô ÅEE'ŒûÏL}±áÁû·¹‘¿Yê.tÉr=é¼ÇáPæ¨L†/×ߘ'l‘¨J–¤¸¨¥¶5¶®0Af>’áVnÞ¹ÂÑêðîí$‡µÖlG•¿ÉÊ$iŒÄ—-^uú¾Œ:EE…lÝæñýäõ‹fnÙÐˈÓÌiÜ8}£ªÏŸ–Ø[Ç,!oEÈ’t&’DXd™åbÔ¯ùDžn1†Ìlùöî$ö¤ésL'Úª¨ª=¼{ûÀŽ$ ùz/X寍œ©ùàÎ-$ç¶´±°sTk£ñá}Þ™“!'ìñüuÄhu¶uÚ)5n~9~lÖÒÕÃL'P×YÈ~ùâOÏÍRRÒÓœ–iÚ¤‰üÝWŽØöäa¨ß>êÂ=dtßëîú£¤˜´ÙÄܪ•zëyyI碃}½w®_ÙÓÐHY…—gÅñ`2_çn=ìç/!ÁÎËÕeûŸARÒÒåee»ÜV::»tÒë^§Úd*\áׯÞ[ÖšXX›YOU×ÐÌÎÌðÞ¼6õq g$êMž>—,U?ÜåòÀUÛ7¨©†ªÖàãIrž®~Ï9+Öétª¸|Fê_Í¤ÃøírwýãOj51íWÈ|B„g™ù€Äf¾ìÌŠ«g[ÚϤ>À“mÔȨr΢õ‹fæ½}C­èWRRL"Ý¢µÿœ‘ÙZ³ $&ÆEž :R׫$PS›|ü@²‚…ý fùùÈp(I É T‰ñXófŠJÛV-~|ïÎ?9ê÷¥à“õŒù —Q%êšmÉÝò²òÀý»Îœ ³µ°ÞφPð;óMr˜|írJòÍÈs;ÇSÁGßO6èÛâÔ™u­ŠšŒ‡¤¢¾ƒŒ©·D‡.z³—¯q™iû*#ö\¸šúFµÞ¼z)¯ÐtùFêGlD7Ã%ëÝlÍXO÷~UmæVc$¢žpüñÇnnn<¯–™ùHå›6mb~¼¢Ã­’ÀvÇÌ|óçϧJjkŽç˜™O__ÿСCäÝÿöÕ±k·”ä[vlœµlŠê?ѶKwƒ°Ä;ÌuR§Ûñ6ÓØ¶3цD½ôüÖrè˜ñ¬wïÞ¸Bn‡™N`-ì7hXÄÕÌ»éÏWÝQùÓr2$ß¹z‘C2Ÿ^ØP™¼­^½šôC^UKÂÓòMN6f{½HFÜ»«¹’2‰GT¨ªŸñ¶ÿ9‰^§£.£òÓ_›ÔõÀU]³*wßj¾áÕêXñá߇÷ÿNÏ-€~uûöm¼P03‰z>ûù½;I†¨'K–,quu­Ó&={öLIIá¼N³fÍÆGÞ$3F^^~Æ h#ðbëzèk¢¬¬\PPÀy–-[š››“.1|øðFñd¿L¤C’nYëj:::Ô§;}ûòýdž$á­?íR|ìå gºè÷4èÛß _ÿî}ú±^('7§âã=æ™^Lêm*¾·e~øWZ:¬w?TfU–ËýTõ:+ƒÜΟ<¦ÚG?pLõV×Vƒ ºrå çuÈëÏèÑ£ÉA'¯HÍ›7çík‘ªz›Ek7¹ÿæ¼iyŘ•[¼TÔÔR¡¦V{Ö»Ô¬›eeœâi][ߨÉ×Ï ±§¯'Æ“^Zð1¿´´´jJ@¿"ª111Ü4¸ZÁÁÁvvvµ®f``@½2èêê~,*­u}¨7D=:`KxÂn_—™ð˜:uÕ?~ætÐõž¦Ü#KØáý-TT§.XbbnE­óéÃ{F•Éô˜%?Ô{ïÍ•Xï~ýò™Qy]n›|ÌËãðè‡÷|‰züÃ–ðø·£~•ßËúOn8¸µÉ×ý¼‚º8¶¾Q-Ò÷\fÚV;…7+qïW¬ OˆÍ(ˆzb ØHlÂcE‚£³ YÞde&_¿|噇wo{oZû£¤dœ•=µBnÎëÞ«ª·aÝŠ€-Z©Öº‹Âïߪ-gû΋dÇüÜw_?8RSU*jê9ÙYÇ“’©O’Ä”ÀÓѽ^$ç5ST"·{½f/[#€²ªëãæûP’óÔÚhNsZÞÍ Os¥ä¯XFFf\ß.¬«‰i¿BÂ"D=ñƒ„l𪥡¥C3ë©Ñavl<t„Šzêš$ê½Í~ÅõÞ¾~EnÕÚüç{1ii™²²Ÿß¾~iÚìßÃù„}¦Vj­Éœù‚ì®Ù– ÉÙ/3ºt7¨Óÿ(|£<¾Ÿ|:Ø¿¥ªšç¡°eŽ“#CªzMD¾âÇ{|ï.¹]³Ã§s·̪ò‰W¿BÂõŒz¢6q$ÌMžà^µ3‘ËÊʶÖÔÒÔiOÆÑÞFyµ/¶ãXm7µ¾'D$áMœ8 •—«Ëß7®Ì]ùû¯#þ=KiÈh3õ>úHÝí¬W15stØQ¶*©ËžuîöŸ³•UT>äåf¥§êôaF…pÓƒ¾ýŸ=¼>*œuF„I¶¯^Ò¡‹ÞNÿä. (÷n^‹ô[½Ý‡uÛ³¡' iJ];C¤×ꇓNx”â¢Â]n«ÊËÊœVo$fÞÊß·­Zü‡Ûª=¡ÑÔ5nøºkæ.øqàòóÞ2ªœZtÀ[JJª¼¼œù~C,úŸž¨½þ‹Kö§z˜7º~._¾,:s°’眼×$ËÍ‹ #Ì,—ºmçIõ8Ž<ïNb$55U¸]¢[·nBl@UrxŸ·o›•»öè­®Ù.?÷mx@ÅÉ:vÕ§Ö™è0+îdðÕ„sû·o0·sTQUË{›zôÚ_ñMäåÙ.¡ÜV»‰z~»ÜÖnÒÔÒÉ}û&*äè“7STúú¹–ßÄŒ³²?yôà…èˆ*ª£&LRhÖœ ‡vm+))ÖïýÏ M@"æ• g=Ö.³°Ÿ¡©Ý>3íùƒÛ׃î)ýñãû·¯|x’*..Nˆ—C;âãù&+sð¨±FC†“»$µü{úÖåDR^׫äp$<Ò£âÂCF[Ú~WViŧ©Õ>íé#ÿ=žÖ3´TUËL}vx¿BÓf­5Ûådg 7d+׸‰è÷+kkë)S¦ðuõ ÉÙ£ž® y²0otýwPg;â¤[çæ¼¹{âˆ/yÅéahD_wQõ8rÓÍxÞĈУ¿ÐP•í,§»7®¼{íåúk9ÉpÌÓ¹È8=wåú½îëcŽ# s9¹Æó\\Ù¾#ÉïÁOSî9Ù˜Q%²mØí·kÃo$ê•——s8KEMÝiíæ½[?áïKfyûÎ]íæ.¢þMò%®Û¼\]’ÎF“…us=ƒ>Ž‹VÔçYà3!æ¼”ä[1aŠÊ-湬g.X½dR>ÐØ„í“Z^ÑÕ¯ø$˜$~²0*_šøqàÌígx®[~ñl Y¨Uõ6žGŽûûx¨wÐk+YÈ®E¿_ñï•Ù£~„ð‹y£i€¼³l«ÓaÊœEJ-Uö¹»&ÄœjxÔ«ßqäyw±FFAÏÃÇ#Cüo^Lxÿî-ƒQ®ÚZƒô(Ë©³Ú´ý÷¢â£&Lê¬×=ôо̴gyosZk¶Óé¬k=cvGöÓ~8dý.ß°Cû^ge’`×±K7»¹Î¤Â&M*~³IÞópþÒìHSKçLDh꣔ü¼·ítþ7tĤi³©ù²(Fƒ÷ 9è“þôñ«Œty -!&f&V"¦…¨¨°$lræ¬XÇú-'ÉCÓ.?౉<º/,®Ns£qÉiÍ&ïÍkÓž<"G„y}cž¸acÆ—ýüy*è𛬗ŠJʽŒØÍ[ÜJ½õ”¹Î¤þÌôçjÿô«zäìÁ³sõ0o´d"o£IÔËL}ÊhØdä˦Mªz9Ÿ–ÁîDMQÿâÙ’ž¦ÜËÏ}'--M²Bÿa#ÇÛ8(*·hГѲ•ªã¢•dá¼Z{Ý®«·{sS!2ÉÂVèqŽõ.‡ô{ÿBλPQU#a‚›ÆH‚šžLòÒq8*±Ú‡ÌlÈRjkÚ[9‰w;üBª®ÆÍãr”áã,ÈÂV¨ÑN{wÐi¶BÉìWÈõË<ûTóFK¦Ÿ•šºN=Ï'#¯·†t'¶L|K{–™öìâ¹ÏÃaU/Æ‚ìÁ žE=Ì-™ÏD‘[êf4`2r¯€pF]ÅîDJöî$/d[Ó‰¶*ªêÅÅEïÞ>°c# ¬A¾Þ̉2@è=¸Á³¨‡y£%Ê’’œì¬Ä¸Èˆc‡•¿öb>ÄÃÉÈë§Ý);³â*V–ö3©ðd52ª¼.?yƒØ)³€ç=¸ÁûŸe`ÞhZªöêzûy‹É3ƼËÉÈë¤Ý©c×n)É·ìØ8kÙU5ª°Kwƒ°Ä;ül5Ô²¼z˜7Zr7ÖÊ^¯go¶ržOF^' ìN$á­?íR|ìå gºè÷4èÛß _ÿî}úIæoÖIJ¼z˜7š–XÏE(//_5ÇîáÝÛåªæ< o'#¯“v§N]õ„Ÿ9t„D½§)÷Èvx Õ© –˜˜[ñ¾¹Ð`Ȉĸ˜7Z¼çßyÝ'³³¡Gõé?¨ê:BœŒ¼á݉;Gg²¼ÉÊL¾~ùÊ…3$×zoZû£¤„šDÄäd‘ˆz˜7Zìhj··ã°gçîMkö…ŲuDáNFÎÃ㥡¥C3ë©Ñavl<tQ€$'{-êaÞhq7Ñaö¥øØŒçO}=7/Û°ƒY.”ÉÈyؼ\]þ¾qeîÊßñïCF›‘¨÷ùÓG~4C2³‡¢æ¦™%ëÝ—:LJˆ95ÐØ„šzœ!ðÉÈyÞä7þð>oß67Rm×½Õ5Ûåç¾ ¨¸RÇ®ú}-§ÎjÓV‹‡-áÊÏ}KîÛëv¯˜P’›a;õÉ#¾·  =ABHrö¨gÔüђƒó«é”~‘ Ì» ™Œ¼ê¾¸éfüèN-[©:.ZI–Zš b¥¬ì絿âO;L󣤄*g=W¦V¬×»ç‰åÓ'[ØÏ`˜›óšº\²i“ž=¼O=Ê<‹óÉX'ü}ý}[ 5ÔêÐiOhÌÁ[.Ÿ+*ü~òÊÒ ÷ßœÕÚhŽ·q ïÔ9_g ¢j7` '€d@ÔÚzûúUTH@|dxá÷oääLÌ­,ù03­½\cžæõâÙ²$ÅE-ݰ}ð¨±T!õ¥LqQÑÉ££Ãþ:é@øÙ“~‰q‘~»Üƒ|½GM˜4Ávººf[ž7R’ ¦0Ð@T!ê =ºwçtБëIÊËÊš+)[Ï\0Þzª²J+êQ¯€pFS9yú\²TÝäsÁ§½î®?JŠ'MŸC2D+õÖóò’ÎEûzï\¿²§¡µSYÙŠÛ¢Âï1ÇÍZºz˜éêŠmu:,þ}ë´Ë¢BÆ ‰ ˆ ì?t„¹£À.EIcœ»=$¢ÐÇÏŸ?/Ÿ#£{êãFå5Hͧ8Žš0™·?bqÔïKÁ'ëó.£JÈNÉÝò²òÀý»Îœ £¦$—’–fTNšdf=ÕÂ~[%$Í­f̨~ÊœEvs³Ç×Yävþä1Õ>ú!}Jr -Î’P2xÔX²ùzÿéCýA¾0Ð@„!ê}(·Tùô!ŸŒ‹w®^œè0k ± õ}ÿ|ÌËãðè‡÷ì|sE%ÎRW9yÔïù£ŒÊoôØB $ønÀ@O†¨ôá{)éltd°?ÝsnÓVËÂ~Æ3KþÍ¿¬¢¦ž“u<)¹isEnÖg^棪â¢ÂóQ'O;üöõ+Fåuó'L™>t´ÏÚ*1ß è Âõ€>ÉÉ?‘,÷n]##ýí+Iû¶¹;°{œ•=YØæ ç uͶd€Ï~™Ñ¥»A½+)øø!:,0öø±ÏŸHè7h˜¹£Aßþ¡d•þÌ¿)+MüÛ᪪k—ݼ™WØnà °n$´D¸AÕ… w¦1–tåbfZ³wä|L}îVDDDåºyºË¤eäÒ’ÝìŽíÞV]U à#†;vîÜ8RUWW=v`êÜ…Ë×X(()|¾æçvúfHàýášàJÏØÙþ¨©^¶z½–®A_9ù’˜›á¾®Î'÷ï¥9‘¸ÑÛËÅÜíõQëß§:H­©cÉ®ö‡Ó’ßBglÿ¾9ËW[@¢?OÃbD‡«*¿G^Y·}ÏÌ…KºvçÞ/-¼ðÈX4Ëm¨ºáªƒ†Ï¼o®@d/lçê,5ßfMäŒÔœàà°É`!åìjü_»ëˆ#ñVQYÕÄbëײÒðï›×Áé_v‡·†æÍ6ï ÊÈ‘•àmC}ƒ÷9§¨ëÆë6Cfî§Lq‰î;Ú+©þ»ÒìkµßÎÒX»Å›xXlBD´1îSYI±¶áJ=Só¿Z»§6ТX>@hˆ @Õ… wè##Ûâ/Íxÿ¶ñ¦–yºÔ™b]º¬°Øê°o'+MÐ{¯Y‹tÁ馧$Ákb;cM™™ tÀ¾xtŸp‡v® .÷(ÜÔùBæ`± ô%Û7¼¶æ@B@„T]‚p‡œ¬¤¦3Í(.jôgòd%šüACÕYl‚þ†yr?Ø–4yJ¢—/`ÜzáO)PQ^v÷FÈ“{· òrËJŠjkkY9ÙÖª&˜üí^Ûs ¡ Bª.A¸±Z¦rÿAÍ(/-mOÉÞ4ù² Š,6ÑWVž&G¢GOØV|-‡mI!³³”0e%ÅÖk³3?°Ø(5,6A¡g/I6Zi»ðÚ˜ mzPu!ž=ü¶Êšõ¸Ý{ôo÷ík¹dï>Ôù…ŸóXlâkyYŸ¾2Ô9åe°í%)[iY¹¼ì¬À˜øî={1©ÄÓÅÜ­¬y•åÎácAˆ‰‰uêÔiñxµ;Àbš{> ½Âk`n$´DèAÕ… xõìñýèˆÎbbSæÌo®LŸ¾²àq¿äÓxÜôä$[Éû”IãtÁÿ5“šnj†·Ù™ÕFh0©$éÕKØî=á2xøHJ&‹§=Xl¢cÂ`n$´DèAÕ…´šƒ;6ÄÝ¿;zÂä#缚+C%€y¤¹Ÿ’JÿK'LÙbyRÓ£×òde²jmÕc&Ni®­÷‰on†\}ŸøºøK!L|aÖÛ[ZÓ9:K‡Cß }°Ök@’üæÿµ^,_µžad‚~ý~L}÷OÄõjÃ)™?jj®¸žb±¡P?Oõ1ã¨sîÝ­ÚÈѰU=îUÜã`o÷=Ç]¨ËDû_ó¾8uîB³MÛámQa>li¼¾Ïyg‘†††o_»7]´¢P]UIyæŸÅ&: ü±æ@Bh_0ô 4Oð(AÕ…´ŽÒ¢//bc`:ûúù“‚¼Ê:Î-RWW—›•éÙÃ{3ækSÿfBmm-Ì>!È›£­¿ýÀqš0>ºÞw3$:”¤ô”¤èëKŒW­ÿ}“&8¯¡#™ž÷ànôõÀ†úzp¨k72)¯¥kðàÖˆÀ+ j§Ï_Ü£—TZòÛ‹ëÓW £ÅæÄºtyŸ˜pêà=ÓµrŠä¢‚ÏÿD†F^ók¬Y¯ñ™8]“5áÞ±w¢ímv虚“Uúg¤½óü‰¯ÛéÚ?¾« ê!+÷O{—èyÚÁÐ|SÙŒÔwç$º÷'÷ËËκ´p™1±Ä%8Zp·‘A~óõª+¿KI÷e±‰Ž?m E ¡ Bª.¤uܽúÉxÍ?÷3w#®ÿfɤ0õ,¦³…ŸóÞŽ ¸x.&:|Ì/¿‚bRžÔ[· /Æè«—\ï„ÔœH³K×LÝ{öÒ7];qÚ,=áõ·¯å¹Ÿ2ïߌ€‘=ÔÏKyÀ .›ë!ç5t4Î>EDD-7Y³ÕºK—®LöÕ˜0 ~ä¸ÿ\r±‡Ddö’êmÑßb©V‹MƒSßh½ÿȮͷBƒ¨óáØ'NÀkZÙs´µƒD]f˜ÆØ5[~'^ëšš;ìÛy?:‘##§àp)ÐÓÅ<®›ãQH„)Q™ÿÌÝÉ©É>Yl¢}#(hÑHhí ÐÜÅŠ¶ª.¤uÜ ‚IªÑºÍ0ż~ ^°x¯(ÌSû©šo””êíräO¨‡^uÑsM%Õ+Öo‘ì#}ÖÎDÍ.OcîÀÖÆþ´ÆøI”LÉÞ} 5FeÀàÓGÿŒ‰Ž`¢™8¯¡#ÓKRJeZÿÁj¿Î] >z\‹åÁTþrÊl--ªÅŸÀ£Ÿ ŒôssI—ôécº¸„„¢²êt-m-=Jý3èÔ×Õ]÷ñÈÍÊ„¯0zâd“ ÛúÊɯ°Ø »d¤¿—•ÿ÷y:˽‡œÛ¤%'¾”å4Yi¢ãÀO`ÅHhˆpƒª iÉoþCŒŽ‘Yg1±éZ‹Ãü/¿}ùŒIÀ5†Lš9TWVz+æ+SfiêÊH}G“O,­2pýæëLš9Wª4“š9¯¡ãÀÆ“~QQãu›i–‘L{—[9E%V1v<$&¤edÁS2ïØìÅzh2aVpÊ'„:¼ì w?öšhë3r†ƒ ´h$´FUeåV“%9™7í>°h¹ õGà¤\í‘Uú;û„vŠˆL¨ºVp»éÄþ¬Eº°­­}+4¨µª«¾¾q)BÐm¬ïRW[KúÿÔÈ*(lºy=Àpí&ú½ |‹‚‰óÖIK~ ª]cÂdšÇТ‚½Y¹…ÃH;má: §v>ùûSÇ5'O#Îr³2<]:wîl}ÄQH$ UÂ:ÕU•nÝP0ˆxÖzÐPuÕAjîÞ„é…¸DwÖëys—Ô¯­åuq(Ü‹ c¸‹Ž±™Ëá}—Ï:¥%'ÎÓ]®1aó{Jèἄu¼Î8¾|òPQYuÕn•ACÀïæçd߸êC<ͰÈÀ¤Å¶Ú À+™n´åhk}ü‚L˜êëì·µf«õ a#ÝÁŸ êBX%öNTå÷o³ý<'?[[ï¢Ó1b4÷U0¤¶¶öËç¼ÇÿÜô½Ðø¸µŽñªwùQS“—u/24øÊERÓÓI4æë–ù¹¹<¾w ÌiU>ZsÔ¸_Fƒ~jz‰9œ×€°ŽÅ®}{,VÂôàŽ 4 ÿu† :…ð´„G,3û-þñÄø¸P?/p×}/%½Ž×?iéʵ‚îÚ@Õ…°Êí°k0˜¹p %gæOg{ÈoNu5·ÚŠîŠÕ ‡W&«³˜nØF¿Ê`´nÓ¬EK¢ƒžÞ¿“õ!-åíkHׯxtŸ»d¹©ÅÖ-…ã༄E”T¸ø„Þò…ŸúËçüêª*YEEeU#³Ñ& ºw?@@x¸§‡ì-´½Î8Ê“ûyŸqê))µó =ý­)‚UÂyÙYo_>ט0IZVŽ’Ù[Zf줩Ïccr2?ÒG¥¥AT´“¼R?•ƒš¶jxm·ÈÀ”Éj¥² d³Í; •—•&¿Š‡ù t)3=5Üÿòó‡÷.@?™7Áy ‹HI÷5±Ø ©µ;âÉíöl i9…-6‡ìþØzhgã¢q»Ž8R;,!U·î544¼Š{Ìðt|ºšÑ*5­(©ËCs»×›€Ôë*.Áâñ½$¥&NŸ iÍVë÷‰oìmvä~Êô:}ÒÊö‹à¼ADPL˜6KªtiqlÇM™&èî0UÒ2 õõw#‚™¸{ãºÙæí¢¢Ü\¨FDDdë¾#–FÚÑÁþSfÍ;ij«v¢>ÊêÀ1ëµÆ¯ž=a¯œ×€ ‚ð“ËgArõè% [¯3Ž¿íØ+èÑ‚ª i™—Oc¿|Î?eÆg7úO‰°ŒñrýNX²Jãõ–^§Ož:´÷lÀî={Qú<6&ùÍÿ´ M›»üGƒ«ªüÞ\ýœ×€ ‚ I¯ãC|=ûÈÈ:\ رfy¨Ÿ×äYóXY¼—ŸpMuaDäv cæ¢% ?µPýðk¼xþh©ÙonÝøøþ«Ãá þ(2È÷ÙÃ{¹Ù;ž`xšXobpóÏ s^‚´3øoXØ¢»$Äǹ<ú)ヸ„„ï8Awi5ÕU•Nv7Ô×[î9(GVÚ°ëÏc»·ý}`÷iÿpJära€;ª #"·c¾–—Å=¸+.Ñ}ÒŒ9 Lœ6«{Ï^Oïß-/+mÊÝÖA—[í·Ûn¶ìnÄõ)³´&NŸMùÈ`͆—O‚0ÊËÎÕ>\c¬dé®]»••–d}H}x+òVèUQÑ%+V7W9ç5 ÂÂý/Ÿ·?ÄEÅn²ïÜhMа¦1v¿“ëQkËw ¯ ÑïØM\|Ýö½ã¦Lo®fÎk@vF›ˆ7œšœÈÝ ‹ ò ÉuÜÍwȈQÜ­á ñÏ"¼{IõÞ`½Ÿ’¹iÏ_ ñq3ö‘šØ=j¸£º0"2¸páÂ/¿ü2j¿G8(°¥^¦‹žÙ‹uAuÝ â…êVnÜöäÞ­¼ì,8⻢äkNžv9*ö^TØ“{·A¾—|)lh¨ï+§ #§0bìø…ËMz¶´Ôç5¡¡¡=zô˜1cÆßí8ää䄇‡ëëëËÊÊ º/ü#-ù-w+„‰%ñ¢Åm‘#GŽß¿AUe¥Ó_444¬ÿ}ŸdSuÆWmÞyÞþ|z6 RH‚qAuaDdþpúôi 55µåMðM~¹ø†µXf¸†&Íl˜“5#è©íz—áGÝ{öZl` ‰íVZUƒ0sóæÍsçÎÉÈÈ€ ùõ!%9ÔÏó]«¢‚Ï¢¢¢2òŠð÷áf¥ÔÅÒS’‚¹×(͉RÒ}¹ÿ3q~Ê/®ÇîÔtà*+*œØhéj®”S$gg|t>l“š”: T×òÕèÏz²xàÚ†¸„‰Ñ™T/\CÔG­ÿ}áh>¦&»Úƒqw²³ýûQ¬ÍÙÊ/Á©êˆÈåÂʯ쌰Õ7]KœÖê,&6±iåèý[Öæçe‚½ÝkjªA]m±9DäÈ“ûÛ5óë>—Zûüqþ»¬¤ܶž©9%ÿvhh;È·MäÌZ¤Û£—ä±ÝÛ’^½ø·3—Ý¿–•šo4Û¼ƒÈ‘#+ÁÛ†úïsNQ׌×mfû×à'ü‘_Ü7LÜ eüÔY„"¨ ûmç^ëµÆŸ>¦3Ù—Åלm0$÷S¦¸D÷í•T9Ã54­öÛYkSßXÖví å—@àTuaDdá^~ ºGˆpÁù5pèð„øgçO\·c¯´Ì¿._m„FÀ½”2©I °Õ1¢q-Xjª+ƒ§Õf,С~ûòi,‰î¹@‚½¡¼MOI¢ß‘Ô4¬w|ñè~[Q]èå×"]nUΣxÃ:Æÿ¹Gµé[PáLvií£/I+ƒKÊýQñ—BJN;°+zù%Àδ{8R]™õÓð÷ß8p€íÝ™SZZZÔå>DHˆw  Áv£¢¢âKUUUÝ»·âN€ÖbËf㪷n<¼¥¦>Jcü$.FŒ@-õ òOzQn ¢ §Ðxa‘rJŒ •U©ß7¹myE&»äd}„íÆå ~ZÌÔñ³GYY‹O|sÈ/bX(-+åbµ¼ˆ7LVþã ‚R÷þ6Gkm4GEyÙÝ!OîÝ+-+)ª­­…Ÿ‘aå<µ+žú jÊËË #¡ÿš·àHuaDäV}j¬¬¬lmm[µË¨Q£˜““#N`L›6ðj<`»‡/Ð?FÏÖzÙ´iÓ¹sç˜_¸p!XÈâÅ‹y*¶( ª~>(*Äç¨.bQ´s0]Y¹ÉŠr.¼´ø ©ieš}‰œ²’b¶[§Yõ£âk9l%º÷`²KIa!“O‹¿p_uIJJr2;‚1¡Å; 444ˆC†4ž4ªª­g»9†p=Þ0q£U«híceE°=ëµÆÙ™˜ãƒ]±á/¨™:ujll,“}úôÑÕÕ ™={¶XÓ3mqq¸:?¯`_uaDdöjà:ôb A¨á¿Ø¢4LW åfeÄ?y{' fM·l~ÔÔ«u@‚¼œ’â/2r Ô;j¬wßÎ(W~ÿÖÜG4ç@Æ|®(/cò ²´¬\^vV`L“’–..,ÈJO¦1–’æçÅbg4ÆOJyûúvXõúãOcîßc5@mØIÏ«ð䫸ÇÁÞî{Ž»PïìÍûâÔ¹ ‰…„>‹-ÁƆÖ)­ðâÀæ“è®}ûœwihh ¨ÿ¶bW(¶„6UFDæDä•+WŽ7®­ˆ­„ø8·“G?e|—ð½ÇpUqá ñÖv™2eÊôéÓ…AlQèÒµkñ—³Ç€ƒ:rŒ¹_QA~WãBG‡ªe–š­‹¼æûèîÍsÇÿÒ5Y#-#[˜Ÿæùñ?·º‰‹S¯’ª¤2T—»“¥Í!²²jA~n˜ßåä7ÿëÑK²¢¼¬ÅÎ,60½vÙíNxpoi™yK–Iôè VzÑéXMMµú˜ý%tÔ^ìh{›z¦æd•þiïß<âëvºöÇïß*xð#q„¤¤äáÇù,¶(*Þ0ˆ-°¨È ¿ùúFՕߥ¤ûòâÀ‘•û§½Kô<í`h¾©ŒlFê»sÝ{È“ûw¸´p™q—®Ý„ß®–.]jccà ±%Tc8Ótwš…MÕ…‘ùy×®]|n‘mjkkaÊKD“¥¬ÅÜ"áþ—ÏÛ’?p[ÄÄĤåBüÅxå˧±Ÿs²mÿ Î‡?åîp™»öŸ±Ûx¥L—.]7XÛR_µöæÅSøWZi9ÅÄþ:åîô× º˜ß¬#-+gisøÌÑ?¯zºB¢ä÷<ÔÄb ñ|ª•í1G[ë˜èpHÔ»ÃȰ†ÑãA‚EYYª@š`¼á!êçGAC"5y}^8]Ss‡};ïGG@"rdä.zºØƒêrs< š~»²²²âiýlÀõÑž=§#ØT]™ߨÝPTOXÿq7ß!#¯±òïJå`e&D8‡äàêçwÿî—Ïù$RƒŒ¼"ü‰ôW®SPR¦›·dÙàa#ü/žÍHK)ÌÏ“'÷S<ÄÐ|“ÊÀÿ< S˜\<›“•k Úp‹­P[·n¼ÁPÛâU-hˆ¬¬쟚˜PT˜¯ØOõ—s–­úzö8qÚ¬³‘~n.éï’>}L‡y³¢²êt-m-=ƒ6qš™?6Þ°åÞC·mÒ’áˆP–0åú›¹@§¾®îºGnV&LìGOœl²a[_9ù[¡þŒô÷²ÿ¿ZD‡µ+¶e×G{z§#´°©º0"2„55Ä êZ„z¹g¤ÝЧ¯Ìš-» 1/ÖÈÐ=Ç[¬ \$šL×à›49L†õ1ã 1oEZFüz‹éð.Þ0Ú›kŽ&”Ö w?úb¬8› ˜½XM¦b?•S>!4™hW­‚ë£={NG p!ú5‚P³cÕ²”·¯‰×”«þÌ/ÿ_õtõtq ÞÅú¨Ót­ÅDN^v–ÏùSé)Iy90;4lÄ}£!ê?g3ß¾–ÌÐT0è´„ÛÉ#oGVU~¿Û¸0ô‡”äP?Ïw ¯Š >‹ŠŠÊÈ+Nš9WÇȬ—To^}AŽÍÀþý[ÅòicT>™ÿÌßýLÚ»DQ%ÕFë6iNn\Ë£½ÊÀ!ôNçßò_C|.½xtÿsnvMu•¬y˜†¦¡ùxAó]^?êë õ@…dåþ“gié›­¥ ÁÜb÷XU"ÔÀŸÊÑöÊuzPQb"öÿu|Ú¼ED&q¿ºªêÚe7âÁ7‚Wqm·®­­­¥ä|KKÉHK¹3ÂÁ#€~YNA„mRUUI3ö&½Žß¿e푳^£'2‹@ÃÉhÏò²R+S=Ð[”œÌôTH1Q¡Î>¡Ô±snùž;v€²^1è*HObnÛ{øS„+ÝcT]—qôj¼ç¯U϶,_m‰~øÏœ±³ýQS½lõz-]ƒ¾rò%……17Ã}]Oîß5Js¢”t_(Ö¹s£Ã%"ðʺí{f.\BÜßãuæ$üíaß…K¥e䪫«Þ¾|~þÄÁܬ WgJx]A„s:5 Å•ÎGl´ô µ WÊ)’³3>:¶IMJª‹£=Ì€¾N/\CÔG­ÿ}Ÿê Æµm?¦&»ÚNK~ëîdgû÷¢Xvæ‡ ‡EDDWYnŸ:wa·nâ/ŸÆ^9 Šù»Ÿ%õ`±{¬€ª ^‚/»-+54ßh¶y‘#GV‚· õ Þ眢®!c‰P»e%Åð'×35§ìžÑ¸ž¡¾éZâ´Vg1±‰M¡K`ÖÅIt?A„â!b(ã§Î¢Lk¨ ûmç^ëµÆÌ4æp´gHî§Lq‰î;ÚS¹®¡iµßÎÒX›úƲۡAµ?~@m ‰œY‹t{ô’<¶{[Ò«­ê+ êB„—ô”$ØÎX C“?sú‹G÷i ¦äÀ¡ÃâŸ?qpÝŽ½Ò2²D¦Ú€{/xÙkAŽñ§Pظ˜\Ó ßŽö ±sep R¹éÉèâ/?#c¾|Ú¤’fM† Sg?zÃv÷˜€ª ^r²>Âvãò ?-¦û+*«R¿±e³qÕƒ[7Þ‰RS¥1~’Æ„I#ÆNh»Ïi#‚?dåþÔo‰À}õõuLváp´oŽŠò²»7BžÜ»U—[VRT[[[WGÛ ¢ryEF°Ù=& êB„—’ÂB&Ÿ¡5tšuÔ U?âs T±æm€Ç¹ÞÒ2+7Yiép¿»‚ ‰DÜhÕ*8íRVRl½Ö˜>t& _ËIM+Ùr±{L@Õ…/Ò²ryÙY1ñ41Λƒ~irÐXk¶ZCÊÍʈò0öNÔÛ—ÏÙü¨©ÁÅØA„ÎG{z<]ìArÉ*WYî®1¶§do11±N:-¯F]L²wŸ¢‚ÏåeLâ—·¶{L@Õ…/rd%0ôìÌj#48¬JQY’¶áÊðïó'†ø\BÕ… "$pq´§ôê%l÷žp<|$%“þÔW_YyP]Ù˜¨..vU"\TWUR⺨÷*îq°·ûžã.Ôe¢ƒý¯y_œ:w!ñLos8ÚZÿïi¬Å®?óóbüôùÚ ºÊKKxÑy„mè#×Ò?.T¡v^€fСàâhÏ¢Â|RÓ©,êLŸóÎ""" ß*¾vïÑr4ÆOJyûúvXõºöOcîßc5@mØIÏ«Üíª.DX€¿ü #ƒüæëUW~—’î«k²&<À;öN´½Í=Ss²JÿŒ´÷ož?ñu;]ûãÇ÷oÌ+ìÒµkñ—³Ç@µCGŽ‘#÷+*Èòj\£eàPu¾|'„%ØŽ\‹ÓÛì™Ú@[„ë£=CÈÊýÓÞ%zžv04ßÔGF6#õ]€Ç9‰î=äÉýò²³n‡-\fÜ¥k·Å¦×.»Ý î--3oÉ2‰=Aý_t:VSS­>æ_ÆÅî¡êB„…!ê#⟹;ÙA"5Íeáïae{ÌÑÖ:&:uáac×lùy…Æë,_>ýœ“íhûu~7qñßvìåzÿ¶a¹#¦w4Ø3´¶×G{†èšš;ìÛy?:‘##§àp)ÐÓÅT—›ãQHд´¬œ¥Íá3Gÿ¼êé ‰²{ÿÁCM,¶¯¹Ø=T]ˆ°`¹÷óa›´äÄN:Qµ›8mÖÙÀH?7—ôwIŸ>¦‹KH(*«N×ÒÖÒ3hqø/9x†úyÆÝ¿ûås>‰Ô #¯8bìxý•ë””yÿ…f©¯¯{üÏ­ëW<ˆ³÷lG®åz Ý«—ÃDvò¬y¢¢¸¼Ïአ ´E¸>Ú3dæúººë>¹Y™½$¥FOœl²a[_9ù[¡þŒô÷²ÿ¿Zļ%ËÈʪQÁþ©‰ E…ùŠýT™1g٪߈DÜíª.„'ÐÌPNXi2á¿wÂݾ˜´Œ,üE[Õ…>}eÖlÙ©…î"üâ[Å×›!áþÞy9ÄSH Ã¥“Zº}‡I ]V"Ô61zb÷ÇVY²Ž‘ ¦Ì&G؆+fÀ‹8Êh­‚þ¸4÷‡åÃhÏ0öb=H4™ŠýTNù„Ðdª‰yÓ¬t¯EPu!Âòs>…ùyÝ ªüþM¬K-]ý•k¹Þ ‹j›‹¡{>(úš·û½ÈPw';Wg˜/1^-GVâz?;,Âchˆ@@Õ… oI|õ"ÄçÒ“˜; õõ=%¥ ×nÒ1\I ËF¸tR3ÓYPÛ\Ät˜‚oûóèªM;Âü/G^ó õó ðž4cŽ®ÉõÑ-̃æpÝ xG™„6€ðT]‚ð„ººº‡·#ÁѦ&%š¼Ñ]±fÞ’åÝÄÅyÔ"ëj™ÇЯ 5˜o¼zúÿøŸ[†¨‚þÿ:wF”jBkhˆ@@Õ… O0מÑôiðð‘ú+×þ:g>¯oOf#B-“º tŒÌ˜ÄÞ‰ö¾ø>ñÍ ›íÎǽ"r½çíá7´„Ÿ êB„'¾vÅú-&[ùÓ"j[Œ¡ aÚ¼E|\}/¸_ aá7´„Ÿ êB„'Hõ‘.-./õâÑý¥fë¦ÌÒ"®éð6"Ô¶C—XÝàÚe÷÷‰oHMž8éaDøÍmá'¨ºá ž7ÄD‡‡úz‚¯²ûc«‚’²ž©ùm}J ®ÃF„Z&1t««*o‡]»~Å#?ç©iÉÄ%+VϘ¯Í¾v„ß Ð~‚ª Až Ö¥Ë\¥^={ N÷ylÌÙc®œ?µØÀMp4®À­µe%ÅáÞ7¯”—•‚Kž0u¦®Éñ“¸ÕÏE5´„G êB„·Œž0RNæÇP?¯»Á¾\‚¼Üæjëëšš+öSá¼~J ]Î#Ôæfe\÷ñ¸\SSÝM\dÁãU-Þ÷ƒ°OÍ€‹q”Ñž‚ª A~@Vé¿i÷U›wDDxßò öxžÂI41t9P»~©VC}½ŒœÂbÕ ô Y¿R‰°×Í€ëq”Ñž‚ª Aþ>lÙªßÀ>ºâs‰ÃÚècèr¡vÈð‘à³§Ìž 2ñ.š×ã(£ <U‚ üüñ(>‡õÐÇÐå0B-±B:¸b\£Œ6€ðT]‚VÂèÒç0Œ¡Ëb„ZÖ£!|ƒ 3àEeᨺAAøª.AA~ªK$ÔÕ^ÐÝ@x\A¤µ ïàmm÷ º¯Àƒ‹ ‚´ô¼¯0"‚ ‚ðT]‚ ‚ üU‚ ‚ ?@Õ… ‚ ÂPu!‚ ‚ðT]‚ ‚ üU‚ ‚ ?@Õ… ‚ ÂPu!ÒˆT×Î""¸ uû§kgQ<Ð"(þ¶"Ä#ÍbP¨IEND®B`‚PKÖ5.I;,Ÿ> 5Pictures/100000000000037400000230E116A04976667AD2.png‰PNG  IHDRt0AL¾"ŽÑIDATxœìÝ sæÌsD+++…í×_u¶É°Ñãë\žUd¨0ÔºëÎ?xø¨Ÿmëí«W/ûêyÎç¬ü¼\)i™N²r½û ˜8s¶ÆÀÁ5·ßàš„Kl_³??‰Š{þø~fÆy%—+–——§§&“éÑ[ã¦ènÚïXç*eeei)ïÈD²ìD]ƒu»²-PYYé²oÇÕK¬…$ ’)ñÍë+ýg™,X¶q‡M4¾þB¸Áv3ü‰‰&‹–ûº»vÑäK ³#,-)Éú”qçz„ÿ©‘WBÿúÉ‹–'JŠ‹23Òÿ½~þŒëРÚÃÙV ôü›äÂ’RfK†™ÐYNžÜ.ø–—þ>åöÕ°°€sÁ¾ž*=zM10þY _!\=–/_>uêTvíÚ5åv¯‡v’•3^º*â‚ïõР䆰°07+Љ‹+wS»x…´L'—ý’zj†K6âmÛuUë1oÙjéβÇmmH–e[åAä 2ßnTkèf¡t§ÎdÒ8XµGï£þŒ¼Æ!6¾þB¸zøùù¹ººJIIéêê6MÊŒ}ñï“g›‹Š‰Õ™âwöåÓG´‡×«’ã'“p™šÈ~â#£&èp™ÇVž’ø–ÌU{ö©u­)úF#ÆO’é,Ë¡æÆ×À_—@§¼¼<ïjM“2¯’ù„ézdþ»® —ׂë.+*ÊÉœÄSîW)/+#sá6mØÊ啺’txõ¢ÿÜ%+k®E–¯36¾þB¸žh‚”Y\Tøïµp•½z÷@îöê«©ÖKýîÍ«+·ìj/ÑûzDÞ$s².÷«ÜºRë*3MÌ]öí8{Ü)!öÕd=C­a#ÄÅÛr_--5ðÂ%ðïRfÔË…ß ~Ÿ®Ï,ù]Wÿ”“Iœ:zFu®^VVöùSƽ®úüí"T•êÔ¹JiIIFZê­ˆà s§È]=ÓEl LÑŸû5;Û×ÍåÞ­kdíÙW³ß í¿ü:ˆÄĶuÿÕ¯€¿. ‰°¥Ìyóæ5²Âë!„Û´?m³düÔ™Îö¤ügá²ÖÑ+ ½y ‡þ6Žûå ³åkjŽŽI/]9aú¬+AþnßH}—ðæås2]B¸h]¸ü%5‰5ê÷ß1bÄãÇ\OFZê˧µ†•W`v’•2bôã¨È)I ÕîœkhÓFD±k7Õ½gÌ54l$÷›&vº‘‡ÁÌ啿«Ö“)/÷kì³è×Ï£I“RãCýÎ>¾sËáŒ?i'çM4¾~A¸h]*++yT³ŒŒLnnîÏ%™râĉ†††zzz:ujü殇\ ˳‡÷j=¸H]¸zcÍòš×ÂáŒuy²¹-ËLI¢mÛ^‚ËËäHIË û;™YY¿}õÂ~ûúô÷)žG¯µ±ã²¯ ‰!\Ñž))•7Â8,p3ü¢ùªumڈеE¡êƒ¾V;ö[ë^ ò5aò£ëµzÍkwÙY/1yöè~ÃÐøšÂ%ÐG™’é部ϟ>5n—³[ÍG©KGß»Sëi”ÁPín²ÌÒóèá#{·÷ï )Åúèã¨ÈØÿ§;×ìgßYwUíAæE…ßVãkà;„K  ¯3%Óµêá-ÇOŸU룦é‘py#ôíá’˜mþÇ¿×Â“ÞÆ¹:ì[¿ûëC>îÜÊLO[¿çP­M©ŒzkôÿY寀ï.€'Nœ˜2e O3%å[^îÃo¶—è0bÜÄZ>fBI©·oæå~•’–¡wë"""kwÚ®3Ÿs3ì⨠:ÃÇþÎ|ÈhÑò§÷ïü—‘–:u¶I?­!ÒeÛ¶m—ûõKê»ø;×"®ŸnÓfÖ¼…?«¼ñ5ðÂ%ÐÃÄĤi6t+"¸´¤dÜÝŸ ú(&.>zÒ´+A~·/‡è›ÓÞ€^ýõLy¹;ïßqb63¿jh ÙéäzÀÚ2.æ™j®Ø®}û¥ë¶ý2jìÏjn| |‡p æzHõwâÓjÿNœòû =.¯…ò"\óW¬¹ëZFZêq[›-vG˜åÚ#Çœ½uërÈý[׳>e|ùœUYYÑEAINA©ÿ¡Ó M%뢲ñ5ðÂ%Ÿ:—é§¥Í6êPc!ªI¼m;÷à›µ>ÔARj†‘™¼•zÕÐÜ \m.€6—@„K  Â%Ðáhƒp ´A¸Ú \m.€6—@„K  Â%Ðáhƒp ´A¸Ú \m.€6—@„Kà'™v"ünBë".Ò†ßM€áøFXXØóˆ¿[tB¸¾Ù¹s'¿›4C¸Ú \m.€6—@„K  Â%Ðáhƒp ´A¸Ú \m.€6—@„K  Â%Ðáhƒp ´A¸Ú \m.€6—@„K  Â%Ðáhƒp ´A¸Ú \m.€ovïÞÍï&´R666üno–V:°—ß­€úiñݲõ@¸~še±‰ßMh]Ú‰¶ñ?v߭๢ò !ô.ÁÑ©¨Ç[~·hƒp ´A¸Ú \m.€6—@„K  Â%Ðáh#Š+dðK\Š/nó„«Pðv‘¼Suä×0hbMy… ¼¸ÍŠB±¿ð»P»H^vµÇ×â@„Kh¦¦k÷f½+&.®È覬¢ÆP鮣oØUµG­Ë‡GÇ7lC XZ$t<€FB¸ÁPZRò>)‘Läv°Ï}#ÓeV2²]øÝ.:…ú=i¿i£YAǨ/„KhÖ˜;¼’â¢Ò>¥§ý{-üÖåˆ@ßèûwŽù…·—`[²Á›à»øØWünü€ŽÐ`— ÄÛ¶SéÑ‹LC7gÁ2ÛÍ«ß'%ºÞoõç~~76 ±/ùÝ`‡ŽP_— xT{ö¶Þï´ÎÜàꥀñÓfÐ.ô“3Øn†ý{-"!îUEY™Æ í«Ö«öìc>õ·ìÌOAw_´m×¾æŠß ò Ç î,'ïuå÷üN{÷6NDD¤—Fÿ_ÇMœ>gkýi©Þ'$¾y™ñAYE,3ÕÀ¸æ@¶ä»ä}æÉÝÛŸÒÓJŠ‹ä•ZÚs/'7¨Î{¸z¸8P·©öXp«3ƒË­|Ë3§MÐQ¿0’{î\(*ü~!ê-Ï60qßñ„¸è{èxÐR!\€@ê¡®1ÓxAйSÏÝ£öñ5úë`—;óîÃÛ7ã_½pö .,(ª>"UëZTyqa!Ù%ïYgQ^^N•?½‡L‰±¯˜‡¬È®ÔÑf3ÙgSwß½‰%SdDȺÝÇLžÎ¬0/÷ëZ3}²wg–¤$Æ“)òr°³w0Cµ;ç¿”›­ühsQÑ…³n¡þ^œ+„Æà¦ã 5¨ï¡ãA‹p ‚JCkˆÐ¹S) µŸ¸–GöîÂÂÂó—NÖ›#+§ûÊÝÉÖnËšâ¢B²y¨ÖEE«Þ‹‹‹ŽÛí=išá" ¥®*Ù™Ÿn]ñu;zõRÀÄ™ý´´Éžû˜­MiIñœ…ËtôŒº((~ÉÊŠ¼êãê|xç¦ÚÙ¿ùðtq ;ø>š—mÜ¡ÖK½ºm±®öûb_’öØüõ7)1\hA¦šÇÀ¸Ü Õæ¢Âïaç–®Û:~Ú,ê ,ðçŽ'Ôо‡Ž-Â%*µ^}„ªƼ­õш@2Ÿ4söâ5ÖTÉía§ýWMcâ ¬´”ìÚ7íw¤î*«¨™ZX}ËýêïuõbÙÇu'wç.^a¾j=µŒ£+¹[YQéuÂéòE“¥«¨òô÷)í%:lØcßUíÇ(6dõµ;m-Mtë<×Ë­·iCæ¹_rtçÎ×7[\ç_Á¹ã 5®ï¡ãA €p ‚ª³œ™ç|άõÑ·/«Nüš¬gÄZ(&.>ÏÂÊaÇn꯹³œ0]ìãß¼&·©ù¸©3Ù–?u&Ùû>¹{›¹·u­åëB•ž½«ŸÅ¹ Üo…RsI çŽ'Ô辇Ž‚áÕ‡Ô$¡êC;µ>š“]µûTdte+ïÕW“Ëúkž”¦ÈèFæ_ªwÌÔÖWN­}ëYÿIùy¹7Ã/Ý¿u-3#=÷KvYY7GO뻡Ÿ?@#ÎO¨Ñ}Â%*j\k•î½j}4ïë2—”îÄV.¯¤Ìeý]äÙJ$:J’yþ·<2ÿ’ÅéØëa­Ü/9ÖKLÒRÞq¹]VÜo…")%Ý€­@½pîxBî{èx è.@P=ºó™«ô¨}ß¡£$Ù¹|Ë“îÔ™µ<ëS—õËËíÜE޵$?/—Ì¥¤eÈ\V^!#-5 2ºƒ¤çz<\ìÉ^^‰±ÀrC?­!$sˆ‰‰‰ˆˆÌª^g¸ß åg¿RqîxBî{èx è.@ ={tïö•0Q1±Q§Ôº@ç.òdÿ9ó#Û>1ö5—›ÈxŸÂ¶'»[ªf¡êß7»i)Iêýµ8×óúÙS2ßvÈ¥w¿ÌB.'q¿huv<¡F÷=t<tÍ4\RÃ"°Ud¨0ÔºëÎ?xø¨¦oUëô³ñù%&ú¡Ûáï“ßµ—ð¹ñßÍþˆ}ñíÞJn.XÖUµG­ËtëÞ3)>‹=Õû1 KKJιár+Á¾šƒa-¹~‰ÌÕ "sÍA¿<{x/ÈË}ëAÖe®ù]ð:5zÒ4ó•먒ì¬dΖ3¼O: WVVäëPý¥'SqQ!s<î·M€›Ž'Ô辇Ž×ªÔxØ4Ÿ]0—ši¸¬UYYùÈE¦‡·oNÔ5X·ë ¿[uõ;{Ò~/ÿ¤ØmYó5'[¨ú‚¿tU ‚"3ãCJbüÃo^¹PYQAváFKVüla=£¯…‡œë$+7vÊŒŽR2 ±/Oýe×¹‹\zjrÛû*æÈž­úfK”Ù™Ÿþ‰ޏà[U³~Õ¯€õL…ú{Eݸb¿}½¾Ùb†j÷ä„·/ß÷q;ZVZú½ ŸYC¥{BÜ+£s¯ì,'Ÿçú„D‡ŽŠŒni©×ƒ§Í1¡£&»v²ƒôb`\\ø]F¶ ÷[Þ©WÇj\ßCǃ Y‡K¶PBÂDfF:ù=ÆõFhÐíá$bò«mÀøØWôV˜ù‘J–Ý|úôg¿Ð´Hµ~¬žnhºÈÊZ\¼íÏVÔ6bø˜ ÿý猋=™¨B)™Nö§ü,fëÔ¹]’!VXïÜ¿iÕµà@Ör³%Ôá(²“^kcçhcy%”L¬Ëhh Y´z#ó®žÙb‡n_ #U"§ äp&ÀÃÅžìã݉z»ë£9 &ú‘»“-™„ªß¹ß ЫÁO¨q}¯µa‹:ÍíÛ†iÖá’ ù€ÕU­Ç¼e«¥;Ë·µ¹vá²™«sœÞú*-)¡nô2”ÞšA HI˨öRïÞ[ý·IS5ýÂya’þ<|Âïô‰'wo§$¼í()5à—áfk¤ª¿%á¼zYYÙð±¿8éu+"8æé£o¹_{÷0êw–Á I€8áëæ’÷ú}Rb{ eµ±:º:úF¬õŸ:³¢¼ü¢÷éôÔò' >Òtùš. Šó,¬ÈZɉoåüˆØrÛ^ç}Ûb_‘Õ™_s¹àzu<¡Æõ=tà4Vg†Põ™éÞ'$¾y™ñ¼UõÒè?ÕÀ¸æC|Ë3§­Ò£×Q¿0·Ãûï\(*ü®Ú³Ï›—ÏYë¤>Ûä»ä}†¼‰JO+).’WbhhiÏ]¼œÜ¨ÙþçïûxzH… •î#'è˜/a;ÁM ¡ Ô÷³{Íå…Û´1YºŠm´gÒcÉ\A¹+‡™ÈÇΟddåäÉŽ¹Î¶ý>CŸLl…ÊÝTx_b-!ûõCî¾ ÛŠ êh>ßñ„¸ë{èxÀ=ÁJ;.ËËÊ„þÿU§Èó¸ißዌN9H’ 5Ò,‘žšL¨¨¨õ~Çfò\· T+**|öðžÕ’²êׂxý’é~äuûÓ~Ì|Ée ¡ùKˆ}ù>)QkØH¶Þ^¬Ú‰’|j´|è{@;ÁJ;.o]ªººë‘ºz÷`¶b-yrm¬þíMBgeE…Ó®-ÅE…‹¬¬{iôçkc[Ѫ>S˜Ÿï¼»Žþ\ݹó”iÉIÎû¶Ç¿Ž!Y —† -ÈÄvî ‚ÇlmJKŠç,\¦£gÔEAñKVVäÕPWçÃ;7 Ô.#Û…ZR´z+E…ßÃÎ-]·uü´YmÉ?„„PóQ<]H²ì£9pÙÆT—HŠuµßGÞÜÝlmþú›Ùò´”w;ìn³ÀrÝèIÓÚµkÿôAÔ¹“GÈ’~îÇ©_>rßBhþ<9>½GYEméÚ-ª½úÝüÇiá罯^ N72­³€†Aß^ ´#Há²´¤$#-õVDpйSBÕ¿˜c>4Çüè{wb¢ûz’ò‹>g^?Ö:böü%ükoËD”KBØÐÑVnÙEöP×øcÃ6ë%&Ô…+~&è¬û·Ü¯s¯0_µž*Q`t%w++*½N8]¾èÏü ‰:,û%‡„ך—Ùe•þ>¥½D‡ {ì™ç õÓÒ^»ÓÖÒD—íŒÏëÁe¥¥¤6’z©’ Óõ:JIÛmYóúÙ“ú¶š?‹M;¶ZÌ'ë÷¬_Îöùä0ô·qüh´ è{À#‚’všu¸ä0ø“Ùò5ÃFgÞ%YdÃ^{Kc]òyQ‘ÑÍ똓¤´ TF^˜ibÎzW­g¡ªaÕØ¯ Æ*ñMÕÂã¦Îd+?u&‰nOîÞ®Ýj.ÌÆÖµ–/ÍUzVõœœÏÿ¹|ÙÓQUÛš6‹µô¢ »/ÓBh¶ºªöpñôypûÆçO‹‹Šä•”•UÔf›Æéä €FBß”´Ó¬Ãe­Èn~º‘™ÆÀÁlår J«·ïµÝlµwCÕðc›ö;ÊÊ+ð£­ÛiCÔ%Â**Ê9¬ò!5‰ÌWN­õќڂ)y;®³%ùy¹7Ã/Ý¿u-3#=÷KvYYYyy-Í ê—Sätmß´š3Ù.¦VdªïŠø4RÃú:ÔI ÒN³—¬ÿf•••[–™¾|ú¸m{‰šÉ’2l̙β_s²Éü—Qcšª™­ud½|ÉÊâðhÎçZ¢›¤”4ç:s¿äX/1áæ‚fùßò„ª‡ˆ£·…M©ù§f.Y [íØoi¬{%ÈoÔ„ÉCFŒ®¹ÌÙcŽä¹î(%MæžÇÿX¿­éÛ OWi©‘ÑÔaNnP§xràábO’¥¼cå†~ZC$¥;‰‰‰‰ˆˆÌªÎ¶¤t§ÎÙ™ŸòórÉ#-hJÍ?íL¸$ªÝM–Yz=|dï¶ãþál»ÿ×Ï£/ùxt–“w8å¿~‘a°¯çÈ “¹íšŒ£+‰ni)Iêýµèªóõ³§d¾íKï~˜…µÈì"¯HÂeZò;á’- ‹@¤A —Äló?þ½žô6ÎÕaßú݇˜åÅE…N»¶TVTXnÝCòÁòMÚmYó×®-GýBÛ¶k.Ã>µZäÕ¡^ÒûŸ=¼äå¾õ  ëW‚ü.x=i5P½dg}ª>*ÉZè}ÒYXX¸²²² ÿ[‡Ž’T¡ÖÐo^>¿È:4ñƒÈ·®í¡®qØãçfØÅQt†ý*?ãâžš×Dj°¼¼<))û•‰å¶½Îû¶'ľ¡9>fÂñ€_7—ĸ×ï“ɧgeµ±:º:úFd™lbüÔ™åå½O§§¦Oƒ†4]¾¦‹‚â< +Rrâ[y–±‡&ÏšÃPQ»äÿ*&;ë£r7µ_ÇMœ³àêÐ&…öòß»Dqq1™·mÛ¶Î%¡%ÉÍÍ•–®czåççKHH´¡o$?¶ÄÖÜŽ/Râc_Ñ[avæG*YtóéÓ ½•óßßy­¨°P€ÒN3 —œÿÉIp¾É¼{:äV­‹é›“‰æ–ñÏØ±cedd ›l»5_‹Ÿ½:5ËI <äîËV(+'OBg¶û³òßg蓉­P¹›êïK5W×ü ™8ošËò]¯^½†JºÄ¬Y³:uêÔô xûöí˜1cfΜIÚ0iÒ$¤ÌVBWW·¬¬Œ¼èsæÌéÖ­[l1$$dãÆ³gÏ&ýí·ßhL™ÍÛ5Ư´¤„ºÁzÞy‹Á÷÷CºülßGR£¥f.¡¦òòòÈjVVV£Gnú” ÍMIIID5qqñ‰'òå]õëׯg«‘O>Í$e¾{ìëó,;óI!rŠÊ#ÆOšil.%óŸg&ñÍë@¿Sã?¥¿'˨ôè5kÞš¿¸üÙ1-Öò‚oyFã´I GýÂÜï¿s=¢¨ðû…¨W~zþø~°Ç›—ÏI!C¥ûÈ :æKÄÅÿóe¤¥zŸóäîíOéi%ÅEòJ -í¹‹—“5Ûßœ;ssx?&„KÁƒ” lšÃ»j3I™ÏÞ³±ZRVVÆ,)Hx“œðæöÕ0‡ÓþÌï’"}]ö–•–Rwß'%’éþ­ Woœm¾´¾¥N«(.*ºpÖ-Ôÿ?×# ô9a·‹¤1ê.Ùã’é~äuûÓ~Ì]2Ù÷;ÚlfžGÂ1™"#BÖí>8fòôú6¦)µø”IRã¦}‡7.2:}ä I~ŠŒZzj2 ¢¢¢Öûëõ-$õ¢²uÔ×Ï£w®^²ÿ¸ç áœ.ÉeWáÐ!Ùäå~]k¦Ob%³„|Ü"Säå`šItf]XP:ssx?„K†” lšÃ»*S¦ç±Ãd‡=gá²i³Md劋‹^>}|òÐ’¼]WnÙ%T5|U¦Ûáý$YN10Ö7]$¯¤œó9ëòß ^§<:ü6qŠ‚r×zm”„ ¡ª£\ßÃÎ-]·uü´YÔ˜ i)ïþvØ',ÜfåºÑ“¦µk×þ部s'$ľôs?N kEöîÇlmJKŠI›uôŒº((~ÉÊŠ¼êãê|xç¦ÚÃed»Ðÿ4Ñ­§ÌÞý˜­XK¢¤£õÁ¿½…Û´©¬¨pÚµ¥¸¨p‘•u/þõªM¤º«æç;ïß®£?Wwî|eFZr’ó¾íñ¯cH¤Â¥áB 2±5羫ÔÚ!©kª±Õééâ@’eÍË6îPëUuቤøXWû}¤‹º;ÙÚüõ7³å‚Ø™›Ãûa«…pÙ e›æð®Ê—”™–\5~¾Ùê ¥¨˜Øðêë¤í\½$ëc:µL—{II1 ‘«·ÿ8³V‘Ñ:oE_ô>Sß=„«Mî—’ôÍ3˯’KJHP J&L×ë(%m·eÍëgO~4æ¬û·Ü¯s¯0_µž*Q`t%w++*½N8]¾èo²tUƒŸ¦×|R&õÏ1ÿ#úÞ˜è‡Á¾žz¦‹.úœyý}Eæã§Íb-6z|ÐÝÌ»‰o^×\Q¨z²?~r÷6/öÇCÂe\Ì32ùŸ>ÑIVnþʵ:zFÔ2_s> Õ¸d(³$÷KNƒ·.)õŸÑó¿å UÌÏa•/YYÍùÌ“pÉ;¬™’ùµ£§§ç… œyÔ X3%/ê§ «>¿âkN6™ÿ2jL#k£Î€¬—t¶YéíÖKLÒRÞÕ¹uîÌÍáý°µA¸`È”À¦9¼‡ò%S²"Qr‘•5™ÒS“£ï߉ºqùåÓÇÎ{·—–”Ì02£ÈÌøð%糜‚ëŠTèìÔE®ÎM~/¨µœí”’V³3?åçå’8ò³ªdå2ÒR"£©cWªÖLÉtþüù?Þ¹sgìØ±4n´i2%ÓÙcŽ$Yv”’&sÏcެßÖeÕ€®Rç90.ö$YÊ+1Xnè§5DRºy)EDDf Ug[R;ssx?lµ.2%°iï¡|Ï”5)«¨‘IwîüP¯“‡ö\ò>C…Ke —ÓÞ³…ËÞ“¹¼Ò¾økÓF¤¢¢¼ ÿ[‡Žÿû_ãüà ¦.òŠdœ–üŽÃþXÑ•ìÓR’ÔûkÕë¯k8gJJZZÚýû÷É€€ZÂegJÊëçÑ—|<:ËÉ;œò_¿È0Ø×sä„É5GEå)^t•×Ïž’ù¶C.½û `Öz S€:ssx?„†Ëæv±¬˜è‡n‡¼O~×^BÂçÆC~7‡'È? yoúLI½ÖlDEE* µîdÏ=xø(º¶Åö:ÖÚÍš[ßã#Ò ¦OŸŽLÉÊÑÆúÿDYlúó·‰ÿ;ñkì].ó¾~¡îöÖ¨ºä}¨ÿY¶ëðR#öî÷ŸÈ"#+›“•™š¯¡5„YâëÉMc´†Žxóòùõ@Ö ¢<ˆ¼qpëÚê‡=Γ»$ <{x/ÈË}ëAÖu¯ù]ð:5zÒ4j—f…dÊ©S§rΔLÔÙ–AAA... î$|É””â¢B§][*+*,·î!ùiù¦?í¶¬ùk×–£~¡Ô˜S¼Þ:µ^t•ì¬B5Nñ>é,,,L^5ÖÏTÍ¿3óîý°Yít%íðáÈe¨ßÙ“ö{i|ÊÊÊÈ¿:uÉTæØ­-OTT”¸¸8¿[ñyÎɧ[2=¼}s¢®Áº]i©³¯#íÝI€$&&ò·KôíÛ÷ýû÷Í!S2‰·m›ó9ë¸Ý.²Kî;`°£[væÇ@Ϫ÷ì«I-3Û|iÄŸ»7¯ž8¸[Ït‘¬œ|ÖÇŒ¿³÷þ¹Ö®}{¶AÔ»ªö áÒÝÉÖrû^†ŠZæÇôß³±/þ¯£”t~^¿˜advá¬ÛРN²r“gÍ‘è(Iv §œìJJŠ5ÿØC“PuãŠýöõúf‹ªÝ“Þ¾x|ßÇíhYié÷‚|jEvÔs}ÐͧOÿfzÁ´Æãï¿ Û+NºufFú¿×ÂÏŸq%o7´‡“ˆÙÈMÔ|¹éf´w'Â÷wR111þ6 &“¥–OD}úæh³™µœ¤FæIr2²],6íâî´{3 —•••Nk“•W°Ü¾ïØ?Ï{¸’‰YÞ½w_S‹ÕÔm²#_kcçhcy%”L¬«kh Y´zcCžã>Y2¿§4ø›q>^P4&úQ˜¿—”L§åÖ;™…+·î&ÑŠ”š Ãvü›F}4«±“6dª~?¤½«è™-vرáö•02Q%r Jg<\ìI¸ts<@&ê}¸ùwfÞ½68ð´æ´Ã‡#—lC³6^iI uƒõp=ðù,ÛU­Ç¼e«¥;Ë·µ¹v±ñá²a¯#íÝ Ù:œöõxxûæçO…„*å•I2˜¿T©« s±É³æôÖèïwêxr›¬ŠŒnj½ûÌ]¼Rµ'ûI ¿Œ»ÓÉÕÿÔñ©É$JöTïgjaE*l×®ê×¾äSç/FɆ*j—ƒüâ_Ådg}Tî¦ö븉süA ¢ 3áx@„¯›KbÜë÷I‰í%$”UÔÆêèê豎 $ˆ˜ß‰SùÍxÓ+*,$Ÿ"ÈŸ°lãÖïŽI[°jÃIû½äÑãþõº$÷,·íuÞ·=!öéÔ ç´w•ñSgV”—_ô>žš"%-3høHÓåkº((γ°"õ''¾•g{¨•wæhÍi‡¶s.¿äŽLÞšIÇ"¶üÜ%Ľj#,ÜU­§ñÒ•Ú#«n w<\Xk°>à4VgURçÕî ¾åÓVéÑë¨_˜Ûáýw®G~WíÙçÍËçµ¶ª ÿÛ%ï3OîÞþ”žFöòJ -í¹‹—“lÎóÇ÷ƒ}â³iLwbëÀDA›ä„7·¯†9œö¯98"ÔŠí;q ]¿à¤nÐ.ED«ª*ÌÏwÞ¿]G®îÜù ÊŒ´ä$ç}Ûã_Ç'ˆ<݆ -ÈTóp—W»­Þ‰Ûaç–®Û:~Ú¬¶$ªTE[³NOò\“¬½lãµ^UCv%ÅǺÚïKˆ}éîdkó×+ƒ¥¥¼ûÛaŸ°p›–ëFOšÖ®]û§¢Î>yh‰ÈÞ®ÎÌËgl߉Sî›q6H;Ü -\Rgµ“– =¹î¡®ñdžmÖKL8 ÇåÕî©Ãc¹_rÈk©o¶˜s{Òß§´—è°a=uª ÑOK{íN[K]ÖÓ ®–•–’ÚH? J&L×ë(%m·eÍëgOêÕ¼V¥´¤$#-õVDpйSBÕ?d>4Çüè{wb¢ûz’ò‹>gÈç9­¡#fÏ_Ò4mkdwJK®ãÍÀl uRTLlxõ•9ÈGÒÆ\ µaûNœÒl¿àÒ7èÿAÏL“ÿœ†¢Ö³PÕ`Zœ®ûTß«Ý×\²&[×ZŽ$«TŸ­Ÿóù—¨"ɽjCÓf±.6lôø »/ܼ©ÖÑ.)fË×gŒy—üWlØkoi¬ëyÌQ‘ÑÍ똓¤´ é÷ÂMu¬¢‘Ý©gß~1ÑNÚ³tý6Y9yªP½¿–ÿ­'¼l5@‹Rëwâ|3-Òô‡K†JwÖ»Ôe **Ê9¬Rß«Ý+«¨qÓ’ü¼Ü›á—îߺ–™‘žû%»¬¬¬¼œ½TårŠÊµUÐÀ浤ÃM72Ó8˜­\NAiõö½¶›­önXAînÚï(+¯Ðd­jdw"™rûŠÿ^ ¿s㲺æ@­¡#´†è?dX+ü©#@ƒÕú8ߌCË€´Ãýá’:- ^ê{µ{I)é:ëÌý’c½Ä¤ÖËX±Êÿ–'T=:Ík‘XÏð ûŒ-ËL_>}ܶ½DÍdIVýUòלl2ÿeÔ˜¦jf•Fv§^}5O^¾ä}†„˸˜gdò?}¢“¬Üü•kuôŒèo.@KTëwâ|3-ÒÍâÚâõ½Ú=‡Q‹™<\ìÉs-¯ÄX`¹¡ŸÖIéNbbb"""3†ª³.&Ý©svæ'’ú9\/µ¾ÍkñÈóoµc¿¥±î• ¿Q&1ºæ2g9’dÙQJšÌ=92ǯnïN$J.²²&Szjrôý;Q7.“$í¼w{iI uqjà€Ãwâ|3­SëI;Í"\òâj÷¯Ÿ=%óm‡\z÷À,¬í»È+’§;-ù‡§›Ít Õî&Ë,=>²wÛqÿp¶Žøúyô%Îrò§ü×/2 öõ9a²æ :FG£ ¯—²Š™tçÎõ÷:yhÏ%ï3—uÊË˳µµe-Ù²e‹󮜜\“7 €ÿZOÚá[¸,.*d^Ù‚W»ÏÎú(TÕY ½O:“Ï•••ùß:t”$%ZCG¼yùüzH ëx÷"oܺ¶‡ºÆaó„Kò,“ç:"ÐwŠqqáwÙ.¼¸Ú=C¥{BÜ+£s¯ì,'Ÿçú„D‡ŽŠŒn$˜_œ6ÇD¼m»FfκÝ ê$+7y։ޒ1ÑO9Ù•”kþñð¢y-€ˆˆÈÚ¶ëÌçÜ »8j‚Îð±¿Såg\ÒS“ÇLžN•îøOø¥Gwn‘r4ioíÝI¼mÛœÏYÇív‘jû¬Àè–ù1гj¨°ž}5io?ðùgw;|à}ò»ö>7Ö:Ìj½Æ^à[Ǫ­›¡ãµ­9íð!\öÑýÈÝÉ–LBÕÿ<¼¸Ú½žÙb‡n_ #U"§ äp&ÀÃÅž<ÝnŽÈD6-+¯`¹}ß±ž÷p%sõî½ûšZ¬¦nó¢y-C/þ¤/’O9Îûwœ¤-%-C^Ù0/)™NË­w2[¹u7éĤœdÐÚÃèmíÝÉd©åÓQŸ>¤9Úüç@K»öí›òÌQ൲²2»-k¾æd U_"œËµBýΞ´ß‹]>4:^ëÑšÓ¥嶽Îû¶'ľaŽùIûÕîÇOYQ^~Ñûtzj =ƒ†4]¾¦‹‚â< +Rrâ[ùÿÿƒ|á*j—ƒüâ_Ådg}Tî¦ö븉süA]‰GÍk1æ¯XsÿÖ5ÒƒÛÚNé´{seeå²;XÑ“Ž¾`ÕòÎH=îAï iïNä?Ðát@°¯ÇÃÛ7?ú($T)§¨ÜÈPƒùK•ºªÐØrà¯ìÌÔþ ›OŸþU—ÍåfÏûŠç-ƒ­fÇâ¢ï¡ã ¢Öœv.kýOøÙ¿[9yйûÖ\Œ›«Ýs¹ Êï3ôÉÄV¨ÜMõˆ÷%¶BÍÁ¿‰ó¦¹i^‹Äù]tJ÷à›Ì»§CnÕº˜®±9™ê»-nº/ºSç.r‹Vo"SÍRQQ~ïŸkϦÎ.*-)¡ÊYÏ@ªë/h±a¡¡¾Ùâ‘&·iÓª?¦¶`èx‚®æži§NÍâ×â¼SÿíꥀP?¯ÌŒÔÐëÌyóò9õ(óä6Îg¹÷põpq`]Åú€ÓXTIFZª÷É#‰o^“Mú½4úO50î£9ðmø–g4N[¥G¯£~an‡÷ß¹QTøýBÔ Ò ÛÍVòJŒ™Ææ:úFœG¡ÁÂeÇâx†%:"„Kh±>~xâëy-8°ð{˜¸¸Žž‘®qOvØŽ6›™çϽ{K¦Èˆu»Ž™<*¤¾x*.*ºpÖ-Ôÿ—k;xå‚—û­ˆ`w'[oWçɳæÌ2Y¨ÀèJ{#¡)¡ãA+‡p -ЫgO.yŸ¹y£²¢BRZfî’•3çΗ‘íB=êè(TÏä.´ SÍUòr¿³µ)-)ž³pÉ]¿deE^ õqu>¼sÓ@íáÔFEE«Þl‹ ¿‡œ[ºnëøi³¨ÑIºªõXóç+ׇø¸àìëâï5bÜD=ÓEM64,Ð@áZ’òòò;×#ÈÞ=þuŒPõ˜ÀzóMžeHïÏÈXuÿ–ûuîâæ«ÖS%d£äneE¥× §ËýM–®"…ÂÕ—ÒÎý’£;w¾¾Ùb¶JH «-^q-øš“•ÉV¢¬¢Æ¹BJÆLžN&oWgŸ¿]¨¿š9t<V—ÐrÈt–ýš“MvOîÞžm¾tÔêkAÞù’•ÅáÑœÏìûxI)iÎR#×\8ëþöÕ ¡ê/.ÙBhèx¬. åðÿ7òJh°ÙAÚn¶Rꪢo¶x¢®ï®k/+¯‘–ÝARŠ›å©!ijU\Tx=äÂÅs§?~x/T}åŒY󎛢K[[gÐñX!\@Ë!&.>iæl2={tìéGE·Ûuîä‘Ffdb½p]]É>>-%I½¿Vƒ+Éý’êïp./÷+ ÃF×3]¤5tížBÇ`…p -Рa#Éô!%)Ø×ófXÏß.žn“t ôÌ+wSmdåÅE…Ì#Ršƒ~yöð^—ûÖƒ.¬Ë\ ò»àujô¤iæ+×q¨*=5ù¢÷é!A%%ÅíÚ·'Ad–É‚:Oƒf @áZ0†j÷•[v-Xµþr˜¿Wx OD_Øã7 ®ìÚÉ>"ÐwŠqqáwÙ.z¦‹Bý½¢n\±ß¾^ßl1ÙbrÂÛïû¸-+-ý^ϹÂe³u*+*ä”fÌ?Õ`.—_qB3‡Ž­Â%´pdÇ9gÁd|÷æ•KÞgSUÍ1ÑÜlÉ$T=¨µD‡Žkmìm¬#¯„’‰ua ­!‹Vo¬£Â~HJõûŒ)Øò ãA«…p ­Ù‰R#­4¦Ëm{÷mOˆ}EjëªÖƒ*>fÂñ€_7—ĸ×ï“ÛKH(«¨ÕÑÕÑ7ªsÏM]²Z0t)Ñíð~«?÷ó»i´Iˆ}Éï&4Â%Õž½­÷;­37¸z)`ü´™´‡ ýäÔÉ›aAÿ^‹Hˆ{UQV¦1H{Áªõª=û˜Oý-;óSÐÝmÛµ¯¹â÷‚|Ã1ƒ;ËÉ{]¹ûìá=¿SÇÞ½é¥Ñÿ×q§Ï™ÇZFZª÷É#‰o^gf|PVQ#ËL50î£9­Áùß.yŸyr÷ö§ô´’â"y%††–öÜÅËÉ jó®.Ômª=ÖœÆêÌàr+ßòŒÆi“ä}Ô/Œî;×#Š ¿_ˆzA˳ P/— z¨kÌ4^tîÔ³G÷¨pYÓ©¿y¹3ï>¼}3þÕ gŸà‚¡êC¡µ®E•’,¸gEyy9Uþôþ2%ƾb+%ÎÑf3 ‹ÔÝwobɲn÷Á1“§3+ÌËýºÖLŸÄJfIJb<™"/;{3T»sþK¹ÙÊ6]8ëêïŹBžB¸A¥¡5DèÜ©”„ÚϘLŠ#ÉRXXØ`þÒÉzsdåb_¹;ÙÚmYS\TH Õº¢¨hÕcqqÑq»]£'M3\d¡ÔU%;óÓ­Ë!¾nG¯^ ˜8Ó Ÿ–6‰ŒÇlmJKŠç,\¦£gÔEAñKVVäÕPWçÃ;7 ÔÎü±‘§‹I–}4.Û¸C­—zuÛb]í÷%ľ$í±ùëoRb¸Ð‚L5¾r¹ªÍE…ßÃÎ-]·uü´YÔAY€¦‡p ‚J­W¡ª£€ok}4"ЇÌ'Íœ½x5U2@{˜Ãiÿ•FÓ˜#9(+-%™rÓ~Gê®²Šš©…շܯ¡þ^W/ptÖÜ»x…ùªõÔ2 Œ®äneE¥× §ËýM–®¢ÊÓß§´—è°a}WµÃ'‘Õ×î´µ4Ñ­ó$K.·"ܦ ™ç~ÉÑ;_ßlqï \€ ê,§@æ9Ÿ3k}ôí˪3'ë±Љ‹Ï³°rر›úk¦´ ÓõH¸L|óšÜ¦æã¦Îd[füÔ™$ö=¹{›.m]kùžZ¥gïêÆgqn÷[¡Ô\ ‰!\€ úš$T}L±ÖGs²«r›"£+[y¯¾š\Ö_ólHEF72ÿR©­¯0œZûÖ³þyóóro†_ºëZfFzî—ì²²2nŽžÖw+B?6š Â%*j@u•î½j}4ïë2—”îÄV.¯¤Ìeý]äÙJ$:J’yþ·<2ÿ’Åé #ëñÔÜ/9ÖKLÒRÞq¹]VÜo…")%Ý€­ÐáÕ£;ÿ¹JÚÃe‡Ž’$Õ|Ë“îÔ™µ<ëS—õËËíÜE޵$?/—Ì¥¤eÈ\V^!#-5 2ºƒ¤çz<\ìI²”Wb,°ÜÐOkÉ»bbb"""3†ª×Ùî·BùÙ¯”š Â%¤gîݾ&*&6jâ”ZèÜEž„ËÏ™ÙÂebìk.7‘ñ>…-\’œGÕ,TýÃr7-%I½¿çz^?{JæÛ¹ôî7€YÈåLî·ÐL \€à‰}ñíÞJn.XÖUµG­ËtëÞ3)>‹=Õû1 KKJιár+Á¾šƒa-¹~‰ÌÕ "sÍA¿<{x/ÈË}ëAÖe®ù]ð:5zÒ4ó•먒ì¬dΖq½O: WVVäëPým;SqQ!s !î·ÐL \€ÀÈÌø’ÿðß›W.TVTøh´dÅÏÖÑ3ú÷ZxXÀ¹N²rc§Ìè(%“ûòÔ_v»È¥§&×¹-1qñ·¯bŽìÙªo¶DA™‘ùéŸˆàˆ ¾U5ëWý]ÏtQ¨¿WÔ+öÛ×ë›-f¨vONxûâñ}·£e¥¥ß ò™U1Tº'Ľò8ê0wñÊÎròÉñqþ§OHtè¨Èè–‘–z=8pÚjt’)I²Œôb`\\ø]F¶ ÷[h&. Y£Æg#,,<ÝÐt‘•µ¸xÛŸ­¨5lÄð1þûÏ{2Q…R2ìOùYÌÖ©s»$¼®°Þ¹ÓªkÁ¬åfK¨C¡$®µ±s´±Ž¼J&Öe4´†,Z½‘yWÏl±ÃŽ ·¯„‘‰*‘SPr8àábOÂ¥›ã2Q§÷ÑýÈÝÉ–LBÕ£©s¿€fᆔ´Œj/õî½Õ›4UsÐ/œ&ôÏÃ'üNŸxr÷vJÂÛŽ’R~nf±FªúëiΫ—•• ûû“^·"‚cž>ú–ûµw¿£~×Ña8“„×ã¾n.‰q¯ß'%¶—PVQ«£«£oÄZÿø©3+ÊË/zŸNOM! á#M—¯é¢ 8ÏŠ¬•œøV^ñÇØ-·íuÞ·=!öY9â:—[h&. ™b½ bÖnÓÆdé*¶aÆâ^‘¹‚rW+2õ2”L6*+'Oamû}†>™Ø •»©ñ¾ÄZBå!w߆m¥¾O \@Ë”ûò}R¢Ö°‘l¿ø¾X•Þ*ì¤-. eò<æøôþeµ¥k·¨öêC"æÇiá罯^ N72åwZ&„Kh™,6íØj1?=5yÏúåléè ým?Ðò!\@ËÔUµ‡‹wpx ÏƒÛ7>úX\T$¯¤¬¬¢6ÓØ|а‘ün@‹…p -–ŒlS +2ÕwEü8 Á.€6—@„K¨‡sçÎiii 0€ß €f áêÁÕÕ5**ªoß¾†Õ2€ Â%Ô[\\ÜÞjH™Àá)Ø \ 2€‚p tª™2ùÝ"hR—Т¼{ìëó,;óS›6mä•GŒŸ4ÓØ\J¦ëb‰o^zü’ÿ)ý=YF¥G¯Yójú…­¶éÚ½…jSµ¼à[žÑ8mRÃQ¿0·Ãûï\(*ü~!êµäóÇ÷ƒ}<Þ¼|N *ÝGNÐ10_".Þ–µ¶Œ´Tï“GH“23>(«¨õÒè?ÕÀ¸æ@ZŸ˜ÿù믿víÚÅ£ÊY}øð!±I™M°9h&. åxöðžÕ’²²2fIA›ä„7·¯†9œö—îÔ™*ŒôuuØ[VZJÝ}Ÿ”H¦û·n,\½q¶ùÒúnT¼m;2/.*ºpÖ-Ôß‹õ¡ð@Ÿv»*++©»$>’é~äuûÓ~Ì|I¨£Íæ’â"ê. ÇdŠŒY·ûà˜ÉÓëÛn¬]»ÖÆÆ¦Á«=:**ŠÃ’’’ººº†††S¦Li×®êÉÑÓÓkðæ@à \@Ëáyì0I–s.›6ÛDVN¡¸¸èåÓÇ'íIOMövu^¹eY&;+Óíð~’,§ë›.’WRÎùœuù‚ï¯SžG~›8EA¹k½6**ZõFZTø=,àÜÒu[ÇO›Õ¶]{R’–òîo‡}ÂÂmX®=iZ»víŸ>ˆ:wòHBìK?÷ãæ+בeòr¿³µ)-)&mÖÑ3ꢠø%++òj¨«óá›j—‘íBÿÓÄ53%´N—Ðr¤%¿#s³%ÔAJQ1±ác&Èt–ݹzIÖÇtj™ /÷’’b"WoßK•(2º-²²&¡óVDðEï3Ë7ýY¯ ·iCæ¹_rtçÎ×7[Ì,¿H",)1\hA•L˜®×QJÚnËš×ÏžühÌY÷o¹_ç.^a¾j=U¢ÀèJîVVTzpº|Ñßdéª?M™Ø \@Ëѳo¿˜èG'íYº~›¬œnêLÖ»OT}w<~Ú,ÖÂa£ÇÝ}Á¼›øæu֚ͫ:“„Ë'wo7Ûp‰L ?ƒp -É”ÛW,ø÷Zø—Õ5j ¡5lDÿ!ÃDDD˜ËdfTÂTdtc[WA©êÛpæÎPVQc½›“•IærŠÊVùšDæ+ §Öú(UCs3cÆŒ 6 SÀÏ \@ËÑ«¯æÉÀË—¼ÏpóŒLþ§Ot’•›¿r­ŽžµÌלÏdÎüqU’û%§Á[—”’f½›ÿ-Ì%:tä°Ê—¬,æ|nŽáróæÍün4k—Т(¹ÈÊšLé©ÉÑ÷ïDݸüòécç½ÛKKJf™Q df|ø’óYNA‰uE*tvê"Wç& ¿ÔZ.,,Ìz—¤ÕìÌOùy¹2eV•¬¼BFZj@dtI)nþ:€æáZ&e52éÎêïuòОKÞg¨p© Ì áòcÚ{¶pùñÃ{2—WúÏ·ØmÚˆTT”äëÐQ’Yø>)‘›t‘W$á2-ù‡p©ÀèJÂeZJ’z­zýuÍÂ%´Ž6Öÿ÷ ÊbÓŸ¿MüßYŒc§è’p™÷õ u··Æ€˜èG¡þghc]—¢²w¿ÿ ].#+›“•™š¯¡5„YâëÉMc´†ŽxóòùõÀþC†2 DÞ8¸umuÃçÉ]ÍA¿<{x/ÈË}ëAÖu¯ù]ð:5zÒ4jÄ"‚p -‡xÛ¶9Ÿ³ŽÛí*.*ì;`°£[væÇ@Ï¿…ª~H®I-3Û|iÄŸ»7¯ž8¸[Ït‘¬œ|ÖÇŒ¿³÷þ¹Ö®}{¶AÔ»ªö áÒÝÉÖrû^†ŠZæÇôß³±/þ¯£”t~^.çÆÌ02»pÖíFhP'Y¹É³æHt”Œ‰~xÊÉ®¤¤Xsð¸I@BmÔ+öÛ×ë›-f¨vONxûâñ}·£e¥¥ß òyð$ðÂ%´&K-Ÿ>ˆúô!ÍÑæ??:!©ñõÛ¨Û2²],6íâî´{3 —•••lçY²’•W°Ü¾ïØ?Ï{¸’‰YÞ½w_S‹ÕÔm‰×ÚØ9ÚXG^ %ëêZC­ÞØg€¯. å yÎát@°¯ÇÃÛ7?ú($T)§¨ÜÈPƒùK•ºª0›~ŸJ(T¤Ò¢²/!—K×¾$”Š6%Šk_se½²o¥®²¥PÒFE‹$¹re—RYŠJ„ˆ²´hù¿uîîÜ™išêÌ45ßÏsžyšwÎyÏ˼3ç{Μó}—@„K  Â%Ðáhƒp ´A¸Ú \m.€6—@„KSI‰·½öí|•ñBFV6 îöä•÷~d»××BàáÄQiiéîµË?ç}dTÝ"œÏ¥"ƒNqÞ†¬ ÀÂ%ˆ£ïßRÉrW@÷>ýüž|žš,ð–4r— ÊËËnü{öÔñ}>gÈÓ%%TyŸƒø¯$-õ1½­Z5ÛÌÄÆ~è˜ ’’RôÖ ÐP. ‰ûöõËÅs§#ƒüÞç¼– %³¦?}üz•yV%ïÓ+Ïøxúx¸°.â¸Óm¤þª$';ËÿÈþô§)djšÚ]{õ10µì®Óïß6|)05P³s×AQ^ûv\»]Tø=4áiÆ®5Ë”UÕ,mõMÌe[µÔÿ€° \@“õöõ«ˆ@ߨðÂïߤ›7×7679‡öµ¤èê´†yâæ‹§©dŠŽX¹eψ “©Âæ-Z’Ç⢢Г^‘Á~Ìe„Ä„úy_‰÷vÛåïé>aêô©V³UÔ5ho$€Ð \@”üàÞ9ÿ7ãã*ÊËÛÈ+XÌYdd1SA±=õª«o£–W‚›ÍžO&ÎE ò?Üåô£¤xúìy$¼¶Wéð)77þbd€§û¾M«û Ô£VÚ¬Yå—mQá÷¨Ó§æ®\7zÒÔ-eH‰†vçå융È!"èdth`x oD°ßQ㌭ítúÿLó €P \@ÓQVVvíR4‰•ÏS’ÈSu ãv¦šµ”‘ÐÃNzÉÿla¿Ðv±UBVJžV”Wøv»p6ØjîbR(!)Ió?åZÌ4±±g«„P²¸¹ýÂØð3¤ñ7þŠ%Sw~¤ñ¿Ž7’Âé˜Ð˜ \@Óao8êû·än½ûšÎœó븉‚¾P&ýi ye`ÄV>ÚÀˆ„Ë{ׯRá’‰sN&’€,m§˜['ÄÅ„ù{–ühÇÝ÷øF_DËáš*YΘ·Ôzþ2á¬ñuÖKò¸ÐÌ€ë«y¹ïÙJÔ4µyWHÒðˆ “ÉäïépÔƒú4"—Ðt(´Süœ÷‘d²{ׯN³;lŒ>õ{´à|ÊÍåñjÞöpÙFNžw…ÔI¡'½Ÿ%?bTýb^ÏÂ%4>çÿމ ð!Élךeªš&6öã M©«gAQY%';ët|b«6rüÌO…ÄUqQ᥈г§Ž¿}ýŠ<íÔ­çÔ³GM4¤­­Bp M‡tóæã¦‘éÁ$bÞMˆ?´{ó©#û§˜ÛI¾m;Úר¢®AÂevæË}të\Iþ§¼È`¿ó§Oä&ésððÑÆÖvºƒ†ÐØN¡A¸€&¨ÿà¡dzù2<Ð÷rTXÀQ_¯ñ†¦Æ6öjµêYyqQ!óP¨NÿŸܾæç½në<1aA¡~džŸd»h%ªÞdeœõ?VRRÜRF†$à©V³j}º¦¦¦€š á ™@¬ \€@ Sˆ'„K 2%€˜C¸zL©¯¯L æ.€/^lè&@ÃC¸Ú \m.€6—@„K  Â%Ðáhƒp ´A¸Ú \m.€6—@„K  Â%Ðáhƒp ´A¸Ú \m.€6—@„K  Â%ÐáÌ–-[º bÊÉÉI˜«ÃÝ蹇@ƒp iêüÕ ÝñÒ²™dðÁ=Â_/ÞèF$ÜÓ¹¡›Â%Ðáhƒp ´A¸Ú \m.€6—@›fùEe Ýq#%ÁhÓBJ+úR\†wW¤´l&Ѳ™dC·@´””U|ÿQÞЭh‚„–7Ø4ûsÏvá¯B¹ÿën¼¹¢·¾`õíG™ûž ÝŠ&KøÊŸÅqã!æ2ðæŠ•VÒG]w6t+D6X´k¨;ráœK  Â%ˆ¨É»±>•nÞ¼ƒzG5MmuÍNú&fZ¹Î>ñyÝVT‡AÐ „Kh~””¼z™N&òwxÀ }sëyËÛ7t»ètòˆó6äÐ DÂ%ˆ4æ&¶¤¸èíëìwo²ÿŽ=åBDtH`âÍkƒÎËÈʲÍYçU4¸ç©É Ý…nЈ \@ãмEKÍÎ]É4è×QÓgÍÛµfé«—é^ûv,û£é\dš–ú¸¡› êÐ DÂ%4>Z]º9îp[ikzñÜéÑ“ŒúÔcTsÎÜ娰¿c£Óž$——–öê?pÖb­.Ým ~ýøþ]ØõG-ZÊp.øýÛW³?µSRö‹¹þàö c_<{"%%ÕµWŸ_F›<}ký9ÙYþGö§?MyŸóZMS›Ìc`jÙ]§[ƒ¿}ýrÎÿĽëWß½É.).RVUï¥;ÐÂ~ùƒšáŒ§‡ õ7ÕÇn#õ§ð¹–o_ ÌG $‘ë@PIZ×.E~MxDËÿ¶Èj\Ý Æ>ÀàÙ øZ…XvA—Ð(uîÑËÈrVØ©cîÜ R§cî óóf>½}õòóäGîá…ß¾1ªŽq]Š*/.,$9`ëÊùeeeTùý›×È”žšÌÀ¨¦ðßÓĹ€HA¸€ÆJ»kwFå g\_ ã¦Ù/w¤JúìrÀïn"á«vJ*ä1ïÃ{®¯>{\yªÙcsÖBéæÍgÌ_æ²q?õsnžÇL6&©"ýi ù›ze`Ä6Ïh#²É¿wý*s“¿Ë“Ë”š]ºU5>—wø_ …sÎ&¯Qtaö®3Â%4V¯³^2ª&q}5ïcå6»ƒº[yמ:|ÖÏy&\õŽäñSU Ö¾ÐÌ€ûÚsÿ“u¾ä_>îæ•Ø÷9oò?},--åç°Ymרþ£ k,Ý@h}€!–ÝD Â%4VÔHÚšºr}µàó'òØF¾-[¹²ªŸõ·WîÀV"Ûº yüú¥€<~ÊåuÀ‰õ@Zþ§<Ç9VÙ™/ø\/+þ×Bi#'_‡µ4j¢³0IJ€HA¸€Æêε¿È£fgî©¢Uë6d‹þíK|Ûv¬å¹ïrø¬ÿKA~»öJ¬%_ òÉ£œ¼yTTVÉÉÎ:ŸØªïz|<œIªPVUŸµdUoÝ$èHKKKIIMÔ£Æ6ð¿Ju—§4a¢³0IJ€HA¸€FéÁWc¢šIK7‘ë íÚ+“Tñáý[¶T‘žšÂç*r^e²¥ ²§jfT]TAžfg¾ìÑG—w=)î“Çõ{=ºõîË,äó ÿkO¥ €XA¸„ZÛê°àöÕËýÝqØ·ºy¨¡4X‘}tõŽZ ¦Y >ºÆùUÃjtP×T×îdh1ó'½aÕ­ëYò£‹çÎÎhZ¯~?q®…ó&oü×""õÑÿþܲŽüa6kž†Vg®ótìÔååó'EíÒ£7³ðGIÉ)Ïý|®%<ÐGç§ŸYK®œ?G{ôíOuúÿüàö0?ïu{ç5ë½%x+++{“•A¦;×®ŒšhÈÚƒ‡ÒÒR²gO&’eÇš®Ü¼‡mò¥ì±}ãÅs§Y I@$SúÓ”˜³ÁS­fÍû}#UÔ¿&Òå2ÓŸßþûrÌÙÓåå$7˜ÏYXÝÌúÆæÇž:}Šì*Œœ8¥µœBZêãcîn×^‰ôÃ×%ݼù³ä¤ý[×™ØÌQQSÿøþÝ_ÑáÑ¡•5›T^zllmì—ã¼ÁÁÄÆ^]«SFÚ³Gwox(ýñãû·¯ÌªÔ5;¥=Iö9àba¿¨’rÆó'ÁÇ˶jÝA½cNvÖ¥ðIÓ­¨á¯I˜ ‘":$p¢©eqáwÅöü¯E|4ÆnÀ`ptôht.¡v.Ÿ?Gb¢•Ý‚@£ÎZý¶„Ç̬»w?JJrßå\»|ìp|LäO¿üJò"ù‰’â¢÷9oȆáÌ Ï¸È°¾õØ ñ=Jra«6r¦6sôFŒ!_Ùäïo_ ޼ʼz1ŠlNÂ}5;w%_ÐÕµ°þ5€ q= !!1ÙÌÚn™cóæ-ª[PwðòžÞþû¯Îd¢ åÚ: š?M¿Æõ’Ô²ÐqÓŽÕ‹cÃCXËIW¡Ž‘d°Âi·«“#éÏdb§—¿3ŸÛØ»l\u5&ŠLT‰’ŠªË‰Ó>Î$Xx¹î$Õù»ëôMJ¼ãí¶‹LŒªOÿkiÚ{7à¿0¸uô¡aÛ U÷{ð†p µs)"¤­¢’åÜÅdßýRd(ùƒÏ3Ç¥›7Wë¨ea¿P^¡­ÇŽ?H=œá’ Ù×Ðî Â%ÔBê£ÿ‘ï5#KÛfÒÒ#õ§D||ÿNu÷ó­ÎÑH¸ÌJ¯ÅŽà°1ú$\f<ÂVNÝ“C«Kw®KM412z¼B;E5׿œÚ-àœ_BRÒjîb¶!¦Óž$“G5  2õ0ˆLç}$—ÑU-Ù `FL˜Lm›†Ÿô×ùs$Ïr4ºu ‰žpyùü9­ìz$!Àê·%Ïäsø>çÍß±çÏœðŒ‹ ë;Pm‘ߣ$’¸cj3‡äžvJÊäïo_ ޼ʼz1*êô©ð@_ÍÎ]yÜ-ºþ54%W¢ÃÉÛD¢uƒ>J7oN>Q1aAW/DZÚÒÞ€®½ú[Û…ùy»ïØx¸ÿ@f~í¥;`“›çNÇ%O’‰sÁ–22sW®ÿyØÈêj® Pl_ò¢vˆ‘xžšLo…ß¿¥’寀î}úÑ[9GRâ¨`?9…¶ 71 ­Û’”x›”£ßwààl^â'\^Ši«¨d9wqthà¥ÈPò‡„„? ’\¢ÖQËÂ~¡¼B[z8Ã%q4´;Ϙ·T¾â¡]N$˲-r+>Ž ;h³P¾m;2õê÷“VçnvþÅ#Ö¿Aðõõ2dH÷îÜï‚-8äM!¬Ã[r;Ř„ËØˆA„KbæÂå7¯Äædg‘w|íîýÌòCGœ¼påBÄÍ+—È^ʧ¹åíUT•TTû 4É̺MMCTÖ¿†täȑɓ'wìØ±¡““gdd$//ºÿK@»S§NéêêöíÛ·¡"ØÚÚ¶hÑb„ ¤ "’2_~H Õ5; £oj;‡í.£dÇÉÿÈ~Ò¤÷9¯Õ4µ»öêc`jÙ]GDhyzz&$$ôìÙ“ú.ZÊ$›óeÖS_g¾\´vód³ÿܶ‘lw<·©kur÷çsþýÛW³?iuévèttRâ ïƒiO’%%$4´»XÎ]Dö<É™8`óùÆqí2²² nÅ}=\H²ì®ÓoÞï©MÛË穞ÎÛI‡ñvÛåôçQj¶Fׯ2ÅP}ÃeBÜ…Âï߯N6a–Œ549æ¶›$Îêî7ÍŠl>¼Ë¹ñ×Å€£ŒÊT7«ÆE~””ädg]‰;uŒ<5¶¶c›a¢‰Åç½ß¸êúWo^eÊȶZµÕYC»3UÒ[wàŠM»–X²žôÙxûR¦ø¨o¸¼J><¬W{Œ60òqw&åÕ…Ëê†43ž1›ë@‰<†@³Y°œstLÂrî¢1“§Æ„ߺ—õ"íéã‡d:{ê8Ùc?ÕÌfþ²Ö5]¥Qÿ„3e6t‹ !qM™BnƒðSf—ž½“ïÙ»u®ÃzE%eª°GÝà+÷˜óH$»¶¤I™éÏ#ƒNÞ½vÅåDpu7e¡±þüóÏÍ›7×yqÞ²²²Ò«0ÏÈѱ¹Š0×ÈL™•Ç0øÉ^$e¦UÉÉÉh¸$™rÃÂYÇž¿w¡‡N?ÝACÈTŸƒ¥¤þ$ÿ}Nå!Læ{L*ª•¿†3pÖš¦6ëÓ¼ªt¢ÔAÇ"¯³^’Ç…f\_Íã™oêL ß?¬^¿~M}•——ÓX­’ŠêÒ Ûv­Y¶mÕBòtõWÖmP¨kþgSEÝ Œº :µ}ãØúFu¾ä_>îæ•XÒKó?},---+co†úÕÝ»w…óEñå˪‡t³[“4yõ ——"BÉvëÁí\.’Wg/ý³¼>דխgMm Y>o“#'¯ 7r,™ì–9>K~ä¼ÁáÍ«LßûV8íæ³õ¯ÓŠ+œœœjµH¿~ý’’’xÌжm[ccc² 8nÜ8éªK£îܹSç‚€zmßúê(((äççó˜¡C‡Ó¦M#]bøðá’UÇuȃÆ]Ò!I·ä=O¯^½¨cW}úãFG]{ê ¹pÎÿ —Ôð¥ÁÇ“ýÀ™‹V0Kùœ÷Q5¸Û²TIþ§¼:¯mય_ È£l«Ö<ù”›ËãÕ¼ —uøþaEºSBBÚ´iCŽš8q"õ£çÇë¼:®Wíð9ï#yüy؈zÖFY+µ}ãøÔŒô=Ç9VÙ™/xÏ&„~5hР¨¨(Þóð`mmÍcòE¤§§Gýœ¢©©IJ>•ò˜º‡ËŠòòËQa¸s³n ¨ ´ãÌ” æ83¥ð 9S²"Q’ì’éMVFâÍk qÈî¨û¶ ?JJ¨§È ïs^Êû ¤¢Êº :Û¶¯ù‰Âï߸–³ì!iõãûw_ òyŒ/¡¨¬’“u:>‘:ZÖ¨qfJÁ9yЕ$ËÖròäÑ÷ ëoëº:Nµ}ãø9èãáL’¥²ªú¬%«zëh#ß–|¥KIIMôŸëVo¿âÌ”ÐTÕ=\Þ¿•ðáÝÛAÃFmv÷â|•ºÕxâk´ßoZ]«“Õ¼%¾öíß¶þPðy¶OÎÝ„øÔGÿ3´°©î7k ­Ê¥‹ ¿WWýkdJ`#æ™’“š¦6™ -fFûÙ»õœÿ *\ª¨©“pù6û[¸|ûú£ò|˜ÿüÚHvËË˾}ýÒªuf!ïK=˜Ú+w ! ;ã ¢®AB@væË}tkõ¯ÂÌ”””‡‰ç|Ú))» v°3 ô:fç¥%ˆ7.åÁ}ò¸~¯5ú …ó@f£ëWÈ”b¨îá2¶jxËÑ“¹ß¸eÌ$c.ã"Ci—Ä4ÛßþŽ=ÿòÙO—í[ö²¾pçÚ•÷o²¶îåzДÀ¨[õ#VÔ¿B¦6È”¬\ÿw+aþê?~÷ïÙf#'’pYðùõ´[¯¾I‰w"ƒO²Ýœ†°[ïÿüЯ ¨˜—û>+ýy/Ý̈@_~£;hÈÓÇ/E„°Þ…åV|Üžu+:÷èµÏç yJ"уÛ7Âü¼×íñ`]6&,(ÔïØðñ“¨‘eDð3%¥¸¨ÐmóÚŠòò%ë¶’µ`õ»×.ÿsóÚA‘ÔP]5s‚xã>æ¾epœ°áÄ:›…¹‡ÓXú2¥8«c¸üRûïË2²­†ŒÇu½cZµ‘»uõrAþgæÍ é"%%µbÓ®•¶Ó/G6F_å*3s»÷o^#ùì´L³ê­;@¾b‹-ó?ÊzñüZltlø IÉ©3fWWyýkssó={ö4–L™”xÛkßÎW/ddeâns½Í‰ÞA¸q™?þ¤I“0S’x±iÓ&QÈ”LÍ[´Èû{h÷f’zöýIE½ãÇ÷oC|+ìÒS‡šgšíÜèЀë—/Þ³ÅØÚNQI9÷mNDÐÉŶ”‘aD]C«3 —Þn»–lئ®©ýþ훈À“©þ×ZNþk¯^‰)æ6¡'½â"ÃÚ**M˜:]¶uò¹8æ¶»¤¤Xç§bi µ q1ÎLlìÕµ:e¤={t÷f€×Ò?¾û*€ÿ¤úš2eʪU«„œ)™Nx¸¼ÉÊ1a2õÍOrÒ_çÏݹv…”×v )þ‘LIzTtHàDSËâÂï ŠíñÆ©kvJ{’ìsÀÅÂ~Q;%åŒçO‚–mÕºƒzG²=º2iºUó-E¿_uìØqß¾}‚È”¢¶Õ`ÛÒ5tsDHÃå•èð%%£&V7è£tóæä3Ov’®^ˆÄ}ºöêC>²³Ñ° ÐÖÖÞ²eKöÕÜ%÷o%¼{íê´†µœ|l™§å‘d0õ¦ƒ»6E>E&æ<Í›·XàèÄöS#ÉšîÝ"_K, ©’fÒÒ[ö{»mYCÂeEEsé•U–lØ~pçg|<ÉÄ,ïÔ­§õü¥Ôß$:¬pÚíêäI&ÖÅÉw‘·k"Üš5kjžI0’ïDûÉ)´]ฉY¸hݲ'åÃÆè³¦KwÊ£ÝdƒLŒªp#ˆ7ÎØÆÞe㪫1Qd¢J”TT]Nœöñp&áÒËu'™ÈªE¿_ ¯"ÐUÔ훘ºméÄDÃ奈ªßÄ'qÿMœ2vŠ1 —±!ºÉæÌ…Ëo^‰%¹C»œÖîÞÏ,8tÄÉ W.Dܼr)÷]Χ¹åíUTɧ´Ï€A“̬k¼j¯þ5ˆ¹ïßRŸ·=^ÝûTþÈÈÏçùy=Æ í®ËñÓá>·¯^þðî-ƒQ¡ÔA|lMgÎUÕø÷ Ê„©Ó»õêtìPFÚÓÜ·9Ô;jwëna¿H« ûÀd7’ìm;ô:+ƒDÉ.=z[Ï_F*lÙ²òúb²EáýS,Y‘º¦ö…° çÉIsߪuÔþeÔ¸é³~cÝ-×1æÐéè@/ô')¯^¦ËÈʪijÔ7Ô71gA Š I¦'ï¼ß7²þvL¾™g-^EryõPpt­îɧ%ë·¹oß–šLÞæç´¿q£ ŒÊËÊÎú“•)'¯Ð_o¨õ‚åíU:̘¿ŒÔŸ‘þLùÿ‡Û~UŸhHû&†sKLu —5ÎÓ[w [?¨Ï DœÈ§È;ü2×—Zµ‘›bnC¼_·µÔª`󣤄úƒõ” ±Þ‚ ÎÚµW²[ºšL¼gëÔ½çº=îüTH6Òdb+ô »Èú”Ç—•ÎO?“‰÷*•”I|á§1â ºÿL’G\áú’¡¥mG1¸V[ݺØÊI ÜëÈ9?oŸ« ŒbB&¶BµŽZûýϱ¢_Õ훘ºméÄD}ïÐÀÆaÖô§ÿÓŽy~ ïeÎøxúx¸°.â¸Óm¤þª$';ËÿÈþô§)ïs^“=﮽ú˜Zv×ùw7ñÛ—óQ5;w=åµoǵKÑE…ßC*oVñâijx Ï“¤ß¿“””Tê 6dôx#K[9…¶‚ú÷€`pnJ¾ûj6â'­.ÝŽNJ¼ä}0íI²¤„„†v˹‹­U›­.Ý9·tÿÌÿõË9ÿ÷®_}÷&»¤¸HYU½—î@ ûä¶Îû7Ã|H=¤BuÍNCÇè›ÚÎiÞ¼ë<56O4!\‚H#cW§5ÌÓYHX$S|tÄÊ-{FL˜LR¿…žô¢.ø¥<¸}ÃiÙœÒÒÇæý–ö4#íéÕ‹Q.ǃ9ÇЀƅŠbEE…l_ø)7-³ão=^7ÿ«Ï&†«‚üÏ+lLH¬d–d¦?'Sü…pwÿpÖÛž 8¼{3ó®$>’éfü%çãAÌ|ÉOóDÂ%ÐÌÕ·ò|ÜZ]Óg6{>™8!ŸÒƒ»œ~”OŸ=Oߨ¼½J‡O¹¹ñ#<Ý÷mZÝo ž‚b{2[³f•ݘìùE>5wåºÑ“¦R§ÁùÜG¾hȲ“¦Y)*©=¾÷ÈÞ­o²2ü=Ý­ÝLÿ?„Hªêû¿ðëW÷ôM, -fª¨©gg¼tß¾áyJ‰ƒ$\ bCÝÕ‰³N_’,»ëô›÷ûFí®•£ß¿|žêé¼=-õ±·Û.§?R³eg¾8ê²]BBrÖ’•ÃÇOjÙRæþ­„SGö“Ù‚¼QEñÙ<Ñ„p ¢+ì¤÷—üÏö m;P%*êäiEy…ßa· gƒ­æ.&…UñäÊ#_+&6öÌų3*6µ™C¤l&-­WuË8²;[ŸûG€ˆ †k 9lÐð1ÌC{ôúmÕzÇ9V¼ïwPÏM Wo^eÊȶZµÕ™yáWoÝ+6íZbeÈzÒç¥ðÒ?Hm$õR%c&·–“ß½vyʃ{µjžhB¸Ñ•þ4…<Ž20b+m`D>Z÷®_eûh±ÍÙ¥gï¤Ä;Gönë°^QI™*ìÑG7øÊ=A¶„ÍÈê?WtiwéΨ—ž×]Ô빉áj—'—ßÍ5«†¡Èûðï ßïßJ`p ¹3xøè°ëêÜ<‘‚p ¢ëuÖKò¸ÐÌ€ë«yßjšÚ¬OI¦Ü°pÖß±ç¯Å]è¡ÓOwÐÝÁCú Üx‡á®Ô5;±>¥n ]^^Æc‘znbªóµ ÿòùs7¯Ä¾Ïy“ÿéciiiY{3¨Ê•:¨q« ŽÍ)— º>åæòx5ïûG‹müÑ®=uŽ„\8ç‚„KjHüàã‡Û**Í\´Bߨœþæ@¡N‚¬•znb¸Êÿ”ç8ÇŠóŽðl¾~)`TuOcóD Â%ˆ.Ee•œì¬Óñ‰Ô>h8ï•B¢¤Ý2G2½ÉÊH¼y-!îÂãûwÝ·møQR‚ALÄYý71œ|<œI²TVUŸµdUoÝmäÛJKKKIIMÔƒu6ù¶í>¾÷µ Ÿí–`õižHA¸Ñ¥¢®A>ZÙ™/{ôÑ­gUjšÚd2´˜ìwdïÖsþ'.Ä›¦”÷Éãú½Ýz÷erÈl¯Ü„ËìŒ<Â¥ š'4— ZŠ‹ ™÷ÓÓéÿóƒÛ7Âü¼×íñ`'&,(ÔïØðñ“¨ñªãêäø¿[ óWÿñë¸ÏY9ф˂ϟÑxh\’o{íÛù*ã…Œ¬l@Üm®ãgÕjP-h¤ÐÄ›®>æ¾eT˜d-ô?â.!!QQQñíë—V­ÛÝACž>~x)"„õî>·âãö¬[ѹG¯}>gÔ<¡A¸QA>ðäc8ÑÔ²¸ð»‚b{ck»È`¿„¸ç &6öêZ2Òž=º{3Àë@éß¿}å]aó-ò>äÚ½™TÛ³ïO*ê?¾â[9ÌX—ž:Bù7è*--ݽv9uk`æÅ5Š :yÄyFS‚ž &hßÄp¥®Ù)íI²Ï ûEí””3ž? >~X¶Uëês²³.…‡LšnÕ¼EË)æ6¡'½â"ÃÚ**M˜:]¶u²‡sÌmwII±ÎOÿÄMA4Oh.ATt×é›”xÇÛm™UGÈr…ÓnW'Çø˜H2±ÎÜKw€ÝÒßyWh5wÉý[ ï^g»:­a-o)#ó›ÃzÚÛ ÙÓ òį€î}*ï¥ÆOPxžš,ð–p¡'ˆ Ú71\ÛØ»l\u5&ŠLT‰’ŠªË‰Ó>Î$\z¹î$Yµ¢²Ê’ ÛîüãŒ'™˜‹wêÖÓzþRêoA4Oh.AT,Y¿Í}û†´Ôd)))æð³z#Æ:èå‘þ$åÕËtYY5Mí‘ú†ú&æ5Ž(D>½.ÇO‡úܾzùû· F…Rµ>™Îœ«ª¡)øˆ–òò²Åž=uœúÉéGI UÎú³TX‡A¦ÅªÙf&6öCÇL”ÄYÂÀÖ è bƒöM W£ ŒÊËÊÎú“•)'¯Ð_o¨õ‚åíU:̘¿ŒÔŸ‘þLùÿ‡š0uºº¦ö…° çÉIsߪuÔþeÔ¸é³~£î6) æ Â%Û®?×#l…äÓ¾×;s6E%eò¥P«Õ1µk¯d·t5™jh.4iß¾~¹xîtdßûœ×Ôõž³¦?}üz•y.ï“êÎøxúx¸°.â¸Óm¤þª$';ËÿÈþô§)däÛ¿k¯>¦–ÝuúýÛ†/æ£jvîz (Êkߎk—¢‹ ¿‡&<"ÍØµf™²ªº‘¥-Ù`ðšꃳ0Ð~6%Õ• bõ|ì2±ªuÔÚPç§ŸÉÄ{Õü4O!\@“õöõ«ˆ@ߨðÂïߤ›7×7679‡öµ|àê´†yºÞ‹§©dŠŽX¹eψ “©BêhDqQQèI¯Èàïáq$$&ÔÏûJt¸·Û.O÷ S§Oµš­¢®A{#Å™pº=àÿ!\@”üàÞ9ÿ7ãã*ÊËÛÈ+XÌYdd1SA±=õª«o£–×ÿšÍžO&ÎE ò?Üåô£¤xúìy$µ´Wéð)77þbd€§û¾M«û Ô£VÚ¬Yå—mQá÷¨Ó§æ®\7zÒTê’U íÎËÿØ9k‘CDÐÉèÐÀð@߈`¿!£Æ[Ûéô¯áÔˆw7` 'Â%4eee×.E“<ñ<%‰Q5Pœñ » SÍZÊÈha'½¿ä¶°_h»Ø*!+%O+Ê+ü»]8LÝÿWBR’Qu÷C‹™&6öl•ØA7·_~†4þÆ_±dê®Ó4þ×ñ"~r•~7` '°@¸€¦ÃÞpTÕÅ[Œn½ûšÎœó븉‚¾<"ýi ye`ÄV>ÚÀˆDŠ{ׯR‘‚‰sN&}Œ,m§˜['ÄÅ„ù{–ühÇÝ÷øF_DË›0áwz „Kh:¨H1cÞRëùË„³Æ×Y/ÉãB3®¯æå²ßÿWMS›w…$˜0™LþžîG=¨ÔŠð»=€Â%4 í?ç}$[â{ׯN³;lŒ>õ+¤à|ÊÍåñjÞöHÑFNžw…ÔX9¡'½Ÿ%?bTýNZÏŠ!áwz „Kh:|ÎÿàC¶Ç»Ö,SÕÐ4±±ghʼáí•Ur²³NÇ'¶j#ÇÏüÌAp8^Š={êøÛׯUÃ)O1{ÔDCÚÚ*6„ß è ,. énÞ|¼Ñ42=¸sƒd‹» ñ‡vo>udÿs2±Ýð—*ê$Rdg¾ìÑG·Î•äÊ‹ ö;úTAþg’9mlm§;hí+Âï ô—Ðõ<”L¯3_†ú^Ž 8êâë5ÞÐÔØÆ^­£V=+/.*dÓéÿóƒÛ7Âü¼×íñ`'&,(ÔïØðñ“l­äQÕ›¬Œ³þÇã"ÂJJŠ[ÊÈè3ÕjVgãŸÚ è Õ@¸€&K]«Ó¢µ›g-v¸ìw>$ :,(êîÓ:WH’ÉÑ!M-‹ ¿+(¶7¶¶‹ öKˆ‹qÞà`bcOÖ˜‘öìÑÝ›^Jüøþí+ï çMÓ¯(/WRQb1ÓÀÔ‚Ï_T¡Vhï ôž. ‰#Ûéé³~#Ûûë—cÎùŸ¨OUÝuú&%ÞñvÛE&FÕÚ²­Z¯pÚíêäI&Ö™{é°[ú{ öîKBɰ±1„¡ ÑØ è ¨ÉAAÈ5‚ ‚ ù &CA!Ôd‚ ‚ ä#UZQ‹“Æ I J—’èèke-î]¡¢£”DG©vdG Â%µ4Ú×Ê:²£h›Èu””Ú3w“„&_öÞ;WÁy·QªkihøÁ?ê¯]â¬Í¦£T»¨C{Óî\¡B©“ôQï]dG Ò*pdáqžx?‚ ‚ ù &C„#fôc|+ݾ½2µ·ªšUMÓÈt~/õ>M}$19‹ŽZú)„tZš!\ïh̤­‚š An¨®ªz—• ^Ç…Ÿ025·^êÜM¾'Ùqñ’øÈ“G):"ùÞ­C‘‰2²²¬¹ë‚tÒ_¾ ;уó ázGc† mÔd‚pCûÕúô…2â—‰ó,õX¿â]Væ±};ÿÚIvh<#ãås²Ca0C¤¥ &C¤µ¨kõsÙé³ÚÎìïØÓ“f˜ 2EÔ7zßÏÕ„˜›—’2Ò^ÔÕÔè1XðÇu-m»é¿~ˆ¹ó¬CGÖO}ÿV6üÐ Š¡ï<¹7òø¡7¯Ó$%%ûêüÏÄÉ3çýƸþüÜœ°#2_¥æ¿WUÓ€6ÓÍ,µõ3¶ùVö56ìÄ£;7>äåVUV(ªPuõ ,-ƒDƒ3ÁÁ~^Œÿ…Ë.Ÿ F³8ìâÛ×/æ @ŽŒLrërREù÷³·Ÿñ`[‹&fwéÁúAž§3! Ôd‚ð€>:º&– bNòà.]“±r|ÿž˜Ð@úÛû7®¦¿xæWþí¥áÌJ£Ÿ"ê+ËËaŒÜ¾Ú¡¶¶–¨|ï”Ì—/è§^`lóv[ƒ(ñöÍ«—P®'_½mÏø©3‰Ê/¥ŸWÙ˜ÂXK_ÿÛÌt(×/Äù†ÅQÕ5Ùÿ§œtñ#àŠŠ³'ÅG…²_¡˜ÀI†CzP0Cò@M† oÐÕF9uümF“÷úd¥§Áˆ+!!af»xêœyò J/_úxìÞ°²²¢ÀŸý ”Tý/UeeÅáÝ[ÇM™1¡ƒJ/µâÂ×.œ8vðïØÓ“MÌèÀPzÈíºªrÞïKæ˜÷TRþTTtýïøðß}[Ö 6EÜ`âçí¶Þà¥nÖè«ÓØËO÷Œ—Ï!·ýG¡fþïPXOäpØpEù÷„Ó§¯Þ8iÆlâ˜Ã>C„$=(˜!y &C„7hôÕ¦ÔŸQxÝTƒ¤èpXN1™»h¥ Q3È`¤WP”£ù ú¹ 6ÔTWÃX»n§7ñVUMÃÚÁùkéçø¨Ð¿Ï†A7æd ¼µX´Üî5D%j/xK«£…úû\8eµø¨Ì{÷VF¶ÓÚíž½4~ÌΟ]µÅÃÉʸÙÛƒ8ìB¢]½ƒVé§c [S›EÍþkbû ’ô `† äš AÞÐCA –% ›jðúyýí2Sç˜3VJ·oÿ›ƒ³×浜tÁ:zΜƒnæ«TxM,'N7aj3iº ‡îÜ †C€F.©iõk¾ˆ}vA‡µ¥8Ã>C„$=(˜!y &C„7¼ÏÉ¢4œŸhªAIqýx¦LíÅTß·¿‡]°ÞÊ£Lí ËO #%ÀòùÓï½è§(ûRz51öÞµK…ùy¥ŸŠkjj89Ó¢.Øl 1„}†OzP0C’@M† o fUÓìÛTƒ/Ÿ?Á²‹\w¦zEU»è©¨ÌT#Û¹ ,˾~å§"vç0è§gJ?•¸Ø[å¾}Ãa§ŒpØ.]å¸è¥­Â>C„$=(˜!y &C„7<¸õ,Õú4©É:uî£Ý·¯_äº÷`¬/úÏa_¿”öè©ÀXSö¥–]åºÁR^Q)?7çôõäN]º²YI°Ÿ' ·Š*ÔNkè ---))9k„N³pئnKOØgˆ¤3!Ôd‚ð€'îÞ¸˜ %-=vò´¦Úô詃îǦA7óe*‡½ä¿{Ë4èÂøG¬™Òp35¼Í}›¥3PŸÍJRŸ<†å¦½~ý ¢WrxR„Ã.VšÍ!I fBBªÉ˜¼l ¤¤¤”©jT Mc Û¡£Æ >*ñDØì~S’ïÛ·ë]öYÙð+÷É©çå³ÿîß¶^Ì_°´Q3r‚ÞšZYéiÿ$œÓÒ@¯¬®ª:p€ÃŽâ"‚õ†g¬¹– KAC`©7dø“ûwcB7îñcls1&òlèñqSfØ9®†·ÅE°døÃŽøJHHÐh´oe_;5\ð¢SYQNŸ§€Ã.&8É!I fˆˆÐ¨N`BxF.RMÖ(555p¤åþ«“ÍVoÝCvDH3ðÜ r`÷†•ŸKŠ) nz¼Z-Â…ùïßf¦ß¿yõâ¹Ó´º:SÍí—³io4Çüæ¥Ä„Ó§ºË+L˜6«s×n/Ÿß¿»GO…¼œìf»“nßþõ‹”Û7šÚØ+©R‹ ?ü“—t6¢~ͦõëͱ^zûÊEO×5¦6‹¨êšÙ¯Ÿ=¼~ì`Muõ÷oeÄz¨jši/‚zY,rì¡ ˜žä/Û©³2µw~nÎå¸èó¬ˆ)=a …á6):bš™eeù÷nò=9ì!hQ†IzP0CòjMÆ4–Ã\˜Ÿ_Ú3'®ÄÇ 2ÊŒ¬ØNà¹Aoqa!Èö ×Èl‡‚€FM%$$fη^èìÒ¾}6ŸÕ9zÔxÃû7ÿ9áç …¨ìÚ­»çñH‡¹FÍv ƒúr—-;×ýq).š±ÞÌÆž8³£æ*·ÝÞn.×/ÆCal£«?láŠ?‰×slym^{ãb¢FAIÅëÄé`?Oqyï‚Büøhë JI~èã…Òð‹Äaâ ×"$éAÁ ˜‚°]Òá¡ÖdLÀqI/>¿-]!×Cþ°‡ÛÕ„s¨É„žôVWU/ÁÛ5#\ÐU®›z_Í~:¿L™®7dx³ía`þkŸdÿ£;7Þf¼îÜ¥ë á£lVvm¸H$))Éþã555£&üºëH赤¸”Ǿ–~î7`ÐØ_Œf´‚Aýð餈c~™i©ï²2edeUÕ4&™šÓ×?iºI]mí¹° ¼œ·ð/ 5ÆzÙÊžJÊ¿98ÃG²3_+*ÿxÐÏiÓ_w׌—/à³ôéC9é!hQ†IzP0Cò%MFg¬¡h²ìô4J½7E¹³õì÷o³7l…ã0Æfç#Oxî ªkú†Åu”AÛ Þ@Øýªkõƒ8@Œ <”‘ö¢„D/ -ËÅŽcÆÍØôrdݘA¯º–ö«çO×I5ëÌÈÓ‡÷âƒa=°BªšæC#3;{¦cw]ŠÅ .@Y?"Ñ®Õâ?˜¦Í„‚¥’j/N:9Î^‘Ë+(ÂHÉ>°_g™BaªTí­~ ,–±FÙ½Üu!êÇë\ÐÒ™»ô`ßOÒƒ‚Ò†-‘ ’𬶦†ò?o ØŽëÜ÷ý¹Ð<èÀÄ @^N6h)))—ÞB²­Û„|©¨(rÿ®›³}MþRŸ&oYa¿ópS²ù8‡Àœô¶È-81:Ü÷VF¼ÕåÞõËžA‘tYÆa„d¼|þ.+S䦇ã.D×j ‘IŠ  0=~ Z"A$5Ùµ ç)õÖi?¦Šé7`ÍòU°q½Ý\ö ­F««óÙº¡²¢|¡³K_ݤÛÖl°Î-/+óÝéjdjala«¤JÍÍÎòuwMOM Eh²F z9÷nÔ WFV–ÂrÓ'nÁ¹oßõr—h·Àiõ¸)3:v”yüïíSG@ËÈÀÃÄÃPœGˆpAÈ!ïÇ÷n©ªi,^µA½¯6 ½ïsÏ„ý{þ:ÓܺÙ5 mL„OˆH%MV]U•Ÿ›s-).æÔqJÃC4ô?ͳ[’|÷VJòý¸ˆ¨?~"õi²þˆÑsmíÉ‹·mBÌpÚeÄ8CÇ [‰Ê>:ºKÖnr±·"æén Î=€97èåÜ-ør\tMu5¬ Ä"Qc8sNç®r»7¬L}ò¨¥"\à°nóF[8<ݾfÓŸ@øe"A!¦Â?DE$µ&c3ûˆÍ²•#ÇM¢¿…!|íO'Kc8ÒR¦ö=äÓE®ŒÓÄÐŽð+;Æ·ZÚ”úy}šôŸ¦´Ü·ÑÆLpîüøßÛõ}͘ÍX YsçYk"D8§—z¿°¸Äèðo\ùø¡ ²¢BQEUUMÃÄÒnÈHv—¼qÓá¢"„Z“5 ŒŽ3ÍmteªWPRYáºÃc½ó޵õó߬Ûé-¯¨DF€âÓí„‘H];›Þ–ºóR83èåÐ-˜X¿‚2;ï<."DZD7ùžÖÎPZúA¼!ZÀô@ø‡Hˆ¡ÖdŒ_3¶a©õóÇ;ÈȲ 2‚‘ã »õÿ\R ËácÇ *L1…¸»«E´Ô—ÂA/çnÁ„±l§Î¼A „_$µ&cDBBÂyóN'Kã‹1‘c §=޵ÍÉCÞ°­;w•ƒeÈ!ï%k6 >N„ -uç¥p`Ð˹[°\÷Å…ʾ”·‘‡"‚ "ð‹‘ÑdU]Ój©SÈÁ}vl:•È4j¦>MŽ î¡ èušqJɯ_Ù³qUÝ}Ágø!‚´ãú,l&9)É÷íÛõ.ûŒ¬lø•ûd‡ƒpƒ¨ˆÓd’’’«¶x¬¶›w5áÜXC£Q~%êOøyåådŸ:“¨±óŸÄØ·®A=lzRCk˜ zùáÎ˹[ð,s›³']‰é.¯0uö<ÙÎ]à§ö¸ÏJ½¡?Tú#ˆHyòˆç깚š¼ ›]úTÒˆÈ!*"AÄ4ÐWw œ1¡¾;7û1è*×-%ùABTh×nÝ—¹l¡7sܸ F\¨é6È`$‰‹3¬½ÛÖÓh´¥nf¼€ó‚?ÖÂüõpT’ð8'pÍÑ£GÿóŸÿ ,J? ¬½>>ÞÌÌLQQ‘ìXøEEy¹‰!ý¢²?ð‚40î*ýmÐùk63¶´ƒÂãÈÈãàÁƒ:::ó˜8cÝMíÖúF z9ôæ¼Ý‚ ô†‡Â¾k#BRRRA,ƒ$qöæÕ˸ˆà´”'Å…Úµk§ ¬:zÒK;8fel–ù*5:øèÛÌôyï ZŸ¾³ûéöÛ¦ÎÊ0Õ7j`öö™ÅÊ„þòåËþþþòòò¦¦¦gMÞ²Â~çáÂf·)8Ù§lÒ†•/¥ŸWÙ˜‚£×Àá”ëâ@k‚â¤×‹DÊÕÖÖþÓ@Ûg" j2QÅÒ,¤‹³Cû`øœ÷ûÒs­ä”*++ž?~xdïv›Ã| ¿Ôâ¢Âcûv‚ ›ffij½PQEµäcÑ…³gC‡ôúeò4%Õ^-ê´Q{ šÐ VœñÖõY²!Èò²2ß®F¦Æ¶JªÔÜì,_w×ôÔPQ Éæÿî…õd*‡û´Ñ´!fÆf]gˆŸ2m½ÁKÿܬѷ~*Ĭô—žîK>nûÍD.åPœ‘j2‘ÅÒ,d‰³Üìú‰âÌlì‰SbRÒÒ£æÑ޲¾¨ hXUU Úk…ëëÅÊÔÞ0lƒV»–w.ìDKŸŠjÊÀMèéFœñÐõ™˜;äˈq†„”úèè.Y»ÉÅÞê]V&›Ïr¸O›J›FÉ{÷VF¶ÓÚížÄm²À}ƒU[<œ¬ŒohÝ”CqF¨ÉÚ¬âŒìˆ¡CÀâL«ÿ€”äGön_¼f“¼ÂtúQ×ÑÛ¤§¦ÀÒÄrÓg§ÏµM–ÙŠÇ蘼äÑ„žVqVWWÇ«•óÃõÙÄêÿÝý£¡¥Mi8ÕÊæ#-ݧ¬-Yñhä⦚Výé´’?ýÙÚ@Ê±Š³™&sHŒ§ÍƒšŒöïß¿uëV>­üóçÏÅ Ðob@„ iiiÆ[¬H¡²²’H’oß¾ñO“s]¾àæ¥Ä[W.èè Ö1ZäèÃF2>ÁZ˜_ÂŒ~Ë%•úK–ôÓi\Àd`/œ&ô¥¥¥Íˆ ëD>ð63yîúLUÓd|K¸¹ÔÕÕ²ùHK÷)SÚ4EÙ—Ò«‰±÷®]‚.ýT¿Ý@¾4ºr¾¦œÀòþ;"C>—~@wb j2rXµj•››[‹>2xðà””6 ”””ÌÌÌà8füøñĘwóæÍVE‰ð‡êÿÝÌÎsüýýÙ4€Ä䕈¾ýõŽD_ˆ ;š,-å ”¨ ÿîò ¶Ž«Œæ˜m>—|¤°81ÐkJ?•pÝ;“½pšÐËÉÉñïØ ’R‚M™iÓ¦A>Ìš5«K—zÇ‹mÛ¶ñ6Þº>Ë´üø¡¥û”)mÒÒÅÞªQ7Fr­ÌSš½×E__Ÿ¸ð¢­]V²¢†ggRVP“‰<¬R A˜°cØBg(y9ÙÉ÷nݾráùㇾ;\««ªf™Û óß*ù¨ ¤ÂøAB«uï©À~ýåß¿5õ'¦óhBO‡UŠñÒ]Ÿ[ºO99íìç ‚LQ…ºÀiíýa]äºKKK÷lÖÆf"rLR  ¨ÉD”bH³(ÅXQUÓ€blazdïöذ„&SR¥‚&+È}Ç¤É Þ¿ƒ¥¢ÊÏë>íÚIÖÕÕ2z˜R&Îà04¡¤#×g~ìÓÔ'a¹i¯_¿ƒè•¬§ÍD1åPŠ‘ j2¥Ò,Â#żÝ\þûïm‡uý2ùçí2¦ƒ&ûòùñ¶Ÿn½W|ÔI&{bލ~~^Xé&/_RT˜“™®«?Œ^y>"„Ã`ÄÖ„^ðRŒ€D×gèšÞ?öiqQ…å‚{Ø_ F?l¡”C)&$p©É„Íæ,%ùþ±}»Þe¿‘‘• ¿rŸìpø‚­­íðáÃ/ň}Í„”””2Uª¡ila;tÔX^õÅ´M3aË=¡¢_¿~þþþ¤K1:í;t(ùXtx÷V#ûªDí]\XR?{“V=¢Í\»ÅIgÃï\ýÛ϶9Ö å‹ òÏGž¼ûÏ¥Ž22ŒsÆöRïš,ÐÇÃÉuUM£° ï|ÄÉ—ÏþÛ¹«\Ù—ÒfƒCú1cÆŒ7NÀRŒ)®Ï Å Ù’¢#¦™YV–ï&ß“û”ª¦™‘ö"ø —Å"Ç ŠÙéiQAþ²:+S{ççæ\Ž‹ž1Ϫ}‡ŽÂŸrrrrîîî|’bÂö[-:„ódñ‘'xîàá~ª©©Ã/Â&–>rÛcݺud‡ðØæ¹oß@¹ãêdc³Õ[÷ðd\ìGž§“H3¹²£ø‰Õb§ÇÿÞþð>×Ûm=c=ˆ-ú}E0j:¬ÛrÈcKÂéSPèmÚ·ï°ÌÅñ¢è³gþMKyâdiLÔHIKo;è³m=h2ÆþN 14¡·±±!«k²\ŸµõêO»‚p‡Biüاslym^{ãb¢FAIÅëÄé`?OÐdǼwA®…?åÔÔÔ\]]ùÚwˆ­NàR“µfK¥·b¡F#obCï9®=§Kå L{rº0?ïæ¥Ä3'à(pÁ(Pf­ì‚u?r’f¼ ëRÕ4Ç™ÙÙÓ b9 O<khš,;=Òppìl=ûýÛ,Ç [gηflv>òd€çªº¦oX\£ÇkÌcÝìoGàG:½]?¿ö›W/ã"‚ÓRž~h×®‚²êèISL,íºvëÞª… "6 NàB'ðì<YEEù“ûwÝœíé“A§>MÞ²Â~çá!£Æ°ù8l8o·õô«¼0(B¹žt~õ¶=ã§ÎüÑEÃÉÞÊŠŠ³'Ïd±áKéçU6¦°•é5o3Ó¡\¿²Ä½>1:Ü÷Vú´{°5¡Ü»~Ù3(’¾¹9 O<©mØÑ„Y ˆ­uîûþ\ht`|»è3³çådÃwLJJÊe§7?®V°ÒštbJ`à[Æ«ìŒW7þNð ŠbÚAáÔ ÍÂ3M&Ùà_[^Væ»ÓÕÈÔÂØÂVI•š›åëîšžš[¶õüß °jgØ.‡<ܪ«*çý¾ÔhŽyO%åOEE×ÿŽðÝ·eÝ`ƒQÝä{Ržõ£ÔŸŒùžpúÔâÕ'͘ÝFø†iY×âçôéÒ?7kô­ŸÇ/+ýe€§{ÆËç>nûÍrß¾9êå.!ÑnÓêqSftì(óøßÛ§Ž€f‘‡‰‡9 O<¹vá<,‰-L©Ÿ¹`ÍòU À¼Ý\ö ­F««óÙº¡²¢|¡³ 44µïhJ ŸÓáG:AMÈ¡}ðKŸ1×J^A©²²âùã‡GöneàK÷?FAZê„fá™&#žx‚°FŒ3¤[}tt—¬ÝäboÅ~^ǘ“_K?[,Zn÷Ç¢F‰Ú ÞÒêh¡þ>ÎE&¬ÄɘÒO%°#Mm±'ïÝ[ÙNk·{Òoó o°j‹‡“•1ã…êËqÑ5ÕÕ°6H¢ÆpæœÎ]åvoX™úäQ‹Â+ª«ªòss®%ÅÅœ:Nixœ›þ§yvK’ïÞJI¾õçÂOÀ1þˆÑsmí[+Ó)7»~âG3{┘”´ô¨s8Œk÷"‚ ˆ˜ƒ:¡Yx¿‰Õÿ»SC«~Ö“b¶Fª™¯Ra9qº Sý¤é&ðÏ<ºsƒéŸamÉŠG@#'-Õã*ùøÓ_ Ôn}G3f369nRÌg\‡×&it–2›e+a‹ÑßÂWbíO'KãCÞÊÔÞ¡‡|ºÈuƒ¤'¾* •é¤Õ@Jòƒ#{·/^³I^áÇ,_:õ£®=âgÔ‚ âꄦà½&£ªi2¾%<¼êêjÙ|ä}N,—ÏŸÞè_KXö“ªš'‘”})½š{ïÚ¥Âü¼ÒOÅ555µµÌa+WPVml\†'>@¶Í4·Ñ<”©^AIe…ëõÎ;Ö.‡·ëvzË+* ,ªV¦H1×å n^J¼u傎Þ`ý£õGŽ8l¤H?”Ž "< Nh Þk2âÂm‹øTTÄæ¯%™ÿ™.]åš]gé§{+V2&ʾ~¡4ÌÚÇÃðÚ$Œ×ài4Ú†¥ÖÏ?ì #Ë*ÈF6\ïû\R ËácÇ *ÌzZ™N}û뉾v4YZÊ(QAþÝålWÍ1ç}¸‚ bꄦ ¿KyE¥üÜœÓד ±Ü,ìgë&öó„ ­¨B]à´v€þ°.rÝ¥¥¥%%%gÐal&×½GqáPÊl¯Ö™úä1,7íõë7`½’U÷TT†m›ý†Í¶æGx¢U]Ój©SÈÁ}vl:•È”…©O“cÃ{((zZ³p~\DÈézCš™5‘Wðp©ªi@1¶° =²w{lØ Ôd‚ ‚GLti𬲢œn„£õ“ûwcB7îñcls1&òlèñqSfÏš¶ˆâ¢Jƒ¼e¬ ;â Ú™F£}+ûÚ©s½)¯þˆÑ¯ž?½|>šqn߯_Ù³qUÝ}Ágø^`®Ý’›—³^§x¹¯Ù¶—^{ÖgëZ]ÓÆí¦ËÖýµ{ÃÊý[7ŒŒoÖú†kx˜NÞn.ÿý÷¶Ãº¿~™üó΀ ÓŒA“}ùü‰Á#”ÆìY\6KcDÀ0%I£ù€IÒ–C@‚&ƒM :):bš™eeù÷nò=çX/Œ ½}墧ëS›ETuÍìŒ×ÏÞ ?v°¦ºúû·2.z¡ªif¤½>èe±È±‡‚bvzZT¿l§ÎÊÔÞ f/ÇEϘgÕ¾CÇYæ6gO»Ó]^aêìy²»À×þ¸ÏJ½¡?¶>?ÂkHJJ®Úâ±ÚnÞÕ„sc FMø•¨?áç•—“=~êL¢rñŸÄØ·®A=è3ž‡Áótjß¡CÉǢû·ÂjûªDí]\XR?QV=žÇPZaŒôâwI‚"¢ˆ­N A“ië JI~èã…Òp@›`•Ûno7—ëã¡06ÖÕ¶pÅŸ\ô2Çf‘׿µ7.&@!j”T¼Nœöó„m}Ì{èZ^QÉÉÕýЮ¿Î@¡\³_k‡Äk~„×6è«;Ž |wnöbÐU®ìÙ„¨Ð®Ýº/sÙBoæ¸qd0Ôƒtd0’·1ð<¬;=þ÷ö‡÷¹Þnëë;ÊÈò®8±¢Q{`t GaMÌ6ŒØê4™Ó¦¾î®/_HJJÒ'j5Þðð餈c~™i©ï²2edeUÕ4&™šs7Á¤é&uµµç‚òrÞ‚V2jŒõ²•=•”sp†õgg¾Vüßs­ {©jb"Ó_¤¨öÖøÏÄÉó,!,ø^›ÁvùÊ{×.AúöpƒŒôÙ¶žF£-ýs3ãÙ`Èò¬…£Uøëá¨$ÞÚ+ñ<àëçt:."øþ«?P(4eÕÃF˜Ù.V饯ÃÈÅ™ººÚ»ÿ\:w*ˆ8íϵ=0ÏŠ×þ>ŽqÇNm×N¬¿×ÂO’3DD[À¥&kô¥©£¦zؾ{#X›É+(Ânà¢ß¦êe …©Rµ·ú°X¦J½¡Ã¡°ïš“ðÚ$ìF!#ã®Òß¿Öh3cK;(-í‹“4ãG:õè©°pÅ:(Í„‹´œoe_ÿŽ=Z˜ÿžx0ªQûyJs7±1*æÄ¸)zˆÄc½³¢ ÕÄÒ~IÙ?ýŽð “„ë ¡pkeÒ"P'pP*tôÄÉs¬ l2ñ„çIÂ+k fÂgP“!Âjkko]N‚6=5…Ò0ÏœßN=Ÿ·72¹ 0{£b•a æ‹–_Š;ñßýçm½Áÿ/S¦‹ù-¤¼Eh“3!Ôd‚ð…EÆ’ ô0ÈÌÖþ—ÉÓø}[46ÀlŒŠA˜XÚÍ2·¾}åbLèñ×/žíu]ä»'$éÏ#[„?I0CA‚š A¾@Œµ¿-]aíà,˜¹°nÖ¨$Âø©3¡„ø†õ#þ)„W’`† ‚5‚ |0¡‡QêÑsí54"®ñ.l€›5*&fd8{2ðõ‹g”†‹V­‰aBø“3$¨Éá Á‰7¯_Œ †±Êc½³J/5S›E“Íøg±Å… 0£âÊŠòËçÏž;Tðþ¥a~ÈÙ¿ý>qš1obEþ$Á A j2Aø‚tûöSLæByòà. ºo_?¼{ë©#f™Û@aò˜ã ¼².ýTšxúÔ—ÒÏ0$7iŽõBý£y'BGD“3á¨Éá/CFŽòþmV\DÈÕ„˜ð£~Ñ!Ǧ›Í±Y¤Ú[½õë§·Þ8/'û\XЕó1UU•ed@̶ZÐìEHëák’ðÐÊ3á+¨ÉTuMÇ [ü±æBLTBThbtxRLdÂÃW­Y'“Qqëm€—Î5¢ÕÕ)(©Ì²°nfÁù5P„'ð¨ÉAAÈ5‚ ‚ ù &C¤žn¤$$pznqsAHäÿXÐA+5VŠIEND®B`‚PKÖ5.I æ…ÄÃaÃa5Pictures/1000000000000374000001214ACA3A0C00DA4567.png‰PNG  IHDRt!¸.uaŠIDATxœìÝ \LëÿðV*RQT—ºtqmY²EEÉzí²wmWö¢Ù"”´‘h•í–åZ/×*-RD(K‹Ôÿ[çþç7wªijÎ4-Ÿ÷ë¼æ5óÌ9Ïyšy:ç3gΫ¾ñB¸€šíRøЉÖSgûyì½vÚú·ù|fæ>Fø=/ïÝÛ´«"ïŽ íþ˯”ùÌOòrsÒÓR¯œ?yÔýbhP}žE½R.lØXÁÌfºAæ*ªtÿëç¬ÔWI—Ï……8ìç¥ÙFg¸™UY-¾ñB¸vL™2eĈ£GnذaU®÷BH`e«ó"Nù]=Ew$%%YP¶^=õVZ–Óæ(*5qÛüÕS2\ò¨W¿AKí6f.Plª¼ÏѲ,Ï"7£/Òíjç=z={s ›4¥©c×îZmÚíÙòGtdŸh(| â…p ì8s挗——œœÜÈ‘#ÍÍÍ«&eÆ<üçUBü+[YÙF£Cü=¾w»‹¾A…*é=h…ËäxÞùèkhDá21öOyRü ºÕjÛ¾Ô¥†›Zô4T©©2Ÿš…¯@¼.€MÙÙÙ§ŠUMʼH·†£Lèv°±…ËóÁ —?è–â©à‹üÈϧ[I))žrÕ-)ž;`9}nÉ¥hþrs¡ð5ˆÂ%ˆD¤ÌÜœì+çÃ5Ûè´ëÔ…êü¤«­Óá¯Kçæ®X''_ÝŒ¾D·´¬à‹D )u‘1Ö¶n›ÖÛçód˜‰¹^¯ÞõêÕ¼ZVj/„K-Ñ¥ÌkÏfû:x”)§d°±éaW'JœF&å.žŸŸÿþmÚõ?Ïùt“(Ju“Ë]ä{^^ZJrTDpÐñÃôÐdâTž†›Z~ÊÈð;äv=ê|ø¸qã ôÏ?ÿTºž´”äÇ÷îèõê­¬ªÆ)l¢¬Ò£w¿;×¢_'%hhµæ_ƒ””tó–­´Ú´miÓ­WÁWMv”… ŸÁÌU[hØÎ[BSV様ûwŸ>¸KMJŠ õ?vçj”ËÑj'ÿU_€¸ \Ô!”, ET¹’’RfffYÏ2™’ùN¼qãÆÂ¯îBÈ)ú[îߺ^êÁEzvÊ‚e%ËK^ ‡?îùiu+fN¤D[_N^ÀËä((* LÓT;ûO:¯^’ú*ÉkÏöEN6@øªÂ%ˆë™’QXPp),ˆÏ —ÂOÛÎ[,%%ÍÖ‰¤¤¤ÝšÍó­Œ#ƒüûëÑ»_…o¯ÛuÑ:'ûéÖ÷oߨ\„¯  \ûD”)9îݼöþ훞}®Û}¨ä³Ì¥Æï^¿Zêi”ÂÐÐjm=s¾×ží»6®ÚÞ°±÷³w®EÇ<üÇØÒ¦¬ï¬[jµ¡ÛœìoeÕ/| b‡p ¬u¦ä8_<¼å QcK}Öp¤ …Ë‹¡§X—dœíoW·'¼xæî²iÉúmÜOEúÞ¾•žš²döRš2µëع¬Ê…¯@ì.€G2dˆH3%ãsVæ­+—ääö8¤Ô ú6l¬póò¥¬ÌO ŠJì®]ZZzÑZÇŶã/…îkhd0`0ç)‹©³ïݸJù/-%yÄ8ëNz=›*×¯ß óÓÇä—±WÏGœ>))%5v”²*¾±C¸v˜šš–?¢"‚¿çå n\Ö ²õêõ:22ÈÿòÙc+a<*I§cg“‰Sƒ¼=vo^³¿›>'¿vÔë±ÖÕ}‹ýügîÓTrÁrr3¯ú¹ï€²j¾±C¸€æBHñwâ#KÿNœ1x´ …Ëó!¢—dÒœ…7¢Î§¥$ïstXá´‹S®ß§ÿ±³×¢Î†ÜˆºðîmÚÇ÷ï š©µPQkѹGÏ‘æ—7D¥ð5ˆÂ%Ô0n¾!åÎÓIOŸgÔ!a!*©^ýÁ—J}ªac…Ñ64Uz-ª ºA¸Ö \k.€5—À„K` Â%°áXƒp ¬A¸Ö \k.€5—À„K` Â%°áXƒp ¬A¸Ö \k.€5— NJ ¤ÅÝ„º¥ž´”¸›µÂ%ˆ¤¤¤×.'q·Ø„p b³víZq7X†p ¬A¸Ö \k.€5—À„K` Â%°áXƒp ¬A¸Ö \k.€5—À„K` Â%°áXƒp ¬A¸Ö \k.€5—À„K` Â%°áXƒp ¬A¸Ö \€Ø¬_¿^ÜM¨£ÄÝÑÊþ^°mËFq·*¦Öw˺áÄiì¬åânBÝÒ@F*`ïVq·Bär~H wÕMÈxîrw+€5—À„K` Â%°áXƒp ¬A¸Ö \k.€52¸B†¸TÁ¥ðæVO¸ €Øa):EG.q ƒ*V•WÈÀ›[­¨5”=¸c‹¸[E°‹…`wg|-¬A¸€jj”~;õê5×h¥®©­¡ÙÚÈÔ¼¥V›Rç¿[¹UbA¨•Ðñ„„p 5Ã÷¼¼W ñ4Ñý`ߣF¦gÚ))7w»Øêì€óF¤j ¢. ZãìðòrsÞ¼Ny›šrå|xÔÙˆ@¿»7®îõ—“—癳ҫ»Ø˜'ânü  Ò. f¨W¿fšzþ:pü䙎¿/x•hûf»?6‹»i¬‰‹y,î&/t<€ŠB¸€šG«m;ûÍ®‹mÍÎ91hä˜.úeœÁv),èÊùˆ¸gO òó;vÓŸãsôï¿.¿MMÉËÍQm¡ÑQOßrÚlºÃÌpÒÓÝÓÍ…¹Ï´Ç~‹ë£Ñ®åëç,‹ú€öø‡Qî¹z!"'ûÛ©kYyµCðŽ'!@ßCÇƒÚ áj¤6:ޱštüðýÛ×™}|I‡wn òöà<¼uùR쓇»}ƒ³¿~•(>"UêRLynv6í’7,žõãǦüÞ«4ÅÇ<á²¢]é‡ßiŸÍ<|ù<†¦èˆÅë·ö6ŠSaVæ§E6¦´wç”$ÅÇÒ}6x·O°†Vkþ© kù·Í99§Ž ðæ_!CŽ'Q©¾‡ŽµÂ%ÔTõzH?œWú‰k ±Ïhï.))i6iÆ0“ñÊ*jq1O<\V,ÌÍɦè©R”‘)Ú0æææìsZ×oèHó©³Z´ÔÌHu6ÄïОsgN cÖIOŸöÜ{¾ç原2ÓÈÄ¢™ZóïÞEŸ õuß½}íò®úœß|x¹¹Ð¾½n×™ËÖhët(n[Œ»ó¦¸˜ÇÔ‡©Ä|Ê,šJp-L›s²¿…8>cñÊA#Ç2eAøw<‰Êö=t<¨5. ¦ÒÖi/Qt0æE©ÏFúÒíÐ1ã¦-´gJºè÷r90×b$ç˜ù߿Ӯ}ùæÌCuM퉳ì>g~ ð>wúíノyÐCËislç-aæQÓhI ½÷»ž=`=cSžú*IN¾áÒ Î-µÿņ_´Öq¾µq¹çº ¸I))ºÍüøÁØr’©Í´rÿ:ÿŽ'!\ßCǃZájª¦*jtûá}z©Ï¾x\tâ×0 îBÙzõ&̲sY³TúKî, G™Ð>>þùSºÏÜ1†gžA#ÆÐÞ÷ï¿.söñŽî¥|]¨Ù¶]qãßñoƒàka”œXÇ¿ãIÝ÷Ðñ ¦C¸€šêur‚Dñ¡RŸýQ´ûl®Ñ’§\ç']ë/yRZsVtû±xÇ̬}ŽùˆÒ×þî?ÉãKVæ¥ð37¢Î§§¥f~ÌÈÏÏäèiE×"Qö«,âßñ$„î{èxPÓ!\@MÅŒk­ÙZ§Ôg³>}¤ÛÆŠMxÊU[¨ X3Õæ<%òÓí—ÏYtûñ¿c?܇µ2?~°Ÿn’ôRÀõr|-ŒÆ Š•X TÿŽ'!tßCǃšájªÛWÿ¤[Í6¥ïã6jL;ׯŸ³›4å.÷6MÀú?ge6m¦Â]ò%+“n•èVYU--%ùDô݆ø×ãéæL;xÕ“ç/í¤×ƒ2‡¬¬¬´´ôèžÊmƒàka”õ+%`ÿŽ'!tßCǃšáj¤û·¯_Ž “‘•í;dx©34m¦J;ø÷éoxvðñ1O\EÚ«$ž}<ín™š%Šß@S’:tÖã_ÏÓû÷èvÕ6·vºp <ž$øZ j”Ûñ$„î{èxPÓUÓpÉ ‹ÀCFF¦¹†¦†vkcËIÝ úV}«ê¦²Æ—GwoÚ¾åUâK9yyß‹·Äݘ‡ÿì\¿’î˜OžÙR«M©ó´jÝ6!öÙŸa§ÛvèÄ)üž—wÜ}—€k öóÔíþ3wITøºíÐ¥Ýêvûùþ­ëAÞ+·ºqÏäÊûp¿¡#mç.fJ2Þ½¡[žœás`·¤¤daaá×/ŸéÉ‘›“ÍÏEðµ@¤ãIÝ÷Ðñê”Rê³ P5 —¥ÊÏϧ\4ݺ|iˆ±Ùâu[ÅÝ"(G¨ÿ±ÎYü¯ >à´bá§Åüe«Z¨)ÒÓ^'ÅÇÞºr)òô‰Â‚Ú…[LŸSÖÌF&W·‡8ÞDYeÀðÑ”âbÞéÔ´™Jjrb¹ë’­WïÅ“G»6¬4µ™®¦®‘‘þöψàˆS~E5›ý ØdâÔÐïk#W/1µ™¦¡Õ:1îÅÃ;7|íÉÿþýÛ×/œª44[Ç={â¹ÇÅrÚܦ*ª‰±ÏŽì—oب¹F«´”ä Á#Ç[3ƒQÓ®vð~Ãͬr³¿))7|- :êxÂõ=t<¨ªu¸ä %&ÒÓRé?öäQ÷‹¡A]ô (bŠ«m ˆØ˜'ìV˜‘þ†I–[ù¶ïÌ{¡3¨•JýX/))9Ê|âT;ûzõê—µ ^¯Þý o]ùó¨›3ML¡‚RçÃþ³Æ•»^Êsì×n^>ï|p w¹™Ítæpí¤98íp°Ž ¥‰{žŽz=¦.XÆyhb3ÍeÍÒË‘a41%*j-\Žžðts¦}ü¡[hb6wíu»<º{ÛÃÕ‘&‰âm àkvUºãI×÷ÐñꞨSݾ-¬œj.yЬ–Úm&Ì\ ØTyŸ£Ã¥°Ó—Õ\¹ãôVÔ÷¼<æNç=Ù­jE%-­ÛuøuèÝn?óŸ™rÀÛ÷ûÙÿ÷_—“â^4j¬Ðåg›Y Š¿%”––æ¿x~~¾Á€Á[xGE?ºwûsæ§vºôldÄ5x!ˆ}'"ü¹Å?{ú*!^N^^]S{€‘±‘©wýƒFŒ)øñã´Ï‘Ôä$úºô™8{a3µæfÙÑR‰ñ/T›ÿû#âù«6îÞ´:.æ -ÎøZÀµ€èT¨ãI×÷Ðñ ¨Iá’£¯¡…ËÄØgEWʶ›8öuRÂÜëè%÷l!þÇÜ7jhµÞíÜ@¤bÇ·¯_Ìûw×jÛŽ6:ôI×ßcoܳ'R’’-µÛZ͘«ß§?3ÛIOwO7æ>ó9Ì~‹ë£ÑÅg¦ûØÿüizÚkÚTétì<Â̪½îC~ýœe1P_³Îÿ°CÛ7_½‘“ýM«mûçp×É|¶ûúåóŸ£´›š’—›£ÚB££ž¾å´Ùt§dûܹìëIõP…š­û™ÙNç9!H ¡ Tô³{Éù%¥¤¬gÌãí™z,ݪ©·ä³ }ŒáÿIFYE•vÌå¶mðhSšx Õ[iíò9Ã]Bûõm~•[KM?ÔQ}ßñ$ë{èx ¸š•vjd¸ü‘Ÿ/ñÿW¢×qù¦í˦ZÙµ•’ 3Ò,IMN¤p###c¿yG5y­k&‡åädß¿uÝÁnz~ñ{Až>¸»vÁôÍû¼èÃ1ŸÅ)&îpøsºäËç14EG„,^¿µÿ°Qÿ[Kñi@¹99§Ž (å"Y™ŸÙ˜R¬ä”$ÅÇÒ}6˜þÍxÆ"ôÝï´®°°yHñ‘¦Ñœøsò¥€-„ê/.æñ«„x½^}x~x{6°h'J-ÄÔ.¨ýÐ÷€u5+íÔÈpu6D¢èê®ÿŽÔÕ®S›9‹èÅÝá`¿õ …΂×u+rs²§ÚÙëtì,ÖÆÖ6Ò2E}&ûË—Ý›W™Z[NRS×HILؽiuìÓG”™pi>eM<çŽPÜëèð=/wü”™F&ÍÔš|÷.ú\¨¯ûîík—wÕ7PRnÆÌ)S¼–œìoa'ŽÏX¼rÐȱõéŸF^^¢Äù(^n.”,Ûëv¹l Ó%bcÜ7ÑÆÝÃÕÑaçANËS’^tÙ$))5yþâ~CG6h wïæµãvÑœþû˜_> ÞB¨þ¼öî¸w㪺¦öŒE+´tÚÓnþÍë”ð“>çΜ gGYL,·€ÊAßQ¨Ai§&…Ëïyyi)ÉQÁAÇKÿbŽóÔxÛßî^¿úèî­`?/*?í{ô郻z={›4]|í­˜‘r)„õìg8wÅ:¦°M‡Ž¿-]e?Ýš¹pEY‚Žy|Îüd9mŽí¼%L‰šFKzXXPè½ßõìéÎWHÌaéÌ(¼–¼Ì.·ÔWIrò —npæœ'ÔIOÑZÇùÖÆƒ?ÙÌ^Ø«ß ÎCÊ"K7:Ï·2¦Ï‹Í5Zyïum¬¨DƒÉ( c¬m¹j·m/Q4¬ï5Á¸Å?/@xàˆ1<åƒFŒ¡èö÷_—KF·’3ópt/åKsͶE=çÃûÿ\¾ìÞÍkEë9–»zQÐ_…i!T[-µÚ¸ù‡úÞ¼|ñýÛ7¹99ª-ÔÕ5µÇXÙvëÅïä !¡ïˆÔ”´S­Ãe©h7?ʦc×î<å*j-¬Þèø»ÝÆ¥EÃ-ß¼CYUM ¬+xNb.VPðƒÏ"¯“èvŽùˆRŸýPZ0¥Íq¹-ù’•y)ų̈óéi©™3òóóü(¥Lý*Íù]Û·-„êLI¹ÙÄYv4UtAüF„T¹¾‡Žåªi§Z‡Kî³ÂÂÂ3'>¾w§¾œ|ÉdÉèÕßP©©ò§tûsßþUÕÌ:Š9²B>¾{ÇçÙïK‰nù×™ùñƒýtkA.höås–Dñqì¶ *Uÿ´S­Ã%7III»5›ç[Gù÷5Ö£w¿’óÛ»ƒ^ëF ŠtëµwÇoKVU};út•–’|"ú.s˜SÌ)ž|xº9S²Tm¡1yþÒNz=+6‘•••––ݳÏœŠMšf¤¿ý’•Iÿ,¶ *Uÿ´ScÂ%ÑÐjm=s¾×ží»6®Úγûúàî_Ϧ*ª.‡–L5öóêc8LÑn¡Ê¨i´¤è–’”С³[u>½nWmskש §°Ô™ÍT›S¸LI|É'\Š¢…l©i§&…K2Îö·+çÃ^x´)M<…ê­´vùœ)¹¸n÷Ÿiâ¿j[(víÛ·ïÖ­u 333UUÕªo@\\\ïÞ½GEm9r$RfajjúõëWób:::U°Æððp;;;Z/­‘¶„,¦ÌêŒçcÂûž—ÇÜá>ï¼Öûö-eíû(5Ö ´S'þEkú¼r³Ø²eË ª>eBuóãÇ?‹ÍŸ?À€bÙªRÈ8Q¬aÆÕ$e¾|ìçùìÑýŒô·RRR*ÍÕ{:ÆÊVA© ÷lñÏŸzLŠ}›úŠæÑl£3v”’¿¸,ë˜wù×ÏYõ©†=þa‡¶o¾z!"'ûÛ©kÿ^ùéÁÁ¾žÏ? B ÍÖ} Ìl§×«WŸ»¶´”dŸ»¨Iéi¯Õ5µu:vafÕ^·ú[ú§ØªU«ºwï^5)3##㘲²r•¥Ìœìl»‰c_'%Ì]±n”ù.âÌÝy£†VëÝ>Á‚+úöõ‹yÿîZmÛí;ñèîm½qÏžHIJ¶Ônk5c®~Ÿ,<ééîéæÂÜgzšý×F£%ë*¥vH­¶í©r×ùoïýòùŒÏÑ¿ÿºü65%/7Gµ…FG=}Ëi³éNÉöWçÎ\¶‡ÀpYó eê°U­&)óþ­ëvÓóóóÿ×°¸ç‰qÏ/Ÿ s9Àù.)"ÐÏÝecþ÷ïÌÃW ñ4݈º8eÁ²q¶3*ºRæ´ŠÜœœSÇ…üçz¤á¾ûÖÑÿ,óö¸4݈¾à|ÄŸ³K¦}ÿ‡ß9çÀQ8¦):"dñú­ý‡ªhcªXíN™”—oÚ¾lªÅ‘][)ù5×hÅ”§&'Rø£•ÚoÞQ¡o!™7=''›§£>}pwí‚é›÷yu3àwqH» ŸÉ#+óÓ"SŠ•œú¸ESôÙ` ͹g®)¹:lá²CÊÕa«*Þ”éµw;í°ÇO™9rœµ²ŠZnnÎã{wlÛ@iÀÇ}÷Üë$І¯J?´}3%ËáfV¦§ª¶PÿðþÝÙS~§¼{íqùuÈp5õ–Z)“lr²¿…8>cñÊA#Ç2c‚¤$½<è²IRRjòüÅý†ŽlÐ@îÞÍkÇ슋yìï±ÖŠöî{¾çåR›L,š©5ÿøî]ô¹P_÷ÝÛ×.ïªo ¤\¥g7VZmM™í:u±™³ˆ¢äû­}$¥¤ \×­ÈÍÉžjg¯Ó±s…j“.n^ö—/»7¯62µ4¶œ¤¦®‘’˜°{ÓêØ§( 2áÒ|Ê,šxŽš ÞUJíÌ5Õxêôrs¡dÙ^·ëÌek´uŠ.<‘ãº¨‡«£Ã΃œ–×ÄÎ\¶‡uÂem€” <ªÃVU,)3%±hü|3›éÌAJYYƒâ뤭]0ýÝ›Tfž o¼¼\ ‘ Vÿ{fmsV(tFEŸö9ZÑ=(pH_‰”²‚©Í4Nù…à@аTBA)1eÒHAÑiŧ÷ÿþ·1Ç<>g~²œ6ÇvÞ¦DM£%=,,(ôÞïzöt€õŒy•~5Ä¢š¤LëoûÛÝëWݽìçe2qêiߣOÜÕëÙ{ܤé­Š¹ä…°žý ™:¤M‡Ž¿-]e?ÝúUB<Ÿeï*euÈ’R_%ÉÉ7\ºÁ™ùÁ%餧¿h­ã|kcž3>ktg®ÛúáR‡xïum¬¨DŒÉp•3Æú??¿ÐnÛ^¢ø˜:ŸE*ÑUJÎÌÃѽ”/Í5ÛÝüðþwatæ 6ˆº[r¶‡k×®uuuéºê8„KñX´h‘ƒƒC…éÚµë£GøÏÓ¨Q£Ñ£GÓDz#FÈÉÉ­_¿^ˆ6‚HÐÖ³¢o}Y”””233ùÏÓ´iSꃖ••ee½Ô!©[–;›¶¶6s«gO‘ÿF•2åê9“¯œ¿zñlÝ®z={ëõêݹG/îa¤ÒÓŠarΟãPkQôm8çg%¨kjs?üPœT¸Ã*éurÝÎ1Qê³ø¦J«Äö‡[¿~ý®]»ÆÚþ >œÞtÚ"}üøÑÉÉI˜Ïº¾¾¾'N,w6===¦§µoßþcN~¹ó NE­Å‚Õ·Û¸´èCÚòÍ;”UÕ„©PCó?§32W3.(øÁg‘JtžYª/Y™—ÂÏ܈:Oÿ™3òóó)•U¿H;3>aºe%¶‡ØEŠÂemÀ“)ÅÝ?‘fJUe¦äÐùI÷@àÙ3>G)\>{tŸ¦€#û›(«Lš»ÈÈÄ‚™çÓ‡÷%.Ê)Éüø¡Òko¬ ÈýðËç,‰â‘ùù,òñÝ;>Ï~x/’p):Ü™²q㯼zðàÁ   777Ë)EQ?£WñùŸ>dÐíÏ}û Y›\ÅÏ©DWáé%Qo·Ÿn’ô²Üµ×èÎ\¶‡u Âe †L <ªÃ6T,™’EÉ©vö4¥&'Þ½qõÚųïÝÙ½qõ÷¼¼Ñ6Ì éi¯?~x¯¢Ö‚{A&t6i¦Rî*²¿}-µœç”J«éo¿deR)«*eUµ´”äÑw™cW5T©™’ãäÉ“oß¾ŽŽ¦nÉâJ«&SrÛ»ƒ’e#EºõÚ»ã·%«ª`¥Ü*ÑUÊ=ÆÓÍ™’¥j Éó—vÒëÑX± m7è3Àèžx欉¹:lë,„Ëš™xT‡m¨Ø3eIêšÚ4[N ð>°mߣL¸TS× pù&åO¸|óúݪ¶øÏRRÒ?¾~ùܰÑÿ2ÿ^p4SmNûã”Ä—|öÇj-iœ’”С³^…þºê€¦d$''ß¾}›î².«8S2ž>¸{Æ×³©ŠªËá€%S̓ý¼ú+9*ªH‰¢«<½nWmskש §°Ô™5¨3W‡í!T2\V·‹e=º{ëÐö-¯_ÊÉËû^¼%îæˆeJ++«ªÏ”Ì{ÍCFF¦¹†¦†vkÚsw7èËÖºxÞÇR»Yuë{bDÛÐqãÆ!SrÛá`ÿÏÍk³–ÿñëÿø5`¸1…ˬO™‡í:]ò>4àÏux™ÛuúÏY¤JÊÊÞ¥'ÇÇvÔëÁ) ñó¤1z={?üàBH ÷QnF_ܺrQ›·{ž¤‡Pîߺäí±r«÷²‘Aþ§¼÷:’ä¥Z¡íó£l>™’ãäÉ“ÌÙ–§OŸÞ³gO¥¿K¦däæd»®[QXP0åÊO³—ÿá´báÎu+öø‡2cN‰zíÌZDÑU2Þ½‘(qŠˆÏÝ’’’ô®q¦ªþYtÛÃjµÓ©)iG G.CýpÞÈâû”ŸŸOÿêÌ%S9c·Ö>W¯^­>×¶¦×œ>ÝÒtëò¥!Æf‹×me¥ÎJ¼¬w§$66V¼]¢S§N bl@Iõê×ÿðþÝ>§u´Kþ©Kw5Véo½Š†ëkû“.3Ï8Û§|ÿºtnÿÖõ&§*«¨¾{“âìúŸçÈÉñ ¢ÞR« …KWÇù«7jhj§¿I ñ;óðŸF Š_²ÊùõÀh ›SÇ] j¢¬2lìxùFiÇpØÕ)//W·û¿{hj…Úk#W/1µ™¦¡Õ:1îÅÃ;7|íÉÿþýÛ×/"x‘„!øp’.™;Â|3nii9a„J,ÈŠ£n.©É‰ý‡2PÔx I†Ÿ¹}5ŠÊ+:jU…P¦¤nè7ÜÌ*7û›(ºŠ†fë¸gO<÷¸XN›ÛTE51öYÀ‘ýò 5×h•–’|!8päxkfHöêߙž=,©.§J†Ka^¬X!Fú(í<˜×zë!ßö«ïÓ„$ÞžwœºuzZê•óá'ºÓ榋¾EL!WQò}¤›±Þj±oIÅÞ€’¬gÌ¿wóÚÛ×);~ç.§ÔÈ9INI¹Ù¬åk÷:® ;qœ&Î<õêÕŸmïÀó­e͇ß|öèþ|+c¦DFVvý.×õ¿S¸,,,äsZ›²ªÚüÕ›önù㤧;MœòÖí~š8ksŸv䋜v8ØGG†ÒĽxG½S,«Ì« b‚'KÎwâŒJ3.Æžöèîí°o¥&³í×r ç®\OÑŠÊûñÿfQ{Ý¢CìôÁ†&‰âí!ë]ÅÄfšËš¥—#ÃhbJTÔZ¸=áéæLáòÐŽ-41Ûáêß™E×I*xêrÚÑKž¡Y…÷=/¹Ã}¸DŠ>˶Ôn3aæŦÊû.…>\Vî}d½;AF»@—#'‚ýær$ äàˆP*žïÄlýf@\vÁZ¸”.> 'ûË—Ý›W™Z[NRS×HILؽiuìÓGôÑËm>eM%G xµ{æDŠÛa'ŽÏX¼rÐȱõ)ªE[²N/7z­)kÏ\¶F[§hÈ®„ØwçMq1=\vdfKIzyÐe“¤¤Ôäù‹û ٠ܽ›×ŽØE³ù{ìc~Ú&`óꦨ³!t˼ÂE¿´íb3gEÉö[úPè,,(p]·"7'{ª=}*«ž^üQž(º•xíÝN Zvä8keµÜÜœÇ÷îض"²ûnÎ倀?žïÄ5î›qH;‚`-\2gµSËzö3äì€ÛtèøÛÒUöÓ­ù 'àÕî™Ãc™?Ð{ij3{R_%ÉÉ7\ºÁ™9U…tÒÓ_´Öq¾µ1÷i‚ó¿§Ú¨0%†£L)(:­Xøôþßj^ò=//-%9*"8èøa‰â ržoûÛÝëWݽìçEå§}Òç9½ž½ÇMš^5m²;¥$ñff39H)#+kP|eúH*Ì…êžïÄÕö›q!í‚ýôŒ±þÏi(Úm‹Æ$Ëà{QÑŠ^í¾äœ%9º—r$Y³ølýïÿw‰*JîE+9–{¶^ýýõ°ÒÍ«•Jí’a3{!½bœ‡ô_±t£ó|+c¯½;šk´òÞëÚXQ‰ú=óßR„ìNmêôèîíÛ6ÌX²JYE•)ìÐY/ êoQ¶ V)õ;q¾‡Úi‡öÃ¥†fkî‡Ìe  ~ðY¤¢W»W×Ô¤%_²2/…Ÿ¹u>=-5ócF~~þ¼Í`*Wi®^Z•l^ÝAn”…MÇ®ÝyÊUÔZ,X½Ññw»KçÐÃå›w(«ªUY«„ìN”)WÏ™|å|øÕ‹g;èvÕëÙ[¯WïÎ=zá‹<Á•ú8ߌC퀴Ãûá’9- B*zµûÆ ŠåÖ™ùñƒýtëR/cÅíËç,‰âѹXl^­Ä}†í3VÌœøøÞúrò%“%£WñWÉŸ>dÐíÏ}ûWU3‹Ùt~Ò=xöŒÏQ —Ïݧ)àÈþ&Ê*“æ.22±`¿¹µQ©ß‰3ðÍ8ÔH;|T‹k‹Wôj÷|F-æðts¦×Zµ…ÆäùK;éõh¬ØDVV–>+îÙ{6Å&M3ÒßRêçs½ÔŠ6¯Ö£×ßnÍæùVÆ‘Aþ} ‡õèݯä<Çöî dÙHA‘n½öîàŒ_]„ïN%§ÚÙÓ”šœx÷ÆÕkÏR’Þ½qõ÷¼<æâÔÀŸïÄøfꦺ“vªE¸ÅÕîŸÞ¿G·«¶¹µëÔ…SX2Ú7SmN/wJâK>/·(šWÓihµ¶ž9ßkÏö]Wí çéˆOÜ=ãëÙTEÕåpÀ’©æÁ~^} ‡év+gt4¶°ø~©kjÓdl9)4ÀûÀ¶ g|Ž"\”ëóçÏŽŽŽÜ%+V¬prrâ 8²_¾a£æ­(˜_9Þº^ý£-lN;t14¨‰²Ê°±ãå5~t÷ÖaW§¼¼\Ýîÿ¾¢h^- --½h­ãbÛñ—ÂN÷542ðï—\GÝ\R“ûÅ”Pwü3üÌí«QTNA“õf°ÞêÕ¯ÿáý»}Në¨ÚŸºtWÓh•‘þ&Ыh¨°¶?éò_júg?´}˫ėròò¾o•:Ìj…Æ^OÇ“(­›¡ãÕu9íˆ!\¶×íòèîmWGš$ŠÿyDqµ{›i.k–^Ž £‰)QQkárô„§›3½Ü‡vl¡‰V­¬ª6õ¦½[þ8ééNgñÖí~š8ks_Í«t:v¦¾HŸrvo^³¿›¾‚¢½³aÞ JMfÛ¯åÌ6wåzêÄTN´‹~/vÛÀzw²ž1ÿÞÍko_§ìpøÏ–rrUyæ(ˆZ~~¾ÓŠ…Ÿ>dH_"\À¥BýpÞˆ]>T:^ÝQ—ÓŽÂåüUwoZóDZZš3æ'ëW»4bLÁ§}ޤ&'QèéfÐgâì…ÍÔšO˜eGõ'Æ¿PýÿäS„×ÐÔ>äûäQÆ»7ê­´8düäߘë/‰¨yµÆ¤9 oD§¼ÏÑ:¥ëúß g.[Ã}ˆž:úäyKiËHÏî ˆ`÷ ¬w'út9r"ØÏóÖåKïß¾‘(Ti®Þ¹GO³I3Z´Ôd±å ^éo˜üÖC¾í;]6W=wlÌ‘· jµ’OB€¾‡ŽWÕå´SÉpYêBYÿ<åôoóð+9› W»pŒÁ£Miâ)To¥µËç O¡n÷Ÿiâ¿jAšW+ñßêQ§ô¾Äyx$$ªÔÙŒ­liªèºéf¢èNM›©L]°œ¦rš 5JAÁëž?}üsvÑ÷¼<¦œû ¤rq_ñ‚K§˜›ÚLëc8LJªNL­ÅÐñjº’{ ¤rU‹_‹ˆÎ×/ŸÏ9êïžöšÚcÉäñÏ?`žåœÜÆÿ,·“žîžn.Ü‹Øoq`4š)IKIö9°+þùSZ}Ð×éØy„™U{Ý®ÿkÃç,‹úšmtöø‡Ú¾ùê…ˆœìo§®=¤f8þn§ÚBcŒ•­‘©ÿQè f°ãIð=Ãj"„K¨µÞ¼~âçu>80ûÛWÙzõŒL,ÌDp{ÚaïpøsþÜËç14EG„,^¿µÿ°QL!óÅSnNΩc‡Bþw¹¶‘§¼=¢"‚=\}Üw;~¬õ5–¬7ª:Ôq—P =¹ÿ÷Ÿ£7¢/4VT²œ>wŒå$%å‡WÜá(QÁäšO™ESÉE²2?íutøž—;~ÊLÊÍÔš|÷.ú\¨¯ûîík—wÕ7`V*#S´±ÍÉþvâøŒÅ+ËŒNÒR»ÍÂ?¶Lž»$ÄÿXÄ)¿`?¯ïÞ‡˜LœZeCËÐñ$. 6ùñãÇÕ ´w}úH¢xL`“ S‡5g÷gdÜ‚Žy|Îüd9mŽí¼%L ­”zïw={:ÀzÆ<*””’’(¾P›±å$S›i<•P Å-¦Í9|’ýÏó4µ×íJÿuèˆ:þ«Á€Â%ÔÓŒÿÆ_¢]§.f“¦ÿ:d¸¨¯ÿü)Ý1†§|Ј1´ÿû¯ËÌ>ž£äœDÆXÙŽ¶˜xíbd÷áOn[½øÈî­^WEÑr`:7„K¨=˜ü„™ &β«š5¾NN Û9æ#J}öûtžuMmþR(é?lM>î»}º1TsèxÜ. öPjªüéCíÿþëò8Û} ˜¯Eçã»w|žýðžwßXA‘…ÌÈ5§Žy¼xòP¢ø‹K![U€Â%ÔžáW¢#Cƒ}=iéø»]‹–š¦6Ó†›‰îºöʪji)É'¢ï6l¬ ÈüÌ4¥ÊÍɾrêôñ#o^¿’(¾rÆØ S7f­­ 2èxÜ. ö­Woè˜q4Ý¿}öôw®EïsZwüÀ®Ñ64q_8Š-j-iŸ’”С³^¥+Éüø!4À;üÄñ¬ÌOzõd2qª^ÏÞ,¶D €Â%ÔBÝzõ¡éuRB°Ÿ×¥° ߃n^‡†›™ØLSo¥%då¹9Ùœ#RºÝ~¾ëz·ÇÊ­nÜóDùŸò>ÜoèHÛ¹‹ùT•šœxÚçÈÅ ¼¼ÜrrDÆZO.÷ô8¨¶Ðñ$. ÓÐj=wźÉó–œ  ðôò»ó¼ÒÒ®vð~Ãͬr³¿))73™854ÀûÚÅHçÕKLm¦Ñã^<¼sÃ÷Оüïß¿}ý¿™㌠TÔZŒ¶œ4ÂÌRÀ¯8¡šCǃ:áj9ÚqŽŸüí€ÿºyÆç¨0Uµ×íòèîmWGš$е–oØh‘ƒÓûèÈPš¸gî¨×cê‚eåTØ© ¥„¾ƒ‡cLÁÚê,„K¨h'ÊŒ´"L%óWmܽiu\̪­¥v¦Ð ¿á¾~‡ÜâŸ=}•/'/¯®©=ÀÈØÈÔ¢Ü=7sɨÅÐñ B¸€:Šçú{¥^ާöëÛ<üJΦ¬¢J»ÿ ­ꬒ=¡Üt<¨Y.€5EᲞt™Ã_(Tå Ž7·Z‘í°ÊPØEŠˆŒ¤¤äÉ}ÛÄÝ  ¼¹¥Â.RtdÖ®]+î6€¨àÍ(v‘¢ƒs.€5—À„K` Â%°áXƒp ¬A¸Ö \€I»;‹» P ÉÉH¡wˆ Â%ˆƒ1‘h #…Þ .—À„K` Â%°áXƒp ¬A¸Ö \k.€5—À„K` Â%°áXƒp ¬A¸Ö \k.€5—À™Ìœ…ânD]#-)Ѹ¾t¬èsî¼»ÕJÉ2RânE5‚íOÕ«²íÔY2;·nwê(Q¯b‡ÞÜê¨ ÞúšÛqA'Ñ)úZ|ì¬åânFÝÒ@F*`ïÖªYÞÜjE­¡ìÁ[ÄÝŠê]´ŠUåöê&œs ¬A¸Ö \k.€5—À„K¨¦Fé·ã~([¯^sVêšÚš­LÍ[jµ)uþ𻱕[Q%€’. føž—÷*!ž&ºì{ÔÈÔbâL;%åfân›BýpÞˆ˜ 5Â%Tkœ¤•—›óæuÊÛÔ”+çãΆDúݽqu¯¸œ¼<Ïœ•^…ØÅÆ<w„…p 5C½ú 4ÛèÐÔó×ã'Ïtü}Á«„øCÛ7Ûý±YÜMcM\Ìcq7@X—Póhµmg¿Ùu±­Ù¹3'ÓEß@¢ŒS'/…]9÷ìIA~~Çnú“ç-ÑjÛÞvįéoƒþzX¿\É¿}ýbÞ¿{SUïÈ¿îߺîxïËϤ¥¥u:vþeàQã'pן–’ìs`Wüó§éi¯Õ5µižfVíu»ò4øë—Ïg|Žþý×å·©)y¹9ª-4:êé[N›Mw˜Nzº{º¹0÷™öØoq`4ZÀµ|ýœe1PŸ’÷ÿ0 ÜW/Däd;uí!+¯6@… \@Ô¦CÇ1V“ƒŽ¾û:.K:¼sk·çá­Ë—bŸ<Üíœýõ«Dñ¡ÐR—bÊs³³) nX<ëÇLù½WiŠyÂ9VJn‡Ã/ŸÇвxýÖþÃFq*ÌÊü´ÈÆ”b%§$)>–¦è³Á»}‚5´ZóÿKYË¿mÎÉ9uìPh€7ÿ D ájªŽz=$ŽNŠ+ýŒÉ„Øg”,%%%Í&Íf2^YE-.扇«£ÓŠ…¹9Ù4=Uê‚22EÆÜÜœ}Nëú i>uV‹–šéo£Î†øÚsî̉!cÌ:ééSdÜëèð=/wü”™F&ÍÔš|÷.ú\¨¯ûîík—wÕ7àüØÈËÍ…’e{Ý®3—­ÑÖéPܶwçMq1©=;R‰ù”Y4•<ø*àZ˜6çd ;q|Æâ•ƒFŽeÊT=„K¨©´uÚK|Qê³¾t;t̸i í™’.ú½\Ž̵É9ÉGþ÷ï”)—oÞÁ=-5ócF~~¾ GO+º‰²_ €*ƒp ó)ãýß×¢edeܹ‘žöšó[×rÑ®459‘¦ÛW£7æ|ÛÈí€S’^ÒDYvˆ±Ùâu[yf(,,tÛ´æÜ™Ü…iŠþ4òtÀXëÉ3—­á³ ák1bT×l­Sê³YŸ>ÒmcÅ&<åª-Ô¬¿™jsžùFéöËç,ºýøŽßAGîã©™?ØO·¦ž,àz¹ ¾FcÅJ¬€E—P1—ÂÏPL´ž:ÛÏc殺ÓÖ¿Íç33÷1ÂïyyïÞ¦]½pxtdh÷_~¥¼Èg~‰âA³ÓÓR¯œ?yÔýbhP}žE½R.lØXÁÌfºAæ*ªtÿëç¬ÔWI—Ï……8ìç¥ÙFg¸™UY-¾£ÛWÿ¤[zƒJ}¶a£Æ”êèÝTlÒ”»œú¡€õÎÊlÚL…»äKV&Ý*(*Ñ­²ªZZJò‰è»Ôgø×ãéæLÉ’>‰Mž¿´“^Ê»²²²ÒÒÒ£{v(· ‚¯…QÖ¯”ª Â%TÌ…À&Ê*V3æEœò»zŠî¸3“­WO½•–å´9ŠJMÜ6ÿAõ” —<êÕoÐR»Í„™ ›*ïst ,˳ÈÍè‹t»Úy^ÏÞœBJ4uìÚ]«M»=[þˆŽ ã …¯Äåþíë—#Ãddeû^ê M›©R¸|Ÿþ†'\ÆÇ<pi¯’xÂ%å<¦f‰âÖÐÔ¤„õø×óôþ=º]µÍ­]§.œBd ¾€já* æá?¯âÇXÙÒ}€ÑèÿcïÝ.kˆÁ²ô4ŒÂer|.¸××ЈÂebì3žrægÂZmÛ—ºÔpS‹Þƒ†*5UæS³ð5€XPWܹ~%Ý1Ÿ<³¥V›RçiÕºmBì³?ÃN·íЉSø=/ï¸û.×ìç©Ûýgî’¨ð3tÛ¡K7ºÕíöóý[׃¼=Vnuãž'2Èÿ”÷á~CGÚÎ]Ì”d¼{#Qü¡…{6Ÿ»éƒYaaá×/ŸÛΑ›“ÍHHðµT—P‚%Š0K·ƒÍ(\ž¬h¸,((úÅSÁù‘Ÿ/ñÿƒ­pSmÑ’Òá¹Ó–Óç–\Šæ/7 _T¥ô´×Iñ±·®\Š<}¢° €â£Åô9eÍldbqå|x؉ãM”U ÝHA).æñáNM›©¤&'–».Ùzõ^:2”&îy:êõ˜º`硉Í4—5K/G†ÑÄ”¨¨µp9zÂÓÍ™Âå¡[hbN8n¯ÛåÑÝÛ®Ž4IŸ…,øZª „KÔµ‹g³¿}<Ê”S2ØØô°«%N£ÿ%Xªüüü÷oÓ®ÿyÎ÷`Ñ·{c¬'—»È÷¼<ÚõFE?,Q| ˆg†á¦–Ÿ22ü¹]:O“ŒŒLÛŸt;uÓïúó/Ý(&–qq?vk€ª¤ ¨¤¥Ó¡u»¿¡Ûígþ3Sýcû~ÿ#ûÿþërRÜ‹Fºül`3k¡Bñ×ÓÒÒÒü§k0`ð–ÞÔÝ»ý9ó}¬ê;؈»·SxÝw"‚úOü³§¯âåäåÕ5µ™Zp×?hĘ‚?NûIMN¢?¡›AŸ‰³6Sk>a–-•ÿBµù¿?`Ÿ¿jãîM«é£-Îq]ÀµT— ¨ !§$¥¤Ë)¡]¦çng*/+\–z̉˜L˜ÒóׂÏOlf/,9:&±š1×pÔØÈ €›—/&¿Œ{þøM§i '7t¬¹Í,»FåÌ"| "%G$­èüÔc­gÌãf<îÙºUSoÉgAŽÎ=zÒÄg¥Ê*ª”ËmÛàѦ4ñª·ÒÚås†»„å6¿Ê­¥¢/€ˆ \‚@ÒR’ß»£×«·²ª§°‰²JÞýî\‹~”Pr¸iRRÒÍ[¶ÒjÓn´¥M·^}_5EØQ6|3Wm¡a;o MY™Ÿbîß}úà.5))>6ÔÿØ«Q.G¨üW!| P ÅÅ<~•¯×«Ï/¾Ï¥7 Írz,TÂ%äBÈ©ÂÂÂû·®—zp‘žRÚ¹_Ây¢Õ­˜9‘m}9y/“£ ¨d0`0MSíì_¾WXXÐL­…ŠZ‹Î=zŽ4ŸØ¸¼!*…¯8vîÜ9zôhq7DëÈ‘#]ºtéÙ“ßðŸP—±.cþó*!~Œ•­Œ¬ì£Ñ!þÇß»]ÑëM÷4ŒÂer|ÎsêkhDQ#1öOyRü ºÕjÛ¾Ô¥†›Zô4”ÿ£…¯AöìÙ3kÖ¬:˜«²”éæRî<ôôy0 ?ü57úDá|©Ô§6VmaCS¥×R¡€uëÖ-^¼¸{÷îLEʬ­Ž=zíÚ5mmmæFÊ,„Ë Å¿ö0e"Qt=@3 —çƒ+. ~µFVVðE~äçK_ƒ§\µEKJ‡çNXNŸ[r)š¿Ü\(| ¢óüùóMŪ>eâŸb«V­BʬÝ‹!eaÃenNö•óášmtÚuêBu~ÒÕÖéð×¥ssW¬““o(x=7£‹ŽKѲ‚/Âü’·ä"c¬mÝ6­9¶Ï5.æÉ0s½^½ëÕ«/xµ¬ÔP2¡šCʬ#2€‡°áòÚųÙß¾õ¿kæ66=ìêD‰³¬ëMsËÏÏÿ6íúŸç|ºI¥ºÉå.ò=//-%9*"8èøazh2q*Ï ÃM-?edør»už&™¶?évê¦ßõç_ºQL,ãW)ìÖP•2¡šCʬ#2€!l¸¼rJRJŠû׃FŒñÜíLåe…ËRG¯$&¦”:PbYó›Ù KŽŽI¬fÌ5562(àæå‹É/ãž?~@ÓéãGÈÉ kn3Ë®Qy¿Ò¾†ªW2eŠ»EÿQ2eŠ»E %S¦¸[UJ¨p™–’üøÞ½^½•UÕ8…M”UzôîwçZôë¤ ­Öük’’nÞ²•V›v£-m*tÍ Š°£,lø f®ÚBÃvÞš²2?ÅÜ¿ûôÁ]jRR|l¨ÿ±;W£\Ž”uQkàcçÎëÖ­«ôâü}úô)£Xaa¡ˆV•¶®˜¸[!f>|`º¨(*ù<&ØÏóÙ£ûéo¥¤¤Tš«÷4tŒ•­‚RîÙâŸ? ôzôˆÏ jjjfffæææýû÷—–.ºÞÌ•+W*ÝBÚ©Wô­¯)”””233ùÌ ¥¥5~üxꢽzõbF+‹ŒŒd· ´9r°›ž_ük?Æ×¸ç‰qÏ/Ÿ s9 Ø¤)Sèçî²1ÿûwæá«„xšnD]¤MÖ8Û])sªLnNΩc‡B¼¹Ÿ ôÝï´Žó1ïÿÚ»p(ó=àjK.Ý6¤ÔnJ”V·Ó¶J*·’kh]B¶¶Ráœtq6Ym¨ä‰Kå’[1…BbÓÒ=»*Ý”‘‘[—ŠóçÝgŽ3cÌhLßÏó>óxÿó¾ÿ÷1¾3_?‰d¹–uqÿñXF¾$aô û¶¦Æj•„c²d¥$9{ø,ÐZÖÓÁ°ƒƒçŸöÔÕÕsrrXl0jÔ(CCCò‹^¼xñà¶Ë4utt8>ô;œ‡Ë–ææÌs4dž?c³Ñ¹ÓYõ8Fþ!mþ÷/Žúi´ØùšZjóÔ{´»¢òt§ÝÞ®kVݹy³ô¾®ë˜)øJÇLÉ;áG|I²4µ]«g²JBJº±±¼ Ú÷ó‹â¢¨`ÿ Ûw“m^Ñ+B|!ÉRÇØÂÈÒnôX™ªJzjBLBä±ðþ[¢#-#×£ƒÔúDÚPÿîÜ©“Î;é %-%=ýõÀž®vtV_ª'""úÇõœ“A‡žÜ ´ÙàL¶©«­9âåþ¾©‘ŒYÛÐLRzL5žu!9:Øßw×Öé3玔äþ‰7:fJøÄhŸù킈ԜK©I×.]¤¿,«®¤·´4KJ•’«¢6[o¥å°îJTö¾‡ÏÜ«Šr*Yú„D+ª´–Sa'2>îÅéH%í6»’åEqQîµìœŒÔ»Üò÷t#¯‡©äÉe¥ÕU•ä/ºýŽTèüR²ûcõïÞvÚÎô–-I«¯*^¾©«e1a¬Ähiò$v*+—éããý‡á2 :©Ûm¦ªÎdн)BÔ‘ð‘ÐÄÌNï"OÓä¿õ„³£ô¨`Bþ‹S_,Îþ^O îòf8ð™’‘W ‹¾¹ur\dоŸÏF þ¢¥edI¸,/yÎ.ËKŸ µ¸ý¿³Ø~ÑÜüñí›×âC‡1Ÿ?+dg’£ÇpYRô”E¸”–•#á²ä¯g“UT{ôÝð­ÞÎÐÀÄeµéûÿ¡¾f|ª’õÇ+O‡‡h¿‹ë^¿…ÚË©–nëK³(aÍf=mÝ]ÿ¼ž³nëOß-ùß§êè“pYWSM­NRš–Ÿ{39.bÚÌ9í÷¥JTNšú¥ËGJHTÑ+Š +©ª1“bÂÙŒêìyäoábR|ûWY׳2|v8Mœ¬ävš¬*ϘuçÆUZd蟀öû¦Ñb"©/Õ£*ô#—Àר©/ÝU k6ëiƒ 2¤ª’è½»±¡~Ê´o¤eǽª(ÿU¨õBrej‡”„è+™ŽúxZÚIH¦——%ÅF\ý-]DT”©ˆºÜø‰$\†úy9ºyÊÊ+T”¿HЉ(ÈûsèðoêXUŒ'–›Y‘ÇdF2íK )-S±¡ÃòsoóónjjTþæï¸I@´9iûÝ\Œ¬ìeÇO(zò(ïÖµèÃÞ¿÷ö ~H¼…p \v0¼õó¸=º|¥í:²tÜ…ÍúÒ]•°f§ž6˜UŽ\ÏyYZB^“´o'©ñ—Ô×äa³në®#^»È†,Œm„…‡üèêÎt ›dͼÛ×äßq´Ð§Z ìq(ÔÏc —---,.—-íè¶çÈÞŸN‡“…Ñ>aÒËu›¨¯Åć:¹{twÍJK&KûÝ•TÕì:›ä €Ï!\ÿb³¾tW%¬Ù©§ †ä¹ÇO%ƄݸœYù²\H¨EjŒŒŠÚlck‡±ròŒÍ´ L')©Ä ,zò^^6FvœÂ$Esû ã¿bžÉvÖü…»ü‚㎖‘(ùÕä©–ë6“EDĄڊ!P¯dºB$+¯J‹}|/ÿ½\fœÂ?4–˜®þ¡} ò° <•Pøàþóg…¢bb2ò µõµÌúEÝ1&—À¿zZ_šiKvêiƒà%)e·i+YXo6AqÊv:$á,LÁ´ íWY¼I¯üÍ,²°>y|:îôdg0üáøWOëK3•°f§ž6pÂ%ð¯žÖ—fª?ÊN=mà.„Kà_=­/ÝñÒŠnëiw!\ÿâb}é®êiw!\il¨g\~ÛËúÒìÔÓîB¸~A2%I–)ñ1:ÆõïFJHö²¾4;õ´€»._(*·NÊêçE¡¶Ú.½¬/ÍN=mà.„KàŽ;=ý÷¸=)¸÷Å_È)L¤{S_šÍzÚÀE—ÀL5¥;-1ÍÔHå¾Ð˜Ž›±S_º«ÖlÖÓnA¸€ÏT~î߽ϋžŠŠ‰EgÜè8»=Ñi#°€p Ÿ£>xoßRSõJ¨mŠp6÷JŽÚ ÀÂ%|Ž^U”SÉÒ'$ZQeº{oO>.¸Çó‘ôs—ðYhnþxõ·ô3'û†&«ï›š¨vµÙìwò¤à.wGõOÛ•FVößjj ˆ)ï@@ \€€{ûæõ…³§’c#+ÊJ©9B]V›>¼ûê^Ƨ*Y¼òtXpXÀö»¸îõ[¨½œj)+)Ž :Tøð>9„Œ¼Â×J*ºÆŠÊÓÿ7†×uf3å'~}8ö\ˆï/ÙSêß%ää‘axmÛ, KVJ’³‡Ï­eT£ð¡Ö ¨"B’ã"ûŧ%D†^JI õóŠ ö×205Xe+-+ÇõAô„K@÷îÜ>uâZVFKsó°#Í×lXan=RB’º÷`x¼P¯_i»Ž,w©«­9âåþ¾©ÑÔv- ¯’Òcªéô¬ ÉÑÁþ¾»¶NŸ9—:è A­O¶ õïÎ:éà¼c‘ž5Í©œÂÄ-?í]½Á%)6"%!&1&<).ržÆCK;峸üCè— 8>~ü˜}1…ÄÊÇ÷óɪ´¬œá÷vZ+EDEytDZDèëÚsûõ6]¨rP²ÚÒÜyÔ/õLÜ*‡¤qÀÀä¶¶ºJßÜÚÈÊž©@ÉîföëÓO“Á_ý-,ŠÊÓÉà¿[ªÛí||ᇽ¾FÛlLB“¦N3¶^óÝ^_(Søð>¹ÕÐ]ÁÔ¾Hw —·¯\¦Â%CÇ-H^aa³ÜÌ2'#yìѽ¼}nÎÇý}ÂS²y1rA¸ÁA%Ëï×n²\·¹oŽXZüŒÜ®_©Ûé½Uô ¦yÖ’4¼@kY¢‚ý£  ¾#€~áÇÈQ5U¯H&»}岉Ã|Mmê|4ïTÓé,î­ªd—Æ`Ý!U2)!"ôѽ<¡¶3æ½!@C¸Ávþ÷¬´äÄè0’̼¶m+'ode¿Dߘºz†$FK—•ŸÊÊ6œí©ZHjl¨¿˜”pæäñòÒçdu¤)ßÛjèèsm¬}áÇ`aá¥+LÈrçæU1oådzï>th¹™YF|9ŠëG”–•#á²ä¯g“UT9º*9.òü©“uµ5$}ÎQ_dhi§:{Ç Ðg.@͘ó-YJÿz–žyŽýk@|xÈR}cC+{™qã{ÙycC=ã­På³îܸJ‹ ÝáÐ~›4ZlBä1õ¥z6œYtõ¢¸èLÔñŒ$ZSS£ˆ¨(IÀ«Vwû¹L~†p Kvü„ Ûw¯Þè’J‹;y>>:…{îÖCŽ;$™’$Ë”øc‹Æúw#%$ -í’ã"s2Òö»¹YÙ“#=y”wëZtÈáïß¿{û†u‡kM´[𛥤Ç.7·Ö56góÜ:?#ár@bðþO= àür„Hb3]ýI~W2ÓÎFèMWŠÊÓòso†úy‘E¨­šº˜øP'wïƒî®YiÉdi¿±’ªšÝ¦uÓáÔi$žÎ_¬ƒb– 0¹»ïúÔc^Á/€¤7ªÄOo:qÜéé¿ÇíIÁ=Ò›œÂDªqîÍÀS)1!…î?V(*&&#¯°P[_ÛȬÛÈHÍ HpZ>SL?v:$S# ”ûBc:n&!5šäÎ@P!\× \× \× \× \× \× \× \À'3`&‘4ÿïÜ燖AžœIEND®B`‚PKÖ5.IM¿HUU5Pictures/10000000000001CE0000004EDF7F6044523B388C.png‰PNG  IHDRÎN&Ca‹IDATxœí \L[ûÇ+…!]4Tî—’^!‡„"Ju$’»ÈQT*¥(EJ*º‘è"—òV'$äEä’t‘PŠ(]Õÿ©}þsæÌLÓ4—fªçûYögfÍÚÏ~Ì^ë7ÏÚ­ýla;;;„ØÚÚrû‡âö!h‡SðÂðoÉÆ=¼v£kÑSX(ÂÛ¥}Ž…'—¯é%rÆý¯½@x€0¯@éü Ô"‚p”ZA®ƒR‹ ÂuPjA¸J-‚ ×A©Eá:(µÒ…(¯þÕÈkºÝz÷è†R‹ ]ˆã.¼v¡‹‚R‹ ] ¼°!îE©Eá:(µ‚ \¥A„ë Ô"‚p>•ÚE*#h+………eIò$Å!Ú«&©Íh¯º&Ÿ–‘ÍkGþ&3#ÝïØ‘÷yïDÅÄBÓyí‚0ŸJ-]êëë óßAIO¹ý»ö²ví”òa™ØðàÓ®ö”ièÎÖ;¾••ÂëÚšjN™EnÃ×RK5Dah,úëÖµKç|c£Æ«¨àòÊ7„²_¾à¬ÁÒâO„κø…Ž7³Æ„{ðµÔRѽGÏAŠCÿذM¢¿¤“íí¸+(µ|ÎÛ—Ï9k°®¶–x1n²*g-#WéHRKf††&Hm^ö+x]]Uµ}å’ù¹[¬í鯤lìëjORâÝST”GÎv6~VVè«OR6Âçb|fƃpï·¯^ Rf¸n‹Êtu¢Ù¥@ß@/7â5qµ×êˆÇ,ÍÅðâcaAÈé9¯³Š?~“W>fœÖ2ÑJÿ Q+|_1[E~èð“áq~ÇSâ««~* ùúùSJ›Ä¼§²âÇÕsî¦|.*„©ô@Òeƒµ›à­ÿO¦E‡‚0H’2]Cs™‰Y÷î=(Û0ã!‚´‰)µ¿êëa+($[ÐÐ=Çv›®8áã\–4˜hSTC]XXØÊÑu–ƒªT]]õ$ýžív³úæsd=Í8¸ÍÌÑ'h¢Út»ƒhºÛî%_f}÷ú%”äø˜‡\Ôç/úç(=z¶¦ºúr°_lÄy¿—³0Ö‘%×äçdCI¾ ?±ðCKÙøZdè)g»ÆÆ¿Ó€˜BIKNp '«-“"H›èR›t=¶ŠÃGoGŒo¼Ù„ÕÝÖÊåLHpcCƒ‡uMu•év+Ixêlg£›pSŸ©ª¨ðt´ÑÔ5Ð6X%#G*ÌËõt°ÉÎÊe$¤VÍF(T«@½lëjkôÖlÐ\ºb€Œì×’’ä›±¡¾žÇî™ ¢ÖWrÑR¸ù(xÆ]¼°nç¾9 —ô€L11šA^n ³rnØ}€è¹Ù/}]Þ¾|îïád{ü ÙóÂüwgÜ…V›ïœ9oaÏž¢ïß¹pú´ ÷÷1Ù²³M"H›èHR[W[ 3»¤øè¨ gáíÒ•¦äôLÖgÜKÍÌH ‚ú+¡ç ÈRV¶|•ïüíœ 4K’êL-ÖvDåÐQcÖïÚoefô>7‡Á¾QÁþ?Ê¿¬Ýl²Õ’¨‘! ‚· çOy\¿a´nëßGiž²”-)×5^ËÀfÑû|Q±^»»RJÔŒUV±8èdn¤Mu¥8!:²¾®¬ÁoQ£±h©x gëYOµÕCi|-µtW×oÚ1uæò[™»ì]Í µƒ¼ÝeIƒÏ{{ô–è ñ7Ð12¡|«8l$lKKŠì³uØÎÖÒ¡ªŸ£¥Böèn ­Ñ6¦ÂÉ—ÎåùaM=§ìK e%İMÇZ¸„²zQÔÝgìxˆ ÌÀ×RKèô‹V™0‰ª^Jfà6{§½Ûíwm†·{Ý%¥exá`W$ÿ¯Ë ½z÷mCÃ/»|(È…íf}-ºŸ–Ñ“i9yÅV=©ø^~ûÚÕ´¤[ŋʿ–Ö××ÿúEÇ Â¾”¬g=Dfàk©¥\WÛØØh½aåóÇ{ˆŠÑê,ÁTu¾ý%¿••ÂvÊ õör³‹B\9m_KJ|Zö…Žõî#ÁØfù×2+3£Âüw­½âÇwØŠõ笇 |-µ” n?àhn¨}#*|†ÆüÉÓfÒ¶ övï#Û o÷õ–ûÛßO„0ÏøXXp19ƒ™¸4Ì€@/WÐYé¤Õæ»Æ*Oî-ÑODD¤[·n‹UGQµ”è׿´ø3„ÀðKÌA„:ŒÔ$…!F̃N;a¿ß'âÕ`Èzšq54°¿”´ÛÙKSýè° éó•&Ná•·-2¤A d…ù¹£Æ)sÊf֓ǰÝÔkÄØñäJºAîiYÚ¼w ¤–"ˆ@Ç’Z`¹Éú¿n]Ë}óÊ×ÍÁòÐQr}Mu•‡ucCƒù¾Ã0Z6íùÓÙzÇq;ë“á±=zâ¢Zg‡8 ðË÷$ý^Ôyÿ}.^” `¦rùüÙ™ó+®ÚDiÉ'戕²2ä´'„Õ?z‰÷&*•U§½~þ4!&’òN³ûɉ.û,†Žs,ð—¿7/žÝ¼zéÍ‹§e_J*¾—÷‘è g&:¿ë,§úÓNK™ê˜·ÀLjácÆÁx€¸ÃÓñÀ©‰*ðdf<ˆ‹8ß§o¿MVÉͶì; êA‘Ç«Lå¡Ã]™‘Jãáìø{8Ahîß¶Îî¶VÉ7b¡P¶£<ÙtÛn±Ôx­Û])7â 5R2ÝÎ] ôr©õs?…W’Ò2æ6ÞGþ¼è …laȈÑ+7n#^ƒFsÜÃÎÇ·Ò/î$ ‹ˆ<}˜VüñÝ éòë×/‰ @4{öG÷Vwi5ŸÌ]¼ܼz‘²äJÎë¬W"–­Þ°ûƒC°o:žÔ«6ïHKºÉÇɆǡ½ðeÁwA9‹„ñ¶zë®Ó®öð©OD|'¸7·´´TR²Å‹Œü‰ù~{O›·/_@8CÜb ¦®ás1>ÌÏ+çUÖûÜQ119yÅYšÚšº+  ‡˜£¥Óðëו€¢‚|øÝ¨6}å¦ddÿظìç弑¦XÝÁ,I^ñzTxö‹ÌÒ’Orƒ›ý»ÞêõDØKÀqÛ è!ýúõâþZòÛ×®‚h™n ó÷†ù¥Ñzs)ãǺÚÚ’ÏSâ#Ξ‚_²I¿ý‡6cT[óùE•ìÕ»Ï2c38w0³×•?¾½ÏO¹wñBtXüÐá0¯jÉCö-0ŸJ-ã §00ü£o“ßÄ$Ñm¦mh…Þñ 111}}}===yyùv;.í¹héìÐÖƒ¼õ£ª””’ fá¸-ÕÏ]¬ …ªRn°Â‰«´»+Mš…ñ¡™ôßðóó;qâÄòåË¡“Ìœ9“{š› “kÃu[ã/‡%Ä^†­.!éÞ΋ÁÚÍ0;÷rüì´šœ¯Õ|~÷“akãzRYu¹¢.(0ñW:âä‘?“oÄ1Jö-0ŸJ-B Dî÷›Ù½{·ššZûk.Âÿ|úôÉ»YYY.iîËgÿƒ`_ÇÐDXDd–æâ˜ðàç@°Ù&#ÓæÌ©-ÈiCÎxÊ|~”äç¼­BóÍŠ´,Ð]1mÎ<kN8bPj;¨¹H«pOs¢#šÓGÀv®ö2Ú[Ñ‘m•Zâ®Bkæw¡ÌçG‰ôÀA •7¯D˜m¡Ý Ú·ª’ì[`”Ú j.Ò*Tš+%%ÅŽµšêª¿n]“:œXÅ<|´’âðQwoßÜbm'*Ö‹y;÷“›.’“ó1U>?2:F&^‚}<Þ¾|1©¾òÔiTÙ‡[…} Ì€RÛ@ÍEZ…Ð\;;;vŒÜI¼^õ³rŒÏÕÖ=ëá ú«¹tE«»×××ùüñÞo†žiZ¶¬c´ºÕ]äó#X kð­´4ÌÏë^Ò-(ÂÂÂÃF+¨2aÊoA4)þàÙì[`”ZÞpüøq6;=]Èš ÆíííÉ9°þÁ®^{Á" 1—aBM™mŽ–N §+Ô·$µ-åç[úÇÕÿÌf¾½M>?2†ë¶h,Zr#*â~JbÁ»·¯Ÿ?…råB@OQÑyKô7no-“ûZ¥–7XXXØÚÚ¶i— &dff2n#..¾xñbˆjµ´´DEE:ĆWmë©gggç}ûöqÃ2D—Ï?„ù5eμ~’R“§Í|x'ùC~.Õ3/hê&;h°ÂЋ Œ'Neô´*ZÊçGFz Éd«%”ïåß^>ÉÈzš.åçddž?LMr;~2>ûƒRÛ RX^»ƒð‚‚‚ªªªÐC*++Y6¡+Ì“ž¤ß£x§kèÝâÑÖGÓ·5Ÿ}$úªÍš Åt»Õ›Ï\m,‹Þçïßùòù“êŒÙvž~´Ÿ)2î¥Ò½üÊŒóùÁÿå³ÿi·4»¤ÐtbuÕÏ–ì³oIX”Ú–R6ðŠÌŒt¿cGÞç½ MLçµ;\ÖÐаý–$ m…ê<ÒífüÖ÷øPØ©S§rVaÉÜj^N;gѺŸj,\ R›{™ãR+Ðr>? >2ôAjRqQ¡åá£tjb‰Øˆ–Ÿåʾ&áAT|ÚÕžƒC¥¾¾ÞÙzÇ·²Ræ;¦9e–ßHMMåŸ{ð[MšMÎ#Ç»SÇÅÒÒrï޽ܰüã{yú_·EÅzM›ý;ÝjêoÞO¹ý½ü[‰¾œ=zKùü€¦›§¥‚~,,ÐZn4Vy²DÉ=z–ûZð.;õVü­èK‚BBKþXÓ’qö-0 ‹RËNÏÎ~ù‚å}éRZü‰Ÿ.~¡#ÇMà¬qþ·:ÛÖ$ ,@{™éfïN‘¶Ü|Õ&’â£ëjkg/Ðni‘©H÷î3ç-¼žr=†‰Ghóùõc”'ôð=beþ*ó Ú{ŠŠ®Û¹ÊŒY-Yfß“𠪥zd4û@' ^P¦|F¸J«I@X€µóÈñî„Ð’Ó|õ`!ý«s/©½É¥O”ùü¬OëU¦«_¿aiZRBÉç_¿”466 (%3:ÒBý•­>žŽ} ÌÀ±kµ?++ôÕ') ás1>3ãA¸¿÷ÛW/„)3\·þ3ÐæR o —¥«#³45ð%†œ>‘ó:«øã9yEøÓZf8RéŸ(µòÇ÷³Uä‡?çwÌ15!¾ºê§Â°‘¯Ÿ?¥ëUeÅ«!çÝMù\TQ˜ô@Òeƒµ›hÓk>}˜vÀ I~Èt Íe&fT7çµê^ׄ2 HuUÕö•K>äçn±¶[¤¿’²YLx°¯«=IaˆgH4Ý„––«õhÏ#ã˲ÜèN—ï4=¨üÝë—Ñaã”’’•›6gžŽ¡IŸ¾ýØú²:,^¡1­¶«¬Bu¦ØYæE U>?Jzõî³x…1–Ò& ¬Á±¨–¦êêª'é÷l·›Õ7ç†h~ä×ÁmfŽ>AÕ­X†Žîn»—|…ú:”äø˜‡\Ôç/úûÍ“—šêêËÁ~±çûó½ü›…±.ˆ,¹&?'Jòõhí”k­¯E†žr¶#ßXƒJZr‚k@8Ym™q¯kB™4tñݦ+N¸À«,i0Ѧ¨ 4QXXØÊѽ}³Ó¨:0PùöuÞÛ×)7ãÜ"¨ž¬ƒ LÂ1©í&Üdªª¢ÂÓÑFS×@Û`•Œ©0/×ÓÁ&;+z3H­þšPhCEo'ÛºÚ½54—® #ûµ¤$ùfl¨¯ç±ƒ{&¨¨õ• ÐüWoæUq/¬Û¹¦3=`à6?"›Öf—è,D1v RTäf¿ôuu€ù¦¿‡“íñ3D³ÂüwgÜ…V›ïœ9oaÏž¢ïß¹pú4 ÷÷!$Ť{]ª$ #ÆŽ7ÞlÂênkår&$¸±¡ÁÃκ¦ºÊt»Õð–ÿŒëÔ4EmÓênt'¨ ò>: û.\n$)%SSSýüñÃÓGÃFˆ¯'ì,~SH׆cRKä†^®:SƒÜ‡Ž³~×~+3£÷¹9 ö öÿQþÍ`íf“­–D i¼mlh<Êãú•£u[þ?t*ÿZ:®k¼–±?EïóEÅzí:ìJ$ÿhžàXt27Ò¦¼º—Y_WÖ`Ð5‹–Š÷‘p¶Þ‘õäQ›ÜëR0H¢g²>ã^jfFztXÔ_ =3eÕiËW™µolv§Â¼¦§í.36#Xa5u¾ý%arVò©¨}þ HçƒóÓ1ú×EqÅæ„»¥%Å v ;lgkéPÕÏÑÒ±ñèn •–Ѷ¤ÅÉ—ÎùaMPÙ—r İ4×û§Îœu÷ËîuJ˜O¶ËÞÕÜP;ÈÛ]–4ø¼·Go‰¾ð›G›i”K°Ù†›™ñÂØu–û%¥¤‰ÊQã”#’qÓk¤“Ãy©%Éÿ+åqw‘ ¸%>äÂv³¾ÝOËhdZN^‘O*¾—ß¾v5-éVñÇ¢ò¯¥0+üõ‹Ú ¸Åã§Øw¯ëÐR)™Ûlìön·ßµÞîqt§LPÂmØìN °6›WÿuëZjâõQJ Wž:mÜä©ü³¨éˆp^j‰‹§mâkI ƒO˾P fÖ^ÀÄÐĘ̂0ÿãf?¾ 4?'•ƒîuJÚšdjó¤û[Y)l§ÌPo/7›`³; ­t:òúÕs µÄZˈ€Sý$¥Vm±`&%+‚Ð…/r @Èó±°àbrÕ Î-ÁÌ3ã½\Ag¥’V›ï«<¹·D?L«þ+‹»D¿þ¥ÅŸ!þeðL‹¶º×éa& H°·;è¬x Øy»¯·Üßnî±ß@XM·[A)*ÈËHK½“x~W<ímêjk¹ºéÄð…ÔÊÁØ(ÌÏ5N™S6³ž<†íþ£^Ä“9hƒÜÒ² µ…yïH-7Üëè0N’õ4ãjh`)i·³–¦úÑaAÓ5æ+Mlå9µœ‚ƒçKN^жÁªØˆó§†P¥a žImMu±¶€Aø$ý^Ôyÿ}.^”m hº|þìÌy ‰EWm¢´ä“@sÐJYrÚB˜ÿVVüè%Þj”U§½~þ4!&’ò¥ûɉ.û,†Žs,ð—Üë´”ά‡ucCƒù¾Ã z›öüél½ã¸õÉðXòç8ìNî¶Vÿ»gãž?ÿóû?W{g-Щýþí+7œGºòç¥@_(ä݇Œ½rã6â57ÜëÐ&3q¾Oß~›¬’›mÙw~À y¼ÊTÎúÀñîd´Îüñý;Ÿ?ºÛþ+KVOQÑö¼âŒt2x µæûí=lÞ¾|aùþ5u Ÿ‹ña~^9¯²ÞçæˆŠ‰ÉÉ+ÎÒÔÖÔ]ÁÚ"›9Z: ¿~] (*È ˜¨6}å¦ddÿظìç弑þÿ^Ì’ä¯G…g¿È,-ù$7Xñ·Ù¿ë­^O™Äˆãîu(“€€ÀyÚÛØØ¸a÷ÊK7ð#·zë®Ó®öð©ODG[oˆt@ðä"Ÿð•SÜØ¯y4IEND®B`‚PKÖ5.I  ޹)¹)5Pictures/100000000000033100000061DFC43C16850B5AD3.png‰PNG  IHDR1ai’¸½)€IDATxœí \LëÿÇ'ÊÒ:´ˆ’²üpm]d+ -·Å%D7Ù®,¹²D(E!‘”´‘”®åÚ¹–ü‰JI*¥ˆhoþß:~cþ35MÓÌœ™æû~=¯óšyzæ<ßÎùÎ<Ÿ³=)FADìù\Q{`;ÙQˆ#nnnd‡ð“mÛ¶‘Ò2„*V"Ev‚4JýáÙl‡ud"^Äx’3˜"„æÒP“!‚ ‚j2AAòAM† ‚ B>¨ÉAAÈ5‚ ‚ ù &CA!Ôd‚ ‚ ä#UZQ‹“Æ I J—’èèke-î]¡¢£”DG©vdG Â%µ4Ú×Ê:²£h›Èu””Ú3w“„&_öÞ;WÁy·QªkihøÁ?ê¯]â¬Í¦£T»¨C{Óî\¡B©“ôQï]dG Ò*pdáqžx?‚ ‚ ù &C„#fôc|+ݾ½2µ·ªšUMÓÈt~/õ>M}$19‹ŽZú)„tZš!\ïh̤­‚š An¨®ªz—• ^Ç…Ÿ025·^êÜM¾'Ùqñ’øÈ“G):"ùÞ­C‘‰2²²¬¹ë‚tÒ_¾ ;уó ázGc† mÔd‚pCûÕúô…2â—‰ó,õX¿â]Væ±};ÿÚIvh<#ãås²Ca0C¤¥ &C¤µ¨kõsÙé³ÚÎìïØÓ“f˜ 2EÔ7zßÏÕ„˜›—’2Ò^ÔÕÔè1XðÇu-m»é¿~ˆ¹ó¬CGÖO}ÿV6üÐ Š¡ï<¹7òø¡7¯Ó$%%ûêüÏÄÉ3çýƸþüÜœ°#2_¥æ¿WUÓ€6ÓÍ,µõ3¶ùVö56ìÄ£;7>äåVUV(ªPuõ ,-ƒDƒ3ÁÁ~^Œÿ…Ë.Ÿ F³8ìâÛ×/æ @ŽŒLrërREù÷³·Ÿñ`[‹&fwéÁúAž§3! Ôd‚ð€>:º&– bNòà.]“±r|ÿž˜Ð@úÛû7®¦¿xæWþí¥áÌJ£Ÿ"ê+ËËaŒÜ¾Ú¡¶¶–¨|ï”Ì—/è§^`lóv[ƒ(ñöÍ«—P®'_½mÏø©3‰Ê/¥ŸWÙ˜ÂXK_ÿÛÌt(×/Äù†ÅQÕ5Ùÿ§œtñ#àŠŠ³'ÅG…²_¡˜ÀI†CzP0Cò@M† oÐÕF9uümF“÷úd¥§Áˆ+!!af»xêœyò J/_úxìÞ°²²¢ÀŸý ”Tý/UeeÅáÝ[ÇM™1¡ƒJ/µâÂ×.œ8vðïØÓ“MÌèÀPzÈíºªrÞïKæ˜÷TRþTTtýïøðß}[Ö 6EÜ`âçí¶Þà¥nÖè«ÓØËO÷Œ—Ï!·ýG¡fþïPXOäpØpEù÷„Ó§¯Þ8iÆlâ˜Ã>C„$=(˜!y &C„7hôÕ¦ÔŸQxÝTƒ¤èpXN1™»h¥ Q3È`¤WP”£ù ú¹ 6ÔTWÃX»n§7ñVUMÃÚÁùkéçø¨Ð¿Ï†A7æd ¼µX´Üî5D%j/xK«£…úû\8eµø¨Ì{÷VF¶ÓÚíž½4~ÌΟ]µÅÃÉʸÙÛƒ8ìB¢]½ƒVé§c [S›EÍþkbû ’ô `† äš AÞÐCA –% ›jðúyýí2Sç˜3VJ·oÿ›ƒ³×浜tÁ:zΜƒnæ«TxM,'N7aj3iº ‡îÜ †C€F.©iõk¾ˆ}vA‡µ¥8Ã>C„$=(˜!y &C„7¼ÏÉ¢4œŸhªAIqýx¦LíÅTß·¿‡]°ÞÊ£Lí ËO #%ÀòùÓï½è§(ûRz51öÞµK…ùy¥ŸŠkjj89Ó¢.Øl 1„}†OzP0C’@M† o fUÓìÛTƒ/Ÿ?Á²‹\w¦zEU»è©¨ÌT#Û¹ ,˾~å§"vç0è§gJ?•¸Ø[å¾}Ãa§ŒpØ.]å¸è¥­Â>C„$=(˜!y &C„7<¸õ,Õú4©É:uî£Ý·¯_äº÷`¬/úÏa_¿”öè©ÀXSö¥–]åºÁR^Q)?7çôõäN]º²YI°Ÿ' ·Š*ÔNkè ---))9k„N³pئnKOØgˆ¤3!Ôd‚ð€'îÞ¸˜ %-=vò´¦Úô詃îǦA7óe*‡½ä¿{Ë4èÂøG¬™Òp35¼Í}›¥3PŸÍJRŸ<†å¦½~ý ¢WrxR„Ã.VšÍ!I fBBªÉ˜¼l ¤¤¤”©jT Mc Û¡£Æ >*ñDØì~S’ïÛ·ë]öYÙð+÷É©çå³ÿîß¶^Ì_°´Q3r‚ÞšZYéiÿ$œÓÒ@¯¬®ª:p€ÃŽâ"‚õ†g¬¹– KAC`©7dø“ûwcB7îñcls1&òlèñqSfØ9®†·ÅE°døÃŽøJHHÐh´oe_;5\ð¢SYQNŸ§€Ã.&8É!I fˆˆÐ¨N`BxF.RMÖ(555p¤åþ«“ÍVoÝCvDH3ðÜ r`÷†•ŸKŠ) nz¼Z-Â…ùïßf¦ß¿yõâ¹Ó´º:SÍí—³io4Çüæ¥Ä„Ó§ºË+L˜6«s×n/Ÿß¿»GO…¼œìf»“nßþõ‹”Û7šÚØ+©R‹ ?ü“—t6¢~ͦõëͱ^zûÊEO×5¦6‹¨êšÙ¯Ÿ=¼~ì`Muõ÷oeÄz¨jši/‚zY,rì¡ ˜žä/Û©³2µw~nÎå¸èó¬ˆ)=a …á6):bš™eeù÷nò=9ì!hQ†IzP0CòjMÆ4–Ã\˜Ÿ_Ú3'®ÄÇ 2ÊŒ¬ØNà¹Aoqa!Èö ×Èl‡‚€FM%$$fη^èìÒ¾}6ŸÕ9zÔxÃû7ÿ9áç …¨ìÚ­»çñH‡¹FÍv ƒúr—-;×ýq).š±ÞÌÆž8³£æ*·ÝÞn.×/ÆCal£«?láŠ?‰×slym^{ãb¢FAIÅëÄé`?Oqyï‚Büøhë JI~èã…Òð‹Äaâ ×"$éAÁ ˜‚°]Òá¡ÖdLÀqI/>¿-]!×Cþ°‡ÛÕ„s¨É„žôVWU/ÁÛ5#\ÐU®›z_Í~:¿L™®7dx³ía`þkŸdÿ£;7Þf¼îÜ¥ë á£lVvm¸H$))Éþã555£&üºëH赤¸”Ǿ–~î7`ÐØ_Œf´‚Aýð餈c~™i©ï²2edeUÕ4&™šÓ×?iºI]mí¹° ¼œ·ð/ 5ÆzÙÊžJÊ¿98ÃG²3_+*ÿxÐÏiÓ_w׌—/à³ôéC9é!hQ†IzP0Cò%MFg¬¡h²ìô4J½7E¹³õì÷o³7l…ã0Æfç#Oxî ªkú†Åu”AÛ Þ@Øýªkõƒ8@Œ <”‘ö¢„D/ -ËÅŽcÆÍØôrdݘA¯º–ö«çO×I5ëÌÈÓ‡÷âƒa=°BªšæC#3;{¦cw]ŠÅ .@Y?"Ñ®Õâ?˜¦Í„‚¥’j/N:9Î^‘Ë+(ÂHÉ>°_g™BaªTí­~ ,–±FÙ½Üu!êÇë\ÐÒ™»ô`ßOÒƒ‚Ò†-‘ ’𬶦†ò?o ØŽëÜ÷ý¹Ð<èÀÄ @^N6h)))—ÞB²­Û„|©¨(rÿ®›³}MþRŸ&oYa¿ópS²ù8‡Àœô¶È-81:Ü÷VF¼ÕåÞõËžA‘tYÆa„d¼|þ.+S䦇ã.D×j ‘IŠ  0=~ Z"A$5Ùµ ç)õÖi?¦Šé7`ÍòU°q½Ý\ö ­F««óÙº¡²¢|¡³K_ݤÛÖl°Î-/+óÝéjdjala«¤JÍÍÎòuwMOM Eh²F z9÷nÔ WFV–ÂrÓ'nÁ¹oßõr—h·Àiõ¸)3:v”yüïíSG@ËÈÀÃÄÃPœGˆpAÈ!ïÇ÷n©ªi,^µA½¯6 ½ïsÏ„ý{þ:ÓܺÙ5 mL„OˆH%MV]U•Ÿ›s-).æÔqJÃC4ô?ͳ[’|÷VJòý¸ˆ¨?~"õi²þˆÑsmíÉ‹·mBÌpÚeÄ8CÇ [‰Ê>:ºKÖnr±·"æén Î=€97èåÜ-ør\tMu5¬ Ä"Qc8sNç®r»7¬L}ò¨¥"\à°nóF[8<ݾfÓŸ@øe"A!¦Â?DE$µ&c3ûˆÍ²•#ÇM¢¿…!|íO'Kc8ÒR¦ö=äÓE®ŒÓÄÐŽð+;Æ·ZÚ”úy}šôŸ¦´Ü·ÑÆLpîüøßÛõ}͘ÍX YsçYk"D8§—z¿°¸Äèðo\ùø¡ ²¢BQEUUMÃÄÒnÈHv—¼qÓá¢"„Z“5 ŒŽ3ÍmteªWPRYáºÃc½ó޵õó߬Ûé-¯¨DF€âÓí„‘H];›Þ–ºóR83èåÐ-˜X¿‚2;ï<."DZD7ùžÖÎPZúA¼!ZÀô@ø‡Hˆ¡ÖdŒ_3¶a©õóÇ;ÈȲ 2‚‘ã »õÿ\R ËácÇ *L1…¸»«E´Ô—ÂA/çnÁ„±l§Î¼A „_$µ&cDBBÂyóN'Kã‹1‘c §=޵ÍÉCÞ°­;w•ƒeÈ!ï%k6 >N„ -uç¥p`Ð˹[°\÷Å…ʾ”·‘‡"‚ "ð‹‘ÑdU]Ój©SÈÁ}vl:•È4j¦>MŽ î¡ èušqJɯ_Ù³qUÝ}Ágø!‚´ãú,l&9)É÷íÛõ.ûŒ¬lø•ûd‡ƒpƒ¨ˆÓd’’’«¶x¬¶›w5áÜXC£Q~%êOøyåådŸ:“¨±óŸÄØ·®A=lzRCk˜ zùáÎ˹[ð,s›³']‰é.¯0uö<ÙÎ]à§ö¸ÏJ½¡?Tú#ˆHyòˆç깚š¼ ›]úTÒˆÈ!*"AÄ4ÐWw œ1¡¾;7û1è*×-%ùABTh×nÝ—¹l¡7sܸ F\¨é6È`$‰‹3¬½ÛÖÓh´¥nf¼€ó‚?ÖÂüõpT’ð8'pÍÑ£GÿóŸÿ ,J? ¬½>>ÞÌÌLQQ‘ìXøEEy¹‰!ý¢²?ð‚40î*ýmÐùk63¶´ƒÂãÈÈãàÁƒ:::ó˜8cÝMíÖúF z9ôæ¼Ý‚ ô†‡Â¾k#BRRRA,ƒ$qöæÕ˸ˆà´”'Å…Úµk§ ¬:zÒK;8fel–ù*5:øèÛÌôyï ZŸ¾³ûéöÛ¦ÎÊ0Õ7j`öö™ÅÊ„þòåËþþþòòò¦¦¦gMÞ²Â~çáÂf·)8Ù§lÒ†•/¥ŸWÙ˜‚£×Àá”ëâ@k‚â¤×‹DÊÕÖÖþÓ@Ûg" j2QÅÒ,¤‹³Cû`øœ÷ûÒs­ä”*++ž?~xdïv›Ã| ¿Ôâ¢Âcûv‚ ›ffij½PQEµäcÑ…³gC‡ôúeò4%Õ^-ê´Q{ šÐ VœñÖõY²!Èò²2ß®F¦Æ¶JªÔÜì,_w×ôÔPQ Éæÿî…õd*‡û´Ñ´!fÆf]gˆŸ2m½ÁKÿܬѷ~*Ĭô—žîK>nûÍD.åPœ‘j2‘ÅÒ,d‰³Üìú‰âÌlì‰SbRÒÒ£æÑ޲¾¨ hXUU Úk…ëëÅÊÔÞ0lƒV»–w.ìDKŸŠjÊÀMèéFœñÐõ™˜;äˈq†„”úèè.Y»ÉÅÞê]V&›Ïr¸O›J›FÉ{÷VF¶ÓÚížÄm²À}ƒU[<œ¬ŒohÝ”CqF¨ÉÚ¬âŒìˆ¡CÀâL«ÿ€”äGön_¼f“¼ÂtúQ×ÑÛ¤§¦ÀÒÄrÓg§ÏµM–ÙŠÇ蘼äÑ„žVqVWWÇ«•óÃõÙÄêÿÝý£¡¥Mi8ÕÊæ#-ݧ¬-Yñhä⦚Výé´’?ýÙÚ@Ê±Š³™&sHŒ§ÍƒšŒöïß¿uëV>­üóçÏÅ Ðob@„ iiiÆ[¬H¡²²’H’oß¾ñO“s]¾àæ¥Ä[W.èè Ö1ZäèÃF2>ÁZ˜_ÂŒ~Ë%•úK–ôÓi\Àd`/œ&ô¥¥¥Íˆ ëD>ð63yîúLUÓd|K¸¹ÔÕÕ²ùHK÷)SÚ4EÙ—Ò«‰±÷®]‚.ýT¿Ý@¾4ºr¾¦œÀòþ;"C>—~@wb j2rXµj•››[‹>2xðà””6 ”””ÌÌÌà8füøñĘwóæÍVE‰ð‡êÿÝÌÎsüýýÙ4€Ä䕈¾ýõŽD_ˆ ;š,-å ”¨ ÿîò ¶Ž«Œæ˜m>—|¤°81ÐkJ?•pÝ;“½pšÐËÉÉñïØ ’R‚M™iÓ¦A>Ìš5«K—zÇ‹mÛ¶ñ6Þº>Ë´üø¡¥û”)mÒÒÅÞªQ7Fr­ÌSš½×E__Ÿ¸ð¢­]V²¢†ggRVP“‰<¬R A˜°cØBg(y9ÙÉ÷nݾráùㇾ;\««ªf™Û óß*ù¨ ¤ÂøAB«uï©À~ýåß¿5õ'¦óhBO‡UŠñÒ]Ÿ[ºO99íìç ‚LQ…ºÀiíýa]äºKKK÷lÖÆf"rLR  ¨ÉD”bH³(ÅXQUÓ€blazdïöذ„&SR¥‚&+È}Ç¤É Þ¿ƒ¥¢ÊÏë>íÚIÖÕÕ2z˜R&Îà04¡¤#×g~ìÓÔ'a¹i¯_¿ƒè•¬§ÍD1åPŠ‘ j2¥Ò,Â#żÝ\þûïm‡uý2ùçí2¦ƒ&ûòùñ¶Ÿn½W|ÔI&{bލ~~^Xé&/_RT˜“™®«?Œ^y>"„Ã`ÄÖ„^ðRŒ€D×gèšÞ?öiqQ…å‚{Ø_ F?l¡”C)&$p©É„Íæ,%ùþ±}»Þe¿‘‘• ¿rŸìpø‚­­íðáÃ/ň}Í„”””2Uª¡ila;tÔX^õÅ´M3aË=¡¢_¿~þþþ¤K1:í;t(ùXtx÷V#ûªDí]\XR?{“V=¢Í\»ÅIgÃï\ýÛ϶9Ö å‹ òÏGž¼ûÏ¥Ž22ŒsÆöRïš,ÐÇÃÉuUM£° ï|ÄÉ—ÏþÛ¹«\Ù—ÒfƒCú1cÆŒ7NÀRŒ)®Ï Å Ù’¢#¦™YV–ï&ß“û”ª¦™‘ö"ø —Å"Ç ŠÙéiQAþ²:+S{ççæ\Ž‹ž1Ϫ}‡ŽÂŸrrrrîîî|’bÂö[-:„ódñ‘'xîàá~ª©©Ã/Â&–>rÛcݺud‡ðØæ¹oß@¹ãêdc³Õ[÷ðd\ìGž§“H3¹²£ø‰Õb§ÇÿÞþð>×Ûm=c=ˆ-ú}E0j:¬ÛrÈcKÂéSPèmÚ·ï°ÌÅñ¢è³gþMKyâdiLÔHIKo;è³m=h2ÆþN 14¡·±±!«k²\ŸµõêO»‚p‡Biüاslym^{ãb¢FAIÅëÄé`?OÐdǼwA®…?åÔÔÔ\]]ùÚwˆ­NàR“µfK¥·b¡F#obCï9®=§Kå L{rº0?ïæ¥Ä3'à(pÁ(Pf­ì‚u?r’f¼ ëRÕ4Ç™ÙÙÓ b9 O<khš,;=Òppìl=ûýÛ,Ç [gηflv>òd€çªº¦oX\£ÇkÌcÝìoGàG:½]?¿ö›W/ã"‚ÓRž~h×®‚²êèISL,íºvëÞª… "6 NàB'ðì<YEEù“ûwÝœíé“A§>MÞ²Â~çá!£Æ°ù8l8o·õô«¼0(B¹žt~õ¶=ã§ÎüÑEÃÉÞÊŠŠ³'Ïd±áKéçU6¦°•é5o3Ó¡\¿²Ä½>1:Ü÷Vú´{°5¡Ü»~Ù3(’¾¹9 O<©mØÑ„Y ˆ­uîûþ\ht`|»è3³çådÃwLJJÊe§7?®V°ÒštbJ`à[Æ«ìŒW7þNð ŠbÚAáÔ ÍÂ3M&Ùà_[^Væ»ÓÕÈÔÂØÂVI•š›åëîšžš[¶õüß °jgØ.‡<ܪ«*çý¾ÔhŽyO%åOEE×ÿŽðÝ·eÝ`ƒQÝä{Ržõ£ÔŸŒùžpúÔâÕ'͘ÝFø†iY×âçôéÒ?7kô­ŸÇ/+ýe€§{ÆËç>nûÍrß¾9êå.!ÑnÓêqSftì(óøßÛ§Ž€f‘‡‰‡9 O<¹vá<,‰-L©Ÿ¹`ÍòU À¼Ý\ö ­F««óÙº¡²¢|¡³ 44µïhJ ŸÓáG:AMÈ¡}ðKŸ1×J^A©²²âùã‡GöneàK÷?FAZê„fá™&#žx‚°FŒ3¤[}tt—¬ÝäboÅ~^ǘ“_K?[,Zn÷Ç¢F‰Ú ÞÒêh¡þ>ÎE&¬ÄɘÒO%°#Mm±'ïÝ[ÙNk·{Òoó o°j‹‡“•1ã…êËqÑ5ÕÕ°6H¢ÆpæœÎ]åvoX™úäQ‹Â+ª«ªòss®%ÅÅœ:Nixœ›þ§yvK’ïÞJI¾õçÂOÀ1þˆÑsmí[+Ó)7»~âG3{┘”´ô¨s8Œk÷"‚ ˆ˜ƒ:¡Yx¿‰Õÿ»SC«~Ö“b¶Fª™¯Ra9qº Sý¤é&ðÏ<ºsƒéŸamÉŠG@#'-Õã*ùøÓ_ Ôn}G3f369nRÌg\‡×&it–2›e+a‹ÑßÂWbíO'KãCÞÊÔÞ¡‡|ºÈuƒ¤'¾* •é¤Õ@Jòƒ#{·/^³I^áÇ,_:õ£®=âgÔ‚ âꄦà½&£ªi2¾%<¼êêjÙ|ä}N,—ÏŸÞè_KXö“ªš'‘”})½š{ïÚ¥Âü¼ÒOÅ555µµÌa+WPVml\†'>@¶Í4·Ñ<”©^AIe…ëõÎ;Ö.‡·ëvzË+* ,ªV¦H1×å n^J¼u傎Þ`ý£õGŽ8l¤H?”Ž "< Nh Þk2âÂm‹øTTÄæ¯%™ÿ™.]åš]gé§{+V2&ʾ~¡4ÌÚÇÃðÚ$Œ×ài4Ú†¥ÖÏ?ì #Ë*ÈF6\ïû\R ËácÇ *ÌzZ™N}û뉾v4YZÊ(QAþÝålWÍ1ç}¸‚ bꄦ ¿KyE¥üÜœÓד ±Ü,ìgë&öó„ ­¨B]à´v€þ°.rÝ¥¥¥%%%gÐal&×½GqáPÊl¯Ö™úä1,7íõë7`½’U÷TT†m›ý†Í¶æGx¢U]Ój©SÈÁ}vl:•È”…©O“cÃ{((zZ³p~\DÈézCš™5‘Wðp©ªi@1¶° =²w{lØ Ôd‚ ‚GLti𬲢œn„£õ“ûwcB7îñcls1&òlèñqSfÏš¶ˆâ¢Jƒ¼e¬ ;â Ú™F£}+ûÚ©s½)¯þˆÑ¯ž?½|>šqn߯_Ù³qUÝ}Ágø^`®Ý’›—³^§x¹¯Ù¶—^{ÖgëZ]ÓÆí¦ËÖýµ{ÃÊý[7ŒŒoÖú†kx˜NÞn.ÿý÷¶Ãº¿~™üó΀ ÓŒA“}ùü‰Á#”ÆìY\6KcDÀ0%I£ù€IÒ–C@‚&ƒM :):bš™eeù÷nò=çX/Œ ½}墧ëS›ETuÍìŒ×ÏÞ ?v°¦ºúû·2.z¡ªif¤½>èe±È±‡‚bvzZT¿l§ÎÊÔÞ f/ÇEϘgÕ¾CÇYæ6gO»Ó]^aêìy²»À×þ¸ÏJ½¡?¶>?ÂkHJJ®Úâ±ÚnÞÕ„sc FMø•¨?áç•—“=~êL¢rñŸÄØ·®A=è3ž‡Áótjß¡CÉǢû·ÂjûªDí]\XR?QV=žÇPZaŒôâwI‚"¢ˆ­N A“ië JI~èã…Òp@›`•Ûno7—ëã¡06ÖÕ¶pÅŸ\ô2Çf‘׿µ7.&@!j”T¼Nœöó„m}Ì{èZ^QÉÉÕýЮ¿Î@¡\³_k‡Äk~„×6è«;Ž |wnöbÐU®ìÙ„¨Ð®Ýº/sÙBoæ¸qd0Ôƒtd0’·1ð<¬;=þ÷ö‡÷¹Þnëë;ÊÈò®8±¢Q{`t GaMÌ6ŒØê4™Ó¦¾î®/_HJJÒ'j5Þðð餈c~™i©ï²2edeUÕ4&™šs7Á¤é&uµµç‚òrÞ‚V2jŒõ²•=•”sp†õgg¾Vüßs­ {©jb"Ó_¤¨öÖøÏÄÉó,!,ø^›ÁvùÊ{×.AúöpƒŒôÙ¶žF£-ýs3ãÙ`Èò¬…£Uøëá¨$ÞÚ+ñ<àëçt:."øþ«?P(4eÕÃF˜Ù.V饯ÃÈÅ™ººÚ»ÿ\:w*ˆ8íϵ=0ÏŠ×þ>ŽqÇNm×N¬¿×ÂO’3DD[À¥&kô¥©£¦zؾ{#X›É+(Ânà¢ß¦êe …©Rµ·ú°X¦J½¡Ã¡°ïš“ðÚ$ìF!#ã®Òß¿Öh3cK;(-í‹“4ãG:õè©°pÅ:(Í„‹´œoe_ÿŽ=Z˜ÿžx0ªQûyJs7±1*æÄ¸)zˆÄc½³¢ ÕÄÒ~IÙ?ýŽð “„ë ¡pkeÒ"P'pP*tôÄÉs¬ l2ñ„çIÂ+k fÂgP“!Âjkko]N‚6=5…Ò0ÏœßN=Ÿ·72¹ 0{£b•a æ‹–_Š;ñßýçm½Áÿ/S¦‹ù-¤¼Eh“3!Ôd‚ð…EÆ’ ô0ÈÌÖþ—ÉÓø}[46ÀlŒŠA˜XÚÍ2·¾}åbLèñ×/žíu]ä»'$éÏ#[„?I0CA‚š A¾@Œµ¿-]aíà,˜¹°nÖ¨$Âø©3¡„ø†õ#þ)„W’`† ‚5‚ |0¡‡QêÑsí54"®ñ.l€›5*&fd8{2ðõ‹g”†‹V­‰aBø“3$¨Éá Á‰7¯_Œ †±Êc½³J/5S›E“Íøg±Å… 0£âÊŠòËçÏž;Tðþ¥a~ÈÙ¿ý>qš1obEþ$Á A j2Aø‚tûöSLæByòà. ºo_?¼{ë©#f™Û@aò˜ã ¼².ýTšxúÔ—ÒÏ0$7iŽõBý£y'BGD“3á¨Éá/CFŽòþmV\DÈÕ„˜ð£~Ñ!Ǧ›Í±Y¤Ú[½õë§·Þ8/'û\XЕó1UU•ed@̶ZÐìEHëák’ðÐÊ3á+¨ÉTuMÇ [ü±æBLTBThbtxRLdÂÃW­Y'“Qqëm€—Î5¢ÕÕ)(©Ì²°nfÁù5P„'ð¨ÉAAÈ5‚ ‚ ù &C¤žn¤$$pznqsAHäÿXÐA+5VŠIEND®B`‚PKÖ5.I styles.xmlí]Û’ã¶Ñ¾ÏS¨”r®L‰¤ÎϦ’»²k;¶ãÛDB³Éâa¤ñUž%–' Î)€©Ãh4û§ê÷Ñ 4úën4šøÕŸöÛ°÷Ó,ˆ£Ç¾3°û=y±DëÇþ?ùÆš÷ÿôîw_Å«UàÁ?öŠ-Œr+ËŸC˜õs”=ÐÆÇ~‘F1È‚ì![˜=äÞCœÀˆ3=ÈÔd(ú„tfÊNˆeîîsSfL[áKó‘ ±Ìí§`gÊŒi‘NeöUlʼÏBk[^¼M@Ԥ؇Aô鱿Éóäa8ÜívƒÝh§ë¡³X,†¤Uì º¤HCBå{CBa3åÔ)ž´¶çÉ0…IœæB•y€BÚq…{mòm¨w/ÜÊIשï+I‘8£!r5dèÖSw¿ïW"g3‹$ c!Drœjdpì!¦nƒ )ƒjºašZ*˜á>i€›@HØ*=ÈVƺdk…ÔC%€0ä*¦¤ì&Ž­mf2Ì8y¸+Ñ"ËF¹ ¾_~â6 ¯(>²q¤EÓí¿ã+ä*F«ã xÐò¡fï¾¢‘M<îÑ¿±ýÔ??o—qèô{(Œq²m>Ë­ýžÔ ŽSD‚î­Œ¶›Gùo‚¼÷mùj˜?€$Îþ(ÑÇz­H× ú1á´Rü{?ƒ(sõV ™²b€§YÈû?Áu‚´ÒNû³Ö0B–‚R¶ ²¬…|ã(nP`•P!_}ümìÃ4ª$Aî¡ucì¡ßR²k«¸“Š}ˆ•ì½o½F©žüҀļö†f³2²7LhhoR-]„C6~‚/¨mý|¢ùÁYýôÙÿ ÿ ~-šU*ј¨ó9Ëáö$}–ñ¶EL>]¦¡nbÏéÆŽËîÃ(B¶Ýã=3×)H6×ç´ìo+AK,öW´=ÄóÊò4þQ‚ÆhGðûÑx:ã~çh CÑ2s+ùã*~Ø¡®¬8ÉÉòÅþ›±dd>; I‹Ö@kÿØ·Ž3w‚HÙþ|Øž£,ßB›"he ðЖÌÚÄið[ŒJ팛¨ŸðÜ<-Ê#û= UõÊÔ¢éì‚|cÑî „™d] HÑ|Eï¤ Ó[ Èc<2¹À‡1%a²|"Ç2…m"X—óœÉcáp¼쇩•/+æ… âôäÙp!¹Œ(E'¶?½Ø‚Ë}0›"ƒH —¦AÔlò´€¡ta™iÏ‚ßP»ã&9y‚h]€5z#òÀC iž"Ãùîk¡!˜£ÄÑú„=2;å˜ÚW€¨lJ<.§¡£³Î™¼í· oa’ð†÷ßމ·½!Ü×ÃImTA¥W´n‚úÈ¢é»ïû%v• `)ØýF«EÊß<'ܬø(Ͱˆ,$ „Á6âwRD^^ÐqA³DóF(·~nµ– 0áAìÁxáNJ߬:H‚´Y:æg+¾E+– ò8U·¼nA‘7?÷€()²Mä¡ûu)`†P6Zz\Æ)ölmh¡@¦‚$ö|êÀVïjƒ£'5ßüabåñæ\Ûþwl`y@jÑ?#OòAê÷µ!‚ƒ‚ 凨‹úÍ.¥ñš¤ri›£’²^Ï–£%­èUô-¾ ´B`MÒºv#¬0™àôà_®ý¯eì?s" ¤U$>q9(pHã"'Q2„OØîÊÈ™U;ÿžT}‘èxG${´ŽD8^2V1­î(’H‘)âE ‚ ©csR„La Rû‘'$ÏšNI,/–qžã¤=°ç#ÒF¥ò è¿ë)N»E‹Î˜ljaþ%ð>­S\+—d•_ÎJóZ®îŽ$/ŒH^ÂxÎΛsé]«»gµ÷œÚ¢çÚlÑ#Ïv0XoÐô—qè·^͘,ŒªýFsê¶^¼½œŠn)—KZ‹u‘I#èÚoK^í…~åÒ9”ñ”ßR:£Ë¢9¦ gŠìà¤ÌœE ®Aª'Yµ…¤\Üsl½Ûhv„¥Ý£½qŽB€g´“Ü…µ*˜Ï ¾ÙNO’L´3ÙŒ­ç»È‡û3ÚN@úk´3¡|®Çö%•侺¢2Šžs_dï"$;ؼü@ ϸžëÀ3e赤xl”ËnïÖsNÊśռœtÜ‚€ð·2.˜^7¬·sÍØê¸ˆqУÁxêNËjaþœ y=ˆO!Hž®cŸîÄ­³§XË’^%qÈ †oâ8ÿ ËÃðÓ%J·]€hHîÎRƒÉâ0ðUE8Åÿc-1Nvr$²cÛ_´,Ìh2+Ó=O½NIë"•=]ÙÓØªâptÚñÐ#G7<šm7<ÇNt\©lnž¸ÍˆÛÅsT ÎE²÷ÜYÈ5j§×¯r^&Q²¤(N· l™?ÔìŽm›ªùS¿ùQ÷_ßüÍÁn¢Tñ‡ì(ϰëÔ^pT=˜öNx Rc=ð²ÛÅÕöêÓÖ9;eéš³ë¸;æì2¦š¡@³Ó–°²]7«ÌB¸ÊŠ”ê¹öô,©Á; b—´@T5dNÊF¹¹“­m>šôkmô$Ñàbù«lš•ZXF§¥ú\–1põw€¯Ü#xt³¥IÊÄf«SVv¶ÍÖhá.îj³59‹›ßl¥è?Ø6¼Œ•ø¾1 d½:Í-j?óÆ·tâ'¼zÔ*¸ÕicùØ>;¨Äºi:µæ—”ZÛ>b¿§Y(>Å9¼®Ñæy.K‹´y^%ý²J†æ íBo’íúQ¹$¬l,+¾¸ÙžqNNœ3*;´Zï%G35>ЦæÔð—'—ÈÈÍãS‡Œ¾Ë²Éôîm@‚cËE‘©éÎۿ㘟tBÃÝ1^ý\,ó· ]Ó{ vmMu:eŒ^å'ËôÂ2MJ$({52ñCzœB6”8þR„!ÌŽCÉ1>N*_ÑV?Iª¹\NþÕ¬†¤ú£Ù¦~,Í=©ÈZü¤Ùtùq‚Oj­rªžLb¤Tr—=)i£ÿ›Ûµû6~Ûï«nÐs–RgZRz=uv‚ZI² ||q(=5©¤`Ò’‹­Ný Ž}YðªÞÁ!‹xx†‚O´Ncl~ ² ‡>†F†éƒ&ÆÐp}8®9Æë3\íSï2FiJÅŒ®WsiÃ@("oSªD3L•¨E(¤OE­3+Pso2ÿÂ\%_G¾‰FYG…Hƒ4éƒò‚ê Uôf&$z¿m² ü¢ÎdpÉÙ7Q¥X´|-ç^Oë‡=ÏÔÑ¿Ÿö|CaÏŽfCqØÄ|Ð ÿLŸ¶Q¹éÝSX0´¼ aû@ܘ@ßrg‡‡êÉ•xxoií<¿;c‹Ô' ).Š•)"{ËÃÉÊ{êhÕJ¡‘‡Ó$ï‘HÚ#ë¨Ý¢tó7ŠùA2t)Û“co[=Ÿ¨ßC‘ÙðR硞xi³FHj¢ŒœÖÄoaÉŸòŽ£)FÆjá«ÇAŽy¹ÒI•Q×»ÜĢޅöÿd[ ù¥‚`‰šÉߪê¶FÂú&WqÆ;ä9K„éVYš©=?.u¬œjÕéÒPËîIZ¦¼<Â’.É%¯IûcµöÇ×ÐþèÚ½*íOÔÚŸ\Cûã hüª´?Ukz íO. ýÉ«ÒþL­ýÙ5´?½€ö§¯Jûsµöç×ÐþìÍk¡ÖþâÚŸ¿qí;*Ý;×Ðüâ­k~ Öýà*ÚÇÇNÞ¸ú]µúÝÕ_m’1)øè_ìh~œ\¾ÒqúroÒÈìUüÉûæ¬X­‚=>"ùJ6Ó˜%˾4¸¸½,!V~?[_Z[ûÑ­¡Ah0iX—=øÝ"&Ž0GŒ1] ±.ûö»El²°ÝÖˆ1¦«!Öe¯·ˆÍæ³qkÄÓÕëR¸[ÄóÑ¢5bŒéjˆu©)Ü)b(£Ÿ;NKÄÓÕëR‡¸[ÄF³ykÀ(ÏÕðêR¹¸[¼&³IÛ¼C0] ±.»El6sÚæö‚éjˆuª’Ü-d‹é¼mâ!˜N…Ljn[RÑÜêU–TÜK—T^?øw\=©5éw4Ÿ@XÀÛ<¾`^=qÛïÓMWO»Å#æ{ñéTƒØá…ʽø´Å;ú—©ž4"v‹Ç$L—D·ZöÑ ‹²ˆp" „hDw5"°Â=UÒÈ÷`ÊW¡Û*]bèÂCŸ§(a2¹å‡ ä T+¿©-“Ïw#}x¦ölE\­~C8²¡oÅǦZ|£õðrp¦³gä_xÁ¬Þ ^ÎH%3ö%æÁ¼­å$ªbe}ÜÖÑg¢=¯)ê(ã‡aPP8÷ëu¾óùÝ=ëLNuV·}v›ûq›¡ÊL•XÆø-§sg¶7“5Õ'oÓolóð–Íù>óÛÌði}‘— Aõ× øÌh…¨Çþ“Cž ׈ÏÖAža§Æc+ú,‹“‡ÕHÖ°™U˜{ˆE®ˆUÿ”l\ŠÒ‰Un“׸ðÉZÉW~Þý9I÷=w°è}QBVf§mì¤f*5ƒÀØ^v@6„ŒtÓ€h«Fûî=Á4ÃejJ\d@¸BÞïs»9¨”¼¾ç…yú'ë ÿÎ8“Nî†Ï ,‡‡ÿ$PÉç3B/'?ö½"%ÑöÍg]’*‚ϺbíÇ4/~²|Š$Ê þåÁ—çAïÏ ‚øËÞߺÿñ÷/{®m/,×vlÍ ˜Ìã?æõÏè)ýÀ5öVɯGAS#c•Ñzüé2±¯«/f”ó•53­~‚”Æþ‘¼=‹¡üýLÒ“Û•ƒ‰RñÁç»D,:*MåëÔÊQ&-BÖÈ<‚|É|=¾«:Æí÷"Q 9PYã–žêª\µœé°>é„~a§ˆòwÓ¹ÌJŸiÃÊœ‡êeŒ?æ¯'yÃÿPK ~”‘ÁPKÖ5.Imeta.xml”ËŽ›0†÷} äÎlC‚Eµ‹ª•fÔJM¥îFŽí·`#c†ôík®a¦‘‰ çÿ~Ÿ›!{8W¥÷"L#µÚ à Å4—ªØûOþ<äï2}O·/#φb˜Ô:Âwf‘‡#mݳÇA ‰“ ^áF¯àÒºõù¼5ƒ–ÛGŸ1~º¿O®ˆ×Fö‡•¢É1Nßð“0Ò…PÂÙµÉåÁˆ¯Cð>ÀA„wRµççŸÛä9‰½ð\ýK0 1ªÐÝÇV–ܧ4—3Έ•¶ù‡Úœ½0H½'ªZZfpQzfžöÑÆ“a:‰ñ€­F²ÜÛÆº†+™7Ä-=”ÂgºUÖíŒAYÑ✣úЗ=‡Ñ­Wh²]‚††Ö§åo&­Ó†_ÎŽãÙÃNÎĬ0³¸‰Óm8‰Ê-¸;I+šš2—ï-›D(Žœšm§pq”JðÉïîþ|QGí…·aÑmØÿ“N7äîÛÄÓž×lžÁW·^ûÓäPKûœ>Á§PKÖ5.I settings.xmlÍZÛrâ8}߯Hñº•'!¨ SÆà„`n o²-°ƒ,¹$9†|ý¶lÈdìfmm^¾tËÝçtŸ–ùö}‘³ÌEÈèmÁøR*œaê1?¤óÛÂhhŸß¾×þøÆf³ÐÃUŸyI„©<XJ¸DœÁíTTóÓ·…„Ó*C"UŠ",ªÒ«²ÓÍmÕ÷WW3gù‘% éâ¶HW‹Å4M¿¤—_ŸJ¥RÌÎn.õ…óϺʯ~ïŠ1öæHÝ/&svQ*]óï…³õ"ß…æ¢PÛÄaóøµokùÇy(q¤bs¶>¬–v[—Õ—§oQ+ìºï÷{Æp½É1²¸°9#W1œ!ŒÎ µòMéëåÅ·âG;Ÿ·ÝÆ3¹Óxé8»“ЗÁNÃWF©\>Îø=çÁîe_TŒ›ÊaÖKìа :Çb˃ËÁˆj’'ø0-Zç,¸Ã|¼Ïú ñióçŠÏCêã%ö?k7ʲ{€|õ¹·ü­¥ ÉClè#ð·{FåÒ0·»/Wåëréë¡vEè|zºdfõ0<3í쥊"âåQ¶ëLJí4~]ªTŒ‰8e,‚­mԌˣ S­X"-F’ˆn“{mýØåÖëŒ-NÆîq±‘'ß½öÊeµ%˜`Obßæpà€•ï8ø¾Èì;½®[»/€FùùÖšH8’ШÿMíA%“=ÎD г̾ª=¤¥¡äëÛuä-æœ%t»XŸÊ‰Å ™Œèz“R&³ôí`ÏqÔÏìßq¡§kùY™Õ™c->’s݉‹ŸJŒ¹ÍY4À2Ùn9'ƒû/e Œøx»XÂÇdÕCÍUV;ˆ/lÆ#$‡ì!‰\œÅDÓÃ9Xx/ËŽ°?DnŒÃãÌCªÁ~BãÛ@ã½=Âø áYõQÉŸ@V"DƒŸ_uNå_Å«ÁQšUûÓ;³HÇØï…žLø~jáÁ& I‰@L=°(K¼/#êÂØ´ÈÜl¢ÃO†°ÁJÀ ]8[“dFXª­~©8éªã=Á?˜«…„ŠtŠEsÄô£ëëÓ?(hNp3ŠåÊ„(*žÞMÉ ŽV¹IÂ9U›::º‰Ÿ ßîlÊQG^Z¢\Lë)]ÀÅ|¿D¨5V»¼8PBu©²Ð†æGžBL|¡³Ñ¶æ”ql‡\È6xmÁ˜@e‹êt9Š}$±’FCÅþ×Äÿ:£…Æâ?Kb¬CÝeåÝÇ~AÇb%Hó$Ê…I}ˆ ]q*ß"^B²Y@G¦îÍ—†õî ŽÁ0….%댃ÄÈÓÛzÁw„¹è­¶@š %¬²ò‚‡,§äé)âˆp[YCž µ£üÕ(¸9óÛŒï ÛºÊoÖ5Í€ÙÄÐåŠ{ºà>vS¥àõtY%²µ&„)q 0²U‹2Éò²~zyÑÙv„Kƒ À…uÐbQ ŽzÍuòWU£Æù+´.µ:öFÕ“H_7 UøÔ+FUi³ýÞ=j+çÁ9D”‘Dõ±CeãOÌ©)BD{ …TcOT(˜wÝg¨‘=&BåI²2ôÑ,»‰+¾m²‘áбofß4蜯kªYF\5éñÕ\)"mŒ|=¥!á@¾‘zêsÀî.øL3{F#˜~-D=¼wèš2 VhÖÉ%Sõ©º,Hÿ´­uTóÊŸb³Wkš©èüxxŠ9¼þTÓ¦fö’%—¥àômoX´h;:ôÌú§kÀAµü‰WÛn€8×Wõ"¾úÜ=‹ß!kp%æßæ`m“QPܿХРüëˆ8rÛNE&ïË•««¯Wy¹"X<°ž¡„èÈ´©rY±ÿÕÔ£I¶­ðHoºîé ß`LþH„ g+$1 eÐA4A¤®ö…5Ä,sé`h슊¦”\M÷ ˜ÕÖ‡ ÿÞ®@ÏFˆú;´l†·•l›!ß*Æ(ù@õSÅÌB±z× ª?PQt©(ÿ³€÷zóïßWÁÚszÿg±ä”ÝÉÍkçÙüßÿõqô7ñÄxé¼¶Ò¿¹tbšSôß¾·M‹µMÓºnÍMsUBçÎ.= Ì¥Eë+4)—¦­ŠsO¤ûÚYuÌøÅ‹q©øwäÅ}6úîå’Ù±oÆÏîe=ž>v*>ü±OéM¦{ÿ@¬È¼ÈÝÈ ¿úwØéW:Vš¶¦è˜Ù=`ß!Þ½ÃzÃV ÖðêÞ/¦“´çÓéÝt1}œÆO£ìz?"ÏÓa)µH½ï4^`}7Õ›?Gw6Žb®ý×ù5ZFžµ9¯7†%£ß;3Ç÷‡ÍñÓcÉè9ÍQ×l:ãQsiOìÊx¸Ý¡áw9gŠ·v#ð'.å ò³áâN¶÷×(Å?ý,îûQlí/PKi‚QV+PKÖ5.IConfigurations2/popupmenu/PKÖ5.IConfigurations2/images/Bitmaps/PKÖ5.IConfigurations2/statusbar/PKÖ5.IConfigurations2/toolbar/PKÖ5.IConfigurations2/progressbar/PKÖ5.I'Configurations2/accelerator/current.xmlPKPKÖ5.IConfigurations2/floater/PKÖ5.IConfigurations2/menubar/PKÖ5.IConfigurations2/toolpanel/PKÖ5.I manifest.rdfÍ“±nƒ0†wžÂ236Ð¥ @†¢ÌUû®1Ä*ØÈw”ðöu¨Š2TUÄñοþÿ»;y·?ùR´5ÍXJ‰2Ò¶Úô±Kžé¾Žv®íÊ·æ@¼Ú@髊§’óeYØòĬëyVOsžç‰W$°§Ä@LëˆàÑ(NOèÓÈO->ìŒ ‚‹×I…7§ÀÎNªß¨ÖJ`V€†ÄNÊ„LÜv–Šg,ç£BÁ§Ï>n¬œGeòÍo²ÿËc -^…ÃËè¾s½™HZƒyÓGE\>ÊQ¯w¾%šm»øåì}Ѓº“îjÝ[ýë?ÙÎ-ÿÃëèPKàZ¿PKÖ5.IMETA-INF/manifest.xmlÅVÍnã ¾÷)"_W±Á`ÀV’Êœ÷Ð}JH‚dcËàªyûµóÓfUe•h³®/ža¾™A3‹ç÷ºš½©ÎêÆ,=èo¦ŒlÖÚl—Þ¯>gÞóêiQ £7ʺä,̆sÆ~¨K¯ïLÒ«mbD­lâdҴʬÙ×ʸäOûä€ô¡]½ÕÓìo£+5ÎwûOëM_UóV¸ÝÒ ®9ù\®ÕZ‹¹Û·j鉶­´n0 ÞÌÚ?ö/yúN½;/¸‡ÃË®¯_Е ÜYô[³½ÂA×b«‚qÿ.”Jì›ÞÍ¥;uÃí^µÝþ>ˆŸZº¾S6€àâCè¤È0Í9$Kåg¿å !=Sà9d0¤eœ ea8…DLj1‹9.cÄ8D,dÓE—G!£ pRfÆÒú ‰À9âæ‰IãMFâc"(!$)À1%„д˜¬.^D:æ .@Di™•0š: 0„8ÍS”‚€"ÅÑtµóS9â²à”€q¢ 1–C" žc”CÂ"EiñÊQ6Æ bhdW­#·ïòkݾRöánkåÄã¹*ç†ÉàñlóÆlô¶ï͈RUjP›.}×ý=ðÿ†uã¬`{3Rð{íËKw¦å´æwëÍ ÀƒÕS0Á—!lõPKàÕ¤°û¿ PKÖ5.I content.xmlì½Ý’ÛH’.x¿OΞ3¦ÚIf ÁÍ”ÆR]²–T)««{mÌÊ@"H¢lÌŸ:»f}±opÌvofoÎÅ^ìcõ“¬»GH@€P¡ÇF%@ü¸Gx¸îáþoÿþ°r”;æ¶ç~¡]© sgže»‹ï/~º}Û_üû‹ÿåß¼ùÜž±ç–7Û¬˜öfžÂøÚ žó_¿¿ØøîsÏ ìà¹k®Xð<œ=÷Ö̾zž|û9õÅŸá£Søsz9ùuÈ¢㻩oÍiñžéåä×–oÞýߢ&?Ÿ{E?~œÞܪ¯ÖfhïŒâÁ±Ý¯ß_,Ãpýüúúþþþê¾åù‹km2™\Ó¯ñ€gñ{ëïÐ[Öìš9 ; ®µ+í:zwÅB³èøðÝäÜÍjÊü¤1Cs«ÁÝ¢ðЏ[ Íliú…×½œfoß*ÎÞ¾•üve†Ë<_€éï·kÁ_í ßM‘jæÛëÂÓäo'¿÷l¼ÞÍî‘’äÇÄdgAXÌû„^JÊÍ£hê5¾ocX"[!ï/âshîm\˜œ]‚€ìaÍ|2úìyª…äªw¼Mг+ÑBJ Û̉$F<¥Ìf<¯· `ÁFñÖÏ_§ÏõP¬9Üž5ßmqGPÌ‚ f­‡ÛÏ×ø[G8DO µ@¿xé\~×ñƒ9è½¹9c=‹ÍœàÅ¿qY?Vø¿qÜß_üùò¸šzŽv¡€àŽ^[ÙÎcò× %Ñ Jæ€ÁÈzÿõúx/ï½¥*?Ø®eguóÏæÚ þ5ñ×jjtG†ž78ÎFZaÊÓ ôÃL¿(™$Œiy¾KG÷÷ŸÙbã˜~êwÞ^oÁ\X, †ƒ{;$Æ÷Ás½#L¿˜1¾ÝþWžÅ|7õÊÚgpRÎífIŽì„Éîä»›…†Ú.S^úΛƒ=ß™¾MRUb½Álæ…Ö¾X€¡¾·23ÉRfp°ÆOØ Ùk½º¡Ú•îÓÆþšýÕüÓæ8Iï!çc²ÕIôÜÊ[ ™|ú˜®Sâ¹¹ a‡ö¬GíÄý™šÁ-6©Åý‰‘sÕ&úŠþÕ[Ã!Œ;˜âå{ÛBƒ`x5œŒ&6l™¹6‚¿°ÝžÃæp´©ø[˜¦c/àÔÅç4þÄpòÆvu“9:0œÍÊÝ$¸?Vñ\ Y» œìH^V>’ÁÕX×'%†r“ͳތ9ÎîHàQrÀ¦µiq8D½Rûc]0oêùp$DÌ»Ru¨žc[ÊïUú_ò-ß^,á5×sYòqè­ó¿zaˆfQæ{ÒL© ðFo0«vVËš†Ì<ïµ)ñiou®Mß\øæzý¤ôøW?0†“(þd‡BhÛô„h1— þÅ_7AhÏ{Z½‡)^g:“ú÷Š ý­ç…’Cg®U`܉õzë`÷A4&/°C²ñúWƒ¡>´ce.|\³˜P×¹Ÿ¯&º¡ï~NK*AÄÄp®O¹0Íûg¢y ËePfè_BÓµLßzêÁg¼n¥£V2zezà¤`Ò¯( ý•™F1xsf`›î‘ßÈvØCüFñyÎÆ•b2¨øÈÇÜ 9|¶…Aô‡ë0ÍDxñ8ûǘÁôsq"MjY¶‰Ñ0ÈaÂŽé.6æ~ýõážÌ¼ú‘"À[‰^‹æO/óŸÄûÛÕŸñUL˜Œï»Â•YYšÚ`ª则'hJ»J¥•RðNf‡–Ckjoã‚éØ.Û¾“dÒ=‹ ƒ=Á}FäN/Å…?oþÈ ÔILù4–’Ç ŒŽNàa)M7—‡±ç鹨 †Uu4žôUã"ñËVÂï¼#1úR:ãó§°œV¹§ÿ‘U’ËáÓ9SJ©,=·£|™ÎXb8gš)½4wþŤËiÒ¾^ TÏYR‘ܪåHªv]•²Z·®¦žc5rUe¬QkІ(±¢JÙj­¨NªF*”²Z Ÿ¶™ : Ž •²4ËN,W (+jßËz)³¹:rŸØ¥ È:‰}\.>‘æÕ|J/eEî1²æ„¦ãp%!¿nuœwuTc¥·uuìc!á1š¨Çmîènm_[µ¡$U-ƒ¤ó$FVÓÍ'½ §Õž½¢1"³¹„®Ævo ¡ë>RêeF5Fx;˜ÁôÙ`ÜdfÔœF·‘6ïk ¦[ÿ鄾µÓíéÁ€Êíºuë“5ç~56{•ô®{ý6Ÿ'µù³¥yR‘ÙR›Yr¢ÑÑz»1MéºÏ¼fsãéLÀ+ÞAAœUm¯hµƒ\´-AìvÙ–‰øLMÅÌ“}){¡¼ÝjY~¨Ë˜o™>¦_;‹y8pˆVó©×™{й™ã¼Ï]#ÒŽêóVuÉu2 ^Ÿs©ËŽp‚Ì“” £úB»L8ç>¾FµÚ"õ%®Ù׌ÉÀ˜šÃó^íÕ˜¬§°¼V·È¨:k®rt¤èª³Çjô¸µ"1åV8ANºH"AŒú워L4]Ï›GbõÙ1û3ÐÆss2>>ñŽDý’ú,•r3ÐU64dÒâëSý3f03õAÎñŽÄ êÓzK΀ÖDæ–õ¸>U¯Ü ô¾50¤êøÔ‡—œÁÀ̧23¨Þ-9ƒ‰n±‘Ì êÃgËÍ`ÀFÌ”±_Çõ¥3à»´â|Î3¹È äwòYÏä"3Ý“³žÉf ½&g=“Ùd2ÊÑìÄ;38癬ëƒÉd’³Šø;38ç™,viµ;yrÎ3¹Ð ¤wò9Ïd¡1T«ULÎy&šÁp<Õ¥fpÎ3Y7úl˜#‹Ä;38癬µ:Ï™Gbç<“õ©:ÔófÀß‘©ÆxÖCyhZ­PéFÐÔ³žÊÑ>É‘§â™)œóXîOgó~ÎBïÈLáœç²ÐܪÕî4õóA7ŒÌ@ÏòEÌg¨¨êTË P üç¿—OŒ§©g‹†:•6{·Óê§ÍÙžN¤Í~Þúis¶û'Òf?=Bý´©?®©"Ú쥨6åêY—<÷¢$²ÍÊLá T%=§š4œöAÍ¡µÕ×5¿”V®ÚqÙ)ˆújÈLáiÔ¤='L1˜ÓQŽV-Þ‘™Â9pŠŒò(v™ÖŸ½jê3ókoÊæžÏ°ù…”‰U®8h,tî=Á­\UÑ3„Ú´–åJŽž{u5ìR“V®vhmTKL÷Ôˆ ÊZ¹ÂœµQé\˜X¹Š“_BÓµLߪù4)W²PŠ'+Ó_ØnÏaóx5˜è†í^$~ñy¤¯*žŸ`mA§â!oßÜ„^/õ£l@£V®º_Óf[zÓW–,ãô4i¹©2ªI“V Q†ä­\5ÄÂÛ¹‘ëçƒçzUdSú&ï6i5—ml’ü¬·&â“­ý&(ÞÕT8l i3”¯¹9œ÷¹VQyÄÆý¨;qÂFr lEÅL¥˜6æh:ÍsÇòwdèWMqÃÓ¯ §u¹rƒ'èæùD*øÔxü–«X+‰žÆréðŸpæÛnê"êÌß2æo¹‚_>Å“GñûoEîÈW•­ßoÕ~¾ˆ8þ³ò¥~w]£ù™uG•Åñd48÷~©ßiØ~¾pSñ¬|©¹Îfãù¢«ª9ëçðe0˜ªçMN¨Õ\…óÛàËSì—úªÍæK»yÆp2I@×çáKóàŒz03M™šsf05L&i„VAÙPñÚÊ Bæ÷Ð1.Þ:NØè'|}³òû ¤RF0ÏÎcsÆ/·-4£dARsê0¤÷+ütù¡$H^ÎŽHþ3- ÕI)ØLœRÖì[Ï ]/dÑ®Æx¢Or‚£Å;2Ã/eôE»Ù«Éå‘Ú}uâ6Š–ï/†WC˜ÄVð‡kè‘N‰˜£°¢@PŠ×òÂY;¿!=¿¿¸J"1‚£‰¬ S®”Y–¤œ^9å“¡Ñ|Ê•«À˜¤Ü rÊij¿ ”+eÚ$)ׯœrý­”åBEõƒô ïµI©‚P1JÍ=÷ÊÕ&lMÆÌ¦S£Ùt/en4î¿Áx»reÿ̬ £º¯Íµ´Š]ÕxVŸl{Õúà5œÊUñË'X_ÝÚá™ý–²xvûÝÇjÞÚ~@Î'¼Ø /07nöXÄNÔà.Ü#CóR6KþÜß¹{¨ ¬’½RA™¹Ã‚ö”ŠŸ;¯œ« 8ÜaQÔ²™)™Y_5r¢!£wž„+§»>ÚÈ•¹>Í«^½ó$\9ÝñÑJ®P¦ù"Ù蟆+•ùS2tƒÖ‰óÓC ã°bÙTbœÐwF…¥½»˜ßòfTòxÔñ¸<>=Ðð Ç›ÁãÓƒëV°n“+(Ny˜ÉÃŽÉÍ`rˆÂ©<>ÍçPï:x¢â~ÅVOóKjTð|Zë¼Ò gZ50LŽÍÉ£F”`tÜPA½Äƒ]öëµÛÙSAƃ4ÓÔo•h5ÚÂÚ·êV¬ äa¢FZN´­µÓDÚo0h¤‚BšuÉÊß"7j4N”'…ct¢ªãO]™üÉyY£IQÏÎ:n†võãrºFk©ž]Ûqº$§k4µÃá? ÈÃWA™ÞÈÀQiöä3¯ÑšÔ{š0óMBý¨¦þä3¯Ó®;RJZWâžEzÖhøi‡Ñýoœª”].©}|ÓT}2KL†ªUX_-âI•~‡¯ ,õᾜ¾ëÔ:‡9}ר÷i9¾ Š8î{œÓwºOÎ¥‘ 'îû°öq¦¢ÊZU•Oïø’Ò+(‡|¬ïsçùÈ;jsÅöÉBY/WY¤é(‘Ò¡¶àõJ²™V’­ôÄ\¤z¹jÓ…Yrò%*½\-é (¥tI¨GÙÚ EJñq.ôÃ2IË‘‡¥Ž÷ýW§ôrUœ+àxIK´ÔùŸàa—wFOkn²œ¤“â™)”R#JN¡X0Ó¥¦PJU(=Þñ)ŒÔI_FÛÑËÕ.;>¼ª§pê_õ¤«(èå* ×8}` æS©)œzhÊLAP¸j.”:åJNAP¸j.”:0Ë.¤ñx¤æ$WïÈLáÔ³÷xB,YíëLõ&õrŒÓ–±œk)ä®—«q,9…Jh}ê¹-í#½EY/W 8svu(¯·{Ç5Ò°ôåýb÷•ˆ¶ù/nMÝÝW‹Ïfïä>i6Or›øvïè>u7íyÿSÌnïT¯avO–OãvïÀ¯avO–—âvO¨cvO•ßávïȯ~všjY³ù“ÌnO¨avÚdp}sv{*Ä©³;ZçªÜeËCm”,H%qÄï© µRçÜ—Xsë€Uu‰µ@%0Yýðv.©˜75].E@yêT®Ï•¸vxŽmxåÞ¶Âe”/.ó™çxþ÷Ô)ý½­¬¨\-ínÂW&D*Wª+ç;¶0Oúªñ[æZåÆBe\;½8g.gª)ÎY€/rñÛ}ÀóɸÒÎsBÎŒÊ]y9«æTnË™EùVAŠ ?A——³t 8«Õd2:æYÃTö‘Ñj¦¢ÇSýHe¿:¦"§ÅŸŠˆ©;çTäTîâS¶sNENe-<•¼RxuLENÃ+<•ÈõtΩȩ=¦’{näM#ç\Éže…'.§gH‘!ƒÏCc”¸ûÑ •S$r”ç,&É“BZ«ÒOÒSÎï÷¼ÕOÒS[QÉå3N¥’žrx*y'bS9IO92••«Ž©œ¤§™JŽÊUÇTNÒSO¥? Õ#B¿Ž©œ¤§žÊù«BßöOÒSŽ,0QûœS9I×8ýôÖû'ý‡.B×å«l¶T¨õ+9õ‹êˆúD·Ø¨]ªDË(¬D3}68b÷5@ƒJt—Š7ғܾT¢û|WÖoÕ9Vyé>‰®«s$n«Vë¬Úéó·ã’TçH<Λoe•ÓŸòîí Œƒ‹?k+øY1Æÿ­H¸I#³ù$1¡’Ê¢ý+|­ ×az4ð8löñHég‰qž‚çnÚb!ˆ2åU#ˆ/­µ6íí~uø“çzL³:!³Þaµóļy'ª£ûUâ+£`Áæpœ“‰~ÊÕøt†·û•êÀºÙÌÚVïXwˆuÒøâXg2u›z¢cÝ!ÖI㩲¬Ës”K`J:Þªe].;CÚ68ëjÙußëª,Vª¹joµ£J•ÇJs¹ž…[˺” sµ7´*¨Bö-¦Ú¿5ä ÖŒŠM×% dÝåÌÆƒ÷Y%z”3³&UèQÎ:8˜OG¢G9¥ö`â‰åt±¬æXF$ìר–íq20©•#wòeÅÖDjŽr§K†Û²o ©µ*'h3z4úl(%N•9Â5+q—ùT™£Oû†&CÕýbœ’=öµÙLËôxªÌé÷§³©ÌZݯt(ÛãÀYR=ž*súc}™ û5e{õY_jåœ*sú£á|lÈôxªÌ‘U=ž*súk¦Jdô»Ý/œ&Ûãt6—:÷«ƒÉöhMÆ#™Ý±_K¶ÇyKEKôx²žÃãW%zðt‡ÿš™… 8 ½8Ãsü›Ïž®7óÜzŠÞXz¾ý+<оŸÁoÌÏø5n ªµiaV< …íÒƒ©ç[ÌO£DÁÒ´¼ûè™å›÷âQÏ[›3;*hªúßdȸ·óÉøþF KÉÐ["ãNÖ@Yî|¾²}ßó8à̱×ß_øl>ò^*©?¾”t6+Û5ÝÌHÈŸ!o}3|f%þµðsÿž:›ä÷ sµ2S¢ÏïÙ.P  x#^Ü€ÿh¯pA¥y™ülåYŒ &¸–éKÈÙ¹¿'õêcóÜ÷V½ò¼¦Ï6ÏÚP» ±û Ì|O<ðFsSü{Ÿ›Ì²CsŠ9kôŒi³rŽ´ã_{„hø/ÏæšË°Äh÷zÚž‰äù©É¼ÇÛvÇœhnVSæ+üG|Nc¡&òGzM¤ýò¸šzNä Mô‚ Gß_\%Î|§ÉEóOtŸ ÙîÈ¢@Â0­k™`£cNágªy²Âã"£ÙWDÛôpî9ŽwϬÞX‰Ÿ‹.GeAŒê•!Ž:~m×bÈ­žz¥G?¬La»´Û¢÷·lËœ/üzŒœÒ;Nm95’eÕ謼êw¼Šx¥I1J;'——b.mùQQüùÙxet¼ÚòJ–UgåÔ°ãÔ–S’ç”væsjÔñ*â•.Å(ýœ\w\й${Nég>§&¯¶¼’eÕY9…™°;VE¬’<¨ôjªÄÏE ½C6:dãçT‡l´…W²Ñ .uÈF‹xÕ!máT‡l´…W²Ñ .uÈF‹xÕ!­aU+~‡ltÈÆ7ΩÙh ¯:d£\êñªC6Ú©Ùh ¯:d£\êñªC6ZêV ƒÙèoœS²Ñ^uÈF+¸Ô!-âU‡l´…S²Ñ^uÈF+¸Ô!-âU‡l´†U­@6ŒƒÈÆtã8,Ló7ƒ½/éµoéþyo¶4ýï/þñ÷ÿÙZFžÃàd“àI†QŒ'ÿ÷ÿÛbžœ­æJZQŒ+ÿ×ÿ×Z®œ—æG.ñÍK®s#Ò\ÉB ¾yÙu^¬Aš'YX÷/¹ÎŒ*Hs% Uøæå×ùði~dáß¼ä:7R Í•,¤à›—]çŤy’‰ |û¢ëÌÖÄIëØÅ5´èâÚƒtq mÀº¸†ö  ]\C[°†.®¡=D×Ð\¢‹khZÑÅ5´ÃèâZ„l”Œkuq Â0º¸†&¢]\C³p‰.®¡‰D×Ð<¬¡‹kh"ªÐÅ54 ?è⚈tq Íú¸†FZÿ%ãÆ]\C 0.®¡=HA×Ðü ‹khªÐÅ5´kèâÚƒ@tq mÀ%º¸†ö ]\C[0Œ.®¡EÈFɸ†I×Ð( £‹kh"ZÑÅ54 —è⚈@tq Íú¸†&¢ ]\C³ðƒ.®¡‰HA×Оtæó¸Ò™ÿ ãGgþ7’+ùß<žtæó¸Ò™ÿ ãGgþ7’+ùß@¦´Ãü×:ó¿3ÿ[È“ÎüoW:ó¿aüèÌÿFr¥3ÿ›Ç“ÎüoW:ó¿aüèÌÿFr¥3ÿÈ”v˜ÿz—Ö  @—Ö =PA—Ö  B—Ö =°B—Ö -`C—Ö =D—Ö  ÀD—Ö =pE—Ö - F—Ö EÐFÉ´Z¿‹lhˆÑE64®è"šLt‘ M„ ºÈ†æ ]dCa….²¡YBÙÐD¨ ‹lh(ÐE64Òü/Ù0è"Z t‘ í ºÈ†6]dC{`….²¡-`CÙТ‹lh0ÑE6´®è"Úbt‘ -‚6ÊF6]dC£@Œ.²¡‰pEÙÐ,`¢‹lh"ÑE64lè"š+t‘ ͺȆ&B]dCó@.²¡‘æÙȆagþwæ yÒ™ÿÍãJgþ7ŒùßH®tæóxÒ™ÿÍãJgþ7ŒùßH®tæ™ÒóÔ™ÿùßBžtæó¸Ò™ÿ ãGgþ7’+ùß<žtæó¸Ò™ÿ ãGgþ7’+ùß@¦´Ãüwæ¾ù?J#ü“¨˜HsF|ÒõªÓªìž‰?é š!Ù=ÒÁ5Ãò{æÜçÌoß3ç>g~›ü9£Ÿýœù­B²{F?û9ó[… ä÷̹ϙß,h ¿i*:hdƒItq-äI7Ð<®tq ãG7ÐH®tqÍãI7Ð<®tq ãG7ÐH®tq dJ+âtµ«‡ÐP «‡Ð¨ «‡Ð¡«‡ÐX¡«‡Ð°¡«‡Ð¢«‡Ð`¢«‡Ð¸¢«‡Ð£«‡Ð"h£d=]ë ÚøÆ9ÕAmáUm´‚K´Ñ"^uÐF[8ÕAmáUm´‚K´Ñ"^uÐFkXÕhCï ÚøÆ9ÕAmáUm´‚K´Ñ"^uÐF[8ÕAmáUm´‚K´Ñ"^uÐFkXÕh£ßå£hˆÑå£h"\Ñå£h0Ñå£h"Ñå£hØÐå£h"¬Ðå£h€Ðå£h"TÐå£h(Ðå£h¤ù_6Å 3ÿ;ó¿…<éÌÿæq¥3ÿÆÎüo$W:ó¿y<éÌÿæq¥3ÿÆÎüo$W:ó¿Li‡ùotægþ·'ùß<®tæÃøÑ™ÿäJgþ7'ùß<®tæÃøÑ™ÿäJgþ7)í0ÿ‡]^ƒ€]^ƒö@]^ƒ6]^ƒöÀ ]^ƒ¶€ ]^ƒö@]^ƒ6]^ƒöÀ]^ƒ¶€]^ƒAeóŒ:h£ƒ6¾qNuÐF[xÕA­àRm´ˆW´ÑNuÐF[xÕA­àRm´ˆW´ÑVµÚw—6bt—6šWt—6šLt—6šAt—6š6t—6š+t—6š t—6št—6š t—6iþ—½´1é"Za€v± m0K»¨†ö«]lC[LØ.²¡=†mÛÐs·‹jhÜÅ6´Å4î"Úc/w± '0«/Å©þù£újÕÐE5´']TCó¸ÒE54Œ]TC#¹ÒE54']TCó¸ÒE54Œ]TC#¹ÒE54)M‰j¸öæs{Æž››Ð[™¡=ã?@S⇩g=ÆÿÀÏùÌ6ëÞ<ì­Í´ï3ókðýEèoØEü64‚&šŸ{³ ¼97€]ˆ×kç±g±ˆ+8¾ )`Û0Øe±™d=䃲ì`í˜=o:¶ËzbEKŒ/®w޳ BßDNd÷ ÑØ­9uŒS¦øëɼöÍ{Û]Ðɤš/<Ÿûð²BM¯]ð§üßoñµÏ1ÝÙÒó{áã~A~§ŸÓ àa@Ô̯´¦p¢gZèSïÖ6,ì%³K²½ûãÉ8Zôðým…KÐ4¯FðPe½/$>.^|0Ýé(wÌ€›Ê¿EKÓ‡9ÏR–€³,34{É?¦i'¸x¡]iš _²™ˆ¤køKj2Ñ¿‰¬Gƪã˜Á¿ A$™¾Õ½Ó½S×;Ÿâj¡‚è¿YûŠ~5Qø&+œÿ¶]îMy¡Ù .^Ü(ÁšÍlŽÄ‡-S~0WÊgÓ²=Ϫ{Ógù3ÖàX*öâOßý¹çØ_™ÂÜ;Û÷H9.Û9 ıòÞv7…;6;͘4…ÒÝ;Ý;Ý;Ý;Ý;ßÀ;‘ͱ6Ýý·n#i•[ÊoôR¨êÁõ‹´î\Ë5T»ÆÏ‡‘|kz1z¿|TŽO*¾H¤ø`†¡­Ü˜¾k{@²}Â\¿øñýÃüñRÑUuÒÓU­¼ù‰~ñ†¢ü‘¹. —Ê[þ»0ÝKåçá~‹íhlg(=ÿ~L€âž7ïÍ<7ŒÁ’=Ø,Œ¬Ëµï…ðOf ø`ϼV¼¹òŠ·húèÞÆŸ1þñެÅQ d“öhÁöB¶£:dû£‹:Cêf¢wñbo(‚(YM#ü¿ÿ¸ÓñîX3à°äx´ôTx‹ÐÀWX즟Aêwø~ ŠèטEɯgKs2?ë'â¾¢¤¦šøeÿ|ÕP„‰ÝÉ¡€(¢ÇBÃöãØÞUæ@¥G“@&²Ú#²1׊eNÃN`kVF’­zÇÖ6²5+Ž#ÉÖ~ÇÖ6²5+$ÉÖAÇÖ6²5+ž$ÉV£ckÙš’’dë°ckÙšÓ’dë¨ckÙš“dë¸ckÙš[“dë¤ckÙšž“Â#ÔŽ±OÈØ¯q0,ÕãI< Èê84w„#TìHh†€¶~‘¢Ÿ@“5ýIÄ'„©< ÅóˆÂ.ij¥Ïæß_üþ—_>³¹Â/¿húx ÿ2Ö‡£ÑDeïéÅÉ¿³;dVïð{/´-|ýóÒ ;Pn>}þó¿ÇïúÅö CÌ×,„«ž8ÝAÓÕ·“fÎíņ‡S)oLU9ï‘ܼ''Í{X˼¯Œþ`»öÊt”4`}~èـݙI„ñ9‰0®‡z`íQ^Û {Í€~&!&g$„¡ÖCˆ~j„¾ç8òñ‘Ý÷\õ>Œ`±Êœ½¦žsúµÈ<ýj°Ï[Û é¯Ò¯ûc§ÛYP¼2’ü_MÉý¸3y½mG%‚¦Ÿ“5ÉÅáv>¯=\·¾é+;<6ñÁ9'^“,%&žfz œSÕ² ú‡TÛU,š¶“­ Äæs0T˪ï'µÛ%Sþñ÷ÿZ=ÎLÇùÇßÿ哉!ÁÅßÙ¦?ì«ý_FýAÕ³ ÒÒ³×3fïx³&My_ËÆï'Ï~ ‹I¯þ˜Ê-ŒõÀ8§B<®Eê'u±þÙ ÿÕ\ûüó"üW\ ˜”@”l"œS!×¢õ“z@‚Ž·X@ÏE¨ Ë©ƒ†Vž ƒ~mTØ•‡Û95l¬b”Ù!Rœ²þ˜—Õ²©`Qen;¬ES9mgœ úƒ¡ñ‹6éǃ‘jdÅa•ÞÃLù`»p>ÌÍÛ‘Ù§….g0""´ Lðç-§qµ”Hʈ?0—ù¦£¸^ÈsêmB oÓµç‡ÕA= £Éxø‹aè†10†Y1!§!IˆŸ¾¼LÎþ¸Æ4Ø>slsj;vø˜M9û±Â…QñÊHè“_İ]o«"=,‰óTˆz¬(˜~?-$þøîËåÎ:‘ ýsμ&Ez˜Ô!?ýøåÝŸÅ^èû-vgÏXpÉ ‚·ƒ/•`3íÅÒSQ³i#‡.œF›IMÚõ0©Z£Íjã„ö¹%‰t`ýÈá'ÐÈдÁ/º¦«†1ѳ|Š'h(G"åÞ—Šx³¥ï¹Þ&Pn?¾êÙH‚o¯²I%g³ž¸œjÒЇI¸ê­€ :Ѫ¤¨MÞŽ ‘â5¹‡I!gŸ(€kB±†W“íŒÞãuUåæÏºÑ{ýæOï^½yúyOj›·¦n§ô‘…÷žÿ•YJ8[£¾ÁÌ•2ó\—î¦@³þÊvA'+#›,r`Ɖd©í<Övìø?½t5ÈùòN™öx8Ã92šª:È %;eÚI@“9lÅBÿQ =réôÞ}ÁÕ€>¾*hpŽ5QkR7F™vê”™0óBFjÿŒn͉ZÓ)9ΤB­ˆb„ôìœFˆšÎÈIšH+öq!rhpF=a¢ÖtHL’vúÉÐY]ãÌEpl5 à“Ì¡YÚ‹¾@ÍÚ?%‚hÑT‹Üí™Ñîv?£N8QkR~&Iª ú×2Î'ÙîçŸI´Ýïm«–Ýþ4¼©s·×8£§ÜíZMúî$ ºV@ÿzÆù»ý fív»^Ã~"î$÷{Т)ínø³a}ÔZ4UÓÕþ Úˆ¥É~Ȫ‚7*ìxÎ@2,ãg#ð²&s&´aÄ´oÀ®ýÊÏLeú¨¼ò|¾ò<ÆæÝzHzÚÊÓc4Œ~ÑÆè5&£¬ì'ÑCߣÇK¢ÇË…ÉqŸ~ò“'ßß›ükš|"~õ}ˆ`h5a_¼%"¼aàZòÙtÙ˜ÿYIЯ‘Æ þ@$øƒïmÖÊ&ƯeAÒó|‚d4£F* ÷¨ð¨ðáñØ8Ûôa Ô9ûÑÞì¤Ùÿ8ý+h,×ïB¶RÞ½~zÔyŒ÷hð‰hð…g»±,ö‚ò †f?TKŠ ê×'P¨Îc²G¡[¢Ð'sö•…âüäKdXçi‘t üDøÉÅôu^öìϳ¯ï HŸÙ‚=ôæç³– â\—û#u«I(G•ç…K,j¹4ÅMÇ5mƒJ(qÚŸäí®*£óÊÒugº3f)g¼ï¡êÆ/“‘¡ Gj•HZP…/¸oÞƒñPEçø``è£þ°Ò™'l¥„ŸÓ{çæÝîœójË0‚T:ó„¡ôS€<ÿÅÖQNù‹ýœ›‡zMSOîxåV\_å‘s;DPp÷›³%XN¼ÞHv”²qÎ ÏÃAMd1’dyi÷^Û>öð ¼ïAoŠ!Û9»Ã8çßá°&Z$Ç÷ö ßW¾0ƒ£8¬”G9ÝðD"Œk"Â(‡·Çn~ç¼=ªKJ&̧/Ì¥ša2zʧúq$r(Q—ÐL˜I6Ú ½釸îÍrñŒúáD«% i l\—ÀÖ?ÞŠýä{ ßÌÎaœQ-œhµ¸FSW?b=zGùq͸R ô¨bú§ÙHz-Ž"#}éGWù̬Ìðú-³<ß¼þ²ùòæÚgãî€mp^*ÔâbA*è)*¼fSÛt¯šnÜpsm1ß¾;F‚sºÒõZŒe$AB[~›Þ Qc|öžâÉƒÇ d«à»*æšÐë»ÉðüÕÜV¶qÄB- zˆ$³iq¶ëð†§6RûúP£±JZ$VÂÙã½ç[d%¤"÷èjc2¸'å&Ç4ZGÂM³¯èç ÁÖk:O†×›ù拤øÇßÿ >žy› g4}Äðc h®Ž=”4ºNR.úµ1 +ã•·ZÛ`wÞÚ+§ìáÀãáí«I¿–3%uOúåÆvH¯æç áæÏÔyç^Ëa’º Ïýó§•Nü´µ^Ë)’Ì%Ŧ›ÅAïëðŒæÒ¤_‹¤¥’…°€€õ¦üô3Ô"ÑFÉåýhˆ8sàöYvNOJ=ÉQaÂIfÿŒ âš6`ºµˆ/œ®¾3Ý;ÓYø¶keÏYÒ>IrÕ“uœ<¥o½<´}³Ô[þ[YН£odVã#D+¾öÉØÖfÃè.åaå<·-^«Ý˜ Õáh<0Æ}C´¡–qø#ÏŠ}‘h¥4Y‰/3:ÕÕÈ»WáK|5õ¼¯+ÓO%ÊæÏZœ™c8nŒ¹–LS‚ÖËTmx>µíƒÃ´½…¸ oÇxz,$‚‡Ö¹ Yd®@•Ýø2DìL¬œÃ/þñþÏTHí±×õ‹ŠËoùÒ5ÿýPÜcû®´/þœ9-óδÊ|m†Ï‹u“Œ¿-ºÑ—a¸~~}½4WW¿® Gæ_yþâÚ[ê«¿}½kôá:s·ƒå$AÎ8Ç7üŸø3|3ùßþz—qãâÅk°w6U†„•±á´ cðD‹‡"ìï뉾6¯_Þ¼ýîß} êú~"e)¿N`ͣꂫ…ç-v5óVü Q§U§®ŸG…†!ì2ûbì³<å¯Þ­[e3A.‡@0F>fNYôv°»mödøx2Ö ]×ô¾6ŽUö B¾×‰ïÌcv¨^¼ ôžûovN«Ý&äšL˜íUµ›r8,„ÃápãEd{QÖnAe¾q…;ԉͦxÊ”)›€Y$ãyð ümE(ÏÍŸ¯t#!–/•`émK1á!|búvÀ® îNM´Æ–& ž6 ½P°38dâ7ÝŠ­<ÿQ “—ŠM*lPÇ™ó¨øßÿqÍÜŸ?ß*+s¶„î+^R¦÷›„cqó+î8ç*‘ÛR§ñ­`e:Žòévò· @a®·Y,‰$ážF㦆üÿiÙÁ×Kö=CtÌ¿cþ%u¹ÚÌ–âÏ/E èsi®×ÜGÇgkº Ï…‚a Vž[XiÙ…£à¥+pêXøža w ØË\FfÏmÌ”á)ÈËKågPé¼û€ø(·ÂœDkJ¯2Ã<<âÅ¢cÿÑtŽD^&ο¨á€¯·€™+‡ðßI²G,8‘Å£`ßù» Å@à4 Ãg4Ù­7½¶œ=#<ÔAx¶ÍcKíUH†fqEû(†–2jIBGš-Mgåx¤áñµa»ÊB¤Öƒ/ਲ਼CXe‚Rø‚ØnÊ’™N¸”Y<Û¹`e\Cw6ˆ\'w¶I*Û»/ÊÔÄÑñ¾„=÷•%.ÚÉœÑQ^ãÙxT«è»ZEö%®*VÒ±Ÿ5];þ;œzÄ£Eî3eîàî³ÝÀÆÍÁp¼+&ªÛþ|)’/âr½ÁÌ”GoÃwõ˜Vô”ÿ¶Ýz ›*2¸Lw¶ôü_Y¨LÐ Jp·x~o[áòû‹áÕp¢Ol—?\2,üóýÅàJïOÆø”ZÿµGF)Vï‚­„M.ÒOö,Üø,¸ÖÔÄÿú£ýWï«o4mx£&£áp8ºy­_­ÝÅÅ‘µÇßý÷ ä¬=2¡ Øòß_xî{ØçdµméSdååP\SAãþ á¹B‰>þ¶ñÂ} ¦Ïb1üe§=LšÎXX?ü Y¬ÀNgC–{@mÍs”t¸ 8QÍŠ,¥üµÒÔŸË(ÆHP"æ½o‡!s¹8@ý€c¤úÓG%]žW€/*Ä?3ÐdH^£æÁxØ.ZV[ùÌÍ6å™~§pˆl%ÞQ£ 6É4þÔ*Í¥, Þ*·>„)ª†”ñµg¢À*Ò#@z0ºªÚHEèbN 6°¾R;T¤U RøÎ±0íâ˜Ñ JÌè“1:¾¯F/^šÍíܳte <Ô” ˆfÈÁ#Î@hn5©€kÈ©cÐbkœ%ª]¬JVH<&g¬#ë;Wœ¦8Q».@Q‡'-ü¿ØdqåÚ²Ú@Ÿ ÑšÕñ¤ÆlÖmŽ÷º”);ÒsTœþE\È)©Ûd¸c7ª|• ¬œbájKMUÕÛ‘zNUt1êçi‰šJ…!N8ÆÍ°øëƒCxD…œÓ/ ÖFª¤7 kæõŒÊ?ZãçD¼ep\Á¨/¾˜s°•µdœ,ܬIÃè{›VK(ñŒ¹„×mOe4"ŠQ°Ï·0h#•oj÷¬DÐ{”ƒuz£óù­b÷€Â^±;Ç$°hwG¥í0g×Àï7a$ƒ‹ïƒáÞ9 º=þrܱB&¨¢õ‹ø÷ÞSsç6Ö‹Èuìä…Ì/kš>–ŸNÞM°“'‹–(¢sOsOÓ¨Ëp‰Ùà9V'¼öù}€šèO ËžÓtCe.î§ØˆH œï³ÄQpž·¯8 8îĽ?’sß[ñ_ 7 f.Ïu#5Ç›ñŒðDŸ{fzRb@.¡~Ѐ¯Ì6>‘'’¸qží¸L7¯¾“ô“ ò”mРµÁd Ž&‡•íl­\BÑNÈÚb:ø0[×Ëèàô¾|Œ!zB³Iº°î¥ѽÒÏUó‡eÔüÚ| ¥0 Aq hp5Öôá.¤ÆOÓP_Ò^½á¼yývôv¨âåÌþËþxüêI0 VxSAž~>Tâ)+ó+ ”f̾c=Þ.ùË-Ø€2‘üFDP’r‘ñÈrm¯þ ?2Æ}8éc¡MËö#öåüˆ dóª€Ê:®ŠW‰:*´wо"<_¤+ß&<½‡íáž*qÌÖìZÔ¼Ÿ“žxAÞx|T_ݼßÓ ¬<¹ŽÒ¥íŠ VjFÈ@⯇`‰­Í ˜¥ëÄ3*±p°{îJŒH&Nar×/øÍ+œ§~+«wÉt-E'y6¤ŠgÉ1M ,ûÀ=‚{Áбkøí: úò2‘D›€v¢Œ]-“ŠXn¤$åJLí(œvôç[– ÌÊS4þ‰W«sûäÁ?þþ_…µOä;›3ÿ´5ðÂîñÀ^¸\ëGU¨[-Ø&EXø\ù!{¤¤ÓWÏl ý\ƒ ¯6AXü„ÁÐWëÚ`iÖñ¦ÂJÞŠéß}'1ÁxÌ’ûNØÚ‘d0ǺBû+õ`ë⋽>Ÿ5þS/r$‹cTILR Ûs4Øã“ßt|Ð…ÞR>:¨UìC6¬n0ä«jë5ß]_[¹Ø¢4'²]5Ó.ãCðöÕ'E”ïˆ&<_Ä$ÿWÉh{*T¬Ì7>E§L™ãÝÂ+†ÿn‚ cf‚Úš8¦ŠˆÌQ,¥³Á%õÀP6˜mˆÖâŽ>³8âAbŸÅX¾æ¶ 0_TØC’nƒ=~éuÖ€šö¯ÜYÌÎ'EÁ1î?›k/øW\÷æ#|b:°“Ç?QÞ¨¬4ÊΑud&¥”Æâ1¯÷·^áH„ûûûí±x†xÊtÛHƒ\„»2†yÀU°±)žZì â8lÚT´ ÉòÝãEïAD!ËÖžçÐ*çí\¢ë…1øølÁAzm…&JÄ)#\lÁÄY ïcÂWèzæjÛõ¥Â6¾—úw8“0ZpÜ÷Ý7h¯¼ã’V+Ïw2ž+„¨FƇ+°MNY‰Çƒ*E’^„¾ˆjŽq-hÜïŽó»ã˜< g7ï °…†oÎç6ئ†a„šª 8Ó}$TLaNÀxr*ø ÆäÓËø‘60Æ*J.펙‰ƒÆ¶Šž‚CßÛÀ:Ù‹C²Ý™³±ÈØ›1XZwñd±B;$Æx $¸CØÔñÌp –)ÐTˆqwx”ćˆÃÃ1lèdðïµÉPíkúÿn66Uä!/°ëÜ(=SN1§Yº“\˜hÜ~˜È85TH½MÆ>L4ꋵ×o_ ú¯´áØP_7¯ûOš  úIH¨Y õ0^Ð\<Ç T.ð3QUm¤ ôÁh<2ú,ù›ü 䀣.àǸØ7A©“Wö#:Ù¹_¨—bA ÇqX­-l7F¸1|ñ¸• ŒJYmŠA mh‚ÉŠFMÝX–-<žSÏÉ;æ§|©;Z7†},AP8(,0h Š‚×ZŠ‹ÕÈœ|)ŠÎi ÇØ»}c@`èoÄ¿ÈP³j(sªGæ·¿õe¡Çþ!Ú&ÿÄ—èIíeÖ )×Tr Ïl´àªéõ)C¥2Ùr>xÐÒ.<ܦP„ÌÐæ‹ý.üÞO•B5˜ŸÁAbnñ/¼y“@A¾+Øïk:ŒÀ†0“w0ØÅ´}P2¸¶„ÇjJ…„½†å5·ëbÞ¯7áq`tœ4ÙÈX³·gÔõ Lq£õ40Á’›(pKÖ›0ÔÑC`> W EåÅC§}ð»DNJ4ÃrÆmädªM溩h7´Äå¤ Dåp?f æœC·&ª„p†’}“P ‘ÚØ|sÁNϱ"Àn;‘IŠ^ϼ’AQmçNXÒFoò¡üôN!UZʉüÏı@ÀaôÜß8kÂ-g|jmÖŽ=CuÁm4Ël’¯}¬l¼Ò“0ˆó†~Ãñ=Š 1MŽrP5šê¾’¸{'¦ƒ‘çf`ÏöI¾2Ã! .ôÙ[zkQA=Þñ¶Ì#ahñCƒÏƶ¡X4Þ"ÁHüŠYN8XêÆ/Ú¤?F*&è_EIRGäœ(Ü5>–í8Q!6µCSb3Fßs9À†6Ñ&cu˜K³‹€´ Ø0ÔݸöCñ¹é–óÐŒvŸÍxù¨DG#îäôÔbc²\ò a·Ÿo^½eGåçw¯ñï´!៟߼¿ù‹Èv¿´gK –…;Vñ|ØëhÚP€,2(¥òèâww¦³Áë›sôÊÀ¦öÍÙÙkgm èà( zÓG‰qμ î ìùË—w¯¹ÓêùîmÀ#ª(NEïé /åÿÒ’ÿú_eUS‰‹9ËøªÉoÁ™€…! ¤ˆìDg —ùIì”~¦§üê]äçåHÉŸÞÝp{%ضúì‡ÞÔ&à;Ž`T/MaXqÁ‹½ð‰»zéM•—þAK“‡SJL]½Öf¸ôo˜Ç.Š”H@YŒk£¹y¸žrE>ÝúK1Õ\c|¼E… ðµ(rƾÀ¸Ž@”ñ à“rÌ,(] 7)å¼áœà~À4ļz’«nÔK¤½åV]üOñ»¬W@Zlܱ/a³ÒjÆäH¸j\Z 3´|¶Á©…P$_Ewu%cà€:ý‘:ôq^€Ôáèôóý:šZ å¤SP&î9[0˜ålçzÝiq,F©L˜¥‘Ÿ¼@•~f Ê°@ ÊÃ÷jŸòˆ¡)ªÈbS:ŠÅ8!Šåæm_O^«ÆhôæåÍx¢(–qc£X5E±ðø5m‚e£ Í8Œ—w‰^‚ Þ#D0‘¢äü10«GÇ›%¢+Ÿ¡›‘óS”(]á"Þq,þæão   £^V"ª0qÖñ"grñ²×.®¸!'BnY«ÕÕjõ1ñóVßùïoN·{2l+ÙÀæÞÙâlŽ ÆEÂhdÏjnþ4HCâA©È79ŽôËåx²ßõõÚŸ'k'ýýX6V׊ŽôªB€Ä!’µð{Ã6Ó1YÙ¡4 ŠÉÙŒ+,y€W0¨¥€‰êìäÚéÁe2Ç+ׄ<ôOk¬Œ$¬OQ T «ðát¢+lh¥Ç†s’àÉ-vê;_Dïð̬t›¢(pñ3¢çš2a¶s¥#”ÎwT7·éÃÀ6ç!ùy°‡F&Œû£ÁxHe½²J<¼7نيÈ0Rî’7u>qÚDZ!©D™ ñž Â@°£,ƒ]«QŒ`<_6Óh§Rûù쯰j`{]±@èeFyá¢I^)ïøµ9{¶qL ÍB/8¬gÊ£J08yÒýäc`”‰OžÈà͹f°¿1yuªÞ¶…É¢ÌÀn”Òz›ÆmœTѵ›MA,Ǹëz½vl¢˜>Ñ- S8U¡T¹7uôáDÕ'#­Ÿв ’´ ÙMÔX$IZº“\„£TÞÆÒë2¢/sSgtêMíj0éûÇP㈄./GcõíðÍK:Æ7 rGƱÃí1eP}h3ãñ¢xµ2}++ê°xWÈÜÙÞ3¹S oúžÅÞ‘Xba6åJE†î&—jD?®ÒÖj䘙Yaª‘,WŽNÒÖ^gq×`q4 K  yPd©HsJ˹½rüv?%èÀt00ûGJ¼$®… 3a’gòBÅ[™…qã×±y†‡€Åf`0kÿz×—£Cí9¹§ÅÅCt' X•   'UÜØ ]ìÈ+h|y¾DÐ}ƪfáSû«M±h¤sf&ýM·™«,Ÿ1ûaimx|ú½õ±:èïkÃ#imXE¿·¯´±¦ÞL^¾÷_êOSâ"º¹]ðåJ>%Ü„0—2¡ˆ7·i‹IM•°*j2%Ö¤¼ðíÿ¿ÿ—ïˆBóE<>%V%î!Dá[ábYïâ6zÊ4Gÿ £Â?ÛTD¼3B@¢2±¤C P0+3tø&†Ä¸¸Âà›5§S‘&:-»Z6*Ù™ïPj˜ß–ú¯®éá“Îó•×Þ“ÜÏþËõªzÚž I"mO‡ªú¹³ÍFfÿŠ!wÈ¥í“ßoc½ñÀ¨j«`ñdÃh¦)“TÛÚ‡r\a¹˜‘>|[š~:ÝÔñ éÆsUþ3f²ª ŸœjèWÚx4Ø·ÆÒ(z§éÚàæÕMÿF}¥ª¯o`]>>>i,>žÈn”NV¯27 ÄÓ 9°±†ã SøašA“{¾Ea¬(„üh Öx„^©ª DzðƵ3¸0 ~'‡8tšþîg¦ßiú¦ßbMÿÉ3>=±§àTK§HŸUX:ûù}ÊÔ9¼ @@‡‰çÆoÓ"˜¼ërã9†)d(®ï!rª£Âe‡GÏ ×èîBÀ¡ÅØ­+¼BKŠgWÍ…¨¡ª }2Þ»Õp²is<ާ¬£c…YA‹´xzIfTmiÖVJœ%òti&’Òp.*ú4Ü•íØ¦Ï¯ÛÞ¬Í4ñÃíí§×÷BçSBÈ;7rÐ×õQ¿ß©êx¤ÐÆÉ †Z™[p¤Å÷Y* fäí9Þ¬²Öé¹4ëx‹0µòvè2´Gi'³ÈÇE ÆŠoÉIçs^ß²DŽ"‡ÅŽny$>>¥qï$!ÀUIÝðz²QAŠ-ÒAY˜³Žót¥×5ü:ï®Áí^ÉrOò\eëGü//ŒUÌAi_}[;ˆqÐçXÝ—í…N*Ñ[ô ‹–§{( êÀþQG]ïkû·>Ûa|ØWû¿Œú#Xãª>Ln87KV›¸eŽí”­ÒÀ7 ßÁ†‚ôQ s潨V,O*Ç&ïÀópc±q.{¥öh2 ‘O'ZþÊ3V5Fµ| \ø h‚ð?Þ¹B…øn¼Cž13÷ß]Â_ÅÛWÊK4£)Ͷ ¤<;›0ZÊ—BʯÌ÷p7ŠÛB.Ã$¦ÿˆéµftÃzíÙˆú£$ÃæÄSÑXÑ5ð>š­%³ä‰oø*û]âñÀ¡¢MÜžß!³7»müœj£q8êú`<|ê@Æš4ô/’,ì4FŸsÊ-fš–Õ›åë<€"¤ó­òŒÚ)sCñÜls%?=†1FMÀ‰?FZfÖ‹‘ 0„×?m'޳{q÷f§ôS”.‹‚õHã[µRò{*pŒÏðeÌ•/²Y™þÔ}|k þ#®º»DX|ì£8ÁÇ‘Zr7îc"ņ˜Í‹¶¿Ðyñ<£²abÊÉü¾I¿×±Þ°º¨u˜_ÿSø;m{¿æ´ 3XF[?~­—¶úÂøÔqøì?w}¾Ý·»Ð{P¤ ƒNÅØ¾ÆdØtÁEàLÂXªæqocyž@¢òð)K…ô3˜‰e±¸âIu„Äóî§Û·½qr (d±ÝäYMÊ..£ôXÍñ…Cya4‰p^x‚òU”ïi„BaBw)´©úŽ ­Ò?1ÿ‘ÔñÄòDÝ3V>@}²xFÛ]ÍÉ1G5Åü*®ƒè™ÜQÒ“Z„ñÚPxÀ‘‚Êil~îy°š•$Z½¨ýŒ3 Ÿ8Í÷!Ïj«‰øû%ÕY¹°JPt'T©Þæ‚8¶XT½½¬^Ò!÷ª{Ç\›àõÒ³â,æ “ÐF3ÄÇ m\2[©,ö°€g[j š´Rç{Ä%y# xÃUöè¼ä]§F3 <³Q¶Æ‹E”,~L½ù(°¦MbÔoø•–"7Àï˜?…Õ¶:Æ´ø$¡¯ô|2?Õ–ÕŒ«èZË¢g1?éëÂL4CŸƒÉÀ0ƃL³h,gÁë ¿|—оð•ÇSú„¾ùŒx¨òìtö#•5»TžýÍþàmüêµ”g¯¡Ñ׿cumÞ+Ï~†6fìë±F » hù‹ú–eTp?|Rœ,|´¨p´ˆ_N)Úɲ´Y£*¦³)¹YК¥û„ü‰n¹膗‡AÛxÊYîó‰šiËÇ5˜øðä;Rwâo„Ÿmˆ}]e"¤¯¶µ|‘Ô%“Î?ä¯Ñ1µY¯ÉF X Ýò¨Ç¤ˆûo=¼!ˆáÜÄsÀê9P0ìí‘CÆ‘ŠkF*6ªÃ&Åš#'xÄT‚ZæN;,È…GÞ›¦rdÛc6ϘmûÌJ4+‚[¥ˆ1™¤…ÑCšÎVÓõ\̳mÿ*èIC üÏ\]”á_ð¦dK“çÚ“áPôûý½[;®ï=ü³eçXÍr}§ãUUÓ$áÍñùÊx¥DÜ‘Ã9- oEÇŒÄÜuD±t«k Ÿ]Bf…Þ½é‹Q8žHÚ^ZOƒ’`baÞë1ñ ‰b9¢¼jé<‰1þN¹]‚ÈÄÎÐ6½uÇÍdÓ²Riïe\bàþÊ“㯢]ºõÅõ@ÝÇŒæ¤I…,#;?8»çùTy8~" OŠ ^þmƒÞT~ ˆM¾î²TLþáŠÇÇî,”k‘&ñ`7ÛOæÉWôzBVÍdYRÝ»R{<"$%‰–@tl‚ÀÃßaãZ”-6­QC\b‘G;•þ›×_ ˜ŽÖíÚ‹ny  `Ú/Ц/ ™(HН#}°{>× ¹éMçÑõ3ˆO¤°à¬*,hVÀÍ îUâYƒ!/AÇ §` öÐ_’0K»=*ZºÒÀáñ˜Ö_1;Y¿ß£ß*[ÆñrÌðs1DZ;å JªªBÓÉmåŸö¯\%Ý !žØ<×ø*ã'< ‹K2ƒäîKîM]ºˆwIµº2VQÅM¹-lFøcqäzœµhµUáp©ø ^åf:ãªf» —k„; 7k|åëþ(Û€²C×L7]ìpWïÚø>†H,˜Ëü8êR 8ô‡¥ S=V§¡+Zw¨5p›Œ*p¯Luºüž²¸†¿Ý•»Òý9t#¥%q -¥™XyíF\“Ô5·©Î¤&Â|Çtˆ'5³¸Ð-;ŒjWa”r"÷ø”×Ûs =XÂNõª’=Þ;*榨«´æþÇøRJ¾DȨ|”t —TOg²¨¥PøõFÂ%MèÚ˜ö™0F´àO8gñªp ,L´)pô+¶Bû>`‹•˜­IŒâzåT˜ýÔÂ%–ê&ãd4î€5C•'ä7ŠqQ£ü±‘eàu¨3 ˆÇ˜3°¢nƒºè }®L,}Å”gT©ýGàÇÏŸo¿‹¢æ“àˆ‘à0qj ¡že_w{G¢G~\Ó!щB,´¢ÙÐ=i> â#¼¡ÍýÉ(Ú£‹¸ºKrd–,•–?‘¢m¢¼×ÌÜðHë•´#BX –ï­{Þ|Nú¶“8ƒu'mö¥ïeñ[0Ún4jcJ>ôõ¡1ÎDX0ÒICÆò¨ÀðŸÕ#ÃBŠd³œ€ªmÀc8Î-Ð[@¶µmQ¨tC§&'¤Ýv =`")i…Ð)z³ÆÑÔ±¢êÓÐ^y«•ë\ˆ’ƒS¸•.\O{8úM˜½;Äöçx¡ð¯ã¥¼ó=7*„¢ÀcÚ#ÔHæi”È#ºp¿qáä…sÞÓMûpÚHZ ÎGÞ ž›®f¤&#ýH‘õl㦛¥t8_?Û¬éK›5ƒ~†YSƒb®d륭£½QVaÙtª‹¨;W­9¤$‹™&P½2ÑÃáĘhúh8š¨‡î[kš”ª3\¼x¸È¿(·("`¡®(Dyj Í¡ãj„ù@Üú¢$>q2 ¬ØfHäÑÏ<‹{+ÅEâX¸Qª [Á†tÞ¬ãð-ŸU6PÞëgÑy<¤[ñÀJÆ“-eûl¨l—uûñ•.–R¨Æ;AöÜÄ~™}b›ïD æy¢äqlÏ|üé=¿nL1"žµV”„)êáäʺdz@ Xp¶oèyPÕîùШ nü¢aéÁH5´4T• ýM€URY(ö{h&Zµ7ámæI¾´“ã+ˆS«G9-b‡¿[&Ô/*ÿMée¦f`ÏIÅDfkJ‘Ÿù¢oêIJkCX¾ýaœf/-‰u)I<×ßÃêW4ĵå™ù "õv5÷b±§? [HðéÇ/ïþ¬ðüÞ\ã5ÜD¶ïêºüÌV^È¢@û>ÃÙº@‡Òë”çkÚöSUuú"s ZjEÕÝ=L‘+yàZ¼68%bX¾ÈÁþžðˆ‡ ïº~MeÎî•;FÀW<ÈmLŽ€NèÍ<‡·5÷]B„ÿè¦ßÜFþo‚xÅF„õšB; žf2ˆ½kPK„RBwFD¹SD.²ÔýŸ?0Ç&ƒ™oSš†î~Œ ’Þ”0A¾à9ÐÇïc|E×”#ö@´V"®QÙt‚ïLÛA^ˆœÊ(%覔O2b¾ÁkÄ€¬öˆVQ h(Ð@ 9ÌÕ…¿>åöᓈi—ÛÆ5 g׸«áZþ©Ö¶ªŽ¸h.®L€5æ •c÷—жò“ÇUU¨¾Fìí‚•ûÕõîyL›S|½| ðÚß <;Phc´»¿Ã†¸ƒ" ¨†!eèŠJ°f&Òý¹BTw“:âàñýÛ\‘®g¡Ä±9#û:'Oä%ÄÉ0dodãÒÊÈåÓ~¼L¾)²Âwlx{Oÿ R¾HnˆÃFÃ;ˆ{Lv#e¯G+‚Kµë­àLðÿ2°,r‰¨úÏ*&ïù<¡?oèÏÿ­$%pÓÒ)cúüÀG/Ä>ÖdÁéãOÖZpõœ•27ABŽrËEІ+—G^¹7ƒím)÷°2S1$¢´Á”‹~®wG‰þV mb ðÏ¡>6cÔn…4Qè¦ ÔH*RPÆ~ëO†e|ã÷Õ˜¸ŒR„Ì…‰%§t™„d /°Á¦7}çQ”B"Òvá›ièlWþ¬X>DÜgÃJ©sÜQ„ñ5ÔZø 6³"Ú;µûÓ——â¶R²qas\!ß÷ SÁa¶;<,ߦÐ8î(ô5~™‹®®„„Eyó`ÎB¦Ð«‚ýíëŠt<¦í6Ž]Þ,yи³òÙ§O¯”æL¹ƒC儃ÿ¢:ÙIÇ%òwS´ŠÓÒáÉ5£SrÛñÌö6~2³j>4Ò¥é[ä ¦ƒlûÕîp‚ôxðï¯ÙÔ6ÝïxÏYýdÎG“ð—(nŠûa2;.÷"`D9ã‡ùOÓç寳hº¦ãñÈ0ŒþpØGì7ÓÎêË!^¨‰ÂE_ÜŠ›D›X I­¶ÕÙæjL…YööööÓíÓ3é@¨f¨F_Ë(p¸{ÆìFµŸ1Ò¨Í(ûØÈ;£Éxø‹aè†10†Û"0ûe^v¤Åì Ÿß–F×½c›<øAîXÚï½îc©Ü™¥!ºqã*.Ë;SÜà Ŷò,æ€|{]§Ez™–¹¦Û–S=Àèyä°*àŸÞ‹N׌ÞÍ}(ôX|ô0J¾RØ`]¼à_c [4™DøØ@»H–•Ëÿ ŸHJ›™,»Ìú`ïîÜ„‰£™©P *wÓ c€{Ÿ—/`—³tpçýŽÔ+T£è´¦~/ª}R ,Ïs‰&:(Rú•:A«7}Ư”€ ªqno¸KoãÀÎÝàEPòQSl£ÈÙ(yà†§—á¡m.¿Ô ;ßj-£‘GRI\4»R(g mÄÿ⥱/%Âô¢D¨9ÌP!åxÏX±-íå3/}î?ð1Ì.$IG©v(Ò*ØÓ5a~sŒYçQÈ]/($9†¤1¨“± FÎ9Ó|7Î|D ïKÒ€‚åÙãé‰N2ŸÔr¼ee\2_`/PG\ËšÌàì)ÓaLŸ( ÍíÇWpfÏéÊš¦ÏµÐt¾R ¡FEQœ 7¤¯GÅr ’¼ù·1XÒ‡ƒX>æˆÚv˜x'>Jì߇G¬Ð¤„;bbÒKPh¾ùxûæ3¹~ä𛸠¡„¦8ÃÿóAµ¢2Kö Ä -øÃ™éÃâZ G!Üø¢öÅwWÊ»0ÒDXìÂó,ælF47Ý)“-l×M˜UÉé¥. Dü¸'!É­ÈHz‘¬£Ÿ®‡ùrÏ"‰ò£lÛ­ðþì'=§”ñ°ÓGNÖGuœs‰‡2× ñÞX‚ÿ=‘Vj°2Y”³u™Ì¾W;Êè1ûkJ^:ºl÷V?Z ÏyvþwñþãÒèYªþKêS »³Y¹ß¾ºÙé+÷ƒ—»,áÌb~Ï÷îƒôðd§i†HàÁ‘À¤DãœàçÌ]•8зïßüùã›[©¡*{VøÙ†ûòÓ¼ú,·4Ó±eê~a7–¨—óÓ»ýDÉì¹ä”ÛÅY(œ;l©ÛÿåöOWŠ( &‡‚ãåÕ‡×tIBÛµx0qtå2ëYGQOârH¤;G×âNÔ!6 ´ÿۆ䫄&–öb‰žø)‘ zl¦½m¨¢)ðÿt'GÕ&cI¢P:éKN¶(c^¼€Âf|{a££#uj^)?r”»W—¦k]R¨ ¦8w‘eR‹ÔXÁ³ß%n¼„œ’°ízÖ¢X@/ár…5iE@ †ÎÀ{õêÝíím^äŽãˆÚ^¿ÅIxù]"~”*o°Žf(R~9bɈ¦ŒGΊPT^Ñ2K‹.ïQa6ƒèl2ˆaxB†cÄÙ5wì550ó|¼Y”(8ÄÛFhZ€Æœå§„HV¿ J kJð5õ.”_Å."кãal¨Œûð*í´¾Óø¦ƒ©lL‹f"²¾{­VŒ”¾¤ÒÂ÷.® e¶d³¯Áf39XpS§qú |>±çšÅ€æ?´Gû$rÙ "÷ç?#e1ÇÞ2§K|?=4xõL‘¼Ž—B±®Í9ÆYp¹šh•ƒazõ]r ðèŠ#¼gæ×˜ó— -‰m½ØõQ²¨kŸ­<ôBÈÕUêx†8~îÆò†îŽÐÀ­½.H¸8Ã{ 4<ÿ¦^Wv*ÚÝý§2´E2åËûwŸ–Ž{ä·›…+r%(DÌÞ½“PÔs€¶Þ»¹àWœ æ#gKœû”sœ ›ßm‘–Z|=…<„t¹h†UyÓ¡=’¼<êã’JA<®Ø×«™·º^\‡îL€­«e¸rž,Ý •îè3VA¡tš›Ò% fÁÙq¬ÌÙ׫_íuãh•^Y2á§ŠaN€r7´}J0OÎè)S†ŸP-ļùQhLÁaæl€éÆùev&™ŽûAÌ~åÎð¦ÈTJWÁS™ÑKâÔu£˜$ßÎIÎ;ºh|§-Jm…‡;sæ\g0S÷Î(8}«ï’ן7WäØÅ‹QT/}ºa—º­R0hú(ô4â„tj7A.E “ˆ^ǘz>À­„c¡XÁÑqßü(Ç7_¨‡>ë£ v Ÿ¥öJ2’Z™ áh»Ú¾-/¬½‚Ñýƒ£;Ý£{k ·Õ…¾Ïzyz?DèjŒ9ÐsS¼ì¢íßœ>N¡ßÉ+×½ä¥äK®Í¢·ürÇWe÷qC÷ó†i7ùé!AÆ)!A±Î¼?y!P¹ã¹ùˇ‰Ä臘µ;^*|à¬ô~A:(>ô¼¯Œö/¨AõŒ1.öpú0ÓMU¶€¿îm‹E‰wbg/âÖ”_0ÎÍÈ‘0zÍ7¢AÂÉ‹ž6¼¨2eH^ÛÚIcCþêË8UœÌ†')ݧl{<~¢p9ÃÔU²Ééë^‡ ¥BŠäîD\3qÍ ¯1^UraÙ˜ˆ—ƒ‰›t«0º·ß¹äNZßôëv/'Ûymc&ì„Gž JTú#þ­LwC))ȫƺ¸E•&ˆ/—"mdtß+rÇÔË›mþP)ñã§ÄF‹‘.u[è¤Ûd½(å™EQ~ä ÞIÖD¹ààýØ©Žñ¦sF¿B.`Ü#E’%¼+7˜£gnÞ¸Ò I©ôOøˆÞ¼³ðð2UëBÃgkV‘¸áÇKáf–îyöÚ“3]à¨s‹ zÀ„ÄÕz&¥Cû+l¯ã^ù(#¦çXtíϲöš™”J!J%ƒ‘1²©²Š— $3.Ù8ÒQÔý]û¬eV B8%LßR¦æÆRÈiAŸÏMWÕKEãŸúÿÐßá‡çú¹?¦_Œ¨ôTï«üƒ¡JŸ*þO¼¦&öÉ÷¦x™”$9NT–Xd8J8…ˆë° B~"‘[(T@×øaOÞÚ ¥B¦1EÒAünuó,tE[š [œKòð’¢ÓMðËĈrá!98ÜÀ\ ;}v‰±BWÅ%EßòψYb˜ ¡iꃡJ_4 8ßÑq>îùŠ ¬'Ì$ˆÌ…¨x÷Ñð ’Ä*nƒ2€ÇÕr$w„]GsÅ}³Xàlå@cx9z)`ïGWa˜p,k’t Ä%pE=Ž• ÛGŽêh4UÍ´ñhlŒ2oˆ‡ ¡ìB-ýöøêPÀ‰Û_Þº[Œå›óãä(=~Ÿýû ÑüEü{/ ÎÀñ÷‹6†>ꡇÁU” -Ù‹ÜÙ]לð±ô„n”·Hþw®ò:fÔé3¤z;kÿ!JNŠõèAøX]© ùK9: ø¿ÆCÂÿiy—Cve-÷„š6øE×tÕ0&Ðh1G˜¸x³¥ï’à6îÁ)-ʼ]íŒá¨Clo÷‡¥ÞãWæˆ4@Ì`-ùl[?’—„Á+Ü>[PI³¨,wÒÐwôD—çgâ‰,ˆf¢f^D·+Mœ[¿‹O+Fòî¹øˆ ±ÚPü¬…Ù!SxÅaE7Ôlás˜<©®9´FO!êg[“¨[ÝÝên¨@ÎÇ›ÀxÂëWªÁ D*(0`9U81±œz„cãåõ H¿ =ïê“÷AÔÙæpâÔg åZÁÁÉØâO`3¤ùadJÞrÜò8É_2ÞpŒ÷KÏaÛøoÌ·ÃDõ†¸Ê !nU$6ú¾Ý„ª j²·^ñRu¢fïœäм#ý,ö«¡¦´4à¦Kúí¾SÍÈsìÃM&†>57n¯ŽÚ*úx¢ߣä7h¶ÈX%û=4Þ,ù-†é%ÏŸáÀkõiݨˆ»ßp¨dmZÆHÍ Fç»9 }cÉ0"0»xÀû”Ý›X‚…yE‚»/y,ôŃ,(k%æ§Ü¬¹íPOTÃã1²xt”þ-rÍQ´~*gZ쥢¹]ƒ®ÜG8¶˜sì½ãH®˜„ΕÛ2%D·:¹¸’´ŽJ™¿[˜aÊa’ìêG|+P™ÀŽGá ‚aϤ„6©fä‡nìM@´ˆ*Ø—ªŽUNæm¿[„Enâb³E‘{òÏz‡.vÁ8]0NŒSÙB߈ZqgYQ˜¯šêßF‘–<Á+4ÅÌU¸Sôr[&4!4Ä!Ë0®M(Ýóx}Óa®Kª?ŒÔ‘6ú•ÍÃkPÔ´{Ç|Ó®!Õ@R{ª3íR›yÛ™vi×™v‹nÀ(×wŠ#! £Áþ¢–Q%Wñ|{͵ q›º †)’˜ÇüdEÖ Ö ×l|¬>ÄkÎo£~("ÈGOãí…^l¸Ïo4nîÍ"Õy à¥êx0éúä·v¨Ž‡©#§¾ù³nô^¿ùÓ»Wo$OÐæžì=Ãɨt8™@>ùsñä"Ϻ .VM~Pí°ÿPF.¹…vâŲúå÷-+XT#~²EަJâå'(Œ.Dq¡ñ“Á;â]ÄÑÂ)+ŒúÔ'â帞¡1‰1gˆBFµNÈZ£2xsÛEs§¼ö½Ì6’•è;;0ÃМ-)òS´ã …e7á{{FPã½@;0})ZL|ýjÙx¡þ‹.O?eYéÈ»TDÇ:m@ø¸t*¢uXõÉÐLŒþoM{œ¤Õ½²D“>ZálÝ8›°$P¶3EUÖb# Ó4DÉ,z~?)Lƒ ØÓE1ø¿ìy~Ï^÷LËòYöÉ—l®¬©=mÎN<×UÆÿ¡Äý¸W"š¢ã^c¸W0m ÷FZŒL!O÷£o Tîd[/z’ðþ ÊÌ|{Šú,ª„… ¦qŽ‚WKŒNÆâL){ÑÈ©Qh›HušX’RÅS\{6Ï¿ 1 2:÷ÚwÌG/ú%ůIÞŠöܹ½ØøÜä¶Ï’ðÅí¤>I€•‘Ká#¤ºž¯úQÍ. 0¡hÙÈi‹\®ª\»>éߢ¤%Þ‡öXE8&2s€¢°TÌ5ÖÏÑ;s̾ryKEsÁâuo_}Â.•Û7ï±ä'~ 2ãwåõÔC›á3Ãa3 ú€®(%øî“ " £[±Òh]üúÝ Ç‰-ÜZˆ¼Ó¯?~þžsÇ“|¥À‹5PÈžqg7íÜ0F·3–NSæ¦í\]V3¥—˜'ï>Ý ¨ øË0.Ù¤“kFË-Ê­ýP î9Âr†1ÆÚ@m®¡Pq:Ít¹'Ü£zÿ¾¸ZyÉöņâå» ºr°þ÷” »2-׿¦Kb6‹†^¶ÔŒû‹Âƺʷ¥'’­P¶Éñ3{rú™=9è=º©@:><<$wÓùÎ÷þà NfèƒØˆ±'vò@¥|_²Gç>£äÎãkWm®0 ÀœhÉÎs±µ—Yìü~èv%“_Ê#÷ì½éFòÙB¢ˆ)•塘œáDW‡ `Ïy¬ež]ê0ûìÒå-¢‰ªîYD *àB˜2¦ˆ‹u…( Ÿœ´Û|gRµJZ¾{™8Mxú< ÷<â…£èuþêÖ§K§›x¸ð½Í”-øšÌ¢ÛFâç¤(¢[&ÏÈŠq°- Ñé=UÞã‡G¾{œÁƒÀþ5%ðú¯í‰—KSé% 5ˆÜëQ[Ž|aøÞ%bk? j'øoîrL½p™ááæHý(;”ˆa1'èHÄÀ"®Pla«¦Q[[ò¦2· ç ¶R<‡Ž)[Û×J!{XÅ$‹ Ìg ¿0Q6Àq #ùÊ”{fR¶Ex:%¤ÊS挗Uò½B×5ø,Rà½íM ‘?¡²kÏ0(’œàrg›\÷ÇË÷|lâ áÊ„ap ³øÆÁ#…à¥ã‚~&q‘½SH5™{H¿Ø»ºÅž¨íµ!fõÒý bSjŒþ$û~¯ ÉÒ씇yóÀHî9X: FÎ>z÷DY•£Ö.^pÊóË2£þïÑnýßiÂøfþ?*ŸÚ9bó¥5ål‹ã˜gZTÔèɯ¾ˆø‚#(8!Ïv‘q(ÔO$Íœc&sÂd\îÁH¨3Ê< ð;¦ 벯“™dq„º]캒š,ÁåžøîñyèF°þЛ9fÀcÏ ñßÉz3;$¿À‹ÈÛ›~šxÙ}xQ¼ÿ 46'™Ád|ÒaJ N”…ãMÉ¿â•Ú+åÃìLÅÅÂŽp'Ÿé,<X±¢lL‹,zȃ¥CÎ`%)ÀBć‘çÞ§±{›+AœíƒÙ;¼é;.)è¤Ø.Ço §â+ÃHÄ’c²K:=EÎeÒËaÏgóùRìøùþœD°ē͒'8¿“H”»T6´‘`‘³ûíÂO(He™ÌϤ’cŽøJ7t©fÂvô‘ŽHWMâ[&—Ûùåû²ã¦³ó Ãægtl? d¯ÇÖ°›ë^“ü¤Œï@*ù{ßè÷GþoÔ«°â³2¢¾×FrúdžÓ^"ô9V'ñ³ÞqêŲÈð†üÓ٠¶ Í7™»ƒ8bøo«Jí¢ƒ÷O™ Ê³=Ìí‡jÚƒq²6S®…}Ó¼ –•µ.n ’]ÄaDm·Eb‰QêJéþ[¿"œJk¬{f‡ àSÑBÕ%¢d5\®§¯¸eµªRêXJÃK¹G)© È„'¼°¡Èô¬.YVÛä%NÔ¨ç½û>žN±>–»û“!žˆá ¨H\V„×a F&%U„£^qÊ -Ò/²›ÇÉeŒtLwˆN¥~7½G7£¤‡uþŽÀÑ^ò3Œ¸Šàúí7? ¸ a¬‡W}ɵÏÐY²ÌšKí·ÇÄçWÙèÆcëÄb(™<Ìn»X¬]S?ºæ3,ðÌbS™§„íÂSÅŽFÄ£}ÛÂHDQóqO*?ƒv"R¨eÖ&œ±UJSÓ²À–²™ÃÓêÞp\öOïn:è2ar×sÙe\=3ê>Mìø3¡Llo%µ“öiâÄm`rwbHºöü1‰é§ò¯qXL$–#Oéÿ{_ºÜ6–¥ù*H»¢Ã®IlÜ\aÇȶ\éNo-)+³¢§#$A%` håÄDÔ;ôßžG˜—˜G©'™³Ü \  –Į̀²$¸ë¹çžõ;óïšö,Y…ÚµG°HSmäÄÞX€Ò¥gL8ÂÑßQio?WRL«c5ΛrúÚÜÏI‘M‡ úWa8Ñ~^:>ƒ}ºüÂÃHÃ꥾¹;XݤM 4×ã’PSUÛ_mÄl‰!5˶,}·h]µ«_%¨=rVµ%j…è‰{­+Í”|Wµæ‰ol¨ØøËª& ƒ…dûZãÍ)]IrGÚ§ª=ãp>’÷¢z*ÿP·C£kïêV—øËs׎é,rݬø›§Ø )!Â7¢V0›ÆÉQvXk‡Y¶lgÀµÇÀ´[ØÊã8~ØHíùâKô÷ã˜#_fµgɯsžê)?ö"ø Ôš>¼à%ËÉ–`¬£7¬@à ƒ«ãŒyÖæ·~8¾»éÇ·óQè×&Yx.Ä<Ž3Ê)Tõ)~Z{†ô Å >“(¬–@Û-³^ºuULª#äf¼'Aþ'Qcoc¥”‚ÐÇ0çÅžJ ŠV'…Z ¤'µÖyÝ)åEª;GEÅ×G©–!Bˆ¤ŸdÍ!—µ3#·õÈ `ò  ,!k¾ÆI0c*K|PF]ñ(ˆàq*™¸_k˜¤Ò!ÞEa\–Cn:Ð\J¦rH¹Ç†²4_’ÜEUXTò'ë+K# F¹艪§¦lJEy2ž¡5îk¢Æ°L¯ Î+Ä/ލõröSЉX£1ŠHËlH΄™œ$ m!¬bµ<©_Vþ ’ngšzYØT·®ç²k³òRý#—£#Àݵ(A±‡Ø4EwâÊp ¹^écX ¬£|‘+é ,p‚HQ¢€4‘"O"Ü–Œ.á‘K`HÀ þåçe˜ü˜ÿ¢qîƒl‹ÂYd“6²Vî ƒµôÖ”±«d{ƘÕÅCV ?Zus»^cõAWËè®ÖlÁšßMõ"¬‘´U¹‡Õ{‰'bÇáØ£U®þv·>~:ö˜ÑšÜIrÙí Ê(áiœc­Ç•ãáØäÖp½g̹ Ý´5iŽLÝg±fè²Áfïñ ø&Ø¿Êé§K,h嬴usÒ—”&y¼®EMyçŠÐ`ô’Ü!ß{g¯ ˆ Ø\`êh$ãÀ˜ºõ%Ì*Þrtè3ÓÃf@Æ#¸õk[ж]NC“ÁñÄyqÃé‹B‘Yí7üãD°à—ù?;ù?ÿÿx¤Òj¶ 4î¤&ÑŠ­ôxî?ÀÃGF&{õÀÚSŸtc`é„?K’„ߟS…ŠD-™¼ÿï‘’ÖªúVg:yRq†Ù¸0'„ªì›ËQýÝœŒ¹±¨ªÈUØç¯mh_C“Ä¡ nT ·e¼ŒHK%£3^Ý4dÃã%ªúñ‹‘ÂѾ‚8vý‰á哘ŠŸˆÏ@û¾|2K’Å‹NgµZµ1βFWÑ´üÙ¡®¤Õ×Õ•{Z@àÒ¦b£â‘/F9¢¥>úWþ ŸTßú€o•ïNaP¬Saû‹‘‡YÀâêý¿ÿ+G™þöãË·G| UNìò$ ¾ÞëuÍ^Ð3 «kw{=«Ð2¨´Ù«°||ËVç& žÿ L«Æ+i/šbM“p÷›5ë÷ûÎZ™ô¥Äøvån䫚2ýËZóorú$Ys– m.(ZàÑÐC§uØb|.·e¯?ÄÙÖƒ Û˜í_CÌŠ\nÒ€þ@¤2ßÙW˜]Éžáe-Õãø9 eÂF%ýl ¯†Ñ­âj4Ôd2Ÿ·çó³OoíG~9âñ‚`®2ÿöI|àL´EA-ídæÎ½xMüŠ¥i:û&ŽÛ6®|çÎÖwK»¹Ï­Û\ !*ç@¥1)¦å%âŒg«ßxQ†~ŸÈäÄtÒ̉¨E!„ä=:€]1gPaOz"@É«läkL@SÔã/å)ð…ï GlãÐ}*ΘÙù<8˜Û;ò’Kb\шj;œPä´,møýå»Ö SmcáË©vN¨ €'¢XÉó%ü¿÷ÊéÞÀ&¢n¨´Zj9$œh¼i÷äh\^&rlà$‘9¹XFS±nd—8ÁûãD«ËVÛÚ³ÏÑ¡=o2ŽÒ~ëÖ"@g[™3®Œ7îÔ ‡vǵÂׯòiµÕÚ|UtŸjðu›"Rqà…ÏV&’¸“ÌÕW‘Z“©ë.Mñ,ßr ÄÔû꦳¥Ù¥¦êÖT›!†ªà£Ñ2´ÿY«åÂl¡ã댕qqµaàÿªÃm]ÿ$¿ÀânéøÍ™øæ°¡ÈPnŒñY̶ÞÕZ@%o½+OûSZØ.§ueO ß§’»r ìîŸÿøïÈY¡}X¹ßÝZô€ ‡\öól™q{xaŒö°? óV´Ñ>¿þ׳7—dtuDlÆMN5;|e2&.‚)y~Ÿ¿5ÏOÿÖÕå@'Ú þžnÛm}X@üfÏ0Ûýá1ˆß¶ìv¿ßýøí/Úåçwï´–ÑÓõkøë¼«_kêì+vJØtuyz}<}ª]®ÂP—ÈÅÈbÅ2ð*á¢U*¼•6‘yáeB?Ë_óªäÕØ}¦€Yúüpân·ÛÚSBµø“Öp{FÃ확ÛÛ‹ÔŽ²G†ÑЬm#¤u¾|üN̶yüNì¶}üNzíÞñ;´5;Y7-Ô§áòr–9èéCKߨ+†ì‚ÊTûyÈX˜æ6,Ì8÷P8LóÃa¦QœæS˜ô8ô}œm—9F®˜«×PèH£‡+C7³é«CMfõ(#S†I¥‘®*„¢»æ@ň!1e–/¹ETDA»J›ô‚´?ÌS¯Û}’™KeÒájÑ9ìÜ4óTÛn_FɃ¢>Ó·,¯_Ü·¸ÔÑ6È:CÅÀw6 1¹⼎Mû•”C«Ÿ7P¿ å×§Ú…‹d*Lc00mzP³Jõ åÓ?Ìo•Dý’–wÉ »æóYØ×ÒÊ‘ì"T§Ó=\'ÂÄ÷¨?ÅMß ¿P~ æÇþG ­Ë1B×rÚöAóãÖŠ¿«µ­{´ÿIsúáCËÜï¬tê–ÝuU˜…i*d¶á"Dd¥tø¢¢ËjvÉÌ IäS‡¶b Ë9†ÓÞ¹Þ¸¬ùPA×+'ª‚D\>Q§–‘E2fðÌ +¢æø¤ñ¹!V‚©¶Øê¹%¼7ZàÊà¢ú8ÜŸ—n0¾Å(ýtyU°hzû…–Õ›VïKÀ’+È'j<ºïŒ\? dhuS›ÁîÇŒïA°)Þ…;}*â²ÅÅÑ6²,ŸBôýå+ Ï׎þ ‰ÉL½A#wF“87%ÃÖÂÃ8ºKqfΔÐ7N¬Y)@3×wn¿Q½ç,J~ÏœhžÕ˜À%Aèš±ƒ>0… óÈÑmL3ô¢LÕ§m# ¡½S¦RjgÉNe“kÄ€À3¡`+ñt6ÖmìÃÉGQ:·þã¿h5Ý _Š6Fá„wŸ•d¬4Ì IM“¸Éd ¹ÉÊe€¦J¥ÏJ—ï­RÜ H9_¤¨Ô#îÓ’<áÞâÚ#83ÊÊŠŠvžÂËÉ‘tBW [‘×9É0•2 %¬vZ@YZœ²÷Qdâò~‚–Z„¥[æ„QšVV¹±hüq÷JUP„ÞN\Œ/Åè?Ö°oía¿Ÿé(%@¶n÷L»ku]Å켺–CÙÛ±Š(=ÛÏÜ SW´¸ùCŠO»£¾Â–Å8hü!ž/Ò–¡Jÿµ•ÊT­¥K×Y,|‘®ƒð*¡æÏ£H5¤žù§—È;˜ø‚5p¹L–ŒR)šãëÛ NȈÖjý4É ¡‹Wlç"3«æÇ—£VZÈK#xäL§Þ˜½}ë7o÷–hpMìFŠ} Wï¡QÁÏÜñ5eÁ2%d}‰$Æ)ËLÒKâ$1ð DH§ñlâ„Yrû\>21Y¼ÑÆáâ–·u­ÚCS"a¨¨<‰À¼P‹  ÅaQT™!-?›‡ÀKEn©Ê>§‚zZ³Ÿ; ,ÛDs®,“Šw9ü˽ÊBª3` Ð3Âq GVf"Ö¾}&/Æt“ç­=œ½V#K‡PFÀUïàìˆjŽæÍšù¦ë·Qªõ ag{èÒ¾e!õmãˆ`6¾‡6ŒÂ¯{ºf˜úA=<£qQ/†®Y‡µLêT´O‘Îm¡-Û‹ge¿b… 勪±/¸{ÏÒ¼>dzËxIÕä>W7&f÷’tj­ÉΦVÞä÷ÅÍ/n%ÙÙRvkÞÙênZŽê,ðÁ%iÝ„qWû¹¶û. ͤ &uDToí…)¨Ž[÷ª¼t¬[áòTï\5h8mëH`ƒT*¸TE3fé õcAñË\s“\>$pì{•ŸqÖ˜@Þz¼6xpnÏG?Ð^âTõqd×yå ÑȾ¨Bð˜í]: Vƒ^¯Ãâ,̽, ·zÞ õAë€J]“½u míóyáKiî$c½¡m©dX“Ç»!‚Pb¸Ž ¦@Š޼+À8Èû!|·D=ê·‡×(³$£åÔC?e‡Ë"D°ÃõÍ ¹§w@ÄTžùè|õæË¹úŒ¥ëø¿ZnW¶Äë; æÀãЖ®±vúîâ;ŒG×çã6쉯ħdª‹168öa¾íš|/‚JW~¿¨Üúœ½ß‰ób.X«ßý:E(é±»HZBk·…ò|ú„Ê…P>š¸˜sYí5Ö™[„¬dW@ל%°T]*} F,c63]»·"?àx ¼¨@+zîé²±ŠÝ>Ö>nŸ^Û§ŒïˆE+t·ùbuR¯qÒ^Þ¥ 8'šìôæEÚö¶$¶á®Õ=ªê?w¾FîÏûªüV-2PzyŠ—hWî ÍÐÚm­ŸÖuy¡Ùw:}„‰{äóßjE .þ†ÒØN0&îäüìÃéßêwSÛ.¬ðî-_A#?_g¢°*ËrÄh™pÖõ«®•\æ†eU<‘Â\Ìðþd_q¨ÆÌ 8(ž Ž‘;sn< Á\áÅrtö ¬U_°z)¯®w†(È¡s ý¡‘ÓàÝŠY:õæ™g)µ†/˜,üwg ZŸpÉ™wáΤìì“F”¼(´ùSLH1nDñ9®?ÍDäThäçÛÉf ôŒ¹"âÊ g(˜b¶ˆ“14¬$|¼P0ÕwáÊ@ˆXj, cáõ#“%¬g’ŽöbÜ9žù~š"³8i1ÊW÷ ƒÑoR«~Ø6¯ ÿ–‚¯Y˜Vc6ž>è÷z†Ù»Ó8ÖaóÜÍc?ÛdC&Áã2y4m)\ûß "GþoÝ ²§)¤^W‰%¤.ÖØ~žº;ç„R¹‰s* 6Ÿ`xôVGMöe¸à,^Î9ùÑÚ!0Ï·ÉÒYKs¤Ö¯*‰@=çEMYEó—ÉU˜Kn‘Î Y‡<¸,‘Ú(j{âŽ#Н–®\)ñP¢}¼ ¯>§hòöÁ’¸±Èp ô e *Z®vË]}`w‡ uüædC¿™c_OŸª5 v¬Ïñ¾ÄŽ25³„‘°é» ©Ü•Q}'!²Ûƒço<§E¥‰ ¿ž†aîZF{0GáßÅÌ÷œ¨ê§Å~öÈ<¾Ú1‘5;ý7“bƒ¸Èïž»(n»“ãn¼î–¸EÃûŽúSÒœÞnYNoŒï5ÏäÀ–#÷ÊýÚâÀFåc Ä>¤Ùl»vjÌÖ–Ô=%§ÜÙôöÔIk&ÇðLjËõ A;{ö_x'WAêK@×Zúé&Sjß/ˆûG­DZËGK8ö-Ob¢‚|“‰—¨öÌ‘®“!V(6\¸WÓ Uc„N0 ”œiÑ4QÔQ5‰fœwF>MÄšîïÔ=8Ü1g›&kT_°*c böôâç Û,¢>¤°ûhé»ñzÈ2Övdk@L]]CtÔ‘ÄÚg(AˆT •À+¨-Ùr‹ÝQ'O„VœTO´ÜF €qŠºˆXTÁ|`Ft Â鎵Œѻ±º$;2~9,‚’³…[¡?b׿q e¼×Ð)„LŠ2jEä© ¢d–¸—¤®p´‚üõýi+…K ,ÕmˆvïÉ«5¡ºläJŒ,ŠnW®Þ’q½S°ÒšÆjMNÌ«—%0ö)è‘#˜‡@X©šù›#¬Šû‹øQAxÇ––T F¸*ï`kå6âž`HRÑ>vïšÍüž¤x—IŠ”ÒTk`œþÊÒÇ~Ù‰‘GMj`›Ø4F!b\iªÉ>,ƒñbyuÅ{"ß'«—îÄÚÌ»šáϤ®:SFØÁQoÙÓ³"Ëñ,HíqFÀÃ}tâª$+³’§»»q3–-æ¶„Ë‚|ʽ¸Ðï)’û§H>)]±@ïwõHéh®ÖÙá–oŠÂELܼ…Ç$XEáòjÖÖNÓÄÊŒíSöI0ø”ò0Ò+¥CŒîª7W”+„h˜Ú+¨¹—÷^æì­7–g¹d“çM8ºl£¾juÀ’ª:ÜH>šŒšÉÅ»_=Cõtì-ÃSÎò«ç{AÒÊZvx !µîydµƒwNÙ¥Q¥%ý€ƒ%%Åç‹»ËSŸÉ0,°lÉöd¨ÀПÈ( U_uƬ@ü˜í0 IJУ= tjkÁêçraÎaQ‘M»N„1 ~†å‹)(©Í*C×cù)Ÿpâp¼'º²E™A¢žJ ÎFÀ0†£a[Ɉ“+J˜EjJ@= X?ÿ},¯š;'ÒLó•)»¬Oœ¿Ó7Y…Ñ5Zêæ¸²x ^‘y™ìs8\uc"(œQ–ÐD¥™û^€¡õ~.ÿ8‹·Å:M“úѳöî:§vY­eä)i￸ˆ¬sGËÂ’ü•›¤-œÌ¤ïøª`GgÎ)YÇ-7¥VBÝn°D®œDYJ^',H<(ÈVxÂ…‹€£·´ i˜5R˜“0E¡æóH/á,Ýß‹„2“0·ÿݹÁ³yÝD"’Þ™ü}Œ¥ê—æ¾ß%”z”ª¤LE'ޏ¨¸žuönÃ=¨àh«žc5oHÅ ¾ß6ÄKRtÄéhÍÂ1\9Èý¼xNÞµzãÁRwõFBaˆÌ3)A•T š{¼Ü”70MÛ°@!~¸Ay_ÌšáÐ`<  Ý0uË6‘Ϳ˵µÆvƼm4uo!o¹ƒ¸ÓñäÕg4ˆï¤Ñ!\oÉÕÚuΈµH´Ya쯯½­²º5&WzÂÐÀ‘³~H¶HˆÍp–Ã(!Cÿ.è H»FœógÄ2L³Ûï±éYcÐ+8Œá¶Q˜áÐ5KxgpÔèøNò©ã‡ÁøÛþ¦ oPP¡ØM ¥Ójf0UÖe” y ú×ÌEÑ2вp:Åäè£(ËŒÄQL7FÑ™@ã?]ÏïŽ8 ÆÐºóAä²ï~ òÝ7;ý*g"Ìõϵx ñ³9Ь2’En$ŽÓ:ãñ!ZçVÈ¢š¥‰ý‡q÷´‘sÈt‘×qü¤ƒ!-™¶yÃÈ Ì fw¹[†ÐºË1,scX‹(LBCþRrV«†_v2@R{ŠÂe^À hírF!×Qò°LP8_O@ÅG{}%…C|«¦:ÚWÚ¯_ eó哘"ŸˆÏf‘;}ùd–$‹Îjµj;‹(nyq;p“ŽYHo;ñâkÄõ^Ô-B›Üx1¬Ô¤¥>úWþ ŸTßÂb6%ûeÃ~Ud’æTÑÖzp¿<Ã-!«Ênú1¤5"'i“íØw©òIȸR*°c~KãÝädíûqOù‡öò¥øÀáwî ;ͬYSס¢%ÓÁƈFLJñˆÔa%üiÇ!€ŒÌ\¿ÂWRùÌvûO0š:ưŠ®i˜ÄË2©¿Qâ*ýò_~^†ÉŸ'!ÙÕÉàŽn5ä›l ÆâHa$ª"]]»ž³e‘|6 ëX8^´Íõ^ÎÎÝÙ†ÙKï¥V”Q& èà»â‹Q‚Ë)ìyK*—Eáàë¶Ÿ ¦gè†eö¬Þд{Ýa¿?ZEœ-K”©t~]I|¼2ÓZH-°ú¾U`kÖª«Iß§ppá¡J'‚Õ²~šÑ®\n–¡QBÙð¦¾e&J5ugŒ±E¹ cçoù“á`5°àvÝ[˹Íu}9s7ú5qÑåFO^ ^ÉpÖr`„Gè=GK½ ØúÉ8òs”&«©îªžÇÉ.F7¤Nu™ùq ’Û’ý‰ ÎOYÀ"pZ’< ©+Å‘OÓ¸p®„ì½ÁbÔDŠÇ':̶ã,~f‚e  CgXAQ ሣ˜Ÿ–ò}CßêÔo×ÓwøN G>ìW¬¿€æ}Í­$'½Q¤Æâ2ªVå«Í†F[•Ÿ6Pî9GTp½^$j±šGȼ. ÂØâ;p‡Ï©<3)ÓÎsQf™X) K\ÆéÝ-F‹¥‰ðôÁ í¶¯Ú,È+ Ta“;DµYz@è$Ót†9ôբ˲nÙ&¥2¼ ,m¿k!›9§)mí vòÜû¿°¨CQˆ"ù£†Vâ¸Q#P\¸ ²ðj Ó{.…‹Ùwg*ɹŽÏ¾:h0Áø 80ŒVòD@Q  Þ¦á/¨åÂé)Õøs–@!@HÈä*u) k·¨fåÌ@IæZÒ™o˜‰À)ÐLºeÏaLܵ…àU ¥];žÞÖõŽiá¿Ý!ýÞmWJϯָÙÅ¡l¼ÿ¾¦5H…õÿBR‘ÊÎC&”LHBlVÿE=B{Jâ¯4íUfü­ëÇ^píí»ù^vzµÛýnz_åWžRŒ#Žù‰G‰®<’KØ­^K·¢c¿×]ßûÒ}}™ÈœøÒ_DáÈwÑ^(Ó~ÂRX¢ÊôŒ'¯.Tº%ïU©¨¯ëf×vÍîÐòëõº…‘=¦QÇdê¥ædkݶ]êV@ãwÍ7Âà‡Ú}\Ôî㬘[ì/Íÿ†—o§;£ÒAæX"u‘iÜ“Ú_œš’¤e…T¤‰Ë† Ì bxp¢âEÈ©ôó4Þ9Y…Z¸Àv‘–„à ­¸­½ÙX-ÌW!åÁv’¢JJ´|õòOa”ÌZ? (&JbÀlg­3'NN8± ¨TE‚¿Iä÷ðÁÝ$JU²?u0o¢Ê: »ºà¸z\ 4޲_±ÆsÅ )ÌÊl\~4àTøéÒç­‰Ö-Ef¢ß^ß¶tÃ6û½’;vã2~pw¬>hèŽíÛvÿ'cÐÐüofwìkºc_/';©dæŠ!Ãàëܾ›Ý?ÐÛw`4rû»ÊŒ”}{=Ú³”­JÉܨe†ìÔróË>Ìz}d¡=U¥ë¹“¡Ã×Ì8µœ›Àt¯@&A‹4Ýj…¨°Å<Ò“ÉìÙŸç#®+ò›aÏÖ ÝÖ æom.3lŽË ¹Ì[â2™OûPŸ );ä=ó¸ dò[f ÆnRÊܑè}®qŽ©¢tZ‚QƒîxA\"bJÙÁSÁªäz#—E ‘ëìˆæ¿ÛÚß‹¤S,kLŸ" ÿùWÍMÚŽßn )öp&ØÃ,¡¡nîPõ ˜ ±%ýj&Ø5 ™à;b‚ï"ÏÅLósŒÄ«Ç×Û} ,pXz̬#²ÀîzøZeöt,8DlØìëyÍ“y¿®aW©UvÊá¨À2Â%ê€DݲôƒêçÈu€¨×(6äðm²D'¡†Z)Bú8ã$ƒ»¡´aŠáH»rÒÎäÀ¼Õ£õR}«,ª •Çf!¥qÕ j3ÃŽC¶.cc%ÌS’Å·ÃXxý9;VªÆ|=ps â“[ÎõÝ«NG"59¨À’à¡:X‡ÃC„1V/¡¹¨s“ÉÂeÇKµ3 ›6í|Òßœ~øÐ©—ÅÐÛýJô™«•áÝm±Å‡ ¹–ñX¯¬-å;ö¹²¬Â+ë/teýŽÐBûHbÆ1Ô»´¬ÇqiéǓۭ²0ãpÚ«ý.­_‡Ü^rÏée7ŠØ›‚;S¬Ë³¿mE±u»w£‹˜coáaà`v͈;Vˆò„VÛ 6DMèp™Ûî™ý~·ÛÒ|¤ Ìhʅص‡ÝBö‘8ØÇÛúòvA›•w•ñ—CîA™ÀÝ[O>š4Ü/‘†ûG•†ÍLØÍ HRÂDWŒ”Ôð Ýü6f~ë‡cu-”D†Ý| ëÓRÑxQIº^öÖÚY8¸PuÏÒ­ŸúVÐïé˜!aµå½±gjX›Ôa»bèZußO2¯/}ïRú¶ÊË^;°¥X&ÄWŸóF¡èÕÇQf‹À–çzQܦޮ½ ¶Q4°¬^oØ>Ú˼AZñ]þ™îòÏ”ÔyXÔïßÖTFÉ…^*ïÓ‚Ö_Ç×ø)#»ƒy¥{SèDØý ,ùç×ÿzöæ’"!Þ_ž}ÌÝåkˆò¶”#·ð¸m"Yé@åe0hDwêÆ°gtÓ‡GÇîìæØ]qhÆbw¢°£€Ÿæ$¦š\ïqÄ^ Aï¾h˜‘-ª32Ñ|`m«31rª31Ù~uFíïÁÀv)Êb÷a`vqÊ”(bSë°ôE¢æúE¢Jóýp@—j£ýØ¡Z¬¦½ˆ,üsÕT1ôÝýŠË Ìœ®ªIÆêözº>܈={,lÍlŽ­Ç‚\[û”r™­ÌÌG&3³ Â1Œa×{¦n÷½^W· ³Ím„QYÜÝî)cšIu¦Iµ `©¬Ë–lŠÜk[X¤µ6Ü&¶¾un;;1jubìá€F‡B½yì4¹íGá†^“ß‹x=q-ÊAý¨hnÎVμ²Û~¾»ëa™Ñ¯¸üõ ¼¼×tShq 0ØñÌAôJ‚& ZŠ…ÓÒÃÝÍ`ØVo Ão¦Ý7 ·Uçp8?¾¼þÈ?^PB©ºªM?¥Kös)/R,£mTwËà<äRÎ[tµ/¨eÒð°v³2ÔÕM–sxóÃç/k `w6 ¯h@¤ðÝÓ€æEúxvqqú—³ûS޾Ð>ýpq_# ‹VG¨ê÷4¤EѾ¨.Ž/Ÿ/Þ_¾ÿüI›8‰£=n‡/ôo—Çó»õÏE£þ·ïÏÎÿv_ëèâòôòû{£¶¤hH—gÎ>ž]ÞßB-‹FõýÅÙùÛ³w÷5¦Uј~ø±Âp*Ê6 <»ÌI›“^0qs”$Ya²˜“‡0ÏÙxäÉ:ôäeuèÉ¡튕,b©ÚÍ…êÐõÄ8Gð\Èð»ú9E WXòáZTeNuÆÒ‚UĶ¡p„í¿ÇÚ$t9à™½tj.w –¨æÕ6EY Yœë·—ÄscS ËPq½ ’£†O´e@†™é‡Ã®˜LbÙÃÞ`04í²äµuKÃÃ3%t3%ôÖ#Ÿwí"̾S·ƒ‰ô{²;|ÏÀÃõlÝ?P›C©eïˆn#L®Èƒ=ÿÆÜFÝÝV×2KÆ>V×!Öׂ™\¹Teu;–OtE€b³“¡òû8Å«”•L3\j¯â°žs©øòÞd˜f©/Þìš&œ÷ &ü [’ƒk ·¤{®” Ú§nÐf‹Gg™Û¶»Jáâ k÷Á|JëÿX¥KyšÐ[e:aõf@€iÝpÄ`xRš³€+ •¹k@+evi…Z†¼‡³[nî÷,s`Xýž>„ßa; Xv-¢« (°ó†Šü¬7¯2¹cõqã9Ç?*ò;oê(|X¬×îí*DüÏü7oÎ?ÿñNð/e-åG0õô[)bi%®ï‹¤4J‡_PÒP‰‘wiÑ-®mIWwâ6RˆÛŠLeËúS-gÉ €û°ñ,\ |\ñ93–왵šÎ©‘s•ϱ¼v4uÏÂ÷œjh—níR¥uÀ޹àǪ`z ©«Ñ»Œ|ŒÝa{Ðú„±è#Àþ붬tME¢æb(ȵÃ}D ­'æÑòá¢@Ž‹Ò\?TËЧŭñ®QH…[äHfäÄÞ>Uë9HoŒt€B0•—0^i~8¾–C忯"gboœZ?a³gaÔâº`È;é‰'Z|sõbåM’ÙË'½voh½€?œ¹ÞÕ D½=Ðm ?¥æi¡¿á+P¡!‡äÍ1½Q­1öÅcŨ¸cèʈTô_ϰßXïlãM·7ì½5†gV{\=ÙQº,ž…«—O\8eù‘]Àž½|B‡ºN¶BU˜Ý÷/×¢Êr•ãÑÅ줯Š'évÆûžkÙL±Ê.•Êò’Û:þˆrhF·¤˜°;'UrDG¤Í §…/ï¥Å~ ™MZôOTíðìÆn#Ÿ¤j4˜-xØUš0wÍÔ°H »ó[”)2E†sê[FµŽò-«/…öQkšÌçíùüSÖ“÷•øøìðye™;4¬ßé¼I BóYÒõ:úúÎûS/RN\å–Qó>]¾ò+£>n,, äQ˜YSá=¬ºWøŒawU0¶`·TÓòêéZáêÜæ/:‹húuã«.a1‹c*ćÖ w¼SoËwÛ} ÚO…¦ê=lßUÏñ[—PèÓCÑ:IrûýÅk=ûÔýV×Q¸Ãß½¿¸8h,É×Vx½Ñ4VCiÏØc©jnFÆúÞ U—ú³Ä*íYÛÚËW:¨)•f¨Åâïø$5ÕSv‡©‹”ÝfMõ*o ‘ÑŠ¿EåÏNš}òs¥Ÿ¼ ’-M c_=„a<Õn<¸H–1°ÄŒën{lA9×(×Шë~£t‡ò+óñÜãU½I-˜y6ÞØx68¢´ Æ“+;(Çä'Žˆ¸Y½Ã\Àk3+c·¸cï†@‘sVœ¬Ô6!SY0Ý&MgêÎW°`û{,@V'2ë) ª*ðb;Ж>W \4ÚÁ(¥²mVɬ’‰›Í¼Wyú$ ~âÆãÈÉ2uT!Ö‘Ts ÖPïý„P‡ºe3ÈÁ°m‹ñç`jôŒ×ìö]Þ3[Ô¿ƒÄ+·Æ8ðñšã°õ¢¾«nè÷±¬äÂ;‰VA Árç01,Ë ú¢Åe•:+mtUêVßB‚=4ÍA´÷‡LÓ©äŽëe%ÖsiNËTŠrAL.E˜’<ס·)=_+:t17S½Gy±I†‰¡ú8áLÞ«óÊ’KŠ>‘nìÀE™²RÏ#„ÊOmƒ[àÜw1¾¬‚™3 o\"¸àQäqLÔDźƒyã‚ä“ð›j½îôOè„0"kpRyR!qæ½öhŠgËžF/:>ÏäVºž¥ ÞÐhÝÀ ±>Q|òœËbGÄEÑT<™pÀO…›]Ú¥BP9m@£´I²Îf¦y‘!ÄI´œ…Dk‘%¸êV¼ú¶øõÁ##ûýRŸàš¸ŸàÝJaðúOLÔîš}«G¦b ½ßz(ÐÙkî4•4yLc饛sºì¶šZÅVS«‚ÕôëË'º4–Þ¢T·†ùA‰Iµ?´»›&Õam‹ªeH‹êÀî¿ygè½×§Vÿn¿¾‹j~åßøN |”Þ[.uê·¼œ/iî:e¸ÝÆÁaâk¸w]‡R»HÆ" -Š Þ†ßP¹G„NO)LBð>ŠÙPb(¾—4š=2öÝÂuçQ•"M¨b¢ qÄÞN2¾Ž–B.Zdö”ploJ`[ðàR ´ù!fUI¹Ã‰Á%ˆF®.“ÓS;/¡lO¹¶8^e«Í<’×þr‚왂ºi¹ Q¬œB5{pnŸJ¬ºÃz²®«!¶@ ‹ÊÖ>ê[TJ왊EåÐA׳¨hL\xP^‘‡§—(+¿e'}z²Ë’l 5°ó*=*Àš]>*9!$}0Œ‚"(`ÌálVµþwΩV¦þ&kˆ˜ [Ÿ (DCa@•CaŒ\âÈ5€]NáU¹ct¥3£HE8â ’/ÐHC©9 EuÛ‹¹Ó›Ð+ ÈK†Q‹oX¢7-„¬ØŒ’#& Ñr½¨è€ÙK˜Û‹W‡Å•‘}±/+»5¼¬D¨HF:(fãQ0ÇGÇû qïbF¸Þ:3ê1Çj6æ¼Mõ×Çs»»|P%þ& ág”Ü¢ SËr1¤0ô¹[Yí\AZw\pt ±O„⑜GŠ­v†s*êÙ¯vLbî\»8f:l±À“+©S2cÿ‹ÜçÇ®Ç%õ(sT¢Dý •Z —W3åk¶"Ê´>Ø¡e'pa8þí kúŽ'" ˜ìIÚ%Þ.sLõn¼ ‹½Hr6LnIyÙêÀ5Õò&ÉøI6_Ü(,\)Â…½ÀxåÜbœ˜jo]di’À¿&áÜû®/g`ÊÜQj¬­²0‰Ìð žïD0-Ú–nYÄZš… ,Þ'H!µˆ`<šPL¼y%„CM]«‹áÁ=ûNq˜ŠƒÉ¶ÔÉÝ#’ Õù,Úë ªXHWå)8ÇSP7‚l½Íc‡SUps¤ ‚ƒM42'¢ ˜Ùù¼§² À¤¤³ŒÝ Æ•{#I8œ Ú•O@(Ýi .)ˆpÂÄ-É\h…'YíèX©8"+. ‡ËÀûy™!žUI¬¼³èžû Žxš­o:ô&Ä|ÐÅеÜm¬E‰g/ÜÓºüX{“ÙÃP’^ù7X»zË_«ƒöü|žÛG\e·>å«ÂçÌTQ^=ÈWÒR±ÊX$Á’ ¾–QD€G“%Åÿ¨„’wõ\øèVC]—UtÊÚZ('–ÆÖ4m˜zYq \ÔwÎ~ütvY}i{tj&tŒñÑÅuán“ €®:¡D·åhƒ,$ P%Yß¼yyÙ¢–îéx\~zSö„NÇ< ¼$¤]稠“ÔÀêÓ (S‰«¦0}oÉê¤,àÝ„36.Þ¼/€§ršdh‰\ L‚"¬*ÒØ%`PúÓÑ&a¢V{©s˜Öé?IG¿©¸ u¢^˜Ê[U U’%©‰ê+帓‚NÜþD†ìlU˜¶õ.B‰nL¯ÅBlX@‹‰ÃÌ›#N•¨%$Ž5c®åÒw'ößÖ5˜whþ0v+áû'›Ù‡&›™mcз ’ÍôÚ¡}›~¦aŸ¾9µNõ7ºþöÔîöú÷‘!&°Í|'A Vv‘y‡lFâ¨F_;ÉWaxBsêT›‡'a ÐüD¨EßÑéo‘™4I¨¢”CQ…»={ç}ÃÀÞ.AÝ=ÿªÉ=ýæy1¿:„¸Î¾&ÂÂYÑ‹a½qfEÏTOQqêD#c\BE7c^NIù”¼—Î)µýÒÁUmÊ…Iî-KÞêJú\…ÅïŒì&jÞ´¶é[Ný4c.šaÛmk¨k¿ýE;ÿÚ¹üZm %Æ“âo«›È¶÷7£d°fûµFÖ®-_U3wmo{÷ÍÓ»Zj]a1Z嵺‰yÛ^ÛÜs”Õªè2Ý—¶êéuM?þ¼ê…Iþ¹ãj{C¡%ðèî[²;T®¿@.xã^ò÷r•4™õtϳ®åF8^¶×öy>óô)Zpè‚—å\9²=NÕsF ìAwFÍìÑí¾Aå÷|hOJ ¿ÑÌ-I’%c*30¸Z­qAâ,qO€bœ`ì3jThçÇÐfE OÆÀ$ònÐú„D®ÐGO#"iN¤ö£rNÂez«uPÞˆW+¡g“³c çJ)}¡9’3b4(m²D·{–¦˜÷ð¸Éj‰ ´LD§~:· …yÉm:Ë\ ãȘŚß4EAÍÂp¡É`üêDbªbJ-Û^[&ü”b`ÿÇa$"ä1Á€´1N¡ôŽgN¸¤œQ– ÌÈÝ$›X{†ñ±‹&9êyΪ"TM*”yÁÛ&‡ÊqMoEdhc(c=ô‡f5|=ÕÌÛÚ},/9€‰{…ËAv/$ËåU]C™ñG/ðæK OwŽ 4KL°¦"ËbÉr¢]ãD3)ÚÄjkÂV!lùdw < š…F³ˆÙ*oÈl«ã;È8ذ8F¯Wœ„öìD‘ssÆm–È‹c˜ãHÑŽ¯ÂŽÐ€êÊå¡[¦eÚ][77 wè–½n×|íµÞ*o¢0Ž[#ÜÙý²½ :¹ïX®/HÇs¤{L!ÇËL†ÆÎ‚ÜÌZ6Td²ëbò¯LîÄ\JàÍ'iŒæŒ1ætäµÔØJ%èst+R°ïU¸ãÖ© ±¸cîÀGNâÍw®a®é[å^õ­%¶½ÁÚBÿö¦Ê…þÇZOâ{ Ó®¢êqÚ{ ºý‡Eæ‡/âïdþ;™×%ó —á§p%RìUøVÇäh´€eoÿ\â覬ÁB-/¢pí-pˆòTú™Äʰ2È4F¸Ç4ÌéÔ£º@¶WŒõ!±³ð9hNd=Lƽ@W Ë$/)‘N:LDÔ­ž®Ýñë{yé타Ѹp#²¯Ÿ‚œ€lØ{X²á©*§ÙÁ©±ú-¡4ˆêdåBÊíq4 1‹µqpmDLã)tt+²n2 #Bªà9¼t["b½<€ÆÌº¦d72êb‹eC9ÙʯXjZÒ™?ú”ªñ¦¬ü™$]à q\¥¨ßžr:=½cZî°cvÛf(¡;zj›]ìÆRýߦ–räD°™T œ$†µ…G)L a¬Í¼+¸]ÂEEhߺ>p®kïD{ç>¨½¹¤<¼ÀÃhBUHbøí—YúS¼}Å󜪄ÞÍvÃI𥕳xáŽ=Fç¾ëpÄ"в2a)Ðt°ÝÎ@؆Ѐ3»¾Ú9íGðvŒ·þ­3žUƒÏc»ýêöhAÝ ïÍí\¯¯[¦ùë’à$¸Ô#XS~<4ù-‹òºJÃ3‹x^ÁZ»Ï£Q7!S©‚ÔçoÍóÓÓ}D’C¥§Œ9o‘˜ºxx³Æ7½º{¸rk½J7ÿ² vüB|U‹¤p0t/y áêj:ÖâÔ,¢ÚëݤRN«Òà`KƒÂÙŠPBÒu”àß–ÑÕµ§\ÀODÊã'×s¼´åußP·F» ÝÚí~·ÓÕ7¨ÍS!dˆ-r(— ÈÀ²§üµ'ùožèû@×ý]ùH LGÝnß´¬aÿ¾MGG)µ3è¯9\ˆpïÄE¾$¢jSkà 5åõ.Ž)‡\ºÕ,1¹ç²Òn^І2AM'iŽ|NEßãÄ CáHƯˆ³3.y¢‘K5+”§fhÉŽ bXê¸\çí)ýTãÇ…í‹\ʧ•ãËš¿ñœR£†¬ppg»ª86#º k®ü~'æo©N¾r%žgcëSo9ËM™w^õiÔ>,ŸE¢åÖîR¯ÿúEàVíU‰“²¥* 'u—áˆâ£®;‘æmà:QktË9.ñ áëá kÊv¯gÚºmn€?jM¹¿–v÷^j·† l»îÅt‡™|{^Li enºW<]†J±¾=rË ‚ÒßL#‘ÐæaDíñ- ”ëÌc6:E/+‘Ó÷½–ËÃâþ¨WÄ=æÛ{öŸ4‡[SªŽnä¶´Û´^uUÏýG°­“êIVæN‰¡9gâ,<ã‰ô˜4drA)“èà"‹8P5!¤»Á…èV¡Íò•)3géüÑÕ•þ—¡1ÈÑá'ôùÚg‰“¿ ‚¯K߃}èûhÄŸzX|ZÑr„J¨‚¸4¬©%H‘ ‰WX =g7‘5R~çŠg%àåKa&Ëpu«?ìë@]]³ß·½^·¨t°† ¯•Ü ­i¡+½ÕBךO)Êd¨Flòe€0÷Ùv`¥Úˆ›Ÿó×»da–Æg/½$>­ FÜåÂæ76µæD>d£€Ñ§¿ûáeÒ‰$0X?|¿c U ëÕ[w‘!Pš…°‰Ìý+snÓj‡±›,–øi¡#~‘ãDßœÇá+ N8¹ËRpqykr³-ìªomÝ0­²Òƒ|­Ƶ7OÛrc[{ð4SÏñžÏ¸¸:ïÜI9‹åÅYES Û©Y}`½ñ&ÛôO§Hm“kFÁRú¾`Àpõª)Ö˜!ã¹<œÑ°!#pʃsÅX˜ôppÕµº¿zcˆ°Äž^EÔüã…_ž>W±RäD>wâq¾”ì´¯ØpavÜdÜÃÌUB:È9T[ C Ð2Pê}ýÒ—§ç—§_Î|ù/?/ÃäÏ·nÌ¿TQdõ\SoOÏ>~þôÓç/—¢±Ê-U¸-™Jrô±Îçܯîx‰p™T¹ å‰ÌN‹Â0©H™ŸÙxvÍ{¡á^h•‚ÛÖšHC9©Ü RM…6úzU9±ð¦2ʳÝëvƒ¡m7¯=tvl®³cV):ß@ðXvàÐ{7ûñbów^Ü /¦cŸ,Xˆ•1à/Æ 1Þ»ÖÔQyïCfÍËűf¢q{¼UlZ¬ ìú­Ñ¶£ ÜžtjqêŠêž(&Õ8Š!Ø0ˆÌBü"DšFåÇ'’••ÂxY= ÂÃ4©¤ZÌ ¢ù ßëÃõ›»ìŸþ*xˆ…ܵgT¥Eš’ž×eÿöÃ`ÿU(2Ío§€G:ªE깟.MÊ?¥4C*âZ±;Œx3 p”åwIM =ÔÌ¡Í8+&˜%Òlõ„"Å3nË3p-2øgê³Ð‹´óÓ­‰_‹h:¸$0C{ áÅkyøšò~^º±Ú¬xèFùšÜп\^Òî77ÎOYÙR¹b’VÃó½ÉNÖQó0± c'BÁŠ@ìr@µ× È×x„±©{ ÆÙ„{á”dð¦fPÐFâŽÃÐ ,?uPp‚¡#ª%ªwä²#î…ͨ'=½kõû¶Ùß0P­y6î±ÇpQu £÷“ ü=³k"4Öwîí*Œ&DÒ¹€-b·jø’/G­4DD˜oe¬qWmê!¤|1JlE±’; ³EÃÕ¯NP;psî|ÜŸÕïêDiZMDiZ»­õ•8MûN§°R|þú¶é]»·qñ7—ç§oÎN0[îäüìÃéßêwS;"òf-ñ÷óòûyyØç¥N¬ïA®¶Lý` d¾•)¨e5ãª\»ja ÷ìÕœðßá¦×8^íÙrU—*<Ƥx=§Pž„¬ ”I†%™ñüë¬}­$d{þ!œ4<ÓLÚ«ÓDø£1Z€Ÿû HÈbcrHæaê7¼˜æn;4Û½žÈ´QYóL({,Q¦2ÌäD£Æµ™³X¸Áº/›)6…CB»ùBsÈAoŠÂg+Oy&®7°6=ƒ|S˜lˆ¹ç1­×®c¦Å¿‹"³)¢'婇Ó*ÖÅ^>𣠑–Qy>y×ôÓjYòg•VAJÅ¡&ajZ (UdEe3\ĸ¤ÆŸ¬?YÚK<û¸¥¼TËÜ O¶ç‹AXö'»É{Ê~¸0Éïì7ÕºsýÍ'’ —¤zw˜ãµ­¹=³d½ÿ(–Ù¨¹Ü¢È 0^n ‡;wAà ‚ÛDt‚—wæ,q+褋 Ûܦ&æÌ»“>eåžÒåSmí’6Ü£] €­ÿÉü“»kñÆ3;w ›FJ]~ae„]®ZAÅíÛbyì½¾=0ͬÛò˜1=›N±240JŒWRµpU »p_,Úõ®‚š–{îÕ÷\r#eÛ¥K¾tQ·zÑ‘L~É»®²`FZêM™¹t¼–Ÿ­*×T,q'Ÿï% ¼`É{ì˜ÀY\'’åP¿Ã2¨MËRëô6bi#M~$tø®ƒâÈ*”õ„4¸ºhâ$ a8ißï>fʼndßY5¥QUQ¶†ÛeÏćV ³_PøIÍÄf¯Ë?MÛ ßÙgCkðΰæàõ} ^[[Á²²ÂñUâ¿gýþõ#ûZÉf¦&³'8EØïNAîô`ÝW¼%fгt«k÷š/™tô|0+þ†ƒð´K4Ç^6ZS¸°ö )?DÓ¼À[Nðš†a×"¹Ô¨&óB;À¨V7’~ñ,WRlý¦ ^x…!~!`>Џ9ˆEÕ™TtW éH¼”+#l²©»Ò€kׯµ—:]_¾c9ÕÅóQz`ýY*Õi¡2ÎúþÓûQä¸~f>‡Kp7+Ü7Í8iÌA·g ‡½á¯2ÍÊô¾^z>¥ÞˆDZ÷x5%|a_βÈZ”wG0Iè#Hõ¾ÎµK‘Sc¥PÜf`§n¬à[@U_¥(ì`X(üˆÑ±ƒlhÝXuk ‘>ôE€ÄÔ£«èÎ×¢]1ù<ÿÖdq}…K÷‚öŸˆ\Åb8š0iYüg»Mj?™mÝhÛ¦Ù2~ò¬A¯ oóS{t;÷ïÆ¼Ð>¸\çNÔŸ®÷Ÿè0ÐÁ£è¨ãø&€¾¹Ãúýi4ß+7Ààôl·FjÛæ&Ûs]³~^ˆØxªN ›±Ö"íÄ Æþ’³=E üt§=;¥}{(»ÕÔná–”Ýpßî¤RmƒO›ݵ4.“äLné(©1 ÍÜTð[Piº÷]óH7•]|Sù¸ï5Õ|4ó¶Ý»t+Füï«hQ1xô°SW5[ì(i"¿}×_›TmPFuØ|¤p±z¼…1î¥çƒoAr_^]ÕǰÅG©ÃðJ’xô¡mÙ}»ßu`Žt­åý—– |ûj¨»“ DL)ÅïÉ=X•˜£DÈ 5”ªŸ2û˜òÁ¼xZ?Ýu[ Bª ~CVÆ0-8äÝaQ$åKßF)…wJ·ÿäUK1ˆùÊM5ÚV³5ÚÚMq¼;©îÉ« F· Šs«„¡Ä´? W”ÊÅݰQ½J¦¶ÝGjR-· j󉆇Ód…ý1û¹ÃßäZ® –­±HIÀ P¯0$œt»9®ÿ&xidÏÃ’68VJ±IðÛ-ZìÆ±G)ØuCv'ê¾UÒŽ* 6¥Øy jÁ`Š^¹‹0‚¯VÂãyª+%wShâTü"óýV䙣¹-"7qÒ°e…Äp;¦’G›:Áˆ“†Q!"\9èåÒÜ("íp"²GÔÐ …æq]ž5 C­ÒÐ[¦.2q]£ÇŠðq<\k¢ˆ¨ؽ$h+{%¡,BŒ‰¹Î˜—®›õ"/<ŒÞ4‘´k+P€;ÓÈu™gÄ1Å^Eô¿›ˆx?Á/Å(€¥ƒ8Ž¡Èn2ÞWP®áÎr ÿŸx½DI‹qÅ1;-GFÀq›—ÚzI¬J!‹Ag¥eœF ’€äU„™;ìÆPxê®ØÍ±ìG®ÿÚªóC,ëD¾Ï±ï:Áþα‡—r„ÚWZCØ=x<¡&êI•øÍä ]ðeáº;PC¤À¥O'ÙjáÌ^N"øõFã ­U{7îv´À~(å‡Ü‚+ʹnÑß/§Kß߇ɽç.GSIR"¾7éB˜FSËßr¾Ê ã \ø:eïÂfé"æ9qîeŒ’-Â×`…`‡36©ër/ޏ_¸$hlˆo&}õ÷ˆ†_Ý×F4ô,þ×5ÌæÝæGh°{kÿ~¸˜ÕvƒÛ÷а~ÅaÁÔp¼$qs…þž¸ðVý>c*›«Ym³m `7YŽ‘}~{©MÓP[LkElÈNMGûòöó44Á’¦p ï«’e€ÕänÙXÌc^z¦ÔQg˜Õ?ÆÑ}{ùñ d+wÔZ’hœÒËÓYpDeízÊ2ãY{zEõ”ÆŒ ÆvþùÍëÏŸ¿Ó.þcYa&=º ¼ ü6ai=¸è&cÇ'K¥Àfµ1Q5±rŽ®d.·»\¬¥×ËnV”½HLLûöÉÇKK—ÅX lnî$ò:ÙCÚî„´Å/ðÁì/ü6ûK®n )ü|õÿPK!D¬ñ¸¿TPKÖ5.I^Æ2 ''mimetypePKÖ5.I z×»»MThumbnails/thumbnail.pngPKÖ5.IþÚÏp´ > layout-cachePKÖ5.I  ޹)¹)5è Pictures/100000000000033100000061847CF106BA37F04B.pngPKÖ5.IÏB{7+7+5ô4Pictures/100000000000032700000061FC18127E9BD83B22.pngPKÖ5.I©­1u1u5~`Pictures/100000000000026500000224489F4E938F13828B.pngPKÖ5.IƶÿR2R25ÖPictures/100000000000034E000000B780F6EBF3088A9367.pngPKÖ5.IÏB{7+7+5§Pictures/1000000000000327000000614C3F41C5696D19E3.pngPKÖ5.I;,Ÿ> 514Pictures/100000000000037400000230E116A04976667AD2.pngPKÖ5.I  ޹)¹)5ŽÃPictures/100000000000033100000061AF3089D0577EBE15.pngPKÖ5.I æ…ÄÃaÃa5šíPictures/1000000000000374000001214ACA3A0C00DA4567.pngPKÖ5.IM¿HUU5°OPictures/10000000000001CE0000004EDF7F6044523B388C.pngPKÖ5.I  ޹)¹)5XjPictures/100000000000033100000061DFC43C16850B5AD3.pngPKÖ5.I ~”‘Á d”styles.xmlPKÖ5.Iûœ>Á§0¨meta.xmlPKÖ5.Ii‚QV+ mªsettings.xmlPKÖ5.Iø±Configurations2/popupmenu/PKÖ5.I0²Configurations2/images/Bitmaps/PKÖ5.Im²Configurations2/statusbar/PKÖ5.I¥²Configurations2/toolbar/PKÖ5.IÛ²Configurations2/progressbar/PKÖ5.I'³Configurations2/accelerator/current.xmlPKÖ5.Il³Configurations2/floater/PKÖ5.I¢³Configurations2/menubar/PKÖ5.IسConfigurations2/toolpanel/PKÖ5.IàZ¿ ´manifest.rdfPKÖ5.IàÕ¤°û¿ MµMETA-INF/manifest.xmlPKÖ5.I!D¬ñ¸¿T ‹·content.xmlPKˆ|waprx-2.9.0/doc/aprx-manual.pdf000664 000000 000000 00001676670 13040775352 016176 0ustar00rootroot000000 000000 %PDF-1.4 %äüöß 2 0 obj <> stream xœu’MkÃ0 †ïþ>êIòGb†¦I»;ŒÝ¶n‡m°^ö÷'Ën“–•€bëã•õØ`Pÿª xå£7¤[‡¦Õ§7õ´Ñß%Æßé]õ³ÂL£=XΞ_õÄÚ=Ÿ;@ °àÒ–:ð –ÿvÐÞí^æG5Îêp««9ŠgE¤ª˜|ËZ‰G ´Å¦lCìÄ5äŽH5a/Ö&.ZqŒ¥RİœQªÑW¸èa#67¨µ>m98–¶9=f³[dJÃéÞ„‰:Ìt¯g,r¶jÜ„ Ýw[ÞËð{±C–™ÄÏŽâ›Vs×eŸ-AIƒ×þ}²J“Aa$Ì?áPÈ— H§‚ü‚-‹ö)tD <²ì¸Ä–krËÄòñÄ>¯™˜×_ÊÛÖIJùÔe¨lrÖz]“>ÔqsÃÏYàº&{ûÂb½¾ó¡ÂÕ£jˆå'°z}ïÎy¾ì濞䤰ÉÒ.sZAør£Â= endstream endobj 3 0 obj 377 endobj 5 0 obj <> stream xœ…TÉjÄ0 ½ç+|.$•ä-c˜õÐ[!ÐÃÐ[è¡Ð¹ô÷+Ùž$3MZBŽ%=éùÙСún¾(`ÏÛ‘ê v½:¿6Owê³ìñw~o¶CCh:¯¼7jxQ÷GTHjx;E@ Ôb l¢./½¸}vmjm„ú›üc›í.ÛMröéyxhCóxƒª¸»ß¨„¹fÆCÇÚÅ1Ùˆz†dkðˆõ]1ã$ì:1+¬cÞ°Óc WÙI-·H ¥S!¨ÕÌPe§.ƒ,6°…Ý?l ×Œ°„#|è‘v…zà’˜Û@Ͷ®@ñ.C˜ÊÄ?4b3'2’%LjÃÇRŽ7,¼_9§:K(ŠA¡¨˜B¨M–DzEOZ¤•ú2¨øÌ ý1)9õed– ɰhXJUÐz?¤¶K_ÔN›j]Õ<ÒÕFVÏ\‹9²tìëo©]E¼­–cŽãø´›òi_¨°S¬ØL$y³‹6»+tH¼.a¡,ö ÆÚ<®›úf«aœèzƒ ­©È‡Îð£Â/Æ•¸Ä² ¨wùºI8Mw—¢žõ¸~—At¡7뢦)ïQýt` endstream endobj 6 0 obj 444 endobj 8 0 obj <> stream xœíK‹+»€÷ó+¼Œ#•Ý Æàç"» Y„ìrÈ"»ÉßÕjµº$«çqdϘ:3[­ÇW¥ªRIf[¾ùßË7lÃÌOjP[Øô’oûÍ¿¿üõO›ÿø¿™üëåøö\n»M×ÉÍÛ?6¾ò ‡ÍÛ?ÿ¶cœÁþ•ï˜`’©=ì˜v¿vöÇÞý¨ö¯jdž}¿c÷ÂÑ•'WözÇÎû¿¿ýååòöò[òTÁÀ´nùTà®N÷<[cWlÅ…ó½Úq=Iá›sQÝVQ‘¡'æGm‹L J›që¸6Õ¸*`Ã5ŽÎ¾;Ì4Ç4UºöÚ¶ÞW7DnÈÀý½ÛK7L`ïÞýr*6@›Iìé>à@™a€ËžïàdGÝMÂHš³Oº˜_43M‚kû ¿ˆlϹ²D=Ùð,žE¾°äÍËß ¶’Æ,è‘p/=¤Õ‰lhÞ±°"sB%3ŠÎø×DݘÆtFúw)«ø¼Ž<;óšê’©Áª#¢¹÷0cÏâȯ-Ë"±Ädˆ>÷ÙΨlÝo3a[>_7L1àêp4b€Ì+\Î=ÕA“4­ú‰-ÖëQ¢Üç½pr+œLrðÕ ûѨ#U™ÎB'·‚îï=òƒŠzª©Éš¸†×Jn6jd’ê¦\+pv•Y¼i%¸òí{§…嫾¢¡¡îž•7š…1Õɸ ¬øˆr¦¦`B¯¨ž%Ûê‚z>Î1^ê@ˆŸ'Ù•ŽJÿ$×iÛZ&=çopÀz!< s£Ç;WF"À³öH$Õ¥{˜áo_| ÂûÜÄŽ>÷è;J°ƒ^Úõì‚Ía‡ó>8«žéX+R€Û¦Dú3ño«ƒGù@ çJX¯ÑÁyMwìˆøöÅW#OMlŠ|6hb‘碼Êh÷ѧˆÏcàÓëäĘ́Ä[çM ߆(jhÁÌ,rÎêLrÓ2»<.ÇàÐyDd˰.Ç9AÕ°—GU CÑS¼&°ƒ)t1vâ¼—"Ëð…+´¿ñ¼ÞÍcѸdcïavŸÅ—A|†}c\ÐïUÉ™=‰þ: "˜':U±_&)ÊDȾÝ?·X‹75ƒ)Þå ¸êøÂtŸû–ŸŒsŒêuÁüàÀ‘q_ ”ƒoª ­'ò[7¥[•e顸IMø¬µ‹ƒê–Û­ÇLÝër°;¯SHÏ­F›ƒæ,Är/®(}SÌ%H˜Š%æ–'Ê£%¨Æ¶ë[÷À{ õ«¨—‹4‰‰ùytýó»ñ^-s¸›?‰e¤qíÚörÑÈÖxüÈ¢-éKVq.ØÂwˆµûÌHrñ–i›ß§B}®åT+AîL›ŒŒÅ;HYC z›q@õ¸5A߯¨ç—šŽÔº/m!)dË<ªtµm“î‹Ý¾Ä\1É…yoõ\HFl€f¶°æ ÑÖÖ3õs‹¶z›B!å¾” ä|ZǽªçþB™>ž3‹êÃËV°‰ï‘p¸D«[sð#‹VØSó?ao,ëÒ&j¯ B²ïK)‚ßí#ßÔW žd u‘°ñ³Ä,v!×Y—jÑÊt—j1Æ…úQ|BÒd®¦^šu’¬épz %±(qyøj$Î,4²SáZ½ÌÄÛdóT—ýèm}<à€K +Í<¨`í kq-ßzºFñËb¢Sȳ‰ ~YѼè _sËʸ'uEûGONjš`‰ð‹T¦ôa×&4¥Nq*Odu9ߥiñ˜>/üg þ°°K ÑïÖôÇka!J^mkÂ-|¨RAO\BìëÎr\Ìç2f/R. ÆÏt¦5&Ïâ2T¦žšå•Ôó¡¸Ç©èùQ_Ú¥5ƒŸL`Z$ŒÑMKFæGkpN(ÑÚÖ3÷,Ö½–qjÊS3$úóŒ³:½öA¯ p¯Ñü²ˆÃg¾;Ó13BÆ£l@·tt<Ù¸­ÚÉÌ$Cá™\¡ñUÒ¿x£mˆVŒ[¯bÖ—Ìæø-ǰ5_Õ•ñZö++Ÿ¿èà.Gª /õ¸xqÅN“É;ÅCˆc×FÃXÉ/RÛïUÚ†(¹üÈE¾È榄eƒ¸ž°®¯õ¢®F†¢‰¯t » c þɵ:ÞõÂîzÑ:á§½Ow †Ñ‹`“ë'ø²“,‡Þø¹Ô }L-‘5¦«^6bï±Ñ²ÒŸý}`MÚëx&'JxrüO<ô´UDï[/VwW¬…’Ó•P*Vén¸(ÇCÉa¯T™ea2½n=÷Í̱Oû#›.¯Ù¤èê¢>©–„ô®?65Í寽¼áÇAê$øÅÑó”í!€Í$]6¯õ$?‹wK@™ååL¯$Ī}$8Ä‘vkˆYk)JyÄ› FÍyŸµpïbhGAˆWÎŽ»ú¸=gñÞéx¤ö5ì¯â/“q6wT']ÄVƒIà4yXn»b°{Ô¸=’†ü¸¥ e/›æÙcê­žªÃ#’~ Èé[ïÔ¥ö¾ª‘­ƳxOQÆ™šæ4,^V¥0¨Jç A&Îep{XÿšÆGümuQZ¹ñWö¯]¤óPßRwq¤=rªÙÌ—Ò”îü„Þ&>S]l=­]|ªN&§§âÎ Üób²b_¡€}ú”ˆ_Ä`]€¹™55-ú…-{`–jvë‰ýAE# „œõÈÕ:ÞJ]bªY­Î™ÖNTö§/ð‹–·fàÛ¿ïå'pç÷,ÜJ–;V§Ê ÜÎOZy}†äuÇn no±¦úÑš…‡(ZyŸ…?5ï©v/ŽA²’‰"`Lrds‡LÃY+%<…“³J¦“Ú7‹cÆJ˜=da]pª=äö¾;"XZx²·æÙ˜"ù˜{àüY¬—-™ùârÃÙ5†wÁÙd+É|,ËQëzÙš*‰eë4[ºL^IIºlœjÑ'K—½>Ÿ|Ì=uïÅ=¬c5Gc´Jâ8”|óx5«ú‚”8¢Öõ7UKÜÕ7ä>CŽW¬gdZ„}q"–HÝ»\i‘ÔÖH?lñë¥*Ê$Uå=> U2µÈó,ßwì—ˆëâæo^õ]#½½¡|Ù²Öóû,ÚJJQ\¢<VŒ…¹ƒW¼WƒHìéÁ«›Rá/åQ=¶N  ݽ<ž‘:L¢æõù¯¢šš¹•T ¶šiõíކGL‹Ù·MùpN´©=Œö¯ùw·¦%·ä¸ѵֈ=Dñu´.ç#u³‘7Ï*×ïp¯ëi5è%¨²]<üúšé{njXe¿æŠjzë‰þAÅçrLÍåJ’¬wÓï ©²%ºñݱ-ájsúVÊ(ȇ¨…=#ÄÏöÓq;&¼»LÍü^‘±–²w­ xèîÁ  fnÚ}¿Þœ§²UZb’pS'«®oÜÆ¨[‡Nv†?“7¾ݻͲ—B nÇŒèvkþ¾ÞE\©A¯¦:÷ Ãv~@É~âíßt†¹¶7?XúßsÄ0»+DT×d?è·Íÿ5C6 endstream endobj 9 0 obj 3018 endobj 11 0 obj <> stream xœí\I‹+7¾Ï¯ð9`GKKêÓжۇÜ ärË9ò.ùûQIjI-•4vf‘=cÔëéE[}UªM&;ºù÷éŸ Ù}%±c›¾£»~óý÷§ŸØümŸéßÿ|:¢n=\Â=âfÝ^V‰=â·´Ø0 +ÐZý}e{-š1V$h&Eåh&}Õ7=ÇhÖóHã HÞ•š„bôøä“™„3âÞ%^™J9hƒð+!»€Í³5ŠnŽÜ¾òƸ˜*ïb"TA±DWóGyšÒÿ¸_dÇTB:©ÖPú|äC޲2x9 ïIͯäl p>­ MUŠ9®sŸ‘Il¤"ÎÎpm«nUô >æ¾ØÍ"<ÝŠ}äÜ®4»‰à/ösEz+ˆ,@kèÜ7y+hcŒ¹ ÚRÖ<Å´Ë!­¨µk€#eq…’Ž ÁQÒøŽönÙc¬×–6ÆÖü»3r FÈÿ8ÆûàõL¨,÷-W%¨IS°rŒ" ‡Ô6‹C ‹SÚïWÕŸ[S…ê±ØòÐ%@ËQAªÅxk =È[ bþRÛ¼–+|È]QQL“Òc(áÖIC%ÌL%®aáYK-Ôâb}G_LଓUùK±bQjS›TkÆ~r êãìÅx7åZ‚‰ÜÍ¿ÿÒ¼Ev0;¤žCTº‹’<€vNG—T=×E~ì‹æm ™ý‚O\™Þe=y;(’_¿_®Ë"p6›lkÝ',_]ŒWB×lû—@×çøKе†º.?Fê5ŠfRˆ™Û7bëÇêÇðšŠÕ½Ù˜º±k‘Ë”dbsm´¯…ækñ1,µÄ‹IIƒïnP¹³‰«æCŠoS¹µ2¢£ÂX,?ÉöŒCÖ±w¶9™™$sì” 2wÅu`Úè$Zƒê¾I#@£Œ¼ÐÚ¶îz^r,W:šÅéÄmô*yñ gómT_θÑ&ÂKÂæ.¡n:YlçÂÿµ’­ÔÓÆ&ßH·IÞÀ R])°"Uç0©—bƒ;Ñ#máÇâ%*©­ˆ‹Ä­&™Q¬YÿßQ7Ò¨î\ÅM>[Ûþ³àmí“£‹=ÎxÊß& pë Ø—¾”œ'™QÛ¯Ä2£a$i·IÑû\fc§”¶á1.¼VûÑîeô`ݦYîªú²æh­‹Œ ZwÁº+·úaÝ–N×¼563â­M½U·´V‰Î”™ìÊJ+º2?/-FpÜŠ$#~ù霗2âœ@¬[“Öúç†É[)BlÕ#Ûñ\-?2Aâ®cùYÇU Qzá^¯DýžîÏ,9î¸f.Šž•F±Œº‡D=6ÒÖ||&R '‰PT«˜:ÖççÏÅÐ1ä˜HD\Ê™k4Ú×J†)´ËDxQ‰-N¡rÖš)tø­ÙùuÉÇxt˯‚<í2‹:‚üÚ£»ò&ÉÈ9Ü ’㸓‹nȲ©ØItœ­9|ßäÂo¯A>ˆ‹‘o- Bsg°O- •Ò¶–ø‚ñ•ïTOãQf,¤ÇÖ8x$ï-<á©Qñ^åžp_°”²`Þ ¥}µ_€ˆÜìô½,¾ÓðÅÓÉ ùØð[³ü‹“ØRPT\%ŠçÙ̾hL¹Üz( Y‹ÄvUg,Ýí²Û,:–Ö<~›­º``XJ£þ“B\ y"4 ¸ÌkTæÑžHÎ\:LÙœY`ÈZ3æK’[ð,ÞcóÀðu¥Œt"Ï®¢2’ÃTd„øzD* ¢M†gF{ÈÖ`Ãj ¢i&‰u)À°’æ%Š¡ã•sÎr¯|uÞ(qN!íi½r¡zÁ  Š{°ÎZ³åAn•|ÌF‚A2ÝHÊåâj0G9“½ü–ç¿ðãnÒüúwµ0ˆzÁ#åßÐ& Êsó†²Ûüd°Ý¼ endstream endobj 12 0 obj 2298 endobj 14 0 obj <> stream xœ½YI‹ì6¾÷¯ð9Ðí¶Ázqr{É@!§l2¼Ëûû)•Jª’¼ôä0àqÛR©Ö¯>Éꢻ/§¿;Õ)¸ó£¿˜npú2tŸ=ýðU÷WzŸ?ÝÞNF»Kßõ½ëÞ~é¾~êN›îí·'¥•™ÏzRV9åg3©€?ûx;à­ŸÏ~RãF‰$…T³V‡øÔ^÷Œ5£_Ù:¹a~ûc;Óú Ï$]nìÔW_9ì~’Á7á‘þ8!ÖÜÿƒôJäZ|ó2¿°÷T‚gÃ+çwh®WÖ\¼Òc ›Fs±]p ð¡) ;»l,º»xku¾˜ŒIûXmîZÒCjK>û!eŽ@ò #— E!Itÿ?ñ=Pq)<¦i4Nw ŸßOêº/•Ùß}sRÝYwïõÅÅÛ?»ïwbm4 këæ3ÅJzÈÉ¿ |q²ßJ<êBºÇ:‡Íì‡ ‘cиeIîŠp‹p+kõ@áEe@0‚˜ N3¨8Ù3Ý:™µ¥v u7í¥ 4Ùò,3<”éë2‹ÈË,¨q_Ì ÷ÑT,•»€R•lËm&ä*¼`§wX+`sŸµP-…g>Ge·”ŽýåÎꥑ¹ÉÅ€§‚JÖ,‘|?¶þ°3bµU³ tBï”ÉÖso°º³ùŒ_1;£yê+ØÑ Ò2µKOSøu·’Š­<•œmKÏÏmçpkV€Ñ&šBùÚ½ðù<䱉gÊæ<‰2˜WJ·™V0œkµXŠ÷#zÇ'4¶$¬ªVSÙ?r%/…” íåäÂ^|a“"ã!ÄûG™ìãÎS¨STôâ‘oÜQqŠ\}¾4ê]¹%µ®\uàÓÏM™Q-qCûF~˜#zXQ!áʈPJ¥¥•iS$B|— ZS…l4%DÑfÇz‚Z`£H·”û·umÕK^sR½XÏCVž‡¢Sĺ²ØW?Š1˜® z¯ã£r†µAäl.f¡-lZ2¦´ ÌZä@‡IæáÔ]. Áò8 ”[á‘Ààz«ñ’¥Å·ò‚NmЫ“Á±Ty‚¸ ‚wŸ‰¯E®–<“Xc$Ô9ì|J÷µ€*³H–§(¡3?Ëó¨^AN´c\¶ƒÒ~ˆËCÊÉA½ö6Œ²iðÈ4˜üHbµákDœAÒ”TžQ,iáXÓòõc_€¿s \fÍ¿Óï çil°Rþª¢â‹Hj»>Tcä 5Šþó9„RØÜ³ì€E}_Dmy¿åu>Xh³»¯q6ŽˆÌê$­ÒŸ2¦Gz^X]˜¢ÐîYA ®" g^Zí%ÓŽŠØ`|1…(ppùYµ1ˆÔªÏ¤Š˜µßW(jÊ"^+ƒáQn˜q\ðÆ“`Jô±žGY(=Û~¯h;dþZÁŒÍV«(‰ðˆ«mɉ†µö+H³Å.F³jÃâx"¥A¤õ^!05¾®õY¹HMÍñ,Ó»B‚Ù@<ÙZ%k¨5šmoÑaXŸ¯T`Ìô\õ1ò˜>ôé¦Úr¹âÓO™b‚ÒJÒ¡2 ˆÃ¦†$W|Œ‘EÒ÷3q¢•Žä¯¥qY™«ÜNŸ¤ºïL¬›}¿Ø€í}­Žóí8Jw;ú‚œáœá/À]¯5ª+d ÛËã,ÏŇísqàcïXïñÇÖÙ¸é#°ø±ùÌ›Úö'E3ü´¾ú.VìÏŸ_öü!¾‚[‚LÌØ›–yŸºSSÍ endstream endobj 15 0 obj 1946 endobj 17 0 obj <> stream xœ…VK‹Û0¾çWè\ˆW3²d Œ!‰mho JO}Aa[v/ýûÍŒdÙ›Íޤ™ï›·læßáÙXcéËGß é[hzóòãðùƒù#gô{ùu8_mÓ™®kÍõ»yXÀšëÏ/ƒ‹ãëlkýˆƒ ü·KŸ=úñèÇ~°'Þ8ózáõ4†ÁNã×ë§Ã|=<îPEb÷u2^ZÐÚEYÌ£ÀUH^/¿â»Æßi‹%ôÒò†Èo†&ìT¸) ‹¥‰ 6`‰¡Wʳ‹ko^í“ÓxÄdWà”>Iìãz xóœü9ËèöÚb7@¼I©í6¡Ü¨Ö°¹&ÝÞÑH\Õû¢Ð¦Ì;E/Égõ‰³ÞHäìfY¾WYÃ*+sˆfòæÎƒ”Òe#9“ëíM·s6©…TÝÍ @Z·y¡lP×l>©eŒËš¼É(TŽ…ÀLyyÕmœ º‚* Ö´Ëh8Ë\ MP>;Æùr@…íRNQh ßéàÜ)w’‘mH{˜÷ä:gˆcV] ƒuÛËr¸"ƒ•ÛZ=ž¯n.5*ñ«j«Ïk7§ôµFM€ AÁ¤Yv,þ»°ÜkŸÌ|: €c8!¥WçÂêmåvzM]0NZË–¾ˆ‰uÌ ¶²B¿¿›1µÁmƈŸ}ÍImvé`ª*3ÞŠI@{ZÛÄwÚf*I7f –Š—Â|.$½ ‡ªÊ©nҖ˺CÈ“s—ruåU•¿^,Ó,äN˃F:Ƭ¼Ä-w‹ÒãNZÜ>kdíEO¦ˆA ¢ 6ª1û%wèsS‡€ŒH¢‚Ÿ6!ÊˆŽ˜RqöÃ;Ýrn¬=,h;*%ckOÿscY[ÇÀ~um[²†Ü†Un-;Ÿ³ÚXLÕi4*ƒ JZÎ\Xø¼ µp§’³Ì‹zÆt…'ÜwŠÅ}ÞvïÙIctôÒê4hsæ¿yÃ(‡’á€:í”L\só´t ñÚ@Ô‚WC]!S‰].™j@f³–´²xó…]lZzCÒ±öÇ€Ëxý}S üèÜ |©Ãé ï÷aK&Ó\5˜ͳ¡¨uÆK©Üöé©ë¬'ëƒ7íFVŸNpæÛÓááãD3ý5IÛ²gŸ endstream endobj 18 0 obj 874 endobj 19 0 obj <> stream xœí½ pW¾ï?ónÍ{¯êÕLæÕ«Wu¯m¼lccv°Y fß³@ Ä,&`L€°„°LL Ä“ IHØÂ–„Í`À›cc³ïf˾‘Üî{çÿ?|fú¯´¤vKjI–ôùÔ·\ÒÑéîcõQ÷G­îÓÿõ_ЦM›9sæœ9sÆß €€çøM‰‰‰H&x‚æ–H&¸‡½["™àn‰d€K˜qK[É\¿~½¿› îóOÿôOæõÏK4iÒdöìÙ§OŸö÷›!jç½™·D)‚ ß»%J ¬øÌ-QJ€ ÇÛn‰R„^uË .xoæÐÐðª[@H[€Uà–`¸%Xn V[€Uà–`¸%Xn V[€Uà–`¸%Xn V[€Uà–`¸%Xn V[€Uà–`¸%Xn V[€Uà–`¸%Xn V[€Uà–`¸%Xn V[€Uà–`¸%XECsËùà'ü½æ h€nyòó%¾ÌůÁ-ÀpK‚[€Uà–·«À- n V[ܬ·$¸%XnIpK° Ü’à–`¸%Á-À*pK‚[€Uà–·«À- n V[ܬ·$¸%XnIpK° Ü’à–`¸%Á-À*pK‚[€Uà–·«V·ôøð°°°Þ6¨fG£FZ¶m?pȰ7¶ì6S_ˆŒŒlÝ.C÷ÎöýËÚ\r4'oJF—®É©Í"£¢Rš¥evé–3aòÆ}å—âÉpKðAé–‡ÎÕŠ%Š€…‡‡ï;qż[Ú24'×¥úˆÜ<û¥œ¸ûóSãŸ1˜êé©Ï»¥«sÀ-À_¥[ÎþÓJ1®©sËßé/üÉØ-mKŽÕ~_tìÂÌÅËbbã䥂7××—TÝøv×ѳÓ,ŽŽ±ŸD2kÉr)Oh’8caÁ‡eÇK/ܪ¾õ£üݸ¯q÷g“n©ETM^êÞw€Éú’E…«åÕžýëʳzô–òww–8œêÅ?ß_P~ƒ –âêpKð^uËx@æÿ‡?üaذa&%Ós·Ü¸¯\\kÜ”™òXþÊãµ»ºê–¥nÉK‰IÉæÝòÐù›ö“Hââã¥\^u8Õ‰;?é^²_Š«sÀ-À_øÀ-5ÌH¦çn©NMÜòq¥<Þzè˜<~bÌxWÝòà¹òRJ³4ónYrú3y5©iŠ®¼]fg)Ÿ¹¨Àdûí—âêpKð¾tK3’é¡[V^ÿ&.>¡mFG­¤}Ç.1±q×¾rÉ-ÕÍ}?jÞ-Ÿ_úмÚkÀCºò%yGMøð°‘on-ªªýÎU·tu¸%ø ¿¸¥dzè–ËV¯{~É ­dNÁ«R²ôõ5f,®úÖ{k.Íyi¥úZD®^·6.ÎÙY òÒ‹~Ûx)®Î·n™Ñ¥«XÖ»;K êl(>,u¤¦—Ü²êÆ·-Z·• Cž­{©üÊç W¾Ñ{àíÚuˆOhߦCfßÁÎ\TpØnhJ‡Kqi¸%ø‹àpK‚[@C·$¸%XnIpK° Ü’à–`¸%Á-À*pK‚[€Uà–·«À- n V[ܬ·$¸%XnIpK° Ü’à–`¸%Á-À*pK‚[€Uà–·«À- n V[ܬ·$¸%XnIpK° Ü’à–` Ð-¯ÿoÄ—¹sﯸ%XBCsË Ìàï5Á@CsK\pK° ܬ·«À-À*pK° ܬ·«À-À*pK° ܬ·«À-À*pK° ܬ·«À-À*pK° ܬ·«À-À*pK° ܬ·«À-À*pK° ܬ¢¡¹å|ðþ^ó^çÿùëßüýƒËø»×€Ë4@·<ùù¿_æâ׿„ÂNü»_þƒÞ@¹ñý¿‡B·>pK‚[’Ü @Á- nI`pK€·$¸%i€Á-Ü’à–¤·PpK‚[’Ü @Á- nI`pK€·$¸%i€Á-Ü’à–¤· 2¼;È>8‡•²ø`Õ;·$¸%i€ñ‹[úwGôø½S…Z|¶mgå6´Ü½÷W߬zgà–·$ 0þrK¿ÿãAÜÒ/Á-C6¸¥º¨ïƒ[’Ü2˜‚[ú%¸eÈ·ÔaÜEÃ~MTtt›™ƒž7cî®Ê³Îê»±^Üž0ƒ[šìt<_· ¦à–~ n²Á-u¸ä–¶4jÔhtþÔCçjíë»±^Î.þ…¯{»%¸¥Éþ@ÇóepË` né—à–!ÜR‡·ÔžVÝøvÇ‘Óon-zbÌøðˆy)½UëŠk_û}µZ˜ácópKKðÜ-éx¾ nLÁ-ýÜ2dƒ[êpÉ-m³½üT›™òêSãŸñûjµ0í2;ã––`¡[Òñ|Ü2˜‚[ú%¸eÈ·Ôá¶[J>(­‰ŒŒ” kw4¨¿lõºþ<žœÚ,1)yÐã÷—Ÿ”ÂÔæéR³òú7'—I¤BÍí{¹“g$§¤JM‡ïnYo,éxfú^Hu<ãà–ÁÜÒ/Á-C6¸¥OÜR’7}ŽT˜2w‘³úy3æêö›)ÍÒž»ŸÐXŸ¸û³Ã «oý(O7Y½mO£Fts°=`õêÚ­Ñ1±º ÑÑ1+ßÛbÛŒ²KwÒ[¶³Cö»+Ï©:»x3K9Vû½ÊRž{ñe­ŽÃ7 ·¬7žw<“}/¤:žqpË` né—à–!ÜR‡‡nùÚ†¤ÂCCŸtXÿÃÃÇåixxøÄ™óvUž­¸öÕÚ݇:víÞ½ïµã6X<ŒŠ’=æÐœÜ>9Qyý›¢ªóÏÎ_"s“—6>Y·ãn’”,%ù³æ»PUû]qÍ噋—E QQ¶—{äL˜,SuÎî¹q_yŵ¯%2i‰2Ìø_6¹”w~’ “š¦¤6OŸ[PxèüMg'â–õÆÃŽg¾ï…TÇ3nLÁ-ýÜ2dƒ[êðÐ-e·+Z¶iç°þèü©òtäÓù¶“«ý^êëj:ÜÅ ½>¬[bîäR>"7OOšµ@Ož½PWgÆÂ)Ÿ¾ð%­¤gÿÁqñ »ŽþjøšËîëGJ³4ãÙüRÔ´ÒBãNˆ[Ö;žù¾RÏ8¸e0·ôKpË n©ÃC·<úÙ7au?ð9¬ß1+[žnÜW®›jù;ï›tËÕÛöè¦Ý\rTÊ;tÎ’Ç}"w9­«S\sYʳzö1î 5·ï9[®m‰ù¥¨ißßÄx¹¸e½ñ°ã™ï{!ÕñŒƒ[SpK¿· Ùà–:Vw¨Gœd߉+×¾®¾ùƒº¢Þ]¼ù¥Ôûv©à–ž¿“ÆÏ|ß ©ŽgÜ2˜‚[ú%¸eÈ·Ôá‰[®Ùq@?Ñnñ¬«ß¡S–<ÝVZ­›ð•5›Mºåú=eºi7î+—òŽYÙò¸÷ ‡åñ¦õ®wuìhËÇ•¶…öŠë°%æ—‚[Úâ=·¬·ã™ï{!ÕñŒƒ[S¬[†9"22R>)ƒþÎöý~o¡' ,·´d»aaÖî>˜Ù¥[tLlRÓ¿7ÆÕà–:ÜvKÙÕ¦=ØR^:w±³ú#OÇ?;ËvÂû×ê¶moÒ-þ”n¹còŸ•ò1“¦Éãi –ÊãGGäèê,yímYÄä9‹´’¸øx©i;`µjžX¦üÓ/tËÕuwi)¸¥-^rK3Ï|ß ©ŽgœPvK‡Â£Ãït)å–¶¨¡4¡ã–/¬xÝÚEõ­“SRôãv·´ÃU·”½ä›[‹FMœ¢®GhÓ!³ªö;gõ×l¯;¾ùü’ûO~Zqíëµ»uêÖ£{ߺšwñQÑÑb#ŸÎßqä´fpê¼ÕNY:rõËÄä¦auçÝm=XUqí+™‹ Ô¹v¹SfjsSW ?ž3v{ù©Ã—ïÊ÷£>ƒP?;Î[öçªߪš1±qR2· PZ«†4¿“ ܲÞxØñÌ÷½êxÆÁ-ñ{#]JwK]¡| v=+_¦Ô9Æo®ó{;ÝKè¸åð±yÖ~(Š_VíYWTj»m”à–:̸¥CdW;fÒ4Ý(ͺ¾zâîσ{B7¡ì.e3¢«ép/b°jÓNûÛ£äMŸ£U[µyWãÄ$ûæuíÕ×ö6òŒFZz‹§® 5N·ïèÑo ýÅäRìÿ ‡Á-ëÓng®ã™ï{ö†oÇ3N(»¥Ãîç÷fx’ÀrK-‹ WË«=ûö{;ÝKè¸e»ÌÎÖ~Fì­ °‚[êpÕ-“’{ô4nÊÌõ{õ'¤9ì«'îü4}áKY=ûÄÅ'È^õ‰1ã‹k.‹H5ÙwL¨•È·˜œ “[µë bÐïáÇ–¾¾F·Ð’3×GMœÒ9»§,"¥YZ÷¾¾Usûž®Ú²Õë;tΊ‰“f<9nâþSW¥°èØ…ŽYÙ‘QQÚ(ÜÒóûô—jñ ež.-ÅäG·¬7žw<“}/¤:žqpKkßOÿ&@ÝR]1'ö“ucØÊ§Ož.zõM]µu?ÈÊ«RÇïÿ‘mÚ-\ýRž¶Ëìtòþ©‡z|X¾ØÊºèÖ«ß[ìժܣvOõEùÖÜ6£cl\\F—®#ÇOÚ\rT·Ðò+ŸË$RG6b¹“g$§¤Jå.Ý{éæù÷ÊŸ~ñìü%²õKjš/mËÉ›¢;ÅHË»;K=ö„šaf—n3Øÿ4ÓB÷‚[êðËögë¡ca67U1Óíƒ)¸¥Soß âŽgÜR‹³>@¶ nYrú³°º˜ª§[>®ŒŒŒ Ø[sI«STu^¾‚IùÖƒU~ÿwt h·¬¾ùƒˆÛ}/ˆ;žqpK-} Pl'@Ýòù¥¯È«½<¤•(“ÉîÓÿÄŸNÖýÑ­W?)‘š~ÿ_ìÐnyâîÏauE/ÇLš¶³âLÕo?(­éÔ­‡”÷ü¨Á´âM’’ÅîògÍ/:vAŒ®¸æòÌÅËäC¥N ÿûRêF`“¯©ÍÓç:S;ÁI7Oµ­îœÝsã¾r©#ÙP|XtQ fÛ˜]•ge)¤·ÈS÷ò[”—j×<šo¡{Á-uxuû£nZײmûU›vÊ—ŽºãÈé±ÏLWß/ÞÜZd¾ÛSpKÄí¾ÄÏ8¸¥ã>¶Xny¬ö{ùx>óü ê:µ7¶ìÖ^’··G¿Aau¾ÉÓ9¯*ùTo~CK@»¥V2|ì¯.Õ_¿·,¬îDqƒi'ÍZp_äf/Ô-bÆÂ)Ÿ¾ð%ûis'Ï0nOÏþƒãâv=k[çòãaÿgXKþsó¤pÂôÙ¶…Ò‹ä_~Ýh¡Á-uxuû#ß&Ô­÷ìyjü3®vû  n郸Ý÷‚¸ã·ÔbÜÂv¸[0ý…?é&ÙêjãÄ¤è˜Ø×ßßÓ$)¹äôg~ÿG&8Ürë¡c¶…ê ɈˆFÓªïòòA·ˆâšûWgõìc?íûûÔÛûÔܾg_-£K×0G£ÛÆ¥ºÜR‡··?‡ÎÕ>;‰¬úÄä¦ò%¢M‡ÌA_³ã€Ý>h‚[ú&îõ½ îxÆÁ-µÔÛ¾í¢[5nã¾r‡S®Û¦U{mÃG~ÿ/œ%8ÜR7 ‡AMíiz+'Fj4oÑÊ~Ú²Kwê]Ê'—ïÎ_þ—ý¦·l¥Æ ÓUScÚÏÐ6.µÐà–:æö'¸ƒ[’ÜR‹™ï Üv¸[Ú–œ¸û³u6'oг©ªj¿Sþ µ!a`‚Ã-ݨ©&u†8¡ý´²Þ—Rzá–º¯™Cl'T§RTßúÑàŸu©…n·ÔÑ0·?ÁÜ’4Àà–Z̸e·rKÉîÊsj×ÿö‡Å§š0}¶¼ªÆz?íy¿ÿβn©nQ~ås·û€}ùȧóÃêŽ(®X³i߉+×¾®¾ùƒºH7yjót)9tþ¦ÁB]j¡Á-u4ÌíOp·$ 0¸¥3nÙÀm'°ÜR¢F¤i–þ ýÞCñáðˆˆ”´æÅ5—“S›Éc‡ƒÜ6„„¬[öô°<Ýt Â“> +W-·|\i[gW¥ƒ!ÖÕFëŠJ êR Ýn©£an‚;¸%i€Á-µÔë– ßvÎ-knßëÐ9+ìþEÊlË+¯Ó²m{)_µiçɺ! ÃêÆ§µ½/UÃI¨¹¥¶¦-X*O‘£›pÉkoËêÓri)qññòT7Rúc#Ǩ±>Ê?ýB+|æùÂìîD¯Î…ÎêÑÛºÜRGÃÜþwpKÒƒ[j1vË€°€sË“ucÒFD4ÒÞX•Ü)3¥DŒB+8d˜”H¹ßÿû„Ž[ÆÄÆIÉ܂Šk_:W{äê—‰ÉM¥dhN®¬ÇŠk_mÜW>sQ:R·²L.¥cV¶<}•ié-¤dâÌyªŽK-t#¸¥Ž†¹ý îà–'M Eb|àÈ|,œ•%‘-df—nÑ1±ÚÍGHpK-Æ}& l'ÝR’7c®¼šœÚL]ó»v÷¡ððpQ‚Ò ·´:ûO]‹—ryÕïÿŽ.¡ã–=ú Ôm«WmÞ¥NÑѵW_Ý×.“KYþÎûºY‰.8umبqöûˆ?­zÏþ^B:eÙ.Ú| Ýn©£an‚;¸åÉqËênäg᪯¾õ£ºÄÂЪà–Z ÖN ØN€ºeÕoÕQ©!OŽ>úÙ7jÜq ]5õÁ”WÈ6µ¸·mÿñÇýòÁ±_&­O²ëèÙì>ýcbãâwÎî© KÎ\5qŠ<•Ò”fiÝûX\øVÍí{&û€}ù²Õë;tÎ’¥ˆU>9n¢|Ф°èØ…ŽYÙ‘QQº[÷®ßS6lôÓ­ÛeȇQ¾¿O[°Ôþ";“-t#Öº¥]ÂZ·ü·:<™CÃÜþwæÙ°aÿüË¿äåå•••™”Ì pËv™­m•|Ùo€G,UrõKyÚ.³Óɺß7{|¸qbRbRr·^ýÞú`¯VMÝ3Ú–WÞÝl¾«8ìj  ûýË?ýâÙùK:g÷Ljš/mËÉ›¢»:ÒÙs·tc{È.ÒKÁ-ýÝR£^Édå6´xÉ-5êݨzÏ-Ý“LË»èšíìO©Z¶mo{†Òâ·ÔõY¶DD4šý§•ºšqËcµßßÿAªek5HšíK‹ W«! l騵»íùÕµ[£cbuu¢£cV¾·ÅÐB·Ôð¶dÚº¥IÉ´ê¸å–+¥G‰&í­¹¤U‰“ò­«\šsõÍÂê~»tØQ¥PUsæ–&»ŠÃéÐ-Ë.Ý‘javÈÿ»»òœîñjg¶Ð-ÍoÙEz)¸¥_b•[Ö+™¬Ü†o»e½U¸¥K’iyíœÝSöeù³æ¿,ûñòO¿XµyWó­¤p̤iªNÉ™ëê. 9ySv=[uã[цüçæ…‹\6j$ÚÎЙuØ–«±ú“š¦¤6OŸ[PxèüMuGÔ]•gÅ`e®¢ ²ˆCçj_~kƒÚ•kãYÉνIR²ì²¥ÍEÇ.Ènº¸æòÌÅËD,º(…‡ ³mŒ·;³7ܲÞí!»H/·ôK,wK d²rZ|æ–Î6ª¿ñ¡[jH¦å]4>¡±ììlQJ6¨hœ˜¤í+ÇO{>ÌÑ(¦ÃF?æîXXêiîä¶uÄW¥pÂôÙ¶…olÙ×£ß@õtÒ¬÷÷γêæ?ca”O_ø’åЫn©a­d»¥†­dZè–¢j=ú «ÓLžÎ)xU÷ðRMWç¬J†ýÕ@»ë÷–…Õqa0­K]Åa‡´ŸgÏþƒãâä–mËŽK”fi¾ìÌ^uK Ýö]¤—‚[ú%²m—½­™M¥Ûü¯ÿõ¿^yå•yóæùýŸ%¶·ôêzoà$''WVVÚî,ßþ¨a¯9¦äÌugu²ûô—:ë÷èÏ®Tû÷n½úÙºä–ïï?b['£KW)ÜVZmÐྠ‘:;ŽœÖ•×Ü¿¤7«gË;¡¶?¶ÈÞü…^X¼x±Ï–(ÈWì®Xx-ÏþSWåëItL¬ºÛB“¤ä’ÓŸ¹7gU²õÐ1ÛBu†dDD#ƒi]ê*;¤™ÿôdÝ=Jì«y»3‹[þ·ÿöß|ÖCþÏÿù?ëׯǼÜÒ/ñÞqËÿù?ÿçÀå;þ½{÷øRÖãûã–¿ÿýï‡úÑGýòË/V-WÃäqKÙ­Lœ8ñðáÃöçÅYÞEe—­†' ˆÈêÑ{òì…ïî,Ñ•ö`K©`ïN]«÷Ø‘³rõT¸«E%¨+ÔE *âŒæ-ZYÞ }sÜòw¿û]¯^½Þyçï¾ûîÖ­[&Lðd‰&[6iÒdöìÙ§OŸþ//\'^¸n›¶^^Ûð‘ÛsV%ÚÔõÖt¯«8ì—òÉå»ó—ÿE¾”¥·l%ŸûjÞî̾9n©Û²‹ôRpK¿Är·Ô)¥+·¡ÅgnéU¥Ô0vË0çJ©á.zðÜüçæÙîæš¦¦-}}V!*:Z «oþ ›P]c[èÌ:tåê鉻?ÛÖQ— UßúÑ µêÌOgÈ,¼ê–¶J©Õ_±bÅ?ÿó?»:@¥-Æni«”–»eUíwʯä¯ý ¸æçl²GÙ—¸ÔUvHûy–^¸Õº]†³yú²3{Õ-mÙEz)¸¥_b•[:SJ>8 6ÞvKß(¥†C· 3¡”^í¢EUç_xeU÷¾Ô®máÊ7T¹º´G±o›ý'? «»ºÖ¶Ð¡ T\ûJWî°Zjót)(åÚ… *÷ïA_þé¶…›KŽšqK5ê˺¢Rƒ¶õô°ÔÙt ÂgÐB·4VJÅ­[·~ûÛßJåñãÇ»½D[·4VJ kÝrCñáðˆˆ”´æÅ5—“S›Éc‡£¡š™³ÛnéRW1¹uÐrËÇ•¶uvU:bÝÛÙB·4¿=d饸í–f¾åù2²SÈìÒ-:&6©iŠßSoÜÛ¶·jÕʤRZûÁ sDdd¤l”=>üíû½·v³†Ö÷\еná¥Ô·tO)5,ß¶;!¥YZáºm¶…e—îH;7QOó¦Ï‘§ J7­”HyÞŒ¹¶…¢R¸±øÛBínõÆÝò™ç_¹¿º"X] ’Õ£·z:mÁÒ0G­/yíí–mÛk£»XÏݲK—.õ*¥ÆŠ+Ôß“ŸÅe»gR)5,tËÊëßȺ «6í[ºöXÞ¼kÝ2°|û#{@‡«Š4~PZ£UûÓª÷ìïË#ù¥7Öêf¸zÛ]5™pÍöÍÒ ³¹VÂÙ¦þþ‚ìn¿Ò¡S–í!¯U›w)SÕѵW_3GÆ\϶?ÿeóƒ¸Â“ŸÅ]Å*·\»û|ée²4uÿ©«qññRnfE½sv¶,ûruò†­H˜ï*&—²ü÷u³]>{#Öü62ãâDÚft?uOõE]µËŽ?:bTëö1±qÒ‹Ô¡‡3”Ýe—î½d™Ð$Qºº:åL¨¦í. ºîú=eÃF?-õ¥1™]ºÉ72û«ŒKÎ\5qJçìžÒæ”fiÝûX\ø–nè$«âK·Ô~÷ügqW±ê~â꫊8˜î%uHJ^ué~â˲/—MbvŸþÒ?ãKßp©«˜_ʲÕë;tÎ’¥ˆU>9n¢ºÆ­èØ…ŽYÙò5ªe›v¾éÌAé–!k;þ&~äê—RÒ.³Óɺ/z½>,›âĤän½ú½õÁ^UÇÙ=RUê½Á½]V*H/Í<#9%Uj:¼Gêßëúųó—HOjš"i[NÞ݉%*ïî,ôØj†òy™±°ÀþA½Í3Ÿ`rËCço†ÕÝÂìdÝv¸U»òtÑ«oêª-¨Û˫ζÃ×£ÃEk…ÞèNê¥JkF俉uȶ1¡q“ö»L÷bÙÅÛž¿™¸¥Î¥÷}|é–¶?ˆ{ø³¸«¸ä–ÄïiÈn©Ûa;õÆB·¬¾ùCXÝ—¸5ÛØ6—BãwÛÌ îÕèsé-[?÷âËZgïvÙ¥;êV§:ä½Ú]yÎ¶å‹ W«ó–m騵»ín¦yæLnYrú³°ºÓÛÔÓ-WÊÚ—7yoÍ%­NQÕyùR,å[V9›µnévw’r‡XhÙ¶½îN‚n·ÔÁÞß÷ñÙöG÷ƒ¸Ç-+ä–ØN½±Ð-OÜý9¬îø•¼ác&MÛYq¦êÆ·”ÖtêÖCÊû~Ô`Z“7¸Wƒn‰Æ¤6OŸ[PxèüMíÖöóÌ™0YJDã7î+—j’ Ňå=”Bí¶Â'ë[EDD4’ž :$Ëzù­ j5iµ™lžù“[>¿ô•°º[ëj%ê3•ݧ¿ºÙ®ü•osR"5]]–ÃE×[ÇÃî$}FÊeÚâã—e"ßWmÞ¥FD”Žíᛉ[ê`ïïûølû£ûAÜÇ?‹ã–•rKl§ÞX{¸*>öWW «[ôÚÞFÍ~Zó7¸WÓæNžQo{zöŸ°ëèYÛÂËŽKµ”fiZIþsó¤dÂôÙ¶ÕÞØ²;&6NæÎ|óL&ÜR¾Uí8rú™ç_PDÈ;¦½$Šý…Õ]c(O缪äS©¦KËrÏ-=ìNñ ¥PwˆrӊƉI¶ŸS÷‚[ê`ïïûølûcÿƒ¸/Ç-+ä–'±úâ ·Üzè˜m¡:m@TÙ`Zó7¸WÓ¾¿ÿˆ™öاæö=]ÍŒ.]åé¶Òjƒ©Ì7ÏdÑ- ˜þŸt“ì?uUL,:&V~&߃ìïÝl¦_¹ç–v'umæc#Ç”œ¹îù»§ n©ƒ½¿ïã›íÃÄ}ù³8nX D·ÄvœÅn©¹uVÙ~Zó7¸W%e—î˜iÏ'—ïÎ_þQ…ô–­cãâ"£¢Â#"t5ÕPQö3t¯y&4n9lÔ¸ûÊNU¸n›Víµ ¹×¯ º™÷º“l.ÔÒ[²zô–opïî,±êŠ]ÜR{ßÇ7Û‡?ˆûògqÜ2°ˆn‰í8‹7ܲÞÊöÕÌßà^•hcÊ̳ôÂ-5HˆC´jê'Ýê[?ü³æ›g2è–¶%òþ«{4çäMq6UUíwª'Ë_ûA*L.ËL7óFw:xîFþsól?eMSÓ–¾¾Æó7·ÔÁÞß÷ñÍöÇÙâ>ûY· ¬¢[Ö[Ó»'ûy6@Ûi niþ÷&!ùt~Xf¯X³i߉+òý¢úæêüXÛš©ÍÓå©îNº˜ožÉº[JvWžSðí‹N5aúlyU?íy÷–e¦›y£;i)ª:ÿÂ+«”H W¾áᛉ[ê`ïïûø`ûcðƒ¸Ï~Ç-+!â–!b; Ä-ÍßàÞü»­4~ËÇ•¶…»*õ㎪‹úÕ`ÈÎb¾y&n)Qc#4Kоn(>‘’Ö¼¸ærrj3y¼~o™ËrÏ-=ïNöÔšò¹óðÍÄ-u°÷÷}|°ý9þüÒ_#>iûôí·ßöjþ · ´„ˆ[†ˆíøÑ-moÿdþ÷æßí¸øx)ÑúØÈ1jp§òO¿P%Ï<ÿB˜Ý±Õ(Y=z»Ú<“ ·¬¹}¯C笰û×ÊM°-—5+o‹”¯Ú´ódÝ`Yò¸e›vfî^ç¶[ZØäßIi–V¸n›maÙ¥;R3¡qßLÜR{ßÇ—c§kˆ[úx‰¸e`%ˆÝ2mÇ/n'OçV\ûZ —dþ÷æßíŽYÙR¢îãvøòݵ»öüÈ#ßR‡|ç-û³: °äôg5’’I³U?tþ¦¸PZz )™8sžš•ùæ™Lp¸¥DÞˆˆFšFªÈVwµV2pÈ0“o”niyw5qJXÝÀbËV¯Û]y®úÖÅÇ/ΟfÅ­-qKþÝûËf!³K·è˜X5ø¿K›µÀ né÷è:žÃn|Ï8Aé–!k;~qK5Æ‹†*4yƒ{óïöòwÞ×ÍJÞç® 5N·è?­zÏ~hý²l—k²y&4n)É›1W^MNm¦®>[»û|W’Îi;>äþSWå‹•”Ë«.-ËL7³¼;ÉÐáµr±qq”Öxøfâ–:ü¸÷—o êr3­˜éoê.Òþj³%Á-ýûŽç°ï_Ç3NPºeÈÚŽ_Ür×ѳÙ}ú‹ÏÇ'4îœÝS+7sƒ{óï¶dÙêõ:gÉ‚ä}~rÜD1),:vA$_$¼e›vZÍõ{ʆ~ºu» Q ù:9mÁRûK›Í4Ïd‚É-åR_ކ<9úègß(+“®®«¦6Œòª³û‰;\–™næîôñÙù³æ·é)ÓJ—h›ÑqtþÔ=Õ=3qK~Üû¿¬:Àº¢Rû;ê:ë$ÃÇæ|"¸¥²Ï8Aé–!k;n»%ñ$å–ÄÂà–:|ÙEß¹W¸n›vf‘lö¿7©èê´Ëìlí.^Ú#­’¶ùì}À-}:ž™4d·$®·ôKpË n©Ã7]´üÓ/漪n ~ò—LÚr²¾ãä³–,×MòÊ»›µj{ª/5®mFÇØ¸¸Œ.]GŽŸ´¹äè¯ÚPwÏ© _ÿs'ÏHNI•šR®Î·—¶Í-(Çj¿—Âô–­Õà]Úl¥=âÒ6y*í”Ö×\öê{‚[ú .u<‡}/ø:žqpË` né—à–!ÜR‡÷ºèú½e?1RÝø¬IRòä9‹Ôuš¶ÑíÐÝÒY²Kwdþáááù³æ»PUûì£g.^)DEi UC'5MImž>· ðÐù›¶7Œ“j“g/”ù„ÕÝlTZnrHX7‚[z5nt<3%AÐñŒƒ[SpK¿· Ùà–:,ï¢5·ï­X³©S·j_œÞªõ‚¯;»‚Ì·œ4k”ÈZ7ጅR>}áKºis'ÏpÖxi§´6½å߇)èœÝó•5›­º—½ÜÒñ¤ã™) ‚ŽgÜ2˜‚[ú%¸eÈ·Ôaym–þ Ú?Ê^~å{[Œ/U°Ä-û>4DJv9­›°¸æþåÀY=ûè¦}ÿãAÚ,-×,Eþ#kß"ÜÒñ¤ã™) ‚ŽgÜ2˜‚[ú%¸eÈ·ÔayU»Ågç/1_ÙÙS“uކªÑ¼E+Ý´j$X3‘ÿÂa“< néxÒñÌ”AÇ3nLÁ-ýÜ2dƒ[ê°¼‹j£RwÎîY¸nÛ‰;?T¶Ä-££c vñ‘QQºiOÜýÙø_PCÖHûUýäÔfÖ¾E¸¥7âIÇ3SÏ8¸e0·ôKpË n©Ãò.z¬öû—ÞXÛ¡S–Ú?¶hÝvÑ«o:»„%n©îP~åózÛæpþ¶‘v.\ùƃ­Ú¨šò_Èÿ"ÿ‘µonéxÒñÌ”AÇ3nLÁ-ýÜ2dƒ[êð^]³ãÀÀ!ÃÔ ~‰ÉMŸ¿Äö>¤*–¸eïAKɦõ6É`/m›:ïÅDu¹nx¸´üÝ%^zgpK¯ÆŽg¦$:žqpË` né—à–!ÜR‡·»èîÊsc&M‹‹“]gtLì˜üg‹Ž]Ð^uÛ-mGM[°TJ‘£›pÉko·lÛ~òœEÆó/ª:?:ªú}SÚ9ö™éRâÕ÷·ôA\êxfJ‚ ã· ¦à–~ n²Á-uøè¾~é+ié-ÂêñÓÊÝp˘Øû¶0· °âÚ×jÁ#W¿LLn*…Csr·¬ª¸öÕÆ}å3DFEIaî”™ÆóW!JÛ¤…f~ßô<¸¥Ïb²ã™) ‚ŽgÜ2˜‚[ú%¸eÈ·ÔáãW¾·¥K÷^Z‰nÙ£ßÀ0TáªÍ»'&…ÙѵW_ÛMç/í‘Vùr,AÜÒÇ©·ã™) ‚ŽgÜ2˜‚[ú%¸eÈ·Ôáß.ê†[î:z6»Oÿ˜Ø¸ø„Ƴ{jå%g®š8EJä…”fiÝûX\ø–nÇípþ¾né÷¸á–AÐñŒƒ[SpK¿· Ùà–:袾nI`pË` né—à–!ÜR]Ô÷Á-I nLQnyþ«ÿ‡ø2×¾û7Ÿ¹¥ßÿYb›/Æ-Ûvß·$ 0þrK¿ï‚2òÆ.X°`>ø|pX¹ ¬ú@a>{Ÿ·$ 0~qKv‘ÞÃÇ«@c>{Ÿ·$ 0~qK>Øûû>¸%i€Á-ÀØûû>¸%i€Á-ÀØûû>¸%i€Á-ÀØûû>¸%i€Á-ÀØûû>¸%i€Á-ÀØûû>¸%i€Á-ÀØûû>¸%i€Á-ÀæÏgìbÿàãí{·üå?þFï 8|ÜI @ñ½[@°‚[€Uà–`¸%Xn V[€Uà–`¸%Xn V[€Uà–`¸%Xn V[€Uà–`¸%Xn V[€øá—ÿüžø6÷þí?}¿¢qKðóÁOøxEã–àDrN~þ¯Ä—¹øõ/¸%%¸%n `¸%n `¸%n `¸%n `¸%n `Ænök¢¢£ÛtÈôøð¼swUžuVß Ýr{Â@ n ÁŠKniK£FFçO=t®6ÈÜò…¯{»%¸%+fÜR{ZuãÛGN¿¹µè‰1ãÃ#"ä¥ôV­+®}íw!´0ÃÇæá–îá’[Úf{ù©62åÕ§Æ?ãw!´0í2;ã–îá¶[J>(­‰ŒŒ” kw4¨¿lõºþ<žœÚ,1)yÐã÷—Ÿ”ÂÔæéR³òú7'—I¤BÍí{¹“g$§¤JMÜB OÜR’7}ŽT˜2w‘³úy3æê„-¥YÚÁs7âËãwv8aõ­åiBã&«·íiÔ¨‘n¶GJ_]»5:&VW!::få{[l›QvéNzËÖögŠþí®.OÃÃÃ'Μ·«òlŵ¯Öî>Ô±k÷î}(c4X<ŒŠUš“ûÑ''*¯STuþÙùKdnòÒ†âÃÊ›$%KIþ¬ùEÇ.TÕ~W\syæâe‘BT”íuF9&ËT³{nÜW^qík‰ÌAZ"…‡ 3þ—M.åÄŸd¤¦)©ÍÓç:ÓÙ™¨¸%+º¥øžThÙ¦Ãú£ó§ÊÓ‘OçÛNr¬ö{©¯«éÐ-…ÞÖ-1wò )‘›''ÍZ 'Ï^¨«3ca”O_ø’VÒ³ÿà¸ø„]G5nÒ‡e÷Õ7¥Yšñ¿l~)jZi¡Á;†[@ã¡[ýìõ˲Ãú³²åéÆ}庩–¿ó¾I·\½mnÚÍ%G¥¼Cç,yÜ÷¡!òxǑӺ:Å5—¥<«gcÇ«¹}ÏÙrmKÌ/EMûþþ#¸%„&ºå¶Òj©Ñ¥«Ãú)iÍåéÁs7tSí¬8cÒ-÷T_ÔM[vñ¶”'§¤ÊãôVN¡ÔhÞ¢•턟\¾;ù_zô˜Þ²µÈpdT”F©^·4¿URvén ¡‰‡n¹bÍ&©04'×a}ñ7yZ}ëGÝT•׿1é–Çj¿×M«.ó‘9ËãèèëSuTJ/ÜjÝ.ÃYMãÙüRT‰vn ¡†‡nùxÎX©0sQÃúIMSä©xnª]•gMºåÇgõÇ<¿ö“$[´n+˯|nìr’‘Oç‡ÕcÞwâJŵ¯«oþ ®¾©×-Í/¥Þ· ·€àÆ·\³ã€:p§Ý[\W¿C§,yº­´Z7á+k6›tËõ{ÊtÓnÜW.å³²åqïAËãM*êÕ9uÐrËǕƊë°%æ—‚[@ˆã¶[Šã¥=ØR^:w±³ú#OÇ?;ËvÂû׉·moÒ-þ”n¹còŸ•ò1“¦Éãi –ÊãGGäèê,yímYÄä9‹´’¸øx©i;RºjžѨüÓ/tËÕuwi)¸%„8®º¥èÙ›[‹FMœ¢.„iÓ!³ªö;gõ×l¯;°ùü’ûO~Zqíëµ»uêÖ£{ßfÜ2*:ZôuäÓù;ŽœVã[N÷¢²Au,ôÈÕ/“›†Õð¹õ`Uŵ¯Äxg.*PçyæN™©ÍM]±þxÎØíå§_¾»v÷Á>ƒqU¿wÏ[öçªߪš1±qR2· PZ«Æ®4¿ÜB3néq¼1“¦é†×ÉÕ‰»?zì Ý„âi»Žš:ßR¤tÕ¦ö÷åÉ›>G«¶j󮯉IöÍëÚ«¯í±GmÔ#´ôN]6jœV¢jöè7жšKK±ÿ/pK)\uËĤäý›2sý^ý™åêÄŸ¦/|)«gŸ¸øѹ'ÆŒ/®¹,F*ÕDÝR•¬+*Í™0¹U»"¥ý~léëkt -9s}ÔÄ)³{Ê"Rš¥uï;`qá[5·ïéª-[½¾C笘Ø8iÆ“ã&î?uU ‹Ž]蘕¥ ÿ.ޛݧ¿T‹Oh,óti)¸%„8Æné¥l=t,Ìæn>Zëû¶ù ¸%+^uË­«–¿½Ñ~!uwï Å-}n >À«n©î–زmûU›vî­¹TuãÛGN}fººçÍ­E¸¥ÏÀ-ÀxÕ-wUžU·}´ç©ñÏO‹[Z n >ÀÛç[:Wûìü%]º&&7‰kÓ!sÐãÃ×ì8P¥µà–àür-Oˆ·€`·Ä-¬·Ä-¬· D·\·nÝ™3g\š·€[¢[fddˆ+&&&Ι3Ǥdâ–àpËÀuK 3’‰[€À-ƒÀ-ÍH&n >· &·4LÜ|n”ni/™¸%øo¸å¥5#róZ·Ïˆ‹OHhܤ}Ç.Sç½Xvñ¶®Ú¶ÒêÇFŽi—Ù96îþýzþÔú½eössvƒÛòò+ŸËã¶knßË<#9%Uæ©Õ|wgÉ ÇžP…™]ºÍXXPUûnn{ª/5Næ u2ºt9~Òæ’£ÞsË?þñ&åÐC~ÿûß:ô£>Éôw_€àÇr·\³ý@dd¤ý Ä[¶m_zá–Vmqá[‘QQº:fÿi¥ny¬ö{yœÞ²õs/¾¬ÍM½´¨puxx¸nA»v·ÕËW×nމÕÕ‰ŽŽYùÞ/¹¥·[jJùË/¿XÕUêÅr·ìœÝSÄ,Öüâã—«oþPþé«6ïjÞ¢•Ž™4MÕ)9s]ÌMJrò¦ì:z¶êÆ·{k.å?7/\ä²Q#™ÐU·4Dêì8rZW^\sYʳzöi°n‰R@CÃr·ÜzèXãÄ$±²ðˆˆ¬½'Ï^øîÎ’šÛ÷lë¤=ØR*”œþL7íSפ<-½…ÛnYvéŽmä”TûB]Ò[µsNó­ [.]º¥€ˆ7®?xîFþsól­ijÚÒ××h¢¢£¥°úæº Õ%9ÑÑ1n»å‰»?ÛÖQ— UßúÑ µêÌOgÈ [4L¼:¾eQÕù^YÕ½ïåi W¾¡ÊÕ¥=ûO]ÕÕßòÓ°ºË½ëuËŠk_9tK]µÔæéRxèüMƒF¶hÝVê”_ùÜ{ïn !‚oÆNËSOÕ9™kwÒU[»û ”kWÙ¨DD4ºï~Ÿ~a[¸¹ä¨·ìÒ½—®+*5h[ïAKM*pK±Ü-‡Ò,­pÝ6Û²KwÄß7QOó¦Ï‘§ J7­”HyÞŒ¹¶…)iÍ¥pcñ'¶…ÃF3ã–Ï<ÿ‚ŽÈͳ-|ýýÑÑ1Y=z«§Ó, stÑú’×ÞnÙ¶½6Tn P/–»å¨‰SÂꆚ\¶zÝîÊsÕ·~,>~ytþT)ìÙ°ªsè\ml\œ”Œ}fúžê‹U7¾•šò8<<\Êu?aËTRSTðÃÃÇ¥æ®Ê³c&M{°Uuű[–œþ¬Q£û‡='ÍZPTu^æüêÚ­ié-¤dâÌyªÎ‘«_&&7•’¡9¹[VU\ûjã¾ò™‹ Ô¹šº‘pK,wKÑ9‡W^‹4~PZ£UûÓª÷ìïËóÒku3\½mýõ5k¶h–þ`˜ÍÅ;Ýòï ²»OP‡NY•׿Ñê¬Ú¼K™ªŽ®½úÚVÃ-ŒñÆù–Ÿ½‘?k~›™qñ qññm3:ŽÎŸº§ú¢®Ú‡eÇ1ªuûŒ˜Ø¸v™Ï»½ü”ÊûuéÞKô/¡IbÏþƒÕù“­ÛeˆþiîçÌ-%ë÷” ý´Ô—Ædvé6mÁÒªßê•øÌõQ§tÎî)mNi–Ö½ï€Å…oé†NÂ-Œñ͵<·€P·Ä-¬·Ä-¬·Ä-¬·Ä-¬·Ä-¬·Ä-¬·Ä-¬·Ä-¬·Ä-¬Â¿n¹v÷ÁÌ.Ý¢cb“š¦œtrßFƒ›9hpKVüè–Õ·~LNI û&Ýò…¯ºjâ–¬øÑ-‹_VÞ¸®¨´ªö;gÕtn9|ln Ð0ñ¥[¿s¯pݶ¬½ÕÓ]GÏšù½[W§]fgkÝRÚ#­’¶á–â·,ÿô‹9¯6oÑJ´0<<\Jºtïökì5Rç–³–,×MòÊ»›µj{ª/5®mFÇØ¸¸Œ.]GŽŸ´¹äè¯Úpås™D*Ôܾ—;yFrJªÔ”ri”KÛæ¹ú%n à6Þv˽5—žžú\\|‚ø[TtôSãŸÙuô¬ånùêÚ­Ñ1±ºW££cV¾·E›Ï±Úï¥0½eëç^|Ùv¡ÒQi›<•vJk‹k.ã–nà=·\¿·ìá'F†GDˆ³5IJžºißßÄø_6KË5=–ÿ·0ƒån©|ìÙùKÌWöÐ-Ó[µsNó­tÓ–]ºcò‘ÿÂa“pK‡Xî–Úpè³{®ÛvâÎOÞvËèè·ŒŒŠÒM{âîÏÆÿ‚+IÚ¯ê'§6Ã-Ì`¹[«ýþ¥7Öv蔥ĬEë¶‹^}³òºÏ·”EHIù•Ïëm[½!¥ W¾ñ`«6ª¦üò¿È„[˜Á{׉¯Ùq`àajôÈÄä¦ÏÎ_Rzá–7ܲ÷ ‡¥dÓ OÜRÚ6uÞ‹‰ê:ñðpiù»;K¼ôÎà–¬x{|ËÝ•çÆLš'Î;&ÿÙ¢cýcbãâwÎî©•—œ¹>jâ)‘Rš¥uï;`qá[:c48ßÒ—Á- Xñ¯[†fpKVpKÜÀ*pKÜÀ*pKÜÀ*pKÜÀ*pKÜÀ*pKÜÀ*pKÜÀ*,X0ü¿×<@sôèÑ¿ýíoþn<ðÀ¿üË¿äåå•••!™à â–¿ùH&x‚­["™à ÝÉ70vK$ ÈhÖ¬™ýó6¿ýíoÛ¶m»qãF¿à>âuÞ›y½Ç-•R¾üò˵µµÞkø¿¸%J ”øÒ-QJ€àÆn‰R„^uËîÝ»£”¡ƒWÝB ܬ·«À-À*pK° ܬ·«À-À*pK° ܬ·«À-À*pK° ܬ·«À-À*pK° ܬ·«À-À*pK° ܬ·«hhn9ü+Œñq€¥ºåÉÏÿ•ø2¿þÅ÷æÀЬà–`Ü’à–¤Þà–`Ü’à–¤Þà–`Ü’à–¤Þà–`Ü’à–¤Þà–`Ü’à–¤Þà–`Ü’à–¤Þà–`Ü’à–¤Þà–à!?üòŸßßæÞ¿ý§oV®,Èïÿ,±Í/ÿñ7߬zgà–·$õÆ÷=äßÿóÿõûö9(ã3ßÐáÝ‘ýÁ9¬Üū޸%Á-I½ñ}ùî—ÿðïf9¸ññÚü/>òþˆÏ¶í¬Ü†–»÷þê—¹nIpKRo|ßC”[úý¾øåóþ_|äƒz]³rZpKtQß·$õ· šà–¡Ü2dƒ[ê0î¢a¿&*:ºM‡ÌAÏ›1wWåYgõÝX/nOˆ 8·¤ø>¸eз à–!ÜR‡KniK£FFçO=t®Ö¾¾ë¥áHÅ +^÷vKÝ-é>n4Á-C'¸eÈ·ÔaÆ-µ§U7¾Ýqäô›[‹ž3><"B^JoÕºâÚ×~_­føØ<Ü’nàƒn`Ü2h‚[†NpË n©Ã%·´ÍöòSm:dÊ«OÆï«Õ´ËìŒ[Ò |Ð Œƒ[MpËÐ n²Á-u¸í–’Jk"##¥ÂÚÝ ê/[½®ÿ#'§6KLJôøðíå'¥0µyºÔ¬¼þà \ýRž¦¤5—Çk¶èÑo`B“ÄÄä¦}²¨pµnþ{ª/5®mFÇØ¸¸Œ.]GŽŸ´¹ä¨}kË?ýâÙùK:g÷Ljšß.³SNÞ”}'®hf-Y®ûÁ÷•w7›_Jù•Ïe©Psû^îäÉ)©RÓáûLnXÝ Þ>`Ü L-Ât70n4Á-C'¸eÈ·Ôá‰[Jò¦Ï‘ Sæ.rV?oÆ\Ýž:¥YÚÁs7âËãwv8aõ­åiBã&«·íiÔ¨‘n¶‡È^]»5:&VW!::få{[l›QvéNzËÖavÈ~wå9UÇ@*Ì,åXí÷R(KyîÅ—µ:ß´ sË@éfú€A70ÙÓÌwãà–AÜ2t‚[†lpKºåk>’  }Òaý—§ááágÎÛUy¶âÚWkwêØµ{÷¾”*,HžFFEÉ>zhNîGŸœ¨¼þMQÕùgç/‘¹ÉKŠŸ¬³…&IÉR’?k~ѱ Uµß×\ž¹xY¤e{I΄É2Uçìž÷•W\ûZ"s–HáÀ!ÃŒÿe“K9qç'™0©iJjóô¹…‡Îßtv bð¹e@tó}À¾%æ{šùn`Ü2h‚[†NpË n©ÃC·”½ThÙ¦Ãú£ó§ÊÓ‘OçÛNr¬ö{©¯«éP*„ÞÖ-1wò )‘›''ÍZ 'Ï^¨«3ca”O_ø’VÒ³ÿà¸ø„]G5`·e÷'¥Yšñ¿l~)jZi¡q' >· ˆn`¾Ø·Ä|0ß Œƒ[MpËÐ n²Á-uxè–G?û&¬îWE‡õ;feËÓûÊuS-ç}“R±zÛÝ´›KŽJy‡ÎYò¸ïCCäñŽ#§uuŠk.KyVÏ>Æ¡æö=g˵-1¿5íûû/7øÜ2p»Ã>`ß—a²· šà–¡Ü2dƒ[êðÐ-·•VK…Œ.]ÖOIk.Ož»¡›jgÅ“R±§ú¢nÚ²‹·¥<9%U§·rpúœFó­l'üäòÝùËÿÒ£ßÀô–­Å‚"£¢Ôø9õº¥ù¥¨’²KwŒ;að¹e t“}À¾%.õ4“ÝÀ8¸eз à–!ÜR‡‡n¹bÍ&©04'×a}ÙwËÓê[?ꦪ¼þI©8Vû½nZu}‡ÌYGGÇìñU•Ò ·Z·ËpVÓø_6¿U¢]™â,Áç–Ñ Ì÷û–˜ïæ»qpË  n:Á-C6¸¥Ýòñœ±Ra梇õ“š¦ÈSÙ§ë¦ÚUyÖ¤T||V°ëÐù›aÿ8A®Eë¶ò¸üÊçõ®÷‘Oç‡Õ_ ÚwâJŵ¯«oþ .»p¸\ÛóK©÷íR >· ˆn`¾Ø·Ä|0ß Œƒ[MpËÐ n²Á-uxâ–kvPm´›Jëêwè”%O·•Vë&|eÍf“R±~O™nÚûÊ¥¼cV¶<î=èay¼é@E½ë]°Úòq¥m¡½Û8l‰ù¥„¦[J70ßì[b¾˜ïÆÁ-ƒ&¸eè$ÐÝrÐãÃÃ];i›0;5jÔ²mûC†½±e·™ú÷÷‘‘²A–޳}¿Á²6—ÍÉ›’Ñ¥krj3ÙŤ4KËìÒ-gÂdû³÷muÍÏÁÃà–:ÜvKY5i¶”W§Î]ì¬þc#ÇÈÓñÏβðþÂmÛ›”ŠG†?¥[î˜üg¥|̤iòxÚ‚¥òøÑ9º:K^{[1yÎ"­$.>^jêFÉ–æ©¡lÊ?ýB·\m4o—–‚n@ÝÀ|°ïæû€ùn`œPvK‡;#~o¤ùà–¡“€vËCçjÅ®ÛNÚÆøƒ©e²~Ø?†ûÐåÄÝŸŸÿŒÁTOO}Î~)žÌÁÃà–:\uKéron-5qŠº¢M‡ÌªÚïœÕ_³½îˆVdäóKVì?ùiŵ¯×î>Ô©[î}èjÚ/HžFEG‹·Œ|:Ç‘Ój`éó^T& ‚¹úebrSÕŸ·¬ª¸ö•¨ÎÌEê¿Ü)3µ¹©K•Ï»½üÔáËw×î>Øgð#b,ê·ÎyËþ\uã[U3&6NJæJkÕ¸…æ—bÿ_øwûc~E'8ºù>`ß Ì÷óÝÀ8¸¥1~o¤ùà–¡“€vËÙZVw”@þNáOΪÙÕ~_tìÂÌÅËÔf³àÍuÆõ%²±Ýuô¬|gW§²ë&9ù{X$4Iœ±°àòã¥nUßúQþʆW¶·j¿#_í –âê< n©ÃŒ[:Dvîc&MÓ ­[¿òÅaÐcOè&”}´t*3R!6²jÓNû²äMŸ£U[µyWãÄ$ûæuíÕ×öØ£6ÜFZz‹§® 5N··êÑo m5—–bÿ_8L€º¥C¨˜ï»É>`¾'”ÝÒa÷ó{3Ün: h·lÓ!³ijZõÍ’𦤷jíìjDƒÏ£¨š¼Ô½ï“õ%‹ WË«=ûÖ•gõè-åïî,q8Õ‹¾¿ ý,ÅÕ9xÜR‡«n™˜”,«cÜ”™ë÷êOs¸~OÜùiú—²zö‰‹O]ùcÆ×\ «;IÃ`B­d]Qi΄ɭÚué÷ðcK__£[hÉ™ë£&NéœÝS‘Ò,M:öâ·jnßÓU[¶z}‡ÎYòÅJšñ三ûO]•Bù¶Õ1+;2*J÷[„'»O©ŸÐXæéÒRLîƒÀ-´˜ìκɞ†[ZÜÒ=æÚ î®[ª3ØÇÕý#åñÚÝÖ4ø<–^¸¥ö&ëŸüÇU™ºINþã&yÕáT²Cѽd¿WçàapK~Ùþl=t,Ìæ6.®và@OÀ¹%ÝÀ÷Á-µ8ëG?ûF¾kÈK‹^}S÷Ò‚¯K¹¼*uüÞ~Ü2t¸n©NMT—:ª-ócÆ;¬i°M>xîF˜‰[ÝÙ¦äôgau7ÉÕ•·Ëìf3öH½±_Š«sð0¸¥¯n¶¬ZþöFûdÔ<2Ô¥®4 5·¤¸ÜR‹A]adddl\ÜÞšKZaQÕù˜Ø8)—Žç÷ÆŸÄ-C)ꖕ׿‰‹Oh›ÑQ+iß±‹|ˆ*®}e_Ùàó¨~hî;øQ“õ%Ï/}E^í5à!]ù’¿¼£&|xØÈ7·ÙžÏï0öKqu·ÔáÕíºS^˶íWmÚ)ÿªßî8rzì3ÓÕ…²º]ê*A“PsKºÁ-µ÷uÆ~vŸþ'îüt²î§®n½úI‰ì³üÞrÜ2t n¹lõºû™%+´’9¯J‰ý©G'}«oý(ö9/­T?Cë6é?¿Çj¿—½À3Ï¿ .‡t8xÑŒ…ò QM.ºtï5aúl©i{Ñ¥ñR\šƒ‡Á-uxuû³«ò¬ºßŸ=OÆxÚ –ŠPsKºÁ-µ÷‘Éý…Õ]éòûÄ^RªÙ‚[†NÔ-{ôQrú3­äà¹5êÚ«¯}e‡[r ÝXsõÖ3¼&}߉+“g/l—ÙIˆPÄÆÅåN™ùÉå»öKñd·ÔáííÏ¡sµÏÎ_’Ñ¥kbrӘظ62=>|ÍŽõNÄRjnI7p#¸¥–zûÀþSW'&EÇľþþŽèè˜&Iɶ{I¿· ¢[(ÞÕ{~¼ô•ÏÝîÊsºr{9Œˆ¸?vúCCŸt¸I7°Êa£Æ™üìÒU›væ?7O,QMû`«6"Àº¥x2ƒ[ê`ûãû„ [Wƒ[j1óý¢pÝ6m‡õÚ†üÞfÛà–¡“@tËÉsèߤY tõ]ý¾o_ÿÄÝŸÕàÆ9ySÜhðæ’£-Û´“ÉŸ7ѽV9œƒ‡Á-u°ýñ}pKRopK-föUµß%§¤J5ùë“©< n: 8·X‡º½¸™ks â¬þs/¾,åb¶åW>×½$Kœ,;^zá–|ŠåïÆ}岺EäÕ%¯½m°WçÐ`×µ%+WÝ¾Êøz–œ¼)RG6¿ÆëÎ ÆõófÌ•W“S›ÙêëɺëcãâœíŒä¥ÿü¶ñR\ƒ‡Á-u4̽Ip§º¥.^Ò-Of;|lžµM*>~Yµg]Q©·oÙàFpK-ÝfíîCááá‰ÉME´Âý§®ÆÅÇK¹¼ê÷ÆŸ p·lÓ!³ijZõÍ’𦤷j}âîÏ®®#Q5y©{ß&ëK®–W{ö¬+ÏêÑ[ÊßÝYâp*uS˜ý,ÅÕ9øf]¿ûî»—/_öýÊÍèÒÕàÝPÙP|XêHM“ëÎ¥¾q²î E‹Öm¥Â'Gë^*¿òù•oôøp«vâˇZzcßÁÎ\TpØnhJ‡KqiÆZ·|ýõ×oÞ¼éÒ$ÖºåÝ»w×®]ûÃ?¸=‡†¹7 îx¾¯Y·nÝ™3g¼·¢ [ª›ÃZؘ]GÏzéß´$ö“'Onß¾ý—_~1?IÀ¹åÑϾÛ‘—–¿ó¾î%u”[^å~âždã¾ryÇÕWw|xíîƒ.­£“ÿ¸h"ñ×Mô¿i?‰DÝöE^u8Õ‰;?é^²_Š«sðͺNMM1HKK[´h‘IÉl˜ÕP޵nùÀüö·¿m×®ÝòåËMJ¦µn)‚!3üÿãôë×Ï=ÉôFý ´fDn^ëöqñ ›´ïØeê¼Ë.ÞÖUÛVZýØÈ1â ±q÷Ó~døSÏÀw¶²-—¯'ò¸mFÇšÛ÷r'ÏHNI•yj5å{Ù ÇžP…™]ºÍXX`œjOõÅa£ÆÉ¤Ž|G9~Òæ’£^ꄞïk222d½'&&Ι3ǤdZâ–²§–/€òÒ¢WßÔ½¤~^‘W öæö³=rõK)i—ÙédÝ1(ù‚Ù81Iö)Ýzõ{냽ªŽúËÛ3Ïë]qûF—î½tóüÿëúųó—tÎî™Ô4EöDÒ¶œ¼)Ï4ój¿ò°‡lذAzÈþð‡aÆ™”Ìë–žÀuKujâ–+åñÖCÇäñcÆ;¬iàŠÏÝ—R𥙬/)9ý™¼j´ú‚9sQÉöÛ/ÅÕ9øf]+·Ô0#™|TZ,wK­?˜”Lo¸¥†’iy]³ý€vO[Z¶moû»Õâ·ÔDm‰ˆh4ûO+u34ã–Çj¿¿˜¢ek5¬íK‹ WÛÞìIѱkw[ xuíÖè˜X]è蘕ïmñF'´Ê-5ÌH¦UÇ-eG#ëWLioÍ%­°¨ê|Llœ”o=XåÒl«oþVw|Éa·‘“†nifÅ9ìÎܲìÒ©f‡ü¿ºûSx»_Yâ–f$·ôRÔ-+¯Ÿ _‹´’ö»ÈǼâÚWö• ¶ê‡fݹõ%Ï/}%¬îƺò%yGMøð°‘on-ª÷Tû¥¸:߬k[š‘L>ª -ÞsK“’éU·tC2-{Ê'7Öüâã—ÅÊ?ýbÕæ]Í[´’Â1“¦©:%g®«³µsò¦ì:z¶êÆ·"*ùÏÍ ¹lÔH&´¡³­mù‰;?…Õ}ÏMmž>· ðÐù›×¾>Yw'k1X™«ø‰,âйڗßÚ äaòœEjZщ&IÉâ Òæ¢cdkS\syæâe¢:2­Lby'´Ü-ÍH¦…¿‰+ÙËîÓ_ݲYþvëÕOJdàêlOÜý9¬îÇ/ÑKé;+ÎHgø ´¦S·a†CL˜_qÎú†ÃyæL˜,%Ò‡7î+—j’ ŇÅ¥pàaZ5ô+kÝÒŒdâ–^J€ºå²Õë¬ÐJÔ½Ú—¾¾Æ¾²ýG©úÖòјóÒJõ3´™1åkàŽ#§ŸyþuØÁáàE3h_Bå|Iœ0}¶Ôtx¥³Ã¥¸4߬kgni ™|TZ|à–Æ’é·4/™–wÑø„Æò™µ=D)Ùt ¢qb’¶w?íù0»Q³$ÃF?fw§·ÔžæNža[G|U eÓa[(›ùöÝ£ß@õtÒ¬÷•`öBÝüe$åÓ¾dy'ôž[jØK¦…n)¶Ö£ß ©0oÙŸOþcÓkÀCJ5]­*>öWCŽüý¦ é- ¦5¿âö ‡óìÙp\|‚|ß±-ü°ìxدÔóA¿ò’[jØK&n饨[JO–/û¶wf?xî†|÷ïÚ«¯}å0CÆ?;Ë¥úa†×¤ï;qE>Ví2;Ùþp';ŽO~}†³í˜ù9øf]×ë–šdòQmhñ¥[jØJæo|ë–Î$Óò.*[¤°º!AJÎ\wV'»O©³~þìJeÝzõ³-tÉ-ßßÄ¶Žºn[iµAƒû>4DêÈ÷e]yqÍý눳zö±¼úÀ-54É´öZžý§®Ê—…è˜Ø×ßßÓ$)ÙväÒlUáÖCÇl ÕI’ ¦5¿âö 3ÿ¦JÍí{ºš>èWÞvK M2ï~ÿ;,o$ÝrOõEñ®Þƒôã¥xt¨ô^Ýù!'¹¢|x[¶mÿÐÐ'×ì8`?«6jœÉ1ÌË.ÝYµi§|ÑKTÓ>تí­Xêý€×;7ÖõÿøG“=7øßÿû?õÔS{öì™7ožß;6±¸¥÷Ö{'))iîܹ/^´jûã0" êÎkò7«GoùzøîÎÙ;ÛÖI{°¥T°·‘§®…ýúhÕIÝR7F–ÀPW¨‹ºÔÔÍ[´²¼z{ûcËïÿû¡C‡~ôÑG²êÍ·ÐŒt®Û¦½K¯møÈíÙªBíwjãõëÞŠsØ7œµç“Ëwç/ÿ‹|EJoÙ:6.îþ¨Ñu£ÞÙÖôA¿êÓ§ozˆ|ómÛ¶íË/¿|á³ZÜÒ D·œ>nùÏÿüÏ&L(--ýÛßþ¦&ùÏ[*¥<{ö¬Ã9x£‹Ê÷>ù&h»omššf{–NTt´VßüA7¡ºì"::ƶÐÙöÁ¡{è†_SçíTßúÑ µêÌOgÈ,|pÜRSJíOËÇ ªªýN)–ü5yª’ÃÙº´~Ý[qû†Ãy–^¸Õº]†³yú²_yû¸¥¦”µµµj~÷RÎ-OÜù©Yúƒ½7%­¹îVzf¶õÖß]yN}jÞþ°ØfÿýDš[ºÝ*û9øf];sK{¥ô|å/Å7ni¯”>sKc¥Ôðj-ª:ÿÂ+«Ô·QaáÊ7T¹º´gÿ©«ºúûO~VwI¯m¡ÃíCŵ¯tå«¥6Os>š™Š¸µüÊç>ë„ÞsK{¥toE›Ù&O˜>[ê¨cÔã§=ïöl-«Þõk~Å™\„däÓùauW¬Ù´ïÄ•Šk_Ë7 u5mMô+/¹¥½Rjà–^JÀ¹å[ì•®;à‘¡_U·7smŽAœÕWƒ9ˆÙÚpd‰“ç,2øÁZ ¤ÙÄfTLÝRܘƒoÖµÎ- ”Òó•K¼¯º¥RjxÛ-M*¥†oº¨¦|feo«žªs2íïš±v÷Á°û·Eh[¨î7Zþé¶…›KŽšqK5Ô̺¢Rƒ¶õô°ÔÙt ÂgÐr·4PJ÷Vt½{РŇÃ#"RÒš×\NNm&ŽMjf¶n»¥ùgÞ-ÕAK5 Ÿ–]•úQÖ}Я¬uK¥ÔÀ-½”€sËGGŒ ûõ(²¶)\÷A˜Ý•˜V¹eÍí{:g…Ý¿¸o‚î%u+Ïa£Æé™j™÷òka†ƒK¸1߬kå–f”Òó•K¼o¸¥¥Ôð’[ºª”–wQÙ&¤4K+\·Í¶°ìÒùÌ&4n¢žæMŸ#Oþ”nZ)‘ò¼¿:3PF 7b[(Û3nùÌó/HáˆÜ_]ƒ¬.?ÉêÑ[=¶`©ý¦òdÝ­ÊZ¶m¯ )ca¬rK3JéÞŠ6ÞST^ÿFÞ©°jÓΓu£8Êã–mÚI¹³uÉ-ma~Å™wK5^Šn¤ôÇFŽQדj_p|Я,qK3J©[z)å–‡/ßŠŽŽ‹Opv¢Ë±Úïš$FFEÙžol•[J¶¬RÇÔæE‹ìÔØAò+xs]QÕyùݤRjXë–ׯ_wO)5,&Þ¿µ½ôºe«×í®|ؤRj˜tˆ¶×Ðíé`Ë-Õ ¶Œ¯gÉÉ»¿‘aÅën÷ ãúy3æÊ«É©Ít—˽õÁ^µãpˆ¼ôâŸß6^Š«sh°ëÚ_n);tuš½öÞšÙª«{°ú¥Á>‹µnéÖº¥çXÞEe·ëð YùØ~PZ£UûÓª÷ìïËóÒku3”o‘ºj2ášíÔÙæÚÎ6V÷dwײl€­Ú¼K™ªŽ®½úÖ{,Îøe_c•[®Ý}H¾ˆ5ÙaºÿÔÕ¸øx)·?Ï¡ÞÙ:[–®\Ga»M3¿âL.B²ü÷u³cA>¹m3:ŽÎŸº§ú¢®Ú‡eÇ1ªuûŒ˜Ø¸v™ÕÁ"‡3”}t—î½d7Ð$±gÿÁê<7ujœ¶6ØX­ßS6lôÓR_“Ù¥Û´Kíî)9s}ÔÄ)³{J›Sš¥uï;`qá[º¡“¬JàºåÑϾQ_ÄÁt/)mW]ºŸ¸Á²t廎žÍîÓ_ºŠìd5¹´âÌ»åÉû·#Yß¡s–,H¬òÉqÕgEÇ.tÌÊ–/5-Û´óM¿j°néI,ßŘÜÓù7å–$ Öµ¿V®l‡Í|ÐÕQ·q÷ûÚñjpKl|Ÿ†ï–Äï J·´|crOçßà–¡“àvKu £-'ë;b nl‹í5b{ª/5®mFÇØ¸¸Œ.]GŽŸ´¹ä¨í|ÔM4¤‚|Ï<#9%Ujª—>(­‘›×º½|µOHhܤ}Ç.Sç½Xvñ¶¿V=n©ƒíïƒ[’zÓ`ÝÒ~Wräê—RÒ.³ÓɺS&z|¸qbRbRr·^ýÞú`¯ªã]ŒÃ=Ýßëúųó—tÎî™Ô4%.>^Ú–“7Ew‰–Ê»;K=ö„šaf—n3Øÿ¬·yÆÁ-C'¸¥Š·|uíÖè˜XÝ«ÑÑ1+ßÛ¢ÍG yÞ²µœJ›íšíìOIZ¶m¯»ß´Ï‚[ê`ûãûà–¤Þ[Vßü!¬ît‡|)<é]Œ3·,»tGjÚïwÄ u7+\T¸ÚöŽÒŠŽ]»Û꥙æ· ·[ªè¶ö3uäCÚ$)Y>}ù³æ» Ÿ¸âšË3/“ HdT”ºZódÝ0þau—§6OŸ[PxèüMu7ùÚ(å2mññ˲ý‘ï’«6ïRãf™4Í/o n©ƒíïƒ[’z@nyâîÏR’˜”,z)ögªn|ûAiM§n= Ç<éñ.Æá¸%©7è–[³-T'IFD42˜ÖÃ]Œ³öاæö=]M5ØÎ¶Òjƒ©Ì7Ï ¸eè·4YÇá@…Í[´ÒM«éT65jx·ðˆˆ¬½åÛß»;K¼4®‹Éà–:Øþø>¸%©7è–ÚïÔÎ*[¾‹qÖžO.ß¿ü/=ú LoÙ:6..2*JöAºšj`Lûº×<ƒà–¡ÜÒdèèƒO–|`uÓjYk9xîFþsól?¡MSÓ–¾¾Æ_o n©ƒíïƒ[’zˆnYoeoìbìçYzá–üÖ!Z5uï†ê[?ü³æ›gÜ2t‚[𬣯Æ/¿ò¹«‹³OQÕù^YÕ½ïUsáÊ7üò¶à–:Øþø>¸%©7!â–žïbìËG>VwPqÅšMûN\©¸öuõÍÔÕ@¶5S›§ËSÝfu1ß<ƒà–¡ÜÒdÞƒ–’M*\]œAÄ0¥¦|fýò¶à–:Øþø>¸%©7!â–žïbìËÕAË-WÚîªÔ²®†0R7ùróÍ3n:Á- êØÞèvÚ‚¥RòèˆÝ„K^{»eÛöÚ@ Îæ?|ì„”fi…ë¶Ù–]º#57ñËÛ‚[êðïögí]ºEÇÄ&5M1ÙKƒ ¸%=¡Þ±[Z¸‹qX/%º‘Ò9F eYþéªä™ç_§#rumûëïŽÉêÑÛÕæ· à– cbãäé܂Šk_«‘»Ž\ý21¹©ÍÉÝz°ªâÚW÷•Ï\T ÎTÉ2Óxþ£&N «”lÙêu»+ÏUßú±øøåÑùS¥°gÿÁ~y[pK~ì¢ÒÔéôZç1ÓKÕ}«ýÕfK‚[ÒêMPº¥å»‡å³²¥äñœ±ÛËO¾|W¾¶ôüÈ#ßR?pÏ[öguÛ÷’ÓŸ5jÔHJ&ÍZPTuþÐù›¯®Ýš–ÞBJ&Μ§fe¾yÁ-C'¸¥ÃB5dí^²jó.u­·Ž®½úÚ~ýt8ùð:¼Î.6.îƒÒ¿¼-¸¥?vQù¢¡úú¢Rûû¬9ëZÃÇæºQà–ô„z”niù.ÆaùòwÞ×ÍJŒñÀ©kÃFÓ-úO«Þ³¿‘P‡NY¶Ë5Ù<ƒà–¡ÜÒaᮣg³ûô—¯–ñ ;g÷ÔÊKÎ\5qŠ”È )ÍÒº÷°¸ð-ÝPBÎ>øŸ½‘?k~›™2m\||ÛŒŽ£ó§î©¾è¯··ÔáË.züνÂuÛ´ß›¤¿9ë6]«]fgkBÚ#­’¶ùì}q·ÔuƒPî  J·ôÆ.Æaù²Õë;tÎ’‰U>9nâþSW¥°èØ…ŽYÙ‘QQ-Û´Ój®ßS6lôÓ­ÛeÈî)³K·i –ª£š¶1Ó<ƒà–¡“PpKâ0¸¥ßtÑòO¿˜SðªºÝgxxøI«ïz/‘/,ÃF“//±qq]ºŽ?isÉÑ_µ¡n$g© ;…ÜÉ3’SR¥¦”«³°¤ms \ýÒïFȺ¥}7ñž`ë–ÄÕà–¡Ü2dƒ[êðvÝ[séé©ÏÉ÷}ÙkGEG?5þu/6kâÕµ[£cbu¯FGǬ|o‹6ŸcµßKazËÖϽø²íB¥=¢Ò6y*í”Ö×\öê{‚n鬄xO0n4Á-C'¸eÈ·Ôá½.º~oÙÃOŒT·Ãh’”· ðÐù›¶·‘j“g/”ù„ÕÝFJZ.í÷Ò;Rni¦„lO0n4Á-C'¸eÈ·Ôay­¹}oÅšMºõP»þôV­¬xýègŽOz·Ä(&ÍZ %⺠g,,òé _ÒM›;y†³ÆK;¥µé-ÿ~Zç잯¬Ùlù]JCÁ-]ê!Û ‚[MpËÐ n²Á-uXÞE›¥?¨vÇâ+ßÛb|e„%FÑ÷¡!R²ãÈiÝ„Å5÷¯>ÎêÙG7íûûÿ Òfi¹æEòYû…‚[ºÔ B¶'· šà–¡Ü2dƒ[ê°¼‹ª½ð³ó—˜¯ìì©É:ǹÒhÞ¢•nÚ²KwLþ/ò_8l’‡ ·t©„lO0n4Á-C'¸eÈ·ÔayÕÁîœÝ³pݶw~2¨l‰QDGÇEdT”nÚw6þÔ 9Ò~U?9µ™µoQ(¸¥KÝ d{‚ApË  n:Á-C6¸¥Ë»è±Úï_zcm‡NYjwÜ¢uÛE¯¾élaKŒBÝn£üÊçõ¶Íáüm#í\¸ò[µQ5å¿ÿEþ#kߢPpK—ºAÈöƒà–AÜ2t‚[†lpKÞë¢kv8d˜301¹é³ó—”^¸¥«c‰Qôô°”l:PQo“ ŒBÚ6uÞ‹‰êêàðpiù»;K¼ô΄‚[ºÔ B¶'· šà–¡Ü2dƒ[êðvÝ]yn̤i±q÷ï#;&ÿÙ¢c´WÝ6 Û#`Ó,•’GGäè&\òÚÛ-Û¶ŸýcbãâwÎî©•—œ¹>jâ)‘Rš¥uï;`qá[:Op8ß'ÄÝ’ž`&¸eз à–!ÜR]Ô÷Á-I½Á-ƒ&¸eè· Ùà–:袾nIê n4Á-C'¸eÈ·ÔAõ}pKRopË ‰ÿÜrÁ|ð¬Üū޸%Á-I½ñ}ùå?þÆË{øxm@H[Ü’ÔlL‚[Ü’ÔÜL‚[Ü’ÔÜL‚[Ü’ÔÜL‚[Ü’ÔÜL‚[Ü’ÔÜL‚[Ü’ÔÜL‚[Ü’ÔÜL‚[Ü’ÔÜLÒÐÜrÁîÄáXÑ`Œ{( Í- pÁ-À*pK° ܬ·«À-À*pK° ܬ·«À-À*pK° ܬ·«À-À*pK° ܬ·«À-À*pK° ܬ·«À-À*¼ê–¹¹¹Û·oÿå—_¼·h8xÕ-xà™ÿþð‡aÆ!™AÜRÉn|é–H&@pã·D2‚ÿº¥N2‹ŠŠ¼×ð6aaa&õÏ{üîw¿ëÕ«×;ï¼óÝwßùûý€ŠñqK”ÌãÐ-QJp[·D)ÀÄ-QJ°„7¢”`ÿSãå  endstream endobj 20 0 obj 31070 endobj 22 0 obj <> stream xœµXI«ãF¾ûWèxNwõ" ŒÁë!·C!·L92—üýÔÖ‹Ô-' ôl«»–¯ª¾ªns´Ã_‡?3üæp„aòö8 _>~ünøCÞáß—ß×׬?ŽÃ8úáõËðýӆׯ?Œ5pþ°'ãŒ7á 'ùëH'þÎádæót2þáÊÏ?/çx2÷óϯ×áÓJ«3€ÖµZÁ²LÖG0æ©V<¬=‡“u•¦ ‹·”„ñzJ|ö?FzlHq‹ˆá,"`Ï"¬€·6Ž[.Vý céOÖ8Ë?Û‰Ÿ3Aô¸Ê[A^ö°v{±WYD_n(×Þù­Wp€b±ëY¤Y4˜„7I{à·ÈX(üd¢õô› ‹DÉK-ùTÇ ·àn–@©qÓ=¬Œ½•·Õ¦)‹êYBÙP-H2¯(ž Ä%wf/Û3Ò*‘Ë?Ô¢àF¯ÅYÚ5·j5Dª‚ýSgRÎ.ì•‚Hº+U6¤åøG‹²íe‹¿+@‘jI>GÍ •›tîf‚G·Ê„U©e_ÕI,{¸•2T°/ãç}Åf<®ëÓ%.Éã„Q>* $<¡ ¤Œ™Y‘4ACÀE¾Z]¥ ‘Ú³"–àòOY†W8‚b^Š'Û ¶ŒÑ#aš¶¨jcÛ ÝmfΈ¤,·©®ÅÄMÒ´ŽH³ébN¾^Eâ_•tEÙÁLH“'꼚RG°Q8΂èvH¨æTéDôw1Žú·ÒßA¹·ñ œá¿€N². @ë(7wŒÜ5ד«U“À¥Iþ}”üÜv†ë;(u6¶þ³N½«Kº°k]Æ7­ªÄ{T¨—R´—̰ „íf‹¿0ãÚlóŽ¿pÏáU·¢ã£0LF&œ£áHWaŠr‚H}Z†9~{”­ÁépåuxÇëÞÆX‘rÀP¸[eä5©m*gó›>ÆíL>^6÷œ;ÿ’.ülp<^Å÷ùD½êëd.Žî~ö.3Âö°AÉ…™¡¸ßâÉh›ï¦w<émü'¹X·Òeœþ/ÇyÄðšÓíRúŠöëT|d$äùæ2Õ{[·xN¼‡|‘ÝBä…»ÔÑ2©ü2`ø  '…Ûg„6×Q;H åÃS¡Ó<Žê†åt¢“u5ª¨ ‡/2Û)i£ÀÖÁÙM1 ‘…tRZ²¨âYµˆbiË©‹ë2Êžª+¤UxJéwÛe_ñ1Ê"ëRÿõÆ‚·b{ØÀÚØ ÂEº(«!éd6gñÉäøЮsΧ´q†ÿñ̜ʷ33£¿ÓÞøhé ±VC½ôõ{w=´«å úÝ)Õ`Mw½á ƒYÝJ¤*à3vLÎbÏZ†}s2+£Eï¨ZIw›W6nÀ ‘¡3iT…·Z!:viͨKùÚú´êŠ_h› éÓs±AP^•Õå¼×á,<‚Ï+/ÊH%Çw35¶#BZñA)\åÛŒt”sóXز:î'VÇ÷b%Z -ïÑ­GÅhŒé•Œ².K+ÆÓ¼åeß`@°ÉÕ¼å¤M^[ͲÊ5íaqž7â¹æeJ%`yõ’§í¸7lWîÑ‘:Ÿœ—æ¡wö¹N¬‚w¹*0Ô3:Zö¬Û%F!Æ%†éþf79|lo ¦êP™"§ÇŽ+¹?¨sæ’âÙÜ4œ«òÌ>ä†Zi¢w²aQIÅæŠÎÔ¼îyÄþÒ•&§7ùku…‘s¬îä_$ÚÛ'•ns¶Y¸[ÄóäÓoFƃæÕØLCj¿wÀùŠ»™³óÅ0¶h[â½}QløPÓ *Qeß§áoÀ# endstream endobj 23 0 obj 1389 endobj 25 0 obj <> stream xœ•ZK$· ¾÷¯¨³i‹z–€FÝÓÕFrs2@†O‰í ð&°/þû¦H‰¢êÑ;Á,jJ%ŠIiÖœaúãôÛd&ƒo!‡³fçyúý§Ó?¾™þ{2çl Çiýû÷_N!žÓäç4}97Ÿ#½ÿ:Õ÷äξŒˆhÕ¿O?sR“£‘ò(dÔ¥-LwR|hZø4bùˆ–µ¥Ã€é4š>˜GÎâ³-L§ùдðiÄ<‚, Õk¥Q 3ˆóªwŒò¢Mém"¢óþl]ðlÉRT –‚]Ð…Ž /¶:Ôo˜úðç°øf“u°¬G+‹9¦|~i’‡D>oU›Ý&cø÷kÎ:É—ÊPêŸ =HêH '•ÌÕ"•¿K‘Fæ2³ÚƒdÊ-‡Mj £æº¹ T³€ ²v­/ŸÔ#žèˆ4é5w•M¯ëÚ«—g¯rµFÝG{jzåŒ"f¡a±©ÃrdàÃBÔ½´‘Å\Ë‘ì¾FÐÔ(>œ±ö*²\»¥@¬X*–y["Ȱ2ˆÏ«fȦ|^·Cµm¨y½µ@ öŒ1’Ñï£ç6íc·œyq€ï1ãìé‚õœ´ÀÐu­F2µòŸ_N3Æ•õß¾;™é ë“å÷¯Óßw¢Û&¤Qi'û¥†*‰¯ÉBj`DM™,ï‘BÙ[Õ”¡{c“ Asko¶Í„ ŸìW[ _–ø4,QAš´R«ÔP'À“%¢šVIAàPñ‚…xQ-emMŸ¯c0†mß§²ØSš¿Ê.Õ>Ÿ.®®8L[ìfé¥÷`×—$…0HÊÑûHómNV®.-Iet^ȧö»Ý³¨äÆ™µ'¶u'ô­ŸVüucß(~8¦T² uvlb?áè®|âh´Kƒîz}AÔ{EûÞ›ýE5ÕU~îg'hÅ@ºÌ’ù äÞe÷Ôç]DU¿£…æ}¬½—Õ!ÊTÝ"íd£ýýÙ¸:u+d'2[wÓÙÖv¶sÔÔ’wP2RR©BŽ\KYŸ8‹ÌF'ž®u’$#è¨OcO’|cÕ0a~]„Úb¯OJ†Š@kjôµØWœwöhg2Ôxjª®ÉŠP ÒN¶m]´ùm6ŸÍÙ"/„r+aK~+Q†Iø-t. ƒ2F÷ëë9 óysC,©–'ÌEgI›:‚­“cÚpS\2gDíÏI.š]P»!‰ÝÝ7UdjWÅ5£ß ¸ªåP9·æGµÃ𣶛Ëm¶ù£c]¢ |m?AÎGaïHÛrÓE¹3¯‚\hr{Ñòv_[u™ù:®ò[à8ô t9'\÷OÎ7nŠ<}¾q )}6EmooIÍ(ñë²,î0·$I×~#ïáÛêîÆû5¯Ø;p%©^°vsÿÏû6”DÁy¨hÈÍÚ:d …ÖN–|3sØä࣠»¯D_ ›Òˆ{C¢¶9dG>Z=¢¶‚ Òë=eõúO3ÑPòôSà¬uó‚J·ÜÝê¬*¥ú¨+*mçSź{Hâ­]ó£2$,«-kvu„RqUÉ¥má΢W‰úµ‡ríûo|~aMIÞãVìJ‘ën“gÛIiØZƒBù¥û2œ‚\¶÷ÀTöܺØ!-½cѧoxn“SkM£N]oЧ’\ÛHl$ƒ¾Âüò*è/îè®ÊΑþÂf—È_Qd¯dǧÏò§Ìy‘-ÑíÔúû Ož¶œ8#‚ê'çË3”ÊÚþóÃoô1{œŠ>”ê·ùbÓôøßT¸ý <¿ endstream endobj 26 0 obj 2221 endobj 27 0 obj <> stream xœí]yTÇö~þŸœ“?sF\`AY$"‚‚ ¢(îF£‘ FAqOT\" MÐDE£&&àŽæE%,eÜPqÇ…hbâyïä˜ó~”vÚîéžîé™éi«ê|‡Ãܾµô­º_WuWßNMeIŸô?Ç'½O‘%ËÉ ]Ï’«%ô{ÝÏÿÇàL\øõ?Îq7Ö¹®†¦Ç1¦¥31gt>ÓR Æ´Ô&æŒÎcZjÁ˜–ÚÄœÑù`LK-ÓR›˜3:Œi©cZjsFçƒ1-µ`LKmbÎè|0¦¥Œi©MÌÆ´Ô‚1-µ‰9£óÁ˜–Zèδÿóôƒsñø¿O™3êÆ´ÔBw¦uÜ‹o,YMº?ÚÀ˜–Z¸ÓênÚ@üY^/Ë3·¢Œi)cZ}-ÏÜŠB0¦¥Œiõµüíqßì?¢{ µ[Þ(nEŒ¯»Ñ8dåEDF·w÷ðíä§{cÔ‚1-…0ÓòÓ» Óto¤FËÅ­´0íÒÏ¿´/KWßzÔÑÏŸºw¥Z0¦¥®Ï´aåßrËÏÎM[Ù¾½;ŽflÊÖ½Z,o·ÒÂiã&O³/œl íÉÎ/©lü]÷®T Æ´ÂpLËaYæfí?d„îíÔby£¸•¦ ‹èm_¦Å¥Ö ³YÆ´¸L[\G}|;âÿòk÷»†õÀÏeë6 ÔÒZ–®8 ÝÏHly£¸• /Ž_¹‡Ÿa½êšo™Çéí㋾ˆ0x˾CœÚŸ nø¬ùv79t°úBÜÄÄÐðžfsxdŸ Sgî.,TZvégdNÍíÇ ³çwôó‡rd¿‚2Ÿ)_¾ûaêŠÞ}ûûvò3{z¢mñÓæ®½dñt¾=P8|Ì;¤ÀˆÈèùéâ¹±’ÚÆ´¸L[xúŽrDöüXѶm[8Å¡š‹œN~e½»‡òœ¢JÝOÇ¢åâV‚¾¨¾ù?ƒº†lÝæP„DMŠi×eå´w÷jßÞ}íw{ø•V5>h®%8dÁÇ«95‹L[zñÔL¢„ñWqNp.X µnÝZ Ù³O?>Ù*l¡m`LK!ŒË´‹V®ÁÑCßä$įûR{çüÄ_L± ¦îç"ey£¸• /j›ž˜Z ÛI3ç8q¦òÆoûJjzEÇ@>hÄ[2yÁŠ|;‚ëf,Lͯ:~+¨iH^¾ ŒÝ¶]»âsÿÔrçr1õï´$#«˜WµXf|ÒlüÄ„vÇá2èÛ Žì-©–ɨª…6€1-…0(ÓÆMLÄ:Ñb®Ì콜چíÿÖý,ä-o·’bZn9oU“ûÔÕ U.uîÒUœËy«µüÔДúÙ˜—‡x˜ÍXò´vs«‘¸âùPÕBÀ˜–B¸>Óò%µMOú  aü´9R¹*'Þ„¿•7~Óý,ä-o·²ÊŸÊ5ÉFh©†çE¿Ë×RrþVHX¸T™üŒä¦Sõ­G2'«ª…6€1-…0Óyçˆ#|ý}Å\Ió㨷/þN»H÷³·¼QÜÊŽLÛ%$?Ë.ýlóË'L™aj™m~¾u×áÚK˜iWß|H¨ ²ûw‚¤¸þ¦L¥ªZhÓRÃ1-@öü½!ö…íǰfô ì\PÓÐÑ?ÿo;Tªû‰ÈXÞ(neG¦>?w=¡e ädB»çÇ ¾Nn……È&±ìü™JUµÐ0¦¥FdÚšÛ{ôŽ25?øNâË+®ßíùÆ]êZ¶Dâÿànaë~.R–7Š[igZ®榭ÄÏ·Þd\±ákt·ÕJU-fOOü¼§0fÂ$²o¶ìò]N8kÑR“(by~kC mcZ aD¦rŠ*ÝÜÚp¤J0'ø'6:Èu?)ËÅ­´0­»‡’%™XÔŸk<~åžOÇNŒO@?ž¸úËŽÃeÉË2ÈTAg)¬¥gT_ü|;~òþ²SÇš²òŠŽ5jÜ{ä>@ʪõÜûÂÓ×Ú´i93¦åWÖ×ßÄ90¨ $Ó“SˆŽªÚ€—†i‡¿=‰6ÒêÈá'Ø,ø&‹¦Œ¾Iq¿Ý…åñÓæ„GöÁzåŸ4[üô\j\)/A- Ê´À´ùKp!Ï‘³òŠ1ƒ”œ¿Åé9u³ÈqT÷Ó±hy£¸•¦<Œï5lÜKn¤ RŸƒ …µ|öÍNAQ Ï£§®ÆMLä×KðÉÆïÄïµõèůZy mÀËÁ´¸h‚3›÷x´n-õÖssr ×2Uú&‰~µMOÞ›:K&×”È+µ%¨…q™³2c=þýòk÷ÉÎxœ@„ìÃÑ—#îÁýû÷uq+q_HõŽXž[~¶ïÀ!˜Ùzzy÷îÛŸ Ï\Ÿ8}~BŠ™C¿AC—gn©¹ýXáËWmÞÖ£wjÇŽOœŽ‹,„ùUç1Ýw ã+o;X÷þL“p!ƤenÚJñ6…-´eZŒ¿ÿþÛ Cbñ'kÑ,Yn²´³]¦§ª _’—¯"‹A8>‹=n5‚y?Ô«ƒÏüôŒïKObºU}ëþb.Š5Ùï·bÃ×2µ¨-A-\™i_nØÆ´¡¡¡«W¯nllT˜…u®«Á¡L»bÅŠ×_=))©¤¤DŠrí2$ºõˆèäX}ó¡o'?ÌdÄ;ñdæK .Â%L¡~t¿¨˜XÈ¿=Ph1×Çë›+Š<\¦µ%¨cZ½`Óúûûÿ«%µjÕJ!å²Îu58šiÿõ%úu/Fðãƒ<•Ú¼W{çÁ!q-jKP Æ´zA#ÓrÉ*å²Îu58i¥(Wû ·4ɶºœâ*üÿΤ©5e˜³èÜ “(0…<Ó "øq 1“—e(l¿¸µ%¨cZ½`/¦µJ¹¬s] ÎgZåj×ï›=½BÃ{r’î=#Ý=Ì'®þ"V–aN²$—ü&€8‚ÁŠ/¾!GÆMØ”“oõKâZÔ– Œiõ‚Ý™VŠrYçºtdZ’4‰U›³ÁH‹V|ÎIHܼ•_n+‹9­úÖ£C5?út-Y°ƒÖäõëd#øq˜ŸžÁm)Á?‘ý$Í[ M‹¯ä[¬EU jÁ˜V/Àò¯½öšU§Ð’^}õÕ5kÖ¤¤¤è~² |€iÚïV“F<¬µ›?J^ѹmÚ´é3`XÙ$›¦~¸P•¾IvŸÃáÚK³§‡EôâGz÷0›æ$ÿÔÐ$®EK jÁ˜V/8nNûÊ+¯Œ3fß¾}þùçÿØœÖõ`è9íÁê `¡Øá·†¾5¤$þÂ…˜*ÝÜšß\xsìø­?—/ñ2ü(½xgã®3¤€3IÞ7ºvÃå@P‹–Ô‚1­^°;Ó –K¬s] z1m«V­BBB222´ ‰Ù-“!Ù ÓúV9ͪ¾’~2Ø]XÜ- ÙÇ'N·­UKP Æ´zÁ^L+E°\bëjp2Ór{ýúuC¢öÎAoÈ0­_`ç“w^x¹C;ÓÖ)ˆà'gŸy#ØæV‰KP Æ´zA#ÓZ%X.±Îu58‡iÅ«}HlÙw„3tÔX‹GI%O¸d ¥/Á5b¦-³´'w;ðvá j±¡µÐ´jmèhdåEDF·w÷o·sAØÆ´aaa V»[‰ûZÆýÐØ‡™«=Up(Ó®\¹RŠ`µ‰·Þhâ}J^€Ìì}&Q 4{1­T¿ºç¤â&& ¦ÓRVo0½¸LP‹ %¨…^LKÂØÜl1ªo="ŸZ0ŠÚÆ´OŸ>U›ÅqLËOã~Ø¥•0­Ý‡“CáP¦ý믿4$Ž54µkßÞìé%µë©ªñWŸ¶íÚñ?d/¦­“ˆàì(ø‰ìÎŠŠ‰ÍØ”_Y_vùnõ͇…g®cðÞÔY­‘ÜÜ6ï=(U‹ %¨…^wÆMžf_×(8Ù@¬—_b÷]ÇŽ€ÑcyÕ)ˆûá¸~´ÇîÃÉ¡0h,¯´–Ë™üS¡øis ƒ ŸüÈ‘¼¾ ‚‡-ûy˜ÍRÓúxý×òµ¨-A-ôbZòî› „Ë«íS}ñ0-©¸ŽëGŽÝ‡“CaP¦%Ÿ–ŠÁB°½àt ©päXíYøü‡Ê.ýœ¾ö«Øa#»†õðôò6{zvëõ~ò²Œc¢­°kQU‚ZØ÷îÁñ+÷ ‹èU×0mööñõñí=`0.D‡D'ã'þmŸƒÕâ&&††÷ÄEý5aêÌÝ…åk jn?N˜=+Mh’O–ðÓ?ú—ï~˜º¢wßþ¾ü`:´ —]‹á41„†y‡=?=C<§²Ú<µ–wY·R229ðã~”_»ŠŸËÖm¨‘IŽJE°´Ø«æ„ŽNäо’šw¦…tÇzÙË»C÷ž‘¤|\zá¶vc”i´À¾L[}ó¡©%ìÖýGÅÁ–!¬“uuY9íÝ=G±2]ûÝ®ŠªÆÍU‡g‘$I1-–Ð4‰¼I°Å³2þ[!$õìÓO¶Jš§ÖòFq+q_ó!ˆû±çÇ ô>Œ|¨æ"§“_Yïîa†<§¨Rªû2­Íà r‹)8´;?Ô¼m`LK!ìË´µMOL-sí¤™sœ8ƒÙ>æ½¢cL²ÏþêZX±ƒoGÐÝŒ…©ùUçAq5 ÉËWaÀ·m×®ø\ã³*Z>x §öï´$#³©W•*3>i6$˜Ðî8\5«ð'„ÃFÇqj¹gQ…›[¸-Èu­Þ²P4÷Ñ(…ÍSky£¸•<ÓŠã~ì;pú‹ôÖ5@Sm]òLë á„19òœlÀü+£»s;wé !¶Fc2¦¥vß{@„ã&¿ð$úپߠ.2yg.Lkf¶Å邱Ї|^ú§‚¼XëYmOÿ!#°ôË-?Ë~_zÒôb¬¶ R Iš·˜¯öÕž<ÌÁbSÛcwò´‚U-ÓR×aZ²MNüR³Âz-Ê'L™aj™À|¾u×áÚK˜iWß|H‚ð5ý;™¤?!¤¶yª,o·²hs«q?’æ-ÆQ29œ:w‘muÙÆ´Ú‡‡üÊú¥k6’Ë RúÚ¯4“1-…p¦>’]GOØV¯E9™Ð’¯qÈ­î'›‹²óKd*UÞ> stream xœ•ZMô¶ ¾Ï¯ð9ÀLDÉ’m`0€ç«hoiè¡è)MRy[¼¹äï—Ÿm'ïb¯eQȇ)i7œ ûýðµ ]À·<åSìÆNc÷ÛO‡¿×ý÷NS€©tëß¿ýrÈå4t)ÄSé¾rñ·´~í¤ljÞI̽šÌ¿?w¨† ‚ò>äS_ –rÜY1LTZ…챋†ÈwW–V?";6tÑ9ÃÝÇ„¥•zሠ‘ó8Ü]qLXZê@÷ª2;+‚Ê{¡‹K9î¬&Ê-˜R#tÑP9gtN–֡ˆÈyî®8&,­R¡Ë†Èyî®8&,­œê@÷ª2;+‚Ê{š¡ËK9î¬&*­˜»‹†Èyk¸»â˜°´ :B ‘ó8Ü]qL˜[ÓØøôï&Å(œNðSÄõã¡Gaè»uß?gì>~þÇ9@ˆ—#œC }È—x…›½Žüš/Ç|Óe<‡™?\ùyãç|)çp¿üóã/‡ÇÇá‡Õ¬”dàŬ“ç£G á©Z<.ù ÉÍ”Uxo’<œò«Iúj ¾zì yc7ôu]Bô·Ë4™2hpb=Ži"ÕÐpQšŸ0\ޱHw8ijÒ8ˆ¥#+ 8.ÅÚÍÜâ8nà·ixeó)[ÞG½adù ÅãMÑ¢<ÄÉ=½&°̬‘=sV·‹—-,>"®Î`sëˆJ8½~ü‚Å«t¿/Ôÿ럡;bB¤¥—_»¿m¼ǸcÑSú3ŒJ2鉼¥Ê%ë®=ðÀÐŨB+“í#ŒŒhÎQIBÅ#Žê«Ï Hâ^à„Z¦kçW(ä öu¬ÜTõ§RoAQdôçt]9 ߯uЧ´"0=Br&ר‹ç:ã'ã_GSm¥=;XWŒ•&™?-ÒȦ ÛBI:èÁºµgYÉ/™¦T•5&LÇrÜ‹` äÙêr(U Ž‘Ï,0ÚlI‡F‡UÒš·:ÿ‘IY¢*’X]ÀNùt³œ3n?ùÅn†¼ qu­ÖÕcÝ5¹¤ê>Õ×Åú“d.3÷P™-–Ä']œjB·@â¤XÇ|6ö"4Ì'IHi€œc1 ..x (üŽÎ2L˜å˜ÎÜj«eÞ^ õÌÅ¢Ðr¸%V¬Üª _⌤õÄâ¥Æ[¨Ý•ÛR?ÝèÓ¤<àëî [x:ðSÍJ穼YB0éÆÀ¨mw¡ìѦÔ½àå ¶XJµRÏÓg÷Iõd»”mÌZ=8ÉqCæÈ´| ×p kvF÷[‡Ú±­nÈ…cIj+êÛY—&ö]«E"ŒÊêw³H¿3óℹ’iST/¨.bF»û3:b8C’âR'ºzGÛÁÔ]!¨Ä¨¶%*~Iw9GÛM€öF‰¶hù`Ї»ä ~7õX¦I¡¼œt™è8·wx¬Æ4ÆZ&p¿%๕ µ)Õ=l²†l’°ª#=¤ØASRÝ"ÃûØÉqMø–„HÙHŠîÌÔâ«Úm‚è(²})}Û~äÁ>ÁUƒ• ª¸¬w7lPÚôm'5si™Ã0É"Ð|.¬pÚPgõiéë7Ó±ðʨ^>ŸX¡I˜ÓDŒ6…sèq3sò¤‘)=jÁYÒ% kFiíÄŽwg?m$R|ÈŒO`w=«»¥o£ Ñ=Ã2bÒH˜%ð-æÜ¡¬¥[_’&ÛskBcY¬`ç´Ø–IVo³éB6·)êXLjJÁ²R]©è‘Vökt±UÏW©1öÓ ÜT×Ûä555xFußì“M<7ñ ƒêƒò–cƒ,Ôra<Ò”^1åï@LtÏñâyI‡Ýòm‹-ÉÍú\æ¶Qwm0¡,o3+ מ¦JläÊš4=ñ+öá+óiHòûŽT³oÝq›+Ï;fz¾ÄY¥0pÔ6]¬‰,ѺðvÚ¾œ¦õá÷~°#¿ì¿²ÎûÔ nn4óëCƒ›2e=ÂÖC`˜„ìƧ$Å~À@”Û‰ï¨gH=£´}öêH‡%Æ]žÅÒî¦ v¦š'ÊÜÝ3/Ï:þ\×ï.ö¡'ã°9)Ö»µ½äwBF­bð5õ¤zÕ²œêyð¹eá­ºa\kË·(»Ö‡Ïø´ójcw”¸ÈÑŽÕújïìIãh'ËFÿõ,z5mš*|Ó FZÜ•Wa׃^ïhØ.ík½0°¼±—hê§Ó°]¢v§ø¿ÈË»ƒªmÖ _Z)ã2Íu ¢Þ¾¾ñrKþa‡²õeàv¹o5Á¸K ’Lœf cÒl—Tõ¦ «PxëW!,Õâë®ñÕ¯-©ìÏmoÆñ’¿ñyÈw´¸Ó%¦4êèk¡8ÿc–I4ÔK5e®’fW½Â©‰~Ïç5ï:Yc»žõó¸kòÍE—»Z«W÷G»6ÜO™ݶÆA‹N/BƒÂ®è@~Gw!Q zÈøC÷ÿÙËuip0†+«ˆ›Ú!,P7´â5`¦¿HÖÓFUjäñWR •¸"Æ[„BÖvîøÀs*MÊxLy·b»ñ¿Ò. ³;}~¯Iì-/Ó‡Ê_ P—õ$Ãö¬Š6åOPÄ 0&ã¹ê5#äº:oBçíD0~ßÙGýˆû䘎X 8¡`$ €@î¢æ²am†ˆœ¨QÁÓÞ®V%¡>Чåh?–xþŒ.q²ÍœÓeü&m„jÈ[ª)¨?A6®1T"¯‹m‚wŒ…ÿ»bSmÜ}trwÉûp ‘O‡ Hå3Å6î‡î«üe6c€ö#­ã< öo_ùãÄØØ›ð_ßÿùKŠÝýáü E9ê endstream endobj 31 0 obj 2345 endobj 32 0 obj <> stream xœíiP×ÚÇoÕ½_îýt«î‡[5웲ˆ;".‚kÔhÔƒâŠ¸ï ¨$1&‘›¸&$¢Æ=* (( ˆ (îŠûž³š¤òÖ›¼á}œ“·ß¶»§9Óëééç©QÌ™s¦ÏôùOŸ_ÏtŸ§© £éû_ÏÆ0#ÌùÂìáv˜m ã»_ƒÃ{׿ ŒkS*zÀZbÍ?ê‘ §Ô&D2«‰5ÿ`````¨D2œR›ɬ&Öüƒ¡>ÉpJmB$³šXó†ú@$Ã)µ ‘ÌjbÍ?ê‘ §Ô&D2«‰5ÿ`````¨D2œR›ɬ&Öüƒ¡>ÉpJmB$³šXó†Êøá×ß¿G«gÿõ»1ƒ 2ýÍ¢øúõ·ÿ1fè"N©MˆdV“ñþùý?L?zªþÀµšÍ >;f¿E é0`è"™M¦Tù@XKÆûÎ+Í=~z|˜n*»éêÓ_³B2Óß,НÇÏþÛ˜¡Wˆd¦ˆ5? ¬%ãýCÌô7î‘B$3Eˆd¶"J Öü€°–ÉÑËÛžŠiß¡úÖSÓw²†J›HF/tˆñB$ó$!’™"D2ÛÊ“Œ¯}Uç:ÆÅóoNœjúNÖP±ñÝÉè…1^ˆdž$D2S„Hf[y*’öTÔûúúB…ÍEÇ䛬ÚX0`èˆðȨаðA#R÷U5@adë¨YsçÉV'o>’ˆèÖðþ¾ÒäþCZ†††·ê÷ò°œ¼‚×?Xwuäèñºt êң稉Sv”Ô©ºñÕÌìåÝ“RÂZEÇÆwK˘~øìu®Âüå«?½½ÿéúMT]ÿš@…ú‡ÏÆM› 5%÷k~Ð É$¢Ì↚ۃ)‡È ‘Ì“„HfŠÉl+F2PÆìEPaúâ™&s &²ˆ¨èc—€ÿÏ>þY²U݃¡$¤EË»úøø^ÿÅ˚ͻüüý>øl'W§òÚ£˜v¢€9±¨æ©#3áÒlâô½ï¡¶2ïíw¹:’;5?è‡db‡(³‡¸¡¶ö`Í!òB$ó$!’™"D2Ûʳ‘ìí_@…—_}ÃU“½ÇÏÀC//¯És³ k.VßúzsQyמ½zõ{‰Ì¤2‚_??˜Â^M÷ʼn³5w¾)®½<3{9¼<µµäxƒs&m%™ó³‹O_©½÷]I}ãÜ·VùBøùq×–§MšMº'¥l;\U}ë)šC7 pà°‘òo™rgý ÃZED¶ŽYœ›W~ù¾«k¨Xóƒ®H&pˆ2{HnHC{°æy!’y’ÉL"™måÙH“ Th×1ÖU“1™3àᨠ™üV§ï}Mø5]!DŸCåã¦Íò×ÇeÀÿSæ/ÿ§-\&¨3gY.”Ï^¶’ oåp^­´ëXmõ­¯ææä’‹”ÆMŸK^ŠÜÙ7"m쾪sÇä÷<fsò“SÖªÿÔÞý–Ô  ‚’ŹyÐU²¢å&\½ ±Xóƒ¶H&ïeö܆ö`Í!¬ù‘L?1Žd‚Bøžºç äúÉÜ ¦÷S™ìƒdšçä-9ÓHúSP\!˜ý-!@2É€‰/}Ê,ñZ—óœ}üó á¯ ÚÂüŸk~MIË‘ÉzÝöâåÙ3f/⪭ÛQØ"4LÜÞ½ûq_ep‹*pÓ¶ôÜ­‘£Ç ŽäÉýŠï4›põ.ÄbÍê‘L2$"ØE”öÜ·íìÁšCXó;H&i?Ó»¡r4­¸osò6³)›ÞOe²’iž“W|p¶–< ÉBÓû?}î–CÂkx\™ç죟f/[™Ò7(8¦¹×Ò'–Ô7ÂL Õ`2•±W4ž6iZûØ8˜¬û¾bm¾ fÙ…;£'Oïž”›ˆˆŠîÕ亮ò6Õ?|Ư³jã–¸î AЇ7ÆO>rî&Ÿ¾Ò5!É×Ï[Ëü–ÔwT i/èÖ&(Êš´E2y‡(³‡dCmíÁ”CXó"™~²(’‘›hàÃÞà\{>}ð0gÍAµ%Î_ÍàY¨cú;âËÒHF2üÆÆwkx~YWyŸCà|Æ"±wÿM{qÕdÀQe…–ÊÉÛ£WoÁkþY¹¹Á|}z  ÎÄÉ Æ÷Hœ³,Wümebb²4’é§]å§/.û߬=F¬ùÁÁÎöhVˆdœ\yÀB`Q$+;ÛáÌFîk²4’q%©c_¸éuË¡J‡ó"X™¶ô y¹¶âœ¼‚פOœ9/ 'Í^È/Á‰Rrÿ z¨@6G2 b’4GoNœê®=C¬ùÁÄí¡@ˆdœä=` H`ÉdböÒwMŽœ»Ù"4Ì? píçûýýZ†…—¿mú‘”g Ù®òÓüBrõ—··L[·Òþ’¶âœ¼4Ç^ÉÁ]zôtH-DÉ—ÊÄÄÍÊæH*¿toför‹ÐðVÃãâHÍß_ªÀ‡ž!Öü`öpWˆdœšõû`E$9zü¶ÃU’­ò vsÕ>Üú…éï•<Éš]ñ@\âVÚ_R(ÎÉ+Þ e‚`² ™|’_·z¨@ˆd(XózÀZB$ãDƒåŒCãHÆ/9ûøg²``ZÆtW­jï}G¦]øË-åÇ <ÉÔ¤OÈ˵çä¼&}‚`WIùr«‡ „H†ˆ5? ¬%D2N4HÆ8$XÉ@E5—ÈŒùñÞÉV“f/„gÉ}g-0ý]¸’m‘Œ>!/ýVèG¶Ž’òË÷e6êV‘ %k~@XKˆdœhŒqH°’È’Q1mÄ“æÖ’ã^ÞÞÑ­KêÃ#£àWËWš.Û"}B^ú­Ð'&khWÈlÔ­*"J Öü€°–É85‹dìC‚å¬þá³¸î Žç·ûMâ—×Üù†¤¦]·ý@ƒsi)‡siA~ö vd7$ãF>!/ýVèO]°Ô!ÊŽJ®óLH‡ „H†ˆ5?¸›ÁAê÷‰V¯£•6‹ï‘èÈ-†ÉŽÉ8ÉÛÆ`9$kp.'èííÃíX¢qÓçB LÄ\ÉÀa#/æxeGöA2AN^ú„¼ô[¡O\vþ6É7eþ’âÚËå—ïç2:¦-”Lž›Eê¸ÕCB$C Äš¬ŽdKë±k8@u~$W±ŠfùÇ¢Hf H°"’2æ,†gÃ#£ÈÝs›‹Ê½¼¼`&­¸ò€«säÜÍ à`(‡gM;ÙÉÄ9y)òÒo…>A0èuŸ‰3ÄuKào𾇠„H†ˆ5?¸å(EÍ˦ŽÍжK%gI Š+ÄÉ×L"'ÛX,Šdµw¿%ß {cÌ©Ûß… `jT#§Kð,#é«8)C²õëן?Þ­&¦#™dN^Ê´¿ô[¡LL´å`åÈ1:Ävc|ÄYKVˆï»¡ì¡éd'NœØ¹sç/¿ü¢ -"™)ÒÕ{÷î=|øðo¿ýFßÄêHß]Û.ÁAL§·©‰TúçáÇk×®}òä }Ë!™… Y$ól)C²ÈÈÈ¿üå/-[¶\¸p!%›áà²&½‘ì£>“üãÿ:t¨»l¦’í©¨}\F‡ÎÀÀ!!-ZvîÚcFÖÛ•W ªí®¨>*æÓÀ ç „M}S|å-%¥Kæ¬çž57ï¼Xºúa„ à‡ýë_cÆŒ¡d3MLe¢gñËž¼ùJbã»58¿ñè3pH‹Ð°Ð°ðÄÞý7í9Dê¸Ê«K9¦’¶‘Ì«ûgý_ÍÌ^'na­"àüú––1]pQ«–SéŸ .€Cþú׿&$$P²³HæB$3EjŒ 6ÃÁeMÆ n±™H&™›ÞáÌcÈÿá­¼Mäj=~x{û,|çþ«Q"™dÎzò”éyçÅ2ɸ a3­¾%S“èYü²u÷ ßfH: d‘ŒfL%mã É*¯="éqï·¨æ¿çz[N$ゆÍÉô"™)ÒÉhØ —5Œdn±™HÖ=)&—ÌùÙ%gaV­ºñÕº…­Û¶‡Âô)³H² wÈzƒiÓ O]¬½û-Lâ™ó²¼€É|| !÷j®@Pî*g= yçÅ2ÉhØLÃ.'z¿ìÙÇ?CIhX8P8ç@õðÉžŠún‰ÉPÞoð+2m)ÇÔ•m$_3mÒ4({o;\Õ@[KŽhAáÀa#¹jXN[$£a3D2ý„HfŠ´E26ÃÁeMf! ›édÁ!-`öá!Ú^ZÝ"4Œ›¹&ÎZàZxdä˜ ŽD2®D³ž…¼ób™‚d2l¦!’)Nô,ù²¤0uì ‹Øl9TépÞÑ#Ó–~L%m#ùš)‡À¿poå¨m¤åtB26C$ÓOˆd¦H'$³.k2ɸ³™HFn¹>*½ìÂWu’ú€:[ ¯#³mbïþ\‰»H&ÈYÏBÞy±ÌE2.86[¼x1}ç呬Ai¢g$ÛU~š_H.óöö‘iK?¦’¶¡y›DõŸ j`9½‘Œ ŽÍî?úg„HfŠÉþùÏR~Ä¿ÿýo8;v,++Ëô7‹â‹ Ùßþö7ýFŸ2¸ì×_MÎz L dE/oï„ä>Ó.ûô@™àÞÕè6í ‚x¦.=w«Ù/@\•“AŠyò΋5mÚ4³½ð<þþ÷¿4hÛ¶móçϧï< «(Hô,ƒd܉®*‹ÛÒ©¤m\õçDããìÕÁIGL»AA¾~~`rAM,g¤¢££srr.\¹ŠØ “ÉL‘Nß’q$öûï¿“&8¸¬ÉôoÉd.ÑéŽËc—îfÎËâÏ;­"£W¬Íç*øùûCaÝý ÉåÖþþ\‰+—“AÎzò΋eî·d‰={öŒ4Ñ| ‰ž%_–rôÅÕèÇTÒ6’¯YqåIå&FZ΀oɉ566’&øÃ¥~B$3EÚ"™˜Ä¸ÀÁeMf!ÍTz¯KV\{yéûëzõ{‰Ì5Ë>XOÊÉÕþd59¾Ž4Üp8ï€ãJ$'åê[_‹Ë%k²w^,SLLb\hŽd =k‹dôcJ¹ Ш ™çWXïåo?|özõ­§pNAnà×4Àrú!™€Ä¸@$ÓOˆd¦H$“!1.ppY“ÁHæÖrC†- `sÌDä!¹ÞL¼€öæ¢cPÎ] "™ÔøyKA;ÊNQ" yçÅ2ÉdHŒ m‘LY¢gm‘Œ~L鑌|E¶óh ¿°°F¸¨¬–ÓÉ\‘ˆdú ‘Ì©A2ã—5ƒdn‘z YêØIQÑy»ù…•×ÁÒ¢%y˜1{<šú¦ -”@yÆœÿ¿Úfv(ÙVr‚_ËœÅ/”œ[YÈ;/–HFCb\hˆdŠ=«G2þ&èǔɂ‚ƒ¡D°0ìðQéd 2î¬ÁËi…dÍ’ˆdúI1’5{rd°à„:¾G¢@`X«Ó;Ó¬”!ÙÊ•+)IŒ * Â××ÎHýdßýÆÑ­#³%¤7’•––ºKb\èd£'Ow8×zZµ± ¨æR݃KÎ4ŽÉœ…)“:å—î=OO?vêìƒuWkï~ 5á˜Ý œÿ£4j0—í=~ªÖ\LŸ2«MûŽäG±fMÂBÞy±tõCAA%‰q¡!’)Nô¬ÉŸ{iqn^õ­§dQ/ú1¥G²® IP2"m쾪sÇëïà¡pA~…ÌZõrÕœ–SéŸ{÷îQ’ôHÆÚ±š}N0ÉHV) ßçÉ壬À•¬˜v\&瀎#Í‘Ys;é*»¥‡)Iò†2`­=õ\µçéàE«÷ûû¬\¿™ÿjwÔVùûJ£bÚ8^¼*ÛÕ¡Àô¼ób±æ­LM¢gš¾«rò;8ÿ0B?¦”›­þäsÁKh•ž»Å}gËÕ×ÛrÆûÇ$³''˜òÃeêØ mwœw“\P\!ÎÆ ¬ˆd‚ÂçßQœº8kÉ r»Pî†ÃÆQÐÍí¤«ì†d £ïfÎÏîÓq§.]ÇdÎ8XwUPmoå™W^Ý¡s—€À Øøîäûñ«ÁäÕ£Wo˜¿BZ†¦ L®Ò!öÐÌ­ fç‹5?h‚d*=K¾,%/Áq)©ïpQpH A·Æ”É@«6n‰ëž{cüdrJñé+]’àL¡]ÇXc,Ç2’©‘=9Á$ƒã­¶»>ƒ,s¯X€dœrò6:x?B0Ž‚:šÛIWÙÉPòbÍèkÉS‘Ìžœ á—'o>’Øøn ί¬û g²¡aችûoÚsˆÔ‘I ‚ç‘£ÇÃIt`PP—=GMœ²£ìd¡f¨çã¦Í ˆ„š®ÒÂ>¯ã«™ÙËá¼#¬Uœž@ßÒ2¦ .È$úô@٠ᯑ„³˜9ËrÅÝl÷èåIHV~ù¾Ã™{®ÁyjÜ>6æ¬Ù ¨¶Äyj Ϻ:5–Gù“e=ìDžÚSQÿú¸Œá¬6$¤EËÎ]{ÌÈz»òêCõ;‘ %k~@XK,#r‚»œ !’ÕÝÿÁáü::_©ø§s(”ßÕk6ïò<ëïðÁg;¹M¥#cÚu˜÷ö»\W»ºòÚ#’ÝU°£Šj.ñ{ž“·‘Ü&î={ñ÷6M÷èåIHVvþ¶Ãyý6y¸óh Œ>ìäCõ׸:ŵ—ƒ |×±ZW¯£-’)¶”K¢]§Î‚\ „H†ˆ5? ¬%k!rB³£©’}ü³Ãùm ìíô)³T_¨½û힊ún‰ÉPÞoð+2ma·´ ‡÷›9?»øôx%õsßZCæëçGîšip&±u8gÿÈÖ1‹sóÊ/ßç’kˆ_3mÒ4(ôÝv¸ ª¶–‡…\¾ãçJ2° oo°PlëÝM[ÉqwSv^ž„d V¼ïp¦æJÈ*©ï’\þ”@Mw·%¹éf먴xÊ¡mÉ™F8€À9Ôº…d9S0¶Ê‰H†ˆ5? ¬%k!rB³£©á—¤0uì ÷ß‘ÜÁò‰ê¦Ì_òü­-\&xÁ9Ër¡|ö²•‚¶ã¦Íi¶?)‡žºÈ/Ü[yªEDEs%™ó² dÒì…üjëwqkTÒwR€dp&²ÿäù© –’å`qOÁ'"¹ÿ ‡óNpx¸(w a6BhnmK’©´SpH (|!¶½´ºEhÿCªLˆd(XózÀZ²’5 '47šš#Ù®òÓüBòÃ.à¥LÛ~/ƒ˜â/ å )}m??r’¦?bÕ?|&¨Ù¥GOx¸»¢N¦}÷(eE$“‰ÙKß49rî&Œ@ YÎÄI¥i|¥ ÉTÚ‰ÜD?|TzÙ…;ê÷ž@ˆd(XózÀZ²(’!'¸MÍ‘Œû’ÐUeq[É•‹¸hݶ½ måµG4ý9Ñø8{õG0ÃÆ´ëäëççåí-¨I*¿ ²îQÊcläèñÛWI¶Ê+ØÍUûpëÊ|%c3ýìÇ ²F¸%!¹œõ|z L«ÉP±æô€µdQ$CNp5šš#Y³•ÅÕÈÚV®v‘ -MHW¯YqåY­H2¸jäw·º?ʼYúîQÊŠHÆ/ýO’G§eLwÕªöÞwÄÆðW¼å¶hl¦‡Ž]º›9/‹ÿk½bm¾ú‰H†ˆ5? ¬%‹"Y³•õ8°‹_“5N`ÉHŠªë_*Û®dù¨ ™'š¾—¿ýðÙëÀäu÷ þñkF¶Ž‡ü¤-bÑwRVG2PQÍ%âÀ÷–H¶š4{!*,-Ruã+R2uÁR‡(K#¹(=!¹»Ý£”g YýÃgqÝÏï™Ä/‡‘…Ýåë¶hp.Õÿ·ëK“P1’ih'x;QÑy»ù…•×AÍ-UîLD2Wg=B[H¬ùe$˜Ä­iÈSåÙHf7N0Ƀàáâܼê[OÉb'o> o…¯¦Ûu¬¶úÖ×ÛWÍÍÉ%?àŽ›>WÁ®îš%$SÞñÆÇðYî;xèÐÔ7É·‹Y«þC.p*;ÛÇÇJ¦Ì_R\{¹üò}@ˆè˜¶P2yny)úîQÊ3 {ÃÛÛ‡£/"Ø!ç‹\ÉÀa#)w”$ÓÜN£'Ow8—µYµ± ¨æR݃KÎ4ŽÉœáÐ"o"™¤$3Ó ™µ’ÎKŠ5?0‹db“Ð<À!òòT$³''˜‚dd‘ÁáwÝŽBrÝ‘ zöîG“MX\¾ú“Ï/;°ôÜ­‘£Ç 6ýκÏÄËÇuKào—²{”ò$eÌY φGF‘»Q6•Ãù8“¿®×‘s7ádÊáY·¶Ec3ÍíŸ>É{gƒ‚öTÔ«Ü™ˆd’R–q¾ÁjIç%Åš˜E2e&ñ‡ÈËS‘Ìžœ` ’žº˜Ôw0ppH‹îI)\yÙ…;£'O‡x""*ºW¿—ÞÊÛ$X|€~WƒVmÜ×=6;ùñ“  °øôc×vc¹š[VŽ3¡Cl ‡ø‰³–¬ß$HÓ=Jy’ÁŽ"'ÃÞsêö7fÀç‚jä\žu•ãRr[46ÓÃNG/ÞÍœŸÝ1.Ú‚%:ué:&sÆÁº«êw&"Ñ™GÏò vsßù+Ë8ß Cnbèt ºgÌ~h@$ÓÙ$àyy*’Ù“#J¬…d( …HVuã«E¹kH‚*//¯éMšûáR&Mæ_WIçÉ5$нŹy'o>1À¬ù…ƒ¥Iäg|=²W›âÖüCd(£‰ûÖx!’ÙVvF²Cõ×&̘'0£ùùû¿9q*Éc¢-’Qfþu•tº³3tBW¡Ã%õºZ‚5?˜{ÐpË$Š‘LqöjSšÉtMÜ·Æ ‘̶²'’m9T9äµQdMì–aáÓ刓ðÊe }æ_™ÜÄ ¨9má2x)‡3‰tžrbÍf4˜DÉ\ÕQŸ½Ú`‡°æD2]G÷­ñB$³­l…dõŸ½—¿½[b2™cÚwXòÞZWj‚dneþ%mʉ9AW¡Ã1íþ¼×£{RÊûù;´J­Å‰5?|ÐPceH¦>{µÁaÍ?ˆdºŽ&î[ã…Hf[٠ɢbÚ© &Ü>Û)E´&HæVæ_ÒVœ›X è6tžcxSÚZ‚5?|ÐPceH¦>{µÁaÍ?ˆdºŽ&î[ã…Hf[Ù ÉÈ 53{9}e•%neþ%…ò©„ù‚7"É*Åš >h¨1‰2$SŸ½Ú`‡°æD2]G÷­ñB$³­l…dÜžݓRò vŸ}ô“LeMÌ­Ì¿¤Pœ›X ²¼R?<2J[K°æƒjL¢ ÉÔg¯6Ø!¬ù‘L×ÑÄ}k¼Él+[!Ùé{߯\¿9®[™ªÚv蔳fƒ«%5A2·2ÿJNè|AW—}°¾Mûޤ&¼x;𦴵k~0ø ¡Æ$ÊL}öjƒšÉtMÜ·Æ ‘̶²’qÊß_:pØH² Shx«™ÙËùɈ4A2·2ÿÊL¸Ð½Yo‡’ûé¼¼ óŸ(ÓɬùÁ¬ƒ†“(C2õÙ« vkþA$Óu4qß/D2ÛÊžHFTTs)}ʬÀ ç©ëüÓ3gŸ¾Â=«ɸ/UÜÊü+9á×^“9ƒü¶];u6”èj Öü`îAÃ-“Ð#™†Ù«wkþA$Óu4qß/D2ÛÊÎHFTuýË+Þ'{½¼½¹reH&ÈMìVæ_É —¬‹݃NRþªR¬ù…ƒ¥IhLóìÕÆ;„5ÿ ’é:š¸o"™m…HFTÿðùº=zõæJ”!™871}æ_É º3ri)ÖüÀÎA£Y“Ð ™æÙ«wkþA$Óu4qß/D2Û ‘Ì•”!™dnbÊÌ¿’®ñbÍ,4 ™Ù«™"™' ‘Ì!’ÙVˆd(XózÀZB$ó$!’™"D2Û ‘ %k~@XKˆdž$D2S„Hf[!’¡bÍèk ‘Ì“ä$²%Ùf„Ÿ\6À¡Wˆdf„Íù=`-ïŸßþçœYô ƒGƒÍ@$³É”*èk‰5ÿ`````¨D2œR›ɬ&Öüƒ¡>ÉpJmB$³šXó†ú@$Ã)µ ‘ÌjbÍ?ê‘ §Ô&D2«‰5ÿ`````¨D2œR›ɬ&Öüƒ¡>ÉpJmB$³šXó†ú@$Ã)µ ‘ÌjbÍ?ê‘ §Ô&D2«‰5ÿ`````¨?þhZ²å6!Ìù=`¹0Û2ZÆÿy°ú´ endstream endobj 33 0 obj 9614 endobj 35 0 obj <> stream xœµZË‹3¹¿û¯ðya&RéÕ Æ`{Ú‡Ür¹%›’@ö’?¥zH¥~xfwY>ð´Z¥_=UURîÝŸÿwúïÙ>¥9½ÃyŠþ}:ÿü·ÓŸ~8ÿçäÞgçç|^ÿýùï§”ßË9”úûïS Ó{–Ñ¿Î2ÊQqD„ÀéNÿ8ýôÃÉL7%æQœßS[: ˜ÎâÐtÃQb…ô>·¥Ã€é,M7%æÀ{hK‡ÓYšn8JÌ#7±µˆp0š醣Ä4ô[3í0:ƒÃÓŠÓˆy4ùnÚqÀt‡¦Žó(—nÚqÀt‡¦Žó(ÅnÚqÀt‡¦Žó(ºnÚqÀt‡¦Žóбó0`:‹CÓ G‰yäƒ1í0`:‹CÓ G‰iäç¹›vÁáiÅiÄ<šrWe0š醣Ä<*ÐULgqhºá(1ÒdôLgqhºá(1bê!3˜ÎâÐtÃQbßCf0š醣Ä<ò“1í0`:‹CÓ G‰yä¢1í0`:Æ¡´Žÿ0Uß?Oà#”ÏŸ=ÿáéÏΟ?ýù⼃뛿¸à¢KW¸¸LÃR'zL×·tqóuº¸½¸Óïƒ~o×|q׿|þñ´|ž~\q P -Wð„Iüê8÷)ï¯éâƒá”„øˆI*h‚&±i‚¹þ  ñ¦sŒÆ!ÂG]Ìš>E¸ „o Âù¹ê Âû©ÈHÞÙI¬µ09)Õt†ÈY¥ ŠT‡؇øÒ—aYBf&}sƉÁŒø* …`uAb¶¯ŒNîÁÎfu Á°LFŸŠ_éq_¨ñó´¦ít$ÈKL ÇòÚe®`DzrÙœó´FLjTã8€¦°hGÊ¡KB K ëvÛ¸}G]µZV€ *1ÇE¼‘ù£Ël%RÛ-h;ŽB1õ­©ä-4×"O·=Y(©…üBÜzªÒ㟹*([ߦ@ï1Ý꼿s”Á †>×ÎÑp„–d0§@JôÁ°\²ñ#…ý•ì+)eb*b-ÔI© Kìr€ø;ü÷P&ȵòìY¡*F2‰ˆËÌÈ«™8UËxèÎØéâŸ}ÇÏ[tÑÜm\˜z¿©™+uñmw›FÁª}êó4Б-@YºH$Ť\§˜ƒ_FN X#W‘{lÞ »f~Lm†Š‰G'åÌ!å#[¾Æ>í€ûÕ;´î¸ìh>G‰6²~ŒljÔÔô–….7êÝnªŽ …Ó¤VË9vÀlXñslj.õ'’¸±©…œ’·ÌÍŸ¾¹“¤hYZ»¢¼R˜Ø¢…Qª_Å.D7d%/*÷˺B‹ˆàÙ Â:‹÷¶¼L¤4{ ÙD…®Æ×CuPFÁÕ0ÆZ‘(7U˜F-428“ëÈà°{é͘ñwåÍ\C šVeâN~ˆ?hYjVcÀ\Sì«‚›±Gš¿è‘›‹l£ÕT»˜VM{DZ-§umhðhÒJ/R’®X*¥T44»÷ ·¯¤xH+™¨?¨)©Žøí,õ:ˆ4©õ*›èjå5é-èÄ;Ô>Ç×zw 7«É,M„t‡þ):¯!Ô<˜hÁi+X›‚MC#¢Ôꉬ÷ä¨q)¶ëXŽË{ÞÍ"ÍóC쮓">º›Lóe.qáCCk*Ù®nfÑs5‡¦œµË³ ´9b„_iÿVóU-è"6¯4ÿ—ªÒ¦ð”VŒ¨ƒ´aÚã/ûΨ2h³mäÆe¯ÛÚ4‡ÍI£ºFŠ“@vÉă;ߦP äõŒÚŠ{Ïõ¤Æuã35 {v!ÅÍ’oîNWºl·ÞðÖMè óÚ^½ì­ÃO,¾ŒewÃ{§ò¯vö+¡V/ƒÑMûu‡˜3»4 ŒóÀ—DÝD)÷Eî{eÆßÕLùè—‚¾²†LB§0‹¼ȇ²ujÙ*ž’±ÿþ9xjkÜPVm÷H’¸7'1³šµúi–Bc'4¤~vjž†¨ÜcnïWRÁ£{„}´ªIÑ¿¸‚ˆP/6÷üzJCÝž‡ËÃ„çØ½åâa9\ëgoéª.w·…%:»Ñ¾¸Áˆ> Îa™7ÉjYçæ7¯tõA®Øa¬!«ÌåúùÏcü¬)Îàxkä«—Ã.¶dÔuV®šÂÍršRSásl€š ªµ|¡îänÅ×3+]mHL%yôZƒ°Ì3‚/ØY¾²pœ¢ž_{`Õ–SC›{­¼{eÓ63 …ü|µ×‡m±Ì\+û&áû¥U‹ÇÝ“Ùqz»¨ÓtVšT×yjlq6Û¸N/¶Hãï%¢+Ú ÜagÄ}Q ÏÚ%↖+WAî‘*͠ΪÔÙ]%ÝV=•Ǻ¿–x‰/öO,nÓT÷͹qãÞó ¸âj5ªþ3­~‡¹Gã¤VQ9—Õm‡\&®’²qVOá16$¹šŒIâ®]˜Ug‘(VJŽ(­3×ïan–ÒW 8â%šMI½¶ÒìŽÇ;ï¾Ð­¯þ®n;ü~7ÝŠ×Hj>Oˆ°*¾Ôj»ÄÚ1û'˜`¦§nøþþ2ö mÏzìùé;ÑÇëcÜÆ. ~PÚÿªŠxGÇr̰Nî¸&ƒz0^üã¸8a|œt+µâ`W»_T|Hº±Œ4é[òPÍóàÕ>àU=(tÿ2oÏçô¿O°m> stream xœɪ+¹uï¯ðºáº¥£¡ªÀ<”!Ù5\È"dÕI'„¼„îM~?gŽŽjz·Ã{øZ¥3ÏRÙ]üù¿§_Ïîìð[šÒÎcô—ñüÛßNúáüï“»LÎOù¼üûÛßO)_†3ä|Iço§ÆK.«Ë*Áe¢v ;ýãôË'³­t*°¬Ât ŠÚ-ÎÒám¥Se !*j·8K‡·•N–•´VEígéð¶Ò©À¼òÓ(Ö"ÀnQà Ù®tXVcl¦ígéð¶Ò©À²|3m¿8K‡·•N–Ušiû…ÀY:¼­t*°¬bl¦ígéð¶Ò©À² ÎØ¹[œ¥ÃÛJ§ËÊgcÚn!p–o+ ,+Œi»…ÀY:¼­t*0¯Æ©YÖ~¯PL…“ÿaÂ>>Oà# C<þõüãÛŸ=œ?ùóÕy·uÁE—npu™—}ùkº}¤«›nãÕÝùÁƒ?Ÿüy¿å«{ÝþòùÇÓüyúiÁ58 ç5WðL“ùÑ8÷.RÌÞßÒÕÃ)à=&i‹ITMðk¦ h¼ñ<ÄŒ²ö$‹ES2Kƒ^'QßH4&c Ñaö‚‚z4\Y/4~¥Oƒ„'YqÁÀø‘~ö®Ø>àca•¯üÕbŒdÏ ¶óô¢%GOI€ò•HCe]¼‹ÂCÝcó 4y¬Ó‰!üØ?u3EÉs“¿HµDÂ͘×V„²X*Úm–øWì>ôÝüÙã#&×"{Äd˜D%`Ù‘µ£¿Dû–ä%ÀÉ¥.úš ufdFk$~êl²p /›†µ$/J3ñb*'ÉG&ft¤†Z¥[bPH¾, ,3(¨ /¨1Dò¨ÁñzÀ =´;¶Äñ /kÔ~Œ $ÕfŠÙîa‰ØúÌ1ò*†ËxÕxÜLkÂ)À`¸;ÿVÔ•(œÀ¸€Æ§@:Ic©%Œ>&E¯¥ãø¿mÑ0h”=ÆÊl(æâ(À²>yÅ#ç׊Rå­„!ǃruãÐl˜oX(î$e`]bÙo:؈¡Û-¶pí=mCûpGÑ•§iÙ6H OD" û –­w©„5Kl¹s%eƒ«ªÆ†FÍ•­†PöJ «Ö[FÙÔo-Bkzª‘¹¬éë p·R}$mæM ãÌÌÄÃÈqǬÁî –C}R GéCéãfpâEÙªƒ•EæF–?ìGÊù¶q¯n¢ÅŽŸx)%U\zB¥¸b®:–\cëª"g0ÚÛ’ªVÓ˜ŒÐ!ThÁxnùS¡·û¢Zz(9Û(SÏpPªë Œ3†Tlc\y#9­«wã±4RÉ dŠd«¬¶¬‘2 ZHR‘‹S‰n3ØRyˆC…]·ÑG%Õ£Ub„ë“`o²iÙIZF_%™Ô dûŠ…ÄØ&«·i¡CõSãö%·í«hdRPš®úªi-µª¢H}æÚ[F ÀcÁ€‘[D¬N©q<Œ…ۑК¨éQš=¥AOCiÐ÷&„=+ BÑZºô¶µÊcxl!> stream xœíiP×ÚÇoÕ½_îýt«î‡[5웲ˆ;".‚kÔhÔƒâŠ¸ï ¨$1&‘›¸&$¢Æ=* (( ˆ (îŠûž³š¤òÖ›¼á}œ“·ß¶»§9Óëééç©QÌ™s¦ÏôùOŸ_ÏtŸ§© £éû_ÏÆ0#ÌùÂìáv˜m ã»_ƒÃ{׿ ŒkS*zÀZbÍ?ê‘ §Ô&D2«‰5ÿ`````¨D2œR›ɬ&Öüƒ¡>ÉpJmB$³šXó†ú@$Ã)µ ‘ÌjbÍ?ê‘ §Ô&D2«‰5ÿ`````¨D2œR›ɬ&Öüƒ¡>ÉpJmB$³šXó†Êøá×ß¿G«gÿõ»1ƒ 2ýÍ¢øúõ·ÿ1fè"N©MˆdV“ñþùý?L?zªþÀµšÍ >;f¿E é0`è"™M¦Tù@XKÆûÎ+Í=~z|˜n*»éêÓ_³B2Óß,НÇÏþÛ˜¡Wˆd¦ˆ5? ¬%ãýCÌô7î‘B$3Eˆd¶"J Öü€°–ÉÑËÛžŠiß¡úÖSÓw²†J›HF/tˆñB$ó$!’™"D2ÛÊ“Œ¯}Uç:ÆÅóoNœjúNÖP±ñÝÉè…1^ˆdž$D2S„Hf[y*’öTÔûúúB…ÍEÇ䛬ÚX0`èˆðȨаðA#R÷U5@adë¨YsçÉV'o>’ˆèÖðþ¾ÒäþCZ†††·ê÷ò°œ¼‚×?Xwuäèñºt êң稉Sv”Ô©ºñÕÌìåÝ“RÂZEÇÆwK˘~øìu®Âüå«?½½ÿéúMT]ÿš@…ú‡ÏÆM› 5%÷k~Ð É$¢Ì↚ۃ)‡È ‘Ì“„HfŠÉl+F2PÆìEPaúâ™&s &²ˆ¨èc—€ÿÏ>þY²U݃¡$¤EË»úøø^ÿÅ˚ͻüüý>øl'W§òÚ£˜v¢€9±¨æ©#3áÒlâô½ï¡¶2ïíw¹:’;5?è‡db‡(³‡¸¡¶ö`Í!òB$ó$!’™"D2Ûʳ‘ìí_@…—_}ÃU“½ÇÏÀC//¯És³ k.VßúzsQyמ½zõ{‰Ì¤2‚_??˜Â^M÷ʼn³5w¾)®½<3{9¼<µµäxƒs&m%™ó³‹O_©½÷]I}ãÜ·VùBøùq×–§MšMº'¥l;\U}ë)šC7 pà°‘òo™rgý ÃZED¶ŽYœ›W~ù¾«k¨Xóƒ®H&pˆ2{HnHC{°æy!’y’ÉL"™måÙH“ Th×1ÖU“1™3àᨠ™üV§ï}Mø5]!DŸCåã¦Íò×ÇeÀÿSæ/ÿ§-\&¨3gY.”Ï^¶’ oåp^­´ëXmõ­¯ææä’‹”ÆMŸK^ŠÜÙ7"m쾪sÇä÷<fsò“SÖªÿÔÞý–Ô  ‚’ŹyÐU²¢å&\½ ±Xóƒ¶H&ïeö܆ö`Í!¬ù‘L?1Žd‚Bøžºç äúÉÜ ¦÷S™ìƒdšçä-9ÓHúSP\!˜ý-!@2É€‰/}Ê,ñZ—óœ}üó á¯ ÚÂüŸk~MIË‘ÉzÝöâåÙ3f/⪭ÛQØ"4LÜÞ½ûq_ep‹*pÓ¶ôÜ­‘£Ç ŽäÉýŠï4›põ.ÄbÍê‘L2$"ØE”öÜ·íìÁšCXó;H&i?Ó»¡r4­¸osò6³)›ÞOe²’iž“W|p¶–< ÉBÓû?}î–CÂkx\™ç죟f/[™Ò7(8¦¹×Ò'–Ô7ÂL Õ`2•±W4ž6iZûØ8˜¬û¾bm¾ fÙ…;£'Oïž”›ˆˆŠîÕ亮ò6Õ?|Ư³jã–¸î AЇ7ÆO>rî&Ÿ¾Ò5!É×Ï[Ëü–ÔwT i/èÖ&(Êš´E2y‡(³‡dCmíÁ”CXó"™~²(’‘›hàÃÞà\{>}ð0gÍAµ%Î_ÍàY¨cú;âËÒHF2üÆÆwkx~YWyŸCà|Æ"±wÿM{qÕdÀQe…–ÊÉÛ£WoÁkþY¹¹Á|}z  ÎÄÉ Æ÷Hœ³,Wümebb²4’é§]å§/.û߬=F¬ùÁÁÎöhVˆdœ\yÀB`Q$+;ÛáÌFîk²4’q%©c_¸éuË¡J‡ó"X™¶ô y¹¶âœ¼‚פOœ9/ 'Í^È/Á‰Rrÿ z¨@6G2 b’4GoNœê®=C¬ùÁÄí¡@ˆdœä=` H`ÉdböÒwMŽœ»Ù"4Ì? píçûýýZ†…—¿mú‘”g Ù®òÓüBrõ—··L[·Òþ’¶âœ¼4Ç^ÉÁ]zôtH-DÉ—ÊÄÄÍÊæH*¿toför‹ÐðVÃãâHÍß_ªÀ‡ž!Öü`öpWˆdœšõû`E$9zü¶ÃU’­ò vsÕ>Üú…éï•<Éš]ñ@\âVÚ_R(ÎÉ+Þ e‚`² ™|’_·z¨@ˆd(XózÀZB$ãDƒåŒCãHÆ/9ûøg²``ZÆtW­jï}G¦]øË-åÇ <ÉÔ¤OÈ˵çä¼&}‚`WIùr«‡ „H†ˆ5? ¬%D2N4HÆ8$XÉ@E5—ÈŒùñÞÉV“f/„gÉ}g-0ý]¸’m‘Œ>!/ýVèG¶Ž’òË÷e6êV‘ %k~@XKˆdœhŒqH°’È’Q1mÄ“æÖ’ã^ÞÞÑ­KêÃ#£àWËWš.Û"}B^ú­Ð'&khWÈlÔ­*"J Öü€°–É85‹dìC‚å¬þá³¸î Žç·ûMâ—×Üù†¤¦]·ý@ƒsi)‡siA~ö vd7$ãF>!/ýVèO]°Ô!ÊŽJ®óLH‡ „H†ˆ5?¸›ÁAê÷‰V¯£•6‹ï‘èÈ-†ÉŽÉ8ÉÛÆ`9$kp.'èííÃíX¢qÓçB LÄ\ÉÀa#/æxeGöA2AN^ú„¼ô[¡O\vþ6É7eþ’âÚËå—ïç2:¦-”Lž›Eê¸ÕCB$C Äš¬ŽdKë±k8@u~$W±ŠfùÇ¢Hf H°"’2æ,†gÃ#£ÈÝs›‹Ê½¼¼`&­¸ò€«säÜÍ à`(‡gM;ÙÉÄ9y)òÒo…>A0èuŸ‰3ÄuKào𾇠„H†ˆ5?¸å(EÍ˦ŽÍжK%gI Š+ÄÉ×L"'ÛX,Šdµw¿%ß {cÌ©Ûß… `jT#§Kð,#é«8)C²õëן?Þ­&¦#™dN^Ê´¿ô[¡LL´å`åÈ1:Ävc|ÄYKVˆï»¡ì¡éd'NœØ¹sç/¿ü¢ -"™)ÒÕ{÷î=|øðo¿ýFßÄêHß]Û.ÁAL§·©‰TúçáÇk×®}òä }Ë!™… Y$ól)C²ÈÈÈ¿üå/-[¶\¸p!%›áà²&½‘ì£>“üãÿ:t¨»l¦’í©¨}\F‡ÎÀÀ!!-ZvîÚcFÖÛ•W ªí®¨>*æÓÀ ç „M}S|å-%¥Kæ¬çž57ï¼Xºúa„ à‡ýë_cÆŒ¡d3MLe¢gñËž¼ùJbã»58¿ñè3pH‹Ð°Ð°ðÄÞý7í9Dê¸Ê«K9¦’¶‘Ì«ûgý_ÍÌ^'na­"àüú––1]pQ«–SéŸ .€Cþú׿&$$P²³HæB$3EjŒ 6ÃÁeMÆ n±™H&™›ÞáÌcÈÿá­¼Mäj=~x{û,|çþ«Q"™dÎzò”éyçÅ2ɸ a3­¾%S“èYü²u÷ ßfH: d‘ŒfL%mã É*¯="éqï·¨æ¿çz[N$ゆÍÉô"™)ÒÉhØ —5Œdn±™HÖ=)&—ÌùÙ%gaV­ºñÕº…­Û¶‡Âô)³H² wÈzƒiÓ O]¬½û-Lâ™ó²¼€É|| !÷j®@Pî*g= yçÅ2ÉhØLÃ.'z¿ìÙÇ?CIhX8P8ç@õðÉžŠún‰ÉPÞoð+2m)ÇÔ•m$_3mÒ4({o;\Õ@[KŽhAáÀa#¹jXN[$£a3D2ý„HfŠ´E26ÃÁeMf! ›édÁ!-`öá!Ú^ZÝ"4Œ›¹&ÎZàZxdä˜ ŽD2®D³ž…¼ób™‚d2l¦!’)Nô,ù²¤0uì ‹Øl9TépÞÑ#Ó–~L%m#ùš)‡À¿poå¨m¤åtB26C$ÓOˆd¦H'$³.k2ɸ³™HFn¹>*½ìÂWu’ú€:[ ¯#³mbïþ\‰»H&ÈYÏBÞy±ÌE2.86[¼x1}ç呬Ai¢g$ÛU~š_H.óöö‘iK?¦’¶¡y›DõŸ j`9½‘Œ ŽÍî?úg„HfŠÉþùÏR~Ä¿ÿýo8;v,++Ëô7‹â‹ Ùßþö7ýFŸ2¸ì×_MÎz L dE/oï„ä>Ó.ûô@™àÞÕè6í ‚x¦.=w«Ù/@\•“AŠyò΋5mÚ4³½ð<þþ÷¿4hÛ¶móçϧï< «(Hô,ƒd܉®*‹ÛÒ©¤m\õçDããìÕÁIGL»AA¾~~`rAM,g¤¢££srr.\¹ŠØ “ÉL‘Nß’q$öûï¿“&8¸¬ÉôoÉd.ÑéŽËc—îfÎËâÏ;­"£W¬Íç*øùûCaÝý ÉåÖþþ\‰+—“AÎzò΋eî·d‰={öŒ4Ñ| ‰ž%_–rôÅÕèÇTÒ6’¯YqåIå&FZ΀oɉ566’&øÃ¥~B$3EÚ"™˜Ä¸ÀÁeMf!ÍTz¯KV\{yéûëzõ{‰Ì5Ë>XOÊÉÕþd59¾Ž4Üp8ï€ãJ$'åê[_‹Ë%k²w^,SLLb\hŽd =k‹dôcJ¹ Ш ™çWXïåo?|özõ­§pNAnà×4Àrú!™€Ä¸@$ÓOˆd¦H$“!1.ppY“ÁHæÖrC†- `sÌDä!¹ÞL¼€öæ¢cPÎ] "™ÔøyKA;ÊNQ" yçÅ2ÉdHŒ m‘LY¢gm‘Œ~L鑌|E¶óh ¿°°F¸¨¬–ÓÉ\‘ˆdú ‘Ì©A2ã—5ƒdn‘z YêØIQÑy»ù…•×ÁÒ¢%y˜1{<šú¦ -”@yÆœÿ¿Úfv(ÙVr‚_ËœÅ/”œ[YÈ;/–HFCb\hˆdŠ=«G2þ&èǔɂ‚ƒ¡D°0ìðQéd 2î¬ÁËi…dÍ’ˆdúI1’5{rd°à„:¾G¢@`X«Ó;Ó¬”!ÙÊ•+)IŒ * Â××ÎHýdßýÆÑ­#³%¤7’•––ºKb\èd£'Ow8×zZµ± ¨æR݃KÎ4ŽÉœ…)“:å—î=OO?vêìƒuWkï~ 5á˜Ý œÿ£4j0—í=~ªÖ\LŸ2«MûŽäG±fMÂBÞy±tõCAA%‰q¡!’)Nô¬ÉŸ{iqn^õ­§dQ/ú1¥G²® IP2"m쾪sÇëïà¡pA~…ÌZõrÕœ–SéŸ{÷îQ’ôHÆÚ±š}N0ÉHV) ßçÉ壬À•¬˜v\&瀎#Í‘Ys;é*»¥‡)Iò†2`­=õ\µçéàE«÷ûû¬\¿™ÿjwÔVùûJ£bÚ8^¼*ÛÕ¡Àô¼ób±æ­LM¢gš¾«rò;8ÿ0B?¦”›­þäsÁKh•ž»Å}gËÕ×ÛrÆûÇ$³''˜òÃeêØ mwœw“\P\!ÎÆ ¬ˆd‚ÂçßQœº8kÉ r»Pî†ÃÆQÐÍí¤«ì†d £ïfÎÏîÓq§.]ÇdÎ8XwUPmoå™W^Ý¡s—€À Øøîäûñ«ÁäÕ£Wo˜¿BZ†¦ L®Ò!öÐÌ­ fç‹5?h‚d*=K¾,%/Áq)©ïpQpH A·Æ”É@«6n‰ëž{cüdrJñé+]’àL¡]ÇXc,Ç2’©‘=9Á$ƒã­¶»>ƒ,s¯X€dœrò6:x?B0Ž‚:šÛIWÙÉPòbÍèkÉS‘Ìžœ á—'o>’Øøn ί¬û g²¡aችûoÚsˆÔ‘I ‚ç‘£ÇÃIt`PP—=GMœ²£ìd¡f¨çã¦Í ˆ„š®ÒÂ>¯ã«™ÙËá¼#¬Uœž@ßÒ2¦ .È$úô@٠ᯑ„³˜9ËrÅÝl÷èåIHV~ù¾Ã™{®ÁyjÜ>6æ¬Ù ¨¶Äyj Ϻ:5–Gù“e=ìDžÚSQÿú¸Œá¬6$¤EËÎ]{ÌÈz»òêCõ;‘ %k~@XK,#r‚»œ !’ÕÝÿÁáü::_©ø§s(”ßÕk6ïò<ëïðÁg;¹M¥#cÚu˜÷ö»\W»ºòÚ#’ÝU°£Šj.ñ{ž“·‘Ü&î={ñ÷6M÷èåIHVvþ¶Ãyý6y¸óh Œ>ìäCõ׸:ŵ—ƒ |×±ZW¯£-’)¶”K¢]§Î‚\ „H†ˆ5? ¬%k!rB³£©’}ü³Ãùm ìíô)³T_¨½û힊ún‰ÉPÞoð+2ma·´ ‡÷›9?»øôx%õsßZCæëçGîšip&±u8gÿÈÖ1‹sóÊ/ßç’kˆ_3mÒ4(ôÝv¸ ª¶–‡…\¾ãçJ2° oo°PlëÝM[ÉqwSv^ž„d V¼ïp¦æJÈ*©ï’\þ”@Mw·%¹éf먴xÊ¡mÉ™F8€À9Ôº…d9S0¶Ê‰H†ˆ5? ¬%k!rB³£©á—¤0uì ÷ß‘ÜÁò‰ê¦Ì_òü­-\&xÁ9Ër¡|ö²•‚¶ã¦Íi¶?)‡žºÈ/Ü[yªEDEs%™ó² dÒì…üjëwqkTÒwR€dp&²ÿäù© –’å`qOÁ'"¹ÿ ‡óNpx¸(w a6BhnmK’©´SpH (|!¶½´ºEhÿCªLˆd(XózÀZ²’5 '47šš#Ù®òÓüBòÃ.à¥LÛ~/ƒ˜â/ å )}m??r’¦?bÕ?|&¨Ù¥GOx¸»¢N¦}÷(eE$“‰ÙKß49rî&Œ@ YÎÄI¥i|¥ ÉTÚ‰ÜD?|TzÙ…;ê÷ž@ˆd(XózÀZ²(’!'¸MÍ‘Œû’ÐUeq[É•‹¸hݶ½ måµG4ý9Ñø8{õG0ÃÆ´ëäëççåí-¨I*¿ ²îQÊcläèñÛWI¶Ê+ØÍUûpëÊ|%c3ýìÇ ²F¸%!¹œõ|z L«ÉP±æô€µdQ$CNp5šš#Y³•ÅÕÈÚV®v‘ -MHW¯YqåY­H2¸jäw·º?ʼYúîQÊŠHÆ/ýO’G§eLwÕªöÞwÄÆðW¼å¶hl¦‡Ž]º›9/‹ÿk½bm¾ú‰H†ˆ5? ¬%‹"Y³•õ8°‹_“5N`ÉHŠªë_*Û®dù¨ ™'š¾—¿ýðÙëÀäu÷ þñkF¶Ž‡ü¤-bÑwRVG2PQÍ%âÀ÷–H¶š4{!*,-Ruã+R2uÁR‡(K#¹(=!¹»Ý£”g YýÃgqÝÏï™Ä/‡‘…Ýåë¶hp.Õÿ·ëK“P1’ih'x;QÑy»ù…•×AÍ-UîLD2Wg=B[H¬ùe$˜Ä­iÈSåÙHf7N0Ƀàáâܼê[OÉb'o> o…¯¦Ûu¬¶úÖ×ÛWÍÍÉ%?àŽ›>WÁ®îš%$SÞñÆÇðYî;xèÐÔ7É·‹Y«þC.p*;ÛÇÇJ¦Ì_R\{¹üò}@ˆè˜¶P2yny)úîQÊ3 {ÃÛÛ‡£/"Ø!ç‹\ÉÀa#)w”$ÓÜN£'Ow8—µYµ± ¨æR݃KÎ4ŽÉœáÐ"o"™¤$3Ó ™µ’ÎKŠ5?0‹db“Ð<À!òòT$³''˜‚dd‘ÁáwÝŽBrÝ‘ zöîG“MX\¾ú“Ï/;°ôÜ­‘£Ç 6ýκÏÄËÇuKào—²{”ò$eÌY φGF‘»Q6•Ãù8“¿®×‘s7ádÊáY·¶Ec3ÍíŸ>É{gƒ‚öTÔ«Ü™ˆd’R–q¾ÁjIç%Åš˜E2e&ñ‡ÈËS‘Ìžœ` ’žº˜Ôw0ppH‹îI)\yÙ…;£'O‡x""*ºW¿—ÞÊÛ$X|€~WƒVmÜ×=6;ùñ“  °øôc×vc¹š[VŽ3¡Cl ‡ø‰³–¬ß$HÓ=Jy’ÁŽ"'ÃÞsêö7fÀç‚jä\žu•ãRr[46ÓÃNG/ÞÍœŸÝ1.Ú‚%:ué:&sÆÁº«êw&"Ñ™GÏò vsßù+Ë8ß Cnbèt ºgÌ~h@$ÓÙ$àyy*’Ù“#J¬…d( …HVuã«E¹kH‚*//¯éMšûáR&Mæ_WIçÉ5$нŹy'o>1À¬ù…ƒ¥Iäg|=²W›âÖüCd(£‰ûÖx!’ÙVvF²Cõ×&̘'0£ùùû¿9q*Éc¢-’Qfþu•tº³3tBW¡Ã%õºZ‚5?˜{ÐpË$Š‘LqöjSšÉtMÜ·Æ ‘̶²'’m9T9äµQdMì–aáÓ刓ðÊe }æ_™ÜÄ ¨9má2x)‡3‰tžrbÍf4˜DÉ\ÕQŸ½Ú`‡°æD2]G÷­ñB$³­l…dõŸ½—¿½[b2™cÚwXòÞZWj‚dneþ%mʉ9AW¡Ã1íþ¼×£{RÊûù;´J­Å‰5?|ÐPceH¦>{µÁaÍ?ˆdºŽ&î[ã…Hf[٠ɢbÚ© &Ü>Û)E´&HæVæ_ÒVœ›X è6tžcxSÚZ‚5?|ÐPceH¦>{µÁaÍ?ˆdºŽ&î[ã…Hf[Ù ÉÈ 53{9}e•%neþ%…ò©„ù‚7"É*Åš >h¨1‰2$SŸ½Ú`‡°æD2]G÷­ñB$³­l…dÜžݓRò vŸ}ô“LeMÌ­Ì¿¤Pœ›X ²¼R?<2J[K°æƒjL¢ ÉÔg¯6Ø!¬ù‘L×ÑÄ}k¼Él+[!Ùé{߯\¿9®[™ªÚv蔳fƒ«%5A2·2ÿJNè|AW—}°¾Mûޤ&¼x;𦴵k~0ø ¡Æ$ÊL}öjƒšÉtMÜ·Æ ‘̶²’qÊß_:pØH² Shx«™ÙËùɈ4A2·2ÿÊL¸Ð½Yo‡’ûé¼¼ óŸ(ÓɬùÁ¬ƒ†“(C2õÙ« vkþA$Óu4qß/D2ÛÊžHFTTs)}ʬÀ ç©ëüÓ3gŸ¾Â=«ɸ/UÜÊü+9á×^“9ƒü¶];u6”èj Öü`îAÃ-“Ð#™†Ù«wkþA$Óu4qß/D2ÛÊÎHFTuýË+Þ'{½¼½¹reH&ÈMìVæ_É —¬‹݃NRþªR¬ù…ƒ¥IhLóìÕÆ;„5ÿ ’é:š¸o"™m…HFTÿðùº=zõæJ”!™871}æ_É º3ri)ÖüÀÎA£Y“Ð ™æÙ«wkþA$Óu4qß/D2Û ‘Ì•”!™dnbÊÌ¿’®ñbÍ,4 ™Ù«™"™' ‘Ì!’ÙVˆd(XózÀZB$ó$!’™"D2Û ‘ %k~@XKˆdž$D2S„Hf[!’¡bÍèk ‘Ì“ä$²%Ùf„Ÿ\6À¡Wˆdf„Íù=`-ïŸßþçœYô ƒGƒÍ@$³É”*èk‰5ÿ`````¨D2œR›ɬ&Öüƒ¡>ÉpJmB$³šXó†ú@$Ã)µ ‘ÌjbÍ?ê‘ §Ô&D2«‰5ÿ`````¨D2œR›ɬ&Öüƒ¡>ÉpJmB$³šXó†ú@$Ã)µ ‘ÌjbÍ?ê‘ §Ô&D2«‰5ÿ`````¨?þhZ²å6!Ìù=`¹0Û2ZÆÿy°ú´ endstream endobj 41 0 obj 9614 endobj 43 0 obj <> stream xœ•YK«+¹ÞûWôzÀU©¥îc°ÛmHv²YÍ#!ä&ÜÙÌߟzèQê‡Ï »Õ*}ªw•dwîÓ÷ÎuŽžÂ.Ø=\Æî÷_Oû¡ûïÉ]&SìÖ¿¿ÿóâeè†0\|÷íüx‰iôŸ.zO4Âf t§~ûád¦ N&Ö‘gîòÒf tG¦ N&ÖÄK(K›ÒY™.8™XG/SYÚ ”ÎâÈtÁÉÄ2Šã¤ÚbÂfè 0úÑQÆAú.*iJgqdºàdba_UÒ”ÎâÈtÁÉÄ:WUÒ”ÎâÈtÁÉÄ2‚i¨*i‰ÎàètÆ)Ä:뵃ií‡:]pFë‡0×kãÚuºà Ö!×kÃÚuºàë‡Ð×kaí‡:]pz뇀ÆõÚA¿öC.8™XGŒj›ÒY™.8™XGäýUµÍ@é,ŽLœL,£q¬šµÏ™JP$ùчÚãã„Ðsø }÷ñK÷ã ˆóîã·¿_­¹áê¼ë]¸áÕEü8Êc¸ÃÕM·ñêîòâ!ß³|ßoñêž·|üõ´|œ~Zíê…¡í®‚)ûñ:÷J\,·pov ‰øhʹao“¾HB‘¿ zªCÏ1#Q1˜¯™\ÜD0ÿÞ[‹¾g·k]$YF·¸Pð`µwao-ÜiõË=è3Óî3>‰ƒh¹#Ä$‹ç¸=”…Ðõã¿Êãyt#.ô „ù‚øÿòŠ;%rnì>c.¸îȼ.0Ãt€0!©ŽÄ!Ø©R¡‡™DEú(~Æ.Ž®•-7¸’OžñJ‹É•Äï“êót;{'nê§â¸H¡4ôo<0ûfW_Â94ž ÎóÖ~p×ï‹Àœ Ș1cxý… q'’Õä𬱙ć"ê‚ìãu-ð{¯ÓŽD”ÆáL’œE»úAì¨EƒSÙOVhè/);)¼[©º DS¯"ŠåÝÙL’Yul÷åY&¯<ÂÀ´[APZ¥$W.²ûN¯ïé{e¹eån1©’Ó̈W?W É -"¦Çs6ÿ+eíV"—¶òšœuw%ÚÄ Ï›–_îÚ?ãKù•¯²‡pW«ÆìŒñZ,À˜Rý[S´mjG7Z æ’s€4¥ƒ´‰Xæi²¤Â£ …¡EƒXlU–Ëð^̦*)ÙÇo WÖ‡Ç6z­«]LI^»‡R-öš“sH —š#ø–…­šòΦIl íËdî\—lTT˜OMø‰=lª;Ì‚ãWì“Ù`ÚQóbÕü¯*±³)ßyØ ¬õí1\è’¶ÅM’†÷¥ÝMmÿ®û›®f]b?Óc?¦cvèT‹‘Og‹ì‹ôèâaVrt,Þ8íjélèÁ‰2™}=»õ çÖ ÉÃðàSñ”øÑ‹ÇkFH¿OpB”5Äê }'ÍÄäôõ઄Օò“~TôB}ñ¦M®Qï@’ÊQÏf^&½¤žlÊ1çÙ¨*À¸Â;£r=4­VN"¿Ãüîíi–ï ˆjh‰u²î N©SÅ7ûCù²»ß±*ÀJýH—ÇhS@Ìœ‹ž?êB:˺­N™]t¯§¿1ƒë|ÞÂ%êÄÛ}˺îqÏM]˾.Sé„3h×>SwðÖc·wCã ÌS’ÙëI¯$¹ÛØ„¿Û'Ÿ¯zj5ÉqPÊ’ÛÁÙ´H›¶ £öC˜L`ÆùÔŸK„½Q¨).-4y±µSþâ¹ÔB’Öýãj×kÓ\óÚú8Ífì-Ñž2«lÓȬõ€©—Ÿj¤<+Y°[f}µ»UéI¦¢€z«ÊØè1_§ÞÓ^ÅΩ¥*ðÞÌôiþÌUFL­ss8rµ{”âk+‰Óó›†ÑÖ©7gK¹.D×÷nvO’ï\_¤>œ ⡇@ŸGw¿ ç\>yšÛG¾ZÜèn<¼sÔëOËõoaÇÓú‘> ÜáA™è`ý¤ålÖ¿a9í9”ëܲç(÷£Oùvú¡§»Ãtw:e™`qõNóá…±¨âþ­îW£wôú ŽAnrÝ].د†“¤0m´+’‘Kë—JöC°ßË8ÜèžôEAÎÀúÐÃ2ž4Pô„#¿~ω #>ˆƒ;Ω~h÷§CÛ‹Š&ÜUñ×u„C”¿Ç3cëÿNÃÇéöš{”æ?žÃ?ˆŽÐCÖ…?ußõ_.þ¿¨•ãóÁñ¿/ù?ýïòv|žÁº»Ÿ¿~üË·>tÏÿuŒö'ýíËv endstream endobj 44 0 obj 2116 endobj 45 0 obj <> stream xœíypTUÚ‡úþkfÊ)ç¿Î¾A²öH ì[EÄ È"{ T0〠¢l²[ @$ ÈF";YÂæŠ":SÎTÍ÷’3s«=Ý}ût÷Ýúöï©_¥Ò§Ï]úÞ÷ö}z»ç?ÿ}XtBï=óCÊQÿÕψ–¹tÿ0=hL¦³ÓƒéÀ¬Àô`z0+0=˜Ì L¦³ÓƒéÀ¬Àô`z0+0=˜Ì L¦³ÓƒéÀ¬Àô`z0+0=˜Ì L¦³ÓƒéÀ¬Àô`z0+0=˜Ì L¦³ÓƒéÀ¬(ezÏ´X,½‘éc±!  M‡Ž‡xû‘þD```»ÄdZÜG{ŽÈ,k[É©ÌìÜäԮѱqAA1qñ)©Ý2'MÛr¸ÂîR<™LÆDÓ+=ßHÎF:äççw¸îЏéYóBf–Ký‰—²²m—Rwïñ˧ÊLõÊô×äMÏÕ9Àô`L1½yo¬"ÿ™¾àuú;sñò¦gÝRÝø°¨úâì×W„„†Ñ]k7Ê÷§TÝünÿ©s3ò–‡ØNB™³ìmjh9kIÁîòÓeo×Üþ‘þn9\‘•;ÛÏߟî]öÞ‡2Kqu0=hÀ¨Q£¶nÝúøñcñI1½öI)-bãknýÕ"&¡m»º{MO ‰ÝÕ½ïÁþ”üÂutoÏþƒ¸ö´½©ýã}%v§Zú×' êÑ/Cf)®Î¦ xæ™gžzê©§Ÿ~zðàÁ‚Êç¹ém9\Aæ3!w6ýOéÿ ޹jzeoÓ]‘QÑâ¦Wzá–í$”°ðpj§{íNUw÷'î.Û¥¸:˜4€™ž„ˆòynzì+mÛ?«¤ÿw”VÓÿ/Ž›èªé;“‹7½’3×éÞ¨1\{bJjŸ_ ¸þ¶Kqu0=hgz"Êç¡éUÞxÑ!¹“ÔÒ±SjHhØÉkߺdzì#Ѿƒ†Š›ÞÜå+éÞ^síËþö›pȈÑkwU5~ïªé¹:˜4À‘éÉ(Ÿ‡¦·bÝF2¢¹ËÞ‘Zæ¼K-ËW¯qªšÛ?ª½<ÿÍUìSÒ*§¦WÝøpï‰3Sç. ¢{í^žeÖ’‚ÀÀ@69ý“ڽפ™ó¨gÕÍïýÓ¥9Àô NMS¾½{÷zhz=ú ôó÷/9s]j9vþf@@@×^}9•#&¾:Ç¥þÙßù®»2mÞ’Ä”Î~~~Rÿа°¬ÜÙŸ7Üsjz.ͦÆïÿ{ASÒ¼ŒŒŒ-[¶V sôíAºké_?”_Š«s€é€aÓKNíJÎóñ¾™>›‹Sê©’éUÝü®u»Ôaب±Ü]W¾Z²êýÞ‡´ML hÞ>)¥ï ¡³ó ŽÛ\ ÏîR\šL s˜Ó€-0=¦˜˜ÓÌ Léf¦‡Àô³ÓC`z€Yé!0=À¬Àô˜`V`zL0+0=¦˜˜ÓÌ Léf¦‡Àô³ÓC`z€Yé!0=À¬Àô˜`V`zL0+0=¦˜˜ÓÌ LéfÅ€¦wãá?-s÷ѯ0=À”Íôòòò=Ð{Ï@yŒfz@)`zf¦`V`zf¦`V`zf¦`V`zf¦`V`zf¦`V`zf¦`V`zf¦`V`zf¦`V`zf¦`V`zf¦`V`zf¦`V`zf¦`V`zf¦`VŒfz‹€N`Gy4®Š`@Ó«ÿêgDË\ºÿíÏãØÑÞ˜x)0=¦‡8 L¼˜ÓCœ¦^ Lé!NÓ/¦‡Àô§é€—ÓC`zˆÓÀôÀKé!0=Äi`zà¥Àô˜â40=ðR`zLq˜žÉP÷*ÛÀ1ع>‹»Þ0=¦‡8öòðÿÖ÷iÙôè^T¾Íži±s–{~Õf×;¦‡Àô§Ñ¾B¾ÿÇ¿P$j„ïØ¶zmy Žì\£¦ÇÕ>0=Äi`z¦ LOß-¯Á±ƒk´Àô8äKÔò[‚‚ƒÛ'¥d:6.2*:ãù‘{*ê©1¶eõ¬¼ñÀî„'¾ü†nÆÄ·¤ÿ×ï9Ú£ßÀˆæ‘‘Ñ-ú–_¸Ž›ÿÁšK#ÆLèÜ)4,,9µëè‰S¶•œ²]ÛŠ«_¿ºhY—ôžQ-bÂÂÃS:gfç®»"u˜³ìmî£É•o_JÅ•¯hêP{çQÖ´YÑ1±ÔÓîv3“éyW8­ù2Z„pȦgšÀôôÝò;عF LÃÓ£dÏœOrä;êŸ=kwÞŒ‰‹?vþfxD3ú¿îÞc»ÖÜþ‘nF4k¾nçÁ€€nÖo½»aGpH(×!88dÕ'Û­W£üòÝ„6í,6ÐYø@åyÖGæ/²”êÆ‡ÔHKymé[R»Íd¦ç-e R2e Xiâe ˜žiÓÓwËkpì`ç-0=Mï½Í§ƒ_e·ÿîã§é¦ŸŸßäÙ ÷Wž;yíÛ J;uíÞ½ïvâ–YÝ ¢3æ ™Yÿ¼®òƃ¢ª ¯.ZFs£»6¯o:w7Ц–œ9‹Šª/V5~_\Û0ûõDPõÏ2'M£©º¤÷Ür¸âäµûš­ 56Bþ! .¥îîO4aT‹˜Ø– K/ÜrôÕ5ó™žW”x Ø®‰x¥‰—|`z¦ LOß-¯Á±ƒk´Àô8<4=:íR‡6ííö›3nŽ~%Çz’êÆ‡ÔŸëi÷Oô8„[bÖ´YÔþRV6ý?eNý?mޮϬ%Ô>sÉ›RKÏþƒÂÂ#öŸúÍ%Av—?1˜¸xù‡,¾6-­¡|šÏô¼¢ ÄkÀvMÄk@¼ äÓ3M`zúny Žì\£¦Çá¡éºþÀÒôù—ÝþÒÒéæ–ÃÜToô©à)~Ý΃ܴÛJNQ{R—4ú¿ïàaôÿÞg¸>ŵ ÔžÖ³|1ÔÞyäh¹Ö-âKaÓ~zä„ürÍgzÞ[vkÀvM\Z„`ȦgšÀôôÝò;عF LÃCÓÛYVC’S»Úíß’n;“›jßɳ‚§øƒ5—¸iË/Ý¡öè˜Xú?¡­¯]I´lÝÖzÂÏî-zûo=ú LhÓŽœ$0(ˆ]!Ä©é‰/…µ”_¾+_„æ3=o)Á°]—*M° äÓ3M`zúny Žì\£¦Çá¡é½³~+ux!3Ën:“ÒÍšÛ?rSUÞx xНn|ÈM˾¥Os¦ÿƒƒCdο¬KÙÅÛí“õ”ÈâKa-Òï Å|¦çe ^¶k"^âe ˜žiÓÓwËkpì`ç-0=MïùÌñÔav~ÝþQ-bè&a¹©öWž<ÅvŽ#¨ôÂ-Ëÿ¾XÕº]ú¿âÊWN÷ûèWr,Ms®»ròÚýš[?°/ÏÛ]®u‹øRœn.ó™žW”x Ø®‰x ˆ—|`z¦ LOß-¯Á±ƒk´Àô8<1½õ{²74¤ÁO¹þIÓèæÎ²nÂ•ë· žâ7,ç¦Ýr¸‚Ú;¥¥Óÿ½3†Ðÿ[žtºßÙ›9Û?«´n´5 »k"¾ß4=o)ñ°]ñ/ùÀôL#›žÅt°d¾lzvõƒC÷•×™ž5ìçí^ß1=ÅÇ鮹ýctL¬7n,0=WMN”kw™œË¾ÊÞ>)¥ªñ{Gý×ïiz·'0pî²wŽÔ_=yíþ†¥»õèÞw€È)>(8˜,bô+9{OœaR›¾p);/³7ˆN|ùMdt KÓ7Äv«:yí[Ùùì‹aY¹³¥¹±Ÿ>Ÿ9~OÅÇîÑ«•>ƒž#`ŸÊ-\ñת›ß±ž!¡aÔ²  Ö–]'M|)‚… LÏË@¼lË@¼ÄË@>0=yt_Iñßô¸F:öŸ:G¯nØ×S ÖnÔ}==Ùò;º›žâãtŸn`ë³±¨Ìú¹Ý[Óã1=»Ð©vÜ”ÜUa¹Z­»÷8cø‹Ü„tƤ§‘S<¹Áš­ûlGÈž9_ê¶fÛþf‘Q¶«×µW_ë÷å¤ zHÄ'´>úŵc&pçŽýÚžP—bû(ìÆKMÏ.^Tâ5`· k@¼ äã˦g·üt_ ·ãu¦'%¿pÝÛ³ÿ Ý×Ó“-¯Á±£»é)>N·í“³w¦ÇáªéEFE÷è—1!wö¦CüW§ìÖjÝÝŸf.y3­gŸ°ð:±¾8nbqm‰u£s·Ì„R ½¦Èœ4­mb¹A¿!ׯ^Ï-´äì1“s»¤÷¤EÄÄÅwï;àõÂjï<⺭X·)©KZHh­Æ¨ “|ñ%5U_ì”–$]õ—*<½OêÑŒæéÒR ˜ž—–` 8*ÁJƒé)¯>ãÔ{³é±ß=ÑÁ^ßtÍL:úèfþ»k¹nyMÒ½ÔG÷Gd»å58vÔ0=6êwbJçú'_™+í=p½Ò¤}Ñ­W¿v’º©1Nwj÷^Ü<ÿÛY`Üp)ï+¡øl†)©Ýf-)°}oPpÌz7ÓãÐåùgGiµÅjH‘²7S¼ÎôPÚ¦'ÅQ x‹{x¯é•œ¹niÚÝÜþYe`` ”Õ^–úU] DÔ¾ãX•îÇî–×àØQÃôjný@7Ú¶[¿ç(m^N½¨‘uScœn»¦'8n8K~á:ök:uín-{‚kè^`zª>ÿбÿö‡[l/‘ÁF ðÜ âeo¦øšé¡ ÜLOŠL x…{x¯éÍ]¾’îí5`°Ô¼"½Oÿº»?Õ7½Wß­W?j¡žº?G[^ƒcG Ó«»÷ØÒô†*ÉÞ¸)3ö<[uó»]eµ»õ ö¾ƒ†ÊL«È8ÝÜ<ÅÇ ß_yŽ–âï@ÕB&-î­63K”~¼&¾†î¦Ç¡êóCªM‡Žk¶î£=N…º÷Ä™ñSg2Û_»£H¼ìÍ_3=”éI‘¯㻇י^uãC:B§Î]Ì~pôþöÒ]´y{ô˰4ý‚‰nÎ/x—© ÛøF‹W›žÔ2rüo~þ¼éP¹¥é;Æ2Ó*2N77OñqÃs^[H“fγn¤*¢×_=ú tc ÝLCÕçr{6–-/OœêjÙ›&¾fz(7Ó“"_Æw㛞 3¿ÁMrä‹/›EF‡„®þtoppHó¨è’3×u 2[^ƒcGUÓÛQZmÝȾYçï 3­"ãt‹<÷Ú7<9µ«ÅÞT­ãá˜õNÓãPûù§ô|ã«‹–Ñ®ŒnAJß>)%ãù‘ë÷u£ìM_3=”éIqZw/5½c&l9\awªÂ;¥nïmþ»îB~Ëkpì¨jzÜ• dzJ7§Ûv)‚ㆳ ñÉüíÒº˜‡1ŸÌ4=ÄÕÀô¤ˆØ¾‘ÝÃø¦gÝRwï1»Ðefv®£©ª¿ggsúk}J£Å¦çFOEÆéææ)>n¸£Î­ãÒº˜‡1ŸÌ˜â40=)"¦gd÷ð.Ó£¨<ÏNÄî.¶;Õ¤™óè^vyɉ3æêþ(䷼ǎÑLO‘qº¹vñqÃc[&PKé…[2 ui ÝLØÏ?æLq˜žÓ3²{xéQØ57âZÙž‹7÷ó÷‰oY\ÛGÿÛ½¨¦⳦§È8Ý\»ø¸áì"-‹ÊdêÒº˜‡1ŸÌ˜â40=)NMÏàîá¦W{çQR—4Ë“~N²n¯¼ñ€ W½fë¾ú¦K¢Yš.‰É cøšé);N7×.>nøÔ¹‹-6#&³ïЦõèíÆº˜‡1ŸÌ˜â40=)ò¦g|÷ðFÓ«oº ¦¿€´aY²rgS ߥ–ÃFXl†~6H|ÇôÔ§›k7¼äÌu6xå”9yEUJ/Ü¢£2>¡5µLž½õqi ÝLØÏ?æŽMÏ"€ç\©ù(z²JIí*`œÀô¤È—ñÝÃKM’=kÝÇ~G¹á@©ŸŸ Ë.Þ–úùâ˰ðpj§{u8v·¼ǎÆ8Ý\»Kㆿ±æÛq=’:§Y/Z| ÝLØÏ?æLÏ,nßJÁ½PsûGö~¥²éI‘ÙA^áÞkzU7¿cïØ 5öÔõìÊtÆçº±c“î5ÂØs¶[ÞÕáÁƒ®N¢»é©1N·m»ø¸á”MËGŒ}¥]b2Œô‚zFÞrÛŸJ ®¡QÖôÜ( eMï—_~ùùçŸ=™ƒ1ŸÌÏMïþýûªîh•äǓَŸ­ì*Ÿn`ë³±¨ÌvèmÝãa…üðÃÿú׿\šÄëLÏ[ÜÃȦgî¸÷LסC‡·Þz«±±Qpì\£EYÓ{öÙgÓÒÒV¯^ýÍ7ßN¢¬é={öøÃСCwìØážò¡Dµç¦—œœœ°téÒ«W¯ª±£ hz‰)]”]%zlÌwóX<¬Í›7ÿå/;vìáÇ•ϰ¦çíéé»å]=vbccŸjâw¿û òaç-ÊšÞ3Ï<ÃJâÿþïÿ•OqÓ{긧|j”讲ڗ²²ÛuL ˆhÖ¼c§Ôé —–_ºÃuÛYV3|ô8:ƒ‡†=4ṑ/ÛýÅœÈ{Ël€˜Éjï<Êš6+:&–æ)õüx_IÆðYcJj·YK lßÃ9XsiĘ 4ꓜÚuôÄ)ÛJN©T„Š˜ž´ß•OÓ;uýAÛÄ$º+ÿݵÜ]yMï¢Ð½2ï¢ØÎöÄ—ßPKbJçú¦OâzÒ,2*2*º[¯~ì:Äú°M­Yùñ6ñg·6Øuì~6]qõëW-ë’Þ3ªELXx8­[fv.÷‹3 êÊsÓ“*DPù`z*¦§ï–wõØ‘LO©òaç-*™ž„SåSÏôÜS>ÅKtýž£¶_Å´4 poý]š× ?`¿²±Æß?`Þ«¸Š˜^uãÃ'Ö´iÇ.e}W~á:ö3pk:uín}R~wÃŽàP®OppȪO¶«Q„Êšž ò)õžÞöÏ*iÿ’·ª½,5U] £öǪ\šmÍ­,MŸ²Ù-j¬—5=‘g·6™^ùå»ÔÓb=Þ•ç­×\íºRÐô•¦§R`zúnyW[Ósª|عF‹Ú¦çTù40=—”Oñí’Þ“Ng9sŸn óxÅÕ¯×lÛß²u[j7eëSrö»{fvîþSçªn~GÚóÚB?R½€šÐz†Ž¬Ãº]©;ªELlË„…¥n±±÷Wž#Ÿ¤¹’-Ð"JÏ7¾õÁfv*—®ØC'÷æQÑtÖ¦u.ª¾HgêâÚ†Ù¯¯ ñ iiÅ‹P%Ó“W>?½eê•Þ§?DžþvëÕZæ._éêlëî=¦–Ȩh’=*}'ÏR1ì*«íÜ­µ÷4TfZÁç¨6ìÎ3sÒ4j¡Þr¸‚ºQ6'£ÆÃFHÝ4¨+5LO^ù`z*¦§ï–wõØ‘1= Nù°sÍLO‚S¾§44= åS¼DÃ#šÑùÎúí;ÊÖ£'›EFIçʉ3æZì]5qÄØW,î^í‡ÝÌš6˺Ù#5Nš9ϺñýíBBÃzôÈnN™“÷ä=o 7ÿYK ¨}æ’7/BµMOÂZù4=r§ý2,M×P¢›ó Þ¥ÿ{ ÌÄÏÕٲƑãs™ÍM‡Ê-M¿â—™V|ÇÙ­ »óìÙPXx½ú°nÜ]~šºÅÄÅkYWªšž„µòÁôT LOÇ-ÿç?ÿYä@p›?ýéO+W®\¸p¡î±™žªûÝà´hÑ¢²²RUÓcö>z\ÉÙŽú¤÷éO}6ä¿•ÇÎïÝzõ³ntÉô>=rºOrjWjÜYV#³Â}£>{OœáÚ‹kŸü63­gÅ‹Pƒçkž~úéŋϟ?_| åM¯¾éB¤îÁ!¡ìÊçÍ£¢KÎ\wo¶¬qGiµu#ûr¿€Ì´â;Înmˆ}4«‚^ž¾ÐQ#0=}·¼«¯’DÞÓûãÿ8|øð]»výòË/jœF£ý{zÏ>ûlffæ¡C‡~ýõW¥–+!øž^ppðŒ3ª««mç x‰Ò)›]ÑÏß?­Gïió–|¼¯„»BN|«6ÔÁÖ Ž~q{'§ÞEÓcWø”Â.˜Æ5rajpDËÖm/BmÞÓ#ÁËÈÈØ²eË£G\ÝÑ" T¸q§´•ÞÛüw·gË¥OTå÷¯{;Înm8ZŸÏî-zûoô‚%¡M»Ð°°À  ªd®§u¥Í{zñññùùù ÿÁ§·ª¦§ï–wõØ‘1=Nð$°sÍLOUÁ“7=Á“P£D¿™óÚBë3]‹Øøå«×K‚‚ƒ©±æÖÜ„ìËóÁÁ!ÖŽ¬Ã® ÔÝ{l݇ýè£æö2k˾1蚃âÛGUÓãϽíh›[§ªñ{&<ô×ö’˜â³uiÿº·ãìÖ†Ýy–]¼Íò¶‹–u¥ªéY žLO¥ÀôôÝò®;¶¦çHð$°sµMOÁ“°kz"‚'¡j‰U]X¼rM÷¾ØÙmɪ÷Y;û»Â¶uŽÔ_µ4ýLҺѮ œ¼ö­S Ä¶L ÆÒ ·dV’]¾âÊWš¡¦çHðÜÛÑ"¦7iæ<êÃÞ¿8c®Û³uÛôÄwœà"(£_ɱ4½áöÎú­‡ë®œ¼vŸ^°ßtX÷Ô ®Ô0=»‚'ÓS)0=}·¼«ÇŽdzNO;×hQÉô4< kÓsIð$´)Qò=:ëѹÝdß峫hÃcÔ.}§…²]qõkëÆm%§DL]LccQ™ÌºõÎB}¶=©Y*hzNϽíÔô6÷ó÷‰oY\ÛGÿÛ½¢ÈlÝ6=ñ'nzì ½íŸUZ7î¯ä¯±¬A])hzò‚'ÓS)ž˜žÈk.-cä¡¢myWÄÄDAÁ“Pp44ŽÀÀ@zRÊx~äG{ލ·]zföŠ(kz!!!ºž™ž{‚'¡øsûÈñ“bââ 7î´n,¿|—j&¢Ysv3{æ|ºùÜÈ—¹i©…Ú³g-°n$ Æ-ÅŸ[7J£*Ë—åÔ¹‹©ñ¥¬ßü®“ýˆ ­GovsFÞr‹½/{ïÃ6:JÍP0ž›^zzº à¹·£åñÊhËP‡5[÷Õ7]5ŽþoÓ>Ñé°Ôž›žõ"Äwœ¸é……‡S wäá£Ç±KçI/74¨+ÏMOPð$MÏhÏÿÆw½LÏ׆Šv´å]=vþýï»:‰z¦g ÷„£à~yfV¼œT²¦çFI(‹ç+ ¸é™œkiº|ÙŠuTž§¢*>Ý06g:5öì?ˆõ)=ßF-ã§ÎñçÎé‚;Np”·?ú”›ùÛÑ/®Iï!KýÕ®+í+DƒOo}Ó=ô2=_*ÚÑ–×àØQÏô¤ä®³X½[¢Á~äú(^Nª¦Ç¡ÆóÏgçnæÌYÔ>)%,<‚ Cr§±9ÓÖ\âºí.?=ô¥1í:&‡„†Q±7RìÎΘ©Ý{ÑI3¢y$•:û~ûJ•tÆ”)ÝMËGŒ}…úÓʤ¤v£×G¶¿-9{cÌäÜ.é=icââ»÷ðzáÜÅa”Š÷šÞ©ë˜Æ“qw±·kè^—ƽ•Y×NÏNé}úS©„G4£ÝäÒŽ7=ÊŠu›’º¤Ñ‚ÈñFM˜Ì~7TT}±SZ:½ÄhÓ>Q›º2¥éù¦{(ûé-†ŠvuËkpìh`z¥nYš†ª÷lüq»ûQþ™Yrbwí*«})+›€ž#š5ïØ)uúÂ¥å—îx¾1azø¶ö1¾é!ºÇ°¦÷pÕ=”5= íê–×àØÑÀôJÎ\·4}-ŠÝt{üqeMÏír¢v»L´éБcËÀô8 Ú¦‡8™ÜC>Êš†Š™Loîò•–¦A'¥·Ç·]–ÝE;íãa9QÍP;M[|ºžCèÕÙšmûÙب°=ܘ0=€öé!NãE¦÷⿽e*ZpËkpì¨gzôgï‰3Sç.f_k§-&Ýåöøã¶ËrÏô<,§ðˆfÔȽ}·õèÉf‘QÖÇ©{éq@´Lq/2½z¸‡lT2= -¸å58v´¹ÊÊÌÅop“¸7þ¸í~tÏô<,'ö#»á£Ç•œ½áùÖãÓã€h˜â4Þhzp»QÉô0T´à–×àØQÛôFŒ™°åp…Ý©Ü\¤T4('zº`—& jIëÑ›^O}¼¯D©_AÂô8 Ú¦‡87šÜÃnT2=§m»™{¨hG[^ƒcG¥Ooiû³±D3³sM寸ã"¥¢M9;3çµ…ÖGY‹Øøå«×{¾1azíÓCœÆMÏig5N¶ó4š{ÇôÌ=T´£-¯Á±£Þ÷ôTžgEøáîb»S¹1þ¸H©hSNRŠª.,^¹†i-±dÕûnL˜@ûÀô§ñÓó÷0Žé™{¨hG[^ƒcGÕß޲ߛÇ%´²­C÷Æ)mÊÉ6ä{Ô“Ž;7&L }`zˆÓøˆéù‚{èkz¾3T´£-¯Á±£ªéÕÞy”Ô%ÍòäO“¬ÛÝÜQ©h\Nôpbââ 7î´n,¿|—zF4kîáÆ„éq@´Lq›ž¯¹‡^¦çkCE;Úò;j_O¶†¿€$u,n?n»,‘2S¼œÆLε4]:iź*Ï×Üþ±øtÃØœé%}ƒéqè+ô´’Ú-8$”]úÛ¥§5ï L•à4¦4=ßt½LÏ׆Šv´å58v4¸rrö¬totlû ‘'ãÛ.K¤Ì/':íþâ)4,lWY­‡¦Ç¡£Ã³ Ie Rol|U½ÖY‘ÀôP NcJÓóM÷ÐËô|m¨hG[^ƒcGÓ£ Å^ª 5ÖÃñÇm—%Rfj”ÓgçnæÌYÔ>)…¦¥’èÜilÎôƒ5—<ߘ0= øt+€Ee¶cM:*’‘ã³e¯L•à4¦4=ßtOLñ$Þezˆ‚éqhY¢§ï>*ܸSú =íË¿Šaáú$¦tQöüNëCkEë¦ÙvðqÓãÊÀ—+A&†5=ÄÕÀôôÝò;عF LC›­¸úõü‚wÙàÅ~~~õÿûá›5õÎÞ.$r°æÒˆ1:$w KNí:zâ”m%§~³MWì§ôbZsÁKPºŸ2=‘2ðÙJ LÏ4éé»å58v°s˜‡â%Z{çÑ;ë·vîÖƒˆÚ¶Ë{gµ£ß)r~Ÿ2'ZèìÌM8kIµÏ\ò&7mÖ´YŽVžÖ“Ö6¡ÍúÝ%½çÊõÛ”sYŠ/˜žKeೕ ˜žiÓÓwËkpì`ç-0=ÅK4.¡;9ÒY~Õ'Ûå¿ß®Èù½ïàaÔ²÷ÄnÂâÚ'¿èLëÙ‡›öÓ#'ä­3­¹d)ôˆ”ÝD¾`z.•ÏV‚L`z¦ LOß-¯Á±ƒk´Àô8/QvN|uÑ2ñÎŽn ö±{õE‰–­ÛrÓ²+OŠ„…ÝUò0¾`z.•ÏV‚L`z¦ LOß-¯Á±ƒk´Àô8/Qé¸]Ò{nÜYw÷'™ÎŠœßƒƒCdÎïAAÜ´u÷Ë?vZÖ?:6NÙMä ¦çRøl%ȦgšÀôôÝò;عF LCñ­n|øæû’:§±“cëvòß]ëèbòŠœßÙ•Ã+®|åtÝìÎß:´žKV½ßªm{Ö“=zDÊn"_0=—ÊÀg+A&0=Ó¦§ï–×àØÁÎ5Z`zê•èú½GÁ®QÝâÕEˬGècQäüÞ;cµl=zÒé*Éœßiݦ/\É~qéçGkþñ¾•¶Œ/˜žKeೕ ˜žiÓÓwËkpì`ç-0=µKô@åùqSf„†=Ù<8$t\ΫEÕ¥{Ý>¿[¿;4#o9µ })“›pÙ{¶éÐqÚü|ùùU]›3}ðGë9~êLjQu›ø”鉔ÏV‚L`z¦ LOß-¯Á±ƒk´Àô84#ãÊWs—¯ŒOhmiºF™ÔîÆù=$ô‰-,((»BÚ‰/¿‰ŒnA/dfí8VuòÚ·[WÌÎ/ ¢Æ¬ÜÙòóg—z£u£5ùàÏóø éÉ—ÏV‚L`z¦ LOß-¯Á±ƒk´Àô8´,ÑÚ;O®Y‘Ú½—ÔâÆù½G¿+Xãšmû›EFYlèÚ«¯õ{>vçOëCk¥å¥Ò|Öô•ÏV‚L`z¦ LOß-¯Á±ƒk´Àô8ô-Q7ÎïûOKïÓ?$4,<¢Y—ôžR{ÉÙc&çR Ýß½ï€× ?àÎÚvç¯}|ÜôP "é™&0=}·¼Çv®ÑÓã@‰j˜â40=Ó¦§ï–×àØÁÎ5Z`z(QíÓCœ¦gšH¦wáÛ_-síûjfzº?XÄ:ß<†éý<·ëõÌÈDû ùáŸÿÆ K0ßÈËË[ô@ƒc;טh°ë½…EÍÓCœF—§)œ°ÔCû½ ŒEÍÓCœn@ Ú¦‡8 L€"@´Lq˜E€h˜â40=ŠÐ>0=Äi`z }`zˆÓÀô(@ûÀô§éP€öé!NÓ ‹áZ©ú€ äѸB€ªü?Ã0Çé endstream endobj 46 0 obj 11663 endobj 48 0 obj <> stream xœ•VÉŠÜ0½û+th§J²60†^܇Ür¹%“’@æ’ßO©J²%w;dÐøIO¯UI =ª?Ýo èËFÛkìƒzýÒ}xR¿:è#`tjûÿõkg]ï•·¾7êggMè]F?TFƒ!!&6@xÝ·îå©«–Bd’wek„Wëðò¢SÈ‚ÐõvÙÚáÕ:¼¼è² Ð}\¶6@xµ//:…ÌÈ…(ÙJÄd^¥#ËEg! òvMm „Wëðò¢SÈ‚œ^SÛáÕ:¼¼è² !¬©mðj^^t YªP <Ñáò¥?*ÉÓ­Ó˜xÞêöY½»¢B­n/G@ÐÓG00€ôŽ¡OŸ?ít°#Ä)Œpä‰g“á2}º½ïæ[÷¼±j voU#k²½4h€köbFœìˆ¦²d3yÏu}ddX"¡O—†…¨©¼IMÃHŒð'íáÏà@Óè1N·ïdPû”cš¦Ñ ^!À™´tÖðfR¾Rþ¥êb*ýwð¨#iÏxÞ÷ʺ¾œO%ßzUyãì}®Àþ—?œlgõ6IIàM馒ÊÁöØñBN›"× §ÂºÖõzÐyԩ܃^ˆT}imngsá7³1á7 Ímt¡âeSÁ®<6ºÙL’õÒD4òU«$–ñ«zž°°¯IíôÈÄfr€µguÕ^à€‰dÖgÉUBr$‡µ¶á¢»—#ôÉÑ‹Bna™NÁqï—«Ürâ.mµ$äS¶I‘Ñ®æú°¨úÛ  öMòž¯ö<ŸG¾“¤ÔØi5¹i ë ¨EÑÄ ¡9O‘àŒ¦è!ïã “u,ñФDϹ† É„ÌOwbs¦ó–|æQÎ+òæ­MŽD»/@‘¿®m2×ñVE»Î¬Ö/uˈÛsé0Å­%ýt)ë|Iï¢öŽ‚•ëfs»ëÓîFzãí£ë«cšWh÷ Ûs€C5zÝø¬þÉ%'~ endstream endobj 49 0 obj 777 endobj 51 0 obj <> stream xœXMã6 ½çWø\`²"õi ho ÐCÑSÛmQt[ì^ú÷K‘’LÅvf¶È®F4ŸÈ'ÊŽcŽ0ü{ø2˜ÁÐÌþˆCrpLÃ×ß?~7ü}0ÇÑÀ†Ç¿_?øpŒƒ#Å|>x›Ž¡X Å žF²Ø‚;üqøôÝA¹O‹å±ªiÁ(¯2ñ*] ë F)v6Ž  éR;Cpºv7ž  à¸Ñ‚Ó<ìn<Ì–ã"hgœâwåi`±R“CO Fq¤E™”y4‹ ½Á(ÅÀÎÆQ¡b¢ Ú‚ÓÕ°»ñT°XÎ.‚ö†à4»O‹…£R·3§yØÝx*X,XaE¨8@1€Š7¨í x``gã¨P¶lJ‹ QpªqWž+úEÐÞœæawã©`±,‚ö†à4»O‹å–ªÔ´`‡S9Uu‹ ½Á(ÅÀÎÆQ¡b¡Qêv†àt5ìn<,–‰JÐΜæawã©`¶p´‹ QpŠGÜ•§ÅJ¦±¨iÁ(r6Ê<„¥„Þ`3ðÇ>ô@¹¾¹ctÃë¯Ã‡ÀáõÓO'Ï/p2Ö8ãÏx2͘§‰§þüâOf<§“¹ð…+7/çp2÷óϯ?¦×ÃLJU-ØX9y½< 1sÉb8ûXµ’/à½E|<ú­E\«„¦!; |‹,-Sà€†) œáÓùOÖÒ”ÄÙ¡ mÂÚ\d“IÌb˜fpæ#—†™úBŠÒb7Bb©M%”$¬ª<«&8OûÝ bïY Ù·¹pøœ Õ–r­¹Ì d”¥Neƒ¦²h)´Ä¿ð^…~«¸)ÄiJ;š À6--7—Ê5Žy¥ÚyY¸d$7õW’Ñ/Àk^†Ã­ä&ˆšé›K{¨«ä…döâ½v¢$h9Uf HÙ¾-í †!Øõm9/Í™qÎÑç®|º{Žöñ¤Žúø±°*ò°ÅPö›Ÿ¶Œk 6ŽE¿rýa#íD˜tzÜî·{ÅÎú@÷YV݈ÜSUDP‹*]O°ÐcëÖÒ5Vè×Åa°ó[šš<öšÂMmZÛݲܽíÙrsêäSÉJ/ÎK ¥ò\p!÷÷³>+·8õwSéó 7e­©mU¯tx:áÚi›ÊR¬¾+Mã‹à÷³ïš œy‰gaä$ÖÚe¹Úæ­èçÚû·g—»>õÁj·39¢JL5ϤûTz%1\ÎÅêirQ·ŠÝ¬G¤ó罯·s'YÓv™;-Ìlf:ø€Ø‚OŸ@»ðúç>¦*B¥ƒDTôÝÁ$s5‰ÞŒüöáj·t,Å'úLp+uóNü(o9«ø')—5M~ãé×Lp£çÙG#š] R.HWÇVÓ3ÙXQñŽÝyñ™L.ÅGÕI&ÿ.¡„ ˜ ¯0sv‘´ôº½¡¶sa¥6WN Ðö“r¤7ÜÉÊ\Y_®ÐÉ¢Ï@úW*·0[Tÿ M9ôòåç¹X»ÚÄ+åpÁ[SW}hýˆãn?ˆL0nêü~¡˜ÆŽ¸V®æŠY)KDÒñ ½mL+½© (DÇîšU•žÃ¤ásÖà«r¡²^èâˆ3B 5{ñ!kn=T‘j¼ŽÞ‰Å0Ò7ÒXt8£¥oÅɾ±®MYGÊ5Rßy:@ãôÖê+ºOéßü £Çeæyžºº·­‚;qÌ…Ÿç°1áH÷û[îhëò Þˆ†Ü’W3æ'Æ\FãèÿnI-`ŽŠPútNß[Ë:þ[jÙXýÕÂ]cÜèêô®¾æCKý·uö¿éØb üÓæê5CÞ»¨Áwž­˜²žËû íÞw_.÷à/—ÀÃy?”´§GLþ%–^—Ÿc¿ðÅ‘éÉ1jø/Ÿ¾ÿìípÿgÈ\ÿÓ[–Ú endstream endobj 52 0 obj 1480 endobj 53 0 obj <> stream xœí{PWöÇ·jÿÚÿ¶¶jk«FÃ[‰ˆ/@@|Æg41&ø@ß1*01%Y5š˜ø6jVE• ä-øVT¢¨ÉM~•ýí/¿Íï07é_{»çÒ3Ý=—é>§¾E1gî½}gúô½Ÿîé¾ç×_ÑÐÐÐ~}òó/ËÐx˜›wôÏÿó¿¼?1šÓææ ACCCCÓÕþùóÿÀØÞðÍ¡Ü)÷ϧº¸p”B]{ü3BšÁ ¡‹‹ºPl!t¡¡¡¡Ïº¸¡ ÅBšñ ¡‹‹ºPl!t¡¡¡¡Ïº¸¡ ÅBšñ ¡‹‹ºPl!t¡¡¡¡Ïº¸¡ ÅBšñ ¡‹‹ºPl!tÌ~øù—'(÷êÙ¿~qÏÎ… qÿ°(±`¾sÏ®wÁº¸¡ Åèúñ¿ù–†Ô¿~ù¾«è¢9678¼?"š¼¹a×»`]\äþx@èò,q.¾#¤á{P™Mn;ˆpç¶7=xöo÷ìz ¡‹‹Ü]ž%^ÐÅýƒR]\„ÐeZ!t¡(!t¡ØBè2’º¸¡Ë´òh貜»leBrjhÇp[@@¸Þi³OÔß ,Z¹–úùìýO÷)ßDùo  ¨»ÿ,=kAXx””ýÞ ]ºÆ€Sàq1ÀB—‘„ÐÅE]¦•¡ ”1 ˜½4—Q%cÁRj" ïYrùN@`ü_ÿà'ÙZµ÷ž‚'0(xËcÞÞÞT âK+¶ï·úùS¬V¿õŸ}.”)»Þc‘̉G«.“2Œ WÉ&jšŸ€¶òæ;ï ed¿4#A—~1 <<1ØBè2’º¸¡Ë´26t}¸ëP`Ä+¯;ªòÅ™sð²C‡3fT]ªhúvûÑÓñ}úõô"™I¯/La¯¤¥ÿã«úªÛßV_™»l%´oí*:Ó`ŸIƒCÃÀ“¹hYaÍÕêæÕ5.\±ÆÌ×W¸Ç;mzTIHNÝ}¢¼¢é1ªC7À9tôXöGV¸‰ú–¡bhÇðˆÎQKóòO_¹ëèN'ƒA—~1 $<4ØBè2’º¸¡Ë´26tÁ$¢»õpTebæx9~j¦¸VMó¨".éºÀ IùÓ³€ÿµô øæ¢åðÖâªÌ‚œ<ðÏÏYM^¦n ,¨|n‰ƒ/ÊZa ¼S$û#+Ü„PºÇ ƒA—~1 $<4ØBè2’º¸¡Ë´26tU~ýÅþ£*ñIÉðr÷‰rªâÚOö(„®-ŽQþ}Å•àï•ÿ1þ?|öU¦¨®üI©¯»ÿÌÑD/ö(ß©»çäYvH ºô‹%à¡1ÀB—‘„ÐÅE]¦•±¡ë@i-ˆMìã¨JxdgxYrùUñHÅE…Ðu¬öå/»vüaáðTW™»tëÜ¥«Pë«ÆËÖþ=eðШè __²âA›®òMOÙõvH ºô‹%à¡1ÀB—‘„ÐÅE]¦•±¡kݶ½Pà•´tGU`^ƒ—µ÷žR«nÇžpgMóÊOn±†–á«Õ1’2 Ò«÷bzÄ:*ÆþÈ 7!Ô%·…3d0èÒ/”€‡Æ[]FB!t™VƆ®—Ó&C…¹yŽª„v ‡—0ßQ ª.±'\Áùå%ú Éé+w-¿ß‡Ó%¦;ü_~ãö^?5Ób¿"„p¢þFEÓãÚ»?ÛžÛœpnBÉ×Ed0èÒ/”€‡Æ[]FB!t™V†®m‡O‘Ó|q>ªJ¯ÞIðò@i-U÷ýmûB×Îce”÷‰rðÇ'%Ãÿ†„ÿ÷žª`ïr‰ãó/«ÄNjÒwÔ…›hóëd$èÒ5”€‡Æ[]FBy:t {yœEî1"±,óööŽîÞsèè±›??ª¤|ëèíãc#lî“C'ÛÚW\™–1;6±OXD'ðáœ7.±oÚô,éÍºŽÆ@å-¨”Q¡ ¾¨È¢áÝ9KW0ªŒ? ^N›»H\¦õɵî=BרqoPþI™sÁ?iæ<øÞòUðÿK¯¥QeV~ø1l"kÉo‹GÙ ˜xLÒ7²ø@ù͇ÔFÉrD 7ÁþºÄ2 téJÀCc€-3C—ì¼@÷N:%„..òhè:}¹ð©õ¦Ó¨!K,öa"¾åCIy‹è‘p±êüôÆ´YŒZSç¼)ÝŠšTÊ`ÐðÑþ 3f“;»õŠ«nþ'£Ê¶Cö+!>>o­\w²áfEÓãíGO÷î›ÒoЋâ’Ò §¯Õ Óúø©™‡Ï^ Ë4ÍÉ~‡Ì’äÊÉÙ[BÂ:’Û_R]Ñô-ÀÂÜhÝPÊàaŒ­8Û‚J ºBBÃàË™2{áÎãô6޾ðú–çç¬NJh „iîÕIÓŠêa¦¶Ø€fƒàÜQXš6=«k^0S9fÕÆmTÉâ‹·'̘œ ›ï ‘¶"kÝýgâ2k¶ìì•ü}x}ÊŒ“çoN â“’}|}…µ=’bAРS›P8Ax:t¹-”€ÇÅ[]Ú~Ÿ|…ÐÅEž ]äžÕ)öëçð×ò|f[±GGéÕ{d¬VX¾á÷”¨* ¿ß˜ïÊÖ‚±zKºg[P)†.ý´ÿtåùeÌŠ(–gAÇ0j´)„.AŽb òëïÂá­Ü Qo-_·üð.”áÞÿ„.Nò\è"·?‘G~È g©²%#dÉå;¹6Ä*¾ðµÅžÅŒò÷ˆK°<ÿ|:[Ò­8Û‚J™ºö—T¯ýx·ô©’ïÅQ¯8µïŒ!³A—Ë1`ÔhS]‚1³’¿Ív¼îºà,¬¾âço?D÷Î!tq‘‡BWÕíïlÝcãOÏøD銦o¥…GùÍnÐð—–½µê}x·ÿ‹#(ÿÊ¿B*Ž;þ£ý…Ô¼Jzål *erè"ùS¢»÷Ü´÷ŒÕw¾?|öÂäYóɽÐðý;µïŒ!³A—Ë1`ÔhS]‚Ø1@nÐM8¤¾åÇûï}ûLÜ{.¡‹‹<ºÖlÙÑÀ+× ž%yÀ#{O…ô訽÷ÆØ%«×“_ô¨ÑUöhªi~ò¬·Þ&É®5± 'NdHuø'±_ÿéóCIáá£6·âT *erè*¨ºD²ÀHíi³Øu:çš º\Ž£@›BèÄŽ ¬”ÁÃ,ö‡O~ŸžàT0X;By(t¥ ÚÁË«øÂׂ§äòooï>ýI ˪‚Q«ô´YÞÂ|RòDý¬Å9=âz““ebþ6[úì…_5>nEM *erèj°/92wÙÊØÄ>!aýümÝzÅ {yܶçڬhÔ9×lÐår 5ÚB— 6càäù[A!¡V?ÿ{[­~Á¡aâ «=¡‹‹<ºŽÕ^ 0Œ^õÅ—^£àhÕeÊ/¥&/¯ÖÅQG¼òºìèÊÀ­±¦(\¤´ìz˦½G2ßÌ|"u_èÚMœZ·Íc¶ÍT ¡ EɄЅrJ]‚”€wþŽÂÜñá®pï3%„..òDèÊZ’Ë࢙‹–Så=-•–¯ðY/1-c¶ ÞW\Ý­T}Ê ×z%Û‚J!t¡(!t¡ØBè¤d¯nþgXxƒ¿zÜ"¢R]\äqÐUßòc§¨ÐÙù\‹ªjdË­ºL–Eýø‹"º½óxÔ|!Úå^I[P)„.%„.[]‚” àÓç/†2déÚióÞâÞgJ]\äqеõàq‹ã§¹I*F%7Æ3ä¨ü›ï¼~@¾òßPoÁ³–ä2~û# ‚‹V÷¢¶âB *…Ð…¢„Ð…b ¡KP›ÓÊ®¢3¼¼Â#;Õ5†Et‚ÿ­ÙËKB&AV.ƒ®—^›_ÑûŸî“}7ÇA‹$ý«VÐUwÿY¯„$xkÜäéÔ[6û_ÔE6AÙï}hy~m j+.´ R](Jí º´ÓäƒkØ”&Ú~´Fx«Ÿ¿t=@¾BèÄŽ™ªÛß‘´é›ö—¶ï·Ø—Û'fâ.­  “ ;%Ï‚®3|­V[@ £ßÇkšŸ‡ÀÞ/»ÞÂøVÙb”ß_Ríåå-J‚v}E–zHJ÷ÑŽÂê+å7ÖÞý¡øâmr؃p¦³åÀ1G[q¡•BèBQBèrAoÛ—×p/ÔÞ{JnÒðj%„.A콓nO’2fü$ÁCN«Å)ȹK+èÂ$ÈNɳ ‹¤Q`ßLž–1ÊÀHÈÞw ±Ëg,X ï†Ets]ƒýwO›ÍÑÔo½óÁÇì­8Û‚J!t¡(µ7袤„¨iyÜä m{Ut®‘ôgGa©Þ+$;+„.AŒ˜Ù~ô4œ"‡„u„™Zpž<Ë~x—{牴‚.L‚ì”\;ˆ6oÞ|áÂ÷8±‰}ßÑ®¢3PJ*ÜwNÅFƒ´»Ät‡£_ŸH½U~㛜õ› ÙµG¯€À 8Ä  ianÞÉ[²[qª•Òº:T\\üË/¿¸V¡‹‹TÆÃýû÷7nÜøèÑ#åU ]${—†yý>©J©‡®?þ¸¦¦Æ©*ís(p´*¿þÀÞZûÉê-rQÞ5RîEL‚ì¬\;ˆ"""þð‡?/^¼X!}µÏÇÌÒº¦N ò׿þ5==ÝúÒ º–Ö½–žÓ3ÖÜ3>qNö;e×îSŔ֎? &S[ëj™£Æ½!½ÖÑ€@ù¢áe÷ØøºûÏÒ³„…G@›Â»pú0l̫ėØwANžôÊÆ±Úkc'L  œJŒŸ6s_q¥N!¡2.^¼;ýücRR’BúÒºÔ§–¶|öÖ#ðôˆëÝ`¿pçAA!¡0Â÷í?xëÁ㤠ùBlâ{MÛÜq²±‘د?Õæÿ—¿ùp É©¡Ãa^€¾¥eÌ–½…F¿¸R]±±±$V«uÞ¼y é ç¤ tadg¥ºSB_xà´7¹ºs–¾ô€®m‡N )–Äݽ§øW€ù[I¦'±yyy/~w½¸5…ÐUÓü¤õÜ6:†<ú*~77‹8é±ø>ýÄóã†íû­~þT«ÕoýgŸëš@—`JèK«+]*S K[®½ûƒÅ~QB6lÀÙÀ„.%;N66AWÙõ(i‘|dj9h]ãJ+èL }áÜ¡“ÔC&AvAš@—ú§½ÉÐå,}é] É©pe.ZVt®¦Ôò›7í+èÜ¥+8'ÍœGÊ_¼MîÏL˘]Py©úÎ÷0‰g¾™Ý¨ËÛ* ­9(}ËûéXD稥yù§¯Ü­hzÜ`Ïúh­ÂÄ ›8}¹ù½­»È¬šµ$—Ô…y684 &PèsaÍU8ö‹ê®X u¡Šæ!¡-t)¡/ ^T“bXÚrýƒŸ,ö/€» <ŽT\„`8XZ×»oŠ…ù²òç(6dÛL›žˆáÝ'Ê¡hWÑ@)p=V(¦w\i]Jè 示0 ² Òºô…N{èRH_z@W@`Aâ‹Z ½§*‚BB…ikÚ¼·,’%G@c'Nµ<ÿä‘Bè<éY ÄN9pÂ,vÂA '‰)ƒ‡’—3-o+çP›€üósVk:Aƒ¾4„.5)†e[&Îq“Ÿ{,ý·5Š£º0ê*ßq²±!Ûfêá¶€@8;¿(;gyþG½ãJ?èbÐÎ:I=tad¤tIé œö&¾Ð%˜,}é]0>Xìq_¼í¨LòÀ!Pfç1ú.2Õöí?Xð8 ]{Nž;É#!Jk4b4”Ó:Ê_T×út[Rê@ÍCBoèL ¯»-ßhx#½Ë)†еÿtØInÄòòòfÔU¾ãdcCÉ'%ª»ÿŒ*©w\¹ºè 示0 ²k‚ƒèÏþ³Â£ÀûÛßþóoIIIvv6÷C‰UðåWúíwåö§?ýiĈ{÷îýé§Ÿt….˜=I>85KJg1Ÿ)†iK\&ò…h( ©Oo²´u}ÑŸx¨FÈBL”“yÊ‘uîÒUóÈÊÊrÛ~ŒŒÌÍͽxõš¶O/º–bX¶eâ~òsTXZWùŽ“ GýóëekÿçQÑ1pÆÝº¥}É qI½ãJïùBlùË_ÒÒÒŽ?¾dÉÍCÕ º0 ²kÒéJ—ÀZÂå <[ioâ{¥K–µÓééE8=ñ¤Ó1"R|û¯Õ ÎÚ»?PÉ=ÏV«Ÿàqt¨JýÄC­]CnH¨½÷”Ñ[rw™#ƒ4ÿ~Üp¥‹°Vcc#©¢ù’®¥–mYá.–S¾ãdcC¶ÍÒ«÷bzÄ:jÓmqå†+]kýûßÿ&UpîÐIj  “ »üµk ]RÖ œö&.ÐÅf-Áô^§«°úÊÛïo"'M`9ë7?¹¯þäù[Tù“ 7-öÍì¡ZÑô­Ô/[2¢s”ÅñR0Dd98i¢Oý¤tQ¬%˜æÐåZŠaÙ–mŽòK‹)ßq 7?5Ób¿ µnÛÞõ7*šé¹_\Rï¸Òº¤¬%Î:I tad—¿vM ‹ÁZxà´[¹º²–`n[Ð Ž ˜†ÈKrß—tÉèíGK,­«<$Tù͇âbûŠ+BY`Ga)£o†„2{OU¸-$4‡.G¬%˜¶ÐårŠam¡KùŽS]ä2Y IPA½ŒªÞq¥9t1XK0œ;t’èÂ$È.íj K káÓnåèr–µÓºà ï™¿ã€ØYv½Ž À `ò2cþx9jÜT]ð€?cÁRÁ3;xv}%.‡ªBèšõÖÛIÂVrûwRÊòrÞòUÒ«Áž2#º{Oa ¥tµÉZ‚i]jR «‡.ñV”ï8åÐEž©§–B3~y´J€½ãJ+èRÂZ‚áÜ¡“\†.L‚¬& ²kÑêÕ«²V{8p¶-‰Kìkõó'«×:5ÀXºB×Î;]`-Áô€® 3Z“rB ¬Ù²ãhÕåÚ{O‹Î5NÌœc%ð:}¹™¤¿œÚK'ö)—¡ “ «‘á¡«è\#ùVw–2Öó§¾ùq“3ÚóÁ¢‰Ì] //ÝÉ\´ [@ GÝcã'fÎ9V{*öEÙ¹—^›Ó3ÖÏßÖ#.\^¶3Wb¿þ0y‡¤Nn¤!÷Þ(™XA;•8ª@gà¼xÞòUÒËõÅoO˜1;!9úÞ)²ß Wäo¥VºÐJ ]êS ˶¬ˆ */%¡ƒ3ì&§vœrèjh]ý{g¯„$ØàÖëSfÇ= k®Æ'%ðGwëᆸjÏÐå²4íN:Ü¥~qT” 2¯]Ð…¢„Ð…b«=C5°Ÿ½õ^öˆëÝ`ÿõyÀБA!¡!¡a}ûÞzð8)£Çhï(eykù›ç.[™œÚ1Ü}K˘M=Aôé‘âac^% Æ%ö]“'½bÖf÷ÚB!t)® Û÷[ýü©w­V¿õŸ}.´CVÑŒŠŽ!k‰Ín;tJz£Xt÷žT6@· ¡ E ¡ Å–AWíÝ,ö_–eÇ^p6è3Ú;‚®²ë-$ó8e€LTÆœÜü-â|Äâûôs—’îµ)„..26tQ#õRa8d‚CÃàXÈ\´¬°æ*ÄQ]ãÂkàpöñõ%O-5Ø×鵨‘‹èµ4/ÿô•»$œÝ€êk„ÑNy6í+ KqNš9ËׂЅ¢„Ð…b˃ «þÁOð2$4 ¸ ÆØ#«ï|°´®wß s¥¦Õ£½l›iÓ³ÀÁîåP ´«è  8‡Ž++¨º›ðòò <^w¶õÞÖ]„Ö„Õ<v¯M!tqB—Â23-o ûÅ9TÅ9yàŸŸ³šª›žµ@\, 0œÔE­½§*‚BBÅGœ;…Ð…¢„Ð…b˃ KðŒ›üܪe¿¥qaæQU9Ú˶™:d¸- ° ò’ØùEÙ9(Þ)Rðd¾™ žéó‹‹mþü¨Ÿ¿MXœYy÷ØBèâ"„.…e žÃg/PáüI©©º{Nž#Ï•?©øâmî;¡ E ¡ Å–'B×þÓ5b'¹ËËË›QQåh/Û¦¬êî?£J’Õ”Ö2j)ï[]\„Ð¥°ŒìO‚uîÒ•ªK­Ø>Y§ƒ—WRÊ8IùôH±Nþ+BŠBŠ-O„.á'?G%5íeÛ}Õø`ÙÚ¿Ã xTtŒ¿Íæãë ÓU’,ð%mеÐÅE] ËÌæŽ ª®xyL¢’Ëw2ßÌ/#"WmÜÆëkAèBQBèB±å‰ÐÕfI=F{i›¥Wï‘EüdM(FVf®½÷”ñI•w-„..BèRX†,~+MkÞææ¤*¬¾òöû›ú z‘”ÌY¿™ËׂЅ¢„Ð…bË$Ð¥~´—úÇOÍ´Ø/C­Û¶÷DýŠ¦Çµw ·â‹KFtŽ‚—âŒcR)ï[]\„Ð¥°Ì€a#Á³÷T…³›cÐ JÂÄåkAèBQBèB±eèR?ÚKýä2×ç_V‰Uô2ªdÅ ’Þ‘”w-„..Bèb”'s™·|x^z-ª¸òã»÷æuÔþ¸ÉÓÃ;Eæï8 v–]o’AÁ\¾„.G’&«U>ž{´º0 Ø20ti8ÚËúmà¡–B3~Y’«üæCâ™õÖÛðòµô瞸ܸç°Õê—”2ÀÙî±…ÐÅE]²N?ÿÖ$ãKóò+š“eOÎÞzÖœ¯¤¥ï/©®húv÷‰ò…¹yä'øôÙ ÙíO˜ÑšrFï5[v­º\{ïiѹƉ™sÀ™:d8—¯¡KV²Éj•ŒçH’ŽÐ¥2 lº4íeýñIÉà!‰\Ï4>¤8|Ô¨qoß ³×|@òc_øÚÛÛ<3-/¬¾rúÊÝ Û÷GFuÏŒ…Ù¤)åÝc ¡‹‹ºdd…jÈÝ´¯€“.¡ß«w’x» »ÇB!tÉ: */%g@A É©‚¿øâí 3fƒÞïÙoЋ+ò·R+?8: ¿¼t'sѲn½â ®-  {lüÄÌ9Çj¯ñúZºˆÎµ<Ëßq@¸tïZ†ôÒæB— cÐ=·…„™¡K“00@ °eHèÒc´—õ¯Ù²³WBlpëõ)3Nž¿Κ«ñIÉ>¾¾ÑÝz%w+;qjLX˜)âûÎ[¾Š\KI÷ØBèâ"3@JV]å7.ÉÛ@’1uèСÁA²Î†¶ÆsF7%Ii%I'7{@÷–æåŸ½õÈ !aNèÒ$ ôHÌ%ØjÏÐ…rV]\„ÐeZ™ºŽ×]Ÿ:çM8C„Í×j}cÚ,’žC[èR˜”ÖQ’tèÌÎÐ=x ]…Õ5êfƒ. Ã@ÔÉ\b€-„.# ¡‹‹ºL+sB×Îãe#_O‚ ËZ’+ÍËF,…åIiisAP2kq4e±§3€ÎÃGÐ)$Ì]:…´€úÔÉn޶ºŒ$„..Bè2­L]u÷Ÿ­Û¶·wß2-FuY¾ncå×òwœj]N%¥%u¥isAW¡ÃQÑ¿=‹‘œúþ¶}š§‘2u²›c€-„.# ¡‹‹ºL+SA™¡æ.[©¼°JSIi‰“åV,ø Ò¨—á¡Kï0PŸ:ÙÍ1ÀB—‘„ÐÅE]¦•© KXè2!95Çú–…5.§’Ò§4m.%²¬|R>,¢“¶!axèÒ; ¤Ô§Nvs °…Ðe$!tqB—ie*èªi~²zóö^½“ÈTÕ%¦{"¨ t9•”VÚ%èjÎúÍ/tíFJÂJÛ0> stream xœ•XM7 ½ûWÌ9À:"õ <ö ÐÞ,ÐCÑSÚ´(º-’Kÿ~)RŸc³…ƒYqøôD>QÒ(êÓ¿‡¯“šµl´Gœ‚c˜¾ývøéÃô÷A£‚è¦íßo¿¬;úÉXœÞV‡£ãö_SnÓÓ$‹AƒÁ¨?_>:gå(P±ÐP,¥ã`îÐñ°»ò°XG¬]Cp=»+O³¥£§gî:×ñˆ»ðT°X¡ÊÑ73¦ãM™ ”¶WMÐÑ`TÇÀÎÊQ b¢ :‚ë³awå)`±Œn‚ކàzvWž c§î`®çawå)`± u„;ÂŽ:èú+ì Ø0°³r([Bt02®ËFÜ…§‚Åò¶ :‚ëyØ]y X,MÐÑ\ÏÃîÊSÀb™–U×̘ŽÃt™.mš £Á¨Ž•£@ÅBÕ©;‚ë³awå)`±”ï Áõ<ì®<ÌDÝŒŒëxÄ]x*X¬ *K×Ì˜Žƒœ•A€Òv® :ŒêØY9 T,‹MÐÑ\Ÿ »+O‹¥ct4×ó°»ò°Xh;uCp=»+O‹Ð¥2‚>éG‡Üüz@0ðÞL¯¿NW ìôúåç“…ç8)­Œ²g<)ǦOÍÀM{~±'Ïá¤.übæç•Ÿ—³;©Ûù—×ËëáÓfÔ´IÀƒQ˜“ÇKTjÍQ,g{Ýd3xoëöÑ ¦fBM—; ¼Á{—)ê)ÀáËù…(Vj’8;QÑ >¢@MãƒJàóß%CdxîR¤q"Ñc~MJ›º4ô ÎN%s‘üÔãJ„˜9P¥'¿Hòâ†ÿYêSõpܺ¨ÂÑ4”ɪ­x~tš“ÔŠøÙ°†Ží2×·Tñ¼åšMëUyÞ7 ú½·¡Õ´´‡iŒ‘¨¨äñƒ¥Êr%ƒ59¡dû2T½X ©’ûýŒW§²µ¯¾&ZI Ž.µ`rJï´&ö²ãàDj.8‰ƒ+t~Hœ‹NRZeçØ‚ò°¡½ãó|ÕCÃ,¥J—ÆŽ¾Ò©àUP³ ”Íã/{¾Lj GSÿ@¿.0ÓNºÓ?Ê•ò®ÿ“ó˜~+@ ÙßJ~Ôº(¤HÞÆšQ„•l,(ðxà ŒODÒNm5'‘ì»d­¨<ÃÊÑyu!ª…¾¾£5Ä;­9s À¥ƒ4©MŸ'3s% l~Cû ýnô¤9s °Eù¯P•Cú H¯ŸÇ¢¶‘ ÎÁ¯UÛîG£{Œ»µÀ"ać*¿_&¡qö^k˜ÕŒI'MDRþ;j£…;µ) å(œ@KnNšJÅaè—àsV„ÓÎ }¼âqTj¯·K„hŠD¥ß›Æw´ìuZö*ÍèóuD3¼&¼/f #ìA]ªúFx^Ñœý ¢[oµ;>ºH׆ýÁàªS»ý –±½ÚŒìi6WÒðF™ÓjIµò|ô;ú¨ ºð´êï‚>ñ> stream xœí½yTg¾ÿ?sï?wÎ÷Þ3sæž{æœf§AÙwPw£FcbpÁQpw\LÔ0MÔhÜâ>* ¨DÀ »à‚ .Q\“˜ÄÄ83÷73÷Þßž™:•§»‹êîªêíý:ïáŸzjé®§ŸzuwÕSÿ÷`Vaë= <$9MÏþ„h™›Ïÿ·€S·„[(Ün  pK¸%€RÀ-á–J·„[(Ün  pK¸%€RÀ-á–J·„[(Ün  pK¸%€RÀ-á–J·„[(Ün  pK¸%€RÀ-á–J·„[(Ün  J¹åÈ×'étºÁ#ÆHÔÑàááѽwŸã&~t¨HN}ÂÓÓ³gd4­î“ãg%Öu°´:%-3:®Ph˜§—WHXxLÜ€”ÙûÏT]‹5K€[0q˲æV²D077·3·å»¥˜ )©fÕ'ÞLM3\KãÓWoÏš'1×Ìù‹¥ÝÒÜ%À-Џå²w6“qÍ_±†þ.ZýŽ´[ŠKêZ_×ÝÈ^³ÁÇWO“ò?Þ#]ŸRûà»Âêk sÖ{{ûÎBY²î}*÷ï•›¬âRùGõ~¤¿ûÏT¦ff»¹»ÓÔuîX‹¹K€[À)yë­·8ðêÕ+ù³(â–½¢b‚CÃëþÑ£gãÓW2ÝR©M˜<\f}J^Á6šš4lWŸ8˜Êw,5:×Úß·­(qèH‰µ˜»¸%œ’_ÿú׿øÅ/~õ«_=Z¦dZï–ûÏT’kÍÈ̦ÿé/ý¿»è¼¹nY~ãM  ’ï–e×ÎBÑûùQ9M5:W㓟¸I†k1w pK8%Ì-äH¦õnÉNM<ôy ý¸¬ŽþcÚ,sÝò|óš.ß-K¯|ISƒC¸òȘX*ÏÎË—¹ý†k1w pK8%œ[Ê‘L+ݲæþ·z?ÿÞÑ}…’>}ã||õU÷¾1Ë-ÙÍÉ£ÆÊwË¥ë7ÑÔAÃGsåëþð ›qÌÄÉ.®mýÞ\·4w pK8%¦ÜRB2­tË Ûöƒ-]·Q(Yžÿ•¬ß²SŽÅÕ?úñtíåïnf?C“Èuè–u­/N\¼2oéjO//šjtð¢¬Ü|OOO6;ý7pÐìE˨fíƒïd¯YK€[À)éÐ-9É0 v®Ë¢Á®7Ü["v›¸¥mNÍ•«E³¾;×Þòôå_µÙõ¦€["pKÄc+·´ùwÊÀ-m¸¥ËnÉ&ª}à–ˆnéL[Ú$pK— Ü’Cº‰ê~Ž—·w¯¨˜‘¯OJËZQXsÍT} ö‹Å3:bà–2Ûž–[:Sà–6 ÜÒe·ä0Ë-ÅxxxLMŸ_ÖÜjXß‚ýb?‡øÕ·¨½%pK™í OËÀ-)pK›né²[rÈqKáaíƒïN\¼òñáâ7¦Írsw§I=zVÝ{nóݪ`&MOƒ[*‚õn‰†§eà–θ¥M·tÙÀ-9ÌrKqŽW^îCSßž5Ïæ»UÁDÆÄÂ-AA·DÃÓ pKg ÜÒ&[ºlà–»%åhyƒ§§'UØ]t^¢þ†m{†½özPhX@`ÐÈ×'¯l¢ÂÐ.T³æþ·Fg¼x÷kzÞ…þßyü\âÐþ‚‚“GË+ØÆ-ÿTý͉SfôŽîë«×GÇõŸ÷óë¦]寥òö3š…*4<~™š‘J5¾npË£HÓÓö\ªáInéL[Ú$pK— ܒ÷¤¤-ZN2W䙪Ÿ–µ‚;n†„…Ÿo~àç߉þo|úÊèŒõ~¤‡þ:o;rÊÃÃ[‚ø «vööñå*x{ûlþôx3*n=‰èÞSg…‹jšY‰C¼œµÔµ¾ BZËâµï uŒ¾hpËc}ÓÙö\ªáInéL[Ú$pK— Ü’ÃJ·üpß©Âè o­ìÂ%zèææ6'{ea͵ª{ßì.*ëÛàÀäáìÀ-±"zèéåEGÌ )©ü¢±æþ·Åµ×¬ZGK£IûJ.4µ¸;QIú’UÅu7j[¿/ihÉ^³Á“ðò_î‘2;ƒæŠMHÚ¦²êÞs -¶„ GŒ›(ý”e®¥ñÉO4c`pHh—ˆùeך:!nÙa¬lxòÛžK5<éÀ-)pK›né²[rXé–tØ¥ Ý{E­?5}>=œ<3]¦ò Pú?¢‡‘3Ùºtë!žñ‹–§«ÞÿCâÐÝ{’“xzy±Ñl:<ÄË_ +©¸õDºÂ-;Œ• O~Ûs©†'¸¥3ni“À-]6pK+ÝrãÎTaBJªÑút¥‡õ~äæª¹ÿ-WÓÔ¡¶®õ7/»Ú‚–Lÿ{{ûH|Y–òzFF›ª)ý”寅•(™ ܲÃXÙðä·=—jxÒ[:Sà–6 ÜÒe·ä°Ò-_O™N²óòÖ ¡‡txåæ*¬¹ÆÕ4u¨ýüÿ½SÙõ‡ºž«Ö­goú¿òö³÷ûä™éºö¯zÈIÎ4Þ®º÷¼þáì"ˆñò×ÒáËÅ·´þ•”nxòÛžK5<éÀ-)pK›né²[rXã–;Oœcߟ·xæêGõ‹§‡GÊë¹7í<(Ó-÷žªàæÝ¦’ÊûÆ'ÐÿƒGŽ¡ÿœ«êp¿³ïŽ}^#.4T\£["-pK1ê¹e‡ O~Ûs©†'¸¥3ÅnÝRg OOOz§Œ|}Ò'ÇÏÚ| ­‰c¹¥"ý†‚Ù]t>&n€·o`pˆÍ7ÆÜÀ-9,vK:Ô†wíNSç¯XcªþøÉÓèá¬KÄ3¶]«Û»L·|mÒÛÜz§¥/ òisÒÿ sÖÓÿcßLáê¬ûp­"cyžP¢÷ó£šâ«Ùæ±e*ï|Å­WÔݬµÀ-Ũä–ržü¶çR O:®ì–F…‡ÃæiVË-Ű¡4®ã–«7nQöMQÿèÇ P}»5Á- 0×-é(ùñáâ)s2Ùõ½¢bj[¿7Uçñöï—<=—®Ûx¶éNս绋Êú H˜<œ«iôïåíM1yfú‰‹WØ0ƒóW®eeö}ÔÅ»_ëÚÏ»;|¾¶êÞ7$Ùyùì\»ÔÌlaiìªá×S¦¯¼|¡å)}>2ê5òö³ãÊ ¿¯}ð«éã«§’ù´µlAùk‘ù¦€[v+žü¶çR O:pKil¾‘fÅÎÝ’+¤wAaõ5ú0ÅÎ1ÎÿxÍ·Ó²¸Ž[Nšž¦ì›¢äR Ûž=Ååâ¾ÝQ·äã–F¡Cí´¹ ¹Qš¹¶ÚøôÕÈñop3Òá’º®¦ÑC<‰ÁÖ' o’¶h¹PmëÁÂN†›×P²ø+ aäðˆnç.ß›8ewìH:Âð€"s-†ÏÂhà–Æd³“×ðä·=ÃuÎÛð¤ãÊni´ùÙ|3¬‰c¹¥¼‚m45iØ(›o§eq·ŒŒ‰Uö=bhޏ%‡¹n”8täŒÌì½§ùÒŒ¶ÕÆ'?-Ê}7>iˆÞÏŸŽªoL›UÒÐBb@ÕèØ-1£PBŸbRfgôˆŒ"1:füú-;¹•–^½?eNflB­"$,|`òð5Û¿äªmض7*6ÞÇWO›ñÖŒ9g/ߥÂâº}ã<½¼„Q¸©…' FÕüü;Ñ2ÍZ‹Ì·ܲÃXßðd¶=—jxÒ[*ûzÚ6ê–ìŠ9z³7µaKï>z˜÷ÁÇ\µœödi*Õ±ù3Ç¡ÝòâݯéadL¿¦¶SËCli_ 4tûÑÓB5‰{Ôžª¿IŸš{G÷õÕë£ãúOž5÷`i5·ÒÊÛÏhªCXjFVPH(UŽ8ˆ[æ?*ßùjÁªuÔû‡èýühÛRÒ2¹SŒ„ì:Y:rül1q²ró ¿ÿ”³…–nÉa“þçpYNtS9ÍÞ™·´a:l{NÜð¤·bª 8í8¨[–^ùR×~SöðÐç5žžž¤§n uŠk¯ÓG0*?|¾ÖæO‡‹C»eýÃèaDž;Ÿ£——“=*dÕL¹å»{ûør“¼½}6zH¼ÒºÖmkéÞsñÚ÷„jFݲâÖª¦3€ÚCQM3÷\ò ¶±Ó–Äôí?P¬—2·Ð²À-9Tíè½ÿþŽý†Ã¹°›,m‚üfïL[j‹Ûž7<éÀ-…H´G±uË¥ë7ÑÔAÃG %Ìd† k|òSSû ¥ªióçb‡vËÆ§¯tí_“^N›»ðdÕÕÚß-oè7 ‘Ê“G•˜—<°s`Ù]ú’UÅu7ÈèJZ²×l 7…§—;üki>>„v‰X‘_Pvý¡p‚·LÖWÇ&$í?SIu(ûJ..RáˆqÅSXsÖâîîA­…Þ˜´º÷¶ïc^*\ó( - Ü’CÕþ‡Ý´®{ï>[œ¤=N õÄÅ+Óç-bŸ/>>\,¿Ù;Sà–Äâ¶çÄ O:pK!ÒmÀ!lDZܲ®õ½=ç-]Í®SûèP‘0‰^ÞÄ¡#uí¾ÑÃåù0ùd/¾½Å¡ÝR(™4ýg—êï=]¡k?Q\bÞ¹KrÚDnY.·Š¬Ü|*_”û®á¼©YÒÛ“4l”ÞÏ¿°úš¸Î±ŠKºŽ3,$}ñJ*œ½h™¸Z}âK:‚-´ pKUûú4Án½gÈÛ³æ™Ûì&pK bqÛsâ†'¸¥é6à¶cçn)Á¢Õïp³œ½|·S@ ·ï–ÏNx{ût *½ò¥ÍŸˆÑ8‡[.«²3$ÝÝ=$æeŸåé·Š’†¶«¿ã“†ÎûÙÙ‹na¿4¬×_gl4cqÌÚB ·äP»ÿ)kn]°jíú€ `úÑ+*fäë“vž8gA³wšÀ-µ‰emωžtà–B:löo;Žè–§ÌئÒè\{ŽÕ>Ü÷G›? Sq·äFá¨)<ŒèaäÄH.ÝzÎ[qëI‡kù¢åéª÷ÿ8tDD÷ž¾z½§—ƒŽ«ÆÆ4\ 8fm¡[rØgÿãÜ["v¸¥9Ÿ/ìÜvìÜ-Å%O_±QgSÒ2MÍUÛú=óú+ k‡q·´ &˜Ô䄆óÒ~—^KùGì¾fFÏÈN¥¨ô£Ä“5k -Ü’Ã>ûçܱÃÀ-…ÈqK;·rKJQM3;ôï8Vbt®Ù‹–ÑT6Ö묅Kmþ,LÅeÝ’Ý ¢òö3‹Û€aùä™éºöo7î~ò46ÖG寄ÂyKWë îDÏÎ…ŽOlÁZ¸%‡}ö?θ%b‡[ ‘vK‡°‡s˦ö1iÝÝ=„–%53›JÈ(„’ã&R •Ûü¹ÆuÜÒÇWO%+ò ªî=/kn½x÷뀠`*™’Jû±êÞ7ûÏTfçå³3!¹%s-}ãèáë)ÓW^¾ÐòtwÑù!£^{mÒÛì×í•~/œ‹RzåKv‹Þ¹KrŠk¯—]HïÊðˆnT2'{%«cÖZ¸%‡}ö?θe“Œ¡H¤¿8’¥H¨‡Œ‰àíã+Ü|ÄN·"ÝfÂvÑ-)iY+hjPh»æwwQ™››)AùGB³—ïêýü¨œ¦Úüépq·L:‚ë«·,d§ˆpô”Ì}ì’¹–÷?ùŒ[éâ¹Ë÷&N™axŒxg맆÷Šê/^µü-´ pKûìœ;pË&qËÕí7òSp××?ú‘]¢àT*pK!{ÇQlÇAݲöÁwì[©qoM­þò[6n 9W½1iªÜaSˆe}û·ß~k“7Žá¾i}”Âêk C†ùøêýü;Å&$±ÂÒ«÷§Ìɤ‡T>0yøš‚í _Êl†å¶íЧµU¾5c½Ñ¨°¸îFßøO//îÖ½{OULœ:³gd4½éóûœõ†ÙÉÜB ¢¬[ZÐ$”uË?ÿùÏúÓŸ¬Y‚}ö?ÎëÝòùóçÖÌn?üðÃßþö7³f1ë7qõ\Ëš%Ošž¦ìV•\jaÛ³§¸\|£[{ˆõni«C¤â1ÕfÈvìÖ-;–õíaaa½{÷~ï½÷Z[[úãÊQÖ-ûÛ߯ÇÇoÙ²å믿–9‹²nyõêÕÿ÷ÿþߨ±c>l™d¢‰jëÝ2:::""bíÚµwîܱf9òÙ·oßþçN:õÌ™32%Ó Ü22&VÙ­¢ûvø%‹õniAˆþG¥À-mËúöÐÐÐ_´óË_þR¦dbçÚ[”uË_ÿú׬Iüë¿þ«ÌNUq·üÅ?±L2Õh¢GËÞLMëÙ'Zïçïß©sŸ¾qóW®­¸ù˜«v¤¼~üäitøöÕ·Ý3åµIo½ÖRÎ÷çì¦T½£û6<~™š‘JËjî:Y:rü¬0&n@Vn¾áWF§êoNœ2ƒ–@u¢ãúOž5÷`iµJP·ö»6’In)¬Q¦d*â–Õ_~Û#2Š&å}ð17)§ý›"š*ýM·ä‹w¿¦‡‘1ýšÚßìíãËÕñööÙüé!5¡²n©dŠÝR¦d*õ½å¡Ïk¨E‘&n¸%×^÷ñÕSùáóµf-¹þáºöß.6T*dÕL¹¥Ì¦b´AuËŠ[O¨šÎz¾E5ÍÜsQµ1+è–òûC"U ÜÒ&QÊ-;”Lì\{‹ÚnÙa§ª[š%™Š7ÑØ„$:–¥/YUr©…Žã•w¾Úz°°K·T8mîBV§ôê}v†”´ÌÂêkµ¾#mH_¼ÒäÒÃf/ДuˆËÙXýÁ!¡]"Vä”]ÈîˆZXs ––Jª@«(kn}oû>v(Ƴ¢ƒ{çÀ :dÓ6×Ý ÃtICKöš $4/Í¢x#TÉ-U•L£n)`T2üMœ™^Âa´£Ùî0h(•,]¿ÉÜ%7>}EƒH/©Až¬ºJÍïhyC¿‰Tž(Þÿ°a¯ÆOžVzõ¾©: C†Q½§ø³+Ùñ}À ¡âB³Üò³³Åu¢ãúSá‘òz‰ N=Žêœ¸x…+/ih»¤7>iˆâPƒþG̯~õ«Õ«Wçææj¶F‚üáÒõ¯å9{ù.}<ñöñew[èTzåKË–ÌJ—Õ‰ Ù’îîóšÕTŒ6H9Ï´©ý%†ÕÔnÌä–ÿò/ÿ¢Y ù¯ÿú¯½{÷ÂT ÜÒ&Qï{Ëÿ÷?~üÑ£Gÿüç?ãC™Fûï-ûÛߦ¤¤œ>}ú¯ý«Rëù½¥··÷Â… ëêê — x¥C6žÔÍÝ=>qpƲÜ]'K¹ñ£Â»v§ †npîò½¿;2Uβw…°±¹B.lPStéÖCñF¨Í÷–¤”#GŽÜ¿ÿË—/[[[gΜiÍe~ož——×ÒÒò*\'^°çˆ°_>Ü÷G‹—ÌJ„©;¬iYS1Ú ®å‹–§«Þÿ}(‹èÞÓW¯÷ôò¢÷Ža5µ³6ß[rý!‘*ni“(î–œR `çÚ[4sKU•R@Ú-%”R@&z¾ùAúâ•âÃ\phøú-;… ^ÞÞTXÿðnFv„··¸Ð”upåìaãÓWâ:ìr¡úG?Jl-;óÓ´Å_UÝR¬”Bý 6üîw¿ûûßÿnñ¥ÝR¬”Š»emë÷̯è¯á ¸ò—,³E–˜ÕTŒ6HÃe–ßxÔ32ÚÔ2µl̪º¥©þ‡H•·´I”rKSJ‰7ŽÝFm·ÔF)Œº¥¥Pµ‰×^_½iëÀäáìЖ»ù#VÎ.íacì‹s¶éŽ®ýêZq¡Q¨º÷ Wn´Zh—*,»þPb#Ùm *o?Ó¬ªá–F•R W¯^T§´´Ôâ5uK£J) ¸[Î^´Œê°oÅg-\jñ’-vK³šŠÌµLž™®kÿFqãÎgoWÝ{NŸ¹Ø¥@Üìj7f5ܲÃþ‡H•·´I¬tË•o»Jn©±R ˆÝÒ,¥Ц‰’aÒ!|ì!;'Óðþh»‹ÎS¹pa‹»{Û=è+ï|%.;$,¼`ÏqaÅ­'Ôfü;ufÓ-§‡¯Mz››—J¨<-k…¸t‚ ÷—|!.îV/Ý,ç-]M…o¦þìŠ`v1H|â`öpaÎz±‹Ö×}¸£{ï>Âè. Æz·LHHèP)6lØÀŽøÖü,Nn)S)tËšûßÒ¾  [œlj‘þïÞ+’Ê-X²¹n)¬Å¬¦"s-z??zÈ”>~ò46Ž¥ø#•ÚÙz·´ ?”ÙBìê ã¶c·d7¾TðYÔ?ú‘cW @"–õítËê¹¥®·Qp?ÊqKÅ›“ªQÖ-­9ÍN6@q·œ2'S×>²ß†m{Šjš©Q•\j™š>Ÿ “†buÊš[}õz*™>oÑ©ú›µ¾£šô?O©œûÕæ¢štô_[uï›ýg*³óòÙémÜ€HŠÄz·4ëÖÞìq†Å?‹[ÐÒtKÚ ºöÁ„’ã&ÊÜ;Ö¸¥o[+]‘_Puï95Z³šŠÌµôO ‡¯§L?^yùBËSò–!£^£Yì×í•~/œYªvc¶Þ-Õ;DZ¬.k;6ùM|Òô4e_:v°×yOq¹áý§ì0Ö÷íʾq¤c´ ·d«¯Ñ§TvòvþÇ{4ÛÜö(ÞœT²né(ÞÿÐÐèŪ$GË„jïlýÔð¾<Ô˜ßýh7·ÀmGNqÕhÆÇÏ…EtÕ‰®•0ÕÕ·­Èàö+QýâÅ_ym=XÈL•£ÿ d9ߌ™ÍúŸÿý ΰægqsQÊ-w•чR&ñ ©g/ßÕûùQ¹á™.ÙÔº ËÙÉb‘ßTd®åýO>ãEºxîò=á›yqeU³õnijûËÚŽMÜ22&VÙW›$G¢g°Ã8[ É+ئ}#¤Á~äê(ÞœT Ü’CþçókÒ—¬ê£÷ó'èÝwjúüSõ7¹jÇ*.}sJÏ>Ñ>¾zjEì«£ ¤ÃeÜÀAtÄôï@MrÆNT—Mw琢‰SgR}Ú˜˜¸ô‰Ìð*ãÒ«÷§ÌÉŒMH¢m ˜<|MÁvnè$¥¢¥[ ?ˆ[ÿ³¸¹(u?qöQ…Œ›Ä¾’¢©fÝO\b]†åÔ%& FíÓÏ¿µ ³šŠüµlض7*6žÖBVùÖŒ9ì·âº}ãècT÷^‘Ú4f§tK—µ¿x÷k*‰Œé×ÔþAoðˆ1Ô 4tûÑӬީ{¤²txƒ{6º,U Všš‘J5Þ#õõï|µ`Õ:jáÁ!ôF mKIËäN,aÙu²täø7Øéý’•›oø‰ ÃÍ“gr˲ëuí·0kjï‡{DFÑü>æªå´÷Ã4ÕT?lt?]µP¨Fsb“Ž–7¼™šFÖA}£§Î}úÆÍ_¹¶âæcë_L¸%Î¥×>Zº¥øq+7³Ü±yìÙ-¹#l§Ã(è–õеˆÛyüœá׿T(ýj˹Á=}.¢{ÏÅkßê˜zµ+n=a·:å ×ª¨¦Y¼åyÛØyËbúö(~Áålžü8“[–^ùR×~z{xèóÚûô"Ÿn¸%Ô)®½NŠ©üðùZSËQÖ--nNTn´Ý{÷áî$hAà–8úkÍúîq‡[:VÈ-a;FA·l|úJ×þý½àÓæ.¶›„‹Údnžü8“[.]¿I×~k]¡„½§† c7Û¥¿ôiŽJ¨¦¹ë2ºêëXÙœ¨ÍP9Í[r©…úú<¸õ`!‘¶•/&Ü’Gí£YÿÃý ®ñÏâpKÇŠ¹%l§Ã({8+œ4ýgW ³[ôŠo£f8¯üܳyS3²:Üž¤a£ô~þ…Õ×Ä…Ç*.Qµ°p¡$}ñJ*™½h™¸ÚG‡Š||õÂ0wò7OfœÀ-éSÕ‰‹Wæ-]Í.ˆ WL˜DoŠÄ¡#uí×ÒÃåù0ùdªiÖº,sK+›“Ÿ'*ä¾¢i7ïgg/J?ÚfÚrÁRè)ûÁ-Õˆ5 ON‰4<éÀ-)pK›né²[r(ÞDÙaqÁªuò+›z(³ŽÑÑPºtëÁÍËF‚•zF7ÉÊÀ-Õˆ5 ON‰4<éÀ-)pK›né²[r(ÞD…Q©c’ öi|ò“DeEÜÒÛÛGâïéåÅÍÛøô•ôS`CÖÐö³úA¡aʾDpK5bMÓSâ O:pKg ÜÒ&[ºlà–Š7ѺÖï~´;ª_<;>vëÙ;ïƒMÝNB·d÷¨¼ý¬Ãm3º|qh;s7ÔµG/V“ž=zFʾDpK5bMÓSâ O:pKg ÜÒ&[ºlà–ê5Ñ'Î7‘ â¼`Õ:ñ}HYqËÁ#ÇPÉsUn’Ä!ž¶mþʵìr]77Úò]'KUzeà–ªÆ‚†'§Ä žtà–θ¥M·tÙÀ-9Ôn¢E5ÍÓæ.ôÕëéÐéíã;-}AqÝ aªÅn)þ>jaÎz*ûf 7ãºwtïÝ'cyžôò‹k¯OMŸÏ~ߤíœ>o•¨úšÀ-5ˆY ON‰4<éÀ-)pK›né²[rht_žÛÏ–®ßÑM×>ˆŸPn[úø¶ÙŠü‚ª{ÏÙ‚ï~L…RRŸ¯­º÷Íþ3•Ùyùž^^T˜š™-½|6"mm¡œß7­ÜR³ÈlxrJœ áInéL[Ú$pK— Ü’Cã7z(nà ¡Ä·L:B'‚n=XØ) Pg@ÿAÉâ/šŒ.Ÿ¶‡¶J˱ᖧÆ'§Ä žtà–θ¥M·tÙÀ-9lÛD-pËÂêk C†ùøêýü;Å&$ å¥WïO™“I%4!$,|`òð5Û¹·Ñåk¸¥Íc[:AÓÜÒ™·´Ià–.¸%š¨ö["v¸¥3ni“À-]6pK4Qí·Dì0pKg sËëßüÑ2÷¾ÿoÍÜÒæOçëWpËŸ¾]ûÀ-;Œ­ÜÒæ§ ½°999«€-ÐàƒkŸh°ë…U8úk¸%b‡±‰[â©ïJX…£¿æ["v›¸%çGí·Dì0pKŠ€£¿ö["v¸%EÀÑ_ûÀ-; Ü€"àè¯}à–ˆn @pô×>pKÄ· 8úk¸%b‡[PýµÜ±ÃÀ-(ªU»Ø6h¼£µwË¿üíк íÝ8+pK pK pK pK pK pK pK pK pK pK pK pK pK pK pK pK pK\Šþò÷ˆ¶yùß×fçÒŠlþdqþò·ÿÑf×; è´fý¸%.Å*`#°s] v½£`ë]áºh¼£á–¸ÔÉ4=û¢en>ÿ‹6};v®½åéË¿jX·gÐDµfý¸%.úv'îÛ±sí-pK4Qí·¨ úv'îÛ±sí-pK4Qí·¨ úv'îÛ±sí-pK4Qí·¨ úv'îÛ±sí-pK4Qí·¨ úv'îÛ±sí-pK4Qí·¨ úv'îÛ±sí-pKé&ªû9^ÞÞ½¢bF¾>)-kEaÍ5Sõ-Ø/Ïèˆ[ÔúáÄ};v®½nÉa–[Šñðð˜š>¿¬¹Õ°¾ûÅ~ÜrõÆ-jo Ü 6Ðí·tÙÀ-9严ð°öÁw'.^ùøpñÓf¹¹»Ó¤ˆ=«î=·ùnU0“¦§Á-ŽôCûÀ-]6pK³ÜRœã•—{EÅÐÔ·gͳùnU0‘1±pK€£ýÐ>pK— Ü’Ãb·¤-oðôô¤ »‹ÎKÔß°mϰ×^  ùú¤ã•MTÚ%‚jÖÜÿÖèŒï~MC»Ðÿ;ŸK:¿s@@Ppòèqy۸埪¿9qÊŒÞÑ}}õúè¸þ“gÍ=XZm¸µ•w¾Z°j]lBR`pˆÞÏ/2¦_JZæ™ÆÛB…%ëÞç~÷ß´ë üµTÞ~F³P…†Ç/S3²‚BB©¦Ñ× n Pè‡ö[ºlà–Ö¸%%mÑrª¹"ÏTý´¬œ°…„…Ÿo~àç߉þo|úÊèŒõ~¤‡þ:o;rÊÃÃ[‚ø›Òvööñå*x{ûlþôx3*n=‰èÞÓð¬QÒ¿¢šfVGÂ-嬥®õÒZ¯}O¨côEƒ[Ôú¡}à–.¸%‡•nùá¾?R…ÑÞ2ZÿØ…KôÐÍÍmNöÊškU÷¾Ù]TÖ·ÿÀÉÙ1J¬ˆzzy‘ªMHIýã5÷¿-®½¾`Õ:ZMÚWr¡©Ý;QIú’UÅu7j[¿/ihÉ^³Á“ðò_g”2;ƒæŠMHÚ¦²êÞs -¶„ GŒ›(ý”e®¥ñÉO4c`pHh—ˆùeך:n Pè‡ö[ºlà–Vº%ùUèÞ+Òhý©éóéáä™éâYêZ_P}®¦Q·$í15#‹ÊßLM£ÿç.É¡ÿ3–åru²ró©|Qî»BIÒ°Qz?ÿÂꟛt¬¢M}CÂÂ¥Ÿ²üµ°yi ¥!Ü 6Ðí·tÙÀ-9¬tËê/¿e¿,­ß7>î?SÉÍõþ'ŸÉtËmGNqó,­¦ò¨Øxú?yô8úÿÄÅ+\’†*O"Ý¿4µ^q‰üµ°y?;{Qz½pK€Ú@?´£»åÈ×'ýJGÝ{÷1nâG‡ŠäÔoûQÒÓ³gd4­î“ãg%ÖE‡û”´Ìè¸þA¡až^^!aá1qRfgJ…)W‘¿+·ä°Ò-”×SÚqF뇄w¡‡ç›ps¬º*Ó-OÕßäæ­¸ù˜ÊƒBBéÿˆFN¡èÒ­‡xÆ/Zž®zÿ‰CGDtïI2LÍŒ £Ô¡[Ê_ +©¸õDºÂ-j·Ô>í–eÍ­d‰mGF77ñU®\$ކĄ”T³êëþù+$—Ƨ¯Þž5Ob®™ó®Åš%X¸%‡•n¹qçqsâêS+¥‡õ~äæª¹ÿ-WÓpE¬¤®õ7/»Ì‡–Lÿ{{ûH´V‡¥üÆ#ú”dª¦ôS–¿V"\ d*pK€ÚÀ-µC»å²w6ÓñkþŠ5ôwÑêwLU3¾zš”ÿñéúMíceV_[˜³ž^¹Yšþyi­瀬Üüc—èN‡~ú»ÿLejf6û^h݇;$Öbî¬ Ü’ÃJ·|=e:UÈÎË7Z?08„ÒÞäæ*¬¹&Ó-?¿ÆçYvý¡îŸ'IvëÙ›þ¯¼ý¬Ãý>yfº®ý;F’aúDVuïyýÃØÕ7º¥üµtør±À-j·Ô>í–½¢b‚CÃéÈHîˆ=M}I"q˜#U£I“‡Ë¬OÉ+ØFS“†âÊãSù®“¥FçZûû¶%)±s—`eà–Ö¸åÎçØw½ŹúQýâéá‘òznÆM;Êt˽§*¸yéC•÷O ÿCÿ8WÕá~g_Zú¼F\h¨¸F·DþZà–;n©}×-ÙuFf6ýOu¢a«¹HæÊo<¢IA2ë7ýóË"nŠÞÏÊiªÑ¹ŸüÄM2\‹¹K°2pK‹Ý’šbx×îºö¯ÐMÕ?y=œµ`‰xƶëÄ{÷‘é–¯Mz›[ï´ôT>mîBúaÎzúì›)\úôD«ÈXžÇ53îÚ<6¢Q寸õ ƒº›µ¸%ÀN€[jÇuKvj"ûúåpYýÿÆ´YFkJæÎ7?ÐÉzEœÒ+_êÚÇîãÊÙ ò„ŸD;ŒáZÌ]‚•[r˜ë–¤g.ž2'“®Ð+*¦¶õ{SõwoÿbÓÓséºg›îTÝ{¾»¨¬ß€ÄÉÃ帥—·7éëä™é'.^aã[Î_¹–Ù û.ôâݯ‚‚uí'|>_[uï2^jKì<ÏÔö`,ìŠõ×S¦¯¼|¡å)}"2ê5Wö{÷Ê ¿¯}ð«ÉÎY‘_@[ËÆ®”¿¸%ÀN€[juK:¼êýü{G÷Júô£C!ì +KæØÍÉ£ÆÊ¬OYº~M4|4W¾îŸ°ÇLœLÊ!Ö £1\‹¹K°2pK9nir¼isrÃsû·ñé«‘ãßàf$O+¬–u¾%IéÖ' ïË“¶h¹PmëÁÂN†›×P²ø»GaÔ#ðˆnç.ß›8e†PÂj&!®fÖZ Ÿ…ÑÀ-j·Ô>ê–¶í¡#×Òu…’åùPÉú-; +æêýxºáÖòw7³ßIä¤ë7µÿ|yââ•yKW³¯hŒ^”•›Ïn*Íd nà Ù‹–QMá‹ ×bÖ¬ Ü’Ã\·  J:rFföÞÓü™F÷o㓟徟4„>‘ν1mVIC ©®}P,‰…’=Åå)³3zDF‘”3Þ°µ—^½?eNflB­"$,|`òð5Û¿4xû슧Ïb´o͘söò]*,®»Ñ7>š·0ü;yoÂaTÍÏ¿-Ó¬µÀ-vÜRû8¨[&áæî^zåK¡ä|ó:@÷”lXÙÐ Äp§ÀuX_'yMú™ÆÛËr#cú±ß+¾z}jfö-O ×bͬ Ü’Ã&ý;CÐ9£‘éiޏ%@mà–NÜ·+¸sOÕß$ï<’/}øØ t.ªiæÊ åÐݽmìôÑÞÚyâœáò%¬râ”2Ç0¯¸õdë“é‹W’%²y»öè%:»Caèp VnÉ¡jÿsø|íû;öŽ#Äîî=üµ óÂ-•n €K·tâ¾]Á›±XZÍnýÖŒ9–m•Ñ%X¸%‡ªý»["}¢¡Ï §nÕ>øîÄÅ+Óç-bßNsgeXÙ€(pK€ÚÀ-¸oWjç6>ù),¢«„[†„w¹ôÄ’S¿¤ëÕ4³QÓw+±`³÷ž® yûv·x« —`eà–ªö?…5רm y{Ö< ¤sn P¸¥÷íJíÜíGOKü†Èn/.çÚ‰˜ª¿xí{TNfkx_ZcÆò<‰¬Ù@šE£brk±` VnÉ¡vÿSÖܺ`Õºè¸þAÁ>¾ú^Q1Ô\ž•!³A:Aà–µQªog‚1x>žaw-ÆÃ£í¼ã&½Øèžžž=#£iuŸ?+±®ƒ¥Õ)i™tL óôò ‰2;ÃðÌ=SùK°Û¾]©;öÍ)ômÚuÐèÔ‚=Guc;+å– _FŶÝ]eÒôÙÜ$j6ºö³1¹¯L…¬|ïCÝÏ;âÖbÁ¬ Ü’ŸmµÜ 6ŠôíeÍ­d‰$`nnnܽ'Ä1êŠRRͪO¼™šf¸–Ƨ¯Øߦ˜9±áZ¬Y‚ÝöíŠìÜ -O½¼½õ~þ¦Æä©k}áß9€ö~Å­'¯ªt$ê>_ëîÞ6ÆàÖ'ÅåûK¾`cÅ'ÎÿxOqíõÊ;_Õ?ü¡ôê}úÜA{Z£›»û¶#§L­Å‚%X¸%ÜRûÀ-j£Hß¾ìͺö›¯é$ÇŠ1ôÒ’âºÙk6°»QÐñ]º>… §°úÚœõìLФµ¿ß!½s—`eà–pKí·¨"}{¯¨˜àÐðú‡?‡DôèÙøô•Ñjþ@ªF“&—YŸ’W°¦& Å•Ç'¦ò]'KÎÅn “8t¤ÄZÌ]‚6}ûG}tåÊíwnt\‰Wƒe_ɪC5eî;³ÚFSû vw¼qoMå&UÞ~–»ù£Á#ÆôˆŒòóï¤÷ó£Ö˜¸¥¡dÂ-p)¬éÛOÕß$ï<’/}øØ ¤aE5Í\¹¡º»·>zÂ[Fï”!a•§Ì9†yÅ­'[œL_¼’,‘ÍÛµG/ñ­XL¹¥ü%Xзÿæ7¿‘Ù9[Àï~÷»™3gž?~åÊ•6?!â[ª·ß//¯ùóç×ÔÔ¨á–GËÞLMëÙ'Zïçïß©sŸ¾qóW®­¸ù˜«v¤¼~üäi‘1±ô±WTÌk“ÞÞ{ºÂpi¦úqyåígôïè¾ _¦fd…„Ò2…š»N–Žÿ+Œ‰•›oxš õ¥Ô§Ñ¨Nt\ÿɳæ,­V©ªÝÿˆùío›’’rúôé^½zÙúXÐkúöŒåyú7wIŽÌ^ÚT ë7>}50y8¦¤eZ°ÁÔ]wï©ûùhfm•Ñ%Xз«ñ½¥ ”ÿûß­ß¹ˆqñï-¥üßÿý_6‹âMtçñsÂÙ,bè3lùGBµ5ÛÙI5ÜGÝeïlæ(Ç-ëZ_ÐÿÝ{²[”Š'ålÿðÁèÛ X/?Ø}ØÛÇ—«ãíí³ùÓCj4B ¾·”ò¯ý«- à`XÜ·7>ù),¢«„[†„wán¥g½[RŠjšÙ¨é;Ž•X°Ù{OWмá]»[¼U†KЦo7å–†JiýÎETŠkº¥¡R (ÞDc’è홾dUÉ¥–ú‡?TÞùjëÁÂ.ÝzPá´¹ YÒ«÷YBQ «¯Õ>øîtíôÅ+ÝH.=››D‡]ûÙ˜ÜW¦BV¾÷¡îçƒqk±` ÚôíÌ-å(¥õ;Q)®à–r”R@ñ&JÎFoÏñ“§•^½oªNÂaTgï)þìJö“Ä€ACÅ…f¹ågg/Šë°{Z)¯—ØàäÑã¨Î‰‹W¸ò’†*O¢x#TÊ-¡”SXÖ·_hyêåí­÷ó75&O]ë ÿΞ^^â@+å–”ÃçkÝÝ=hêÖ'ÅåûK¾`g[Å'ÎÿxOqíõÊ;_Õ?ü4Ÿ?ûö¬yn„»û¶#§L­Å‚%hÓ·¿ûî»2•ÒÊ«Hv‰àíãË·7º+ÍmNçvË+VÈTJÅ›èᲺNÔ®èMJoáŒe¹»N–Ò§Qqð®Ý©‚xt –s—ïµîÑMN+5ê–ÜýîƒBB ¹Dôè©3M—n=o„ֻ寡” ,ëÛs6nÑut=KJZ&ÕY½qK‡½´©H×OËZASƒBø®{ûÑÓ¾z½©¾š&­ýý鵘»íûvUw®õ©ô#;ª ¯­·\ÝÞ¨l²ÁšÅ¹ÝÒÔh¢ç›¤/^)v¶àÐpñˆ»ô¹˜ é#7#»$ÇÛÛG¢•š*gŸ¾×a— ÑÛAbkÙ™Ÿ¦ %(þúhÖÿ\Ëúvö[Ï®“¥uö•\ :T³Ã^ÚT¤ë×>ø®[ÏÞTaÜ[S¹I•·Ÿånþhðˆ1="£üü;éýüzEÅ$›—Á`hJ£k1k vÛ·ÛÊ-K.µ°WuOq¹Ä]¸W~Òô4¸¥«¡j-®½¾zÓV6²AïhVÎ.í9{ù.WÿlÓ]ûåÞ­”¥êÞ7FÝ’«Ú%‚ Ë®?”ØHÖ‰ž:®^à–µÁ)yÚÇéݲ°úšœÏ\vw›ïU·äЦ‰’aRÓ"‹cÙ9™»‹Ê¸j»‹ÎS¹p• ;÷¦òÎW⃥ÕrÜ2nà ö KbÛCuœ«Ò¬Â-j·Ô>Îí–ìx*¦©£ßÄ—¬{Ÿ›E|X‡ÃJKŒ\-smÍ·äP¼‰Nš>;$,¼`ÏqaÅ­'ÔB¨°‡i‹–ÓÃ×&½ÍÍK%Tž–µB\Þ… ÷—|!.¤)Ç-ç-]M…ÔÅ…[>;áííŸ8˜=\˜³^gì¢õuîèÞ»0T‘‚[Ôn©}à–,rÜRΰҦF®–9Œ¶–[r(ÞD§Ìi;Í;08dö=E5Íõ~,¹Ô25}>& Åê”5·²ª§Ï[DŸ\j|G5é777*ç~¦¹tíWö»p‰jÖ\›6wa×½ØC†YœÒ+_zx´}í9wINqíuZ2µçðˆnT2'û÷̺x÷뀠`*™’zø|mÕ½oöŸ©ÌÎËgçjr")¸%@mà–ÚǹݒEη:Ö‘9¬´©‘«å £­qà–Š7QÒ9£W^“4-oª½³õSÃûòÐg–w?ÚÍ-pÛ‘S\5š‘>¶°;GïmáÿX‘Áœ¨~ñ5÷¿êP³d¦ÊÑP²¸šR[Ôn©}à–2ëÈVšÍË\-gm·äP£‰~~í} è£÷ó×ûùõŽî;5}þ©ú›\µc—ƾ9¥gŸh_}dLìë)ÓW^6º@r¿¸ƒ¨ÙøwH6Š?Ù32šZ—à~¦Ü’²÷TÅÄ©3©>mLLÜ€…9ë ‡n+½zÊœLú4DÛ>0yøš‚íÜÐIJn P¸¥ö[ʬ#Xi6/7rµœa´5Ü’ýö[Ô}»÷íŽî–ò‡•f%ÜH§r†ÑÖ8pKô?Ún PôíNÜ·;º[ÊVš•p#W7ÉF[ãÀ-9Ðÿh¸%@mз;qßîèn)Xi£ËÇÔ0ÚnÉþGûÀ-jƒ¾Ý‰ûvGwKùÃJwè–B¸a´5Ü’ýö[Ô}»÷íŽè–âAWä+mtùr†ÑÖ8pKô?Ún PôíNÜ·;–[úø¶ g½"¿ êÞs6v¥üa¥._Î0ÚnÉþGûÀ-jƒ¾Ý‰ûvÇrK6d+”9¬´ÑåËF[ËÀ-9Ðÿh¸%@mз;qßîXnYX}-aÈ0_½Ÿ§Ø„$¡\ΰҦη”9Œ¶f[r ÿÑ>pK€Ú owâ¾;×Þ·ä@Õ>pK€Ú owâ¾;×Þ·ä°mÝ]t>&n€·o`pH“¼o× pK€Ú@?œ¸oÇε·À-9lØDëý*>¿WŽ[®Þ¸ÅÑUn Pè‡÷íØ¹ö¸%‡ ›hÉ¥æ{ŠËk[¿7UsËIÓÓà– ôÉûvì\{ Ü’CË&zéÉË‚=Gⳇ…Õ×äüÞÍÕ‰Œ‰UÖ-i{h«hÛ4{à–µ~h¸¥ËnÉ¡M­¼óÕòüºtëAZèææF%qq#S5uô›ø’uïs³lÚuP¨vªþæÄ)3zG÷õÕë£ãúOž5÷`iõ϶áö3š…*4<~™š‘J5©œ¶‡ÊiÛVä\¼ûµ¯Ü 6Ðí·tÙÀ-9Ôn¢§nÍœ¿XïçOþæåíýö¬y…Õך”vËvööñå¦z{ûlþô°œºÖTѽçâµï‰WJÛC"JÛFi;ikKZT}Mà–µ~h¸¥ËnÉ¡^Ý{ºbÌ“ÝÜÝÉÙ:e,Ïc7{‡“I9×òÖ©¸õ„–ïææ–¾dUqÝÚÖïI³×lð$¼¼„•6>ùI×~—¨Ð.+ò Ê®?¬º÷\XUËX–KËiûfÕݶœ¶_¥Wn Pè‡ö[ºlà–Š7цÇ/7î<Ðo@"“Àˆ=s6n©þò[£•q˹Kr¨„Ì›1+7ŸÊå¾ËÍ›š‘ejãi;ik#ºÿãfR± I›vän`}à–µ~h¸¥ËnÉ¡x ‹èÊÄŒôr󧇤¯‘QÄ-“G£’¯p3–4´]‡Ÿ4„›÷³³¥Ÿm3m¹ ÇôŒ”}‰à–µ~h¸¥ËnÉ¡xe>¶`Õ:ù•M=”YÇè=ëºtëÁÍ[që‰ÌçBÏÂè&Y¸%@m Úné²[r(ÞD…áÐc’ öi|ò“DeEÜÒÛÛGÂ-=½¼¸yŸ¾’~ l¬$Ú~V?(4LÙ—n Pè‡ö[ºlà–Š7ѺÖï~´;ª_<³n={ç}ðqÍ}Ï·¤UPIåígn[‡_BÒvænþ¨k^¬&= z.ôŒ”}‰à–µ~h¸¥ËnÉ¡^Ýyâ܈qÙè‘AÁ V­+¿ñˆ«£ˆ[9†Jœ«êp“$Ü’¶mþʵì:q77Úò]'KUzeà–µ~h¸¥ËnÉ¡v-ªiž6w¡¯^OÎæíã;-}AqÝ aªÅn)þ"taÎz*ûf 7ãºwtïÝ'cyžôò‹k¯OMŸÏ~X§íœ>o•¨úšÀ-jýÐ>pK— Ü’C£ûòÜ~¶tý¦ðˆnºöÑ#…r ÜÒÇ·MSWäTÝ{ÎÆ®¼x÷뀠`*œ’zø|mÕ½oöŸ©ÌÎË÷ôò¢ÂÔÌléå³8iÛh åü°n}à–µYµ*g°ع.‹»ÞQX¥áÇŸ†ÇmcûÄ d[&!¾T‡n=XØ) Pg@ÿAÉâo8.Ÿ¶‡¶JñA,á–pA´tKÃXà–…Õ׆ óñÕûùwŠMHÊK¯ÞŸ2'“JhBHXøÀäák ¶sÆ(q¾¥–[ÀY±­[ºfà–pVà–pK¥€[Â-”n ·P ¸%Ü@)à–pK¥€[Â-”n ·PŠœÜ:Ê6ØzÏœ™ÿâ(Ý endstream endobj 59 0 obj 21569 endobj 61 0 obj <> stream xœZI«ä6¾¿_ás ;Ri± ¦áµ»û[àA!·,·@rÉßO©´•6·g0ý,©öåSyÄUNÿ}ü3‰Ià/³š+L‹–×eú÷_~˜þökøïß¿>î_ õužæYO_¿O?¾ä$aúúó×MH·‹Ü„Z˜lÂÒŸ³û¹ÐOs»˜M¬·eŸôâNÏžŸ7»‰Çí·¯Ÿ>ž_?W\•”®å ’h?÷!^AЧ”7³IÅ8™°yÄÄÌWÓc¢“&øÓºÇ€‚±h·Y[”µ$!QÑËä¥4—]¼PfSd/­\§/§W(Ç+-XŠ&sÊ™žQk¶Pè`å)I¿Ö™7+¢©¤RÒ:ÉÕ§ù¸¹¸nÙIüý,^=Q Àl,£Sp£™ãFi‚دîjV5"ÛË"˜Ê álÜrö)ôÐó¦œèB£´Q9â;ý¤#Ì(hñÊ(‡WpUµÃ³3˜D´-t¥.ÌŽxÙbpÁÚǧO/;:8b.R\_¼5(Qm£a“ =IHp»_õiíÏPžãëòPÜøÌ¼ÓÙpR‡Ð8ÔS¨¶(ù0§¥³¶îPhØè¹Å½!Ó{7ĘdÖïÕ à'±,] 3…Hä׿ "ÿ5å¢ÄµQŸcOê¶áB9/´%ú Šä­*æ³LŠ3Q™iÊÊjz(å«Ô›{]ßúæÉÍõÆ2dÀKJ9ªht@¯ÃÖN1_‡µzpp…ÁAiÀb¡ò"<’±ÇÝ‚D0ËR÷A{B€ö˜cÜ«B>òµ ¶ªJõû΃:ªéK®–ÇRèµétJœ‘¢s¥`ú¤õp!íÅ¥âBŽåÉBó> /ä:ž¯Åx/Ê+·¥LbRÞæYi5&ÖÈG¾Ñ^UýMF`ܺãÝlOÉÙíßVè´Ø5!fv»k.±d¿¯ž§'Pfy©Zó…ô F"ñ/븑Hû¾‘ôHŒIh35ê—²|_ó¥Þ]B½[D‰åž){†Š-OºɨeHW2z‚ÄØîw ð)¯„Òì7È¥²‚FÅ‘WÞ¶øf|Yx{ˆñÝ»k+ e¸Þ•96sE`ôda)Ý{•–ãP%R¾š4räXåýÂ&~ª_öèPP Oã|³.›¸gZE|–öŸÀˆöÎÛŒ?Ÿ³„>faLØÇ{v?ª¬~¬Ë»:wsƒr+Í\Ú{` (™¦F[XÃÔÎo !:wÇÇ ‚È+=XÂÛÛ"%ð…4F3ò;«Ú±%dè]ðJÂR]®ó­ºXó´|{»É{{·¦TB0y0žõCµ‹þÍHïJôÔ²•s#¿Á ³Yf;ž|šî兀-A‡²Ôä!§­,–¼wriç„©Ý›¶¥]L.Jqpì×´Ó‘5Õ„µXÐ_¼ êÞ',9ÕF†ÀùÆ0MfÕåÆúÝêB;ÎiÛác]@â˜siã͇w”qÖ$Š'{Nج8 /+Û½ã¾o,ÅIѻ™©fhÓ¥Ïz"U™bõ‘ò­Ú‹åPú{®í¸fD7#h¹.O6”iíõÉãøãp0ª:Ò0Ø{à\_Gqçwa§t3Bì}Rßíëá}\é¤h…bË«"Áe*›ÂS§ê—ño™#ºo/Ì_ÓJyetÑǯ‡å½QîÄtU³Àä^6f~F›B…—ÛæƒQb3þv±º¯…’>£WÕ±àVT4V‚! jâ>¹rø5ÍóÂNÝTâq Ø´ÌÔ0Î`¶ô_ÅBr ¯à°¬Ç;³ÐòÌ Ãÿ%0€bBA>øóô?x;M endstream endobj 62 0 obj 1900 endobj 64 0 obj <> stream xœÅ;3·±×¯Pm@2ß»ÒT¸3p@Š ]lA nò÷3ä3C.¹Ò%…ñÁº}p†ó~q­ÎúøŸÃ¿ê¨àÊG6ÇÕéózüý—ß~8þë ÎQéŽýßß;øp^ŽfYæŸo×s(wÿ8–»ààîòÂæ×þvøõ‡ƒxMxêb¼óšÅeY#pÀK€ ñÚ.gG`ÍM^%0ä—„£.Å;cA.°¹ÁuÈM&üÝ¿F;X°,îøõ×ãO}ÔæøõëŸ/J+s=鋲Ê)5òí’.×|é¯'Qñº^Ô-?¸çßü{»†‹ú¼þåë§Ããëðs·«UÔ¹ÝÕèŒ3ï—~ŒRÏBÅCë«¿h+vòeñl¿œýhGœÀeH? ¼õ¸¸´¶(ìg®œÂ¯Ž@K&æÜH=Ì=q¤§u½)Ëò%H-\ô’ÇAU €ÙPù¶y1n\6É¢0YWàýJD,IO~ B|Ò#õ€µK]+Yo€v$ô– µ’0$6+ÑKn2ç‰eD‚œ“îÂYê° €§$NHN Ú°Žx‚d½ ð¶¬',,k¿k*Öœmg*ûr+<-ÙØÓðvKÖ‘v+½B¯àw½ŽøE2Üo°7,qÄ+î»Jj´ÏTK·FH¢€ÇÝ}K}1ý'Iš¤"Õ¸„ºÞÝRT)®Ÿh+¯’IݺÝ3¥„L/ìG1xgCÐ5¼<…1 8Ÿc‘Æ"Á`qáÕ i¨CÃÐ+„¢.¢F,©)Ë‘¤„ÀDïÂ3ÒÓNÛ5 wתÇL¡2¼—Û ô 6¹ÇKˆ±¨¶ „}`Cò)ð µÙ²åf½D!S„ `ÔW¶Xöuo¼µý ñ²`Í-ÞÀ w±7z/L’ˆ2°W&2Õ˜ŠSŽkmJ+{a­ª°ä¼)ܳ–+ª9ûÜ·gX[k5Yé˜ÇU_¾Åý++ðJŽlæhÚÁ ›èG7éJ† Ѝ º¡É-Ÿ:ê;"HTfÒuú¼/‰\JGð¡*z|œ—…„Ãd^Óû²Lç¢vÈ/püݺôè}ì3¯(šæ%AÕ´7Û: œÓ²[¯d %QÕtÓ8Ó¦î1]Æ~Ó6i³xJØAQU*ÑlŒØÕRt(È–Ä›ôC¦< €˜i%&ÕCÅSö¹óÆ£JáÀÅ™:ô1UøY‡+ê0ÙÁ×߇æjZVº­²Ød*j%je¬q´ã4ÅF •ÊÀ³1<¥åΗuMÑS$ÓN ö­¥219(#z•—ARé ¥EvCS¶³m¢Y¶ˆE—Z+ã`¼9êy+Í1P*¬‘wfgQ'«qµ56“I)‰‘ú‘¬åx1D汦«6Éwï;—ˆCëžÆc4çú½ï˜3Ȧï.2KëíÕ©2kœÍ;4ýÛ6J,Uy‘âK÷'›™Á¶Y+_á-ÅŒ>9@`]à)æ üÆE |»m¦Sšk!NWäo ˆ#ª¨UºšèÂy7SÆ«}ƒ†šr´¯¥}ídW4gkcû¦É0ÀÀd®§ˆR]ã®X“ŽW q¹`ÒyDÆV˜\s¶n;ò£[ëzëžH Ô%N²I"u¹˜¸@ 3Œ6ÕŠ(æs~M2èÈm™˜;Cx—ƒáŠ1Ϫ$îýx@¦Êi'ìl–™Ðõv¬LÒδùEë0ëÖ:dk¸¼§ ‘Â=u² jó,R2ÙZ/K òÞì}Ö™»õð/Ì”g´ë#ºsÂŒ Q³M™8(:4 âÜcjUKHŽ: ˆ›Ú•:Ç!i6ï«i_´*KfÓæ °HKûαPŸlxsÚ »É:Ôd†E£šR´ú°Ú”@•è ´b½fKJÙµ+mëP¥Õ-Pi¦ºÕ6HÈ&ª."Éã``f\œýœ»À¿)1õCteh4brh´ÿG¢Æb\´û4{…©+»)£°\·€:ž`b™Is¼^Ö¦=–ç7—ñ¤Áq hb5@vÍô'›P{aÙ«˜œa¬¦*Èæãb¬½Zæ¦`99º%~¯=29¾ŠÖÚ x¿¯i¡[¾U˜µ[¼®4qƒºÇ4-ŽÒ¢=†1\{ÍТóË z†gaUà(FDÆsjÆoÍpk»pR‹ Á0õ“Dœ¨=_t.¸I÷ §Åup™Ø£YOß8hQ\вT޹w"Ó¡îÔ|#4;ãd8ŦìëüVV,(Êý.ÅA¡´|Ë«€å}Oâ¼å³ŒzV`ü¨É.±íeVjú8©!6ñÀ­C×oHG-íÒ[¥líhdÞ¶–ý¼Q”<j‡æ>koÈ‹Š2ö[j2}’³¡øg;Ô-\iáD›( ŽõÚŒªÃQ Óò0ÖB?R†k÷BʜݷDÀl©É<·¡ÖÕ®Ò°r$ZëØ¯À¾/€vÊ.{ïO zoñoWý=OÄ¿3y’\¹N&ᨓÌÎO]ؼïL„Òй8´¢r‰÷íšGÞ‘Mül3R•fºÐÊ„¶¦,Ï6SŽÅòwÐ4®ûâҚ5r3ìR5¨µ³!Ä›DÖJÙð{½•K°R±ÜëYrqë «GÆ…NÛˆ¼›{m¤âô½%ŠDLóÂg{šVŸóÑg‘ú)ŠñèÚïÎî›RƒÇ»ìâœW”Üžz±(×Q±VêK¾îp3{ž±/ö·CßO®yî[Ì£6‘îx *géUq»Fã͹?¯üŸJ†ÌÉs¦\*0²&î½ìúÙgs4›êz9§Ykw6# οNóù Ëê>eõÇXzÝ «’pXrÊÌçZêAªf´ù,_Ù\©{P&ÅC‡’³\k\tûÊÖKÒó–Ÿlxš?ɹžJsÎAã}.;Ú ‡ÌümŒLH²Kª,Ë‚8Û`Hù5†é°ÖdGe]`ßQØrí+òìÿ)¿¤a¯,Ìz)'Iƒ°Zùy“oƒfM¯»¶§Ô¶•j?„¨â7âd2¬éõ…«´‹E¨¯ÇaéïCö•2-äD`,ÉG߯ìMŒ3-«¨“XkÏ~(øÊÚtœH•ã ½ÒGÉÖ´ž%þŸlQà‘ýðæ;€G[’£ zhØE99–ÚžØíÏÇôñ®~R«NýPðß:ïBÌu3v½LÛ–l:nnFŸrÌ”|2²"o¬¿œDvóqþhb0Œ8ùÒ2á¿ø†A/Ûé}ݺW+.ØTþ±Ó(‘×ň$n ‘­øú·„LJú³~0° ï0;efUl˜²¼#•Ðv)´nsŠk^ŒÅ Oƒ\Ð[vq ¨›«Ç ò´ßœEXõy@>À`îòàQ-e °ìý¦D·þ ºp%Â!YøÑ[¢ªÖçðÄPÒ@S|ΉKwé:˜ø˜æY³Ætn´¬1—›†yõ`ÕŒ€L»5 øóñ¿øâ‡¼ endstream endobj 65 0 obj 2756 endobj 67 0 obj <> stream xœ¥É®#¹íî¯ð¹;ZKU€a ìWÛ$ ää”dÓ2—ùýP¤HQªÅý:hÀmU‘Å”Ÿ¹Úóo§ÿžÍÙÀ·8Å«;Á^Çó¯ÿ8ýùËù?'sŒ†sÿÿ¯ÿ<ÅášÎÑØëpþvŠ~„ÿiõË™Vaó÷ ¦¾2Ì¿N?9ÉK¦Pé{ × šB) øRh0(­s­|4 ‚;):øZè00­Bé0j³ 8M_ ¦•÷$#l§éàk¡ÃÀ´rFÕ×Si8“?™­˜†<è½ 6‹§x¡×LG€i•¦k:Í‚à4|-t˜VC¼N‚Ú,NÓÁ×B‡iÝÕ j³ 8M_ ¦|&Am§éàk¡ÃÀ´rQɹYœ¦ƒ¯…ÓÊZ%ÚfApDþ“>¾žœ R8ýûùw/ °ç¯?ÿåf¬q÷‹½o‚‰ww3.Sþ:â×x¿Ä›™îãÍÌøàŸOüœïÃÍ|Üÿúõ§åëé§nWo0´ÞÕY¤‰ûågÌ«p±X{7ëÕN±ïmˆ`c“ '¯CþØ¡ÂÏÉ Ü–„ÿÈÈtÒÌ ±|ŒNÓð"á äB‚9þ|ÈðH@ØŽ{­s›\e¼)ÝŠâH'^Ôc#ÉÒNYº"Öû%Lˆ’àä·ÁËS:§“g1‘¬ŒúȵHD ƒü¸§âê‘þÔ\úXèV¶1À~ƒéËaÌúk,Ì1HØ9? A$€¶Ì°Ç]ÜÐò™O'R+,úz>å%AŠÀ3A6±[™uðÙés!2Îå­Â-l¿Xç_Ùa²´é Èd5Ë î‘£}¼ i{ó¯Ä‡\ø±–T9ÿ†X¾Š%º ¥ÖðFx^oMTçâJ-b؈>Õ¨DhWÓçíÊ$°5Q\¬ØÌ€¬(®è³×j%ÚìfG&1LSgÚªZ>[cdF²5§'ád*vÖÀªèd5[Ãðìáå‰ O4/8B°·ˆø/#ÃXSЊ˜¼òU®£*»²p8âΰbËf¨*ÒsŒàâîÄÞ«Ê{ôR„⚽Ğûs.t'+€Ž4¦†Þà„$ßá†÷ZƘkñ.%-~ö³Í‰  ;ùÌÙ òÈù7(óT$O4(xÏ̱°<Í’|òiG¡ùd…Ë£j5cs,pæKÿb?E ;Þ\]¹òuŠ {nœ]­‚íMÓ %´ÀVàŦ‘Ñ¹Ø ûa=æ†odRÊßYüp$²•¨àæµüÉQã±L«?4•d¯}¤«¶O‰nø¿:*î®…™AÆ :W§g1]\ñª‡>kjŸ®j§âcV“l× í/êïÙEOÓŽÕ È+ó¾ìµ¦‰u5×X»Pµ;À QÖ£:wù%áÍKôŸ¦Šl ¬~HU—½…X,`8¯¢sV·œÝ)@*Š}€n21sh*P/¯Jʦ–äB’EØ%! 蘶IS* aI¿ì )æ!pAeƒ.! °¼haT Ù(ƒC«zftÇ"Ã.ÁîfÅhcq*;Ðûí3ZÏ*˜º{ÖäƒOË!:c>úR07dóÆÅ¡Õ+ÙÀAkN=ÎxR æ_ÁˆwHL·H@˜YCÜlBÁ}/ÊvvÑ(j‚|HJ‰Àñ¢{¤ñ¸{N é£óÄ4@÷|Üp‘Û·ª ›J°lq/•Ö…*i¨VZîµÛ‡k*ÏZs!Ò$ûÍfÕ­SÕv[FûU¥¾¥`3^v ,—ÝÖ{‹ª€ªÀQ]0“PÔÁú䜉¿ÞØ[ÄÏ®§^îvÔe´Ñ@)Q£>}'÷ y¤h€ ·Öw«…\ŒF ÛÂ=%a̬³‰ªèŸ… ËšÑÝ~)OJ¬·9 TöU\ÙbKJ°1 †ý F,?Õ=êÞe‘<¶,¥ï.?cèÝsÓØÂ‡´NÞ4Ì 1·Ú…B²U¦i†Kê…ÏÎÔ†»O€ØÏëùç€ü¹šV<ô3:O#[kzáv,©‰H¡Zü”Mƒ¶¤Â´®{ÝŸ-¼Ê JÙÓÙ_ìfRÛ†#Þ¸*oïç6‡ªwÓªóØÔ†râ””\ÃÖNâ$Œ¤‚ÕÈ>­ã.’œ/Íàd…šH+þ ÷~ïÄÿ.ši·ÓU“ŠyRDöXHéWÏæWeË'Sˆé1Ós:WC×¢Ý(­4¹“[»)RÙLçÙ¨,âZšS%|“²²ˆx{åNžÌ‡THap03ÉŒæaF8Ï×o^Þèn©pÀ›Ù>ìs¢›£¾€ûÃ=£¹v<ŸO“ ƒÏãý6p“ž`O|vhx&û‚'dšÿ%÷á޽CŸ„é‡%Îø]Eòãô®ÞsÒ67 kPÊwuŽÞkà ‹ÚYËüB2Ü ìMíú~¸X7ÁaëŠÏ¦Æ’h”‡4³é[ïz"Ðù‹~wtëXÆ|ÏR IœÓ}:ŸWã&ScƒÖ×0v™?jÊõÓQtõ)^cŸp¤,摈Ìt¼J"sͰv5{á¹Ìj W»~¢­ÂdX¸žièÔˉ§ªA`-Çåž1Ú£ –5=­CXþ)Ç4áß2Ù” ¿œe!Ó}ø7?/§ŸÎÿ‹tq; endstream endobj 68 0 obj 3249 endobj 70 0 obj <> stream xœɪ$7ò^_‘gCÕhW Š‚Z ¾yæÁÌœÆn›Á=`_üûÅ"…r)w›Y©”Š}Ó3';ýqøm2“·XâÉMs°§yúý§Ã¿¿™þ0§blIÓò÷÷Ÿ1ò”c>ùéó!úù”xôëÄ£àaŒpá0 u‡_Ÿ¾9¨éGÓÈWìdë0 uN78²˜F6bÛ: h‚|„‡F'8'õ+¯Q0`²A …ônæShÛ†®Rp²Á¥8ò%€œxã0àuŠš8m1f{jDŒZ§áàtƒ#‹i”2ñZ§áàtƒ#‹i;ô+¯Q0bç /¤÷`:CÇ®B¨òðj|û88ªä0}ü8ýãe'ë¦O?œ5îr´gãM0ñâÎ&á0××_ãåϦ\æ³¹â‡>ïø¼^ÒÙ<.ÿùøîðü8|¿8ÕJ·>ÕY„‰çÕ‡3æÅX<­½Ä³õê¤È‹÷K‹[‡„F ¼¦úØ`]FK«‹0ÁØ»ÉöQŸ—ÿmî-dÍo÷Ú§)&u¾Â»}ÁWg þe÷pO¬Û9¡8}uÃv6Q€š.;@3æ)Íž#‡,ð$ðDæf4±ÞÎÌôþ¥TF’ÔYX—ã\—„jä=(ˆM ¿ÚÇ¥þÀª$â{ʦ.kÞ^gȇeîá £ r¶:µkŸàŠrõ¦~÷Ÿ¨Ìîªé¹VœP«@Q+½5KŸHç^Œ~r@Jà5ÔŽFUudKOÙ dÈÂÄøÔ¹ÄDß5JÕ¦<‘üäyBüÞ䘦¢õ´,ŒlÐn ÷ºuÇHE²[*òŽŒü&Øf 3¡‚^>)JÙ±TÑ2col¢Ð7gÿÐìD¥„Udû°˜¿ ¦z"ͬt²odˆKÁŠÆ=Ñ»Tž! ø-{¡…þº¦ÁÑ4$„Ú¾©BiîYË_IâF4«rÏ—{°ñÊöfK}:&ü²mŒª?l@Ê|4 u ëÌ£ûÏëBf• 1ï·šçÓRvI>H¯1 M>ኑ`ÑÄšÄrÄÜ”µ8~õÚ <™x;„’Žˆ<¿§ÐqØ*²¡£‘JˆI×f~ÍE&æÐÖ–f²Å ìl<‰,±rŠlâ®mh îMçšÚÄRN…èœ%0Ùý@3lèŒy05"'mû¬³èÀ¹…¯®Ó#°Wçç;ý$ªrýüBªú†žèXvm±ÇUMKÃw©Ó’,¦î¾›)ìq£@A!âì{âEØX÷6%f‹U lw®ŽM}Vš•ék} _ÂÇX“—¯ácßЃDwZLÉ »û ±ó±3df#‡8ÈÎPr[uSº(,¨çúN=óîâ EL1ª±jîZûzë" Dª…”¥ù¨g7Bé„¡¾qu¶IpEPæØM|p{ CðCAkºw i€êÌd\³é‘lŽò‰ýoƒ»­S2o(vÖC²E2edö£(m†ç¨öhΈªÎ˜ûk®<[I÷­¿)wÜR'Å+fØ·`‚Füì¼zã3å»s©©SÔAÄ Æ”:éŒÚ·³Mã~‰¾ [¹±`°1ýé_4AJŒÎò13§3+°[Öià;Ÿ6ÓŒŽøô¯¯{—š{½ãaŽëDeÆ{v^ˆ½–SOk" ¼o~¥ö$úM«mTdk±è\¬ öÝ倳êžJ?šœÎrR\(9ƒ—ÈfvMÄ%0‘-Ú=°®ØÄ v»rm>7T€ ­´½2ªûííY3Q7˜»E%Ë¥}3¬öÂç½Ù¢ä»:ã{7lI¦kf»›¼ÐVh\ãÈ·*–íiÙZ‘Ã~ǾU¾I@ذ4Qæ9‰£[Qvn>‡¼šd_‰Îj Ë¿Ù-Ô’‡irê¹c¯éøÄàÕÄÓ¹J… ±"¨5¤¶+_(žžÑëA[ÅŽzŒhN´Ê¯¯¬ÈvâÝ2¡ë‰Þ"ü+]ˆyþÄ^]×J^®Âm-øÕÚ¸éÆE}7ì\è]O±ÅJ³r¶ìƒŸµüÁí²AÕêyk›Dy•ˆ¯g¢ªÌƮÄ1!v‹”xÀŽû¶E'ã|8:¹{ŸÞ‹XÕfªû¢£Ã{*>m:˜mà‘º©¾Õ…àW µÁ¬º“M‰ûõöù‚u«.ß—ôø¨…éË,¾ªµ!=ìŸáïi¯ö1å]sc¿Mv·õIgÎAøðÕmÓ­½Ù^œìÞhš¾Ç%ÛÓ‚ ÜJ6ÎÏøæ “uÀË;ä¤WW° ›Í_P(¾›ýßk¾zH$–©ÕÂU'Ötçš/ßÍKŠ­Hu˜^õh¸*ܪˆŽ‰zƒ;;ƒíGƒ½÷ýú}ÞÃý…Àao–ˆSÛMbKµd¶Òæ¨yo Ë~s¡6fpw¦]?hŸ/͘E₾±zF®ú9˜od}ŽÎà[[@+d$›IF:­5ªm„4E™êx«Ø¶Aü’!‰)AåW·ž’Å(œ–Ò;nUÞo½—+qÕæYÕ’* ¼o‡=IÑø>§jÖCW X)Œ~—ˇÞ:§å ¾É6¤û*]Á´Ù…YܼzÖêåFBð<è)§åº¥(B”^Ûf‡çåÂX<†ËIÊ×îˆÀí8ºg3Ñ—ú§\ª^DœÌ_MÜ˃‡òf_è3î™A«nÊãXDÄNêðÿ~>ôŠÿüö`¦cmË}Fp4øuú׎šøF‡k}³‚ZŸ¨^S¿[¤•G( cÿÂ,Ø>·Þ½$2©7à5¶|=ݧ©·fGÉ}¹Ôp>ºÞ£®åûÇvaÒ?‘¾K.Ö&ZªÁpû0nZ³»PZZQÚÜͨÝipgÕž£S¨™t™òPEƒéN´v$ÜB« ±ÓGÛƒ8]ÑÊ]Ô–7Y1 ®½‰°]²G¨#Æ€ùÖ¹9· Y|ÂF‹>u¯rìwFú0Â9pÈ­óÔŽ¦»1þÐÃUó xG¢ïûôµ *P°’Šy9qïh3>Fe®êšAÜ-#³¦wC©×mñ׫T=î7hªªÿq³_Ìïv=Ý\ðÞ`Ýjÿ0à‡ Øýïƒ=wïúÆï§?þw²ó endstream endobj 71 0 obj 2376 endobj 73 0 obj <> stream xœ­ZI+·¾Ï¯Ð9À(ÜÙ 4Rë›r0r‹m ‡öÅ?dU±ªÈ^Fã<<@Oê&‹µ~µpÌÙžþ|ûýdN¦|‹s<»Óìy:ýñËÛ?ÿvú/¾+ÿþøííãóÍÙpΧœÃéóß§¿?íɺÓç¯?_Œ5îún/Æ›`âÕ]L‚Ÿ¹~àk¼¾Ç‹™¯ÓÅÜàÁ|ÞáóvMó¸þëóoËçÛOé޸ÂÝúTg&œW?œ1Oâb±ö/Ö«“"-Þ;$æsÜ:$°$åkª;b*zË~:'$áNÎ ‰éj/v¹¾»‹wåkQΉÙl‘( ~Þaï{åÄ=®þbBýa²­ÿ |¿Ùì@^—¯ï¡.wUÉ ¿½x ïi}.º?”ÇøÆ «Ä?ª2ÐrUáS%Bçåÿ:·¡…þhkëÃbîr~±PQ©ë^€ Å–®Hœá¥+ëŸÅŠm+ë(FÓ~ ·™zƒnšñ®(’¤æ”N}>ÏÝÀ¬¸œÙ«õJ”PدG%rÉ{Çõ­ú*î|”¯u£Û/Š–Õ»Ywa¿ÇÿõP)¨š‚ùsé Â4ƒ¶½ï"½Pð@§Ä>•hmE‹ ªêh@(ì¹cšæò9°c@ÄeNÂþ^´¥mŠ"±Wƒýó?û,dsAÂÞÉ™{ƒ„âg~nFÂf:B# @«ŽiQYV¤œÈç)Þ.h p>Z±â6ùrÀ–D•ÔdÄ¥À/oƒ|Õ·‚‡µELtTô0\T / ò†L ôdxgs_W<;_âpFJ´—Ñ]è×o@L@@€T­ …–¿ó¡ˆH²Æ" qîÔZÐʆ*(­-»$ýb]ù'¼¢sXwåsŒ'Ž1“F+R˜ÇNÔퟘI@Ø`Å­‰žmÉõ ØIË ùväfÁäŒÆSѧ‘Èlt|šÅ Õˆ$Í]µ‘èmë’>¸¥üdº¬d&ÀÖÒÔ†pJØi¾@ ŸK1rœÉÍæ´,ê(ÏR{F‚=èÍ ÊÝk!±A†Xš_yQ>iF¹RM;ˆ°)\ØüŠþà¿-ƒÜWh›ÈàU 9„|Möôw]­Éä±1TPÊ"[áˆCBÏŽ‰yBŒ=m":XJµœ>—âC]êÜÏlà Οýè w¥³ªV€}NÆ&°cjD<“ü­ôÚÝ–+(QJוÜRg)¸õ UKOÐ÷µXÉ ¼}(6`‡Ã×õØè š”Ñ6ëGäÔ1ÃZCµæZ(&sª›/+⛑¥|cjíÃXLú‡™KG1 Œ¥‘ñZýZJ,4h@M†_Ö\h£* /u­ß…\#èœzx|ê…!uò¤“³4scŽvKímÒµªUõ!CiùüšâÖÐØÉû*ÔÄÜ6•ô¹¾æö™I‹‹B7¨kŽI‹ÕŠþE9³ÀÓqr®-tmžUŰØgõZª '®èU Ç•â ÔØ¿(TtG¡Ê*#¯ª’{u×5tV†eœ¬‰Þ©4ì{k ö¢ùj{ÍÍ>€vª =ZHµ‹ ÕýhÓ«U;KW3*·{´ÏD›Z>‘Z0Ô÷…‹Lö<.rÓw%Ú`_ °áVú½)Ýš,ë_*½ ‹/UæßH­Oy”éð[Ç[: RÇ"då¬!(i½tä5‰®2h[jâfU”tY-ù@K¼Õ{k¦+@—VxhÛÜ6Åk•Ì2¾ÁÔÏ]bšVef!)ý+Õ©<êÈyª'Û0£ô-Û™ k•áÛƒoT~xš‚Ã\ÍÁkßJsdmå]Çõv Ó Q}âÙÑÿT/ö<­‹é[HèîwÏ¡2îæ³CƧ6X°;ƒ…ÙõìÐíKY4ÉàŒËáƒ1‚¥Q„eŒ°1$HP©Ù6Q¸ïÏ P@ÃsÊ” " GßûŽP¶ÖUŠØ*L¹¡ókB© CÆg«-ÉjŠð0åÖµ¼( l°Š–󨺑ìZª}]·+Ú?Tƾç™jë3•^âøµÀ!sªƒVG‘—š&{¸C™Ý÷$vß•×Á‹Îƒ•¥‘–ïk¢ðë„ÑC7S¦Ê”Ç;š+ÁÄo:·lxy˜¶RÃÍ!åŒää}Š«tÁ‰{•(U@w#™¯»ŒhÙðÆÌÈd%¶îW׺6hóM*Šxý+ÉK_â ½Bcê(GÈaý8ÈmŒõÔ¥P¬eÐ8¶3#Á„^ð®XK›á/að‚4¯cç©ÉÕ±§D»šïëÍ3TU-oÅ­bn¬°©hŠ+:z.ÑMsûF´Îqò¥ëdå…¹?+à§"¾µ€'ÎܰOÜ/´YXy¨&*Z¶a=LOÒúØ;»I?YÜh´¸%©¤3©§¿Ç“ËJ­j¸·[¼ö÷Uì¡×ø¼Ê‰[ðÐ]4~UÍ»9´›m›Ûåxe¹vÞñWÒÞþEù\ê„U±©;ç+m©l¸þ =ã–*IXôÌeÿæ—Hxvÿ.­¥ƒ;ÔQœ¾×¾« ¢£r¶Gùñ;JY/|s¬PЩO¸‹½$Åšš÷ƒÑ΃õtnå' ¬î¹(ÒL—ŠÉ—·&ºYÊT<èÁ®ºm!¯Ï¿­ÑÜë¨v'5ÞL5¶îúe¿Ò¼¾•a¥1Qг¨Õáö 0nð+ãn0ßYÇp—BÖQ5 ªâõÀ&k ´ÐE6ì¯F¸Õ»Øîr‚¿Í\§ã/æÈn‚9ÙN‡oµìþùåïÜÔuÇO§ÿÃÙô endstream endobj 74 0 obj 2396 endobj 76 0 obj <> stream xœ¥I‹3¹õÞ¿Âç€íªcðzÈm !‡[Èa`æ’¿IOoÑRewæûÀí®’žÞ¾ªÕIþûõÛATúæW2‡ÅéÓrøýŸ_ýÓáWx—þÿþï¯Û÷—Ñî1ºÃ÷?~éƒ6‡ïýí¬´2—£>+«œòsV¡üó×¥|õ—£?«õ²œÕµ<¸•Ï{ù¼^ÂY=.ÿþË×óûë—îT«LÂn<Õ賜—?ŒR¯ŠÅSë‹?k+NòuñÖ!>žüìG”¤¯!l@ð!ñ-Úå„9 –‹>ëçåhÎÖ¦¯‰9 V•0‘üJ¸—½ÇŒ‰y\ìY«ü‹º…阵òÛ¤_lÙ‘?LYa"lO\¯ÏaEyYÅî¾O¢²ˆqÉ>2@˜¯ŠŒ9;•ÄÂkT•^ò/W8: ¢|¯Z• ¡‘䳬Ó1+ ,]ha]Â8$e€Sòò˜ï6½ÃÏ]™Ô+ï+ê…ïcàÍh‰´‚‚öÚ«²ì”Ûœ|-ïa•À"îŠ+,.)Õ;qYɲëðH‡Ïù­-4À®'QñcþV©l£’· p=2¡2µrÈ­[\ˆ.s!dϵaÚ[Öh¶6Ú*.ߺ1‡òÖOp}Å &û”:³ •—NÐFh¼Q¸3;T0ŸM:€Οlï¶Ã' ˜l´B”Òàl#|kM悽ê¬nÙ.çÆÄ•%TŠå{YS¤[MÕ‚î{žâ<ßì-\Úãñ;6Ÿ>;qß>aÓd£o >ÊgTlkªÒzcW¶²¡#í¯ŽiıÀ ˱Íd70,½qÀªÊÔ¹&½ãxN}ˆì½‰ê¥Ü! &C€Î~t?¤ ݤŒî–( ´¦k .×+P¢ï%Rƒì‚Èžèx,ÖŠŒ§¤ƒ&ÚÐ q^ÙGD=)32_C µhPÛ4sDM°dDºb¸'nŸt»õ Z¶aÿ3qÉ>Úµœˆ5&ˆ Ò ©]Îæ\ÄȹôLÓ363·î |#t:K{ÛØ™˜•©ïó±×fõBþ-ot_ÔºÞsmæ* ¶f+‚Ef-ÞÑ^m‚ãq®f ÂcÔ¯ŠüH)£&T¤ê¹ g.2vŽù}²üì ÷íßÇeô|Ø1†rà¢Zª"˜u4{T¥Ÿ¤¤‰iѨÀßåûˆ¤ú"TŒâ~øén\Ë|Ýþ`+9›ÞŠÜ ÅY‡Ex°‡–ªO¤”]¡<žS…´á‡UC9³e\70öj ~º’i4¿]]¾O(,æîA#mc(Ȧ©fÕ_)k0¹3ÄI¨CV@¤nêBg.™}×!exS` µb€J-R”·Ú N¹è‚mü/¹dŒªbfïd‰+OÉQá„Æb¡œš¬&›ÝcN©]/B2f½‚ûÐ˺ðæeš–©g ŽO)ŸuW.‘…D^²€oÐk<ëÇjKieMVÐ]£H¯$ÇU™N“©¼Ì0>W’êýF_w~^ÝW9lx‹±ØøàØ1ÄçìFʾ:9v‚]¸ÁÅå¾°­ ™ò¬f sõÊ} Þ˜ê.Ô½ó.&ˆUÚÍKW£^ð’R•uåCp³ÂJÂx—F÷YXás¦ƒu/ê•+-QM>SW³`þ4²C&euv¯9å‚MY· %{g¦Ö¤¨À0KGg·= t2ÿ™^”¤Èª»ßÕ4Ok‡§µìí‹SžëÓÒ°ÒW[Úk`ò¹~¯ÉÚA7Ðn9‰AKä—Y¢eôÈäƒÆ·à„³Ǫè¼HÅé->NÓ#‘$vµF ±œë¦úÍ8•ä¶µ²Úæ¬æJ gÕµ¼‡NíèYçó­°ˆ0ͼþËú,]Ó‘YúOŽ7!½«OÊt/Íy– ›/,•ºzCjr9„ì^3S7:|…IO±m÷aUkª‰~Øõ:@mòÓ…|™³(®‚D8IìÚP»PGÿY¿áG­»ý<Ã-cm³…4hy14NŸMßÐxÍ íìV™Ûˆ8· ÷Fƒx¡¢åsF "}‘©\îQà1yKÓN%¿÷Õ–”nxé 2¯È\® 86„¡A0R™µê‘'·¾C¼ÀHÎþvU!ªÁ3˺žópQ½*YqÍ>”ÓÙ½?GUÉ•¨øçrà?÷‡9‘`†NH~&òLÎC©)úy ¨§™ X¼èÙ« XŸ\—A½•ƒØ< ò£Ø®ïÉeä¹S€i§ntQ·@šð¬-÷?„g¨Ý *i0Œ× ÙôhWÿ|bÉç^ëŒeýA4®Õë¦Y ¦ cHRZ<+óåù¨üˆ+GŸKÔpn§%̺’ª&TÌm*]o :,®µ´‘ÊM®Ÿ¾X³!ntï낳Ãdcz (‡ùHeDYJ:ÎÁš ŒEŽžúJu¿ïZN&옧1*ÅXA’êí¡¤,K\µ8ÉÎ|Ö;  å2éE6˜Ž”´1óØÓ*_ßOV¥²ÁÚTÍG=‚Úœ‚ÛèNa*¢®$Ùi¥3«]îçç!;|·¡‡”¿N'Sâ}*ÖîäÛß…C³˜yj;C:¨YãÛFfy?JúÍ»‘Ój¼ÂE‰1CBí*¦D¯l™í²œXñ{ì ¯ôÚÕb/N‚V8…öí UÁpÅê>ãQïŸv%—œž/ ºZ`B;ÈË`ˆŽÄ L Ãr­1°:QôÈc¾*W7>Õ §wU®a¸ðþ–ǾšYoø’ŒŽxÏæXæÌ¥€_«ÿܾs³žÜœ†[2¥êqxT\€É- knlúU<õ©)¬pPŽ#•eŋ >)`à3Ž–Õ>H¬‰Ü’Ùe”^Æñ}W°“¢nl)Õf¶BK‹ß×4Cô3a\7dtïgÜÇ ¥2†¾5ø™Í"ç]j²œRWUÿ Ÿ/‰ÌİxÛô 8¹aSãúG¦PÆ¡ãÝ{‘3ÐTÐ'zä” kB–ØÔgíªŒrcPš jêHÆ"N²•†½Œ86föÐ3‹SøPµ-4)¡úƒ'ú £nâÆKšFN¤‘õxäÄ–ôwÌ†Ú ‚Ojô@÷â­{4Ásû[I»®ÆKew黟Z7Æ?I}–ĴѬW¡˜¡!gèpI©-3v&¾£™wQqaÈ&›Ñêsá-Ö¤{ÍSñ4ŽRûèÞkÚ%ãУÚÔ]ýDešá Û”^©™6Bi€ ?ù¥t˜ßÛH%‡B3®Io€ãC X•¤SÂϥV5«Ùæä ­°Ò’^—ÊC³úͤ¬…ˆG?K¤ê‰é‡éu"®y”b¢¹ÅpIZBÚ±Z¯nÌÚI ¢ãb¾gÓ¿l»’‘Û^àj¥ -®jÐÖ–3©r«êó䃯t'·ö”& Žvòè&M`nÕ¼åBšðdA<1íp£5A×SÁøÙkˆ §âþEׄ¹õÏÔŒ9º—(4êU‹…‹/7rô3óuƲ73‡„¡îê…/K¤’QFžŒÈøL¥øü^•¶žWü°¶ÁúÞª7Þ³¿}ƒgÌSÁ.^V¡ü/Þð/¥0W7t)±šÚ¾'öÀÁ:|X¡_›¾m’db(Æ5Þç(ÍÁí?]2KnCÎ6Ò%:«å¥ºÍ¿ÔÚ@À€3ýø_ÿ“T§ endstream endobj 77 0 obj 3012 endobj 79 0 obj <> stream xœ­I«4·ñ>¿bΆ7‘J[ †ž-›ã9˜Ü''_ò÷Sª’J¥ÞÞglfFK-ª]Õm.öü¿ÓÏælð_ÈáçÉÛËtþåï§¿|wþÏÉ\²±9ž—¿¿üãâ%ã—pþ÷)¸éëèçsÅé’ˈ6Þwúçé§ïNjYð´Í<²ž±ÒÆaÀû4Z?9“š© ÝׯxÐ=‹ÕÒ„Ÿu,å_ETXx ~bÆc¨zë4œ²‘V‡Y¦R%,•ÿ›ÆVʶԤΦW½·-EC?pJ™‡}A‰L” AáEÅ´õ¸åÜvÉ~¯*®W « ä$j\¬i³žé^‹ZÙú4@¬}ê/´{@9žN\¯t‰cñ°Õ~6€ìN]9nÚ—dºðèvhÊÙ‡c0Ñ>Q»BÉÉ>ÓZau,敼à¡Sð†ÄŠÍ­ð±ô©ž™k¹Ñ·±UåZQ"8ˉ³!£Mµž¨‡ý"Ïxc\„—ÞD†Ì®jìÌiO¢O¯&Ë˲VÜ«`ó2†¬ÑU§¯g‚ž …)ÈöYÊ0Ôàªxàêþ¤Õ¬Ì¯lëˆÄzä*:ˆd¦Â]‰cí0Y¹K½<èëJPÞÑé⹟=³SÎW‹cdß×,Qb²_Lø½nHªÞlee‹Q|uŸ$„¨4°ª[ÙdÕÒ¢*\U¿IS é)QBæF­ßo”ª¦®ÂïUÝ ¾;ĤƒãPŒéâ6Ž ‚Y`´½ ®,kÃO¡Up¶‰]u"bÅa“¿–¯Kq·̘6ÑÁ# ‰ªOî 6£nN>+³µ(nÊŠÐ*WZòÅa«—©jwÜ›pÛyÌÓŠV1F7ë¨h·Ššj"ûFôÊ £—+°DåØ÷~ã5bN¯üKÕ7‹eÄ©Ñ+knÖÖtÿëS:ñ©b š¥¸eS  âêNÏ'¨ó˜C¨IaI åBsãÖ©X?\F¼J ªl¹ùKî *dzo-N§›×­Â¥Ve÷U[G‹xÞ®{m„›Ý¼ŠV*ó)ï\_Nåö'ÅrXE«gz”â8’z|ÑqJŠW[ ÔWè±°v>u‹ª^:]¯ßÐ0K—é‹@bÓênO¶¡ø¶œ.r²çÆY¯ÕÖšP³a­hÊTêKºm¢b§g¬B´(ÛӀ ®ïŒiÑ¡U â­ .ÛÚv—„W®õAXÛ=³¼úaŠŒ¤Æ×½q©º\â¸\îñ9wÌ=Ô ¢×°«›Ÿbªµþ•mÜ*l"ÿ è•zªj¶WŽÇ'ry»»Ú—‹ìúˆ;%Šb=´0iÞ×]æêãà,'AÈ5ý‰Í+VÆž™s#Y+ÎDþ§¯klRÔ¨ ù-wS¥OÅ`\žÍÝ{ß×[% )+¨tß´~¦”ÀHÅËqF§çbB­6«PØ¡—´%.5†ÍØ…Y呹lVvì_fH(ªxÖ-ÒEpî°Ý—”¬GBkο9q*ûôêÆNQgÚ ¥H5“z-XØä @Ò-·¯½W^†^ ùƒÚ9{³½š[5Üæ®%£¿Ž—F5ßzÊaÓ¤Ë{Å}d\Š­ÝÖ3ÊQQQkhè×ΡºI´lÓrº¨Îi‚ÞøÍ©é 5RÓÎAøÍ}Q$Ú.¿±/ª0ýN}Ñ Þ¾©/ 9µ› ôE˜ŠÆÚB5Ñèyxš n¯ƒ Þ¢6DjTËéÎñ;Ѹ´U‹Š\îå{OiÚác‚¬&yZ+faÖd>GMaH¦µ[¾¹)ÌHþüÇúÐß9zÂf+£ŸÏ? ãòR@Vk Xߟ¨ëû? ã (khéå‘È£ØV `_cÀ¨Àâ$j—:€KÀ¥PçÀ* v `…‚…µ”(WçTGQÛ<˦k²e-émŽÂ^jièRZxq-‹Q¬]Ï+cE®¬¡êk¥ìª–…F«ìGµ­|¢2· ú£Æ’òÞ,á^FÉÜB f¬77*÷^ý@Öý&~¬G¹Œ¥ü-3híåP¿N—mt{/Àð¼›0Ü+ <ØÍ‘¹¼•c̪Ó:–G-›ýŽ¡ÎÆšUJíR;ô«®<;„$]€uqÎ7—"9z³a³€?:§ìúUÖ÷¯ššU9*ÍêzÎα@€ 7{L1¦ÕŽ_Mx¦¿Î Ïr^ÇÙ:í‘F¬êÁ|áy‹XwZW%_Ù½-åÿa—JZë‘ï,‡"óÓªšÿJ æ ImtüÊE’&Ë£Ž?¸[•ZéG/àqMª›¥eÇöŠºÂ:j? /‡êsx"ÁÊo¸n~÷ÞMoH/j¿ÙB’·Ó rƒ)À×ÜÀô»:ÿ¾ÍÖ÷å-Òõ+!üøu7lÁ”1ylÊË}Îê—ývßÜa€Ÿ¤:õÊÙ÷çÿÍî  endstream endobj 80 0 obj 2697 endobj 82 0 obj <> stream xœÅM‹+¹ñî_áó‚'úV7CÛcrÛd ‡S’MûÙËþý”T*UI-õÌ 0?wK*Õ÷—dõ¦Ï¿žþ}VgßüêßÌyqúm9ÿò·Ó8ÿë¤ÞV¥×pîÿÿåï'ÞâY¯ë›=;y»¼…òôó¹<-fÀSžØ<à¼Ó?N?ýpÃMƧh;ZÚ<à< 'W84Ÿ¬FìòÄæçI8y¸Â¡Éø¤£ ¥yÀyN®ph2>)'HipÂÉâ?`ùýãd´ƒ¡Ýùã¯çß¼ôY›óÇOº*­Ìí¢¯Ê*§üÍ\UÈ1}]òW»ø«ZoËUmùÅ=>òçv Wõ~ûóÇïNÏÓÝ®V%íw5:ÃÌû¥£Ô«`ñÔúæ¯ÚŠ|™<ÛÄÇ7?ÚÄUJàkHÀ¼åA ’EÀsÕÏ›¾Z[¿â[`Ôh©‚Súæ®…R_`äÌf³%È —>uZó,“·^á…ViÈÜlá >Ç" Ë!‘*‚@Z>Ù÷Ä!'à¶d^_¬jtÞgY]–õª_°y(2Ò[FñÙLXb!Â…ï‹¥a£X—,ˆ;­ÏO@"¬ÛÉ¿…»ÏEïì#i!|"@`ŒXdÀd3 ñ34[džV'–¬„c,lMͪÇìfaxÕ´GôX¦¿ª²Ã{‚4Ÿ‡w¾nš× z:ò†DÞ‹ÀÏs û¡ôÃjÁÏt€Dü*|%ò«Põ¬ªm•¬ÕQ0Ôºu¶wtiïhásb¡3C2íBƒ “|üs´Ðœl…Ì}Ù€?É/Œ–cqÎÔÏh°h?BG¿fèøn£c‹˜C‘š ±ª€>ÂfUuGØè6ëò¶Ž±ñÂþPêÅlµ5ØaœÚÌP3QµjDƨ™¸B`¢–,Ì7±hº¡U“ ÁµŽ7´jº!ÙvVu7uòÖ†!ÿA«~I® ùe béDX¸º8A-É»·]_±$^X‘Íž°wÓÎäx£7TS#HÁvˆBäÂ7zë@b7¸…^È4ÜQ=ÀOfž£‡Ì9Ë”Š%Ù(iÍ¥„#Š-æ³: °Ó¢Í)ƒÙ²Ï1sËѦ…Bi„ö ”.ª«¯ps´Ð"á™5¬ï·á1k¬=à hŠ‘û°Ô¾Æ’¸<”‡I‹=J (T‚hª©ÂçÜVµñH£/)UÊ!úYb!$,:ä!í0X¦á…•……kÉq/ƈ§¾Ê ŒZ“¦kU_¦MM༡‚æôƒ_‘$»r”]ãúxŒBÞ-’¼³©´Ä÷»qˆS•›‚]}òCÈ"“ŽUiŒ™Ü³ì ®ukI6לQäói@×®”’ Fzxq…ÃL* ­ÈÔh2¼s^äÊE‡Fɰ³`¶5ôÎ…2)5=@F§}˜™ ,sZo*Aû"Ö’G "µçÞ*cx–ÅÆYhƒƒoõŠ—KÊ@§œ„‡V{Y®ÑŒäú(F}¨EaÙEÄV£1²ÛJœA|©d¨5ñÆŒÉ%‚0L/k‹e˜¼wsi5б\wœ¯Nþ˜õºbn ïßmbJ^o½˜ÒÙ§/nÑ eibÍÆÕÎoª®…ˆùRÍ…Í „’¿Þ{n6z*.ƒµü²ÇJÁ®Ò ?˜¬M“ÿR¾fsaP Ɣ٩ˆÓу±…¤H¾n—Ü™Y[<Ûi‚Xö°„b÷] È÷ŽØ£ÑžšDÕ¯ßÇH±yp:› eûØ´I³)H0ùÉ(°x«qAØ;r$sv©+]] ‰›ÚkÜñÙ„Qœë„S»ÃJ:³V—KHŸA¥dG©üY×5¶lL’\kc…Ey—›8ú‰È(Ë À‚ÜÔ—ôÙ${lwê¢`’þ«è®I5ÊeE¯©ECC¨G‡[Ü2¡äÍxäôªdݤðü²y¢’t—U4Y.Õa>; Šö4ï¤zVªs  kDJßÄ>a|Šœ¨ôÞ©ìgÚ2¹ëyW± Ù§-óf%Ùáô»'v­¦¾Ïµ°ZßgÌ´Ç™FÝ’*]?ÄR»¯¶9•kAì‘+57g½÷2ƒÚ§¡ÚÛN'xHkáÊ6¶÷¡M Ï\H¦z¥¼ôMë«Ñ³÷N8`×P™¶ØØã‹¢¦¢$iŠTñ^ ‡êkÍ®>0n¿¸ ²“¦I×µi†þÀu±•;4ƒMyMs(¹;FcañŠÚ–ädÙ!’Dœ)Jäœq<rµ@]D YñÒ„¢½*)‚UØEI›QýK±U€ [»fܘl¾fѶIJ®É¦_Çš¢×Ý-ìêaÀHùEi­E#MtôŽùWæ-ªˆÕ OÝ,é{g¼Áa]Èðñ€#²´…µí.! &P^ïq('tè}b¬hW7À$Ù™4==Ä@ÓwM|Iæ"쎃äUš[‘<{­»x¯ªüƒO'¨—þ´,Ž¦æ·‡Š¡üî‚Á‘4¨-GU—o‹®¾+h¨éhº"¨ö5ÛpÍÕ‘LŒ<÷,…m.8ü?ê&»øûí³‡…l_‰¨×†­ÝÓþ^Œ=¾å’Ì÷Øé¨ZíYÙÊZXNxL¥!rZkú°<,“*?ØèęЬ­-ú¡É® 7ý7¦à˜R—;•wÌò¼z\ía‰Ôm›µÙ*´.…¬¨MJ&nàZk?·9Ô•¹µc|¨ƒùBcg¿/™Ñ­<Êðl¢•>1‡™IÏ1Ä'¶äÍ®=é¥;d.Av˜èàÄ.º‡„<#/5–xb™6¬¦Šx˜ð8»3¦Yž_aÍž:þ¥lwÓ{—È»o.ÕÆ¼oxþ)A­ŒÓE¼Éûü ²—ìµ x¥‹;år òAÜ`‡âõ\©h õ—ÊÞ<Ý$Æ[ àk´¥BÂÑ} `¸2x©Uy»¦?àÞ¢ÞÕC?̾?õ¦Ê›3L2)ýT›º«¨07¨¨Ó¬ç¡ä/ÑÐg±õ_¾R“ÿ×Áßÿö¤Î—tìÛÙ, ~ýùü‡#J@¦tOâû)Ñw½Ù(ñ0ú žiÔÞ&;Ã7üoøKe3»ë·v4ykºê…ýsŽ!;ÑÏ6ýy?ǂڿ©ŸÀÙÎÆ9«®Èˆb5âT7-5YËÁõ§,I\H`ÈÎÊù“£r‘9MN¶[*¶×t¿9ÙµžŒW“ ‹{Œ)>T(ƒŒº-%‡Û3J1Ð\:=r9&¨}?[f)‚üRÂÁO©uàÌ–Üos4 ÜNq¹ª¶RK|Tú¶ á¼W$¼êeÃVÆyN€(¼è°9èu—•~ÓPÇ.¹-rLÅëÁY’¼Ål»KÄãXíÍ5’æêÿ¥i7dÒ«²%§l¦}v½ û âþ„À~c¼ò©£È/ ]ŽrzÐŽæ^´§(²u¢úZòÀÖ…ô{,Ç"‘–æl(I_K۽ῑ‡UãŠÛ‰ ¯1¬pf²õMÝôÒîM¾+Ú¬ôõI2eTÜ_ìœ;ZVߥ Ir—f5 ~÷¿°År«†¼çΣë®éçS&:ƒ’NèNõÏÒè€ãÓ t~õ=Y}ŸŸèEÝñrŒYGÒò‡žÝŽÖ&ý¬G‡š›×Ü`Éëï°þ¥Äÿ‡~‡§Kå| =ûœ?¼Ã‡6ð<®µß$÷þ÷&¤Çû»…Ô Ðþ­!ÓÐÚ@–óÓû솷M¿SÀ°v¶Â¥E‰±î ¹OÊÄgwÉÕd'7Y‘µ\ó¥Û*$µÿS+þM@¡¼¦.ˆ·ÿ‰›òëöýñlÛfú3³¬@öhaý­•å2eÞ°j‚@ñ‹¢úÿñüB™üP endstream endobj 83 0 obj 3345 endobj 85 0 obj <> stream xœ­[K#¹ ¾÷¯ðyvôV 0 Øîò!·È!È-ÙÁn€ì%?|HU/OÏã)UQ_úHªjÌÙžþ÷öß“9¸Š%žÝi ö<~ÿÇÛ_~:ýçÍœ‹±%–ÿþþÏ·˜Îù”}êßÞ¢ŸÎ©Ž~=Õ‘ ÀFD8 ˜îí_o¿üô¦ ŸFL£dã9´©Ã Ò)>ü¸ñbËÒá0`:Å'Nîì…Ÿ˜& ¨SÇÓi>ôXø4b£¦¦Ó|è±ðiÄ4 SïթàÒ)>ü¸ñbeŽÂg0æC…O#æQ,ç"S‡Ói>ôXø4b…ÄV'ÂaÀtš=>˜GÞuÓŽ¦Ó|è±ðiÄ<²EÙy0ó¡í`‹Ü?ßœ ¨9œ>ÿ~úÓÓž¬;}þò׋±Æ]ßíÅxL¼º‹I4Ìx9Ñe¼¾Ç‹)×ébntãN¿ú½]ÓÅ|\ÿöùç·ùóíçŪÞ8n½ª³Ä“ÖÃg̳J1[{ëÕJ±ï-3xsc‘ šÀeŸ`¼é”p* w²™Y€ÜÅÎW{ñ¾_¼Cí°+m±³g'øq`ôpq7¸´/ Þ›zR*øÈàMG«œeP#ûq ¨^"Uµ±MÕ`þâ ±Až8Ò]ôš»øYÒ“IçD0zdW[×¾¡ ¦æ’¸–ƒ„üUå#©o8CüW‚ˆ U!ŠM ’Ì»öD4Ë1–ìØÃ°´¹Û§qöa²¹™±ó€e>ÿ½ÅĺŒ(1—Ô¸8S`þÃÌÃ&³ÇÉù€AÝ9åÊÉ`ÝÉÌ4~Â(‚=$üîiŸ§MÒ±Ö€áa¡·ƒÕ7WÌ®¬qŸ=耒Î`ð >û@lD/VÝêr,äƒi)“»Ûíͬòô™Mˆä@¾XòÇbo€ <ð¹ï.Ûçñê}¾X#¢ (rpy±>ä´XW¿Ãïž×ëÊ}¦èl‹e;Ùbo0Êöw øõÃÎ6îð#H¶¬ "~$(Äb`7޹¤æ#OÙ 2šC3svzB‚ ±'F¦@”¬ùAH÷ìy„rˆz1böGQ/†¶þ¨§8ý ÔÛí›P/zÛ¼ôݸ·Áãò©?û¶ä8F¿hó¹|7ú©Ù?ý¢ `¡E¬ºYe‚Èš\ñ»æ¨æö#6yÀ¢PÌ2î_#i*`E5ókHÊëæÜ¢ñ«HÊ«÷ùß…¤!ùU$Øc‰×3^c/ËÚgþAì­²‡²Œ*ØD 7"ìç,ôÖ9„âÁ§u }ǃ‘(k) ͨÓD%h Pµöî&™v·v93ÂøS“#q'ó€†üZó2/ï…ºÃÔ¡›'bè4å"3¼GjyÞ-,eíÌýX‚U°nVbxI06÷¼ƒ véÀƒå#^Çâ“$ø˜gƸöM\¦jö›¿ óP3—ª"ÏaM3´pw\€W64«Ë)4™5B¥w!c»KDÃרˆ5d÷v†³Ð¶$Ù“Ywuo°ý}SÀ$0¬à™|+þ6³ÃDÛ£ó†bGËvÂ9øö¸î¸»äFÝ ¤ ƒÊËJŒ¼Ip–6C—kŒy%‘—\™T R®c<ìâc+àÖ÷u4XSaÖ± E; D¨­–P( §í¹Ô·\m23'é©\¾’)Àù9¨‰*³“{(w+ŠðÑdZðy±w_Û™v@ü.~ÌBàÍPÛ¼óIe›mºš¬UCÎf¸ºïƒ²Ú 6¢ï”𣋺¦\E=µ)Zÿ^GNçcCQqp¿5lЖ“UÄ–Ý`ºâìJ‹ƒÂúFꃲóú¨öP{ä&iŸag½·‰Žioµl©…º»©0®‡ÕüQ]‘öp·¶àúq·¶€&CqéÊá5I¤qDa$ÖKK¹È¶÷»øšY·ä$dƪ–L9x7x/5ë·Ð¡šgnUÀè Î!£-5¶[YÏ4´ÚÜëWiTH5&j•¤E >[6W e7 °35pUÙŒ~nKÚZg€i–U—¹÷AÒm^ˆ4íûj­µ# pÚ8×ëùO¥™z·Oléë&;eÝÀt™Ö‡~!½6ÔØThl¼X¦w =GöE¸æ œ{•Ù½¬“=ã¤^3” P·ä\bE–ïâöª ‰¼‘'øþø1]Ö0¯ÑÕ %¿Y´LÊtª€nˆ~)µ“¢¾ÑkØ7.Ç@ éÅÕöJgY£Ü®»r 3à÷¡­fLžT©ÐÊÛ/­.ätÑ ß”þëYkŠfß±W³¬õtœ¿ ³ ŒoHJA¼_ÅÖ-YJñ-û%ÄIƒ'5'{¤OkûÈ¿µ\î°‘œ´÷ùM'P˜?.Ѥ¥X®X‘²q-3×u‘RË(hjeѲ&B¥°ü©Õ’ÊgZ«VÞ¯3.úéÚÈJ{Ùq”ÑÁÐ ½«Ôº£o +—0woHÚNÑVÇÕ%*«õ#7Úž£/Ï¢œIÓ)÷$[ñô¾we„‹3¥vÊ„BOfôÎ^òªoÆ.ó§Î_Sýt…س3z,p!ˆã¿–ÏôÄÓç™À‰oï-|Ù ‘ ‹a¤Ë}ʉÚl°Õ¥6pÕ›1·û5‡°- 뿺&|K£8m„ØpåØ?wyËzL+ý ‡V_6? AÅÐìU+³èiqh´µ?´?µ[N g½j»I(„›ö\£= ù’G_8յླßwxréŒáh_ªúÙ”'ŽkvÊT?=²ŽÿõOe²Å‘ùaК¸zaŸ«â¹A¬Âuq<=ï6€RÍø^!¶0±…Û5ËŸ¥zbåôa ‹Ru½ê]&HüΫžØÕýð[µBÍÌú|JÇ.z9—DvJ¯Îñ,§ê½MïÏVséðñ¯Kíú"Zw„ᪧô²»=a7åkE!TÅ÷ä3¾v`qÂC„Óke¢Jójä^çŒ3¼úð±¨z¡_x]¯Õß~­:ã©{׋>Ýã*ˆ_aÔ_»"ò–R‹ð]"OŸ° «Ô‰£,»õû þ²î¹æD_|þÅÚqÞÙÔ±’:Ø{—lS‰ÎÊÅÔ¾ì{nq­ï×X¼ê›Å×bÔçwQ‹-v ɪÄðîµðÃãÛw*›úK¯F__0‚Þ·W2*õ)*öÞ‰Ú¼%äK__pîËQ§õ› ÙÊã²D SwÔ‚mGâcåÁÜg]ÿ%e«99„•òª³r˜‹{WÏiß{±†®òÕ™ÈúôUùéÑ‘biÀz¯‡¥4°ó8ia#¥Œ.3äÌEYïQ_Vue%ßt.²ÙÖñ݉†Z}¨Ôóú )åMÈP(½¨lXuaªS]¼Kßaär¢ÿb±®|:îMœð›‘­‰ò·oe®;ªÜÌŽ¼yÁä2ñçÓÿqs²) endstream endobj 86 0 obj 3029 endobj 88 0 obj <> stream xœ­[K«,¹ ÞŸ_ÑëÀéØò« š†~.²¸EÈ.™„2›üýH²dËõºgæ†aú–˲,ɲôY®ãÎþôßÿœÜÉáSšÓNSôçéôË_?þø»Ó¿?Üyv~Χ忿üí#ås9åyBê}¤0³´þy’ÖDü°Å„C£Ò}üýãçß}˜îÆG‰k«xüÕ¡C£ÒY>ÜÝø(qm¥© 4Bcx$£Q2úÄxŽmØÐ`*Ã;%­­àÎ}ò¡Qé¬6ÜÝø(qmùb :4*åÃÝ×– Æ C£ÒY>ÜÝø(1·Òìt yTšÎƒ:•ƒÖç’»AÇSÜÙx(imeè•ÎhS»%®­8wƒŽJgùpwã£ÄµR7èØ¨t–w7>J\[Ð0Bcx€‘Œn2Le8pg㡤܊sìBg´©Ýʧ×Öä»AÇF¥³|¸»ñQâÚÊ¥tlTºÊ‡þ‡Aëþí|D‚RâéÛ_N¿û“‡Ó·ŸÿtqÞÁõÓ_\pÑ¥+\\æf¡Ç‰Óõ3]Ü|.îÆ/îüûàßÛ5_Üóúçoøx}ûøi1kp€!v=+xæÉóÑ8÷)^Þ_ÓÅ3Sâ½IR9§­IbÓ3ýìp@ãM§‚)@XÀÉ—Ê-ÿºúKýè µÃnž‘Ñ;4:ã ‹x>úHŽÞ¢M«‹ÍÔåèe-Ò(Gùç5’ZôHTb%f›Å`áffCsä·´jp Ï6eà5fAš`ÜåW/ó ß(‚™±Là«“Ä&O‰2¶·I¬%úÉ^`Thφo PV^Ømr݃íUÔaÔWé÷q0KÀ\Hù”g‰ÕwPFw÷oþኻ¹Œ^ùÀ¾ýc‹‰‡B1?SFe.Y¹€›qüý}AϾ»žîá³Ûã!âv1œŠpro”Ç9âw÷ùF|tÙ{äzGþq‡c@×N[²…S@¡ŽuŠÓh¶Êå˜ðÿB-(Ǻ,9àÞÙ¡Çý:ý¬3F´_Äùž8ïä^Ü~c+¡=,þîi_¦Mò±Ö!êÎmzÎþ@¸Áìv5¨÷у$é ^pÍžuiE·HºËî<-}l“ =j‚9 Ïº›wö=5ôôìÊÒßÀÝgÔnO È3ùQ©º¡¢2¨ùîþ·ù‡_çCKú¯ú_ÚèG|(ÎÓû§Ê8ŵ ¡¿ž,jEü ´×yV܇(%Oœ½sÄŒßÓ}vúVðç‹`éÛ’q' D~) ܱ2ü€ÌsZ4Á ÁR 4½ àúL F?=Nåý«"匳ä0b„˜}Åj,)إà $Ôy<õäF@ݬxeLsßl f„ZˆÊná6Œ#Í ‹"ïaN7€ë;MPgv<ªËÙhJÕˆ”† ªb! ˆS<êð#`# G/Žl˜Àkè N"ˆþ7±ŽbÂ$ª<¯i¤¢õÃÇßx­_|®h®ójcT5„¡zø°&œ„& UéæIuƶ$Ây?Œ2Àç—æ- Ò†:aÕÆYà&F>4"£uÔwêïp™€AçÚRºB§µð,,P„’‘`BG¨s–f·©iŠiÁ€!•- P®Õ¼±V®éi×Êp%rƒ:{¦Atú6³ ¡:òrµE(×ÂVß¹Ïz|¯] H^å›°®!•܈]þŠ/ü±›„x^¥ž—:ju;E&4;ï‚ÐÌUÆif§P,<ó±{Ú⼟: áºÐb/‡p)UŒ¼'E½ö Ç ¦² Q ™¡oŒU¤Z”TršÕAÓI‰0Ù+ï=¯™"âˆ-á€yØûðw[î³yc9[šð`ÊSÙ 3Åó}pô½’•[!«Å¤Ýº`-²-rS«»åQÞ^²ð—8ïY Pò¤E¤Iëæ{uv¾(6öÃaqÌ{ú„Àp`þ†!¡ºÕî…5žðFã–OCÖ¨Õ,ŠÅ5Ç<”'zµp,8(æFmÛu’hŸ»„—2[f ¹V„¶— ·WÎd­Â…6k1‡‹4ì’-Ào§b®Ã+›QIQ)5‡U®KWãè²üÚBÜ~ýU¯ÑS±ÀÑ÷ÖÅÍV Ð;ƒ5ÀÔM1D*E‹Û­[ÔΞ, z».ŽìæÐº·B8—_µ·ú€½½u\ÜÀ½,—¾·æv.Kr8£«}ýpãèØ…éSë–hŠyÇ*¯n7Ÿuó,}ö,D“vµÃ€ÄdBÞ@Z¿_²   aÖÖl~Ú•"ò•˜°1Í\;”¶¹HëçÑÔþÉ7`BÚ7AîvÚ&8ÜV~Z/ã¨'w?Ë}4”Tåî'صy94ÄX»¶éš`¸¬¨cHu`jaWœ ¹qX}Ÿ´0ºr‹©¶÷Æüòö˜ %á:tãì¼g®uÇ·}u1]D½uÛ'ó°&Üã²`΀…’¸Á3„ 7`&ùðîšôÚ#°£˜è§¤@ýk1Ñ Ø=ˆx¹äqi ¬¾–¢8?güLßtYzd4»ªëM"×^QÍÓ7‹[jñ§¾ _¼+MK[Çu¨ï}ìqÖ$æöl²a´î.3º:ák9•æC=× \ÍË»ûÛÂÈ{—ú¾®û³ºËb²VîáR*Zmü£Má‹[΄ ¹\Å•û¢ÐJT’® ©RGš ½å7ÜV‰¦ãez©uó=ßÀÓlU°nÖÒ÷×Ül¢Úí–5Hâ’ãVÞ®AÂ\Ÿ½“;–P/íÚ:ÀÎZÔËO .ö}¯ YK`§ß+p•Onh]ö>EØ­T×@ë.oý^pÍùÌáZ"®gOß}1 B ÒrOெ GÅúzw%Ü4Nî͉Ç^<¯c)_.,kag(rfkþ¡Ò`Ê¡n‘ ôŠi¯¼îý¦…~u€ !Q¬ÜÒ7Õ˺MÀXR½DéuúÍâ5ja€æ<ŒuxSš‹wÿk Îø¹oÛÏ!MÔ{R³ýGÅ=ôÀ«2ÞºÞìú ]‡„6|– ¿Š=cþ¥÷1×ÛwZÙä‚Ðg¶Ft0`C/pvwİ©¶Š³:‰Û¢2½•C‰^ðª_¼ƒD!ݸØ[‹ï…ùÚÇYyÅÍ¿Íi¾Ší#./ðßgóÃU‰¹C¡<ý»­MX¥‹Áz®Œ«baÖcpS‹EaÿïØ›`‰þÚ%~U†dÊX ‘ðqnµ½í”O7l_;È%ßÈûGm=ëKw,KTm¦¹Y.R7Y\ˆÂà Só©‚9H†7—3ÍW—«OżñvuqïÝQŠót¦ú¡ü¹Jôi5”æÚÆ¿‘bÞ˜Šk»¢N=RnØíyÌFF¾·sÕÂ9Ú ®c·´ ô²)’þЋ}Z_èš?•Н«9iÞúþ“sÖò)ÞÚNXzÌù‹Ö+î§î’ùïV×gæï@Q˜êgô[5=û/T©ƒÛ ^èè:ýDx® endstream endobj 89 0 obj 3653 endobj 91 0 obj <> stream xœÍZËŽ,· Ý÷WÔÚÀ´%êQ% Ñ@?Þ ‹ »Ä Û€½É¢ª»úÎÙØÔ-–È#Š¢¤CµÝÞOÿÛý1¹Éá[*iÓý~™þü×îo?L¿ïܾ8_ò´þ÷ÏïRÞÏSŽ-Û¥°ìs•~ª`ŸHbÅA½Ýv¿ü°3ÍŠÓ”Eò˾¨é ˆžÅáfÅiÊ"¹´j:¢gq¸Yqš2K©xÔ¨¦ƒPõ Ž47Ui^$Z¬8¢gq¸Yqš²H9öÐŽ‚èYnVœ¦,Rr=´£ z‡›§)‹æÚQ=‹ÃÍŠÓ”E‚`â<¢gq¸Yqš²HޙЂèYnVœ¦ÌR,¹‡vªžÁ‘憣Ê"-ÐC; ¢gq¸Yqš²H¹ôÐŽ‚èYnVœ¦,RJ=´£ z‡›§)‹¡‡vDÏà@ìÑ¡÷†Áïc3Ö2ܨMU$?ãÖ Aô¬'ܬ8MY$qGl¦ƒ z‡›§)³ä‹Ãg5„ªgp¤¹á¨²H³N}­:cîsTå=‡ÐQ`-ƒÀŠÑTEŠ¥tDÏŽ†›§)‹rè(ˆžàðñ„xäœßwà#*ÌsœÞÿ9ýx÷“‡éý—¿œwp|ó\té—Yœéuá×t|KWŽËÁøÃ™Ÿ~žŽùà®Ç¼ÿ´»½ï~^õeóc¯à“û£8w¯^ܼ?¦ƒ¦§T•·:I3®þ'D ¾fzl `ð–iŽ”â 8¯€ƒ¿ý!„Õ+j®zç¬3>ƒpÂWéÕÑWŒiàábG…š}î-’•£ùë1Ò°è•´j”6×€…C( Cù+ÍÂU» <Çì€:ÆMþrôµÄÕ1Êô<©{Òû½ú° Q¤UHœŒ›¹«ÀnÞûèæšgoíÝ/äÌ¥;ã<~€Âü¬qr="<žkÇàpòC`x/ð·—i’ʶ1ÓÂIòÕ'r²„ Ó®`ŸîS@|à~ó‘ÂÝD¹@£¸áSâ®Zi€˜êJË\¤L¨‹Â^¨½Ž „tßZëü¿ø[]c72P£Ù´É¬v÷ º9Ot¸²o2EaPr=¥+-n 'átÇjuˆsïÃsäyWw7q Èx€·Áå±·MA!ÆPt_Ö^ ÙL=WŒ×I1!“‚=¨P²ƒõ‰•=Wû)²’ï§kuï3f¿!»¤°n¬uRøúBòÎßuñÊÛ^·aÊ-壌{pg„q³;¹ŒYtA¨÷ÿ>ñ03ɧba@q ÛŸÑþî³?#Æ%ÄÚ@‚ñ|6ºågrÁ¹¯åB·ÿT.Ä%g.‹/çBœá˹ÀjLå10ßRùÔ‰^)¦áótœ'áq˜5ž'zlTv|S4¼N•ˆÙæÓ£É‡ÛjB^‘õ$ªG[ui釲·X´“ðxò¥§#ð'CCnCé]®ô¦ö-ÜÖ‹Ž8ˆ ©ñ£æÍÂì „“œ;ÈØ_õîÒ(™ï„mŒË¢ô–@ ¤Kù áfˆøŠ™„2cɸʑ»ä6_Ä‘£†Q˜ \§,=Ö¡ 5 Oáb‰ÒC ˆÏ…þ-IÞè0•„ÝZJP¢š°…˜¨{ åÒá˜L/ÚB#È‹.Cvt2gr­W/1t™qW×:Ùªi+~]‰rR:¬d½Ã†ÍJ$æˆ;‘™Û ¬óZË›,T¼>qS!æm?é@¶ÒÇ;ܤžåO¸›5ƒ;Ö/³q ­ì<™—-¯‰aÜ;s½AæDo_q†„íöðÉð®µÐÅ6›“ r©ë¥Í»Ö0¶o>õŽë ¶ÎúeEÓJãbܤÑ2øÛñÑï(®êštp©›5ºV0šÜåU«Éi÷Æd7¥Âv¶&ØÞAk?©ÎÄjujkè#U-qž¹út™©­–@y½$Sö® ΰÆx6W×Ü\á=µïJ‹Îô'‹F9*4¬Òmß zxLæŒÃéHcƒH=“Û;NÆFÙœˆb?ñ Yp†æ—cò…nò?URðHŒý÷–ÒÿâÚ×K)´¤kƒL±—½wkí=âl,ˆqÃù@?°,ÀÒŠâ‰ß#¶DŒò7|ÊëâŽ2匘 i(ÁVT«_k„°9Žè1?Uy{åõÆò¥DÞ³øÜÊþýôчüª(Bùd‰|wQä]z¸ŸUŽXYhpÂ+… IïO}ó”zÉ2’ËzåÏ´þC¿­4Dþf˜]ãÓæô¶†EXgcí—m¿³ðá_éxó¸pCؾYÎvtȼ-«6ÎÕ‹H-ûüh­'¼q"(uª×ÇZf®ìWX¢µOÊxÐÉéÚ{Q‡Mt¼ÓÂôÕáUüÃõ¬¡3-~äHîž]­tœ…дXá§Þd/WѺ—ÚµÊR”ÏÍ‚u±×T¾FŽþCwëE<»_ Œú+'ý±å<Ý ÷{gÎuæTL}´?×§%®õÅPï¡&× mÓ'¿`X¬FhäꘪÀ l•pYsæÿSç! äÚ6I,|oõÄP¼ Ù›¿„n8'ÜžÕðçéÿmþ°V endstream endobj 92 0 obj 2280 endobj 94 0 obj <> stream xœ­ZK‹¹ ¾Ï¯èóÂtlùUMCwO÷!·…BnÉ&„Ý@ö’¿=lY®×L²Ë@M¹,Ë’,KŸåvgúÏÛ¿Oîäð-Íé §)úótúõooúáô¯7wžŸóiùÿ׿¿¥|.§XÊ9ž~yKa:çÚúùT[9 'l1áк·¼ýôÛéV>XZÉ¡\mèÐ:ˇ»•O#–VÈølC‡†ÐY>Ü­|±´ è@óZi ìTB(ïn+1ÑÐ`*Ã;•G#åVÀÕRƒJg´‘îÆG‰¥5A7èØ:ˇ»•O#–VžºAdžÐ>>i5>Èëб!t–w+ŸF,-ŸÏI‡ ¡³|¸[ù4bi98Ï:thåÃÝʧsËOóYehT:ÃGº%–VIb-&Bgùp·òiÄÒÊÐM;6„ÎòánåÓˆ¥§nÚ±!t‡ƒ þa฾HPJ<}þõô‡—?y8}þôç‹ó®ïþâ‚‹.]áâ27 ½Nüš®ïéâæëtq7þpç烟·k¾¸ë_>ÿøöü|ûq1kp$ÐzVðÌ“ç£8÷ªR<½¿¦‹f¦T‰÷&IM°1ITMð5Óc‡o:•˜QÖ‘…O"ˆ/ÌŠeôÉ=ñf¹š!ž£AÞ¡>!+qpC÷“yO­Ë»ªtpl-ìxqü,3Õ ŸU¨Äuò•-6ZxtÁëêsÒX((è¿e’* $ ú@”ïEr½ªD$Èõ½ðZáXÁ{3¨™x< ¿A)Óí½˜ÇÚMº3Ê“YÃWµ6̄ýKZ½ É@Õe]"îï…K¨t©ð|9¶™BS+‹ýSªs¡{ߪf©­>î(bžG´ùrê¬NvâÓ'Z?ÌLOÔÝór†@Ÿ°7gýDTÂ Ë KbÔÆ™‰ÆuARR…ê6´ÏuŽºéÉO²SÒo¸œ+ª¤¯«æKøØp!£]ÒF{ÒtuÙ¾eû↶…=ÅS^„ÖTK_7+ ½Xa_}»x'ºèaS4UuÜæžu†ÅÚÔÅz’š ÝØ&ë`â=fé«ÔÃ(àió°ëVfk}óI‚“ïDÄCC4¦ÍT=½ºOxQjj²ôAEâ_à‰š6Uo4+ÔÖOݦzBÛ®‡þà(Ý."‡M"=¹ª‹ã²ñÎFÞÆ÷y‚’æDèÇp ê±3¦|‰ О/Mö1K½Ãí5ò컀FõÉ¥wL²lÓ|1K,{ÃñæÐ–^ìvïÛ=&ú 6˜’rfDa¬o¤Ð¨)›Àˆ3îÏ)hÇèW}IÛ·ŽÉè™Ó³B &ת=Z*é==¾÷o~«NeÌlÔÝÓ’áÕ¶q§ ë O´ZòÐ=‹?¯Q¦ ¤dtØ›ùygù7d¤Q †6q‚/æMK׋ë<7c£z²)Þ‹™õ®™«@Õ=‡–ºKc8ØO>Ð1@çïÛ‰5Ã=Å =Õñ…`þZÞJÆAãqC ŽhG“\¾â¥ç=We =OcŒ@®ÛNÜüeü¸¡/ãœð¨.j¾ïó>»¿Uw—÷ŽwœaÁ‰TåJiO iûÖ.ÎqkåÄ0SGg¥ÚµÔWÏaÑ·Ò¡câ©mµ”Ï!uà%Äí)2 ®i˜MÂæl6#›ˆg¤Æå£MÑzenfÁ ÇŽ{çã÷©O¾ z¾{™ŸÑ"´#ƒCöäÜÝ&ÖèjÑÒÓ£‡zå„tü2š@_¬FêÆKmÃíæ­áo®P’€InÔ`tM.-{ð®ê® wa³jÌ´¶#€ÐŽrøM»ì Áý0ÑWHúÐ!®"sM‹;âk €¡F¨|t…N+H©´ ®’…ÍH8µÚmRMÃÍ,ßdËKf8\«yc­œêi×Êp óÆ=£…tú6C§·B…õjW¡œ†­¾s-9o½B¬41‡§`ŸÂ+†j³êñ2µœº<=F[³ýÌn踾p£kê'×®íß©hß:³¦™ž‹u¶¾Ô–Ý8¶‘e@2ø­Ûç „–JY•S–­R0ZòZP1‡²×@¾ÈPÞ!¶äéú¥Ëó»g~Ï¥ü-õ”ÚYW®y´¨§ºt%É"<<°¡aBò’82öÝ ÆšÏVO²ådG«˜kSç¥tG§øJÝÕ)þ·:ÑÎd=˜-_Ç“ o_øÅ¡{æ°®á=ÐådwÉë[%bŒµ´­hªêoÏl­„A+nÖ®¤¯Î:ɹ&*œ|‘r÷Ä=¯x¾ ýõÅË÷ØÍtsµÅÎÎWÙü‘ö9 éÕÑWtO ^ÐéP#È’*W4Š9þã9½{¡ª~Êlsµc¸„YðìUކ _iU6Ú” †&ÁÄæ@¯t¤ÄÝô¸2lŒïžÆ„øb -öEYk\"w÷/xT+îæ2îÊüùÏízG¡{¿ènÌ ¸Ç?ÜËtž»›¾>|v{œ D E†S©œÜ åqŽøÝ½G¾Ñ]ÆÈvÇ¿®Å6Çè–lC6˜á!¸c ·ìß,ƒÎ™Qš—C AAÀq¨I?·ñÉÔ€äŽÈåq<¿‹ÙÇ=p-n0£ÎÝÆêÌWbBO\ ”Á}Ð}Ù¿Gì‰hácyïQ"ò“;r%Î…ZPåÚàv5‰ýÓŒt!™?pî 5¢ö [‰t`Yð¹çeÚ‘#ïŒàm¦´±MÒÿ°Q8\…PÎó~ÅÒT…+’õa¶0mQ~M#ÏF Õl«Þf|¸sÀ/Ã,A¯~WhO§B£æjüjP¯æ³@aÖ³m‡¶õ¸AÕžðê$̤!=cE…Ž‹û»m!ÜP±)h»~²èy˜Äõåé²Þm®ŒÌÈW¹.l”Ò·'·¬ü­ë?þ誖Úì_÷®k“)—ê~á“E·É0ª[†O}ìÓÀm”Ô™»]o祥Ñi‘Yê¤ ·ïëš "a”­:tck›Çí.rÛ.êx`n‡0Æ.¯•ÛO¬ß`÷g¼îíWAc禋Äz@ú>ATXþ|Šîði‹]h—Ì*î„ØÄß+» «ÅˆÊ“=eW¬E¨j¡þê|!„GÀÀµø€ ¸Ü¡&½ wÿ„§ÏþŽã) !ŸÃ´g¸ü_PÀÏÐ< ƒ”"#Ø9óOdÖ#1Ðí‘ÖŒiÒ"àÂQ(-¥ù/d-óy \4Ýñ¹—”ë¼ë‘ÁÁ ¨1|„gx‡‘<À-<£ƒŒyäv”²}N-\þ–”í}Y–—ŒÓѯr¦`yŒWŒrFLöŠñ¾qÇÈ\‚ñHÊÅ&<ØÛ¸íË‘Z]™K-ÏÖèM'Ò¹˜JJ¶¥ìgÒBMœE ¨¦¸¾í2 ï^xõ!=y,‹_cÕGñÏdô4ÃæÒ¾©<…šFƲUÎÍt/å׊Wb¹—)WZ…`ïv*ÑõZ¨ÿ e•¨w’Çw†üˆ¤Y¶f®VZ&^ìÐʲ¦¢Ö( ^¨-H’EuµrJßR§QUÜ¥ ¶Í´¨ïUÒÅ®ARÊs•ÔÕ‰ÈfàVuÞdÃø¤uñ|ìYŽ Ê¶'ÓéwïŠJæ_I¯ð_u±ÝPÓŒ™gk þä0xûÄÝß/î µOLÙ:ðÇÓ¶¼Âú endstream endobj 95 0 obj 2906 endobj 97 0 obj <> stream xœµZK#¹ ¾ûWø¼@;õ¨*À0`wÛ‡Üh ‡ ·ì&Xld/ùû¡øU®òL03h ºT¢(>>QåpŠÇÿþs Ç€oe)'8Î9žæã¿þòÓñ߇pZB\êqýÿJ=MÇ2RÿëPÒ|ªÒúýÈ­²D䇭F84„îðÏï?\·ò1bnM>•ÏÐ`:χºs«fè^…ÆñÀNãÀ„ü^©Då8P§ñPRn¥Ê6"¡Át^ê6>JÌ-HκCƒé<ê6>JÌ­°8ƒ ¦ó|¨Ûø(1µòbÝ«Òt­S9!¿ÏÐ :6–ê4JÊ­:wƒŽ ¦sÚp·ñQbn•Ò :6˜Îó¡nã£ÄÜÂÕÔí24˜Îó¡nã£ÄÜ‚®ˆ{ÇœFàô‰Ùth•ã@ÆCI¹‚3èÐ`:¯ u%¦Vš§nС!ṫþa°¹}§˜ŽÓ”Ÿ?þ鎟¿þõb€Ë[<‡r(8‡JÍ©½ÎôZ.oå–Ë|Wúp£ç;=¯—z—¿}þùpÿ<ü¼š5ÀÐø<+DâIóµ„ð)î1^Ê9&7Sâ½IÊt*[“dÓ_k{ìp(mÉO¹¢¬+ëˆmX–Y"¢d±V’0Ö|&ÑÃ}üˆ-MÏ«°¢i'⊶ˆ¥t&غ¬ÎÜ$¶©Í_«yX¤6ÚMˆî}o.bóÞŸä}Sê;’+Û—YX*]j]7'Œ^wnIâ7Æ¡9brá8mÀ«o%ˆ.Sé9NSnµ§;¥ëwZ²(dQaÝ=¬¡è´5¹=¼?¼h9Î/¥±Ó1“WŸÇ¹¥fPÈ®7¥} ÷e}æ‹k3…ÈÛ.bcÅq/<¹v†ßmïhÑá˜GUÆ5‹Žëd–|3ÿOg2²nµü%h§xZg²ñ!XmÛ˜dX0ˆeÐù0—jlwé @t›K™z¨0‰ ç ñÔ¬ÄXvPu7‹"“Bßh×›å+EsÍŽ¡Ò%¸0@úf<`·y9¿N{*Lš5 D&> ̤Ø\JöŠê&t(‰¾Lb˜÷˜."oÒˆT.$"kÏÄb‰s]ÚÂs{Ҫȴ™Cƒo ¼úS'Yƒ ûFnˆ<˜ÇñLâéë% qêñ›[få¯$!±Ä¤&ºdç‹ÊŠcïÂy<:Fæ/ËË--w.sÔ%—Ѹ¾Â A ñ=Lá*&-ï(ÍçoÛûûDU¢Vi".U¸`^„#V·°ÀGxÇÖH¹Õèžy¤2fo1ÆðÀìu¡sð„Ïwâü@Þ7l/ªÍÖzõÜ‘~Ú™1Oq”zRÝóîˆ3Þ- Ì …ÙÇF.4ùëþ^2ÍAc‘ó\ù?|ÇlbúÈËòÍØàñƒàfüJlÈ*”´79Ïõû Oð=sùHñÛðÌãG Ïøµx–x@zrœBþFІœðY¾X‡¸»t†O@zXÅÙŠ |þéÒî­SO¾,±°ƒ7³úñYóÎÑX,ÌØZÆq^ѪÀ‰Ï*Û¼LÄ÷:Ü‘5sHξT ÇÇj§Gú: Jiú‚Í9Ý~Kyz‘vÏ‹çÕ™\†à"ëƒÒ²Èg)zb^¡õ+(B/PZŠÔcJT?¤{–2DÆ^ýzìgÌ€yس–”•¤ÅŸ›5!½ª"C^éj~4&"¿Ó2Ö2Þ\ w.1l:ÄY½‘ȸ0<Œ¬cZŒíja§`'ÑpÔy½ò6ŽË®–'vîç>9`éñw^/˧ÈbužÍ|”VµIžÄÖŠ¡ÖËÀÞLâªeu¦ÖÛªÀKÊú©Ý©;†û(žÕúîÎŒiäN}7]_º<,ÏÇÛCéÛ2õk›y3Äþ•êzYj.4Ðõ&‰à>Y–¥¿Ž®õ¬½¦±&ìȺ­üÇu©ÇuMýNÄ] ÝUl.´º{¶Ù¢Û€ª1£"® æ{žà¥a<Œ[Ñ×Zˆw¹mÒ³Kä£/\°ÀR4Ýéˆë ;——|QžÜ·mÙ×Cd“×åîµoü:î1ÑtY…E°Ôã¡ E-$Úb„Ý9T]úºÛÆ@ŸðjU[“Ê‹1)]"䳇(Žz¶(r&üÈ» úh®czåÝ»]vÝ;¯œW{y}}[â³¶Õjx*ò¦ÝFø­Ú7½`Ÿ¨:ÆÊô\¤KJr5 –’Af`ïogxô´äC…‚lDï©»§ó:Áô–G å`÷b®~ÍÜÙšM‚K;˜TôhqC6exFüz|¿Â\'ÜÞt"ȹ¾ÆC†ÓÓ•€ÙØUj·Àv¿q>†õ,ûЭßõ&—-MWUw©~åfjA¤_}cÒ¨c$ Ñ£r£thµ[ºÛÒØïè7»É![.<ý~Ág@–B¤¡U„¤^{b+)<iÿƒ›@^5®XžÔº°±ßs¬ÚȶÆ8XúõtÞ3«­àgÂùPNcKU {nž·ÖŸò¦½“ÀTé÷|OM®_aw ž”Êæ@û¡K~ø²û«™È‹ƒ?ÿªÒ@ endstream endobj 98 0 obj 2428 endobj 100 0 obj <> stream xœ­XKã6 ¾çWø¼À¤"õ²€ @’I½-0@Eoí¶(ÚÝKÿ~)Rʱ=³Ew­i‘ŸHŠ/Çaúçð÷d&CO>ù#N³ƒã<}ýåðç鯃9&)LËÿ¿þzðá§ÓÑM¼¡PL… žˆbƾÃo‡/Ÿj»áTf¡<’^Ut „OãðvéÌBñZEBø4o7œÊ,ú&¨  ͆ Œò ^b¦`.…À› £²2åSìˆÂ§¬‘íŠÓ˜…š]wèHŸÂqh”>BUgBWa$„OãðvéÌLÙd» QøŽlWœÆ,ÅX»à‘>ÃÛ §2 º`xTA!%O±Õ.x$Â7FeŠÖæÐ‘>±†S™þ(=¯oG 1ºéíçé»L€ÓÛ—O ž_àd¬qÆŸñd“1?ÎüèÏ/þdÒy>™ ¿¸òzãõr'ózþéíûÃýíðyqª5HÅäùTÆäóò‚Æ<Šw€³?U'ù¼uˆG¿vˆk–ÐcÈË‚ÏÁ]N†À ¢@ð÷3œ¬md¯ÍË {k̼j€õzTÛN˜ÎîäØn{é+^ù=\ˆÏAfÎOt'òr×,é –—~vI<1_àCN*:±et´Á±¾lðu@’[£;áGf,÷Å’t¹•AÂCÄb±O–CCU yæ,y)áª&©Ë¥ƒÜE;å<Å•¥EÖò44…ÕäÐæWöAá²áÍ„GKÝ!wö¦o’Òæ ƒp3Ñ\L ntðÛï«Q1We—{̈òÀdæ®$ÿj®g­£;U(© o"Ð?’v„¶%/¦`.&ƒöÕ~–0ˆWRù‚[GA’–÷$ TyöÍ[;ÍDL›n³À>A¿oTåo‡òÜ•Öy_½¥Õº EŸ³¯önÖ€‹{wƒJØ=¥M+*¬ü7çº÷öè¹n_sý» %g#Âg3bØV/Ri–J³áBH>’èKân•AjøiU1Ih,]DÐk‹©g™À¹æäö`îB8—‰[Iý´VwJ™©ÛVr¾ìa+'TEs)èµsÒÌcu,z»V?Z‘ó´ p—6ÊÕz]ºLmœEVi|E%)™HvÞ‹N±Ô§¢E/E¡ûvå’Ø0‰.âÃí ÂGÚÛ(5—èkcsçÚã(kùÑö6B§ºÖþŠ“ÅálÅùÙ çXÚ ù¦õCò¼“,må¸X¢ÉéCÊÛýîզ§N,Ñhrþ`˜ÅCÖµâ¡Ü¤1Ù ®÷Jº9‘&%¥Ã6€ØãHõ¹gnJ^Åg“Êà*‡ÔPÌpV—ºŠÚZÆ(:R£Â |×{ÈÑ–O ùÛKpƒ!—){Ƀa–h~ˆÝ P;s»@ê1jŽäQGOPæá5URÖ¥ê_‡QÑ_ëüª [¬[¥P ”ê±>úy ¬³t^q­ðmXŽ4ú†UÓñÚÔ°¸)5Ÿ5qQÎÞÚp¨†B)•Eý¹{ÆvW,ú ®;l-¬tLY \J²îÛwx\ÎÿV:_j¦EÉ8|ê ÇÙ¬w[¤¼”xŒ8^%ThÜÚUmX.ÑžÁ|ÉÎ:n+-°ÏÏ­ÜÛ±¾nJJÑ׵欋GuÊ(Upö‹Š‚)|áÛ{‰nP|kZ/†ëï¾g“wï¿‹ê+g¥À¬¸¸´;õÛþ‡©ßÎv9õã5ÿ}Ã̯0¾qæ/:„Tý«¼#Kò¨IµŽžÉC4f‡}-žQ ‘‹=ùáº7çZ¿ü øS®¥ÑcùE«¦ÜÞî’Ù?"É6^{5ßå–X¶ç”ƒ¼Ï›ùEkýTA‘ªKò›rFÍ⎻øçìQ|4Gûáäþ6kRZ^[Œ&•B¯Zð®â„°tçPéýj©xâï$?¦ÜÆ>’ü›Mcà_½)E8Ò#6¿opNôe³&Ø~ܲÃ]›¿”m(€òÄê៧Oª · endstream endobj 101 0 obj 1539 endobj 103 0 obj <> stream xœ­[I«,·Þ÷¯èµáÞhV4 =²s¸EðÎNBpöÆ?ÒÑ™¤º_lôëVIGgÒwÕ5ŸöøÛá—£9šò-ÎñÓ§`?§ã¯?þöÝñ¿íYù÷ë?ׯƒ³á3sǯzÚ£uǯüýd¬qç{2ÞÏîdüÌõë_ãù#žÌ|žNæWø¼ÁçåœNæ~þáë/‡Ç×áûaWo\án¹«³@ö«Θ'rñ°öOÖ«"NÞÚ$æÏ¸¶I`IÊ×T?6(ÄTô–ýô™ wt¦‘˜ÎödçBâY¾ål˜M1À‰¢àgáÖV2ÁÝQRtåÃ÷|þEŸdv¹LwUÉM~“®g²¦2Ù\Êã]‰Œ'vX)ávžgRo1aN@?»BVÌ›&ÍÕÀ`;ŽŠuêæÍ0ÏnfD—¸×vn“ã ý FûÁøÒIè[Öhˇ²Y0=•ÿȇ!âuí(ÅP‰å騺^Ô-¡R'Ÿs¿O¾]édº>l dG.ÚƒGu˜jVBí™?MsùìÍÏ,µ³ dÊÁVl™vÞ"H_ý”}%¨8¡òã+$ÜzýÇÌÆ¡h»õ }óþmßbŸú—øNi4iÎË,Tb‡Ve· LóžÄ3*(¡šëö8®7ö‰æDÂ’÷`sæÏ˜2¸†K¬‰J=÷ÈŽX=’…nâ ÍOóR7‚šû~GºN»Â&¸æŽ‚ç°1Û§™ËÆ•P„‹…Ô„ÂúkÜ hÝ\àzɼ {e¤¦°rv%-Ÿ#YàkÍ_àdÁžp:o©1É÷úqŒ?ú¤ÖñÕ"'zð}mcr¼E¦CÈ5E<÷q‰’›-`Ñ~LŽð9”÷Ñsë6ªÎ[OÄ‚Eï­íU‘$Y&É3ÖÁMŽ)AS\F°eõæÍÜ8T5”Ô;SSC1Æùëß«M×/€1.•¬å.ûZ×¢;°.¯Òt¦ž´dêdPÎêšÖ¬»› ps_<›ÈëßO¼_u x†’—Ò¦Xò|µ“— ê\ÙÖi±ª01ϺM¬Ž ˜W4Ó¼JzE6":žU]ÓVM‹ådA&?væD)ì{ŠT ¾E‘Í©3ðœ_ŸâÇ‚i<Ø‹ùº·Û_Vhý!ebp«ì/ÓLGqSßZi['ùçn<èïÖr%=OºÖɦû}+ŒÆ°7gi‘ü­µ!(Ù†zeÄ„¬U‰áP$¨}û$¯<šùÑ^Eïÿ÷ýª˜Ï(—U¬ún]þõ3Pu3áCqr.{Eep,«]fЛYõÄ­dÚªí²DTÅðy*@ªªA¤ý ýÄ%å¨ùÎ7ÙË[q6•c¦èuFp†å˨8`·jPæ¬u]Uµ¸¡æ†Vyðú4¨~€.år¥¶fÕºÐ{¨¸qáionÞõX测Ècç¼sº‚™6l ùµ$¡Ê·ÓꌋL¼'Ÿ²*}غKU±Ïïúq^VÀo•]äU[ îç!à¢T¹¯´¸ÇÞ²á:Ø{j±ØjLáŠZ>‡¼‰8êÑJõv@±"J/b{Ûª«¾VغÁv® êšz…ƒµ”u½åâÖη£É%Uélš-ãÚ1"S¾,KÈžC5OW»~—¬¤]ÿÖ ª¥¾uñ"¹M—ð«¨kñF-¤R÷祓w/r—½v2šÂï ÖÕ×– ¡jVJ$nr‚4´ˆ:½ì‚xã µÞ«nÕ±©r¯WÚk…ÔÊCÑ×­¸Ö )Zp’ R™:ãˆ?ƒstsC/íâ&G>ûžBÔÝ^ôé:KÎäŽô¾z‚"¦jqê÷T"¶u_ ”¸ {S ´Y¶ìïÿ‘KhþarKwÆoÊ% ä’Y÷–±hÛÌ ­­õŠ"â¸;ªA%â®Û¹¹¡*gÁØÉ?7$i¢Ôø6•Ûi}m¿óÆP9ñ&²@N ^SQJÞÔoMwº’8õ¬ÅÕ @Äcûn$°yþ6÷Q vuØßÇ8a „L$Ø;ï‚”\w»CÔ ^Z@Ûá«Ö!ŠØëvó²›ç¼¦Bkl*¦°Ü­û»¬Ln™BMöu"U|TÉA¨ üNwxŒÜƒI¹ðvF:õ³J~Ô¤k‹WÔJvb/ƒÎb‡ÙÜúE|‘wç¦Qr¥xo,ô¤î%/}Ë_¢ËÅëWœdÿÕLëV2cujÅòrÔ¥/qñZŠs¬m~ŠÚº=×esª¹ò•{»=ßwá6ŒÊ*ê5 U£kZ»ÛÁ«Šž'¥g³ÛÀË~m>d°tu9cÒØm®SÕ}®¥È³¾ÔZÎ¥?A¼ù·A<Î,{'pHW›”éä<+Ä3À©íè˜Mñ:aÕ«|;ÑôäKÖWÙ©ÉÃþÝD}™:¬ ¼]ΖH6ã_±rÝĸS×Å7).<Š+Ú G-*]‚†À›nÊt[[\¹Z„j7RàðJs ä(˜"·'e&䥵щX°g¦xgsÙfÌï2Кgk·ÝgD¼J"2ᢸNo[·ºÞ”Uvi¨~pHNTÜÄl£„˜h ΠO‹ªdµyY”÷D3%Ägâš´—d kfKƒd˰aíê €óqcvÈ›”#àDÇfkk”ED ÊBp~pÃȺ ÖY<š³> stream xœµZK‹¹¾Ï¯ðyÁŽTzuƒ1x<íCn {¹mÈ!½äïGRU©JÝ­¶ç° Øžn©^ªÇ§’ÌÅžþ÷ñß“9™ü+Ìá§ÉÛËtúã¿ýrú¾Ëüëãóû¬¿¤SJþôýûé/O{²púþç߮ƸíÕ8ãM¸ÁÕÄúo*?§ú3ÜÎájæÛt5÷úà³~>êçý¯æëö÷ï¿~,ß¿®¸:Yº-W°•fåW>À˜'I±X{ Wë§@ƒGLBº„=&¾i’Æò1 b¶[‚x‰+î«LFM³€ÑTa¬õõ;æ¯Å8›mÈv8CýÜeÀ”¬ß6 Òv.f ý³ªj q5`ÉÏ¿rM&KT­É $f# Ѓì³Ñ¬/™ÍD²Y%¥n~¿Q°ÈS @ª¬jôfQ_ØÔ³e¾ Ïjž^Û73Öf(„Ù v*¯ï¤ [؈LÐéÁ6<ô ù³÷ ääÐd¶¬3J ,£ëe±AT&(C‹ùÈ>Ú”–ÂÂ/H¨ãôÖ’dï/ƒËgÚÔâÕõýÄêÔs}™Ò|êa(¨ïåİô£!*¯Â§Y}\³úFضdϹI\lõ©üüY¥<+R4ÚØs dRt)¦¡n>0M^à‰}å«ù!­(°EŽ|(ÎóÚƒLg1J‚± Âò(§ˆ:"þ{¯¢«Àš[SP^í’GM¡l„ØÙ€æÃr³:ÐÈXJ"¦] ÑZRK¼¦9×Ξ¥ÚµÆ(ûçÒ—ÄÄ®™ø‘=³zMVr0׃Õs¥(V™×¹E¬Zµ}Ï:t‡XJöa¡ña@lйæ+bMu³4Åóü9—ñX+KY¥1 ¦§¦Á‚Ô@QåD*Y ‘½bæç6o]̼åW/‹™cŽ/f®qÒ —óÚ¬ýk°Žá6->¿Ê’KrÍßX©Z½ói-»u\'3O•8ûz¤!—ÒæbÀÖL°ZŒCïóñâÖKìÈZU]µ}~z ÒjôÓ(h9[@@[ÉÙˆœŸÜ£Le­ŠœˆÕ«à¤ÂëXDsˆœåÔœë8Óå–/£äá´zè-är¾%C·djÎÆ*Öݤ´¿I—5R]ÃLª=æõNô*b-úá«øšf†»,ŠóÙ’·&ø~%Ø–(¨Ü'F0òš“*®al{#yY&äŒ(Ù@ÀoÆÚÓ`ÝÖ¸ iäô_Ë}aRzJ‚‘Ô^ %ÁHe÷Ùâ¥GŸ]ÈÓ¼*šI·È§ÉÎŽWrK‚&UÕÓ7»ƒöþ#o ³Ûlj Kn:÷b ß%´ëe©ßOYÇG+~^oòHÿ»Zv”eÈÆ,”pÛ–+Nýv/ô e[ûV-Eü;®¥N“ZšDÁIòè>®§vW8%ÊŸQMK9º7óè—_ 7–Z¡Þ2hTáp䦊Ç4ÿWûТßA6+®’e'6èP~ÕÓAÉQª«ªzƒö©µ[G¡€ð*’¼¹lp"¢ –­Ât¹MÒD‘Èý¾†ÊO½1L Ÿ9(qE)[N¦º˜K7PIeÑ«²S·aŒªŠñU^m黪[…ñ^4΄@ !Ÿ(ɶb×^ÞíbVhZx`~¬–¬ÛŽsÐ*Û†» jå§©SÂ=\xH[LìˆÁg[Ÿ¶”ë-Š% ¦…Wó„ ¹VÁAMˆ¶6¥¿tuî^ïëØ›UiÉœ˜yRɤÃa ˜Ž‘‹Ÿ¦¼E8̵½W=Åвõlìº4Æ+ 8ÃQl_ŽÑ“ƒ‰çâ3Ð%ù¢Kœ¸­3¡.|ÿ{o ýíwŒ Ú° Ø96EF›ƒ¥v=®ðÌÂ×&DÑ »¯³ãrÐ4@5‰X l©ý[ÁKMÝ×Mã'ö÷7M#úÅXÒ‡æ±ÅˆðÖ¡ë\ªï*¿s.6¹¶¿Ó h}¹j*òŠ|l{hÁ˾Bå§F=Z$FFžÍ„00¡µ¦Ÿ!þ3”bèö~EK¢øIj×fT`DË~ ÁÌÙÛÇ[Î~*×e'€GV ‘*}‘ÓŽR`€,ÉV·q Dóù¸I/Ì'3Ä|êÔâIñ-ó -1†–Jüv’˜±Át`;—L´•ò•! lBñ…!dÆ*íDöø£„Ò™TtÅ(åTÏÖÐtzg‰Nó#û€=“÷j¥3þg0BM°«µ•Ì{PVÌÔ[8jøp½PCðæQê…Éÿ¬ö« +}ZÏæ¸êC6»"¢õ xÒtµ| w•:L¨Ut?«ýjBÓ*X áœ$5ÇŒ=üÌ=ÔµÉÌ{®ÔNŒ€»¨qظ‚ÖÁUK£î%ÐÀ%ù–frPêe~æì[b ã€ÌðxñV½ñ¼åxÓ€2A¶1ÜᎥ>ˆz•‘ jWTWV| Âm†ßóŽXcÅí<—…ÛQÄÓÞŽ0š 1BEŒv‚WÇP nfì˜L³tªº§4¤p3Éš ‡ÒÁftFFy✃µ3Ðì³í˜VÕíøôGvg E¢Ãþq'xŠñ§!a:ê+º˜zSnk “ùÖ3mCßøaÈaù¸•ÛC·õPîí­°™ÖSwtHñ9© ;ÙЩ÷E »o±[—Öä–g㮘ƒd}&ÕmRb¿’;›”¨OíË-ƒ†ô錿|Ý«uç€N›B×Óv|›C}”úcÄúSNÞ<(é/ JD«ø3MM_¬®‡hÓÊïg䙺!Z%uÖhbë3/µkRQ¤.T ì«bj³m³sr𦮌°žvXFÐ[‚ßTçîLƒäÝ„®:±8hxâå np?Ri**B­Í;7£€²í™BçÁ;Ùugúü²;gmxu} Ú…ªƒƒš8„Öa¾¢T“§ï Äg^-TÄ5_~€¾9EF]CRpSTe7ïöÜ€«ÛjÚ6ž ¿IÔ_9zÑDàóÍâ \OZE$t'®º¾ê vng¶J{-Šº1–zÙ­\sè·”ªÛma7¶‡Žiì¶3U­¢Ê ¶åƒmÊuIµëak„ÒÎ¥]à«y›{j ¾¶Ö±Ñg«” £Àß_£Ž¯ö3 ß©> stream xœÅ[ËŠ3»ÞÏSxGw©Áýúöß“:)øæ6§äô9~ùûÛŸsú>ƒŸ_þùöñõf´;ÇSŒîôõ·ÓoŸú¤Íéë?]”Væú®/Ê*§üÕ\T(Æü5•¯þúî/j¹¦‹º•òùY>o×pQ÷ë_¾~ÿöøzûð«U¸[ïjt¡YöËF©gåâ¡õÕ_´;ù:yoÏ~kG'¯!ìPðp‹.¯:OfC+`*´sãÐ’Ð8/¿u„Ï Ó:© œæÝàt]p¡AJÏ~åÑŠ·V½$y¦®LÐ ð÷mEÄy‚ 'Âo{ßÞЪNòG\Â8L³¸µi“'?LµY=$Ó±|ôÓ 8=Œ:E]±0ëß"Z©ûRØ5凸ÎÎuÀš³t…l;ÝhOG1rs|^±ŠÓ½ÂbÏ£Êb²3µOL^±¤´Ö vÙ£¡UÓÙâ¤(ºTÕ¸UìÅŠqoYÓs×Ä“ÂãzOR š_Ç\O0µ¸ÿ>Q?Œ9RÎÔæ¡p,-…Í„f1¹Ê©1˜ÕçpÄr(ZÑkoh2c¨ äÖ>v¶ßSl‚‘˜ObuÀÅ4¤Ÿ* è^\Îa¢{d¶º’¥i¸Ð˜ei2s„+°¦M ƒ¡Š—!6¨~.X[™]ÈT”>7>L j¾©üÜ*ËAXU™¤dœi’üw¡»Ë1‰bcˆEK[©F%öÌ‘)*á2yvõ5kD["ÖI’´Ùc®"ÁÃg¯".ŸÍ,dLä¡€L@˜élD@zTCQžâ9RHÙ°IDšží=bPÎT+Æí>«×îIQç=­¹å „Õ1o/6nN¬Aý’ðÿ(fA-·´+rSª÷v>¥¼g>peåFõ¬HØÈp| I o8Û0ûN›10¼å;¯Ö©A2Ím6ŸöxÊ1MuwDuBŸÙ_Õ­Æt@{ÚAÀ€‡Œ ú(÷Þ!ùAà Åõ:0Ò½"´Ýà&£™NÍùYäÝoÍæ(Ø8ˆrç.ª=8t¦;¹eœ8âä£hŸX¸†ÅqJdÓyuÄ.¡`“.=pÕ„T1¡„^;ç…ÅBÍ'…d4¡#UÎ #ûå4¤qœ¨$Óæ££ø.’ç€ÉÚJ‘xÉqLhFxâÆ>ä:Åa|]õã ú‰º@Q’d͓Ӳo¤•3KocL(£Y)'‹&’%<ˆ:Æ­SÑBËŠzS ¶]Q Káh?¨:*G®ª„äî —ï=YfïóÚız-nn©iBÌaò øä!%Ÿ:ZÚcfåAì‰YQñ'ÔáÝ¢ æ–Âeך†DóŠ?«†QKÀhDê"Æ„&ÞEDµbI´õì° „%)Úü#1Ì™KÌjkuÈ“m÷§9>é\t-ïnϵÃ-¼ß‘_4sË›H·&÷‰cRw“T¶0­:gë’©ÆE ¡nè(ª¹(Z1!íÍ÷!»ölØZMÀ!á«Lp»#d ªñ1ug¿²çÊ´i®c†é|FK„8ßoM©™\ꌽL00ƒá -7ê&R¾V½’ébƒÚñ…ò!mD-oHÃÍWM_=Ü\ùd6ËK2ž¸:Yƒ Ô'#ú©ïUš“.È²É w(¿•†`3À¬’‹½Ðó¨‚ZXy¹}¸Œ„}®¬I]³TV »‚î!¹ä@g…@7LÕãŽ*Oº‹Õ °ZßE[·>ü„vžYM_näñoo¯±›óhéüA¬´œ¸ìëÿG”X{Ð"" NZ›ÿÀ„¶`e5¹3µìóªÝd–Y£’w칩Zkº¨AÊ¢9 º6‘=‘ù>ÙíÇõ;l»Ä ®ÖXH!^v—„ Ù¶_nh¢ÔnМǶ…ß„²Œ©Fš Ùét$d[;Õ`bfÐÐAðcÔÛ=.؇wÅ;wÔ.é}ÄÔrœ^ÕZàp¢}º˜³¾žÑ«.ŒæFÓ*aËOx–W`½ºñ¸ÅüÁaÔºo?òŒU²›)Cò’ëÂbÈ'¼r¥í¼kèÆn2SAU¶/'΢C>Zwk,4g~£4ÛǪT¾ó¶S%”Õ°Ë„åÖ&”b7ˆ\A/´Ë^ãzþKÍo™W¦ ĺd3nÃŽ®"r¿Ök&׆$óÔ¦´®|8nLe[~Eµa…£EÁë7c‘[Ïaj×9/°7n—æÏêÓ´“7Ϲۻæä­]º”äM,6+ z‹m™*xÝ„jJJ-: 2“½Q3e%¯† q§9©×>MµÖa¥{¤¸ukÉáPÝÐ*¿¹LÁæˆ|Ƚ˜nISjNœïµŒš*Gt«bIfßtm$ÚÜ»œÃ!íf:rö`š¡yë!ÝÚÎp/‰–°QR´’S•ªí3ûŽ·táûÀ ¹Â ~Y> CûØz*°ÓF¶bÚ¾-·-E²8µ.熃‰³þõç7u§_;Hþø»7uz×§ŸOÆ&˜_ÿ}úÓ:˜…°‰Y‘º–-õ^ 2³CQ8“÷üÿˆâ±ýó&“Æw\.<Š£ÜÞºMt ö¾~ýkÜYÎ>ØÙì[Ì1¨uÑ6ÑÝ)œ>§‚›sp±«‚ÎÄ뎎!3˜žJ«\ÌNF›«ª3µ0Aö€ÇöÌKG³É[†…%½v™i®^t¸µ®Œ,Sk'MÖ)Fœ´ýŽBÌ×`;¸YjÜéî– §·Ã@ݹ=\;œƒæ»:ß*göVh—ÏoÆ<»–¶»y¨¶:›çj&g cƒ±ÎRßéè ‘Qº%¦/bà ^E‡W4|L8Âç;» 2«5ÝÏÐäî Á£Õ€•%.Ð }âYî/Úe‘Û­; ¢àa›×{ Q±`Ð»Û Íýø$W6d'¸úŽPÝâí»¨îöûžá؇Å uF‡fX}›ÏÓÂúÌа줇aÂ\xA}Ktmú‹¦@óyI°ß™!|cØ0„£öm{çáÀ'@­Ñœó‹0ð‚Wà „¬)ßÙÁX­ø)ˆ§»îjÑ2Þ´šB8‚•ZÏ_ÔËrÔxh·uÓ× R„˜*ˆqïÁæ.]§=ŒsØäe}cG‡|¡‹miÝØ|¨M`º0¶Ýøbêõ[$ˆê‘¨î]Ê%µÿ‚Q}4g¼w¾ ÷' Ý ò»‰•Ó¤d‚¨Ç±Î™v¼¯öÌbäM´×“3ø¢ç•¥Þ¸p¯/¬únÙÛ>Öý7÷(•à 7LjKù¹þ,/o‰9Ü*¨¬7{éìÚ ÕŠîÃ+$[€÷7Râ@íÅà>[áf‘ïòûnä(øšA]Ðu#ýز ¢cãE7r§Y3•¤ Ó·+¹!6÷ ®§%}BIóÑÒÌ'l³ÒZÅ?Ø‹ô»­H V¼AwK•šÌ¿é ¦sÅdãÜhLîzî´ò}¦TÜ‰ŠŠæé–KÀÅ~æ¸çØ(EÚâÜÂÆ%ø»…8w ¥+HSȘ>˜ÿM¯0¾ø^ÝBÿo[ȇΠEr7:*gâÇn+X¾{"lÞV4þžƒ01”ÿ×Y·’P¡vSV“ ÛÁK·I\ÛìþKÎ…skxáNÿ g8ü endstream endobj 110 0 obj 2809 endobj 112 0 obj <> stream xœ­ZËŽ+·Ýë+´6p',>›€  Õj-²30@Av‰v€x“ßO=ø(¶Z­¹¶1I¥*O½Øs¯ù€óÿNÿ=›³ÁO!‡{ž<|Lç_ÿqúËçÿœÌG6ãyûþë?O!~¤sˆæÃ97}Ä"ý|.’' ”ØpÄîô¯ÓO?œ”ºáTc‘œCïêÒA;Ãê†SE‚üÚÒA;Ãê†SE2á#·¥ƒ v‡Õ §³ä³¶ÈpŠÂuÅiÆ"¥©S; b§qXÝpª±H1tjGAì4«N5)@§vÄNã°ºáTc‘\êÔŽ‚ØiV7œj,’õŠçA;Ãê†SE£¨±Ó8¬n8Õ˜%—S§vŠÂuÅiÆ"M®S; b§qXÝpª±H1wjGAì4«N5 -µ£ v‡Õ §‹äm§vÄNã°ºáTc‘lV<‚ØiV7œj,Eí ˆÆauéÆ"PÔ‚ØiV7œjÌ’¦Ní ;…#êŠÓŒEJ¾S; b§qXÝpª±H:µ£ v‡Õ §‹äS§vÄNã°ºáTc‘°›7jGAì4«N5ÉÅó ˆÆ±z6c‘Œ}£`·sPÔ §³Y¾A(v GÔ§‹”Ôè…¼ƒ¢n8IÏAˆjôBÚÎAQ7œ¨ç 5úF!nç ¨NÐsœ}£¶sPÔ Çé9V¾QpÛ9(ê†cõP£oìvŠºá€žƒYM>ý¹Z1 _âð/f·Ï“*¼”üùóïç?=w<þô׋c¯ßàbœñ&\íÅD}œøc¸~ “¯ÓÅÌüÅ_~¯ñbî׿}þù´~ž~ÜìêŒÅc=ïj1y?z±Æ<Š+À5\À©B1~µI ÞÙÄ·“àÇH//¼éœðêw§ÅrRt0š7&â^¸Âↇ×ò+,àkãžGL²a‰÷¹pÆï„CÈÄj¡7ó¼ÆŠ®Y‹jÕ*0Hx¬¬;H ìê­íÔml˜¶eA1¶ âׄ«9¸%¬òmàê>߬­ßY+)†àâŸ[úÙéëÔH‘þqõȆz$ß“ïÓpè–eÝ=kU~;ut9!3Ek”Û…Ã$9¯)Pž¦œ£.´ °ª±BU)5UÂÃC•ˆ°^[Y¿0Òr<Ópa“çaéY q¥ŽÑ’ó Ô’^.·nŸv²ûY^áøLÍí¥¾èÕr*iÇòüóß/£q6n{Φa8IÊ)õ Ú\außsq|¥5_xC)¸°ë¹‘ÇJÉ¿¡‹djÓEÛ`#q¶jå+ÕšY­¼ËŠÎØNkáü„GÛ“•p¦zm‹ù $_ZÑt'êyñné}®ÔmÕbý¶c™ ¿qÁôŠÝî+'°Å½Nõ5ï³ÜV–Ã~ñ7Õû×òBV]Óä]ÉNz+S©ô»t®[&˜!nè%±4‡Mü ³åcÒcò¶%•èº6µv'½iVmúÞCÈ^YÓ¯+Òçz³Ô—¦†îgõùÿê¼øÖ(žÚîZakBŒ³¤‡nîMùeyKxú£À& î…³$™LÙÒéL¥œ¤”S9¹ ÖoƒWk-Œ¥%¢¸¬Nö©du§P‹¸jUջʅ§„ªGÙújúië`Ç^fû­F]:Ú¤f§‹S;ñ 5œ+åL?WkI¾~zÜni”)ddŠ«yãÁÓ–e÷¹A¦‚xýß´z…ÞÖ7]»UµÏºF_MKWlµYRxà€r='aåÞà®¶ÞxëÜb¤]øâx6 »ÞîIS­Rm*{á5/ׯ® 0‚>Ÿ(Ökz=QõÚqVá}þk—yÇ |öÿâ¯!NÈùæz1·Ìî«Î%i«:_)"œIÁÅÚT|ñ&7Áb"fጜäCo­«Ï*m9>[:À׳‰pCIÃ÷3áÆÙ4ò½±Ì¬¥¹f®$Md醡Yí#7L®¤ n¨_,§O{ëëÆèö³`Ñ—íMcâUÍÚ²~àšŸÚýrË„Âm@¶ÁOöF)øÄXgd¥w\<óä yáÓÃWêË9û”Oõeï~¦]}BÜÕß\pÔøxæä$ ù†^-Eg°Q¢pi^‰‡ü4Ÿ&lä_p6Ã6r(°ûe\¾‰!æ+¶j,A‡Eh\Æt±††á ?͆b›Ú [16+Ϙˆqºá·:“¦m€ÅÎâÛþ6ð@wv“h%íà49ÊÕ`ØU Òq.ÛèÏÁØ»1쑞±],‡p.½›üžéGÊ_òÞXê)oÁ­{_¶/ÀÓ[pþ#Úo_ßCÞ¹Ö}OÞcHŸ ç;–ÇÝ Ù~”‘«ôæ8!|=ò³aŒ§Î›MüþMíë›Ð5a}³‰}{;Þ„z&þoO­ïÛÄ-&ãïñ&æéõ'ñxÿr›"ÿ_¤§¿yX~êÄ×WÏxåÞÎÂþO¾ðôëÌ+øÑ ÛÂÏÿš:Ñ2 endstream endobj 113 0 obj 2265 endobj 115 0 obj <> stream xœuQMKÄ0½çWÌyaãL¾!Ð]·o âMWÜ‹ßé´¸nm)Lç…—÷f^P|«/@@î|öÚ@r¤œŸÕý>ꌔÌÿç僎}Ô>”·I‡ ½Ã„œe#!^‘§^Õi3ÚóÇ’»¦ ¹´'¸é È@;=$4uK-:ôÕ ãÐ&i}Ýú‚¹¦‚ì¤î¥v5¼­íNš:Î\-à¿«!Ñ¿¡Ä~šâ@T}!ûÇÉOä5ÞÚ/™¸ßM¸ CYQàð'9„'n”(”#§=«£žrmoK&yhŽx6ƒl`qÍ٤̳/\¼dc¯²Z zmÉÕšËÅ#üÒj{ endstream endobj 116 0 obj 277 endobj 118 0 obj <> stream xœI«3¹ñî_á󀩴uƒ1xé>ä6ð ‡[f†I sÉßOi«*IÝí÷…dz[­RmªU²ºêóOÿ9«³Â'7»+œ'«¯Óù_NùéüÎJÏþÜÿñ“ó×pöÊ ô¿NÎLW_F¿ŸóÈÍpuq›A;ýóôëO'1]ñpM¹«xšA†“xÒ4á©ÀyäçÌ]lNâIÓ„§ç‘›®––6ƒ 'ñ¤iÂSóÈ!J3ÈpOš&<8ŒCˆº´d8‰'Mž œG`…(Í ÃIŽHž*xz_È%«xmNä%UÕXsQy!n¨1:ù„yhÐÑŠÍ5X‘êIò8‰êôæÞêMü.è#@1$â"*%Kô™†õ¸ÃQ=™jã ÙŒP>ÄPyhA]‡˜N|j)¨ð.rºÞ¯—nï`ôLéA†æ…•O(Œãƒ©;,é>*#BAžØáÖN$ÉŸEf±¬÷ïÅ«3É4óáOhu¦Q=‰˜Là†•%Äeàtå;MŒ´ lš¼¼hGt¶¨>¬ /2÷i£)?{ý~/6Ø\ÝG1ó‚N™%AX(XDl«vuFöFj³ˆnº5ÆÞ8aŽPÂ:r„~4êˆVôŽ Üé-º,Û‹u§¤² +ågi´†#ýgŸ°zƒ9°­‚JZ¨*ôMòŒìÙÑ,vÞ-{ ÎØ¢¹¼¥ö¬cÙƒ»¨«™ÿ_øXœ¼‘â×o[H4„ÔîX¬,Fc¢ ž•ÁFŸƒ~¡±~ÄOÄíõª&õRO,Zi@lhôëßaËœJú ÄÕoäÑcµ·óàÔ–œv õD™Öˆ橞X÷=ÑV^ø¥GüF `@Õ˜ìé'üKªvôšÖ"¤™p:€K¸^XÜr‰¥lèöôüÎ*0q÷6VÙHSÃCíõ®^3Mí7ôò„u QÑP²I?ð]@ËF)¢VâŽñîéç1e{%ÆcùƵ?°óv6è-ÿåµZcÁa´E_GÍa—²½>¹¨`pP÷.š·uæcVV5l~'q/q'¯Ö¶ÉÚ¯’hTC ·'Ä”ºû~ •¾+ë*D"^xQA ->à6ŠybÉ"GZ/¹+N ²qRX56 K)ê€óI\Ÿ„sôånÆT™ÔmÖ•S]Üê×íU U!qE©ÖR³µ›h‡eygªryw¸Ë›â¹2تC@öo2·sR¢jUt…J)”Kz\p`ø©ù‰¥ª=A©QÁi»v¶^ô2N&Ý謹¯Í“Ó}Þè=†ssDÌU¤DvTdÜ»-âøe(äe¥¿~à72 [EìAI6Ôc‡µ˜èÃ&,>'ŸýÕÛ=q°TÿeÊjçŠadE‘Ë3ò!ÆðT-ý³Æ­ Á®e©Ô,›¥#B¦ˆV™„'Y'¬}eä*­ ¶…Þ¹½Èä¦ÊýÔ”G&ô™ä¹E+Xª^jÌCÐ1¤~«5À~>/4s1ëÒÕè• SËŸ;¹%‰¸qt(Â}PF°4“’Dò•–´;q´*÷9y,“®»‚jÍM¾è`û!ÚÓÊÁª¶Ÿ´÷ï îIøNSK£§¸œOo¥³°•´ªa½Éé½`¹%®âÚƒ µâ˜^ýòÒdy¬c™8~u3ï…â7 Û€ÌM_°ø{= ?9˜kýÉR¿Ø•„V–=”í¨ìhò•]ýñac•k™è{9ATu}I'N?£%{Í ÎûÞÕ•C½9D]ûJÇPÞ©•d¨*§\˜^6ç»(ìÌ’›ö,«´%®TpᬲÂ'-åïOsNph9Ú é±IÍi¡ƒÀ¦ùÆ£5G_€¿ÐzŒlgÍš·oR¤­ Gdq>•\fb­{ÇÓÉËIºÊ]ŽGžJIí곓á¢y²h%xnîþØXœ"•¾$1;‰ »pæPxM†£¨”N !]Éu†pP^R\3òàôÃÓqƒ`‡z¼ÏÔ%µ872Úne¾ÉÑþV‰ÅÓ„ÃsbdëD5O@ µZ}<àK–áfeRí1Ût×sI3íÉ6#ãË Q»–…á2'®ÿ¾†PÈýU Î,Poýwò^n˜’)SÇ+L“c¦S£Õ²eNQw3äZC•ÖvÈ5¦œì¦ïrÓzÑtÃH­‚iBG&Ï\W"ŒäÁÛ Ïû…šµ¢HmÊL–cÿø$úfZ‹€*¼ â:2nŸÐY­„ê*ü‚g#ÃÚߟP 5 ­hÔ¶Œ~p9Ö´èøèÐn¬óÜæ­ô™«âcšsŸ«ÈÍröð¦Dx‹ÃáD ì1ЇãÅLïq>„_=¥³¼Q•½E.È^Åõ”(}jÇÕô&T "GÀ²ô_é"™’—øÊZi ëÖÚÍ›lÉXÂ@‡ríZ×^\—ÀA±|óM-ûäC¥o‚â–¢tmkÅTÙÉ*ô|Œh:^÷Ì‹¯‰ªárã™XsO•Û£ñT&Þ?È;êK°M´0Æ€àëD©9ØÙ¥nQ Báó1ÖúÍb¿ð7•–»Õ†õ½Û¯˜ùáš/ÞW¬y»–^~"²ü€ê õþ˨¹ÐÙV*$šz£Õvª]a÷WYÉô¬ÇûCwÏãO6jOE»Ðž×Ê;ðágœ/é":·’”û†ÛÏzýá0o<å+`àÞ!ß!Xô^Àn…àÓSýåßj™Ý_ªÁ4£Óm,TôK8ÃG³jÿoj\Ó/üùü?IÌ89 endstream endobj 119 0 obj 2590 endobj 121 0 obj <> stream xœµËŽ#¹íî¯ðyîHÔ£J@Àí¶¹-0@AnÉ&’ÙK~?I‰T½Ü³‹™j¬*Šâ›¥qïþü¿ÓÏîìðW*éÎsôïóù׿þôÓù?'÷^œ/ù¼ü÷׿ŸR~ŸÎ Îù÷)…ù=Ëè_gù„Oà0`¸Ó?N¿üt2Ÿ;žÌ#}¢ù)0‡3”8¥#Îó{lÓ†C)þØptPMåÒ° †3Üð玧ó(û÷ÎÄ8`8‹‡>w< ˜GqRކ³xèsÇÓ€yT6æ§ÀÁH&¹€3Òe0ÐÇŽ£òÈe#ÐaÀp–úÜñ4`…T Ã@à þÜðt`ME:Îâ¡ÏOæQÖ‰y…ÐàÈC6ó¨@ÇA^` Gå>»@ÇÃYnèsÇÓ€yÉHw0œÅCŸ;žÌ#ï@‡Ã1 LøƒÍíÛ |D€iŠço=ÿáéÏÎß~ùó‡ó.oþÃ]ºÀ‡Ë4œêÏ™~¦Ë[úpå2¸+½¸ÑóNÏë%¸ÏË_¾ýñôøvúy±jp€¡q½*xÂIëÕ8÷*Þ_Ò‡f¥$À{‹¤é=m-;'ø3×džT{"á 8ƒcóÅøÇå >¢ÃŸ(œÅ¡ä·P €ŸH;ÍE4ðY‰‚ì]ù©òÊ?? .†o\¼h6 ]Þ‡Ôáx¾›Ü?rèB#O…ô¨‹x¢ TIÝeékÛ@²ƒÑ}}囀Ñ2…/HŸ~® „] ž:3!2ž¶¶òšôÚ€GGx¦Ã·åØ> W³§èÅ|Õ~™(gV ív ÍÞž-#t`¦¹Á°+bë<3U­û®èɰc2|ŽXqŽu°‡OF1W—4WÃ>Rvž#Zä¨ìð©FL1-•AÑøš9 åÃ_«y2?ŸíRû,Ô‚<›.!8fÃއH­ðP&±ûÎY]‰ÀðU[5l—í°¼–wÈežÜ( á!tPR`>º\hi0fåüSmˆ–Ç'ŠeJe C¸/XŠ“úØ[pF¾oÀv¡²‰±}f£2&ÀbLK:¯F¾ÕÒ+û+6hÞÕØèíØ‚¦Z;,Ó…pn 4’Z𤈺§ªTG÷LÝ‹Ø@Ø•‚ ¶ÀºH°®–­Ç?†™‚*»]B«gƒñlÿúÊ©–ðk‘¨RF^)r@fE¸šDæï•Td¢×áL¥¨ÍF©/)n Ð”¸»Yàf~²>Ý(H«èmyLjºw ïJÒ_rFi!° AûA{%—úÙPjÒZ+éÉ|–ÈëˆéɲŽÉõР„Îhl…AL2‰¦ª° ‘ÙŒ—4%´”5$Ü.22{hnL"iò²QR}­¦ö¶ Uú¯˜Œòa;)ÿ€´å'¬SÓÖœº¶‡¼5³NçÒ"‘¯ç×+!¡–üìšÜ™­™ÄÂ=… ºpõo¹j€YˆQ¡GýÌ¡­¿Ž!f.óü%‘;ÊP³ë«êÄʦAÌ(æø!D4¡ðÔmñA8ê8Q¸‡:ǺtUC b-ÅüE=¼s%®¿¹°Ì¶°7"Ý-rœØ),YÅšT *²ínz¤Òâ¨'¬¼Q·‡H%XØ®ÂăÖ&E®=²F’M Q;eÂZrY ,œÒKI7ÁÂ+½g_cíoóK £hN²*–,ì$iïÀ; Dܺ.0^åæ¼•š+Š LΪ÷0ò/|Ù2jUZµÓ Ó®¦M+ ²1/EAR$7Û±TɃÚð¨¹#)‡zÇ p¹a´»¹A LëÕzǰC´¦Ë›| fëó¢Ë`<ýk «ˆ8‡^Á»‡%¹ö[’ú¥”©SÂ.ㆰ®d1 ´BèDF‹V·¦  ú%meÇž›QNC²H ÐÉê¦ij8Ù…FðÕ[?Ö6=7j¡ùyiUJg¿r¥ÑÉT;冂u9Ǻ)ÎM--¨)Ï­î¢ Ž‹g&7N(\Z*¤Ð²{€¡ ¾W¡°×O‹ïR Ý ‡!f›—åB+ v‘Í>È HDËÃýrÚ¸ÚPdòÀ·Ï¾m®<+–Ý&¼‡sò¥5&"K±ú›»ÁänèÍw‡<|NHá·n¡ñ0ÑñCjÁ©áqà&—qK7»;âƳƒB¬Ç6Š¥4, ׯ?ˆ!º'*숊X¼T hÝ'Î'*×_Íw¨É?üÞLYyš›%ö¹9Ÿê.öûhXcÂõ‘Šx}ECŽ-d¨.Y hþ÷} æz “_Z‚+õïÞ¬BG:«i %ŒÏ˜K'_epsW’¸+Z°FÑ®0Cë1WaZZr•¾Âχ¥4çPÜÍß^KÄ»¥&¾"õƒ$JÞÐszÍÏžÃÚãÝì¯P*M/¥rYyº™}hÛfî÷ú7¯–+¿ÖGŸó£´aå¯Õ>¿$QÆóRŸ_áKg)gpÃ8A[pP6ÕS*‡(gŒ>W¬=ëW–@Ä7XóîrH)"ø´a0é»’ek˜×ýºE¶–90Í•ƒ+ô]*mžÊ<—=Ñ"çVèN—öà,º[ùèû½•º,{ˆ¸±A µß.› ÞÁ¼:}©[*mù}¡<7 ÂÞ˜÷ºâë-gߘꎩ£ÜÞ–´5ë2`*Ê`ºwmmú4·W¦zìï¤ê2MÓÉ®°Ø²ÁÈšT´­“aI_US‹“ËãZòºy¸®%mwo,ÌìnR[ðF÷¬ÙeÓÑ´'DVË2=õm\0è÷ýªñ*;ÝAëîŽ5YA/É,ßúÜC•ëå–d\Үʺ>åŒ=Üø”í^ë%ŸЉÓjß»TŒã‚¸W¶8曉-6tÁ°šî=|ì…‹àvèd¢JkÀÙ“ÒÞܪFÌÍÎ=ôSÂ,±I8‘ ŸºO÷zM€v{ŠÅ²ßïRìç¢û~Ùñ–pdr©Ö<[⎠Ð1;?_…^˜ý+ÊZ¡ö4¨•‰ ðíæ‰YÔO7= LÖ6ôV3O•ˆ*èæõ±ãâÌÑLîáO×Õ– ¡%h¿£ùEUc¢`ŽØŽ{Dºk칑‰.O=úuËA?u&†æ#ïòò²0æeŸF·,ªºÌë´]CÍ·kV éEz ƒÿ²#@ðûrà ´iÚ’[]W¤ »^¡£sÈ­ÉÐ:¨ý(¬Œi™¬èa?𧍙“ø®žæiÖx¬[ºk<«UKí€Ú\½[3JN3±vÜ)É‹Mûî-Òƒîm´Ï‹9x– _JŸÔJ‡Å)ŽÅæRH1Ì! Óp1ÀÊŒišŠMv“Pxö¸M(MáC4vû¥~InÒÅ‚Y4ÜL^{©ã!Ê@&´ÃcöÓt^ ÏPŠ0A} õÎÜÕÊúúUŠvyu½…œ®Nö áÞ\£ÝøpLVò‡ÒØ&êÍq:™ÀuÉÀM_tš­§ó¨Á½/p[¨™3êáôq,¬7=lÛ¯µWÀCºg¥^ŸÊjh ÃD@½z¨Q)à~Óʵ7ÉÍÙ¤Ýx°©zËÚ¢µ÷(¸Òh–B2?²_`Ý™ãˆ/ÐØ:ëÙv?Ç#ùAôƒM­äã59Äc;öSøÊ%­vÖ³WgfÜ5wTšŸ˜”Êï®5c´ØÇêÈ\fê$¹…'É”l¬òk:årÚbãw2X,§ ÌÍ­JëSb‡9C‚f–qÙܺ۵`èc* -¹D»qYqYD;ו Mrº¸&¢÷¿ü¯‡Kf-³ ‡qSçnV&?eÏ©xåjj*8¶ôTÖÛT´µçÛƒ¡‡‡Å¨Æ°R8¤ŠVli2žiṸa.#ÝD¶ƒ`., I e4ßQc¦ánáF Vk1|–ÁéM‘l i¦ÖØA*“áNáî­!ƒSÍ!Ù–O;óæ…ì½Fg+¤±;QW»šóÕÇý;84—˜Ö·÷ OÓÚ¿5Õ»A_<‘ž:ZC²±yÕª°K±Žc—¡ëÕ£Œ,z×¹æØÙtïN[ZjÄÕelSŠÏo·¶>æNëf̰BÒ-þ ¨îmFX:k¼ûféâO¦Úâgù€ËÑàí%øõ]gïý­Hs½ã›@öRφ­›ž™ÜÍÙ‰7ÎÜý ¦7gŒìðòúqáS¦ÿp¶º('Eè® `.˜7&ª ‚6÷up{'Á$‚ŸÏÿ-Ü»® endstream endobj 122 0 obj 3213 endobj 124 0 obj <> stream xœµËŠìºq?_Ñë ÓÑ[64 ==ö"» Y„ì’›’@î&¿Ÿ*©T*ɲÛsàp Ç²KõP•ê%uÕ—ÿ½ý÷¢. žüì¯æ29}.¿ÿííO¿\þ󦮳Òs¸ôÿû›×x Êô¿ß¼®Fÿºä‘Ÿ5àƒ6‚{ûÇÛo¿¼‰ÏçQŒð[ð4ƒ 'ñ¤ÏŒ§çQp3žœG¦ " Fà0B"#äÑN,h3HPCúÈ8 h)%´d¸,MÚ|ð6ÔÇ×›Oñ£»|ýõò‡UÅË×o¾)­Ìý]ß”UNù»¹©†§ôèïïþ¦æûtSôâ#ý>Óïãnêóþ—¯?¾-_o¿vT­2°ý·TN8=ü1J­ÄÅ¢õÝß´”<ïññêGDKv0xÜ+ÑàµEa?qr–t=ÃËä®Vb²¼Î!/©¦Ey-w0iã‡,1€lÉJ°éW'&58Rø¼³ðú=Í͈P°ü‰›4´‰ß3¼ñüD0¡N¤h‰ Æò:q锎„ðôˆ#ÖUL"KpZp˜ȈFdà…Sj%3CV“a1²* ÛÜ'­GdT$åcŒîЈ¬è4¶HIµB¬iô”µ„ ¾¹,›¶óU™93\^“ñ-›yÖ."«Aî$K¨#®¾t–ñ³Jð‚Ð1âM0’\Ô· Ï8òcªYä©ÛÅRøL+ù™>ž6(iöZñ<ì^;€’€tv#RØÏ:¹’‰“ÈÂ|(yPÙ¬Éô˜“”=)ó^I˜—c ~;5!…bŸ±eo6¥ÝF¦ì1DÑN´¹§Ÿ„N¸p£8Ñ`ä ò+™ÚW^V5Dpy-É\C íx$RÒÉ÷6~zí·¾à»YcJ.5þÕd͘‹Ž¹R˜GË|›âGò7aw÷ÏPlÐ)}wB’#ÚbÁ xæIÝuNRP@¬î6UdÙª ºÓ=¤³Û‹;‡j°¨ß¼…’¢|Œ½Y_‚®|ݽ¥À¬×'²‰ Ë6D”Q¼á¢Ÿ Å×?Ç/bbÒ…Ý2[=U0*ê§{îÍSç£Îi®Ù›a`Åõˆ¤ËJ}è~c½ « Ôéof5kå¢]`üïÀÙ >Þ „ù<–,ÄâÒ[ÉÓè½­Î>+Û–Þϓͻ–’y†O°ÓC™úYvµ ÊkvqʧñÉ*ó€LÁÙ=²Ù9lnõfçO^ò^½,û©€Šb¿x§âË™”€‹”ytµ] UuÏ•Nê«{±cžGZ¢ìËò»ay¯nÆNN¥ÕÕê¯KÁ«V§Ž|Ÿñì–ñ‘)LùϦ¤; nÞ–ï¯ûÃb˜¸^ÛáÖwYS­ùBÓd12¬Ë¼½ä9È„ìŽô)¡ïãoi¾=O"±~K]4›,§Û;%V¯ÕM‰&'Õ‹†öeÅÚ¤¹œ†&=¬ìÖ,Uð•Öf©ùP¯n £ɵMåÇ’! ’¸²èÌŽCHðÀì¸Ë²QÆbDâ]fŽºÈ$¼gŸ9C<4ß—°²H(éüµžý\®QyçãNþ(0Ï k–E!Rr68§w6©wsÎÙäÖ9g#|ö§Zé*».uü~° ˆª3B”TR¼UÔDÜ P-ŸziøNõv)]Î /á|ɵª)q+»ŸAY­ˆB¢W~[¤ ZP¡‘»tŒQ1êM…×”î{­N"¯­P­¢À…â„§æ¦[è›ðìân¯ôÊ6^]¸¹C|ûMç>-~i »ºöîÕKÍ™mÛù÷)ŸÉ¥þ^w¬AÅ]ȧ¼JÓyÃnxÖf‚4mÄP&Ÿ·aìJ~X»$Äö0·ØG<æöž$Qí´[™Ôò}Å,6_˜™ëXëðä…tÛŠ¿û¡†ýwêvO" xeÀ:À3Yæýް4BMƒfc‘·ufÚËž•HžIâ,;ÂùÚÞXeè.ûýЀõÆñœ?øx®„=S–=HPÏé@ñ2Ų$i~ÃpBô˜p3ôÙ9ætJêØjוTÍkÄ»’Ó-ä*ͺ؄ÛS)éHÀz?„•<ËŽJŠ^5Ƕ×hÖ.„-Œ¢?M|Dîê‹6åp¨I ÀG†a¡íM£é‡ûzJ7s”Ú%»ÈÈy“аeäBrPÉÞ„;Š0´¶¢e‘@+POÑEŒèg’sx¢Á[àbÏhË¡ñº_Ti5_ç!'Eg”nü ¦$†¿oüšŒ„ì+K§Ö¡ï¶ÙFêÀ »Hl”˜ônYr¨áõA*êJkoWÉ Ù¼ #¢%Ñ6ÖCQ]Ó¹ŸBöÞ)e7¥Æ±e”BšUp×Mb/Á‰;ŽGí† Ø–Fäúá3)=Tš¥3¸GüI›Ä*s¹ù®U»oÊþ¤´ÃÐf¬8˜h ²WƒµP9‡q‘Î8ó°lÆ+'Ѽ:Ðòb«Ó¤À½c'ã2ªÓ|\Ïzêú˳˜£üÇ9ût Z›xºD³{tåäš­vÅøÊO™'N5nÉ AÙ…)VÏÝõÉJ:XO7èÆ§®ŒCUV¶øH­i+äpŸOhm´ƒ£ÉšåÂýP•dçy¸ø$lr–äÚÛ:\Ý ×’Ž»JAÆà#ñXfŒµ¹—PÊ`ê_ˆÂ½ÑZ 5GûÝ@Š·¹íHŽ•IE…ÝöDŸº6Ñ‘¸¢ß¶Û=Û£z3zжàЊPjÕ†Fäq›nd)§?Ñ>/¾Iš=HñÜ­Lƒ/ 5ÌE¶â»³ØK³îIišÑ‰=»žï-’¶ÙÍ_¨"Eñ°“ç¸uÖž$¼®öõöZüR[ÿ²Ñ£ŒÆ»WY³MMns;£m+×ÓuÛÕÈÍÝ©Íb&™“Ô -ò”ïåK¸ž‰ˆì:•’RÔØ]I91³žåÊÅZ¬9Þ¶Y“lˆ1²0‡e|/º€6ë‹ÝéÊ£I®Ú|/[€b˜Ü5hê«Øå['díaÝ¡¹DµéAx)¥v[‹ J?»b#&Ô¼p¨¯Ò€(5 Ÿp´5lØdåA&åø¹xߥmmïùQe›šh{p°{+|ºÚáâ$÷E»ºÜBñJ·¸Ê°G·€à¬‡h‡6ýšz¨ÐÏI€­‡±Հ܃c†X¸žVKw˜#ÒC›ñ}©,Ä…¹&O)ïQBÜé{Ào/.l/Ò*¥7ÏÇA‰ÛE¶^Ù5â÷ôé€Ñ¶D£÷qt¸¿¾3B÷íû8Iwç™îÏ|"7îîNÜÄ1cŽÂ½Äw0k—o²Õ{8–ø´xç»×pt4ÛûvVxÝäÕ%í§þ ÏéK8bîÉ‹*j?í¢Š®‡P?p GÌ>+Û–ÞÏ“ÍêþÂÏ©k8ƒy£‹8G—o´ÞÞøò/ÍÄþWà¦+h’­ÛÝBÞLóÕ&*¾mµü¯E»hä%¬ë¿^þfÞ"¿ endstream endobj 125 0 obj 3168 endobj 127 0 obj <> stream xœ­ÉŽ,·íÞ_Ñg3Ö^* Ñ@¯ß àƒá[âA ¾ä÷ÃE¢(ÕÒý^ìô”JwQ$U6ŸöøßÃŽæhà)ÎñÓs°ŸùøÇ_¿üpü÷Á|ÎÆÎé8þýão‡˜>§c²ù3ÿuˆÿòèŸÇ22Ÿ L=˜¿~ÿá “‚é9Îö3ÔeÝ€¡ž¬8”GÓòT,Ý€á M ž Ì£@;ui7`8‡¦OæQ4¬#ì §ñдà©À<ò“,TFá€IÁÀ€üì¼Òn7 (…&Gå‘™•B»ÃiihZðT`…95…vƒ§ððtÅ#À<Ê®)´0œÆCÓ‚§ó(ͲP=…&òsŒM¡ý€ š”G´ëÂnÀpZš<˜G.+ív†ÓxhZðT`Ù Ú Nã¡iÁSyd¬,TFá€IÁÀ€ôìóÔÚ ªaàÉŠC@y4ù¦Ð~ÀpJž<˜GÉ4…ö†c<fá„Îë×Á°ÓqšÂñë/ÇŸöhÝñë÷_OÆwþ°'ãM0ñìN&ÑpÂÇLñüOf>瓹Ћ+ýÞè÷rN's?ÿöõÓáñuøy êƒ@¿¤ê,á$zøãŒy.ÖžãÉzE)à-"qúŒkD‚H 60€òòq xíQø;.fI‘A³ÃF†³J#ñ¢â„ºr¨&ãQÔÆâmà²vC¯q„ʰÑäbO¿Ö™ëР\ƒ&è1±MÑ£}âJ‚tÉ^ éÞNô÷QÎ<ú ."Ï0ÚI­7lÑ΀w¤âÒyŠÚò…Ã\^Ào`ÖÁ ˜BñŠ` GQbezpûTÇ…Àç©øá­Y‡|r×a¼ûô£yˆ(ãŽD²¥ÒØ¥Ò©ð0UX4nÙqË%bƒ¥YçOe•’Ĭ˜Iæ‹RÉ• šð•íiTùXdÐ*KÿlÑ⺘žÕkÍiŽýcpq¿¹,ôMǽYõθ®wí dìÌ8h3;6˜õ%O½®+—€Ømñò&¶vNùÓ¹¢nX6€XW0¬±•ÿ¨ ªPØ¢EhMxTCYOqúc‚?Ö>øp sÂG…ѹŠkj¿-€ § Ëâbcdu ŒÄæB{-¤,õ_Ý܃Ÿ"+ãÚ6SU*ºÃ¨Õâ‹„g×+ ¨Ãî/$C,'dÉÅ¥q/kßklTìÉ”±`9´Å¸ù1´ñ®,nZÞF¦Â6ŠÍ.u£¥¹\³Y= Rõ§-ÀH/ë:3½ ëîû¢ú EA–™XQîh'VT&$36òÈoÁ—7ÐÍ3$fkèŒ=¥¾=Ö8'’(<`7o/upXL¾<éÕᙹÚA±2¯óXú˜§–öa@‚%u#ŠžöoÝ –¸™JH Å[ZÁƒÊw¦ØŽÉöâf3»ß@ˆ¯¬ªÃMXfe,†»õzõÆZª´zí\×F3YøÏ\!}š­õ…vº£í­½ÃÚdxi2pHìs°Ä`.þm­J3!ët ®îwþŒ î 4D'g}‚ñ]si_ºj”hTÌÍd7½+Ý † ë¦}éÖèþùÒS}]4?Ù¬LænQ¶;¿þÓpTÿq`¹ÉÝßǦv nü='ƒT(]¶É^+?û\T<ÂÃc_¿#]ÒîÕ>áwÏ}:ÔU¡³™‡4É/“€³'è†f÷¥³~±/'ô’é ~t5[Š\K þfAÁv²ÔÃ`/›ÑÈ¥ ÝʶDŒ|± n¨¼Ò®Ç‚Z¤®×ºÜimã¸ÅµTC1 •¯ë® +¼b£‰£JÞ¹4Ýu¸‡/,NîºÑŒI½*Îmÿ•›¼X±›ŽfÈË—t~í._!‘|›ÆÛ«FÌzNóv3í3-•EvÒr;ýÜ‹¯÷¯Å þ¬¾"^·²zŸI9+RF¹ŸLÝ1L\÷ÏêòÙY 1cÉRp¶ºœÇcf_ĸñJû=¤h¯ÊU7 …œ{íòŠ%gêçP£OéaϦEÒ>„=Érvã^‚ìO!›º;Z’ÙÊßþÜ f]cR²Ö(]&ÌUlùÎ)È«ÕðWd⌼4ÿJFÆÙ{/ÁêÙË€Yiv¬¿ ûlR²¨¬ÕÌB”ø§º#+Åc\Ä¿ ý›!þ5ä}üKcøS\ôá¯Óˆ¤p}üK§!$ìzžqCÁð*þAþa¿#þ-èlÄ?‘Õ·•%¹þÓ¡¡äÒkæãÆYZ âu!”¢kh °õ0ñÂ3{X©çâ)”xä%˜O+‰+ñZ7ìF?Ù^ûÿo*ž»ê6%Ô\Aw •A_v.¢·q¿‹ØÜyï¢#ÒõКÐîÞÁݽ‘s-šÒÞWTÆÏrŠá<¬ŸåÐ!x“H•Úi‚g½ÞüêU;Y«esó¹)Ñÿh±hÇ;rM¿\¦+çåB#ßìúö%玚-ž#?ÿ·ªÊ endstream endobj 128 0 obj 2949 endobj 130 0 obj <> stream xœµ[Ko+» ÞçWx]À©#Í 8‰³èîè¢è®]ÞMÿ~E‰"?i4ãÜ`çÌHEñùQ6¯öò¿—ÿ^ÌÅä¿B ¯î²-öu»üüÏ—¿þéòŸú.ÿûùß/ï?^œ]^×˺.—ÿ¸üùË^¬»üø×ßÞŒ5îvµoƛń›{3±üw¥?·òg¸]ÛI·íÍÜ˃÷òùQ>ï·øf>oÿñ——Ç—Ÿ†U½q™»ýªÎše=úpÆ|1koáÍzX)ðà£EÂúf‹,²“üg¤ !f¹­.¾Æ„ÿ¤Éu§Ä ©Ü¸Íœð³m=5²ÞT¸Ery›Žä—?íGýÎo[oø¬L¥ò¿\9Ò,È+ˆö‘?“=áÛ®TdÆxaÛ}ª XÕ¢$Mtþ[⸩T|³+qèO8tÁ¼.S­!ŸeÛŸÌSáóÔfŸqVO¥hc¨²´évMk‘¿²ŽÆª¢¬ôŠ6RMïŠSN:Y˜J#6!Gë9å;Süªóò’®œL¦G…‚®›—ŠŠ]OçUW¯šUh»(‹Äa‚kDhî©­X—?{¹5!¡ ó™`¨k,+í9?ò,Z7©¤ ýjª’dC6Àæò2K*rɢ/C&ŸÕ¢jk¢½g.ÚëO:ÕÎë8§n/¨µäq&B6ž:W²øê×Bl¶Úì64møh¬ʴX!pÏã]§k°B¿4ѣȊ_‹šÆ¦óÍùF樯úGÂ+â ¢ÈDïîbvãÊ.Ó0=³¨Šþ8Õµ˜Ò(d@ÅÊ@k¯–c}3£ÿµ§£¡©94[CæÁ´ßyÈŒ–®î½¼óô½ø¥¼¦xŽj‚0¨ ·z› ž{ëNfÎg=Å>+írx@Û?à蚃)C}ÐA \tCù­©£š×¥>Ù3ªrú¯µ»š©#ÃÊãÅ«Šz†ãèW•a£DgÒïÍþ-»—;o!*wWf>åˆ PŸ,RïÚ0TlÉE™\FºòÎÛšZа¨É(\%—:/uùÓ"çûÑÌÃÉ@gtà/g0Ï/f{¹|ç˜l"ɇ~§E?DišÝóªítkŒfeé%š~áu7ºAñfMH4.°J<ú£bòOÄj_w¹_óv¡m(?X«6ÃÉWfk]Ú£¦…,ëpš)¹%¯ëjXúf`Éß‹ey¦c[NÇf›+v• ð»àÐò–¢by„æ.5m½®îèälÉÌW'r*GÛj¦ê–ÚXN+@š•.«Ï¡ ¥œà“Y;g€;[…yËñ&ÿw¡LæØúUIö´ºïÉ'3 «°{ŸIû‰næÚdL0!YÊœ*QŽºùQÈ YGeH«©KY™@>5Ýzs­Çakm%$!!«õÔF+ƒ7.\‹Ê/û °-ÚT Æqun¶jN÷˜Ãú“ÒiÈ`–'þ¿XÞi‘&ï´F‹¯‰©•lñ·VjËÒÓïmW/äc’)VR•²„ßÓšÈær3Ì·ò7ár¹¦› 'á%¡ãC]¬ÑzÃ5ÏÖ*[-þ]sÁÙöïjN|”²E³Û¾jABN±Od”§¦™Í­ "žûT!. Ì…¤a•ÝmºIÒOz¯tk8Îë­…'w®óÖì‹TÈa3™â4#&\gñöÃ>HÕ}ò©8‡I1¤î]¼¯Gó>¾Ho\%ò’lq º .E%©°dùWï'Ú"Ù€j ì³/«v©ÇÎ;úy®‘jš=S ÙEͺÕ‚¶XÍÑ”½¯Ñhµ»†¢ZŒüàL]BŠû²ô[Èá´‚GîxÿvkCÊþ#XƒkÇhVÍ¤Æ õÑzŠ6rDÛ‰•¥v†›Šjð¢:WÕWŽ¿“M€“Éå]íÐÏ'^§>…4&ð,(±6–Îq嫾úT”?6˜í²W¸S}Ùüˆä|'ÁPðv‰¬Nc5'¹¢æÙâ Þ;÷65Óð0 ¼ ‚šèó»,ñird¶OPÞ[ªPKæ5!5 »kK¶_.TÀêKÐÉÃÌÁgg?ãXªHÁª2nå¸x<…|¡gû#ð,Ë.@,MEÀëìð©ã#˜ã0¡.ºêtäX™e¿N±ÓÚGM\Jž\°”†R´$é­¬/Pm4BTõÑ:.j%éÀŽ0"úßÊüCΞv†RöèEJôà«.Nð½eOÐÊ5@\vXáŠq€ÏÏaëÚÙ·¨Îò[`ï¾M' èŠÛ<ÁfmYóÍ…¬þ±ÕÁ–M¢AGf{qn[ªh,9RHú™.-‡=Kclr ÅC†ÀŠáEaY$EèÞÛHœû»­µ½gõ3ÎrÆ›£9uŸ¤öTK€ãhø\‹^íUMÄöZz ”Gœ*˜9=$ÿÐXò§#²lâP­u¯—é$8½Ð´üÖ6ß!êP<÷uƒ¸2¶†Záz¬‘nˇ}*—¢ŒŸSÄÂܳ&¥ôh(D>ÀÏú[èy¨¡1M9öª¥ Y3RWc§amK4¶žHÝ-µX€2s”9 ­°Ö‹®!.â,È7q”6tEý f;9ˆÅb>;‰’¨Œ¢Þ'*eiZ­ìów3¤ªnÑïûˆ‡)_“ÇT±©ê² #Üvµªeˆ‘^ýJÓ!"‹¹+J#a½-’cˆ„ˆ“ðPƒ=C“ž¶§É% i;ZÝw>à±o”X:t¤» i³Œ9*$¤i¥Õ!êç(• |ÛÑ›õ"O5$˜ßC?‚““Š“Sáü¶À—¼QÉÀ³ik÷i§‘4 ¨{/[ Òæ›±@—–$€q}uË»Ö^臀AŒÛ1>%«‡x>ì±9=¯õ-džŠ—©~·ŹìDp§Úâã¾=øÑ„ª°Éƒ´s6“G7B¸e³¤gFpì~“k!M›Ô-䥓 üÄ¥K>»ÙO{Õ1Ëõè£T]¯½m³oz¸ÑP”`ÉXÔå¦Þ‡¢·î£xVÓºÒ~呃]ê.Ñ›íÛÉ·°GÉÍTË50Íûä” IÝ?kbø’«=d?Då Ç÷×xíM»{ízÍÖìW‘&¤ÝôI ¼-ª{ÄÝÙ!e´F+iô4j àB¾öûñC¥Béž§8™<ôZÓ<Ò1>_=#ܳê(ì®\AûNåÔ€U”IZÚk?Ù{ t|jwÑKÃ(M§Jd¶]Jjß-í Æps·|Üï±<ÁY‹wáäºZíU²kMQ›:î,5Û ”:îVúâÇòYª ê¦zð´v ¯¯‡´(¢¯,ÐJɪ–wPKŸõ jH^9ìá냆jwÿ¡fpë)ôláT¶‹gjâÓ²ê $8‹€VEÂîâµËö䎙:Á¼áš»ÁÌ*€¦\rïÅ+íÀh„8zwñ¬9ëRÊQÄó‡~µÙ¦‡@È–”yÁg@† #ê)iÆcݪ3|­i¹×¶¸ü£:ψü¶Ã‘ÛuÉfвűîԿϽ_Ü«¶lð%hƒ¤ên¹K7΋¢^¶±¤ ºÊ%$OÚ0Û Ë|v1‹%¥ —ˆgÈÐb׿âÖVkƒ>†le¥„¥¹:Àè]@Q¸ÃMŰ oæž%*(êÇ’úM¨0°Ü»‹Åqk)Ý,‰²œ8Rà-žkXÁõv޲Ób öÍVµ²þþó°IYk07ïQ6œ|éºq³å£]/ÚöYŠ’ÿC‹Ïtö!`×áô`”Ešäàç=º!‚¡K¶cPa鋉u?†È9ôNßAôjŸ=,A4kã¡Ò™Õ6Á‹ox:»ì1Ù>œB²5\±=wqn ÏPQVfÏz†[Ì>ˆ)çZ‹—S3¼;xè²LÊ„f¼'P‚ÎèÇ΃’RÂM@&Þ(ã™ì²€Q™!ïó÷¢zêhJ=ÉUG€JW;zLë÷vˆÉ³ëÇÝ’ßÞz]’2V‘4àʨ>¶;ibÇo€oäbê©êE»GH'Õøßòçy­qö;“õÖú5Çý¼9MÕû]ÂÀ(gìªyÎà;ð±s !<µÀ\—?˜ßûkX£;ë]&úÐÜcâ„twá×è²ælbÆ:pX¯¸ö 7O°mýè€:q§pÁª¥%ÅgNi­/¡UOTx ©A®báï=Ö³4R§õT¦Þ æQú‡y¹;‘AÈ¡¿ˆÛ62Ö*™=èŒFñûd³ß'ùçˆdÑð'úkÒ.±ü†u]C硇y—Îø;˜þÕ©y¹5–æÃØ«.;þ]Êñv2QÑ|âð3ÏÃ߈1PöâáräO—ÿsÕ¡' endstream endobj 131 0 obj 3389 endobj 133 0 obj <> stream xœ­ÉŠä6ô^_ás +zïi3»Êä6ICCNÙ d™Ëü~žvÉ.»ÛÌÐàvIzû.‹+t_.ÿu¢ü¦zuÅÎJ¸Úîó—_¾ëþ {ü÷ù¯ËôzAWÓ#»×ß»ïè»×??Þ^à&HH¡¼ í÷jý«^ÔMôƒ½‰Ñ/Lþy÷ÏqÐ7ñ~}ýñ2¿^>¬¨’@ænKÁãôôÜ…X"3À n@%ïQ檞‘Y~ÕAiÖ›aíEØ (Xxƒy€›ù•ü++j]ß3¢gèG ‡ƒ—Ozñqï~³îý5ªö{ÊoÝå†u¾R…7gÐæÃ‘CgeˆƒŽ/zOÀ»3©3‡Ñeßò~4ŠGÀÏd%½à—'§h\‡cΛ ®H/ZQ“’‘ °gh‡œFñ µÌ{'ãŽ3¤ã‹t'˜N8¥ý D!‚êñ–üox!eœÍˆ+Õ:¦ITP²‡øhÙCbm‹¤„£r ¨ÄN2?ã%q}Þ( ÏJ|Φ@ÅòŒv¤$xTÞÆbLþÈÑtO,EË¿ÀTå‚ÚB¸Ïaƒü0°¸dS%Ó4 `–ý'F:N´ºö8á¼6¼þý48± @ %~"€{ƒ–&®a^ÃqqàD'â3œ€óœÅqÄ é”ƒÞÉMHÜez3S^˜ª©ÞgÑ»¿Cú\tÎÐ/‰>L_A_è“~Q²5ÆB“õ=‰IXòwväÚŠžò„ `‡¶>Aݘs–¯2õû)y5ž³uÐP<#¥4çì[dÿrQ4’¥î¬kt>Öü~‡Ÿ)¢“¶.Yvb[kûL;ÄÜ{(ƒ=iç)›”[Rf9ewA'í^98á’ëé)?¨2NçÄœLÞ‹ã…9y°ÏÛã~žò€ sà¤÷¯£þMÙUÎ*€cʠߤ-å9ÛW‰62MìÙâ¬{ŽEd›ÍÊq$ønDB.é¥í}”®•Šû¼´”ù"´WSìT ¨Ð]µ½‰ng׀Ǝ¦j~B庞u¯›úOŠ=êºÕ Ýœä! Ò%Ån*¢^wEWÅM”.*§Nú¬57Ï|üç'>N7½ûcõjïþ´;6»>;÷ÜšÃ@âÂÓ ÆrG>U†Ïtñß>][èKÃâO?\D÷<¹}êЯþÇ?ÝÏÏíK®zÝmêµ…n'Úㆿ²Ž€É+Òùh²~XƒÎ•ù+oâc"q®Ó„:xÛ4ù~îM¼…×4ËìFröG!þ÷K“dxÛì;v«4‡<É\‚« 0IñSß6<5myœýy` sK£X%jÒ(E®Žû˜cN ÓÍ%>« JÚ1É@¨+>ÍÊqôŒ£Ea¾.NR¯Ñ|DI¯¸MSV±Üø„Ì*w4Âñ¤¬š4œf+K¥üHÕ9¢Éxªí¹Îqäm‘J]©ÈÔ˜ü7ýí&§&²ÃK`d’E:Å`Ë» o8QÒebQŒÚÀÅ‚jò¨ ¶¨Ÿáuº©29dñ±?}ƒíÙëŸÉmX_pùzAÉb¸9ÉË͆ÊKKðêG vƒ’AŠnò%XÁÔ oÓʘèN‹%Ù×L¬+ª„g¦¹4À&Û¿NS©KOk]ßz@òz]n‡Šôc¾·¨¼€‚Vq÷-¸ —õõ%IåñuZI–²\þ7ÍäÊ( S,-o\$¸Btª‘¬¾ýøŽ\òà7àëGHÔ'/*€oÕØ£ÊEÿ<€¯hn½ç!:„­çÑcÕǵ>µŠK³#t.í`†šj©ßÃx£šé¬šM¹YçÕÚóóIè·B†(¡*lª6&6MäêZºgIcLF{·˜Ú²·Uj*W¡ '(®P—%äeˆIº_§éÄÐÕŽÊá.Õ”Ê{\Hµâ¢dsSdHúh¬7eí¡éëWŽrŠMQu æ0…NJ³95W¦·©\!¢U¾°më<”¿š¨UÀ9Õ6óH@Í îzkÜy šÓ¬”«’-<»ˆAßVbóžÿÔBÊÓ‹6ŽÜŒsµŠ…1·®S©¾ÄNÚÛeSåÒ·†gþ쬎e/ŽZ²H¹o_?µ€ÝÞLeìa–ôNb38s¥yžTÐhÿ¥nÓq»ÏI^Y;> stream xœÅK‹3Gîî_ásÀÞ*Õ£»ÁlO÷aoBnÙlÉÂæ²UR=TUýð|€§Ë%©ô–JmuÕçÿþ{Vg…OnrW8V_ÇóŸÿ:ýðÝù?'u”žü¹ýÿç¿OÎ_‡³ñæüÇÉ™ñêéù÷s|¶ÓÕ†U ‚úõôËw'±™i$P^‡¼$ÄjÁp'A‡¶3Ì+”,¡V †“th;ÓIÀ¼Rá3¡V †“th;ÓIÀ´‚É%Dñ˜` ÀOið*Ó°p-Tªà ^x;ÓIÀ¼‚ñ:eÔjÁp’mg: ˜WÚ]MF­ 'éÐv¦“€y¥4B$ÔjÁp‚Žö lΫDG£‡d3× †“th;ÓIÀ¼BÉf® 'éÐv¦“€y…ña œ€à½#Q½ (¢@¡ŒžÏÏh‹ÛÃ`ÏŸ?Ÿÿ±h„<þòãMi÷‹¾)£¬rw¸)OË!<ŽôèîwSÓ}¼©}ñ¤Ï}>îþ¦>î?}þó4ž¾oN5 ÐýúSAM:/|€RKäbÖúînÚˆ“\Þ:Ä è›+‡Ø, >úð±AU7žð¨Ú†Ä"#CBâ§žˉWâŸõ0³n‚>Á¶ zc¢7g;mq3ØÀС6Ú@œ`Ñ1€™ˆÇÓELj{Ó#ËéVÅœï—!AF€øé#x“·¿Ï·HT› &í°ÁÆ|D/ÃO­ô”Il1‡ÌÙýãðÌ38ˆ BL&8ðKÀªf•`*íÁ!ïz% ?wÒ¢~#‹oɤ}F'¶+PLdÎö\ÁOæÚÅûÌÎh^ȯµÅ#‘“)%«ÅD7†ÌÙÉ!{ÏF”ÌÛK®îƒ5¡a3e¡]ùVõ3TIROp½¹úJè÷-é0—ÁÖYÏþ$½R‡OŽÇ™ƒa½¢xHÁÀØËHq…½Yõ"àAßsjò´’6’II 1¦;ì+Ÿ­æ,fÝ&A=ß±Ú ¢}ݧ))ý•BåRUÉ¡¯†hÒ2O¡u¡Öˆv’ *â »º²xýÈ%gu–£À£>e|ÚG#¸ªt2©õšVGF½£Ü­Ëýo !)}'¼¨`›DäàÙ/Pál>ù+Št+jþ¦­}|é»éò&ž2·U¯]×÷Žò×õ§â¢Ü îŒ IÿÀ50õd©Bgý‡"œ TÓa(‰·9.m!‚Uؼ•LÆ cuÍàœ{"CŸR=¡*$L¥–Zk“l`[«!$LeUâÊ\n11ž"o¹q@´` ÍÔÔŽd‰]oPáòÜä¹qìÌ­^Jw ¶¼=f_|² -td-Aªx|/=ˆ8ÍU+øäJ›e’íÍAô¹ðf×Ô•åè[Eœïº«ÈÀÝ•™‚댢ênÑŒ:,2…ÄnçŒ&‘\¯%"†Ã(6°f¾/¢lÞ.QùO.B÷™¦çr¶f/S‘xÓ¡$Á …ä²Âùꅨ蓓—é$ñ¥Ì&w:p?vmF5nˆzÝæòñ7\A$7+è6Š Ôu¤ wUò&‘ÇVÛN• p“µO =‹i7sJpǘ£µãùPú)á*Bœ*U8YÔ»\3WÌøÎ¾§Cz“ùN¸if2µ!¢îZ^ðFlj5͆^ö]o0®KJ‹’bsUõ-«¿]\d+¯mßÔÒbfÜ¡[k×U³£y–Þ LcR)•,۵’î+±#ÜTl´­yüÜ‹7‘˜»M×\Éòh'`Zoæ-Aa²x•‚*–or÷ÏßÖQ&tŒUÝ,vH¼^*aãgu1zUÉ?‹ÒÝDå5¨Êð«÷ýdn@°yÓ=º¥î{—|—4Fì]k˜|u&?X ‹yDwÔ’ÓhÆ ººû*_¿%dŸlÌH“ÿÜØïð¾ºÂË‹¦jY{c˜Áô#7ÒÐÉÕ*Èû®‚üÓ×ú Â宼·Ì¾™Wš»ÔJ£[GËmËJ‡*…IVÈcèÔb¦!OÀW®¸âïÙMs½eˆ­³ÝûãK/.šÌûˆj+ˆíЬš=›‰vžhÂ[EgÞI=e ^lLѶçå,–ígïÕ§5̯緣„m:b%ź&ÃJ/H*Ï—:ˆ¿œ¬še)æ&ß6ýÞÕ1|}Pu¼‚ÙèxàI‚F&Ø ¹¥)±”µ3r‚j“”« Ìm‚Iùö»·4tTÒååè4‘jà•^"JvËFwF¦þ”é]Z±Zœ`å¶Df¸€c²ˆDNDUC9Çsün8ì¶÷Í©U_t7"ü„F¯ßÌ û÷Vƒ²‘ª/›ªÁ†ð гL:i…:¬h¶¥᪱‰ƒðv´Oû_z·”Ž0‹ªÞvýýæÛ•j|RGl)o;¯§P9™R’³©5}¨§ZèZf½IÕÞ MVp±t ×ÖæÖXô<ƒþ£-žŠ²záÉ#þy“VvÆ@{à7O¤þÔ½`ï°0”]6Îbñ ÷Ñ_¯ÇEæ¼ræ¥AM˜†PT=ÛGzt±ò=Ìø#6?Ôd‡às||ø l*Œ> »f¢(Öd²guA~!j8k+wê¡›Ã}“o:•îí#vkôæTŒÝöæ|œaò&ír纾 5³â‹w9ÐfÚKHl|3¢‘ÑüFÁb—Mê—ä—TÐØ!SâFC#§>¤úà˜âw¸†üêl‹¡Pq˜ ùG ‘…ð†{FxWTg‚?b’!*¸ƒ0*†ÒVõ<ýò:¬¾ÝþŒFþ ¢Ê?t2ZþðióWS ð{#ºôïÏÿÂÏâ endstream endobj 137 0 obj 2319 endobj 139 0 obj <> stream xœíZI+·¾ëWôÙ€²¸5¡i¦uÈÍÀ9¾Ù/Aàˆ/ùû)·b7Ù=ó|ñÁ@Ó keñ«E79ýïòßIL¯Œ77˜f-oóôÛ/—¿ý0ýç"n^Ho§íÿßþqqúæ&'®þ÷ŨùfÓݯS¼³^ ¿_'ZØÜ¤u—^¾ýpa¯3Ÿ¼8Ý9‹Ÿ™Os×E>ðÚ4ú˜F¸ÒÂæÆp}è‰róM>ñ.óQ6ÈN¤íM\Çø€ò…K¸Î<ÌMg²ö†VUDá®3)l%johã€/MåAw™ .˜3¿Î«ˆ þá¦??. i ž>~žþò’(oúøö÷»–«¼ %´0 Ü…¥[.gº4ËÕÜ…_æ»xЃ'}¾Ñçc±wñ¾üôñ×Ëúqùq#U ÀÝKI‰·‚Ñø,߈ý8 S¶+i(G«‘)Äîø€ÎÁ×ä8hÏk@¢ï¹‘æÐž]ÜÕYäø/»ºžìêžä|W+ÍWvµ#édW{rÎwõ+râ®í9ÜÕ/ÈI»:´gH§u_Ž´ B «ÍÍoqâ= 2¥Äú€€+%i"dz`ZŠ &æ…´"gÊ9H 6&|aÛláAd'ä+r‰°´&’GH3$Ÿž'q$ÆUÉ‘&%'i(9%Añ½+d1‘&W[Æ=]ò¬æáÕB¨ 6 ÍDE_ÍUþ.çêTÅ_µ§—ÚmVw.ÊT+´*+I×GÖ•½ˆ¬!}Úbfá…YŠFBduBÚa 9¾hTWI±@Åõ¨PõHI…x¾Rɨá9Ÿäý‘”1`Qcõ Ã:… Œ(ü׬$ˆ*Cmü™÷5¨ŸŸ5Á˃fC›,+Ñ9ÌŽ1 $`½×†AõìÞ­Ò’ ©wžŠ¹ ”¦†Ju´M°åÄ-WÒ–xEÊXì=KØÏY:SÕš°á©\Rd%gØDmV^ë¦(íØôAƒ[lO4K–­ j-…cß$ôÒúnjLÊÖ’ñ¾m±ñsΰu‹ô× XL[°PtâCM²QÄ3*…ÙÂÆrõ¾¾KØÜ<Ô¯¥Êx„ÁXêq E’TïîŠ;ÃÓn›íÌXÃЙ¯>Á8ÙØî+’±Á8,€)D…Ù¬{vXTðîØm©YZ ¤ŽéihT½ÄÄ,Í*k\—÷¸“d#Æš=®0¿½ñ5ŠÏ‚ð ý“;ëŸzÌÎû' ÿjã¥J½>¢PÍ½Ž¬^æ‰Q¿¿ËÁâVMz_x«ù ¸µØ¬ë}é-Œp2TjOìÖ_âM‰a9)Ñ‹©èüI™rX"ª‘Ll*ý°ú'Gkã‘x3›ð½‚0•й.\ã€Åòbñ¨ÂÃw´<¾£Ùæz\ø 0æé„)žðÎm«‘µgÇEë0½Ûxë"ÛÅ€uú¢’ÔXkkB.½kÇ´+¨fbÁíØoŠðÄôDgŠËÏqvÄ{Ì>sÄåº;â2ø-èµÌ3ä3A0ð:Œ‚ªzQâš#ëÕlw!ú}h l˜8¶Ýñó Íw¢AGê |Fæ1tež£R»9e D:® Ê9`5ØšK´ McYO Urì(Ç*3ò²ù=ðÂ=çæ¬†`m( ‡¦Éš°Â3œ—y”fÈT¤ÊuR™’>™ÊNÒ—Ò˜–[¼V¹zw±è)5YÑ'·¬mÇÈ‹ôáxe•â¾#èâ.@µO”!C­LöòÀ¥²°“:º'5x1×tÉpÖÑ»%÷3QWWÒÍL"mfm»ãSÕÖÖÒP6ÄWpU ±kþ蹬Ë=ÇY.@óNrAÙgrAZS§åῬcpk?ÐÎ2è¶)c¸1<½I)ãql®v»°ü>ðð@|œ@¡ðˆÚꮼ1è‡4±—†¥ŒxC9žG°-½Î)ýÏißW¦}Ò™œ&Ù7s ÔÑ‹â}h)v!ŽF”¨€1Œê²Øwª´[ÈÒkÎIr`ü¾Ô”AGOd¥x#ÏÁžÛýÚëЙf¯™­Ó˜´ÍT¯jȇ3¥ùÞ¼tÌ >{…Ž¿ÊIöèOu`Hé6„'$w2A&wþ-x«>˃ÆÃø°r_z~ÅûíµNiö¢‰àý¶hlüK,t&^tÄCŠqíÇ7'ו¬ú 2®I9ø’–íá..O}=S˜M£™÷ªÖ–œLëº>ãxÓŒª,ÓŽ Igï8@0=m‘—Çl WÖúf@ƒìáÔoEöeý¾3 œ ŽLýNð”q&؈ÛTM–8&û òáÃ}žGÔæGMQLÍÁŠógS 5Í$3¦²LutÞì'Ìûrä½·9ƒ“•MŽ[’µ[E}ç(*Åv÷•gÈûV¢Ô?)§îؘ&¼JÄÙp5Ze®´›Þ‰¼J •nÉt’7Í_ ÷PÛYúؾðdÏðW0‡‰[‡P”Ÿå¨æg:Ãßø r¢bíÞÓÿ½áEð endstream endobj 140 0 obj 2150 endobj 142 0 obj <> stream xœÍYK«+7 ÞçWÌúBR[~! $9™EwtQºkoKi ½›þýÊ’í‘畹í¥ô’ñØ’¬×'ÙG]t÷×éÏNu Ÿ\tèz«/}÷ù§Ówº?Nê•޾›ÿ~þùWûÞ^L÷ûÉ™þâóè·.‚ºñÂfÀëN¿œ>}`>Îõ(µðáQáãlÚW&m¼Nð±Î EáãÂÇZUåc^#xØdʃF•ø‹­¤Í€×ɽഛøÐ¨òÑ@òÂfÀëc¢° ƒ««9Ú¯|@K_ñ¨ð%ÜÓ´ð… ~Ðý÷÷Sš ]¶{ÿ±ûfÔ†îýÓ÷W¥ g}UFYå¸*OÃ{ztÃÙ]Uú«ºÑ‹;}?èû6ø«z~xÿöô|?}œI5 ÐÐK© ‰'ÉK_¨Å˜wñÔzpWm„$—o q½°"ÄVMðѧ¯ Σùz60 ×iË,"9`ä_ÔÇ'N½2[¼´2i7+Ì *m’±‘~$»…ጸéH_Çf aé.2Ɇlƒß÷L”VøÁ"åñãç$ ÝkÒ‹=Õ=F›YÏÜÀ³ýQ2×[·8!ƒÐ‘"8Yæt…€»~ÿuÝV­$hb¦QNêŽQ9ª‡Q[‚ƯHÝ–úƒ2õ°fK¦Šé³AǦF4›e`dÛ’™19æ!ÍpV<ñCk’wÇ)+ˆÅ9…ŒK¡d„Ó3V[7È+ k}i¥¨eó (ºßQÞ†ˆ™½¦¼¥m‚B^f³å³qÍrWk·ÒZ©uÔɆªÚ—à2“^5Ek7z]‹IÊzÔ×.€Ò³dx¨³"Æjòú)w`P¹Í”Œ0c1«¦©JÔ0P¥ûOülaw¿SªÓó¾J¿Ðfß§dcÁs®^ šj!SÀVV¨Ô‡@ÇŒTafY˜ºŸªûÔηø"a<‚r^—Ú²VÚnì°ãñwš/í› ç7—( 6®6yg8î~zôb.- ¼ŠÀ|e¼M.3¼W^fK{›ÂÄöhúEO`­)­žì à©a˜Ì¨%žB@Ev uº€X’zýLÄ›R)`Œïöx&¼êñÖ˜êñú̢ǣwØ"›«‰ ªgZCÑ¡s:3¬DåÈÊzÿ\jì"KþQÿg Îû?}{Ñÿ šx*]‘úâTzDæþ©tUæëS)`e›÷«ÛçR +ç¼ ©ïGàEðÒýu~€M"VDÌdÂ8 ÐXßã­ìWX”Ç(Ú‰¡Y¬Ü5õµÒ¦fÉMA´8÷ž\ÓõŠÈZCÏ €Ú^tá›ÿ»c+¿hLþïÇV°‡¯ÛÌý¤­1;iÚ©EË–Ö4N;×Ë6º|ëU:?ËG[š±Ó<_À1Ï®¤·÷âŠð]£À׺ˆµ¼ž2/ OÐTøñXœ¬m¨#˯IÛ”e#7ödmAœî]Kù%§Ã\¼ÉžË/ótv´ž]ª­àö—¢åÄd‘}´n©ùZ{Àßh}g 9¿DƒÕ‹Ã 4gP€¶ ÙÏlÄõÅ%Úæå‡ˆ{Ä ¿£TQ×°÷×|ñ_ßòqtñ²à¤ÈR÷MÂ>¦[Ï%áô¿)Óü¯jó]€1×–Jø±û4[^Œ endstream endobj 143 0 obj 1724 endobj 145 0 obj <> stream xœ­YÉŽ#7 ½û+ê<@;©¥ÊvùÛ ää–™Á$@æ’ßEj«ÕãîÎÕµˆ—ÇE´:êî¿Ã¿êÝÙ`ÐõFûîû—Ã/Ÿºê”®›ÿýþÇÁ›£ï¼õGìþ>Xì.=}ëÒ“AZñ­“…“YwøóðõÓ¡|î+~*|0J—I'²Nø éÁötÍ|ä)ócèú­“…“Y'|ØôT¼¼@óFÞt¯¿w?Ýu§¡{ýúëIiç}R¨Œ²g8)Ç>Þö|kÏ/ö¤Â¹?©_\øzåëpv'u;ÿöúóa|=|žíŠ HËå® ™'ï/ Ô=I1j}¶'ÍN6-ÞÚ„¼`×61Eºuñ²ÁœÐ“¢3™…'íIí׿ÖHÈÞ«$ HÐu­‰œJ07þu9dmöBDM4{ÂÜr zx0`>{þ˜ü ÁÜ ÃZä®Ç˜%Þ%-Ÿ!Hí%ÜGž" ·xD¨RÍšþölΪÆVi8s3X:²V´ ½Né­=x;–ä)èvj2§ið²ˆɲsi¿³Í’¯öÏmhq‘-Ö-žu&·â\'±Oßœˆ¨gfÛ0jÖkŒVy˜T#2 J'·Ög+ývmÐY€™ÀV±cVSM&}½T¼ÚKO ÛñÔµ-e ¶ØZŽxtNõ‘àq+&˜ Ú½âbßYut±å,1@ [EýŽûؘ+.-ß“™óQ†_%J»œtpà¿ ª,N‰z›ò0짇¼OdU‚Û5V6y’!;ÚöSIH`˦ãÔ{Ç[åñA£Ý¢ÉhŒD"rS²2D™Žêkr=È•tÜ܃‹R“T¼”°JjÜ ÐyÀ­a*8ƒéÄ9‰Mññ˜Ð»œ¹m§Lcðdîòý¥0½à@±ÁMkMõg’&ÈZéØ{º8Šq5Dè`Ä™ã0pr‹qš%±Ì©¹¯Áh[FfgÊ,Š9·˜Jà@Ðlò·Ä®ÙíPe%LŸmTBØÈ:Šô†fk4Šjs«é¼°²ëöž¾ÿÁ=·Z0¸µ'žÃæÄZL½Ò:½m´:6¥g:…©1›"AòÇ Ô¦O~Õ“„œP~yp©@—,s¡,ÃØ(¢Æ7±’ù„wÍ_™_8rY]7֚ݖÃÒ½¦äÓy«<-‹×Vv‡ºÝ£ì¡ƒY™ä˶t¦!uÛ…åY^ªÁ.Í<}[ŸqZø¯Mk5Ía£\bº)3xÇ?:.K±’<·IØ Âú»N~'Ûü‘mC`ù*áçî¸5E= endstream endobj 146 0 obj 1690 endobj 148 0 obj <> stream xœµYK‹ä6¾Ï¯ès ;RéaC?ìCn 9„Üò€ÙKþ~$U©T’e÷̲a¡×#Û¥z|ªúª¬.úôïÛ?'uRáÊMî§ÑêËxúúûÛÏ?œþÆ{áß×?ßîïo íe8 ƒ=½ÿvúqÕ' §÷?~¹*­`>ë«2Ê*7ÃUùôç/Çtéæ³»ªi¯ê–îé÷‘~o³¿ªçüëûOoËûÛ—fW£ h·Ýt’™ö‹? ÔJZ,ZÏîªØÉÑÃ{›¸áâz›X¶$\úø³#Áùà·ôeBpÒŠ€«^f}µŠ/ ÄËà¨qÓt±]qÁ*›Ì ‚2Í\õ=.€J ÉåZ…]TÔ¹x ¼2ÅU?翃ï-=ná[xëqhªŸÌÅl€0Û‰B²`4‚TІCø÷Žh­T¡mÈNA&ʺ ȃž¨°I¿ u2½»M0aê˜Å¿ÿÕ}Ã7Š£ Áø0G\oÁš[w5¸°Òä#½5ðä8‚pzÐà#Ö&+ñqUÜKGðFë«tÿR$ÂC¼¹¯:¯nâ‚Åê˜gI;a3‡òìpÍ9 |ô×-©dؘ–ðm¶^N€Y#BI¶YHD5×EZÙù^„™©ì¼ éî~­ïÌ*m.R °C’àÁy-ðª`§5ùuL³72}’ p^–kSÇóZHéËdâiÆÉ¨ˆ=ª2²+÷ø[„¡!`ö溂(È)Á' ›DÜÎFIdû+WÝrÎ"@rƒ·Æ‡,SÓ\™[rXÄÓ¾K‘¢J}ã*÷*Æ-bà… ™²AÁCµÌiB>œÿ@kõS¥¬É´ ÂA&xÖ{-z ê ëLG«YÀCêÆÿ“‚§pj#‰§ƒ»=µEŽ¥+q>ÄŠ·ne¼’U‡zË2dA‘TÔº‚骈š†¯í’&¦ßl UhËqgÎS7.Ïò¬IVåÛ &A£NŽû(Ä‚B¥å”ü“”Ûìj¢„¿­?vý YíMþh5jÕñ-{)DX¿¨!q´œ/é’ö—Ðâ¤eÃŒYé݆aoÀ&(7YµÝ s^•D}Ъ–Q÷C€^Cä>Õ™ØþöT¥èa.Í ²tYùúE¡ÒÐ)K>w¢/áû¾œß¦ˆWØœSÙn,ljbíH¯ÈváÈ ÐÀ”³—ý‰s:W•6ìø‡šR3ôVÚ¬Áêè­¼rvžŸúŒ#Âã™,FBÌ©¬µ(¬F7 ‚ÝØ”M‚´1Ô‡…›Ne÷8/’ÁâKÄÓ7±½,ÆY‰ÔÈHØY½;w@¨éíXRdVt­Y lhÑ©I#;:Kë'R¥$M›Î)sC'6M9ÒËj°»$.ÁdµÓiª2 –¤dáCH[ÞÛÍ7nÚPíŠøˆ2!Ù ¨6U?ŸKÌ«:bÆ)'þÃ<ð¸ì[ 2¢B”#© B.…ÿ1TôÇ|¹w§\¦wó¸ôÅ÷ XIcX°V@ìiÒlƒ\ :éCÍG1â£wAÚádnÁØð‚jWب…Hðý1(C,¦‘!>0V}þAm;š;wEð&?ún8[5MÍõtäv’%bè 4eô 0ìÚ¡½®%WÄ0TìªÓ錕"ä&L– BYÓÓP¨9hÅ‹-÷SÀbÓd9Ï ÊðHî\*J’•õ9èh )™IH²e±*x2¢þ ò×^YPr;ÖÝ:OTéCä…ßMõÉŒ™ÏhÕ7•üó*Îè)—æ¦âÕa -J;JêçÒþüsÓ–÷ÀZh]zLÛðöp쪆÷Sz–ÙIÊ,¯úVÄã?|Êî]ÚŸRbn¡x,³öëv¯—Šï®eÖ)¿Ô,2·–ï?ß–!´Dñ“ófxmÒ'L³›ê`Œ_„:/–yŠ©> ï~UÞQpž åÅ/§ÿð6°w endstream endobj 149 0 obj 1834 endobj 151 0 obj <> stream xœ¥ZK«,7Þ÷¯¨uàt,¹\¶¡ièWÁÌ.p`CV™¹ !7áf3dɹ^ç„P—ºVIþ,–rs†á§oƒ •\tgÂç0üùßÓ¿¾~?™s4§aùÿŸ?ŸÜtöƒó0|=9ΗrÙùó˜$6ê¶úåô廓RVŒb*ÒhÉ—R±Äî¤pX]qбHÖPÏJÕN;ÃêŠSŒE‚‰Þ¥j'ˆÆauÅ)Æ"[+ªb¶Q¤¬bÈå1ÄFh'ˆUCeÁ¨¦"y×í±S½uÅ)Æ"MØí±Ó8¬®8ÅX¤14B{Aì4«+N1ɺZQ³Â eEC)#(v;­++F1ÉxEh'ˆî «+N1fÉÆ±Ú ÙNሺàTc‘‚i„ö‚ØiVWœb,ÒäkEUÌ6 ƒ”A ¥ìl#´ØJ!°²bS‘ll„ö‚ØéÞ°ºâc‘pRìv‚ØiVWœb, "´ÄNã°ºâc–0ÆRQ‹MÃHÊ‚ ¥\#´ØJ!°²bS‘<4B{AìToD]qбH.4B{Aì4«+N1i¡½ v‡Õ§‹d¡VTÅl£0lÛÕ²¡”Amd½`û]M”ô®†Fmd½Ë]MÔÇè] ¢)U±Ø0oíôÐv}?!Œdàý8¼ÿgø~†pxÿò×7¸kFã®x1‹>ÝõÍ]L¼†‹¹ñ‡;¿ü¾]§‹y^|ÿçéõ~úaѪ5H‡‹u«ŒÉí¥3g/^Ww«ZrÙx¯:¸­FÆÚ*N鵃@ä…ÁÛ‘Þ  a CL{ý^Eê\¨Ä‹Œ©¯7þкÍ™ñxegߨ,‘Ü8$ÿ!¤ïYËHwÒb³¯0pƒû•’ð Lx&y,LòÈòP;c óâFž×#>b: ­в¯©CÉ[ðF:×Ép¯\r8E“aÒ9}¸*… fËG=™ œa6±»sÆpÉk)ÀAFìÆœY¢5ä }å€”Š–Ü ­þÇëÔ‡+O Ñy*R@¤`-æi7çY”úSKe¤f–'/ô¿åØÉ†÷Ô W·â›X׈ßÔµE¿²_8‚4ÃZ|–°mÌÛ{æ$±pq—áa©ØÍݼ>¼Ue”¸÷.ïÑè¹hÅZ¬VQ/AL¬ò07L»n¬z2î±Ïüåï‹´/² —åp+vÖ‹ZïeáÀ-!FÄ 'ÀÌJLt¬Ñ𣯠àºs8Ùù#N}¤ º˜¾­¾ä˪Åaˆ*²U^ÚWÈŸ\ lc³ZÕo*\w½Žx¶”¨¥­‘½Åkó¤¦&3›™‚ωFpôLÄÑû¯ûpÖ–õºƒ›áFó<TºÃtŠ;zS#¬£5vÖâí°Q“¼®QÔˆ5Þs§Õ>îTôéÀíÂeKµ=¯´äÓJ¿S;rZ±¬}ÀQnÏÇç´ˆ?ùm2QžHC&+ÑPú‰ (Ç'¾h¹Áã6'Wf*~ÞÌDáù -Ÿ6~^ÄÝˤÀÅü…¶qFK`M_w·u Ña™j€Ü§†HЭªßaff<ílÉëÇG£ °Í:5O±N£F# O’Vâßå/Ž˜@ó¤ ýˬ[xKÄý uÔÐá”>úb£_MÄ;ùpÃGYõPûãn$2I6Œ›,ž(q~ BSñމ'K0þ¶íhWlcŠ1r&Д¾'N%Ú1èçã2Šéȃt¼„4ÑÜ0{õ'KäÐf](ª³@ÕÞ©‹S¤CðF]=ŽÛ5XV¨ê·'o=Å£Iô~}Ôþ-ËF"ئý‚J„tè †¸èÓæ\Ÿð}X×ö0ÒÖöH±±S׎†baU7­(äyL[$ÍÄä;ÍDÚh¦îr‘{á]‰®ŠFÉŸ€ÁųýDN˜“œ|¨}ÖÔ¥œ”·Ç;gXÚÏQ7lk:óh™§ù’Ÿ%ãÍ·`ëe È{–O·œñ?Ӊܪ1jP[ó©OÞóž¿èì&MŠ«ÎîÏz°—tµd¾ñ)ùâ-§TSãSò%ˆ2´áçrÏ£aqåâk«Æ5o¢ÐÕ kNö®.|”š‚ç¸`g|\cÔP¦\älŠoTŽ®òœ(ÚÖßöUÒ­¹Ë$ëý‚ttR9gNÛ•Ãljy¾ ×îªay‘Úädy}Íðúˆ.4çõ½ã¦tïwk7"*)¶-LÔØçüø–¯æLKeì86r`–œYÇ”ŠÕ”rGs$ªÐQ#¦âL]òhn*…V·67íñÞ…&¤sékx¯‹B¾œME:Øí!éÇÝ5Rj|oO°´n¶ý<vS6׸ƒ²Rfr÷<MÜi·Æ{?9°F1ö·&{ ¸t4Þj@.y)}ß«I„i“Ľ#…D½YÞ=Â}}ibÛú(7DÇ1lçLÇ 6—HÚAB»¬ºví¥–?ž)t£\5ÖûþÊS³ÜeÔU[YPê­çkŒ»ŠŸøO V×y™ùý(¤ Ø¨Ø~9°Ý/ »?Cì8€Ì”ÅVñ‡á›ü–2Ñ¡. c¾6Sñ?F†'Elæqøéëéû|Ú@Ÿ ìÿZ ´ endstream endobj 152 0 obj 2169 endobj 153 0 obj <> stream xœí{PWöÇ·jÿÚÿ¶¶jk«FÃ[‰ˆ/@@|Æg41&ø@ß1*01%Y5š˜ø6jVE• ä-øVT¢¨ÉM~•ýí/¿Íï07é_{»çÒ3Ý=—é>§¾E1gî½}gúô½Ÿîé¾ç×_ÑÐÐÐ~}òó/ËÐx˜›wôÏÿó¿¼?1šÓææ ACCCCÓÕþùóÿÀØÞðÍ¡Ü)÷ϧº¸p”B]{ü3BšÁ ¡‹‹ºPl!t¡¡¡¡Ïº¸¡ ÅBšñ ¡‹‹ºPl!t¡¡¡¡Ïº¸¡ ÅBšñ ¡‹‹ºPl!t¡¡¡¡Ïº¸¡ ÅBšñ ¡‹‹ºPl!tÌ~øù—'(÷êÙ¿~qÏÎ… qÿ°(±`¾sÏ®wÁº¸¡ Åèúñ¿ù–†Ô¿~ù¾«è¢9678¼?"š¼¹a×»`]\äþx@èò,q.¾#¤á{P™Mn;ˆpç¶7=xöo÷ìz ¡‹‹Ü]ž%^ÐÅýƒR]\„ÐeZ!t¡(!t¡ØBè2’º¸¡Ë´òh貜»leBrjhÇp[@@¸Þi³OÔß ,Z¹–úùìýO÷)ßDùo  ¨»ÿ,=kAXx””ýÞ ]ºÆ€Sàq1ÀB—‘„ÐÅE]¦•¡ ”1 ˜½4—Q%cÁRj" ïYrùN@`ü_ÿà'ÙZµ÷ž‚'0(xËcÞÞÞT âK+¶ï·úùS¬V¿õŸ}.”)»Þc‘̉G«.“2Œ WÉ&jšŸ€¶òæ;ï ed¿4#A—~1 <<1ØBè2’º¸¡Ë´26t}¸ëP`Ä+¯;ªòÅ™sð²C‡3fT]ªhúvûÑÓñ}úõô"™I¯/La¯¤¥ÿã«úªÛßV_™»l%´oí*:Ó`ŸIƒCÃÀ“¹hYaÍÕêæÕ5.\±ÆÌ×W¸Ç;mzTIHNÝ}¢¼¢é1ªC7À9tôXöGV¸‰ú–¡bhÇðˆÎQKóòO_¹ëèN'ƒA—~1 $<4ØBè2’º¸¡Ë´26tÁ$¢»õpTebæx9~j¦¸VMó¨".éºÀ IùÓ³€ÿµô øæ¢åðÖâªÌ‚œ<ðÏÏYM^¦n ,¨|n‰ƒ/ÊZa ¼S$û#+Ü„PºÇ ƒA—~1 $<4ØBè2’º¸¡Ë´26tU~ýÅþ£*ñIÉðr÷‰rªâÚOö(„®-ŽQþ}Å•àï•ÿ1þ?|öU¦¨®üI©¯»ÿÌÑD/ö(ß©»çäYvH ºô‹%à¡1ÀB—‘„ÐÅE]¦•±¡ë@i-ˆMìã¨JxdgxYrùUñHÅE…Ðu¬öå/»vüaáðTW™»tëÜ¥«Pë«ÆËÖþ=eðШè __²âA›®òMOÙõvH ºô‹%à¡1ÀB—‘„ÐÅE]¦•±¡kݶ½Pà•´tGU`^ƒ—µ÷žR«nÇžpgMóÊOn±†–á«Õ1’2 Ò«÷bzÄ:*ÆþÈ 7!Ô%·…3d0èÒ/”€‡Æ[]FB!t™VƆ®—Ó&C…¹yŽª„v ‡—0ßQ ª.±'\Áùå%ú Éé+w-¿ß‡Ó%¦;ü_~ãö^?5Ób¿"„p¢þFEÓãÚ»?ÛžÛœpnBÉ×Ed0èÒ/”€‡Æ[]FB!t™V†®m‡O‘Ó|q>ªJ¯ÞIðò@i-U÷ýmûB×Îce”÷‰rðÇ'%Ãÿ†„ÿ÷žª`ïr‰ãó/«ÄNjÒwÔ…›hóëd$èÒ5”€‡Æ[]FBy:t {yœEî1"±,óööŽîÞsèè±›??ª¤|ëèíãc#lî“C'ÛÚW\™–1;6±OXD'ðáœ7.±oÚô,éÍºŽÆ@å-¨”Q¡ ¾¨È¢áÝ9KW0ªŒ? ^N›»H\¦õɵî=BרqoPþI™sÁ?iæ<øÞòUðÿK¯¥QeV~ø1l"kÉo‹GÙ ˜xLÒ7²ø@ù͇ÔFÉrD 7ÁþºÄ2 téJÀCc€-3C—ì¼@÷N:%„..òhè:}¹ð©õ¦Ó¨!K,öa"¾åCIy‹è‘p±êüôÆ´YŒZSç¼)ÝŠšTÊ`ÐðÑþ 3f“;»õŠ«nþ'£Ê¶Cö+!>>o­\w²áfEÓãíGO÷î›ÒoЋâ’Ò §¯Õ Óúø©™‡Ï^ Ë4ÍÉ~‡Ì’äÊÉÙ[BÂ:’Û_R]Ñô-ÀÂÜhÝPÊàaŒ­8Û‚J ºBBÃàË™2{áÎãô6޾ðú–çç¬NJh „iîÕIÓŠêa¦¶Ø€fƒàÜQXš6=«k^0S9fÕÆmTÉâ‹·'̘œ ›ï ‘¶"kÝýgâ2k¶ìì•ü}x}ÊŒ“çoN â“’}|}…µ=’bAРS›P8Ax:t¹-”€ÇÅ[]Ú~Ÿ|…ÐÅEž ]äžÕ)öëçð×ò|f[±GGéÕ{d¬VX¾á÷”¨* ¿ß˜ïÊÖ‚±zKºg[P)†.ý´ÿtåùeÌŠ(–gAÇ0j´)„.AŽb òëïÂá­Ü Qo-_·üð.”áÞÿ„.Nò\è"·?‘G~È g©²%#dÉå;¹6Ä*¾ðµÅžÅŒò÷ˆK°<ÿ|:[Ò­8Û‚J™ºö—T¯ýx·ô©’ïÅQ¯8µïŒ!³A—Ë1`ÔhS]‚1³’¿Ív¼îºà,¬¾âço?D÷Î!tq‘‡BWÕíïlÝcãOÏøD銦o¥…GùÍnÐð—–½µê}x·ÿ‹#(ÿÊ¿B*Ž;þ£ý…Ô¼Jzål *erè"ùS¢»÷Ü´÷ŒÕw¾?|öÂäYóɽÐðý;µïŒ!³A—Ë1`ÔhS]‚Ø1@nÐM8¤¾åÇûï}ûLÜ{.¡‹‹<ºÖlÙÑÀ+× ž%yÀ#{O…ô訽÷ÆØ%«×“_ô¨ÑUöhªi~ò¬·Þ&É®5± 'NdHuø'±_ÿéóCIáá£6·âT *erè*¨ºD²ÀHíi³Øu:çš º\Ž£@›BèÄŽ ¬”ÁÃ,ö‡O~ŸžàT0X;By(t¥ ÚÁË«øÂׂ§äòooï>ýI ˪‚Q«ô´YÞÂ|RòDý¬Å9=âz““ebþ6[úì…_5>nEM *erèj°/92wÙÊØÄ>!aýümÝzÅ {yܶçڬhÔ9×lÐår 5ÚB— 6càäù[A!¡V?ÿ{[­~Á¡aâ «=¡‹‹<ºŽÕ^ 0Œ^õÅ—^£àhÕeÊ/¥&/¯ÖÅQG¼òºìèÊÀ­±¦(\¤´ìz˦½G2ßÌ|"u_èÚMœZ·Íc¶ÍT ¡ EɄЅrJ]‚”€wþŽÂÜñá®pï3%„..òDèÊZ’Ë࢙‹–Så=-•–¯ðY/1-c¶ ÞW\Ý­T}Ê ×z%Û‚J!t¡(!t¡ØBè¤d¯nþgXxƒ¿zÜ"¢R]\äqÐUßòc§¨ÐÙù\‹ªjdË­ºL–Eýø‹"º½óxÔ|!Úå^I[P)„.%„.[]‚” àÓç/†2déÚióÞâÞgJ]\äqеõàq‹ã§¹I*F%7Æ3ä¨ü›ï¼~@¾òßPoÁ³–ä2~û# ‚‹V÷¢¶âB *…Ð…¢„Ð…b ¡KP›ÓÊ®¢3¼¼Â#;Õ5†Et‚ÿ­ÙËKB&AV.ƒ®—^›_ÑûŸî“}7ÇA‹$ý«VÐUwÿY¯„$xkÜäéÔ[6û_ÔE6AÙï}hy~m j+.´ R](Jí º´ÓäƒkØ”&Ú~´Fx«Ÿ¿t=@¾BèÄŽ™ªÛß‘´é›ö—¶ï·Ø—Û'fâ.­  “ ;%Ï‚®3|­V[@ £ßÇkšŸ‡ÀÞ/»ÞÂøVÙb”ß_Ríåå-J‚v}E–zHJ÷ÑŽÂê+å7ÖÞý¡øâmr؃p¦³åÀ1G[q¡•BèBQBèrAoÛ—×p/ÔÞ{JnÒðj%„.A콓nO’2fü$ÁCN«Å)ȹK+èÂ$ÈNɳ ‹¤Q`ßLž–1ÊÀHÈÞw ±Ëg,X ï†Ets]ƒýwO›ÍÑÔo½óÁÇì­8Û‚J!t¡(µ7袤„¨iyÜä m{Ut®‘ôgGa©Þ+$;+„.AŒ˜Ù~ô4œ"‡„u„™Zpž<Ë~x—{牴‚.L‚ì”\;ˆ6oÞ|áÂ÷8±‰}ßÑ®¢3PJ*ÜwNÅFƒ´»Ät‡£_ŸH½U~㛜õ› ÙµG¯€À 8Ä  ianÞÉ[²[qª•Òº:T\\üË/¿¸V¡‹‹TÆÃýû÷7nÜøèÑ#åU ]${—†yý>©J©‡®?þ¸¦¦Æ©*ís(p´*¿þÀÞZûÉê-rQÞ5RîEL‚ì¬\;ˆ"""þð‡?/^¼X!}µÏÇÌÒº¦N ò׿þ5==ÝúÒ º–Ö½–žÓ3ÖÜ3>qNö;e×îSŔ֎? &S[ëj™£Æ½!½ÖÑ€@ù¢áe÷ØøºûÏÒ³„…G@›Â»pú0l̫ėØwANžôÊÆ±Úkc'L  œJŒŸ6s_q¥N!¡2.^¼;ýücRR’BúÒºÔ§–¶|öÖ#ðôˆëÝ`¿pçAA!¡0Â÷í?xëÁ㤠ùBlâ{MÛÜq²±‘د?Õæÿ—¿ùp É©¡Ãa^€¾¥eÌ–½…F¿¸R]±±±$V«uÞ¼y é ç¤ tadg¥ºSB_xà´7¹ºs–¾ô€®m‡N )–Äݽ§øW€ù[I¦'±yyy/~w½¸5…ÐUÓü¤õÜ6:†<ú*~77‹8é±ø>ýÄóã†íû­~þT«ÕoýgŸëš@—`JèK«+]*S K[®½ûƒÅ~QB6lÀÙÀ„.%;N66AWÙõ(i‘|dj9h]ãJ+èL }áÜ¡“ÔC&AvAš@—ú§½ÉÐå,}é] É©pe.ZVt®¦Ôò›7í+èÜ¥+8'ÍœGÊ_¼MîÏL˘]Py©úÎ÷0‰g¾™Ý¨ËÛ* ­9(}ËûéXD稥yù§¯Ü­hzÜ`Ïúh­ÂÄ ›8}¹ù½­»È¬šµ$—Ô…y684 &PèsaÍU8ö‹ê®X u¡Šæ!¡-t)¡/ ^T“bXÚrýƒŸ,ö/€» <ŽT\„`8XZ×»oŠ…ù²òç(6dÛL›žˆáÝ'Ê¡hWÑ@)p=V(¦w\i]Jè 示0 ² Òºô…N{èRH_z@W@`Aâ‹Z ½§*‚BB…ikÚ¼·,’%G@c'Nµ<ÿä‘Bè<éY ÄN9pÂ,vÂA '‰)ƒ‡’—3-o+çP›€üósVk:Aƒ¾4„.5)†e[&Îq“Ÿ{,ý·5Š£º0ê*ßq²±!Ûfêá¶€@8;¿(;gyþG½ãJ?èbÐÎ:I=tad¤tIé œö&¾Ð%˜,}é]0>Xìq_¼í¨LòÀ!Pfç1ú.2Õöí?Xð8 ]{Nž;É#!Jk4b4”Ó:Ê_T×út[Rê@ÍCBoèL ¯»-ßhx#½Ë)†еÿtØInÄòòòfÔU¾ãdcCÉ'%ª»ÿŒ*©w\¹ºè 示0 ²k‚ƒèÏþ³Â£ÀûÛßþóoIIIvv6÷C‰UðåWúíwåö§?ýiĈ{÷îýé§Ÿt….˜=I>85KJg1Ÿ)†iK\&ò…h( ©Oo²´u}ÑŸx¨FÈBL”“yÊ‘uîÒUóÈÊÊrÛ~ŒŒÌÍͽxõš¶O/º–bX¶eâ~òsTXZWùŽ“ GýóëekÿçQÑ1pÆÝº¥}É qI½ãJïùBlùË_ÒÒÒŽ?¾dÉÍCÕ º0 ²kÒéJ—ÀZÂå <[ioâ{¥K–µÓééE8=ñ¤Ó1"R|û¯Õ ÎÚ»?PÉ=ÏV«Ÿàqt¨JýÄC­]CnH¨½÷”Ñ[rw™#ƒ4ÿ~Üp¥‹°Vcc#©¢ù’®¥–mYá.–S¾ãdcC¶ÍÒ«÷bzÄ:jÓmqå†+]kýûßÿ&UpîÐIj  “ »üµk ]RÖ œö&.ÐÅf-Áô^§«°úÊÛïo"'M`9ë7?¹¯þäù[Tù“ 7-öÍì¡ZÑô­Ô/[2¢s”ÅñR0Dd98i¢Oý¤tQ¬%˜æÐåZŠaÙ–mŽòK‹)ßq 7?5Ób¿ µnÛÞõ7*šé¹_\Rï¸Òº¤¬%Î:I tad—¿vM ‹ÁZxà´[¹º²–`n[Ð Ž ˜†ÈKrß—tÉèíGK,­«<$Tù͇âbûŠ+BY`Ga)£o†„2{OU¸-$4‡.G¬%˜¶ÐårŠam¡KùŽS]ä2Y IPA½ŒªÞq¥9t1XK0œ;t’èÂ$È.íj K káÓnåèr–µÓºà ï™¿ã€ØYv½Ž À `ò2cþx9jÜT]ð€?cÁRÁ3;xv}%.‡ªBèšõÖÛIÂVrûwRÊòrÞòUÒ«Áž2#º{Oa ¥tµÉZ‚i]jR «‡.ñV”ï8åÐEž©§–B3~y´J€½ãJ+èRÂZ‚áÜ¡“\†.L‚¬& ²kÑêÕ«²V{8p¶-‰Kìkõó'«×:5ÀXºB×Î;]`-Áô€® 3Z“rB ¬Ù²ãhÕåÚ{O‹Î5NÌœc%ð:}¹™¤¿œÚK'ö)—¡ “ «‘á¡«è\#ùVw–2Öó§¾ùq“3ÚóÁ¢‰Ì] //ÝÉ\´ [@ GÝcã'fÎ9V{*öEÙ¹—^›Ó3ÖÏßÖ#.\^¶3Wb¿þ0y‡¤Nn¤!÷Þ(™XA;•8ª@gà¼xÞòUÒËõÅoO˜1;!9úÞ)²ß Wäo¥VºÐJ ]êS ˶¬ˆ */%¡ƒ3ì&§vœrèjh]ý{g¯„$ØàÖëSfÇ= k®Æ'%ðGwëᆸjÏÐå²4íN:Ü¥~qT” 2¯]Ð…¢„Ð…b«=C5°Ÿ½õ^öˆëÝ`ÿõyÀБA!¡!¡a}ûÞzð8)£Çhï(eykù›ç.[™œÚ1Ü}K˘M=Aôé‘âac^% Æ%ö]“'½bÖf÷ÚB!t)® Û÷[ýü©w­V¿õŸ}.´CVÑŒŠŽ!k‰Ín;tJz£Xt÷žT6@· ¡ E ¡ Å–AWíÝ,ö_–eÇ^p6è3Ú;‚®²ë-$ó8e€LTÆœÜü-â|Äâûôs—’îµ)„..26tQ#õRa8d‚CÃàXÈ\´¬°æ*ÄQ]ãÂkàpöñõ%O-5Ø×鵨‘‹èµ4/ÿô•»$œÝ€êk„ÑNy6í+ KqNš9ËׂЅ¢„Ð…b˃ «þÁOð2$4 ¸ ÆØ#«ï|°´®wß s¥¦Õ£½l›iÓ³ÀÁîåP ´«è  8‡Ž++¨º›ðòò <^w¶õÞÖ]„Ö„Õ<v¯M!tqB—Â23-o ûÅ9TÅ9yàŸŸ³šª›žµ@\, 0œÔE­½§*‚BBÅGœ;…Ð…¢„Ð…b˃ KðŒ›üܪe¿¥qaæQU9Ú˶™:d¸- ° ò’ØùEÙ9(Þ)Rðd¾™ žéó‹‹mþü¨Ÿ¿MXœYy÷ØBèâ"„.…e žÃg/PáüI©©º{Nž#Ï•?©øâmî;¡ E ¡ Å–'B×þÓ5b'¹ËËË›QQåh/Û¦¬êî?£J’Õ”Ö2j)ï[]\„Ð¥°ŒìO‚uîÒ•ªK­Ø>Y§ƒ—WRÊ8IùôH±Nþ+BŠBŠ-O„.á'?G%5íeÛ}Õø`ÙÚ¿Ã xTtŒ¿Íæãë ÓU’,ð%mеÐÅE] ËÌæŽ ª®xyL¢’Ëw2ßÌ/#"WmÜÆëkAèBQBèB±å‰ÐÕfI=F{i›¥Wï‘EüdM(FVf®½÷”ñI•w-„..BèRX†,~+MkÞææ¤*¬¾òöû›ú z‘”ÌY¿™ËׂЅ¢„Ð…bË$Ð¥~´—úÇOÍ´Ø/C­Û¶÷DýŠ¦Çµw ·â‹KFtŽ‚—âŒcR)ï[]\„Ð¥°Ì€a#Á³÷T…³›cÐ JÂÄåkAèBQBèB±eèR?ÚKýä2×ç_V‰Uô2ªdÅ ’Þ‘”w-„..Bèb”'s™·|x^z-ª¸òã»÷æuÔþ¸ÉÓÃ;Eæï8 v–]o’AÁ\¾„.G’&«U>ž{´º0 Ø20ti8ÚËúmà¡–B3~Y’«üæCâ™õÖÛðòµô瞸ܸç°Õê—”2ÀÙî±…ÐÅE]²N?ÿÖ$ãKóò+š“eOÎÞzÖœ¯¤¥ï/©®húv÷‰ò…¹yä'øôÙ ÙíO˜ÑšrFï5[v­º\{ïiѹƉ™sÀ™:d8—¯¡KV²Éj•ŒçH’ŽÐ¥2 lº4íeýñIÉà!‰\Ï4>¤8|Ô¨qoß ³×|@òc_øÚÛÛ<3-/¬¾rúÊÝ Û÷GFuÏŒ…Ù¤)åÝc ¡‹‹ºdd…jÈÝ´¯€“.¡ß«w’x» »ÇB!tÉ: */%g@A É©‚¿øâí 3fƒÞïÙoЋ+ò·R+?8: ¿¼t'sѲn½â ®-  {lüÄÌ9Çj¯ñúZºˆÎµ<Ëßq@¸tïZ†ôÒæB— cÐ=·…„™¡K“00@ °eHèÒc´—õ¯Ù²³WBlpëõ)3Nž¿Κ«ñIÉ>¾¾ÑÝz%w+;qjLX˜)âûÎ[¾Š\KI÷ØBèâ"3@JV]å7.ÉÛ@’1uèСÁA²Î†¶ÆsF7%Ii%I'7{@÷–æåŸ½õÈ !aNèÒ$ ôHÌ%ØjÏÐ…rV]\„ÐeZ™ºŽ×]Ÿ:çM8C„Í×j}cÚ,’žC[èR˜”ÖQ’tèÌÎÐ=x ]…Õ5êfƒ. Ã@ÔÉ\b€-„.# ¡‹‹ºL+sB×Îãe#_O‚ ËZ’+ÍËF,…åIiisAP2kq4e±§3€ÎÃGÐ)$Ì]:…´€úÔÉn޶ºŒ$„..Bè2­L]u÷Ÿ­Û¶·wß2-FuY¾ncå×òwœj]N%¥%u¥isAW¡ÃQÑ¿=‹‘œúþ¶}š§‘2u²›c€-„.# ¡‹‹ºL+SA™¡æ.[©¼°JSIi‰“åV,ø Ò¨—á¡Kï0PŸ:ÙÍ1ÀB—‘„ÐÅE]¦•© KXè2!95Çú–…5.§’Ò§4m.%²¬|R>,¢“¶!axèÒ; ¤Ô§Nvs °…Ðe$!tqB—ie*èªi~²zóö^½“ÈTÕ%¦{"¨ t9•”VÚ%èjÎúÍ/tíFJÂJÛ0> stream xœ­ZK«,¹ Þ÷¯¨õÀé±åG¹ ièG$»Y„¬&™„›pg“¿=,[®~Ü{!è.—e=>É’ì>îè§ÿ¾Nnrø”–t„©D,Óï;üé§éßw\œ_ò´ÿþýóæ„+¿R(Ç\Gÿšê(ûc¢¡;üãðÛO3Ýø(±Œâ|\ÚÒa t–O7>J,£¡-Bgùðtã£Ä2‡ºtåÃÓËÈÍ‚¡³|xºñQbÁ:´Ã Ò>2­|±Œæ¥C;„ÎòáéÆG‰e”s‡våÃÓË(±kðáðÅ? Éëç|D‚yŽÓç_§Ÿ7?y˜>ûóÉyçrÁE—Îpr™‡3=~Lçtr˹œÜ…_\ùóÆŸ—s>¹ûù/Ÿ<¬Ÿ‡_vRƒúQ*xæÉòèœÛª«÷çtòÁHJ•ø•4#O„Äf >fúxÁaޏµç˜QWfQ„‚sþüç³ Œ œ~&©ø™OhÉœü‚ È£šk¾_NáNJ ¢ÄZ¿™F`ä­#Â@5ˆ”ìüª: Ï òu-1ZF%]ô/¥2 ËÙ»rÛñªÌ…ã^ÌÆ§Æ¤;ñNÏs"ǽu¤cü!wõÍ]á"š…[· TsÜsÇ}§Ëò)F¶j3 ÿ8»êÄïÀ™µùŒ1Ÿ dŽÞAö`w0v{7äz,-cs#]®Ýë58ӹح¨Y3®´P\•¨Bjì‹f•êÕÐP«j3í&¢˜g²VßìØðS¥¾ïÔ£„õ sI˜”¿¢Ùç,€ô§ƒ TóÍk&¸]’ûbís+Ñ<Äý½‡ª˜-‰DD L¤;]½è]6 ÷.ÔÕ£6+yp>Ÿ9è/ž`Â=ʶ®Cˆ¿·TÝ”ž{éü17»Tf|Y¸Äs˜àkÆ€VT.Z/µ²àŽí•Æy¥SÀºCµÄ̶wðÕÍã wEÍ?ÆEäDc«Üt̽ ‰ £èqIpeÄ–`En]©+LÉmJ‚ƒ2×’:•'S¯qLÞ°dÉMâBÉjK‘gËîÒæ÷êÇ(µêƒäú–¹2ôF”5¸Šè(¢ß:;öV£³cÐEèÍ„ÔÜd-Ȭu+ô7Qm5Ë*Ù7š¦d³¨hN1a°‚¶®Åeä¶‹ËAK_•*š#Á£u&â&&û7î]Ä Æa‹±T:Æ)ʶçÞqºHï#f‰/’8×ï;5_„˜i^¾"1=´G¹ö ©WݵBêô´Ô: òUŸéïJ’ÑòPÏjUƒÖöÒÞíKßàMÙö•·–D\T2öJÖZ³µ«ÆúcÎm´BF«L—–n¦×R¹lß3m¥ÇH/µ]-BCËÔOEÔªt4´–{î­j8ªv-èèÏÁ"­Ó¦UR¸Þ¤¾ 1Xw'Ò'ê“Yͱ³¦A}§q4ÐqµÙJmjÛÕÀ^2¼†#Ž:Ú§J¾>;}Ïm½Kãs•­“´½k‡ôÁ0êñ«§M¿)¯·.twÈåaE7‡Á ß@-ÚûX[] lG˜Q¾\x ï*p†º#V 0VÆóVx Á=<\I]U Ýx_Çï`úr¦³; •#!eîuðÛͲ`<КÜÙ%=q¨?|i“ÊÏ4ø „v˜wkvS¦kæá¸!+89T‹X;ÛƒŽ P‹êž0¾›¶j®m,÷*èuîÚí•]CÕ³P†ÕÔÿq׿·0˜Âü˜Álú"G¾¾•Xà¦è'fëõ™/þê®0c¿üÍeø9£Ï/Õ<Ì|µO? |`ƒ ânÔ)W>Nÿ€Þß±ØdG ¾åQïNº–®ø ,(cõ·×Úå€å¹ŒÚÙÕ?¨ó„eÖk߬Cì .5ê-:J†öN« Ýá²N†šp(”|Àæ ³<Õ{Á §èžVè…óÜæˆ|öÒD_•á^ë ý¶£$ Œ T‡öó±”¹¢’KÏnX(Þå€Yc¹GP4%߈»7Tä1µþ- Ów_¡¦Sö;¾ƒò®*J•8KRÃ+‘Hí¨k³zÍ•›VYí­?€Y7Fé©d­A°ŠKˆ_/5å|Yêz'ÞY ªò›ýk?°Æfo³£“Ü9ì¯]V‰f@oÌ@w ýeÍ÷ù ‰³‡¾Þ2–|× —º9[Y#Jì½Ùì!—1j—~f»Õó‹I3£+ºügN¦ËÀgÙÉlPW‰q¶u-‚HTìŸÉxØ™ãî>]†ŠD.$¹ê’ž£Xžßëòö‹ìë£(;³®–…d2j–ôÔž‰fÜ´ámÐnˆ›6—ÉðòææÌÿI¡AÕÛ^¾ åå²`y²°ÿx†“_þýBÆúÂ_¦¯òsz,…?é?}ýï¯üraö8¼L¿~9üü‡/>•éþŸ‰˜ýßhKL endstream endobj 157 0 obj 2314 endobj 158 0 obj <> stream xœíiP×ÚÇoÕ½_îýt«î‡[5웲ˆ;".‚kÔhÔƒâŠ¸ï ¨$1&‘›¸&$¢Æ=* (( ˆ (îŠûž³š¤òÖ›¼á}œ“·ß¶»§9Óëééç©QÌ™s¦ÏôùOŸ_ÏtŸ§© £éû_ÏÆ0#ÌùÂìáv˜m ã»_ƒÃ{׿ ŒkS*zÀZbÍ?ê‘ §Ô&D2«‰5ÿ`````¨D2œR›ɬ&Öüƒ¡>ÉpJmB$³šXó†ú@$Ã)µ ‘ÌjbÍ?ê‘ §Ô&D2«‰5ÿ`````¨D2œR›ɬ&Öüƒ¡>ÉpJmB$³šXó†Êøá×ß¿G«gÿõ»1ƒ 2ýÍ¢øúõ·ÿ1fè"N©MˆdV“ñþùý?L?zªþÀµšÍ >;f¿E é0`è"™M¦Tù@XKÆûÎ+Í=~z|˜n*»éêÓ_³B2Óß,НÇÏþÛ˜¡Wˆd¦ˆ5? ¬%ãýCÌô7î‘B$3Eˆd¶"J Öü€°–ÉÑËÛžŠiß¡úÖSÓw²†J›HF/tˆñB$ó$!’™"D2ÛÊ“Œ¯}Uç:ÆÅóoNœjúNÖP±ñÝÉè…1^ˆdž$D2S„Hf[y*’öTÔûúúB…ÍEÇ䛬ÚX0`èˆðȨаðA#R÷U5@adë¨YsçÉV'o>’ˆèÖðþ¾ÒäþCZ†††·ê÷ò°œ¼‚×?Xwuäèñºt êң稉Sv”Ô©ºñÕÌìåÝ“RÂZEÇÆwK˘~øìu®Âüå«?½½ÿéúMT]ÿš@…ú‡ÏÆM› 5%÷k~Ð É$¢Ì↚ۃ)‡È ‘Ì“„HfŠÉl+F2PÆìEPaúâ™&s &²ˆ¨èc—€ÿÏ>þY²U݃¡$¤EË»úøø^ÿÅ˚ͻüüý>øl'W§òÚ£˜v¢€9±¨æ©#3áÒlâô½ï¡¶2ïíw¹:’;5?è‡db‡(³‡¸¡¶ö`Í!òB$ó$!’™"D2Ûʳ‘ìí_@…—_}ÃU“½ÇÏÀC//¯És³ k.VßúzsQyמ½zõ{‰Ì¤2‚_??˜Â^M÷ʼn³5w¾)®½<3{9¼<µµäxƒs&m%™ó³‹O_©½÷]I}ãÜ·VùBøùq×–§MšMº'¥l;\U}ë)šC7 pà°‘òo™rgý ÃZED¶ŽYœ›W~ù¾«k¨Xóƒ®H&pˆ2{HnHC{°æy!’y’ÉL"™måÙH“ Th×1ÖU“1™3àᨠ™üV§ï}Mø5]!DŸCåã¦Íò×ÇeÀÿSæ/ÿ§-\&¨3gY.”Ï^¶’ oåp^­´ëXmõ­¯ææä’‹”ÆMŸK^ŠÜÙ7"m쾪sÇä÷<fsò“SÖªÿÔÞý–Ô  ‚’ŹyÐU²¢å&\½ ±Xóƒ¶H&ïeö܆ö`Í!¬ù‘L?1Žd‚Bøžºç äúÉÜ ¦÷S™ìƒdšçä-9ÓHúSP\!˜ý-!@2É€‰/}Ê,ñZ—óœ}üó á¯ ÚÂüŸk~MIË‘ÉzÝöâåÙ3f/⪭ÛQØ"4LÜÞ½ûq_ep‹*pÓ¶ôÜ­‘£Ç ŽäÉýŠï4›põ.ÄbÍê‘L2$"ØE”öÜ·íìÁšCXó;H&i?Ó»¡r4­¸osò6³)›ÞOe²’iž“W|p¶–< ÉBÓû?}î–CÂkx\™ç죟f/[™Ò7(8¦¹×Ò'–Ô7ÂL Õ`2•±W4ž6iZûØ8˜¬û¾bm¾ fÙ…;£'Oïž”›ˆˆŠîÕ亮ò6Õ?|Ư³jã–¸î AЇ7ÆO>rî&Ÿ¾Ò5!É×Ï[Ëü–ÔwT i/èÖ&(Êš´E2y‡(³‡dCmíÁ”CXó"™~²(’‘›hàÃÞà\{>}ð0gÍAµ%Î_ÍàY¨cú;âËÒHF2üÆÆwkx~YWyŸCà|Æ"±wÿM{qÕdÀQe…–ÊÉÛ£WoÁkþY¹¹Á|}z  ÎÄÉ Æ÷Hœ³,Wümebb²4’é§]å§/.û߬=F¬ùÁÁÎöhVˆdœ\yÀB`Q$+;ÛáÌFîk²4’q%©c_¸éuË¡J‡ó"X™¶ô y¹¶âœ¼‚פOœ9/ 'Í^È/Á‰Rrÿ z¨@6G2 b’4GoNœê®=C¬ùÁÄí¡@ˆdœä=` H`ÉdböÒwMŽœ»Ù"4Ì? píçûýýZ†…—¿mú‘”g Ù®òÓüBrõ—··L[·Òþ’¶âœ¼4Ç^ÉÁ]zôtH-DÉ—ÊÄÄÍÊæH*¿toför‹ÐðVÃãâHÍß_ªÀ‡ž!Öü`öpWˆdœšõû`E$9zü¶ÃU’­ò vsÕ>Üú…éï•<Éš]ñ@\âVÚ_R(ÎÉ+Þ e‚`² ™|’_·z¨@ˆd(XózÀZB$ãDƒåŒCãHÆ/9ûøg²``ZÆtW­jï}G¦]øË-åÇ <ÉÔ¤OÈ˵çä¼&}‚`WIùr«‡ „H†ˆ5? ¬%D2N4HÆ8$XÉ@E5—ÈŒùñÞÉV“f/„gÉ}g-0ý]¸’m‘Œ>!/ýVèG¶Ž’òË÷e6êV‘ %k~@XKˆdœhŒqH°’È’Q1mÄ“æÖ’ã^ÞÞÑ­KêÃ#£àWËWš.Û"}B^ú­Ð'&khWÈlÔ­*"J Öü€°–É85‹dìC‚å¬þá³¸î Žç·ûMâ—×Üù†¤¦]·ý@ƒsi)‡siA~ö vd7$ãF>!/ýVèO]°Ô!ÊŽJ®óLH‡ „H†ˆ5?¸›ÁAê÷‰V¯£•6‹ï‘èÈ-†ÉŽÉ8ÉÛÆ`9$kp.'èííÃíX¢qÓçB LÄ\ÉÀa#/æxeGöA2AN^ú„¼ô[¡O\vþ6É7eþ’âÚËå—ïç2:¦-”Lž›Eê¸ÕCB$C Äš¬ŽdKë±k8@u~$W±ŠfùÇ¢Hf H°"’2æ,†gÃ#£ÈÝs›‹Ê½¼¼`&­¸ò€«säÜÍ à`(‡gM;ÙÉÄ9y)òÒo…>A0èuŸ‰3ÄuKào𾇠„H†ˆ5?¸å(EÍ˦ŽÍжK%gI Š+ÄÉ×L"'ÛX,Šdµw¿%ß {cÌ©Ûß… `jT#§Kð,#é«8)C²õëן?Þ­&¦#™dN^Ê´¿ô[¡LL´å`åÈ1:Ävc|ÄYKVˆï»¡ì¡éd'NœØ¹sç/¿ü¢ -"™)ÒÕ{÷î=|øðo¿ýFßÄêHß]Û.ÁAL§·©‰TúçáÇk×®}òä }Ë!™… Y$ól)C²ÈÈÈ¿üå/-[¶\¸p!%›áà²&½‘ì£>“üãÿ:t¨»l¦’í©¨}\F‡ÎÀÀ!!-ZvîÚcFÖÛ•W ªí®¨>*æÓÀ ç „M}S|å-%¥Kæ¬çž57ï¼Xºúa„ à‡ýë_cÆŒ¡d3MLe¢gñËž¼ùJbã»58¿ñè3pH‹Ð°Ð°ðÄÞý7í9Dê¸Ê«K9¦’¶‘Ì«ûgý_ÍÌ^'na­"àüú––1]pQ«–SéŸ .€Cþú׿&$$P²³HæB$3EjŒ 6ÃÁeMÆ n±™H&™›ÞáÌcÈÿá­¼Mäj=~x{û,|çþ«Q"™dÎzò”éyçÅ2ɸ a3­¾%S“èYü²u÷ ßfH: d‘ŒfL%mã É*¯="éqï·¨æ¿çz[N$ゆÍÉô"™)ÒÉhØ —5Œdn±™HÖ=)&—ÌùÙ%gaV­ºñÕº…­Û¶‡Âô)³H² wÈzƒiÓ O]¬½û-Lâ™ó²¼€É|| !÷j®@Pî*g= yçÅ2ÉhØLÃ.'z¿ìÙÇ?CIhX8P8ç@õðÉžŠún‰ÉPÞoð+2m)ÇÔ•m$_3mÒ4({o;\Õ@[KŽhAáÀa#¹jXN[$£a3D2ý„HfŠ´E26ÃÁeMf! ›édÁ!-`öá!Ú^ZÝ"4Œ›¹&ÎZàZxdä˜ ŽD2®D³ž…¼ób™‚d2l¦!’)Nô,ù²¤0uì ‹Øl9TépÞÑ#Ó–~L%m#ùš)‡À¿poå¨m¤åtB26C$ÓOˆd¦H'$³.k2ɸ³™HFn¹>*½ìÂWu’ú€:[ ¯#³mbïþ\‰»H&ÈYÏBÞy±ÌE2.86[¼x1}ç呬Ai¢g$ÛU~š_H.óöö‘iK?¦’¶¡y›DõŸ j`9½‘Œ ŽÍî?úg„HfŠÉþùÏR~Ä¿ÿýo8;v,++Ëô7‹â‹ Ùßþö7ýFŸ2¸ì×_MÎz L dE/oï„ä>Ó.ûô@™àÞÕè6í ‚x¦.=w«Ù/@\•“AŠyò΋5mÚ4³½ð<þþ÷¿4hÛ¶móçϧï< «(Hô,ƒd܉®*‹ÛÒ©¤m\õçDããìÕÁIGL»AA¾~~`rAM,g¤¢££srr.\¹ŠØ “ÉL‘Nß’q$öûï¿“&8¸¬ÉôoÉd.ÑéŽËc—îfÎËâÏ;­"£W¬Íç*øùûCaÝý ÉåÖþþ\‰+—“AÎzò΋eî·d‰={öŒ4Ñ| ‰ž%_–rôÅÕèÇTÒ6’¯YqåIå&FZ΀oɉ566’&øÃ¥~B$3EÚ"™˜Ä¸ÀÁeMf!ÍTz¯KV\{yéûëzõ{‰Ì5Ë>XOÊÉÕþd59¾Ž4Üp8ï€ãJ$'åê[_‹Ë%k²w^,SLLb\hŽd =k‹dôcJ¹ Ш ™çWXïåo?|özõ­§pNAnà×4Àrú!™€Ä¸@$ÓOˆd¦H$“!1.ppY“ÁHæÖrC†- `sÌDä!¹ÞL¼€öæ¢cPÎ] "™ÔøyKA;ÊNQ" yçÅ2ÉdHŒ m‘LY¢gm‘Œ~L鑌|E¶óh ¿°°F¸¨¬–ÓÉ\‘ˆdú ‘Ì©A2ã—5ƒdn‘z YêØIQÑy»ù…•×ÁÒ¢%y˜1{<šú¦ -”@yÆœÿ¿Úfv(ÙVr‚_ËœÅ/”œ[YÈ;/–HFCb\hˆdŠ=«G2þ&èǔɂ‚ƒ¡D°0ìðQéd 2î¬ÁËi…dÍ’ˆdúI1’5{rd°à„:¾G¢@`X«Ó;Ó¬”!ÙÊ•+)IŒ * Â××ÎHýdßýÆÑ­#³%¤7’•––ºKb\èd£'Ow8×zZµ± ¨æR݃KÎ4ŽÉœ…)“:å—î=OO?vêìƒuWkï~ 5á˜Ý œÿ£4j0—í=~ªÖ\LŸ2«MûŽäG±fMÂBÞy±tõCAA%‰q¡!’)Nô¬ÉŸ{iqn^õ­§dQ/ú1¥G²® IP2"m쾪sÇëïà¡pA~…ÌZõrÕœ–SéŸ{÷îQ’ôHÆÚ±š}N0ÉHV) ßçÉ壬À•¬˜v\&瀎#Í‘Ys;é*»¥‡)Iò†2`­=õ\µçéàE«÷ûû¬\¿™ÿjwÔVùûJ£bÚ8^¼*ÛÕ¡Àô¼ób±æ­LM¢gš¾«rò;8ÿ0B?¦”›­þäsÁKh•ž»Å}gËÕ×ÛrÆûÇ$³''˜òÃeêØ mwœw“\P\!ÎÆ ¬ˆd‚ÂçßQœº8kÉ r»Pî†ÃÆQÐÍí¤«ì†d £ïfÎÏîÓq§.]ÇdÎ8XwUPmoå™W^Ý¡s—€À Øøîäûñ«ÁäÕ£Wo˜¿BZ†¦ L®Ò!öÐÌ­ fç‹5?h‚d*=K¾,%/Áq)©ïpQpH A·Æ”É@«6n‰ëž{cüdrJñé+]’àL¡]ÇXc,Ç2’©‘=9Á$ƒã­¶»>ƒ,s¯X€dœrò6:x?B0Ž‚:šÛIWÙÉPòbÍèkÉS‘Ìžœ á—'o>’Øøn ί¬û g²¡aችûoÚsˆÔ‘I ‚ç‘£ÇÃIt`PP—=GMœ²£ìd¡f¨çã¦Í ˆ„š®ÒÂ>¯ã«™ÙËá¼#¬Uœž@ßÒ2¦ .È$úô@٠ᯑ„³˜9ËrÅÝl÷èåIHV~ù¾Ã™{®ÁyjÜ>6æ¬Ù ¨¶Äyj Ϻ:5–Gù“e=ìDžÚSQÿú¸Œá¬6$¤EËÎ]{ÌÈz»òêCõ;‘ %k~@XK,#r‚»œ !’ÕÝÿÁáü::_©ø§s(”ßÕk6ïò<ëïðÁg;¹M¥#cÚu˜÷ö»\W»ºòÚ#’ÝU°£Šj.ñ{ž“·‘Ü&î={ñ÷6M÷èåIHVvþ¶Ãyý6y¸óh Œ>ìäCõ׸:ŵ—ƒ |×±ZW¯£-’)¶”K¢]§Î‚\ „H†ˆ5? ¬%k!rB³£©’}ü³Ãùm ìíô)³T_¨½û힊ún‰ÉPÞoð+2ma·´ ‡÷›9?»øôx%õsßZCæëçGîšip&±u8gÿÈÖ1‹sóÊ/ßç’kˆ_3mÒ4(ôÝv¸ ª¶–‡…\¾ãçJ2° oo°PlëÝM[ÉqwSv^ž„d V¼ïp¦æJÈ*©ï’\þ”@Mw·%¹éf먴xÊ¡mÉ™F8€À9Ôº…d9S0¶Ê‰H†ˆ5? ¬%k!rB³£©á—¤0uì ÷ß‘ÜÁò‰ê¦Ì_òü­-\&xÁ9Ër¡|ö²•‚¶ã¦Íi¶?)‡žºÈ/Ü[yªEDEs%™ó² dÒì…üjëwqkTÒwR€dp&²ÿäù© –’å`qOÁ'"¹ÿ ‡óNpx¸(w a6BhnmK’©´SpH (|!¶½´ºEhÿCªLˆd(XózÀZ²’5 '47šš#Ù®òÓüBòÃ.à¥LÛ~/ƒ˜â/ å )}m??r’¦?bÕ?|&¨Ù¥GOx¸»¢N¦}÷(eE$“‰ÙKß49rî&Œ@ YÎÄI¥i|¥ ÉTÚ‰ÜD?|TzÙ…;ê÷ž@ˆd(XózÀZ²(’!'¸MÍ‘Œû’ÐUeq[É•‹¸hݶ½ måµG4ý9Ñø8{õG0ÃÆ´ëäëççåí-¨I*¿ ²îQÊcläèñÛWI¶Ê+ØÍUûpëÊ|%c3ýìÇ ²F¸%!¹œõ|z L«ÉP±æô€µdQ$CNp5šš#Y³•ÅÕÈÚV®v‘ -MHW¯YqåY­H2¸jäw·º?ʼYúîQÊŠHÆ/ýO’G§eLwÕªöÞwÄÆðW¼å¶hl¦‡Ž]º›9/‹ÿk½bm¾ú‰H†ˆ5? ¬%‹"Y³•õ8°‹_“5N`ÉHŠªë_*Û®dù¨ ™'š¾—¿ýðÙëÀäu÷ þñkF¶Ž‡ü¤-bÑwRVG2PQÍ%âÀ÷–H¶š4{!*,-Ruã+R2uÁR‡(K#¹(=!¹»Ý£”g YýÃgqÝÏï™Ä/‡‘…Ýåë¶hp.Õÿ·ëK“P1’ih'x;QÑy»ù…•×AÍ-UîLD2Wg=B[H¬ùe$˜Ä­iÈSåÙHf7N0Ƀàáâܼê[OÉb'o> o…¯¦Ûu¬¶úÖ×ÛWÍÍÉ%?àŽ›>WÁ®îš%$SÞñÆÇðYî;xèÐÔ7É·‹Y«þC.p*;ÛÇÇJ¦Ì_R\{¹üò}@ˆè˜¶P2yny)úîQÊ3 {ÃÛÛ‡£/"Ø!ç‹\ÉÀa#)w”$ÓÜN£'Ow8—µYµ± ¨æR݃KÎ4ŽÉœáÐ"o"™¤$3Ó ™µ’ÎKŠ5?0‹db“Ð<À!òòT$³''˜‚dd‘ÁáwÝŽBrÝ‘ zöîG“MX\¾ú“Ï/;°ôÜ­‘£Ç 6ýκÏÄËÇuKào—²{”ò$eÌY φGF‘»Q6•Ãù8“¿®×‘s7ádÊáY·¶Ec3ÍíŸ>É{gƒ‚öTÔ«Ü™ˆd’R–q¾ÁjIç%Åš˜E2e&ñ‡ÈËS‘Ìžœ` ’žº˜Ôw0ppH‹îI)\yÙ…;£'O‡x""*ºW¿—ÞÊÛ$X|€~WƒVmÜ×=6;ùñ“  °øôc×vc¹š[VŽ3¡Cl ‡ø‰³–¬ß$HÓ=Jy’ÁŽ"'ÃÞsêö7fÀç‚jä\žu•ãRr[46ÓÃNG/ÞÍœŸÝ1.Ú‚%:ué:&sÆÁº«êw&"Ñ™GÏò vsßù+Ë8ß Cnbèt ºgÌ~h@$ÓÙ$àyy*’Ù“#J¬…d( …HVuã«E¹kH‚*//¯éMšûáR&Mæ_WIçÉ5$нŹy'o>1À¬ù…ƒ¥Iäg|=²W›âÖüCd(£‰ûÖx!’ÙVvF²Cõ×&̘'0£ùùû¿9q*Éc¢-’Qfþu•tº³3tBW¡Ã%õºZ‚5?˜{ÐpË$Š‘LqöjSšÉtMÜ·Æ ‘̶²'’m9T9äµQdMì–aáÓ刓ðÊe }æ_™ÜÄ ¨9má2x)‡3‰tžrbÍf4˜DÉ\ÕQŸ½Ú`‡°æD2]G÷­ñB$³­l…dõŸ½—¿½[b2™cÚwXòÞZWj‚dneþ%mʉ9AW¡Ã1íþ¼×£{RÊûù;´J­Å‰5?|ÐPceH¦>{µÁaÍ?ˆdºŽ&î[ã…Hf[٠ɢbÚ© &Ü>Û)E´&HæVæ_ÒVœ›X è6tžcxSÚZ‚5?|ÐPceH¦>{µÁaÍ?ˆdºŽ&î[ã…Hf[Ù ÉÈ 53{9}e•%neþ%…ò©„ù‚7"É*Åš >h¨1‰2$SŸ½Ú`‡°æD2]G÷­ñB$³­l…dÜžݓRò vŸ}ô“LeMÌ­Ì¿¤Pœ›X ²¼R?<2J[K°æƒjL¢ ÉÔg¯6Ø!¬ù‘L×ÑÄ}k¼Él+[!Ùé{߯\¿9®[™ªÚv蔳fƒ«%5A2·2ÿJNè|AW—}°¾Mûޤ&¼x;𦴵k~0ø ¡Æ$ÊL}öjƒšÉtMÜ·Æ ‘̶²’qÊß_:pØH² Shx«™ÙËùɈ4A2·2ÿÊL¸Ð½Yo‡’ûé¼¼ óŸ(ÓɬùÁ¬ƒ†“(C2õÙ« vkþA$Óu4qß/D2ÛÊžHFTTs)}ʬÀ ç©ëüÓ3gŸ¾Â=«ɸ/UÜÊü+9á×^“9ƒü¶];u6”èj Öü`îAÃ-“Ð#™†Ù«wkþA$Óu4qß/D2ÛÊÎHFTuýË+Þ'{½¼½¹reH&ÈMìVæ_É —¬‹݃NRþªR¬ù…ƒ¥IhLóìÕÆ;„5ÿ ’é:š¸o"™m…HFTÿðùº=zõæJ”!™871}æ_É º3ri)ÖüÀÎA£Y“Ð ™æÙ«wkþA$Óu4qß/D2Û ‘Ì•”!™dnbÊÌ¿’®ñbÍ,4 ™Ù«™"™' ‘Ì!’ÙVˆd(XózÀZB$ó$!’™"D2Û ‘ %k~@XKˆdž$D2S„Hf[!’¡bÍèk ‘Ì“ä$²%Ùf„Ÿ\6À¡Wˆdf„Íù=`-ïŸßþçœYô ƒGƒÍ@$³É”*èk‰5ÿ`````¨D2œR›ɬ&Öüƒ¡>ÉpJmB$³šXó†ú@$Ã)µ ‘ÌjbÍ?ê‘ §Ô&D2«‰5ÿ`````¨D2œR›ɬ&Öüƒ¡>ÉpJmB$³šXó†ú@$Ã)µ ‘ÌjbÍ?ê‘ §Ô&D2«‰5ÿ`````¨?þhZ²å6!Ìù=`¹0Û2ZÆÿy°ú´ endstream endobj 159 0 obj 9614 endobj 161 0 obj <> stream xœXM¯ì& ÝϯȺÒ¤h¤ùHÝ=i¤.ªîÚתj+õmú÷kl&“L_«+å†`Æ>ÌÀÙ Ÿþ`|óÉŸí0æ< _~>}ÿÍðç Î L Ãöÿ—_N>œãÍt‡?NÞMç ­ßiÁˆHØ"îÁv§_OŸ¿9©îŠSŒ©’A¿dh×;…Ãݧs+F|œ®Áv‡º+N1æVë@õ*6 #´Èˆ!¿{8·a]ƒ¬uVŒbÊ-Z@ûÛéÕPwÅ)ÆÜ²NE·k°Æ¡îŠSŒ¹I´k°Æ¡îŠSŒ©åS¨^‹MÃÈA ù}²m }#U¢<þ!oÏ“5c&S‡çO÷«ŒžŸ˜Á€½|˜Œà/v†@͘_'zõ—?CºL3\éÞwz^/a†ÇåÇçw§åyú´™ÕÅM÷:«5„Ióå‡XŋŘ‹ŸS3y1>šÄdzߛd¬+Á×>“ Ž}Ý@,3£Cv6)ãÜÅ!o_#gƒx]Œpp€ô:òó~Š¡^1v=­¼*‹1qèdÝxNzE®æ›rj8³ ½» •$_M¶ò÷GnàByzŸmB¶ÎyUy¤ ­lÃk&X™3 FVIÙä×<Õ£1ijäCBÄY;Ù Kî¿zfa›d:ôÃR¨Ù¥µÑ7‰û*°Z8Še²g‡ê™U˜B9r(q¼¹ÁÍF¸3w`ñ1_Ïßö`ŒyOY…;°!˜&¸#–°¹ý€‘Wtÿ-jȺ¼ñ&sµ ±s?ö*dÝ ~Üø¤ÇBÿ÷u~1î˜UºGޏºÇ> F qœšãIý ÆàŠY1§oñm(Y ‚op7±G\ƒÅ½yƒd"¬ÆCpÓû(·Í FÑU‰$>¥4øÿD’"ï *Z/EæÞ4€D…àÃL‰7þÏ›2ï4êM®}w•óÅ:ÅÙ-ÈûIô‚-ȬD¢Í¼ßhÙàßT|Ñ«(HÙlöuãq=Ò\ia[‘EO‚8b{[G(+ñ¼‡tìÿZU”EÓÚ>&n9Úó#dåÜK2j­bS‚q"—‚Daû¨\¥ØpL€Å]ukÃáA…Eå¾_Û|ÔÀ¼;ò¼Ë¼ßym Ù©š}'¹%õ7åD»‰Ìr¦Ê¹~­‡BV·=ø8ïŠf4n<,)ØqŒƒÛnÍ| @X«x/‡ÎH¤ÿŸŒŸ òšù½Šé’O+™éW 8Ãò‡‚"Ζäo]¿b¨m£2YUºj£Ž±45{ 8Ÿ™wWçn+-„·”ÛUÏRÒ®+·127^“™.éTl¨ºÛYIÙë ·‰ÇÛЋ2–í兼ݚÖ. BÝE‚H-]â©^ Ši]¥®ézÙâ¤q¦–ŒÙ®E±zêgÐ;nÇÓ¥ŽU[׆©8z¥iš';r‘úè*uí–ÁÜžš2Eߪ÷\c…|~ôuo^iæ®øñPOñC1¯ïÅ¡j÷¨ŠÙ)—±óGÆ/ª¦•–AµïòÖ_ú¢•ó¬©ÖKÈIW|‘7E¤Õ¤e–ïMÅ€ªþ¢4¬’‘B´äY±¬íν{DhÞÕܨÙ5 oWñ,¾OB¬…®ºk^Dû”9ô­ÇŽ×—»ÓÌ¥ho9Ǻ]·û‹n;Wp,”+ë‡-£W=VºhAõMõº¥“ë–2K6s¶€´0à2´Þüþå‚W½lžu:áÚ¢ +¾0ÕkuŸ:e´S›\¼`^ùZŽW»ˆ\õ2êNRŽ×+D¼Ÿ¿üì°Tb66æim¨'ÅÑAœ%"Ÿ>h:F¦®{ìT…v¬•¦ú£þÄ Y\ê±lµP²>«Ù1ŠEÕ€Íí}ºX}•ƒ­Å–Ͼ@õBïAIsŒª)KZÀèìGUX7îô; Л1ÓÆÚZèÐp½*Q`˜»ÅÔÚYo¬|¥Oªƒqß²dtåò¤YÒÝ"š&דŒ¿j‘Tȧ—ÁAèìáÀ)a¡±3°ýh庱;pÀ®[> ÿ>ÒЮ endstream endobj 162 0 obj 1555 endobj 164 0 obj <> stream xœ¥ZÍŽ#¹ ¾û)|^ ‰ú« ¶Û>ä¶@9¹%› Ø ½äõC‘EU¹j<³˜Û*QIQäG–ÝÉÿwøïÑ~Ks:ÁqŠþ4ÿÇá/?ÿsp§Ùù9—ÿç!åS9æ\ú·C Ó)Ëè×£ŒRD~8"ÂaÀt‡~ùé`¦•O#æQtøÙ–¦³|hZù4bAÑ…æ«Ð8©˜¿ûpŠºl•á@“Ê£‘Ò(Í3Û¨¡3Úðtã£Ä<šr7è8`:ˇ¦•O#æQnÐqÀt–M+ŸFÌ£4ëBóUh œTLÈßc2* ¢2hRy4RoLgµ¡iåÓˆyäû™¯Bcxxs>ÞœŽ‹Ý=ÆQ4©<)âìº{ ¡3Úðtã£Ä<*êîö«Ð ø/öíë>"A)ñøõ÷㟞þèáøõË_ÏÎ;¸|ø³ .ºt³Ë4,õëD_Óå#Ý|™ÎîJnôy§Ïë%ŸÝçåo_><¾?/v 0 ­wOÅ„_Ñ8,Ðòð’E UÉ{åã*wõ¥ÚΞTöªë"MÝ.A¨ü§¼fsü›ØÎ9žÉþuN…MŸä꙲ ù m•#Vß`m N:]÷Y’h|’¿3Ï0A?fa¬›±{ùîÕÁDPœŸÆ¥(…a‡ª\EŠÜö V Öµ™«9…1)#k›+ jh.ÏËÍÆx"¡IÝ5AV×…~h8G=xºͽÙ?¯UT&rûˆEe^®ß¼5ä yª‰et=ºØÕóÑý¹âG˜ëtng„[>¸AÛþTÂÄcA;Êi&Š‘½ Ûì³9Ša7mSòÉ`- s b9|}› äù)Ý.u†q¨’å•Ô_„a=ËàTñ¶ž® 1·s›/Þ-ïác0tªRˆùF­Ìqí¾Ñ¹ã§¢usÿœÞ?rû]¯(Ë a¿Qâ°Ö|¹ÇÔOëÙc÷†AQßIöÓòç8oY8„w"’|‘åà Ý'ºXvO÷DEQU>øˆA'ùŒý{›/#3?¹›:ðwŒ¯Wdúðw´ÚkJÅy®â¼Kðè"’CŽP<‰“v—kê—SHª[]ŠÝP²OU K2Nðß'~xÀÿdÁ?< ¢$…žVyÐßëã}IJ^™à†\áÞ8õ¸{Ùß÷Ìž2´Ôd Ÿ¾ÃôÌ&¤¥d?p~ üR˜Wg7ºUp v¹º?~zå™(Îqéœßii 1fd¶ÀW‰O Ÿ¹e`Ò« ‚ÞKÀ´Àäp.z’^³¥XÃñån¶«ŽOóŠÜŽI B AQÉ¡cœ'üôUzš…ÜùÃqBæ!õð{ëš‘5 3è <8_ûül¬ =Jë ÕX]ô1´œáßaÈÞ5 +§U…‘ß1à‹…+rªïÆÁG!U¸ú kýC)gª ¦fcr±Ech4ˆ6S%FÝŠËšk? 3èëy=· ùÐÀŸP:twàL(“u‹ðèg¹‚I/Ów€Ù½c ÓÂíC[/ó¹«JøEÁŽ/‚·HûÑ*Bª;87m]žÚ›fÐ}&‚Á×zÉaÛü#´8X^¾Ù\ª0ØýÁ‡&„büWšWŒÉAC‹ @R.ÒF¦Ð ä¹}|rÞ54÷}éÃ,T‹"zj—kƇ޲iÈ{£M?¦^ÑUf\háC¼õIâî1Õð¬4«Øæ=kÌÜJfêyɱ”6Aùw¨ê«)­E‚¤QI[uÞ…èÉMáS}“eLhŠãÄòÔ®×MAµs­ÆZø.¾ÐOÛâoÂû;™漂Cnq=·ÔÝ­'–×°Æd#WÁNR†QÙd¾'-ü˜~äèP^àÅ· Óª£ûønð€icïªtÛ³“CÎ;X,få+Ù­òª^O×P¬Dß7xa…5ò!ëe|]ž`•„7w½{ +°Þ‹/ á”P«¯™Ž[_>íÍÔû׺B³ñ¾ÜúRÑQéž»‚±ÍÓbñpÑž½åb{eÅîh’¨¦Xi$ 80Êi[¶õ®Ú³mÐÈ®˜Ã hhMdGÀÓÐ$½ø@Ï=cëŒ;Ù ·Áø®*`Ȳ-~êWÈ:ûª¡ÛÃØñ3k£ðnÎÓ„ži!à]1XêøÎˆ°˜}÷‚e`6*¾J抔¦¿¶ˆM†:e¿ï¶øRú¾' .]µî‹CÐüXåó jÿòû¡,.ÜnF µ Á½‡ûÂëòÂ*T¶+-èB JÒ_‚`‹ÊÀ­òk×wÕõí·¼'£õ¦L´»hò†ÞYzPõ±®ýåT»Ô:_5$¬6Xõw¦ƒ&äXÁˆYîq5ìneMÜ(ÝÎ…³åVkÆO§b®W |“¥C³{ðyêg‰¹¹‡¨Pñ£}º$¦¡›ÔÆ*åŠ|ëžÚ6®¯Æ•„&¹IØ‚?/Ä¢}3ÞPÊÇ ’Õï )Xû•zMÖ½¡©zªiMÕ±‹Õê­ÅOD-ƒí¼h¿8ÑjõS½ƒo®Å¬Jì™Ð^°d‚Ïâ·*Ëâ,=„Ø–ÙØþ±Fôfš©õMý ੼F8› ˜f&/:ýÁN~À³ùëŸ 8³S¨þ|ü?M³¬q endstream endobj 165 0 obj 2544 endobj 167 0 obj <> stream xœ­XK‹ä6¾÷¯ðy¡{U%ɲ 1¸†ä¶0CÈi“M™„ÝKþ~ê¡gÝÉ’e §Kúê«§Jv› >f0ôÍGÂarpš†/¿~x7üy0§h ŽÃãÿ/¿üx ƒsþ‡×ƒ·ÓiLÒC’,ž,KìÅ~;|zwh¶ O«!²j'(®å‘í“Á*OQfÕNP\Ë#Û…'ƒE²N>«vBÂ5<ºy X¥4[ìŵ<²]x2X¥ÑÕÔö‚âZÙ.<¬’75µ½ ¸–G¶ O«dCMm/(®å‘í“Á*¡mòÜ Škyd»ðd°J&6©íŵ<²]x2X$ŒcMm'$\ãۙ§€U𰦶×òÈváÉ`•ÆXSÛ Škyd»ðd°JÞ×Ôö‚âZÙ.<¬MŽ’Ú^Pœòȸ¡?!——‚#@nxùyx¿Â8¼|úñlÀà|„³±†NÕŒg3Šøë$_ý|ôgçélY¸ÈçU>—y<›ÛüÓË÷‡ûËáÃUk{kA8Å 1kòâ0û3ØÆ’Oà=#>PÔF\‰„¾Žü±Ã@É›† É Ð…53œá>Q¿Rrv(¢¡™¾EAáØÀŠ*À…Hа_`˜•AÈY,ÁZ…£ç=ÂaÞ[¹8´´Îö “q¢{aAÈà––¼ºÊKvz²:*È®\2AÂ’€ ë0Ъë~¬“§(ø·éˆbÜ ÞqÉ“Åò?û<ýžÎ¶}¨ \S œ¯ÈþJ—¸¨}³çÞÔÓÙB4G¯yÕ¸\ HK^-·Òòìµ wè¡°ZÍïJ'€Å‰Ëèë~Q–Ú/V¾°”ícÈé˜Ýõ$±š«þÜÒ)ãOÈÕ-Y³k @Îbr/R/­»¬šÔUQsPNŒF¬-÷ªj¾–Ôž5^¸’¡1çA/±¡çLäY/¸Ès¬/^fW®JeH±êÙô†™ª+ò‰fNgC¯Œ õ]©|m»¤ó8f Êå©5UÍj_J­˜APZ”(­o4«ããçž 7òcE$l0®9 :¨±ù“§. yÚ‹ˆÍ0­keê åcbýrÚÒtçÉç O«š%vBMbÚÚ†4¡úók,­œ6ݨY“Q®Á>íòàd¨Bu,±¿!ÛŠIáÝßb4þ1£½{Цá+/? óé¶«©G]vmÛ<·t+—Läˇ2Ñw™Øï+™S)ý˜B,8™¶@MŽt«í=[ðÛ—CÌšÓzó#À…Æ:ÂUïqÊù"ÐÝ@±¡Iàê®iu%oo´ð†7Ý‚Œ»Xo/„5x1Þ®x™_~ßr0È{¿¿u>ïH£y5ä ºu¶õÑr·nèãd®æ–YžZ·ÑçŽ/Ö'‰ýÂÚ0Â…"½‘Äy04eéï9ãùž)ŒˆbZ¨ÖÏ"ÙÔ4sýÜbécÖãøW*Z¤2Ü(Ê ‹§Öß²ìÚ•æ±Þm4ßjŸ§4+ðm{3«ÜÐ _,8†Fk`¯êƘ+ðz§ñ±Dÿ±·4ÉÆô/݈óyüݸÁò¼ÑÇ6úšn”èëá4íØ^á¸í¿ç'I¾CvïZ £üd—#¬bò@‡Ë®â©Ç6ë[¯íÞ‚w_¡w@ ÃbUü0|Öß¼ãßÝÄ¿0½»ò;ãgYÂòÞÜ(||=¼ÿîÕOÃí¯ÙþyÌ`à endstream endobj 168 0 obj 1445 endobj 170 0 obj <> stream xœYKã6 ¾çWø¼À¤õ4H2Ρ·è¡è­ÝE[ {éß/%Še'žÙřТøù‘rÌÑNÿþÌdð[˜Ã¦ìí1O_;üôiúç`޳±sœÖÿ¿þ~ñ˜¦äÒqžþ>—±QMt…ªŒA|‡?_>Ô²Èaf¢¬AÞ:ħåÔe‘ÃÌ•ŠsB/ÛÖh|J-³a&*»c9A|ZN]9ÌLTœ)Z•q ˆOË©Ë"‡™‰B íHŸ–S—E3塇v$ˆOË©Ë"‡™‰‚YÅy ˆOË©Ë"‡™‰²A…v ˆOË©Ë"‡™‰2V…v ˆOË©Ë"‡™+rƧäÐ2Ëf¢’ï¡ âÓrê²Èaf¢¢í¡ âÓrê²Èaf¢|ê¡ âÓrê²Èaf¢œë¡ âÓrê²Èaf¢À(W‚øHN…-üC(º¾À—SòÓÛ¯Ów;Y˜Þ¾ü|2ÖÀùÅžŒ3Þ„3œL¬d*_sýÎ/ádæs>™K}p­Ÿ·úy9Ç“y=ÿòöãay;|^iuк­V°UfÕW>À˜{³b±öNÖ)M¡1?SJô(ñâ ~å㉠^ž’hë*:5 ©êOd,~µc¡-´3®¡Ý/Ѓƒa!—ÜùDï ˜ÎÉ®z=é=Ùl¯æ É\³7 àgB-o>c!•³5¤9L2ÑÞM67”MŽB¿¢eÑÜÑÊ=©1'ŽJd© ˜,%E3c0žìÛeLª‡ýz7Z­·Î¤î6Ù´oM(€½¶&Ì’à#GûûüqÀQ~æCàáãÀ¹w|²óƒ“O&pŒ{™l/0ãù/öö4sÀyÔý`¿Ã#±3ÆbÞdü†Y7Ìžò3Éw‡+Úvõòs7ja¶|n’›Ú>³ùópGð°*v%§¼®ŒÙ ó:šW´0ÏÖÐ|J¶Xï+žÝø†èוåÞ±j»Ã¾–H¢·Åël#êg+ /ûË9¢N8|èŒ+È—¤Hø&˜©(éó|Üö,Ûƒ QOà `kñ®¢¦› %Ú£ý]3”ö¢¨¥A,íp֌ܴj31‡³5hˆsšc1Á]ìë¹üCÈ6²éRš ™øÊŸÞËr`ËP ›Ú”útªÍ©8×*(ZŒ·@b]ñ’euxµ?—Gµ;Pç0ªwè–R:$ùU¶Q›]ð»•GK1±Æ¦EâÂï1r½UÍMƒk^&’„¼¹G¨¸ƒFñJyDñZvÛ§Og“11(ŽöcÝ‘œ62¼H;»eeÀC ðÝ›™A"Êë7¡[/IV;›·µk·¯Í 9쇑d‘c¶œ¯å e£Q´žˆJöÙn'@Uò’ËÞHiÊ9ZºkÝR”’ºÁ¡{qvL¨z†dGOh]_ÝF¸õ¢ÜEè Ãvªé­ª6× ásòFUüÊp¶†{[¶;ƒfÝÕB«¥ðIПG\«©h[—òº¯½ü(M.œJ¢+]Ÿ>IlØÜ¾4/ZÞ–"²­°ªõ©†*U›õf©ûÎÜ“¼gýc7lÊîY¥¨ØMÜQ;ÂK Õl\´Ô‰ ¼›®ÐŠNáú³X5¸+€“ 7\ñâ:ê‡Ö†ê›â領ÞT‹k¼fHÍDÖbƒë8aF¼…tµc¡l•Õxíz–7ÜOÌá@54² ÷½Ñ`ű™ô­ö¶úUqáþ¹› ynQ]÷q<“wpÅÌïâŠÛ»âeÀ¡CIq’˜ÜG"ßV“4  ¹å–ë[q—ϧ÷UëËôöÈÜZL%¬ÐQ2¥å¹ä±.ÌHU˜8I—á‘îȲ€m÷E¬Ž½Dß»g{T«û©ë¥K›%š>!ÅhdâŠýf[$6F·È ”º’ÊÊÉ·þŒ[u‹ÃMEöÚ3þÞ ÛÝwÓÌÍaƒ\4ºÓÌ=½Z£ÕÖC'ǧ!%ç1€v8B®ÄÌ>ê(ÔøvA # Ž`ÝÐok˜¾¼éÐGWá*‚‚e `ëÊuPotÓ½ªÏ{ŸI.õe=ïÄÁ¨×Õî™g»¨±FWhS£¹MK06~`<×CŸ{Ù6-º [Ó/HÞ¼Óbmf Ãzúø9K}ñ¢[æÃ0ëé‘‹w=ÒØD Y†'ßÎ[Vc´Ý9:Æv‘ALI_–ÕëØâÍÂû4œ¥ø6f=ø¶PÐ=¾ î”/1ñÍü;ó<·t0úu,šm}ˆ¼ Ç'¥@ÃÑ(j±½`>¬ß;–!¬Ë—QS=’Ü7ø=)? AØg¹Ð43 9jpn/öÜ·Ãû ÇøS<Æ(ÀÐcn=òÔ²bôn]Ô¢_ éw%©ó´>¦,à± FŠë|Hü 󣂴Á“E·[8O/ bý­}ƒÒ®býóq ÏØ=l4ò3“~vzú›Õ Zî oü<ýëÙÌÑ endstream endobj 171 0 obj 2077 endobj 173 0 obj <> stream xœ¥XË®Û6Ýë+´pÕá[¶,/º ` ‹¢»&-‚´@³éïw8ÃÇP¶Üët9žÃÃy‘ÕÿÛýÓC8r“t?Z5Œý·OÝ/ú¿;&P“ï÷¿ýÑ9?„Þ{sþꜟ¤¯}’lü¢DÀF`\÷g÷ùC'Ô…'ƒY2®LĨ, ä±Vƒ-ÓP‚”…#CY‚€qÉqÒRž &ÉM–cp‚‡Õ™§€Y¡´'yH]x2˜%ÊD1LÁÊÂÀ@;SÚ „ ¤,Ê’™j@[qÒRž fI{ÝF`œä!uáÉ`–”Ž4ã$© O“d§±ºÒ 'xXy ˜¥ÑUWZq’‡Ô…'ƒY ªJ+0Nòºðd0K®z%† #8œðÈ ¬­!mB RŽ eÉ€ˆn#0NzCê“Á,© ÚŒ“<¤.<ÌÐF`œä!uáÉ`’Ìy¢fLåˆÊÌ€<¢ð[PÄ@Ç>þãü|ë´²¨Áö·ßûŸ®ªWº¿}þuzyS3°à=ƒ'1ÄáHC·¼¹¦eœáD?œé»Ò÷´ø.Ëo·Ÿ»íÖ}Ü­j@ãÅs¿ªVÄIëŸ&+6¥7+#Vr |´ˆ ƒ{´ˆ-žàÐÇφnì…–(t¯( ,jVÛò¦g£qˆÁ9 ˜“ðˆÝ1!NDŠ3~D6 Ñ6mÊjBÕlâÝ6égpZI4˜ ‡˜¡†°'ícu³@H/´s|ÑÉéyp¨6ÛøƒëqÚ6®å°HÐáh8Qk¬­ÉP§0ë5 Õ†ó;”Šî!³¬µM9Æ£òmœ ¸þt*Eü.Ë ÖP´­ÒfFpF"3`*Wd#RMª1 <;ªU€U1©bI©×#ꔪYüˆ‰M5ͼ@Þ×èR¶‚Lwä´Y«›7&‚-Qö1 &ïQ±nŠÖùi¦ýïÑ6Ó šý¸åqÒEÞ¥´ ÍZ­‹ÏnÎE“æÕT$¯’ƒ*x8Èxa©dÒ”õk J“4šÊ!ÃÝPyÒâ#/]òÝVc>tr «…‘+¥ËIþØ"¬ŽÑÒ'1à=lmËQc9Mè“:ÃY8cÉ®àAã7à·/h”Ôܺ–4,^]a„™tbÁÍY4ÊâNtÊcž²ªØ2ffiQt<¶6µ[å ¤n ¹‹]r6¼hc˼·Ç½Ï"fpïWê–”^K¡â&£<¬)í t» êÝÖ-åoñi™7k2ÞLë>; ÙƒºyÉTCšÝr×WNKªÂæ$m¬Iψú`JTg9?t†‡POÿË;„ýCÍÑÄ÷«Æ–ß=šXè¦y°¾ö Ðä!¾ ËÄýÒ?Àõ endstream endobj 174 0 obj 1430 endobj 176 0 obj <> stream xœXA«ä6 ¾Ï¯ÈyáM%ÙŽ™™Ì¡·…=”ÞÚm)m¡{é߯,ÙŽœI¦oË@Ʋ¥Ï’,KJàŒÝ?§¿;è€Ga gêç¡ûúËé‡OÝ_'8€cßmÿ¿þz ý9v}O,óç)¸áÜgê.S>=™ƆP¾Óo§/ŸNf¹âf¥\¨‚f˜y /VeÔ1áÙW±†.ƒ ‹£°*‘ýRBù¬5²\q ³Paôê£ÄØ™ÏàèrÁ©ÌJ °:´%”ÏâÈrÅ)ÌJõ± šaæ1¼X”QÇÁ­m á2²X1 «Rn\ÚÊg­‘åŠS˜•¢Þx·!”ÏâÈrÅ)ÌJ!‡6„òYY®8…Y(?«) ‘ùG® ÿøZ]ßO„žbôÝûÏÝwìº÷/?N€@—7œÀ‡p¡ z!c2 —·0Áx&˜eâ*Ï›<çK?ÁýòÓû÷§åýôy³«â$ð¼+¡`Ê~éA¬Å‚x :³SÈÌG›„x{›øj ûô8@`ç ]ç uáà‚.—7šœã!;çb>Á]ˆ5Àÿ1L5 'ꓯY9ºäݘþ„Ó…2Íl.N솓7ܤóIÜ¥yÁ˜ÿï*'Lë†8¾v¸¢½ Æç¿ ÀøìFĬ4Ãê˜÷á xäxx“¨LðAN"éÝÎ\ðçtôŠy/ÏË2GÇCÃ--‰<± ªð6j„+­G_DQÝ𡪲KÅIz iÊ)† DšÓ¾ª®€ä¡Ub±²Ù2^‰}Å›J”Ö rÖ46¼Kñ0Af…tGyr^a0”—“Ã`½Ò+²Óz¼Œ–~H¹¯–¤ ®¨A!˜Qûóz›!w½Þ (Iâm@ ÓÈ-Ÿ}(ì‹?Œú‘ÎŽëu½³^íàíñ WŠpå¸AÄÏÈ:¼ÿ¾ƒ¥b‡"ôe܉2 Ÿ:ô|À{vÙKTL}ÀF;p¦‘ÑÎ*‡ZõŽ3Rc9¥ª—•†úû VŠ:¤n El݃}uGöÜ“ç•ý(+ [?§ÇGó9Âö4`fŒ‡zï@–œO½æ³,Ç7Aà Ø—sö¤²æž÷|°ü÷eCOÉŽÁ/lÛÌ3éL¯É*¶ø¡\þñÚºÿ¯m[IÖŒ¯’»!Û‡‹Ÿ!ÐB.i¤×šx·«ëò,k´Eƒ¢GL:ÍüëX4nc•c=|(Úå*sànÃ2|Óe–Üæûíls›»×Ò•³çvDMšˆ¾ä_û$ ¹µÒz•–*û>ˆ&:hµKI‡•c[›f³ ‘&Â\öë‰Ui¯¢lÕ.Å”{³_Û ôk õä¨A@V·ct³Ók¿˜ ¼õ@=¡ ƒLX¥R«÷æµL¸Í9”óªúà9ê6%Ðçî}JSäðQ«WíùI÷µà•î%4í¶–V¾™U&µtPÃ2×ZÈ‹Ò d+µ»\œ“gòOG‘º•g€ÕÙÜh¡u"Tjí›TìªXÞvÐæþ¬³Ñ kºN_“ÆÆø–Wã—rF>î †kó¸ñf–0Ý,BeïMG*måËÀðpÛÀ(·OºDãlÔÙ&cë¡\µk{­‡ˆ7“½tÝ¿È1ßœGÛ˜¥7†û0/•<ô|à\.Ä›MØ )¬±¹½í9¤™§ÖH1Ñc àr‚õÖ_÷ ùÔ·q_R:­™ì?¼¬… t²/c†Òüæ ¶//+TŒOÀ·/‘ –2hßãø8ÄßÍ–l ½¹©SiÃYP‹U=B‘‹&ß/ìýµe¯¯ö^›äЗ×KhJ¢U|Ý\9¿PLŸ>ö¼B×Ëæ[GòKÿáçŒÔ?#¥Í:Lp"%)†ÝWœ’h× \Ç샒°4å®ö Jz5Ž«%:EÙj}èTé£ËÞä¦Ì‡’Îã®ÛÎØË§ä§ûá‚luX¥‰ßQÞàúåÉ5_¢Ïý@/9Z?wÿÿ±ß endstream endobj 177 0 obj 1551 endobj 179 0 obj <> stream xœ•YI+E ¾çWô)ÁvmÝRÔRÒIÜF‸Á!@‚ Ûµ§æi4™v—ëóZ¶+þ=ý=Àüä&w¡a´x‡~9ýðÍð× .àä‡÷¿ÿüzrþÏ{ìðçÉ™ñâõǨQ˜RÆŽˆ|§ßN_¾95Ë'3GʬWÞÚ‘¯ÅÑå‚“™#å,æ­ùZ].8™9RËÆæ1ñ4¼X"c|¦½¤L¡\ ‚.ŒÌ)4C;"òµÖèrÁÉÌ‘hÚ‘¯ÅÑå‚“™•r£¯íˆÄ×àÄåŒS˜#LAiOƒÁ‹!2Æg7U‡ö„r5ºX02k¤¬«í‰È×Z£Ë'3GÊPuhOD¾G— NfŽŽw;"òµ8º\p2s¤À6¦tDäkpŒÃKõq¤2Ž19ÒÖžˆ|-Ž.œÌ)²—r„z"òµ8º\p2s¤.®líˆÈ×âèrÁÉÌJÑä/SÞÚ‰¯Á‰Ë§0Gj4—’¼=ù"Ž–^þárzÿ8ZfÁ?ß¾p@>¾üxšÏxÜLWðJyõÑÍgw…i¯pÓwý\ôó6û+<æŸ>¾;=?Nß¿I5@ì µTBÅTyòA¯¤ÅqvW4$—˜÷„¸ÀÞÛb‹%üèåc7A«4(„¯øœÏ ñâGvÎÄ$uhâ†Àঘ„WòâkF¦9½ÁÉLòG9˯™Í„+û…a&ñ†¹Å÷‚ˆx4`•%ޥĒÅZ&«ÝäÅl§œ$L¦ þçª ^ÏÁŒ/Ø Ÿr%î}Õ0âM¢›÷1ï’ÖHÒèœ!zø ¡É‡§$dÊ‚Ä Eål5ü*«c§CGø =_a£#‘F¼ÃÜÁàˆ?ëõñûf*ŸHï¤íwP@Àã FXŠ Ø‘ëÚÓZþñl㬵9TEÃF¼ÑÄàOβc­ ®Íë¶CócéÅÉsB¢ÌkØÀæ½Ø[dÁC|§ï9Xl~À;¿7¼dõH€Óõ°³A[NÝãóžxÃÖÒE…/Va¡Là¹-˜fOðºgÕŸì‘À±šX]Q•x×Âküžß Ò¡êÁçxe5Ä‹*´0u diQOD²Â¿,òÜ›5tkˆƒŽæf†øs4\¤ò³„ÄŒ|zT!QDËŠªÄ]<“yXM —e Þð ŠŸDiǽàHM;åüøE9G"N%ÄŒ‘Ÿ£És8É ¢pñ¤zp­,ïà΢’χ3nUF¶ï3L+ˆ#ÚJUùª¢`6Èx±ªËè¥_JãE/ÖÍXàÌûñ¹©º\ÇR›S‘mʲ8æ­\–}±Þ¾RÉ0¥*›¥.•²\„ÜE‹Xïƒ<¾j/ˆm¡U¼ »ÍŠ‚Ì0[^¡ûûÐ"ܽwçä”\#‰ðí€g7e?¢ÝnË·óyLjºW+MòArö2!¶ÁÎqÚõóXFÔDoשezÚ`t¢ ÛîNÃ7öM'îµ°˜Õ$Ã÷îœe>1gmAÔ) näÓ°u“Ô´×M^`Sâ±Ð%¾¹ÏFÆ/«ÃUÃâÅséÈ&ÓKÄ®ÈYX#bs*ÊÆ<ÌM†KÐøƒG‘r ­§ö”Lå$ç"ÀãV© äÓ:×#SËDS,xaêqÊ¡˜j¦\â‰O3—iO¿ë’<­?i'´Ó •©?ýÙ†à-ÏZÆM¢k«Öã­ž$ž1‹v”|¦ÊôÊ>9Ú‡¡ r ëC‡¹™Ïh¦©!üsÈ¥²™‡³CÒæ\G›Ã.M½‘u›¦ì (‰c jFs«%UÑÜÊmŒ?S]_C在“<$ß?kDÙH>"c«´T]ÎÅ÷æ]-ÅÔt/<Ô>•XÕ¨\³—7òº½Z¶–sö”›É«3)gÊa¸‰Ëè[…¾Õ»Hj«èн}‡ÎÊ¥#‡ùغO™ÙX°‘â5@¾¿D×ÊÀG¬\ÓW˜ÏÞù¶®fêà7©&N+«¢±ÓiÌX̧ª™Ædpzñï¿r£zìQ¨mÂÔfq|ÛA!# n…d÷ƒÓ_î ¯c°4ÉbÉCFØc™ë]Èóý€ûÚÁM1ÉÈYìnæØcÉ뽟²VÃF£| µ¢?8=Qähõ­„]æiZUªµèÞž¨2x6ãïý=Ñ]ú"«Înñ¸SÓW*»…ö¶­Ó•¯#ÒÙ‘@Õñï¹]‰ÊAÉMiïë‘RAQ­“BêoyŒUÔypç 7"ÞïÇŽŒÉœ:‡¹o mÁ‚æžï­\wè¶>Ô<î©'[_­kß×$„ˇZŠßBËh‘m>=1š\O†½î2ÖxMï\]ÕòSÔz¼uó$(¥<]_ýõ!#ª“»Lêd•ûHBmᭃ˹iGÌ—¶¬zJ™dú~º‘d±û7«Š Ž'àªy›ß½ŸÒ(ÓÄÆÆú•¹é¾Bß½çî(@ª¹¡ºñûá?ü FÊ endstream endobj 180 0 obj 1956 endobj 182 0 obj <> stream xœ¥YË®#Ç Ýë+´6peë ô\xgàYÙ%NØìM~?,²¬nµ®Æaú6›ä!yŠ]8˜ýÿvìatç³?à>9sHû?ÿµûÛûßwpÈ`rØ/ÿþù.Üþ··éªôë¾JÖIl8 b·ûÏî—vJÝqš±Hh(¯æ: b§qXÝqš±HéÚ\'Aì4«;N3fÉg×Õm³EÙª¡Ü'8 „I`+…ÀÊŽÑLE a: b§ªuÇiÆ"y;±Ó8¬î8ÍX$›¡³ v‡Õ§‹„ÃW€ *ƒŠÐIÀ+;F3eÉå4„j§ªuÃéÆ"%?±Ó8¬î8ÍX¤h¡³ v‡Õ§‹äGUê¶Ú( ¯*òªç¡³ÀV •£™ŠdA±; b§«auÇiÆ"™¨±Ó8¬î8ÍX$°ŠÐI;ÃêŽÓŒY²š£ºm6£(B5”û¡³ÀV •£™Šp: b§ªuÇiÆ"¹<±Ó8¬î8ÍX$롳 v‡Õ§‹„#u[mªLPåI: l¥@¯jÝ”%Ìj!›„j§ªuÃéÆ"%µÍB^®j¢î8I¯jÔB6 i¹ª‰ºã½ª¡ïtèÛ°\ÕŠ²#xÅ‹S Ù,øyUeÇpzUCT Ù,¸åª&ꎃzUC£²YÀåª&êŽcôªf²ZÈ&¡Ú)Q7œn,R(i¨0’BHÊ?â(aRGàýhsvùÜ¡q¤ŽÑí?ÿ¹ÿñaö÷Ÿ¿üýðôaŽ`Á?ዱÜ&¾õ§„|JG8óƒ _¯|=ŸÂn§|þ´»î~^Dµ€´•\GEد\àQ³¸sòGcU$_·‚øxðÏ‚¸^ ݆rÙ@ð¥ "S˸G` 's4÷Ó]¹%r6 2Ð <ƒ@Kñ qlKQ” ‚*/R½ò€Jÿ`cÃTã2"X(#²Xn¬Ž/*~j¿¨Ž—™ {;*$¦9¸£ñ2ÊæQ†dÇ6óuüPé‡ãFs`Ÿ ´÷óèðŒg°˜íu™Ë÷É­Š÷ßP¾€ðÀ|/‡ÞÙ%‡`¨Êûн«½ÙHì]íÙÞËßò*¿ÙdÑ⻜bþ˜Ɨt˜ðýœº”Öœš \0¶Ô+p_°ê¢o¬6@J"P:‰ª¼$8D6­€Ö8ãéÌV7˜%{@+(mÀaÑ8™MöCgçÒê}龞2m’Vžow|lË|Îu091Üù¼ OM?¸v+Z•TP¹öÓÎp“ó-|þ¢Å;:©¶ÅFO§Sðg‡Ó‰«Ž`S> >a€]Ó¶ zyl*ßÇSåi®Õ:#yup“Þœ{á9õ£ÚÆ!=nEÁøÿ|WQl!¯\·SycŸ8Ž{vúØ·ù¥p#ä ,ÇŸ÷ÿAfmn endstream endobj 183 0 obj 1826 endobj 185 0 obj <> stream xœ¥YO¯Û6 ¿çSø\ ™DI– ’ç°[ì0ì¶uð X/ûúã?I”㸆¢~¶DQ$EþH*îì‡Nnpø–æt†aŠþ< _~9ýðaøëäγóó8lÿ~ùõ”ÆsBœp埧¦ó¨_ úâ9ÑvBwúíôùÃÉLW>…X¾w­K»¡3|`‚Ê…Þ §s,Ëú¦2x²ò(¤ò•"Ú¦,ì>„N$aƒâ?4Òíý>"AÎqxÿyøîáÃûçç\>úÅ]ºÀâFþÌô:ñkº|L‹›/Óâ®ã3Šºq3Oûù¹Ì0{™f™ÊDõÚ‡Úá*‡¤f GR}„*[*Ýô\˜¥ê*Ù”!i¦f§`'ÂM—Œ­}ñâ&8Ûê¶‘‡,9’$EÐqñ±±0æ"›®b–Ñ(×ø¯8.Ê,¡‡þ0ân`áÚÌ í0ƒFýM#‹q.fþù+ˆãC‚± -oìà­™]ÀlµÖÃìÆuTÝb,Ç„£ˆxüÅ«ù ?<Ÿ‚ˆVE÷ÄÍED²gÑ*×ÜÊ)5–[×E.UŒëé©}½‰Ù‰:(\«ž`‚ÒÚ­‰£Ï{‹_^Ü”ã¥:tìÏ[hPГCwc™ƒBvoSö¥T}R´ŽYQ"X5ùÐk”Ì ÿùXH—03 v¼qõªxvã³ÃØc‚²~öoޏ¹¨¨ KÙ¢wÔŠd”iØ1Qv×íÒ‘g®JuõÇŠ¥ìŠTÕúáÞyVàäH˜ir9ƒ‰‰‘†PÈĉ*Ô–óX-ƒæhKöxrópzixUñ‡66B³tTÌb“vZ´oSˆF[˜-¬"ÞTÙç¥K èX¦„éÅ•œg4݈ 6GÔ8|jfÑ"Æ  Ê©šÔseZQŽÇaâçk˜Ö¨«pJQu Ž-ì[†K[lÔzëÖìªÝîZ¤0ušGçNt•C‰óËŠª§r™I”Co¾¼ÿ¾­Ð/h¨”xl])ªà84„Riï­8}MÉãŽ4QžB9ÕºÔhWêÑÚB¶V­ô¦*a¿m³UEŽÈž'óDG+²ÝÔÔÎ5?ÊèÕ q++Íbr eZ|%MLySj¿§tÒ¬´ñ«m^÷Õx (WÍ…6㽄GñO}Ïñ›¶Àø „KðÖØâ1õšo(tš3¤×ðdQ?µÊÇÆè¦»©6¹»ø„TÙû âhõ!î1_B!8n×£‹O™ÝaÚä³À^Y€_ð{'º IsíÞî&ÁtI°C·‹c“mzZ!™—–}1þ¹ÝdÊÀ©›SñÖ±«•YuÔGž]ÇeÂÜCÍ>ÅËk9W/¾åA™¾¼C ·QµmáˆÌ `À¸^†UK @Gæçž`_½µë¼9ÜËMÛúº"“M°íÛfnî¹ßœÕy§¹Õˆ¹oÇgßH Ûu¥µæ¦xÀœ-ò¨¹Äw…y·³ëšÆzõì*|EVö ½1°“’q~òäÖtjL „Ý ‚Ùª62É×Û{éˤYÏZ‰Ý>weG'O ‡'rI±ÔP‰^*ÝäîøõW: wƒŒc#â~†Û‹:ËÏîË×[ #Ì=Á7ã¶K18%@·{MyÐvÌ”C˜Š“ÕÁ‡‡Áј߰DÁÏ;dŠáui‰Ì€~è˜EÌçp·8á˳ñ#<€¾dÅG|#ñ͘ÿÏw/l˜oª—<­3¨Î:v`¸=W%‹êÕ®uF…§6¡õeõ>8í§±R]Í-™õ'm÷7«­µËG»1]ÏW|2l‚fuÞl¨ th¨ L8zä=¦’æ+à .û»»!Ó7Ë #ð+#"í³„<òoiO½Nàà%" t ï,lÍQè~¼yùËÏ €Ï=˜VæÓð/ä±ø endstream endobj 186 0 obj 1890 endobj 188 0 obj <> stream xœ¥YK‹ä6¾÷¯ð90Uéa C?ìCn 9„Ü’MI {ÉßO©ªôrÛ=aÁã²J_IõÒ§^s†áßÓ?ƒ ½ùèÏ8LÎÓðí×Óß ŸÌ9ˆaØþýöÛɇó8 g;üuòv:•þT‚‘4HbÅN½Ó璘ߚ႓•E2ŽV—§v‚è58ÞyZ}Æ)ãx‹´?Ú ¢×âðpÁÉÊ"Azæ© z Ž]ƒ#RƱeu¬Ø ¢×âðpÁÉÊ"y8û2µD¯Åáá‚“•Er¦º¶D¯Åáá‚“•E©ÙJ'ˆ^‹ÃÃ'+‹DÑuej'ˆ^‹ÃÃ'+‹dB³•N½‡‡ NVf £«)Ü ª×àÈpÆ)Ê"M¶n¥D¯Åáá‚“•EK·¯ªÓ`Œ5UQÞƒiöÓ ¬ÅÜèüíý„8Žnxÿeø~…pxÿúÓÅ€Áù .ÆgüŒXÓëį~~óçéb®üáÆÏ;?¯s¸˜Çüóû§åýôecÕ$÷>[E`L¶—h̪«XfÛXòª|dÄ”ã;F\Ù ½†ô8@ ×MÈpŽŒ aÉ7xe†´Éü !½’£àb¤8îÂ…²Ó+ZÝŸ¥§W0IŠ&{NÔDcš]˜Š†ì.ZhœÎÆ/˜·bD¾²*Eò•_Â4RÊm³†Ì²š¾æÕM*ÙŒ%ŸS0‹]ÄÍò²gÙ{YŸü…·9a$mž³„µ‘SSM,óÛ¨Ú<4ß× ó–‘yKúÁ«qCYßÁÝÊ䜗kÙfc|Ç)ŒnÕ”×ÉZ{©¶x ˜¢‚j×g‡ˆÊXÛ{U¹i=2`JݶÚÐýÀÊ%‹Õ µ‹'hA/3b´ôì3b{ mL!Å-r¥/.¾6âÝy[Ñð˜%5y§X–L~ ß1BU‰š,í<]Ñ’¦à$À8&…Þ]’»ÞY6mæ,;©’bVl$Û]Î[d=¸YåB³ŠˆÕÎ’¢Æ ªˆ¡:º5WNÍ&‹Ò3ºjáVýö¼XrHõ^ë%Nû±Viuëé‹áe¤‰[hƒqi»AЇ½]MÀhVúâM 3bÄÛüþÇ Œ‘øWƒX[VíÛ.~.„¬8Õ‰M’&—]œ[šT×q‚G$0QénÛvgMzâji÷I| &:ö·,`&ñéÌ\ÝÍMôòp®È€‡PïŸ9Âa·ÇÿÛÉõü]—`\mÁÔ°ý¼i¼5÷ö£ªjNó95qAn·P»r «¯QMÊ×Ùï`ê ûs6çÕ‡œV£viŠ<[:¤>ð™ã­Ïý·dN¤&q£â@¸%áG*“Ë…VÖÒD¼ÏáãUNyLw¢ƒº47j7z'3µ*ÉàDßÒðUŽ9âq“eö±==9”KbIšMìŸo(jQ{:•§þ_ê)ߦaJˆÍiú‰éTÐ)šûØ ÔÆÚ¬D±k¿Ñ “B©> stream xœXKÏì& ÝϯȺҤRi™EwW©‹ª»>v•îÝÜ¿_0L^wZ}R&ÛÕC÷ýòµS oÆ›^wãýØ}ûóòëOÝ?i.ü}ûûr_4 ½ëœº÷ÝÏ/è@wï¿~›(=_aR¨ef=)Kÿºø:Ò«™¯fR~'u£;=ô¼ÍvRÏù÷÷/—å}ù²²ŠJï¶V5N²Z©{±Ìf– 1®7{F†²“ðjãã@ƒ±7‡co“ ÝiE*PÏ0Á2_õ6¼pTx°§"ü ¾ÓÚ F‘Æ'ø€_VpÆ ½&!˜í8¬h ¾Â#(àqHJÃîB‘e<úøCÊÄéñ [ƒê‚vF7¸59÷sx潄ñ­'"Äø©hÍè†TóÕå.AÈfÿ ,u|ô.Ñà(^Áð/Í¢¶BŸfÆi/)¸D&ãîIcÉ ^ÆÞóLÖu`®‘™‘÷esÑ,²˜ j’ÈóÄߤº%$W²…4XÒ >En18r<㹟Ӷ@ZUMrJ€žÅEvˆ¡ñmðÔ§°£Ï– (¬&C|Æ<ð¨ÃÊwp °&~Ð.£šä…•ë8”ˆ°ÿK*%4Ÿ 3(§ð–dF%UÅTT,¥—X˜Ë¾ˆâr“u&I€É0VF—íl(?d3Í#ZsƒÈp2§úuU\çìT`7\J al·':R hÉàË¡ŽæêýQQ>X V"…1xcÛsèÎ[¡s('DLfÌ™[ò-§4IS’itI>ÅIè'DJî3b ËÁXÓ}dùÁ¢ð—†›ƒN˜êµ•N¯#…F[Yg–ZT"÷¨!ç¾aäBWNræiõ͉L©&ò²ìÏy$Ñ…`ÅÃ0ß:bªœ´xƒ'×,#¹ÏAäx-቉àB÷³ê|r£sîÿÎÊÿÄÄ|°a#º€aúø\E|?#å'ׄT?$d9J¥+|ý±›pÍ×±ár:çijÝz-º{»ÿÝåÍì>ch_Ö¥9î×YÀe‘ f,棌§LþT ÏhÆaSŠõýî­„9x’½phQWjaÜÖ–I¥û­w`;‡"iÖÈœ¶žƒ§(Y³Î5õF›u?@h¾úä´w§ëèóØùþ}’ ⲉÊ)GëÓtSÊÞµÁ)éì±øC3±WëƒE•³wAcÑÒ¯ˆ®ºêAHÂÜ/R³% ½Û˜Éýó 4[+žX!ŽÝ\ev½É:Ïãj \«ö²v•û¹¿Îµ&’!lKºùˆf;+ÿW*~PÛѧ©yÖ Ð=n¯ÿ©ÖÕŠGœµõÆÑ6‰â^CQM³/f„rß×ûØwhÑçÖ½2wʶ¹µ7 Ý¢lÊ\½®ìÓÝÿ&T™UúqðÄ1spG‘úúªÂ!vç<ÒÎÒ皢>\n_foaýˆ‚ÍG•Ã/2è×Ú/Ý¿#òå endstream endobj 192 0 obj 1160 endobj 194 0 obj <> stream xœµI«3Çñ®_1gÃ'wWoÓ ’Þèà›á&·Ä ! Ä—üýÔÒKõ,Ò3æã¤š®}ïyæl§ÿþ;™Éà¯Ã¦ÙÛó<ýþ·Ó/?Lÿ9™s66ÇiýýûßO!žÓ³=çéß§àæs,п¦¥ùìbļÓ?N¿ýpRÇOE(zĨ¤ xš7>Y `ÑÊJ:‚§ùðqãS‘rééžæÃÇOEœx‹@ð4>n|*²@Ö(×€ài>|ÜøTd†BŽÝµPð9®|²@³ë®ÁÓ|ø¸ñ©ÈÅÜ];‚§ùðqãS‘ ¡»vOóáãÆ§" ä¡»vOóáãÆ§" ³òóžæÃÇOEÈåÚ<áÃåX²÷ÏXJõ”üôù×éǧ,LŸ¿ýz1ÖÀõ›½g¼ W¸˜È`¢Ÿ3ÿ ×oábòu¾˜?¸óçƒ?o×x1׿|þtZ>O?¯¤:¨ÝV*XæÉòèŒy-k¯áb’ ò‘@U³#Ä7Kðg¤è¼yJì\ffáàj/v¹~C3þDç°È{è.‹YŒ´çñ13ÉfˆäBG<éùÖ Åxw±Ù .0&qñId6tfnȉA¤sE€5ü nIdÑl˜E[´£q¸“Jx|`ïÐÒdÃÆ^$›»81"…”¹ÚT¾?XªXPÃŒ¢óFÙ—ÚqtŽBBE# VÑKbõ€äSíaóõóŸ{Ä7vªšÚQl“4M¾bÊYô# ¥jMT˺ó( «G·>™ÔŒqù¾+Ä[Å:RÉZ³J'm‘Y¤õ¾LãëÆÕ“c)²ƒnw|û|¨Š5ã(­õMs‘ÞŽ-i¸¢——ßjûLk¥uø·F$œé]â¡iÿsÃ?Æÿ«v ˆË þ<ý8KÊæ endstream endobj 195 0 obj 1946 endobj 197 0 obj <> stream xœ¥XÉ®ä6 ¼÷Wø {H­6`èÅ $·CÓd9M‚™K~?$%S”{9$x€ÛÖB–ŠEJzpÂáŸÃ· ·8œƀ§qøþûá熿Jý}ÿópù88 §<ä†ß†OwÐ ü2‚[Ž8ƒ‡qq3$ùÌü:Êk\Žq†ig8KÃEžWyž—4Ãmùõã§Ãúqø¼óêÁºG¯Ŧøã‡¸W+âgôÆS¬ƒ_9‰ùŸ9 ºzMüxa!&â-ûñ”Š 78Þ-8ãºÝì^‰œ&& <3gž7.¾Ñ‰³çG]]bëko´~b¿ =WŸ—c˜q”<Ü%1AF2X¸3«Õs}sËæÊyrQlcfªËëiöuàE‘âôž4ðÛŠ•w¼ˆÇUBKü0äSË·†òûÂÂÄâi¼FöÆb¼‰›;L Faî.ÂÊ¢,Zõ2H¸EƦ‚ƒ<;áùûGò O×hЗոš EÄò‹‘QŠ®‰E7ogVFËJ*„oTÅX ¯ß(Ti¦ÔàŠ/I“êöÞœwž†UÞÖ²òÍgJ3o²ØcMÀ€ýHŠ¢ŒðòDG–tM ¾ &“¯&âîjXYß )=wBÊ=f…Õ+…<wŒõ^õ…?Åy¬±ò“Z æ.SÒ0Òb“‰V¥£S°×6yrußÅ|íæs“%e‡¬,ªµ•Ü7l„4›m9WuɵÕÌ?w³kpxt ¸q%hh¦²Ðš@šV%ÚµÙ” ºÊƽÕdUw4âelÒQM3ßÊ%?dä­ê0qÉåW·ílD=H‰&¶¨&NÅë”çÿ”e gs–ù"üú;ÇWëXœ¶º%OñŽêÝȃmn†jú)°Éÿ/Ĭ ºh2®Uën —Ö"‚Zi;H% }k›$’¦&—ÛÆl‘Ž{4ñ¸Þ Mü–Ñ›mÖx£¹°£)ðV7ÉÑ>½SN­…Ÿ–¸ÕSmbÂbñ—Ân cJÚ íœ”@[c1Ié³v£›YD©¤zØÎ=X•Ýð¢;œA«§(ÕVÅœ)]1jp.tû@I‡ÈvmV»*2®2iÔ%e¢j²ŒOï5ÙX±šl–olò~BB©uì׬bãø­4Âxz8¯ªƒ–¶= ÙÈF^¨Z59JAË® ç´u¸Ô‡‚ƒN*Ž›T ÍËf¥Z–2˜7p­Ûjóɤº%e§ ŒÊÛ‰ª3©Pѯ;‡¥è…Е`k!7…¸V?ž‡ØŠeTf¿Öõ]ŸŠScø­|x<õ™ [< ©Œð±æð¤Š•T«¯}®òÑÌ»6AÏ[ Ö-ÉÚij?¤Èâ¬4æà­ొ¡tøæ´œccìÜ^KL~­…Û^ߤXJú°]ûøtpèÐïøÚcT~E*;nw¬ø›[ØËÿ­*<S·QÐ벊Tô'ÄSåuÉIî÷tyßÝnËÎóò˜äè@ŸMl·nßÝÂ_^áß ²Nü<|ˆ¥< í²q#ÿ;"x –öO nÄ>÷Œv—¯‡O?~Åinlî_ª9›› endstream endobj 198 0 obj 1206 endobj 199 0 obj <> stream xœí½ |ŽÿV­—žckÏ9½·¯S{Úž¶/-ˆ@ 0IADA Š\LDEäT«•ÚbQ@P@#WAQ —4"¹I¸b ãþ¿fþÎo³—ÙÙÛóìÎóy¿æõ¼æ™ùìì|vv÷ÙGÓ@Êqòäq„” °KÇ» 6T;šô: üØåê5«{äÜÒ¤E:}¾õÎÛ<ýš¦Í 9yʺõïvï•C«d÷ÎýWI1K¤Õg¿ø"ÏLqJ1l¥qóô¹ö­µv[y~֬ǟ|Ò\ÉýŸ|Ü!#Ó²þTM[¶êÛÿö÷·o礚÷Ìýæ͛ìZš•ÝËÛŽ°TfËÖ-™Ýof}ïŸï wïÙõ‡Ûú7kÕ&oÔè#Ÿ¶Ü„Y Ë¢k%VÕ²L½Ô´+e¶"Ó¢wÖ½£ß%ÛJrúô¥rné{ëöÛ½íˆxí »$(óøñЇ'LHk}}§.]I@Ã*{ËJõ;KfË}aYv)úU ëRýo0T}ðáñ»vèyç" xžírcáÆö3Ö¬}óèÑ#«V¿Ñ®cç­Å[Ù"ÁÑA‡ÛŠ•¯Ó2yÊÓøÒ›ºu?|ø ÅéóÆ›ºðül+ä’|+4˜·B^9úÌ•,-ÝCã§¹>æØÿÔ¤I4ʉsÒäñ…¹shðql©Û`©Lþ˜1S§O§¶SÝFÞ7J8dذW, ê-[þÚ“O=%)…eQ޵«*.sþ¢…”.³ÇQ ñS_ ª¶ÑØNÆnW*¶/,ÅeÎ|᪭²|Å :î «PiTC¢xË}aYŽŽá+ Ò±OzÒø@'BýïDUò¼¼Ïv9täHøWšÒ¹4‹Ë˜ztÒË—ÒqMnHqú‘—ÏóÓ1nØ ?êyžé3gz ’æJÒ!Fî&c—ú* º{(›ÆReØ!¯Ïi¨9‹Ð`õèãëχéЦl4“¢Ó~šÈï}ù]oÎþøã(B§Ó|Þj™Hgþl"Cc#M($¥°,ʱVbUeÒ”ŠÎ4¨†2½Â²EúUh:c¢i]Ö Èªx9–Üjμyì -ÖûBœhYfßþ·óË#<ðÊüíé§'MžlX*^År_X–c¹®eŠá+ s_~‰ÝùáNËÓc„Pƒg»¼þÆŽû>*ç_é„™¦,.c—»÷ìâW\i)=ñŠÓ'7òü4°è·²·¬”Rôe’WÒ<Âî’å·Üº¹V4À²¢NÖ_Ó#£±ŽjÈ®éñœ”øÜŒúy1}Ò ¼ÙÄiì"s§Ñ{é²ev'ä–A¯ ¼lü§í6kÕFHvÛ”¦ÉM[¶’”²(ÇZ‰U”ùø“O꯺‹·âØ"Ÿ o½c»THç'4 6´eë– >Ú¹k·_´©(¾ûBœhYf«ö7<3ujzÛöÝ{å˜/YÓ™'uoÊLgäJ2«Xî Ërxpk—tÔ——— 4A@H@ðl—4oÒOè(®ŸsÙÝ€à¦c4ÿâù™CQœf4”éMG¿ý¬ò°y%}ŠÛ(°Ký½KšTò{"ãÿô'oiÂhÈIÙÈRùM"VCÌ3¦ƒ‡Ü=|ÄšµoÚY¹]Ð+sm³4žÎã–‰´¹å+VÐT‚ÎÃõÄRXåX+±ªve²Ëìâ ~+â±éŒ¡ 7R÷`·˜)î(5횤®ŸÇe_Ø%ÚÕù‰‰©Ç®Xù:UÕ° »÷A݆øRñ*–û²AçÛ¥a@@HJðl—t¾Ç®ó°@ç~†yŸ>R¶oåNÄ—Òt•N\é°éŒ¡4¡DÚ:¥f—†vÑ)ÙÿýùÏâÙeŒö…e¢]õ¨J¬«S¢xËe¯b¹/,ËáÁ`ú“mKqÈ|Ù”œ‡ýŸ|,¨9BÁ³]Ò™³þ®âÜ—_¢Ûåî=»ÆŽǧc|)ÍÅîð¡;‡Ü¥ÏOìKyú™g&MžlØ »äEEÑÄÐp4ÙmÝ.}ö‹/9’e³KQeJ˜ù üNŠ!'ÕêÌ-^ÌÊt½9›µ‹ì˜â‚Dhž.Øœù~™ (»Z‰5±+“$zyþ+òm·ÈòÚ–ï]öÌýà sç1qâ3S§’JËW¬0Ï÷;uéʦÛëß[ÏOÅ«X¶È²舦c:l©LòM:U6<ggcáÆëoì¸rÕJ:*i*M“wñMp„0‚g»øðxËzJÚåÎwÒN#2–6Í6çXåd7h† Ææ8tL¥]Û,jn¾©d–ÊÐàOgÑTÀü4–‰TáoêB›¦ñYðP„¡!–E9ÖJ¬ª]™ÍZµ1ܸ÷ ˉ/\“KR‡¤O;k– 1Ú‚dW&í…a÷æ±ók2úZšK²Ã_ð¯bÙ"ËrôXª< ô¹èÕ%bqNÖÿ2…6tþL§Öžw.‚çàÇ.“ô¾Œ€€€€€˜;»D@@@@@H|€]" 8I»L5Jv€¨»Ä4úšdWˆ.°K@L£†$»:@]bY‘ìJÑv È—]H9¢ÿßJ).)ÉÈú꿲{çmÞl™¢…c—÷ŒÌ3'­¨hß9ƒµ¬ (ÀÔ—RV¾³Ásæ³êyKWé#²ï“CÏ,Ù±§Œ×3Œ­D–eËW<8þ}Êð¼ü…‹—ÔÖÖΞ3wDþ(Ë-»d~­§°hSVv/}ºee@ÌvÉSÌ‹,Ù]þñÛ…[ô‘!¯$Ç´Ü\*ðÐ#–¿¾RŸÒ1³kuu5EŽŸ8Ñ©K–eŠÖÐ.ix×°áMÓ[“µ}°s§V?ií?pÍû Hq­¡²8}N>ƒ §lo½óŽ~†Ë{îÜê7×f÷Î¥rO²BšþãÙ)×lìrÚŒçkjjÈÝX±æÙ¥>?Ã\ZºbÕª]»÷Y¿½î]^Ä ²¡Íïï<ÿÅ̶4«Ù%EŠJvPÊi¾B;oéª3ŸUóÈ+Ë×”ï?H£eʼn“d‘–«SJÙþ”Bñ¯,%üòË/i­—–½a®ž!Â7—R”•—÷Ìí£y²Ë´6mÉ+õ¥Ñ¥TUUQ\³±KòSCŠeÝí’•CJ”Q†lˆÙ–öµ%YÚ幚Ï)R{þüŒùKõ«›o\ž=W³uLJ«×Í[¶ŠhXR¾ø¢Ž•°}wÙ¬…¯­ÛT|üT¥eõô‘”ºqi€¹OÇÌ®§Ïœ¡Hee%Å-S´†vÉÍÑœR]]Mfªé,ŒRÌæ(o—æÊð¥æÄýeU]’ÓQ¤¶öüóó—éW7߸\üÆÛ–}tðÓŠS§Ïð «îŠ8|”–¦–;K÷ÙUERêÆ¥V1vç®])Ý[6`ðŠÜ;jtÁ‚…555ó †çå[¦h í’]ze—U»õÌÑêï9²‹±ÏN{Ž]Œe7(Ééh‘]^Û,Y¡}Nse`—5°´ËšÏ?7DV®ÛXU]]´íš6êW7ܸÔê/®Vœ8Is̵6ó «ë7úÊò5eû|ùå—ïï*½h¹]õX$¥n\jõ¿Ë ƒ#/»cÐ`öLNaÑ&šµ5NkÙ©KÖ–âbË­¡]ÒŠ´:ûq{ÔçÀƒ·Þ>€RúÄŠe·[ßpãü…‹ììrÐÝC›¦·6WRŸÓ\Ø%@ ÌvùÚ[ë§¼ªP:MgÌ_J)ÕgÏiVwy„]\%ã#ûãvi·:ñé±ã䘔¢Ör†«¥êKà5x$QÒêÀ°KH<°ËȲc×G2!Ù–Edf—Ž8‚8‚v)tà@ tà@ tPØ¥<Ð)Ð)ÐAa`—ò@¤`@¤`@…]Ê8‚8‚v)tà@ tà@ tPØ¥<Ð)Ð)ÐAa`—ò@¤`@¤`@…]Ê8‚8‚v)tà@ tà@ tPØ¥<Ð)Ð)ÐAa`—ò@¤`@¤`@…]Ê8‚8‚v)tà@ tà@ tPØ¥<Ð)Ð)ÐAa`—ò@¤`@¤`@…]Ê8‚8‚âºõë¯iڜŋKJ2²º7i‘žÝ;·hófË véèÀ èÀ è jkkɹ]ÏË_¸x %Ξ3wDþ(Ë véèÀ èÀ è ¦NŸ1}æ,n—3»VWWSäø‰ºdY¦h°K7@¤`@¤`@‡èsðСž¹}hæÈí²I‹t©««cqsŠ»ttà@ tà@ tˆ>÷ŒÌÛPXHØex@¤`@¤`øÔ¡×_ÎT` ¹¤>hõ—^OŸùJùÊÊJŠ[¦h°K7@¤`@¤`ø·K8fÂà³Ë{G.X°°¦¦f^AÁð¼|Ë véèÀ èÀŒ@f—pÌÄÀí²°hM!§µìÔ%kKq±eŠ»ttà@ tà@ †¸KÂ.£ ìRèÀ èÀŒ@ìRƒcFØ¥<Ð)Ð)AÙ¥ù+H´"ÈS’mYQ³Ky R0 R0üè`9Ä3:À.åHÁ€HÁð¬ƒ-Â.£ìRèÀ èÀŒÀíR¼$Ø¥<êéàù0TO o@¤`„a—ŽKAb€]Ê£ž°KŸ@¤`À.v)b:øyÝ–bRx:p ÛŽG"ì2 À.åQL?¯ÛRL Ï@¤`„d—’y@¨À.åQLØ¥ R0`— »”G%|¾R%)ü8‚»Tµí2Ø_ÌÀ.:p v©0°Ky⫃Ÿ/sVI ?@¤`xÐAþ„c&…í2ð?Z©fü¿ÉY)|8‚»TµíR ´ƒÅT3°Ë €HÁ€]*ŒªvÆ­ÆQK`—A8‚»TØ¥í2ØËÊØeØ…‹ËÇØÈ€HÁ0ë“’¼¬ÇôCØvéói–H=w »ä`ld@¤`$Ë.Íò_ Ã.µ€®–Gí¹kŸ³ì8b׌ èÀ ƒ ^¥$ª]Fs×x®U Ú¥fÓ Œ èÀŒ(Øe€/„zB²K-Â.Ã.]áÍ.Õh»#ð¤`$×.e¶˜"Çf„j—ÖJØeJõIs[dÞô¥’vÀ#8‚‘t»”!šµŠ>áÙedño—2g•:¤+»L©y)vhøR0\T'‹ÈV,âÀ.åÑÛ¥c9ŠuHCsì~\æÿ7DñB±C »Ô¢]·°).)ÉîÛ8­eœÞÛw|ÀR2²º7i‘NéE›7[¦h)i—š×®Âtœ=)Öí25ŸZWïÐð ¤`À.£ùàºõëkkk.^’•Ý‹R†çåSœRfÏ™;"”eŠ»üzN$s}•tœ=)ÙõÉß QR ŽÌ#O’½+î¨7Jxv#jjjš·jC‘Ž™]«««)rüĉN]²,S´¶KËAÌñÍo©l— ³t ›eGÐt\ý¹a/ÿ‡qÔ%¼a¸ee¢_ð),ÚôÐ#(Ò¤E:K©««cqsŠ–ªv)ÀíD)•/BJûþÕwçãçÏ #Õÿ¤Ô(!vNŸ93"TUU•»ôJ¾<9:¡ÿ?©‘_7Ê K>òdItZ%1²K-&• ƒ£cÇ=|øÈöµcfWrOŠTVVRÜ2Eƒ]Ú`9DKþ“]*ôÀ¼±Al:Ùç B#ÒŠ@HµQv_6ö8èä©S<åÞQ£ ,¬©©™WP0“žôúHJ‚Ÿ’žŸ>1ªjPtÈȼ¦is´ú›˜4…lœÖ²S—¬-ÅÅ–)ìÒóÍ2ü6ŸöŸ³ÈgN®àþƒT¦Ã¤Ô(»LM`— ì’ª]ÆhŽ»ä¤Î(aøšaiììR‹[m“ìRŒ¾#áE©œP_#ìíF§ûê@ 7ªÔè3©3JÀ.•‡v"B¨= Ä>ùÏc·bÅ÷³iô™óÎ’I‰~0×9Ù–E0»”ÇQ‡Ô9IóÜ%Âþ5b‚ŸÿÙÐTBž“"£„ãÏšv˜^fbZíD»”vÉ É.ƒ0a¦ »ä¤Â(a·› ·lbº7cZíD»”:püH‘°_S&àðÊ.ƒ*$‰(ptx¾ô¡†]jñï„a»”:p|Ja÷Þ$?eÊo(@ã>R)pt8^”9Ó‹û~Œ{ýCv)tàÄÅ.Ã+–ìT"Ö#U]"‘8ú¤“&½!>‰{ýCv)tàø—"a¯B õ'W;¾ƒ•ÿëóÉm»O»Ô¢ÑŠ@P  !»”:pbd—ž —ý’x9jcZ O%«Q޽Q¦b°Kå]Ê8H‘ÈëWžß”x»”Ù(™]U W˜µé¡KXV&Á?â§ÈŸÃ¨1JÀ1-]Ê8AI‘Èrù­H•¡Žv·wÝN|zYý!u‚»•")ç!®¶åátN»–À.åœí2a£Ÿ‹œv‰¡v ù ޼·:å½#x%9éÃÛÕŒ »”:p”" óÇ8{ÎÜÚÚÚªªª??9ñ¾ûà‹ôŽSV^Þà ƒ‡‘ÅL›ñüŸJFe] ¯|aÑ&šB6NkÙ©KÖ–âbË véèÀ èÀ õt8vì8M¯ÒÚ´¥i&͹Nž:Å®Ó.}e»Ž›¦·¾ÿÁqâ ³2¾A`—ò@¤`@¤`@}M²+âØ¥<Ð)Ð)ÐA†F&|®,´dBØ–dIHî25Œ~+tà@ tà@ t!vFÉpe—æ·ÎmêÖ3§qZKJáÙe¶|imŒÐke~C/5Štè‘ÓÛðµz:hB)jjjÆŽ{¸y«6ÔÆÔéæ hšz:hÂQ"¥¤èÀX·~½á ËÌq×AL¼\’ãÊ.Íom×±séÞ2Šì)-í‘©_Kò¥µ1‚ë`~C/ul: ¨iÔ@Z¤_K=4¡ÏN{îÏN!Ó|{Ý»]zdë×RO ®ƒ¹š¦žšp”H)):ô•ìÏl—êé &vFÉpUmó[gi<,+/×êtÃÆFÞ$_ZGÌoèåMÐÄJK 4+)hzEçNú<)"ƒwsÓRD™Ö¥‚– ™:}Æô™³xóSA•pe—æ×èm).¦ítúäï×µËlù¾øbi—4Ûzè‘ úåuÐJÑ4½5 -Û¶§IÖÎ]»ôÙRA ÞMS[W­SX sC:Ô3·MÍC‡Â:¨„O»ìÓÿvrLúJ£DÿƒÄ™ëæ>úÌ™ù£ªªªô‰Êë 5”¢qZËy4&”l{Ÿ}6å¥Ðw€Ôô vù5æ†Ü32oCa¡f5t(¬ƒJ¸½kxë,M%Ø¢óçÏö©äKkã‹¡Ï­¨;îáÃG޲)¯ƒfzY1{¡Gªu C4Mm\µNa)Ì ±üKe»ÌÊè ®ìÒüÖYšQnßñÿÐ3·_qfË—ÖÆ}‡§“F’Bÿz(Žò:h ¥xäO-YºL«¿Po¸à °æ hšÂ:h.[§°‚†˜g— ë ®ìÒüÖÙ²òrrIJ¡OöÌï ’/­/ú>ß!#ÓpÞ˜::h ¥ Sâ»GŒlšÞšýµº–R˜;€¹i© ƒ&׺TBÐó£> ë 1} H$°KÀØ%àìpv 8»]ŽÀ.G`—€#°K€hròäq„” °KÇ»Œx¨8v4éu@@@@@ðc—«×¬î‘sK“éôùÖ;oóôkš67ää)ëÖ¿Û½W­’Ý;÷_%Å,‘VŸýâ‹<3Å)Ű•ÆÍ[ÐçÚ·ÖÚmåùY³òIs%÷òq‡ŒLËúS Ĥº¼o” qȰa¯,X@Õ#Mž|ê)Im-‹r¬•x7‰Ëœ¿h!¥ËlűEhüÔWƒjEç4¶S´Û•Ší ËDq™3_xjE«,_±‚dÃ*TÕß(^År_X–ÃãcøJ'¨4˜ž4àЉPÿ;Q•<ï_„ žírèÈ‘tó¯4%¤S_—óéH¡sT¾”CrCŠÓ爼|žŸIÃVøAÊóLŸ9sðÐ{hL3W’Ž2#»*·,·qÐÝCÙ¼˜ZÇy}Nƒ,BƒÕ£?®?fÕ£™öÓ@~ëËïzs6kNóy«e"ù³‰ 4¡ÔÖ²(ÇZ‰w“ LšRÑ™ÕP¦›Y¶H¿ Mg C4­ËúY/Ç2[Í™7òÅz_ˆ-ËìÛÿv~y„^™¿=ýô¤É“ KÅ«Xî Ër,×µL1|¥AfîË/ñ¯;?Üiy¾€ žíòú;r›8Y~KÓ@—±ËÝ{vñ+®´”öÇžø Åé“Nóx~ô[Ù[VJ)ú2É+é´ßî å·Üºc=)òòüWØèGÇ„4`’YßÿàC<ÃØqãh»†D^ågu;YM<ŽÆ:j2»¦ÇsRâs3fè'ÚôI'ðæ³»h[4z/]¶Ìî„Ü2襦—ÿ´]šM )Ân›Ò4¹iËV’ÚZåX+ñn”ùø“Oê/ã‹·âØ"Ÿ é\ˆ]*¤óáÚ²uË„Gíܵۃ/ÚTß}!N´,³Uûž™:•NéôÒ|ÉšNe©{Sf:£ W’YÅr_X–Ã[»¤a¤¼¼L  ‚9x¶Kšæè't×O‘ìîð@³'~å“–2C¡8MhäÑ{„~+ú“|ÊÃæ•ô)n£7»¤¡‰ÅéÄàà¡'ë+Šó ì~%ê\ï’&•üžÈø?ý‰Æ[š0rR6²T~“ˆ5ŠÆóŒiÀà!w±fí›vçvA/õµÍÒx:[&Òæ–¯XAS :×gkhY”c­Ä»É®LvÝ^<¡ÓoEÜ"61TccáFêoì3Å¥¦]C'W‚ëçqÙv‰vu~bâDê±+V¾NU5¬Ân¦ÐQ¼aã¾T¼Šå¾°,GÐyÄviXd‚g»$àW&)ЩšaÞ§†”­Å[¹qð¥äDtžI§úü†Ù¥a+ùcÆœ¬ŸšŸl]®·Kž¨’„†Kv†Dg²²{qÃ¥@Mã+®RÞ¨Ñ22i¶nÈI:Ðd‡¶Egø‚ù‹!¤æ³:ñ ¸ ‘*L®Ýâúv4Õe3mÍEY®e¨•XËêQXôêË[rv[1·HØtÆP šÎP"mÎR ³KC»èïÿþügñì2FûÂ2Ñ®zT%ÖÕ)Q<岋W±Ü–åð`°?ýÙ»¥8d¾lJÎÃþO>Ô᤻¤]ý]Ź/¿D),.¶ËÝ{v7ŽÏžøRš:ÝÿàCw¹KŸŸÆÃ— (òô3ÏLš<Ù°v…ŠŠ¢yœ¡óÛm]n¸wÉÓÉÇÙ„Žð67ÜÈ3°‹9t”ÑǼÖì_:r$ÿÊf—4¢ÊTiæ /ð;)†œÔXŸ3ˆƒYê®7g3¡ÈŽ).Hä&þ‚Í™ï— Š²«•X»2I¢—ç¿"ßvq‹,/†ðaÙñÞeÏÜ?¼0w» ÷}!ήÎ윖VIoÛÞ®zda|©xñ…)}9<ЉÍ;wð¯ïoß–Ûï684°èï]Òù¶«©<Û%NÓ$hí[ki$¡O:[ü‚§¬[ÿîà¡÷.'òv4:Mž2EŸŸ¶Â.ÂPá9}úÒab¹:ý0xˆÝOeìÒðd¬~ѨûÇ.Yú*{„•â<~ÓÁNÖ6áÑG-7tÇ ?²i”cO¤ôȹ…ý´D\%('{˜æ¶lOÓUª-ÒÛº XJMC'‡üÛÓO³¹¹]bf÷›W­~ƒVŸòÜ4½ï‹µµ,ʱVâÝdW& bþ¥ƒ`+ZDg86n Íi²CÝÏQsö…`Ù•ùÄĉÏLJ*-_±Â<ßïÔ¥+›n¯o=? ¯bÙ"Ërx !‚δi 2É7éÜÛð8œAœ…é4x媕tTÒTš&ïâ›à'ýýî’º¨Ì/"õ)ä°æóF¡LÖÉõ%¬Yû&û!M!éP¥OË­Ì_´ðÁ‡Ç[ÖSàM<~w©_…Nƒo0¬œŽGý“±Ï͘‘Öúz:0ùœÂ°¡î¤!Fþd,µ…ÕßÑÁ)'»A3dØ06Ç¡`*íÚfi’?µ”š:‹¦hæ?ɱL¤ Ó¬™6Mã³à¡CC,‹r¬•x7Ù•I§7†—ânfÙ"ñ•²crIêáôigÍ2!FûB°ƒìʤ½0ìÞ<öCc~‘G†LsIvüò žâU,[dYŽ>Ð@•§„>½ºD,ÎÉú_¦°á‹NÈé\ÝóÎEHàÇ.“ô¾œÄ`7¶# (bg— °K„” °KÇ i—É¢Q£FÉ®u`—€˜F_“ìŠÑv ˆiÔdWˆ"°K@L#+’]) ZÀ.yà’€#°K©LYyyn¿þMZ¤÷Ìí³yËVJ).)ÉÈúêϲ{çmÞ̲…a—÷ŒÌ3'­¨hß9ƒµ¬ (ÀÔ—RV¾³Ásæ³êyKWé#²ï“CÏ,Ù±§Œ×3Œ­Äˆœ>}W¬ZU[[»þ½2Ÿž—¿pñJ™=gîˆüQ,[vyMÓæ†”¢MYÙ½ôé–•0Û%O1/²dwùÇonÑG„¼’Órs©ÌùóçßX³†¬“â3»VWWSäø‰ºd± z»¤ à]Æ7MoMÖöÁΔrøÈ‘þѰ߀×Z!‹ÓçÔé3¨pÊöÖ;ïð?òÓWcðÐa¥{Ëô‰æÊÐÒ%K—µlÛ¾`ÁÂyÍ[µ¡ÒB’ƒ«æ‘W–¯)ßFËŠ'É"-W§”²ý(…â3^YJøå—_ÒZ/-{Ã\=C„o.Å!ê‘©IØeZ›¶ä•úuiŠÇRªªª(®ÙØ%ù©!Ų&ŽvÉÊ¡% Ê€(C6ÄlKûÚ’,íò\Íç©=~Æü¥úÕÍ7.Ïž«ÙºãÃÕë‹æ-[Å 4¬N)_|QÇJؾ»lÖÂ×Öm*>~ªÒ²zúHŠß¸ÔCÄü¨cf×ÓgÎP¤²²’âl©Þ.¹9šSh¢Jfªé,ŒRÌæ(o—æÊð¥æÄýeU]’Ói_ Ñ矟¿L¿ºùÆåâ7Þþ°ì£ƒŸVœ:}†hXÝpWôÀá£ä°4µÜYºÏ®z,‚—7uï±mûvм·aãCî¦È½£F,XXSS3¯ `x^>˦·Kvé•]VíÖ3G«¿çÈ.Æ>;í9v1–Ý $§£Evvym³4f…ô9Í•]ÔÀÒ.k>ÿÜY¹ncUuuѶhÚ¨_ÝpãR«¿¸Zqâ$Í1×nØÌ 4¬®ßè+Ë×”í?ðå—_¾¿«tö¢åvÕcܸ,Ùö~œÞänw |äÓOµúÇSi×8­e§.Y[Š‹Y6½]>r„2³w°G}8xëí(¥ÿÀAìQvK±õ 7Î_¸ÈÎ.Ý=´izks•ô9Í•]ÔÀl—¯½µ~zÁ«ú¥Ó„qÆü¥”R}öœfu'‘GØÅU2>²?n—v«Ÿ;NŽI)ú‡`-g¸n\Jƒ×@â‘üEIH«À. ñÀ.#ËŽ]! È„d[V‘™]B:tà@ tà@ tPØ¥<Ð)Ð)ÐAa`—ò@¤`@¤`@…]Ê8‚8‚v)tà@ tà@ tPØ¥<Ð)Ð)ÐAa`—ò@¤`@¤`@…]Ê8‚8‚v)tà@ tà@ tPØ¥<Ð)Ð)ÐAa`—ò@¤`@¤`@…]Ê8‚8‚v)tà@ tà@ tPØ¥<Ð)Ð)ÐAa`—ò@¤`@¤`@…]Ê8‚8‚v)tà@ tà@ tPØ¥<Ð)Ð)ÐAa`—ò@¤`@¤`@…]Ê8‚8‚v)tà@ tà@ tPØ¥<Ð)Ð)ÐAa`—ò@¤`DM‡^9“¬MGMŠd¡†IìHQv)tà@ FÔt€]&5t€]Z»”:p #j:À.“Ž:À.-]Ê8‚5`—I'²:¸ê°KK`—ò@¤`DJâ`—I'²:À.—”d÷ÎmœÖ²GNïí;>`)YÝ›´H§ô¢Í›Y6Ø¥<Ð)‘Òv¢©ƒ«¾‘j^I3®[¿¾¶¶váâ%YÙ½(ex^>Å)eöœ¹#òG±l°Ky R0"¥å’5ÖEJŠ$M`—’ÔÔÔ4oÕ†"3»VWWSäø‰ºd±¥°Ky R0"¥ì2 DP·#•í²°hÓCL H“é,¥®®ŽÇa—ò@¤`DJØeˆ °KINŸ93"TUU•»ô tà@ F¤t€]FêÀ»„dßHM»K Ä.SDÞ¨IÄ›êõ“Hu‰XÛ¥2}#R]Bƒ]ÊÑ!#óš¦ÍyÐêobÒ¤²qZËN]²¶³l°Ky¢v $·R°óÔë'Ñén/¸Ž»T£{D§Kh¦Î»ô ìRžHÉE^ ý0¨^?‰N—HºÈ°KFtº„» š ì2ŽÔ\d¤0÷ õ:Itº„v©)ÑC¢Ó%4Ø¥Wh'†H[þ‰€À‚e@'I€àq9Ö•l0‹)#/Ï“lËŠ"þg—Êœ:‚.Äq”®?(ÖO¢Ó%b=»ôð8Jd‰`—¤È¬8°Ky¢s $™.ávQ‰N—PÆ.Í_ãEDº„¥†°KŸÀ.å‰È`—Œèt‰¤OÐ`—Œˆt Øee—Z 싈Q@ …xǺ˜ñÜ%‚Õ! v ]Z¦Ä…ˆŒžï†ÄWù»”'"B€]2¼u‰ÀŸ$‡]F‡(Œ~.ïÄWùàÓ.]]ŠûïM¢p D;)Rí`ôl—Z R¨g—v‰Ñ' £ì2$l—2Ù"K„ˆ»dxèa<“k»Tì!ê¤>/ïÄTöÄ»”'éBt€]2Üv‰ÈQÒ.Å‹ÂÀÿæØƒ¨‹¯:x^*“!• Ð.Í_-3Çww$ý@ˆ–R(óÚŒ«.Þ:Øe ø¿[w»Tì𠜄ÙeÒ柤ÑÁ³]Êg‹°Kì2ü» Ø¥<°KŽY ùÝFHV§’ï¡>Í» ÿ—¿’n—>¯µÆwpN ~ìÒÕÙ2ìR%"h—QöˆPŸf‰È¯0Bú jÂÚÈmeØ¥Ú$Þ.ÅÙ¢ ì’)»Lâ=q™.ök»ŒÎ“'þ(¶{Ky`ÕòTÏb:2'Œ`íR21¦;vÉ1Háj‡†d—a”ìì’£’]zÛ.ìRy`—òèuˆi‚vÉðüÏ,agˆ –(i—’«'ë&~tnÇØ¥<°KŽ)³Ë0 ãùUó’Ùdî…Á.Áÿ$Ý•]ò;Á6v*°Ky`—œèØer/Ez~w®dN™Û²°Ë@ð/£»äñúr›-Ň5G<Û¥°2ÃWLw ì’Ã¥ð|Í*(¢i—\–¼È¬¶]Jæñ‰ühæXˆÌ¡a·Ë|¶v6Û¥yQDgÿè„8Ö_ÇÖ%À.ýdKØ€àçu Ž«ÄÈ.{y}›MÄíÒÕÖ%íÒÃÞtUÏÙÔÓv)á@ˆcd9ðc—’kùÉ#>{pÇ…g—’÷/"2ôy; öÄɰKŸ›N`—ò¤Ž]jN­“üO° Ç<~nl î …j—œ?È_aŽÈÐÇf—n7ª’]òlâ[6¡Î¦a—a¶]ª´kRÁ.%/†m—’ ;vB;Ï jßùùA`ÅxÙ¥~Våj»±°KÉ ÈØeØí…]† ìRž”²KMØ@Ÿ¿ÅÄ.ý˜©Ìê2øô—㉊+ßO–]ºÚ´òv©IPn7çg­(ô™˜†]j^ýˆ£¼]ÊŸ 'Æ.Å9ƒ²'?À.5Øeà Ð.Y!n™¤Û¥ÌEHÇuÌéPíR“Ø­Þ¶ègØ¥7`—òÄÚ.= –C´Ï·Í»ê¡ÚQ³KW¢p|‰mBfEW[ç± þ ÷o—Ž«{Û¨çü°K3G+*ÚwÎà_‹KJ2²º7i‘žÝ;·hóf–»”'îvéí¦Úv鳨`íR™y·ÌÒ ˆ”]¸¢Û<¼‘`»Œ×h8…E›²²{]Ó´9Ož—¿pñ’ÚÚÚÙsæŽÈÅC²KÍÓ•¥ˆc~T>.Mp´xù=ÕËt£Êg•d…}t{.Íçj<#»×!X»ô³!ÿv©_š»ôï­qÊBbðÐa¥{ËôvÙ1³kuu5EŽŸ8Ñ©KK Õ.ɰKÍÓ‘5» \vØ¥ÿÊÀ.þ+®¼D°Ë@ÐÛe“é,RWWÇãìRRXØetÛüž ðŠS¤ìÒs™‰·Kýæ¼ÙeH×±CµKÇüž7Èh»Tƒ$Ú¥ ñÚGÊØ¥&=äò'Ë.µðe÷l—‰ïþí2¨:ËØDP®‚vé¸]·Ùùã2”…Šábìé3_iRYYIq–»”'¦v)¯¼Á†g—Žéáiî¡dØ%'Ñ.C½T+“ v©z»¼wÔè‚ kjjæ ÏËg‰jÛe/›g˃šJÄ¢…qÿ(ñvÉÁ.59)O“ƒd5þÿD^~[nK ä,v_ôvYX´‰&•ÓZvê’µ¥¸˜%*o—nW=»ô ìÒó* cg>}Êmù°KF°v)Þ®d™µb1”%äÚeà¥ÉÈT"} vé³JÁ® °KÇÌ’viYN€RûœÁ.ý’j¸µËÀU…]†JH5LŠ]:.õÿ‹Z v骨ðìR^oÀ.íÄ@B¯ú7º/P²doÛ5¯^ý#.ous¬mØÍq[~åõ¦•« uuÔøiQxj$ „=”Y–lËŠ" Ï.?+Ûaõ\GÄÏÊ";»Ô"ù¼ÛÉWÄGÿ ËOÊÄR2—ñÙœÀW·L£K„qÉE¿VÒ»¸»”vÉ]j°Ë†Èۥ罜\»´Ë»L`—> ŒrO ¯nªÚ¥«:À.õÀ.!u ÿ÷^+FḋI·ËÊ”,ÖÿÕ˜$ö´žvɲ)o—v«¸µKý*°KÀ.£€+»L¢¯…Tl|í²—×ŸBv‘cVa» ꎡebâíÒ¿õÇÈ.%·î­´ˆzÑGU»tuIÍOΤô4™‘'ÔŠ)l—š›­T°KÉr`—ŒP»D€d`—€]ÆÎ.%û9ìÒ3òÓvØ%'v©ùäý{„£aw‰0öit½ˆ»ôŸ3‘Mþôv騥‡rd¤`+b—þÛS»Ô‚sº@N`R Ø¥|fØ%vÉ")b—šÄ-i—>÷2ìR ÎæüŸ½¤òvªª¸]ö²ÿÕ@Âú›¼3†]¥ Æ„Ȟߊë“ÊviWì’‘˜.ˆÓÁ.Ý»”Ìœt»tu›véIµa—I)¢0Âû)$"v©wîµC/ÊHÚeØ’[¾Ïgì2k—Áz‚/lÂ.1²Kÿ ‹GWØ%#‘]" b¦±K-н»„]úDòºwÄíR Tá@ìÒ?̪»ý.Á]ºEÆ.“~±1E%Ø.]uT·Ù°¿”·KMîwôÇÆ`íRPì’ý.Á]º%:và†Â˜îÁ.õ¤ ]ZÖ0úcc° GÄ.“[ˆXÒèw ìÒ-Žv)°‰0Hâ±w»t[¬‚µËh°27þ¢?6Â./v™²À.eÖb‹:x¾éö¦¤LfØe ÈMôÇÆ„Íߣ/EPÀ.S±]:ÚDò¸W°ëÆÅ.=ä÷F*Ø¥&q“+úc#ì2p”±K-ˆÁ)ìRfÝíR掘·’½å÷F€]"ʬcÅ¢?6Â.Ã@pš/"{èE]r%ß°òäç'!°Ë˜ `—a»LAÌviî°Kñc—nÍv b¡ì2 `—)HôíRó÷3 ÿ[L¼]FÜ+µt‰ˆ b÷æŠXÔ ¸¤$#«{“éÙ½s‹6of‰»Œæ£Ñ‰·K}Q°K3Iï!:À.‰z:\Ó´¹ù+}ê[T°`!YLÓôÖÃóò+++“P×à &,\¼¤¶¶vöœ¹#òG±ÄXØ¥æûY?[ôo—n+»Œ ±Ðv™HÔÓÁÒ.ÍñeËWäôé»ï£ª««'þ}Rþ˜ûWÅè˜Ù•B‘ã'Ntê’Åõvå«ñ‰·K^`bìÒ¼¹(….b¡ì2‘¨§ƒ¤]æöë_\RÂâgÏ£™fBjMZ¤³H]]ÇÅ.5žzÞ¢üïOý¿mv; R0ÔÓAÒ.›·jS[[›¸j… ìÒÃ}Ú¥‡Çza—1:p C= vym³4ËEimÚÖÔÔ$®Z!Ó1³ëé3_ Å•••g‰Ü.£tt:€ÏÇi|nÑ­]z¨O,¼R‹R—H.Ð)êéвm{þÜÎñ'Zßp#_¤·Ëù£J¶½Ï¿nßñAÂj÷Ž]°`!Ì+(ž—Ïa—ò[tÔÁÿã:°Ëx8‚¡ž䃳çÌ­­­­ªªúó“ï»ÿ¾Ho—eååý:xèYÌ´Ï?1ñ©dT60 ‹6Ѥ²qZËN]²¶³Df—âQ:RÀÿ-BÏÈÛe\\Ï3‘êI:p C=Ž;NÓ«´6mišIs®“§NñE†ë´Ë__Ù®cç¦é­ïpœøÂ¬à#£ ìRI»TÞ+µˆu‰$8‚dhô5É®ˆ;¨ÂŽÃ{Ô:@²þ¿CÆ.SÁ+µèu‰d8‚dhdÂçê ƒFø$nÝÌ•Ì!ÙõŠŸ’Brç ©aô[‘ R0 R0 ƒ ±3J†+»4¿u¶°hS·ž9ÓZR |È.³åKkc„^«£í;gð¯Ô4jéÐ#§·á jõtЄRÔÔÔŒ÷póVm¨©Ó%Ì@Ð4õtЄ£DJI!бnýzÃ2–™ã®ƒ˜x¹$Ç•]šß:Û®cçÒ½eÙSZÚ!#S¿–9³åKkc×N²²{éû¯ÕÏ­hb¥¥†š•4½¢s'}ž‘‚Á;€¹i)¢ƒLëRA ˆL>cúÌY¼ù© ƒJ¸²Kókô¶S„v:}ò÷ëÚe¶| _|±´Kšm=ôÈ}Šò:h ¥hšÞ𯄖mÛÓ$kç®]úl© ©­ƒ«Ö),…¹!ê™Û‡&Œæ¡CaT§]öé;9&}¥Q¢ÿÀAâÌŠusŸ?}æÌˆüQUUUúDåuÐJÑ8­å¼‚J¶½Oƒƒ>›òRè;@jz„»üsCî™·¡°P³:ÖA%Ü^Œ5¼u–¦lÑùóç ûÔœÙò¥µñÅÐçVTŒ÷ðá#G Ù”×Ak(µˆ½Ð#Õº„¡š¦¶®Z§°æ†Xþ¥²]fetP Wvi~ë,Í(·ïø€ÎhŽ™Û¯¿8³åKk㋾ÃÓI#I¡=Gy´†R<ò§Ç–,]¦Õ_¨7\pPX s4Ma4—­SX AC̳K…uP Wvi~ëlYy9¹$¥Ð'{æ‡÷sfË—ÖÆ}Ÿï‘i8oL´†RÐ)ñÝ#F6MoÍþZ]K )ÌÀÜ´TÐA“k]*H!hˆùQ…uP‰˜>Ð $Ø%àìpv 8»]ŽÀ.G`—€#°KÀØ%@49yò8BÊØ%‚c€]*ŽMzB ~ìrõšÕ=rniÒ">ßzçmž~MÓæ†œi®äþO>î‘iN§ÕÍAêÜ3÷›6o²kcVv/o»ÀR“-[·dv¿™mô½¾'Hܽg×në߬U›¼Q£|zØrf,‹r¬•@O»2õòÒN”ÙŠL‹ÞY÷Ž~”l+Ééӗʹ¥ï­Ûwl÷¶#âµ/ìv ÌãÇ+ž0!­õõºt% «ì-+5 âU,÷…e9<Ø¥ŽGªÿm’ª><~×î=ï\ŸÁ³]n,ÜØ¾sÆšµo=zdÕê7Úuì¼µx+[$8Fè [±òuI&O™B#_zS·î‡¤8}ÞxSžŸm…\’o…ÆóVÈ+G?ð€¹’¥¥{hµôAsÝÄKiòøÂÜ94ø8¶Ñm°Ô$̘©Ó§S«Ÿš4iä}£‰C† {eÁªÞ²å¯=ùÔS’"XåX+±žâ2ç/ZHé2[ql?õÕ ZÑ íÔUȰ¼íˆxí ËDq™3_xjE«,_±‚Ž8Ã*TÕß(^År_X–ÃãcøJ'¨tÔ“ž42ЉPÿ;Q•<ï_?Á³]9’Fþ•¦„tFÍâ2VB úò¥tt“Rœ>Gäåóüt¤¶Â}žgúÌ™ƒ‡ÞCC¥¹’t ‘ÇÉÛå »‡² ,Uƒòú¥†:³ V>þ¸þ|˜mÊF3):í§)€ü¾Ð—ßõæì?þˆ"t:Íç­–‰tæÏ&246Ò„BRË¢k%ÖSP&M©èLƒj(Ó,[¤_…¦3†!šÖe€¬Š—cÈ­æÌ›ÇÎÍb½/ĉ–eöí;¿<¯Ìßž~zÒäɆ¥âU,÷…e9–ëZ¦¾Òh0÷å—ø×î´<1F@H@ðl—×ߨqßGåü+6Ó4Åeìr÷ž]üŠ+-¥1ä±'þBqú¤³GžŸ†ýVö–•RоLòJšMØ]ø¢ü–[·«[ɶò8ë¨nìš_J‰Ï͘¡ŸÓ'À›í›Æ.²u½—.[fwBnôšÐÀËÆÚn³Vm‰a·MØß´e+I,‹r¬•XOA™?ù¤þz»x+Ž-¢ñÙpðÖ;°K…t~B#¼`C[¶n™ð裻v{ðáñE›Šâ»/ĉ–e¶jÃ3S§¦·mß½WŽù’5sR÷¦ÌtFA®$³Šå¾°,‡·vIÇ{yy™@„„ÏvI³'ý„Žâú™—ãmAš”Ñ,Œçg>EqšƒÐ€¦·ýVôsÊÃæ•ô)n£«‹±ãÿô'oiÂhh ~äËü&Û:!æÓ€ÁCî>bÍÚ7íLÜ.è5¹¶YOçqËDÚÜò+h*Açáú âfZåX+±žve² ìâ ~+â±éŒ¡ 7RÇ`·˜)î(5횤:F\ö…]¢]Ÿ˜8‘z슕¯SU «°»t¸mظ/¯b¹/,Ët±]F„$ÏvIg}ìj th˜÷éƒ!ekñVîG|)MWéô•Îfõù ³KÃVòÇŒ9Y?!5?X"غ¸nTJáOØ­Kéy£FwÈȤiµ!'U˜&;t˜Ó¾`þbMøì€Î(.H¤ “k·¸¾MuÙŒFFsQ–kj%ÖIJz½ºÄò–œÝVÌ-Ò61Tƒ¦3”H[§³ÃìÒÐ.:û¿?ÿY<»ŒÑ¾°L´«U‰¦½,Q<岋W±Ü–åð`°?ýi¶¥8d¾lJÎÃþO>Ô!¼àÙ.éüYWqîË/Q ‹‹ír÷ž]cÇã“2¾”fd÷?øÐCîÒç§aö¥‚Š<ýÌ3“&O6l…]ø¢¢Ý=ÔpLÙmÝq)›]Òˆ*^—¥Ï|á~'Å“jEµåæ.fMºÞœÍZDvLqA"4ClÎ|¿LP”]­ÄšØ•I½<ÿù¶‹[dyÕ‚ËŽ÷.{æþá…¹s: À¾HgWgvòI«¤·moW=²0¾T¼Šø ’¾èÄæƒ;ø×÷·oËíw›@ô÷.éÄØÕ „ƒg»¤³tš[­}k- PôI'‚Yð”uëß<ôÃUJ~½ÉS¦èóÓVص*<§O_:ú,·Bgõ±û士{—쉔9·Ð,X—¥Ó€@9Ùú›·`Óí¬ì^K–¾J‹Ø3?Ž»ÀR²:C8|øàßž~šM¢í3»ß¼jõ´ú”ç¦ 9R¦™vE9ÖJ¬§]™$ˆù—‚­xhálظ4§ÉõGÍØ‚dWæ'>3u*©´|Å ó|¿S—®lº½þ½õü$P¼Še‹,ËáŽe:%¦–Ê$ߤ“dÃãpq6n¼þÆŽ+W­¤£’¦Ò4yßG@/x¶Ë“õ=_æ‘úrXóé(‹ÐqAvìèKX³öMöû2šBÒ@Ÿ–[™¿hჷ¬§¼]ò'ci£lCb»d9Ù š!Ʊ9“A\Û,êl¾©d–šÐàOgÑTÀü·3–‰TáoêB›¦ñYðP„¡!–E9ÖJ¬§]™ÍZµ1ܸ÷ˉ/Y“KRW¤O;k– 1Ú‚dW&í…a÷æQõèì‚_ÑŸÊÒ\’hü‚§xËY–£t¨Råé¡ÏE¯.‹s²þ—)lœ¡3g:©ö¼s|?v™” ÷e„Ä„ØÙ%BâìÁ1HÚe²hÔ¨Q²«DØ% ¦Ñ×$»"@t]b5$ÙÕ¢ìÓÈŠdW ˆ°K@¸$àì@Jq´¢¢}ç þµ¸¤$»wnã´–=rzoßñ¥>rDÿ ,[vyÏÈ<™êed}õ‡Tɢ͛¯$‹©/-6¤¬|gƒ!"æÌgÕó–®ÒGdß'‡ž+X²cO¯g[‰,…E›²²{q$Ȍ֭__[[»pñZD)Ë–¯xpü#†ðK}5ìª7 ä•䘖›KVº·ÌìSDMMMóVm(òÐ#–¿¾Ò°To—4¼kØð¦é­ÉÚ>عS«Ÿö8ˆæ€ý ¤¸ÖÐ Yœ>§NŸÑ1³+e{ëw ³W»êQþêêjŠ?q¢S—,VÎ’¥ËZ¶m_°`ἂª3•æSH<ä‰{öí/X¾š}5–çÐÑŠ™ ^[üÆÛ§«>Ó:)™Y|zìÄ¢UoQi/.y¥[®þþ®Òù¯¿©}=œöò’+×>zÌP7} ›K,í’fvd”Zý|“\ܰwß~d^l©Þ.i–÷÷L>{îÜê7×f÷Î¥rO²BšþãÙ)×lìrÚŒçÉ”ÉÝÈ1íªaHg9‰ºº:¾ÖŠU«víÞCfýöºwyi/Ȇ6¿¿óü_0ÛÒ¬f—)*ÙAy(§ù í¼¥«Î|VÍ#¯,_S¾ÿ –'N’EZ®N)eûP Åg¼²”ðË/¿¤µ^Zö†¹z†ß\ê`ö©ÓgÎ VUUéËÊË{æöaq½]¦µiK^©ÏIS<–B%°)ª¥]’ŸR«gi—¬ŠP¢ ˆ2dC̶´¯-ÉÒ.ÏÕ|N‘ÚóçgÌ_ª_Ý|ãò칚­;>\½¾hÞ²U¼@Ãê”òÅu¬„í»Ëf-|mݦâã§*-«§¤ÔKŽÁ_ŽVTŒ÷0»ˆj€»•Þ.¹9šSª««ÉLõ› ³9ÊÛeÇÌ®d婬¬¤¸~©91BYU`—ät©­=ÿüüeúÕÍ7.¿ñö‡eü´âÔé3¼@Ãꆻ¢%‡¥©åÎÒ}vÕc‘”ºqÉÑûˆÂÂþ i£~uÃK­þâjʼn“4Ç\»a3/аº~£¯,_S¶ÿÀ—_~ùþ®ÒÙ‹–ÛUERðÆ¥ÖÐ_:dd~6R\RB&H~wÇ Á|Ê©·KJ¤EìÇìQŸÞzûJ!çe«°[Š­o¸qþÂEvv9èî¡MÓ[‹«WX´‰&•ÓZvê’µ¥¸Xƒ]TÁl—¯½µ~zÁ«ú¥Ó„qÆü¥”R}öœfu'‘GØÅU2>²?n—v«Ÿ;NŽI)ú‡`-g¸ZJÞ¸ô^S‰Gò%!­<»€Ä»Œ,;v}„€€€€€ ’mYQDfv éÐ)Ð)ÐAa`—ò@¤`@¤`@…]Ê8‚8‚v)tà@ tà@ tPØ¥<Ð)Ð)ÐAa`—ò@¤`@¤`@…]Ê8‚8‚v)tà@ tà@ tPØ¥<Ð)Ð)ÐAa`—ò@¤`@¤`@…]Ê8‚8‚v)tà@ tà@ tˆG+*ÚwÎà_‹KJ2²º³?¯,Ú¼Ù2Eƒ]º:p :p :DŸÂ¢MYÙ½ôÿ§<HÁ€ »”G1˜WzsLŤð tà@ tPØ¥<Šé»ôtà@ tPÚ‰ú@FÉ?ô!Ù–E0»”G%ø¤³K?@¤`@…]Ê£’°Ë@€HÁ€ »”G%ô.éÁ1U’ÂÐ)ÐAa`—ò¨¤ì2 R0 ƒÂÀ.åQFƒ?Â.=£€¾Æg9 HÐAa`—ò(£ì2(Ðv,ÐAa`—ò(£ì2(Ðv,ÐAa`—ò¨¡ƒ¥9ºuL5¤ð:À.ƒ:( ìR5t€]ˆ:À.ƒ:( ìR5t€]ˆ:À.ƒ:(ŒÚvéù7,‰¯z`—¢€°Ë` £°]úùƒ*Kbªƒ;A`—ÞP@Øe°@‡8rMÓæ<4NkI)‡Ñ'²l°Kybªƒ ®´R@Š@P@Øe°@‡X³pñ’çΣȲå+ÿˆa©ªvéó¨–ÄQ°Ë`Q@Øe°@‡øòÑÇß1h0‹?ôȄ寯4d€]ÊG À.ƒE`—ÁâË=#óŠ6ofñŒ¬îý lšÞºwß~¥{ËX¢Ýa¢=Y¹€«zF­ ª'Ù;q¬ B*äýëß<þ—¿ëCñû{’^±0Zz}ÛÂ+ë¶Ý%;ö&½™nC²-+Šèg—aÏÎAÿþý*ÀÚR’¯[à“PÏ%àhb(¬ƒÛ9Q|¥{v ”Û¥`œÜQ?éHT°»;™ v)ÎHa—®PXf"ŸþùéÓ§eò“gÏž}à~ñ‹_\|ñÅ—\rÉÿ÷ßrË-ÇçyÎ;7a„_ýêW´ôª«®êÕ«Wii©¾óçÏOš4éºë®»âŠ+(å¼çž{øÒŠŠŠ»îºëÇ?þ1•OŸwß}·¾p^çÍ›7·iÓæ²Ë.ûþ÷¿?nܸ/¿üRŸçã?îѣǷ¾õ­oûÛ½{÷>räˆÞ.› gåÊ•´îÓO?mСE‹ßûÞ÷¨-úZI–ˆúúªŸ¹j 0/»ô\ÈÚ¥‡Š…ú8ìÒ ë@#Ã¥—^úo|ƒ"ä,ýû÷?tè ?IѧOÊLôÜsÏÍš5küøñééé»wïfÈyÉÅ.¿üò#FÐÒÇ{ì?ø™æ¾}ûX†ÚÚÚN:Q ™™™“'Ož9sæ}÷ÝwõÕW³¥•••ÿó?ÿCƒü°aÃh™ÈE]ôë_ÿúÌ™ÿ×cë/ ÿú§?ý)™òŒ3Z·nM)ä><ÃÉ“'ò“Ÿ“ÞÿýÏ?ÿ|NNÎïÿ{½Åˆ›`à‹/¾ G&kÓ'®xã*áÞ{ïÕ×J²ü@Û¥«LIñ ÉÆ„(8&ìÒr•`wLi Û„+ÐÁî‡$ä5ýë_W¬X±dÉ62ÿèG?8&IA6Ô²eK» TÚ\ðÞ{ïñ”òòrräÛn»g jÓé×âsCšÑÒÙ³góEdˆ”òÐCéÛB›Øüõk?«ªª®¼òÊk¯½–g3f åY´hO¡Ó½Åˆ›`†ìŒVß©ûyûà»î¡”mÛ¶ék%Y~ ˆíÒmžÙ¥ÿßSø¬@àcc îø~]Ê£€’¿»$‹¡ƒÁ,¾ùÍoÞxãú çÎÓ[Œ¸ –Ðie&ç¢øºuëh]š$ê3È—ˆb»ôÐ@Àqe— Ï¿éóCžùàØˆzÉzµ¬¦„M‚:ÈÛe§N.¾øb»¥LŠS§N½üòË÷ÜsͰ¨L²W~_Œ¬êºë®{Ó –!fáh—â&X2iÒ$ÊÆZ1`À€ ¿ñ#_¿3ͲV‚òÃP€Î ;×mGæ0Œ óÍ(˜‹Ï±1)§€]Ê£€òvù‹_ü‚¦$vKÍR,[¶Lýöw¿ûÝÏ~ö3Aù¿ÿýï—"ó›ßÐÀîóR¤ãÅXq,©¨¨ ³ˆ~ýú={ößÿýß[_ßÎA¾|ÿ ¥¶k× ×^{­`çÊ4p|Ú%#ìñ?‘?‘àylŒ¾Ep{Á!eQ@K»4ÿ²`æÌ™”ç®»î²+‡¤8qâ„>…|„VÉÍÍe_üqúúüóÏVäÛzê©§(ã>ª_jxÐåÅÿß_,±*¹zÐeôèцG}n¿ývýZâ&ØÑ­[·+®¸‚=x3ño“ KåË÷¯™ã•W^ɯ¯v®·F v©%ûSŽ·±1^FÉ€]J¢€–v9~üxšéÐ8Lî6mÚ´Þ½{_pÁW_}5®vå°'c³³³'NœøÂ /üõ¯¥é$­µråJ–áóÏ?§‰¥äääL:uÖ¬YãÆkÞ¼9ŸÚЬªC‡T“®]»>óÌ3äcÆŒ¡)-[Ê~FqÉ%—Œ1‚ 6Œæt¿úÕ¯\ýŒ‚¬™&È—_~9û!É-·Übø!‰¸ v,^¼˜ ¡©%YÕÖmÆ ›òåûW€]nÓ¦ y÷„ ~ò“ŸÐ„ºQÃ'c=40¢o— þW°KŽ6 è`i—«W¯îÔ©ÓøÃ‹.ºèÒK/ýÍo~CþrêÔ)A9$ÅØ±cÓÒÒ¾ýío_xá…ôÙ±cG~_’Av@59 Ú4ìÿüç?ïÛ·ïÆ hŠD¥ 4Ô“5ð¥dÖC† aµúÑ~t÷ÝwÞaëh—ľ}ûØd¬ìÒðšÇ&XBgW]u»ªiî®Ê÷©@]]ä|ï{ߣÕÓÓÓ‹ŠŠ xk `e—ZRŸó„]BxÐNLd`æÂ>£<ÔJr•h¶7ÊÂz(*²" ~¯†Øß®o{CÒ«á*P…©Ú‰ioõ4Dl(jÛ¥!Í.µh?â¶b,¿7”ÄRŠww‚_^á™þîáFª->þøã=z|ë[ßúö·¿Ý»woëÈ5Óp·rõº¬¬¬+®¸â;ßùNŸ>}Ž=*ÎϾ¾ûî»-Z´¸ì²Ë~ðƒŒ3æóÏ?××&¤&LøÕ¯~uÉ%—\uÕU½zõ*--åK?ýôÓ{ï½·I“&TÉ‹/¾øg?ûÙ!Côÿ™ÒÈ„ŸöŠ+£5œ]ŠëÖ­[7jòéÓ§õ«oÞ¼™J M*)Y*ªM›6´‰ïÿûãÆÓÿE¦£hšÜ®q+Ž£¼± T»ô°Vb0\ßÃ ÍØIÈNw,$:]‹ëàù µ Ž“'Oþä'?¡¡’ýÑUNNŽá®´†æ±cÇþó?ÿ‹¼rìØ±”ŸÆÃë®»ÎÑ.it¥¡•†bZ¥gÏžþñ"Ï4æ_~ùå#FŒ˜5kÖc=Fã6åß·oËðÎ;ï\}õÕ#GŽ|î¹ç¨„AƒÑøÿË_þò³Ï>cæÎ˪=÷k<·×±2ZC»×mùòå”yÚ´iú: <øÂ /úúÚk¯ñ¥ p´KÃ&n½õVJùç?ÿɾþõ¯½à‚ Þ{ï=ž¡¼¼üÒK/½í¶ÛØWšÑèçMÄœ9s 6$yïÒ±½Ž•ÑÚ¥¸n_|ñÙG³fÍøÒêêêÿ÷¿é¦›•”¬åÙüõ?hTUU]yå•×^{-Ï #šã®ÑîMÇŠÉt§Xšvé7Mýh–‚:Ø!–ÂH®—Ùaõ^DWD¤!h†ò£ýHŸò¯ýK`4ùþ÷ Ï_RRâh—†MSâ¨Qÿÿ¿?4iÒ„Æùc iÙ²%Í\ µ=þ<Í_h)MͨŠù"I»tl¯Le,õ±«ÛøñãéëöíÛÙ×_|Ñ`(f$ë@7ýZíÚµ£i¹4hŽ»Fk¸7+&ÓbìR€a¦™²:˜q”"ìÙVD\Æ¿]ú_Ý'–÷õ¾ùÍoÞxãúš•ìò·hÙJŸ¿¦¦ÆÑ.-7Ñ«W/ö•yóÍGâ /dêêê&NœøÛßþößø†>CVV/SÒ.ÛëX­¡]:Öí“O>¡Eü¯Ÿ¯¿þúÿú¯ÿ?9,Y‡ÌÌLýZdDsÜ5ZýéX1™î dúl‚82RxxÖËUþ(8&ì’çÜ.©Ìë®»îM+X†¼¼<Êß­[·çŸ~ÅŠ”¾fÍÃV‚²KÇÊh íR²nßýîw?ÿüóÒÒRZtß}÷9VR²úµ ÈTÌ­]:V v™‚@޼®L3Žv™˜§›ÂÃÒ.£p1öw¿ûÝÏ~ö3AÍ¿óï4nÜXŸ²oß>ÃVºví*3Ä9¶×±2ZC»”©Û²eË(eþüù÷ß?EvÕ¿³T€|ô)»”©˜ã®1lȱb¸›‚@Ž[)dL3Ô©hH¨j—£GnÔðVÚí·ß.°¿üüüF¾õéׯ¥ð'FüqúJ“ C…?Î"W\q…þ!ËöîÝ›RªªªÄ"8¶×±2ZC»”©Û_|ñÃþð†nøÁ~ЪUƒ¹¹%òuÐ/5Ø¥LÅwaCŽ“éN±v)tà„ñÛ¢8þn11?5 K»¤îÇ?þñå—_Ξü¿å–[Ä?$9zôèüÇÒPüÀÌœ9377·I“&”&w–ùÙ×_þò—W]uÛD¯^½(%''‡gøüóÏÛµkwÁPâÔ©SgÍš5nܸæÍ›ßyç,roºé&ZúÌ3ÏïÐRÃV&NœH)|ùå— ìDpl¯ce´†v)S7⡇bâÏž=Ûa?¹©ƒ~-ƒ]ÊTÌq×6äX1™î `—ò@Žg)Üê¶4oÕŠXØ¥ø-µ–v©Õ_£ëÖ­9à•W^Iã›ãk V¼ñ}¥!‘åß¿¿aŒµ\ýþÒK/ýþ÷¿ß}÷ÕÔÔèëP[[K~GCëe—]vÉ%—üüç?ïÛ·ïÆÙÒ³gÏŽ9’¦f]tÆÃ† «¬¬4l¥ººú¶Ûn£‘ŸsñXçØ^qe´†v)S7­þÇû^xá¿ýÛ¿éö(@²úU v)S1™]ãVGycìRèÀñ)…åÏ]ƒ**‘»õ0ÚbùF};»t‹¡KìØ±ƒÊÌÏÏ·ËÇÑRW‡ÆáÇ¿ñoüñ ­: H`—ò@Ž)‚zÙx¨véxõ8ð.Æ›êÅ)AÙåÖm»õ_He¾ñÆvùa—Ä#eÊ”›nº©Qý /Ñ“âvYPPð—¿üåòË/ïܹsÈ5Îddu_·~}mmíÂÅK²²¿ú½Ì²å+ÿˆ!ìRèÀ Pм4Ïg±‚›­!u‰@þž@ò5õAÙåȼѿùÍo.»ì²‹/¾øê«¯;vìÙ³gùSÜ.©ù]tQ»ví<r€ jjjš·jC‘‡™°üõ•†¥°Ky 'jR„} Óî’f¨:„zšgéÞeÊbMaÑ&2J­~¾ÙoÀÀ¦é­{÷íWº·Œ-…]Ê8Q“"ÜXhØ:˜7*þ÷»`—ÁâËé3gFä2üJ·¬¼¼gn‡]Ê8”Bò¦ç<–Ï&%@Wÿžc¨ž¸X] tˆ)G+*ÆŽ{øð‘#æEMZ¤³ìRèÀ‰¬âv2OÉÜò‹ÔºLÓí;êa—ÁâȆÂÂþGi•¤ð×Áž‘²NK»4Ç—-_‘Ó§ï¾>ª®®žø÷IùcîO\C cfWjEŽŸ8Ñ©KK„]Ê8‚¡˜~gŤð Ó!@›³»~ˆ™Ê” i—¹ýú—”°øÙsçh¦é³nÉ¥I‹t©««ãqØ¥<Ð)Šé»ŒÈŒ)K„]Ê8‚¡¤Û¥·D]mÝÕZþÝYp1‰]®EÄѧΞ3·¶¶¶ªªêÏON¼ïþø"½]–•—÷8èà¡Cd1Óf<ÿÄħ<5"*m¢Ieã´–ºdm).f‰°Ky R0TÕÁrhº–Røq%™AÞœG°Š]æ`}6¹]"¨ËÝúµŽ;NÓ«´6mišIs®“§NñE†ë´Ë__Ù®cç¦é­ïpœøÂ¬ŒïDØ¥<Ð)ªê u-aóÏ󃺸*_»¥2•?q*ßœ¤w‰X\Önô5É®ˆ;`—ò@¤`(¬ƒÛ™{"4ì» »è*vO w‰idÂçê}¸§$»" ö„äÎA!SÃè·"1@¤`@¤`@bg” Wvi~ëlaѦn=s§µ¤þø]fË—ÖÆ½VG+*ÚwÎà_©iÔ(Ò¡GNoÃÔêé  ¥¨©©;îáæ­ÚPS§K˜;€ iêé  G‰”’B cÝúõ†'d,3Ç]1ñrIŽ+»4¿u¶]ÇÎ¥{Ë(²§´´CF¦~-sfË—ÖÆ®$de÷Ò÷yêØtPÓ¨´H¿–z:hB)žöÜ?žB¦ùöºw»ôÈÖ¯¥ž\s4M=4á(‘RRt è+ÙŸÙ.ÕÓAL쌒áªÚæ·ÎÒxXV^®Õÿ膼'˜3[¾´6Ž :ŒNÌ}^«Ÿ[ÑÄJK 4+)hzEçNú<)"ƒwsÓRD™Ö¥‚– ™:}Æô™³xóSA•pe—æ×èm).¦ítúäï×µËlù¾øbi—4Ûzè‘ úåuÐJÑ4½5 -Û¶§IÖÎ]»ôÙRA ÞMS[W­SX sC:Ô3·MÍC‡Â:¨„O»ìÓÿvrLúJ£DÿƒÄ™ëæ>úÌ™ù£ªªªô‰Êë 5”¢qZËy4&”l{Ÿ}6å¥Ðw€Ôô vù5æ†Ü32oCa¡f5t(¬ƒJ¸½kxë,M%Ø¢óçÏö©9³åKkã‹¡Ï­¨;îáÃG޲)¯ƒÖP j{¡Gªu C4Mm\µNa)Ì ±üKe»ÌÊè ®ìÒüÖYšQnßñÿÐ3·_qfË—ÖÆ}‡§“F’Bÿz(Žò:h ¥xäO-YºL«¿Po¸à °æ hšÂ:h.[§°‚†˜g— ë ®ìÒüÖÙ²òrrIJ¡OöÌï æÌ–/­/ú>ß!#ÓpÞ˜::h ¥ Sâ»GŒlšÞšýµº–R˜;€¹i© ƒ&׺TBÐó£> ë 1} H$°KÀØ%àìpv 8»]ŽÀ.G`—€#°Kˆ;ÿ4Í( endstream endobj 200 0 obj 28996 endobj 202 0 obj <> stream xœ}RËjÄ0 ¼û+t.Ä•ägÀö‘z[ôPzëãVè^úûµåÐl¶›% dG£…šàG}–ÌõN3DK:Âù]=?ÀWûW¾ó§ÚOŠÉê!X˜Þàq$ †éã%!!玴è2'ôr 5’ºÜ¹„}Ž wr±—x¸Ë>á1¿NOj˜ÔéŠÕ uÿY™¤§ðÕÀˆã¬b Ê.‘¹`rsñ‰ ÚÝ"±“”Ô×°ÑÑk ÖYm®z˜cE˨EWWäM5×¹Ånþ³T^΄úŠ+r9·‚Õ¼³§'‘}ãlWBD±Bûæ_qÇÌÅ#Ѹ9rð²7e)®\“þw¼Š}qûpyM³zÝÍÕ¸+Àð<Á/qš¢ endstream endobj 203 0 obj 284 endobj 205 0 obj <> stream xœíXK‹ãF¾ûWè¼`§ß-1X¶|Èma ‡[² ! d/ùûùªª»U’-Íì5ƒFÕ]õu½»4æd»w¦3x‹C<¹®öÔw_9üð©ûë`Nƒ±CêÖ¿þzˆé”»hóièþ¸ç9‘,2}‰N3ïÞÎÆ÷c–¨Ç®¢æQ ½Ö =Tߘ¢©œ:µhÂ-‹bÛwËì_§¢ó(Å.NÙÕ?4š¥þvdOM Ãjm¨^ì™(a{>}u´’o{lêÚ×X=ÚÔ΢\áàõõ¨k#h¿ø5qTíP×¥qðáüœ•¸¨@ߊs‡”²â +±Z(óºÒ,ßToÔN‹é÷ä±9¬Y<‰“TÔE]Ô@*«Å*/fµ¢Êµæ8–e[ڒᥩ•Ðn¶¸tZ÷¨§Ê7ÚÐ$ ¯}®Ôž’˜ÜVLS_r핞T‡v’õ~î-Þ>PâÜqC.G·Õݧ۔˾SSl÷ƒ© `¦âò½+f0m_BŒ¬=Ý Žï·]Z¸RìcÝ—ÆèÉFÙwtꕌ%0é#7èQ6ï]1.ĪÙÜ®îsý>æ(:UÈÆ>8MË=P¹,ÇÙ#Ζ•]s7ê*·ïUu·v<÷ðE?N³pë‰CÑé1Wå|Q•RžÍØèœE&yUdÜVՔϫ¾]Ë“º†0ÑÀ´^ž®²un2ú>R¾(Î]_Æè9ËlÎå–ØÊ@*ÃÐ#9Ρ³”gד–&¹›½©·dG{óýåí÷ͤ Ñ?Ýq¢½›[SåYqÁŽw^Tskô­Q¿pëDôPwÖÊ7 ZµÞ§9Ê¥÷œhb«‘}üÛp‹ù!œÂRÌŽ¸1n.Wo›`ïÝ`FóÀÞˆë)ÃKÞ q:ŠL¦E|pc-»Ñ£ ¯‘m'ÜÑLÙ ïø%›ÃÝŒáê‚¿aOÄL²¯tßbÜl-)3©ŒTÄÚOQ˜T7PÑĈb²¹³‚ÑXPÄø ¦ð5•¡`SÙôö,VMvOÁlë Ò¼jf¿²ÇPÄBARîhc“§çð­>[â쪅ùo3د”’Г¡y,Ù+Þä;$†$øŽÒÊSßå$øt¹¹A¥ 0I †^!™qçRaOÀCÈw•ÖÊ*+Ùø¤¶ÙR;L¤ô“ZÊÐcxìu|Ý®?|Ÿ:àÜ–Ÿî.¯z†®}ù>úØÝÖš‡tª“í¹ ­›ØªíLjtÓ_q/¾ j{gBqø‚NÛŠMïO(/!>>¡µ|›ó=|´eµÍ%˜\ô`òÎP✫Êü?”ü‡‡\#x~h(AÛðf«‡¹œøÿçO®®æâ†®0ý¾œ¿¶ýâ_]›ÿ'ÛUÀ»Yðs÷/±¿Ç endstream endobj 206 0 obj 1552 endobj 208 0 obj <> stream xœ}R±jÄ0 Ýýš q%ÙŽ0†Ë]2t;t(ÝzíVè-ýýÚrh.饄ìèé== 5Á·úÌ™ëœf–t€ëE=?Àgý—¿ë‡ê'Ådµï-Loð8Ãôþ‘SC Zt‰#¶rô% ’ºÔ¸ˆ] rÑK> stream xœ•YI‹ì6¾Ï¯ð9Щ´Ù`Ü3žCnr¹ey—üý¨´T•$Û“á_,ÕúÕ¢²ºëéß—&5©øË-îÓlõ}ž¾ÿþòóÓßù]ü÷ýÏ—çÇ h{Svúømúñ]O¦?~Y•Vð¸éUe•{Àª|ú3àÏ9ýt›[Õò˜Wµ¥…gz¾¦çöð«z{üúñÓËþñò­ãjDéF® ÍÄ Ô{‘b×úáVm'W6Ÿ1qáXÒ$þôø8¡à|´[06> ˜ÀfY*v0œŒòÝ”‰=ãße‰ü©ŠùÒ•\>  +yUåÒ«Þ·Ç•„‹ŠÀ8"¡ô#$«&WV[£X‘æ¦âÐíñÔ–±_ë g½DܤS¦Š»®1¡JA>2Qz­Öâý]#»$—ä§JÐvM¯!OÌøÂÚÄñOûUÄ‘¯ªÍD@ ØdTWÖ-ö¨‘P¡'ñn’9ù¢íBzPÈUÑ}ÕÕ4‚²b¤½¯bîB(2ª]/¨¤/þr¬ùô[òX&ºÇea>©ÞPù´“å™[&ÚIW/Í@›"7×ø/ò¹„˜»é3”ÈÎI ½“!9[Øå461*½2÷%3˜3þÇ_‡¡í"Ѫ!*y|$ñpóü5âi˜d{^éãÂõŽxýŽî«Ú¹KíòÓÊÖ~UQû™¢ .±èÔrïKˆÙ2Ü ÓÓœ²èm^úôT_¨ i“#¨„µ¡‚ªq—!*G,g’”^K$ª‡\1aHî r÷C<SÜB eŒjL$‚¦)Ùó)õ$¡¥x¦ß·¬æ•$ŠiåØ<~eºä7-éQžMj‰Ž†ßIƒ[R”ÒÖiÚHX°±Ÿò}^JŒ3!)jk–ÄШ*Ý[ej½i0-P¥Ê‰æ7Ùü‘›Ò(Zs¬0¼¹x°TðÑŒÒË7'‹V™‰¯Œ½¼5†Ë,Š•1$Æ1પK±Ȫzƒ¶¥º*Æf¤âç‹N/v¨±‰Î1é3²¬ ßÙq€ᇾ‚„n('ëbjÉæ¥bÚKRh´OõùÙœxÐd°Ï;ç ÃY×Î’EÝ‹«R;“ÎNFÔ¥óÜûìEM÷®U\H’²ŸÐ+aµŸÈälì(‡.îÚfÌhpsÃȪl`³!„IL=t…‚xMjGÈÏ*“j:^E…"¹¯IäõK`!iŒHÍÙŽÚ ú´KP“ú´i¸æEcƒÉC SMãE‰H[Ë*ìä¶©L)ŸˆòÚ _⪡|ŽÙy–›ÝÐçû^ªZ]ɤêu}e²†¸é0z–˜‹3ç¾¶–’5e6•»KéèE™Oo$Ìü8}¦üMe¡ëÆ…f5Š€C‚YM§¢(75m,Eª†³¡Ýô&)U­‰Æ|†Âa¸Äbém=` „k–¢«›¬kI‚†Ì”®OW 1ËÐ.ž†$tÒ X_T¸E·Mæ9븄/µeLI¦ùÅú”»*( (jY¤ÍøTëŠRõ5ÉÈÜZ]6ÏYìéTµä“ *ÜÐ2Ó*Pu¦iØóý¸4÷ÙöêÈž¼ñIÆ0³ªšÎW¦òd~tAwY²\ÁJœØ@km3/Û¨±8sÜK•<ìÜÿì¥JŒáþ™+’¡‘Sž†A6(âoR” œzÑ&N,–A''PŠŒsrÊÀM%¿–Õ“3e^¥šå€¥z¶®ª¢@ÚÅb%µ~í°›çMð,6»„NÐ…ïÒ–á¸ò©ºÌu! D¹o3)¥O芊¤ßÏi$ÛB¤¹‚tùÍðË5c¼´u{[®M¶¬j%£ˆ XVêæzû»–™Žè44%†9î:˜Ô]|­#ƒ¹EÄgå=´`k—Þ»J ëaÛG`«)0âhfzÆi;Îþˆì¾nré`@ãùd 4…y(( Tv‹¸Hкþë#19=~{kî®Ìd°SðAðé{ë¾ü©ÐœÎ˜a^îîè ¢¯ F?ÄWÑÓOª×“|›þrt? endstream endobj 212 0 obj 1792 endobj 214 0 obj <> stream xœX˪#7Ýû+z=p½¥cèkw/²0d²K&!Ì2›ü~ê¡’JvÛ™ †¾ªVéT©GêkŽvúçð÷d&£8Ç£›J°Ç2}ýíðӇ鯃9ÎÆÎiºÿûõ÷CLÇ<Åh§/‡èË1ÑøóTÇ>J¤4¤õÇáÓ‡ƒšl¢Ê’óà‹,Ö;(šn8¢Ì’5°3Y:¬§qhºáˆ2IaNð¬K¡ê)žœ¦ÌRñ E «ŽÂÔ¹c$~ÎǶtªžò…§§)³TûJŽ,+-=N€[ÓadØçÝ ÖMc™×Ýídb©í°½.  ‡Ž^Ø9jÍš<ŽMp\UN±=ç$qKrºÖVLI‚LÈû^tuè š•@`ÏRC ®ÓîjÆZeW(5n¾ûºB#¿ …Ãgí=›¥}ѹ›8µa|ÞÊ3ÄtREÕߘ‰Ð÷ €µ^yg|5&Í_{›h2k¨§[§†É·XÔâ²O¡ÖRÌí•TwÄ5:îWÔݤ<»E)…¥'Ó"ŸÕ쳿NìÛƒÛ¤Ö†0@7ñ¼6ôÎW—lô—‡BÀæL¡a)‚©õ×<Çiö¡ ÞÙ;)N*ª`ã¢ò;ê3ð.pk¥ªáv^VG.pPßq}M"ñmƒÔ£S<æÞT!çf²µyHؘ 5“É ë†väïxó1ƒå‰ç`©F!7Àd†«"R^œÖD2k»#´2aàXõcK30o¤³[¼¶[A}nŒUºžïþ-}†+]'”Þï•è@ËʧO~Û2ÒÏI–n˜Ÿ²‹ƒûZtYx;p’OÀ¤æ|ûso‰5üaÐÖ¤ºÆ\Í»[M‚ëE±Îd¸J8/Ö› )Ó8˜Mp¢g3Û«½øì·'V¸ú¬ÚÇ`«õgfü½\nŒ\T—‡ÕeûîKØžïÔ'!ûtoÁt~m’Òw3ŸÂøfæs9Ñ?Êî ŽiâéW³+3ÛYØ¿Êýð•þôÿµ®/ü8ý ®5À endstream endobj 215 0 obj 1371 endobj 217 0 obj <> stream xœ¥XK‹ä6¾÷¯ðy¡;U¥— ÆÐ÷!·…BnÉ&„$½äï§Tz•Üö̆0౤ÒW¯O¥rÇN0¿¹É]h-^Æáë/§> à2N~ØþÿúëÉùK\˜øùçÉ™ñâóè!¼gT‰`7Hr§ßN_>ÔrÅ)ÂiäèâêÖnä4Ž,Wœ"œFüœêÖnä4Ž,Wœ"œFä.¦níINáX¶°á¤QÁ±Î´­ý ÉiY®8E8LŽºvƒ$§qŒÎWN#R)êf›¯´\qHçË¢JQ? •/¡ÿ1•no'BË!Øáíçá»'HÃÛ—g@ åŒ3°àšÁË0Ä×Q^Ýrv3LË8ÃU&nò¼ËóºøËOoߟַÓçVĽj%LÑðÌV¬ˆ‹›Ñ(M. )qC°£ÄVOøÕÇÇo!“B hÀ Ø*šq]pF¿yå@ÀMÓÅîÂï¶3ÂR]K^3žÍ´˜9&ƒ¡mÔâNñUvHðéP«8áÇÀ éã`1÷¢ÏH,ÏfŠQÏéc”iÀáÜx!ZФóÂʪs·˜«»D&jÁ¸jÊjöN<%`þd£³‹ŽÅ|LicÜqD™ yÇ£3Ø)_´¬;{©pô—â %D–£dHò•¹ÊÛ²gÅq× ï¼X|UßÎ?Kù)$IÖŠá:IËy¬íÎîÅëT D}%;vÄ9ç §m²kv<»èæÇzäFâí÷=ä 5‚ÏÈ1xôø¼Ëö1’6ö£ÿˈ†ðj=Ø€pGäØì#Ižìd?ê…T‹I¥£]U"t­š¶;¥Ö¥íÚˆGªtmný¢GuÑjZÓy-åQ‰æÒ¸ÛÅ-°ÃZSX[Ô;LÈ÷DÛSR±M€¤ÖðA¶`1Xâ™fYÒãGN7@"y”°d"ÅÏ ÿhbÛó­&2›&4è òj1V:*¡8Ï©uK|^G ¼öí ͈¯—ÏåÉ÷Ǽ\ü ºzöUÚÓP5’/ü¶W6¥eÊ £î~xéë XÃTTÚT§\ë­Zήë®u“µöàfÇ¡ruCÔ:Íxݵ;ŸådùCã’þhx¾´ÖªåjíµIéc zèê†oÕ彛ĸv¨ûâ¾_&Lí”K¤ªJÚ¯;Ìzé”Hv=¸®\ >´Ë‘‘×¢³¦À5þi3i7…3ôŸùæªR] ¥gÈ Ë­¥°%õ“Sñ»«x.5zÚƒÒzt3+#ׯ•ܪDHó<î)xùÉ®—ö«B âópã8ñõµ³Q…¡ûõãð§“w 0Ô6~þàÿS/ endstream endobj 218 0 obj 1386 endobj 220 0 obj <> stream xœ}RËjÄ0 ¼û+t.Ä•ägÀö‘z[ôPzë¶·B÷Ò߯-‡f³Ý”€f4j‚oõX2×;Í-é—³z~€Ïö¯|—µŸ“ÕB°0½ÁãH@ ÓûKBBÎ%4hÑeNèåj%u¹s ûîäb/ñ q—}Âc~žÔ0©Ó «A.êþ²2IOá«ÇYÅ@”]"sÅäæâ-´»Gb')©¯a££×¬³ÚÜô0ÇŠ–Q‹®®Èšj®s‹Üüg©¼.œ2õ9Värn«ygO+N"ûÆÙ®„ˆb…öÍ¿âŽ9,˜«G¢qsäàeoÊRܸ&ýMÜƾ¸}¸¼¦Y½îæjü/€à ~ta¢ endstream endobj 221 0 obj 285 endobj 223 0 obj <> stream xœV˪Û0Ýç+¼.8•F’e18‰³è®è¢t×Ǯлéïw43zXŽsË]E²æqæÌ‘ÔYwO:Õ)œ¹àÎÐVŸÇîíÇéˇî7ïáßÛ¯ÓåqmϾóÞvïÝÇ»î4tŸ_'¥̽ž”QV¹&5ÐO§#MÝÜ»I…yœÔB ¯4.ó0©Ûüíñé´>NŸ¯FF·÷ šl’¿8€Rw‰bÕzv“6•''9qþìž9±9œq8°àÄÍ‹#™€,™0ÕptÐD¸Èu Ú˜%Mõîyá{ÒB““¹ÅlzÄ)ZXçÞ DÚc–ŒœV\íXBR¼×vÒ Â,­m,dÕ`µÙž‰ËtòÞ…¿Î¦Ðĉ 2¤:‰«ñä8ƒ§1g (± —Bá®cù$7†ÊIûBL­ˆGâjËѹDŸˆf^®BA>; 9µwö‹+R2ß䙣ä%Û‡j:%K”Éæ{ÌcÃ7Ü0œ Ë,×Óú&/¦_oMÞ6fas17k¥Ò‘À²Êþ%cÎ~ë\E1.¢™ ÅXj+är®…ë6$_j…Õ¢˜Ð®Þ®ŽdƒŠjT`®,_‹Óùtè)÷.ÝXyïž÷†Ò‚ ¶˜¡¢ÿ&7–Û·eÉä4ì^3ÅëóNô¡@U®Ò &.]K…Òj*+ ÷*EL9ï¤A‘ó/d(Ú¨ù‡+Z¬yj‡GºÆ´ÊœÝ,—eQ8I¤QÍŠüuûmÂÈ—,uÏKz€Ý ›€{Ïä—HSLÔ¢¥f*´w ¤ «…õX‘ñŽÏëæýÉ"}(Ï0|·>9XÞÅfóN>|dÿwŸ»ïÙžy endstream endobj 224 0 obj 880 endobj 352 0 obj <> stream xœÝ¼ t[W¹(¼¿3h–α¬Ñ²­#K¶e˲dÉcìØÇSbÇv$O©G±ØIœ&ñ˜¶iÓ:é”6mšP  $”áBFI¡—ÚÛ[.…Ú[.\.É…Þ25P¸Ð÷ µü¾}$'NZxk½÷¯õ¯õdsöÞçÛÓ·¿yoyanÿ$1C„%òö½ã3ÜÏ_ý6!äeBÀ¼ýºéî/×`ú!LËŽ™{ýÑÿ!œ5¿sÏ·ßy¿Lˆ¾Œµ»&Ç'>qÓÓQB:N`Õ»°àíÔÇÔ˜ ó¾]{nø½µî˜ óÿsÏôöñžŸ}ç§„t¾ù[öŽß0cSXB6L`^Ú7¾wò¿|û˜¿ÍS3Óó ?wŠþú~fnræK«˜ßB;‹e€ôcÀ¤Šæ–ãUjV§7M‚˜eζXmv‡3Ç•›—ï–<^_aQ±¿¤4P,…+"ÑʪêšÚº5õ kÉÿþeþer3˜XÉå~Ň[C,äzB–ßZ~œÞi½§®ùÿvšÌŠ!‹ü'Y+äšüš|‹¼J¾N’ä•Ëã áÊ ‚`"o?‘ÉoÞ7¯Ã`F¸,òc°½ä<ùù'òùù"yó}pw‘Ï-ärû]RFÒDþPHAÚßOŽÁ{X¶e¥T€LÀë§siër<mä?Ï:É£ä_™_’±‡É§pÄß%¸\ª1Cž$§3©ErÏûZ|8ó&Ë”—wQ¶=êíœ8êíjP Q‚Ü캑öe&]Ð5Ð,CaÖò˜îê}L†»ú7=#¢ùu×ÀÐã 0­c-ÃùðÝÐ3ê ¥”¡¥´f$š¡-õaF£À»ž‘ 9¤¼å”%¿ý ¥L³Rdû&]&®”1XÆ¥Ëd¥Œ~p•»Ç(¿Û¥ º>‡w¦4NlˆüB¼ˆoãcÀ¨ Iw²%©÷¶Ðò&ZÞ”.WÑr5RØ XvãQ±ÝûgGêH†´ám‚DkYMÊjx\Íå]Œ<¦âÚð8Ë`’<ÆÒbž?®Vå¿×ð8Ðòh–'«Ð“åic¤”Líâÿúå6î{ÔÜ hO3[Ð>cÉ¿ÉV 8ÐnàøxVæIòÀŸY>+·•uŒò'yFäá›gyù8?Ƴ ‹Ö.°[DÀ‚H` „I˜È$ŽV»¢ Õ; ÄÑ¢`Z¬@Ì{ö%i»p‚‡C<ÌЖ!ÌvFxhH¿››ÛšXùHS„h>˜ … ä[Gø€Hï7‹/¾˜ ÌŽÎÍU„GQð€² 8õ;þð_3‹xÑ=Æõù¤¼ESì(f4*‡Š) @Rt)³ àlÎSËþ,.AP Bž`2 Ð'f™²„.1Ë"f Y¢˜Åãâ²È‰h0jãb–hDb±FšÌuM³ê J\9Ø€øÂ‘³0ë_HÌ^ý¢"Œóðd7²U•EÞ£fi¦ÆcÁd´‘FlVšd™Ÿ_Çi5|wwhkïZÃu©7¿ 6êÔ^­áØüÎÍÓí~]v‘éÏ.//16µø7LÉK³ý]­a5_VWo)ÝP+ÝÔ\,1-Ígð£z ñ#‘Oiš@c´Õ55]µu–Úº:±¶®¶VPñ¼JÕ¥ÖXÔ¨>¤ZmËóZ-«µËf·ØìV»hm’-nc[“í9ÛïmœÑfç5¶Nx«Ù^® ¶ÕÔr*+âa¿ˆh{»ÆZà•˜nX H- à7Ùad›8Õ¤,aåÑ„”°UYó4‰àÚ“¦èÅH“=ÚÍ2Ûëè…ÈßzÉ7SÄŸÍ‚¨#¢…GÒ%é‚•<®m.!¿ªòƒžYUúÕZ(âKƒ½Í!ãõ©_ßĪxö–òxKȘ^=®¨Òj9ÖÝÜ3Úpð„IZ7°³ù臚C©_ßȪT,ËôwM5/}†¹I,,ò”t]Û¼ô¹Õ ê®Ê½~62Ðä½ÿ¨osÑÒ<3/úLü´¼hZ~‹û ®_6 ’Ͳ¬)q”0ê\{.CÖŸ·@ÜrÂrÊÂZBRÞgý Ý9ÝÒ5éb:VçŒ bQŒ·áBœ A< ŠÒ‹M!”H\LÌŠ¯%f/V„7ÆÞ‚r¦ª²‘‰Fò¾²œQd«%‹™šFà>³íÑßÝ{í£[¼ußuOhLý$¯º'\¶¹·Õ®×ºk»ƒÁ¡x‹]¯c¾üÙÔ»O×Ï~v×Cï=>^»ç¡Z¶ÖçZ[nœú:¶5º,ÍvT^CiÔŽs r]¤Ž|]¾ÓR ªB[!ãtƒÎ ÎÐç€C 6x²×“R?¸üà?WÌb±8^Ì׋õñzFª—ë™ðúWòÎçý>ͳj µŒvQs\sZÃjlaØÞf¬Ù0˜=™Íd‡M^hêÕò6¹Âõ ÕùzHÖC¼9vvnnŽR~Íuu‰ÙÄ,â,šxÑ6'¾žHD‰Ÿ)¨Ë|ÉÈ[PT\“ÏRdU!þŠËÙtÚÕå@ÑIqiÏgÙ_µþÆ ßùUÉ»:ßšþÚŠÞz«f°.vÇXu×mɉìi7¾›µm0ÐU#µm­Yw`s6ß1TvßG|¾*o–à©ôI%yvƒ9Ò³·{óÍ1_^Û¾Þ¼öF}n¹W ¸íF±¼s7âvÓòÛÌÛ|-q“ûd¯Ãz•KÅXͶ,›`Ȳٺô‹^oÐëcúEýq=«§ÂÝ«: zt¿l¹V½!7ÆZ 1Á,°6A@B:äóH ﬨx1""‚²Ìuâ÷"È›Y÷5ÉoõzI™0 váEʉâYÙU‘ˆ…+ôV]“í­‰ÖDÕQµ—5=¢‘ê&\¸µª~¬­PÏïx ðồáñ~o§&Tä¨ðjôÆÜÚÁÚà ‹1}3•úæÒ¯-u–ÒµŠÒå™An#r̼·û@圹Î,°\ òIž˜ÏËãòB3!¬?a:gº`bC¦&SÌÄšÜù`@(OÌ!Š,pX‹Ä´¶$rò®½rKsRC$ñ}̦©¡GϛؕÉ5òÊúóéõW›X«ÅÆ8ú÷H 8úoúÒôÂWfkÕzgÏè¾…ëë®ýäT*õßÛ[Û/GíœFÍmþêÔÎHìÖ-‘ÆÙOnõo Nv¾³DX³ý¶NûæÉÂÞÅaK0X’u`e…ç]ƒó–IŒ¼*éí 7»ÌLaUUU{«kŽUVUuÅr-±Xn,v>‹±ã1†ÄĘcc½¡^Èõ—´¯Yš,1Ë¢å¸å´EeünÈ?êŸöó~®··<¶A'<Ðü¹f¦ùÌò9/Wêh®ªÌÍÊÅ 1¡¡Eå€DBzáBoZÚDCÅ‹¨9Cuuß $²ê²êDÔ¡!м‹/DB Ô™‰Y$š¸?WŒÅâD4gAÁ­B2E©Þü6rML#¬hÖÂËò{ElU×€w•ãJJ7'ö0¬ª`Ýàîõ绋‚§n¸µé9ZÕVŸ×X4¤þ"v,|f÷+ß5ëYÞ’“£69í©ï?âðWåå­ooÈ2ˆªvÁ#V Ô»#ý{êz¯¨Ê7ëËZZ5yuawëžžÒû?âÞäOÌ*9–á!Îl(®óeÙ«GZ/Ë÷5¸f^"ÓòFuh-à Þ ­?^ b1qcÅ'ŠOŸ+VW„Øõ'lçlllµpÌÆÚHo(¤*ís‰ªÞMúz†Ó[ô>då," ´ ù3”–ø*ðK/G|EŒMÁ‹ýBqEQX|¯°ƒc#¥-•Ŧ?çwïûĵû¾4_ÍC¯/Î|nO¥QÿÛãÝëë²à§¶2ûîÙœ`£oƒ<µÁß8÷ðÄçR§Gö~l$¸¿êbŽéÚm¶úɘb»m „ä_&.2%7´¹Z¹óP‚“eT § ‹QY•JdTqfŒ9ÁœbÎ1| Ýk¯sª2ZH±”©†.bÆHÏ5;7i}¯.Çi«ˆªñÑÔ¯ýtá§mƪÄ]cÁÞ<ŸÖéÊѶ6Å-d¾w;{ð›³m{6ëUO1,ËÈ̓ߤîÚW_àÖÈÿÿÝ~ö@ñÝÅŒ%ò\ uÁ¿›À$›­L›ML¶Ñkd8#5¢/%À–CqQ• Í 5xpMl–<@a 5àÉλ͚Ép_Ký(ÀšZY&úaêGíÀÁh2¸ŒPÁRúÎd2äèA:æwÜ[”x{¥¥}Üš¥Û]­ymy­.æàÒí9-y>_A^KsyÏ«øL/+¾ØyÀÁ«R3jÂsŒšCWHÝŅÊĹÜ)îmŽ‹qËéx³²¤)OÒÂi-ÒBH okáœNiá„=˜¥Š8jvEšš¢H›³ïstP­èE¨ñ¨!ÛÃBN 8K–Þþ!8_å–^yå]–[óÌXþKêî,Ú„kHZL»ržÌès]¹Œ®4§”)m´˜ÂÕÕ]¦Åd á÷¼ ˆé¬‰1 H03phàí6¬â»ÖŸÈ?—!Ÿ å7åÇòÙ|¾š„LZKãÆVK©ocÜÙó…C‚OÔöÎ2> ÅxlB¥¢FQ–9ó(ÂåE泊„Ò¼ßM¦þ”æq(pŠ ©ºWlËšUb½º&µ¥º‰EyΕG«ŒREpÁé©Oì^k—ik|ͦ¦€¨Òó¸|¹Mý{:b‹×„´†èÎÕíì«71¼`20 et&Aóy[ß‘@‡ÎuUgi´¿9bÖ‡ʶô5§®)ì˜jÏoYënžlÏ[›“Ÿëï^ã­»3^1Ó»·†ýž·ÛU×_ërw-ŽF¶î+¼ã²úÒ˜ž|[>¨Ñ^ƒÝ‚†N>&£Õ÷1€\Lºô:´ÄtèôH„*VE7žx¶‹ã-Ïò"ÇǸEî8’Çi´"5×N¢”µam\;¦ÑžÐª´FµŽ|/pÄÊSÚ?öOÇòeä»—PÖ’Ë;¬,ð^& Hî ÒLz û!…¤Š´Ö¬ï³äZº³Í–ìl3®¯/××SH,……„Ëõå2¹¹ÙñBBa±LUü…b&ŽÏì8z&…>K¶K̆8ïB~ EÑûRÁ> M(g(q¥ ¥þÊì,e*Åò¤^ˆÂVMTÝåóÖFE)³¦vrúÖÊþ¢"s…¥¨¹±Áûx×3jµÝ»»À£Êꮹk4¢Õ¾€”WÞUæ R‚¾²uCk¥^mîh©2ÀŸÚ\¾È=‡øÿ–ïv@ësú‡y kA²ºLÊ jA›šyÎôŠé¼iÙÄÅMpÖÔÎ>nb‰I4IhpI¤àLðTð\{;H7캥–@) ”–„Rx¥t¹”‰•.–Ç'–J(ê„Ò¬<¶ÀB@ÐÆ löŒ€B*ZW—P¬QT戥¥e«’¸A@;uކn(çPeWÙU²ë²°Ns°Š-¯H/ØHI´žÒ2¬ˆR5Ù Y éŒö6®ƒœtH'õ§tH§cóÌJHUÕW³ËËý¦tP‡ÙúÞW? ¨SjDNbÈšåߢdx™“µäSò}…«‚Ñä9ò&GÃèœ9NÆ&yž‚ܼ\OWA®¥ ד+œ/RMRÌ4jbr믌,êŽëx]5ÂþhŒ8y³èOâMÙRwµC¿"î߯Í2-öË~›è ` ÒØ*NËþCS‘ëÌE_÷àDCüæÁ2­!wüð§‡;¯í xÆ`ëïô&.õKàTÜïªFãvëÖЦŽ5f­¶ûT¨-h­8ÚÜÕtßwo]ë®î(±Äááw]kª5RY$Çàé½{WY熽RìŽÉhÑîyE§¾Nå£%`!OÉ×…–™g7ð›ùÝ(|漎R~ ÏX€I6ÃYôa2¡V¡¦â¡‹¶SQÍñAotF¥œ¨µÍÎæ9b6òìŒ dH6xÛ1%MlpÎÏÙ”°ƒÂÊh¹7E¨ÙŽ´†<JPž¿Šé©É°b6³hEQᜠålÕ˜N¨Yúå󩟰ٰåw)´£UguI¦×àØ•zÆP9 •è  ²+5Gýâañ`"N²K–5&jÎ1²]‚Þàt [Œ&‹Ñda£lŒYÁ¸hpn1ud[ê'õ0xzÈ×2R“ú+x;On›{z±-%ò‡—ún¯‰EiŸŠÎáœCÉ'·Ê1”$[²DK–(2Yú‘1û û9;k—ò6/e·(úÕk˜“¹8Ç ¨dOs¨{E˜Ñü|ºhy£<’$,Á\:„¥sŠdÕýi-½f®Ë3 “™£Z ™ðNý㛩/ìLýÌÌ=GΨm¾?æT˜:E-C‘Ô½Œmé7üá–éûã[?¼[6,=ü—S;¸¦²3hM¥m çò[|3ÿQ”[ä{5ðÕ aAÜRçDýöèò;·äØT øßÄÇøE§$þq7§%Ù¤ æ”Ø òx:Ôuqí„ÙÈJœ‹OÛkÞâW‡·x:OfèÈËÇzMàÑ•mØÝѽ8-êšÞ°õó7ul~è×~þhŸº`ûðu-Û[ ‚±}-Ñk'†ZŠâ¿c Ÿ«¨ŽWåXBݵ¡–pQ¶³qôî‰ÑOD+†oînÝ|mN¹\\[V`6y‚k§;§>7×¶µØÑ—vS=XAPCŸºKc²h^5¦˜†F—5œ&îsrŸpsnе¨sL‚ÚÊÆshÀú´Bõd &4w©[·Â‡i¿’ÆûMgyÊzt⪕P2ò]4#èØn{eñMy'S¿üŒÚ ×²``Õ-Ë´vöG yyN :¿ºGŸ\J±Þu-õ6[Cc¥q¤>‰¡ëºmÇs¨_Eò°¬¯$md€°(0ä1½©ƒ@Ÿ zDbE(‚´l7-@­EëÓ~NËiµn&Ä0§Ñ_^!.މ‡Ä³â9‘ÍèXEF˜11ØâJ✒f8aNï½ÌÎ)’(MO ýýƾCñS¢˜¬Ñ€¦Æ¾T2 žõœ E£‘ PŽJî³ùm®œ¶ŽuùÌ•»¯¢Mõ\3;Úƒ_—£*É&1ëÏ[!n=a=ee­ÍkšøòHEE$²%Zi‰F+£Ñå(Då<_‡ G™(µþ*L¶Ž,,­,o*Íã¤2ZGbyÆX©­NˆºòèºJÍp¨fšá\3Ä›Qå§2ü\/^òd2ìH(qLÙ_)F£òû˜#géê§9]  ÃûBå¨Ò Ó¤@ƒ)i«Ì‹joÕ¦óo•cñ&Ô`yU‚Ñþ–¨Y«ëI}Ë»aÓDCï-ƒA>wèæÏLÜüI‰áÍÚxêWÿ­Öâds* ÏÞã‰ßµ«¬ÛƒÂ OÚxÇDt¸h÷µªŠõ![dËm½õók¨ܵµt¢<5ÎýÆ[•#*´*û’_’ñ}ÊÃÊ~¡–ðpœ‡1\3zÞ†%LTyèc‹H…t·ïÝÈsp¤9ekìm.ðpneëÛqâÕšäankbëê­¾ÌÖxå6Ÿ²çSÞªìðy©G‘:Ï¿ü×J*Ëcx;¢ìkªÉír AVÓ÷©çXÊÛ'9ÆÂ1ŒÈI(¾*¿Ç¸Cè©ó¥Š2‹£ƒzLŒÀÑ.ÿ)ÎÌP9Ž>úÅM?«…¤â¸£¿jKréûi™Ȉõ@ÚCyÒ:õ¨ƒþož‚¢¥—*Aª„GØýuL©?^Ò?Çê"ä~­Ãé`V©U²2'¬0m=me)•Ykž”.A¸¤YMW©VªTaÔH7Xåk®#—qdÅ }6»ÅžÙ&´‹¶óÔ¢9kcl%R ¨|…„B_aWQ±¥¨¸X,*Ž-/Z.âŠì¤TE†"«ÝWXh³ZÝqƒ˜6áQÁF³ê겢Ȕ4j²Zòž]µÕzäÊ}VÅ*¿b[õÊW`†cœN¯»rC5õkÅNïéZÙz…|þåÔµÖŠp¹ùŠÕ«v^”—’›ÑhøQ¡ÅT‹B™çø¤ŠXT„Wƒb™R_’ f`•†ÃÇðM¨ŠÙQ$Ïí»zähW¬E—¡¨øúkß:ÂDPî/(ÏLD-; ¬(¿rì{Ï±Í -päÔ7RÏþâêñ ŠƒH•…¨59Ã3l2Và”©x†aG98 ¬Mt«<”ˆ(CZÎ â‹ño§¦J Uu•ß;˱7ÿÚ ýÔÔ7©ßü¤3¨Çô’gµ:§ŽQ©mjFÅÙ8F=è€êtZ½JÏ!›"*x²ÁWhµò¬†Ý­ X4> ó‚nR=¤b\ª€ŠQIRa‡O“ ÜÄ€‹ 0ÌwX Æ‚œÈ¤µ%”г½}*½ª‡'ž'èÃö7² «á›Ø{šeÙ=ècZÀ¯¨Ó2Z#0,K¬*Tܼ7‚l„°$#Œ)w¢dOAÙ.¤Ö{&@J#,‰Yj0¼xä ?=€>jÕ•gEX<¢9«9ûþ{&àBC-hÓÓ€Ëk_O=“zÞKý|_?T¦ò S‡™£I}F–þ{éU*þ‘mb—ù“G¾)»«`s#;ææåD‹€®9~%aF`%!,N œ[,%4Õn5£F9t’ ”€_·k´©E ŸæÕV5cT³i6}=qQaÒh¤"œÑõ´óý¨-Hþû´ækàPÂ.YQÅ+W EìôoC"K£ßX¥,Íz.'™©"cayçioSÔ§YŒ.E‹Œ¾òZék™<Ûô|ë¾-±tð&õî™+ðã"ß–zÂO#k\X2é×m€“†ßƒC°«ˆ¢Ú‰rú¤3ÇâD/Û);ãN&Œ³ÎsNNpBŽÓê4äµÈÚ†O38Zz1‘Á¬L<ן#:¹ï7,VBSQ*×@àú[€]bñJh’ý±ÑªñœñÉ JÀ*£8ò<½îZ‘f¹oµM'6ú|{ûýÀU2ŸïN±–Fö,âHOÞ’Oê4tó׃V:T(®–ç9œ¦^¯Óh´j¢F«S¯':VÇó*F¦g‘¶ZË”¨ëÔL [Ç2EPÌ}øf›ŽµètTƒƒ ¶5’™ZR…U²ŠUQÙxV Y¢QKÝJl‚×éÔZVe¦»±h!i„“FUB›tc‚žA…ˆh™Uâ›G®2R)Cý]n#‰Dvš×(ßÁO¡êÜuK_„éÔ÷–Ru©™{ùéøÑÒÈ’±,½Å\ ÜQŽ7£dIlDy¡05™”ÝF&©ìOsF¹]¬Gq½ÊëÁS©WücÃÜVôéJÉS²]•gËc´œ“cJÜÓÇu ++´ Þ¥­ïÌÖ?Lú¡×>¥¿ÍÏÚpEýð ÿû™×üðO~xŸóÃ!? dŸ›Ÿi÷ƒÅïó3(FþÓÿ?óC?Üá‡u(TüPè?‘õæ¢sû…ùµž8.{†h"s:çÒgNù¼ˆ$¨çûµ>¼5êKáúK†°I¥ö¨¥ÂðwÞsÛü`Ähð·Õ• ©w}¿´oöáݑȦÙÅÛoÚ]ÄÜWö|ÿÝ [®ILÖûk<‚¹t}U}ïáÍ›Å7Þ>7±exËöÚ_"f-Ëoq÷ ­–‘9ßa«¼Ó¢ Д€òÀî:îN޽)ëÌòÛr0'¯õ -{“{‡ã¬Ü 7ɱ*|]fs‚ÓáŸ×hHþ|¶“GJ'ž¥l F•]~´ gg#”MC‰´¡åQ{ØK3d¼W¹ÉÔ=ô@ ,=z¹¢qcx㑉ºüèî™ÏÍ6À¥É wD['[=yÑvó6åxÛ/S‹RŽX½û¡Éë_¼/V•8Ô,m*µ–õì¨[3Pí,â¼Eœ÷¤‘zÒ%—)'ƒT›…qyÖ¬ x¦«mÓÇùežá×ê e5óõõYóENÍ|–zõœ^¤{ÂJ÷ˆ©0¡v#wöåucÈgß?»¢Ô0öÐÔ5u=ñ‘rRvm½õóÛwœš^Nܹ švt·Ýöí[>uC“rTÞºXEmkÏ̵eìZ1|ÍúŽþÍ[+·ÙT^ìí¾%±FÃéBÝ»Z®9y`}õø±¢HkI–TÛL$~¡ØÖ£8ç[pΤ’ì”Ûì¹Àç‚ݼPJ¦§ó!¿TÔ+ TÛmŨö¼ÓèÐðáÑ ç¿w2q瘓q:‹²çuê¢yâÌ6ÍÔ ¾IŸèx=±r¼‡WB˜æF¸êP©Ó9ŠHW¨±^ûÙéºÑ/¿}¢ý®™}êÓ†–ùGŠ«>»3vk"ÚsßwRç·D75z]áæ¢àP{ÀÒ~۳׿ ÃïÝ—¿áæÑ’Îuoþªc¸bôž‘é—Ü ßš:èï™^_Ù]á(hݡ؛” <Ò»Žì£v èy0p !ôÌÞ,ËXX–¡ö3Í0‹ ÈÌ9šU«TùÐá¡ô^d´NÙR ZFïgE†Ñ¿_Ëd¤f´Æ“Í×zX¤ô$žHÝ‚{Áô&´–ý’ýøëü¯wwP>¼~ù-þ8.yVu:@ç­Ê©bpX[T¼E¥¢'^æ™Eþ8ÿ ÏÆðÁð^gNλÃb·;ð{Î~ÁÎöEûi;k—ó¼v•ÆnäsdÔ˜ípªUÔ‹{•pt4¥d\§ˆ¥P ‘ s)ð;D»½à5&º ³ ˆJäùIO·ðRDåHD:bM{&»q¤ÁüE(þrî¾øÅý‡¿_7§Öp@ñÇÕzçä«oÙÂN¼÷¡û^9ÒR?÷¥½ÖšÚªlVõÞë£êÞjj êÞ„x²¡WUN>)O¦-a²ŒÞ.Ž”ªFNäÁty¶—û¼^ŸoÄF,6BD[Ø&§`.ÚNÓÃúòQ»øFmfï(Q¢”ax; gÃp* 3a‡AÃ9œÙ\Zl.qÿߊ]Î&.¾v1+- .…-3ìO™——žŒ¨ð@5ÓqÛs·¬-¼¡sýžÎÂÉ/¿±¸ÔÿE×ÜÔãõ4%êS¯> £÷ŽïúDêiþpÙÀžÎùÁ:ÁPÛ;Ywó¶—°¶pWeY½×ô^•%2 oSøÝ‹üþEô³ŠH#yHÞ¦©qÔ0Ž|°¡;ßõç@j±álo8Ñpª!ÙÀ5È’ ö¬2Ÿ[rKŽ|w¾ÔåÈ·8ò¥|Ñ‘s,:Ž;–6â°–WƲ|Äd+Žêxž“aöê}ŽÚ"M{ ¯Q >#$h;VEzXµm2…p¼ÑF°P€ˆ½æª0JtLê¬Î(ªßç€Ñ \í°:LÔÛµêõë¹4Êc ÏdÂ<9õ•…œ6ÐÐQÌ]L ¶l˜z~U|ÈÝsÇŽèpÑÔ§aÄén”¡ÒBúåJG)h=TŒ¢µLRb”µUOë|‚¼õ Ó4$äFVå…âù|gżpIƒ¤Efôõ‹‘\\}˜§®Êœ/]ÙðÏÎHËUa+Ü­ÝÃÕ}·Tôžxé†ÑSû[8µ^]tè³Ïí¼fƒ ̦e#ƒ²3Ôì¯ÞÜ\è µuÉat™c…µEÙu;Olš}áCý’s®¶Îî‚gSï|±Çßp ÜÕW•ê~cé]þð8Î28˵0÷ tœ–{à çá,^æ¤À+„×òu\ÌM*aÆ1åç’oL—̬dÓiLÔ]Pbc5m¦nM(¶¦wÓÓgÊ$ö Î~÷» Î&PWøc=‹ô@†³ ü‡“¯ûw¨ýÖm/±¥Þ4TlÜ×¹øOw¶— Ý3Þ8³­×]žz¤˜Ùqº¼³"gäÔÜú,Ô^¸IÞslãÆòM-Å[þÙ­=G§ÖŠ®‚ì7Î¥×Jõ}\«0{—¼)X.jeR¬U›Ö™v˜>jâ²M^ã@‡A­\…u ìî|·Ið?åÖN6w(Þª,k˜:Ïw“¦ˆì _ oNqF—sò;H$ßíÞ*y,’Ç#Jë¤MÒ‰uJwKÏH¬ä±«üùÀKAr³Ä\Pb=”ç§"P×#ðPê#ð|<wG`8J f"°)ë"ðNÞŒÀw"ðL¾ë"°CûŽ’ÀvTÐÄ# G _,JÑ8oGàñ|.UZœˆB¶D 2Eà°•?FàB~"ðtnUà¶E`@é¼Z3+ T}-/*Gäex wF`Ni9=Üô˜üI÷ë«pûÊè7­Cz´OC§Çpÿ è¥1¬šÕ¥¤½Ôqº9›ÒñJÇOFà JS +½¶)­9•éL¥»Ä¶¾´ªËM«:ûµÒÊ‹«f0¥\êIŽþeeØé¾p D /t5˜pÜ"P÷¶²g#p‘5—þÕÖhbtå´çû¼ÿ¹ ËŸÙºìJÀ«a?°Í­«kÍ)¡×LÉݹ|FuµB¢@`ÕéK,RŽº&²¢Ñ•Ùƒ+Jð5[9”HM:5xÙr¶¸¨XÉ(Ç,è!U{æ*pOEŸ£7}“;ßeHMüp+ƒÊ•Ukè ýƒ¯¤þ f¸gˆÓpïtX‚Üw§~Ç.Ô̆j*7vº[šêlïc£ÙU-î }këÕ•aË{wó‡ß{ËVÖÔDËFòY§òÃ7 ÇQ¶?òB$9ß%€ý]dìfí´N'Ê&”œZ‡˜‰` ¼‹„.Ò ý™B¶GmâÕžê¦Æó,§.øä=&zrR¯{ïþÆ//™ùÃçwœyâÉ~²ø4DQoèïSìFÔ‹*;Êt'© ä?2<dƒ ¢jdâÁ±à‰ ŒŒŒ™A0ƒ¹]¶œQÂÉQ8…±(([V´£âhPóVöHîÒa!Æg¿âœgMúð'{êß|v“Nç>v.õ‡Ï|ü7'{µ:÷Ñïƒð‘k¿xSŸU­zò3{¾x°×ªæÃC‹üG{?öúSáOüG·^ó©ŸÜV>VñÑwNþZ¾áôtaWÁ™gšoüê__^âh¢œÚ€¾Ô5™=Q;yPîUYÁ‘h"±æl&›d‰Lvv—‘†²b"ÄÄe´ew°CÌæDs– s.–ô3éSÁN8í„CN9áœN9áÒI`å”::àfNK»à?6*:>𼬸ò7Å#£„/ŸðK;ªô'QNÿÒG#›ò}F¡ \`מç[ƪýôôð_6ë5Ï2ŒXÔXÎ]÷îºæ=ñ2ËO.ÿˆ¹¨Ì·RÎQ³veÏM/6™þ (axbcݹ_ ]áQËN´ÑÍtýné™þÏÕS›ƒ%.ô-føbRGzȸܠ-­ƒúkU ‚[—#NwòÓb‚±ªioÓ´9²ÞÒ‘#éÖì÷ûIÛ~«3¼Ÿ\ŽS)qGê•ÒXõMëV~mŸR\öªr Ïì•hVZ«W©sJPÌó“'÷Õz¯ÛÑÁ†‚u÷œ»çúä|mëÔbÖÑöÛþ±¡acÈ<0ØPã‹[| #k%G¤§2rMsQv¨›ÿHxèæžÖëGÖê8¡ºgbíøç´×í¸§/qÛp¥+ùÌÞkî¯Zz"ÐóŇœ•ñ©9*½TÔ>^è¬Ê/hÝÞR¸®¦€òó‡Ð&ŸWΟuËÁ§Õð´ŠFŒ·0¬…aY‘àˆÓD06}iFÙ¸žÍœ-Ï8ó‰U¿zLd\ š]|3õã7SueÜÓhw¿»ûÔo(<=ˆë5ŠiZGŸ˜ß ª#Ûa–ÿ‚e^,«eêãóË_Æzƒx­áÿyùu~ññÿŒ×&âdi›ódÖy•ÖÅ:1úŽöÉ}…T®ùå/p„ü#½øMË#\9–]Àz¼D¼Fñò`½ë/Õ'a„ù¦}˜.Ãò šÆ1N¨QÊŽÓ4ŽÏ‡×“˜wáûásç^F¾µPË8˜£l-û8WÎkø;ù_©^T¨ÿ§æ̓šŸiwè t/ëãúÇ ¥†G6ã]¦6Óƒ¦? [„߈ñƬHÖ·Íæßd[²±YNY ¬ûlŒíA{‹ýeG­ã^ÇÕÎ…C®/wkî÷óÖåÍäò;òϬi#éÇõJŸðÑ+ÜŒâ&ÁŸ §T°,6‘•ÿñ3–©Aïæ SKO¦3i–‘3iŽ¸È©Lš'&òLZ…zî;™´¡žIkˆ¶dÒZb‚™LZc¸åÒ*‡OdÒF2 /eÒ&¤¡ì8tfÉYf& $Ÿ­Ê¤bcû3i–t³S™4GªÙ§2ižä²¿Í¤U$©3i5ùW—IkˆŸfÒZ’«üÏšÖ“Z~6“6-ü—2i#ù™ŠÏ¤Mä ê­Ó3æ¦vîZüÛK¤H8\#õMNHã eRç¾íåRóž=’0/ÍMÎOÎ]79Q.uw¶´÷5tÆ6JSóÒ¸´07>1¹w|îZizÇ•õ»§¶MÎ/LMï“úÇ÷Í·Lï™:Æ÷Lmožß>¹obrN JWI« þΫM“só´¼¢<\S^yÂ)ÜûZøßŒ'¸sj~ar §öIƒåýåR||arß‚4¾oB¸T1¶cÇÔöI¥pûäÜÂ8O/ì©ìÞ?75?1µö6_~i†­Ós3Ó™Á-L^7)õŒ/,LÎOïÛµ°0³&ºþúëËÇ3ÀÛ¶|ûôÞÐß{·p`frbr~jç>ÄAù®…½{ºq@ûæqàû•q4«±ºnz®ßž4L™4?9)Ñæç±ý“8´™¹éÝ“Ûʧçv†®Ÿºv*”nojßÎÐåfh+™~þïj£ø&3ä™#Sd'ÙEˆDüd;)Ág„„ñ¯S}dųD:È8B”aª“ìC¨rL5“=ø'­ja^ÉMâsŸ×)u)d7Öj!íØZ3ÀtŒlÄÒ)~¯„GØI²ŸsäZ,›Fúïõßõ·)ýÐ7S¿ßöcn¶Û‚ù=JÍN|;Žé)¬ÕŒo¶c}J_sø6¨Œîïµ$ý¶þÏjmRjÌ_‚¯À™PL—“Êlq¥½à¥öþ÷cø¿Ãkzw*­,(m§!§”¶¢_Š+5).”Þö)PÐc {Ü¡Œwräv¥m:—tËÓ˜Þ•Y•Ýd¿BUóIë­Ìm{~ÿRJžCZž¾ stt×)}ö(å eÒw»”Ü Yƒê-D®WþÊæÊ–·gÚ-WR{òÿ´ÞòÙŒ‚ÇIeíw"lšÊ•6÷âzvg0´Oኡý«æ˜ÆÍߢÕuÊ3Í{®h‡®,}Òº+£ŸÏŒ‡ÒOk3xŸF¼O*Ø.WJw*sœÂ5œÂÔêñÑÛ™)»z4+c¹r>ÿö­Ø!dùOx“‘ø|¢È}ÿ‡ŠÜÇï-r߇—pÌ}Œ=6}lñØò1N>–m_'Ü w¬¸OÞ‡÷.»á\®ÃÆ÷ãµ€×<^¡MbØÙi·{f½àž^ŸïÎÇ 3êTGÙAVù‡½P²ö`j+ŒFÜ£øÜ¾>×íÜöëmŒ´Íl]W²­n[ç6vëz—;1²ìÞ2u`Ǜ̓Ùó ì a§YØ&–ùè0ŒöƒÜï/['÷çà-Û±®¯×ïîåºãx9c%1f86c΀í Öþ¯ƒ•ÜVy-ß§z’=g{Øžõw7vԅ׆õn÷r'tâ4:0KÖƒ-bÌaPŒƒèÁÁ•ƒ¬Ç]N|ˆòZ|Џ„Œè’\a׌‹s M¨°(p‚b´p\8/, êtéïÍäQ‡lÀÃ8ñØ@ ÐuF½ÜוTÇG’pW²°ŸÞåÞÍIÕ]I2¸ydè1€û†ï8vŒ´äu%#ýCɱ¼á®ä&dš8„ 1ï1iž_˜_Ø?¿H ‚©…ùùÀJñ<Ì“ùýÊ{åÝ| ýA”2,œÏÔŸ|»?óVi@y¿@ÓJÃÖæ• JkûW€´Ÿôæéï‡þÖg˜8 endstream endobj 353 0 obj 15102 endobj 354 0 obj <> endobj 355 0 obj <> stream xœ]“Mo›@†ïüŠ=¦‡vv1‰d!9v,ùÐÕéÀ°v‘j@üï»ï¼ÛVê!ÖÃ0³<3ÙÉ·‡Ýaè—üÛ<¶Ç°˜s?ts¸÷¹ æ.ýY1]ß.éIÛk3ey¬=>nK¸†ó¸^gù÷øî¶Ìó´éÆSø”å_ç.Ìýp1O?¶Çø|¼OÓ¯p ÃbЬ®MÎñœÏÍô¥¹†\«ž]|Ý/çXò/áã1#úl©ÒŽ]¸MMæf¸„l]µYï÷u†î¿w«Tr:·?›9¦Ú˜ZþµŽ,Ê«w°S–ìßKò¼R®¸"{ð s4þJ¶à ¹¿‘Wà-k+ðŽqõy'k|O~‹l ºÁÇÒ_¶`úW¨µô¯ð-›üáféïácé_¢GKÿRÀô/áoé_iœþœ-ý+­¥ÿJè/z>ý½~7ù¿Dú;ä ýf.É_sà/…ÕOF¿BÿRsè/ZKO¡¿CïB‡^„þþBO¡©ùô÷zNš¿2ýfë’?úréþàL'ôÄ·çï•9^\š?þ§Žþ}¹ä¯qú{Ü1—îÏLÑxòÇ\òWúGE\þt˱ØÓ?ëeÚû<ÇÕÒeÖÂ6õCø»ïÓ8¡Jÿ~ Zú endstream endobj 356 0 obj <> endobj 357 0 obj <> stream xœí< x\U™g柛–“¦$iZA(œ£­L“š H@¶“dšN›dÂ̤]v{3÷NfÚ™¹ãÜ;I#[A±"ˆW¼e•E×í"Bµº®ïUèî*à·®ºˆÀºº¬²®¢õvÿóß{ç‘LB_üv3$sî9ÿûuþûƒZŒΖ°«° ÉœZhóùþ<̘¯59a‰ž3Ò_Âõñ×NÆs““Ýc€ÏìÞñìTªéC—mg,p>Òºªýô¦³_‹Ï¿Ãç Ó¸!ìü"ÆÜc¯Hç¬=ßôhÀgÄa‹³FRmg¯Ã¥²ÿ4äÔ=…Ïû{øœÆg‘Wszé ÅA|~'c—>Q0Lë ì­GëÍÊóBQ/¤ž |Ÿopq|ŒÄG˜¯žÿÿø.`ÙCøù"»‡Ý滟R¸ý&ܹÓÛÇJ¸óeßC¾ëükqïnö,{!¯eÁ=æÛÌÖã.cßUüì—¾»i\ìkó]¼¨!ÀÃû±ÀÁÀ‡ÙE3p8°3`úÖÇ•­ÊÝø{1|ÕßʾÁÎe}3“}~ëásþÀRö8†{ØÓÈý<ö³»Ø•(K›Ï`Wù¯ôÇpçëÊav ~ î¡ôÈkŒþ®„µÊcôy–]…œ쮆ƒ m‹ÎC.Òbwû¾ì{¦á}ìNöü1¼ ¾çÛ8/ð±À&¶ß±ìdû‘ö-§!å›BÝåçJIÝ?Øé»‡ý$°sÑÒþªÔyÞï¡F)ö9ülhF.ñíƒëPRyº’^´9Ð…øHaÑ^Ôš1.`»pu%û$»­…i¶)‘¾ )Ï!æm'Pçý¾wûŸc‡¡Ÿ­a©ÀÏÐÖ¬±iÆ\Ô ÀïcAÑ|ÀßÑl¸|»øû«Ög=ŠæEâ9Ð4%92²=p–²ã€röèX| ÐqÞó>±6¸ed»8ðûp¿K5¼³÷âÛq)Ÿp÷Ãýt&™P:ðŸÈÎ"™×7_^ÏõÍzÏZ4KÙÓ”rV£Eìå–~Ë~ë[¬\å°®¯<úÌkXó£Ï<ú̺e-«Z:Vµ¬JØïL8ëwOÛÓ‹–þæņ5˜ñšïqÿUþkFËì6ÀÇÍߘP×-[µ|•æ?ë÷Oû¯¹Ë©þ7Ÿ»¡ýSzú¥¿bç.¦œùÖÛ}F%ƒ\‰°^U’ ý“³WV§Ù¬´ócF¤üO2¬•Ì)qÄ iøsÖÌn–Ëý+ð[æÀË}—•éÜT¦écøäs±ì#îpÿ£î:€ëûܵ‚µïóîºqÌ>g½˜µ`f8ëFŒµ§ÜuSëí>¯j.e¯]v‡»nf˾í®[X`Ù£/p ´nÙîÚÇV,oqרÛòW¹kÀý.wÀuØ]+ìŒåot× ¬m¹é®³öå׺ëFÖ³üã£gù“îz)K_²Ò]7³—ìs×-lñ%·ö…©bf·ŶHbSt4!"NìÑ"4¼Cl‰ ÷ExûH,óhLD†F#aÜ‹ ÷ ŽöG†D/â Gb02I ÑD”P]R‘p\ Çú6ác¨72Iìò‘Ä0ÒDáb"$FB±D¤ot0#£±‘h<Œ4ú‘ìpdxc ¹„‡Â¨ꋎìˆE6%‚ˆ”ÀÍ OÄBýá¡PlKP ±(ªÒ‰R" Þ*‘ã›Bƒƒ¢7’ˆ'báЄ•ÖŽ…ùÆèèp(‰‹Þ0ªê ;²¡*}ƒ¡ÈPPô‡†BR‰sÔ©˜ƒK„ðp8 ŠøH¸/"hÇH,Ü— H´=ZbÄí‹Ç×âÂy,‚|Û¦0±@BøOIF꣺’N"K”EÙ‰‡ƒ"‹Ä¥G6Æ¢(®ôgt#EÀ(ÚS:oØ•WúHîÍ„’Ø®‚ýáÐ ŒK1pƒ×Àbt…÷$õ‚%cÛMn§4Rujg¢Ö)ÂyL\g–x-afÑ­ãT·Ê…-¯ã Sz©|`tãMä”^mBÇ hÊRb¹!‹ÉdƤLÇ+0g8wž0Õ,2C,™E…µRÍ"šY³&¡¸wŠD™,f,,&B-án1óf÷.º×i *H.•âàÈ_ÔÍÞR™ =;Õ‰°Ey—‘$™<öj9Wu2_ÒêñZKŒqͰ8vt‚sê¸N¸u:Ú^öäôAÜéƒÄñôA¼Ò‰ãìƒøÜ>È-òI¢dzwFµÒ°ðé•„×+ñ—F¯Ä?¼`½wö„z%~{%^é•ÄqöJ¼¦/8Ž^‰Ï×+‰£ï•xU¯T¾5íÞçX$NV»ÄÝvIœP»ÄkÄ¥÷Æ“Ý2ñ¼!N¸eâ'µeânË$Ž¿eâ³[&q<-¯Û2‰ci™x"´uhsTŠÚt\ݯh~"Ý÷º#q"ݯîŽÄquG¼nw$N¤;’ÁZ“(寇ÏÛøˆch|øÂ8ŠÆ‡SãSÛ;<Ccyð¨iàøÕ¹àäªk2³;Ó•Á ²§³.t¹elÖäŒõ1ƒØ+² gif1ÁV³$[ƒßÝl~Öãj !ëE‹™ø[d:SYŽq7Âò߉«ËâG°X™–IO:~ëˆ35„äGÁõÂ2×rš@^r\ŸGh)‡Š8ÇÆ±W»o++!DaU¢¦†J ¤’Ç¿„Cº„ˆo w•ÎfÓ‰%2ð³{žÓú»[IBéĵå\Ï.¨®O!EŽ®–ë ©»…’÷°.üh.üÂw"œßEÔF'Ü"é݉4tÄÙXEͳƒç‹¹—gÒ¶:ùGG+la¥7NŽ%¥<™B˜4afð¬@r[äOi"aÈT'fYe¶•*ÕÄÐ|ÚpüÔÓÝñ™Š«j«ÍfÎÖžÀ‡U†œü¼¬ïïŠÎ<á´²hGFYŽl½÷ ôÀóÉ"5!z9¢V‰þ É”¦3ÝÕkœ¸ä]¯]¿;Þr¸91æÄsä2ÈûyÂ/¸æp0ªåÆXÆ•h8–æ.M‹¤˜OI‚“qèP÷(HhGv'–uÊW'öÚ«¢¤<'q5ú6I®$⨮~œ² ‰š#*xöIá*ëfÒ게²®Hù-Œ_'ú%ÇŠMäN²FCIÂö¤ÑH‹bm O-:uxð8ÝlN¢d%¢âØd’b MUÇr-“£½j<Š5QéH["«¼#×9ò§ãk^UALÄΣG°¬gUA”|phg\«Öza­=Ë9ÒÊm‘\•¨«h4IöÈ/RTµó®†zGþJAú––Ø…I¢çÀxþ“qœu+›ç¡$ñÖHâŒ+ieg•NEŠU†ŠªkQÅs+Aá-7ÌX/W*«®Õx‚tVIrNµ¹6Ök8w‰º€? ºå„ëû}WêÇÑøÂ¢›HÞœª«Qg¥•6™r´yŠdÔÜHÊRœË;Ž¤Ò¦Z•Ï«£Î»AUº3T3²ôÄËi$©ôW¾Êã5÷ªÃÉ«¡*E»Ùö1ŸW'OJîjP‰0•|tôÔò™mz²]g /3O5çeï©ÎªTW*t½³‘^¾Ì¾=t·Î餅Çi’´Ò¿½Î}Ø^Ö{6Ç3ï¶m¯Š2'ggÝ/c”ïF•¬%7¼8™ÀÓL‹élÙ9ïfr?Îí¥REÕËÕ~wdövxÝLIS…ômº2êIóʼnWëêÕnn‚<ù½Ú^õ¬Ê«,WíÃãÍU“ª¦wWW²ÍË$Ù9d˽GÑŨ¥X ˆÞÇ]9÷¡Œ*^®ª/d¥š_«17G,÷>L•-µ‰…‰O” ã“äŧÛ†}dŒÎ"¸'°‹áÉV|êÇÝ~òKˆNäy;eã6\KŠQ6J´1ü+iïÀI[г|Ú‚ðÃHKâ†ÙvâFjq”,ŠkI{wñ;ìÂIŒ>ÜÅg¹`² uø #V‚rGâIYI¸_áZ+U„8z’ áS éorOCH;Bô¤üAêäzؕӱ\Œ¨KIÊ’fJ4HOrw¿G.Nö ‘ÎŽ´Ã¤ÃF×ÖM'²né(={9r »1"ÛÕj!ý´ä¯háx äþí«²YÅûîw=yÄ9QÇ*Û(Ã"_ÇË9²‘òwÈ•|´a•0êÆg´,Y­}½<òàŽ¦v8´<Þµì§xt%Œ—­á@ðè:µ+Œ÷Z’Þs¬rÝ®½¹«»ÆJ7ZÝw«jmu'àTá‚ÍÍ‚«ì:oKÎUyשîÝê½a{oÇN/ïu½•îéÝÎ;Qu׫Qîô€f¹+1¨4ÊÉ$Vîô‚;;1jÞó$g•îþ`™—wUh9}¥JÝ‚äfÖ±æü7ŸófX ûÞá2IkËíL¤~%Vî¿yÖÛ°7ÿ™ëQמ.õ:‡jûÉß÷]*C–ýd§K·È¼÷²ŠM¤œ¹Zn–×+Ñ'©õ°ÙSiƒñ*É5²5gÎŒNòäT¯¼׋?u:ÙsÙ—Ò<ˆ×̃fw^/Ü<ˆ×‰S<âG5ªíä“U2UfäÑMPëMXø‹6WsæJüÿçJUs¥Ê„ás®ÄknØo®Äë¼­½æJ¼î\©¢Ñ©™+ñæ§f®ÄٱΕ*ÿÖédΕ*ùV;Wšïöºä¼Ÿ;ÄKmºÄYít©þtãÔL—øÖU|iO™8ÅØÜnæÔO™øKxÊÄgM™*ﺧrÊÄŸwÊ$NÙ”‰ÔI¼`S&N6ØŠT7“´ŽµCx~êfG¼®Ï_¬ÙŸ3;/ÚìˆÏ;;ªÌ€^øÙ?†ÙÑBt_ØÙ‘WYç¿QæN|øqL|ª§4'sâÃOhâ3÷íø&>¼jâ³ÐÜádLh¬9ô7°Ê¤ùÔyÿÍUÙe7þv‘luMÔ¿p¯¶[ø¿9£ÿÍ2ýy {C½ÿ¯‚ƒþ«7ù­ 3mð?ð›nøõ4<·~eÃ/møïøÅRø¯ix¶~~}Hù¹ ?›†ÿœ†gfà?fà§6ü¤þ½~lÿuÃÓOÅ•§§á)|*Oþ¨Kyr~ÔOØðCï†mƒLÃ÷mø^+üË^øî!øg¾ƒàßÙ =: <¶€G¾}–òˆ ß> ¾eÃ?Ùð6üƒ ‡§áá‡ÎQ¶á¡sà›Ýð ¾¶¯EùÚÙðÕð¾l×lø¢ gÃlø[>oÃçl8dÃg[à3ïèP>cÃÁ)mxð+”ÁƒWøt‡òÀŽÀŸî€ûmøÔ4ÜgÃߨpÀ†¿¶á“üÕRøÄ½Ê'4¸÷žVåÞ¸§>ŽB|>fÃGm¸Û†¿l…»løÈ‡—*é†/…¿ÐàN¹s>d÷/Qî°áö%pÛ­g*·ipë-ÍÊ­gÂ-Íp3‡›løàt“òA¦›àˆôixÿû–*ï_ ï[ >ï½ñò^nÜ…rã!¸ñêÀþ÷t(û¯€ýïé€wÛpû:•lxW'\j^‚ëÞÙ¨\×ïl„kqãZ Þ–zGìk·ÛpÍÛZ”klx[ ¼Õ†«m¸Ê† GÞ²w¯òöî…?ÓàÊÄråÊx³ S6ìY “K`‚CÉkÌ(ÎÀ›f `ƒaCÞ†ì*Ømî–^eW26¤÷Â8>¤lÐmÐlHÚ0fƒÚ;gàO–À6¼Ñ†7ذc;WvÌÀvÛVœ©l놭6Œ"çÑ^H,‡¸¯Y‰Ÿ±6¸|ó2årF!jÃðP³2lÃP3 Ú°O¶Ø°9Ò¬l^‘•MJ¤65Á€ §!< ý6ôù×*}3Ð{B[`ƒ dÃe¯oU.kƒ×_zºòúV¸ô’&åÒ GN‡Kš Ç†‹mxÝEmÊëfࢠ›•‹Úà • ›á‚Fxí9°¾ º_Ó¨tÛðšFX×Õ¨¬k‚®Fè\{šÒÙ kOƒ`7œÿêå| ^½¦Uyu¬i…Õ¯êPV‡àUðÊŽFå•§CG#¼Â†ólh?V¡ž«ZAhpî œƒ*œ£ÁÊ&8-x¶ gÍÀË{áL|8Ó†34xZêe6¬@¤gÂrÚlXfC+´ÚЂº¶ôBó^8]ƒ¥64-Y¡4Ù°¡—¬€Fx3œfÃb[lâ6hÐ €‡Œ€å€»`ƒŸýkÁ× ÌßAŸ¶ïݾóÿ~Ø‹-À‚?+ÿÐð1 endstream endobj 358 0 obj 5799 endobj 359 0 obj <> endobj 360 0 obj <> stream xœ]½nÄ „{žbËKq»¶,Ew:ÉE~'€aíCŠ´Æ…ß>kâ$R †™fÑ—îÚQÈú•£ë1ÃÈ3.qe‡0àHU5øàò¡Êîf›”¶ß–ŒsGcl¥ßÄ[2opzôqÀ¥_Ø#šàôqéE÷kJŸ8#e0ªmÁã(÷<ÙôlgÔ…:w^ì·³ ÷-!ÔEWßU\ô¸$ë-M¨cZhn·V!ùÞA £»[–d%Icêkɧ;µõÓÜÊ,MÊì¥Âþx üýžÓN•õƒ5m‰ endstream endobj 361 0 obj <> endobj 362 0 obj <> stream xœåzix×uè=3lCC\@Ä€P$Aì\Ä E€¤ ’à&’’($ÀÅ’.¼É–ìØ–ÂH^bG±ÚÔK»× Ý4²ÈJ³<§‰£úåµÉ{ulʼngQª÷â4m=3©ÅNò}íû¾÷ã 03çž{î¹÷žíž{äò¡8É!ÇMÓ£‹ #ýÝ„oyÓ‡“ü}SwÚ¾Hµufqö`¥ïIˆ¬ˆ3{àÖ™ð7ê"„å ):1Æž¿ýi/!Â_ ú9D¤¯¼*Ç2¶'Ö¹ƒÉ[ú™4‚2±þ@b:ÚÖw[–[ÄòÁè-‹ÒÏRXNb™_ˆŒÿêŸÿ–!Dù…ÅÄJòu0]!ıC¬_\Ž/ÖœÕX>€ãû.â?╃ \,S´Œ‘+”*5›£Ñê¸Ü<½!¿ °ÈHþ?¹˜o“2r$ùäVéyÝ%k"r3!ë¿KWŸéÑõßüß…Rz‚*@KÒä50_’@;û Y#ß%®Žx¨"‘‚ròcò>y“¼FþÀ¼‚ Rìǧ’¼AÞ"?!ßø`Ï"yr ‡#äWxȃríþAògäìÿM˜†=TZak=ÔijÇúÁËNÝE~&äúCòSò<("i#ÎâQ²J=Eî&“ä[8jBžÆíbp 9е™+Aî ÷äuy¹ý%t‚|‚|šÜ‹”ÿ‹¼OubŸfi2(Ì6yu£­üsô"õ%Jyå y?½ø‰‘X:‘ý0Ý0Á+J’³þKæÉß½CN&>GÇÇF†‡"ý}½;ÂÛ{º»BÁÎmí[kKsSãÖ†ú:ÛåtÔTn©°Y…r‹¹ÈËé´V­R*䌌¦€Ô…Ð$Ÿª˜LÉ*„în‡X¢ˆˆ^ƒ˜Lñˆ ]O“â'%2þzÊRÎÜ@ÈP6)ã[H‹£† |êõN? »Æ>Õ)Œó©KÜ+Á² © Á‚Å‚-ø`Ñ\'Ÿ‚I>˜ ž[ Nv"¿5V½MØW;jÈššEE(U),®AeHUlZ£ˆR#v›¢mÁh, vš,–qGMOJ+tJUd›Ä2%ß–RH,ùyqèäcüZÍùÕ“g925iω ±èž±Ŷ«tpuõx*מª:SU·ý¸gOÕÁ”]äÜì'|µKH16NàWMp:Â¥_\‰f1r÷k"‚!ïêjHàC«“«Ñ³ëǦžV×rrVƒ(aÃVg×_þ˜):9žâ&ç );ÙÐ`8¥Ø=–¢l!~.ŠüúËV“%w|ƒ&òûª Å2µXĉìl€La!ul`,SæÉ”épÙÇSÔ¤Xs~£&D¬9¶Q³Ù|R@m†‡ÆVS2[OL¢Œ?M›B{ºIT…À¥´ÿb²«y¹|£k\¢åqT=±y>ÅT X°Õµ ÐRÄ&«œTÐþKæuÉ„Täæñ²ù…àdö{x®ðŽšT·=£úá±T @4«£àšÛ…-¢“¨¢ùNI})—°˜2›ú‡œ“šd›¥ ÛRdr:Û*å vŠ=óÁÕÉÎÌD^ÂÀØKÄ·~q­–7½è#µd¼S$.؆vU\‹Í¤Ì“¦zÚ ?f²¤ã¨àqa,>.J¨ê"vg‘zLQÛ†ÇÂCBx`רÖì@2";™-xaÌ”aƒ&—RÚ”üe¢Ç‘CB@èhÁgJaSâÍ¡À%¬hª-ü˜È5#UÅãY:±|SF4§mÝÜäbùlë6YÆ-™ËQCa5Ÿí[(E¡voTÑ6Œˆ£„eY$Ú DÂ)7p@¦ÏR·£'ËàN¼PKEs(cŒßA>&êçÈøÜêä¸hã¤%‚_HІÒÚÖ€’ç¤ÔB¼#Å "Þ/âý¼\Ä+Ð2 5·­rAá×Eqy¤®µTŒÁ YAœk@\-/(dE—¼kræÍ–h A²F‹hFD¿ ×òˆx_®%×fɵtR|Ú ¦ç˜‘¶Söº¸p“æõŸÊ>Ãì"Ýä®@•¬ÁÐ@±J“’òw‚£z<Ðc7P=Ô8Eµ›•ÎWWÂh<»~>`Uåt»ÌF£ÙE³••Ûµ‰ l»ùÏç:íÉZEnRˉßwÉÉ—×èºÔ®‰K¹>W^!Æ(—»$~r=n2!^€_--”;©ºh°É |Þ6ª¡ êj”¤R}]m…P.WØÚhŸ·ŒÊ7ÈZZet¾AÌÛ{ú›GîzvÎPÎì]ðŽv:TåÙ>V1U³§zb°UM ŽÞYœþ¹yék{>6ã–Ñlî;`ûþ ·ìzd®±)z4¤Ö«»£FwÈ¡ÊS:Íìt•uy\jÙ0}j—ÝÙßšËç6Æ[t2•³s§«TÒ‘sÙÌuU­šG °¡sžÈ¡rrTI˜‘FŽ_¹Ÿég(Ž£ ¸`ÔC,‘GT:ÂDèü±ñ1;ñ_òúQr(³‰¥%Ÿ‹„¾¨­”s £UÛ¹pÙ[ì\÷q†³Û¹¯¯%ëqOØ, KƒE÷–‹‚úˆÚ~û[|ìDú-Õü«J0Vž;wŽ:wî«.ˆº¯Àñ‘õ<þ1¯_ L³ºîQv–¥XÚDSB9 –‡74á±ègÈ:mÞ:Pçé¨Q(·ô/ø›Gëi™nèž¿JŒ}ü¦HÝÕ±……%8ÝÔ~ûd´ôu•lŽ­ejÖä±U{Ì…:­µig@Wž×{ëˆÃÒµÐW¼ÅWÆúZl5¥ù:­­uOPå÷úëgd}ÄBn ô±%Pj ÐÕ90ªt³…ºh¹l¡,¡H¥Tª`PV³5ËrjV­d‹h•e )ºŒËÕ©UY¯ôùý¯Oø2Ny£C.]53p¦bp®Øb)1ûDÊ9âmçô䎤ß;¡e).µ”ŒGoëÛº¿’Ž(ÙÎCŸKo§¾¼ãLK©‹+n·×6î j…G­é>ÙWeaÒ€{Ư{ïþ€¥}Gé¶Ä@IkqYéü^Ï®c‘‘›îøÛûò=¾ü_¥Âz÷ðï~xøùdýV_Së 7¿jô¾½ý™©²þã_ž@_N¢-V‰@˼ FÈç@ÆšKh°|ªœ*//É é ¯¨}0*KºÎãRWÇ’†ÛiKY„ §^òMˆž ®¥Œ„1)ȬgâÅdƒWFR¥ÀÔKÊFŒnŒ­xÿãó>¥²8ñä…Ûçv§ßazÇ–N yOGîâ¡°hêþ³†­sï¶õUÿîC;&ï3Ú¡é—×v‡þ>Ó„?:ïG›Ûó¹çc$NÒpÏ8Àä€y T–ƒ,ߟIŒ »JKÝ[º\j¿º_M«ùHWãMf±g°\6šÍñ££0’×\§`ÙRÑÌcßûèÁ'çpE±O}oõðggêôjõàx[t{>ox°m*\O•ùÎ'†ç?±§¢¿úÖ×O7ÄîßY=êöí´Æ'ì»V'÷†öOÛwÄù gõS‰;®XÀ/ã ®êPåœwRNpzBÕjÌëá¼ç½TÊ ^o½QTKÔÑ€ÓYV5 áÊ"¢’¼N/‰iHÚÐӥܼƉ qÂÌÕEžY…ÐîQQzqÊiö3ýÄR«JYö‘çþvfî“Snµ®”« Ý=[¨ÕƒvdÚ}ï Aûh¸™ƒoSÔŒÁ;3c‹ÔüéÿøHSóÁ?ÙçØëSz=ž&ž3{,…ιÑFz­Ô éJ´3³hŸ‡óW`.F“š€š¸ÕºnBÓ uvýï,pûX§Ç‰ù}àòÙqF>»s1Ðæ+¿ú1•k`.þ;/Úúúkw)k",F£º•Aƒ d å¼òŒ’2)A¥¥J)‡ùi9%gŒä j€mf õ-æŠ9‹ÉÕö]wŒ…f6Ìîfi†eXz+ÀoÔjêyp*P©43ÔiŠ2P ÇöÓûкú‚ndj… ;at,M‘ül åó‰ÁÚ>áCS52ë›ôp!ŒyU®oóF‚FIQtOXôⓆ—ÓŸOÿ=E§ß×sP žtÔÀ‰ô-”‹bÓÁÔ•½òéh‘,£<Ä}Bq®?CŠüÂ|ªV =ô8M5|Ë /¹Áåö»©¯y᯽àöº½•… ë&0™ê*ˆšSSê~÷>7åÖyà¨çÏÏÛ™Çcç“y {RÜ, ‰Î¿ôúDÖ—&.e§3‘±2ô)9µ>ëêóÄP47æjÜ“ɯl >…lÉv×Ó_¿iäÙF­nËÑÏ~}aðþùæô³æW6Úš÷lo1åæ îhØnKÿû{nê3¯¦óÔv×Ìg’M÷îø&ä<ÑQ}òðÍ«í®Ñ;¾xb÷jÝü¨+ñ×Úû7Ôr/Êå2ÚYñ“gÑùZ×ÔRõ(lÀšL&ªª4âJUZÍTØla+c°Z†ÁG ÄÜ{€çÀ'ôoíºÌ‹ósýÍ Öª|›•T7—z"E\s„a ² uvMòù¥ä&ëŽKvi›¨´â6!ðakÒ5‹’¥R¸1Ñ}À•u›V|/âìÇí_˾¤}ÇÄD`žSF¢\ÀBýY:õu¨“Éå Å–òå B…¬éÊÇ˶u´‹Z;:ʨ%i¿¾þýô¨ìæºU˜í>˜2ÖB‡sÐIY(Õ535T…dZÜÅp]ºFØ×v à ƒÖ°­Â`³¡µT51—–Ã`qØTb0•”p¦³ úMûLLo›d&ñÁ¤--!„Õe´©X““o¤7ì\ô]ܨˆ+÷ ç× lœdbl,òͽKv#ñhühàonÏJ”Ê{ÓïݪP¶ìðí K Àƒ±O®ÓæÐôÔ‘Å-¡éfa{å•Aê 5P쑾Ì|;½Ÿootj21ëêYÐl V)/’S£ ŒP‘?p $`õõG@ש¥ õ#»Û#ƪ«§?WO~¾—~ËJ5Ÿ;wN9'ký×+’¿üÏG]`Gu½ˆR.ºK!£9¸†»{=^ƒÇëåðöÍg×Ï¢ÚžH 4·´ô0`~ÅáMˆÖïéÇ…œÖáëqÏóÒŠ.÷xÚŠs4š^­Î Õé8¼/j/k)íÖ*®XйÀÛœ£$ŠžË7èZr‚¥ûûw-[Òïï>ñÒ-ñ33µŠÜý?ûéÕJê~ÇWçŸ9uxÿL}^îV4Ê }|Á_Ów°ÝZ>þð]ÉÅ•öŸà<¶aüýK&H䓘¬ÚPM™ô 픪èFšê±Œ[æ-4k1Y(KM¢¨ÌúNÆ|ðˆ@ °]€fÜ`ð¼ÙÌrEPTäÊI¸X?›`i¶Ì\en4SfÓ!ë–-¹Â /ÏMælœ(‹f€á5×·‘'Jv!ŠqøcïF˜YÃZaóŒ'+ô……Þˆ ²Aý̧Þ8¶òé'”A^u¨¾nw·7G¾oW(^‘þå×éþÊ+©QïêÈø‰=nøFì/öˆ[I®ÐÒæ.åÛö4—•ôï©« ~ûFúe[g×½^QÏ/¡C3?#&²ð«Ä<ƒ@1.4 §)e$8i€0¥0P ‡·Ì…©‘‚ÑGt9@YĈY?›‡4>é´Ð—9Øšð]u ~ÜFÌkĹÛÅÜÃACædF‘9¸Ám™‚zã¹ô{Ï­c^A¸œæåÔ]3Ÿn²¶ìnê¯-S²ðŠ>ò»{è#ç†ÚŽÄüyê³J¶Øµ­ºñœô¿ÈýyÇSЧ÷éZ~MÌ™ÿT\8U~ÿÆ/ù믥û¤ÓD‰ësöâÿ®œ¹æÿØ ÿÙ뤓4cܬ ï‚ᇈ•Làª>Œ{¹×È2é%'Ö¿{\ˆãXÙ&J¯òß¡^ :©)Ü0–uËRLó(sN[q§âûÊ“ªNÕ÷UßW[Õï±;Ø7s:3c"ŤÇ™ù……ÃÍ.xºqâÈK`göŸ<„Lf[ˆO– ÛŠ%‰,LãÈnËÂ2Ô÷Y˜!ZòJ–#ùfV õ;YXI °' «ˆ³0‹c¸sóßDNø“,¬! x- k Ú4ö2\<ÈyêPRF×eaŠÐCY˜&;èù,,#õô²0CJèŸga9ñÊYXAÞ—5fa%©dYXEJ¤ß£D˜%[™¥,œCö0ŸËÂò–œÉÂZrDþ£m‰Å[—çgç’|åtïu»øÁxŒïŽ&køž…i'ß~à/¬ðËñ•øòáxÌÉïèé¶÷ô÷ñó+|”O.GcñƒÑåý|bæúö;æ§âËÑä|bïM,$:b|O2z`~º}e:¾‹/óþ"þª?Pµ3¾¼"â=Nwƒ³ö*¡Hçé>ÀáŒ'8;¿’Œ/#r~q9ùH4_HòÑ…?¼Ù°ff~:.!§ãËÉ('’s8•›-Ï¯Äæ§ÅÞVœ›3Ü–X^LdÆ0”ŒŽó½Ñd2¾’X˜K&›\®›o¾ÙÍO#­s:qÐõ‡ê’·.Æcñ•ùÙ”s.yðÀРüÔ#ŽæZ©† ¨¿š~%çEö+È&á-.'nŠO'‰åY×Íóûç]~ó ³®«lD.Ù~þk­1P$È"¹ƒÈ<™%s$IxRI¦qsÆ/qã§¡AǰēnEŠ„zÈR9j'ðÃ_ÃaE*ÅñÇ÷a©­H¹[u rk'Ã÷cˆá±•HÅ;‰ÔQ¤“ƒø^&û— 3°ÿØ~JêG¬™Gú¬í•Þ ì-c‹IôI¤8€ÓØû >ãH“Zò¸Dó„ÿ{xýçZí”Z¬lÒ{p&¢¤¤öC9nðslòûãcø¯É5£ÁY‰KR⡜—x ÅD‘ZвLJ½-HTÃÒc?ö8#7~ å´Ä[œK†sṬVn"‡$«ZAJ±ÝÆÜV°çêP´äe´åÄur’FwXê³WÂ'%Ëëæ¤Ò"iÂåÍEn–>N¤¹žót–¯S‚"å¶]ýlQ’c\Òý,ÒfìÀ)ñ<ˆúÜ‘•Ђä=¢„]3ÇŒl~Ÿ­†¤wÆÿ\ÇGÔ¬øÛnŒ~%;þ©ŸŒÔñ™@¹Ç%i;%ì¬4ÇyÔásñ™ËÏÈ\AäSpôOáØ£>úÄ£´x´°þ¨ZÒ}\Ÿ„£§œæNOž¦÷= ~NÌ1ëNšOºNÒã@îãî‹ÜG»îõßKÝó½Ùý¸ëàºùŽáÐ oN®Í+‘<óò‚ϼ´°nN„¼æ¼‹¡hÄè+Qøè9ÒV„øšÚg5GñžÄ{_ÄhÞ*6ý)\þ)ìüÙÌÏ(åÏàg¡sÿìA©îF>»B¼YïÍapî2/=¢£áôøÓãÔö9ˆ÷@¤Ìèç…ßo, ]îƒza½¡*³n;ô„læî`î éͺÐÑÐ?‡ÖC²’˜i¤ ÐêÍÉÝçÕP€Úð’³Î¯Û§;ª“ét.]¿.¡{@÷¶n]§ð#îŸu4f¨ýŽgáÁµá!»=|V±>N©"»Sp"eŸ])ù‰Ùµ{l àþñ{O"¥á”wh,5Y:NňÀ1¸ÒµÒ1¾’\I²K$ñ‘$öä¡•Ly…ˆà½bO"ÉÐIµˆÍ‘ξ²"Ò®¬€ÈÎŽ°ÚÅ"Å&++]ˆèd–»Èd¥ˆüng¯I endstream endobj 363 0 obj 8158 endobj 364 0 obj <> endobj 365 0 obj <> stream xœ]’Mnƒ0F÷œÂËtM€DBH) ‹þ¨´{H‘б Ypûz<´•º=ãoì‡ÇaY_j=,á«d ë­,ÌÓÝJ`ÜpÁÔ —mäßrlMºÚfkÝOy„onn^ìÊvg5uð„/Vôí>ÊÆ›»1_0‚^XSлužZóÜŽúª}­Üô°¬{Wòx_ 0áÇœTä¤`6­Ûêy,¯ª"­þ͉„Jº^~¶ÖE¹‹FQŽ…çô„_‘ž³râY\Súîk3b|¤Ú ùDì3gâ ù‘8A.='%ò…Ö9"_É-B®(<¢LŠLþføæÏ‘7\‡“¿ðòOq/Nþ)þ 'ÿý9ùÇèÆ7ÿÔævjx¬Ø÷Ÿv1y·ÖµÊ_ß#ìΠá÷þ˜É`•¾¯T¥ endstream endobj 366 0 obj <> endobj 367 0 obj <> stream xœÕ{ tTÇ•hÝzïõ¾ª©Õ’º[­½¥nI­­ý´µ$hI $¡‰E’ÀÆÆ¶‰Á2ì`‚—’Éb;vh¼ÊK€,ß“dâ`g’ÉfHLlg!{²Øjý[¯[ Ïüþÿçüó»»Þ«½nÝ{ë.UÕ3S;‡‰†ì%·LݦjBÈ ˜Á]3ÎÓÛß­ÇøEB覑ÉÍÛ3ü¿ø!|-!raó¶Ý#¿Û‘ö(!êU„ä_:uûù„T–cE£˜ñØÂS2LÏ`:etûÌ­•ú÷”˜>ŽéÛ&ŠŸ.~€€“¥·Ü:ù8÷ÓO`Ú9>°}xjÇÞÅô÷Q MNLϼAÒ„4d³òÉ©áÉG6# Ó8>ÏÚ~ÙGƒQKSŽdr…R¥Öhuzƒ1Æd¶Xcãlñö„Ä$‡Ó•ìNIMKÏÈÌòdçx}¹yùþ‚¢â%¥e啱ªšüÿý~H’ÈB±5Òó†_JÌäBÿÈRןáu‹ù¿ …Bz‚ ÒÈŸÉ;@É/'O“«ä¯ä[äò69¿¼6¤ƒ€\Å:—ȇä—ä{ŸÞ+ö§T)úy‡¼O^'G>µ^˜|Çü59ûÈ‹pzÈ4˜É/°öS`'_@îßÉŸä¿.¸"Ï@äÑcttä7ô®û ÿë⟰§?Á|þŽ3È…»8 ÑJ²Ÿ~…v’B˜ûé!º,’B)Ž¿žÌ’ÏE;˜&wÜ^ù yŒ ߘ´ÒÐÕ‹ÿF^$çÈÈÏÉÝä 9FNÒ{¨ñCÿ B@¨ , Š69³ÔVö$7I_£Š…Gȃø]ß!2o’Ÿ‚3¼¡;G&o’Ý …Aþ4d€›\@ül'_"ÛÈCäòùèÀõó(9 µP·˜M‹,+àÈ{Â…»q}$c¤V0“„ˆuÝ]ím­-ÍkV¯jZÙØP¬«­©®•åe¥%+Š‹ ór}ÞœìŒô´Ôw²Ëg6ô:­Z¥TÈeÏQ Ùuî`¿3”ÖâÓÜ 9,íÀŒeý!'fo¬röKÕœ7Ö±æÈM5ÅHMñZM08ËIyN¶³Îí ½QëvÎCOkÆÕº»¡ËR|µçÓ¤„.¶pÖÅÖ:CÐï¬ wÎÕõ×b§ÕªwͰ*'›œV©1ªÆX(Ã=‰˜®)B3êJOS¢Ð²aC\jÝÀP¨¥µ«®Öîruçd7†tîZ©ˆÔH]†d5!¹Ô¥sŒNîwžÎ>7wpÞ@6õ{4Cî¡ ]!nÛÎqussûCFO(Ó]ʼíRÎ|8”í®­ yX¯Mmׯiº>$„„TƒÛ9÷Áé¸/ÿñÆœhŽ,ÕðaÑ ¢wn.èvçúçæ÷nr; î¹ÓÍÜdb˜´ta«ùÅWî·‡‚»C†þQ(N6ØÖ2µ®ï ÑÔ stsðp»VØ]Æî¥:-ÿY1AD :§.›øýó"Ù„‰ÐÞÖ®HÚI6ÙŸ%¢ÏÓ¢ý¬äÜR‰¥“•ì]*¹Ö¼ßÔljïš ñ©Cî:Äñý¡½›Ÿ¶0R¸ !Ý¿Û]î¹£³Ä×-Õu"TCcΆhÁVË §°&s)¡û÷Èë²H3Æ8KÜØ ë§Î]×ýíÜ9Ù¡O„ô]!±#â@”Fu§s}Øb I4V+‘/äsO†Ìîêkôd`ÕµwIM¢ÍBæšéŒ¶ ùêjÙÈκ¹þÚ¬/wk×ËÄ¿xñtÓþœŸîZVÙZƒ|•V7×54rôÛ‡p¥8»ì®Øîvw w3FC e^Äá\Òˆ!ZÓÑÕÔînjíéZ$RÀºãSënêÆÝetƒ,R¤*œ]ÔÎucEf8ƒqW—ã3$OU`0 Â¥\ƪÕåÎ.”áKµŒP¦³n¸6Z¥oèT`ìTÓ°Ô›Œ%±Ÿš»«ÛùädS,vFÆ †Ô†¥".%æQìFÊb¸Œc<ïìr»»Ý£ÎØÒÅæÆÐ#a9Š çQZuÜZ†,DqañR‚!3ôØ—#7T/¥¯%n*n\*vÎ)ÜMís¬sw´CÔT©!ÂXX\a´K«Ÿ­gwp1®hi=ÏE¶–GÙ²s7͹ۻʥÚ(Aî°ßÆÆŠ!MÐÔQ“¬ú´´žá@{O×Ë4Ïtt=KÖôWwŸNÁ²®—¨+¤\ÊrY&K8Y‚õÔ† …Tßþ²HÈ^©”—2¤ôà<)O±”dpžFò KyóøHž(å±R)nqŒò»Î9Äè³§{t®¿›ñ8±"Fð!pW"vÜ•§Ê4!•{¸:¤vW³üËDòe,_ŽœVÈɾmÎPçþ(.‡©GJÐ.¦CB'ZÓrâ= ÄWþ¬œ÷^Î?-~Yþ,G1JNs,[`ÙÏÊe¾OÊŸ–ï7ºŒ©.£«–:Ã)p<<*tþýëµüLí’/.þ¯:ˆƒlËìN¥¦A.˜fM'LœÉä’©‚ŽIº—¡~ŽYÇ ×ìèsL88‡¾%Ϊ„ÊËxª'¿ßg¸œ¸ ¾ÞïÅDL‰o‡ß——K<à.ô›‹ËhN¢þü¢b‹Žs'{ùBhøÚ (Óï Ï ®ú*qo µqõZÿÚ=… Jnψ¿wfáO)Õ~‡NûŠL£ókWwd2ØóÐÎ| -M5yUŒS)âT¡TñP¢^Å©H<âM=¿ø¦8ª57ÔNu®šS«µ‚Ì"£2A¨ù…ËÅBîC9¼(ON–Ã.ù½rÚ&‡  ä`•ÃÇ/Ãï€> °îZëâr^©…µÂˆÀ z5GÑäççzý~lIïòø<þ^¿ÏßkDÌ`4¦ËY:/×¥ö³³'·%ü÷ð_Ãÿ ÇÂw€ïÏW!ßÀð­ÔGÕá/À¦…¿.üçŽÖÓ#ÜzùAÿú5¯Àk„¡‘ …. ÔR¬ðá‡ÞÙ°øG~¿†˜ˆ›4‰±c.‰‡‘XØlRÑ|ÕLOšÁ<¿xN´ªu fsjB½S•«¢*[‹Þàh¬ØµD×ËHPOïŽËHQiRfEÒ‚J$i ¼˜–YÌV~%åwTÞõ÷íûö]òÙœ{èo/ ÿÜVØY¾gûÄöÊž;MÚó£‡ÛÛŽž¿c÷Ç::~ã¶þû{²Bg¿uÚÓsPâÍg¾ŸE?CM>#úFTh¹CY¥V™ÕjÕV¨ M!W4)Uf¥ê‚ Tj…B Jå)õY5U³Ù¨”ú¤·œ ò,iBæFªEºé¢æ¹%‚\H¡ËùH’¥×o,éÝïÙïù.ôî3x<†ï²)»@ŽKÉe”(Õ¾°;ü>z wƒ7¼‰ôûŽðᇟ|Î…{¶1ø_GøKïRø¶ùÅ‹¢0T‡Ëª ª¬\[‚Á W"Àe?ø¤5cŒ¬™^ð‚;YG-8$b6Ý•ÄÅú+9¾5–/ñm®ì˜íô„?Ðbd —é4jŽ·”t̬Y±-‹kQ¨kw>Þ^I¿¹bfs[œµ¸¢2¡dƒèVÉ®ýÈå¸nܤ )î°;¨MœÕÖP&•Ï»ÁÍð¥CPÝ6Y[¢ÕlÑ\áù=ô^ö3œ@d=WÒB£´´c]^®Ð­‰/ŒpÒœU•ãYµÂ‰ˆâ8Ç +žݸ·ÙÍ—.|10Ö”•Ó>]Gk?™Onª)Ôj EÑzû¤8q¼‹žŠðïÂ;†xL"™¤KŒI‡‘dÑ€->Þ<™ © Z²njª'ÅXïr*ØlVckJŠÕѪ2X[H„‡îËÆcå|‰—/çûün–1r"¸¢RJÐq’@޳¢S;¿=·ºûèÙ‘½¯î)_HvTl¨X9eeLýÌצ=­ ?äÓ+ZÍu‡þùðc?¾§´ûä…ýŠÚyêXïèºîtb`(Xµ©Ú%¹<Ì3ãGQËÈîµ^˜»h³Œ2”1m<Ç2³(˜)pT¦à Ò^ÏË8'=êA! ›–’•—ÉdÄÇ8¸×SRáóû!“†w~ü­ý¼ÇÒó»Ò;ޱw^®É%X†y\å¡ö_ ¿~íÝî÷U¸SH©Ý[Õ0d´’‡c…¯Þ©ËÕQƒdµÄ™ ù-‚ÒÊ–TÀ™ý¢Ãa”ÞåŒÅs¬¿ ­ Mâk,HÒÙ=">¸<*_øøÖ¾#y¹›Îéi­‰£`“Ñð»é•+S¼M…‰cýî¦@†"³ È²µ¥ÈîÛQª˜s UéùE68ô±³ùödš¼õP›+«ûààüK)kà¼váÚ¼ç¥$ZR#¦Ëå¼ Eúå¼Ê 0.jA’¨ÚÕDޢо…ù1 'ɨŠóåqŽy¹©¨Ú Q8ºRQþrñ0ðñÇpøZƄę3gè™3ß9^Âéžð¾‡o"…¤ž¬c·úa« †P”LÓéQ7‰õ Œ©cq &dëËZÒ\¤lM‹)Ö¢l% Œ™ý ¹<{.£*1.Ãu/ –ÓS“@Z™å€nòD}%-véÀbD)nº÷ttð±‰:-Øô«²špñÍ{zkß½yƒÇ†¼=-5qH‚Šòµ³/¥W¬t{W%nës7Ud„×xVo]U«k&Z*â“Ç6®9ôúî;~pdÅÛè·û3ä)ww|òë]§fJ¹wFö·¸2×Ý»ñO&5ïgø9^Çoã›IYAEëhl5Á†´`¨ÏË+M—¹‚É =1ˆžä4½ËŸÝb± -jC„B(©$yÎù5m•ÄY$ñ™„ÓŒ(®t·Ùj¶Jò5-–YAC»Ïãã„DäˆÝxJóœAµ£v¶öp-W[¬õ±±åõöä„"†³ÁÔP¤¶â7`lM0¤Zr˜¸Ëgˆ@;Ãç3¼áakѲ îëLrMè 0ÊòTIÃX"b=b¥¥¥»uœI®ã¢ìQ/­¹}­Wœ|¤ë‚%­8ÙQ'„¡©Øþ¥‰üTnr'8“l9I[†U²„ªÖ¡îÍYSâª(+ê(K2{Úo[ÓOk*ðÅeÍù»,GW¿s­ïõsá[ÓÊ3-²ã2•ŒÎo.N¤J jwMÉê&oÓ&ÿÍ2Sm($%™Idf""ð(3©@#2“Ì<òé’Д hí9yÐã ‡™ ‡É)r–œÇ¾Pfæ3™yMd~×ð£|Ã&3‹ •PÆaNüäÏÝñ.ÛʺÞ>Ãt+Ê•ä])|¢9‘º‚„¸cUÁójP/©Uu,ßf7õjÉAµš/©ÕkìÊò&Õ¼ ﹫7ú;Ê“Q°p”‚†òȧ%OßÒ5Û–N·ÚÇÔéÂk\ƒ{å’:Ý3Y²õÑM ­ßnä7_¹MÌ”•‚ÒesÑ¢Ø`ìÚX™:«!33Ÿ¬´X*òW:Ô *ÕIGÈA îd„Û‘o|-)“YàÈòeѬ¬ƒ¡E`¦5U«™( EöÄòHæÔeÃ’âÅÉ-7Ó‹“¸È’Ã8ª‡%Ù$÷r’‰Ñ$Žo©Úóüôæ¯ÞÑaù‹&«²½0·½"9¯sºªvߨX>óõ‰®ã·¶þ&O) f e6m®hzpG”¯Ù³Î—T7Þšš³"I¥¶ç¥få9bõú¬†‰ÎÕ»;s\õãkâÓýIjyjv¢Eoð4íBüÔ!ýîÆõXBÆ_&žÅ‹Ï) .f¸•ãôÏ—\(¡%„h} /LxÁ௷̦i¸¢]ÔÒííI-§-lÍH¶eØd­ƒIïÓFÌLf<ùÑ´cÊ#Bê^4¥RÐ ðx$BGhî–hî_’WÖØ%±)a¨1ÂGJsrœ-3Áð[@&x‹=¨6Åôv­3ÑÏŠ_EGAì%VË_FZ5RŸ×}çê…W¸v´³råBfá sz}‘£ÈטŸ½áÈð‚/Rï‹_\øAÏ¢n±“ß+üŠi —DíX ä4ú†”œ '›‹h1\ܬü”œž’ƒ\.&dMdf’y0‹ª~ñˆxR ‰¼È˜G›Ü AW&è°ø%­hoÐjK1þ‚>Á‘@™º{‰i;Q:Ö§‰iÐéLææ¬¾¬‰¬Y|VVaygN `*Ù…»\ÉÉ).yÐ4­ËEÜ54òBæ“ô¡„g&ö<;w ôD¤ dûE¢;bý—có#&7r¦Üâ.ôr¨=¹X#Zà¾,.ô[0CHK7Zó‘+ICäOfµ¤+ß»bç‹wnŸzò–Æ GQ{ǯyx¦¾j×—7mßz|¬ÚþkÒçµlíWîj^x¹5ÆžW“+“Ë[½[¦á¾Îû‡Ë„SOóE›­÷å6—¦Ê`?b ×ß?ºþžµÙü½÷ò¹ëf;ÒŸ¶„ORj.Úð =Á'xŠ“<Å)6m¸4¯" _Ê×29™†:ô«hã§“ÓbOf*”¥@AÄBZ,Y`­yÄLëÍP™1ÐM¡‰B3´Y“¬«,f³ÅbF“4-)mU:1§§…"©( ’üé`Hw¦ÓôôLË,¦%#EÓ $Y’h¶#éiV‹^×.Ø%#…±<3Mzþ™óÛ[Â|àý&J™o%IT¸ÁY"J§0".S’[)›\ô½Ô–M·µddªì vU¦Xc‰ ‹y†7Z¬fGuFsŒžÒJúîïÉ–É¿‡Bb²‚…¹¼oáÏꂚ•5jµ¿ª¡ºPCM’>Ž2±×¼“¬³Ç’`, v»>!!ÙzMÓšZT}@ÏÍ Ú[ìÔn‹ø8£ˆÐ[²výQ‡b¹?+0ONf1D] :y×·öŠÁ}ߺ}ìv5ê¿ÕôwíýUË6-Ä«êw?mnyè=ûß~pÕŠ}«t탯œÏ i›î 0x¯Û®%¢‹Y®× ×ëv+Ú¬d™Í ’WÀ Ö›íÕå¶*Ú©|Ë6F7âd ÇàHh„\•¾ ÔIs)ªc›*Ìã|‘ƒQaWo¾G²/e$’^ˆÓÇC<'-²˜¸à(ÏÅdNuÊre4Ž•¥Ç'6œ»Gq¹qýqœY'3s*—QÔ™ŒF¢10×^9I/¨¼f/jA›@ ‹Œ6‹ñ¬ñ¼ñ‚‘3ŠŽä£hJl˜Õ֞О՞×^ÐÊšµ}Zª-‰ Z£Ö(Äš8•@|þ€_21=½;<ž¸Ô‘Ãò£¯ˆÍ‰lç1ÆÄb\ûXÍÈ'cEöe%˳<Àù-.Îmbíº ]&?ÇËw™¸—ê.‡ÿuÍcÍáZóÈšoü(ø.pͬ|¼¼Ð„ W~íáð1ØÂÂÃP{ÆÃ±p4üÔ ?A‚ý…¯öS E“œçŽÂöxÉ^"W Of5j]áôð‰‰î‚± 0?j i'ˆ…Ÿ€+|\>ÏiØ“­Ÿ9ä…]È 1dX:x¥F£aœ*ÿ ‡>8gá<àÊÕE–U =IÏÑ7©œr:Å´R©“`šÄI‹—î%Q—³WÒn>4ü¸|‘õ ó™gtY†Ï˜Z·ÎV¯Ü»¥5TPów{F}ã'Éù|KÚsˆÌòpÞY¢ñÓæü›rtºÝísE§)MÈ=ìžÎM‡«8V˜”É4ê =qáŽ`7ØŸA#)}Ôç¢Ù©• 8‘ˆ‘+éÛ¨)2µ¸ âþB_;òÔíµá_4í{aëB-÷-~äþðŸÃ ÿú‘ãŒKGs÷û ~~˜¾„¿^ôWp«¹^Žóq æìEgì@7 Ÿ‹t˜œ@+ŸËE°¹Çá1žþ]2ÀvDMQ”%&vû$”…¿}[Ø"é„8ÇMÂïq-¯|™¨ÐþKÇÉÄǽAOõúD© š) /QS‹PÖÚO"ÛÛ»dаE í‚%‰UÖXKd/\z(üÁ"ëÞøå»F¾R8ÜPº}W¹=Ÿìãöœi¯Ü3ˆQÍ+Ôñ¾š¬’3yZ•7*K6‰N™%²Õšf¥J¥&beùJ¤¡G¹8ÊHbGêRj³6 }?­ 2«d2`$BPcJü~F)¶ÄÈÏRù}ozpý`2VÇÉÁÅý8üáÂ,m‡Ò×Â+€CçËjOT‡ÏÁÃàÿosíŸ|ý-ºÍX\Z¨Wgú¼ÆpÃoEv9Å,™ªc0N W„ED-ôLÐ+t=6œ¥„ïPGÙ èï"@q†Õ—"XµÐ¿‡Þ·óŸà.]’ptŽóO8ŽžÄ“[Åø!€,RJ¶.K_ªß¢çx47 mÐ<ÈÅx½Î¬Ç Âqz½²ÇiÈ5Pƒ!!–ëá#Û º^Gûbc‰¡Ñól‘äçG¶#ÈÒÆh¾%Ùþe– Ü F'Ï6äJf3"6ÑàfÃï<þü  ËZ9R½áÝÕ•O„öÝJ¹…¡îGß^yëúª˜…W¹'ýA)|`Pš~ø7$ü™É½¢¨ãx™¡Wðë™Ydz rCöºžÈÍD®F T“6B™#L¬›`ÌSÐ+@Áº§§étrè7³ÉÅ¢ða,^\í’×™áܹ¨‡±¼ÜLàP:ƒKŽŒ1/Ç¿þù†ðŠ 8ÁW¡ëiª6˜TÛ`Õ6•É †•á…ºUùbSJxìIió_´ ÝqTè!©äè ªÖªFT\P¶V6"ãV:{œ[œ\‘âSÁ¸>)I¹žW˜) ŽH“8÷œÉÚÀÞb–Zß P¤“ÑÔb¢&w_\ÍÕ¤8>WNE®"¤¸ªà ®OgŠXq;n0ã<’”¿¶wÄ\Vië£X²M½€æFLÄGÛŽ9«°çàý9+ËrP%8zgÿaäøÏV×úɃ£_ÜݾªÍ\Q—yà}òצTõ ~~{Ùð<Ð/| H¨§tóáÎêܶr×û’ìa<{ÒVMÚ_&r¶Ãƒ ^ŽHU•AEU*­ ì!‘ýAÖŠ¾f%ßœ²/ªª"¢ö[Fô4ê é.îã¾·ÐG‡§?ê.…_»þú¥ÈÞ4ã¯" ^ôòZÇ8Ñú NpæäæPŸ9`¦™Èô–xiš©ÈDkÝnZ›Ü‘Lk\í.ëÀ#gÖ’2DuŒ=¦)f}ÌÖÚrÒsæA)j¼Äìõ²©æA%jÒ]èi¸œ†6£Ò(eÄ;ÍññÎC›9ÞÌšd˜bÌ&SL0}m:mŒïާéÊxÎdðŠÞ/çõæšÒã•¢ž¬V2ÜX´:²JéŠw:Í9^ÎÄ1f‰§c‘©QÌy~fçWÆò>¹ç· /oKz¼ŽÄý‚ ȹȺQ)cÐÈá¸èR‰-­ œæÛNG…ºODׇ}àL‰‚¬ÓÔrÐ#vyP#:à©.À7ó}<ÇCODWÉ8i! ÈQ]±’Nõû™y=¢¿Þ‹A›·o#›oôdÑEÿþy8 !ðI³~L³9ÛÂh¢FX¾~}*9.²ãèG€ÛV,sÅ7þX<Ÿíí²Ýj£%6°ÉlZÐîÒÜ«9¦á†5 1™dNNW”)ø3¤Bjjz‰±kL™ºMã‹xZH!J€¦“b´Õ Sr«ØieÇÉz¥~•˜ ¤H J*)|?sóLñÇPÑîl J0è9ª'̶ó3TÄ0]/iÂ1Ñsâ›åD¦´iÁÅVrLÈ¡ðd¾¥4£Ř,ªŸAN硤šêJ[\Euuݱé¢þÛ†~7ó‘«D;2µÞç+Mw A~éÔƒg^²•yÉžHgnGù¦S%H§k2³ìSÎ>Ð1EÎ9—vÿRØnp“‡Žöy»ZjlÈÞ²›Ýdt’ù‹á]Ÿâ$¯dNr¦‚ºor’)9õ‹t(#Vˆ:” ú\fQÛÌòIqë%+¤Ïl–›ú”œ\²øØ|®›Wˆd=bŽJ²!-*vUÜùíÏü7´6.îýî@ø§÷Üsüä¾Û¸ÇÖÿÃmõá¡®lü £Û{Ã}ÛÙþâùÚ%d¯˜8²Fò 1£;c,ƒ[«QÓz5¤­OMõ’õFéêZFc™w}¢rý¬â°ý¸DÉœVé^!sS²˜iiɼf@ØËn!¦e›áK{áì…{–m†GwÃS®×I›áÂ’“ D/H›á¨vî̓ÿK$Æ>4[ÞW›ØUìÛ¼©«:½óù¡‹Ÿ¤†c´û-ù­cE…“Ûú<°¿ës㕯3uãö˜ŒšÜ¢ºœD½Ö‘]Ö¶µnÓáޜӯ$®ß`ó'å²uZWNEÇ$âè0Û@B^tHg‚Y Ê J劷ÏÇBìÒYFl‰UZP¯s‘Ã7àÆ³ X:·X¶ÃÍJÆ~ðå’§oÙt×jgø]Zm¡¿½ÜÅŽKÑYnÓžIqòx×BÝ ¦J§ß~Þê¬*ñjÙþôN¤á:¤¡‰¤Ù&¦7ÄtÅÐzÍ: ­W¬SÐÚEé•,¸˜ Y™Y™IdÜlÎIW1È“rUsd4göežÏ¼¹˜)dfºm3z¹{F°]3 ÞØU‘£´;–N0¨tžzÝ„áÚ!jdÓ)µÐoá×­Þÿâ–-/ìkZyïüøæç?³*üž­ ¥¸¬½0ÎVÐZRÜZþæOé?œ ÿå++¿ÊsßÍÉêê“á¿?÷âxŽwü¥÷¾8áóM¼¨ûÛß"2â>n#_-íÍÉQÚõí–ß'§ùòjy›œsJ7–x9Œ QlŒ‡ÝÜ}Í窹6Žsr`E랃Q¼`:F€?~E›eè*Éq*ÆÄ6ŒGÜZ|^Îþ3µý#ê¹÷šã¼ìv3û1Ð[ž ¿ Åôné%üpá!:ÎÂ<‡0×DaÞ&*ä«å½rÎ'µÜ.§£2T§vnæá¿ðéK΋Rvœèpƒrîó,xÍ~¸6tï]hç“PþþÂÒ‹Ûlá!ìò@Ô—R#6K¥KF=‘KF‘F¥F#J°)KÐ\RV©[ÕÔ¯†d5ªc;ùÒÊiÔEŒc.b…Õˆ>«x^©85ácØñþ$C3"¤#®”tWãš ‘.ÝpÍhGø›³(ÑÒáyX.€ 4çðšƒOÒu ßü$,Ù'Ìî JÿÁØ'6 ~oÓ@ò5 h,šT ×°…ÀF+ ”È!`' %P«…&ó-9e‚‹¦«&zÂ&S¬”TKFšÊ„„Ъ¢®.³]¢¦WÚˆlÇÞhƒ56‰“9¤¥{% DÿÞ«qOËР÷)d‚€û׆ê„ò¿yaÍ­«©.¹#Ÿžüû«8§ÛqN¸¶SÈN1»QÞ-§EI#I´(q$‘¦ÉÀÎ3«Òí¶Ïª3—Ș–< `—Ä5»ÆháGtûÂgÃ?ã¾Î„÷^ sè¬HòóÄÿzä-') w‰¾-¶p0ì€á$އrõ*õ5çWÔ(Úœi"&†ŒçºDu¹ŠlžIia¤1í¡79L>vMÖš6ÍÎ0}  g„„„\ëŒVž»\‹\ŽP"çvðxmca‰ ¨I dùaQÿ7+~}ù-ÏîÜó­{jAÿIÇܶU±á¿˜{ʧöæœîýÜÖÒð{ñ…kü©+KS’Š×äùš ìpføë{‚ýÏ9 › Ë½æö®Ô•U?{«©¥bòÄVger\þª‚╞ä@YÚ»®‘äa½hW÷(N1± ³„í¥ž'З"ZyTàé˜À£ýr¹Rà"ûalÇ躵¶c‡?º¼ôåÂKm+ºY• ßFav™špÑ“¥ýŸQ¤M&éW)À’©*óz‹…¬w¦æ¦žLåRS=‰=¢ª×}ú@F†3®O?i€,=ïìc¦×õ;¾¥-k`$Ô§~Ê>,»U\Èö¤GÓ†ïx¨ýÐ[s5Õ÷ý÷‡>7±*.ü'ûF±a¨2áÞûÒj ÓÕá?QçËÎ†ŠŒ±WùÀ©ž¢Á¹Ž¢¡²é¯O^øWc¬Mù‡ŸK|7…skù%“"r‹˜»ÅÄÖüã»UÉ’©ŸÖÐvÊÉøy÷7Eé¶B=¡RåŒëí;µK'2ži'»Ê¬ËŸ¶Zu3N¹nùÊ2ÛŽërÍ¿l+b¸Do‡/?=#ÿÛÚ‚÷~÷Îõnk²‚¼¾nêj®nߘ»áØ–’š;_šùHø§ö¢5~ßÊ{|þª¼ô¦²úr(üá ÒZî\—ÚÔðÖ[éå–ª]OlÞúä®@øùÅ›Vf»]…yÝÕéñ…ÍhlG¼ôK4¯ ­d×ËİxQŒE“;ʼnCŠÅ1™•E&s+ÅJZɰƒ¢±²RÕ^0ÙψÞ0©m Kò1Å`¨ÙUR²Ú·+^¾z×2¼”0ÿµ—‰û—#W$ •”x<Ÿb Å…×/£H[¶–$nBéfTõ—ï9sÏÝgï(Ïm-.ÛXí®ØujúöçfV¸«ûÊ+·®É¿“U_TÌŠÑg4””7¦i\¦¼µÕå­y‹¿#hË5ÁŸÝVY¹í¡Žú©6¿’×–¶l*h¾§¯°¨ßšüþÖR ¯*hŸ¤ŽÔª\”3U©ŽêbwJqõ›ie))åMé¹­åÉîŠvi-õ.þŽF¼Ècbb©ˆ¸,M(ŸH€ä„䙣¶0­Òkkí2£¯ê)¼§¾d¸­\Ï«Ê:Ƥs³®ð:îQ´_-¤@4“«¨˜¯Ô§˜ñk¸zB!zEPb—NÃ=×¥N2z‹Ä½6BïZ=Ùèv7N®[ËTcrrãTKxÝÄ/?øøÃ{ÿ3¿ùà£ý>úà×;ql?޽S{…+\=Â6(H¬úªJe¹º—!'‰´áôÛ ^>üµåãWr…KÉ$ÇË¿4*Ø– ¯Ûùë>:°ÿ£~33ñ‹÷ÿvø?øåÊ­apó£|¦d»¯‹äœRºO'<ÓÇOðxNÏ;øFóOž1€&áðN¡NÂ9x•7aÙîõ~”Ÿ—kbTÀ0Ìs/ð·òÂ……ŸýêWKûÏ`üÃ_~‘Wܧ/ÿˆ8"ÿó=(ùeÿ˜]ƒVûï±®"ri'{rá‘ew…›þ ü¤–|‘äA-ÙÀþa@^Gûyˆ “²‹ì!ÉŒï'»I~ÓÈ8ævcYü„Ìa¸(ÙIêQR݇m[¤çç±þÛˆ5zÊÑ›HCM¹Kæ0¾-ÙQ´xîÀT ™"ÛÑ!î?ŽAH6ö¨€$¸ ~?§iôNú{®œ{‚{ßÅÿQØ'üX–"{^^ªˆS|C)S®PnRþwÕªQ§¨ƒê}êyJ3ªy\«ÐÎhÿ]·Boзéן1ð†#†CÆ'bJcæL2S¿éfùVó{–ËW­EÖëobÇãâãÎÅ…m•¶[% Õ6¶Ë)i)ñ‘t¯½\,æ1Ì&ÀÚkx쿆S zLA´O&¢q±0³3€‡¢qèÈW£qúìÏGãrrùÇh\AÌP+‰:£q5Â0xíø^´E"q-™€g¢q©¤ 8:ðJL£=Ñ8$.>§DÁ­ˆÆ9RɉÑ8O2¸;£q$p_Æe$ûv4.'rDã ’Áÿ2W’dûH\MVÎh\C6]Ѹ–¼#<ëÈÙC5“»§Æ6Î833ù¹¹Åζá!gÃÀL¶³q|Ðë¬Ú¶Í)U˜vN OOíò:W5V×µUu46¯qŽM;œ3SCÃÛ¦¶:'Fnl¿jlÓðÔÀÌØÄ¸sõÄøDõĶ¡ªéÁáñ¡á)gŽó¦R'+þ´¼µÃSÓ,#Ï›[ì-¸^ƒUȹ©Ñÿ œÅæ±é™á)Ìwvz۽Ζ™áñçÀø³ãZÃæ‘‘±Áa)spxjf+OÌŒ"Ø[vNM ²Ñ¦½×fS3159¡}fx×°sõÀÌÌðôÄøèÌÌd©ÏwË-·x¢•±®wpb»ï¿*›Ù=9<4<=¶ygïÙ¾m4>€ï”FDh–c081ŽDÚ©“íœv²î§±ÿ‘á!mrjbËðàŒwbj³ï–±­c¾Hcã›}×»a½DÇù?kky‚L¢üš"cd3Êžôs2È ZWN’Orñ[Œ±6”@Cøn@Ù6ƒ’ÈIQÖ /ƪÈ6ü:—õ0-¥†ñ=Œï]R[Vs¶ªF9Ù†m:0ÞLØ-º1©þ†¬= I×íøž"[1o‚Œü—ã¯Âö›¤qXÉÖÇÒÕÒ{G›@؆p¼i¬=ŒyCR]'É‘àù¯Ú:¯µþ_­·Vª3}­FÂÇðçEÏñÓúXê!ç2Òÿ†"´Ø,õ2#õ©9&õ݉5Ú¥Z-RK†£i´q©VǧŒØŒ#Ž`{†Ñë5¥¾g0éyã£QloA 7%A0$µ[šÛ4ŽüiÃxr ¹râ<´KÐí’Æ\-åÏH<ÆÊF¥Ô$)Emä#·H_/Ö¹±çÁh¿^)¶kþï¶›Á3)áqX¢÷f¬¡½Wês;RsUCãÒ:`Ú¹lŽÜüg<”Þ‘•´í†~eÙ›µ]‚~: ÿˆ4Nk“øœ¬†m¯”»YšãÒp cËácÛÍ»š%XnœÏÿ˱¹¨Eç&oOùˆñ†øs°Üq5¸è\™¸B›ÿØ÷GêûCàôð Èz¾ó÷¿ë|² óÙr‡óUÈd d¾¿û Þ1ù0ßÅöR ½³ï~ïÄ{Üùß‚ø[gJðÊ%˜‡ ±ä]ƒ£ÿ]øÍÅxǯ/f8.T¼Óù« ®óÔ;ðKnÑqåŸÿ™žxûÔÛôûß+wˆß3Å¿ûx‡øS\p\Ï~»Ü1NQy®Ü¡? ýg±K™˜x&Ãá;ß|-Þ¡ÍñÚìk‡_ã_y9ÞÑüÒìKTâÀpÃ)D5ÿæs žåò±/ûsO58U±@|(iÆg† §0œÅpà ‹D„Ñ’˜ =Sîø†–gúŸ¹øÌÕgxq’ž5˜‚//žƒDѢѿþ?ÕÿÔŧ®>Å?™ÿD'‚™Nc8ᤋ)+=O[Lã{=ò(wä8þ¹ Gÿç`âØùcŽqGŽÁÞ*;0?¢Ÿ³(É•Òg¥ç$>H¹oJi}´Ö)0ˆVNÿpàaª? ú£¾££³GO½rT61bâÁtÇgJwÁ÷•C ?è8HÙÃwðÄA^ÿãFBÙùÁœ>&ؼúîFRÅ‹¦[²»¦3;§mŽ Ó-1Žo‚ ¬¸@Ög³³g1yà ÎÛò¬-!ÈþîÌvLóÆ‘Iã!®Óæë”û¹NrϦ¾dž~ }-6Çä+ "{AõÝLq4σI´Á† Í±¾'ßÑŒw˜òc:à:ù|®s¢Ëîtè9hG¨Ú0´¶$9Ö“«‚^Çl4aËyÐ=Ìp ©5âVµ.¸2˜à¸Ò¸ØH[¡1¨všhCÐꨚúàlðJp1È' Ù;­ù–N#è; ùúN ¤òI§CÐ÷égõ¼^ïÓ7ë'ô‡õô‹zyó®è94ö› 쵂€È;rº£Ýãiš—/¶5…”-ëCp ”ÚΞbkOHv D:{Öwx û3‡‘êĦP~{W¨?±»)4„‘EöbÄxÚJª»§g¦gvz¤Ìx<3ži|zˆgFÊš–òY„DâKi©ˆD’ÓÓXŒý°Ì™ééé™™;wË`‰X†1ŒcMÖu¤†iÀ"”ÍQ´°ž ëPÊf)Vâ‘zbí¥±È4«5÷?½x¼ä endstream endobj 368 0 obj 13616 endobj 369 0 obj <> endobj 370 0 obj <> stream xœ]ÔÍŽ›0à=Oáåt1û3#E‘2ÉDÊ¢?j¦@ÀI‘@„,òöõ¹‡¶R‰pmv¸É·‡Ý¡ïæüÛ44Ç8›s×·S¼ ÷©‰æ/]ŸYgÚ®™—+ýn®õ˜åiìñq›ãõП‡Õ*Ë¿§g·yz˜§M;œâ§,ÿ:µqêú‹yú±=¦ëã}ÅkìgSdëµiã9Íó¹¿Ôטë¨çC›wóã9 ùWðñ£qzmIi†6ÞÆº‰SÝ_b¶*еYí÷ë,öíÏBàÓ¹ùYO©Ô¦Ò¢¨ü:eÇü‚,šÝÙk{ä’ù 9°¦@®8Ö!¿0—ȯ¬×¼Ñ,[ä7Þ×u·Ì¯È;æ ùóèü{Þ·)Û‚ó¼#Ó4/~A¦?ÀoéwXËÒ_a-KÐzúl–~‡ýZú+]—~§õôË™~ÑúzèìÅÒï0¿£?dú6G©™þçéè÷˜ßÑïapô{œ­£¿ÄZŽ~=:ú½ÎI¿Wý¥ÖÐ_éXú+µÑÔ@‰ßBè/aåüñÎý¢5ð»Âb-ñÌø-dñãý‘ųúk ý‚}Éâ‡G–÷G3ý^×¥ßÃ/ô ö%Ëùk ý³§ßá¾§ß¡Þ/þ6ÎÒ!h!ôøŸÖ4Í}šR[êö#:±ëãßÿŠq1J?¿Þ endstream endobj 371 0 obj <> endobj 372 0 obj <> stream xœÕ½ xSǹ0<ïÌ9’ŽdYG«wK²¼K–dË»±}[–c6Øc¼²ÙØf'Á$@Àà$B ¦$ Ù0„$Ð,¸-7iš¤pÓ4m¾´…Û¦¹m ·7Í×$ØþfŽd $Í÷=ÿ÷?Ïÿü¶u4Ë;3ïlï¼Û÷÷®iCah$-]ÙÒó³£»†z!0,]Ûo»ZñH _F[Ú{:V¦ú>úBäŸ)ùŽÚÏ&훎†i½ÖÙÖÒú£Íæl„º¯Ñ„ÜNšðäØÝJ„zRi<±seÿú7ã³h|­sÑŠî¥-ïj_„Ðê§hþðÊ–õ=íŠv‚PoÛVµ¬lËùoò1¯GH%õt÷õïGéãm<Ãò{zÛzrÿ¬„ÆCñûMúË~ÂhPÁâ˜p¼B©Ôš0m¸NÔŒ&³%"2*:&6.Þj³'8“’SRÓÒ® ·Ç›™åËÎÉÍË/(,šR\R*M6½¬Ü_¨¼£jÆÌY³«çÌWS;ýÿ燇ÝÉoEf´A~ÞòÃ"Z‡Ðøg,6ù[ðÿ.ªà×iô:ŽÞ’µÝEŸÏÞ’vý=#‡¡û¾£Ú³èéPh:ˆîý—pËÐ=´žc´ýÉŸfšº=L[>ƒ~HJøh«ËC¹¡·¾½*øx =ˆž¢¢—éó]y›ðßуx.Z…M¶¢»Ñ.ÚÇ#Ð…öRøft ¢Å45ø³µ¡îÛ*DCè ´‘îÂ?üÖñÿFÚë?¤˜ï¢õìG]hõM%ž‚/Ù±RÜŸG/Êi['2•² ¿„ñèC4òê Ÿøây™ŠÊx=GH*¯¯«­™7wNõìY3gTÝQ¨ð——MŸ6U*-)žRTXŸ—›“éõ¸3\©)ÉI‰Ž»5Ò¤uáZZP)欄ЀœËÉ r|é@ršj" ÐÒ38˜&N¤ašÆÓ$9ýÐYŠì¤cLéw¹­•ÍÏæúÎÁæz¶Æ‘…Žýƒap”ÐÑq”œ¬V;Ú¦ kÓXz)K/ ¦+Xº’® °@†kã XîøGd;,1*£V¾–rÀJä> È3å”’S]É:©à;åÁ4ˆN–̳äSJ…p}Ê)`é>½]Ÿd×Û˰m,ëäk¿z¦Œ{W®—£§ø\Ês)‘ Ò/ÚñZ¼“vãZã#é‚ ° H—iƒi—‰ô)îQà6læ÷ðx)K€ P==õɲà\2Ÿ´ÒÀA€ƒZ%T(Áˆ ˜Y‘¤ÈQ…>Q|¡ÀÑ|:_ȇ¿ð_òXÁkµ\4JG…ˆþ‚¾¤x‰J›Ò«$6%(•3I"9„(|B¾ ˜œàÎq˜«¶ [°×Òl²ŒX®Yx7™ŒÆµZÐò„CTšUêk,ðø®dAcãjO£¯qõj½ÏÓ¸š Å Èáú—ém¼íÇNìÄ>Ü$%œ(‰ÛûýÑ»—~ˆsGŸã,:ÀáqºÓX‡ÇZù­_mápêÜé<ï.››:–Iû²mlÇÍDÉ´‡û$±+C>îJߎw$îOĉgÆ/KF¥:Pi­·âJe½ï ûi/Yz)MGÒÑH™2«ó#Q½â5‘S‰ÃS t ôLš‚­S`| ŒL¹<ǺªD‹N£Ê­æ-¨ôJViii°ÿ«{{=‹¯deE‹¿mŒ¾’éuÒ²˜Â±#!9ÅOÌz‡>ÛS|4è+!¾¬x¬¤qGB86›â±/«sq©{úŸwó@NÆð<B¸(in[iÏÁÆÔ×"‹–Ü1eÙlwrå ÕÒ¢Hœ°éâþÚºVlóÅÕóŠ”@Qº@}…ÑÙ•sõïnm=¼"?¡ùø½}G–8 WaRÒNº@wr³•H©¢ÙkÆf³=Ìêaò“ˆ¼è2º†xŠJ5ZQaQ©£²í®ï]'О®¾’Å&;Ó뻵K–³äéïgØ?M±Îè,¬.°¤j Þø’yѤ$¡bZaDDQI©daQœ’<ÁóùKwÍeb'Š |í_©d¢ÁH}v`¸Oõ¨ oPÁÝŠx­îC"¼AžzǪa#FH$¬‡ð0pÊ{•”D¡Rƒ’ãAäÏŒ_“ŠxÒˆiš æ4&Ú‚æÍr^û5Oj^ÒmPh’5~M»f‡†¥½A!•æÌøÈ‹‘Ö€†­k’F ‚ÕDK)¯Ôé/º5Zµ0_ eZÈÕB¢,Zà´ð‰ö -~O #Z8¥…mÚ}ÚcZò¯€ßüB ká-œ×ÂKZ8¦…Ö¯¯Ý¡Ý¯}Rû†öí'Za? `ÚðˆôÊË#m¬¢víZ-¡•%ksµ˜Vt€Xâ“Ú—(4CBø„5kY£5ÚV-¹¹áo¶»Vn“´2 ,Úd ¾c› .ªƒÚµø[ûòÜ*9Ï*`Øøµ\^»ŒKçeüs‹§ ´ @ZQ‹?gãtQ{YKNka@;¤=ª%ýZhÖB$-dkÁFI+š`ˆ Õf媵=Z­Pª9N ”f+tÓë+õ" ôà[ÜØÔè\}ã§·©·×Ù»¸‘mÝPÊâ”é¶$g#ÝÝìgñ-ôkÊI·Co¾Ïã\,'õÒ0¥wO~>m9Ë—éE” 4ÝBùpŒòÑ?bûÝØG?­c¼ áöÖØ°^+Ã.>¶žý|ô=Yð¤râÂøý(}_š¹†ƒ5ÑÛ£ñFqPÄmI0? Ò(7Ôe']ˆu@”ÖÄlÁŠH‰[%©¤äô€¤‚½*P¥Vû“·%cc²ˆl”Š²á´Æ'*ù~,2¬0l6µ!Ú€ Ú¾H%$÷£HJî J¯ø(ú†ð8)y÷\aÔnµ3úJ#ïˆõ ‚ß¾œ>'DÜ”)Abg6…+”vs‡ï¡Ç ÌN,k*ÌmºÃ£<#LëÿÁò®c«§øj{6n^9?_Ú²æ…6oÞ9ÊÂkü”ú"ýŒm…YK†W ô¯èhkï*8“Wèã.*­ä–ld?¢‚4–P5°!*ˆc$iÅ*¨{®0ÌW÷RúìËñ™_ùéGÑìæñÏ8×D”^—ºŽ§À4ð½°'ÂðÓz8¨‡~Ç6î·m³í³‘ÖAë#V²1f0摲)zwô¡hÒº,×ã.ŒÅHµ6«‚$´Êc,5âÙÆsFŒŒ6£×(‡¼ÒX¨éV«=«lqÇF=Æ–ˆ3f÷5EvGâÈH>½/AÞ¡ EWoã•Ò+ú=XâW|ž+âo³ÐeÅŽï‰'˜p8%¿”"çÅ;Pò ‹æd—ÐóÅðãÆP±íµµsînXž]·°rC­›+Wä5ZQTºþD÷§?ŸT¹Ü?µ3âðw–guÌËÁ¿{uìO¯.¶û{fÇ,¬-¼¸Çs‡/¦|ó‰å+‡7M;vbÖ`{‘»vcUÅÆz_‚ypžžBH)/äÂ.)ìá48`…0‘nà0JM_ÐêZFUchB*ÝÝ"MH·Ù“èÃK‚>OOìhŠüMÙ·4N3´a‰‰1®Eé‰TüÁï#Ø!Ì!P!÷n7ô»¡È o»á´4n¸ðŒ²Ý`sƒÉ È Ÿ»á¢λa˜nss“f7Ô¸A’áD7pn8p?ïþØMŽ2°}n\í†27xYv¢ÓZ.3÷ÝxÈ ÛÜÐÃJ—¹[Ý$ØR°™`çÝ\3Ë®qã`õ¬Æ`ý|u°Æ271¹ƒ5ls³z?w«XÉÏÝd7ƒ`¥ûÝ\ž4ïc¹s¬D°žv’ãWÜÀ ã*†õ¯Ýp,؇7`É]íîq“R667ŽY„b¥X¬ŒU˜ÍlUŠ:öæ8R•H©r"‰¥Ü^„¯±Ôçsê} ó9t‹7MÐÀ Ò¸ú&9Ih{¿I;åŒíe뙲®YFÊ8Ù§Ñ®ÏÎÍËÍS(ÃA Æ)&§X"â±R>ˆ'%$|z~>•NH¸NkÕíÛ1¶W¡Õé”z‘2 øé¯aÒdÐ"šM*èùyÖ·Ìåóú²œ-)×%2¢KÍðDääçy:R®×ð[¯{L¥ÓŠDqÊ´ù÷¯¶e„”FôQ~) M¥Ô7kCñ®b¼!lWÆ©‚6 æ£y쌤ˑ5Ç⤤x¿äºó·äïÍ'ùÓLò°šÌ±³¹´ÂJ€x§LÇG§Ãt–a‹wìsR-s!Ú×di¯ ›LºêhÑí«FA^ó ã®õ†% àd<7MqÊ4˜òW²<2MpRBÀ'$³_ ·’`‹Yo²ø²róÌ!"á')” ƒ2œ˜MxìÇæÜóÔ‚ÿŽ-\P”]S’¬xUßqhÕ;¿H/ÒŇ'LOöUº#‰"®|ÑÇü­µéÿ6m]CN“éÙýËwÍŠÇ\ÑôÅ…1º”é>½´|–ó•“cîê9éQ©bòæäf×Ùî-]ÒŸSÏ>«¡²®9ć’¿ÑqMB+Ï¢º§•š@’_ªFpÓO@)#)S.§p#) KʯËcfŒ Œ©ŸrUŒðR–áš–Wi£ÕVѨÓ2n5KæÎƒÜª“ñèòq%sçvý)ü&SnÖ“‚ˆìÚR©£2õt‰ÅTfˆ.™»ÌßpwM ~~ö²©1µwνÌK¨šîUò®‚"“gFNœkÑ­£ž ÍÛ>þù”ò±IhƒT¾Ÿ@´=Ý^h'Qá~É£Ù«Áç4°WsD3®!š”ð_J¼šˆQ¢˜èM¼–È©‡å~“á”k)x<zBýÖ²~ÓNZŒæ0¤›è¤“m?¹§r{£¯„}ˆÔçè},áp“GèPÐCáwõ“+;ÑSÜwý¹Û{:Ô†ÿõs>JøwèÜ-e&B\œ"®!N….ó×x|‰‡a~„ÇGxèáx¬ã­<¾ÆMçåƒ0!)0›‡ñ`ö‘¿ÌSÊÊr0"ᜠ'žÅ¡Cœvjð4ÿÎWÙ :Þ/qU(½&Õ2j‹»Í[Ì{Íd¹’r!=ÌÙÀc3Æšø˜xœXép €ÄÎfÐ;Óp$bh °ÅŸâž»Æ?u CúåÏ_øeìã‚·¬Ö½±ß9sÅTgCmU¾œ3ÖÍqÆI]3¬ æˆ)S½™¥éV£>½¼}æ¾Cwí6¥8twT¹ RâDM”Ã3­n’þEÒ}KWórÉÝàXæÀ ñËâq-i£Üv¥ ÄTHÖ8¢Ã•2„*¬zÐ{ƒ+X^¶FJâT*U'%ñ¶j‹ÈW‡3ªVz…Ñ3Ê–ѳ¬[†„­_yùææE°%‹õ2ã %(e*Áä¨ì­^s_Ôcúâöƒ+®}=cÛpëΗ»=?Ò Ý›±´¦ƒÿY»·£`q #ca¥â!úá_n+ª;ôÞÆÈÁg»cËy¯Òþ‘ŸÓþ¥ 5Òœ "lˆ€¥I°”€ÍoµªüG„4Ú+#ÕÑVÛÛ^Û%g³E‹6Uj@uQu™öN%ªšåèMPÒþÒ^ZÓ ‰7["åA¯è}wzVG2†.¨¹¥Ÿ2¿Æ±ŽÒÙ–û Æ©kfóVÝK”Ž}-[Nug%N­ëè-\x‡¤=ÞÛ5³CŠÁ ‡W—t®›¾yqÁüï®_ùÃ;k}Y Ö–…7,óuÎå.Úáby¿*QŸ¤%J?,DÎË'¯psd€ãT¸—¸$À°0"à#ô¶ €¸&g \Ïv®4×qf4îX:¯tÇNî×Þ^vlQÉÇ$#e½ ݹ»NŸ>ÍÛž}ö«Ë\á×oiæB¸ˆg㊛]2QV÷P’„Ð+Gà`PrÀ6x˜êÁ˜c7/„ÏáâÑ£r¿æÓ5Gç0% ~©hƒm— ÷Çn‹Åk-;,xƒa—ï{2 sa¦0¬b¬ácxÌaÆJT! é@—8àM„Dù°¦ öR"DUX©ÈdªV‹ñÕ$¸bÙüQYrBÓ3ÉÙ€(ïÛÑþ­ª¯þ¶úÔ¦©ð§»^^“ÿZJÕŠ²òîYi®™]%å=³ÒqüØÇc-Ûó˽ØëßóÞž»Ž-II[zlÓ]O,IMYòdˆ‡æm”‡Ö )NÓ ©ö¢#躄8¤˜x9YWŒiþ–â[²5ÅðÈ8«F‡KÅ@«9Áª9TŒ·0d–ãÙÅPT ‰2(míÐ!V×ÞbÜZ UÅPʪ]±µ6ï.~¦ø•b®[.ljÙ+Å "·r @ë§]ùšºÊúñ6ÃZ‹÷±.2T íÂç¬À3ÅZhy1dË…tÅPð Müº˜-†~V$Ø7l޵EóŽ1`–¼©˜£],Ü\€$"žï‘è+{ÄqH$5b«ˆ§QaÉ!úD ¢ehÐhÒ{õ’¾Y?¤?ªWè%Ûí¨DÝDPDÜä‰jŠêŽÚÅEE¡È¦… gcó¦’¢§‘š¤g: &4:›B“.ËZ#;0Bc*‰è©NØøRêÃèæž±Ç*ÏáëÏÞ5-¥æî…0ôOWÍúcEðîÜõ3“påèËüÖ¼Îý‹§ß½b–8ú}ò™´¸Ô:úÏ´À4q.«ô¼³"Ú$-¨MhKÀ Y˲pTÎUûÕXࢸ Ü.ŽS(-ʵÊJÎè—ÒÑ^ÃU6ä Ø*¬ Pôä å`kŒçÀHÎåe6 §Z%¢¤àÑ%[dsíÿ„\&óáì'‰I]XOOº”²Ý}3O|zhe‘œ¬'6¾ûc¸Ó±,2<‹ Á£ÿ#¶¤¹¼beeròËýÓš%ëó `‚HœÛ°Díô¤ ðƒ¯))NAä͉†žž£^wÇ“ë™úßÝþ™fÇÑ™ÂÿÅPiVCÔFµO=]ÍiÕŒl/S…¢u"„‹Q"øy„Á€­qž8Æo‰Ûw$N©‹+¥Áqçâ.Å]S5Ñæ‘8i~k NJqlqÞ¸æ8rB"Rèh-ØXF…¾ê(…gïcÃdïLãÊv'McÛ“‰0”iº49¾ ë†!|fè:ýðÖ¢ö9¶òh}†!Õ§ù%yùz%yùžEmUN…bá-iSRZî¡}¶Ž_Ã鼋JÓt¤†CWø†ð]á$U ]Ú Ú]Z²›ÎFÅùÜfî0÷,ÇÑXX Û²Å‚-aZ ý‚j/ˆé9,ñœ’ˆ¢:¬T jAg 1ï6ÊF1Fe|¾+YŒWAÎFYFk\-¯‚Ö¡<ŸÙgv„DrœžV›ÿ›;·å¬ÿÙÏ|¥Ñ™q*öø½{þþ÷{Fkg•ª24>Ê<º¨L™NNJ‰Š€Â´;ÒðÆ´Á´GÒHŽX.â5âvñ{"ÉóÇá\YÉxM²hõ‚ØÊX\ ±L¹–‹ü²Ö÷š$hhLë—­ ×$É›D ¯¤ë0\ôp­%.V È‘ê€:X”‡ÒBtiéb:ã5*=YÊtÈN‡ätø2ÞHÿ$K‡ýé°!rÓýéíé$*>O‡—XÖ¶ô}é¸=}m:.‹˜ÒA‘ªtQǰtõº.ݧֽáúÄõ…‹sÁ~lpA» j\ëò»p” >wÁ'.8ï‚—\pÐ;\Ð/ƒ¸ÀäJta… ~þ%+ú’‹UÄu…Š ®(¦%Ϻ`¾«ÝµÃEh '+´ÈÇ.ø`¢ÖÇ]°O®¸×­ ²]e.œ0{ð üÄõž ŸvÁ“.Øæ‚µ ÃVžÆ@ÁâJvaÎpýÝ…ßwÁ. }yP†lw­uá‰Þ$2XàXŸ¤_…zuJføíw‘2W çN´Ûõ«ÞŸèéwmcÙ~Ú’È@,.ü9ëÂ'.¼ÏuÌ…iºä”±Ü\¾ÑÍ'i x—ÜEhf8$Ò¦Hþ1×y×û®Ï]Ü€<¬U.ð††õk¹ØQyh6G¤ÕEb\pM¼·ÙPmsísvq¥.ÀÈ%º°JÉHK*eJ§)![ JPƦΑ¦dÐ5%[,n–ŽÎF'û¢',·ŸîM·Yl¾©m¼‰eXý-,÷°ßPUY†|Ÿgñ7ÁùÌÀTìñxV÷ê}¾à_¦×ÙD¥ù·‘ý±ßÕvqCJrЬÍd¦ocòQh§T\ÑëI 0ÊE(Wƒ¹A’ Õ†£â5 ®È^Ãà 1Ä H1 ÅŒÄ\Œ¹ÃŰ½ŸH§TÕ0›oâ»y²—?Âã A)ñDÉDÛ„ŒŒ,Êšc¦· ILI5q6ò²:Êw‹²*ãú/>ºè\Aûîys\UúzãÑ_›Jîykl½¾wù÷;]͇ºIëõî»°sÚMò‘?‹Ôtµ¥„9òñŽl4”† P%"1ÎÐ0óîâ4 ³AÐD`+4‡f<"³qÉÆE¨L¬÷‰ä2åè%±G/Š Q2ƒd1_4_6sA¥9µrÓH*¢Tœç èA ‰4HEù#ŸÏÉ>7¤-]Ä«}òP452¥·Ó léÛaRÓœâ6(trÃùôïñW” gÔp¦7m¡ãz¿õë@ffúÒ r8¨³ô}l¦ãAÐFÉOt˜Wt13ù]D¤õÐ3‰(h.ã•è›·£ü0O‚ÓW-GFøk¼ÊÆÑ/Â4u/ääï ¯üý’V aŒ_)0ýê^ù䣻ˆö/¨¢{íóÝqrÓ9r2¯“ÆqPÉAɨB fS„Ëp ÆÉ8cò›i„ÌQ³5éSƒBmQãFÌPSU¤Â‚*J…ç*`ºH²"W•ŠûH6b?£…!ÙÞ´{eÃ4ÒÂçZ¸(ÕÂ>-ôȆø eY”ÍÖï\ÖÂûZ–àZè×BµlÛ¶iÁÄj©ÑnÓžÖ~¬å9m¶¶U»O{^û¹Vqx2Ìk´£­ÒnÒ>£ýHËïÖ¾¢ýTK8­‰Â—i¹eÌø¾M»O:L«9O+ú\«*’ÑÓÈèÝÀŸ¢·IFïÿù‚Û7Ñûµä&¤kd4?×r’l;÷j±B¥VÇ Þ#šk¬‘Wot|à„†4°EH²„F7á‘&Á—É5‚­ä9G.Žô2ò^¦¬QN©NÅR3D46‚‡’f,g»ÞÙ2•ˆrY üÆ¢›íL«Ùsõ·SòI`Y/s‹Õ=ôs³ñ«««þ%ŽÓÿv¿‹ÇÜ9ú0þ-~bô×8mtÉh é¸9Be úZªÙŒa£ Ö*a¾Ð.ìö œludÞZéWoSïS“25€Z­IWQ b?S Ò±­Ñôköi{œÖ¼¯ùXó¹FáÕ@p¸»”ê€FIüAmÜ5ŽSqVm©³G“v\Ëé´Áà-_ •æÍ4k´Geµ‰-`œ ZD¤P&³ŒJ J5§Òñˆ3=yJ# €¹,ô2Ç… ÷’‡‰ftz|:3M½ú Ì”Ò€~ì ”õA²ã‚wìÁm§OÃG¿«„_ÀßVŽmáß¹Þ‚µcžÑò˜))›ÿ%åUE¼PÊ“Ùʃ2ë¹íG¸Pw‡?¢ÆéíÒ‘RNð÷²ŽÜK(ßIUŽ-³$X'ŠNq“ˆ9Ñ|0â¼’çóâû¢ê#&ã|Œœ*‘`™¥Ôà…§c!Æ ?ª » ‡ o>2¨Æ pÞð¾5À6Ã>n6@™¡Æ€mà &~óò$K`™ P1`™Š– 1P8Äj‚…¬¦øF«Á/Bánoïò7ñ™h–븥úW-ÓƒÍJKƒ +ònFAQj€ïhóœnÏÄÕðDVê°N€ ·¬Òiº'û6G›ÛÝnn Æ{obºBn5&bvd6Ù*»ÌHÉ–`£·ýjlÝÈß”F“^¡0šÌª/ÎÑ#S²”–•šÍ¥ÓJ-ø'Á³ñÌØW°}„ÂЬ³ˆ¿ü2•wÔÐ~%Û‡*ñ(†°V6F†Âކá0–žœcþ$aʧÐ! òŒ~ ùÔó9G™a1IV`8J Ç‘[SœiSFfÝGOå,¨šf›ºmêG!ÄØr•«B™¨}(6ffb¦wÀm%PÖ† —âd’Kp²Òì DDElˆØÁ)â,qkãvÄq‚Ç/e%xÃaKø¥p^1 ðË–´9±žŸR¡‹u´­BªÀ*UØ*†*†+¸êK0R³+` âhÖUx*ðÅŠk,ª4]B^µUÔM­6[„ê$+@b(õndž(²~ƒMð꩟±Å“–¬²ã&z 7Y±ŠÁq³/ S”à<_81ëM ãmÊrœØ8Ô.…¿hØÔZÜêOƦ¢Úž@ÇC”5j9ÔÝwÜ áð3L'rÉ•YÝ‘[¾tªÕ*-)Ë혛5¶ ¹bÉ”èª9 Uëç?ŸVUè(|÷Þ»/>0³«%ª$/•Î)•)×ÿí"o¬þ~»×Ûñýž5G–¤»[»á«Ây(£|)•Qb̲“¸fn€;J ³Š# AÖ‰(ÒÄN¸+¥2Kçi\äzìæ§ÎáŸQ¾,æp°^úÅéh½j´X²Ù˜-ET«ðœöR¡8AXÄX‰eÅhÑ(ãkøVÊyqD¤1Ž(*zce1.ÒC¥$Öl%Ù̶$+|9v=Ÿ“ÄP8 c?™O‚ƒÜ”?>ý§¯#™ã‘ûøWŠ‹Ù)OvHZq(ò™Hü ¶Ûà¡ X“±=oLL|$‘ð³&ICØB¹2òŒŽ`¹a¥"Ä«mˆ(yŽˆHC ’5Á“€O$@‚w 6­)D…¤ J…!µiK,ÄÆ¦Å4)IZ“Â0a÷[}¥ ȇ¬~ÌFtEO¹„Æîd!k¨}R7O ;9¤4Þ¤&ükÍý¯vŽžÇhÍ™éöémÓkï©sýíð¾±s0µ¦?`›“¹hkõØaè«ÜTŸ÷-?Ðäâ·¦Ôlm(ê¬-Ö© Öái½KƦًç¾>}ñ”Ø1.rJ+7žîÕëô³â RÑCÂpP„ýî±ìŠº1n0î‘8ÒÆC¼HéÃFØa„^#Ì7¶ñƒ 6¥‰4KD‘*ú«·Š­°Ã õVð[!Ê +¨¬½ ¨WØAaO¶çÚýövûZûû“ö—ìoØ?±a{“=±m÷ñÿ8o–‰·ÝZDñ/Ë+ìšå·Ï§Y,#˜¬9ð¹.Ûá'ö÷ìø´ŽÚánûƒvÜo‡f;L³Ïµãl;Øì€í;þØþ¹Ë Çì§íX†lµ÷Û± ˜h϶ãÏêÐÂê„ô†È°ûðíÀ°Ò“š¢:̺¿ÏŽ›í=v\f¯±c›ÝkÇœÝdÇ—í×ìø¼ý};þn¸<Úù„€ ¡Š¾‘‘UPmçªíö!ûˆóØÙE;VÒ™F¶x½.¬š‘E`Y= ‘!CÅ7˜Øà©Øô/ ߢêfËQ§¬>ÔSÈÜu±'ÒRI4™î AÊ 3Šœœ’Ã(tn)Ü|.Jž½dý¬„B›Ñ«Ÿ½Ó§›7ò±ÚjÄ$".^ýþëKí.â””O[»ÕÉåŒ>ÓÐ4S«çÆãeô|kÿŒÿ5¿ŸÊâ)h…tÇÂ$ˆN! æÚÁL¹H;ÔÄ€9F@T´ë¡3 ÐBIgSÚ€-m Ç/<¡>§Æ65èÔV5VG5é8Goœ°ÀÒ©‘’ Ù›çföLXÁ9“é9cÈMôeq–o¸=ò¿n:=vý‰çǾz¾nÑ)à?üÉE?ºåÕMw½¾¥tê–×6m;·©¿ùÄØßG:WþÂŽ<êWÚÚ_ûâ[.î«®ÞwqË–_¬ð}Ö×±;å¾2ÿÑÇ¥Õ+L›M{L¤3:ã -( 6R !V7÷I´±Áˆ£SR±ÙUëÂѹ ¹X• æ¬Ú,¬Ì­ÖB× Ž$H*ð,<s.Ûb@cÁ1¶ÂBœÞdã²›x‹QݤGº²Ø¨4ÊÃ}AìâÞå¡ Í|ŠÞìæÆß9Z3øåsNÙ<_¬‘¼0sþ@‹?汫Gª¿sì¾÷?´Æ 5Ĩø‚Ö×4¸@Õ÷c ÿ둜°q—Ê6îG¤ŽgT=¢ÂƒÀ”2¤Ã=ʇ”¸U ¢ç^Ž6¡ÝˆÔ#˜¯†CjHdB×2ÕW*¬R GÙ K….&¹j´J|“ñŠŠ¦˜cÂ)â ^âÁ³H¾×ï+ð4øVëC^TƒôйY âæŽ¾{æÜ9üÃÿ} Óß=£ó[GKðOF_ÿc׫ÿŒs„öBT]ŸÔ•„ƒ¤—ÌiÁ² Ž2ìkõ;ô˜"°& 4*ؠܥÄkÉ‚9*¼¡UÒé¨ Ó ¿Š¢útJGsù$|Ó!!¸äI6Ã%tŸÇÃ7Ý€3·Ÿnï8uOUÕ¶ÓËÚNn›ñrê¬Õý³SÓf÷VVôÎvâ¿=öé3wÜñ4˜ßùD<9}ú“cùÕS—¶çåo¿ôÃÇoQѽ¿§ó7‹ö5ŠöµýFúÞF2Hð¼ã5…Û ñßv^ãÙîÁk´ÛµxcÒ`^¨_®ÇÑi`¦ò´{‡+ÝP™É«r£2™i§D¥D©¶U™™´ÿV£ÇxÄH†Œ`,Ьºª6¹QýÑÑâ}ɰ(yEòæd¢NŽNÆÉŽ>—RìÛªyš¥š> 1i€¿áUÝ(³³A_vcB&üædÏ#½¬“h¤_WV‡”Ð8¹ nrÏb›ˆìœ´Ý%;7¹»c¥9žpQ¥^è»ç…þBáG*ç+îØy¨¼cƒ¯}‰oÕ¢í÷¬{(ìEMõ¦Çê×>½Â—èžU{×Ü4ØÞòpWÞÔå»*õù‹¦%îØ6«)ÇpØœ·¸rõ=»ÃfµíœY²b~‰È Eu=lïÜÏ|)ùw(G·ò,R1Õ¬RÐø¥ê086NÇrŒ8.:.;¸è0àÇ„/el¤$ P”åºu-ŠWEE£(ªy1Èn–~»/%|‹YÜÔà*¡8Þ_ÓZÒ¹}fÜ‹zo_ö5< ²5ofVD~Ûžfì.ï,w¸kÖWÞÍ¿3v—}Z~Šò/þ¥ê:‹0Ó6F0V¨օʰ€JEçu’Õôj€kº  ƒRè†-pNÀ¸*HñQ”gÊÊ+A¤ÕWdK|ÉÉ’2½@ùfÙm†b¸þ·sä/ÜŸF?lôßø­‡)NBÊ'7·@ªÜà‚5zØ„wc\‰¡?l[ö‡ÁÆøÁx\_ßOÖX·[q…uµÃJîÏ€…Ë36e­"´Šý"®lAøËÒ8 ܃` ‚2TƒZÉE°'6†CUøÂðåá̈O/ 'B8ü%üK:ØÚ$mŽ–(B7µ–èøôøÂx"ÄÃ_⿤cM²æX e.?±~aÅÖxe4¤C!à/ð%`3JB9ˆ(|‚¾@Pʦè·l³`‹2%…ú¢3Ò3 3QeÀŸ3þ™3>rÃ7¼â†n8䆽nØä†n7,tÃlJkf»÷ºO¸‰[ŠŠ ØÜ^7Ö¹Apó"üIü‡ˆ_ß? Uº|ÝzÝNÝú3:E˜N’Æ£’ºuÞÞ_{I®×ïï%Þ/Vx!ÏÛá]çý¡÷eï›ÞÿôþO¯*Ù Jo„¿õ&…þO/Yï}Øû”÷Œ—ëòBª7ß[ç%Q þì…½ð”÷g^|Ð ƒ^¨óvzq%«TÞH/þO/üÌ ? ÆR½ïN/ðÍ ÜN¹V¾’Õ ‚7Ê‹ãý³¿í…G¼O{ä%»½àÙ¼%Pà…t/ÐÕ^øÒ •ý¹Îxa—÷ ÷8C(j…Þ;¼ ^’æ…h/„y¡sÔ Ÿyáw^xÇ Òøk^xÆ ‡½@ëÝì…å^Xä…*/Lñ‚Ó ±^Ðxáº>õÂo½@±xuÝç…-^Xé…&/Ìô‚Ç[êÅq^Ðy¶pUná‚hý'¼ð¨ö2Ø;½x¡ ]ä… /ÄxAë…ü¯½pÅ yá]/¼â…ç¼pÈ ´úMrõUÞ…^\ £%£ó¥ŒÎïdt‚è?*£§Œ~£Œ~±X«p“w‹÷ˆ÷œ÷’wÜ«@tЙ²˜r$DGR$e“e7]x6!<`𠽤Qïc†@Æ87Mºø|“þ¦]ï»ÜôíàßôrÞj¼­ E–ìÌØÔ€P–ú&”|Œµ™)â¡[°ß ïˆÊ,¹ó6¤ÿµ¥È–BB#ìrÑÇÿçÇŸk¢ÔaaÚ0M¤æ‹ÇZÞÕ[5ZNT†ëtмü…N®u FÆé¾|“lIîôäæyÛ“¯oå·^ßZº9³0»|zlÉ”¼²òúCyE%±Óýå²ÉÆ¿t†ÎtÆßž¼{̰Ñ2hÁõÊ.%n ËÈFBjp+Æ5ŽVG¿ƒÔ$´&ô'œøòx¼= ²˜4›¡Ö¶ECRtNtyôšhÎ æn“‰žéž¤#Ix(ÈèÆ­Õ6Êë3âŸPÇ¥¯±Ù²#û¢ÌÍØ¬Sf‡Ø_£ì±¼u«Ï0›¢nøROr?7\jÍÁè7x¡¨¢¾§»7ÙX\~÷+kwuÌŠx6vÓœ;Ö×ddžêk>Ü]ürb`™?³uŽ/µjÙ´©dxwÙÉ-‹O{b_oŽŸ¾ªÚºpŽ÷{{6•¬ùaOåÚyqS—͘uokaFíF6¦z®åɺ ´Fª~D°SÌy¯!ÒÌku¿…Xx)Ìગ«7©‰ZÝ +†|c¦,òâjäUq}*‹4 D2¿Cðr¶lŒó1šFÓÇ”S!6†p9@åQ3„%ûØÉê§G;ñö×Þ¢ɬ;ÀM&üJÇ~ ¥{ÈK×gÜOÖñq‰Ia£Ÿ©¢c¢•ÌÓü3\ ûû¤è h=A"éA–†‹ C ,s79Í ÌRèÉ·1_¾¯bfni‡ë2ñ—¿²1ÝT=]oÑt½¥¡b4“¶­IÝžŠ×Ø·Û±ìê¶&v{,^¹=oŒŒÀƒF¼‘ž¹ªAÞ¨TâI¾³¶¼­×VµUᆩ˦âìUæôUV]¢u¶ÌV³UM ®ÄZ‚­%ž’#%d¨Jæ V]¤le¢núš‚‚™ž5ÑÊ™kB\¶Ì-Rvqò–…ž±ŠìŠ»xE¼21´7ä˜\²Ú3/‡¹ñ}Ø'ØCrÛ¼]ÊE¬yióæ×xf·å5–Ú zž\Ùw¼;×^ÚX\Ü9Ãõû˜’ÖÊŠ%¥±–ÂöêÚŽ<½#¶¬oþìîr›Íß;gnOYìj8°ª¤dåú™ëä\xÉ‚eEwܳ´ pé¶; —-(ãÔ9 Öã9u¥Gi]Nz]ÀíÔþÀ×T™‘qGKöÔå3ÓÓg®”å™ Ýa¸¼vçÇðPŸ±šD“tBø0sXRA ’.j@ŠúgR6„ ã*E“Õä1Í65™¶˜xé‚iÜD”&IÐL&¥±I Ê[Ù3æJ({ Lº „t‚AAeH˜ËýµxÃKÆ–œÃsîüÑæ’‘cÇÆ¶Ã=O".:²¦lô#~kq÷£-;v¾ÿ ÜںΒèJÛ%•­IÜžˆ×8¶;pCô²hÜ`††ðáƒá¤A»Q;¨%…Š;X¨ÕÃi#i8mr²1Æ‹üìz§db×;ŒrE$»F£½I½—’²”ÃÉ3b &²Éα;žÑ7õòýÙ+y9­–¯LÞý`}S(%Ê #à i‚Jf.%©döÜÙ¥)p§”̪ž9%‰ÎÉô=ÇÂÏh¦oxacï©MÒèÞŸrªŠµÓ§–ÍË+ï¬.-(ð×-*µíÙV󽞩ùû¾~ô­·‚:é¹ÌgžÝËD/J±ìù-©ÅmX&ì¸ÖÙæÄµémé8ùÌøo¤úp}€ j 5D%LÄ»?LĤÌ ‡æ84LD3ƒÇ|ÄŒ‡ès$Z“VÙm6 ÛPLT‹îKMûí ±¯OswhÀr“PÚa¼ã ½M!¸Í(_ÞDÖ^Ùé”2ø†06é>©t)O‚4ž‹“îzeS÷½ÓÃ_Ò¤–·è¶p¥S 7cÆÔœˆa±ÞãZÚõÔZ Þ^6¼ÅŸ½p£ßœZUäpÖlœ=uål—›dÂ_›š”#­y<8vô\ä7Ðõ“‚ž“f3W \»)iw^– ›÷$âe‰°,–½°£@zܲ8¼#Ò#–EP‚mVaù2¿°:º9Ÿˆ>mÑ ‹†èQ¾‡¡ÔD1Í–³©œæ@MVéDöê$]n@7¢»¨£‡»ºÉlœ¸_žÐÈDÓ­¾rÃ|{M‚›¨KðÂÉMÚ2v¿ˆD®?{§T¾õ•5sï]9ß~8¹çÀ¹µÏŒ?7á @ÇþÜ/šÊÚwq_Õ7×8g-Ÿ:köÎÖ‚IeÙðsS²úÓC2ܘ¬Ó™ù¢’( ’ø$*œªÕZ^˜´¤Ø´ jÚÂÏ \OBf• ©à1]fdarZðó—qýA’uýäÒÆ¦<2f>Ìæ¨K¾3ÏhU™”±Q3¨Á]T`\¥P *‹a6*kšØ©d£(4£Ä#Ö¯Uðìe§gãj6°lY²¡¤k›ÙÑ8Ïžcç–¨xµzçé¶Q ùwõñ±_ýûØO‡r(÷C¡;êt¥ë$•îÞá„eN˜–47 ó‘æÈÚH2?æ7˜ µ²1l0 ׇu…áe–a¨LªOÂ9q°I»[‹%º…Ô‰‹¬’ÝŽ¶X÷RQÎ3`ó4{<ļð:‡° ޶hoº– |tSšQlâ½Iƒ‡4—5X£á¹·Ò‚7ËoèRß¡„É2!…”]7~ŒÁå!³Oäæã)/‡Ž„>´ˆ:êO‚⹻ϵ:^Š®ìÜU7ðÚæâiwÿx˼=«çÇ-ĵž-½ºüÔØ'ëñ›ò2qÏß437»vŠ}B›‘;vt,Ú»`Z2[MÁ1l¤têŸt KѤUûK ¬ž,‚¹°-¤Âq;hì1v§ý«;‡wëa·öco÷l+„æ\è2ÃZ=¤7¤1[Õ°ŒS„•$*Uv²ŠVÉJ”V£h´Öw6’"#d3þÕC“Öeß›} ›fƒ1›÷4u§C}:TÉž«é‰\xS³s(@`Zê = ªšèz•õîAŸ¯ {iˆcxkÂ-:;JÔl‰7Ó´7?Á8Ü<ñ<÷Ïò¡ö}9ö?Rφ.}°½öþö‚ÒÞÇš‹Ö­lö§Î:ß{ÏfF¼ž3Ó¼%Ûç8JWÜ_=uëÚŽNØ^¿eñ™ç“ò¦&ÆMišV>??Ù¢µ: ç,÷·î]”ž6wCµÝWë˜2ÇS:'7Ñ £™5½|ßF÷VŠB­’ÿx$lŠ„g# &ÂQ±)‚;.BŒè‹ÄM"·‰r¸6` cïÑ‚Vö$4MjnŒMJbš° ÊãôMõ~P—ÉÎú 5uÐöÇ·-;óõ£ÿïýŒotÌÝ÷‹Mcÿ…ݯ ΆÇþûÅF~ëœãc×Oï}ûîâ¯OîŸá¿M>û‚÷”„®Ì ™xƒ¬L©TvÄïÇ•1õ1¸’«çðØn~s l9é¼Ñϼ ¼†kNeÎÒøÆU¤ê8Ñ€Â̼§ÿ¼9ˆ­íì½AAw"»D*” ¥i†Û¹F.n¬wÓ|˜Ï3»øiö!N¾CðÚ •+ä 8aôçõK£ó½ œàœHᮌÕÇ癣, cŸýA¾/ÐþäúþÇ–Þ¸/à¦tô4{—¼/ ¼%|(|)W¨ê… Â.+b.NQþB€ƒÂ[ÞŒW ]÷æ‡Â_ü¶/ F tÑ>F…QBš\ÇAá8­UùZ1þH€ãì €Ââ @#ÀåÂ&a·ðŒðŠð©ðµ ¬hªS(bx|-àc U„$ °[8DÁÞ¦éüðl¡IÀ^tt\. x˜…Yê^»&Àá„ÀÒ¹šäûŒV¡”t GhÆUA‰È»*À€Ô( Ò-@µù>äEN0$@·°EÀ¢`$¡Zà‚W(ϱ ›fàJ°Éh( Ï…C–°2¼GyT9ÌÞÈ5 Ä²Š."6 ´Q qM<ÃÄaôs'†èHqæèÇYM·ÜŠº¡Ÿ¸¡®yâ܈MøJ÷Þ¦Ýèe*O& ÚÍøâëc±ÜîO_Çp:º/ZEÎà¦Ð>¯— õ6>À±‡Ib¨ýZ% (Ãö« °Èа EЉ9ƒÕ‡µi+L„Rų<¢|9â {ïÕ+YNu2—È úƒ€Ùg¶ß†jcœicFfÝèßÕ¦xÓ†Œ¬zræÁìùAšŸN†nÇuùY$Ž_~¢&¿ïKK–Úý‘´_!2MQ h@§±j°J#sï‘4ÍX ‘ÈGò¼á¸&òä}N†~–sôŠ({ý8aÒëÇÇ߯Mj#Ã9³î'c/Nxý”»–3ô9“èÓ}Ö†áÜÓH–E<å¹õK€¤Òb]ˆy+ÿFòÑð=ñ©øßCÅkzò£RÅÅ^QxiÊÓ±#WÊusG¸ =÷£(Þ¾wßm„Hæ,"›¶ä÷lsÀ,€¹üñú“¤½ ?2öàØ!þåœàfœ2N vƒ?„HaST+zœ‚0œ¼—ëá8•¢-h/ïu¸wã#øeN #Ÿáä r2Ny9ä0œ(N|ä têGƿԿó3é‹èSéÅ;—…“r®–kãÈêtËtuÜ=r»ž¾†pýh‚=›è°üï4à‚€£uéºB!*üY÷OÖe‹5"¶‰€E¼b³8$Žˆ×D^üÆ+ôð9Œ±ÍPmÀ^C³aÈ0BÞc&(QdÛ™½Meò½yÙ ¨9¼éÍy·X¶™ŸLÞ côÇoÁ]|X¸6,<,NÛÞâ·^·eÔ;ÒR’Òu^r™Í‚Ÿr½xz§ú‘¬P ³™Û3“œ€KÀƒ”ì b¯Gb׫3½zJ¸^øé®]t_ÿblAèÎxø¤ÊÈ01 LUi„ó›Ã(“fÍ6³dæ”fsdÔP”mIø£(é½_.F]ŽÂ{™& : 뢬ò½Áñ(~(ê¨llâf3p8Zu"ê\Ô…(îj GD]Œ"¥Q³)4±EÁ^9‹P¸nš}‘µ±7 ³û‡Gh1Z[ÛÀ5³ç.E«y8Šx¢XyV¦8JÊÉôD P솣8†‚(É‘ øRhŒe³V/GñÖ(°èÄj!fâFû•àK(V;)uÊÔÓ¹z’âÞxŽœÅ®»/¦«šÑ ùZ)»ó®½ 0'ôZ½o×isnc aj¬6Q›œ«^‡o(Y6+ƒãwcÎäœî枘ð¼ÆÍB (=!­«õ´ypƒs™Ø*m8W𠘤ò;%9oá×ò;xN°ø%‡fKÄ¥‘?Q¡# &¶|)_È”oËÊÎçª/åÃH>Ì·ü£ùX—ïÉÇ󯱨,1zQ“Z­ã²n¼††Ýq¼Ý ð¦ËŽ¡S‰gW 2Ãê› æÌBÈÞçã'pÿbäßÞšÞ1§8Jvî{ó2 ƒ£Kçv€˜Vµ|Zù’⸘â?{û¡ ,ô7b#=~OTqn Ñíø:^ŽÎŠóUeFà’µG›Ó|]ß_µâh§/©å¸L˶ŒÕáÇè:¶ iRƽZ¸W€:ÔaÐG†ë<{ˆ QT (°Bów&™Úèšc¨XÈ´–WÞiÌÏ’=Pe¡(äÁ8q‰sKzÞ–çïªs:ëv-~¾eOC:6íûëo»º~÷éØîÝcŸÑÐoÿ:ºGÆ%Œââ”q HÚZØ)À, ¸œÿó ú}ZÆˆÉ ¢•w¬@ß«ˆ˜GÃhôfŒ`‚[œ¸¹Œß‚’¸g”¡ôÛÏJŸþŽ¡4¶;xÖ¿Š7*£(mMA´O„HcD€â¥¢˜PA)"P¯êRmP‘$¦àdXU†é®´ó鑿ó’å²[,Hò€¥‹éRzu:—žr>©@Ð%t•Jש®Ÿ#ÁÇ¡tÍ X‘¤#„]ùÒûÞiŒÈ’YßÊî4o‹£ïÈ=¤¿ Ï YEB&³Â$››ñ”ª1 IŽÑ§^µ›‡xŽãñ'+~€éÔš^¿D…ITj5ʧÎ|ºcâpü'`àG߆Gy)Ù•§V« ŠÑ·ˆrô]N«4øÒ ± ^ÿ?<Ú‰îüþ9®P~—F®”H”û)£<Äa‰«æ.3þ!î(‡9æ1Ìñ‡9t˜²G¥W&ÞC7ù: ùmt?ý)Y~áÂõï]¸ ¯L„ÈK´nÊåJ³¥;ïÆ ßÒzPù¸÷+·)±_9_Ù®$©ì–Þ¤ ›ß¤HTSœV¼¯øX¡¤òÑ@,¢)%/’ÞïqH©‹Z#8­£اÊõk Y54­)Ó´j¶i8ØV97`Ó€I¾RÌ9¦á8M¢ &½à+ ÈÀkJಆ2¯›¦ZÓ£á”r²V4¤šÓ²š]A¾À)¿™Ñ$ ÎI{›ÓãtÊ$T¾FÛtã0ôåãTÁnÎÄß}ˆä.ïì"É»w]ÿ»å9i…:®‚|&ω_ÊTJ¸™™Jl”+ºH9%îÆ™pÏYy|míÏóè¹j¸X|ÅHã•ß5#ò mƒ¯úi¥,Rù#©Û·o íÛä2(?ÂîÓ©ð<ɯ„0%ÐóQÐó@xÙ­©?Kã42üTáÊ.ÕqV¨,ª\•_Å…«ÐŒçãý˜¬ÅŸ`\€+1V`ñAõqõ[j2_ ‚º@£Ôõê]ê/ÕœB ?ÿR Ÿ°ô(õY ý¡†zõ OrÕF¡Ïªÿ¢æ4j8HßP Æ§ÔpL ûÕp·úÕ0_Ý®ÆÓ˜ËT¶ÔÀ©ás¹Êóê÷ÕøIõKjü ¶©a­–¨¡F òUºD5Xdà¿«.ª/«ñy5U«ñ>5ô¨¡•®35˜Ô¬Z‚ÔÐõ±ús5¾¨–^¢­ŸVŸW“õSªÕÍj\¦«Î¤Æ´õˡևY{­ê~õ>õ15ïUKr»ˆåÒʆ‚Õeê5»m£,¸Ì0=F‹’–Égðrã#j8­†P)–±MÍ¿¯þX_‘G„–À^†‹NíQcDŠHÙÄäh”¼|†‚F=ãÖ&¯5|ãNÃ7ÍÉM·Ü<½Ý›ó†„¶Z¾[J¿G ~!‹@…»OAoZTPR&_W"Âë£xžƒgÞÃÑ38@ F[ð‘ :Kâù®Ÿž•# 1Þ¯|’J“û 8¦½ œPp á’ƒÒ;^+<)`&{c*ƒÿºRšñ¡k™„ÎÄrʪÎg"<ü€Jâw P#´ ýÙ%À¡WÀeB€„,›¨|-Àßx_øXÀ§„ŸxŸpLÀ½ÂÝf¥ð4LB¢- ¸J`oÌÕ·¯ Ð6iñ’@†PLÙ—3€¤ƒµua`NMàNá>áQ0é UadºŸf•N£Y°PX.àbaf Ì™B¿+üNÀL=€)Ã`Ú€…‰2 o  Ÿ „ úç#ë ˜>§²8Þ"ì¥Rþ9á‚À3Ië«€•=M”PºééäýEccðz‹ìPÀüm'&œ ,”b9iŠóö×ÈÞ´R&„n:áÎÆåÄǨ?tì‹<ÿÆOà>òùW[˜uP'ylòœÚ%£—À¬©XöJï²ûtï2›.«Ô÷™ÏÐ2¯°÷u‘7ð@p= NÉ~SéfY8äÙ›ñ0¡D‘‘ï¤Ô–i}Tl{•0@éXwP¤ô(J)ëÁËk˜Š‘ôŒ^ÝKÛþ­|ûe úÁËî7ÛÂf¬œbÄúÓŠNsÜcHƒ*$÷/5°]¿å`£ÑÓŠ`Ç>ÄwÒ¥ÎÂJÈSÞK×0ÿ‚¬O•mØ2kzkVPm!_¶ÀG«ƒ§‚§póX <û <;Vó ³'[Æ{¹¹ügÈ‹ŠÜÒ¢GÂá-ì/ƒí)0XðHÞ•s0oK‚µŠŠý â/_º£”d'·&÷'“$ Q1™G<‚y*±yÁë3ã»ãÒºQ¦-³‡7³:³'“W‘L6qŽû–Öè-L®›Hbd€LéíÓú.䣹ÀïÌ…õêߨñ› ¿NÀ/%À½ ?LÀ¿ž ON…uSaŠ85A›–©BwÆß£ã!>Ò"QîË¢3{Ì¥æ&3gÎú<û¸cfÂ5æ9³,sn!¦Æw™"ÿ]'•% ìæåU’_Ìråçz¾R³zô}æðèéð½‘|éÚ„F𙨒(—•O"ô)AÓu]«4ª¤Éúx>hÄv0f>E_BØKL"ôá+>üGÂÓ÷¬Õ³L3÷õWH}5mn} }šéyÓÆ5E½uRb~ï‰u›á¨gβ©+f¦.Jõ7åZ‹cLÂÙ'’rH)<\ã Yó–ÔlžçâϨ/îÒŒMOËŸ½20óžÖÅã8²´ÚgÓ¹8kþüo¹wdÙÃá Ξ]<Ÿ'ý*¤Tö‚pŒûÊnWâÇ ÆÑ8J""ìFë¡„Ÿò¶/ïeÈ„ÃBcÈcežù,ëz …¼ þþØŸ”«h;¨Ú¤ñúA=^£Û®Ãò‹˜7xvy°üÖåödXê‡ùåí嘽@WFÃù ùËòIQ;Ì-…ÜR)ž+A²”+ù%r$ùv$]‰9¸oÇ\”ª@…5*ШbTXe£,¸eQû¢‹Huas!æ Í…9…å…Ü®h,uAt”pgö}ÙX“]•Õ–hKº…t¾™”öKuO¶Ô™Õ‘@ÿ"Õ‘ê¹è=©)³;ïÍ<’‰3ûŠßCsʶ¹d®ëW<¿üãÒâãØŽg {Ë‹GŒqƸ™¹Ô£ïU@Å´f"Ï_#³Ýý ˜ƒ„ÏsÃQY¾îòثá¨èHå›(äå7áÈsó Ž'“n¶þædË2åäí2&tæù9ÙÛUn˜…¹o3{–à ß;C"•‹ä•€rÕôµO´äÏβ`PD–7®©¨¹sNjŶ³½Sš+s Š”ÃýFƒ3¹dùìŒyßÿÛá<³{±wþÿýX×K¯wåeÝûäùî×Ç>|»«tíÓ¿FãCoAâ¹E£'”ÖçÏ¿{AFÓÒòõÍ~ƒŽÿ{èê³Í1)Yç ˨/wvÜ7oýÇx§§SÔ¬ÏôºçÜ?Ò³õ÷/’ú¿?òQß}{¦Ùî-ˆì‰/Ͷ÷ýbïôÛÓþµ?û硬š)öÚÁç¬ßYÒ¾­"±:¸>å;Tž£Rm½|ëQRk¨tÉî=jÿw 7.>j‡ë”O¡ÃòåGf« ]ô²wŽÞrR϶— záðÄ-È ø0rÙñ)<*Ûg—KU3ùF~%Oª¸…ÜrŽLSÍUáéÊyJŒaDÛÄŽŽØ°—žáu©«Õ9í-µ6-Öß&ŠxàÃéõNcð¶ù;T¤üÝ;¾wV÷R::7’"ø¥†R¶¤<žžY?UÆØ'g×í?¼îµ±?g€&l'×б­ò«àqøgåŽå&ÓÛøg¤Sþ?j›%Ý. wó°‰2½Š~z<2%ó4*®£p[8 ¿~-œ 'ú‰gs郰ˆ=Šm`‹"ª#š#¸ð&3vK´{£6Yì&»Ï±Ú³zòj;a‘3¸øù„ä ÷sù¤Co=ó‘ãµ[š•Ö¹~ì¿àÝüå˜NX§6N‰Ý;HÊ_w´=ÞW"ÿ<ÐúyíòÞ&Ý” kð³]¸/áþ‰ÿÆ´}Ê<ûop*öŽ¢£Ê’±YhúTè?íMþ,ÀŸ¡2~>â¸>´ ?vÒ³(P¸uÐïWèw³âiôý^@?;ég;¼‰)\œFë ñ]´ìBŸÏ¿‰ž¢ð;Ù7‹Ó:âèÇÊ¿9>JÓcé4þm“{¬%Ÿa°ôÃʦyO±Ä¢(@-ì#ÇûP5ýÌ¢Ÿû¹?¢§”÷!†;éÇ·>WC?si;¡x­£ƒ†C8m£åÝß*öážEmìCóY}Þÿ…Œ÷Óh ý„Ñ‘~U„2)\+…Ë ñ³p/êÄ¿¦ý§iÞÂpPYÑ÷Y_H²sÌ=!ú=l„Ÿ‘úû{q§ÅëJ—ò¨òcÕƒ”å]/¼!|LÅ›£asîi7j?Ÿ/®?֯пd4Ÿ5}e.´¨,Ù–bäÓQ¶¨7¢½ÑOÆ´Æü"62~ÈZh=jý™íaÛuû] ± à sxï%N¼žô`òPò')þ”¡”ߤö¤>˜67í‹ô)é;œñÎÎ?»lKÜ3ÜËܧÝ×<×¼‰™ý™¯gY²ÖË«c꣧núˆÈƒ(;ö?BÓØªŠ…ù7ÖPóõHGc*¥DÝ¡0AÑhm(ÌQ˜¡P˜§´ãH(¬ áçBa%Úˆ^ …UÈ9¡°€Â¡2ÖPÜø‘nè …µ¨¾ ‡£Lœ@c#xV( (ž„‡Â…W(LP6) …9 ³*æQ,Ù +hø©PX‰>'çCaJå΄ÂŠå.‡Â”Ï]…ÃÐ">;Ö¢ßóC¡p8Ú¬X5½»gCoWGg¿-uiš-ËëͳÍmkµZú]¶ÊUKݶ©+VØd€>[o[_[ïÚ¶V·mFå´ò¹Sk*gϲuõÙZlý½-­m+[z—ÛºÛo-?£kI[oKW÷*Û¼–U}sÛ:Ö¬héÚ·´mUk[¯-ÃvÀmÑùm½},œéöæ¹³'3oýß A1ïèêëo륉]«lµîyn[uKÛª~[˪V[Í‚³ÛÛ»–¶É‰KÛzû[(pw'ÅsÙšÞ®¾Ö®¥¬µ>÷ ô§w÷öt‡0êo[Ûf›ÙÒßßÖ×½ª³¿¿§ÐãY·n»%¼”º—v¯ô|W^ÿ†ž¶Ö¶¾®ŽU´ãîÎþ•+fP„VõQÄ×È-Rln2÷*:1+‚0.[_[›UßGëook¥¨õôv/k[Úïîîíð¬ëZÞå Ö×µªÃ3Y «%ÔÎÿ]iJë»QÚ€zQê@¨ŸÒ¡T´¥Ñï,*OyQ ÍEmT¶³¡j¡.ªD«(”›†¦¢ô×vS }r¬~·ÑïµrY9ƒ–š†ÊimSQ ÏF³hj— ßB?ýº…¶¡•ô»-§iݨý;ÛŸAË/‘Ûa9]~ÍGc«h½¬\ZCñcõM¥)KiÊ*¹^ —!cõ]5|wî|9§ïFz&ň˜ekÉï®õÿn$‚cÞ!×Ò/ׄì’뮥ód¨j¹$…~¹µU2TÍ·´8›¶ØN˳1›„\*×ÝOãÁš»i¸34žËèX÷Ê´Êå&úÖG[þæè³µ×KW_÷mcİ[+·9SNï—×Ëë”c=¨ž4´NþuS˜[k^ª×-‡VRÈÿ§åúéÎè‘DZMžå œq·\çJº²f„Fh•¼ÞÙ­¹©Á±ùW«Ì/wÌŠ[êa3˾YÙ ìûBø·ËíG­‡>»é¸·É£í–S;ä>vÑ9좡›ñc3ÖJ»› \níÏÿ—m“¯š‚ö£où9)H¯»`•ŸG€“Q81 hÔ³¿Û×ðêTëßý©Öÿò§[¯ùÖ¦«[®bÝÕÙW›®î½zâ*¯ùÓÇñÖ?þÁoÕý¤?ø-Öÿ¸ì·^¸|éòÕËDºìËõ_öGZW|©ö÷ŤöÚß’q«îWÖ_aù!ý<2Æá'ðÚÈë«“­¯¾žj? ÕgzÎ œ!òËβüÖ—K_žýr÷Ë[^>òò‰—•=§Žž>Et§`èE~t/‚J÷Bé W_ ÃCÃxxxdøâ0ñœ(=>7üyîâsØólé³øÈ30òôŧñìã{cÏñîãçŽçJ´V‚îýpn?ì÷ÇY¿·/ºeßÞ}ãûˆ÷é<ðôìØ‹‡öÂÈÞ‹{ñì=M{º÷þqë‘í°ížLk_©µö {Õë*Ž5"k£|‘µJ©UÐ>7Ó¼&úYäÏ´.lXè·1ËPËÓ1á²Hm7)%øêœñ9Xš““ï—æ$¥ú/H5ÕPé·Y´Î ú9á‡Kþ«~<àK–¹VºZ1KW‹Õ«UWªkÒmÑq:G7[×­Û«»¤×)KiÚU¡¬â€x8C'kæ9Ug”ãs«†•Õ ‡açpÒ<ö”æ4 +v£Ú†…u'î¯ß~ß}hZ\ÕpÖ¼ºáæ¸úªáVX`€ĸ“4­¾¿¯üoi @ýNg_ ±wޡ࿬9Î>šMÁúúûh¤ êsöõC_ÝÈý4½Óp_KîZ‚~úœÁêi ´âÅ´úèVÝ×Gáûhù¾ÈÅt]ÿ/y3ÐÕ endstream endobj 373 0 obj 22170 endobj 374 0 obj <> endobj 375 0 obj <> stream xœ]”ÍŽ›@„ï<ÇÍaÓóîdYòÚkɇü(Þ<†±ƒÂøà·Õ5I¤vU4=Ý_×à.¶‡Ý¡ïæâÛ44Ç8çç®o§xîSóS¼t}f$o»fNOú¿¹ÖcV,gÛ¯‡þ<¬VYñ}yw›§Gþ´i‡Sü”_§6N]ÉŸ~lËóñ>Ž¿â5ös^fëuÞÆóRçs=~©¯±ÐSχvyÝÍçåÈ¿„ÇsÑgC”fhãm¬›8Õý%f«²\ç«ý~žýïÝKà‘Ó¹ùYOKªYRËÒ™õ¢EuUB[jvÔ/Ð^µhNPm5§büú…ñWèWÖßAoTíõF­ù[Ö÷Ð;Æ·ÐïŒ[è=ãÈ1%5â†ü½ ù½ ùÚüü†üAsÈïÁoÈ4ùC€&¥qòW4ù½òßaC~§<ä÷Ú7ñ¿-ZÈ_¡¾_0¯? ¾ßiœü¾ ù˜…üz ùæò{ÍOþk_ò[ÜßÂC!§$~eKüÊC~‹¸%¿…'6ñ£¯%¿EK~^6ñkù-|³äw`°‰_ãéûA_›øU“ßk>ù2$~xbÉï5~) <´{jÜ»Küˆ;ò[Ü#¿ÇŒÎ2½ùÚü¼uäÌëÒ÷»pà#àqä·z6}?ª“ÿÊC~¯gÉ/ZŸþ fwô_kzò îÔ'ÿ1¯Oü˜Ë§ïþûä¿æ§ß/|ò£‹"m¬ ì´?«(oîÓ´¬!]|º°yº>þÝã0â”þýB‹4ð endstream endobj 376 0 obj <> endobj 377 0 obj <> stream xœÝ{ T[×¹îÞû š¥£Y $!ƒ Äh°‘ld°1`ƒÀ€íxHMÛ8رgNÜë´i’Æ,;Î í¶Y·Sr“w›öµ/M“öööõÞÄuÞmÒ»^Äû÷‘°qš{߸Ö[ëI:çì½Ï>{ø÷?|ÿ¿¦&v "5šF õïèï\–ׂz!lèß=%¶ìÒAúC„HÇÐø–™Á÷þ„[ŠŒÛ²}ïЛ[çR…ò¿9<Ø7ððþ T®†6Ї¡ 6î—×@>mxÇÔ-ÙÊ‹ ä‡!?¼}¬¿o}°Î ùwh~Gß-ã³ëà~´ÄѾƒ+~[ê†|Bòãc“SmØ>PÍ»ôþøÄàøï>®ØùOâÚ  ×~ ÌÓ¦¹çØúÿ»£Ç/—ÐkèzýEÑ,z=€ö¡£èèqtåÆx±ˆ.££§Ñqô*zÝ…nûÚyÕÂú¾-@уè^Ôóõ=KõÆ ÖQtú1>í½‚6á×0ƒzÑ^h{úްØÄšÐG$ˆ~€h?ö‘ûÉ(Œâë?§ÑwÑv8¿géCþ&ëÐ(yœ©Ew {IG?@ˆ™FßÁÐ&°‚ÔðMmy™Uhí‡Ô®¥w¸Ûa,ª…OÑ@©{ÐCðôN´QÙœF4½!tã‚Ù¼ =p[|–Š'¯ùüCènø®†ï|¥Ol8ö ˆE-®E§bAVô®v^ŽÔ â$Ç`ä‡`n÷£It«¬oªÞ¶ IRŒÚÑÑþ9Ì¡†Óã§Bµím­-k#ÍkV75®j¨¯ ×ÖTW­ U®X^Q¾¬¬´¤¸(?àÏËÍÉÌð¦§yRÝ.›I/è´•R!—ñËŒrj=á^1êí²^O}}.Í{ú  oIAoT„¢ðÍu¢b¯TM¼¹fj}¥f(^3t½&Ä T‘›#ÖzÄè[5qw­í€ô]5žN1zUJ¯–Ò¬WÊh ãvÃb­m¸FŒâ^±6Þ=<[Û[í]P)«=ÕƒÊÜtA©‚¤ RÑLÏøœ¹K ’Y»ìAr í6ʤ×ö D#k;jkìnwgnNCTë©‘n¡j©É(_•IMŠ#tèè˜x!çÊìñ9mîõ©<};¢L<;ËÔÎÎÎDõ¾h–§&šµï÷6˜ù`4ÇSSõÑV[®÷Óx£KåÒ8û‚éx®~|sI_¢„O>C4òÎΆ=bx¶w¶onaz³G<³ÔêÙñZ 0ŠtÀSs /³GÃÇ;£Bï0^–˜l¸¥1j\»¡#JÒÃâp”À¯Òã.µ»õ‹u"ÿÖm„rMÝn:ñcs!´2Ñéµñ¼ˆ6Û/¢ß×%½ôΕÅ;ævzgzñÎõÇ{=°š­³Q6½aÀS 4>ÖÞ ü´•.…Gˆjÿbw{f z±Ìß)ÕaT #b”óYà©¥§ÐGf)£ýKürÕxõ±ÌÍÐvj=µ½‰ßîa4 ææDë}ñ¥o눆j êK¬Qí…€žèë…%©‘–/ê÷ŒGMžªëëI‡U;ÒÚ!=’x,jªŽ¢ÞþÄSQm íY¬í­‰¶åYÛñ .|x¡P´?D…¨³†V¶T_ykg;†¢®^ûHÚØawGC°ÀžŽÁNÊh@¡¬¡;·Ôc”T·u4¶z×vu”&¿A›cÓk¿ÒŒ§ÃoX.*O—‹ÄÎtBE Ä0$ûRâFë¤üõlýWn7,ÞgåžÆÖYÚ¸'Ñ ‚‘7DeáP©Þ.I?•gO¸„$Z’çÙ ¡•åa*¶³ž†YOkG…T4È­ö}´/jÄmU¹9 Ìª.xðѵBøhkWÇK@²£m &Õ½UÒà^ÇK"B!©”ÐRZH3"ÍЖZ #—êÛ_ m“î²R”ïŸÃH*“/–aÔ?GâeÂb26^’ÊèVÉ6 4ý]+Ðõ9Ð9<ÛÛIyY€"ðÃQìYÔñ¬¸€ ¯Ž*=ƒUQ•§Š–WÒòÊx9OËeÀØ‚ssöÍ µžÏl¹’éG€mÉ×Z†ò.`䯸(c³®\à¹_W\d$цs´ø¢ŒÏþ²â"¦åA½[ŸîÖ»kˆKÃƆ¹öÏŸ®aß’Ú_øû@onT†~2ì.;RFšðFL–ݖ#F5·p%´M£¯OW)ˆ¹³¢B[oÔø‘ÙŠ[¬ÈdBˆþLÍûQ%˜îËèmı_Bo rá4 —ËÓëü<æC™¹õˆxÂ[Sìf³ ù3‹"Ä•Bf„±ttvøPåÕÊ ¡¬ìª¾¬2Xôc·oçU}ÐßÝݽsçDÐÂ/.Ë4#,Sú„ ì÷Uø„úNðù„7„+W®äw£n鄻ӵؓê-*,1¸ ,Öà ¦Äd´ŒÌã]AJ°›M–`$Wà¢Â<âIÕÆZûÂÞ¿¹ß6†göÞã$X¦“µ—>“i”<~³¼’‹eªÔݵSÝa›Ré,k-´V>7Òóä¹¾¤xÝf.» Wû˜Q_áS°iË’ñöŠþì]Û#ß½%¸.}å†Ò¤¼¡Çâk;µð1ÛÁ®A¨ uï/ QXð^Õ*2¬Â»ù#<Ñ4hCδz­–I £ÜÞ|Œò…|’Ÿ_ÂÔ!›`#6FŽ"¹¹ò̈KGŒJÝ«†2?P—RV¢ëN‰Ø~ßÕü@÷õD'‘HcÕ2žÔ<4\Á œÄlÒa „’¹ãDÃå¼ÌQÑYQ²¹u…ñ¾¤–[¾5ÜsïP‘ÑyËÙ—{‡OwûÌlì`ÞÖV+©'$mEþW±ÂQÑö&å,OËÍÝÐàÏß|º¯µçÌ»·—õ_¿aĆÿÞ±êàf“Gß°¹"‰Ò £çÀ—ø¼ M‡Ú÷03 Ùƒg0Ic Y‚p‹N¡[- “ Œ[ÓH°‰ìS”+ö+Ž)X…‚™&„Ñ ÑÕ(ÚD!*Ôõ „ͨ2ôuWZƒ@JCÙr÷ŒMðÍøÞH\ò¨ãö0A£“±7á Ùüó~rp“¨œ©n5þæÙeó!KeM¥Ù\YUi!ß—ÖÙ ã·¬)¾¨Zõm5V«ÑÜÂ'¡•¶>/䉂Ï· FŽ7q?žS¶ªQèaÌ ) Ëˆý’0h3yã´- 0P_ЋœHwËÜ%n#%A9ƒ¤|™‚Ÿx$ö=;þóÙô¥Ÿ8q‚qžøû+Wâ´žžÌB÷†Zw§I!»­G¬d¯úN5ñʰ—ÁIzl••Ȉ2=9=;qԉ΀“8feR *¢RùÌuþLŒ2…L’‰‚£×1î˜v\q¼ã9¨Z1ÚõGrÄcÑF¸TX¥âX·“ ú}ݰ qɧìI§¹Ó˜`DY±—J¬Œójñ V½]œ~ürÏæ»7å}Ÿlß½îàÆå&cò² +·?æ}Õ²ñй±3›s‰ó±_N¬ß]£íÚZ2òÈ@OsEO(uëuõMee[N®kAda>¶žÝÈF­Do†Šë·ÉŒvHذÎ@ôSúCz¦Vß®'öÊý•Ç*I‘–áu¥xwá‘B’1·ða¨Tgƒ³êtyx!£‘Þ÷ÌÌ–:ª'ËF¿ד À“ÅÀ“å¨ í{ EëUºzR`( Û’±9 Ð×;«RÿÊpYY°.5»Î糤¦®YU×lÁ]¶+ÛŸÍdg;Ó#ªµNg@Ð0T'®•ÅõbAA%hFAâ¶„r4H –å€z¾t`3Y¨—x( ½’j¬$TÆÉ•AIh¡d€r–t \%–Ù¡9æsKkñÔz×70„÷¶ ܲêð óÈɧÚ?VsÜÆmUùú—¬“n{ú)ŽëR¤Íÿ´u¦…Òp¹d¢¿AÇ5Œ±Ì¸\ÞÔ¤së ÛÊÅ;²Ûî\ãÂlyRŽ©½^—QÔ‡¶­ñ½ÃHŽåùÜÙ>¾²wª¨“źÀ†¦ÓŠz*çX½ð äÚÀþ_ S_«Ø¥8¬àn¬J±§øRN®d•n«Ä-ÊF1¹\ÄåQ…Ó‹Æ¥¨AÄïªt‘×Û.2æ:è:éb\Þ]#ì»Ä½ÛW0˜×3z`¦l弟®*X™!ä¶ßºvþ®¸™«eQš õŠ¡Þa+M•d|Ùô2²7íÎ4âñ6V8“œdÄŽ%ã}É8KŽóêÏæžÏ½œËä†À¶æ® Ÿ²â+¬¢•X­5ªeIØm-á‚‘Sy8/S"*„ð«•ot>Ù_ýEô]}××}4¹®·JœŒ´æÒ„3ò˜EVL)WZV'c61ÿªk¹í™‘M§‡JÙÇIfmOÙ²¡H±‚ÉkÞ¶¢d[[!¯]}Ëc͇z‹ŸÀ©-yŸ9™Œpoiéî^é¦}íyö[š\%+SUú¬•½&#˜æÐë\æÚþý-¥Û2™û媚]g:b,y­é¡ ‡_HªNW¤¬{•2ÉN5Ç:Ø™bÔŒ~»SwW©"«Š»ŠIƒ¥ÓBjÒÛÒÒ™ôÔ¢Tb^‰ù`8¸;x$È&SߪԨ)(Ä-…š “F“¿Œýšcš/4ŒF³–¯ã¸p‚QŠBRru¥+"Ƥ4¡1’4 .EV:9ž/Ô$™‘¸^ñfÆ§Ø ÄK¤î•„¯‚~IÎ$(ÉÌ4šÈ×úUq·ª[‚`pÅqÄ ß©ä†%,.‰’ºZA°x Ï.á¶n~¦ëöölòÙ¼±lss¹Àix™ŒØzvÕŸ¹[£NjÙÿäèÎÓÉ §ÓªÉÓD©ÕÉ¿•³€~#xÊ×äTok]nQ©“‚ùE£ý@qoø kSoY—\åô¤g6-ó|ól`´òŽ7ïZ5Ò—´¢$“Qø*2¾üÛøGæíHUýÐJGnÿ7w–÷e–G ̾ÞGâþðÇl7ðŸ å¡P=ïÎ<’IL"Þk¿ÓNX½IŸ¦g|Z¬’ÛåÀœ¡nÁ†ã¾–-N®+%'W)s:":!;ÂÅÑÅGv‰:Ã×}+JÈÞ Ot µØûö‡~0Ñuj°È>Çø}Å”JwEkpåîþ&›RîY¾6’kˆóÄÏŽ×ú{OonîÅVœ4÷²oSQa‡·¾g™-«ÿ;ûóÛÒ*’26?AåÍò¦“|’îPîz„×sXÁ'#ò/$+änúŠ‚¬£”¼å_³NÜTßp@È=‹ÎÇ?Å>°ãŸƒãÁFOбüÆ“lížç×a¬œ[øc¨8°±ƒ¥.ž3Ä!™R›Ï pQg©'‚~\?­gôz·5¢Fˆ‰8xNŒð2Å8Hµà …  I+èäŹƒN€!&¬ˆU–ÇÐUÐa·Œœ~ñÒ‹±Ïí˜çL »žœp4GjM)úº5õƪ¡Uù:‚?²3Ï|Ù"iðä†l†—³w3<ǘŠ75*OHzaðÖ˜_*Z†Þ%ÝB޲+çpÙUp¸€ æã,‚ÍeØ5·ðK˜7  £ÍHÜu•^¬óâ“Þ/¸‚—x½dà[øƒÒ€ÿÙð¹H'¥] ÐÎ(6gEødÆ)˜ŒÈ Ö˜‹—ÆY݈ õ#|ÀèR–K¾Dù¿ïKLPF>IÐ8 A üXI„X°Œ¿Kn ã%,]]‹½6õƒpµ‚<Ç(5‚ì³K-œxŽ­yu׃ÿL¥êÙ\5ÑSoS*\ËZ‚•#m+Ijì÷±?¬Ûœ\’çfA¤ë3Ø«±NG™%Ù:ÒsîÙîé²¾ì[vänyê@p]ZõÆ[<ÐBPð×e®é‘=ô’‰:Dp:F›ô‚ pÆ`I’ôY”—ņSf,˜Eó'fÆlI’±1Ì&–3±'ÀÁ ˜ôŒ'áSI8) Ùz8†eô 2lß‘0Èe€’µk±ˆç|·.s;%_øo&\@>7ãØæ–¨ÔÄ %]fÜ@1¦-ö§ñ˘ǿûo)Ô•ÃwoÂ)å ‰ý%öÉlk½¥5@*ç¿ÇÕ>xgFîŠý[štóO3oiíês±ìÌê.*c”¿¨Ð—LEƒJ¨WòJLˆFαŠ-,fŠM‹hã“ð ¼§‡ãNrg¹ËÜ.„ãl¬gqÆñØÌê†é½•Æ!®Ïx ŠóALQ{ü(Ã<ó€s>³…œqÎt1ØÉÕž‰u= ž‰cÐC0f cæP}È7Ä`k°8¸³ìyö2˰¬ c2XëÁ ³d@AL…^L@ [ã )ˆ©ßpó—ÿH…þ¾X/õE€¾ú¡/X€¡:Fd$Œ†aƒäNo’Éx·@ÑNÊ,ðª†Æ4ÉdÆÊW˜ŒF ˆ?ÃÊ€âà ì/¨"JNÆ–|ÁàÍÑ%êÛÄý  °AЈó˜ jDÝÌ·Bóoýì †ýÕµØ9^­Þž–eú'ü6þFìv®öóW˜—½kÂEjuqxMz¬3N»ïÑÝi˜ iêfæe 78Ù¶†ZäÈ$—#:n'ËÀl<Ûc*SýÊŽÉq§ËåV˜ ϳ'ÉeBâ14T-s29p>Nú/ÀAEë¶åÁ}–Bi¶ë¨Ô&,^ä‹&‚ê^Tà ykâÕ‰Xô-´€?z‹ÔÏÏ‘z2?ÿMÒOçÓ»Á>À’¹!µävá‡ÈÌȵF_ï‚JÌü‹„¿H&÷ê<ÕTFìÆ­8+bõÐÂýó[¡ÚO6i­ÛCò¸Ðýl%;ƾͲ’ɹA †9‚rL3¼]p«Ç¹\²ñ0©¸5‘15|ý±Z'[èdŸúb=ûÔ™3ÒÚиï+\ÊAC–YÞÍáÈVï>ﬗNÆÃIÔü1¤æR!+LõxRé<}J}}jj³Y ±dö8š==ž³ 7<6  ©"ªi«Rñ=z#¢¡´îxT-ÓHÈC0能–¯Äz‹ Tyß0ƒ¸]­9x¬rtS³ëtöö£Og[Ð&N<ùÞìà]ÝEšK²ÔŠÎŠÎãÛW“§Vî >üX`ÍPñÊðá‘ÐʽÏnßþ'0>¿¡¤{oÕÊ¼Žšìš™Rl…55(Àš_2olš)èÜ.7ѹ\.¢ÓºÀk\¢RÙU$• bA˜CØCý§£æ”zOª¨‚| ÀßQ`•® …Zl)Ø”ï3åû*óq ÿ|òaþ'ù$¿˜$¿^ÕŸExë|;|Ì‚‹¾€oÜ7ícu>ìóê“M¸Å´Éh0 Fc¥ Ñ00"ŠSS“ òMFÆ—œ¬ÇÈ` ¡ã 6½\çþA¿Äï¸@/YM(ðoõû¨¥±Ñ;\&™S(÷-õqÝß›ÁS|”°§[ƒq¥¡g‹•.è±»ßq`–¡r(º4)É6Å ï_+âÔ€Úµ=9IùÊy‘jltzôXù¾ÃXX^é 7­;+ËƒÆØ­\í—¯­<_¬­v,¯(±â“±–ÒòåŽêpÍоb¦:®Oú@?þd?¶„ ÷œ.ß%'V›9œ¬Â ‡7)”&…B ?e@qEñŽ‚Q°Š™Qö &¡” âbS@Á†:S)(ꯀ[q#ðfÂRPôˆ·0%ÎØ?ÁÎ/ìÄ?‰½¶â‹?Ÿ9ÃjÐuÿŒO‹’Q_hùþ¤cIDfŦ &2¤ÂýJ¬éZ\GCŠÕbÙ×è2œ“ ,=2ÆÚÃß0h×å[¸!à‹øóD‹=n°Ö4Z9> à±·»oùOÇc'ÀX—zs¶îçJÅk—÷þäÛï‚•~7¶ð\'W[¼óÙ=Æ :2ž}ä‹?c¥¤ÐÃìzöâÑþ‚s,7’!ðÈÄ#ŽÇ èa†æÐý XS@š 0wŒ@eq•ü?ËŸçßæyž‰¬£z ˜ŒÊKç7¤«-ŽBŒEجÀæ)æ¾|‚é"åoáo?;»û!‰¸…9p,ƒ*Cà¡f µÆ!BzÉ4a(©K µÝÜø`#,#ª-A&Jf–R´s+ôcÅA̱¿xÚÄ}ø¹mßë÷"´­B %ïRàu<6©°IyHILJ¼KvXF¶È°ŒêÅt€È .‰#J¥ Œ?Q@'ÔiQ)M*0U@æ“ô¥ÞVw[H“LnT&W© Œ0@  hãDGë»`ì¬ÃJÉB†¤z™L!×ñbXÕÍÁêPEõqŒq#ä; ûrÁÇQñ÷u',ž0#¿"—¢—:KعÛiœ.ÈPãÇdÅþüÀšKX¼t‰¬üÙü5¼ÿyslŒ{óË>¢‰ùç ôŸ»q;» ebgÈ–®/Ò×êõ»ô‡õ¼«T¥­ŸànhF)4®ÒÕ§ã"\‹ñ.|óª4{Qè’tD‘‰5ZC§uèn14:t&‡C?ÏQîØï8æø©ƒc&19Ò…Ž)Ç%ÇÐ(ÙˆR²Ñ›iòz3á—ù®¿âý©÷=/ã¥Ä£^‡×kp0©‚‘T‹ÕbÖ ™ Ò- SéËʤH•êHPY™™‚×›õ×>G'/ÖÒ Ç×Õ2 2a†[ wûºãîÜ’MLi××ì)„äõ˜½ÿâ°LfÎ Bã!ݾa.…‚e<«»Ç§guÇÙeó-iË“}åiR¨‹L~ùìP—¿©È1u°b ùqý¸T~2‚ÀJò‹xâArXà6‘¸üJ\ǰ7˜ça¢,ÖQI·Ò¢³è‰·=9úäÏÌó¡;ðÖÛ˜•±l Ó7ðƒÛñòíñTlx{ìx9]Ï¢Øz¶tf €Î4cù'2Ó'f³ 3ËÌvòÉ5 Ö˜ÌÀœ@iÊ¥ÂU1{±s¯#:gRpMáëÁ¦`²+eãá ¯ïyáP1<|tý}§}íÙo?ÙuüoNý·üÕÎÝ¿ýçO-\ƒ1ü è$:ZµÇ0c $ ƒUZ\«6“ÓiGÛ`34ÆmŸ­Ü¶ üi›^pb§Ó nˆ^нÁébô:“-ÍVw)İ٨‡eC‚Yáì’[ôùvÆ7êãhö«[õ’[¨ŠuKÒUWbLÑ“9¾qßQ6ºçКÔRW²! oþvƒ=öù•ã¼ Sqž\¿ßòúæoŽ•³²†Ù}[>ëŸÿ†½yõ …jyc³ƒÜ&á!ÐÅgÃQ:Z*ÊLÇS©‡R‰„;†Õذ¡Ùú¶•|ßùX«5CÜÐ,ǸTÉ=:ÖÓÃaF"8¸3.âàBÒSq(¾$ŽBw¼ ìmî½O¾sËO~dOÝýØ;þöï~¯Ñìš<óv‘F35ùØOÈSÏÆ>¿ÐùO¿Ú9û,&Ϭ{ÿýÑ;«' ¼/ößbÿR½+øÈlKÄ8»„뮄ʶðxF‰³”Ø¢<¢$™W6$cÔ€"–XZ´)ngerž‘O(€>"½,T¡êUªqÅ´‚ä*–+H’ƒ­%2žáoŽ,S²¼\ÁP/Yµ4jb ÞØþº)\B1ŒDPN 9›„ÈM*êIÔ›ìéí±ûÞØpüü;ÈåßÎ?„Ÿ#ßx*æãjç{È·æßøò_éÜï­gîùIFu¡´]ï±à0·œ1Æø‰Áö‰ ä˜ lÐ4)Ü'< šK¼qq‘*‹ôœ*)¨+…ÁâSAºÅ3“)]œ¸²ç?î´;“ ×]¡"&Ó©/þðž$J³îxò±ÇÛ×~óÑÇ;Ã÷¡øÿ Øo²kPúÝóë5Ü¿GŸgÇ7·ð£Ð°ú°²0¹(™d†xÊ+pKÅjDLˆ0(¡åùyÜX4åƒö|_>Ù¿?ÿXþÓùlj~A>QåãüüjMr²·hVku&­N'À¡õ$«ËIådyºd•Ê"Y¢`Òi´ü n ¢!V0çz«„…‚µûDœ;1’Ïs# $šSä6ÞÞ´+E÷isʳXÒøÜa•*3Û½¢4WØý”dÀï£ûTÄœ¿¢)¯£{YÕjGD¥:þ]©êÊ1qy®¤M,÷»ïX;ÿ­Å½«¬¢RSF]±«wÀßP¼q £»lÞŸ¨ùÔ“ówÁzly? òÞˆ¢!Ǫ”®”})³)ì2fÓÅ0ËÈ*ÒE˜4o¡—”Í%‹rœªÅòÑì1ñ¬x^¼,²¢˜ß0šœ¬¼œ…l1›dg¯ŒÍ?Ÿ9ŸÉÏ׎ŠÊ€’(«ÝmHÑžë¥5Š“î€;`Ì,–'¹¤D¬ øNŠ Òðm÷Õ`â….P”qôU†ü€Ï‡–î4TàJÌ'@‘Ä >\rý 8‰¦7ÞÿÐ2:,±/›mØp׫Sû¾Ý›‰_g’–5ÔL¬_¦fË»¶ù‡\›ƒ“CMj†ŒMìy:õ¢cÛñ';·œîÎaYeY×þÕ8<\›JðĆ»ŠËzo­VúÒUiâŠî £¥tUŽáLRIg¥Ö®YÛµoLÛ=»!7»q¨Ân*Ù².¤c庎€6…ÊC?è)7Ø™lôó ÊÄåv¼\}*Lõ6ÔºzÂj8v˜Rê)¢R_ŸÒ+Ãi²BdXîƒL—…²qKöê,)Ë3–u0‹Y8+ˇË±‰ðîõŒ{¦=L¡‹ìñäh,`¾„FÖ¤£‚ᥤX²³Îc±h0Òš¿J‚p³÷ôQ¬{‰tK¥’ëï»î÷ã¸ß~?C½~,yý¼þxtýî7ƒ OY"t©ÂµŸÚ/&aP¥¼Ù ¤ª~õ=?Ř„Ov¦Èß‹âÿd¯ÓÓÓÓ\u®X. ÙoÙÚ{7:r³< &üÝØzS'+ÏÙÕ³.‰ô ÅñÁÑBž½Ú;µDŠL ë1/³ÈÊÔ[ê‘ Ô| §•îÓüòyƒ¥^Ú¯ÑN2*1§¤¾˜R¥¤QFF&X}ÉæÓ{‚Ñh¼† Ô!g.°h7ƒ@n‘â“^’r…B€C¾dcÌ”êŠÈQÅÊ­F¾¶×½Tù,îTì\úÅ’—ø|¾øA-F‚ÜàŽ&hÉ{±wÁJ©åçÎaþ7`N ­üî3±ÏÙ­¾\ogÆ—÷rµ_œÈÌËØdz?…Ò-tÃS êÑs¡é‚0¬Ål­©–ôVã¶ÐTèPˆ …ðHpoðÎ ÃæšrÓr™ìgER.â}IxÖ†Wé»ôä‡ÕCêÝjF%³Ë|2&Ð¥ó»ügýŒ¿®‹FýD˸…µXV)ºN’XÞÕœŠS-\Qo ›Õö((¨ ïRÄ_¥è¾ú‹¸b¸úîWÞ¤X²é½þ:E|ÿ1#[Ü˽LìÞH¯T°uB×½wäŸK®`WÝd{ý¾•j”uO•ûÖEj‚–5n>yi`êLo.û}œRÑS™\íSâl-¯;>Æí'‡—Í=—^Òµ2;¬«RmQ•ÔD:Éí[¶¦Àaî½s}fVËÞˆ;)Nq—­ÉU™þŠ,‡`Ì ooõJüZüJã¸4Z£eôzÕ4pK‹1ùYùeùÛrVGäD.gèkÊÍà[”^U–ïED ÂF'ŸT(t¼@&‘mú¶D´Šn‘—IH³›úÝà‰3ã×¼tI7ƒù À} k %(Ýk(LÁ/þоãè½UŽU÷ÏŒ§=ñϸ/ånf>³®Ðuoêò¶‚/šî†¹dÀ\¨}ñ¡ý!k9·Ÿ;Æ1åì1–”{÷{y™´tœBu[2•ìlÇèe5Ô"øEê\ÓØ´›ÍY„%kõõYtGD“RzLØdÒO&ËpÌ* Ò7Ü|Aÿ[¾ëFãjl…d*‚%+d%‰={~É»lZ™Ì-˰úÌž>~p¨FÅ»ËÛ‚;žJ¿dë¼ãÙ­so2œvÕÖÛÿÆH*ùYÊ®†é©‘¾ÍC%ÎäÜ*ŸyÏ}Ó‘Áe§›2-u·NŒlîíÝ\t:î?|F÷æ@¯«Ð³¡:%QÈ9¯â1G\Î!P':e–ãH51rÃÈAÅ@¥F™8)e˜eÅIú© D ý¸Áyøáƹid˜̉ã¨SGϹ qÒн¤¤õgf–îÌÌh©w'(Þ\Dn{t›†‚Íòb[¾OT±_ýð?ã?Žip)~5VCrˆ6¶?>ÿéüߣ8¦ÃúÒ?öôè*>C®øÿß¾+õÄâ눭çF‘$§/¡xlñOÍ?´ä_}_ù§%fßB5hM¡ç/Ì£¬¦o¡QÁ•è5àúqä@¿D«@Ç—¡C  ï¡VôSxb+ꃒ)Ä¡;Ð šÂ3(-\CCPz/´°,oÊYË k…rПðíøw¤”¼ÎÜÎæ°¯rðý ¿‰Ÿâ!»$Ï‘Oȧø¶2Mù å%U èësªVo×ÔhîÕ|ª k§t¼î]Á+TéµúˆþMCÀðœáKã¦Cæbóß[NX>µŽ[ÿ Ñ*3ˆÓ€ ùQBÌóŒUzëÁ(×%þ‹Po‚ºô¬ƒN¨<65 ƒßºkbdr`¤Ÿö6™w}NÕcãcñ1´N îW÷MM NŽOM/óû÷ìÙ“×—¨ÜuóúÇvøÿ½{S{Ç'G¶ŒÂüó†§vlo‚NÂÀwI=Âh–Ò1<6 ‹µ=^'Gœió“ÐþÐà m|blë`ÿTÞØÄÿž‘m#þx{#£[ü7š¡­$úù?{UƒDŽ£½h -hôŽº¥eÁµà[©4:N<Õ5r Õš¬åAj%Ú_qI “Rn®ƒpÝ-=Kk6ÁSU¨Z[‰Ú ÝŒÖ@éˆT¿Ž)¨ÝuѸN mP6zïßë¿ žß,õCïÐÿ\ÂÝÕÒu jMAùv(ï‡>'á<åR}åJcú÷žojá¥î:©ÞäõZù0VJË<ÐÛ_×Îb+¹ÿ=þŸQ,¾6[¤V¦¤¶ã5G¤¶Û¡F«T+"=Ié5%õ6*Õjûš›¡Ç!i¼ƒKjöKmÓ¹Ä[ƒôp‚ò[A÷OH#ž[œÛ$ôü×ëDyt¸tì&:´J£Û-õ¹Z*Ÿ’xŽÞ–rãhX)?Ú#}ó ÎÍ-÷'ÚÍ“R; æÿîsS Aã¥5ßuãëŸ'µ¹Ö³)A¡QI.(…v-™cœ6ÿ?†¥k\²¶ßÔ]Yz¥Ï.Ž~21þ!©Ÿ8ÕÆá<t”¨'•n‘æ8k8©¥ã£+¶%QöÕÑ,Žåæùü¿ì›œö)B1jC_ó Õ1¦yüY$Óõi8Ûõ_Ù®OÂE®GþôôŸ^ù³ÿÚ#×ÈO¯áK×°ïÚ¶kû¯1ìǦ ?®ù¸íã©},S˜>ÂìG—>"úÐÎ •šíáÐ?¬áÿò{¯ë¿_îúÇß;]ªßcÇ?ü.ìRý‡~¶¸~ûaØõʇ?ýð½™Ð‡Áâð‡a›ëUlB+°µccH½œiÿ`ùûí¿YþëöWV*°àGœà W°åyµ%,ÎaËELЫP(ÐØüü¯—» o@86\ÄLûÖ‡:™—ð¾ø~èýÈûÓïGßçÅ_G~=ýëè¯Yݯñ;æ ëò÷qï•ñ+ÓW˜Ê+X¼‚Ñü½ˆ×5þ:_¼~åufüõé×Ék¯V¸^~ÖêzéY¯+27>7=Çp~Θ¦^˜S¨Ã‹X|1òâô‹ÑÙ9ì )_Èw鞯|þÚóÌKØ]+\@'×E‡¦;k®sõ.ÿùÊóäÑg£Ï’+Ͼó,ñ?Sù 9û4¾rîs䥅±óyÑn\™‰@†4éüé|§tÞ ¤s.œ—ÃAYÊóôŒu¨kAs!8 pˆpŒcí%ö›g .:rÓ­>,>xˆÌnÇ·íXpML‚Îá”çÃz—0‡í¡jkrø½‰&¾˜`Ä ‡;üÆÄ»dçX½k ¸ŽdlkO ÚÚeA¦‡²vàíp鋤¸z¡­©½¤çÃ9®·_Å6ô¦¯xÙ.†S\4 ä*nêªwm ç»6Àµ ®ÆC;<ÉP¾”‡´ö —ŽÁ÷w>ÑIÆZñN•A«-»ëÚÚ…µ$´¶¨4Z›ž~;‚››*\k ‘ÕpXš¼MÅMŒ¬ ÿ—¦m"áB`Hœê« Û|=upœãÂ×Âd:Œ-æv=Öµ ºv‚AÐv¹t•ºÝA«Óùuͺ1ÝIݺ¬Ê®é˜1iÃõ”s0¸SÚZ}¾Æ9ÙBKcTÙÅG£é­ôZÛåFQ{×†Ž Ÿè<|×]¨ÊÑ-híˆö::£ÑÄ4$Ç ªêœœšœÚ壜HL"ßäÔ$à˜„žD“Ò}8P¼Ø'Ý‘Š r¢OMNÆoÄ[˜òí’ξD1–îM!)=ÿÀm8¡x“Ø©xÓt0(^ zŸ¤MÀ¥úšJt ×M“>´i2Þù¦É]› *´6)Ê7iëùïÍI‘À endstream endobj 378 0 obj 13098 endobj 379 0 obj <> endobj 380 0 obj <> stream xœ]“ÍŽ›0…÷<…—ÓÅ|mBFŠf’‰”EÔL€€“"5€²ÈÛ×çÚJ]$úlν|¶.ùö°; ýœ‹c{ ³9÷CÃm¼Ç6˜S¸ôCfÅt};/+ýo¯Í”å©öø¸ÍázÎãf“åßÓ³ÛæéµOáS–]ˆýp1O?¶Ç´>Þ§éW¸†a6EVצ çÔçs3}i®!תçC—÷óã9•ü |<¦`D×–*íØ…ÛÔ´!6Ã%d›¢¨Íf¿¯³0tÿ=+ –œÎíÏ&¦¨MÑ¢Xù:±K°S®V`ÏýpIvà3¸â¾¯¹¯=_¸¿¿*‹æß˜Ñ>[fÞÁ;fvàwf¼g¦Jl ò¼øoÁ‹?œ-ýW¨µô/•éïqFK¯µô÷ð·ô/q^KÑ ýKœËÒßÃßÒ¿T7ú{­¥¿×<ýúýþ²ø¿é_ÁMèïp'BQ¦¿à½BÁÝ ý+¼Wèïµ?ý½ö_î_3ô_áž…þN{Ò¿ÂYdñ×÷Ò¿DÆÑßá®ýîÖ-þk¼eÂ0‚øFþŒ¶iï1¦±ÖIç“Üáï·6ªô÷¯ºàe endstream endobj 381 0 obj <> endobj 382 0 obj <> stream xœåV]lU>wfJ)í¶l¡uQï0…‚;Û_‰«nÚnéöwÙmqKØévh—ìÎnºÛ†b QqI F1ò àOÄ w‹$ú Qc6ƒMü!ú`ôE51Q"Ås§[Z•ßÙ;÷;çžó}÷ž™¹³¹‰IÊàQ!Oé7!| @ªâS9:¼æ¨ñwè ïËŒ¥.ošù@hÂfŒ%§÷½ýŽÿÛqŒé7ôÑúÓu8fÿã·Ž£ãñë:ëЮOåh¢TŠví²d:®_‚!„Ž^¼”¤ô*ÞNÐD›šzÊX(zí€øI&͹aÿ €R?ÏL™ï¯gÑF»Á“eÜà<ÏÂÓpBp 4h„»AˆÁN¡Ú@‚àc¸Â+ð$<ÁKð20xp“P+ÎÙ°¿Ù+( V÷°»Â*ëžÒÈÔ0‡W½O³|hô2#«j|Œ(ô+Væõ1A鉨AY“|LT5”ªÄšÙž*ÉÒAõŠgVó`œzÝsUóȳ{UÖ9¥Yš†|veÕðns(…õäªÓ#ÃÃHãT u–+pÓU¢TUÒí>¶B¡p‘†2qCH¦Ì¶±›AXÍyrpG’4OÞ²" ,]˜Ëã’q¥B?·–S¦ÐFæô«”î;õýT¥£# ޏ•s ¶6ÒsÞq°®þÔ øl‚0jÂÉ þ§­âjKÁaÿÆ?# ¡ r·»gœŽú?ý3„û[+¥Ê R¥Ô!Ðù:r|~Ü>tíÍÛ,îÝ䂯@9ÜÏ8b„U42Û[9‹¿‚‹x¡©™¬¯ß¸åî­­-k×T»²Ûܹó”™êíëí!úûÒæ‰>3ÓÛ¹HÚŽÙÚ`܆ïg­˜eÕ±Ç"®eµ®BñrþuÄ[¨ª­¬:ç,‡êºµÛ¡P]–meU-Z Ê®m–²Ë騣۶ºê7Êë×Z±áôÞXlïé“#º>2ÿ5qF£ÑÈáÃ;#òp,F:c±˜>ÿž»%<怵'î;׺gÏ‹ÂÞ ÿopg‰µ1ÌþñêÉå…í˜oÆ%°¸ibžs×õCËBÈ?öQø :„/¡Û1L.¢íÅíü5+JO‘G@[€5=7žÐ³žÍÉ”nš¥™ñ„•€}óbàÚ3®'QڕΚÓÃŒN§FÒɈ16™Ô'–Kh—1‘M¤MÚÜÔÒ°mÉ ›ðߌ/s 4á¹Q&Áľ86iÈÂ4¶žâÇÇÄ‘¼yƒÐAˆ`£øŠ`EÔhû ¨µðrf<)t£N5 K­tAœCÖ°ÅØŽ­£ÈèÜK(>¤íV,¾•΀¥2e)M Ý…JI<Ó7µB¸Öà2•Aˆ^Ë»<âïì­V•täGvݪM—ÕgQ+‰ÕÒqm&ªd¬ˆ%…»ù_Œ[õàŸ¡£¯¿‰w`³x­¢ˆSX«4ÆDÐ3fÕQǵÝ*â¿úð-±Žcà¾ÕóäÆŒ<=¬$¬9ª:ù•¹ðÏ‚;‚àQívüò «s{þDÖO endstream endobj 383 0 obj 1611 endobj 384 0 obj <> endobj 385 0 obj <> stream xœ]MjÄ0 …÷>…–ÓÅàÄЮ‚¡L;EhÚ8¶’Û(Î"·¯ì™¶Ð…zŸx’<õ}ðY¾R´f˜|p„kÜÈ"Œ8û ZÎÛ|Uõ·‹IB2;ìkÆ¥Sì:!߸·fÚápïâˆ7B¾Còa†ÃÇi`=l)}á‚!C#´‡Ïy2éÙ,(+uì·}ÞŒüÞ÷„ ªn/Qlt¸&c‘L˜QtM£¡;ŸµÀàþõÔ…'ûiˆ-;U£”æZ•úöñ®rWG™PVüIv#âTõ5N âþž*ÅT¨ú¾&×oÜ endstream endobj 386 0 obj <> endobj 387 0 obj <> stream xœÕ¼X\×¹(ºÊÞÓËžÆ 03 C`€¡·Ùf4$F$Š *€(j¶%,«XÈ–äWÅ’K9B²ËUJì“c'vì“vÏ9)VšonbÅ:Iœ“Äbtÿµg@%å½ïÝ÷}ï{³÷Zk¯ú÷­ÏäøÔ Ò iD‘¸nKÿØ;'þBè=„°qݶIçkk-龈©[¿%Ëÿ£ß!Ä%#$ç×oÞ9äÒÎ"¤†:Á‹û¹õîB„–sÐGé(xtîYä«!Ÿ¾aËäŽ[yJÈ÷AþìæÑuýw£ãF¨ÕÌò[úwŒ=KÿD!Ïæàéß2Xmåÿò¿FH!ŽNL¶¡Œ(BÝYìùØøàØ§¿yääÃ0§P†á}4”±<¡/“+”*µF«Ó £ÉlI°Ú“ìÉ)©§+ÍîÉÈÌÊÎñææåû ‹üÅ%¥eå•UÕ5µ±nQ}C0´8ܸ¤©yé²–ÈòÖmí+W¡ÿß|ø÷ø÷Ðm|YPŸt½áÃU"3ÚŽÐÕOXîÚ5úÿò ±Û‹è ô,:‰ÞÔþø£;Ñnô%tá†êçÑ»è9tz=Šîþ'ݾýÜ*¥îG½ÿ¸~¢è)÷èï5´Ï`ŠúÐ$ºƒ±#Üî­h3ú->‹ÞÂJt ö’`üƒïEO£Mp}®²ò{t/©E#äK4ˆÁ ûH3¿c/COán´8lf µá†¾2ètÝ©©ëŸð{‰©¯þf|…™ £­¨µÆŸ%À%ènê€Õ|½$•žo+{†Ž‘׉bîatü-…¿4€oG'ÐÓÑ ÑãèQÄAt,ú'dE»ø YŠ4WÇ?D£Ԍ֢ú5jà b°³£½mEëòH˲¥ÍMKËCÁ†úEub ¶¦ºª²¢¼¬´¤°À—Ÿ—›•™áIw§¹6³AÐë´j•R!—ñ%åÝ¡>çlFß,—á‡óXÞÝý×ôÍ:¡(tcYgŸTÍycMjÝTSŒÕjbÁYªórA·söý·óîZÞé»ÜÎÙKRz©”æ2¤Œ2.´pmœ³¸Ïœ mÛ0ìk€þΨUõîúAU^.:£RCR ©Ù,÷ØœU‹¥É Vž!H¡eÃÎRO°`6²¼#Ø`w¹:órguî骗ºœ•ÕÏÊ¥.Ãlêè°óLî…™»Î hmŸW3àè_Ý1Kû¡í ÎÌœ5xg³Ý ³Ù»~iƒ•Îæº‚³^ÖkSëÂ8M׆ij¼Gp;g>C°÷¥On,é—È<Âgˆ%CÞ™™Ûšé›é?wuz­Û)¸gÎh43cA€0Št@«sW_=lŸ ÝÕ9+ômÀ•ñņZ›fMË»;f‰'äÜÐ%ðp»Êí.Cç|È?zŒ€©ËÅ~øœˆÖBfvzyG,ïDkíg‘èóvÎ’>öäÂüK;{2=ÿd¡yŸ°Ù´¢cf–ó4¸ƒãÃý³Ókž62T¸…YÝŸì.÷ŒÑà¬ðuJu0«Æaç,Ÿ`V×7JaMf)£ûSìvÉdŒÎ 7tÃú ºƒ}ñÿmlÐ3/w6졾­cVl€„ØÇQðLZô÷І$ôÍúÜc³f÷¢|²i‡WtHMâÍfÍõ³¨o]¼Õ¬/ØÀFvgúbS`}¹—w¼‚üW/ž)vÚ_ð£bÔÙÀ*'Ô]eg:†f}öà´!g‡Ý5+v‚;݃ŒÐBÙa8—4â,©oëhZánZÞÕQŸHìëŽóoêÆÝau$7«ð(œÄN;¡¢Î$Ü‹ªá:+÷(à+À¥RFª‹ªØŽækÃ4f³ÁÁ†x=–¿¡Sž‘S}x¾7ËB?õa»«ÓûäåxìŒ - ¨áùGÔ’Êt#1XÚÍ;;܃îN÷ç¬é`kcà‘ †ó8®ÚnÈ],rÁãù ælÈk¿¸³‹¥üB6|ÓãÆùÇÎ…»iÅ ëÜïÁÌg#a±Ü`—¸Ÿñ³;ÔL -ñóÌQd¼¼±íŒ»q`ƽ¢£Zª ä6û.6–5ᦶEy¹ Ìqã;—Ÿñ+º:^À캳­ã,Á¤¾oQç™txÖñŠ!Q*%¬”²Œ“eXO­QHõí¯ˆMKO9©@ʯ;‡‘T¦˜/ÃhÝ9+æË”q±2Q*cÀ’mÀäwÐ9Àðsk熙¾NFã( ÿx»k:îÚ3˜È4³*÷à¢Yµ{+°ò@¬\ÆÊå@8çåîš‚îÏly’zG pàÛÁJ–£ü3ùªÏʹäKEgdü«ÏRIt†²bžŸ•ËR®TŸÅ¬Üop<.ƒ«8£éø¡è¾ý¯Ï5pï3Ã,Ä%‚…æ@1sL7­#œÖ¬ÔîÓr†ÑèâIj9¦Äá0Xl^ @€ÿRÀ}=—ŠŠŒ¾K…¨§Çä7˜er-õ¥‹Ám(Î'î4K¾ò’ŒR›Ø:,®ØÛå{ÉU)¨Z¿4÷Eþ½è®¢Á|_sIJîêcƒs>òrd}-¯ý¶ås’Ù…Ñ›W/Ó¿ðmÈŽ:ÄÒ¶]¶µe)ua™ÌhLá•¡¤c>$I4zÂI¢ZFI8I±&(PSÊc= øý>áRQàÌØë…Lä`Þ~LÜÛc*ñÃÜ]—Áœà/ª%eu§e”Þ|¶ržFÚû³Ú[‚¶„Ъ¡Ò'ž §Žà¤èÇGæ&[šå* H&èT‡î''$<½]Å-â"( U£A±a  ‡ªVV‘M^ÜèíôYFBƶŒ\± W)ðNzˆ´¸/gg×úS !dœ6c~$5]°é öòˆŠO@ Ú ä ï‰A<öÁfÀ9ŸdºSiì™~HÆ1!ŸGƒ9•°Õq‹²V?0R6°²ÞÊ3Ƚ„ Á§R”K DjGXõª­ª¿±jÃÒ¹¶}²µ|s}@¡n˜:ÞåÈå“ë[m¶Úú†”ÚP†JÎÈå+@é\*GûÅŽÍ6¼ÓzÈJ6[ñÆRïûÀwÕGû|c>âðù|mñõúöøŽú8Áçôø¨ÏW•¨ #­ %—µX¯ hÉÚ´DÐbm‰,’˜–E‚IïÓ"˜yQQ `0aölÝ:.qKm½ÄH´‚ÙëºN·ß¨o¬72‹˜4v¯ÓUœa~†)›/° ѦûCù«LÄè-ûjÚŠ­O³Z‹–’¯¶l¬³û{îX>÷8]‘ÖT_ ç³KÊÍ™‹K}¾Æ¢¤¸­ Õ{úif)`´ôî!Ð3tZlMµéáAã”q¿‘6¦t¦êÔÂy´†/©"…5Sh?"h‘Â.aF B§@`¶í´#C"µ9 CªCpœ»záe•! ÒÊhí"ª ¢Z6ìµaÛ¹«E­VÛ!Õ ×Dx; ?àóÂÛƒ}Þr?`®=c£X?cmÉðèñbøº$ÙY’ŠýE¥ º ÄY--3ùÉ×=‘µ;–¥U:M†–ÃÆhάP;S­„ZSš+o®ýâh'?Hé¶Û 9ßÜn{ËÒZ¥º¦©%…Ü£¡½ Óʆ<è‹bë@ðÎÔC©d 7XÚ,¤ÉÐm SŠý ¢^¬R%/Ø[ìGí'ì§íüöìWí´ÏŽíöLÓbÖÛ˜#»`ï³Ù§íì2;ÀEL¶§†ív[Ä• ‹ðõõQ5U‹PâN`âÎÛÓkÞž­LÜÅêzi`0Íó¬<.Û%s¥´ÌÊ “Oö®¼ûÅÞµŒ†´„ém+§;‹§Ú71¼©llàÐùí¥$õÉŸ.)Zµ­A×=\6üèÀÀ‰‘Ê[4õ·®©Xùàû0ûÀO«%>ö‹I ãâV©{ÑuÜ»À»˸äbœi?Â?–åfÄ` &—Ñ íÓ«‘Mi£iÃ1dž‹.`À EF { GÁÄ1XTç®þZÌSÂ*ùê1F AqR1«àwa¼ ƒqƒ XIïPã)5Rc5R™™‹]˜0AoœAý^&yq‚53æóãŒÌ|\¬©†¹?såŸý)ØšOq½y™Wî烟ÉÊÏ\ë§}}­¢[^Zø.XC&ò¢bk©‡ + $¤]©%òN9i¤”9Î"æDrÊÆ9Ù9Ù©hD4GÌ™±Ùœ—:ŠT‚ЍZ²pKV/(Àìlwâ„^îžà{0"xÿ90áÂ$zÏÖ’0ɶÁ õŒµÀ©Øx³)ëʵ,ÝÿâÐú³w45í{qãà™}Í/g-ÛnžlÉÊno\<Þâvü–<ùVô¿ŸZ¼øI¬zë=¬9!Š'¢|ïÄ÷w—ìþÞ‰G¾;]^>ýÝ´¿ü%†Ç­ƒmƒlô”˜W‘‰C)+S†RèP2X˜Øé(p¦âÉIv8œbJzØéT©Õ³*¬b칡Ry·¹Ô]`- EÁB,¡¤•IÄÓ›ät&q‚Ê©*Põ©ÆT|jZõ¡ê"˜>*Iñ½‚ €ÔÃ,AÉZˆaš°Þ¦ñ|^öh<+GœW®A,n"è®Ìj»cu`°¥Òr"¹uòÑ¡»ß?X'îûÖÌàC£KŸÖ7öWwîiÍ ÏÜñí»ÂˆJëBû‡ÅÁs˜<öeŒOw—õì\T—ßÑÓpð_c:>Ü{@ërdFãâ"O«•jéŽ7s<åÌÉp+(Ì5r™Y.Ór‚Ëå {¸£áä˜ôšM¦.-nÚ–C@ÙEUƒÜ¦ƒÃ2a޽o .èëy[<tN]ÔýJœO3uTN]œjfîýCoãèàÏæþK›l5pœ`MÔ>ˆ?À»£{ùà__£¯f, •h4¥¡ežh'àù¬¡ÖÀ£ 1ãä´Ë‡lm\Àªïe³ºÄ܉J @”ƒŸxé<9 œ³ê8³‡–áén2œ“"êÁÝŒ5F¯úÀµB@ݘ-šâ—/#øÃ“'ÝÏ΋`l#ê+ Â(Q(ëq·à^|Ÿ¿LޱN X cdšPBLfÅ„RIu2O ›$ªüþyÓk+³…¶JÎ.sü ®€$Jm°‰¿lê»íÈ¢%GoíKú2Îe-.vÜŸVÓVôyó=íO¢G¸UܳH†¶¿„p+Ïñç°VdÈ,C¼ @2‡9Ê ³0)¦L¦8ÈÇ> •í‘Q™h´„eTªàÀ„?¨ÀŸßm~úý¯ä¼–®oKw »…¦lQbË$ýÅ•/Ó.Rõ>~â‘è½Ñ{þ›ùÁ„¤ù!™è ñÌLÈØüâ¤xm‚2žª‡ùãE{Ø‘#LLWoÌ¿0½·…ï ÿh~e%J\Âæ×óûÅ#ãQ<òHtÍû1¾`ú¶ô­¹³5i8”¶2 $ãPòÊd²É†m6²ÉˆFðýO  ‚Ð'PAð$-F E,­àˆ0Wá’´g‘Çç/Œþ"#½ÙÅo¬ßýÒø–3·5Ìýú¿{ût£X7Ò’çk®¨ä‘Ô#ß»+Øp×÷Žb+NŒþ&úñî§Öff¯{ê–Ý_Z›•¹öËl3W?Žï ùÑ&±©!­-m 6um*¢•x#Hæåù”|¿œSqIÜ.n†ãL¡1âcÆ“Fb4–8VdI#òEÔ ÁA4¶Áv4V®íÂÚWOÉöËH…OÚ÷Ùɶ¤Id»å …lO8˜@†Ux“€;Ì'ጌ”‡"  £Šó Ü(Ë8b2¡¾ô±ôétšžþóŒ™Ð1µ69NŸ×`3â—4\lo‡™™7xþþ’ZþÆ}ð¨Ì:Nî²Ë=öä—ö·e.î¯*í åÊÏ)ÅÑ'6eªvåÁ§ŽO;É÷¦úŸºgßíû—T¯ª°§VwVš VôÌt®yüØÞéÛC÷2<¾Àö}%¿ FÌK›N#œËìštísqžB™‰šÒNk‰6QaÎaÌ7ŒïÇ\º¶ëû]AæÒ…½^Æ›ÏbPaÔV×¾qÑŠéUy×ïöÎ{z¹UækûÁ1{ìða èÊD´Fl´LYö[è ~J¿_OQ×´õ˜õCëEëe+°â &{¬G­Äjµk»ŽªN¨N«è*3GmjjìåM’ƒ&9¸qg$.\ÄjLæH¢Æàçj*·¿´kò«•çk†#+FRÞÄ¿9ô[ÊK¦^;H·\y¾¦#+«óØz’æÛóÝô@³âÎâ¼%7¥t§ > ž¬ÝWK&k°X©!ªqCu[5ÙVv ŒLfîË40$Ð65>$Ç»äø0Á; ÎéÊÎF`•c“ÉQ§ìÚ£8 4WÜ…À5%ŽbïëKÏÉIçt½¼¨Œß(Ù"¥É€Œo4ý°'Fo³Ó) Š%ýÆ'¾äšsFç5•ç6ÔîyëÀo¢Ÿ§¿¢)hÛÕÞÞ^P·qCÑКå5iáݧ&ŸÜÚ`~]í]<ÐÙ¼(¥¤{g°ll}ç¢ <Þ~tC幯zʺêÒí•]PG¹Û MÉ,i¬ï;´*+»ugÄå”&»*–åU7::GNEëóQ˜Ÿ5 ô€\(m[óðÆt<äķÄLª÷©ïWS¹q“±4Q¶¶Ë*jÍa«UPLÃiiÉÙ]H&ÈNÊfeœÌ˜Õ›œœmï•Óì^™qÞA¹T± YÖ{ÉPÑÓ³7 TàÆX“ÈS).Îðbƒ› àISÆÓmG^ßÍÂǧÎM×»êÚïèÈþîÁ?úÙòñ°k¹¿goä V5ÞÖíÇ·®?Ö dFË­+Ë—Wé”å«¶’¬MÝÑ>GEdî?IÑ4kùš˜­q7ÐYè,•£/‰Ûw)fd—|FNÖ;·;:醤Iw&Ñ`Y{ ¶’%y]y¤)³;“˜˜‡h &4ðõœðœöp<zˆÇ“R©Q©|#S.§R0JRHJñ„É&šÂ6›.g"M®›àÇÔÓj~âOk0/?Ø:÷Z^çâÜÜp—¯jpINvÓúkû)ß>W£ÅâIÕ> ©Vª†Tt@>)ß'§w#¼ Ý‚H#êD¤B…Í*Œl;«Ç•{A ²­¹<µ>¬P J%R ðÏhV žâpD‰\…·Éȉ+®y¡ š 1EǼÐrp«ÊýÞCEòÄd%bW–KŒÄ4²õ+y”?ÇÌ’ï» ZKê׊©©þE%C‘ÂhGÆâµÕ‰MËÓšv¬üFVs¥{Ño¼ã½»— ÷'Ö–eQ¥·º1óÊ7ñ+úÁÖÇÖåæ­ûâÖ©ãk2½}†]àvóo£ Ô€Zp¢ø¯ 5m5dpYÌdÅFžÊÙŸC¶eÈ&ÛÒ¤‘AÞ©:¤";•‡”D:Þå˜qÜѼ¼`“?SH7ÈåiÇüÖ tû‚cAž% q,x28”ƒË5£jÑè Qcµºr9Da6Âeu‰éKŒþ@¬üÌtèÌ {D£5ìñ¤Ëš  ¤4¢&¢éÓðìvR3«¹¬á5Å1¶uÃ+lÒ¥´/³•§ƼìôÅ mÙÒ‘Ãc÷’TGa~¿ÿý¢"ÆF—znYXYr‹»$3{ÃjÈÈ„?wÌÜ(+ñƒÐbG¦!•gÎŽÕ  Ä`¨¥ÜîòñÓÛ§ÿÇÒžUç-[ªs2J ×v4—;Äñ/öLÝ3$š¿ªÊ tTUޝï¨K¿2›ì)¤ÚÉS‘•u›–zñ­MÓ½üãË_ùЧ´»!›Ãÿ‹M`MJfYc u{KÝ»—ËL5‰T¸¸èJÃ[¹|3)-]ìKÕá/RWIpnM`y±KÍæRË[¥˜ Ð'ð‘<((æîI;šFnqv•+É•ã¢É8QR«3q«@Ò™…`¶hþ: ›IÿyÕ‰¯3F|áyN0à-Ö’ö€¸¾1ó¥k6vRmëÆP×Þ¶LpwZÙ9 ³²ÉÄ•ço¶²ï ÿ6/k×J²©K¬’‹*sd“ŠR¶¡ÒòÊ®˜3£èÕó~”çFár‚?ÏÄÃGÉõbªŒo˜±Éo¿æ¼‰0Û€íŸÅ¥|Ÿ Îe‘ãsàRƒhŠv=õ‡y€iÃmØ©Ñ+âØb.&+ðN|Óm œ¨èTQÊ©B¦–a¢ä¨‚G¼ RDŽ¿·*`ùŠ&%1+•Ì…jM<2óHµäGÕJ¥ fÖ MÀóT®â0§àÁ—<¿¬>i“Uš·õFg3–¤Ƀ쫸 ˆ_%'”9=.%v+™J`Zá©èùèßÀ'¢ÿŠsqÎ»Ñ ü~=Ú@r‰.Ú¿4÷ǹïº?‰Ÿ1ªÑi1wHΖM”“Ê}Jz >ŒI#îÄØ6²õ3¥wQIíIgY ô° ´\ƒ²ÿè„ú´ú¼šÆô i¼èÜíž°tO°KwÑ 5„%E:PÏ#.îèUTÄt ×ë©ÁrpK%eÈloO|­èFxoôÞ}/¾ˆô½h#þþÃÚè(ÿÞ•~¢úæ”ôÎziA¤BZÔ.– ËvÊÉè¦åxT+;FNøè5£Ìq€CãÓŒj8«AmÚØ9ð|HÄü&KK›ž=±C` “·(±‹>óâÜ8¹å__‹jðq úu¸‹îºrçZ?×$éeûÑsÊEGÄ5ÊŠC :,ß)?$§K¬]V4µ›HšpJKC#OºË1êtªD F– –-ÔbÉW\VáëÌ;τә41š…³²„ô —L˜àç席,É×YwÇ19ÊXý£iKÀÍÔX¹ñ kn»}î’wÉÐü|†ùÀ¸xð”tõò z´T` [o@͇0Vª:CƒsºM}8¤ËÈ¡Ôb ï15dÄFcJBÌH<ÉÍr'^GžHM8‘ði—€,½ &cÜ>/º¶_ç½æ"e‘d9ÂR½ÈëÂîøB%£Óâì˜H߈Þû»óøç;^Ø^•Ù¶·ûsôÃèel[±5è ¹¯óAÿ̪Ú[Ö7ë瞣ïÍɪï’ðT ë> ë¶#ºü â®^B•¥$¤d¤PNÀ˜õ:5§2)R’-œYÉa”ÈÙøG*hM«é”™?%³ž²%ùh€ij+‰²ˆŒ 6§\´]¶³Ìf“™©Êe0h4ÊSL'(8Íim Ö&#á´!Ñbh1àC¯áS5ˆŽ´ðíQí -mÑöj‰$ o5Q|~ƹì¤o«·g+@íEñ[,&&s}¬ÆV)´Còw„K¬ôú/3ý˜26f€¯»Ä_—ÉOÙ×å.}¢sÑ_uŒ¬Œ~¡m¤íÝŸÕÿ–wŽtàM#ß›ƒxc=­‹¾µ9ºÅEâ‡6ãšÍ±TtÃæè[¸F‚ñº†K’âÎähÕK2>'< P11Ìr“?Â=È?ì“¶¹@dôô ~±5ÂËñqŠ@Aú¥µÎ]bÛºs—˜0õöÀR@X¹0Y÷Lô¿q)’nü{s÷’öegM¢KÉ¥y$‹Zú‹‘!/ÆÜâÑ7ØMýäÔÝÙ¡ú&ß&@¾uIíbÊa„w!\†¡ÀÞOp)"ÛÀlÀRà §DÀö±À9ÿBà1ý Ñ®|p––̇Î]wî­F«Äju—ÂØ9;`áÙå(:Z1¯k ho§HoDŽOÊgÁû’+¯ó¾'ÅŽ¶cÞ€Pä’tŒ¸iîOàf©Î“ѹ{ÀÃú)•¯ : x²Çñ´Alâl€%—È¥,p!0Þ—Ê`q`/$NXÿ°ìAù#l^Ç8Êá‡Éƒôßüî­œ§ÇñÒbX‹#­Ç+…p˜qð%ÃÏ`eôݹïH7º&†¶¹{¡£o|Øþ¥-ó‘)jÌwÅ„ë à=ø(¦<ŠO`ŠEKvcõÊ)¿ 8{®YS±ÓDɈYbÁ·“§æVŸ§·pÏDÍýl©X*à|À‰ŠQ¿¸h™!¤ÁßæðÓ&w·{“›Vò¸$ó‹cʱßÁ¡Å}°W©Wf!Ó´‰˜2"I©‚ i- þy*‹aq3±æ®¥’*“³h`ü÷Χ}ûÉg ¡•Ù¬/²@T®à™©·Þ~55лhÑÆÆ¬¬Æáº@Ÿè"iÑ_F?^¹6©,ßÅÛÎä.E;S*’¬Ã½ÑßF6öøú¼õÏܺý±ÞLvrƒÙ;fÜ9°!sp«(L¦îK%¡Ô•©$=µ8•¤0°Äd KÁƒ’gKÓSŠS˜$Ù N$ãMÉ·$N¦)ÉyÉ5ÉTŒo±¶»S­ ëX$Q’.GW©£jÖ²î¬;-öhK´SÚýZKÝ`œƒ+ñ.ÌÂQ/ŠcÐÌA ¢T†°· B“^gÖëuZÜšœÜ,ךåZŒ[SÜ)Írl–ã9دÙîì¦dÎAnyÕ›s&söåМœ\}ÎÉ1‘'''dçT¯w'L%ìO ZŒtÒ±‰ßÞZÀÊŒ%oOKf-HÏØ©ú‘úAÛM‡)½,Ä4þ/›ÆBN½Ò -#S&×a9QcJ¥–Ò²Z\f‚$¶&X™÷"ø¯ïU˜•`m«•fÕýß~ùlÜ 5ä俾WfRªU †Îâÿa:=à…:;¢yà°>6,Þv|evks-¡:Ü’UÞÎŽ“¦wÞIÞò`oŽ\£WÞÅkTòäšÞzú/RèF÷ýåý)Q‡X&“'È3ä+圷‚Àn’É3ˆ¬O†)¥jvÌÈx@F#œË#(„$Éœ¸>\ðC‚ü%ØÅ" \–ûÈ3s{hóÜJòÁ!šqøÐ•ÿ<Ì`ô ð8¾7üœxÛ.:C‰$6ÐôNJ×»·»ºéú´íiÓb[Äõ…+®ß"N¶çÚ«íÔ2b6£‘Ó,z0ò°MbêñT¦øFŽ©NÆŒ]¶³É©r&FXp:Äé,¶Mè2 èåÅñ€Ÿx¼+¡×Éö­ÿ0æõú–X@X,û7[Ä᪉gGo9·«&¸÷µmáÝë—YO%ß²|ÉŽ¶¼Â³}_­~9=¼1T8°ÜŸÕ´qQÝúp~sà¹ÛB=§>{è Îõ¦ÖDÝ˃þåöîÞÚñ“›êÇ"y®ºµuáÛ×VäµNÆt\:àôiá ô€¸¡XÖ k“ÑÕr\%o’ƒ7š(Ï–Ó<.æxB/ðNžjx¹B‡9¢ã}àÊÈp—žÈQr‚œ'Y é•â]Á´¨Rʨˆ"¨ÑS=à©RlœwtÀ»YØï«øfO‘Û„¥ô®Ví‰íF‚:|NòöëÑä÷ñ6<ù> Ï#a27÷E²È‹F¿@^’bw+ÄLI "¦ÿ®iÂyÝ‹@Çñ£þt û®³S@Õa*é8èí¹0ÛæøyŒ- åÒ’¹°ÚÈG ˆÙŠJæ`ÄyÝvæ7ckc*NŠåµy3䊹g>_Å=sü8н_-ÅáfÑàRhÐRbØE­AÍ`òÿúE–HbF™ €í_h3 ¥…ÒS3JOÝL('«õ¨9Í&]ZÊva5NÖˆIíµºxB©BÍFÖ¡=3f±Æ,Vj`™X»4e‘ 2%ðq«Ûë>‡å¢F‰ÍJ°úqkZR++ f¥Òr½Ð[¸¦™‹ŠÀÛh5'™×˜ŒföïU&Q“P„‹ŠŠMJ_ZKZoMKK*4QoÂéI8É=@Íê—v©ã®ð‚h¿ùl<~[õ({oüjáÃ$;Iv—ìLœƒl§’l§)ŠËö7ð:½^n0 rÐ`üÆ¿÷Æ…šç9Aëô:Ù–Ó[dp— –©4² oà;LÅUÔPóÒPj ÊoŠÞƯ¼Qwka…?XŸRS]fÅG£[Ê«jRêC C»Jiý¼_Çö 4È vLpŠì'„…ë’1ë´•˜­éÖ+•œQ»Þ«ß¤§Åj\¬ÂU£.¤= Þ‡6Ñ·µL`S™çÏ÷æ7.ýíù”+îŒJgx`¿pƒ‘‡~rWô.{ì_n¿P>~jjçßÿ™}:zõ«|pé=uðÂΊÏÿ€Uì|Ò ²÷q~)ªA-¨ýQ´M,»cÙ¹üÐr2Ø1Õ±¿ƒ¯ÀìR}A© 'KwM8ŸX $›LrÚü¾¢ùèÂ¸ãÆ¾ô®#Y£–¸7w;óâb±o/r«¸ÇÀÏj=ꘜUâgEŒ§¢„h´P çur,GÜóJþ •ßìñ"&S% ße7‰Y)°‘œ¾/ÚŸ¾?Mú¢møÔ½øT´íÞk1±-Òéâ¬/Õ“:•º?•k7âÌL•ç4S÷`)tIÇÈ{÷žû5UNecö†áè»ø3üÔÀ“µg/8Ğꔣ3TyüÚ>sªB‹ë¦*öWuX¬ˆTÅw“ÍŸ©¸»˜Lúöùˆ,[þ|º=û`6ÙìÁ]¼Îˆ´¸]‹Ùþ4a»Ó±£B)æ¥4©p$àìeÆ71‰&ÌB…ùT[lá$S’IU“1’™©a[ÔŸÎó`iâDR’›‘ážÈ• ¼¨>¦&ìr™ŽÄC;¶Æ^Þ0ÌÄÌw€:ð²‡~ßV ö›±{ƒ1?/I£–Äv²3Üi²ëBÛ¤®)°óìäÞ'+•¯*¼K¶4ÞùhpýNÿÐZÿHwÕþ;¶ß§yI¹å±ÎíÏlö{G—´ÞÖæÅãÝ÷ ”Öm:Ôh(_½(}÷Ά®’„ã‰eÛwêzfºóÊûno,[¿RÔsÊêUcòìvé4¶çÿð+(Ä‘‘ZšJrlÊΩÈaüwYLTÂZ]4ééɹ«sDô(?•=ÕªÀðKµ¯FÉB2IfÇ*YyLŸ_•¶Ôp²ÌbIIg9 X×éZmN M^Øæò{çOXzboqxýHƒßÏ 20µÙkV¥e¥eóž¶dœ-¼Þ±`œ1ÇÛ@¥7« K÷Ô¡/ƒå%(Œ&¶«ròÒ+J+ûé!Ú¦|ågtÀ¿1×_XV’7]‚¿¦ÏöÚʪ Šó†ýWŽóÁ¨Õº4#·Ðçõ,KÄ¿‰ï«ÍDWqIÜÉ—7åuçmÊ£ …m……´2—P̧[Ò§Ò÷§s*g’s—sÆÉC>bÂÇL'MÄdªô-faWÅ‘DG‚Ñžá‘P¸4¿Ÿô7Çþ˜‰ók§ûî$¤3O& ðÍgý†EC-56ÂŽôO3H¼$½žX>X÷­7ß"Ƭ%Ãu ý5)ÉÕ}Áª Ëò¸% ùA_bE¡›*³ÖÖ^Š_NªLJMö/+I‰Øß”¹‹Û[“å~|d㉥™ëžCøêçWÓ¹»ºä¿îEЯaÄ”H9ø*<÷Ã÷õ1úÂ+£«è- ÿ-(KLd— zÞÁž·¢ËHAÀËìèZtLIÌíÆ—M Ù‡úÞ\}°Óëí<¸ú;CÙÄ8óǶmë>þüر¿üê?¶nûÙÇdãE`¼)i¼tÑ„.«ÕVYˆÙ½âãƒùç#7ñüN]\ÔÌà†åxÞŸØ"¼P?uÆgzÏÓâõpG=§Y”'¶}–ˆð߀QŠæÇ®"¾zS‰dê̇bJ\:Å”‚Q,Rø(ú¯ü {yV]«7»uQ¶9§.ïXy38¢«wnÄÝ•= y°ÆÜàê ÜUº$ßr8§e,=Y»²L‚Iéª@ôñ†ÑH®¤«ñ½ÜZÉ¿ˆx”$ê&é>J¦Ù;<ô.tbfÚûÒ±¿§Äoµ7£ßÿ—_pg>NùÔ,µ}`÷ÀNŽ|b²tÐô{ÂΧ÷È< Žãýóg,@”wô<]%Ÿ:ü—ÇÇæ¤ƒ~ ¥~³E«ü÷}lK X@¯Ügü5Ø2ï3àØë£0VG£÷@¯«ËzÿùplO ~ûÞ·Þ«¯þ 9b¿W÷ÁÝiGæSíêçÀÿ#²³#ñBÌ~kmîatíƒÑ̽Ð+èMô¾ŒÆÑ4ú=ú ¤fëÐ"´—½‹ž@·¢­p¿„—¡ûÁÏœ„ò´Ñ1ô:‚Z ÆÝ} Ú-‚þž@kÐ'h=ô÷ü•¢3øOhRgÑ7 …MnDé ²š¥þ½Ø½nçè14„f¡Ýíhæêçx%Ž ?ƒtD¿€yÝ‹Á:iÞ¹0£ïãÕx/ž%kÈYÚ@×Ð7é_¹c|2ÿÿ]þ»²bÙ×äaù³ò÷ä¿V+ö)¾¯,W¾ªjP}U¥Þ­þ¡æ€V¥ýªn—îçú,ý… “†ËÆãWMå¦cfùM ±¤Z–Yîµü4Á–ð€õ€õ‡6›íBbZâ²ÄI·&ýÐþï`Ò‰Éo'’’‘òPÊÏSŸvÔ:Þvü;û-#çWƒk·+š¶;íxÚ;i—ãï`¸(a) êBˆæQ+”1Œ%ã• øé[ÀFzÈáx+9Ðe,MQÚOsPçX<̓Þ=OË ý|<-G»Ðkñ´™qI<­D:ÜO«a«~¡2OÄÓZ4Чu¨–0:æ”»@–ÅÓ¥R]Ž6AÙ(ÈÎ6~3´_+Þ°ßû§K¥û¨Ôn=HæÍRu0Ò:(‘ƇzyÒ¬þYÿüéJéÉÄBy!̈A,ÿÝ–ÿ¼×ÿ3HÄ`¾^êeRê;VsXê»j¬jE¤– “Òh#R­¶¿3b Œ8íÌ®Õ\'õ= ùXÏ£Þ‡çF€õ¸4ƒ©ÝüÚ&`ä¿…>£½q ¾Ñà°BšÝ6iÌ¥Rù¤DKìÙ)7†*AÓøÐvé/êÜØóºx¿ùRj ÔüÚn8cL‚ã „åõP7†ñ|©Ï-@YÍqHôÎ 4uÝc°ùGT’î1ŽÙ|C? ³ìÎÚÎÏ~">ÿ!iœÔÆà: p” /•®—Ö8 8†Ôõóc[/»y6ós¹q=ÿ_޳+PÔ Ôùw>‒rsø³H–ã÷¡,Ç…r—C%ŽÃ¿{ôwÏýŽnúôð§äµOñSŸbû§ÝŸnú”rŸ4|BT¿ ]uüÏ_f8>þeãW¿Luüâç!‡úçXüy(Áñ³‹!Çk¿}ñG©xÑ_º²9^ÇfT‹¨›DM mÿ¨æ'í?­ùqûkuJœ&B\àK®^À /hBÎs8á,&èu(Øl9ûãÇ9l×Ñ«á'Οˆ?‰üdú'³?‘9ùñôgÌéŒ?´ø½ïŒ¾³çÚûÖè[{ޢ翿ÉpŒ½‰o¼yáM:öæô›Dÿºãuâ{=ðúèë§_ÿèuþ•ç3Îsç"çÆÎMŸã¥ß§9gÊ /cçË‘—§_ž}™›~iö%¢!ð§/H?à}6옞=6Kfg/Ì~8K}§§ÉÉçgŸ'žÿðyâ;8EN<‡/<û᳤Nõ¨ŒÔv°Üt°$rÂw ¾`¤aA´àÈñ¾ãcÇéÃd8 e8 $lgð„ä›OÎ:Cè ö«ýý§ï??ïO) ‰÷'Øá¢Ñ‡ô÷ùî Ü·ç¾Oïãõ¯b XfÑIî½;ÃqÏŠ«ŽŽá‚cØqÌwŒŒÛsŒ £ÂQçQÊúuµ%‡œG Ž–»{{܅õw9îòÝEÅ»SH8Õ0Y5*€/©ÏZ¡WXBŒæÐ὎CKªw¬qÜWí8°äªãÄ~,ìsî+ØG îÀ{öbq¯Rš4ŒmÀ7 ÛÚý¶v¹Ÿ¶Ë¡}𬾯\½ˆåg!)!:LÉ¡5]aÇêP¡£î]p7ÛyLÛ¹"Ú~+^²W;ô¿‚±íl‰C<7kVèV‰è°5bw|ºüêr"./)‰Ë=Y¡"ø£fÜJq4…ÂŽÈ9l»ðy#L, ßÅð=Â…> ‘éN(²´°¾](Ò· 4Œ°Ã¡è{õ{ôœ^ïÓ·èGõGõé¯êå(ûTOÁoAødæñ9|ìLÛ ¯·éœüjkÓ¬2Ò=‹ïœõ¬`Wqy׬ìÎYÔÞÕÝqã#ûï¾-Jiš-ZÑ1Û—ÒÙ4; ‘%¦!!¤œI@‹:'&'&§¤xOL€Ç=9 w)#=/Z8¨Ç,ƒ½““ñh¹Iï”tõNLH ±ÔÁÐõHTh0é{ŸÝ ZbgÐêNôNH#KcÀ}Í„4,†‚ “±‰LØz× ô¿måFÐ endstream endobj 388 0 obj 17325 endobj 389 0 obj <> endobj 390 0 obj <> stream xœ]”ÍŽÚ@„ï~ 7‡ž™{WBH,,‡ü(lÀرŒeÌ·««“H9€Êíîšoš¦›ývßwÓâÛxmiÊO]ߎév½MÊéÜõ™óyÛ5“=éws©‡l1×·)]öýéº\f‹ïó»Û4>ò§u{=¦OÙâëØ¦±ëÏùÓÍa~>܇áWº¤~Ê‹lµÊÛtš}>××ú’Zõ¼oç×ÝôxžKþ%|<†”{}vDi®mº u“ƺ?§lY«|¹Û­²Ô·ÿ½{©Xr<5?ëqNusjQ”/«Y{Õ•@êZT‡5tTíwÐ%ktÅ|ýB _™ÿ½f~ ýFý ½¡ÞBoY«ñwÆÕgG½™µ+è 6G~¿#Ð8ùµŽüNG~Qò{œëÈ4‡üAsÈÔßøqwgüè•3þmü¸£#@OœñÃÇ“?"ß“?‚Ó“_ïÉÐoýÇoäÿ šü¢9ä/+hò{°yòWzùE5ù+õ4~õ$ÐZã×|òGô6?8ù=øø}áз@~ž@þ¨qãǹ¡d>úÈ/è[ ©þƯ>ÖÌa0~ÕäZKþˆžò{=×øq/1~xŠÍÆÙ1~0ù=ú#Ưµ6?˜±ùÑ8ùs"äp ùz%äÜ]È_©ñk­ñ£WB~{E›xF›äD›xFûÿ‚9’¿Ò8ùKüŽ‘üQsÈ·º4l;`}`¿ýYKysÇy%éÔ]„-Ôõéïž®ªôó~D7} endstream endobj 391 0 obj <> endobj 392 0 obj <> stream xœÕ¼ xS×µ0º×>çH:’­Á–ŽÙ–dy–mÉGž,À– lcŒÁÈlË$„$@BJ€ÈD’f€ö¦¹mÒAH0MnCš¡½Íi’æö¦-4¡IzS íK:,ÿkÉÒáßûß÷½ïI:çìaíµ×^{ïµ×Z{nê'1d;áˆoõÆÞá½G»“ò!·zó¸}×ʳå>G¿fxíÆï „Ï'D-¬Ý°eÍcô·ï¢+&¤öÎþÞ¾{nnÀðüGé&<¾MñÏ1ž1°qüÆW²JÓ iJDœ‚«{W®]DÈ‚jÌ¿cïÃYêbãg0nêÝØ¿gý­ocü!š¾áàØøû$oŠŽv–?<Ú?|Ìø— '„û¦~Ù'ƒ*§/¨ÔQ«‹‰ÕŒ¦¸x³EJHLJ¶¦¤¦ÙìŽtgFfVvNnž+¿ Ðí)’½Å%¥eå•UÕ5³j}³çÌ­«÷74’ÿ¿~„7„7È-Âb![”ûu¾’˜É „LýžÅ®ÞÃKÿߥB£Ü! 2Éä³k2^"ï9}-4dC.ë=ˆ#çÉç䵆ñÙ`ýát¦º‘[GŸ£tò>ŒÜCÖâÕ ¿@è}Üì¯4ç©p0<¹)øZÉ~ÄòýðÉðd%9Bß#äOHw`‚ïâ«_ÖÙÑÞ¶¸µ¥yÑÂMóç56øëëæÎ™í«US]UYQ^VZRäqäçdgef8Ó¶D³ÉhÐÇê´¢F­xŽɯwú{졬žŸåll,`qg/&ô^“вc’ÿz˜½G³_éCÈ5_ôE }3`´W“ê‚|{½Óz³ÎiŸ€®ÖN ï«s.³‡.(á…J˜ÏR"±q8°„½>q Î‚{}È¿y`O}Oâ;ªÓÎuÎí×ä“£Zu å8‡BÎ,P4§¾ò(%šXVmˆË¬ïí µ´vÖ×YŽeùóBzg’Eæ*(Cª¹!µ‚Ò>ÈH'{íGóOí¹kÂHVõ¸búœ}½+:C\/–ÝÃÕïÙ³+dr…ru¡Ü›Î'bËûCùκú‹amZÆQ ’£KXò1µÊy¥ú°t¯ÉaÊt˜uÔ΀‡ÂBÇ—O×ño2å‚$ Nö&êijêñmSëòzÁõ<èx¿•ßË? U:ÞÊ/ç×óOóÏóª*%ùuþ^°"L•’³ó>ã/ó"]¯Óèg”;NAG›èrúå÷Òçé딣¾¼âFžš)ÕÑ"ð⸸Säž‹Ÿ‹œ81uÊ7õëß4®·Š´]„*‘!Ò7.‰ð®x^¤Ï‹°S¼_|BäÖ‹0 `éâg" ‰§Dš!¶‹}ˆõ Q¸,Â9Vžá~–‹P'‚Ut‰”áë—ªãâ»"‡Å"èD@ì>±…egˆÅ"wi¢§D`Ôѽ" ³*ûD:MÕ¢8/Âë"³RÅbÖ¾S>g©ˆô¸XnœÑ¹œ‘Æ*ùL¼,Ò3"¼"Â# E:Ñ*Ò2,²UÜ+>"úªž_… .±Jl9ž4!‚½âÓˆT5%Ý/žÏŠí¢Gy5á‡ÚkmíVvwºGFÙƒì3ý\›¦¤^Ÿ0“2èÂ÷Jö½ðÞWvãωƅyÇ•£Äaá„ð/Âüsüc—Wó?¯Œ×ê©ßóÛùE¤GîîçŠÅ²À61uÉ—)’…j#Þ¸DQG”Ê:ú©Ü3¹477Ýÿ¢šý 5$°¡kIlLH¨n|±ÆF¡l±V›Rk“ÜÒ6i¿ÄK’©5Ř]Û,»‰Djeù‚\{Áëî6ÅU¸/€Û…a×…îã²»ÛxA–‹<.üé…´¤x­…’âBêL×Suæ,Î+§Q‹ÉœF½r™EÏ9Ó³²zˆWë9‹Yòʳh ì^´uIáÜñG;gÉ©Êr–å$ áb|#ß ö?>T©Žw¦ØÓ’rr ÒÖõkUåG~z  µ&£¡ª´³&Ýìj»iQÏí­™À—U5˽³ª@ß°i‰[^} ÞœUkQ=¤Òªøþþa*âÔpΩXØTØ´Ê‹|Ü…|ÜU®œ }æÌ†ÓhzPR:\ ’¶ÀÆ fäÕ39ìé‹cÍ9Í)v£…˜,r³V@æx/ÔÖâ ¹âêFVŒ=r»Ï¬GÒl'ÔŽYP‚ýiV©Ujï,`,г‡, cJùýEk[ïéYÒ˜ÌL\¾È h³à‡÷Û4p°·0üÁ†Wûœœ_»ký8ul=ý`»¹p~©¥Ô›£qîhãß ¯²×$§Y‡{ÚxcËıôŽý×ÝÕž~åÐ~F߯vr¤Þçÿ‹†)œE)/ø„BÝ&@6. °N gÍo Ž{ˆŒòQã¯ñ‰­cBo?$ o|Y¬ŒÇäcŽÇ4’MšŸKò''gúŒcÙÙ®Fc®;·97Ì=”+d˜Ó⌠ɶXk”Z‰1 ’’”1ÆFRí…È» wÍFÖ5=ªÓRÁáW™ ç86À…@çoz~§¿mßÄšíÏŽ—NÎO,]R3¥ĸÙ¾1æj*K§ð„fÈ\¿ï½ý¼{{å²Ãgwiê6uÕÎI(XZÁM­íóß~{´÷a;≓døÌæ’Ù“9œI“´ Í£­™u8R‰b?_ÓÍÓ*½ªŠtê,ÊßW¿ç­Ý;ºÛ?÷ηöÜûÖí5áÿ¾õÆ›w:}]¥³zç¤Ó´›ßz mñý§oÙòæÁööÞ¼é¥ï‡^콫Ëå꺋­Ndî÷±ß¬déI¢:çKµdÁ‹©°=¬Ö€ †$ðSåyö&ã¸ÑßHã[cpåiN ÀºÏ˦/ЯÛäeóÕÝ“y¤ÈC\LÌ8K¼ú¥K!°Q™ ^ ü"üéã§5Þ´ÜÓWŸíMy»ùÊNîæŽÌ\”¯U=Ë F{‘½ã‡ŒÖö©ß û…ƒ$—¬>Ir¦þzœ‘š>1õW_ YW$' +T. 2—{Œ€Ü4R£=`±Z-¼]ðÔ.ô‡…sÂ%?$ ‹'ŠÌ©õºH}w÷‘1áre"{Ù p¦gd!÷ãJ3û„BnzVqÖ¶-˪âl}Oßu"üù‘ŽŽï‚úØžÓ®N _ÑW.»qÁú¯¯v»û{×½ §¨wÁ½Ãõ_†˜Cßíóý•ƒû—4´ù²ë·?:±s>kã.äjߌýÒ{’ذ?²4d!ñŸs^rRgæÌÙtXy„2/e 3!)Æ&b£B„=}zMLcl’ª%Õoˆe³KÆuÅÝÊ»ÀzÆaŠ Q‹I f;Ò8KTxXLÜœü%Þ¶jGøà(…_ñÝVíêÈ¢ÚÁ¦¼‚¶±úɸFçü¹%±1%>Ÿtó°oø¡ÎÉVÖ–¤©?Ð{„rÔQÚ}^šÃú(&&€ϬÕû95'Í\€ rçËÊo<Ì+4£$ÕhTS3Q&Btô‚æ¾Í½ôί~{¹åm¬Ÿ¢Þ‹õ{è“'‰ûÏĺΞÈînå71õ©"% ¬?•l£2Aée21õ_>»'¹»ÚhHLTçr&·Ç¨òHªóxä8+:µÅtÒD6ýÂD÷š@4Í3Ñ Óz*äe2uÉ$ÃïdxM†yò ¼[þŽÌWÉ Ê¹2=-ʰt¯ [dXò3²X¼vY†ÿ”'Óçe`EèV†‡a”ù_È“éë2<,Ÿ”)¿EX.C­Ü,Ó t2¬—÷ÊO˯˟ÉB@«ì’›dÎ ÃA+<.Ã#2ì—a\fÅš@•L1ûù25]œÃ¢Å,>gY€Xëãå ¹Nî“ùuH廲ï @*Ȱ“•„êdp10øL†WX‘§ej–‹åvy\æ•2¬Äî—¼¾PÅqù]ùs™{D¡°I^.S ‘†]’žSH9Ì(ÊûeΨ$Ÿ•!$Ã!†e0 '2§ÉMT'ªÝvg$qLÒy½lyáZÕ90r­V|UYžÑ–¿¢i_M\9¸&cK4[Éw³àH¹×äÅP¹7.¡ÂäõF~Õ•}r+„ì¬lª¦jÎŽø4HJËfqeñá"ÀˆÊþæ‹¢EÔ‰(3´:Qøaø›áÀ2$ëb´½J+|æSÅÄÄxÅêRôO‹sg®ñ”UU•'z‹ò㮼-ì¸rÉwsQEñ|šoVEýÃd\bUmmš¿¡¼Ú{Sq_3ýïC=ÀÆÖ!ºîhýçÄK"‡tXy„—ÂE$Kþ3 ]w¦×„D’ ZlÆDŒ‹N­·öïט^b®[€PyEm žˆ.0áO¯Y~’ÐônUtqYLWÎ,>ÿ!¼^oŸ]Q±³¯ê¡jÒì+ÁO_TÁ° Ϊ@%*öáa1$Òm"ôˆ`á¢ÛEf{žyÁÀ[Hj¤¸ð\¯‘¢yRä‰Gc "z)£‰Ÿ<}ú2ÇW^~ ëõ"ÜÃìpb¦úšã)j׋¹Xn%/˜yãÍ@T°˜Ä’•j•Y­ŠåÕ¾x©Q­NPSZú±ô¾D’àk¨¥)[Z*Ý Jÿ.>AcI±¬úf£F‚Ÿ0ØO$.}ƒ9‘2ô/˜'Á ž”àA n” E?‘èÒC]‹i¹„ã T<ôg Þ•ÎKôU ž“à>éß$ºS‚~i“DÛ%˜+A†T,Q‹ü¹¿eàð¬ôªDŸà¥î>i\¢s¥6‰K)$•àÿú‡ˆ7I°FÄ\3/ÁÀo¥/$Š˜ú Èa î•`\Ú)ÑU´H Ks$š¡àö½Ø/Ið¡¯HïJô˜HÊ nc%`±´J¢u”² À¨Ðr^ú\¢?gððMé˜Dï—`³ô5‰ö1p(–ê$š%YidùŸ< ô$8®pq'G¢û˜_¢qaØëa)ÄðŒK÷K\ ÃÁ°q;1z\zÛ/ KPÇJ2J°&ÄŸâÏ þ¤0'¡Æ&ÄÇ«p`D¥V…;®¢µh7j:+ÑþŸ–E£Ñ¿R×;®Yøë»ÿ1àß¹¦Ó\J‚ñç2Uìrír½bÖß&û&­ØG+q Ûˆö¡“d“9>›˜}P›‘‘lBƒ1é =Ù“L“M6­Ö–ùX†%)É<–£6^±k/˜ØücÜDZƒa/÷8~TjÇ,¡$âG™ö4±€ß謜¿¨©:‹†¿j»Ö,­[ç]2;Oþ(¦é¶ÿ¸åÆn¯ŸœžÎék®-/­™çéØÒÕ0iuç[y‹'fÙ£ãuåƒ/ôá?±õ·iw íé¤Ì—ª &%92ôCƒ}8€™bÖëucfµ}LÑ™ͦ½h¬ß’™Åê-‰’ªšñ‰™õ¼Úaiðìyðæ¯\ÞЇ«5ö½GC7ÎZtÓw¥Ð»_üξ-#£¾•]½½Æ¶{‡jKÖÜ·rõá]›‡Gg¢Œýöð"¾ í$/©g–\†¾Øå”×}wÃp¨ü‚0«áTÊ™êI”Á"¶•ŠX™ó…™<ÊÉatã2^ÉýzÍ‹Óó:ï\y䘣mvË6´Wð•8ÞVø mŠEaÖùÏêAÏX£ÿGÖ:ø/¦O¥ÓtE]cÓ™™.™-1ÄpÕLï¾ (KŒ9JÔÙ£8øpJ;Мf 2ÎSô$HŽƒðç€3N(ÿÞ ½wvdñ•“ߘ֕hÝ•‰ô¦iC}ë°/øP'=ñ9Ð0öo*Yy’¢“…‘˜‚$Z,¶m¶C6zÆn[ÀvįŤúÏ`±¨êÇž¾X$I-1qFµAñç]õWâS‰Oýûä6g˜LV)òk±¯ÄÀ"QkõÄúb9Aì²_M …ýÂYaJ. "N 0±q‌ˆ^ã[&E")H‹#zíæÛ¯¼C/M¹%ÂŽóáÇχ÷ÇúõН¦ëÿÁsÅÞTMÛ›hï~êó*6¦’¡æ4ZJ"E‰ZÔ©Õࢲ–ÓˆDÔè@ǘ©C;Y§‹Eé‘§©ÍÜ!”§—bá\,4ÇŠ¥ Ör<¯ \ĽãEÉšàe+“­Ìê`,†â˜\5îÂ5/ª9¥a .âÀl‡N´Vvç¼WÂá÷à®ð.pò1ás?ܾ‘º©.ü8¬šüëä[‘ñ¢zÇKù6óÃ]RZl›@£¡C1À+ü„ÄøÏçžOó«Ú«vV½[u¾Š¯ª‚Gªž¯ú Šk¯Œ¸«€Úª€TA¨êLÕ¹*îPôTm¯¢˜‘ã'JGž‰åŸVIÒ‘‰)hyqv¼Mo”—CAŠÉ&⢓.NÙ,@{+NÙ, &ë¿Ü, ׸’œØtÖÖ¬ký}×m ^Ù-,™—¬l~ø8Êv Öìu‡?`"tvnÎìÅy¥íi4}뙃æ‚y¥BNIUR¸—ÿŸ¶Û2Ô9Åå–õ+Úïó¦“Ï8Ù~Á¾v§kù݊͹oß…"´ÕR|zî`d¶‡Gq_P|BÝÑ­€½àÀáx:b«â¼W9¿Ïòç ÷ >âèѰ»ž9…§”¸>++­PEVxä×eø˜scóÂ4Éëeέø>.ËpQæL¡‡˜¿d«¼WæšW[qIüø3Åùðˆü<Âpû™Çb«LkYžK¦‘âÏ˰âGdñ‘TÔ¹bPü+HÀ‹2<Áü!{e”¡}º ^†#U¼®8`"¾âÓÙ*óÌwÃÈÝ+³J.ËšH¯0š™;dï5~žb…àµS2øŽœgTa£®õÂD\06jÆçsmª*9ÂÆË²:B^s4ÑiŠÇ&ꬹÖÓ3Ónêc5ÔÊôœ|Iq6Žx®¶É‘í2UÛRW0™¦©²² m\šAQ™(SÜ7LËÓî•Àõ¶ËÊ¿óÞ\ïØùû´¿·V^ŸP¬YŽ«˜qØà )-+-‹øjœ:YÙRB(¾Šë7&ÁŠâ™Zâ5q&£*ü³°Ê`ŠÍ‡³%ü%ì½¢MÐÅèõ±Š«æ¯°›[âÝPP"77¤ùª‹ã¯ü‹‹/®ö¥54W–{Öe_yJØqå÷¶®¼¢’b%?/ËÀ%}¹ûx˜vÒ}8_ ÏâDù¼@ئ‹;â™h¡xøóÏ£û$?@]²€ Ÿ$ùSŸ>£% óqF<ƒ†UÖD$ž5µ´l+ÒÔøÍU­Ýv·ÇMs—{Ì`0ÛÌÔ¬h4$#d³%ñ$`ˆ8äÑ-´èv‰â±Žº«#›&%އé_nœdù6÷·&‡¿M×xî|ê?GžÿéûmÏ€áħ´…/ÅU/ÛÔ4tx@ö~Çìp%¼üß“_-››su÷¤¸gWûâüæ*§²{2ÁvOª°í*l{ Ùx#ŸúæD|úda^W®ÜÅü÷6m|©Õu´6m³6  jm¼,2òò2xc@ˆZ3OñØÇ+ûãtÛ§í„hÃ#MŸ‘®™ÌQ_ñÓ 3~z!²ëqÔ ‚Êßo¿ëç,SغeÉÁC¾u{šªoܸ²>»ý·nÚóê ãÂJ»n]´¶&YiÎm›×4¹à`ÏcÃ5òª{VºÝ‹*lË{+ç{ì}Z^eÇèÂÁƒ|Wç˲—¯°Ö¤Ï-°õ¶¼ê¥7’våf ÚÚ'IâÔ9eåNdºJ®7; C93¿1‹6ø+x¬>+5w•GåSqU|@Í™ª¸è6åJ¦­F-n—²cAQ5eÖ)/Å ÈÔ_ÙŠ"Œ¬›¸|Ïäk~â^ ¿?÷ÆïûËekéë¡ðÇW;?þòøÖÐH镆Y[ŸSh~«åÿ@*éö¹p6ÆhHµ¥ÒÔƒ¼hôZjHÕ?nù¶EÅ‘ÚW&ñË”…‘ Ø…¯¡:2 ¡6Ä:«Ì«Ç%Ñä¸&LçRs“ŸKñ8ÍÛ&½†”œ¤J˜«}yîЊf§sÑâÅ9áË×E”±8õ%®S5¨Æ ä¨VS{T-z½Gu†Úc€Ë(¡XwHÿóPiòÉY±—kCP¨‘SG5ÍBâ©“/ýÏ¥ÍÚºð¨¨Ñ„4§ôG9–AOqäá4………ð;¯®Öˆ…‘OÈ—Lª¶¤q|ní­Ïß¼ç?¶Ôˆ¦r”·–õ—´®Ì[µ"o©?¿·{ézMø“˜Žß^yó±ÑÒŒy£‹–n_œ»zÞPá»·)© ©4µomí‚\ýGƼ¦Ê¥«{:Í«ïíqW¯¹sá¬õ5^[ÕœÖÿ„ìËx2ìË@ûÊÔHt¦§Q;¶ø,-– 7lÙn¡v‹ÇrØrÊÂk™€Ó#˜Ô+"nDSÍŠ/²ÿ‡¦—Iä4ÓÞX¶ ëŠ(!.Åa!Õ0£@Vv¡ræ†ûhòëÏ ¸Ô·Ò НÉÏÏê̹ò’°ãòò ³WÉœq…v!íô%öÀÎ%ø„aa»rFÍÎ&PA1‹Š @0)ñLsB#×Eˆ‘Ø WGÈ)r†œ#ü%Lo>‡Añ³)óÕ› ®•ʰш½²™Váßr ¿Œ“¨È€¯\‹Bˆ¨ÌDLù^ÌQ´;CÑ} ªÒðD%PÊx°ó`à‡ZöÒŒ»›ùðº½5nŧ÷Šñ-ÙøÒ.ÞeåþŠòT\ÆEž²JÀ´„ó]9Ås·|uP>¼%¬œëPÑ]œU‘ñM>—FÇpzU¬¨SS-¡FJ)¯áDªN+ª4B¬š0#>–SÆrd«-òŦ»£QÁe êu¶:»,»,óÂï?«ûò÷>ðƒ~Yw1î}>8ðjÍ{[®\ÙúNÍ«÷U¾X,ðBHEÌ*"  „|Á¦s!Š Z„Œ-@xž µ*Pq v  ”(LatM3Æküõ»ÿŒ/ñ&°ˆ`YÂsW^äfSæÀ®óáçÃ/|„ØÍSïÓLe/Ës’p̱Šë3(P£+ãÈÄÔ¥g”W˜ÜØñåŠ×˜©# à38ÿþ0WøâK]D7ê$„ORø\èKÖ&"2!¨RÅèˆÑã‹¡1$f,V%$FN!º»±?™è@¥¥Gq2-CÍŽO |çÖyášï<Þ7YǽÄó`øãðGáw¾ýïP¨ßó Ê[Ö5 œ H ›}•R­¨A° µB³â9$N+>]$i Ùí‹“A«¡Õv ¢'ŽÌZC#¥‰I„×’F• ™Ècdñ…èñî–™ãcdÔ;}¾&¯ØrŽz<8¸ï†?ŸÜFÛ ò…p9 †.HÖT]ø$<ŠÒù7`{‡Û%ø6}ÜTVYbÐåº MaCTæða{DRëËâ8A£èˆ„.;*FTÅܸVùôEAIøê¾„â[r+dYw¾BôíIwø¼,¼àüäeaÇyVW-®Åì\E¹k8÷,ö”Ýá`"Ë`LjLµ:¸[Š-Œ;¸¤6’<ÝÓd©6%%qlÆÙ z122ŒöñT.µºýº³:î¢|(é¦×ÈBñyݵÖÑk¼.6‰È?Rl™øwÄc+¸ˆï€¯œ»óåí›C[˜V“Z¼ tð[E[‰¿ËþC×<JÈÛÞ1ðÄh5¼·î™ÛçUôß¹(Á1Ë“úµ[Ë»|é%Y\ÒÛáG3KênzZY«›°ýlíKCÁ6x’XÐRÑ! LCF£Æ6¤´¹(+·‘È ¹Á³š‹š) §ÉO0&ÃÙä‹É´%¹íäBó˜®Å&“N]8Æ|!rð†5‡ v ÊôH{#ƒ\i(1ÉU]e™öŽL»œ#g)s«o8¶éoá/Àp¥}φ Ῐ»ªGvîï~p}eøãä’EÞÌù•ie‹ŠëàÍuG·5@7,…-p‹sÑÖÎÌù³?ü¸©¥fìÉáŠå>gbÉâÊê…®]‘yj /åP+cgO5dÔ†bÞ<g¨ ᬙÝ!ËÏÉѸS\ˆTxŠ2ã R«œéÙ%’Œk-€ƒ6~ YáöÖ¥¯÷/(éð%{sãÂíûGnÞå}¯.^ûMœ%o‡w+v%ò»Œ_„ K™/Íè7¬þæHI—„øf­Ñ¨5ú¬`µ&FŽd!£çå.0Ûß œæœ1zˆ’.ÞñÒvŸçK[ÿmó<}ø·1=#¿jÙ ÉÚ†-ß5·ÜûæÍ»Þ¹gAyïÎú¶Õ?8ÞÓßÛ´{°6¢— áXˆ'Ù䆓$kê'Qëõ³f™ß‡Åíì Ï,LHaRMb7óò™q@r=¹¾ÜžÜáÜí¹‡sUöÜK¹4mù)-x´À @ªM xg@ˆÚ3ÝÌ6¸ê5‹š4*þZk6jÙ\ë0>Z5þË¿ ÿ娲îgAüîwA|veø’‡û×>2P\2ðõþ ö{è¿þÓ©«vìšÂy"øÌöúéS€Mwœ@²_ÅŽù-¯eç`›oŠSDd䩎o{DjmìpûñœÈ5‹‘Ñ#ҷΊÅ)‘;¬hàjÅ H¢]¤çD8$)+»]ä”ÒE`h´¸pü ûE†‚Sª}›·4ΔÞÏŽ²cõGÄÅÓ"7Œu`µÔŠtJ9Å@DÛDŽw§/ЬN9toݬn(œ3ñ5*øm"0 z€½P+6ûJ°Ži¹C‘ZØYVoAM­…lƒCð"à“ÒAx”'î Šø½ê0rΜè‰:\QŸÐµéQÚ¶¨ï³EÚab‹É«`ŸÃuþ$‡?ž4²S 3úèqeâIŸS¨ÈJÖŒúJæh£Ãôšç_}V®ûÕ--Ûs5Š"³J˜ˆK@ÛU§SœàT=½LÕ ÚµˆÔ ¹æª=.SÄqÖͼÿå^¯»ÜkR6ñC\ÝÝ»£KƒˆÔÊeµ3¬ú~øM·Bçä“t/ÝuÇdXØ1¹ƒn›üî•w”íG¯Cy¤B‰|”G;VˆŠ"µ;¤AQ$ðÓ¢H±8´ (~F¡ð-û·ôòkX:²†>|Hº/žW·¨‹nÑàBÝaôãJQZT[éç¨C¯>3ñy–C.‡ôù$£3~y 6Kcc)]$ÏžçÉ£yÊ©ðgc¢3º6ÓÆD$÷'r!1Ñ™€+´sÚ‰¡,€£ÑÝwWħ…Á¸Š¨4½õ®R§ÁôÖ{©² =Q°nɯ'ké·¼üµú;î|ú™ð×¶ÜÁâ[Fç/\[Þ;*ûæåÁ½ëî-v¸:ïèºñ[©æ#ð^ %üoKÃbù‚BsxC¼»%²ßºQ‘y¤œl÷‰¥ìí¤RÙ¨™a‹ R>$å@b<Øô ,—ô’Þš‰H¥§ÒWÙS9\¹½R°W^ª¤îå+¬6+µæì¼6`2$A·–‘ÉïÚ¨3O‘zÊêAÙ†göƒ²,ª•¥¿L1ç•ó§ÿ\6ìúÑÍæÒº–ÂÔê4ZºÙ¸{pžõào6ýk±¸ï‰-I•ór ‚ðÓcÅÚ{:õ›xå¾ #'˜Œœ`ûá—!E¨Ï¦ûâTd$í1ÔdcQ};†¸?f ›Œ˜ç™×˜äbnœ“©ž ópÌ™;Ô½(â¹AdÈÿVv.8ºædù,æ¡ÓXYnÚO Ú¤1ƒÚU'.D4¦ÈËTa°%BÑàïXÃÛæßþ̺uǶ76ÜöìÐÚ£;æ…?–< ˪ZŠ,’gQEÙ"9¾ôÓðgO7Í,¯¿ OÎûdøwï=ðòX¡{üåûîùÑ&gÓØ+೑Æbå,| i%ý¾DƒeV-yA[À´Q‹ÍbÓ*Ú’#ËÝHÚƒ ч1m†aî¦ŠŠ…îMÉê…›¢ÍQ¼Ê^šñ-Wd#4â0^0U\ÿ*BYÉÕSÈÓ>øJƒã¿Ê€âê›xûm/ÞRíi(«Z9ÇY³ùÈØÖgÆËsÕ³Ö/Ê¿—×PZìÏ‹3ä4VTÏËŠqÄ-™SÝZd±xÛkk{âaßò‡ƒ³fêZxïÈÇV·¯-oß³ª¤lõž¶²µí•1¼¶¤ãZž×àMMõ6äe6VddT6NN¸Zj23gµ”tÖ¦;}Ë"~¡äcvt®­òÍÒk˜¢™$âFceö%dv¥;@ ȇJ§µxÜ”À Ù$*I1ycvuÌ®L Šœ¢T_U©•M8ÆÊfFÙN¤ ŒÄyÍa‡2æ%ŸQ .ó«ËÿáÊò{64I 1/¯¯èò9Á<§m¥gÅÁuso=1~Óó·Î¿o-]äuÏ/¶&Ë Š²›ª2èûáÝỲZn]šÙÔX:ô±ìêË웾·q8´¥¶í{Ὺæ;第* Ôg§”wDôN=Ê×F”¯FòoÏŒÈe÷Ùñ’0Ó3…bqj•ç§¾"L8‡â 'ÜqDDÝÄhtF:lrÚdæà‰žÒwvþòÐ2ÈÎ_<Þиe©²W~ûsígp#Wž\¶£-;wÉÎå\Ë•ÇïywïÜȘZ^JÙy\ )ôÉ-Ú?öè`˜Ù Æ?2¿Ö ml£ %ìˆPmäµ?Ô¿ße5"_Êì->´*`ÿÂáyNç¼á…Ô2:/=}ÞhKxið—Ÿ^¾{ÿß>ù 8þá§_ìºó‹O³I©—b½uJ½µ¾\ˉîA-lÃÎÕÿØ#h³òšG8qKЫD(ºßyšx\3¦O 0AG§k‡¤iŠÂK7ýæÓ/îÜõŧŽ?øäoûï¾üé/ƒŠ|y ‰ùDñ÷©©Ê·œ£êƒ*^bz-V6 ¼sû3žŸÃ¶p£"CÄEKE°3XÀvýY„£ØrZ:KEÆ…Í"Ÿ.2béô+çØË¿ìÞH«jÙ+Ã"W®T9¹y÷¸ ¿¨1RÊãK¬`¤Í| ”QÁ^W¾‘½"ª•q )Fä«('<Ælœ¨ÀÎຢ/Ôº"§bÙ¸ŒŒ¸®ÙxŽì"»®n.»Ø7úîm¤tÔö`®ö•h-³'ç`æüøc;ªÉÿ vxŠ{ÿËm‘£€Šþ·T9oç 2Û‹I‰÷Ÿƒ8¶W<\ ù ÌùK=8Ì ›“R¥x«ÞݬŒ×œþ¸n/&>zŒnæ]to;º?“yÝVL{ôØ'ô”ÿŽíÂТ甭úÙô º³ìMÙzúö™£rm—%øQJiBrâ` ýà›Û6Ü¥lĬb1®óÝëÈBŸWCºÎ¢(ˆm‰í‰Žå¶Çˆ¥ììVˆûA›‡ Íãã9 O{ÔjñÚÃÒ‘GyÚ5_äQwÑ ²Ã-ø$o¡O§ðcÒ®ä=E’0¯¯ê}„bÚ~ù^a ÙÏÝøŒÃô•Ó€OVn—Jv±|LÓ«1­g¯ê)²q¶¨*H;æW±òtÂ:Ls<~pßäÍüMüOÑ®{ ÂãêKâ]â9í|í1\rWêþ'fQÌS1ÿ»F£ß£Ò˜n,57Í1=jú2®%îT|bü“fÞì7ßmþ™%Ù2Çr£åœ$IQ'X”ðhbbâ’V&Ý–ôÍd)ù©äŸ[s¬o¤,NùIj~êÍ©©Wl’m§í¥'ç‘Åìo•”Ùg$nÒ…}v“ê˜ÆF@ ,™éïž™¾bÀDKñ$ sÄFÆ¢až˜É½Ñ°€úՓѰ —ÝãѰšÜD~ kˆfGÃ"ÑCG4¬CVÏüSY!l‹†cI¾ ëÉ,šÂ¶P_!ä튆¤qÉÑ0%®<æÈ,Î ó$‡»5H ÷d4¬"YÜ¢a5ùœû4Öþ—ѰHR>Ö‘rÁ ÇBg4K~-†õäfÕ½sƒÃ[F׌ÛsVçÚe§Ì¾¸¿ÏÞØ;žoŸ7´ºÐ>{û0fíëÝÜßWh_0oNýâÙíóšÙÇì½öñÑÞ¾þ½£ëíÁ5×—_0¸ª´w|08doë›ÜÐ7{luÿP_ÿ¨½Àþ•\;ËþGiKúGÇXBQ¡§¬°ø*(øJ¡ÿ AØŠµƒcãý£˜88dï(l+´·ôŽ÷Û{‡úìí3›×¬\ݯ$®îïEààø’½nÓèàXßàjVÛXáLkæG‡ƒQ²Æû7÷ÛöŽ÷‡ÆÇ‡+Ýîn¸¡°7 ¼a W7ºÿUÞø–áþ¾þ±ÁµCØúÂñ ACcHø&¥F¤æZúƒCØI"0ùö±þ~;C?†ø×ô÷!iãÁuý«Ç ƒ£kÝ7 ®tGð ­u_EðDëù?+2:H†É2JÉZ2@ƉäÕh)Ûq=õà· C‹I?éÃg#éEˆ| Í#CUˆ¡Ùd~í×`SbýøìÇçf¥,ƒ\€¥æzÄ6›´c¸™0/ú ß‹×8B÷"l?ÙˆÏQ²Ó‚dÍ¿¬–_¥ÔÃr~sÛ06„xç`|–œáÕ5¤`Eˆ…žUÖ>Súÿ.Üfl¢écü+$ÅÿÇ4†‚ÿMMÿgŠôÅZ˸‚;9¨àî@ˆ6ªE)Éx4®Ô6¤@µÿƒ›±Æ5Xžqô*äj÷8Æ#˜ƒˆr{Ù¤Œ1„då¦Û6†5ÿ}ß°19Š£2øn1ê6+u.TÒÇ•1Æò”Ø0©ÄÕÈMnP¾…s=æÕQ¼…Jh#Bþ?-7Ž3fXác¿Òßk6Ò÷… ÎØ› ¢RæãЦkÚáÍ?ƒ~å™I®ÃÃz–=YÙiêÇ¢ô¯Qê‰pmïAä{¿ÂíB%u­ÒÆAìÃA ]K뱵Ѵ¯R3MËõíùÿ²n.ª{f“÷É?ø¼HZ@Í)÷#ÀûàÌ$¼8 ÆI^ßeØþÅ/ÁýñR‰Í}éÐ%¸î‹‹Á‹‡.ž½(||ÞnûíùÛ‡ç²m¿9Wc;[ó«Ž_×p¿š€´cÕ6÷l¤±G¼ÛñòáÅM‚4_NRŠÿ—Ü”|ÿÍWÛÞýYŠíŸeÙzÞ>ðö©·9öaàÜÛÌ”æí¤T?>¿­õ&@òàÅfÙ|ÏçÎöûžOÏöO€Ãç|®ÆF&`â„ÖFN9a?á;Ñsbø„ÀNœ9qé„0v_l#Â=Ûó,=üì™g•Súguz¿áXà=ÊEhN"µx5ãÅ‘ýx¤<É—“•ë·q©=rèo8¾#zÉO¾7ü½íßãÎ}ïÒ÷èÓO•Øžjɲ+$có‘œäçÀð0|^€ˆ'ÕÄß®–jÛãdÛÃëQ¼¶?ùsl‡<ò =è/±î·ÝOï;e»÷ž,Ûþ»t¶»ïʲöÙöÑÀ¾à¾mû¦öñ¾}ñ ~Ã]à»KgðvÛvÓ¯Ýa°î€ÒÛü·ÑÍHÄ&¼ÆñÃ+w¬ÃÀ ÃçÃðóá‡éÀ0,æ3F¦‡mC~Ù– ‰IÞĵ—ëPaïôbÙž€l àseW£m…?Û¶¼ëF[—¿È/ÇuÀuð2×äÀÀÕr4о¶œ|¿¯--oñ‰þÅ­9¶Öæ[ ^I͹ÍtYó`3@£3ןi›çO²5ú¶lô_ýÈdK‡ FÙÐAt™²M€é˜UćÑWƒO#;7j´2÷Ó°•·j Ã6o0¸ ͆ a¿á¬aÊ Ž¤^4ðAvš¶K À8ÚÞær5M¨§7…Ô-ËCpg(³Ý}­]!Õ!Òѵ¼ó(ÀÝËîØ·ÌIm Ém¡žÔeM¡> øX`;Œ©G%2gÙØøØø¦±ñèkø ‘鄱±M,UÙ$›Q’ÇÆÆÇÇI¤È˜kŒ¸Æ\ã›”€A2-=ÆÀ¶èØã›\ã *86Î`\,­Œ(‰ òÁÆq®ÿ/@[ñ endstream endobj 393 0 obj 15584 endobj 394 0 obj <> endobj 395 0 obj <> stream xœ]”M›0†ïü ŽÛà ì1qVŠv“”C?Ôl'EjrÈ¿¯ßyÝVê!у=ãyÛÛÃî0ôKñmÛcXòs?ts¸÷¹ ù)\ú!36ïúvIOúß^›)+bîñq[Âõ0œÇÍ&+¾Ç¹Û2?ò§×n<…OYñuîÂÜ—üéÇöŸ÷iú®aXò2«ë¼ ç¸ÎçfúÒ\C¡Yχ.N÷Ëã9¦ü øxL!·úl¨ÒŽ]¸MMæf¸„lS–u¾Ùïë, ÝsÞ2åtn6s 51´,+WG¶Ê+²;ò\‘+ðJÙ–`Ïñ=xM^_”€_9þ~SöZwKÖ˜²¨Ã;Ýç endstream endobj 396 0 obj <> endobj 397 0 obj <> stream xœÕ¼ |Sǵ8I÷Þ¹3gÎÌœ9sæœ33ÙÞOtdœpD^·µwøÐ†•wBÞ ÖísŸmý÷b _&„æ®Þ°ÕþÍ¿Âë… [v®¿î_~Dˆd!¤y|coßçwë¾óâ(Ùˆ›~XÄwÄG26n»õ—IÃ÷÷§sËкÞ3—6~ƒnÄGîÛÚ{ëpZàñý¾»{·öW](pà;¨o; ®iB6–±ôá‘þ᳑'Çð½ëäÆ8À/û >P±wÊñ‚JTk´’No0šÌ ‰–$«Ížœâp¦¦¹ÜžtoFfV¶/ÇÈ͈ÂEÅ%¥eåó**çWEä «ÕÔ’ÿÿ~„7„&Ÿö’$²S¹_÷áç ¹…™wØÛÕûtÛÿ»µPÇgÈ7ɳäù99M>Ož GÉrù,ÆÉõbÞ ®fbâÀ¤90™ã]4™³ëm;¶¼2×»¨f2À°Ö7Ï•SµH˜2M^÷Ä›ã½òÎõ1½ñU¦é‚µHÞ‰‰Z¯»v¢g¢÷ìÌøZ¯Ûä8­ÓM × …Ic;æ:;óò!ÇdíÝ“¦ž0/ÞØÚæúÉĦÕí“4³Ö½±cðñzÊsÇ,Lã§%$’iêñ°†:+“µø29ÞÔ{w“µŽçˆ tLÒ–r~6%©•¥ŒÏ¦ÌeïñboÖ¯hŸ˜ä3ëú¼5HãC½“ãk‘Ÿ6±®ðš& :<Þ‰³»<Ø¡Àº±Vu}îI! É‚¹®Í€œÂ²L˜”DZÇeNp—{ ÃSã­é‰ÿvl´#w^îd4ëú–öIyäÞxÕœ.bŽÞì¢EJ÷M½Ã“ï¹þdÕªXÑ®d‰g›´TO’žuñ\“ÁšE¬dwÍDÏ¢X.oSûK$)fªñ2!Á•Xƪ +Ýíà ³ÐXÉwMÿ¢8{¿©ÀØ©::‹MÅ^OuÔáéðÄ>y¹“Ýñ‚1‡š5:›Äe¢$À8Šh”(FK;ãyw»·ßÛáÝèž”ÛYÛy*lj¡Ð<ÞW-×½]C,$ñ`òì #ædmÀq-q'+ïs¯Ñ’ëf“ÝjoýŠ †ÜGH°æu“„±°\fv(£Ÿgom/bÑÊxž8-Ël,odÃvÂ[×7á]Ñ^©@£ùŒc++ÔC}˼\f O{ᮦÓ2ܵbUûK&T³îjiŽ­îYØq:ÓÚ_r"+±”ŲHöâf/ S3¾¨xÇK2!ãJ*¯D(ïëÎQâÔ³q@Ö¥±8ÓlÅ8>'+q샽d߈4Fù]ãîcýs[ÇÆ‰žÆãÄŠÁL‚· ©ã­: T¥›ÔzûNJÞ…,>Ââ#±x‹‘3À y¹»&L5ÞìyÊtNá­OhE­X$ù§+ŸùÄ+¡Ó*á·•Ïqƒä4Ç¢ýœ¨²|\ù°ø°ÙcÎô˜=‹¨{:™Þ(´þýéEü›Ly éˆ÷]~9ñQyÉ~´iàYt{†<Ô#ûQœhśր,鵪5j 4kêµ’E+I&¼´²ÖÕª%+§á&“Q«IjïhH8¹’`+‡`  *¦×œ7CØ ÛF :;!¼é*rÞÄ*®4làÄp¥Qý‘9˜"¯_’Ï<&ê$-÷§ÑjxÞ5a}ž”â°‹ÜS‚zÉÈÁª©7¸*oí «µ²ªÜRµº"UlŠm«Á¶ý«ðI%·¿D´3¿”—hÌÑdœNú¬ñœ‘eÉ5:¤€Š£)ÍPOE Ey‘¿ŒLÆZNÅUR#jð\“Ce¤0×Àð•¶±œµ±3Œ­œm¦éüyÓóç[Ú™PÄ–’`½¥áRÖ>«MÌçXÃṗμôHÊ#6]Öâá•îêä-Å®É {,êÄŸ¦p/~\ǽxÇ®ŠõK*ÕAJ9°úçg÷Þ¡(Øo>À6rdX®_É¡Þ=Œ Ú €K '…g…sÂŒ ÂœÍhWOÀBLxõ' íFT¬'ñÁ‘xûBl×¶m#¡X»Lä[ltn‹u^Âà÷™éKÂ/B­žy‡ñËH2 “¹Ú„1ÿ>?µ¤ÃîÔC©”·C0$ ÜÅ)Ðr!åR GR %¥¸§x¸˜f/ÖËZcTïjL2å6ª­$r%rkqe›9ììÜv…•û€E%ˆù´¸ Jc\#åS…Ÿ dI£áP-­>¤3¤m¾o²¯çÄÐ|ÐèR×ß}z`Ó¶–½œ¾`MyñæÞF‡^ʪ^]R2ÐÕà0Hô颊}/WlûâÆ`_Ég_ØQV¶åøºe[jÜÉKï+]ço‹zìËîÝ^ÙÇÆ&?ÝÆ÷b»ç‘fò{ùÖ%å«Ê7•s™^Ød…}"”/¬[HwCkvöÙœ?´Î§ßÉÕ&ŠK ¹¤Þc1rð—4À°á¼6À`h)hñPÕÉB£Ð#p‚P±¸ ÒO¦aVމµ9\r}c†Iuvæ¼lÖè¢*•¦ª19IÓH±Ž¼Â˜4P†c$“#W W:ºn Ií‹+|9&ƒa…6`ªD€Ê€)z@0ÅÙ¹°ª…ôHôìÒ4ˆÓ·´¤Ô’ÒPÆo8>ž9k²øjÿÀ=Ý¥º/š·÷EŠM‚NP©¨3Ò¼%ÚðÙö ¤ ½û£òõMz* :ú4ÕŒê/$-ÙõìôÇëK†Ö5XÕêŒíáªþÆJ«¤›nË\ØYæ_Ú”¹ô–)•).—oéGØ&syP‘OqñÄÆÎØÖ+¬;Yß]mòÜ(©â#”†,e0dÇ„W ´kH!„9Æ»R«Ý­<¨¼õ«‡—,ßÞè 6mݽ/ògQ7u¶V‡MÏ%.Ür|KÇDW¡¤^"¨²ýF—aúã×}+WÔ—y’rä¶Ý¾¦X£5Ë–½†â– WhÅ–ò¦-Åi:à2’ó-«ÛŒÙÕáÔª Krr—oYàjËžÞoÍ·dfð<†e'ºK——ºçS+Û7ß¡¼çþ‚t’qÙ}0¥Ãv454ËVb£‚3ɉã6Å@Uu“NÅ8ß ‚+JÜ@в¾ì~Ïͻ݅yµ&&õM™)C¬SRLLÜM2G%6 ]‘ÿ:Ms´f¤°Ù€ÄfƒLF&ÛU)T%(R(>Í*ó~V¶ª¶$ñ„³ièÞ¶ ÷Eµ¦uÝÀÖâŽ]ÅÂiÎ^RX3ØV•¤ÑnØå©l-*¬¿¥%¯jè‘U¾®¼¡/m_0ç·l_œœ·¤8Í·êþ‚MY{îFþ«AþËF:dâ¼·WvŒñûxº»ðP!Ý8 ~;d&ƒ*tu#B JoIr×^È‚hȹs)‡#9“Sæje+X™|·J’Š4†ÃªüF‡IÕh¶ÎŠñ+ÈrŠüÅxn$N …Û5Àb\âÎ$¡ b,¦°ÛU9 DààÎýekêË'’£›nì{tkyëÃoÞ:øØ–bN¥Q¤4cáš²‚M½6øOg¹óÎ{S dDò:¢yå[íè××ÍÛx[2mò„Åk^ØIK]²gíMäè¿Qø>…W(|ŽÆdåU9ŠãO‘£*øƒ“±Š @Õ¨VWñ*ŽÉQ•PÀóã<ÇGÈrµ#Ð!z’^ ¨ô¡eR4frés£--Ö@1“£«PŽþþsÇ`?7ÝÓ…×¢*æçwXÖì‰Îè—á˜ÈÙ™ËÏ'gFñyQ¶$$Eדä(áZR_K}+õíT>äŸ;2£%©°_Tÿ¸ž+Ò÷éÇô\96Ô P€­™€§€VÀj 9YÈ®È>žÍ9ÝzSt¾|NàPMõ¤Ö‹€BœÐ¬õ V§ÅjuhÎöd/õ‹ÏG Ðl²šê‹Ñhh¿"¾(rež¨§Ýs—ç PfZÛ­wYy«èñˆVÎè3©|VßJßz_âÛáÛï;êã}>ÿ“~8ê‡r¿Ã¿ÓÏ[ýð7?üÜÿG?À÷ƒ~®Ä_ë§~ƲÚ${ô?ìóCìU2D5þr?ggÞ“gŒ26ÎèËNuz¬*1K,9UÖ¢¢Õ`rfsF#jšzCÒ×ýð%¥Ðý~Øá‡õ~¨õC‘>ôÃK~xR) ߢ$•øAã‡7ß÷Ãýðš0ÿã³ùü°RÉlñƒJ@Çc~è›EY~T˜"lÞ_üð?|wU¬ˆ'Ç ~àýpüW ¢§\±dÄÕìýPà‡ ¥ÀüpFiËVš¼'^&b]ßVꊎûY¦¢ÙLˆ}àßüðC?¼2›Œy*”dÌsQÁ‰u_¤@“Y\oÍ¢;ä‡ÝJmÜ~ &¢ü².øad¤«³³{V1Fõ\ùŒÄ?]7¦(IÝ7I¿ q-‚OA‚3a8ŽØP)(táÄ/J¦².eÄÍbP¤u*óÑ>Âìì¦ÀÀk7} –ÙÍ+~±{,ðx¹|ÈÎÊF•DðráÄ4.©„鞀A˜ ò¹?ÎD !Áä5L¿~qÍs> ”z‡­ßÊå8£Éª‡å“ôeËr_0œ—›ÕìšZÂÏ›òèJç—ë3¼i môOSÉ%}^”ŠÊ›¢c\µ³D2ñ¸梆jØXh †¢ pi‚š“šg5ç43­T"*Yõ¼`áÁ„WãüEžòÌÌâU‚Qä“È ¨^½§Ë¸¨ó˜ÔÀ) ĈS»"Œ¨LEŸµ.U÷À6¤ªPæÀ•~&}zùOÎüTp?óÌß/óó>ú®Rïš™ãŸÄzg“ùäk²¼#y2Ý” ­Æ~ãv#Wž[—Kýøµ åR8?Ç™‚éö4hN«O·YÒÓmø³Ó]éÁô¡ôséB:kr†-5šž©X,°‰Jp¥%Ùm$=hâHQ£Þäk$Ö«f38”°Y;°MÑ«|6SzzÕcg@§0;—+33(°¡hRxcªT6›áJæ¦2›áïo¼­%W£s´ßvjÝîãnª5jh>óZ¯UÁ3’VȨoY«–G×ÖÛÓ#%óû›æÛl]I¡5w4åݹ÷‡·Ïߨ¥Íçkà‹%fG+K{QpQ^Ò¡¬ÎGo]Û°`muzæêcc;[wߦÌê@?çëIyJÎççYæõÍãŠÊ¡¯ †K ¥$ÃðpÔÍhS ¥·‰&…¢®$FËj´×’\I.mNñŸòÓÿeÿ{~ÎïŸ/Õ iŸÕÒ 6¢mÐrZÙh‰j“BB^S†ÛÊe†ÉÔ$H’ÀTÒ éJL?Š;#¶Å•$|E¶1]1) \µ Ô3â8¦(0"fçs¨˜Ò¸Ú¤¸e˜þiKã¸C‹>óÜPçÝýÕ‰ƒ5Ýyó²@Vͺù ¶w/Þù…UÍw­_¨û¢u׆âÎÚœ¬šÞÊòí]•0¿uOKŽ{þêŠ2_$`Mʆ}åÌĤPm·Ü<õ8ç÷Ö$7Ôš2æåä”ú=‰ ‹ûc:ÃÊ™+<I’ Y²uMê–TZ•¶<cƒqñ°QØ„ûˆdŽ2h]DÇè>*$§C–n‡n¿ŽKÖÉœv’³ÇbÍÂCŠd0B³±^Ò[$I?}D‚KD¤é‚tIâ%Ù˜€êYá ™«Ïȶdddã/{&Œ®Œ`—!§y£lÊËÈ0¦pnN"b£Ûš”dÐ볉1î; ™ÿËŒ¶€bn:c6¶Ï—mÊÈð}’÷c~±YSÜçÓ›$éæ`W] Š„TT¾Y»GÄìÁ boÄŒ-8ùYµ¶¥[Þ¶fiÇ™ÇE½$ÂS*†çÒ£mÕGÒ«÷ ÜÝ”ÖÐî¼£‰v}üÕôúêQÈ-¯°—;˜ÈX•Eïa¶,!Â÷„½$‘|$Ä„ ôeòòk”v—/úyòU”;vƒ9Z‡°Èàg´¯ißBf–„hÓÒ~ívíZ®V»RKµL±Ò $ê9hŠžµ,±É Íföž™hIHHL0%&&6$I0%ÐgÎ%Ðá„ñšLÞ2ÈtµÆ¢ÖhLx©e´…Õ fК9 —("ª¶lUœwá šq¶Ø”uƒles\,J¡ùÕÉ) LI±o§”ÙˆóB”ù'1 Üo¦®¨D•QýÂS`~‹¢6¤2i_xfú]þåü‚œÎ웄½-äô‡¹/þ}Ò© þOÈël^ñʉô(ê GyiÁ 'xrŒ(Hc6f˜•‰LàãõQÎwr¦Ä·ùÂ…ºpi}ûe ö‹H6Ë‹ˆÊ¤¢—UpNãªS*Tu«¨ª›âi ç!O syvQÎBQðã¤@9Âw …Y:EÐܦK_C"F£mAE@ªpÞDO©GäV½ÿêûÓÎ4~ÿ‡üNœˆù—ù$œ¼äK²Ní´;©Æ  ˆŒÚ°{$4ëêõ‹Þ``N‡ ô‡õ'õ—ô¼^Ÿ™LRSH[*¤¤¢r\ïtXœN‡ÓäÀ;›G©N’l¼¼ Oqpº$K£`š|laeö™ë^¥/ÑD*? œ¹¡;·]mU¼wA™lSÜ›xÕDğì¹:\^¸fD=î3õ*£AK¹½scej”Þ97ž¦Þ˜þ¬ga©/æ³x…û.çžbýÞ!ÏçŽ!'áðxTÀ(4ç®rH¸ Ð © {r¢‚lMÃÚ h«°Ç"á”7CLÊ ˜éêܖ¤W'r x‘)ñ¢/Ý+ŸÎ¼'r–û.¼2]¯09‹¼GÓ•:´½0)œGô8%=Ÿå*ƺÏîF0 ÀÇ\×U§1aìI(p‰sIH¡shŽš èm…ÌEÜ ç¦ÿ]Ø‹ìç+¿ õ‘û_"éÈí’1šl‰wð4+íœk¼ÓA ä$¹„5$9):½NFQ½Áh1QCë‡ñ€AYÆ aS’Ũ7dÏy°m!Æ¿Ÿ²qCï3-óºWV$˜Á¾ÊôÍÿ^Œ^×éÜŠ›ѩјNÉäè]H#±“oÈ·°‰‹îN:”DW&¬O mv¤4ÎU0®˜±7n¸ÏpÊÀõÆ ´‘yˆ94½’£F£´ú¾ÄS‰4QFË,11ÅN9›Mé´«ú'Ïd!o Ýv;±áçxÞ8×}l¶Rœ ¡(_¯édNLgúûU÷£š¢Ux8ŽO܉¥P #£‡ãÿ1½xÛ90Ó¾Ïì®ùåOA7=üÂÙ‡ŽL·öÓº©…½ážƒ+¿ñÛÔ©Çéå‡ß:õ_È#3_C©D™(Aª\›¥Ý¯¥-[ØÐ`@äÔ*II®ˆ Å1Œj†–rj Ç©‘l´L !’Ic^žy¿'çjEàyQØ#PÔ$kÔ€QÃÔwN§Ñè‰Þ¤?¥¿¨¿¬ôz6 æç…¢„k䨓õ–(§QkyàY-#JL‰$¹õ`ÒÑCù{z¸¬‡‹z8¯‡I=œÒÃUã)NäpØVnŽM:h&)V¦*j¾ØÊËðsà:ËÈÀÖ’”›ú¼:~GÂ3œ¼4€ ¬úíOï{Þ™þ¯o~ º~4€døÆô"šK Ó«áËSïOýDá¹Ô™wø"”Ç9È}ÇäõëB£¡;Bœ_Z%m’¸$.“£Ââóó¡`>4Ì¿0ÿÒ|ŽÌ‡ùóD4,à2 MÖ´4+4[ëm©[jª /›œ–µ±¡hKK%6k’ÉY˜Á“’F½ÕßHL71®g±ó€d°Ç|YŠG:!ÎJŠ“íe M\ýQŤ-®òǤŒß蟯Uþ?çæƒ^C¿Êiõ&ñƒ3+½ øŒúÖkõÿª¾¦*«­‹_Î €Ð-q ¥¢(“×*£Ùü•éŽÔ¢DkÂ5&€¼î: &ÓTõ(ÓpÝ/‘ÀÌåçQ¤yÙü6ƒÃ±Ü œ¼š\#×Y*(„æÂúPØ ‡MxiBð·ìÁ@hgˆ†BÕG«a Zª!«º¶šjªaeõþê¯Wÿ¼úÕV«4Õ9ÕôoÕðÇj8Výýjº£:ª¡¤,ÕÕTU ¢Ó`Œéº&³Åd6›ØÅ:ÉTÑè7e: 2„ ÌN‘hÓMVcaÈhZ` ÅDç_ªáWÕðÝjøz5<^ Gªa5` k•ú,ª†P5dTƒµh5¼_ oWÃÏ«áµj8S _ª†ªaŸ/Ïô±jC­R³X¬ÚnÈ‚E`co¯†±jX?[fpWCB5ðÕðá,üwg‹8:[D¬€Eñ¦_« Ö|ä°"FOV„ü܇ ýÞRð>®€®WàJ ®×*Ì•‡$€F6ç=¥¨×”¢ö)Õo™M’ªaÓGÕr\®†‹ ̤6®€õ)`XßËJñ1 ‡”È@5…¨±\§òïV’ Þn%yÞ»Jú¹j¹ÞùsßÍõ®›îp£ è/ÐM ?¯L»Ì[þ7‡•ÜkiÄ[ö G¬²„V¯bRÀqBb¶.šhä6¾øÍo½¥õ–µÂQ’JÂd¼`,¼/LäÁnß!½+$ÇjÇf·:ys2å%hÑöi)OA:œYYÅ…CÆWB0KHÕ'猢ÑÛYÒ©8Ê®ÙV2§z¨([·UVkii•ÀÍî`Ⱥº HÛtx`¾döíûò+]+îÝPAUZµ£±gxÇm/,ßÜâ2ëoÙ2Ž–ŽLîŒ[ñÃéÿ<^Uyë×w{" —äÞûÓcëÊmÿKÉÞŸ¡õ¾Šã'æ1ÞÝ6óŽðlw€|AöðÂ!Lèa'›t:Úï»ÓG×[ Ø_ãoõsåbHmk¬Œ#ÙQ«5°&Bà2¬© yžUA-he‹=ªuv›lÝ6j³™ù‚€h ŒÎ.T@V·³ ®[{í¼ºÐ˜ÕÕf/¶ò8·¾}Íê+Ð9! ,/Üõùïï=ò?ˆ–ôÝ÷ÂÏoÝû퉖Ä3ƪÞ;ÛxûÑæ¢ Ÿ[¿êègÖeASÝí½åkNþb÷m—ÏßRQÑsÛÂÒ`[MÎæoNOëztT.l(cò9†ÿ³âó°ÓòŽ:U VÙU>U»j£êV•ŠK¤œ€¶ž[ì!¼Øj3Ñ“.QeE•FŸ¬ÏÑ0w¿[„€X!¾"r¢h=Î?Í¿Âs¼.‰ò²Î ò@]¨þí¶$&êUÌŠÑŽYšáò`˜P8£„T†ÙµãËtþüÕPl¥#n8¡úžÏe3÷‚‡Ï¬ŸÚûÞE®ñW1½GmDs…Ú2ríÓ¥F81ÝÇÌh^›³|A€çs4ø¦}1÷6Ò@ 5²í<}”çÅ›íÆ˜ÑÞ=kö]‰ÜÄùP¬vÎ#FÀ|î?è÷Ò„½9N(¼8émtÙ(S¶) 6jbç[^9 €Ka^g`[>:™¯Ê#¸à}\‹qj:¦µ+þ^‡ÉNò×# çÆWM?•j|¯bì‡Xj8QúuN6¯I>ÎD©t³Ål.sQ”z…ÒLÖââ4Øpqúa/ì|ü}hK;Æç_:ó‡ìÊ›c8Œu÷iùþ~×v×.®ÃmNÈ¡ J°&P“­›t%;,ÉÉü9H²)™–O&¿—L]Ép!ùR2%ÉÉ÷%ŸJžLº“‡’Ï%sÉL†äd¯Û :¦®w‰2¥„?I”KæEÅqXäºÅ="e)1*:crRšHth±u“ĹÎTvž”ǬËm#e^O÷I&QL¿Ù¼>«vmcJ]ØaJN¾ °bpƹ0+klnh+ngzïÆïZ΋jþè¹ÇDm¨}W´í¡[Z“žxõ)çèS¿µ” ?5šTZVœÈ©>~!cYÚ’-‹½¹=LJ¸¾ï¿çÂ] QÎáÎr€tÖ‘d²Q®U%Y“¨JmUS›ÞrÒþ°¤ß­§x;¤?®çÏéêeÉÕk‰xRzøœ"ë[z&Ôhç¤G“uO&ª˜ƒìýÐ[HY™ú#Û ×Ö& Å6N”*»Õ@ ‹ž«A¸ìT¦þ]lêÏšú+¾y);çÕë;²¸³­Œiß¹ÂúäÎÒcõçî’g– e…r_w€è°9JmŽއ_qˆ‹1È/:þÓ¡*v@V ‚>î€ÅŽ[(^qÖä‡OFmØž°µñ¢Í†"[¶Ø¢·ØÀnóÙ¢¶voÓèVµ´ô¬ê´`Õ‚¨…³Úïiéí-ZªÖÚµ>mTËk´6hMž´KÜ/ð=œuÀ“8总°Óˆ: Ü9Hv€ÆsÀ¿:à×ø^tÀWpÔp‹68 L´±ÚÃÿìDúz NžqÀCØï€Xï€6Ô: ÄÙ³ð:àø¹¾ë¤6ýák0·: FGÒX 8àüÁ?uÀwðœ¾è€p‡ÆÐç€Xä$¥×Ä„¶ê=üÎo9àµÙpÀ>%G ; ä€ ¥^©ÑÛø‰?é€S üíqÀZ4;`¡Š”Yðþ5ȱ:_rÀù¥:-ùK <†Þª ø«‚ÿÚúQð+õ‰áŸË š¥P¬>g”"Ž*EŒÄ‹`-ž£¯Téík(º_C´¬p;Ph+”)GÊœSxÕˆü„!ùjÞ¾ûf¸1Ç?²Jq<¿ºb ]ñ´Ô܃ʶ ÌEŽàðîV“Yu^¸¤¿ÆáZÞßž>vUÏÏúÿ^Q\ÑÿÎýs!6°½†·âøÎ%ß”³Ø6º“$tWæD&qÜî «Ì›Ìt•i“‰ò:‹.CÇñ¨ã?ª:>/¿ 1Gù\ŽÍfµ¨±sn¶ÿ‰ÀPn®Ý0è¸Ï ^o~ò]Ö$Eí¹¹¾Qþ’ˆÆ¤¡ IMlLîI¦ÉɉÉ܉O|ñ¥_3k5³Ù=rlU˜ùtÃÁ7sy 0»]NÑ×<¢‡›µ×>¹ìMW‰^hã<©SwŒ$–Ô¶vœ¿xâ;7ØZ“øEÉݼdùøêœšÎpÏþ¢Iaï±é&wŠ©¸ÿÎ[¾=Qj¿uqÀ×$ûrWXUÝ·ÐSžËôx=êkYŠ '¯È‰«…ÍÂ![-m–è€íèÎÎüYNÔ™£j5H*‡* âP[ÓIº³`—*‹Àüxrjªdš”(D=B£& ‚ž£"[ÐÚF% •$^ªÉØŠÖ¨ ÖsˆCQ¥¢`.¬L™Á -_ã b?›"™¿òÀUÛ( ì‚Ž­z¡¢9ðpË«ÎTM:¸ðëg¿á¼8õ$ü"Óß‚ÈÝÜ×?^z/W;E­©ygƒðÉ&åd9+'í®?TOǵèîüCùt{Ùe4‹µß`0G3Ëð–ÈÖQXTZÅ~‘jí ÍAqÖrÅC^Ó`«î”wÒK½uÞº”°g¢ÂCY³;Äøs–µèùžC•y+v,PK¥§úÎïÝ9òÄ`IõÆ=«ûÞvfQÛ`ÄvÇžù—úS*×%6ïnÊI¯ˆÖܺª(­z«ðPAûg–ÕìꪒxcQ}OEï—wÖ”¯?ÔÜ;ÑU¢ç³ÞÐvwoñÔÑâ¦Þ¼µ[]òÚE¾†ˆïPþбÅáv9#§ñ–†ÜÖ…9Š>;Œ¼¸íw9*/X&ÉÀ– ã2±˜˜ÚÜÌi¸z ¨ž‚¤qà(t£ ÑP“©Ç&S‚;ANhLOà)3åÓ¨œ“-`çFpdS ÓDLF 9j$DâÖx0`*Z L±+<ðI3<Ðéñ^ktô³¯¿Òω*JiÆ_ãçMÉÖÈ¢HRRdaÄJ¿_SªÃñe@ýi‹\½+i"‰¶%ƒ[ &Bb¢Ã(é’“Ù²k×ÕeW=3ôR·QÖ8£F£.¹ÛÀéuW™Ît£#/¾Ž3Ÿg¹ÂË,šDO(¶3ÇõŒ½t{mÃ?Ý7ݾé˜KàŽó¯æ5ÖNQØ[ÒwÿªÁgw.˜ú°wªâÄñk*Ø óP×–Ñæ­ ÿ$Ü<2JÇJép T„auìO‡¾ô±tÚçsÒ ;T$ÁX",2´è"u‹šîärt3™k22ÊW›‚«†SÆShJŠ0d‚‹&p™‚¦ˆé°‰7™æ«Ö²Ööaeê‚p« êM4+3ÓÅKÝDV5ª¨JEI$ÄÄl$&VËc΂¹­ßlq ‡K(¾ñûºð·Úp×lµI²ðtãíß¹«ÉtZ_Ö5ѵöÄÖyé-‡·´[Ô}òÍÁ/ìYjüª±¤eûò‡;|9-{ÛÛ¾<¾lú–àê;Û2«ÖÌOsDúëÃÑòpš½¢í¶Uvr„ –;½‘¶pÉâPŽÝ>¯cߺýóìzìJá ¢ƒ´—ˆfæ2[þÕ°ùÉžêŽÞ§9¥™ÔpmÚTð€ô˜ôœÄIgg.>ŸŒ²§ü R’´]⩟=TÚ,-ÛÓ±^»_«E$Z…TKq$©4¢f¹–Z´ø†ÃŒÔë$ Šd‰ÓêL.ètZÓ%í»Ú-ÔžÔ>«=§åµZCÄÐ`@fD my¶)çÚ5M¶—Ž‚(¡VkT h7òº¹ãKÊz[$ü‰Õ_Å›ùæcÜ[ÆÄݹ}jñ%6Å †–< žØV65@<ýþQ¶êÿü0ðÏSÿðámÓû…7>Þü*ÔL§&tÆ1Ý*{“È=òò}z°Ø5ºhÐl‡ ÑÄö¶(«Ù#þŒ — ï8ƒœ50nly[”Qò‹fÞ`2¥FÞß4[S‹„ËÙqŒ[ûm²úŒ&ƒÁú);Œ®°ÑØ$¶‹dη3ÞÀã9ã™z=½&ŦY**Í:sE—½pÛPø·RpUµ¬á¿ü‘\µi9;”Èͼ?3Æ? ¼CòH©†\ùöí¶ï4Ò]ÙÙtWòD2]S¸¥ð¶B®¸²¦r{%—È PkQVµ„3ÂÔ’‘@­æ,3µú²|û}\’'ÓC¸|9á"A•¦rFªÌj15m85U,´©†E2˜>ÿb>•EÇE6‚òE'e ¹2!“y¾'Ú£™™5º!‰QNòEFᜄª±ª}UÔV^•CòUj§1s(“f¦¦º29§ªÈ<ª&ºF]ŽÓ‰‚¨ãÔöYŸBùP,`N°•³£,a“²NÛÒȼèlgë¶N6]šX䶨y>¦AœWÖ7çü‹ñ3!Ê<#xKó [bL"D ,⛈±\ÇN³e£ŽL6$8¾`ñ]ßÝãqÿ§Ž/ê‚ujz–èŸ×rÏK}É#Ž{V•êNX·¯[¹øà–…/y*[«êv4çM½ŸZÖ\ÔÔ8M‡';ÜPÎ዆3'3KÛæ{¸’TÜ4ÖÒyåêµáe½åyMë Ó‹çµíê . e™¦ yWE;=î›——n‚“\Ƽ¶F÷Ì;ô/ og½Ф „M€#Î@ dˆ°wÄJ"Ô«Ê‚eH§°1zîÑ©Eáòß݈ã}”=­(ç}äY9é‡"üP?à‡<ìb¾Í]n°2”‹°=&¼¥dBªÇL-Iš­MNO¤‰‰$uPñæi÷h£A¹á¯ÏZõ›¬Ëâ/fAã‹T̘EdTÁIwt' ±}cÆQ»YcÄŽÃ)v¬gví›øÉ¸+Š\7‡•#œ±•fXxK«ÄY5yîøŽA%zD½ô®#Ǧ«$}~kxëc™OÙ›oýÂúŽ£[çWôí{à‘»wøè/R÷t>pËÚÕ«Öï\n*O»å–Ì¥ãE¡Î½­÷íÞÒ×Ó·¹êÎ嵨/Ö!}ØÞÝ{äžíEwÑ]þ ?óìóÐâ`Mf΃”,ÖD§UÚ4Øo„„!2äÛã;ìã|¾ˆ{Èå ªe]BTM¸Qc©«´»t¨”/-Õ{GÊ)(grÞ¨^¼Î’ˆq8ò²bIÌ:ÈÉÕ3&³Zßܹ’˜Ã±ì¾;óZ×,9|~:oíb_醇{"=²'½vsÝ|Æ£¿D]ȉº†<ƒâT]¤^¤æÔîLTí¶¥E׫÷«i€«àê9ŽYdÏc‚b™é1±ŽëàP‘àyÆ9 ô¦(³ÁÜšq Ͼ*À™H-ª—Å—¢hT¹TAÕÕ9• RI¨,²£Å8ct«8ªî†„wÅv×Äl³˜EÁ:Ëí(>˜q†"œ]9P lCxøy=êàÓ¦Pü«ã£ßqÛó+OúèñøÌl›D>+7«ÆU÷©8·´*­JöñQ½ Öð<;­ý '°ºÛ%@ƒ°GxVxWàŸ. T4|7pšk|à ëoù¥/f#([¼˜%»"`æ“Ó>~¼KKûøwÝÜiÂÞÓ•Ÿ›N:ÁtŸa™UM~-XH¡.ƒ£JèmûTlÃn3QÇ·$óÜ.sàâžåÐŽƒfQ%.U‹ZÍöç¢!XÏsžù€Õ¦5`Ösê êwÕœI-«‡±·ÕZf~Ë®sl÷=ðl¯"ÇSµ(*ÿCã 6‡•ó ìœbXY*CÍ@Ñì¶•¡z~½rÊZ(JÿJe'”Zñâ¸ØÛ¶1éaμíÕÑéñ× D ~N£Sgi”+Ÿê¢)¶ÇiBÔùH‹Þñü~xØÎ»Ǫ̂‡iUó“œÑ}ž#8s;<Ðâp»2£ Ð Ü6gô\b!³%º VÃnàÊŽ +³Õ@ÆÊ »‡È—É (§Ñˆ|9›=å>êvÛR¢nàÚÝPǤª&H~OŽg©, ¸K¨Áî¶Øí(®›ƒ9Á®b)(ˆ¯fvÅV3×ÀÃدŚ6 æ´çÐc9pklÈ_NYµåÀ#ö'ìT´Ûì‹ímö vÁ®ÉÉÑØ9sieÁúZPÒ„à`èÉÐK¡_…þBr^(º;塺PGˆËQ¡ƒ¡ï‡þU!4ùÍjfƒÌ\ôhÜ î gærììFä›D÷Qþ‚_…àû!x)O†à+ífy†á†Øž›kAâé!èAý,Ì÷¯Åótv²M: ¢NÈ Ar°R ÁwCp4ëC°R‰E¾¥Ä?®$íVòÖÍæBìǰ ÿ‚ß„à‡!xE)à¸R‘JE:èŠä…À¡dÀ†]¹vh~µRq„(ðÒ,!þMþI†_~4^ÂÀlS+”*a=F²¾.Ø63æçN:)™Ùí¿9òèTV ñ3Olwù6e§¹âÈç®?÷6«‰QN>qøÂæV Ÿ½´p"ŽÚ““‚ Ó—îý§A…SQjªÎ‘’,ÁÉë)Ï Rs‹“á+ßçö$—&WÊ‘ùEƒYïö~¼7²;4¯¨¦:u~e©ÛúñƒÖ²Šù©Õµ5wq{®î[½Sñ18ÈrÇ8¤}j˜°ƒdwØöÝöCva·í¶ˆ}â>‘VG’ ’ÔÔt.‰OJJUÖ9ŒG—Aæþ„m=c·þê4tÍîÏÌ-[Åÿ bví9î|à½à<½62râåN0ƒóÁÿùtgÝøäú¿ {Nüé‘;;yG{@Øû‘½ýËWŽÞúµ‘R¦7¼…z©ŠŸG4h‹ùR°R`‡׋ûc;MÕjME@-¨ûŠìð¸„ñ¸ì †¢m”HµÍ”@%Y%š--–6H_‘^—þ$ý§$²CÀÏ'%G•ÃÀcB´LBuÐp,jÆàˆ²N"²Ù%²V%*Ú(Al$Iÿ)Á‹|E‚‡%¸E‚•,– T‚l l øÅ50° ´)`> Ôüà¬Hp«%°Kð_üR‚ïIpv6Ï/âú“¯+¸+e`ÇÞ’à;œ‘à‹<(ÁŒJ°N‚TKP$W‹¼ïKð¶×ÂQàÇ>Oð’à= .Kòá¢ç%˜”à”H0.Áˆk%h–`¡¸%ˆåø+Ë?‘àÛ<'ÁcJ·+eôÌfI®Ô‰*uúR§×”:}I) ´H°h>ázøó³øo€_¨´!cù_g3`…âM Ýñã–ÿW‚*ž¡ûåèºï?”fWuÒ€âùîRdŽ’'ÀDY\CUԽ¶zãULÅ\—:õWæøø_èW¹¬C?þõ¡Øž•¤é6nÚ†åä²m¥e½e‡…³Û5†(çÆ[cØAŒÓ;Q q8ºËN–=[Æ•• >b2™¨)Ý ÍÞ÷¬6‹Õjë¶ÍfÍ}O¯·š¸¢÷ˆç„ ¨µrBnQYº×éÓ ¦r›Õá3}`–ª¢fs™ó)û Ü×ao ìWغ¸9~)GäP€ ¿Œ5“-‡³óâ1Íœ\ˆò7'±•n¶y-›ÉÜÄ*¨1¶­ÐÀ‰Iida¡$•ãa°bõ| rY¦élM¯\˜¯«u>|ïäHaM¡[ªÑæËš&Õ|å0]¼¬ yº-kášËí’À•ëYQÇï¡Î²ö*ØtøèÞ”¢¦²é¡9WKÍ}Ëîéo=ž4©rñ^…Î?›ž»Ü*k¸§Qj ìÏFƒfU(‡…ÌaóÏŸž'>ð_ƒ(×z§Ûè=J¿üJ6äXÊ-u–ËNËA‹ÊΔCì Åþ±¢ö™wûÙ²se´§l¸lû‡õX”•9„÷ŠôïåÊEPT”kµA³í½t¯%=ÝÛæy®÷\:tH--:˜s`™}¹©(·Ì›îsú̘Xo™LNì)‚=v}o)]uµÇmœ-n]Û[Š¥ª¸[01¤üeŠÒi³æ(Ç„ÚDå/hP5.íRÀ>TV)X¨¸$ ã¡è»Ó„7æ:mú_és6}4ÞiÐ7×iND®v%5Óm|¿rþe>ùñ ™lyÇÈ4r‰-ï8ûÛœƒ½WèÍÑëæ3œ6¶Ž[ï4YœNþLç—Üóœ“6:!èŒ8©Ó‰° õçHì°®3:{R×éÀŽ0ÞxR÷TF>qZ7ˆ?ñ»ØSΛØ5œâ®Ò[$úä‘ݰrD.qö_‚þWí ƒŽÿªžòïgZIT7îÚ¿é©Ýäù¥¹jó}û?*SŠ’’­Ÿvj7f;AÙ£ñ#ö¿`—å=HìduŽºN}Pͧê@Òž¤*HŽêÁf>ë.æ³ÖI"Ö*N³4æÍ–°“t&æ¿j´T«eMãT7=£x«U-Ç6éøëŽàØn⬎Éß²p0æ¨6)ÖæÁ£ÿ5¾jv€éZ57=í{•-¹œ»ënz샩šGÛ;uIØ;µl/ MM|üÒâÜwá[ʰ\9•;*3+ó$< |C¨†°‚@ÆÙ)³”7• 4)³ËÚâçɘ,ê™nçÚP¶ÉZ9y'Ò‘n¥Ÿ¡÷Pn‹ñ6ãÝFNô!ƒgûØ*÷W-J{"¶3‘G¡ÅÇ|xç´´¼Vå@A¦8·1¥Út%dŽkÔ•u'fK‚Í›…Ì–BK¹¶é·§Ý¿ékƒëüÍŸzlúW§ŸxäX÷  A¿-67̼Ã÷ Gqôý@NÞU6QFGòoϧ«26eìÊàVy7ywy¹f…éŒQÁšdÍ´r©•öAÑ8dò –D**iA‰\BM•%%•&.0.Þ'Ò!qx˜mŒäd%H­k`{· G³ råÜÆÜñÜûrèÁÀåÜ÷rU¹¹YÉÝFè6©Ñ¨Mcû-·1?Ü6Å·íJùÜÞÄ=Í³Žæræ2Š-自ø9wdIFøê-Ülq¥-ÉXÑ´¤,=µ¼¹ä–§ÓŸ›Ò+ ”…{îj…;ˆ|曟yb´Úð%]¸i¸nÉp}¶¿~}åmiœC䋬Žä.)NÛ5dxù…`Çž¦å{º*$>åó»ÛNŒ-Z°qOUAþê%ù9uý••íóR•½ƒ3åÓí´@áõ²i§FÔ·«éZ:Bo§œâ²ˆ±‡òTΆê1 ý+×ÈtkNñ-'‰‹4= » †¬"h(<ÂXĬLl(Nv.ƒ˜‹hvØšdÑRñupBÖ‹L·ÿvÁà«ÐþÈ#ÓŸÿÎ Ó_›¾0ýÛⲡZñnyžR•²éºB—U£ÞÌ ˜ÍB—J´¨DÑ„—Šiß=7ZÌ©Qtãü#\¿zÚysOZ@ùc,PWƒñ>Wb\a›ð"üïÉYŒK§¿ ¯°8fé<™ù†SUX?:ó&¦ebÜÝølÄø„Ù&¬œ9ŽáÖgŸÅw ÃGð:¨Ôc”èñ*Ár‡…•$‚×< §Ãë3Äù>-Ÿ¹›=¦–ÿýÌ/ã0?ï!§ãux‹>C’¨…üŒ>3ÓËÚÀ`àù–уïô©™rlkö5É%ŸJ°ѳ¨gÞË/á$¬žÏ«ê74;´µÚw¤ü®‘þ¬óëútÿªßaÈ0üÈô[ó£æ$lLOø8ñn‹Á²Ð²Ör>i,é-Ûkö>ûï’ŸJ±¤ìpä:~í\’MÝ”ú÷´Ï¹Ô®µ®?§×¦=ce¦63=óí¬Ç³s³³¿äëñÉásd…“¶‘\áF ’UHóeâ«ÇzÝ +ãÿxOP´“xpÜ÷ÄÔ¨ÈP<ÌÙóÄJŽÆÃ1gâarÌËñ°Hv‘ ñ°šX .ÖtÆÃÖaóÜ¿îç#mca=‚âa©¢X:ð|;OׯÃ@Ò¸ôx˜'ÇÃYÈ-‡y’ËÝ Äɽ«ˆŸûy<,’÷y«‰?Ö§àŒ‡%R&”ÅÃ:²Fއõ䟞… ä6ÕSÕCÃ;G6lsûÖå¸C¥îæþ>w´w,×]7¸.ß½`Ë·0êéíÙÑß—ï^Z·°¦yAK]Ãr÷À¨»×=6ÒÛ׿µwd³{hýõù—¬íét¯è­ëÝ2°nÁèºþÁ¾þwžû†tw àæ±+ûGFYTa~Ai~ÑU’÷‰ŒÿMŰ5FÇúG0r`ÐÝš¿"ßÝØ;Ö?8æîìs·ÌelX¿~`]¿¹®d¬‡Æ6bå7míXÇJÍŸkSõÐÈðP¼bcý;úÝËzÇÆúG‡7Ž Ï o¹å–üÞ8ð:„Í_7´5øÒÆv÷÷õlÄöçoÛºe)Vhp+¾])ks-k‡±³¶Ä`rÝ£ýýn†~ñ¯ïïê mê_7–?4²!xËÀæ` ßÀà†àU4 K¼œÿ»Ü(Ÿ‡P ÛIFÈÙ@6’1â&>²Žäà3D ð[Š¡fÒòÛM¢¤!r1TG*C Èüº¯Á0ª¼õ㳟;”¼ r)æZHjÛ”$u8£/ÇØ¾¯1„îEØ~²Ÿ#d3Æ ‘õÿ°ü¥˜­RK@øAL]oƒˆ·ãz±v»ß×!ä RÂBå)uúGùÝ×aøß]©ÀÎAb]-óIÑMñÌbÉû_(ñÿŽb±¾Ù `SpÇ Ü­±BjTr2z)¥ *P-7)±K\¯Ô·ÿÈu nÖ–æ! oŒS~Êþ¥}J¾Ù¶áL{“~b<:‚\:tÅXív(e.SâÇžci•·a2g© ¹Eùæ#Ìõ˜×Åñæ+¡­ùšo GаBÇ~¥Ï7 l¬ÿóœ[±?—Æ)4¨Œ F¡í×´1F›OãÇZåY[®ÃÃz–=YÞÙÚÆë¿^)'Fµa¼!Ýûjç+±”6``èÚú±Û»±6³u¹¾=ÿ_–: ÛQ2“ZÄM>çH#ˆ8Á•;¸òCpq ÎMi †>ù#ø Ñçúk­Ïõ^mÀµçÝ“ïÒà»Cïîy÷Ùw/¼+wLïÈï4¾3üÎø;*ÍÞNsýþwµ.ãï@þ]­Õõ/—k]ç._¸|é2'_—Ô^®µ»þÇüK­ÿ<Ÿk½\ëo¹—ñg`üÙÌÏèÌÏàä[ðÓŸTºÎ}¾Õ˜åêyuøÕñW9ùlÏÙá³Ê€ælB¨ÖøbäEzž;ãu£¼ð…Ëø|äùwŸç4=“Óô¾ÉS“““ÜøWïû*=õÕɯÒ=Oé§&Ÿ¢Á'‡ž¤Æ'ž<ùä¥'yéÔÉ€K>©1×’—ÁDL`zŽÎ“è1܈%“x?×E¼¸ É.wFí£Ç3\ŸÇë^Çá‘UQ×ÃG3\^>JYÛŽê͵{‚î#CG.¹t„7qÙsäð‘™#ƒTºäl©µò]­ñ~è¾ÿäýÏÞîþw_%ßï̬=uxò0=øâáˇ¹{ï©uÜ#ßCÇï¡WA‡ýs™Ý±.:9Û`®uOLÐ;÷Õºönq#-/l¿´ýÝíÜ»Ûal4âE"^dÛë`¤¶Øµ /y8+·Ö=\0L‡ðm¯°·&‡í­b˜kU!Нl…œ­°C=˜½¯úP“ÕÀÌ—ãxâõó…%µnö·R…YþÚ®U!ךÚB×j$Æ*|&†Zì^>ĵq`ä"=Ú“Íç›/6³ž|¾9¯¨–Që‘f$é»M3MTn*.«•›2}µÁ½<'X«^îJ¯Õ,K^F£ËÚ—ýrÙŸ—ý×2á‘e`_š‘Wk_šê®}déKi}m©«®ÖíŠbcãõl-\ª}·–Ž×‚5”Ôjc«)dl¥@Z€ËeŒ»{Œ¼Ñ46‡Œ‡—Œ3F1‚qï9ÔÀÇ­ ÀY¸ïtËŠ@ þ¬8Ó\?)6®ž„»&3W°»Ü´jRu×$i]µºý4À½wÞsY˜Z?ZÑ>Ù“ÚQ?Ù‡™Æ1`J=m% ;ÆFǶØb ”àX@ Â(e  $²4v Ä¢ÆXÜh,00Šòn,û±ØQ øèö.| ®Ñ1E¬Xt,bT)%À`I¼: ê@×(ÛÆÞÅbA©û`ÞQûÿ!Ø5Ä endstream endobj 398 0 obj 18483 endobj 399 0 obj <> endobj 400 0 obj <> stream xœ]”O›0Äï| ŽÛà ül`#EHÙd#åÐ?j¶€€“EÚrÈ!߾̷•zH4À¼áç‘M¶=ìC?g?ÂØýœžû¡ þ6ÞCëÓ“¿ôCb$íúvŽWúß^›)É–Ùãã6ûëa8ëu’ý\žÝæðHŸ6Ýxò_’ì{è|è‡Kúôk{\®÷iúôW?ÌižÔuÚùó’óµ™¾5WŸéÔó¡[÷óãyùgxL>½6DiÇÎߦ¦õ¡.>Yçy®÷û:ñC÷ß³*çÈéÜ~4a±šÅšç•Ô‹Õe m©·ÐŽz]PWÐ¥j«žŠ9ú…½¢¶Ðêú•³oÐ[Îj掞ôµfîéAŽÉ©‘cÈïcÈo7Ðä—šürLä&¿`í†üï5‘_3É_¨‡ü•Î’¿Ôûä/wÐä¯ô½äôc"?ò…ü‚|!¿…_Èï°F!¿C‡B~‡!¿à]ûWù t"à—ܨE­~ò[õÄþщßb]ù±„ü…²‘¿›%ù Mþ[ò 2mì{ƒߢ+K~‹,ù ýƒÍ²ÿB=±ì K~§ùä¯t6îå‰üX»%…µÛØ?ºräwð;ò ò]äGŽüëuäð8ò;ôãâþ1zÐâ‰Â‘Ã7áÏQNÛ{Ë1Ö‡ž_œÜ~ð¿-Ó8aJ¿w°Z endstream endobj 401 0 obj <> endobj 402 0 obj <> endobj 403 0 obj <> /ProcSet[/PDF/Text/ImageC/ImageI/ImageB] >> endobj 1 0 obj <>/Contents 2 0 R>> endobj 4 0 obj <>/Contents 5 0 R>> endobj 7 0 obj <>/Contents 8 0 R>> endobj 10 0 obj <>/Contents 11 0 R>> endobj 13 0 obj <>/Contents 14 0 R>> endobj 16 0 obj <>/Contents 17 0 R>> endobj 21 0 obj <>/Contents 22 0 R>> endobj 24 0 obj <>/Contents 25 0 R>> endobj 29 0 obj <>/Contents 30 0 R>> endobj 34 0 obj <>/Contents 35 0 R>> endobj 37 0 obj <>/Contents 38 0 R>> endobj 42 0 obj <>/Contents 43 0 R>> endobj 47 0 obj <>/Contents 48 0 R>> endobj 50 0 obj <>/Contents 51 0 R>> endobj 55 0 obj <>/Contents 56 0 R>> endobj 60 0 obj <>/Contents 61 0 R>> endobj 63 0 obj <>/Contents 64 0 R>> endobj 66 0 obj <>/Contents 67 0 R>> endobj 69 0 obj <>/Contents 70 0 R>> endobj 72 0 obj <>/Contents 73 0 R>> endobj 75 0 obj <>/Contents 76 0 R>> endobj 78 0 obj <>/Contents 79 0 R>> endobj 81 0 obj <>/Contents 82 0 R>> endobj 84 0 obj <>/Contents 85 0 R>> endobj 87 0 obj <>/Contents 88 0 R>> endobj 90 0 obj <>/Contents 91 0 R>> endobj 93 0 obj <>/Contents 94 0 R>> endobj 96 0 obj <>/Contents 97 0 R>> endobj 99 0 obj <>/Contents 100 0 R>> endobj 102 0 obj <>/Contents 103 0 R>> endobj 105 0 obj <>/Contents 106 0 R>> endobj 108 0 obj <>/Contents 109 0 R>> endobj 111 0 obj <>/Contents 112 0 R>> endobj 114 0 obj <>/Contents 115 0 R>> endobj 117 0 obj <>/Contents 118 0 R>> endobj 120 0 obj <>/Contents 121 0 R>> endobj 123 0 obj <>/Contents 124 0 R>> endobj 126 0 obj <>/Contents 127 0 R>> endobj 129 0 obj <>/Contents 130 0 R>> endobj 132 0 obj <>/Contents 133 0 R>> endobj 135 0 obj <>/Contents 136 0 R>> endobj 138 0 obj <>/Contents 139 0 R>> endobj 141 0 obj <>/Contents 142 0 R>> endobj 144 0 obj <>/Contents 145 0 R>> endobj 147 0 obj <>/Contents 148 0 R>> endobj 150 0 obj <>/Contents 151 0 R>> endobj 155 0 obj <>/Contents 156 0 R>> endobj 160 0 obj <>/Contents 161 0 R>> endobj 163 0 obj <>/Contents 164 0 R>> endobj 166 0 obj <>/Contents 167 0 R>> endobj 169 0 obj <>/Contents 170 0 R>> endobj 172 0 obj <>/Contents 173 0 R>> endobj 175 0 obj <>/Contents 176 0 R>> endobj 178 0 obj <>/Contents 179 0 R>> endobj 181 0 obj <>/Contents 182 0 R>> endobj 184 0 obj <>/Contents 185 0 R>> endobj 187 0 obj <>/Contents 188 0 R>> endobj 190 0 obj <>/Contents 191 0 R>> endobj 193 0 obj <>/Contents 194 0 R>> endobj 196 0 obj <>/Contents 197 0 R>> endobj 201 0 obj <>/Contents 202 0 R>> endobj 204 0 obj <>/Contents 205 0 R>> endobj 207 0 obj <>/Contents 208 0 R>> endobj 210 0 obj <>/Contents 211 0 R>> endobj 213 0 obj <>/Contents 214 0 R>> endobj 216 0 obj <>/Contents 217 0 R>> endobj 219 0 obj <>/Contents 220 0 R>> endobj 222 0 obj <>/Contents 223 0 R>> endobj 404 0 obj <> endobj 405 0 obj < /Dest[13 0 R/XYZ 76.7 757.3 0]/Parent 404 0 R/Next 406 0 R>> endobj 406 0 obj < /Dest[21 0 R/XYZ 76.7 718.4 0]/Parent 404 0 R/Prev 405 0 R/Next 414 0 R>> endobj 407 0 obj < /Dest[24 0 R/XYZ 90.1 757.3 0]/Parent 406 0 R/Next 408 0 R>> endobj 408 0 obj < /Dest[29 0 R/XYZ 90.1 610.5 0]/Parent 406 0 R/Prev 407 0 R/Next 409 0 R>> endobj 409 0 obj < /Dest[34 0 R/XYZ 90.1 538.4 0]/Parent 406 0 R/Prev 408 0 R/Next 410 0 R>> endobj 410 0 obj < /Dest[37 0 R/XYZ 90.1 557.8 0]/Parent 406 0 R/Prev 409 0 R/Next 411 0 R>> endobj 411 0 obj < /Dest[42 0 R/XYZ 90.1 503.7 0]/Parent 406 0 R/Prev 410 0 R/Next 412 0 R>> endobj 412 0 obj < /Dest[50 0 R/XYZ 90.1 757.3 0]/Parent 406 0 R/Prev 411 0 R/Next 413 0 R>> endobj 413 0 obj < /Dest[55 0 R/XYZ 90.1 757.3 0]/Parent 406 0 R/Prev 412 0 R>> endobj 414 0 obj < /Dest[60 0 R/XYZ 76.7 704.6 0]/Parent 404 0 R/Prev 406 0 R/Next 454 0 R>> endobj 415 0 obj < /Dest[60 0 R/XYZ 90.1 410.4 0]/Parent 414 0 R/Next 416 0 R>> endobj 416 0 obj < /Dest[60 0 R/XYZ 90.1 287.6 0]/Parent 414 0 R/Prev 415 0 R/Next 417 0 R>> endobj 417 0 obj < /Dest[63 0 R/XYZ 90.1 671.4 0]/Parent 414 0 R/Prev 416 0 R/Next 418 0 R>> endobj 418 0 obj < /Dest[66 0 R/XYZ 90.1 630 0]/Parent 414 0 R/Prev 417 0 R/Next 419 0 R>> endobj 419 0 obj < /Dest[72 0 R/XYZ 90.1 757.3 0]/Parent 414 0 R/Prev 418 0 R/Next 421 0 R>> endobj 420 0 obj < /Dest[72 0 R/XYZ 99.3 310 0]/Parent 419 0 R>> endobj 421 0 obj < /Dest[75 0 R/XYZ 90.1 757.3 0]/Parent 414 0 R/Prev 419 0 R/Next 435 0 R>> endobj 422 0 obj < /Dest[75 0 R/XYZ 99.3 368.6 0]/Parent 421 0 R/Next 424 0 R>> endobj 423 0 obj < /Dest[78 0 R/XYZ 103.4 757.3 0]/Parent 422 0 R>> endobj 424 0 obj < /Dest[78 0 R/XYZ 99.3 501.2 0]/Parent 421 0 R/Prev 422 0 R/Next 425 0 R>> endobj 425 0 obj < /Dest[81 0 R/XYZ 99.3 757.4 0]/Parent 421 0 R/Prev 424 0 R/Next 426 0 R>> endobj 426 0 obj < /Dest[84 0 R/XYZ 99.3 757.4 0]/Parent 421 0 R/Prev 425 0 R/Next 427 0 R>> endobj 427 0 obj < /Dest[87 0 R/XYZ 99.3 757.4 0]/Parent 421 0 R/Prev 426 0 R/Next 428 0 R>> endobj 428 0 obj < /Dest[90 0 R/XYZ 99.3 757.4 0]/Parent 421 0 R/Prev 427 0 R/Next 429 0 R>> endobj 429 0 obj < /Dest[90 0 R/XYZ 99.3 284 0]/Parent 421 0 R/Prev 428 0 R/Next 430 0 R>> endobj 430 0 obj < /Dest[93 0 R/XYZ 99.3 516.5 0]/Parent 421 0 R/Prev 429 0 R/Next 431 0 R>> endobj 431 0 obj < /Dest[93 0 R/XYZ 99.3 263.3 0]/Parent 421 0 R/Prev 430 0 R/Next 432 0 R>> endobj 432 0 obj < /Dest[96 0 R/XYZ 108.7 643.8 0]/Parent 421 0 R/Prev 431 0 R/Next 433 0 R>> endobj 433 0 obj < /Dest[99 0 R/XYZ 108.7 757.4 0]/Parent 421 0 R/Prev 432 0 R/Next 434 0 R>> endobj 434 0 obj < /Dest[99 0 R/XYZ 108.7 525.9 0]/Parent 421 0 R/Prev 433 0 R>> endobj 435 0 obj < /Dest[102 0 R/XYZ 90.1 757.3 0]/Parent 414 0 R/Prev 421 0 R/Next 436 0 R>> endobj 436 0 obj < /Dest[117 0 R/XYZ 90.1 757.3 0]/Parent 414 0 R/Prev 435 0 R/Next 437 0 R>> endobj 437 0 obj < /Dest[120 0 R/XYZ 90.1 757.3 0]/Parent 414 0 R/Prev 436 0 R>> endobj 438 0 obj < /Dest[123 0 R/XYZ 99.3 638.2 0]/Parent 437 0 R/Next 439 0 R>> endobj 439 0 obj < /Dest[123 0 R/XYZ 99.3 229.4 0]/Parent 437 0 R/Prev 438 0 R/Next 440 0 R>> endobj 440 0 obj < /Dest[126 0 R/XYZ 99.3 657.6 0]/Parent 437 0 R/Prev 439 0 R/Next 441 0 R>> endobj 441 0 obj < /Dest[132 0 R/XYZ 99.3 757.4 0]/Parent 437 0 R/Prev 440 0 R/Next 452 0 R>> endobj 442 0 obj < /Dest[138 0 R/XYZ 103.4 745.3 0]/Parent 441 0 R/Next 443 0 R>> endobj 443 0 obj < /Dest[138 0 R/XYZ 103.4 545.4 0]/Parent 441 0 R/Prev 442 0 R/Next 444 0 R>> endobj 444 0 obj < /Dest[138 0 R/XYZ 103.4 419.9 0]/Parent 441 0 R/Prev 443 0 R/Next 445 0 R>> endobj 445 0 obj < /Dest[138 0 R/XYZ 103.4 280.6 0]/Parent 441 0 R/Prev 444 0 R/Next 446 0 R>> endobj 446 0 obj < /Dest[141 0 R/XYZ 103.4 725.9 0]/Parent 441 0 R/Prev 445 0 R/Next 447 0 R>> endobj 447 0 obj < /Dest[141 0 R/XYZ 103.4 600.4 0]/Parent 441 0 R/Prev 446 0 R/Next 448 0 R>> endobj 448 0 obj < /Dest[141 0 R/XYZ 103.4 381.4 0]/Parent 441 0 R/Prev 447 0 R/Next 449 0 R>> endobj 449 0 obj < /Dest[141 0 R/XYZ 103.4 255.9 0]/Parent 441 0 R/Prev 448 0 R/Next 450 0 R>> endobj 450 0 obj < /Dest[141 0 R/XYZ 103.4 130.4 0]/Parent 441 0 R/Prev 449 0 R/Next 451 0 R>> endobj 451 0 obj < /Dest[144 0 R/XYZ 111.2 299.7 0]/Parent 441 0 R/Prev 450 0 R>> endobj 452 0 obj < /Dest[147 0 R/XYZ 99.3 737.9 0]/Parent 437 0 R/Prev 441 0 R/Next 453 0 R>> endobj 453 0 obj < /Dest[147 0 R/XYZ 99.3 492.8 0]/Parent 437 0 R/Prev 452 0 R>> endobj 454 0 obj < /Dest[150 0 R/XYZ 76.7 757.3 0]/Parent 404 0 R/Prev 414 0 R/Next 464 0 R>> endobj 455 0 obj < /Dest[150 0 R/XYZ 90.1 729.7 0]/Parent 454 0 R/Next 456 0 R>> endobj 456 0 obj < /Dest[155 0 R/XYZ 90.1 571.7 0]/Parent 454 0 R/Prev 455 0 R/Next 457 0 R>> endobj 457 0 obj < /Dest[163 0 R/XYZ 90.1 757.3 0]/Parent 454 0 R/Prev 456 0 R/Next 458 0 R>> endobj 458 0 obj < /Dest[166 0 R/XYZ 90.1 757.3 0]/Parent 454 0 R/Prev 457 0 R/Next 459 0 R>> endobj 459 0 obj < /Dest[172 0 R/XYZ 90.1 757.3 0]/Parent 454 0 R/Prev 458 0 R/Next 460 0 R>> endobj 460 0 obj < /Dest[175 0 R/XYZ 90.1 757.3 0]/Parent 454 0 R/Prev 459 0 R/Next 461 0 R>> endobj 461 0 obj < /Dest[178 0 R/XYZ 90.1 757.3 0]/Parent 454 0 R/Prev 460 0 R/Next 462 0 R>> endobj 462 0 obj < /Dest[178 0 R/XYZ 90.1 446.5 0]/Parent 454 0 R/Prev 461 0 R/Next 463 0 R>> endobj 463 0 obj < /Dest[181 0 R/XYZ 90.1 757.3 0]/Parent 454 0 R/Prev 462 0 R>> endobj 464 0 obj < /Dest[184 0 R/XYZ 76.7 757.3 0]/Parent 404 0 R/Prev 454 0 R/Next 472 0 R>> endobj 465 0 obj < /Dest[184 0 R/XYZ 90.1 624.3 0]/Parent 464 0 R/Next 469 0 R>> endobj 466 0 obj < /Dest[184 0 R/XYZ 99.3 454.7 0]/Parent 465 0 R/Next 467 0 R>> endobj 467 0 obj < /Dest[187 0 R/XYZ 99.3 737.9 0]/Parent 465 0 R/Prev 466 0 R/Next 468 0 R>> endobj 468 0 obj < /Dest[187 0 R/XYZ 99.3 460.3 0]/Parent 465 0 R/Prev 467 0 R>> endobj 469 0 obj < /Dest[190 0 R/XYZ 90.1 757.3 0]/Parent 464 0 R/Prev 465 0 R/Next 470 0 R>> endobj 470 0 obj < /Dest[193 0 R/XYZ 90.1 757.3 0]/Parent 464 0 R/Prev 469 0 R/Next 471 0 R>> endobj 471 0 obj < /Dest[196 0 R/XYZ 90.1 757.3 0]/Parent 464 0 R/Prev 470 0 R>> endobj 472 0 obj < /Dest[204 0 R/XYZ 76.7 757.3 0]/Parent 404 0 R/Prev 464 0 R/Next 475 0 R>> endobj 473 0 obj < /Dest[204 0 R/XYZ 90.1 599.2 0]/Parent 472 0 R/Next 474 0 R>> endobj 474 0 obj < /Dest[204 0 R/XYZ 90.1 276.3 0]/Parent 472 0 R/Prev 473 0 R>> endobj 475 0 obj < /Dest[210 0 R/XYZ 76.7 757.3 0]/Parent 404 0 R/Prev 472 0 R/Next 480 0 R>> endobj 476 0 obj < /Dest[210 0 R/XYZ 90.1 690.8 0]/Parent 475 0 R/Next 477 0 R>> endobj 477 0 obj < /Dest[213 0 R/XYZ 90.1 737.9 0]/Parent 475 0 R/Prev 476 0 R>> endobj 478 0 obj < /Dest[213 0 R/XYZ 99.3 642.8 0]/Parent 477 0 R/Next 479 0 R>> endobj 479 0 obj < /Dest[216 0 R/XYZ 99.3 737.9 0]/Parent 477 0 R/Prev 478 0 R>> endobj 480 0 obj < /Dest[222 0 R/XYZ 76.7 757.3 0]/Parent 404 0 R/Prev 475 0 R>> endobj 351 0 obj <> endobj 225 0 obj <> endobj 226 0 obj <> endobj 227 0 obj <> endobj 228 0 obj <> endobj 229 0 obj <> endobj 230 0 obj <> endobj 231 0 obj <> endobj 232 0 obj <> endobj 233 0 obj <> endobj 234 0 obj <> endobj 235 0 obj <> endobj 236 0 obj <> endobj 237 0 obj <> endobj 238 0 obj <> endobj 239 0 obj <> endobj 240 0 obj <> endobj 241 0 obj <> endobj 242 0 obj <> endobj 243 0 obj <> endobj 244 0 obj <> endobj 245 0 obj <> endobj 246 0 obj <> endobj 247 0 obj <> endobj 248 0 obj <> endobj 249 0 obj <> endobj 250 0 obj <> endobj 251 0 obj <> endobj 252 0 obj <> endobj 253 0 obj <> endobj 254 0 obj <> endobj 255 0 obj <> endobj 256 0 obj <> endobj 257 0 obj <> endobj 258 0 obj <> endobj 259 0 obj <> endobj 260 0 obj <> endobj 261 0 obj <> endobj 262 0 obj <> endobj 263 0 obj <> endobj 264 0 obj <> endobj 265 0 obj <> endobj 266 0 obj <> endobj 267 0 obj <> endobj 268 0 obj <> endobj 269 0 obj <> endobj 270 0 obj <> endobj 271 0 obj <> endobj 272 0 obj <> endobj 273 0 obj <> endobj 274 0 obj <> endobj 275 0 obj <> endobj 276 0 obj <> endobj 277 0 obj <> endobj 278 0 obj <> endobj 279 0 obj <> endobj 280 0 obj <> endobj 281 0 obj <> endobj 282 0 obj <> endobj 283 0 obj <> endobj 284 0 obj <> endobj 285 0 obj <> endobj 286 0 obj <> endobj 287 0 obj <> endobj 288 0 obj <> endobj 289 0 obj <> endobj 290 0 obj <> endobj 291 0 obj <> endobj 292 0 obj <> endobj 293 0 obj <> endobj 294 0 obj <> endobj 295 0 obj <> endobj 296 0 obj <> endobj 297 0 obj <> endobj 298 0 obj <> endobj 299 0 obj <> endobj 300 0 obj <> endobj 301 0 obj <> endobj 302 0 obj <> endobj 303 0 obj <> endobj 304 0 obj <> endobj 305 0 obj <> endobj 306 0 obj <> endobj 307 0 obj <> endobj 308 0 obj <> endobj 309 0 obj <> endobj 310 0 obj <> endobj 311 0 obj <> endobj 312 0 obj <> endobj 313 0 obj <> endobj 314 0 obj <> endobj 315 0 obj <> endobj 316 0 obj <> >> endobj 317 0 obj <> >> endobj 318 0 obj <> >> endobj 319 0 obj <> >> endobj 320 0 obj <> >> endobj 321 0 obj <> >> endobj 322 0 obj <> >> endobj 323 0 obj <> >> endobj 324 0 obj <> >> endobj 325 0 obj <> >> endobj 326 0 obj <> >> endobj 327 0 obj <> >> endobj 328 0 obj <> endobj 329 0 obj <> endobj 330 0 obj <> endobj 331 0 obj <> endobj 332 0 obj <> endobj 333 0 obj <> endobj 334 0 obj <> endobj 335 0 obj <> endobj 336 0 obj <> endobj 337 0 obj <> endobj 338 0 obj <> endobj 339 0 obj <> endobj 340 0 obj <> endobj 341 0 obj <> endobj 342 0 obj <> endobj 343 0 obj <> endobj 344 0 obj <> endobj 345 0 obj <> endobj 346 0 obj <> endobj 347 0 obj <> endobj 348 0 obj <> endobj 349 0 obj <> endobj 350 0 obj <> endobj 481 0 obj <> /Outlines 404 0 R /Lang(en-IE) >> endobj 482 0 obj < /Creator /Producer /CreationDate(D:20160913234656-07'00')>> endobj xref 0 483 0000000000 65535 f 0000434359 00000 n 0000000019 00000 n 0000000467 00000 n 0000434505 00000 n 0000000487 00000 n 0000001002 00000 n 0000434651 00000 n 0000001022 00000 n 0000004111 00000 n 0000435288 00000 n 0000004132 00000 n 0000006503 00000 n 0000435695 00000 n 0000006525 00000 n 0000008544 00000 n 0000435878 00000 n 0000008566 00000 n 0000009513 00000 n 0000009534 00000 n 0000040767 00000 n 0000436026 00000 n 0000040790 00000 n 0000042252 00000 n 0000436201 00000 n 0000042274 00000 n 0000044568 00000 n 0000044590 00000 n 0000050258 00000 n 0000436349 00000 n 0000050280 00000 n 0000052698 00000 n 0000052720 00000 n 0000062496 00000 n 0000436516 00000 n 0000062518 00000 n 0000065244 00000 n 0000436699 00000 n 0000065266 00000 n 0000067818 00000 n 0000067840 00000 n 0000077616 00000 n 0000436847 00000 n 0000077638 00000 n 0000079827 00000 n 0000079849 00000 n 0000091675 00000 n 0000436995 00000 n 0000091698 00000 n 0000092548 00000 n 0000437143 00000 n 0000092569 00000 n 0000094122 00000 n 0000094144 00000 n 0000103850 00000 n 0000437291 00000 n 0000103872 00000 n 0000105519 00000 n 0000105541 00000 n 0000127273 00000 n 0000437439 00000 n 0000127296 00000 n 0000129269 00000 n 0000437587 00000 n 0000129291 00000 n 0000132120 00000 n 0000437735 00000 n 0000132142 00000 n 0000135464 00000 n 0000437910 00000 n 0000135486 00000 n 0000137935 00000 n 0000438077 00000 n 0000137957 00000 n 0000140426 00000 n 0000438225 00000 n 0000140448 00000 n 0000143533 00000 n 0000438373 00000 n 0000143555 00000 n 0000146325 00000 n 0000438521 00000 n 0000146347 00000 n 0000149765 00000 n 0000438696 00000 n 0000149787 00000 n 0000152889 00000 n 0000438844 00000 n 0000152911 00000 n 0000156637 00000 n 0000439019 00000 n 0000156659 00000 n 0000159012 00000 n 0000439167 00000 n 0000159034 00000 n 0000162013 00000 n 0000439315 00000 n 0000162035 00000 n 0000164536 00000 n 0000439463 00000 n 0000164558 00000 n 0000166172 00000 n 0000439631 00000 n 0000166195 00000 n 0000169090 00000 n 0000439800 00000 n 0000169113 00000 n 0000171778 00000 n 0000439950 00000 n 0000171801 00000 n 0000174685 00000 n 0000440135 00000 n 0000174708 00000 n 0000177048 00000 n 0000440285 00000 n 0000177071 00000 n 0000177423 00000 n 0000440435 00000 n 0000177445 00000 n 0000180110 00000 n 0000440585 00000 n 0000180133 00000 n 0000183421 00000 n 0000440735 00000 n 0000183444 00000 n 0000186687 00000 n 0000440920 00000 n 0000186710 00000 n 0000189734 00000 n 0000441070 00000 n 0000189757 00000 n 0000193221 00000 n 0000441220 00000 n 0000193244 00000 n 0000195026 00000 n 0000441389 00000 n 0000195049 00000 n 0000197443 00000 n 0000441539 00000 n 0000197466 00000 n 0000199691 00000 n 0000441689 00000 n 0000199714 00000 n 0000201513 00000 n 0000441858 00000 n 0000201536 00000 n 0000203301 00000 n 0000442008 00000 n 0000203324 00000 n 0000205233 00000 n 0000442158 00000 n 0000205256 00000 n 0000207500 00000 n 0000207523 00000 n 0000217231 00000 n 0000442343 00000 n 0000217254 00000 n 0000219643 00000 n 0000219666 00000 n 0000229444 00000 n 0000442493 00000 n 0000229467 00000 n 0000231097 00000 n 0000442643 00000 n 0000231120 00000 n 0000233739 00000 n 0000442793 00000 n 0000233762 00000 n 0000235282 00000 n 0000442943 00000 n 0000235305 00000 n 0000237457 00000 n 0000443093 00000 n 0000237480 00000 n 0000238985 00000 n 0000443243 00000 n 0000239008 00000 n 0000240634 00000 n 0000443428 00000 n 0000240657 00000 n 0000242688 00000 n 0000443613 00000 n 0000242711 00000 n 0000244612 00000 n 0000443763 00000 n 0000244635 00000 n 0000246600 00000 n 0000443913 00000 n 0000246623 00000 n 0000248507 00000 n 0000444063 00000 n 0000248530 00000 n 0000249765 00000 n 0000444213 00000 n 0000249788 00000 n 0000251809 00000 n 0000444363 00000 n 0000251832 00000 n 0000253113 00000 n 0000253136 00000 n 0000282297 00000 n 0000444513 00000 n 0000282321 00000 n 0000282680 00000 n 0000444663 00000 n 0000282702 00000 n 0000284329 00000 n 0000444813 00000 n 0000284352 00000 n 0000284713 00000 n 0000444963 00000 n 0000284735 00000 n 0000286602 00000 n 0000445113 00000 n 0000286625 00000 n 0000288071 00000 n 0000445263 00000 n 0000288094 00000 n 0000289555 00000 n 0000445413 00000 n 0000289578 00000 n 0000289938 00000 n 0000445563 00000 n 0000289960 00000 n 0000290915 00000 n 0000465032 00000 n 0000465151 00000 n 0000465270 00000 n 0000465391 00000 n 0000465512 00000 n 0000465633 00000 n 0000465754 00000 n 0000465873 00000 n 0000465994 00000 n 0000466115 00000 n 0000466234 00000 n 0000466355 00000 n 0000466476 00000 n 0000466597 00000 n 0000466718 00000 n 0000466839 00000 n 0000466960 00000 n 0000467081 00000 n 0000467200 00000 n 0000467321 00000 n 0000467442 00000 n 0000467563 00000 n 0000467684 00000 n 0000467805 00000 n 0000467926 00000 n 0000468047 00000 n 0000468168 00000 n 0000468289 00000 n 0000468408 00000 n 0000468529 00000 n 0000468650 00000 n 0000468772 00000 n 0000468894 00000 n 0000469015 00000 n 0000469137 00000 n 0000469259 00000 n 0000469381 00000 n 0000469503 00000 n 0000469625 00000 n 0000469747 00000 n 0000469868 00000 n 0000469990 00000 n 0000470111 00000 n 0000470233 00000 n 0000470354 00000 n 0000470476 00000 n 0000470597 00000 n 0000470718 00000 n 0000470839 00000 n 0000470960 00000 n 0000471081 00000 n 0000471202 00000 n 0000471323 00000 n 0000471443 00000 n 0000471563 00000 n 0000471681 00000 n 0000471801 00000 n 0000471921 00000 n 0000472041 00000 n 0000472161 00000 n 0000472281 00000 n 0000472402 00000 n 0000472522 00000 n 0000472642 00000 n 0000472761 00000 n 0000472879 00000 n 0000472999 00000 n 0000473117 00000 n 0000473237 00000 n 0000473357 00000 n 0000473477 00000 n 0000473595 00000 n 0000473715 00000 n 0000473835 00000 n 0000473955 00000 n 0000474075 00000 n 0000474195 00000 n 0000474315 00000 n 0000474435 00000 n 0000474553 00000 n 0000474671 00000 n 0000474791 00000 n 0000474913 00000 n 0000475035 00000 n 0000475157 00000 n 0000475279 00000 n 0000475401 00000 n 0000475523 00000 n 0000475645 00000 n 0000475767 00000 n 0000475889 00000 n 0000476006 00000 n 0000476168 00000 n 0000476327 00000 n 0000476489 00000 n 0000476654 00000 n 0000476808 00000 n 0000476965 00000 n 0000477127 00000 n 0000477270 00000 n 0000477413 00000 n 0000477550 00000 n 0000477713 00000 n 0000477869 00000 n 0000477991 00000 n 0000478113 00000 n 0000478233 00000 n 0000478355 00000 n 0000478477 00000 n 0000478597 00000 n 0000478719 00000 n 0000478841 00000 n 0000478963 00000 n 0000479085 00000 n 0000479206 00000 n 0000479325 00000 n 0000479447 00000 n 0000479569 00000 n 0000479689 00000 n 0000479811 00000 n 0000479933 00000 n 0000480051 00000 n 0000480172 00000 n 0000480293 00000 n 0000480415 00000 n 0000480533 00000 n 0000464423 00000 n 0000290937 00000 n 0000306128 00000 n 0000306152 00000 n 0000306366 00000 n 0000306926 00000 n 0000307346 00000 n 0000313234 00000 n 0000313257 00000 n 0000313454 00000 n 0000313746 00000 n 0000313910 00000 n 0000322157 00000 n 0000322180 00000 n 0000322390 00000 n 0000322798 00000 n 0000323074 00000 n 0000336779 00000 n 0000336803 00000 n 0000337004 00000 n 0000337586 00000 n 0000338020 00000 n 0000360279 00000 n 0000360303 00000 n 0000360501 00000 n 0000361167 00000 n 0000361678 00000 n 0000374865 00000 n 0000374889 00000 n 0000375095 00000 n 0000375611 00000 n 0000375983 00000 n 0000377682 00000 n 0000377705 00000 n 0000377899 00000 n 0000378201 00000 n 0000378369 00000 n 0000395783 00000 n 0000395807 00000 n 0000396003 00000 n 0000396667 00000 n 0000397180 00000 n 0000412853 00000 n 0000412877 00000 n 0000413082 00000 n 0000413689 00000 n 0000414147 00000 n 0000432719 00000 n 0000432743 00000 n 0000432953 00000 n 0000433553 00000 n 0000434005 00000 n 0000434141 00000 n 0000445713 00000 n 0000445773 00000 n 0000445935 00000 n 0000446174 00000 n 0000446424 00000 n 0000446703 00000 n 0000446938 00000 n 0000447181 00000 n 0000447460 00000 n 0000447671 00000 n 0000447905 00000 n 0000448153 00000 n 0000448359 00000 n 0000448574 00000 n 0000448841 00000 n 0000449058 00000 n 0000449309 00000 n 0000449476 00000 n 0000449740 00000 n 0000450018 00000 n 0000450300 00000 n 0000450535 00000 n 0000450750 00000 n 0000451101 00000 n 0000451484 00000 n 0000451899 00000 n 0000452180 00000 n 0000452463 00000 n 0000452670 00000 n 0000453002 00000 n 0000453206 00000 n 0000453449 00000 n 0000453673 00000 n 0000453909 00000 n 0000454157 00000 n 0000454376 00000 n 0000454604 00000 n 0000454844 00000 n 0000455069 00000 n 0000455353 00000 n 0000455574 00000 n 0000455827 00000 n 0000456072 00000 n 0000456325 00000 n 0000456550 00000 n 0000456799 00000 n 0000457076 00000 n 0000457313 00000 n 0000457525 00000 n 0000457745 00000 n 0000458012 00000 n 0000458288 00000 n 0000458487 00000 n 0000458699 00000 n 0000458915 00000 n 0000459243 00000 n 0000459527 00000 n 0000459783 00000 n 0000460031 00000 n 0000460307 00000 n 0000460506 00000 n 0000460754 00000 n 0000461005 00000 n 0000461256 00000 n 0000461508 00000 n 0000461735 00000 n 0000462023 00000 n 0000462431 00000 n 0000462714 00000 n 0000462946 00000 n 0000463157 00000 n 0000463356 00000 n 0000463544 00000 n 0000463747 00000 n 0000463942 00000 n 0000464101 00000 n 0000464280 00000 n 0000480655 00000 n 0000480818 00000 n trailer < ] /DocChecksum /B1EA91FD44152FCDE0CEA9395B97ADAE >> startxref 481067 %%EOF aprx-2.9.0/doc/aprx-requirement-specification.odt000664 000000 000000 00000102562 13040775352 022073 0ustar00rootroot000000 000000 PK¸P<^Æ2 ''mimetypeapplication/vnd.oasis.opendocument.textPK¸P< content.xmlí}ÙrãXvàû|RîªDŠ»–rfEV.]ŠÎ-$•»l‡£$A • À@Qê GôÛ¼#ìûeüàϪ/™³Ü{qA‚$@‚ 21KWŠîrνg_þþ‡Ç‘cðÒ~ü8•PÍОYÅ£c»ŸŸ݇áøêìl:V§ÍªçÏê———gôT-¸§ÞO|‡Þê÷Î,ÇÂÉ‚³zµ~&ßY¡™v}ø®¾$w2êZ~jИ¡9‡Õàa˜úD< €¦woú©Ï½Go³Ÿ½Í¾þíÈ ïàäâì=<¤ÿyÿ.: þ(í\øn T=ß§Þ&¿­ïyžZ*~À”–Û¨ÕZgü·öötéëSß-_{½·ôõžéôĽQÐà½ú¼Q±𘪃€|Ð8ãÇêå ¿pè_Þ¿»íÝ[#3zÙ^ýrÅvƒÐt#Èøˆ„…;mŸùÖØóC˜Az‚ Øj¨µÝ‡#gñuǧòÕ¡ßï'¾ ËižÁÕ‡‹Wy°­é7êÚ–#ϼÚXœõ8¶|×e:ˆÖÊ(ª½ñ•ö5Ÿ,ñ¥ÆY`´ž«Ð7Ýq÷‰åÁ¦ƒ*£‚SÓ:y K€ÍÀ ϼþ á÷Uøãè…dJ| ƒ3õØSe`ö¬Jßê9Á‹¿gâ¢~6øoÜÕó£ÛÐôoŸF] „D¾5²§™‡Ñ H) ýX øéÙòIÞy÷vhüd»}»ž0Í̱|¯½Ä?¬õ#€iáÒµ‡+†ymýfþÃĸ¬ï=×[¸ÀÙÅ*ØàøAeh¹pTàÞ¼¾å»±WÆvØÒ8°­þJ¸ÙÀFè˜Ð„K`qç+Û`afßó]b¿ÏîÌÓ†m¹Û]»;y4he!̵dí±÷Ö[»X؃éÛ(>e€ë-lv°ôb ”ûÞÈÌmqp R­ ÞK±´`jAŽKkn°6©šý~ð€ÌÛ;]#§õßXÉcú;]{**•bí)‰ÁÆË×ÈzÒŸæ4?¡5Ú¤/ÌÀ/7_ÓÙ"BünNBå–^…ÆQ²ýolw8d]Í'VN*ä‘üŠþªŒA€B kâå©ÝGå¡Þ©¶ç=XóÀ}ÂÚnű vÔâ?úöð­¶Ï›ø„õTÓ±‡ ]ñ;mN[명W_&.ô,g2rgvÀ?ÎoDü.öÓ¨v:´>~è[N%þB½Öi´¿Í¼Òs_i½Úºì,[iû²sž}¡¯¶°ÐæÅR¶ÛõNö…¾É}¡Íj»ÞXŠûV­^˾ҷ¹¯´]½¼\ºÒFó²VϾҗɴ Ò³gv¡ð“¾L¸éc³Ï&¹Zµv)iB×óA”4¡ :oodžc÷ojôôוp=”ø¢ŸCoœâ㮆¨›'¿˜kÛ‚E^ ü±qÀÈšý1gÜ4cë+ßÛ&,>Íбé›CßßËðÂé õ“eÂÔ'30BtEpçžå’­Œ¿øm„öà©aÔ)ì T:Ó ¬ KŸ;ºi–þÖóÂý/}îè¥Yú¬é×Fí×®×Ê´±ä\wÐÚé¶€‚öN7„&Ds\'·õÓ:ãK'­`jIÚì̸]UÌÀ6Ýe/ ³Â±Õ+é·w~¸7䀡vq¨‡ú€av¹õ‹Ø…Oêqx4·å®çôcûÁ—åvù“…ÐHþVAbÑ×êú>ƒ¨PÛ>¤ði"šyÈÅÇ€Ÿ¯ êk B‡@pö³µ$°MÄêÛ³bË«.P"Dò¼C»•ü²ÈMihX#; klDÃ}½6üó“[ å˜îpbá 4eÃ=oâ†>Ìrýæè.ìÁ ½Åéöåp±9;°öonásµ9ñF†Íå'…ÏnNûuâö-Ý?…­cÿÂa}ûuÌáQ¯6Úõd§‡ø•@fÈ\ù#›JìaV²žŸ$¼¿½.¿J{=Küäç<ᛑXxÙ¾è¿^Òk _ fòS0ŠwcÒÂèPmÉä¬ð-ós¥k <ßÂ… þÄmß®½Lö'ß6¶¯2¤‰ø(–Ž“µtŽ?TýÙöóì€e}€íÙ…ÑXK½Øá>öR®¥•,\²zF‹] SÎÿúø×Îã:\"¨ä×P4?ÃD ¤àÝTV£*ð&Œ«>qä P³ž…aH0_qºY°wÿns=ee£}lÃѾžl¿³m,¤0+¯Ö&wh;’äk íÒõæRpk¡90‚7žûANâ6çÝÔ;$#§ŸÆ0#‰ "Ñ"éTß C«?óŒ³/«$´œ-[oZÀ­%ɯûfïóÐ<÷1äÏóŸ}cuðÿª/µ7윔³[,¹H®\¤¹–¢ß¡Fþw¨]«þZK]ÑWÏp燴µô‰ÛÐtû¦ß?ì8¢æZ:8¿^}+ôi×·–(Ÿi}y›oÒîl-IXÛÙr¶“ ǵ„àÄ-žÙZ;ô75~6:?­µäÈœŸÍw¶– —äÓÑ鹌†d´Ö’u¶=^̵d ÍÃfÉ­µÄµö·ë£¼©°±\óÝœðlÍ ES;ˆ¿ôn[rH†Ým¿°pw½ï®½yôÀÂÝmQÒ:`:ÔÞÜï¿¢«/ò ÑÍýõû¸‡ Ñͽû !zyØbB{sWübfU;ð½oîu_¼÷úï}óˆÚÅ{_­ïwï›Ü.Þû«ím §Ùøñ—‘ØÖÞ¢<\¿8ìÃÔÙ¢´ÜŠðž4ó¥Êöò™·(}Õk˧ޢ˜üjéÔÛV“Lz%_¤8ü<Ã⤕—ƒ˜ÍêÈ÷úäõ·ffßv·¬€Û ÝÙ¦ðÒúZºM©¨ýµu›âVçkê6E®ó¯¨çÛ´|²‡ö|‹¢d#µh³oQ’mdæ¢»Üø6åèË¥rôùåèÆríá|‹Ö®Fm[šZ”nQ"l,6åi‡rIè%Z.OS¥6 ÇT#ª6µ¨‚Ãvb5£)£Ò7I“î'”ó|‹Âk#›Óuc³Vy¨åPmQxo,·ooQÄm­<Î"-k¹ÆSUELø9CÅ´- —í=lg‹"c}u˜@þûÙ¢$xžv;i“ÃSî~çþia½EáóP`}9û[”µ/ö éí@l‹*BîgóÜ•ÜÜÁ°EY<#Ò×98ö°–Ì©²„‹ÍeòæÝ|}ØDº"|;®i¼½ÎP$~¾0þŠyÜég›¯EŸ}¶…šMþ•áîæØ:ëý2œ¥ws¬i}Üå¥Ë.5e5óY™ã=Yà³{#ìÝ“HµÞ}†»ÜÍ‘æ¥KÖUyªÁí‹¿Ë0íœ)`“i’óE®Sì)f›i9˜¾–ƒEîo¾}á¦D‚FWÀY5þªCÜÍ×ÙNÏÏ V ãn¾>öÆ{]~G68ËnÖ†ücó;™Y:*KJÌ1³È–ˆ_(3_@;“l°ÛtÄ»ùÚÔé$¯5]7ËÄøü}7«%ÿm9o6§gÙ$Ìc…×­‘u‹PÔÈǽ¶°ÉvÙn6i¸„»l"ý`Uþƒ•Íæ‹qo¶Ñ¯ΗÍN«ýÍü§æ…Gɯˆf¤h¿\ð†(aF›¢§ßÄ­Õ ç¶À@[ÕNÄßó›±ú6õ‡”¶Tù·Q øŒPGUÂ\ã#í·¡9žó†ÎÍ4»ܺfCm†Rð£ëÁr¤©u2–aðCüÖBŠh„ôš¨Epû4yC5܆!*Ád0°±•öãÙmNî_›^ƒÙìʤ  bºýJ0ÆÔ#¯«pÌ.<&ë76Ovæ16ý8ðÇ›ZýJP‰ŸŠŽ´Éeí,ÍQ¯ªîÓ1 y¥Ví4ÛI}©Åæ· O—¡#²%²"d]ÖÚY±ÅŸì ]Í]]j»• [â‹!«U"K"«Y­Ÿg¼[ò“¡«]¢+B×E=+¶è‹!«S"K"«Umµ2Þ-ùÉÎÐu^¢K¢«]­]dÖøbgȺ(‘!뼞ñnÉOv†®Ë]]j3#¶Ä;CzKlIl]^dF²)¾´ÇiìÒþQÚ?¾|d•ö¡«´Y¥ý£`è*í…AViÿ(ºJûG¡UÚ? „®ÒþQ,lÅþÑ,í¥ýãËGViÿ(ºJûGUÚ? †®ÒþQd•öB¡«´ Y¥ý£@è*íÅÂVQì­…öîÄq¬0Žâ ÿH¯­F/}ÈcVz÷¦ÿüè÷¿ý¿4fDÊîµêy‹˜ =!øI"å©Vm]^ (.ÛV†M'Ùv¼iPÆ/Û;Ýt’6¾ãM7«Vc§›NÒjw¼i_/.wºé$ÝpÇ›¹¢ÙÙ馓t¬oé}s§›NÒTv¼é‹jc·{Nøw¼çËjë|·+IlÞ5Ç>ÝØ-ËJ”?w½màÔç¹0­Œb\»ãJ1®ãJ1®ãJ1®ãJ1®ãŠ(Æu^Œ;Hsë΃‘ö-}þÇW;EÚ·ØüïÿSXlí<©ÒþAâj‘HûVS Lwˆ´oíªÀTpqHÅP [;CÚ·:[`*¸‡(¤}ëᦃ;B*ˆõà@‘µó¤5­營ƒ•³÷ª ÉL9»¯ ’”³ÿª É59;° ’£’³« É9»° ’3‘¯« ¹9;± Ÿ·«(Áðy»±Ö *¿(ºR +ºR Û÷®K®èJ®èJn3îò𺃴Á–U’ …¬²JRÐUVI*²Ê*ICWY%©0È*«$ ]e•¤B!«¬’T t•U’Š…­¢TI¬•ÒòÅ#«4€]¥¤@È* CWi) ²JH¡ÐU@ …¬ÒR t•ba«0zi) _>²JHÐU@ „¬ÒR0t• «4€ ]¥¤PÈ* BWi)¶ ci”Òòå#«4€]¥¤@È* CWi) ²JH¡ÐU@ …¬ÒR t•ba«0fi) _>²JHÐU@ „¬ÒR0t• «4€ ]¥¤PÈ* BWi)¶ ci-4€”Í™÷bÿà‡4¨ þu๡ûmhú ð<û”çÜѹÐÞžÍd¯(ι tQ¼=;Ë^\öŽÞ…mf¯(ιát¡Q¼-{Î^œs—ê#x›6 ½¢¸lm½}»Ñ^œs?ìB#x{¶¦½¢8ç&ÚFñöìS{EpÙy{'6­mà8«!¬]ÂJCXi+ a_ŠKCØŽàÒö ¸4„}Ñ. a_<ŠKCØàÒö…£¸4„}ùþ² a}Âþ­°Çbçq{·iW;OˆÛ»yª¸ØÚy>ÜÞ-MÅÅÕÒáön4*2¶vœ ·wûOqqµ‡d¸½›rŠ‹­çÂíÝ*Sd\í<nï–âbkç™pû·•Y;O„[×ìq^V*†Ý£¬T(ÃGY ¨@–²P¡Le% Ù>ÊJ@…2~”•€ dý(+ÊüQV*ý£¬T,Ⱥ•€.JHiùò‘U@ „®ÒR d•‚¡«4€Y¥¤Pè* …BVi)ºJH±°UÈeY¦ö}'¾üÇW_]âË¿ÿOa±õõ%¾— ~…‰/¦ƒ_]âK©àטøR\:øÕ%¾˜ ~…‰/¦ƒ_aâKqÉ`q_µ2î£v2î£P†2î£@–2î£P¦2î£@¶2î£PÆ2î£@Ö2î£Pæ2î£@ö2î£X5ã>õÒR@¾|d•¡«4€Y¥¤`è* …AVi)ºJH¡U@ „®ÒR,lÆÒ( ¥äËGVi)ºJHU@ †®ÒRd•B¡«4€ Y¥¤@è* ÅÂVa ͲòÇaÙ?ø! ªA‚Ýz¯ë¼ûäÁÛ³™ìÅy7×-.Š·ggÙ+‚ËÂ$»°ÍìÅy·ñ-2Š·eÏÙ+‚óîý[\oÓ´W—uS¶o7Ú+‚óî2\doÏÖ´WçÝš¸¸(Þž}j¯.˺ìĦµ g5„µÊH ³„•‘@…²j•‘@²P•‘@…²6•‘@²•‘@…²•‘@²è”‘@…²Î”‘@²´”‘@ŲšdŽ:óÆ=ëÊœ„ÀÕîñJ<èzý'õ~Λ›V%ðael­J×·ÌÏÁó£ÐŸXÒfX™X.€¹oõœ éG©ocÇ|ªx“б]«"NŒ<0|T®g„¾‰D(l4ØÙu¬ÍGn<ÈkߜˆlW‰PÏßOõæÑ‹—Ÿn~1n SÓ·ŒøÔö-:¡·c«gÊ`bèñ’Ñ.ÕNBNÅTzžªÃ®¿|kõBi삳ŸV_à~̆70^ñHª,4;œ¤‰ß³øãxÕUAf¼&•ÐáÛÐpCk~ur2¤)?Yf¡ûbn)$IC.Z#üÿifâÙµ&9}=õøVxÄÞ½9-ÿ,á)÷…aÄ«=™ÿHHR!AGç1¬Ì·‡÷¡$­€Êò…Mºz”Ëjˆ40éQç{X7~’IO~£þö€Ÿd Óß,¿=à'Ütà·JàoøIæ3øíøÛ~’9L~§þö€ŸdÜÒ^{ÀO2VéÀ¿(¿=à'™žtà_–ÀßðMI1-«V‚%ø¼ÆŠxl6i?º¼Ü,°È@¹ÄN‚"“ò>~ƒ-k‰‰£ ’XÝæš³Ô¶ §³Ñ·•&HÝõª6ᧉ?öëjÃÑG?€yãû`û&ƒäÁ›©ojðù¥Úh}+4m'0žoø€Ï€£ëº–c„¾é#;©•zÖVôÑëÊíÝËãNø}åÃð{Ðt›8|;Íð€r ^w¾e†„bâX €ÕI¹ì†ŽÛÍÀî×Dš•ËØÚªßyÓÊ;$}Ærãfñ4©§i&Mscõ,û®Þ²9.SÏ¡a÷e¿O6pöòXY ®z-õ$íÙ#töŽzt€Œ!ÜeØÍ•ƒ*yèTw»ACWãêÖ8Fšç{ÎóÚc­yúéú5üãmíÄè‹™7ŸQ;iÃ{ØÉÏ×3³0­ñ칟yÁfSÑ1usvj9/ÏVkæ:›vÿÁzÞ$0$þàl$Ÿ–†5ªçÚ©˜Œä–ñÚBã¸ç'žŠ‚ÑâÏõs‘x"®ÊLó4ÏóLLD¨Z€,S5禒hÏaÂÉEôÕ ñ®küÙ³ŒÛ°„v/0î,ø>HGÉÓ¥§Ù—ÑW×n(h„î•é8•[{è2}cöî…µüS~ùà…?$O}žžÕ4^d™ Í-<Ò©˜CƒÕC0ÏÁµ³öÁ §žÿÙèæ0<ðüøÑØÃ {w¦;œ€Ð”<|ZžÖœ%Ó×·ÚÑzm l×^,;¦ejM@³ç7š$ù–d˜E–FWÏŠc6h^(ÚìØ³P¼K9-UÇ‘ñ‘§v?§› –|¦OƒP2'N¸„ý7Òò¦Î¡àBðU |ÒÒæ.$Ý Ò¯Ñ?]Ûb­0Y‹\²¶Ry—?½OÚ„´yÍy]3:Âï—A ôÍ{;0àÿ €Ò=ÿÞ¼·jM]_0Hçè1ÓäÚË'ÑÛv—#!& ZÒÝ'qžö¬jl†Õè¯×qµhyÀ}™A0Y}Ž»–1ö=X·›˜Úá½1 ð‘ål×s¼áÓ©aºðýõdàú\/„W€±9O†õ8vL@Dßn­5^†ÂËdÂSêqzõ­ çÛ] ¶ä =V?²{§ÆõÇ /ÚŠ4c`Ä~„®`ê}anºOFÏum—¹…708¼<@EhŸ m(}¥]¬\ÍÃlŒÇ‘se÷94¨~Qo5Ï[µ‹$ûá»xß%;´FK@к8zñÞ³`•®1²4ŒA“5u†Á°ØÉÕ¯r·ëž½à³ó纞¤­^œߪ®~F¯Öjü—GÊÉÀçÐÛš3@­»F!F+øÞhK¼Ps€J¦Z®1°BçN ZtàÈD–”ÑKïÙ2b ·ðÍ#ÊÐp9»XE3ͱÿ¨¯è Ú£±#.§Kå£ h9¾y<–•ÁÄí±ùÀ#ºdŒ™rðö,ŒÍ1:8ñ#s €œâwˆÁ )ãÀïp‡‘Àj†tÉõà/1?KØÖÕ2¾Öj,$ŠI¾”ôÑJ‰”ÖÇÐ`Ý7ºv„A¬$Œuv†Œwœ·ÄløA[†»Î~àQüe+‚Ñ·¤’(°F(ì#ß1g¼]xPÿ½º xcg$±xºóƒùÅÏG6¹‰™çÇÆseŸ„3r’ûž‚'aFÄ¢Öß…\< 1+¶ ™ªÍÂ0¤DÀΨ!ºãT{eÉŸ¸ ý&A7`dç I”¼\žºSÀ„( •„äUÌÞ,¼6(«0¦&(S@¢œ¥!•Œv¾TðNwí2ÍÅf«DqŠKA‘ nlØ/¯$bþáîÃ+XahöîYÏék–¡ãD[ŽÛ±Ü!¾“b”›X¼ ¼‰ÛgÁ p¡¤¦1Qâßù8ú$|V@º &`‘¤¯æ‰¡^æ¥Ür…v¨6\á/䘸èß&À6KÏ౜Láé£üLQÏOK•¬SD§8ŠØ}‹¿’C‚L¬fäÍZ»Ój\Ô’B"Þ531ò:šMûö`HsC]ÛaéOobž›®Eþ4P„ŸXâë‚|f¾…,;ÍãªL>ô¢NÒ›…vt¹È§¥g—ƒBÞÔ‚S7vÌêèœå¶®„éÈHqFm…ÞŒùÊÉ“ÊÛd  Y}"ø“«/*ÈÓ{¬NAÀ†I£‘®ŒkNÄ‘áíдÝÀ ³%ZÂ{‡!’Îå¢,ìäÏׯ߸•gw7/_á?bâ,M„hÀdú "3Êý«G‡ûâcCNM¸ 9ÃD=«¾PÏÊì°Z;GÍ •KÑi+¨œ|x¶‡FµÆ„EÚ O‰M¨§ª±’œwÚ—úe3‘´²€óË£·œ†ÓC—U@.+¼Q¦ü ¨&©Ùƒ'M¨$Û"<‡ûƒó¿¶ÐœÀ|U[(‘ìO Mޝ1¾1>¶Ð`¶¬á™xá÷Hpø_B p€mËÕz>p1— wÍþÀÛ³‰9ù¬ÊVóÛY$xÀ(Å0¾1ö-¸îfW-ÿƒ5­|€ÛЧo8âß8rL¼ î¥xáÉk*~0‰E¦+>rãtÆ$mŽd¡€í!!’ºÐøOÛ×Qàe7l³BëUi‹. ]%׌€úÈKu®ŒµW/ß½«\¢ŸÑzŠ{oT¹áäå€ÑáÃ1’À0,‰t;Y°þzn럛àCýõõ¯¿M3‘NNó€b`ÓÀˆ¦to°=0~»#(î`ž´ó凴ã?˜ ›~ÿ-ÿ¤é ãèO•®âuïÏP,~50no¯_Ý' Æhté¢ÌX¡$+0K9:u¡$ dÕP*KÐÀêÉöwÛõò%2i’ôµ½Ï¸pPoF,àÆ¨sàEºzÞеÿ ì|Cñä~ÀÀVt‚^6{~búzL²Í~߆Å02¡Œ[ /T\"¨]^¶—DÓ^;‹@pQC32ÚôBoL¼ÖB+bb\çØ±…k…¡é’hœÉî£7Q¶É¸º÷‘ Y^`±Ï‡Å7]lãUtM²ººš”eˆÈp£SÅèZf¡¯`TØŸà§šSPP«×ÙBA`à“_¿õ#xä#<\¨`öòtƒTü1ðâÐF¤À‘í´b+ŽôÕ£„º1H¨hØXBImY†'ÁÙ'kuüþZ£˜½}ûWAð×/gÏ×ñ,… N”bŒêÖÅé –Ý!àÞ2}Ƕü¸äÍ Û~Õ@2 ”Tmè#atCø½sÁs§ÎNí®ÑU‹.`1 °>¤?‰³ ÌT¿I ­@՗±”ç€f4èѽÀ+Äž®9ëu] Ödm1#1 ›ZaËÁ›þ„TNÀ)T?6žÄgù’TEÈî@ØŠƒê”½S=kH, £!X»Á¸Cãøçk–˜OOh#ôÁ'Éïì€B`éž#Oጯ‚„‰“|cßëáñÒb²☗N«ÐHèXf0ÃÑèÖs&d €ß½útvý‰AÏ_¿úø!óêÖÔœ“öS©Èwß¾¹¾»{óa_»hÔÛ­ÎER‰…wL–.XõŸÉ°îþ)°ÑψðƒÝ}æÝ!rB¯'ÅVQw@Ä~‰dþKÀå _njT]aGˆn™\¼>/AðCìÓmZ,è·èÞR|‹¬­H”Π|ÍÔ†Õøý,à©óĺ¥"B÷Èâ‡ACÖt“#ÁB;ÎM^оåc"sXà߆y­y¾0’h Ó†…aìg9o~yõæÓÝêÈŒfû²Y»L*§òî<“ö†aÌKáy1Kw ¦+rcÇ §™,–0ùWa-8‘ÿÞ|`Xt­êxw"É„lŒj¸öxŒa0,x²Æ-¼‘È)$"|ohb QkRZœÆF)§o­‡·å EhábWc¶$ÏŸz~ŸÂ¬X£š2&æa²µô,¥¢ªõ‹y‡©£²£‚؈²´‰N tïÇ™ ëRnD8öÝ߬^hàøÀWÂ^õ$ÍqZã$Å,MûAK ºXû*·OɸÊ ¢)>Ç81 gä !xhý¤¨ú‰"sùé–þâÏÈr)DÊì? íŽç}æ82 ü‘ƾ"¦æ”(ñŒ£––¤2çå#uFÐóûßþSÅ‚ º„²R–qð¼ë£'Ò‡߬þþ·ÿÚ-å!ñ˜·xÏBþ“AhÇp™@—¶ü=Zç88±Û±ø“aÌaк‘H0*ˆSüOІ6³·œÁ)sŠB‡¾ËGĦ¹,²‚³Èk1RØÄMáfŸ›VEН9ô2œA*žˆI1íàZD¦Á¨¨e‚(H°x§Ý Õ@2>µ{Ú%I£çk5[Wd`dOiç?f0Ubõûÿù¿éßÇ™l$ʕЫ *hã±!™f»“†ÛÞÕžÀãAÇ@4%Y1°žQp’î¤èùÃtú& <‡RÒc¢BøBïM`lÇôeЊô6x@3)njÑeY„l²pÓ]Œ>AݤYQA5ÝrW§—ÈWÏ^º¦ã å…i+H•áVŽL 2~åî#{Ÿ-EGNáŽÒöŵµé¢ö¤Ž;á PsB§“nHn—ã—#Ô qï=Ð?=óÜ¡we|zg„4*‰S>ÿìzSyë«»W··èG—×N 4Ò#i™pM\”NþHÎŒ> ¦V̘¡>’ïõ¸ýxPÿ$˜+óP5p âˆN(|žòÛ£IÈ@T)bŒZpßyý‰C¸Ñtr^"†PudN%6H.þøzõ%ÃPb.9YЇq•$ÌßÞ||Ï®¦Sa:3me2LYÄ^õ=ƒb¸ ¬IŽ+aŒr€b. Ñ™ *‰žæBËãòºC«rhÂl©ün,mE¸Â9{e3‚jjLtö)ÂxIî’U4† 1<Œ7Q2€Ò@{Ö¼¹åôœ£©7AºC©èPýNlR8¬ñޛ≱"gè^çX´è)ÊÁRTò ¡…¨‡è/»÷³·ÐÞ…€e  ¡ ƒ°æ™²•¡yÙv(.›ã2ï!Lso1Ë#¦5­Œ.o6Λ‹ZRyáw—™\nX«åÕ>H^€Ì„4v\˜†è¡lô j9ûÞƒHØ´ÃSÝ|H7‡v”*‘_ò)ùÓCÕDK ÎN€JDKcvÅ[Ë2f«=ž-B“OÖ-K =ô9°ã.ÚÛ½ˆ£‰¶p*ÂMß·‘«Ùù¼žOl:ÀÿG«gN8«PŠÇJÜÕV)Ó6c"²E±õ¹:Lcèx]X'Ȩ¶ÏÏGË…NQ§›AWX%ö1MÔ©~@* pL{ °Tµ‚POõ{IY"F½VSK^Ô*õFM„F u&ÈŽv±$ x}›íyã§(…HhÌJfÿýoÿ&_Ô¼ðR@¤ .AWT¸ˆÐ6£`zþ³MõÆùDd$ÿl)nÇy ¯†Ü_ÅÉ4ðù Q0Ç¢è;)Çä¯7ÚÆ˜ňÁÜÈ€óÈTù!Ç+¦|¯O )ZèÙa "m2÷Ž`ÿá_Nj¡àæ±½”´JFº)%r¾SÁe¿ñ« â#RbÐm@¾ºB*!&ïN‚'ÜÐ{/çÙ”øÄ3È2&f`tQÃz¦ß—ñ+0ödŒ'j✦:åP@H;›×BáÒä^]û\L®‘+Ï•Qctô±Ñ‡‰A2=Û‹ú,ÊAö„2úc|a«xr<3•A®³¹0W0.Ì»²ZFãü⢙hj´¦¢_-U+A†¸D,D޾¤$™£oÞ îgˆbRFÀÈ )Ã$pr„úz©túóÊdyÞ9›MP£ÌÛ0ª 'بšOf¨ƒh÷* RmŸáÃ’J=Á!zu~«›ÅaⲈÜj1Äñè+¶eòœÑjÇ©Ò6‹‡Ç‘ãP×a\ÈJ÷PAºôúIZQNðÖÍ*Ta„(BOpï¸òF'Þ©2³ýËÙ?O\RÕþ…ÞõÆ"Hô²æœÙoTÜeej: Á©Õ~¬2„Alºmï"m„H.€›?­Êt+l—§®Ýï“]ÛŠÖ*_ëÇ$Ù “è`"EâuÎQÔ[ ÌmÎ?_WfA…=ç íNcuØÄ'†¿`v¾%$n<’®ÜióKøÞוãš#÷L.Î}¿ÎX½J’4Bn1ÊТ¯ðT}ü“ž¢Õ)@WÅœgà™– Ly(ñˆ8€¹è2`ˆ¨Tìh/,$ û’'Å µMÐÑêïxì¶€¦ç¹ÆyuÐ’÷€ž åAøM(P2hæg»žÈ¢×ÒTj^à­ 'KÊ §5OĽ)lÝF‚§„ya¥Î|qÙj4/Û‰ñ;õL¾:@Þ¯:=RðhAÇ’ô*‘½‰I¸C ³õÐÍC{C±† ŒŒ­º˜9ï:E Ê#¾#ýc¶ÐJÉcþÉbåÕT;‹†q5™ë-›žm/_ð”ý‘†L±¯¿™x?ný‡ô$@*óœÌþoX J‚66Ù–Á}Cªmwâ]e¹Ãó²÷E½yÙ¼lÔ³€ê +üdÍÁ©9±*õ¯#VeÁ6÷«ÒÞQ¬J6-!]xÄåþ£\ü~ek‘+rìÜ£Qò—VÖüO',IHÉw¹³}âËK­<wMÑ( ´…I·”^uÞ\ýHÞÑÇu÷q¥(ŒzQ?oµ.ϳ{êÙ Ù`d Öy›s7 $2g¬Õ-=¯eý®û(Ìû³ÎäŒL²êðl¿Ë_©Hö1 hàxl¹EåÇpÁfÖ”Ÿ4‚•¢º•ò˜s'@ lôE=ð\4éÐâNˆBßÛ!»*8Tª~Jv%Ð$w`¡5¿º·zŸÉ+ò!9ÓÁôó'E:åÄÕM¸6’³/*G…šŸdf#YýÑI32ýÏä"WÊ¡ù]ŒãÜÓùPx- N8½PÝŽI¶dÚÈB­’åd16y2±V׿™ì"nžÌHúÞpf^ûTCe¯®.kù“7ÅŒÎ+ã5— &cÊ¿ €“Mq5õJuÖ˜¸€Ó¥KdU-Y¸; z˜dae5„ŽE–w„Š­§;ÆuXB]‘K!×{ðQ˜é(óYzo™°)Ýv‘Â+c™ƒÂÅÛl_?yãÊ+ºªJÙH¢ÌYo ¨97AN×uO¢€á‰…8]¡‹ROŽñ™ñ&}N" ¨:%êÑyóV¨c«ªŸ~€óÇŸ¿üã?Uêªæüpóúg®µq^i_ÕjUsïб–ÁogrZ\Û¹PBÄn,-Óâ¬G«7 éÿ…Úä°›’@Ä…r0b#'Wk.U£(¨°­…¡ÄDŽg%ßgOtÄ@Ç!*ðAÌ—Ž^¶9ÇÀ øÛë_Þ¿¹2^ù&j«Òhš½ñ‡™^p)\“Xo~˜7óF íõ#Rh£* ½²æZzD^ v9´Z@áG5wEñ_ i6]YÐKÔØJnRDyc7RøG5A3ªÏu…_°ÓÞ5:øöÕ<¦“nÿÍ/÷ß2 øS¥ÃT YiH*&±ábµµ¼a¸Bf:b¢}¯4 [GÒD0”š9\aŠ<`ÈXÅ"Q ]&éØj(‚$yšîôœáê<·Á`7;ÜáL2±ñBF£jùl=‘¢J2!= ®‹EºÉbŠnƒÃ'¯‹!ÜÚ…Ïü@ŽxE"Ï)}¹©ÿT ±ö@¹ž[Ñ"ý”¬I¬pV¶ÕåʘÈñôJRm>×<ãZÙ]rÀ5J Ò7ÇAh‡"B+Î,Þ,Éã$Þn×ÒÓYYzÁž„÷ׯ*–¨D>µdœ)™¿)Š0Š2Ȳ…aËê&ŠËœpÿx>orŸ×ØÏ“{óŠ*‹¹Hç^¿¹½“…òˆ®Í­×w¬ylD@QKˆ`×ã:.Qs;<l%PÜeK’‹YIaoCÀ«é÷—[VÛB2¶0LeÑô”ôRޱvNÇâTw’+4À ee¤¼²z N~+”-¥×bˆ¹Œ#@ÞJ&SYž8ÖìÌr©q.vþµÓzâöeê4;Úùy] ¡uÒv'€Zx¸¦‘H¾šb…ʃQ-ŠÔº_(£s…ku~=Ó«ÆkTªæH‰¢åFp…Ï^`¶‰ëöXÃï9”¹4 ë>ÙìE›²D~“°Ôp•Œ)ܺœ¤Á/Ã.£,_{6Ðä…’O°,<ÍtrPüåUÑözvóæÝËÔöº“ÌXlc°†7t|+Ò¤Ã+Fü°LAÏOëU°‹l2o¥M&A™]kµ™Äš5ép•·JÿÕó¹XžcùEð›ô(IÀMôH-Ð0»ÞƒµÔê‘Jk®pµ¬–5Þ‘ ”@°S)àé°e€úyãâò¼Y¯u ³rÂ6d€72ñ69LÑ|Fsý€I}ŽÖôJ/å— ˆ¿RÜ„¬nT<Œó…riS’½¬Ôu²]zÙħšXÀ4¯y>HËWÇ4ÒTÊXØõ§¨ŸÞÜÝ||jÜ|¼}#lp"ïrvŸ*ð´¥ùO"©_Ï*ÛœîÔWdÏ-(yÖœwùEÌp¥©w’¿ä7{ µÜlzg™¡Õ ›öx¢ÊU©D|+ø^WD‚ßñíõÛ(ÝRÊW}}2;}3ö£ ´ ÷õ…4¢¥‘Üp¦¯…æ½ÚÂq$W‘áe2¶*,}«¾ž'³!E$“s×ÙzÓ2~¡ §È¥n–Zc}~ÞiËÁÂAuÖ3ý3l5„‚%žkmÒáE°Ξ8àW:݈ œ`‹¤‚[N`©˜"(¹;@JúOëlqµÓÒ0̹ˆõÈU#²‰4;£f„ém ÑlS%0kºWuùŽÛ• 96ešO©¢yЋ%w9öÀ¢U"íí"‰ŒÒÀã"º*á>ˆÐÀÎÍ+rì<’4v™ûb€U ¡ómŽ£Œy¡g©âÎV3Ax l —<š½°ÖÈò‡V?M•‡N[F‰œƒ¨|$¨Ð ׿àë¨ÂMFcQljÚ¡èW,_£Ô³X4§Ol­hh™±qXÐï&®ÈU³âCI­W¦½rO¦"j}jŠvS‰Ñq)£Ýé´ÚV#9F7SÏ”ÐÞ>×kù•¢Ÿ¨níTk‰¿>Žqãîd€ÿüðó»wÑ \4W¨|v.e³¯êYòªÐ àÒQ*âöV ë©jisZP‹3òÂÒ.&q·òu7 ¥'ÔâèV]-‰*Fµ0¿2‚{}ªêO…t#M½ŠÅWÍìñµéK;E.–tÁ-ØÒ€¤…;û!•²©ÿš¸U‘¦í£–xfÓ®œi€åòñ‚s.wŒè$Bxçu¼ˆÑǾõ`ÃßÎÓê ÷f³uÙ‚ÿM$™º%tÎçsý4 ~1µ~Ñ‘Èå†-Y^¶…s< e-“8ò¸jw”¹5Bî8s¡V+ˆzó¼}ÙÉ© Wíåºú’Jßx-,Æ«Uõ;KïìðzÎæÌÎú©Ç1§ðû8 RfxQâgÎÒ¿x“X"rs“\Öú‡©×xmuÊ)dóÖq^ƒ3wÉN¦•#‰µ®I½Duâ$˜Åkrï"1/nãÌ?­<ú‚Hú&F&D½_¥mBÑAÛùá5å}IùQj ˆú²¼rLVoìÕrrË…<–†;|öL´uØV*ó ™Òª,ØTËTæê«Dq²óˆÔãdc7÷¦$‡zi®žÀýeÁK¦°hõÔRÌ(×;ÐkãËÄ–W7ôç»·X( c T…ÙjúrSø&JÛaë6°(ÁkTÓÆîdÈÀ¢²%ÂêÂâ *§¶{jÜEžPNI‰êE„ÆüÍTSË!ùE6Èò…€}À{° ;^ÂGT* ¥UÕ”êºÜ-V®c¤–r>:T^Šœ›ä, US7JQ" éX Šôl½~;š#®»Òš¡"¹µ~ 3çÑ–•·Y/1ÑùÓ¦Ê3È/¦æ“¬t#A)µáÑq÷áÕU Rj¹ÈåŽQdÜ΀'ÐCÓ¸ªœ¸•Õjª’~"¥/‡võ+(CÔñX"‹cafb`ØìiÆ.sª°µDÈTE-œ( ޶.¶`.£oÃy¦l7o¬G¦ýdú}mÚOóñ7û¡¬Ïi%‡ZZ¯Ydõ߈ÀÎ'™S<Ÿ"»_:iE©N aJää1øMï='¿ AYŒt±f;)=P\5E¢§ÚÆIz‹¥Âªéw­êOÝb¦#œÀ^`ÜYxCÿ)Ýæ^ ™w)šc?ÞºdÙûèöQ|Ðèt<™b]|TD¥âé$æ:äƒp´¬îáø¢ÀY5Ú*žè¨0!T®o¹Ù›Q¯À-'a¤Å'»ç5úË˺t/;‰}¦Ž'K ;â~Ý^¯7ù{@A±ë'ÞG×xã;&mãD5±^UIVªñ²E¯; lŒVïŠÎW&‡¼ü:^Õ·8*{ò2¥¹ €ºø>¶ä zV„Ùc\4™ ð ËžÓ2XM ÿžOÜšÍ‘Š‰øñ²X&ÆUñÆÎ$PκÛˆŸçV~ÂuœnPûQfÎè¬'¾ ÉtóP˜û ™ŽZ‘¡+«„P´´¨uÚWÛu\EEYZz)Ê­˜2 Å7æ¸6Öº §¨XÔª5n­Y­åcÉv>j³¤jÜ"lõŒ‰¡—ÜÖ'U+?^ékvQùêÅfT‘È¢ÍNGt’ªª) šþ#àd˳_ª=DeWfÈØØ³Qð‘õ“Wš [Í‹z­ÝX'š©K7«»¦y«àE–\B'b“Ë E,"¢ÁÎ× Eü«ˆ¤N³íEñeT#¬ŸÁ'„Ã;-Îø¸y=Xqä7H×¢Žm ,Á.r8¾kÊ×.‘PlYð ŒnAïãXÙ7H‹e#^ªÁñÁ X-oÜYº]êãØvUi‘1a¢1‘€%rÛ$8¢X§ ìR FÇ3‰Y'´8à\“xó ú{w0QX@§8úú눿­Ö§P²u­á'Q,–$R–HUL°áۮDz_RŠÎLýN­Ö¬·jÉŽ LµŽÏ›ñÀ*i-»tXÄdFžLÕ¤Þ_²^.UTÆõ±LžãJKÜ¿6BŽŒc³Á$P׫E‡13`> #¶7ÙAkl"¼hI Eš³«ºPRP5® H#µ|*‰OíšUí9¢"$í;æã•gÅÞPa|ìT B±Nœ\ʬàHÇHf*Ï­{5cCl=.A«Z§~Iƒ7šÛ–“Ø£C§*…5;Z>¨h@.Záù—J«Pƒ<ômٌۅÝáfX.öø%"úŸNþ÷2ŸLaBXR#S[ö ×Oýâ$ãtæ3쌎Ñ'O›ÎbåÆb¨¬p2Ž7 ˜]½û`³Ç€ŠÎÄ„TËÁ”‰1œªd­oV,M¥VÆV¾$9,¾Ã;= No¢¨5°í¹õ\Õ²sdÈLמ瓷^¾+‚î&¶c›>ˆ ¥Fk5¶£i¸àªêhec# 25ZÒaÈd]ANê„Ãï9ŸØUUÃ}{„³ß=Ž'£”<#j’ÊõˆgÁmPýBËõ&Ã{㯞‡:ÃÈÃÀ^ËV ?{¤¸èLlHýgÚü¹VXa(Ëž µ%‡Ü ÷”ÇÎ#”¸Œü ŠT%èMZ)ÔHöeuf*&Fk'ô¥lìc¤3ಠ¨bÍZVÚÔàH²ñ² “ˆÚÜsM¢?C­<»ê¥6•1€-ñrd”Œ~$¥Šš‰[ *D­=Þ'&;8µ‡wø`[dò0µ dþÛÜü½ÞVÚ—†Hqa£™T˜štš“GÁä¡ì`QjsCÀÌ–¡—8™Çøs4.¬ “¤ÿ¥ Ã3Ötƒ!´Òi@¤2kd—¸“ -*`Ïæà»@Êx3s„I†cúبÓ2?“ÉVH°|ì¼Ãs %ê$–GegÑ$Ï ±]6L)œñÅœµVRûZLûLS¯“sp^q+#®Ê¤ºÒrÙ‘´Ði½@.÷+ŸEeœÒatÔ ’1ت{ƒ¤Øg¤/Hž(AZþ‚Ô»è>õ|\'ɤ©€t‚Л ,ÒLYÔ‡ ½³S¢»O"+¯^û;ÄœÍ>„…²²œOÂéüYB¬ÙÔgé;âˆzˆ¤ qKqÅ@'‡§:Ño5|ÁÙŠ >>x¶Vã#Îzžç÷…sPz¥Ä'; ú÷OáýHSt¡ OŽ¡ã±O èÍvo’™ÜEìD×Ô=u†rTõKÝL†nÄÄYQn{Àñ÷1'“HÌ#Àç¤%è3W *ŠlRˆ{h I<‘× /<¢ætœíÀc4ódõ¼7G"d(-!')Šœ‡&—“õö|j¬*• ºV¨®Êpë‡Æsã˜þ}BéWÛýU8v¾—Bz”ïƒÝ1bÚ†Ïjßè Ûrõ¿ Ñïûï¾³OŒÿ=?ÿBöüê?ÛÿR ¥ËôNæt¤cû»ú‰ñ-,.a ÿš²´à눠t¡uJr{Jñ×ÔjÐ#º+®/ÖÍÑ-âîˆR:¼¤å#*¥\L*±¬,ÜÕUM"ÆZõf®fIé·±V*jÌȦÈ&!i’Ÿ]ãº1ö ­-É€n{'*1 >?µ;ÑáƒUøPí8^T´Hí©]ÑùÜŸlœØFL†C‘ðî£="z/É¡ñÖ[z‚w"v"—aÉ#þPNoZîŠÂrç‘6ÄÌ@p£(ÏC²«Éâ&éàøÞvíÑdIRp,»óâQ]¶bFl¦yjã¹éž’7e¥!“¢r\2¨í©ìú÷Ië/†JÑÉ<ž¼»¯„ª‚}oN”zh9ã+‰X¬§«¹)­B$^ÉxÍcæªÍN¤ÕžkèQaˆS3R#ep’_aó´l¡Uç7ØÑdÞ¤5‰&vH2ÕÝë\¥ÚˆdRm0 %ðXHˆñ9´:¬•uCGE4Ôlt*ÄVž­¦ŸZ…Dá7Ž®nJùìgº Åv4!L5³( †ÆüA H’W4ºád\£: $FQ1¶{{Hvj$Aбx̓5nýêõWä1‹ø»Ÿ;ŒQò¼¾²ØmÄÊ}ªž4;½6/h.È­S¼„–¦ýÎt‡sheVweŸ9}0G ƵQÒEbì ¾çØ=®Œ d|2­Ž½¿l6:絋V¢W­‘©Ó9è@oÌàIxr1t¶Ä奢åеPÔEÓ9 PÂÏe"̲\Q„õ\²5x`gPé{½ â$§ò8îÙ®’CŸú¶9t= eÉk†OÞÔò‡{补ɦzQù+ Mâøž¾.ÉÓxœÚû† þò2‹>5ž°=ŽˆvuúRÉ1õ9ÉQÐYYè|O“z¾Îˆ˜Ý¦1ôÅ>Óèè×d«1vÄt“›Õ³ÃEÚŒãäî}N7?§Éã0üèo€5öE›—ºqR?D2=ÿ|ýúú×ÂâlqoW%êˆp*ÚÃIlx ÕËøEVd4Ù …¾JŒO¢ˆ˜!s‘áÆYÑS×V ÄG©?»9ùúlkÚlÝ{Ø÷H\FQ¬ÒeOšE¯Q-&Qø4_ ¹‚hŸ@æ|™Œ&.í1ZexŒQDÈ•0©PeTPY‹ša{WLæýI‰dkþŠ­®©Ã?˜ƒFÕ3G:1G0‰ÆŒVÄ7T½éSá+²€&FŠ–nÎurì)Z¸S°ØÖÅÅe»yQk'²ØL݃ÎÊB—ýà˜d¢;ë[gaøôóíZ2`ý²Q«î|.öµ¥¦œú@à'Ÿè‡ü«·ra( Â2²o9|“.œÈå«"òÚ°Ñ`—;–P—ǧQ×sÄ‹7 |/ò½Ä*"›vã/vjõNµYû FMH<¨5Ú5xÒy#ž`h/^ þ¿QAÿÐÍc… 7`Îl‚Ùz±%²VÉÕŠ›$Îj ‰ËkPaôTKR,ÙÜGȤcuñë× ñt»fÊVNºvÿL!zlÚ~*ÅB[·Â%.Z¹”±ë r¸W%¼ø ^¨P¸¸2û ìGvT5Þ<†"‰ŠK´I=„›¹SæßÈ//ÿŽØ‹Iᜨ~÷ÌtÎ]Z{Äfá1JÉ009ʸ+ž  ëi#ýâÕ²H¾ÕŸUÌ·ÔMÖZÜM_Q”òku&Rè•G¾Ò Õ¡ãÎ\ÅVf0UUõ¡f ´Em”9€Ù¥mLŽÓR6*Û+ú¬9ì3À¢#±òZ6g|‡˜?n:iæh`.¬Cw4=LHÔ¬¨+ÿùñ=hé7^žx‰Ð]€I’þi$þÏÓ”$rëxCÛh§Š4Iù9ÏŠéô%ã†U¸ZWõVû¢–r®üµX R%~`¼¾aÑŠ6¢†´/Ì€>Ó@½?Íf^øùñ4:¾¦ú•¡¶#áF–£)ÚàÒÁÚYŸ8Bvdþx)W:³mß 1 ’|èùl»¼ ìV¶_Ð12ÞòÈ TËïB"¯¥NF‰È|š$´ê[ž’B8é[§¢ÐüüšßÆŽIYR$8" Ä‚K˜=4­XÜßìÉG¶­£Ó…C©„¾Æ]úžôZÔ&ú§Qˆò¢SóN>é§toeIfn G«™*<ô”þRýå¨fE^sËò”g‰kM Ð›(û@©L³c"}%ޕ1 N|zª><å†Mò%nSÀÆO;"·¥hL”Û9‹Ìª»æ|KgrjáëÏ©÷ãúëàËs!Q|^V"¨›Ë×¶¥/kä„,žŠ½§ê#dƒD.L™þä%ªâÒÿÙ£bÏž·ºàd£syÙ¬_$²ÙLmŽÏ1?Rë”®•Ææªž,ö‰FõhH!æ6²ú6•؈:çØÅ‹AÇ%ý¢gwQ›Ïã_(ö¹Ñ0R÷ÝX¼‘BžèM¨zzð»µÊ 7 ÷1¥åiajzFÛ~¢I£µòH*ÁA8f¨rƒ?é‘/9°Œ!ó{ŽV'6$Ã8s)ª‰ÐÀoPä ½ƒxh?ÝÝ}zM1¡iªDçl~‰×ÉL«“Èð±Y#mÜ^ê©è$#¯£¼ã„H¥˜H5j‹ôœF O6TD ÙhçGÿfQyÌv¢Šõ ü.잢»VU»¾évð¦V£TxàA¢‚Mì“»R¨ÂéOoÞ¥ä&"H´æÞjÑÞ߃œAe0DÏ_ål1Zég¢*ù+fÂL¶ ”1` L5|ã«S»o-vo|cüX‘U¬eå gñQÓYêI®MùžD!'ܳØn¸ÏÈL-"ÿ×ü z SN%ÅåÙg؆#¥=‡¡´áiN‚ƒVÀBÁó›ÅP_âÈÌœ0p³²ôE”|CÐ'fU¢ ?œg¼çµÞè`áÛ@zD³˜ý¾cv-¶ùêý"Èpo±®lÉ!šö1Xݯoï^Þ$ï(asXêW«YY „‹ì±B*X 4á,ØÆg§M¦BYëIEãÛƒ=NlÏZÙÍ^ôfÀÒW S>Ûñ1Rân’PU_(“Ÿ¡^“å©FÁP—†¼1œO¿ÀŸŒoÈÎ-¡Ö?ÀD/̨9ë'`æ§~-jëNÿÍØè,®YdÌ^! š6)eKkÚŽõ±R@@=UViæàì%þŒND.€ØÔÂJFº£T#ÆÀÀ½Go$i¥ÛWq]Ý<÷D5¢é_h3„®Ì·Â•žcüìy!þ­TéÙlîzQ‹‹ÿª½‰Gk1žÞªÁáÆÁ¶)Gpnûdí¡ƒwå'l÷³m¼ä'è1ø™`É”¢÷0”×Á“iÆ“4i q¨æ¼Ú:£’¨VþøŠmEäM©2ñc˜íò(™ÖS²¨’E%±¨ »¥ê+7¼ÎÜæbѬeòtNÇ/& éÏåÅn0øaüRSÉœ–Vó¾!ƒÀ£ò-†$•™ß=âw/ˆ~¥×= <[ ´ºZ°›¾Eݪ×Áö—†âã-“I¾"£ÐWJº.ét½Ã'¾Ö¼ó=SÝ‹‰+âö2Þ‹3D÷"Ë{§Z%ôó£Jk&æ.¿~uªZÄ•ábFýl1é­µiQ&"6—e¦ÊÒ\J})Ê“À˜7ƒ¤!Uq¥uçCù<¢Vg±W¥›/ŠË€…&ÊeÞíŸÊGJê¸wáÑLäH¹®xƒ(ì:v“TÙ„›¢ z¾eËvBõYÇLM†ü¦Ä¤݉öͯ>]:åÊËfþFuX6X¼½g)÷–8o$\% –¼QÆBý½¨žEÚ¥¤„¸“à}‹ ¯’±éTÞ|b4ÕLÝ çÊPµÃÐŽËïîE’Ñy› y§‘0È’t—¤{Ÿ¤ûN㳨ðˆÿ­š_b¢ŒoNEÝ­FÄÇ?- ­À@ˆé’¥?c"Øþp‘($ÊiJmëbï–’œ}aÀ:Pº˜Ý¶¼Rr3Ø\'iç²s¬(š¬ºä}.ViCÛ›w™¨Lmc“Kõ³`þþ`-Þ¿<.=‰û܇„<¥iª)”BÀ…€Õì¿TâJ%ÅÒDŒ¢•tö`él†­•d6-™]‹¶Å>5ž©Âç²U z—¬BVÉY¡_Ò4ŽURò¯—’ïÍ—£XLï:AÕv8ÊPsLã˜'r¶<ý[,ÿ!Éô[l3ü$öi¥ç9“‘»ðíêKZo†~ÌúÁ+¹Vîæ"Þ*¾Å¹Pì/Ì4䛬¼ýàÞ2û°ß›ñðËÌÐθ|õ™Ýáˆ<-.ïÌð°Ì”uE͉©²òó# Áv‡G‹Ï Ž‘]"´öˆh¬¡=³À–,¢VÝÌkÕÇQáà.hõ0NŠMPñh«_‰žœ¥xt@Ø:ÛCo÷¹ÌØOtb¿¤¹8béÇ57ø© ÔõYÄÝÎŒœnÌF úþq²…k7P6 £ëï«Ëy‡ãÇãz0—ëØá:—›ã5¹áâ¹çâ€6¾o áI©TÊUÎ*Ê;³ôΠ]iß(:ŒƒR®¢¼4)/̓mîC$’”‹8”E”fé…ñÍé¾1„Çä—ãÆi{ïR|¹’òþd5 ¤35nŸÎ7ö~TÊu”W'ÃÕÉÑÕ°ÑQ±]øÆîÂR[{?µ‡²Žòö,½= °o$±œÒ<Ýÿq)WR^¡ŒWÈ1ÂÀvg¥\Iy²Þ•=Rž•r%åýÉzDTä¾±t8ç¥\Iy‡²Ý¡MA³É)ç.¯Âª0Æ%#¦èP§‡µbUä¹Ö]s]çêVë¼Þi¶‰}çT¡T­Þz^®J†³‘2+ª×ræ¬Ë5¥ ³˜€0ÐJºªX5ZRÚPÔT¶èÄÌþ¹FÊØ3K´ÆÅŠdÄ[0 ,G”¨þýoÿzZ›Ñ|šZªl‚ÑÿQئÍ,hêî¹Õ¯wŽ^ˆÞª±©ëePóg¤ž‘’@º–>­O(ñÂ{@ÃØ¶zÖÔ°NƒRÃI6^!XÏDBŽ–zž”¨¼uü|R«ÔV\Xt× ìžÞplö>cÿf- «;–‰an|gÈœ£´_bM°ï L‚ÿgò/ÿ¦¬fA²Å³l(.Ù¦››Þ«ÌÛ¹düj¾„Ô³ù<$.ytôäá$\5›ïJÞˆÎßw™àçïÐß^Nj½}ë2mùÄ-û¢f{p¿f:C™Ž‹gùðwÔÜþEl¥ÃSe`[NŸêÍ3™âÞZ®…ýŒ°v?‹"án vêî«T±ˆº Û#د9½‘,D°>bƒâNsò!üäO*ôèÑ|OÍì¹cÒñ½7ñ±K75]‚ˆ¢' }cŠ"‡€o¬z+¯­>Æc‡Žv3ÇlðíÜ}Â^füt›µÑ+åò3¡%àóè/ѦDüÕ÷z¤3l« ÿ}ñÿPKE#E ›RbuPK¸P< layout-cache5È!@PÇáÿÛ‚þAœàÍM#˜©º,ª²ÍÜÂ)nØüÚ·ÏȨ¿$äE Ô Áf°€õC(ÙíEÆîà'¸o~Xƒ8ƒT Ý‹PK*ü]%\÷PK¸P<ß=<1ó manifest.rdf¥‘±nƒ0Ew¾Ârfü‚YŠdh”¹j¿ÀCPÀù™’ü}]ŠÒ¢UÕÑöÕ¹÷Èùá:ôìÍ8êÐ<{ÎŒ­°îl[ðÉ7ñ?”QîêF=O,¤-©p*øÙûQÌó,æT k!ɲ ö¤ŒC"¦›õú[Úñ2b,·”¨#VÓ`¬_Aáꪱ"š:Šq4v!Zlš®2 ƒñÆK»ãìc~ÅÉ|¯ø³¦'íüòì áä*Sð ­"trø5MþÖú çð}øj"Õã'ôÔõæ.#ÿ*ƒu³•ù15t¥êe™´©Jÿ]µõÌaýâ2zPK¸P< styles.xmlí][—Û¶~ï¯àQNúTêBízµÛìæ¤i}ì“8q³NÛ·ˆ„$ÆÁ‚àJë§þ‡þÃþ’n$x(Q»¶ód9`ðÍ`0\ôÍ·ûmä<`š†$¾ÍÆÓ‘ƒcŸa¼¾ýú}{÷‡oÈjúø& ~¶Å1sSöáÔÂqz#‰·£ŒÆ7¥az£-No˜CëB7&÷hJ~•ÙÌfi†÷̶0ç-•EKû–³Y: hg[˜ó¦fñ±-¼O#wE\ŸlÄŠû(Œßߎ6Œ%7“Én·ïæcBדÙõõõDPsýœ/Éh$¸‚#ÌK'³ñl¢y·˜![ù8¯)Rœm—˜ZCƒªi5}X[[Äúƒ¨µmæ²zç½zçYv‹Ø¦E'‹É нù±°ºµm‹ó– òi˜XwSr›å !¹¨¼€ B\o:½˜È¿ î]'ûކ SƒÝïd÷Qä爓mhÀ7›‡‹¸™jnÊ;ÝZóå„â„P– ²²wP€Ž—¯ ÛFíËS5ëšA#+ˆ3ŸÀPCwB¼ûjä(/hx^hQTpÃ(ŠS®d0hNRõ”éXHïr¡EŲ·Þ|›`åÑ`5†?FwÚi¯8ìò±`?Jムƒ-ÿìÈ¿9$·£{†èýãvI W0°4×6Œ+Ä¢>rR ÊØ»©¤Nºù‘lBæ¼ ã œ54óG”ôÏ“üp¨ÖŸ•VÑ âjþŠGÿÈœ{P‚ó†Ä¤UÀ*£’Ò)UÎ ¸kcÂ8ؒӸĒ„ÌW± ÷88ˆ[nUX…h°»2ã“Kv‚`( 4ÓÑíèz@L`8>¯ìq¶w„d Úê½ÄwœìJ°DCNôÀõ:»²V0Z¨œ’-L8V²Ÿ…hé.LÓE›Ÿ ›©Ô2p×$ŒYø¤ò{Éÿ ^g¢O*»•—²ÝÒœ,¾áÖm\¿5?¦ oO‚´˜ {Ì—§Ë4i !Ôw¹ Ô²x…²H-uÍJÆ5EÉ&ôGšWýí&‚ð§°˜äK¤›t:ß¹P?Dîþv4Ï}³øX!BpÂ\n nš [î†ÐðˆŽ"Îê-:™¸~âCÛZk¬ u*X"èÇ.dW._W(J +HE!Iâü.Êám€i„&’EÉé„KŠ, S*gšÂãs.Ÿ5oGuÙ²d`@˜Å|™ovF ©e„å0hš$)·“v±sv.w­7YІ˜kU†’$"°pd4ƒyxE¤Diø$y ß"¯3´†OÜÀŸd1£`¯ÿ–w3X„¸ï!.¢Ë ^ò:]¦Q¬kVUåšöa£)ªMøþ§z}|á}K9uVëÌI¯p–Æ“Í Ëñu@¶yL68¾×Pñ“+d¹Å´¾ sñ-í-ÉbŸe²Â¡—ÐoÀþ°AjCrƒ†eÌÍå¬-e“MÌb¨aW†ÚÚ¢¬sšoS[Qy²9ŸyŠ6s++O'ç0bÓÆ°öUãx‹ÂX,µõy5¦$K7–FˆÈá™.,¦ñÈß’P> ¸µçÓ‰P’rS>µa—’]¥qøRšï1N\FÖ˜mx½C › æËø8@4µz­¼¥\ñQ4êR-ãEDx…|äz…Q`8…V±àCžfv›»s)M†wðá7oúÛ’]Ýkó‰[DÁaô Ÿ®/<1]ß—„1žŸ‚™|æ)’Е˜Æc1£h‡ÓCΩÉšã¹(†àq¾£±‚¾Ž€Wb­â&5€gO"ôh(Ê1ɧ˜©aõi‹Rîù<¡ õÓýa½ËI1 ×ñïYÊÂUÞõ§Ë½_’û?-—K¥Èõð>ûÈû&×cðîU¯ÒRôF›ë!þ÷(á½Ðb@^Šz:…ÂÚŒCì0IåŠè9Í•/(" ÒºŸ¶+¾%þßx Ä` *›¨¡(¦© …;´d#­ätÕŽµš_úc? ’CQ_§’ÒØÀö®&J>òfÍ^Tq8³càªÌÃVs©=HÆ(~àñѬk®=`׳˯ »Þáp½ItI¢ Ý¬Eƒ(KirsÙÂ\[Jç ¢ü1Jòº•ä=³’¼”tÑà|b¾=õÕ]59ä’ʺÕmvÇ)‡ÑYô?ïÖÿü™õ?JÿÇ)ºß m)}¤’¾‡*x™#UA´¬+Í蜰H©åÑ›%X›‰€ÒôtrØá«Å­T*jj†¬¡H멆ˆ%â`õL!΋þVöâ$+k)=€•µLع}5c—"#ûèæ¼FRËW?èþ4”‡fWE­ì1Ž Šäâ©5Ë]ã B“ 󱡣õ£Ñík,ï8#h r#8*"ÊÆ××Ïm/Æ—ÓÙgl / ç úkùøk?×Ü_i‹ñeUc>HÝœ=òû«Î>8û‚ÿ9ðR?ÚXç~ô¨Èz0?z}½x~?:zŸš홸ä†ðZÕl œÇ)3 ”ãì³s âô1³7 ÷ÂÓÃÙo윮U­{/º×½ǨcÀuïE—:»W$ 37¥ÆÎQiE%ç$»2XÖ£¹úó%=Þ›†Jѳµ‹~CÍÂÿÚ§~äéÞ•°Ã1)6'ü8|S¿”/>%Ïd¢uH7ù6äÇ¢á—eÖæ|¢Œ¡wØ#Ð;•d×›_SLuȰïÈÈp>6ì¿ädž)|ì±-x0+59\ööcÑè—Œk§MÜc®Fh—UÔ˜>ùqn 'd`8ÔâðûlÉ̺2þ%<%qóÊb¨Š:ÎÐØ÷¢¿q/N2î–ÒGwÚs/Ÿ>&Õ5í7:ìÒwgù¨ãž©_Žqi"-û%Éä”8¾d)Ÿ:K\¨ŠûèNM™ _õŠŠAO«—h¶‹è3ExÓª[3]f#±p‰Ó>g~ïa&@,£CjçÙVo)–·ïaÃÃ;ãhqÙ1˜œŽÉ6@÷ÅÃC[–Ù–f{1Ôßrû€EµœG×—À-M¯|`òp=GZé$ÆïCú; D)ø}jÜâ=6çÓ'R—í%ËÈž_!á¢èݰ–Dgsª<ãÖ¿ç Ùñ­÷šAŽŠ–‡žZ×@–9§­c^RøÐï´PÁæTyJÄJ%MÚ…üI ¨²ùò‘9sN§Â–_óêÚ_êò¶=7E_s+бè²|á©I\Íå˜,V¢Š«âÊäWSøg1­\ü°ß—ï?Æ$Î'QY•÷‡ùGð~$ ƒ–]ð÷’äùÂF%Mq™3Ï@VoDî‹LMùJ¤)bý>cC¹œ&JöØ°Ž…ÉÇÚXš•ÃÙœÏɆÔ:m[Ëÿ—,ФeuŽÉ6Ì@(=ÝÓ]t±äŠ*¿òc»eÝ€ÌðX"ÿýš‚1ÅýcæÒ{Fˆ”ìO؄ͻ='ù¯¹UÚF8íSv¿EGçfÞ¨ç¶-]yK\ëÍ8—Á܆AÕV¬q”åÅÎ`ŠuÂ@@4ÙzîÏk;mT§è ÃÕïÆ…áéìã®Z‡¨Õ¢è}‚ù¤ðt<ÓÎE>³Á?‰¬ŽX 8b½1mHêã}uÓøYRFFqP±Ëus~kUü)£‰Ãë@P…+s}¼¬65~^5Qµ6“¤œº‹ ÏèèÇ—ÐÈ"3À9kª¶Â¢êW$ŠÈìbù(ïâ3´çïêG¯ÆW/¼–DuA©X½$úhì4PÛp·Ôˆ× µäÑ“­àM9󧪂Ùx:{Ѩ“R>µ§gWÁ¼ 柰 ¼« 䄊Ä÷³ãÑ„ÿ' ó¥wÑ‚sA©- gGúò3CúêjÑ‚tA© - gGúÅg…´7žÎ›'P“RBZÎŽôÕg†´·hž'MJiI8;Ò‹Ï éËf7m*8_>‰“¾þÌ`¾ºnù T€–„³#=›~VPÏÇÓ‹æùФ” Ö„S .“Lüyf0å âU¸ÎTv5'¸jŸr•Ÿp$_¥èKÛœMYÏ27ßm-RNN6Eùòaäe˜o+ËZ²ÔÀXæ}Œ2ùV–ËëÓ¿©Áµ‡ÇyÆË0lPW/Ï%hhÆ„¤a‡NªN<,m¤:ÛqR©™™6´0ö©øEÎn¼¢-j+Ïæyqþ¾« ­‰Ý·G?òuÆÃ¼–Ié·G½t¡^OxfÙßÕp?´ùRl‘¯ÂòùË×m ‹7v`i ž£Ü|²˜*M ŠJÝ{3ãJ¤ èô½w=¾j5iÕ æê·gø/èP²Zj³åÄæ¸1ijÜYï|’\ºw‹öÅVÕ¸ä )Ö‡TÓñt¶(ѯK»K~hOð‹t¤™†ÍyЊ?ÅÔÄ‚nYrt›[æ­„âF®yˆ¢”ÔlV§îÔÆ¸rUù¶£zÐܧiÌâužY­å¦¥û+¤m’G òÄ2ê×y+–…©c\8áº×UõüVÙor•†fõ@œ©Î†Á+qQSURŸ¸ƒ¿ûîí/ÿrîÉŠíÀ:¿àg¡œFœûû!)§³ÿýç¿úû@b*>Ȫ!êj˜î¸»{ƒ ïC¢"Î}÷'ççWÞ›¿ÿ ¾%—µÝÕO§Þ'Ãްψà¥3*Ž?ÜyWºÉ‚ÿΙ8F%ÂwVå·š´Z¾IMo…ê+ž4ÿ¨áÝÿPKø¼(7qPK¸P Matti KP20NG2009-08-26T20:55:512010-02-16T02:53:48Matti KP20NGPT473H06M32S998OpenOffice.org/3.2$Unix OpenOffice.org_project/320m12$Build-9483Matti KP20NG2009-10-21T22:55:42PK¸P<Thumbnails/thumbnail.pngµWi4Ôïß¶¤ÉXF$²=K’%Dš0öì„ÐÏ23²Eø1"Æ–¥,Ù—„ˆÙ¥ük)kveÍ2¦!3c†ù>žÿ9Ïóâyõœÿ9ÿWŸëó¹^ÜçÜ×uŸûú$Yšr€À ÆFpëÓÚÌÀÀÈpŽéE蔦20pZÃulâ‹vžhr=m¶Ûü0n^Œ´à¶·]mVìöm4¬¥!ãém¼•ß®pr||A—‰®É€ð­†Ä–Þ:K=·'úÿl ¶Wwvv677ÉË÷ö£èÉs]Ñ.fB"{yŸKFV¿b’æ«Ë­…è yµ36|yÈbµt̵;Р>lCZÛRv,ôuÔ[’ÎÌjb˜°G¯ùK˜H?Ò¶_U…ZëC9r÷ÚŸN¹Ìö¬ÁAŠÕ@…HÇßÔLXæD†%Al¾}"ã+øl A<ì=Î&n[26X\k²«£J÷OØÒ3¯‰r ŠËy„€ù_Þ“¥ÙwçÙ¾ø5¾'vÓbe_ª2ì’´@%yaÐèˆ8Å_›Ý(_–þ‚"Ø&A:–Ð3:Q\}”c‡$õÇr‘«È’±7k·7ýOðßåY«õ™µ¬AR?§mµ’·¤å–P‹Û,ÀGZ?¹•×v‹ñ2>å¡Úðä,âÁÁt¹$Èeô¨cÖ/Š‘UGžó‘½ÿ4Û_œ}u^þ ³b"©‚çzꞌ\÷ëŽØ\÷Ù‘€-v-ù?XÊžoÈÛ •€‹\kù»ÿ]g;J9`Oåýacè¬ôß¢ËÆ{›PÉi/1ÏþÅÑK£‰«6{C ÷Tù²#øÆ¸U •vR ¨vŠøˆÝšÅ\f¡f–ìÀ%Vß%#¯§?’¤jŸh2›í¼"·FÁŠêO wâTËþ¥vâ$½Å9/9oŒƒ$¯6¦¡3:u®ÿ½¢3‡:\ÚTÊáÎwÂÇwßýsÂŒµsâÁާ֍˜Í&v‡Z«Þ§ò¹ÇÓg4^s"ÃË*F]g¨Ö—±ôf…æÀ ç=j4e‘ã˜Â›×3•ªƒ.™–»xÆàRváU·–l½åóÕZ…øj˜Á+Îmh±D‘¨·‡ŸÖ:þñÞx€–·Òš'UãZû¦¾gv³m‹~­?ÛŠn`Þ‡ŽÍ’—ÉO„KPü¨ðáügõsbëAkc-;^!Þ`5ü_“`A‡ÛVl{'O¨ŠÍ}g•1‹–ü ™˜åô=÷–*Š(ó¢À©5ßW¼$ï·Øê^þ@ju*ìã*®dø¾gú+å›@<ËËâÁ,I6ÿ H!~YQ2±‡j™r´Pz±éÌhçÜ€ªÖC·XGOÉWãI]ÿº„E†¸`ib«ÅVpwxóLæì¯Th©¤¦ Ö)õJc-ãÌ«¾04Ø“¨œ±zŒÑ­åRƒÝucóç&®/+K•*¡5+8cÃÍõD&³‰Ÿ–Oy­¯Àé8r®‡wßÏY9ÌK€*ó_KŸ ©Î4øF¯ g.úMŽö£:dİߞT Ì¥°Kœ€/áœÜwÿ(–̪‘‘6B¦ØH,|ôOUý œšnQ3Ç+ó… +`O´dHïãÒ"R—¨ED‚ßåר ¤ióïÂÊÁRxذ·†¬i½“•c@äÎl!÷“/<7ͤøs}õ±£D9¸Ñõ'øcÿqú}ýö £ÊßU¾ª¸`I5Ÿóáó+oÌÂ…#ÆÙ‡Ò±%°/wìÖT=dX+GÇ_0ýVãjJ±´(ù²EËwjÛ÷¦NÈÀîv­{C›p)RXç#n;CRåÙ³Ålqf .ǘ+ö* ~*.wÀ}S‘Vv<3Eûü«ûÜÐ{u(- M§Æù¿Ó—°hçAîÉ2|w?´·xâÔbû,æFú’®Ÿ­c¶ëb{ðk´§©4Зv”>±Wߘ¡Tê1×pjê¥él@M÷²™MŽÿ–A7¨®sÜcëL~bP´o(óFºž¿ŒøÃŸ`2wEúHƒNvÞ,¸ÿ%â}•|1}®À!…‡Er*|²¢¢ä‡¾Äl]o%"377&Ìz ·>áâ©âÂÍÊ»p$¥1‹ž)«ÖmÞëRóVœä]\¼Þ)eV/ŸÔXêYHokV;rªç½ÜÎ[Pø;m³ ½;.P!´_(1©Ÿúɉ\Ÿ|»îôíîó^“&KR—ò¦t«s˜§¦DîW¬Å¢JóîŠÛÐ 4µºG5ŸœBùdŸ›•‰HÇ0Ï”ð¹E´k¤Ø³XM­o)ðЊ ÍÝÝÀ®ö8 ƒ·üùܨ#ÑÝ`£=F=JrÖçW h ˜©ÏçØlåÔ{¹ˆ†+Ö ‡‹‚½ÓbG¢WÝ„,Æ{ž£Kýšìn%Hk#ç&¶Ö Ê3*&Ú¨ß?O*%  áTÏ[ÈßéšIõºímÈp ám‹uiÜè‡ä«f1Üâí©°/öƒ4“ç??SÊtcÿ&¸µ—á¶oÝsU®ÓŹ*ýæ9° Árö‚r®HŸw:ûè[O.l`Ùâ¬Ý¯4YCrhˆÞ[dÔ…‘6+Ðm¹6FÍ?Ñ0ï@[Ù‹A$u¼G‰ËϘ‹ö¨œ`úÅ­¤<ËK%{L‹ŸkF“^ü‹˜Î²ý=ÎoVsXgîY¿i~‰É8¥*<øò¯¸,kç ˜`É9ñˆû@ÙÝnícÃÊìÝ‘JÝW¨éƒ‰ƒwO ±C#¦ýƒÃ_”œ³Þœ`Àü‘ˆ`†²ðô§êñÂfô<ì-ëµ$0Û¨°}®Ë¢ÐCÿu˜­ñù²ê—/‰¦É4$2ißõÍž`jDÿ2¨Ÿ<ü}çt HMßkúÚx¡ö%Q¸@޳}qÃÁ~]™-`0¹9Qnº¬%)³Ôý¬y8©ý¥ª=.ÚÚýîcŒÒàþ<Û:-€7Éo,Æ ÚL?«Éµó2Qëú 1¼E·E9¬þùƒâqEö\¨±qeØþÁŠÍ(ܲ2…lÖä%¥u¾ë¡œTcÎýŽÆ*)ìÌO1= 3ÂÏg× ±²SA-篸?dÍzk߸J¸ÌGB…[#¾PÖòù§,k†µ[®ôïÁ¯{{Œ<ï ._ÆL…ÈÉév •”°eøŠ³ì–€;LNÂ{~óÐFúûËÆ:ƒ$.6ͧFÌß’ÏD3L`FÞ­Sêq9ÞZôeÃö«’áwBËib íIJÙ"î¤16Šá ÏsÎyY£[æw©çÔ&œëQ]}¬ÌíŒßšÙ"1iI„ÛŸÊ*¿K£§_™”~Î!,Ôt» qêüj.²2tÚP>Ó,z"ñí:]OŸéú¬h­Wçóo‰ˆ¶ a𱓫Æ2 é~¿0,òçWo¾åuõOöLêsJÜÏ×,ÑÛl6‡~µ^柋YÌŒ^(Œ¾…EŸ>*Á O+ùùèr³ ”®²Þ¢€dÙ½¥2ñF¨v><ì©äº3z{ÔÙÅò6Ó«a#áI*VÏ>øÝWB޵vŽLcâ˜Wþ Áâ ó‘õ–Ñå<ü9ÊΑ}¤Jºî°ƒJás) E%ǯÐWÂ0êV”…]¢p™¿cž+„s›׿ÙtªýçÄX™Ê¤iÏP„ƒd"k®^äªL«gsÖÆy‹%sïAF-ÖB½§0ÖÖ0 ,Áœ7RâuJ%¶ÜªN½¬÷“ñ¦yÐÝݽ­„¦=¥Rzi çKè'†=Ênѧñ>¼ç¿ >t+»"ùor AN;!yè§+&ƒ±¾9¼^×5ö¿PKºÎícø ‰PK¸P<'Configurations2/accelerator/current.xmlPK¸P<Configurations2/progressbar/PK¸P<Configurations2/floater/PK¸P<Configurations2/popupmenu/PK¸P<Configurations2/menubar/PK¸P<Configurations2/toolbar/PK¸P<Configurations2/images/Bitmaps/PK¸P<Configurations2/statusbar/PK¸P< settings.xmlÕZ[WâH~ß_ááu"êÀQæ4ˆ rGyë$dìtg»;æ×ou‚ŽËe†zÏYätªªëòÕW®¿ÍzòBúœÝdξä2'À\îùlz“ôíÓ¯™oå?®ùdâ»Pò¸ÀÔ©¥p‰<ÁÇ™,¥·o2‘`%N¤/KŒ KÊ-ñØûc¥Ï«K‰²ôÊœúìõ&3S*,e³q‰Ï¿p1Íž‹Ålr÷}©ËÙÄŸîª*]ýYçüC‘~ 5&Q–Ïå Ùô{ædiä'×ä3åw?¼o¿|½T~œú 훓åemÚMU–Þ|ˆ?¼–ÙôÜ?ŸâzKéó0ó~G-B¼C9›fÊ…ó‹ËÜuv]Îî²›0Q…(wä{j¶Qpþêòêê0á÷àOg›ÍÎ ùóý¤÷f<‰ÕaS+Î)–)+Á~:ê¬"x,á‘{°Mú„P¹³øÓ€„§>ó`Þº³6gYò Ö‡Xìæòº·bªTÂ×ÎÖ ß?”[sï¬xùõ€üÛZ/Wç…½SOú…ã—K"ÖL…'¢»ÛK ñâ Ù®6[~yUüz¶Ÿô1çAe­fÝŒ u05É‚GªÊi°Õâ^JßÓäŸÒ+œ¿­º×ýbWq±ÅöÜž¾©ËPpx¶À {˜¾áâg”Ùv{ \›`§Ü½·¦"AvêÓd-JyÜFì'òÛ$a ô@E«õ~Œü°¼4~O“ :`k÷:@C²mb¦=ÊfIŸ°vÄ\%á4µ‘.hf«Ýíhòû1Ò€—Ú‚+¬V›‹Uì=†éM$ÚƒÐ#jI9 %¯T9b§Fü‚âAl,/"á²Pñ‹Ly4½ÿ3›ŸÇÖÿä¯s6ì ~„ÒýýÒ‘e=Züç÷;Ëšõô§‡ÿzAÑïÖìÜKÏšWYeAF¹ñs½èÜ[ çü!ã÷—çnèä ÅA­¸ðîfä¹ÓxÉc2þh÷ïÎÈ^Œó4×쿼çVÎ #ï67o-ùXãjÐzsðÙqm{µiññ{§áÞ·äøyL\÷é~žŒZ´Ý·»r×É#¯6,$öu‡UÎ<»%óÎåà¼;s‚îÌ :Ö f³ñ°B0¸ìô;¸«››Òå.Õš% z؇(`o1ÇÕHl±·DáU„maëÙÄq&}Dæj$HøÄžœïmnÂr+ éb AhÛïzl…m"H‚À½¸ÚGW‚S¢PV¤x —Úá”q¶/¤BT†:²%¦ê¬ˆ_léx¥?{<îZ#Ø9©šœx] gta†ô¬FÚR=…‘9~Oøw¨±³½[AâäXÿèâ“¶P%¡Šh-ˆò‰i@5à7ô“•œ¢§"vãT÷nYgM_šhD}†éžX•ribgé\¬ßqô!é^3òÖWAÙµ^d·ý$¥ü7PKÌÑ•Ô"PK¸P<META-INF/manifest.xmlµ•ÝNà €ï}І[SÐ]™fÝM|‚ùgô´#¡@à°¬o/]ÜVuWÛ; ‡ï;‡ßåúÐêl>(kJöÈX†FÚJ™¦do›×ü‰­WwËŒª1Pqjdiž çnÉ¢7…… Ba ÅP,¬CSY[4T|Ž/zÓê.»€k¥1O¾Ë.2¬äÔ9,8§•Jyн©øÑŇ Nx v™=¨j1®£Ö¹Ú•L0qS½@¤B®Ó¤5Ô§ÑÜÆÖ¶U|wÝ ¡³‘r r‡ÿPøª¾ÿ±ŠÓOQ“.O Nc±:¿c[$½Ûìb»5 ttjrgš©á“ð^¬©UýqSÃB€”¨1u­2z?î,ÞîšEà¼m<†°…™µ¶@8WöÖE—Þ¤8¾'϶0d­ž ®Zh0ˆgE-¸™îÁ‡cv  8æP~ý¾B4ýåäQq9tü-if$Jßýùi^Šo¿ýêPK•'dh(PK¸P<^Æ2 ''mimetypePK¸P> stream xœí]Koã6¾çWè\À.Ÿ¢üˆ½- ‡¢·>€ t/ýûå )‘‡´Ü]GLb,Àزøþf8ßpÈe{ÞüûôOÃì?Ýë½j:%š¯¿7?ÿÐüퟳæëŸOÇ×'cö²1F5¯¿5?^xÃEóúÇ/ÏŒ3Áä Ÿ™vÝ3Óƒxf-3ÃŽ?³¾ôÃÎþz€WŽøôÄÎø_•ÃΦç¡}f/øô)gøø„?pŽ%ãGïôSc¹íÐ=s‰O±T®|^¨Û}äÊWÜ»G66ÏÍàÚ´Er(Ò7ñÄ/΄ÚÝ[Eà·.úMCwôðëëOO/¯O_#)ûv/ˆ¡äG¨xl*t®Ÿú`KÓ6åá“kÍÔ¼LeJ÷û–ªìäÆÐVp†äG Ÿ¹†f ž+×è}ßÙî+X4"(0$vŽà¯Ø9[‰EÄŽKè«Ó8Ð&›ó ¯½ èãôG4ŒïÚ!pÅáÀ«gW“…Ãø®r¹»Á ”rOl>›{ˆM³eeºªÛ}×´¦·“æ»Ê[7†z0ЋhŒ=CK$"̃Рrç§I!Š„Çð9úb±Tl€îöz1‰" xÈZiäj.Žl•ar)’ÉØ2wñFÆ«¡¾+šì×Öó\IRƒëñnö>5ï· „éýH‘æ_¸-o:Q‘9ßCi{Lþ쉻‚pˆ£º²5øÉBAa)ùcFH‚…îÒK––bá>.CdÄ%\ÍiÉòþÐ>SãÖ3÷y“ÿý䃀Z"å`b¡T†A/å#‰Ãä èšít]“©xk°<’÷&leñ v«xHVäÓ„uuùp'¯¯Í1¼MݶÑOõeoâÈ[v¨n£÷“¼%š‰‰JB)Šv˜J”yqߤŠâÉW¶Œ££Ÿß—sºé[Oý#¹‹„”e€ÀA¢Ñ‹,™É"K^\žáujG ?ùÿ@âû„gÈOذ^‹|W…PMÞzRɦR@ b)ù7gìKUçÌøïë_t¸º2Éàoü@k†åwuûLfle>® ÿ_™è—‘ gÐJÆ3­t¸²}›gÈu 3ð^Œ-›2Èb3…NÔ”áKóXyÀ‹ endstream endobj 3 0 obj 2581 endobj 5 0 obj <> stream xœÕY»®#7 íïWLÀŽž# 0ðؾEº ¤X¤Ën€²M~?"©53’ݤðúΈÅÇá-ÎrúçãïIÄ6س™¼QÓoÓ¯?M¥çbúñÇÇúüpî¬'çÌôü}úùSNRMÏï_/B %ôb/Â,'vQ1 ·œäExø#,§øö KV|zwü—êå?ïË||ú ŸRàã¾5ãW…kHZÔ;/þ"5>E­Ò$YØ›¾J“6ô(J¡yI˜!múUJP™L¼I—Ô¹º;­ò¨U^ágï,Ç.¿=ùxÚìF>ŒÜáãžç 2D‰øXÉž^;Ÿýä´ˆ'AÅj’șçwpÇóÏ#çc‚‰@-'sj‘ “É€y" _Ý‚ùdÀ)ÑĘO'éÀ:º"…_£ÿURqǯsª¦¨ÀW1­dþЇAÈ`ÐKR+ ®Ê‰eJbÁ–+> M00¹†žál7!QðøZIGªtTÓª4µ:Ñ ùHEbø!%´ƒ¬R©bK}]1×è±9¿½'ÁGª?ð2l.I‹Ö¢¢Ž­J›s8<ªh —1b­uêŽEšZDYœ«QB¤PÇGÊV•ìq|0Ga)%CŒ¤ä“[D¨…kT€êÏ'%XªÑg>¯œ08-jÜ0“, göáì¶Žc šm*€ˆÕ¡©4¤q€,5”R‡$ÁÎÅs6ˆ‹ªŒ®+C{h沟¶åi‚å Y>*¡ð¡pHêó6×”JŠvIJàfP›HF#óÎñŒíZƒ† !.F-A6’šÖ;ªçªYÜÏƒŠ“Tf#Œfà &\l9r@: ˆQêQdÑfø$k{©¢}Ì’}®€úcp¦är6Öæ&¹¨¢´§F[ÜÆq ñ¥F‚ ‹y¥ôüWÉmk†ÕUÒVמ¨·±Ã‰Æ Tè=ìR£¿5X6ÇP Rê5HGu‡1l*WÄj2zp+F@´aEÞ ¯Mþ¹æ0ФiW­sWw\Õ¼ká.žT'ð¢P*Á‘+6KD(lËT1“™ª[E¶ÌãfNãŽUµÎk ?>Ñìe/Ñi-½¬–QDÜ&[¡Þ™õk±ëªÚäÄ«šþ¼M¢˜d¤ÄàÈÔPÕ#æÉͨz­ CZ%Rwƒ(J7ˆºÛ&ëÊ ¼ªgVŸ8bBö>3£rØòÅǘ]Ü›;ÊÉò{lfBQë2´âSü4gkÆ -q%‡ u…ʼn³a@즕fO˜ù¾Z‘'œ )¬ãµ³€ÍÏú£M\¨}ËvÚ†¼›X2lóÓF?ÃüNU´h‹`±ò­tAå ÃY·Ùyüq¶(SßÀW2F'÷v a (eºè¤ç˜Óìg=I1Ìi¨ê"0ذ­¸¡@¶?¨#®"z‚O*Êr)z?Î@U09a—i&¢†"õÇDôP¤òF&b†"z>Ù¸hYéÆE*`"ݨƒˆñòàðݸ‹™È0ò‘‹€GÞ¨}äÕ8òFì#¯Xä¿Lÿ–‚C endstream endobj 6 0 obj 1793 endobj 8 0 obj <> stream xœí[I‹+ɾ¿_¡³Aíܳ AKêwðm Áã›Ç ž‹ÿ¾sør©,5ø`ŒмVUDfÆòÅ’!ñ&/ÿúñÏ‹ÿÙݾ™ËfÔå·_/üÝåå{qùío?î_?¼ÓïÍåë/—ßÿ”©._ýÓ»B }³ïÂܮۻ°7õ.œð·«|[üc¿]ÃÓøÊ=}ûÏôÿôª¾]ÃçóæÞÅgúögü”"}ýH¤LœÓ?Uzg”6ñu·í]êômâ*M¡kçJSÞóW*m¯0‹Û¶ü3°”‘eÙâCúÂÎóêù­-±H,?â³ žÙx{ûó×~|~ýø¥“¤ÞÝ›šˆRÞãÂu«ñp;!p³áSò¼ÚÞÁbÆîon¶Ø#Ë0,ðŒŸIRQø"oD‰ðµ’G|­{Û.^«p’ÄX]¤ÉŒ?dÚ``{@ºÙ¸£éç-ŠTÜÃ>tPHZII‡q?R§39<âK>|ć:šI$ÊDª¨Oº<ƒThÔg<ùl*YõÕø…J7Ë| ¹ÆÏ¬¨ôéä¡(¥Ø‚çûàU¯Ò¼Kÿ‚Smôv±ù$7úÖ¸îPá»âp>ù—Úé‘*¾ÒrHï%A/ kÚðÇ^iŽ™ý/jbè磵ë‰Ò™ý¼,R± ®~+eqx†„ŽyB RqŸ ˜¸©¼q…R‰G—A.ôˆý0@Í„€Vˬ½±òÐ!­ÞÞü íÈæëï‡Fêöím0²X5 iXXŒwYHYøq£Ñ”×öjè"?+cv™Qùº@PñAÆmWOE¹>¹>n¬ÞG°…«/`‘-ùQÏ‘·û(öhòŸ?ÇˆÑ :8ùÊ¿ÞÕß³BŠ*æ¢EÙŽ'ý‚0D9PcÏÈ•bÛ,’ÎÁ¶ (žƒœŠšHšÁ]<ȯÈÂ%ømÆexÝÑŠbGzP_¸f½Q>!¿¢ä]®ÊÊUHó­ÈF÷È^±ÏUL–I"é3üG'KÏB™a™>“Ó¨,võ$kl¤[eÑkfHlc÷ ×Ä»Q+žÙÙ™O;â`z>Š\RÚ– £Ë¡Ê¢Ád‹ú¨PMf¢ ÿ2jX“ø*w­Ÿë¿ºã‚Š$xi³¿²am‰rÇPZS9z±Š‚IÄpcv"/±Ä¹îô¤ó–ºÑqŒI\xYÑþ£Æ“ó6³×ú‘?ÛDöA#­T#" œ ‰Nêûd^Ë1È™EY>;¨3„¯ùúhQo" -{“̺=ôÊ]MÉ´eZò³Æ±Ñ”÷¤ª‚u›Ñ¨M=Ô“¡µj;pÑ­ŒY®‘ôHRmj8ˆÉwÚJuØÝ½¦Ké“ ­^µu'2娔Á{³á†&Ë䌥¡BŠìØYÁÆX Á1ŠG(éc ß±tm"ƒÎÏŒDè13óm4îRZÊDJ)­ß,2æblω,Þ­ªÃÇ£—¬¿¼“>òá]°šk2W[_yŠ$¯Â@&J‹·}~ĸ@@¢ ÛM¹üùÏ_ƒâ¨{•l‹ÉWKÝÆ ÎÎÇ^ )ɪ”íAÖZ²R‚rqëô¸ÏP?C_7œ¬óé(±öÙïõtÃè_bT>¨¤Gqë¦G9ùf93Ôà\%ò ÛW yTõ‰¿Y·éÁ E”2ø8¬à¹à%© VÏyäÒ¦%GYË–ôJ²]äU‚K4åu€G-íF Mã0›“˦Â-‘E ƃOBy’(‹zŒHmƒJÏlÀöèp$|’=×®­»Fü©6/BgYpÁ,“I•ûOí̾â<‡˜˜ÁT»!Qþ0¾ ¦.ëÕ¥®[•, yÀRn½(:q< s:ÄR~%[oJ>jg/ÚÓcOJ³ßÙ½2€ô#$ßO‡cÔåq³¯`¾;óÞöï4̳ïÀWSÃ^Öð£ÂÏÜI©1¾¿†VÙ7¾á5ÿWñ™›þH$ú‘û~ÀPYÖ¢&ê±yô ëž³\F¨1—ùxÅý&„/»ŸäŽuÌò‚KOMÆgä5ÂÔÞ,‚Ÿo nôש·lM@)ŽÒmuê+"ÁµöG_ 2¾¦ú÷^ab,DúæýÁ?³[å.u½-ŸøÛ á3Û6¦0ƒ§xâÆã¿ßê¥\ ’xs¨5RX™5õ›f3Ü™¶ñˆ%Ж“˜TÍ€~<ÿqvŸeéñ˜pŸCµë:v·÷‘{[“e;ÈþÿKÀÑë÷ 6¬¯Ï6j¾¨Dà•W«9)<Ñè¤âÿ~´Ãr íÚö3ÜhX~¦òGX> çI—pj ML ¥A—^[ùßzÃxHt§M\dÇSå69x… Æ}¾VRr‘—–Z­é²o§¥ôhgeä˜÷i°àÜY˜úéì”;Æ\ÎV`<Ãúì"ƒ´]±wnÛ…WtcÒ=o$Ø·:[¬ë5¥xû9 åņg«Éo ¥¶±ÞH¾y=©Ó•ŠrH8ÒñÚZƒ›þ]5fxjAÖ—:R¾g§rê5ÒìÈí"©¥Þ•y}»B–H‡¹PyÉÚÆ è²ö}è±¹q•x‡çiLì¡ê{³:è.õ žµ]¬Îmõ«o¥\ÇÅiÈã(æ. Boà Ûy, <׋Å}¼!Ü;‚ËɦžÓm–µ“e÷ÄÈàRtŸYw™»δ߾8)lNâAwa»cÒ?› 9jÌ–nC \áÕwÙˆaÿíµIBk™‡ˆt[ -idFzÛ8"Ù”B†;ÏJ ûˆÝý *Þym%‚2f—Ó6Ó8¥W—cè&ƾ Øž–g6¹Å™ÃtÉçÊá¶ÿº©J£ÒámÛ™3\‚’†g²D¤h\ž-ø<à¶–!˜.’Uâ™eíKfíx`M¦sÉ{Ïñʼn!³¨x$ÍFíÕÍ[}’6aÕª'$º˜‘xuVýÄÇεû(q‰ö`vhB –l/ój‘¢9ÄÙe Ë¢tèvHÍDz‰Y`ͤ°¾¡Ð­[ Šw½!ûSi-†PSA3ªý <Œšc½9ÔÌ S̾€µºf Т)7£"Û+¥T=‰ùÀ*&% ”ÉÃr÷òÍðÚ…)|yžÀ6™W…Q¾ÎìZB}«hà {p }«iiÛß•þdÄF+7¤”/ ÙL S¥™·¼û¦nÝnÃÇÝ*¿HPèÚ1PHœ&ëɽöÒw–ó™]Ówtÿ€ã°&†º¸[ÑíOøÇ5÷JOC‘c|ÂM<šF‹ªÓÙW¡íÃBdn….VDרLfs0ûÖÊ ëòQ¯ÓŽÁ.NªW-õù50Vhã±›ÉÞ“žÚõ8 ôÊ0Ô罊órŽOaœQï̤kö"kê8¦KÖ À™Áé¥q€»š3pv¿3‰ ÌŠ~“$G™Iø72@â–$ü# 9’x&áŸAɶ$©ãí@°/ xØ™Ht0© ω\‘Àˆ'¨% OÉRó4KÍØ,5ƒR@²Ô< ‡ÉRó0$KÍÓM2,5w…DbÖš‡ÛB YjÞ(9Þ¬5WU@²Ô<5¬`©yhYÉRóÐÙ’¥æ¡·$KÍC $KÍS KÍC9J$v­yÈ]d©yÈr€d©yˆq@²Ô¼Rã¬ù_.ÿ†^$Ô endstream endobj 9 0 obj 3340 endobj 11 0 obj <> stream xœÍËŠ,»m¾¢×ž”ßU04LwO/²»p ‹]nYr7ùýØ’,É®*WÍ9I==U–,ë-Y3½™Ë¿¾ýó2埰„7™½½üöëå¿»üƒžO—ßþöíþý[Joî’’¿|ÿËå÷/s1öòý¯zŸÌd'w ï“¿]ç÷)Üìû§t»š÷i.,·k~ûQ–ÜáéczÂoXên×üù¼Å÷鞾ʧ™àñ^˜á«…5K €7Þæwãà)`5ž`ËÞøÕxÚxÁG È#d… èkFi J"ña¡K²;®š ü(ïfõ.”ã„ÛŸ¿ÿáÛç÷o¿tœtK|³¬4÷²q%µná3dl!Yñ@j˜¼Í|XÞâÖfäaÞàY>>S…ùb§üØš=¼!¾Í—äl> ¶ãñ‡­ÝC¡h4Ï "ùBCºyZ7ll~êHQ8ò½=3e¹à²,vâÍk7÷NOáëqd°X—Tà}æ¨!—/Á㎵jÉZ ¸`óüß2ZÀ0dš±, ]™ù NgQ$4 G–¸²ÖÙ„vð “ñøçkecd ÿP¶’WeMŠ ƒñ¢6¿ sgæ%ê®ß¥Œ/þ¨ée,‡², …uÿG(«_~Gi¾ÄÅdÏB(„¢{ßÿ¾µ|)zªÄóEp •áù¨Šåtn[Ü^þȬ°ÏêKlP,@©T›¾) _ÁaFÏF™=¨ñ¸p~÷öf¨~b‡ª:OåÜ”™ FDáÀ«]ŸA/›2Ywõ²QºŠ>6û. 8žb5÷“±“GQ 'ñMŽFgÝ×´8£!'’L¬2YK&²` \¸ºS=ö†‚ij/|(¢m¸¹Ðšò,úúîA6PTMµ /,„ŒE©ÇIÁXÂB*ê³Á__¿ƒ›ËÑ»èFáˆaÇŒ—F ̰©z§˜™)ÚBÁÍoiC¦ÏH ¢}[.S5 ‹¨FÕžhA ’-ääå„K#C8›ãn-‚uÃ6ù+'cÐG{‘H´8ãò|z _2@h °qb…½MHé¬A8{-Þ«?'úÇE ŽW¾PÇŸàîè! ¦òbV{à¶YQ•¾PÖéüáoaÏgyTÜ*£ê1àj3GǸ؈± —PöèWÑZ¢óú¼ÜÀΕ¤ê(!x¡ ~"}-êN3 W¶Oû)‰sIÝñ)d¡,ÛâJ¼G¶è\ël1ŠâÑ_*eú„§kôÊljŸm¦7ê}åÀÜ+݆!s"ܤ䪢GOE,Zš] ´½WÂå+@çAªºÇ-m/§¦°QpCÐ&â9äÄe{o¤H$}'ÆÞÑu êÁ©lÒ$ì¼Ðe" Tð(Ѽ¡GJd–·¥Ï£ZþW§Yê¤`Ï-]ãý¦rª¥js®Mˆ­¸¥h¨‡U°¥Z)–uX;íðÆ—£VœÎº[c‹)òz±®'`íoUºC,p\ƒñcŠŽ~]@ã§}:8‹›¨v‡ÐŸ¥xÍ‚Î7•^ý¦ÕYi^ÄÁá¹Ã2έñä B·f–aHÚpù¨eœ‚ìé9![iâãHÔ¾øÒÂéäÖä”fÑ|ä ɹv~RjÖH §7÷µ#ÄÏÁR|¶¯ý(/2…¯ž–ãN»±ôìQM}¨©åY5ˆsjʵ’WÝ#å­Ö Æn|©e293 ©‹‡Ô]e»…”s ë¦ÓÉ I[ þ» ‹‚><€)=¤/@ þŸÔõäq§©ÆÙ³ÇˆÿåqëZlÕÔµe™¿Ùÿ4kÀŽýr"ò;VÌ÷៲gù9s­§J U®”Ú°Á+‰'¶VsZ%C[ÓÜ&óKö‹qŒJ<•–nœ!N‘Å ù)”þU7¼Yâmô©ÛÌ—šϦèU©mâ6(ƒfGõqX‚ S¶øq1ºfð.­ò3°pcH=«fI—ru½¦üP>xŽÜm×Eq¼X•ý}™j©ùEì-:H7iÝ…:Ÿè•Þ®Ã2ßÚÕ¹‹§u¶¾•Ê”[»}7¡^+iËŒÂt pÐb××¢ê\#Aç…ž‰8hÒÊ‚R'›[6‚“éÙ£¬QΉݣ tQV‚>hxøÉ®ÒÎU×L7ˆûpq®Á‹¹›Óù4â‚P×ÐUŠb.)ïÔ\1\]à%Q]{õ½@oxY†?×X¶0oôdá W4ÝÊÒ ™}`Ë¡¨JÁ¡TE0S&Ss턽cíh.e¸¬ß¸¾¬PËÖæ°i»×QBã’[5Ü *Ê‘ÜF"iÒh3‘Î0}XZó]«õ² [Ó¹®ZGÚTÎÀ*ëCÕÒ;ëâæoôÈ‘[ROÀ•M&19 Ô:Ù§íòeŒ€Õ̤»Ç5ÀòÁ>õýcÆž_åÝæfgÅ—vç±tW²:”n\wΚKàÎ…5Ì—}Mç¿ÐìB*‹bħ›íâÜ…¼X½ø¢–ª®{‘ÖR=TáaèÆDñI6oÀ>çw鸵ÜiÖ­hŠg{,!ÆgŸtÅWc0"°´ÒÖ}i–¨~礷‚Y¸²¯'+ت„ôÉqv"/t=ÊŠï[xaÒ»½; "Û#×=C?°ü°«9ßè$ˆ£i/¿jîPT›ŒÝð §*užef¥.¾‹õÆÖÒdÕRbÕâfàÑMQô â[dˆ&2 é°Ñq¿}úÕœðecÚ®µZåÖ÷†"ä‡níÔµŸõ‰d¬MéK­ ›‹‹U7ß4L ¹Ùìmõ&ÔÀDžËå®cmû†ëÞv?Û«ÔÔ5Q —wžÏ’6¹× ŽZ«ÖO'o‚U·«ë.#WÒ~— éÖR<# #«•TèÕ1«íêfj Óx*iù°§p‰¿í:Ôç¹ÉI 6S[¦ŒOa™èæ’M`‘߸÷ôå¦Ñ2” —]UïÿA×J0]]¿e{¢ÏÈÖ 8l®eßæP³l\ßRÇjI–µo¸_qÊ=¥®Q¹\5ºš1ÉMï¾÷ʦ8ÊADÆ¿K¾œ”o gMÚÙä‚*4/ÔûL­oW˜Q éµú׺eѳÈås‘JÝ,BMƒŒbq ÊYÉ> stream xœ[M‹4¹ ¾Ï¯ès ;þ,WAÓÐ3Ü6ÈaÉ)ÉB6½ìß-Ù–d»\½á…ygª,H¥G²K]ôé×ÿžTüç7q§Õ™Ó/ÿ8ýåw§ÿäçêôË??ß!\ì)wúþûé÷_ú¤Íéû§¯J+£ìÍ_•»×«ò7sU‹ ·³¾ª5ý±ÝÎñí=5yÀÓ§zÁÿÐÔÞÎñçë¶\Õ'<ýJ?µ‚ÇOx¡5ô ¿h³%Iý.·õª-<…^µË²ilüU»<ð†¢L/w–¦¡}þ5v©S—yŠOrwFÇV+t]ÞÓ»•½ói9þö×ï?~|~üÐhÒnËÅ T©ià2Õ´¸­®!öæãOM-ž8›:½Áœß.Ëh°'ê0ðJ?>ASIù 'bT|lô^¿~¹¬§`U\ tlNz‰húþ)õ÷ý¯‘HX#ÀF"?&ù×”íha‘ˆìÖ5É:?swEâ+>Õ!#É&«¤¶ÏùÜÕvñR¬»™‚#C˜Š8|D‹š{ê6ýŒ:rq&áj"òbQÇÙh“`žZ,#*>_Êkp—=ñ%NÙÀ61íhé?hgº¬¤ ð É(‹µà¢IøÜI˜ª 9 ­±ÝHµòifßaÓ+þhv½„$’üÌ€¡%úÌÐ:Dr<±6p?8äLƒ 5†fà3·%_ÅåÒsW^GÍ œBDOñ h¢úâÉû˦4 Ë›œ°’± mm"üâ¯ÿ>ý¹ƒæf"9öËåGàl×À ]ÃZiœîRæîœg+€4ÆÍ`©¶0Uô öUø^ ÕµAƒr| .„óíSC Ñ©S{ÏÃ$Ç÷z ÉÐÁxýö3¯($ö‘ô°(c>÷ö¿Ö6†g=OëŒÉd|OÒ„h™^òjÂŽ—ÕÖ%‹zK èeŸ‘všý‘œÚ™cZ±Ý¸y‘ÒE¦äL $ÛÇ_k ´÷¤åMÄÀ¬æ•ž¨a¤©,Aªïtî¾àÿPH›ý¬ãh‡Ñ’á‘`Š–……–yVkj/-yÞÊ KïûâÝ7´…Å]"S‘†Ü+YBÍ´LfݧeÙ&+t¶€Ú Û‚¶M9*nÆ£Ì*,…åV&žd)3x•ÕfÖ½ªÌ‰MyAÝÈUc›½·|ôHÌ%ÔS´öÒwŽöÆ|ÜQ¦J¨¬.GÔâ÷}³I Ÿ,‰¦€Ìz„< ‹ªZ˜[ݾ›#d›Ý…Ô2ÇW Ž‹ªy™áÉ/b!šR­óÿ™xº˜š~J”S"*z¯ûž¢œð$÷ÃRÇ´Õ2ÿðR6‘½8ìK-qü)¥Õy/lG*(fP˜Î&Æî¶>µT<µLsÌl7ö¼v™^m6©‰×Í­¬Â¥«=*– à9ýéhˆàD™˜é˜ˆ`©1öf®Ëü6@kD!rE–ƒñæWaI!»ÍvLG½ƒG’"eeìâYËw VdZÉÓçDÞÞÇ¡±ÒŸ¡ÃͯsXtð“ÛO]ÈÎ\3aëÙIxK3Él·]2˜ù6ϨsAÈßb˜`±’f0%Œt &ó¥ø×¶QN¹ò.‘Ø_PD§oÁeÇµÏ p4œn‚$vb}J ¼ºa)Azd¢¥Â_y°2_ÞâÆç)ÁÃRÊæê†kHHDÀ®°Ñ½AŽ|€[ºM1[eà–qw^Í6uù<½ƒ›ÛáƒÒ@1/aovK&„‹Ž«U´Ú·¨®Ym¤Èýš¹Ça<¸èÚ¿íp½¿Q Ërféí$Ëâ‡É—"™LvŽ“®†W‰î7{ø©?¹\Õfj¦ÉäÀóãö]ÍkšmU@Ô³‘¹SKï¤ßJ±F’»Ô’ (Äû‡É"  =‚7ŠaDï0­}jy¼²Q¾ÕZ¹.Ç>àcBZkèTTm1râÌwþ[þâô¹à«N™~± [A¡ü¹Qª$OIooØ#gh7³Ϻèšý‘Mu€Ý~=Xkã-aë&ÉO3êùZ©0ö…t_«p•s–4ÈÂ'žId’†x+åbãwi… mµ÷=ºÕ˵a¶¤é¥Œ-\›CËÖ»P—ÌÚvûPÊWòÕR{Ia’Ôp“ÖnMÃÊ)V.ð¹.Ò-—WqˆêSeu°#yçÐ#[*Æ’§pú©¾Û”\œN©k蚦*­‰÷åâûtôh_z]ÒJ{Ÿ¥ t˜ë5ýµÌ%gréD*›Â~e’V±a˜uB¡)ç•4²ØŒ”uÔ%DÁ È—š-qð5hüínàlmñ$ÇPÚ°íºUŸi&Oæ4§­v]QzT©=êj5˜3QƒIMÿ„$zñn¨_·:FÉpù³é±i ºüÕÞ ‡Z÷½ÒSS'îf1¨¦Ðì°NDÌbúØ;¨ºt)+d䤥ƒÅõ!JJ´oêd˜ò¯Ãéüy5¥º5„夽Â67Ÿ>¥.÷Y&MLwK`ÖûËÆJøo•ÀlT±*"f:K÷¦ÒsbQ_«šWĸ Á\}•.EÄ’¿Ñ+‚Y¡ò€9àºent2ï›#Õjœ2ųs¶NÁË©ñ±—£¶MÍŽu§Áf”)o¶s{ÃÊz¹¶8ØE­\{H\¯ €m#6¹èÅ>’8þÍ·"àvì8–ÇÀÇlÉooí´Ëbçü ÇëÀþt}'ÇË;òcÚK;å8Ψؽ‰æB©Í©¿¦<¬d}ø —ƒº»Ñ}Ý`ToΕ[n%× N…´©ƒx\h­"ÚÁú¬å‹J¦+™t`Ø£ñª]Øø%:I-*?¡Q«ݰ?6.Þ/Õ‹˜sE Êúù:N9-°¼EÜ¡ÞOÄkµù%]Ý%õú®NµÒ!7;OÈN,S<ùÔq|TÞ2.©ËAîQ0Ý“6ª/5`€+*w˜Ùžcpp Yõ¢{Ïõö}´œ¸8ÆsñQÚ&ò¦A¾W§©jâj˜a}es­ÍX¸þ*Ö×ü.…øNEfT—²‚ŒÛ©I=kõ+gLìþ›%}š€Ô÷«n¡}¥@%Õ¥sVº‹mk]KG;S§»×ŠXRˆ~Y|&1/…ö0Ø'âÆu¨á§Ý• >• ÖÝ I%ÈC<øˆg ©rD×ݯ¼×|B=?Ú ¦¿Àëî¯11aœÂãc-®Ý©k]å¦ RœvÀëz-ǰ™¢ƒñmxªmùݽ@9§¾ÊIäŒLúŠrBzÖìvuM§ta¨”ãëghk¦ábõ´‡ÝNlŽl”˜¨)¡œxqÀT³ÿvTûmn;*„E¤ç¥¸³ÝûÑSßÝCãh{h×ûn×q î6Ê£éM÷É ùg½ž_c’8ƒ+“økuÀˆÂ$*=—EV}Š«4tYBžÏËËRƒ¯ùžªn0ÏXÖÒë\e8Ò|8VxUÑq½S»eˆ¢n÷Ô߬é¨Öo1\ tX½ƒ³¦¥:|÷ÃÎÙ¤Ùv„u:q»‡V¥O´èóA{Jźˆá-jrgžN~ÕUE´ºG[L„Ø9BhW# D_å!3¢/i„ •¯`„ˆ›Š¨ñ8{„üVÙ›Z¦Bô„Ú»kB”ì ¡u*dG†¢ÝìdBzŽv¹SMÑÀ®: ¡)Ø¥3!4EC½ƒ%D¦hpnªaŠvõJMÑÀnŽ¡)Øå!4EC= "S4°£S&dæh`§§BhŠv&„¦h`GbBhІz†!D¦h`ÇBhŠVBS4°¢¢š¢Á }ƒ™£Á |ƒ™£%·LÈÎÑÀ\!4EƒŽ‘¢Wƒ£¥7BhІšâ‘)OBS40®(„¦hØÜP †NÿUC¾ endstream endobj 18 0 obj 3629 endobj 20 0 obj <> stream xœ¥YK‹Ä6 ¾ï¯˜sa¦~;†!0“Ù=ôVXè¡ôÖôPh/ýûµ%Ù–’8Ù¶,ÌÎÄ–,ËŸ¤ÏŠºéËßo^TþóÉßÜeræò×/—¾¹üAÏÕå¯ßÞžŸo1Þì%Fwùüùò퇾hsùüõÇ»ÒÊ(;û»róuº+?›» *ÎW}WSù‘æk}”)Oxº¨ü‡©v¾æÏ×îêž~”O­àñZƒføj`N*’ô†yºk OA«v$[ÖÆ¯ÚÑ e)0”3´§¯Y¥.*ÉÄEGRûê8k òQÆ&6æËvüüÓçwoïŸo߯F‘67¿†g±&Ü™‡±90pTeM*ÑÙ>Q¶ gPÐÆVÚÕî›T\¼Î\ÄiŠëÙ2•ÙQÍÕëåȄՈ1w†’l{Å5òØÂfOØnÉ- ¢©% E:ÆtjŽ|V‘î?­ï7‰k—›àö,5€{,+Ì3ë f§¦ò„«ÐƧ?Fã\'h ©ˆ­ŠÜ³¬VȦ‚ÎZñR‹^*%¯aºÁ“`ÑUç€+éëIJG/wMWK"°× £ç+€ÕÙü\6ÈÚX‰ ±·FŠ# ¥ÃâtK+wºG ßÀFñáköµS+õò!÷½8t%Œéží£&ø‰‡†zOˆ.a‚µB{‚@ý0˜»›°=§%¬ ¶X—ª{,ƒ´Øëì«è D¿À ˪‚s¾‡™ÌHÝ,¨–=Ë|“-¢-wjÏÏ,1`ºBØ’•ò©ú„‚ç0Ž·8:‹ãà3»Ý%«à®|¤åŸ±£u“Ée,8¿a8lð±§0ÇtOë•¢Pí×ûµñ™ —n¸wFl)´_,åOvNÌf=^Ã?8-®´1ÎÁ†ŒSÿrCÆÛ£ !BNÜhB’:ÎWLFÀxÕ¯žjðoVµZgÂ=XUV†/œ^^»nÉN oÆæKÞÐ%ö`È©-ˆ[:ì0wÑîbÝAUD÷°B˜m š¶ÊŠ($ß²fqš_¥õ—ÚpÍà¢äì„ qI¨Žm”캗Z›1ü­¿!÷ËN׺wÉ«xYZï³MbQ^˜9q¨¶‡>ÆãÜãÀ˜ÀmnU5‡Œ–]—©¦d®T8üŠ¢2Zxœý79Ëþ9 ×€^0t8¸:eŽ0Í‚ƒNÖðÐîèäVdå‚)YHÖW§ùŠÌì&IÄDÞW`¼Ï1ŠOÙ;B'â$Ò|Ô[j«yW‹#\á-lªŽ>„)9±† ]‹%'fu½Mìäß pÿ‚³›-{Œ¤ƒòÉ¢zÞ¼Ìû\èKíDA>Â`+Z¨®W™U4‡^ÄÂÚ1Ú΄÷’Kü ÿgÌÜMôso“P&A„~CC(ƒu‚‡kûí0¨¶p8 *ïã†ËSÒø ã =Ÿ]MKP;¡l ÅËÖÍ šŒ}@¿‹ß‡™@¡ãQW)™íÙîù¦»z¿®£¬ s©aVæ6¯æÔ2ÔÕÕFÙÎÃvñÖUÒÔÖƒ§¬Å‘rÔBÃB¸×©7pÂÃöЛ1HFéÃnÏyËeg²j[¬O=ÐeÁQPÔFö¨s‚‰°¥z©÷µQû^Rë·eŠÛ•0šÇ)3¿f‰älBBy´³3#PÝpî“´3‹Z´û8²²½;É£ST©Æªbò)☡ÕL[ø‚'(E—Xjúû.Y‹ç„æmp†6­ã/@|ŸÔF2KLÔêc/:Ä ±+]•µÇÏæ¨D6f·êUÁ OZl.†mYÖ³K#¢“©#+ú&2‚ÏØˆÚеnƒÖ)²ù˨#lÍqï]ÇÕK¸<Ó}·QÀ°Å³äž_}Ãø¢[%Ïüù¢ ë$ªK5äÊ>€â»A€ÇĦC²b÷I~VKm¹yާ«ïSƒi ‹“`rÁn*9¾Íƒ[~­ÏþÖ+ñ–vþe…·U©ÍdÖJâÊ/×tÕFG¿…Q h½èþš¯„õÛ¶žLYõ½W§B¶«ÿÌ=(%âë·ííÀµ×Š€±YfˆYP{RÙÜ.–y08ºóµ©ç¥©uýEå—î[,œÇ¥mOiSš´|Á¯Ü±!=ðû÷ ;)îò‚Kqc„V§ÔÒ5Ì…e½›»·S®AÚR£W'Ãþâ@‡¾~7®¼Ûr¡’½h…mIeóÙ,uòõ¬J‡Bý-räBìMš:ÒÉ>¿2‡B½×/„ì¡Pï‚ !w(döWÅ õf” GB>é]—ÇC¡~¥B‡ˆ`W>!tˆFò™?FãwBèŒã ¡CD¸váÁ*¦:DË”Bè,[ ¡CD8“vÑñý剤Ÿ endstream endobj 21 0 obj 2183 endobj 23 0 obj <> stream xœ•ZI‹+9¾¿_áó€=©= C9]>Ì­¡`ÍÜf94t_æïÖˆ/¤Lù5.[©bùbQ(—›ºüïÇï—%þ¹ÍÝìeµúòÇ¿.ÿËå·:¾\þøÏÇ÷n悽|ÿóò×—º(}ùþ÷¯‹Zôbîîc±÷ëú±¸»þXüîWõ±¬éÇv¿Æ§ŸiÊ#îË3ÿÏSÍý?Ÿwÿ±|åÑWúTKÞó¥òÊù«Îs¶Déòºþ¾~(“GóªÊVÚ´wùªlÝx+C‘*³WKl(W¿Æ%UZ²²¸«P— ¼{™µæ%ò’ŸéÙ Ï\ÇÝÿñý·_ß?~é4i6ÓªT´qc5 ·‘ q5?ÏØ 7ÄÞÉfÖm7´Ù^t7x¦¯¬©¤ü¥0¢—8¬ÕÙºÎßÖK0:J’ÖeËÂO•ŒËž®.qt@ª#&Éyˆ€‰F×kb+Ž›l‘Ré» mi§¨›8¶§Ij&Mqc²~’â_þW7uF¡Ž̨‹£´Ï8uŸ‹­t§ÍÈadó0 òdÈ=Ù-#[VÀ—I/6=FLf€ïe¨RÔ…ŠàÛe@oì]u/­ª[„ né %tà<Wõb¯ˆ·±ô0ÃuŽŸôš‹r²Ñ§aéÈkxòt}®H²çáö°‘^X¼Ê·'w?5»Yoa°{Zìû¿§0ñÛzëb=k)ë …¨(_hÝæf+ÙÜ‘éëjiŒu‡8òF«£yKOxLªK ¤IKE^™j]šÓX$)LÆå*gMë‘¡g”‰,û\ЇÿãÆÆ¤X¤§†·CDŒ 7‡âÌ‚ª@T>ÇO9gÛNä:Q˜ ÒŒ.ËN t„‰w ZímȹϦÍZ²As,ÇsÐUkvæü#Ž™¥Â>ä…R¬UÍÎz´@œ\•µÞ•”Ø€WN|Ä¥maF^½= Qü“òLP–‚ ÁJ3ü*Lw/þË~Öoß‚2ÅϦ+!7U"`o))ÕÙFr É]bÕƒŒ‘?I»¢s«æyñ™mêÎQ9ñ:jűlíiQ¢ÕˆœwP KLÌ]™ªÍ,9r€¸5R9ÜC Ê†[j¡¬PÖP²sÙUuS‚eqp̦1]÷î.¸ªQ¶,™O$c‘WšÅ•2Z˜©µÃ8Èœ‚¨1Îj ï–ø)•ožÀB•ýIѼâm¦S†6gÌ›˜1ª/pô\†M’Å‚µù_àBÍi¿F›9d¼Œ[·¡ª@œâ.y§æƒÆ^kŠž(ú—À¡ü8±Ùß%Μo߆ä¯^?‘q¦ˆòàhGn¨)ÅñWT±ñœ~‚ÇZ¥j}zùA¦÷p:ê®\[i÷“ø©±HÖ¡®ŠÇ¸À§Cå“0…8/h£;¯9¦óÙBõ)ðJM¡”} AîCNfx mîc@(© }SßÑðÎ7Üàp´Ì– /éJžÂEƒHK)­Óÿ¬ØðTàAéO§ŒÃ“¤ \Ýý#¨´&uƒˆà¡Â¸X³e÷ô«+ !qœÜ;ž ¹l£œPÿâ2G¨ö,tÀd3dZ…ÁºïÀ`õP cr  ^aV(Ü÷ÇúCµf @Í'ùZSã<b ˜¥ˆÞ¥¯¢¹‘v÷´°~ÖüªC¼=÷b Ã0'×O\­¶¡#ûÖª4ns³Hô=¥4t,°ˆÅ©¸L‘Íì,›L¥ƒf@Á;Øèu,ÉÈ&›Ïêbž ´Ô2úGޝÞøø\ñ*Ê¢Ó/¡C‘ɬM7\ùjK•P™¶Žô}KG挮gÁòôi,ñÚcGÙÚ] ‚ ]ækC8:ѱ«sƒžÑZÎ)¯Š߀dõ<‡Ô€wRv(Ùêè䨄}óš6Zìf‡’iQU¸À7T¨SKôσ²:›Žtk ‡ÀXÜ6‰×,§EǪF~šÛÔø¸I.!6 ™ÍõìªÖØí7§¶9l(lk;.9Þ×ú·?s¿›@G³*ì5ˆ¬¡³ƒš”—hâiWŸ=†­ ÛSÀŽ9lÁÔÚ7¾¨åû¬HÛ5˜ùlט‘«|‡ÛdkïÜ]0_âvë¸vá^„fíÂÝ`¹ä˱ƒÓƒ’]ŒhF¸t¡㸅3j“4÷e¢¢0Å™;á?NƒXߘCHç¬c•¶`\¥bRÐâ»4Ñú8½W¯HY¶ÅUpâÇW®l~ Â<æ§KŒ<­oЇn ÕVKng·Nv­Z»f4m’|~o  ¨ÇB:/W³¥P¤òýÞâSÇRP¡-e+3GZÛjâRîÚú3Û]V¾[Á&ÅbϰÞ8/×`TÉ%¶íšÃc—ÅË2› ³4ë…ó} ^<;V;7.>ïI\ðz‡$ßï bÔ.Þ €"Üaq´W7óFÍdÞ9‡1c£æð—Î’¢ä‚‹ÚºÊ™±¿â0•—<ï5é8Š®Uu´Ó vú' ºÀ»¨™ä-9ßN/pmM'*ìŠ3û,!ÐãÀ:XîÜÉÜß±§\\^âJ Џ ¬ž·?~ûä0 ƒÂ~öâ  átÔØ#+4[°¶’•Ö­yΑpÚI_‰'t8Ýø}Œ³SO{Ëb“¯ßXr®¦º-ôX«vÛB·m™Ã{#„súi6ô:C\oô÷â°^¨Ghï¬Ì)Jžwe½N»½Zº¥ÖwîæXLÿ+ËpÇ=k-öV»EQ¶|>tk'ºz5=67=Q¯ù8´ÝŒ”Ðø õºÝÜHðkaÕÔ¯³Ý¶âÜ;±§¯j›Þâ÷ùÌE-Ù±ÖŽqú„S‹/T ’mF/Бšñ«‚HM‰øuA¤§D|/ˆÌ”¨]” ;%á›3AtýBÄw'‚èM‰îOQ˜q'ZMÑ@ýJA2Et«€(ÌÑýA4Eô$Ñ pDS4ЙBLÑç A4Eh‚hŠHÍ‚hŠˆÑ‚hŠŠÓ‚dгú5¬€†_.ÿ;1· endstream endobj 24 0 obj 2662 endobj 26 0 obj <> stream xœ­ZI‹+7¾Ï¯ès`­­ÃØr ärË9ò.ùûQ-*•z‘gBt<Ý*©Túê«EÏœìôÏËß“)ÿÅOaZ‚›¾ý6ýôÝô¿7Ó·?^®/)ü”R˜>~¾ØÉºéã÷ŸÏÆgü%žM¸¼.g/îlf“.¯ölø#_^Ë×7rÅ·7sÇÿãPy-Ïûe>›w|û€§5øú†¬Å™ñ§Ã1$#Î;_–³õøgµeamúi/œéU‘Bõx2PÃFþY¦´0%«x³‰§Kmuµà8å|[Ô·Û‰—_>~xyÿxùqeIŸç“Û1¥½ÂÂUUØ\–=”ÙbyÚ6âFÚˆz‹…˜OóÞb7²aYàw´ß"Δ×ÎÍçÓ2%ïÊNpb7Ù@ß-*èÜ‘èA£QW”ð°—¢CL9t·€Zå½ÇI …ß61ÚÀþb¡|1(ˆãà7³Ç½ù&± ÒÊkBêÝæb‘…S€½Z·2¡s ±ìvÅòˆVÁêj4ú\Æ7EeùèÑÇtè'`òêøÁÌð°!DÆ0Ìhã¡zD[ÖWÝÁ²1¾z=–:œ>»Ø–¢)É©_.$pÏâ¿v>Çj-0 Øä®e*WŽÛfJ%þ\Üa¼KØVXp©6 2EbÚQšÓä7ÑÔºŠ‹»Ã3~9¥Í¡Âb`ÎËi&5X“tîÚX L­!uäÃF+ï³|ÆIО‘(Èg:4xKg 6Ó4IŸm¦ ŠÈ"Óù7²¦shÓ ±W¹=õ¯Bv¥â{kσ»:L²`Ô$Ø`»"ABâQqŽ@ƒõÜþ; †€´€ªucÁ”ª¹\@tà‡ÃÒ…åçmf÷?ÒèñY°Çs~µó6U[Æ‚´ÕÁ“»Ý¿† i;7Ø$ ¢bä8õÁa³„Ü…SÞ&G‘:~›‡Ù >}ÁË©7—Vº=6{‚L®&YŸß)×ä*­Àdz½Ê—ÌÑ(7€¶±A–Oª¸¡b£¶¨ZÞ¿º¬PÙM‰'1(ŒÛdþÞ)“é`Ü-¹8þF€;žóÏÃŰ…z2Þà»7™íÞOÖ 'Z³.>Ð4èëÏNÄDÔ%Y'ä‡Bí¢¬ C¡vyÑ ñ µ ŒNh Õ¶s'rxÆ(Ò:ÏÐ2R]»N(…ZŸI åBä#¡VÉwBC4H1׉ Ñ Ê´NhˆUðtBC4¨$¦¢A…§Nhˆ QÈ Š¿;¡!‚»fhhøqú¦°6 endstream endobj 27 0 obj 2194 endobj 29 0 obj <> stream xœ•YK‹ä6¾Ï¯ð9àŽÞ² ièvÏr[È!ä–M ‡@ö’¿©TR•d[îaavÆ®*Õ㫇Êâ"§ÿÞþDügƒ½˜i1júñ}úõ§é|.¦½=>ß¼¿èÉ{3}þ1ýü!'©¦Ï?» )”Ð7{æ6/Waoê*œð·Y^Å’þ·9¾½'’<]ÅþR}›ãÏçÍ]Å;<ýH?¥€Ç+¼$ï hBâ´ ×Ý–«Ôð¤Jƒ¼éìü«4xpÈ"¨‡Â’Òâ¯Q¤L"QÅUzçéôLµ€yOïöÎ&sìí÷Ï_ÞÞ?ß¾užÔÁ]ÔŽ+å#\TMÆ…jC”fãOIkÖ¦ªwp˜±áâö[³ãÏôã<•œ/²"JÄÇJɵî²L^«h V“4YðS‚‚ʱ.6i´ÃÍSñLJàɾìp…ƒØi…Ž®Ýî †úª>â¯jIäj=r$Q„‰a9ÒëMÔ¢¤,á)CtÉÐX©:ª÷ä¢/ —!=žÝU/ɉÏ]­#6ÉáD–  (5?®€˜4dcëƒ ƒkŽÆQY>ºcæ%~Ù ë1KQ5ßåÝš 2¿ÒG>ó&úÌ…eòšÂÌ9`Œ,{Œ •Ÿï1Ä tpT.&hiÍþ\.˜ýٯѽ–— ÆFÕ QùJ$a)¯Æ2ið¼l0V’1×éà†$¦QücO/Ù¯,«x+ª^d=jÀ\·šÕVHß+šø…¤¿×¤wsïÐÒ ÏŒÙV¾©üUrÁêu†mÌ1£sU/¿‡Ÿ(l?p~¹lj¤fIhŒEHQ£%7¡%¤î–ƒ )J±Äþ»dcÝLºdÀì\°@ Zé[Oâ ¼}º¢Uªâ&:7ÈJhŒ˜Xt}0¦$Ëx•:2$kI¸õ|dO† É;A)3‚ÅÝã¬gn|ݸxÌƒÅÆ*ö‚|† gb¯êêW`¹çYÑåÚQcV½u³2 ²#Ô䢡\!e ñõÙ1fˆq3f‰µÞ¥šŸÛ®~Ž*×›5M3ôhEÚ£Y ½4u©‰p”]Ó“‘>å÷N` ¼gæÙt†‰ÔANà‹ÃNo–CéÏ>°Êºrø ¶‡=‹Ôæ˜38Zv=î¤c7ÚÜ¡µì«ÞÇ+ýyæU-‰0ÈØ¦¬7sÏXõzSøÖÚqlMÄãI$+,å—'‘XÔ8û~mr­• k¹ˆàÿÙ·gŽÆ§C©$£òÁ¨›ñ0QhUßGÉô0SE+Ô´jİ¡a6sâµVü&TÏöXA g·E6´Î;º–±’pháÂËo5ìáòhø+—Éq£ØÄü833JlðGóCgœŸCų¾GËZÿ9Ê“8—ŸìHØlqþóŒSÌ’¿Ë£Ì­YÓ˜º+H€·ÄÙ`³·2|Ö«x<ò„¾‚9[¿Ë€ŒrÕ.zS~ϪFa‡³ËU›ýd|m uVv› mˆOò“hûì4¡JQÜ-¥ûÆÑ_5'Ÿ‡ùˆœð”ÂŽDÖò“hèEî±Á'Q(ñ|d¥Ó™´då¢k†¡ch2U¶‰8c)±¶ØMV4ÒmØOÓÕ…M'Õ÷áÀ?jg,™ójÍ×fI;±®c`æ§Í¿\ÛY-cÛ.@‰HCU‘Údù÷Pǘuu"eEƒmææÒXa! öç.ä»v'±eTÍj%¡çÍýji°›qÜ¿T6|ûy¡&åYî…t–X›mK_ xU†kv³Š,«¥èªœ£„É;WZåHtXèåu“¼yƒk*×’6[žZ 9ËÑöfÝÕŠ›Öh2ÏícPwŪ+ë-Ž÷¯ÅÚl7:òþR´w8{]Ë.í ãÚõ4­xäS÷mÁqÔKj÷  (9(ÿ¸jÙTÿjßžÙ‘|PyžªÞy»`ãyêë­¢*øµ‘ÍïÄü´¨Ã•ÏhdÞŒôdŲA¢9‰æðÊ(êꦔͺáÉüTQ“N¡Š®›zT¯ôèà@–:ù„&zñb#ƒM žQ>Óðgš6[Û}y ë5Í«# w½n·NO¤¦IåPVî°Ã»ÃÃ[½žL0›Y¤)ôà\¡LÎÝRöˆuÏçMŸ6ݡ娗7&¤õ¾ðç5¼œê©“Ð6N°àºJ7H!}OuÍ(Ó>–ŨCYŠ3Œ°{¯š,â>Lcö’¹‡VT;§GÞU9¥mñ° ï–~·’/„{ž#e ,°"´¾o®žâs6i÷9<ÍÞ„™ÙÅwYüµ :€wŠUžtU¨ÌBÔœ^ì`Ì5K_)hÃìÛ»ìýR"Þ$0׆-«ô.œßN5à @îÚ@#ª­p˯—öžóÕ‹‚™e²ÙK 2)öS19…¥åB¾eÕahæ+§fØ0í¾± ž(p·PƒqSù'¢“w7„Ë!cT·ŒY§ñ©Z0ËtÍ2‡ŸÞ•‰ØaßÏõ$ G‰{Œø>‚2“Üc‘#ö!­aRC&úÎÒ0é!mÃ&3d¢xÃt”H™©,¯7d¡…`ÃäGLl'Ø0-C&Úe4LaÈDë Æ$Çh¨wâ†eˆ6d7LC4°9»a¢MQ Ó ¬Õ6LC4Ô*ܰ ÑÀ*qÃ4Dƒ1{h ߦÿ'Œ ô endstream endobj 30 0 obj 2078 endobj 32 0 obj <> stream xœ}TM‹Ü0 ½çWø\H*Éß` 3IæÐÛB ‡eoÝ-ôPè^ú÷+ÉÙì2—€âÈzOÒ³˜ÐüþàÇg?9“™×góý‹ù½ûÁ¼þ®ÛãdMŒÎl?Ì×$³½<@ °ÕpuL|¥b±@’\GÞ½HÈU½3,úÖP[G¶K VõÞÄ"¨{Ö DeÖ%iL¤WÞPSA«^eE·c%w[¢Ûçæb”–·“Iè÷%S¢Pî%Îwºøž½E%¥PÊ‹ì¥{^Úñõiû6¬Ûðp§¤Ía¢)ñ*‰ßJ•æòѳy¶ø1·jŽò:ÉœÏS8K67 9Á"fU¥D|h…°›°ÇëÔL´Ä(1txA-lš¼Tt¥X—´¡P³èè‚4MY% Je Ôæ%xtÒLPáTŽÑŠÃ¡ÀÑK°„(É.òÝ4òz@öѰo{m4fv€:°ÍöÂgÿ©6Hw’ÓZ1‰Ür´¢¼% ºp¦Ôò|±Vt_\WHŠyÊ|qùbÞe¢šPl˜‰1'À6¿v¿_½ù…Zǧ¸îÌ›âǃ·|8üÉuûÕáÿâÊ'Ïòp¦ô`þ׌ó endstream endobj 33 0 obj 467 endobj 35 0 obj <> stream xœÍÉŠ$»ñ>_QgCµµæEAWU÷Á· >ß¼€¿‹ß’bÕ’Êž‡ f {&S!…bßrÌ›½üûÇ¿.&ý‰{| —-¸Ë¯½üñw—âssùõï?_?ÖõÍ_Ö5\¾þrùý§½XwùúÛŸnÆgü=ÞL¸_·›‰ww3‹YïW{3[þÇ~¿¦·ïyÉ£<}šWù]–úû5ý|Ý—›ù(O?óOkÊãgyamÙ¹üÕ•5{†Œeßå¾Ý¬/OË®6 l>þj¼Ã£UÐÃÍ26â_Ó–6o‰(>íŠÛ­r:¬ÚÊeË÷ünSïb¾N¼ÿùë?>¾~üÒPÒïË›Ò>òÁ„j¾ÜÎwH»ÅôÓÊŠ'`Ãèâþ¶Œ{ Ó¯üã£P*ß"ΤÇÎí—·í²z—nR6v`ã—-úCÐ-fŒ n½Ã…lÁÄç¿/…»>1$Ý{)„Éòbžå!°ÍgªÈÝ+ñe†÷²oIò‰ ˆ÷g*xÃo玶ØÝÁ‰=×p3äÚfáÌÿ.Hú÷{¸ùG~ºZ—®‘îòÖ¹÷ôÔ—ØÍovsEØžå*y3_äÛ=«eþU.¼¥¥þE$¯ÚÑÒ¯X~YŸéfN¨‘T{oÄÃÁ9YY\9cM[nJ§HYP%Óu®OWãŸðÖ•›¯¢,`$ò«Å°"[ <¹H»‹¬²G'30î!K ’O|j³f»Q jÐÎ _zÏæ”Œ°Ü¾:Åír9ÿðï 6$-ç‰Ë"3Èé²¥¤R“°0Ǖț,ó«Ç’ôzÊ¿%—\X˜§`=ŸG€I~Ž íݯU”-™Ðl{³SϼLHeÝu÷H+>ï´Ø¡ù.ÔË&.a²jL$¤¨8EŒ- ÝnÁÝíŠKJj½ áB:²Áp¨.DW»'oˆ$‰• ì…ÅÚÆ¬?Éû"4#À4\ãÅòº’¤šÄ|„]ûTDW4­ñ*°wKŽ[I±ÿœC ¯ö´b”k7ï^$b.r€Í¦· :Z‰~žÎUA½øá+ ÷$aïDÌ¿R‚‚¡ù´+G3p’"f÷Jº!a8I€Äúú ”+b}‘%ƒ8’ƒ¼É×?Žg ] WÌ“([iƒä#úå4Ë’5€dYð`ÍÌ<²Ùèá«"j% ¹FÃ;‘°ÅÊ^ùDö]ŽþÈ{·„»î«¬ÌõcóIF^!%ž[?|°4DÔ+'—,6`Ó>qáÒ›ÆÊñ¨¨‡zÏÐP­‘lQ˜gsOÌ\ì ¨v±±%(©VHEןˆÓ:Ž3qZm.þTÀåWˆüfnÅ5P†rX²0’^'²=ŒÀ›€Òo‘_)žqš«8@òiÞ29p•XhOªcô½Aâ$¨Ëû^Þ‹ Hê’¤G·øõ!U‹¦}ÉÀr)‹^(3çoÇ®3þƵ »jOô{Aü¶xy•„e+íÀÚyÐmoÄNã×E*n¡Ê€*Ÿ®!¥f”-ˆ Ù6‚ïàKd¯Z¦m|Φ›Å{'TÂ:«â$ZMHÇÛaÀñbñb¯=¦Ûy%2ˆ=_Ì­j ¬i@꺎%u,1þ€uO¦%ïì=²¨,e§“B HVw¿3É ž‚W!H¸—ò]Ðû^iƒß> ÔÂÿ‰6ٶ´¸E¨\” {§˜1C§t#ˆl=wYë—;X_׈–€à5àù¶°kçÕà]_}b&sQ™ °#þ¤µ:üV»îEze›€k–Ƥ¡PU¨ÃõéQPtMN…)HÇØò2·amÄ[ŸŽåg2âvŠnXF 9²ˆ9RF™î/$ôÑ>$Äw¥@TÛ4¨7”Ýìè‡XvHW$1¸Ç%W@§ñ½ÙûŠÙ:×'¸ùê¯^ Ut%‘©ÃæÄó”,a\™Ùl1€yÇ»ä®*×A–UËùa=J-©ËêìªÊ:+®«^0*"â¥4Ëk§U¼nˆú5¸qЍ~´´†ûÈ¢«£Iƒ!ºP>¦ e‹ ¯ä@UZ¨r§ýÌ¡¡Öt¢p¢5a_º˜,y­ÏšÅU 8fÁ+µ]t¥Q÷"•a‘YÐv]n™¨ð5ŒªtèÙÂjÞ:«üÊb¢j A7ŠêÞ9¯t³mªªa]úHçýª:ü^¨Ö B8Ö&Õ¢b¢NÕb[sµ¸t¢³b.”–F|ƒ¥­žžd'ää‚%ŒW²â¾Ä ä)ÿÂá5Ñ­6ÇzLÁ¡˜dÅ~aU*ª º&Ö{ôh«¾DU¶zê{Z ÍãÈ„DiÝi•^ô1rkàN¨>µ/=«í Gp]ñI¸¹#º;“[ÕÇJ†ÄÜ{Žîõï¥ð ÝÜ\$ž.õÊž©;F³ù•¦Ûä Wxv=e%¥~™‰e^(sÅr[çØý;‡®N%M6bªG!^úwXë.,VÞ—[4¹*CŽêÜ ”Ülºgµ]J#·ƒ./šéÊ6,$§) ©“Ó`Áž¹ P{¬2,ûÜü#äEqã×ã–Ÿ] _°ö>TqTÔ(¿•Ô°k:Z@eÜWsPA¥€›,6sé¸vª#6Žœ0 C¶hYS¾µöÈ–}›®>>©þ<ÅjÒ[bûEaí§Þkáë/M«c¨6´syà7IîWusº>_ÈÎj)—ch`W±†äÅÝ1iöèÛŸ:Ðqˆ3¾Ñ“ñ{ì}ú·z2#H)Jcý{Ã}]‰Ý$Uèã‰ÂÒC^¨ú*Upgæuë`÷o23Úê˜>PǨLÀ• )¨CÒlƒö6º«Š°œjƒ¾ÃÐ3öM}ùåš1SûÐsýÌ>øÍö]¿“®\¥(Ô€ÒÁ’Êðg1o?ùÅvŽÜms@Ð`iöƒ¨— /Zò_çìƒH*¼­U+¼µp.ø‚§ÓéÏ |gú¤ŸC3‹“û¸ûØ$ºhA¹ª.W·ãYF›%‚l)ôÏ×÷AסH·i-~ºÿ£%S¹ý„šÜkô®Úñó êxÏoH÷ÁGõ “¥h-&ÃP¯ 鸕d'Ãú½¯“„ïJ­:›’¦ÅCÀJC°¡f •Ås[O5,ƒôP-Uã5 ç”®æiá ãÓW Š‘œÛÂNNêÞ‡>Tj#¼ŒvŠ6Š 4cò{ì÷¬Â“Ü\ã÷õ˜‘Ð ·]up!G•ÌCÍ–^—±²éÄVŽ–±U´¢­¤Ux´U]G…[Æc6ú„›æ_Oý‚«÷êÊ¥Õx}>™Æë0êDF|=gúŸQ§ÝIÈ…%¬sg!O‘Žvàx&ŽB1_Ç-9µîh€).g£MU,;JCÉMêìHYS|‰Z—QF/•~픚(r‡•$ÙEÎ5Šp>PeTNñæ, 1¦/6Ùï„!#Àq€mó¶.s«¨ªjPcfJµý&òPZ³ÜzVp£–Hõ`k¤–!Žç‘²¦.Ž*C¡ÍZè"žn$}Ró œ˜Ôi¡¾L7¯ÊN›¤£æ™ ç³rtŒ<1n[úÔÏÍaHWbG™!ÔrÛv1ÒyŽ–ÂŠ3}5·%S’h!ÓIáÖ­®‹£ÚÒOÞ—k?.œ×~Ô×˜Ëæ >mq(ﯫC6²ù m…Œ§Ó¶Z\ÉùBô äêËCS*Dß—|ˆÒéPaDÓªâ`üÈ),Ù)ŒNQm¥Z¹ô‡]îp€53stLc8€“ÃvbkÄPèê„Ò÷Õiw^ôäüx’Z™F.Æ(£Jùö+Fs#pvårŽ>QÙפô=!Ïl…ßûbNÓ*ü–Þ—qo-·¯¨§ü+鬨ÀÓ*ìd(xÁò¹ª‰í^*ã{Úl«V¹’¡Åذ¹|=dЍ¡ñ€œ~9qâÎö%ð'>üßef98ÛP­z×Ñ=)}v‹œ è˜ÁK Ç [½^‚ýÁZU1}¡98Ùý´¼EÁúŽƒ‚u\¼9z+¥´ÕÑY(2lT¿ý)ƒÀ¯¯ÚÙé‰çÑË4Q쉢Èvï« ÈŒUdšÒT¶‹¹³g9)“˜UsGê4$A‰|$D TôjóĘś©bŸZÓ ‰L[ÁâDF•ìë9oøƒ–Æ)ׂHm ³™Êtn¬%F«Û\ÃíúóßA•ty0æîWÈ~«q¿ž_ªÌ•$¥q)ˆ:,,v3ºL.%5m/ÃuO‘誮£»™r/iþÊàzóö§¿]»ëAÁïŽÝ?«QRI1®¹]„‚"¡DÂi¡—c3R³„‡O9ϵ [þzöÀ‰°‡ð?çA»žÃqç±}G¯_ëRÉüwFõÜfd^ =þ7¸4_™(àv4£ûÔ@u‡v°¨–¬ (€þÛ”fÇߤ-Í÷ J]âÁ)7T}NA½À¹Èw’p*òÞôkį¡§áé@Ü%õÑ fõ y=E«¶sø ÇôÛ’vÉÃZkÅuðæk Rûqˆ?z&G9 ngÎÝl :Ç“ûàkˆöúeÿ4…@½_º÷Þ~ÍÆ1ç:q"ï­ëzÒ`Ù4‘Õ·ÔmÔQÞ),ÛÚwÏR)G…H£/ Ä¿&²]J8›ÂÔø®íE±Numºu —Ø'ƒ|â§vãO=ºŽ£±s\Êeáð?=p!)²úOüÅšb\þs` úŸ* ?’oú+ 0Šã“ŽlɼÐ2’O\+ u¤>Š«€¶)|úTíS ùžFù$3 ùT¢²S ™¯€¦¡æç+ ©D¨yã h*j渚J„šœ­€¦¡Æ+ ©D¨‰Å h*j諚J„šûR@a.j|¤šJ„š ©€¦¡7* ©D¨Žn4•Õý«€¦¡šdÐT"Tó šJ„j T@S‰Peù h*ª^©€â\"TͲšJ„*¨T@S檢J4e®ÊÉ* )sUZVM™«Bá hÊ\ W@Sææ@zDˆ)s÷‘ý_o¹ü;ˆu endstream endobj 36 0 obj 4085 endobj 38 0 obj <> stream xœíZK‹+»ÞŸ_áuÀŽÞj1Øî™Ev²ÙåY\¸w“¿IUR•-ûž< p°=ݪRIúê-q‘§~ûå$⟠öbN›Q§_ÿzúãïN?ãsqúõïß_ß¼¿è“÷æôõ—Óï?åIªÓ×ßþtR(¡oö*Ìí¼]…½©«pÂßÎò*¶ôO¸ãÛ{òÈOŸbÏßy¨¾ãç~sWñ‘Ÿ~¦O)òãg~!e未<&$J›ùºÛv•:?Í\¥AÚ47ü”'ð(ReñYCZüYÊÄE|Jì<Í£¶Ì"³¼§w{gÓrìíÏ_øöñõí§n'up5ÙJùHQÓâB]Cäf㧤O¦Šw0™±áâf“=aã{úøÈ;•6_€ JÄÇJñ *ÁÁ¸ˆ yûò±ê} ©Ó®è¼ÑjáµPÏôR9áÔÇM¦¹Ÿ7®æë«Ö·ø¨ŒÉÒ%ZøÖp øq ¯u—íäu’º•7Ι?A°)øƒìj¯oÊÒÀ)lW£nz}Qå[d&¨¾'fåÃŽI£ò<€#ȜṺgïùI8*Ø8ü™F‡~\Òз8ŸCv(¿ÄoÒAé ÕYÁýG’ùxHKüÈíbÿsøq+{–½Aˆz Μ èɧ y* ß‘õñЦ ö¢ÐQ¢Xº'ªtzdn2ááßqÑéâ2Ò"‘Gå䦷›_ÊGœTB¥ƒÈ,ãöT¾yO4›ÉuP§>˜T!`´6~ÅZìâbÈCKhEüìLÍN𣙚™çP”ÊÈÏQû™xÙ  | æ£J U¨ ›BuÊ“{¬Ó) ‹EAõ¸£Íœ"žÎùô_j±E…}±+ÅË ‚‡“½{Z¸{¥:zô¸Å?]÷‰þ,Ï»ÇSåf¦Yø U®?»³jŒ`ÇN‡l“¦)ø£È‚Î GfóËQCæ9~"·ëÒÚÃÊŠ•-››â2® ˆžÈ°ñ‹ó’2F!/,ZeQðw´Š{Å^**> ÇSwí`Aê†JciÑ#Zv:liÐPTUä+4^[qoä³úÕŒ³œ-_}3 `ˆo ½«ªŒÇ@aj:ÑÌ<ZÊ#iý«7ñŒm—>ðSÀôÙÍÿ=3^7 uÉXX¯Ê¦J=«–ƒ|eµÙÆž 'ßO2{\µgþ¡=3³ÑŽ&¸š6 ŠŸÉl?ÓÃl üT…;"xGÈ47ãøàø¼Œ±{w Ÿïß„ö&f):û¦³\«rõÅè4ðe$æ®".Q™BUƒLÆÉˆˆØ”¹hÝ°çÆ 1FždV’ç+ò’01o‰ç²ƒ‰$­TÊ4†s§›ÝRh]Æ¥-ÙŠI%ß@Ó0Ùì(ð£BºÆzŒq@„Ц ÍøL°Ô´þ!˜¯ªÎ&4UŠfʲ¢#‹¯·),Û¯ãÈú!š£nŸä I?¸õ*áNZ†Ò«dàÂ+gš¢{1•GO2LøÚ=¾= ÎàlweÍn³çã¸SIËœ†:%({ߘ½Ÿ-ç•­wFÈs‹XDbYfE7ö|j¼j¢—Åž¯³„Ø®ìdzpµs kA fšåÐé¹b$¶]~µEYêµZt(x¥Ê S”s§ J¹˜ÀÍ+»—²¾„$)@Ä<€²‹ì/!kȯ2ÐrÁçlEåT f'v“ M=7ÁÓ’œ?&ãÄ„ª¦¬yø¨XÊ‚°W,²®føº1Â’¦oìmÃÓt»ÖášÔåÙ­3Y¦<;ì† ,X6ý®Ì¶ª,&?AÇ+8I1†ZšÐ׿ká¨O6@Ù&0ÂfùÖ+ŸRHC“¿HœºÔ‹v· NÎӬȡÃ@#Õ2 c EæT¢É·kˆÂcéÐLOé|N-»zAUÞ©²ϲV#ˆœÎ$©ˆ¹®D7àˆ20ô_£"—À3®z‡áx_àÁ7}¥öç­û€ ž)•µ¸ÛbÐûŒŸ¶({i²±nâ²É-‹š÷V϶±$ãµ¶u41E›¬Öÿ::6Þ¥¦û^F(T›†uiIm ðšÂ'­cYçŒ3Zÿ³°hò¦t¿) Ø%þv])ýñù <Œÿ@â-oÎ]­¸AXN¥h² ‘m9e¹+ÚŽôEzƒû2£ü¾ô´zKaÛì0;ñÜ!¢ñ~EaTSšø«j‹n…ƒÞÓ1Kœ£ÐšëôG‡n9¾lýëÜÁbZ”ko” i‰_sºÁäPÝwz®ïЃ9e­ Q#mñ»þu<úc{Š`Qzp°¼®‰å‰’ÑÂrIŸúcm„Lµ*}Á%ò'„ß¡Ù9ºãÙ–Ú£Û>ø®™ÛT;Õ&ïdãK»³¯…Â>0_"°×åx«HÔX¬¶x©˜Uª~]9¹ÛöŠî·v^oz0áZ¾±ó3Âhµ¥¶t H$&ñ2æÝØ„b&/šº¸Ý;¸. d lVœ•iA.Ûšük±¨µÖ’`_*f>+‰øÍ$–Mða9ül椟äšSvïÔ½ó•z†µ´K÷H‹[5'Ë)sñgÁžž¾…Ì:öE¤¥½èu°³€âR„Ç’žà7$4=—•v­ërÎÛŠêÐì¨3ëÆb×GÞCQ¶SŸuK]Ŷ%®K~GWP‹±ïþ£+Ø„…á§+xb{º`À·´mª®«xÄнî:©MM:þ?ú„ÿÓ>añGáå}åÔeH]~4 §³ü¿6 •Q—ð=MÂ)a*™DïQu‚Yɪq7 BÆç DRY8—º-«Ú:ž'a/Zƒg*Ukm*#z.Vµ¯<¾Åt³©»Š§UåEN %£ÄfIÎ"ß#Ì6áVTeÓ]É.޼À„ ÃÀ:~µ¬/1Ž7,¡¦?؆jž«{:“äeC xA'¾ªi×½ÓžŽ÷ù}ÜÖ‘ò& ³cï7.ecÚj “[ëý[‚ˆ·ú}3B£ËìT¶®}£U%P#ãêûãÛŸ5à˜Êß0Tø®m¯M•G³Ø²½Ç‰S#éUCß9<†EÅG[ÿ7:×Ñ#mª4RbüG×, WÂñ;æ‚MD—½h¿M¯jDã1¿È¥·c˜Ãô¸TWr„%0ð†«¦ã0°OŽöœc°ì`ÞBïhXS…¼;UX™]{‘„*.æd'¦$8ÜM…wB(¡Y;ºå.ˆe2æðb¹2ñ(ØÅr}’"Ÿ Šy‚<8E ¢ÛÝ ‘ZÑä†H/‰D½HÑ™Q½ÜáHè6mCä–Dz6_’Ð]À†h[±;b QXùÙÎù¨ø+"º†Ò-ÑP»ú É ¬wÛ-±À| Ñ ¬É×-ÑÀúV Ñ µ…Ô,ÑÀJì Ñ ¬ÊÞ-ÑÀêàŒh[£Õù¢%j­¯!Y¢A[=±AÛ ¬P×-ÑÀÊc Ñ ¬’Ò-ÑÀòù†h‰–ç5DK<°D !ZâÅ«Œ(¬ñÀ¼}C´Äóø ÑÒÚÉF†ˆŸNÿºî× endstream endobj 39 0 obj 2794 endobj 41 0 obj <> stream xœÕ[K‹,» ÞŸ_ÑëÀtüv4ÓÕÓ‹ì. d²Ë²änò÷c[²,ÙU®ž“ô™®²ü?IŸd·ºêË?üã¢Ò?¿ú«»,Î\~ýóå÷¿¹üŸ«Ë¯ýqÿúãÕ^bt—¯?]~ûÔm._ùÃMie”}÷7åÞß–›òïæ¦‚Šïoú¦–üe}Ko?r“{yº©Gù¿4µïoéóñnê³<}æO­Ê㭼кô\þ4¥Íš%}é7¼/7mËÓÒ«v(›Ç†?µÃWx”¤Êô°³< íñÏÔ¥Î]â7±»ØF‡VKé¢tù‘ß-ìÏËñïüúÝϯ¿tš´k¸šUê{¸N5/n¥5¤Þ|úԭų¡é æüz {ƒm Ã4À#|Meå+˜ˆQé±ÑGýúp].Ñš´’Ò±¹h?t™ Õð¿ G]¬æ  ßu(+ËÖ.k3í˜-à°é‘*ÛeR³Ü*”y[üÓ–†uÏ:4øÐ”÷Ïùb4ÎÃU¥Õ벑¹£¥¯ŒsÄNt×éÿ¤(Sw ”ˆRj˦› [š;:œ”&uVÍâ’´u¬#ÎÃã<Öf Õ|nyZZ„$…3Šò¡Ö`’wZ+—¸³ï4fÈø†I²ÊpcöW KN»¼2Њ  ¼ÀØYÓá°ð{çÁzØú•¦>hIÎyl¼×órÝGø±Ë5[•¿þvˆ·°.×~o]Ä…n0¤öÈÚqz‹/³[cÞ„º~óQÝ‹-»Ô W¶¬7›„›µ©+û¨¶ïW];JŽá-/¾%|kWwæÑÜ÷jk—|ërƒ¥’<è ÍQj©¨+XÀáó‹;­ª6+Ž@ÝìB~9ïl[zóë)XÜ" E¡2ËÕÀjWêéN^¾âÎãGñbÅ4†áÖõkû#•9EÛŸ3¼-î:Db÷y|I¤õAÜ]iÇ´ã(È”Û/F,?ïhS½Ž¨§×%Åg³ÔU lÅõ0|Y-“ýH!lB£ý  ÈäœQÜ3šd^ã `žL;QbýyçakLjUÂtEÝØ4ÅOŽxîö˜JÓ›2½é°@sމa‹Ï0UbÂØ›Q-ÀºŠ!l@Š4ñ¾¢dÆ×ˆäEr`ÜMoÐY± Ð…/T¿>`<ØÚFãz_„ÓÒÔ`(Žo•›±ƒàUúì4õ)†‹À‚»9U LVJg¨Ì6ÖrÔÚòR¿¹öÜEµ Nª1XEA‹ÓC`>¸ÊlQB%Ç[ùŠ#sËf ó¶´ÀXI}²ÙlÛûŸÚS¾ªSÇ´tšÜó¾È¢¡œœ‰œk¶O"&&·‡‹3“³±wÂVê\“ã4B+}õ­;Cü0¾Ã‡¢"³Ò‘ô¼ølºhLÄò$mRˆ+|;È–ÿ@ç4sM0åb„Å̘·HsÁîÔŠí\}ïX0ÅUaO0X!Ò4=xLSË1☙•ë80­ÎvõR8x$€® áŒHàûFÈCafØÑ—ÖmR9-\þ†UzªuùªŠ5Ql •ŒÇLl°¥v~cøÁœØÿhs3ÕÐð‘i2%`ÐHÅ7¶"%çZäÚ³Î5·‘_°t¹IÒhçq¿#œküF¯wfÂ<ÎLXÙIµC/˜éÉÆú.25î˜S“˜Àv'dåyW•ˆï‡Y€$´S÷j¾ÿö“ùš´ ~¡F¦úª‘“ç¬ZÉ<³9ñ4‘¦N¸h°FÏ6«cI¸ñ-Ç(SŒä|ØÒSJ`3a–Ê&Ì–ô…yY™;4 “ÑÍYׇüøeXLQÔ育74±/3Ñþçb¶Ê|ÖxX"߈Ü,s¢$§8¼®ÛRçx %-_2*eWäv“`(E~ʼn'ƒFl«þIt¨Pllt?OË\'žÐDÖJhÖ•h©°º`˜œ`¾g9WÏÖ –n´ã{=·¨Ïz.Ò•YˆhM´±K؇þ ‰¥PÜâ/¢eÅ ÖÀ8²g¯èª³I!°‚Y-0p ÃrPø¨ág‘«i¸$äO#—ÓàŒª"Cõ“Þâ‘Ìbº…^õP3‡U£¥QÌÊÃÑ—•22§Ûeè*A¯eîínÏÞY¬þ¾%Ü’/¨:5'¿Y³ÜZöÛ*ï`ô¾¾äѬŠ5hå|æ¹ûÕ²PEoس—Ö”UÅ`[럸ýå´o!óÑ¢ÐV<ÔÔƒ÷[~æ¿mø¤àJ6šͭŠ¥nõ3ÖîCl2¸™eBÁv†9pôùÌ §ød`+[‹ˆÉa5“$Æ„úâd+YŸÝö±¿Ia}Aé´e–ц&g¸6y™9-» ¶Û¦Ögaíh%UÙLÆÒ ܃g÷Ú˜f s¼ :Cœ1ãä6Xyû^ d#CIIÈçÑÄ¢ËÔ”² ãë¼ôÁ¼Êé h™U¥†GÐ>¡÷"b?˜å¥Xqj©€­±kM¢.F!ÉnªCÆ \=+,´FlÝBïHÊ•É'Ò³2½ôi58±pÅ©BuáV²‘lžÎ­»…Šp¯i üŸký™c¾­yî‹Úoå Çœ§¸ð¶ìœ Ôó|)&¯I‚½Ûl%é7¦Ûé×küÖv6ÿÂvÂÆ´ëMìeè%ƽlÊGuü'¾7+:]ßÜ„â0]¯kï0àÀX—/ÉESE:ãéÁa\ø,΋ÊP_B££Ú×Ù_+£¿V9 ¸ðŒ¯`ÃÉXæÎÎágËþvAŠÛ¶öÁ»Ô&£Ÿ–pÆí> ¨Î„«îmNÀ=/íÎ%˯ù{0½Ã` SPáj_Ï4°6î_x?fÎ)šÑÁ©­[ë›Fç#5Œ=è]8:Š8 n/x²²C#©ÁÑHtnˆ?amšÍ ®µêìÊ@ˆœ=³ñ‹ì TA~Ñn˜ùk¯à=·¶¶TJ<Ù!e@m¯Ùp^OaÌÊ€6=ÖL‘¬ŠeŠÌvÊÝèš‚Eþ25–gÆâ—!üÿLd}Í^êWY¿Ú—¢7½bAÑØ)—´vù“¤æÿM)þŒGòL¢g?[ç Ó±ÆõUÖþ7”VÉ÷ž_m7lìĽÂc62Þy=c•~R®™9p³ÆØôÇ­âÖÆ½qࡎãéJîÜLhHnqbd&†Z\!̘f˜@;ÿ»ç+¦i™Ö¿Z‰S[ŠtDWœ‹àq+Ñ 8ébçBÄî(45Aóìú•7i–V¼Ç.3ÐØÍ v‹ê®ï®c¤É²]•WSZ 1ÜÞ WÛ]ß ÃovWã¹wÉäôôÊ*WsiÈ÷ø8ä(‚ϨÎ+ Ý¥&ÊŸüâîé~ŸJÂJs„7á™fdYäÁ%Q]dŒÁÊ®Íç|+WN­§—“6ƒ<7©MɾHޠξrSË¿V]‘à°²±5íiäi©¥iKÇÇ{Gÿbäüea¼Ÿ=ëêxáœzoSÏ mâXDù¤«±±‚ ¯È±Óívu‹¢Ïi”2I¨ÖTb 2Zjˆ€ÒÚucŠâÐ^¹½ UoüWk–fÎ~"ób8žH;}¡Zeƒ ;L•ùî]ñˆve÷•@7Ó½^–±r\<ä·8 UÄça!·]gÕÃU£ƒœä¬:,Cr>YÀî÷EÖùsæÖ¯á–y-ªºþðg9° ·ì'áíÎ>&½¶ÝóÆ‹®¼8[›ºC÷"ÉŠ¢l˯úS_2½ÒŸ/ÉïIŠ‹^ÚÅ3ÓA'o×ùeÌœ ãà¹)¤Ú³¾¢†n>¿!ÃZÇý¥—š +â°)²]/LXì’“”l+Æý?ɸµuc¬˜TÊ ©“z(FßçPd0áÀ^^òV¼Øši«–¤ îÖMª¬õÁ7ÍËë­t˜ö¤Þ£ÜZÂB@gÅÏc§.ФÝåH>–ŒäÆB§ˆ%¼òRt­§mSâ<á 9F÷ßÊMƒ8±Ø?<&Ì&®‰øûuLa7ÇWÕʉø(1 )ÃÑoBÕ°Î$Âþ Ó¸üóöJ{Ñ è½Z•;P;é=‘£*"ì'GB(L…ÚoR„Pœ µß¥¡e*Ԯ⠡u*TïÏ“ˆU)˜‰´ûÂBè¨ÎBí’¨:JÊ»÷(„ìT¨]ABS4Ð (!2E»Ä"„¦h`Y„Ð ì–‰š¢]’BS4°£x&¤çx`‡BhŠv)„¦x`‡FBhŠvp$„¦x`w!4E«º ¡)"¨f-D¦x`5[!4Å«J ¡)Xˆ ™9X%HMñÀ’s!4ÅKÐ…Ð,ÑBS<° MMñÀ²"!4ÅcžBhŠF:„ÐŒx¡)"ò¯®FEX†ˆ_.ÿã‘i- endstream endobj 42 0 obj 3477 endobj 44 0 obj <> stream xœíZËŽ+¹ Ý÷Wx=€%•ªÃ@Ûî^d7@Y f7“YÈlòû’¨’JåÜåà⺻eQêð"5]Ìéoÿ=MñŸ_ýŧ?~?ýã§Ó¤}:ýñ¯·û×[{ Á¾~;ýíÓœ œ¾þùËu2Lö毓»—ëäopæ)ÜÎæ:-øÇz;Çoß±ËZÓ“~RW{;ÇÏçm¾NÔú‰Ÿf¢æ}a L¿õYQÒÓ¸óm¹K­4ªq"‹só¯ÆÉÄ+7E)Zž †Ë0^~CR–ø0A† evîµÐ4ä;~·¨ïHS¨ü‰Sl³7®Ÿ/Ë)Xˆ;¡ádü4´@»î‰.WÔ…p#X:ÑøÒ âLŠA¼Lt`,ðLx .þáè€mÔÑxõ6J ô‰¦àÔÒÂHAV\×só-iq!É6€vA™ Nbxáñø` K« "ûº][Äæø]7(„7`žÀZ\ÛC b÷¢¶Km¹ÊÄ}F+o渚¦:¼lÈl9£³™× E5¼ü Æ€[Ï uΫƒ@ø,ûˆì¦:£§hùæÔ;ž4-jpÖMº×âÕ4¡Ú꼤¸÷CÖÊÖ¾¨¯òzƒ añH‚Ëó‰é A•µ±–{ûHG­úÊ9Éq–¾Œ§Ï‚§ýšœ`3ÿ‹6 ;ÁE$ôÐ"•6eai¢=ŒØå: Á¡¾þ½ª°\Ö;cvÃ/Èg/V ÄØæ¸y)ûþÌÆ–; 0Ú)¡rË‘5@±_V&»ÃLÅãwi®â×ÖDð¥Š)dºÈÃèé Õâ²cÌÔU Ý?Â<뾡p¸ËºëeøgôÁ;CDŒì ± óèm€¼{‘Gl`÷ÁîǾGbïðÿƒe/B–â,Ù ö‰;´”µw“ÈÔôÛYövvñÌ· ·<¹ˆï¨ÎЧO sV‹J%M»²=òq2ñËÑÚb¦/Ãý8Sñ60ÎfañGù°KDµrêè˜8rl“ h}äðWFO—ÂK:= eI*Š ¿ìÛ|š^/>hkŠVƽê„g¾ˆÓV\AØOÝâ2c(<+ßj?Ì~Lœ֜ü§ùuJÐ.qÌZQɪm{¾ÖÑp­a¡t)z´Ãk¥¡•’`µçÌØÏ›‰ û /÷Øô½×ì¨æW‡:]ÜLHÎ;”ÓÞ ÉÎ2ïu6¯à¹%½ØJ÷GÒüLÆ"Þl³Ö¥ ª¦Ôû­¤Tx–x)2Oºè¤ËÑm©»DV(GÈŠW>³½6„Ê¥g+Jš‘“u9ZÎ!›Wñ‰YR7z<ãwCî,¨!¾r¸Å¬Ô¥€OÀNé/ë3KªJ›‹Q›åIÙýSSŽzE»ÌY /««'ì$”ê*Q;Ñ=…,B“aŠ`˜ü½>”þ§jùåÒMnf™!MµØ8Ól/vKS¼âts†Ô¤«¨)îh%xg/¾ŸœÀó£ïeç†Îcc®C¦»Rt\”Ч³…²Ø©$]D7ÅBÄW‚ô1* ¡Ö&Ϊ/S¦¯ מ,•¢‘PCJÊäñ| \¢yÕžSÂü8SÓæ±’K#q^y_P–¥°1¨Ði;¤PPí_ ŽÒ:´-›¢¼½Ìt}’,KZU½ã¯E×òS’q”ËÚ6*ÝÈ)‚Ó+IHzˆÍä¯ 9AÊéÃa’µÕòÔ‚KAX> dRÚ/-ùjA Í¢OÚÖ Šyrǵ¢Ú´FŒm3Žw–<[Ö9¹šÉî^lÌŠNµúB¼’ó‘ÀÔ¾§'‡OrH çéØ'½U‹y5•ÝF½…ÖL‰…/Ê}#[Ò¼•N^OQú¦º´¥ÆM|ý2ý§\•íÝ»s@¬ÑùÄæ© Ûv9Ìɱ§¤lS*×%·ä·‰Tî]gÓV±SàèöF7Vç:™»:ä-º¦DIáŸï$õ6~æ0—ç‹õÔÙK·TÀz¨+ß6.ØÞ0´ä°î‘Ke¤!¦°öLsŠåX˜Ï Ìâ]ç ޝÔ2 •j»ø³1¶ G6mvÎ1ÓGõ¡Ã£3ƒÝBCäuèŽÂFñy+×µTÚà¡X@HEº¶Tr¨ºf‚ºt­T·µ¨ÿªp•ªmª¬‘2kþss«î¹,îžC1I¦†p¤İºqóYç|[¢Чܴ¬ UìëþžòíÙê*ôÞëEOÊ^R`6ØË|T(ÛõT(ëñƒ egò¾T½,Ë$“9Õ HŽX×âœîhÿÞ6å]zÝÒÍ߃Ј“Äl4g=,ö±zH¥ªï×Ôô4ß®©éù‡55`¼ÿ^M $ª€-mïÕÔÀ©% kjÕâwkj|ðjùuFrHší¦µk‚÷(–¥j„¥bÙRQ@HB ïõ÷ÊÙÄECþ^fÛVÍÔ%G±œwŠfJ¦_4S»«‹fsÑORYY]©’tkf©ºa§ƒ‡;\ÙS™.- J± *˜í˾“lQr+ðñó¯JÙ_•²˜l©}–ø#ëdÐyYgŸZõ¾ÿ$PÈ(eMòX26þžú—*}Ú}`ÙyT2©Èïåw"¢¥£|~ÅD—c}Ò¯e¯¯òêQ„Šq»— ÒºC¼¤M).aØšZ(nC–‡M –ÞÜ~'³4I”êùÒŸÃB{Áx ºŽžÜÞ•êËŸ/Ïr9¸¯î›Ý·oùu6=ƒçÕåÔ»ðÝ·°›…°Æǯmñœ~Ù$¨tÙ˜×a‚ÕN;´'·û*ðñ’zÚmOf"ƳñŸÙa=2=‰¨çŸ• •' • ù%•гPysX ÍC¡òü« #!õ²§Z†BåG%´…Ê+%ä"Ž„JU¾âAa+¡!"T™­"BÕR*¡!"TV¼"Bå9+¡!"T®³"Be“*¡!"T.¨"".¤£?F„Ê2TBCD¨Ë^%4D„ å+¡!"TÈV a;æÇx€.ù1 @W C<¨ˆ¡âAyñJhˆ³öfš~>ýàÆ¥Q endstream endobj 45 0 obj 2878 endobj 47 0 obj <> stream xœµZI‹+7¾Ï¯èsÀŽvµÀ¦Û3‡Ü ärË9ò.ùûQ-’J½¹ç%áÇn©J¥Z¾Zú©«þ~ùkPùŸOþê†Ñ™áë¯Ãß òs5|ýýeúx‰ñj‡ÝðñËðý»´>~û馴2ÊÞýM¹ûe¼)77T¼_ôMð#Ý/yõ¶LøtVü‹[íý’?÷pSoøô>µÂÇ3.hœñ«Á= (=ò ÷ñ¦->E®Ú1-œM_µãƒ=ÊT(31´ç¯™¥–,â¬#³‹ítÚ5" dù k£Xópÿù㇗·—/ MÚ®fC•z‚ƒ‹¨p¹Tï¹ùü©ÛŽ™¤©âíæ|º†­ÃfÒa>ào¨)P¾"AŒÊÞãëÃu¢5ù&ÈØ Úã‡FíûéèA¢ Òì ùb“Éždáb eQ«úff6šEõ€×¨~ŒøcÒ´9û…)Û&ú šB‹…[÷ÀéD4ÙlÑe:"£ìvø“±áXÚ,´l'$~g¿Ÿ«gUG3ïzŠV <¥°u5è˜!ÝTïI ª^‰ÅnAœ©äoªÚ­cõâÛ^8¶k”ð†T xº«æ}¸ B‡›3w™­I¸Úb”¿–3ûÀË"á²CVïo±ñ-a‚E$y'²8˵ü´¶!±sUGo ùÊq¡šÊ¿ÆªŠüQ$U¬bf„l AZ ½çvv¼Æ•ÏÇ»nÒx]y\ÆL Q¤XMQÙðæí®á Ç|©SV&Ãu‰H ðŽl&áA©e‰tVF Ĭ‡ó «ÚJL%†Q8;²ãX¹k]¯ŠÆ›:»§þè@q¼.Ñ•ÏH{„Éì`dC„â¬FÀEÑy$¥Æ¢”Œa. Š2%eÓ·¿x"UY—:â˜ò%‘†±œÐÜŸe& Ùüâ´â/ysèDTK“ð:03Ýqƈa-Ô"Ì锉ÃöÌ$Ë"eMòJYs¡Â]vÓ¥¹D’&3ÛM½œk+ï‡'¹Ep´{·pAÔFÛ |EZÈQtÉŒ+è|cùuèÝ´ H+"Alw`ÀpÚ¶¶UÁR—kË€Æ5¢ÝCg(ðÖ¦k¤V./B<./ÓÐ¥ñƒœU4"×( – Ý_¨æFqW3ã¼°#M9ÅÊŠjLæÇN³ògNãUþ\`zM[‰k(U·dPY@–])fÙ¾%\BC Vgr•%#{~–*#| 3¦&€‘oLkÈÙ»Ü2÷,zré?ˆˆÈ@麃“wþ¡+?,%*‚ÐŽ†V¨¦Æ²óÌÊÕ·~¯=K¾‰pS±³y–¼Vñ×’ã†0ÇŽ³òƒgŽc㺣ÃV.‡À6F†É’ŠAï« ¦–÷y18²ž*©_æÑš‚‚#¸­fê—=9Ââ<Æ&;v†›‚D®ÍDáfÔãl„¯ÜØæ(íê¾RšŠ.n"$梔 — e£ áÇJþhƒ¯)”2/9_/xì ³>ó‚Ü(¬JBQ†ö²ÆUùPƒ1ôØ…#’,Dzpëw}USáò%œ„©\ì åbLYÂë®9éÅé…u*b×¼PFÏãHzS7kîRͲzÚM·‰‹!‡,]ìÝ…y +›?s•Võª„bŽc*²…ê÷0•k{ÙìE \‰Ê´ÌÅz¤Ž°Ì„à9öW“úu8‰”ÅÕ ÂŸ9ª_z›‰gÜtEƱ¦‹Å Ì,&)FTETA«¥Kˆøë|XæJS•°Î]ulýéÁÀ3¥Ù°JªúõŒÚ6?¯¸çÊ`ÍÍ„¨¸]f Ò²h8,rcg«êwËáH5+`®’㯖ê§Å?i!pÛW÷%ÇrúÜÏ’0+ó:¬sž&R9“zùnajUn7 ýÜèl ZúÛE®ºæ°4²ž\'–£…uÈèÇÃ.—Â*ñœvm:[Û´~ik°ZFs—§°> stream xœ­ZK‹<¹ ¿Ï§ès ;~ÛMÃt÷Ì!·…BnÙrì^öëÇ–dYr=z&„…Úù»J²¬çOr›‹=ýñöÛÉÔÿâ/áT‚;ýþëé¯:ý‡ÖÍé÷½Ý¿Þr¾øSÎáôõÓŸ?íɺÓ×?ÿv5Ö8ãoñjÂí\®&ÞÜÕ$“og{5¥ýc¹ëÛ÷öÉVæ ÿ‡Oýí\ŸÏ[ºšXýlOk`ù/¬Îð§ƒo–Foº•«õ° \m Ú¶7þim¼àR¥ñˆYÃFú³²´%‰ø°™Øå±;~U€°|oïŠxÛqâíï_yûøzûeÒ¤_ÒÅm¨ÒÞÛÆ]Ôv¸…ÏP¹Åú´ã‹JÃâílârI[›=P‡uƒg{|€¦šò âL]vvoL—rÊÞÕ“cw²?-Ìi‰M¢ R÷ ³ø««Þäáp¥ añoKëÍIêónsWºm(¼„OW@7‰´hÛù$«~À*¿<›ñàð•Yp‘ÖÚ§þÖ¼¬º¸b—­šúYI“¹úB!Ð>î,;uÛáêR÷ îXµÖÍ;ùaôz4ìÏÝÎØ5öòé*%øhuR‹¤¾°»»E~0xFËkÍ#ݽ‡›ø¸oêq˜¥÷άR¸rŠ8‡Ü×*ç„ CqÐf !}¦m|§hÙb„ùtÖ–*‹÷ÆžÏÚ.rh7ÕÅÌg‚ô•IçXø&‡;æ›+w¥‹GOEì(ý<=­Hnþ„C ª ö¼Â—K^¹Ecòõï]/JK¹Ì~„ú!eõswoÀ—]ƒMTÿa[Xzô(ëP‰õäÝõ-‰^Aöª¹?¯¸ìøC—„*`ùåä`òdîæ¢V`¦ xÑôz’gn“CÈW®ÄÛÕ÷OâL΀YH`Àw*hg—ÊahyyÓ>É$ï›àüû©Ýû=]åÚƒ¥¹fåãÉæ0á8tqÓdj“Cï]ËúÊK¸¬*W¦tbÉ †Ë€‹P õŠîºÏd2¾ˆœ®¨àB=ÌXì;ê`¨«ž²sd„°‰.ìn<çÐΗü%âùbWˆÝQÈâ4+Ä}è˜é 3Œ#© $&^r|þÌ5ŒÆé)²¢f‡ò~Ó>N-Ù®¥¦ax=€:):ª{6Ÿ\Æ“Þwxóxñù$Ðÿñ”{àçD¥²®<ß²Ògg#б©uš&•âÒPÕÖNûF9ù8ªV>±UèDa©dSÊy²‡ „ÃníŒ2!ô˜’ΉÕ4¤Sd -UÝ›ºöEƒb)gX3a«âS†óVl©â~¯Vn/"Ú•úüID‚W=pG4½Ø›+ÀC”žT·%bl˜åÇLð´'VúTÜu F% Äôs(˜tÓG¶líÛžØbÉ«X½#£Æ‰DîÑÓäêÈŒßo6te!tœ„ºK9Bþa¥»†"Õ,¨54®b2ö}UW&°vÎù¤”¡röî¶çØ{Ñî)¹«]ÂdÜ J “b"eBàüàȨ3©ŽíÀqþ©jõc€ú ¥Š–fQ_·ûua9÷fòoÉ\˜áª¸g(ãÀþ]F~Ô²gÒäº_ðƒÅ\N §¼!ºÌksê:wWÞïåÉ{ìÏ’½±k|Øug³¡¬ie¶a³ë j×RÖú§ªÍ9ôÀ€¼U„Zö*Od,¢61]ŸJDJÀx©–Úhníš9Ÿ ü6{ªˆý\â,bŽØÍb³2¾øVm£ïó˜$µU¹rQÊëˆclâ2µbi{¹ÙEAª9a8Öu_¸C,y¨“pÊ)Oéú"·éº+Ê郱ãÆÞ¼k8>gr'È]ŒáîÒýŽÆx]T 1DƒÖAhŸzi6ÆAU{”Lèf+˜]ëàí K„ÄtøoðÕ†<{Š.CêÓ–†[®©åfÄ”~Ö8 3|ü9jMc.9&@A/f+µ@:0 Q¶n˘~­ì°êG"Ãs 5G‘;W³ õÆFù4<àÔR Lñ`Ô³_À;EŸá`b¡¿¡>i˜¡?3†é˜o“ÄÚö¯’Dt«!tœdHªÎ¬æÜÅt¿ÐÝGï.Ëæ”sô ÛlI 1\¸ä(nrR¦ïݾÿd€aú³wŒß™äQØ6ú!²È ×Y‚FôDkÔÎP+yåT•l®ÝáƒöU—/I|M=÷1ߌ7áW|0´Ù‹újËÅÏõ5`5šVªXIB1’I$/…z@`$?¹îûÉûN™pWņïKÆý5\,Ë2#e=f¾K ˜óf­‰Tã Îü”“¹Š§m&êîìV6Î2eÞ˜…ëôWñ—äõ¿P|·Éq†\ùÆ+g6a Ö~Oä±#á4Awî{TµÈ~عå‘ ²¦þ ýú"òÒ\˜æ^d·M?°!ÄéF•xw1n{Dî&¥èzÜzƒg¼$Ž©obç¶ëP§ž5+NÝgœNi =|Þú§(Ú§Ú…Æ‹iÝÚU^ø–_Ì Ê1c±²œ£m^‚™Ýß!XSjîûq#Hôj’uøƒ±cfÁ^Ò¦Ð]Šqs*fkl¯8dæ¹þ˜¤‰Ö¥=ás…ô’"—? J™ï-Dºâ!%Ïâ÷cOÏ?KnÈH`¢£ï«4ÇN·£yW›„pŠËº¬áÖîïø|Ö„8Ù\ííÍ1tÅ›†öS¦ñ @²‚Á›Rõ±Hd·Hö&Ÿ@"~t¢ˆÜ!Ñøá‰"ò‡Dã"^…C¢q¯ˆöòDE”‰ì–pùd\/(¢rD$®ÑrH4f”‚h9ö1§TD‡þ ¦ŽŠèÐÄ´IúCX82Ñ¡?ˆv_úƒhëÑ¡?Ø®ˆ=B@wEtèS)¢CÅ’‰‚y?öQ{Ñ¡GølVŠhDÃ#~9ýBèw endstream endobj 51 0 obj 2687 endobj 53 0 obj <> stream xœ¥[ÉŽëºÝ߯ð:@;â,†[î^d ,‚ì2YÈÛä÷áX)Qîä=\·-©ÈbñÔÈÒrU—ÿüú÷eIÿ»è®ö²Z}ùío—?ýîò/¸¾\~ûǯç÷¯®æ‚½|ÿõòû/uQúòý÷?ßµèÅÜÝm±÷õ¶¸»¾-~ ÷u[Öü#Þ?ÒÝG~äY®nË«ü-šûGú|Ýýmù,W¿ò§ZÊå­ÜPªŒ\¾êòLÌ”®ŒëïëM™rµŒª,Ðæ¹ëWeaâX/%ªÂ –ÙP¾¦!UXÜT€áÍ^ŸZËeÈG¾·²{./ÇÝÿòý‡_Ÿß¿þØIÒDÕ;¢TÏÈö ïiKÖ~3X¼i«Õ´ì+Ü"ã ˜¸c«¬Ë* 6)?z_©²a¨qpF–7¦ÁH‘&Jö"íµˆPù³ÜeUgõ$Q'«*Vƒ‘væ ®¥øÆëëYØÃ¨›)^»ȃçªM LÈì0ÓR®ÀEB,rÊ€S˜·fûðŽûßNp4Àâ G&ì¢[ †#ä‚”Ï+R¡_÷™:]Då] ¦tî–¸éfН¬;´"§o˜}œÄafei¦Âcò£Àòö™@¤¯÷7ž£ð`ÆANˆZ„›¯w›9I7+òy”êø˜òYÜ@‹¿mš« N5f7m@s÷º¯jb¤íܪ0z‡žp\?Æ·%þ­€)‰\º@C]æ`ê`ól±d§nQ<Óñ‚î6^”6GÚð,agÙT‰üê³5{:Âøï9ÅS¬@¬[&5Ë’9±Ø.VPÕLC¤Ã;QÙ€ƒ3벘GeæÓœ›½z™V\aü5÷ÁàȃkO +I{Å0áÉCaÐJƒÏº”7@¢ |¶,Ð6“©Û¾²ý”CõŠ+*˜_Xè¤uè ÂwøÁKˆs¡“_…¹CqÞ^ú–­h;¥ÜQÉ™dÒø´mZ“cŸ pP'tkƒVa¸2§¾òô¡¶OäÈ–È"Ô°6ò'ÑhÁ¥œ¦É°"Ô72ÃÀ\âÊ<ºÍ Iê”OÀÀ¶Vü¨Hã1"²jú•ˆ-·MéQO‹úÐ}ôÆÁ` rÎ 4*†Ð–~V™`RÚUz´‘Ù‹X|´-tj¸FœÁ&¸1¼¸¢˜n­8Žá@Ñàƒ¤ þÌF,Buh]0ŒÌP’f´m¦d-¥L׫5_#¯¦Ñµ'ã?Ü[X›‘Á˜S|ç™%2ìª\ކÒ%/ˆVI0ÜC'Ð4N`+͂تñÓL­$^i`²Vkd»ñäE÷9ŽXœáÈÅÙ­ìÚ ^ 9šXÈ8mR`óOÏ=G­#‚\*!Óˆ®J¶Ð€ù˪j5Ë¡†– ¶8pzYùÉ2õXjÂ"­ïËClÖV `¼Á†ŽsØÌ”÷˜R7$ƒ5L£Uõê0”œ¶¼›¡&…"+gç%Õfù(æÀÂé+ Ìv£âæàñ?Šœ««Â†FJ*à šÊµÆÍë"Ž£¿!‹ë²².OŒò~€}[<]’Ó€'Sú‡S¥6­qc›‰¢ý ±vD;Ëÿê ƒ©G#BI`k>S?±IYØóÌxºiI3* Nÿ3¼O ‘9ΰcÆjè¢`KÆý,Jm§4Éxïyûª¼¤ÍdŽÙ{&ðPª¤H˜·”¬^î0e+˜ë7ó`íLrî{KN9ꆙKXu])Û,áÑñ¥6W³/Q‡ö’;7:íE§é(3çœc‘€…OŽÅ˜›<þjr‘ˆ#þ£Îì§ÌÍUöÍE-AÏ,œåsùJ1‚*Ÿ:ý3ìºUNyåÊÑת¢z¤Ïgúî–Wú®Ò÷í…uÒÅ_Õ0éK½ò4y¸2i¬/µÁ¯Ïôô¢nÒÓk9!]ó¯å&OSëô_z>¼Ú°¡tHêc£m^»ñÁÇÒVEí´_¾tZfâ)ê%ëÇcyé5Í +Ï:Ý*3FÚTvÅl'~ÌôÖz3ÚüÇO™=iÌ ͘µ®:R㪤ì–n6¬ñ³Ì2^†q~÷TiržÝïùvê"úÆU52Õ`MÇÄ'•ܺ4™‡‹šÊÉ¡µcE›:0§yµ¸|Ì”ª›§òp‹µ°÷Œõ–GóCÞƒjuÓ»ôjRmãi½£ô'à”O02‚ãmä8‡Icòòú¥î—G9›OD?x=ès¡ú‹Â`¿œÌ@‘·0dsà‚Ê8ÖñÜs^yßƉ¶z§2±wvØÂÚz“¼PºcèÓÖŸV§dywW»Ø3½[’ñC¯ZP6ûÀ‹ÏôÊDw“ÖU2¤Çáñ§^“½Ý$aNûkÀTÕ´Pe˜­Ð„“.³œº²Ó“’Âþņ5¥ÒOñ¡4Yiœï1;-Ý s©Š[3zÈD·×ù÷Úw–lÁ^æ¸|ßzd1Üß„– eÅz¾E¤a`ƒH«¶ŒWö3žËQŽ~Ñi5Èœœì4ïUÎù\ sàô(’¢¹¨°¹œÄUÍÇÍ>QsãUÃ$•ÀèƒOš=;Ç Y1 fÀR?–êG‰±jåÉ fdáýöŽZq‡i”ܳ}Vçäø˜WrCд…'ûuÆ7 B´ŠýFŸ@ÓvT'Ë¢5k|3%–RtzÊ?bá <)ñS½½¦ZªßIª—^î š¬•i‡]çãîûçM͵§nÜÈðƒä£ G¦7žNµ<Ô] ‡Si ЉÓ)^c§+•kö}5Ä©ÖnçÜÚ$F2ªœ+èPî$6wЍgaÂAo„…Œu uøÐÁ‡·ÇrËEèN@„mgãÑ’ØE£ÊÈ«¼ZØnQ´((GXa$q™ÅÑp%œìdY”²áp®• δRÙ–LïWæüªhƒã‰ÙÐšÄ øt EÉÚë¸-ã½|‘€ÉZ÷Î XObßíÈæá-B[‡.Ýúx·%è"ì(ãúwèaŽ&Ȫë©°GžB¨†ìÔ„EÿhÓ%ƒABIlIKjZÀE¡ %bæáÁ3,-˙ξ­w¹µˆŠŽà²k-Ê–èvÜ”ûÎ)ò±úDZ–N-–´8ؼEÈçs´N1Ýã„@Gï²ÈŸoÓcæÐ4r!d ÙÅÒasH{ë7‚’â9µ ´1,œ/5tÎíÐ…ìèÕ¡å3ÈÎ#·K1V/&e‰¢øhxq'©zÃËQ”¬‰á0š€e‰a]zœ­bó pÕ:V¾Óô“|ý®ƒ›žÈ î[œ ´ƒ¿A5s<ë&}B¶¦yKØÁʸ‚CÏ–g‰Èìõ÷bs`uüu':Uëû¸DÆÙÜøÕ½Rá8:&Ðù˜€-‹æÊ¼ŽÂýµ1©Êk^jÖBú°/,ªxBÒNµY¬¡l¬8*Ê›57ýÁ9Øð–W« ‰N›ÞóaŠé:ȳ,{¬k·xý¦àÜ#±cy5ÕpaçuÎ‘È =¤õ×(®Õ¯7jÔ³`y<åàÅ5-¡¶¤±YÛû̱Ù- V‘µÌžǨ…§½A¬º7¤Æ{)oB¶kòÒL./Öã-Ÿ~üŸï€åîÿ¾*mYUZX&@^ÿÈ…7>¸¶³ úq’H´¬™é¨Þˆ m U¤!Ž÷+ÈÎZç¸Wa¬ÆžK½ÏõC1bIË qTm•}›ÇîÊ_?«e4ª¾çç `¦ÓžG~ÚA-Yl’—-½µÍ koOŒn…X·µ"¾GÀös£áy ±#Ë­ËfÝäíÑê+G,œøJåÇn±÷ ­¢Éô&;Ó“ÿle¶-ï–dP۰󙎡vJ2è¸ÿ÷’̠Ǻë6z«&£ì‰æ…wÂ=-=Ëöq¦1#HnÍ‘ØEÑÓ¿üÚ'zc¶Wtq≙uÁ±4zè¯5zâðŽ•ÝÉ3ÎÙ bŽÃ¦–‹Cù­ö(Huîo o xÔʱ«Œ{øò·¶ùåXz»ìòXŽz*‘Ú#±3öê£ :²@•ˆ^D~JD/ ¢0%¢7ŒÑ:%j/©’8%¡w ‘ZŽú'*Ñ24\"5#bÍÁ‚HO‰¨TMÑ€€‚dŠÖú%ˆ¦h`ÍJ‚hІ½¡L4EÃ^‹O&š¢a§§Mñ°ÓK“ˆô¬ŸFMñÀNòÑì4_MñÀΫÑìRMÁNžÑì HMÁªé‚hŠV6DSD°z#2sD°:ˆ š"‚¥÷‚hŠ–I ¢)"X")ˆ¦ˆ`ÙŸ š"‚¹‚hŠè ¢)"0¢$S<(íwôÖ0<üñò_Ú»T& endstream endobj 54 0 obj 3912 endobj 56 0 obj <> stream xœ¥Z˪3É ÞŸ§ð:`§n]Õ Æ`·íEv²²ËL ‹@f“×.U%©o>0œÿvwK%©tù¤jwñ§ÿ}ý÷äào˜†K:)œþøíô÷¿œþS¯»Óÿúz|•r‰§RÒéûŸ§¿¾ýɇÓ÷ï¿^wÁÅÛpuév¯n¸…«Ë®ÜÎþêFü1ÝÎp÷Ž<èêìžô/=ogø|ÞòÕ½èê?½£Ë3Ýðž8Ó×@ÏLH9ß|¯>ÒUâêS¥Åµù«Ouá‰/‰W™¡~¨_¥G–UÄÙ—Ê®ÈêüÔH,ˆåïêÞ€ê ·|ÿíëõýõËÂ’qÊ—°aJÿÀ…›¨¨ÜÔun|zybfiºx;‹¥aºä­Åf¶!,ðÄY ïXààrð{|‡|O%:Є‡“ÏàMß¿_C¸}ÿ{‹¤Œà`[$¿¢õH‰sB#“çtÝ@(r Ôù–H}ö*¥¼¯dþ/üJÑUÅà! ŸÇš¹é2,]=ÚùšÂ-Àƒ°¥z¢rRÞÿ„Û¤}Lœ1 âå Úð êXç wºüèhxàåzá).ð2³ö…·¹Ð}gý›ÉïÕÅΤW»ë}ù ´Ô&`@÷øé„á-Ü_(ÑO£Û—÷6¨$Ø lˆÁa˜[‹—ŸbƒjËS\‘öM‘²2„˜0¡Û=¥=$vêÃìoÇ*@ÖŠË-¹ÿD… ¦B]ž¢é(¡Õ0£á­óZ]g÷‡R{·Jbaü‰Ô[„$õ“-¬5’—"GÜP“‹ðC2iS•/ZËôac†É­¢9ú¨¸EH¦PŠ´â“äȱG’É”µÊŸ‡š›‹úÁÞXó§¤J*[ £kÜÊ/ä®’ÉG»Û:¿ëã9¾mF–ªRwa’ŒŒWÃCe•³÷íMuqü:–3fð8r1k„Ê&»}6$?‰mï—†§Â°4¾¶bKvÈ™MãɽzœÙ°#,øpÏnÖ’³q k îÎ}Ów«cã¯Ê= jöZJ²‰´¡»N¿°s¨ö.õ$Ö”jmª*Ö=I>Õ8myìo‰….û|â¹æ„,¶ñ$;d,-Áv¥:ºÂÏìþðc†J«Xxe—êe¼1T·•Øáxí8Ë+Þ8òì¹ú¶º½Þ@ƒÉTN K[ñ¢çƒdÓû”Ã-Ã^û´,¶Š`=7¨Ð#Œ|VuC{ÐösÏÅ–fG‘k^&+• +\¤;Táö}Š<Ä—U1ãžeaÌI'dï9ket:¦ïޤ¡¢Y[‚,„n)Œ™ÚT;,3-"­¶¼äœª—H–ðjŒÈjî_cºÑ7µš6¢xÈh„Y '%AÏËŠcEŽ ¶n¥¡Å[eíï[_ß Sk§†cI.ùù@&Ê­¦|%ú%ëHN=Î5+Çø”k\\a†î2*£ot~Ã2:–¥Œ#N~ªSO;:Õ(€Ð.b¿9 Ô­Öò".½Ì^jØÑ%eþµ¤rs)˜ºjU£]ß` 7w¹ÕXFw"E«×ñ_½÷ˆi¥”ò[Ð#¥ÒÜWÏ ŸjîjãªÝR!—Ü ¼Z]6mí`ÀJ™=/'Ûuƒx¥ÝŒÓ·n Ý$ð7íÿ­I'Ÿì'ñ½zmtÀÈt)§NÒ"U¸°¸ïųðfß…oo‰uöË€Zœ§î+;ЖŽì£ÜüL†‡ ™§æaÛ×ý©¥„µ/|H ©¬[TU¢z>ÓÎÐF:qæ¼cû>h(Þ—'¦;åÀV-`ãs;ÿtjmüS6ŠŒ:ZoÂô+îóÈ0Ãî ~vQ TÌ&<¦þM#neeT–¨P¯ªmÓ­€Æ>hieÝBùw–,x¯k”²çUº8öŽÕfòø\"KS0Ø›—ãBpú)Ëçu×ËsÑ–µç%ØGwÐ#x‡=¿â¬át4½;ö!6“*Ï>  ©¡ÝúÌÚ†©âa ÅGmNUÐW ÙÚ"vÌ¢{L;PøòjÐm­"-k6›æÆp:LêÏÛô€‹ˆÂÒo2¹³HªÏ{©¬+£Õ(¸fª.3­ŸíðæØ']X—Q3Ô"?Ú÷®ºã4n´Ž UñÎ?.‰e1Gm«©±BV~8-ñ  Û\¾ï{‚²7ݰ€Ætm:´¸PÒ%f´ä«ñàqêˆPá6fªEc¶<}mS³™Ž¨™Î‡1}ÌC;îå\ÓÇOó9E™š6÷!&÷ôÎ?ÀñŸðý…ÐÿÂî•0‡‡{»·Ïà¯ðvw¼ÿMP³îøËþî<Óx]ôðÜ‹~ È ø=üƒ‡gct÷˜â3üaÝK{G[¤kB[]~ÖU»®wØüw@g(O({À¿Ï ©"ÈOzÐ~ŒpgŠ÷ðŠ#XeFÁÕGŒqŽO¸÷ŠïäÈ‚9¸[Žª{ò°ÛÛú±˜Oˆ­˜ öâeÁ‹À°.‡ìPÀˆË#D!CŽpr|òýßxU!¯\^)øg(ðþÑ‘ú ( œ@Ô TS|ÒªeW`öu¯¯¦¤—AQÀ„4-]LO#E] ÚlO¿`ª^búAîÙ_WsAAòBo³‹Â@ƒEó ÷ ©4lÁ9Ô ö,Ë‹ºˆöеSa&<ôgÐa,§ù²L²ªaðÁ_²¦ƒ™fÒâSS+ɵOu2?Ÿ3®]㔋Î_Vï>ìö«ù–év%½ZLиwç¡F»ÜZÿ‡½cV‚Þâ~&1TÊ8© ´†PªJšª ™ºžã~Ä«aô—|ˆÕ¤åT°ºk¦EÜÍ}ÓÔx˜®¯M—èôÅ íÒ¼õh¼:Þ•f\]T•"÷t“ÈœÍvŠóv¡ P<)yã9ZPa¥'¨Æ'êE–ŠÅ€uGµyõ&‹}[@,Øp‰£–Sã-j"‡»HÔÍ™«ÿrlØó£:†4Æ Z¹M¥ûîaT®ýäCT†\TÉ­QYª³çkšTIí ·MÂÔˆÌ]°î@“Gøi5¾Ý€Ÿ”¶&õ‘øðçPú¹ý8ª7¦ô ÈÎ ù…„,Ãs¦Tz‹ð!<ÓÒ†Çâ>]3g# ºz»cÃP\ãTë“1Õ¢Å5"Rììùhõ!c–ŒÙç˜?áºJ¤ÈsÙp RXÈ¿™2tPÍ£é fy¨öŽ#vv,” Ñ0­ > stream xœµYMã6 ½Ï¯ð¹@R‘ú²€8N½-0@Eoíè¡@÷Ò¿_’’-)¶4“d2²E‘OÔ£FaøçåïAÑ öl†Ñàðí÷á熿^Ô9(nxüýíëÎ~0Ïã`F8‡œ> òëÉžâ÷æ·ïÏzðÞ o¿ ?ÞaÞ¾þòª@¡Ò“}Uf:¯ÊNøªœòÓ ^ÕÈ„éDO/üÊ,£WµÈoyUO'ú\&÷ªn2zçOP2|•bY¾¢¼iÅ®›ÆWÐ2*VÁ$,Ï¿‚I‡8D(q/c7À¦¯dØdrñ >™óyöøÖ(&Ää…ŸÅ3Ë˱ӯo?½ÜÞ^¾öÆíŽryS*íòÎ0×®Q{XÔŸK¨Ñû2þT}2 ¨-kÈê¥+« ¤ù¸G“E¯å¼Jéx¦ë¤…wZZäX%§7-í²”N] –3¤‡}  ©ñ´ÚJDm©‹V-5nR5~T¯ÓÉǾ`TQzDî¥;ùUW²ÓüFkkî8á½Ð—K’½b+ÎC³nBf+ºÜž<¡”¼œ†¤½ىܒӀR¯8ÌÝ6tƒÖ®Œ¡t°<39!©ÊÜQ{%ÔŠÆ ™+ŸœÐv™ûN/†{¹åôY2–j½P¤²n¦Ä\!ΤóZ@G~å°$ò2d´¤4ÏTŠ/w²×|ŠIw1͵¬D‰ÉƤ™âÒÅÙ{`tU”Ø5÷¥V,1”O ™ŠÐ1Pvn ·ëuÉs /‘둌ûΙÜ&ŽSoÜ>¬?É5ò[’7ÊžuQ p ËZË”‘á[òðøš£evØm×v­kI*Ë+ùR%“²Ò…†m{!'ËAæPÏŒ«Ü.éËKÆmHf^ [ ã’ý¨2Rýq“¥.%ÄwAþ´©„®4~! Ü¥) •©¼u¥xp7\ãrÍ,¥s¸àÞHzB¼¤÷øŸ½Èf(I¶-c)<Ýv÷d#Ñ´—›Ôì|Åz—'$°sé3p«Ú…¯øˆãXÔŒ}bD}«Ýç=û¡2n|Y|b1^èó<Ÿ¼:£YeH®+mQŠŠ¾Êõ|Ø·÷dÅä¹, âQ¦ÑÛBÙP—SÅ%wQÚ”«’á±mI*Ý ÎÛö–(mrª«RL^d›EQ®[v+L"T‰þEÉÕ@mñU–*mß´±¯ &Š¡âÚ ‹†sÊ/’b»Ám Ã~!^ñzKˆú%Ÿìäþ÷HóïXä™C¬Þ%î5—4$£SÖ¼Ça#V£©<‡$@Þ9r·&eÅ(ƒ† ûŠõü˦ \‰Øu_'Êz绊ä±téæv¶Í±«ºá:ìlRð;Õ2K‰G;“9¤¼r•4[dÕ‰©©x•ƒ5Dy‘9Œ.G^8¼Ûr‚.˜lР¾DL=ê ÙiÚ\5å7§6/8×:lÑýp™U$øÈÀ&¡|£sÍ]Z¢n³õh3¨îÒ©ªÚ:mÜâ{qÙÙ"¼zé”Èûê7 {ÁÛØ™n-¡ñEg²ÀÁ™¢©Äšh©î0ŽääJO³XqSÍ}ƒf_\¹${·öRt¿[¾ûÞî8Ý!’d-«žr–øíÊK´U(`|ašuç† Ÿ…M+¡­Y¸ˆƒ^|<÷xJxû9ÂíäÚ^ÇÖª£m‡©Ö,Ä5ˆë‰Eüã-eðŸ³æo¾zSÓAOLz¥@üöûôí~æˆûКY„«°¡ëW#%6ÐÐöö½{;ÒJý7Ôjöc°Þ "t³[{ÆWa¸štÝßó—~ÈÀ?ʱ“VXgELÛÙ n‰¸‘ˆøD%Ô«éPˆ¯A+¡y(Ä—ƒ•P ñMX%´ …ÊR%²E¸½/„LŒW!Ñᯄz…¸ÝZ ™¡·Þ*¡!¨ûV‰ Ñ ºa•Ð ¢%P Ñ º•Ð ¢0­„†h Ê©¢AdöBÈŽÑàt vŒ‘mWBC4ˆ±¢A$"•ÐÄß•È 6ÖF-Û1>Mÿ'2¼ endstream endobj 63 0 obj 2374 endobj 65 0 obj <> stream xœÍYËŽë6 ÝÏWx]`R‘zY@ ŽEw ‹¢»>€. ônúû%);²b‹ÉÜ™ 2‰­Ã—e’cÐýûòOgèòÉ\×;ì¾þÞýüC÷÷|ßt_ÿ|Þ^b<Ø.F×½ýÖýx…°{ûã—£ƒÆžüѸÓk4þ„GL<½ÂÑôü#^éé™— r÷bFù+Kíé•>ÇS8šIî^ùŒÜ¾È‘,_QÖ$Fz‘Ný¬Ü©àf,ëÎ_ÁÍŠS¾E(1oÆf€Ÿ¿’H`‘³‰ˆ³¸X´çU½ˆ‘g~Ö¯žyvÇŸ~}ûéez{ùrI›ÂwB +^LeçÒÍ’æéÊŠK¶æf^C™óéö”]r IÁÈ“DŠƒo²!hè6BK®‡¾‹ˆw„À9ºQbç.ðO<ÏýŠ›Wk˜à²?ýѱ;å‘lq\¯¦m,›1¯¸Ì|q1Æ­à8ð6ŒóòJ3ú™‰,qaóBZæn*3Ê=Ä=Ë0ïˆ|ÞØcý‚X8ÿâ:*u1ï;…â*b³(ökÉ+±dmˆc·VÛ‰ÎÞæ$\mÅP{‘ÈF! Ë7;96 aû]F°´·¿Ú<ø{n q:Íñ2'E[W)Ѫ4 ÉRÖag£`¢ÝH!9¤8MæJ»4:«™z³øvcø"ðh&8Àý¢{öâ‚A]ï’‚Ñ::ƒw$;ÇrÍH²œ³yf -žé„=ëq=õdü…NƒAÜ9?­9»Â!î¹Ä±Rœ§(³ÏºâáÀ8$g’3ðwv‡ßì\Y“j¦·$~#˜y$Гhl#m*™LQ ¤ÖϮ̗˜Â÷RΈ3­æ®1|÷Nª¬ØPE5צ…ÓwQfªÐ&>àú e×¾ŒdCÛä²g{µÁzÚso'úå­³WçÝdÁ]å[àªJÊÄ]zç ™w-úLzW‡–"ËÏ)„†ÍÊë8Tƒ œŸCÍ$¾ò¡Ä24ƒ|êä\²gñ¡Aù…ä3پɜÞß“pÙUžÝWáž™É$„rš-j €`©nhHÀQx½:-è/ ÷^ªÆùxOº›qÃCó²ç$šˆœOãA²FÛxNá"êù£6pVîÈf-Qè–Þt¼ºaùÆè ¥'|båÂNŽõNÖZ2”™/bfîñ~ wN ùRUÛ8k–k\Ž7Ë4aäÄÉ/©Ý£ –zž8®OÓŠˆóü¾»>NðÛÉcÏè³#]Bů1OÙvå Ñ¾RÐè¼Iüúâ¦X! —ÃM=æŠKß›>Îúÿ}>…>¦ÿ8}lr8{ZUL&ÏŽì÷Ÿ=&R5å©;Óœèá{džøÙÄi¨³Æïi{Ũ Òê©;s¹9þ…Ræ [*4·dscªN¤K€•û>×1ÔzŒ5µTg\£y_¾XlÿïÉØ”æZ¾¸+NtzÛì$r¦l¥n‚Éù ‡í=—QS«<ÿ´ìÀ^-ß?9;v´IŒTüGTþŸåô˜)F]W”æ‘^Z¤ÅÅé”qÕ¥¨¶2èáÆ‹#[ß+‡Ð«Í…Ä‹ZK'3£ÁÒX|Ôb£SÚ†çóŒö²ÕS¾Cl |õåæm²gÚ7ÀV’ÓuG®ìõ_TS‡ …~p«ò”ÃŒ^7Ü´ÚŠOKYÂ?xñïŒDV@{8"1Ú‘/ îÓ.2{“¬¢2 ˆã‘ ¨EÄ͇~Í'±9Èý+›)Fù4Ùlpë”Ê…­Êg¥¸OiGÀnÛðžÁ!ÆtpO›19ä™ìµ5¸Ä„2ÙÎ×yfoçÿ€´þÃ``ÒŽ®9ÔG®O£ +Þ˜<Â5¶]Û ×±* ^•ÙoJ¨æ. ×Î>UÖjñ5ƒªqf5;DU£ÊjD@ÕÀ°€ZÃ… ªF„Ô·gP5ä+ ÖÑ( zW@*#êqY©Œ¨‡[¤2¢[- ¯3¢TʈzxT@*#ê!P©Œ¨Ç:¤2¢ÃʈzèR@*#ê1H©Œ¨Ç¤2¢Pʈz °€‚Έz|P@*#ê–¾€TFÔíy©Œ¨[àRQ7¥¤2¢n/ HeDÝLʈºÍ+ •uûV@*#êiEu;R@*#êÆ¢€TFÔMB©Œ¨[‚RQ—ê¤2¢.¿ HeD]ðʈºh- •uaY@*#ê"qõ:#ê’°€TFì¥F¿bÄ—î?ày‘õ endstream endobj 66 0 obj 1748 endobj 68 0 obj <> stream xœíYK‹ä6¾Ï¯ðyÁŽJËch·»¹- ä°ä–Ý@Ì%?U¥wÛVOrK24ívKªR=¾zXt¾üÑ ügÝMZvo_»Ÿ>u¿‡qѽýú²¾¾X;¨ÎZݽþÒýp‡d÷úíË,@H¡3 ½ôÓ,Ì"g1 »ô0‹‰þ¸¥ÇÙ -Yyô*6þå¥jéñº-ã,n{èÂw1M°ãËkE+¤“b¨E/ÔÖ,ˆ¹¡X°d»D¯Æñöº;ë`Ù0¹Š©Dek¹Ñ!Oñ¢¦Á†X½þvŽ0; »’ã-DM.а”v)M Dµíì¦Êܯƒj&×EaÛ"Éo!½7£ÅL˜[k]”ZØoI¾bÇ¢La~ØpoÚÐ#åÖe].vÐxZãõ!.Ê6%R&Ü£‚œûƒwîe5Cã&e®}6dš#¸q‹T78aó²B¢ˆºÚRUE up fê=&‹W°%±K~ô[ewæj,tÍ­ÅpPqËÁþ´ÖÉ1¦.\‚?7q‡Mܳ±VM§Œ^~`Á!#¬ñ¿º¨»•Ñ“6ê†ÿŒÒꮾ)Ðw¾iÅÉ–Jî6‚ý8 Z2çÎ%”Bܤ”Óð¡ éñÞÏ ± Ò¯»£V« +`Áh÷ÍuG„܉GSœÉÄüßÄ*ªO²’J¯Á­ÿ©8²5kÈõ½0ÀƒyÖoÍ6ø…[4E>üpžž¥¦^x{ÒkGOjÿ»6Y„N•K0jlbŒ2ÿÝFXÛäFø£~Þïó¤àcªG²ÿF#¬µÜG#üÑÄÅÏâB‰>á±Ö1uíz  5TíþGaÇÑh2Ûàw¶»žõ¤c3ó}ô¯ÊŠ˜¶¿‡þU£eß¿¾Ï{ÓXžƒ¤uøDhÜî¡…ßFÌòôÕ†ôON{Bß … qöFœ㮘W‹÷‰ £ÅvÎ ´T`ƤïÛ×îÛ§G¹4®+Þk¨VˆIœ…¢'‚#’³À$ÅlEtVc=Q>„­ˆÎR±'ÊGZ‘måc­ŠhjU'3™È5‰ª³˜HäŽ ¢òp$“œ§x’ê#åLOT3d¢&Œ9r­kã¡8H¨ˆšx(Ž *¢&Š'žŠ¨‰‡â©§"jâ¡è!+¢&Š>2âÒÆCÝ e¢&"êö'5Q76™¨‰ˆºùÈDMDÔ-B&j"B©½s‰(#âs÷Fäÿ endstream endobj 69 0 obj 1602 endobj 71 0 obj <> stream xœÍVMoÛ0 ½çWè< )J–ìØ>ìV ÀÃnûv°^ö÷GQNµ–’vCWñ‡¤÷H‘/"á€ê÷î—¾¬·£Z£ÕýWõñú¹Žƒºÿ¾O;礜3êôE½_P¡V§oŸ:@Ð@½íÀôû¶Ûëpý;hÇï÷<;„%£Œa’§,¥~Ï÷©o:˜et w>Ê¢0Ë«–5> ­ð6}Û!ɨ°¢Y±Áv|E³öqˆQâÞJÜ@»¾2%ÊÕÅ#º•Î%ëqU+B9„¹öbΆíØþóéÃn>íîE’|sСÄ1>»6çöÀl–ï˜V£7îŒëÍ–±cŒ!˜Âm–H…àCtDk,ñÚæÐ*Gšw"ÄZ¡b­QLÏ…×9…‹«¤À€ B‚–¿= 0ÊK‚Ÿ3Ï.¼îˆ(o ‡ãô£ì)®F( £ÙŒ!¹8#¢'ÞhtL¼ðèdˆ)9ùšü^ãØv`Á‘ggœÐ™¡f´ášÜ,S…+˜™˜Â2U)\Ë÷- ¹ û€Mð'^4ÐB YÓK3Y2´kfB³ÐR5ÕØƒ.›Ò¼eí¦­|ƒ¹pƒß-Êøs…á9r8§ý˜‚ 97“cs:ÐȘghÒz÷¶„b[zKB±JB¹-Ë–ždùâ¸yœ©˜§qLYÄB>o–„aIT2ðX—Ùg€ F³± CÞ'T*>Üž¡¾áê[X(JÎV VÝqPøSo«¯îЖúžçŽÜÿò 2†J’¸MÂFûW^ÿ÷¿¦  Töÿ‹ ¨-µ·HÚyÞ 7‘ô¸ŒúPêî´´w@i:imáK-2ÀlµéL±+åúê.[JÞ0HKÙpéJ[nAÚ$oïÈWAYCw!”NèÊZ³*å=‚²ö)J}rÑ–sEq$kj¨T##(kdÈÖ@yã‘@M”5 TUÃe Oª¬…Í0TÕWú3H×Õ×몪!¯Ð TUÃe¥Mªòj˜@U5ä5+ªjÈkTUÕ×¥ªªá²¾$HU y H ªò“ú ¢ºˆî7@I wêÀÎZ endstream endobj 72 0 obj 895 endobj 74 0 obj <> stream xœÍXË®ã6 Ýç+¼.p]‘zY@`ÀvìEwè¢è®Ó]˜ÙÌï—¤²bYAÒ»(‚ñuŸ£Cú”GÕPý¸|«}l°µ©ƒÕ÷¯Õ¯?Uÿ,×Uõý¯K¿x_ëÊ{SÝÿ¨~ž ¬îþvU PéÖ^•i?š«²-^•S¾ý€«jøKh?è׎oéåê nòWnÕío­»ªQ®N|%—ù@˜ååžÀH+¼®m® åª°‚Y°¼ö| fY8Ì—%ò2–v9%J`ÊEâ~¡óqõù®F(„²ãßšÝo–ñíï÷_.ãýòå!“:¸3©„ž^¥rpa‹Ø,!Þ1Ìj6y'‹j—[l˜sH Üø0J¦8ùj‚Š.#œñZW7•×H‘1V`„D º3hcYQj åÇÈÁÓÒýü¥çä PsþO(Á6µÏr*y²HæÔ‹Í‰T-ÐËé¼(;q‡,ÆÇPN,ë™5¯håyDŸÂ\ ÈÄÓìÓeÅf‘pª:ÄbÅIÝK |Z"l ¹u5»»bG§áj°¿PØn¡ N­ÍA8­¥šÉ+YÉÂ:ÑÎä‡,ÌÔ㜷fê¥Ìh£¨Ue& ˆu[ÑÌ’w-`Ÿƒa‹žûŠ4ž¥ÂÂÆ[CÙ.èz);=K¤2ƒŽžÓ„@Ç,EÜÝÞÿ>'ñŽ ‰¡§&NVüh«ƒîpԀ㠺PÛ3>`A=Iš(ñ÷ÄÏ+äRu—ä:·–à3É;x ›3mõ5:­:m(FGÏÊ19FT0AÏÑÍÑBàèŠÑX¤Vuˆ†á Ñ,¯ÙÒß”…ùÞ¦ÃQè)©¬‘²4è`¬ÖzÐ7:êé™ÌGvqÜÍ I ì5RQ•ä¡=8_±iÁ䑺 $UO¤™rbŒ=Z¸È>Ëx¬ÖƒC…@ÃgXòØx&ôÈõÞ£µ¡ÉUÅ4FDZ(ÚeutâÐ).g™Ìð¾)°1¹¢àYDнÀŽØ-g‰î©ï2ÌoJôy¬Ô¾É> stream xœÅXM«ë6ÝçWx]¸®fô Áà¯,º{è¢t××B…¾Mÿ~Gc'²lIi|y”€¯¯ístf|¤Y´Ðüsù»ôÓ^·ªq ›o_›ŸhþZ¯‹æÛ—á~±¶•µª¹ÿÖüxƒ°¹ÿþËU€@!;}ªûpW¡;¼ #l÷WáÂ?¾û »}xdà«£˜ø/?*»:N¹Š™¯ÞÂ_ù3ó)ò3> 5óšÎ]AòUfµbÃØË)¨u`¿\"Ë[É‚ Ðë)QB \%Ž`W:G_žrLÁ”}¸ç6÷tGw¿ÞºÌ÷Ë—]&¥7-fR Cø!5çŸ1›¦#Ä'ÆEÍS^a0¥}krƒKi€)fÎTH¾X„  Ë%^mZ×X‰ cЉ¢,AŠ2P2›†”àN'1€ ¹¤÷%Cú Œ !OȯU'S¾–)9uœjõ8µ|ÜóõÀA>sKF׉ u˜ÂóýϬ\t)‡\9@ˆ¦à9èØ‹]™èï†Înt.¤–^ö8KÀYiFô@~,©TAo/†ÿ¤V vPV-+‚‰4xš3«hiÉ2œdãÃÀ €2qÀ ðFÿ[JØ€¦JäÄn\ʲÀ™V²J`L«R ¥žá?rTF Eë”—V`ou‰‚¨dÝhõ»‘ ÖQh&ø)["›…jé¸Ë}1ûèEe ¤k‚MÄRŠ^*2¤¡Ÿ êCÄÃm‰k‰âìÁV£‘þ褾-òÜs®¸º°#ßIa¨÷Ž Bp¤·4oò椔£œHÞ,o¯Ä9Ù{“B’æyy˜ÅX•™lØ(äµf¥å+){žœ°&íL\çf‰Ú»ýl`Y´zkæz/df¸Î½NíTnÖPLstYE+hO'SâU3¼'òLÍ ¤—‘ìy¡ïW‰æ¥ë2Ì'%j››aÕÅ@·V9’8“'$?J»V5As×ÒÂò¬€àåĹ·ÒxwhµwØŒÃ{…@£:ØôÍZBÓ#÷ò?UK œß§–(os¦«Õ’ äPKÞ‰7ÃwÎÊɬ;ÏV’ ßIavß²|¶Žß>J–|ñ•”#S³ ‰ƒ´"VMš(•mlB4¼¸ÄL¥þ2¯$y—|EYq”ª@Ì÷*g [†ë¤» Û§|º°exO ß§¬xÏÉ“.ß­üEMÚcòNYCë)í[¹ÿ@Àbdñzä¾íä rýDSú" `Õ\UyPÕÚíNŸB\M Ù@—BdP²ûŒ ÒÆ‘Aé4‚JæX@›Ýf„}Éd/A¥-ùJ¶SMØ*(ÙêDTAÉ$‚ŠEšA§hÃI÷RUPÒLGPÕ i{AU7¤­lUݰm:#¤ê†´ÉŒ ªÒð²u7¤}TUÝö8TuöûˆªÒ.!‚ªnHëvUÝÖÕªº!­uTuöþDHÕ i­‰ ªÒªð¹¾4ÿÛß#; endstream endobj 78 0 obj 1177 endobj 80 0 obj <> stream xœ­\K‹,» Þϯèu 'åGÙUÐ4ÌLϲ»É,.Ùå!'»Éßõ°¤ª²ÝóâÂÜV©d–eY’]gzt§ÿ=ü÷4•ÿæu~Œ§%úÓo?ýåw§ÿðóéôÛ?ž<äüN9ÇÓ¿~ÿæNΟ~üã×Ëä&?…ë|™âõ¼\¦ùê/Sšòõì.ÓÄz=î¼òŒO_¦þ_ ×sù{»¦ËôŠOß௛ðñ 2œÃ–ñ§ÇwVœ±Ýt]..àSlÕE–…¾é§‹ÜñJŠÂãÆ†›ùgiÒA“ ñÅen.kïôÖ‚M`“OÀ[ o†áÌ׿þøãÃë‡_vš kzô Uºgè¸B…Á­2†ÒÚ\þ:}ã…мNgq^S«³Òaéà^QS ü‰€ø©<ö®×Sö©Ŷáð¼×—΄ŸuŠËäŽg°Ÿó—ò3]¢¿ºÌ¯Ä¹ÎÖÏ}Ñ~i¦r«®dF}Ðýr‚!Å˜Š‚Àúç“/FîÄþi¸úÃŒ» :Ÿ²ËåïÏ“ ¦©Ÿþü`éŸ'?ÃSêç)̾t¥Wª¸rV±YÕ0QZååZ ×Ò RyB PáYZÀ —àÆ©L‘ÀEÊÀ­\‚§\C \áZšá*O(+N‘Çi?%ç`ã”gœaŒúqü<WÇÑá8ÛÇ>¶ðs¨ŠÕ(Aº‘ñúv ÕÈq ÝH) ÝÈà ÝH˜ ÝÈO ÝH ݈¾ Ýv }Œ-©øŽ*øRºÎS(ÊÆ²§—zª‡ú$–ƒòï­W9ua8¶ÑFx…RhÀ¢9L±$ê7Mg*–RY}¹„¤%ìò3ÁƒÄ•õúBâ&û€â qԵܷZ$¦rjàÂ{¯¡ÕCHphè2§ëµ$|p°ÈEm‰ÊÙ)ÍûcDÖ­‚»bn®!–ðä±¾\:ìÉ.¡Ìùçd½ÿ|¿KƸl.wc]h¬TÙîŽxE·»¿ø›¿utëVp“ñþãý…BL<;ð«9ÈÉeNǃ;´ðŽÁ}H†÷!™%µLðwwâ‚GUt\óÜÙ<á®·/Ó—ƒq}@‡ö±€ÃÑ w¦XqžúÞŽTš²x`ž@+tèGR~¹³sîaùT{Þ}/>´í9-åïÁC]¬gTÚF>G«p„çžËú¬49­ÏJ烫åhÿtŽ÷lOt»F“zÀA!¶4ñA-ÚŸ‡ãe>cì{ ÒJ£U×Ó»´òIé}û’…cƱ‚dҫ̨Î{ûËA÷üEˆ‡hÊ^©&_p/s,؃q‘ìMjöÌ:‡ÉŠ«U_@—02WÓôážtñfw\‚‹Ç -¿Ç%4'ÿþ¹tJ|ahæŠñÌ…zj¤jç‚«örf.ˆMËýòÆ^–6ž^DµÙg•¢ƒ‡W6Kr~ÇPå>¾Þ˜6Óoâ°:a÷.§`'©ë|ÎX9t Ó«'<퀻èÔ° ¢i* }°Êr£Chp´Ê&W·qAèrøIÛÆ( “ ÎXèrpª2Û>êÒ/ÆÝ©äbmé(ñ+hÚ•}ãuïÑú'195‡7ÝP—i—þÔKúäÖ{8ë`Û…lÀ›ÄoÞç}b×ú!‚„Bu|BázXÂÙÕ$ãë5wØ1çºuóºÐožÒoö/£ê­ýû7¿±Ëô‹;’”Ÿßq™-Á¸LM ¿â3ƒßçpâ69½óûíŠóXŽ8¼d°ÃÍÌ$ØÁ¤‰;*á=‡¹G6Ó{Æ q¥Fç£3{Óu;ƒ} ?QG\#x"¥Ñò~ãø`´*(d9övÇ™ú”±¦8ÓâÒ[îüìÉå¬Ýã0¨RµÚþ67½æè{¿Ô9>›¦Çd%>尿‡ÛÍá}ÚQã'Lt_sÔw\Ṡ˜Õ×䆮©!èžw2ÆFXMH²T·0Êò¼íãC9ž+›^ $A.‰KºQZOš¼UÇÇɉ¯Õ¿ã)¼g—T?9ìÔ4;ârž÷’ä$“žsdê=UKØͧ—”Êt7Å¥¡-訽¼ӑè x©ü‘Kâ^Ù3A=­×ܪ¢ó|‚jÞT9wã’±wÐýî™´æ$c¾ø[uéuò¸¾²ZSã½\¿^dO®3(·ÛÔ0r="º“úŽ ÝT"Ï:†³×&Ü·ß_Ê• ÃlÓ+¬ÒëGëÇd”‹ø¾‘¹š0Áx"‰;îêÉÝ”h¶÷wÓô/&Ç °1 Oä|­É#L±Æ9eÉ꥽f?LF«Yæ4sÀ­ Þæé~ÎÛ賑åsØäv.æõà@溰$êÓê¢[+Ÿ¿ÞmI>ËØüÆ]ë©”(ºY¤ µÕ˜ÉŠÁÙÊâÛ^~ª…ï{ǿԦþÞ:›¦ã¸'^[Ù„T/Xt–Å.¼ OØHÀUÔÄœKrÔ(-¼^ëÐç¬cÉCê‡÷6á28Wvï®ï3™Äö³jÁ¬‹ÞI­&°ta!vH+pa¨®ˆMKø™un–_uÝýlv+ìO:‘ØÿÙ;dï„ÂnIÇR÷¨nŠ oW™•i®i£ý˜žNx‚¶ŽlÊRÛÙ×Aë¦È¯ýgæ«j»º6jìE¶EqãõÈ®>ÞT“Z®@Ê—Ë~ñ©,¥™Ï^‹%rüÕUéÍ¡Eˆð¾ŸRßõû f0¯ÇìûŽÝçÀã”6©çñ…Ø0u„LÓ S(ÿ昪· '7¡Ý¥i™\//A!½«¸ò#¡æj°¡0ÒÿP ™“ÖPÏ “·m„º—ŠQHÜ6By(¤…úP÷&% i±~#Ô‹˜IH‹•Fhí:ÒRÕFhh&“ß -Âä¡¡E˜0v#4´Ên„†a6òÐÐ"Œß -ÂøòÐÐ"\JME¨Eürú?J@ “ endstream endobj 81 0 obj 3537 endobj 85 0 obj <> stream xœåW{l[WÿŽ}ýv'ÍH„»îwm‚íë<œg–ÑÖi]½$ëìʰ9εãrýÀ¾nR¤Âc O]µ‰µ $¤jÒÄCÇe jB‚? $`¨ !6 õ$„6 ŠšòsOÜ4­:à_|uÏù}ßù¿ïœsϽ6j ¼ð,Xa&WÊV{üý €tçÎt¹wÞøO¨{)_-”ΰ,U¼mýlþåG/¼  l¢M|]Ë®u;¥ؾ‹öcë¨ðlõ;P~åýë%cs.yìN”z%—]¯#´ûySÊnVëž‘€½eZΖ´÷΄Pžp|P­Ô' û€oWkZõø»CPN¢üm¼ úX»ÿÏ[1kÅú}åEÛ€í‹p„S°†Ó~ ï×á0|žÂõ_…g ¯Á·`^Ãpgt.Ã7áÌÀóp–à;° /—à{pFaàÓVà3ðYÈÀü¾ÃpÁy0àGÐ =Ð %¨î${ØÇ“)6&Í ôh³‡SÓi¡;—¦¿gdÚe$BÿÀ¼á(³D–RGCé`”Y#Å>Êf’© ›IG™á®ÁPðs©?~ ]êfà¯é@(ÈláKœI‹tãÙ"™SQf´>F^Àìô…L&ÀÃ8"­ýB5ÓV9#Ý]t2e®=Ç“ü ÃPf}x.D™r`žA2ÕÔšYÊÁD LšBZ2%žÐm²óüAŒè‰Ð߉r¼cŽp&Eél(‘=MStmÕ Áí:xfLM›t¶™È†š´éB<8›AK¬+ØŒÆôñ‰LÓ×ú‚Á½ÖÄi@§9dó¤äf‘½&“‡hja9d$jbAs¡fˆ6çš¡,w0]xe~¾ ÝÈ»‹ÀA÷®š¼ eO?³³îº'‚E4¿Â§m~-Ôt0šL=øi:Ê7¦7 Ø.‚±<¸OVàŠ—@¸eõ\¿â³#p{®æ1ïµ7IL+aFü- ¿Ù)¤V £ØÕýC‹U±»=û{'¡å¶¢ ÄæpºPÚÓå"A2Nxgí våɧ¶þl¹ºuyAždn»¬€òοþfqÞü†Å•¹ùÅ¿µb±ßxÇvñÆiöø>¡Ñ»æSÜØØPó ÅàæºÅ U]]7Jºð–†õ\­X5êj½¨ c ‹P„24ðUL^ jøªåZ u«pÛ$¬£FÇ»Š…cøšæÚ êtˆ >z }(~T°75°_ñ(¼/AqòØæ¥w6D¶‚ð­¡Ï»,¬ Ë É.'rÔ±­ãê†Yä°ˆcýˆ4Á¸†öºàÖ@îºðÙí;€žÓÀªLœoG6…UUÔ_ÕdE ¼¾„Ìt¯JwÇW‘ÛaÁ;‹ãšˆp;ã¶ïkX·&⮣ÆÀØSÃk›U¾m£bì<¶¼JCÔ°,¹RüHÄkD¬„‰ã;ðè<¶ïÀ²–ð.à¨.Öã^ #·A짤ÿývÕ”°Ã9ÇÛd0ù!^'…To¯Lóñ{¨ïnŸûïÛûÞ¹z››~W–;Wæõ3÷rü7{™Âcð8iïÐè°?ïd¸!.™˜lÌÉ|·Ÿ·j«¨U…I0ÛÎ}gÄ:úÕĬˆU±fúŽÈ&Sñ¿[ðĽþo\%·¾Ìð½ÀœÉT‹—Ò­ÿ f~üÀïYBðlúAüZͤ€9èQf aNzôŠ£a Á…‚sD n\ª<(¸L0¯tî@­·Ç‚‰3(úèÑ·Àû…[ÐÖt¢/·-¦‘㿹Mÿˆ endstream endobj 86 0 obj 1981 endobj 87 0 obj <> endobj 88 0 obj <> stream xœ]Ínà „ï<ÅÓC„í³e©Jɇþ(NÃÚAª´Æ¿}ÖÄm¥@f>˜EŸÚsK>éO¶Ãƒ'Ç8‡…-B£'UVà¼M»Ê»LTZØnN- ¡®•¾Š7'^áðêB/J°Cö4ÂáëԉqBJP¨¦‡ƒÜófâ»™PgêØ:±}Z‚ünkD¨².ŸUlp8Gc‘ ¨ê¢h ¾\…äþy;ÑönX’¥$«ò\åì~ºQÛX?mÀ.ÌÒ$Ïž+l{Âßï‰!nT^„0mŒ endstream endobj 89 0 obj <> endobj 90 0 obj <> stream xœÕ¼{|ǵ8>gvWÒJ¶kI~[’e[¶e[òÊOlðblÙ`ÀÛ` F6Ø`ž6¶!!$„BÒ’æ·MÓ<‹  I ióh›äÕÜÜÜnB“ô¦~ý%moÀò÷ÌJ6¤ý}ßÏäÝ9sæÌ™™3çœ9òÈÐú>G¶Ž(K×ô îZ>¯–ò:! -Ý0âܾ¸¬Óg ¡Ë—¯É |ø!|.!ZaùêË:ÂS 1ø ’þ¾žÞw „ÌÁwRÖ÷DnÖâ{?¾gõ¯¹^ÊZ—„ïw ΤÕK{í.'dîÃXþý5=×fk‹yBZKðݹ¶gM_÷ËœïmØÞWƒÃ#ï“ü1BÎdåƒC}ƒGÌ?ï« áþŒy€_ö‰Ã¤†½SŽ4Z¨7ÄÅMf‹”`µÙ“’SRÓÒ3NW¦;+;Ç“›—ï-(,òù‹å@IiYyE太êÉSj”©µÓêêÉÿ?ÂëÂëä&a+±‘êýš?‰XÉu„Œý…½]¹GæÿK…N½C2d“¯ÈçW¼HÞ!?'arêjhð@=È9ò%yåŸaE|˜©&Ï·ÈËäÙGÉc0Jþ’qžÅË«!BÒó8æ­'»á2l9fµ´qÿ\“aŒœEêî&gÉÝPGÎ Ã\2ü;}™<Àm¥o׿Ùt7æ‘÷Éëà‡z2Lž!¨†±½ÝWcäù¹—Ür%WøYäa+}ŽXÆþFž#/¨ØLv’î‰Já Ø‹k2t0>¦¿/Ô6r+és”Žþ_î$Ëñêz77õÝy<2éü)øæ=ˆåg‘㑇Ébrˆ¾GÚÉ_‘î:Á¢Ô/èhok;§¥yö¬™M3¦76ëë¦ÕNUj¦L®®šTYQ^VZì÷äzr²³Ü™.G’Õb6ã zQ§ÕìeX›æN´Ót¥I Ùf·sçW»ã>ÿ—kszb9šlóW„%ƒÈÞ;ƒngpg÷Ξcc[–¸f÷ÎÃqq;ë‘ä¥kûù®ÔpðŽasw?LŠu68·)œ0gaG˜fý=˜ƒ5nWEªË²`¦åŸd²yêr±Žï:¦%øÞ2§#úî$KRÅç]¦Ý¬ääx‰­•l/™¨ÞíÆÑljíØæ³§÷ºë‘Ç»zÂ[–à|ZɆÂmÿ–êrï”,ÎJßÖ‰TMï]á 9Ȭuuœ)¬ÊN³úbü[ôq>ȱHÎJ7¢axêÝõݱ¿ ýIˆÀYXnôF‡¾­#¬ÔaBé‰Qýa¿kôtã­¨S‡/ìs†­îÚ‰ñddÕ¯híP«Äª…­Ó¤{i¬VØW_ÇZvÖï쮋’Àp¹çt'±³‡Kœ©OH YPÇ€íÓp^åÔïìè]vt§öâJ[æìHu…•8À Ü} ØDCåÅæ\j‹a:­­£©ÕÝ4§³£"FH´€¡ã³ë¿ÆÝ‘EƒS.¬ËÖ9;h*·͘á bÂ][÷°6[‡—®æ²©Z[íì€T2d„óœõ}u18ö~ RM§iãØ4ìñLkLu-pE?…‹±†±†Ž1µq¼ˆËFI€yѨYŒ—IlÎ;;Ü}îî~gXié`}cìQ¹c†ÊóØXµ]óv³MÄ…Åã/Œ™á 7õjæ†Ô÷‰×ÆoO/vîÔ¹›Zw2äîB‚”O6…• KªºúÙzv{pãŠV×óÎÊÂÖr?[¶;ÝÓ{wº[;ªUh” 7¥ÞÀÚ’H4µÕ 0«=ì†ÛçVàöÖÎŽã¸S:ooë8BNë®]p8 Ë:Ž; QÔ\ÊrY&{q²†i.¾èTøÔã ![ÔR^ÍPß—¢æéÆó€,=F£yæñ<Šy|4OQóØG)©yŒò»ÞÙËÆçÆý;»°9NìÈüƒ0¸§ wÜSÕÄ…õî¾Ú°Á]ËòkX~M4_Ãòµ83À…7ì4×»¿J*d;&%uxëÚqãÖ’¢Ã@|ÕG´|æyù°FøÏê#Å$9̱leÑjÜ—«ËX\–l—ÅUG‘,¸7Ò/´ýDÿ†Š7€;ÿ¨£i‰•~¤4'PN€¹\<·˜¬¼ÀñV ˜KâÉb­ÆªÕÄóZ%ÁÞ¨Õ&j©AkÕþ¾Þk‡Ûì µ'Ú=öùöëìÂ~ûOíGíŸÚyû±±“ÊØïÞhÔÙá7 öS;…¾Î¹Ñ:ôïXf‡£vxÄûíp½Øë§vz»ý^;]Ži…í ±Ã½³Ã»ösvú²ž³Ãì?¶Ómv賯·Ó6;L³C–½ÄNm*ð—vø‡gí/ÛéÃv¸Gm»×>b§Óì­vZb‡l;Øí@íð'âõvXfÄ\3o‡þ?Ù¿²SÄŒÐOÛ´Ã]v±o³Ó%vh±ƒl¯µÓ,·ò>b¿h‡ìð’ý];=b$e¯nf5`®}‰ÖÙ¡Œ5f•–sö/íô÷ ~d?b§wÛaƒý6;íeàPb¯³Ó;XÕNVü•ÁBÿÊϨ\ÜÆÀ‘è^´SÉ@6ÄzÐfxFìwÛ¹†ƒaã¶áë3ö—°ÿ êXMF VÒ…ù“üižãµ@CÖäxˆ481ˆDjäš@¥Oªì œ—}àëZÜêÂÏ:ö ]ù,îºê³îšÏLè[€]ß xìš’Å]^5Ãü{LY*·{·{_2Ÿvó¬4uÃÃýkÖEÊ3§ÌŸ óA¤ÓBÒÈ ÒDrE=™ fNZh ¨([j±Ôš Ô1˜Î ÆÁ .‘ëtò~žòf %$nN<”È'*vWcb"±‡&†?F¥Ú®uæ7×ɾ®Š€ó+‹ý^ät¬6ì“V„‰ÎðsPß»rrÛËÛ¦úZ‡¦ÁM‘;·ß¹ n® MΠ‰£¶V­¹¿§ù–eõæÑ0÷ÖòÞH·£r6Šf ûT‡}2ï+‰‰H¤D@Ëë9ƒNÍA86vQñ†EQ ³Ï2ì1p&CaÀpÀpÊ0fМ1€Ùà4ø œr ^2qŽrz-ð<§8.6Ç¥Êd_ €$ìö¯kÝPE ­u–þY*-‰b?NHœW¼1ò~ŸE¦BTâ·,ÒïÑâÑSôOôˆþ:Ú;šŠý©û‹ ö‘ÉdÍq|ùL©Å™ä2ã-¿3OîtäáWŸÐIj &½C߬éô‚>A CYùùY¼9$Äzâ7(8’!Ô|8 çñ¡Ž!œ_£Û|ÞŒÍh™EÔ“Áä²ÒL ¥%Sh‡,Q(w¦‡Ó‚  þàOÝñûûB6H+š³qÞ¾ÊÊMÕׯY\ïi»çÍv¾|ë,)ò‘}û÷f/Ÿœ"wÞÔT{ó†eM^Ø×ýààdyÉ‹}¾Ù•Ž…=“fø&cFþ¤ö¡Y+ö… ¼·.ð,\”Z49³dZ¡ÃltäWÏ¿>ºïµŒý…ÿ?›$7ÉR¬Ö’Ý=˜MSô‰Í&³£Y°“šó5¸„ÎG×Ïx§Æ»ÁP¦†u"ÀæÝêw¾¹cÛïv§ÝþæÎ»Þ¼erä?¾wýÛÜJgÙ”žÚLšqã›÷´Î½ûÔMߨ×ÖvÏ7¼ø³ð‰ž;:½ÞNæ>B*ý™ð:I%óýØY%-¨é°%RSC&0™’!H5”çý¨£° ÐlNh¤ sâᛓšÎ55(1ÍÞuŸ—‹ŒÓŠ—ºüqɸKQú퉶è(¤CÀD>{行Æú»²¥ÂO =î=îÆËÛ¸¹nÊŠÙzͳ¼`v;ÛÉhMû‚Þ)TDÒ¦¨ºòãâB(†¬zc…Ÿ 4s!n€ã8%§ ñ \¼Ð¬Ñkt:ÉÒLTÆÆèÃés-­8„ÌœRFiyÀ°¹-V;Ρr›àáoÛ±¿#üÆÕ5)ù)%#Òöô{¿ŒD~9úfs“Nó3‹EujŒ}Mˆf2?‰äq_'iÈË=™•êÄ[.»Å›ñf:6vöi|¶@ÛD–‹7™i©š¸xެM“ÉsóÌIy ÍƒªßäÁOó ?ïú<:?ÞσGó`_lσ`yÞѼWó¸(´˜g22Äc:c…‘Vꌹøì7^o¼Ýøã¿ÿa“0£³53~fÔêŒXz/–}fԈƼð;/÷£^Øá½ÏKoðÂ*/Ìðvzi•ò½ì½>÷^òRþ¹÷w^úÄØ…ÞU^:NòÒT/ˆ^øÍ{¿öÒÖßzéã^Øå½ßK7z¡Ó»ÒKq5¥x4gðÂÿx´€ ¯{áy/<é…2p¸1†x¦¢D¼©^z™‘ÿ©RŒÐˆù~z‡—®ò*cˆ›¼´À ©*Í÷ªDÿ‡^ó *ü}^Øé…M^Xä]­’=‰Áz½¡/yá/^ g¼ð[ýS^Øã= Ž éòB³JL¡Š=^¥©ùƒNyá1ïq/Ebv{aó88vtr ;B÷yáiù…ƒ2&2ZÖ0Ø…^ŠÐ^•Ý•˜ó*cÞPç •ô] ö&/]è…é ¶ÊKÓ½&Fî‡Êvïç^îk}——6{C^Zã[ÒyFåÂ3*Ë6{÷xi¯JaÚlíœZ~ w{öR¤j€µ€ÜIJ ^ '½§½t÷—b¢oÄu®#³†¦æj8£)Óf¶-ž lå.K &1ÐL¥éb:Õ·u q (ôOu¤o*S×jS¡oÿ+Øo7û-ßbÜãÎï[”èÛzÔOpEàÖZ¦•%d –ŸXV>Ê®}\‘÷ŸÔ™µfQÔIºŸEÞ|º£F«Ój5Fáq(|D‹oøŠ™{€§w;fe¶äæfÎvŽ®å'nK–ž™™“åPìôÆÑm)µé™YY™éµ)ôÆè>SûÌÜgJÑÒÚñ\q’Gf:˜hÈFq£e2‡K df™lfžÌ;Góò2ƒ'‚Ð{C"“óy¶$Tª%ÞÜ(”ÏÕëÓjvŸ}³}šBvËœ4³§¦Yö1Á*Ël@‘oA Šm˜öžÇ ûu”®LÆF™$Ä6²`›3Û´ÙS8¶­Ù,ꎆò–sgæxÜFHÐ9ÂSh)옽i^Ñ´‘:þlË­Êq—ç& ‘ã”u?è{hí$m‚;Í™‘œ›[˜±²O¯©8ô»½…s&g5T•uLδz[o˜Ý}ËœlàË«še›Ñ]UhlX?Ï'/ÝŠlȩγiîÅ]‚ïïë¤"¥hÉVÎj*jZÀ=g;23Â7“t²ø81}ö ÛulŒ=ib\£ÍæØì8à §às„‡\\zð4VC€§³rÙS‰G@’Ü'™µ&¶ Øn‰ò2³kŶɀ…©+® Î`‰m”›ep¨ÌÇáÌñ¶üÊ–ªäâøÔòœë¹j÷ì†Êø¸ª`½­ªkª[Ô|®ÿéèùq=£Ç?ƒxHósÉÁ””ì ™QãñxÍy¾¼æ¼PÞ@ÞÊ]F°¡vRRV^VŽ3Ž©YÙ±yi3³‰×&/põê'ü¨ZP0R>òg ´ø¹–ÝÓ㣟ç*­ùe­“2Îä·ÖæÒ´M§îi[´ÜVÈÕfÝÜz MØ´²Ä”¤¡¶}ol^}G«+¿óŽ%‘½Yóö2}lÆ1Z„ú‚›,RŠf6³¬†à#Y÷ŒÙ{³fÓAõξ˜-\È^Èˤ™l$8¯2“5-év«-Ž˜˜jK˜ƒÒ+Úá¨SK±¯Lùuq¥±î–Zà^kÑôÒ@kµ ’ã ò% ¥ T^£/pîããuãàÆáiåIÊལs¢PÞæµÓF©syÉ÷"/ݤç8q st¨–Ϻ/º©û»f"ræt<ÄÇÊ£.®1žMHäK”-± ©2EUÕ!ðÏ™ÀzÏÍ´ÍP'ä5]®|òº%ÛÛsþy÷¢c²o;ÊŒ=ü’EÊH×q’‰½IÃÞpN¼e7œ"g¦b° Ó,ÁÓ(Lb}`OEÂ>H¹ÍiN³ÝdI•›õÌ›$jOd&ëÔŽ\±8ÝØÖ™œ«û¢šjQƒSµÕö/{p•?4ozа_‘O,Tà(8²~ù¾_äÃÁüÖ©y¹Sçæ—µUfÐÌM§÷µ[ §— ¹¥UÉ‘þ¿[oÎÒæ–TØV-j»ûŽ?ínß³fåî6·wá÷Õqdr¿従”+æ É”lNƒ´L{ƒÐ¬7›õf% »¤¨9„¶jP£|gƒó-éµ™5LªžÎÝúâ%¸íÅM+~¼aº1ò§¸îŽuýhY)ú†OZ[îzãÆíïÜ9³¢gÛLcëÒŸŽììëoÚ±¢iKÄ9öóÍR¿²•$Ê < ¬âÁÀ{ùMü.þ~^¨2ð©üB~ÿÿ<¯©R³_ã?ä…T„©RK6aÙçü%^ä¡ó5ú!ýœrÏP0Ð&ºÞOù]ôyú娒_ÒÈS+nèt¯¼8"n¹‡ÅgÄ/ENT=¹ü¯ÆUâ&‘¶‰PÅ ²DúúEÞωôy¶‰w‹‹Ü*Ƭ"ýPü\¤LvÑ,±MìE¬‹Â%βzð„w‹°P„:RE¯Hy~x‰¡zF|Wä° Dƒˆ]•‹¬Í‘;‡4Ñ“"0êè.Y“½"§ªQœá5öŠY­±[ß& _²ÜEúŒXo„ѹ‘Æù\¼$ÒÓ"¼$Âý*E1U¤åXe“¸K¼_Tªž_…¼b•Ø$r<iB»Ä'©fLºG<%ž9":E¿8(òZ‡pÞªÞ>UzÔç×}‡sݵúõ·2º®ÒÃÕLæíô©NÏ¡¡ó¯¨ê7óB’yÖ'Å~¶¸p+à„È‘Jþ9þÁKKùÏSuÝí8ç÷àþ“EJÈ,Å:¾ÄËËÀ®/ ž¶‚5¶Ä­êÇ}Óª.q±Øþ忲¾™¿Ï5Ô-T£Õh¿k‰—ÅVx÷¼Æ2C#8wUü°Þ¿¯§(òáêuÞ¶ÚÜ\¥Í»j„º6Ú߆â®ÌVÈÕ¹·¶òïE–8'§d¤v·ÞóúÆcG2Ùú¾£-ó0®Ÿ+ûl½â‡à ƒÎP ‚"´ô èfºppA€-˜qR8-ð¸»2½óšÝ{ˆî«Âë_—¨²£mì/ÂaÉ#KÙ~úu?EUãJ9K¥.JIi¼~/d/ô›Ádv˜©Ù²¥¦Úx§à¨Sè g…‹~HÈ1ëb2¦ ó£RÆëÍF‘ÈdŠ;3+ŽT–“8Ü8G¹ÔÖ ª½ûNÝq4òå¡öö'A{dç©ýKÓ"—“\?sÕ—ú|½¾ë›Ù]Ü3ó®Áú5¿†¸?ýó}“Vì™×Pتxê·<=°ö趬8W¸ÏU‘{“IcŸ)ú¨oûG™yÄ^å #?˜ç`s%˜ìldþJ½-¨NªfD1¹e2ø'‡'Se2ø&ƒ!¨—m‚oNÖÛù0˜Ž|_>ÍÏÏ2›ç¨NLæ½´«ÞKÕy‰3=æ¿<ßÝ×E˜Þq/æ•M¥œ¹1QmSý˜Ü„LÖ2i¢nLŽwL½ñ™áåÜÔfû{\þ”ÖRëäÌâöá©uÛú•ê‘':î½~Žù´Y¥ÁüÞÞ¼¦å“›î\WÕ³oœï˨_;'»°"CoH-ÎÎ/v$šLùí³6¶ºÖÎNñ2 êì‚t›ÉìmڠΑ­,Þ e¸ž´*Ž,¡D¨8/WÅ5qÚ²k)o‚8€FuZôñ(ãžÓht0B’pNÈ57d‹•>oYœp>ÜO»º¥.‹PÊ÷l[¡+ò3è=L{‹{ñ?üéRË[Øþ.$âI(Æ5¦¹}NâÇ•NpŠßOˆï¼Š³+6µw Š#§¢öðËXïO¼žé¨°Yã´û°#fžø±[¤&ÑÁðiñ¬È5‹!‘”vôÍ3âqLäªÊ*W#ˆÔŒ‚¢°? )«»EäÔÚ¨Ô24VÝŒ¸ûÿ‚="CÁ©Í‹Ê†µ÷0q‹Í÷O ôå±½¬•‘Ž©;Mm9&’é ‘5©ƒCô±¶¡â¬x‘a-*nTñ£ÎÍ€pÄ}«FlVJ±Žé¹ÑVØ~ÄZâM"hÉ5‚ÍpN€Š=³„xä°z¼3îòF…wLà³´÷Š«d"(ZÅûK£/¡NƒÃúËàŒœ'½)‘OFÍLÃWçX åP&ê0éºädW–q­Éä a¡ŽXFðUëVç“0I=@Áb~SfÒ%P:E(Uåþ«‘׺l þûï¹nÆâ…!Ô^ôS†Ÿº~(|ý”Ù7ÜsÇpýþ¯W<¶{ãº!eqgO¹õ®µ5¥Ë~°xéÁ퇦FiÛ„2rÎÿdÒ¤”&tžµ^´Rkª’Ú’ÚʱS2êLõ§L=™Êk;M¸ ÓP§Æ¯¡š " ªš áó:±ªsE­³ CÍHé;ÛþóÀðÌihÜ8ßžÅ~j­¹õô^nÝåGlmõäÍÛ¶k¹üÐïîšçm‘Ùª½ õÌKže, žñ”¾†ÁÐaJÃÉ´ÓiÔza¾©²9ËežÚœh熤2߉*õO5ž¾«ìgˆ°€Jg5”—M˜’1Ã:0aYcÆ5ý¨#‡¶­úñp}<$›–¶È­U.fK¾aù=K|1C[`Û&è)_wˉuãÖ5SŠks#³½³V)®©3Ò¦­“6))-eÅâ9wþvãM¯ÝÕ#½$уŒT¤ [‚:©M¢N ¬¬Õs}M‚½ÒAF!tKƒ¬j¹_¢V•:(,kãnéa‰W$È’J$ŠÄ—ÓAi ²â¤tQBÉ,)‡æâ!†$h‘À'ÕHt³´G:!]Æ$³L’C1`6§5á®ÂǸܯq#‡w}‡®|zú¶ÓÚû]žmµ²êWy­+¦dT¤Êɾ˜o:˜/šKœÂ•'¸è‡‘pä&Èû…h•,Z”`Ó¿ ÌÏóãŒiµS’“&×ÖfÐnUÖùÆþÌç¡®"땦œµžòç@±'¥¸8ÅÃéÈdÀ^1ÚõeÉÃ))æ‚æœ94'Ç=\ 5 NC·aÐ6œ4ìw‹a¯á´A@m(yâ,wÂa\É<Æì87”zÀk¾Zû¾ržë…Ò¨Jô ÙNµ6Ô…òj¾÷ü;±q²WÅœò¾ÁÒ9‹ó—,ÊŸ,èéš¿Jù4®}룋o<2T–5}höü-ssa{÷}«+ƒÃw5%6•¥÷.¯™™güØœß4iþÒîëÒ»º}ÕËnŸ5eUûd¯¯êPySƒz$ÓƒrÉÍljkì쳸¢.s>™ÌÉé©..Í‘æ`lb ±$§´‘äÖ²“nªOKKÞ“u&‹^È‚¬,³s$]ƒ «1ì1œ1p  `‚OQFEåNÀ=ööFUÆÄ€×˜ˆ°¸–QŒ=®I\ÔPá'MÛöë-™ôÕ¥—Ì,[q“£²µ4Øéˆ|QÌ5†ó·´÷?X¾†“ÆÓFê7‚ÑAò›“ÌÅÍ‚h'ÑÃ≭åʾrµSr\Ó ”ä ãØfhO„k³ÜL*à^Q|HuÄ¢ÕµºtI[]óÎ&khäãÜ©­Þ²ÖÊô?ä·ÕæéòJÊl+¶í{cã¦7ïi³5ô¹,v]r6oʤîU»U×ìRæš½S=Ëe¶ß‹ýs0˜ó‡éƒQ½Êµ×uÐEÕGØuÑ%\pAŠ=x:c†fâ¸?,1‰$Š6‡¹…33c…Á·ýa0îúºÆ1¦ªZx8æøŠ|v•[,™r¸%1§×\ºxÂ)ö áõÈ*çÔÊ¢ø¨>àÀ~ô«úz"Ù L²×àöFM‚C¨šÕî€pH8¥îw†hÖ˜À Šdo½Ö&j¶PØ;ù·êM¨Ì'%~D'Øí`Öh ‰ (NÏ@à|L¥ïZÇÒr€¥†ã¶;¸,0ÝÀÈiÁÅ=ùrt3m…I/D*€ã¨`OM7DŽÃàˆü8Þáö\x‹>d)ŸTj2äùŠ,ÓxüÏ:ìOj`ÇIÒØYÕJM:†¦\1‘‰´›*XèR¾Æ/$©{SÁµvÔà §Ó$„´œ5¤‘b¡‹™Ç<­äU-0Š3‘EöðvIPÅŽ…Í:aÝÊc—î}"ƒôÊÚÈûÓ®ÿiß[_/Ø?PC_ G¾zf‘°uî㑯ŸÙ^Wv¹aʦç¢>9¸vÐÝh{˜žEcåçða­ú¢Þíªƒû¾üáæ‘›øüDCú• sq ÂbÕ æær<ð\˜"qÀQŽÇc1+ÇÆþñ4®¬œcÑ÷œc±(AÇ¢ -~ó4‹DŸÓç÷Ѽ…~+˜¬´´!Žd…’Ždž„LQóGÝâ}W\B±0®è!±ê*u•º,ÿÒ9”£l蛓y”.óßþøo×=ùëÏZ;žÓÑ[Oݿ¹(U/Xß´ö`¿Xqð«Ë›øëÿýºxÁ´Ü+¢’îíms š«Üª‡èóÅøÏ?ŒüH¦’Àk[´ÀÅÌT1K€Í´¢ŒC­<ôKa륥L×7ªg)“ÐÖøùsº$&ž4Çb'ǔɩKµ@ËéôuzžÓ÷-&¸X짉h0ïEu@n}|£Á¯„h|_z3w€£ÜÅx8Íñâ)hõÏë=~ T&£–Àü~,ÖE+°ãæXJbq~æí'O²‹êNêXBw'=—A üKew.p9yîˆlß§Ÿ@1>÷Àí‘ë©"Á’ÑŒ¾‰ý¶Ž½O³Uÿ¤ÿ8áX"NÐ©Æ š0(œ8öô´úóB²°B®d£ž°‚û‹ÈGyÂW_¢{WêLÿÌ@Þ¯8Nl8Û ˆÑ²ÖlÖ9ÖªzUqN^#‘óÎè.èÆtœ.k$ÑœgR.¤Ð–”îš’Rd6´XÀb1h‹†™Ru>êŒck·*œ„ëÎËQJuLF•)b1“«O@ÆÝ½ãælÔß›W}Ý‘õÿù L—Ûv®ž™ù»µ³zÝÖƒ}]ûWMŠ|’R:;=cRVFùìâÐJxcåáÍ Ðóa#Üäž½©#{ÆÔ>ij™<üÈ`åBÅT:wRuÿ,ïö‰y(LVmÖYJ@G:Ïà<ˆo‰ïŽŒç¶Äï§Ìv ³£I-®zÞÏ+8wxÚ­ÕŠW4G7¸¨Â±ŽCªA¬±/oýa䜽ËðZ4ŠÓ~ô-fB€’ý\ ׯƧ“.Å«Ñãö›Œ#5î;D DN:ˆdÚìé©ûMéŽtš¾/d‚&0‡=˜Ò¥Æ=jÓp¤æ¥Qü²ÒuçQ‡}EVe®šÂÇT¾ò€‘³árº*M§™ÒóRžKó»­›G¦´Üä£jš«ùõ´µ‹šÝîÙsçæF.]óåî³Ú]H»Ÿ>ÂôóÏ‹z$¬.:Ÿz—Æ×¤‰­%µØ‹&V×'3ÌQÃ<ÏåÔšMIIÚ<Îâó›5~»Ÿü~Y²¨Áv-Ç-ô>˺ˢeº…fYVÉP)/©W†dþ,Ã+2L—WÈ;äÇd¾JQΓé)Q†ù»dØ(Ã2V XÃÊà•K2üVþ³LŸ—U¡›†q…Ì ÿL_“á>ù¸L±úM2ÀBjäf™fÉ`a•¼K~B~Mþ\B2¤Ê^¹IæL2ìã±Ágd¸_†=2ŒÈ¬Z3¨’)(_B¢Æ«sXµ„—¬°«b{¼œ%×ɽ2¿©|WV¤r¯ ÛXMh‘¡N/ƒÏex‰UyB¦V¹Dn“Gd^­Ãj’án°c×Vª|F~WþRæîW)l’ÊÔ/C´ce gUR2Êä=2gV³ÏÈ–ဠƒ2˜!™Óå%i“´>§uïèbPÜ£Öø¸Z÷MÛû*¿åw„ç_Éœðp†® Û~bÅ]±h²®˜e¾8?öíØ±hð˜'ǃ«Œ»6zŒS£Ç¸+ÑcGäG'D›hÑJÔDá—‘EîoØ”bˆÓ›Œc|¼ð3˜qD'àoH3>^Η½Ì_^UU‘(..¿%l½|Q¹±¸²dF0C™R™H¿•’ªjj2‚ Õ*9sTË8Ô»Ú•2Ac÷ƒÙ@ãöµÀdp¨AJHIÚORÌ)4u_M lNgŠÅo‚æÑdýC)†¨øÛKªãst\ŒŽ¯f긧@©Ûâ¢iŽ¥¹~\ó)Ç*gnF«`®1m\€ƒ±n kvVãOæRMfÍžÓš L+6Gæóý¸ÿfÓ×”¿'›€³‘ÒÒ²uºCVj¹¬l³6;1ûºìíÙ¼!;Ûó{Ï'ú¬çeÝçyÄCoõÀ2ÏïzäxÊç{áyÞóš‡aTy ËăRÂsQIòÐìÍŒÕ[<ƒž-¸º¬V°&0±m>p(&¤)+Á×"¤F5ƒóÍWÔåšXò‹¿Ó-÷ÏâM¯…ußòÚýsŸßÚ˜œ-îB•ÄR©Š‰®.!Yu½×¨>=!qŠÀ|z/xZz6¶,ʳVZó”’B›iƒ¼Çy‹Ín5r\¼Å*™øƒSÚ¹°@£ý 'HùÁR?’i3¦• ©µ¥q0Õ_…F\ïfòãgM,h]Õ6Mê^ÈÌkH£ì±@v´¼1㤘£|Œû²}晚šÃæ³fÞlö›»Í'1uf»jèÝLÐCô½@ǨÎDøÊQQD[6dÀ| Ì\©`>Ã!æ×D~0v‹NæÝ„+Áµàâj#ïþJ ÓˆòР7èSì(ÅÝu…‹=Eùy…9!·CÕvE~ a(Æ>g*’ ‰3ì'ûœqþ8¿æÑ8âû„Y)£Q1•}•h‚0SGާû³¬[ÁU;mm×쨂ÈoÚɪîT¤¤è“Q€Ñ³?NAì$nù¤hª£oÊ–˜ú©ÑS›«$…–£Ä'‡ûÞôȇͷ?Ó;ZǽÈÿh_ä“ÈÇ‘wý)²Nßù)Êçvpó|žר´Täž:Ãìp_Ã7ó{xW¬É±ûg•WµÛìþÙ•å³åDúâï"Ÿ?Ñ4ã °½ö$>2mÚ#‘?¿wϯ‡‹|#¿þÁ¿Zï÷¯ÿÕ¸ w/ò_$5JÇ :õ÷D„˜O€ùEб¸EBZ\ßøýšz¾ãSÝW6UW¶A˜¾5ê‹|À›ø#3Ï^¶žcüxüTµ×µT£,ä¨vŸ†·³³e^ÔÝ'>&Òyâ2‘&‹p›¸O|Eü½ø7Q¨§‹ DN#Âk÷‰¿iPÜ Þ&r¬ô‘KÆRV1À—"<ÍmQþí'AqžHKDȲàÕ:ÜÿÃÆ—D»Äà”çöü ±W–TŠvìnŒ":+¯ķYÜ,Þ%þHä¢1L\P„LQ©]­²E™>x}ã båœ,‚•Å!acýj¬ÒÛ"<">‡}á†D†ˆ‹–‰àd°€ýú›Ű嶴7–‰Œ D>SdòÁ,ÒñP«“,hŠ…>E;ˆ*H# µÊ¹ µ±h¤h4f«° ¸1Úá"«í3ß-Š”QÁ¼îFd/‰Zµ†”˜ÖhF>!¼ÐdçØ5(UØï;½±@$oì%úï·ä³÷êƒüÆb–Æ`Ô;Ê@K+À7ªpì˜ûÕOœùpÂãÜû_ocä¯ãþsáãØºî8ÉûMÌ£r–yXœ±_ 9™23Ò˜±³›uá fx‘<ž’×7˜·%ï`žÆ™w1f,<©¿Øê¨>9dâÝ!!a|%2»ëJäbÌÍ©á¯ö°Ä¼W/Jáã%Ç"ÿéáÈß,èzÄ'ŸñÙÅ‘wJûïë[~IiÿûV?Ð积þ$òדýW|+Ë^ˆüýá§·ÔGß4ÝzWÈT”%jŒÑd2‡ô)I&Û”R2`ËjÌp„jsØzÕºwåøIkã@ôÔDÁ7}–iÚúÊÊY¾õ)ÚYëcbF=AªTcoÍoz£‡²Ñ3$óyKåµ?¡+/½I3~nßèsÂ7SIõ¿¼åæ7Uû[úË«׺'o84¼éé‘ wm¨zʪÙ‘¤ü†²’`¾dÊm¬¬žžçJ(žW[=§Øf ´ÕÔÌõ'Àî…÷ L™2poç¬ëæD>¾ºmyEÛÎ%¥åKw¶–/o›ÇëKÛ¯£ù ôô@C~vceVÖ¤ÆÑcÞ–ÉÙÙSæ–vÔdº•Q¼ùèA>f‘ ²D™bd'Ê–ì"®ÕéR™×ï"2{’o ” ©JN^cjɈeÀ&»ÃNíö¸üa§6n˜Ã5!¢°aMWŽ™Ô(8ÆÊulK23ÌÄ}ÕÁ9ÓE&j@Êþ&Ç<‘/./¼su“tÖ…õ•Ьµ­‹ý‹ö­¬œö½£#7<ÿ½©‘÷SËf|3JRSä™Åž¦ª,ú~dG䎜–ïÍÏnj,[ûذ§:×6õ†§Ö †7Ö´>ù»©zŬwíâªòP½'­¢ýZ?IT²H’hi$Ë¢SH6ÅÖbë¶qƒ¶-6ê´ùmm'm¼ž©,FÓƒvQôçÌvpgj8êÝ‹ÈéÆ(,@Ë«n ²wÜ‘"{‹ý.°'f¨?"p¡n\¤ÆrþPày!ò5Ì¡,~rAANGîå…­—~ž_äY"s¯7ã8.Æ}j Ž£å@­â=ûôYY)\ Éû¢”Å¡×;²̲%'[í°ƒW£êjXT¹4þ;XLÎG )Ö ~¹òë&Šø5îI3f7UçÐÈWBMç²ù•Ã+ó¦æk"Ç5Ýü‹›®á–úÑéàâimosMEÙäéþö 3æWw,sT´øã<0RW±bߥ‹ 1•ï—êcYø\‘Ê6&·ƒêTQÝ~Fæ!Sß99E²È/¿&Ã/d`Ž„ÍÌãÑ$¯’9Ÿêg¸$Øã‚`¾‰Mò.™kVÝ">ÕüõsÕп_~a¸=Ì;°I¦5¬Ì+ÓhõçåYõC2ú#B *æÈ0©¾ $à„ 3ßÃ.™ÈÐ6Þ/Ãþh¯©ÎލŸÄ úO6É<ó“0rwɬ‘K².ÚâKŒfæzØu•O¥D%xù˜ Ê¡sŒ*ìÔÕ¨»Ã¡BMøW®n@S%G9ÀøqIÖFÉ+gN%MõŽÄ#W{U&úMÖBLÏÊUÇÎÁ¨—h³ÌÙ)S­31}û‰<ÍÐ$æ$æ9¸ “:åcs>ò㮌е¶Ë•0°ïþAÝ·ó¾m;}Ã0 ©ÿ5@–¥Ê çHì÷9Q¿ˆ›+â<9ž‰Ew“Ä"¤rh<Øt’Ŭ‰¼ј,’hµsåq1O4Äñª[ä°ƒ›X]X*77d(Õ% —¿à¤„’j%£¡yR…¥çòãh0üÅÑ™_\Zâ·ä瘸dæö¿K¸WùI¨[¶(2mÐh¢a^œ†Ó€NgP pÒpÚ@7Àh†ð áZxh[˜cžýVNV·ä!ó›>uÃꊆJ…9ƒËVGÓ"ñ\Þè§tÆ«ôÑ×~;ºèñséõÂëêÿ ÈJ#0_¿\OÔ½u gÿ/ ‡”‘ ÙGx‘9iÔ_l‹qìàÀZ.xš>vJÍÿŽß»€‚3!¹‘jõZ­Î$>öŽJ_%;8ðv]³C„ ´ÂØÿ ¨TÿS@W— ´ªCY=/¨œÙÈŽ©áf(Šlƒûà¿Û"+…×/ÿ NF:GW« d|ñðO !SõWÄýßv¯ýâñª6öud¶vö”ÅNÑX&ÖÓN‰Ì&Ó&þ÷|ã±é_Hð* óÈ|îÀ§D+q‡˜GªøI }œ¸ñJÖTŽ}Í“j.lÇg –µáµa÷hYÞDZ+Z–ÈÒ¬ q¶a^#^[ñ}âzÓ ˜¿‰á`íâ»/^51¼{0í`ô | ÿ$™Ç.õ½’ìÐTª0¬žß­ølbeÛ¾Öþ߉Râ]‰o'ù“ŸR”úfZ]Ú`Ú#iL÷§/ËØ’qÙqЙãÜæü(sqæîñ‘ ’¹ì_÷©™øH'Îî4ÿÆ*1/ æMŒ¯21Ö@LD‰¥)ÎÑæXš#ÒKóÄJ†biÄ‘Ûbi êwÅÒZrùI,­#VpÄÒ"1B –6 S'þftÅÒñd3슥ÄKY\1àz#d -¥dÐgciJtôXš#S臱4OrQûЦ’ÄM¥5$‡[KkÉ—ÜæXZGrq,£i‘¤ñ÷ÇÒRÁ¥ãÈ"þB,O"BS,m$ó4ÓëV,_1²â†¾^goÏHó1§ì÷—;§/í[ÛÛ7äœ60480Ô3²b`m‘sêêÕΡËûG†C}Ã}Cúz‹f®XÒ-w¶ö¬®XÝ;Q¹ÐùR'+þ®¼y}CÃ,£¸È/_)gŅߨ²bØÙãêéí[Ó3´Ê9°Ì9ioì)pN_»´ [¾bx¤o3W¬u¶µ9[zFúÖŽ8{Öö:Û&*6/[¶biŸš¹´oh¤Fú‘è•ë‡V ÷®XÊZ.ú.F´ŽômèsÎêéXÛ?228Éç»îºëŠzbÀK¶héÀß¿*Ù8Ø×Û7¼bùZì{QÿÈšÕíÃ}¬?#ýØÇ«z¼l‰X6r]ÏPëÿðú%+û–Ž8G¶Ï¹û±«ö,êë[Ãzº^¥øºþKûÖ;{–.íAŽ0ð†¹è_»z¢’J)nx+Èr¼Fðºô‘^âÄ«ß{0õ^2ñã·SSÉ0YŠ0k¢¡…õ>Õ{ŠcK‹TØÕøub>ÃßeÃê[>YÝ j[Ed&–/Qs®ÔwâbïÁç0©Å÷Õ÷í– ñú×uµÿwáæ©0ÃÅHŸûÿ]õÇkþ?´²BmñrD-aô¯ÁçY…ydÞçÆøÞ¨Ö,ÀÔt¬»Tå#ãØrˈŠ; ¹BÅÝŽ­*T‹Z“ñgDmm­ Õö-6c‹Ë°>ãæÈ¥*n6æQ̘îqz%Y¯Žâ0B²zã}Æ–ÿwgD«JݵÍYjþˆ:XY¿ú6H&á&á#שß"„¹óÒÞ"5µ!ÿOëøÞ§–«³smlÜ‹Tœkp4ÛÕY:>>ŒÑqüî1^¦>ç‡Õ#HI:Vãã?Œ<\‚œìSùÇ0Äð2˜Õ±ñXkµibµÙ¸éú«x|JÏR¼;±/XÆê,Uq ªœí½ ûÿ[š‹þ9»ú;ZºÂSuêò>ùŽÏ ÒZœ¬Þ¯4ÀéQ81 æQ¸Ê%ØòÕÞ¯~Åý_K¾‹.ÒÐð]]¸pà™ Â'眎?›ìøè¬Çñ_g';ÎLþCû'sí8Gª¾©È`‡ˆxwâ¥àÅ„ %79-øŸÜ˜ƒ|ÿÁW;Þ};ÍñÎÛ9Žî·ö¾uò-Ž=˜8û Åzú­äô >ŸyK4»b‚¿Ìq(ÏçM *Ïgz‚ÇÀ¥¸Ÿ›ì ÇàØQ½ƒrÔyT9Ú}tð¨À{ž>zñ¨p œJ|#Â=Ûý,=øìégÕHLã³cÐt$t„æ¢4'“¼š©{ðHy²’›“tòª9tào:„¶¨Ñ$O >µå)îìSŸ¢O<^êx¼%ÇqR!»ä¤<¦ÇÀô(¼‰@ª‰lÊö–jÇC÷{âõ^[î‡{ƒ¹Žûí§û‚¥ÓÝŽ»éöæ8îº3DZçƒãûwä8L»»ih÷ÀîÍ»ÇvóÊî„Ä éPî0˜‚¦Žô¶[MŽÐ­Pvsðfº‰X×^Ãxå Bê pƒðå ü~ð“AÚ?  "SÖ6:ÖeG $µ'’Úµ®]ƒ£Óƒu»C²#„ÏÅŽEAcaçõŽÎ`±#A–ÚàÚy™kàÀÄÕp4Ô JknAPiÍÈÄ[BRpîœ\Çœæ4G ^ÉÍyÍtAóŠfz $%/˜í˜Lv4]Žìô?‚Ȱ˶v ˜ÚͲ©i2æ8–#©">ÌÊd|šYü©9•ý4h0•w˜jL!Ófo2ùLͦÓÓÓ˜Iͽ`âXt l±ƒÇ`ïá¶V¯·é˜vlnSXÛ²0 ·‡³[Ù]™ÓÖÜ&í ;|Á­»w“Úô¦°ÜÚîN_ÐîÅ„Â[0aN?l'µ †G†GÖÄ š"ãÃÃëY.ËL5{xxdd„D« {‡‰wØ;²^­˜$ñÚà œa‹ý»ãûzŠ0/KÅ#j&C£~°…á$\ëÿ ¶=…ƒ endstream endobj 91 0 obj 16587 endobj 92 0 obj <> endobj 93 0 obj <> stream xœ]ÔÍŽ›0à=OÁrºï50‘¢H™d"eÑ5Ó à¤H Â,òöåÜã¶R‰æ^üÅŽÉvÇý±ïæìÛ44§0§—®o§p>¦&¤çpíúÄIÚvͯ컹Õc’-½§Ç}·cÖë$û¾Ü»ÏÓ#}Ú¶Ã9|J²¯S¦®¿¦O?v§åúô1Ž¿Â-ôsš'›MÚ†ËòœÏõø¥¾…̺žír»›ÏKË¿‚÷ÇR±kGJ3´á>ÖM˜êþ’užoÒõá°IBßþw¯\±å|i~ÖÓRê–Ò<÷n³d±\äÈÊ,Èžù¹°,VSr\‘+Ëåù…¹D^Y®<ò–¹B~eÍ»ã¸ÍµçxüÆq«90cÜå¬Y!Ó_î‘é/ßé¯àtô—p:ú xý%æuÑ¿C¦ß[}ô[¦_áqô‹ÍE¿n‘éW{&ý…™é/ñÛ…~q¡¿ÂZ ýй„~µšè‡Yè/±B¿Ú8ýÞ2ý‚5ú¿K¢f¡ßÃ)ô{¬§ÐïÍI¿·Þ¸þ˜WéìµÒ¯ð+ýÞjà—Ü¡WãÿÏÔ‚ã°)ýæUú {Nô[oô[oô[/ýŠýÕè·^ú{¤ÑoNú6O¿b^ÿÿX×õžëï1—§¿Âþú¸þ¯v¸â)Â1Ã{àÏñM›iZŽ®½,ìÌâ´v}øû>‡]öù  ° ý endstream endobj 94 0 obj <> endobj 95 0 obj <> stream xœÝ{{|×™èùÎÌè-ÍÈ–ä‡lkdù)Ù–-a¶d ?°Álll›—mHi1 ÄäEBI²Iš¦iIó$$ÛÚf“înÒÐW¶½é-ìn·ÛÞ…ÒÛ&¹Û$Ø÷;#LBºßýëÊš™ïœóïœó½Î÷‘ÇGwĈ‰LŽ(}[{G~ôâ³? „¼E¤ôí—ŶßW"|‘êÙ¸µ(øÞï áM„h…[v Üùö‰BŒ6BJ~;ëíÿ¥¡ÄGHõ'H£j+~1õ°–¹s°œ7¸uüÖ·Œo܇å,?¾e¸¯×ð§·ÞÃòûXnÞÚ{ëH½ö׫Ǔt{p.\;!/ªu{gµQn}‰Ò«aá0ÙˆW/ügy/·|VBFµ±õÚ8ׇ„¸/yäÉ.ÇsùÒ5½ÉM¾ôa`Ù;9ñȑɞÉÞ3Ó<²ä™¿áSd<ÎT¹¸._'wP'׉ˆVÈ<‹à=®Í×á%!ÃÕZ¦ª‹Èà$3Ø8x±Ü«Oâ±ò D¦Náè 5 +"pÔéît'>¥%›åäÀØCǘiâòÑ`E2jãe:Óy¹Ãótzå¸ÒÜÁÖÆØ£r9É •çIYµÝPšÅ,dqcóL13ñ9g37¾X-_+F?Õ¼d¦YžÔyWN2âž$A‚3_'L…•¹V§jýÌž=‘^4b´hÕž'O( ³åAf¶“ž%ý“ž• Tlô _pÞÆÆJ!ÐØ¶¨´Ù¢¸«å„w­\ÓñŠ„aÖ]m')ÐpÏ¢ÎyØÖñŠŒ{…ZKY-«d™¥V,èT|ç+ !j+¯V¨å¾3@Ô:ÝL¾34Q'ÍÔQ¬ãuŠZÇ>(¥ôAä1ú﹟ÉçöÎÁÉžN¦ãÄÁ/ÄÁS‡ÜñÔª1Å žØ¢¸Ñ³ˆÕ‡X}(Q¯aõZÔ p@iÉm“RƒçƒôRu;'Ò~¡£b-);ĿखO½8¡~¹à$G$'8V-°ê“Zí“'Õ­nk¾Ûê®§òT<25(´ô­zþm•n#’»0I:ù¶rËNÓÝm?d§«RRèêtÀ¶U´€…t‹›(Z&,XŽY¸~˸…6c½…•”Œ¨(×>z,•¦*FK4553rii´rݼ`ãA‹Wôb”·Ðõéé$m½ÀqÆ/'…¤–üèÅüt‹5*ž™þ- ÞmÏŠeíÈ✬<ßlzà5€Ëä¼çÏËJsB«³1K²eeIø•ÎeϺ˜Å gÍ¢ÍYàÏ eѬ¬P¹zª4eO%/-+:±ÀX(d9i1×/qdN³Y*j&ŽŽÎŽc!õ%¸™V †‚ÈÍË>_‚›Ûƒ~y¹®HÂë >i6.ðIу‚ÄL²œÎ15êêòuùˆOP¹[U]ÇŽ´`WDîsžÔ:¨®ªöX¸B&†ªküÖØm8Ü|{[‰Þäì¸ýXßîÇdA°XLüsBnæïO· FAÐðyítÊØ†Æ´ÔÜPgUm¬¥6-­ÛXwgKéí¡ûþþŽÚÁîŒÚêõWÁË™sì}©ýPA×WnÝдpC87í£ã»ÚwߎîiÕôe~)fK…P 8Öeoɦu9+r¨_ ‰Mâñ~QÎL_T1Z£D€<:‡ÖÓqº ¹P`bfÎe˜€ yCF!ðøEªy@xÈ4ZD´ùF£Ùf4šñká‚BÆ&ã;Æ FÞ¨ˆ)¨îÅ„™wc^¡-/¯¿…Óy æ¹òüy\ž’ã‰æ))Žh^ž˜ÉÉœ‘h›e‡Ýn1› ‰ˆ›±øê~ eâëU%UTT(åå}VRI?°}Í,7G«(ïšõñ©&ÄYÀž´¡Ô gá´ž9z˜90y§Â_ÔÚÖ+Û×-”vž~Zk6já^Ïs¹ÑÕCá#_2ëöðó®î.lÉiêvÝÙB»?y.·1\®JjæÛüË*³œÌ[S@ïEqcföð–ê¯'_œÐŸ×S=Óåv Ú¤—Þ¯Bÿ‚þ¬~Z¯¡A£…Vmãu_ÙÃÞ§¼bpDy jy;Y y÷=\ÔÃy=œÓC\Çô0ª~T H(?ãÑŒUÙv¹k»o;jyuP ¸|påžÎZñãÓ?ägŸýè"?ïã7X2IrÑÀ¯ ßs“1eé ¬Öà nXïvS·R䋺•TÞÐÝnC§×é¡Ußh0Ú F£„—M× 3:8=׌ö-ôö„¸™¬‚žíÜ2õᄙ̠ T›bÖÆìŽÓ™æÐ4úC«?SX0n;ý¤Öd4pÏpzƒžç]µ‹K™Ît-÷Œ [:zwÝÕ·¸:OdÑ|‡cA]­níülŽhbmšFô[ ¹õ¯ßôÅSF1êaV2[V8e!´.l$`C£ð"dQ ¼Z+A[ ”ðÒàÏ8€¡À® ÂGÃ0†¶0„#aªêððKáwÿ ÖèÃÅaúç0ü& †ÿ6Lw†¡3 Ua°…óÂTm–ELØ›dµIV«Ä.ÆDi~³WÊϲ(,·fi‰¾9WrˆQZ(8¸ú»0ü" o„á¥0<†#a8aƒ:Ÿú0ÂGƒ%x? ¿ûax= §ÃðT Ã>_™îgÓ†ˆ:³DœÚß}ª ‹½# ãa˜;ÈaH †gðߘâè̉ê“K¿91œùè,´9ŒŸlˆùWªüû©J÷iu@Å«R‘´^W¹pmešÐ}½«JÒŠ¦ÊJ³\K Ô¤û¯—ÑÁ¬ï">ŸÍ—…_³l™…)ÁÄžªÞY”¦6]ãGnçõZaÙªš­ ,;OÍöÀ9ʲ®ù»î³Èõ+cÊÁÃè‰OÞ€Lo³•—ûÄÆ¦`×þ–«Oq+oôË·l´…<ªw¾:v 7°n_ËÕ¯’¿Ç;Ô˜æð+$}B:‡ Œ¼“§…ÐZ8Ë/ø 4‘'Èôî¤8Ód6™¡ÕÜhmQ”ð²0ûµ˜ @ÌØÆ'Ùm¢ÙR˜0Z•ñ¡àç:ÃÙüUÃÆMø\nª|¤oÿÇ[Ýmãºúä§”dM‚]Ó—è„PB²É1¥M1fÏζ:Ì—Õom²®·¾`=kÕXã®s.j”R¢èÀ­Ë ZƒM«5à×hØ£—´ŽÌTC‹YËIf‹Å,f6sŽ p£ò[ƒ)5Òå@ ²­nê9EI«ÍùÔ¦>ìc.È —5hŰ¹¢Ü—o™íÛSÄÍ-¨õÌlôUÕp.¿£¼½× |ñ ™{†nõÿ ó_àuÞòÌÒl^/´ÉK2èýwþñw^Ým›gõ–iµêúçM_á(™OþF¹{ó<È«¯¦#U0?kKá@.ôçŽçÒþ¬ñ,:?æÛa<ê-mZ¯kÓÑ]ÜÝÝÌAþº¼¼šµ’ÍHæD&Í̆%8/KòK!é~‰—¤ZÍ: j­QaŸVùa‰n• Q¿D¼=®ü|o\OM³†j4$&—Äø&aÎP£& sA.KŒ.#3ý‰´á†‹h «s8û°°µ° ®Žªûª¶Œcze·!œÃÙm<¼ãûwµH'Ìs»'»7<¾u^nÛý[:¯_ÿÄÛÛv½¸g™øœXÕ¶cÅàýEÅm{;V}bùÔßÙük÷¯Î¯[W›ã Ńњ`NúüÕ·¯z¨ÛWÒ´ma°•ÌZ¬Z(NOŸ×¹¯ï‡¿ÂPcúmÌ%*0Þ(ÆLôïc§ VŒ;œáÌôÏO™¥hÛ 7á‡!ªl“ód.wqy-4Õ¾S{¡–#µP[»° b bgÅ ¾‚3¤0@šZ F°&üš\F¿1d<«†¯£’“5riñ6gK)VÑ$ŒÎªD*‘ ¢®h—ª˜J‘ £Må³Ñ&t1­ìJøÆí—Yƒ‘,ò¼ Ðc»‰Á&òS —šÌrh0™OP/KxQÓzêÏ:“^€oPÌÔÔaÁõ#ïzQ×ßRçHë¶ vSŒf³§:Mat¾W¯Ë+ ¨ÉK/·¨é÷‰DB雕H¨úž¾Äýeà'Š|w!Ê… éïÖÓ‚´ª4*dÙ³¨Á’i¡š% b+Ñ7 ‚+Jd r|QþƒÌËrEi1*å7gË Ë™R³Ð#ÄNH³‘e»¨ª¨¿¨Å3Š»=™év%u6ÿ†“0a¶–jUˆŸÍ]©J}<«eø¾Õîõkõކö¾¡­•»+…\VpiEöÕuv½aãmîís*oi+­~dMQwéðS;–ù¬em;g”.­Ì)Zsx¨|SÁž{ ¨ÿ cölrÇ+Ä0ýse©ÞÍà +‹¾ ž©¨àºE'LÐp4 ©ÖFµZ‰jy-‘e‘1ÕfjìÍ&B¸§F¤p-^°|?¡Uèågܼtðm¾.Õ¯á ¨8Ì¥%¶Ì$DÀðýä+§_y$ó‘4SÁâ‘Ur8#SŸ–™®/ºmºÔŸdr/²„{ùÎÛæ,ói4wSÊÃ[[Ø{g"w/›¾Ä—¢¬²’Vºø [E^gLcŠ3Å—Âm^¼{ñ¡ÅÜî‚C´(R\lËZ¨ FD&Îy‘40­¢¦}Éb›b°Gm‹ZœÎú2q¤üEPTäi.“”ÚÍœˆÇT©w¡¿¶Öø/_wX¬–ñ‚$O:Pü×ܹgFêø½¾ý^7¡Yn^k®ïÊË]íy³hÕÊÆ¹n{ÉÂ’Õw¬«Ôk´úåËD¥²m¾+°rKMËζÊpye¶µ«ÅÂp0»nãÒâ’[ºVNp”ÙòóxžÄ±SåêÕr­?{AÇFã;ÚÀø"ƒIvúaÜ»ÏKm¹°;ûP6åÓÁŸF#ÈÅå™Ð”ùNæ…LŽdBffeOåH%-\lfÖev5Û¥’f]âðˆñs{’¡×“^P=ŒÊ¿:¨N°L;s^ÁØ–äUð“%góñþžÇ‡kAoʸçÄЦ¯nûjîÂu5•›{›fcAxmUÕPw“Ób¤ßš34ß«ã•ó·mÐß_õÅwλ屾å[äŒe÷ŒW÷y[Ç£îôå÷íXоeúyŒ«ð󈲕Há€ê  Ð# åt£(†):„ÐŽ8ZZÆél§#ЊHËbC/b”ô’ðêôð”ƒxÜÇ…=5£À5ëAÔ³Ôš3éõfb–ÌÇÌçÍÍ‚ÙÌÜVmi J¸fަqŠÙåô:<›… RŽ3»lÉ Ä 50ÃE3œ7Ã93ÄÍpÌ ×ÃêäÑE0ÈÂf?K·»»ð‹0¶¢JûñiM«™‹Ÿƒ’ï ïõƒé‰‡…Ù¹zÓÓ%ïâ1šn=uAxë£9سG®°)¬~1.œ(Û|Ox£ê&\” ê1û¬c %KpbܵÃuõP(pmÃ5H©(gC¶@ÊÙ©ß {?ÚÃüÔú©1Œ} I 9 tȇÝÁCA:æ»ÓGo·Ýc£óüKýTpÛÝùnNÀ`Ï6WÀÏŽB„”áR!5u¾³hX¨s^È’#åМœRǘ™¤Ž¤ÒÔT³¶t ½`èšÒ ï ¢Kœ}«å¤'#]‰£ý™Ùªä‰÷ŒŠh¯€CÒ£%· êè{|sÑ”ÿŧ¾»±þÖ¾hêÓ£-+v8¼¼}å½ó¢û_›:âVº,¾e•ÿ–‘ª]±E¶èÞ“CÕûCßñùVWýPc^KGäžZ³¾²ïžUÃ?xd ¼R»¥¥¬vóá¶±ƒù+¨û©ý[ÊÈ€Ð_+©k…ÍÂ![kÜl¤CFè0‚‰„§š¬QtkFSãÓph5MgÀ¢àæƒnM#ðJv^”Wô™QÞ¯½½žÌÕ²c;5ÚÐÁIxiâbp%¤3sHÃZ†BúÄÞd€¡]Ûv1§ ?a°(Õïó~)‘^2Nw±pÃ] A.¨åÀÍ­¨;]wuÌÉß<óí¬óWÃO 4õ]Ýýôɲû¸ÈUÔ/’º2m…Åî*}±ÀÎk\cÜdäì\>G…ÅçjáÓÁºahaÓB.¯Brää`êèhL˶¥egKx¥)9¹Ñ4f9i9Ù$Ía—²*òxRÕlvx›‰4ŸÏ:æ¿ñUÑõH|4UB\ ¹=,&g¿³#`d‹ÉÓn‰ÿvöyþ_Éœ`1ëésœÁ,i?8½R03™}êD?‹ó+fÅ܃ݙóçäózß‚h!yª3{Nª#eÖ¡þgcqvaGžzÈSŠI—•žEõVTв4h5¦âFjO£ÙbÄš%Õ~34™ï7?a¾`æÍæü ’IVgCf6´f7f9mYYÎ,ɉwÆTgvɰ=¼`Îtr&»­Y¸ÆÓ´ ÊÔkGÉì†ÔÎÝôdÂǼù g9³N)@=b‡=×Ï^œuDq Ý\£F´(·wÖñà GÂ[S_t/ª.Ò&Þ9MÿùÂÞ9=¯(;3dÐMùÐ.ÆÄ"WS²¤„ÞðªIòç¦ç@kNcnš-77 ¿ib®+ן;œ{6WÈM¼VÊŽææ†fÞ,¹rìéiäÓo–>óV ½”oæRš”›{³7Jç’nð_×_(ͼøO¿N¢:=E§?Й xÖhòÛþ÷I†²`™¾öqjatOoë˜óyo“˜Þ ¢©Ä8­ˆ»_1YÒS³¢O¥Â£E@PïNeäGñy^±¥Ø£d'9J¸¶ì׳šýël>›)æ»ÎühU605?mææ˜ûÍãf®†ÈØå)Žè$<t>¬Z\¾Âù…rY2æ÷µYP”:ºlwv£lZ-dA«YknrdÙŽ, Ý…ËŠˆ­¨ˆX UrH‰WÑ«µßо¬å溣î÷]îoº…¹Ž¨£Ãq—ƒwhÝn­ƒ‹$M‘£hUÑ@_U´³è@ÑÑ"¾¨È{Ü G½Pã]âíôîòò/üÙ ïzã¥CX¾ÛËUy#ç0-1ØÓ£zaŸE£%ª÷Öx©V<ƒ1è´È^r‰E…ÙYn‡F[ ­Òrz‡¢·Dµ‹”Uȉ"nÈf‹ý%/<¥zÀ ;½0à…ˆæxáC/¼â…ãê‰ú6µ©Ê z/¼ý¾~ã…×½€ýŸžé?ä…Ujg›4*’xT%1î…þˆPàÅäÂåýÎ ïyáR‰y b/¤x÷Âc¿P }K¥•hFZ­^Å å^ÈSüØ §Õµa£){’ãa#Îõ×ê\‘Âc^ÖiÎL'¤>ôo^ø{/üõL3ö™¯6cŸó*Mœ{½ŠMfhýt†Ü!/ìVg#{J*FÍE/¼ã…Õ»>u~ã™úµ¦õ7=$ÿ¼Óô›Á½–œ§±ý6ù'ò€¹Ýl;õÍPPá¹è7$v¾j5‹ûÑÔûߌ²îÔ[0ô««¿‡føðö©Â[Ÿl~ ¦üWFÞ6#ƒëÈ{ã;#=šÝá1Bg%¢WµÍ¾ïûÞ{O•ÅÊbúi‰U`…„‰ýDG/.—ˆMbñ+§ç1&¦Œz§žêe“Õë©$õH I)rŠ’Òœ2‘ÂSæÂr¨R\-ggWèʨž9/IÄLš£è»ìjX‰zîúXúâ›Ë´½kn ê´¯ë3*ìër'44­Žq>þÙKã´ÌÐsÜnL¼Žê¦8Bõ!»=´(ä ßÃTþž©ÕüF\“‹üT©Z àå €€“€z戋ËIÏYî"6—‹HК’žÒh•lV«4?½1}m:—žî²²…®·[÷X¹õV°Zu.©ÙÕã¢ì6áâ\.·ìVÜ´I:æÆSÓ2£¢Î¥óë8[¶Î•“ÎêíiYQ1Ý•NÓ¥œ«H$»©Yp&ß«#º|ª£‰w%»Æ¿}TåÆg™‘Üÿ݉ȳ:Ó•ªÌfÏÕ#w¶»r\VŸuýáˆó/h,&=äÂâTh}sýã#uZíN˜¸ÍÏ—]}Fn[¹8ÅZÜè¡[Ô¸ˆGÞõòËÉ<ÒJþY¹uiÍššM5\¾69`Ÿj-YDwVB{a¬p!çÍCVf–7‹‹¤Z*« µªÑRl³XŠñ[ì·Àˆåœ…6±_uµ•·ÁDh–(;ÄåaþâòÈa¡RvåH¹_LsÍy’†ñΊª«Ñèëš3ìúfâ¼<Õø}É*q¢>ªžýu©çVÉs¬,*–,–•ÿA,ÅÎÄÑ$ϯªgVUg&òÃ`ò·dAò³~e¸·kr}µékÖýÑmM•’`0‹Ê µn‰6}±Ão4®ü°f e¾™ ¢ÅD¿E Q÷UûÒÛ^˜údh j¸¯É¡Óå-ìÖÅš8Œ¦©Õù‹ºæz—µä/»eeæ‚L—«hÙ¾³ŽËÙµ§¬ÿ+#ÞN9Ü·HÎïüÒöù[þ¶’î 5§œTÊÖb>¨ÓP-ƺí”C£æðëçC<åÑ—q.º‡¾€u::nHWóã”Qá ŠùÄád,rZ=c"KL úXÊ"a9bZB€±ˆ“(5ÞLû³£‚jwªPäÜÚÊØx~êaìzú}Xó(_váô¿|œþ(›û B„pî¹KYÐHÖZ/¶‰4Bà&Nªûº“òé7ëyÕGIªR]S†Ÿ6Ñõt˜òTÑqMúõèΤ° x»º sÏ3é&6¸}»Û£n”iŽ´äVI¿þÆÔ¿÷†Å.¤:Rý™´þ¼°÷¹´ÓS\˜_ìéôsg~¹×b!N²_éÜoƒCzاƒÉt0¦;Ó}é»Ó¥ »Ó¥Ñ6m¿vŸ–Ö†ì²7Ù×ÛÏÚy»=[ëLsRÑé춘ÑÌÌjÆff¿‚4;q¿×›“4—g½}—|_`‰—šÇ&OugŽB¹¬…÷¸s'Ï|@{äÃB£¿ú£mS¬•õÐÿþV×’‰øÀ…½Mÿë#û¿³Ã'ìý8½ãë—Þúüh5;›í™ÖpM·âÞc9Íò ¨›Ž¿¢\[é¶ãÿê£e˘>N×LuÐrÜÿE2 H»L0ª»CG7ÐQzåD–X¬QKò©æ©f äšÙ‹Ž0I¦ŠèÝ›ÈÂãÎÆ§!ÈÓPˆR$åÇŽ }>Ÿú"€Ë#Ö9´0èH±Û Tû&&±MÏo\òÐ{Nu|D»aÛkÐñÈ#S_þþ‹SÏO½3õ§í¨`L^?@y¥’Ÿ6ec }•üù¸¾tWQôËä9”)û±âÄ-GguÚðºá§ö¦ñ¢bGŒ Oh̰ðßÀ±ø„Xü¢WwäVƒÑptŠˆ ƒ£Z­¬œŸ’jKIIM‘RSS›R€¤ ê¾r6…ŽàKSRìÀ~×Å0suz›N¯—ðÒ1 Ð¥XÁ`E+H5¢Õ%U:@õoˆHù·ú[Æk¹ùì]Wýí¢ú×å5Rd¨ Ÿ—5Z¨{ñ°þ”b¦¢‘ />;u…µ¬¼¸«ð“Ô…¾òâXûÚG{?wÓ|Œÿ 1’¥ä'FØo„_ò0ɃžÑœÅ`áæÒ»0À$üsúwµP­=¨¥Zá.èìí4‡y`õXÝ•nkÐê¶Óï<4Õß|¾I{¦ÚàÙáÙ©¶¾/!çøáR׋ > ®Äÿi½9úÇgþ—µqµ¦µ‘^É‚BÖM­ ákÿÔÿ©ÿ,+¤—H½ð& ñc¤!y­‚7‰›>Cr5xa9—Ö.¼ˆ°ŠÌãǦßFe c™á–áæÉôóX'¨ýjH ÖáeÆ+›õgtqŒÄa´šñ9‚}îÁz¯J¤{"1‡éúÌt ?‹¼&¤„œ:ñŸss¸'…¸¦Jó’æ%í]™î¤>OѰÎh0ž6~dšcz˼Ôü¾eB,·ÖY/¥ð)ÛRM©ÚÚl¯Ú½ö:ûƒŽ¹Žq•…¤-ÉŠÞØOÖ`ä¸\ûZkÍ‚UÉÿL$DIržÝE¢$aJ4h± ˜#nÒž„yâ ;“°@Läž$¬AŽ?’„µä6´¶¬Cƒ)LÂzLàç'a#ÎaɵÿŽ,ƒX6“=ðP¶Ma3æõXš µIHýN¦ÄDßKÂYDÿ5 ó¤„+NÂIçÚ“°†x¹­IXKÞçNÂ:RÄJÂz’ÅŸJÂF2—' ›È:A›„ÍdJèK²JÓ[?´qh|è¶X¿Üß;Þ+—ååÕò±¾Ø¶þبíÞV&/ܲEÚ88>&ÆÆb£;cýeˆ6ÄíòÊÞmcKÆ{· õ]ë^*ª]N ܼvUltŒUU”•®c0„ÒÏt“{åñÑÞþØÖÞÑÍòð€ÜŠkˆöŽ—ÈK¶õ•á7ÇF±rh›Ü^¶²Lnîm—{·õËm×:6 õÅÔʾØèx/"âÔ7íëêc£•ÝŒ!+Çc;còòÞññØØð¶Áññ‘y~ÿ-·ÜRÖ›DîCܲ¾á­þ¿Ô6¾k$ÖÚ¸ W_68¾uKûXŒ­g|×8kÅÃ8ù±áñ[zGclýc;6lŠõËãÈ“‘?±mصwãh,¶•­t‡:ã[‡úå]Ã;äÞ¾¾ØÈ8r„¡岿4Ù-×:©3%õdˆlÄk¯ÛH ˜ŒW/–{:ŽW€”ã_5B ÉéCœmˆ#£X&ÃøQï½*al-Sq·àŸŒõŒþ ¶©¥>YßêXed¶oPk®÷—ÉJ,mCÌ%ê<¶`}ßMF/Åë/÷—o ð_Á]¥â]êÀ¹–#/nFc†Béb´!u$ÆÛqµ…­e+>GÉf¬&xoMÊ!ªö,Qg¶ )–%9¸Q¥2®ÒN`©´Ûc¥ŠÕ¬öd¼WGÛ¦bµÝdÄ&q@olfŸJ›­%AyáÁ$×7‘ªTÇ“õ›YnVÿi Y©În§:ærµ~\Õ Ö6¨–F0µôãß-ê_âÜH¹/I·L…¶"æ·ß8Ù…å˜Ú>¦j붤ìËTš[QžíªÖÎȇñ"!Ç›Ëx@}2Ω=Æq&½ª¬fä?†<Ü€œŒ©üc‡“tΖ¤<¶%GíÅ9±ÞLn32Ý1‹Ç·¨óéûŒkÆ6Ö§O¥1¢r¶õÿêœËþÛœÝr“‘®óTÝßÉôûx’£ä&Ÿ³¤´¸éúÕû À+_‚óWáìU®ÂðÇ | 4¹þ)rý!âsí¹òÄê¿2|eÏ•®¼sE —¤KÊ¥æK#—&.iôÿòë×?ÿSÄ%þ(ÿq¸þñbÄuöâ;/\䔋ÁªÈÅHºëÖ^hÿU-×~¸ö_rÓ.ñg þlúgtúgðÄOá'?^à:û=øns«çµ‘×&^ã”3=gFÎpìB&%_½LÏ@ÊÉÓוE/\â©Ð©+§8}O|$Nˆ‹ÇãÜÄsNÅãMÇŸ8~á8o<ö„Ï¥<¡·FÈ« ÌLOÒyÊB3ÂÍxQÇû9¼ÎãÅM#¤¸ä¼ÈWËs}¯Çñj~ Yu=|4ÏuþèÅ£”ÍqõQ³5²çK°þÈð‘wŽ\8‹G\Gö¹ÿÈôᡸ”Ó²#ʃzSD< ë?qø…Ãg_9<}X£ÎÊ»?~?=wÿùû/ÞÏÝwoÄU~¯r/¸†_Êç"»ã\LJ¡Å‘'Ë'éþ}×Þ­Ó® äå;;.츲ƒ»²ÆÇB®1dâyö*ºF#•®íx)#%y¤|„ci^™ÞžLo×¹v ’øÆV(Þ [êÁîëñj\¨Y ,$ ï@dЪ¨ŠÈ,õ©(ðFº×\ë"®µÈŒ5øL ¤´ (^>Àµs r!Ží„xë¹Öó­L’§ZKçD·iE–^i™n¡JKå܈Ғ_y§äÅþˆn…+7¢_ž±œF—w,ÿùòß.ÿ÷åÂ#Ë!}Y^i$}Y¶ydÙ7—ÑÆHµkIDvEq1‹ñz!"W"t"Ž€½Ý b»Û)v àr‰!q½¸GäEÑ/6‰ÃâýâqZÔ†°îŠÈ ˜p€gàm+}¾Æ3ÚéÖÆ¸¶ymîŠç¯dw¥eM\sWœ´¯YÛqà¾Îý÷ÞKe7Æ+;â=Ùñ~L eŸpEãcã;|ì €øÆ|>÷© `ÆÁ@mdmì6æKT³º±D- 0†›ý¸/ñeµc¬ÒGTô±ÝXô‘î±qCª8t¢bLÅÇpIr:*i_÷’‡nV êÔØûŽ¥ÿ_+«ñ¥ endstream endobj 96 0 obj 11801 endobj 97 0 obj <> endobj 98 0 obj <> stream xœ]’Ínƒ0 €ïM_0€YDàå¹Ðй>OÍôÜ àSÕ®Òn»_Ö+ùKx_'ŠÖ’UÚQÃ<5-ØÆÜÀË‚ YYæýo/Üsɵk?ëR¥K ‚XåŽq#‡Ä©DŽ˜)sÎ9á8Õ¦?#ï™/ÈΉÄ*@>ñ¹!rÁ9?s-Å/Ì rÉŒ>2`.‘Ù?Ý#³е’ý“™ý#t–ìbOÉþ!ºÉÍï"7êÉþ å°š"³rBf…÷•ìŸRöOéÜÍkû‡xµýÿ˜¯Ø?³ûÇxGÅþ û(öð,ÅþêD½½(>9ÎäÏ(‰ön­#\šœœÞÀïlOã„UôûÖûÄ endstream endobj 99 0 obj <> endobj 100 0 obj <> stream xœÔ¼{`ǵ8GHËw¯Ø¸¤fcû÷Ò_AhaîÒÅ º~¯ÿÊÐÊLÚFñRZðýèZšŸGó™KW®»­+ó§u4?@Ûì\±zÑ‚„ÆysZEÛG'W.¸­·VÓCZ½æÝ«¬\|×Éûiþíï—½«×®ÛòGºu'«ï]³¸·xþÏ*iþ ŠßohÐ?ö1Ò¤†å1áxV'è F1Á$™-V›=1)Ù‘âLMKw¹=Þ̬ìœÜ¼|Ÿ¿ ”džƗ”–•WLWV)'M®®©©›ZË´é3fÎšÝØ4g.úÿ͇‡ÝÎoEv´Q½ÞðáÊ‘ ÝŠÐè§,wíýÿx„ºØÏ)ô:ŽŽÞPµÝA¯ÏÜPvý=­¦¡{þE³/£§â©}è ºûŸÂ-CwÑvŽÑþ¯}:iéFô íù4¢32 D{]¯ý½õíMÁÀ[è~ô…¼½D¯‡èÌëÇC÷ãYhþÙŠîD»è@ÚËf9:mh>-}æ£ÅhõM¢!ôÚDWáÕ¿uôxåûó]´ý¨õ]wÇð%û!.ŠûsèµlëX¥6B–á1y€fîCÝô»Þ§xÞC&¢jÞ¬Ô´475Ξ5³aÆôi·ÔO­‹L©­©žçõÄž¢æ¯f#7U×U»uÞúÙƒ¬qo¼AD1¯Fl +¥f§ºúÙzöÖ. ‹˜®hu=žP¶–—²e;è­ëôÎnž BSr»së˂꡾qRŸ2³I'¼°sæ vÎnm~Y¢êÔÎÆæ“ðäÎI-'2i]óËn„µ³RVÈ2n–a-Í¢ ï|YAh@­åÔ5¿è4 µL7VhÑi+“ÆÊ0-ãbeŠZÆ>ô)%/¥4¦ü»ÆÝÅžÏæ–¥ƒ-lŽ£DJúÃà­¤ÔñVž¬1뽋' ¼“Xy+¯Š•kX¹–Î H„ÿ¦A©Æû÷ä&(1ª¦—.¾‰j¿Z8(8ᤖÓ]*<¡á?á$Á4‰NV̳â“ZpeÂI`å!³Çœå1{ª±;š F—òM_=]ͽ«¶ËQ >‹ê[Zd‹ò‹%xÞÉëë+é° Hm£m—¬ÕÜ¥Á‹5°™ßÃãeF_R¼$­[+k‰[ Zm¢d‘"B4>"_LŽsg8Ì5$'b9±3q(ñlâåD>˜€;lVëDžpÈ‚ª «BíeÁÐ¥Bhoï ¶‡ÚûúÌ¡`{KXÊÂÁK¨é2ú?Nn¿éã!â…’“@´ÄÃíýîÈß{W½‹Gž“ÒM€’ÒL§° G»ø­_mápî¬É<¨ž•GÇBu~î/”Æ ( ­Wf?‰á$8$=-a=I!ù„ðF»1ËHP«br ( ÿ6m+ÒI:EGtš—-h›aë°m±ñ&Û9Û¨hmŠ`ŽØlZk‡@´t U—,eAßüö¾Kl¿TØÞ—"ý>åÒ8©Ã[özÌ^³§0kÇgÓ´§°˜ûKxã‹£ Ïà™·ÿ`såÙcÇ¢Ûá®Ç‘÷çY_=ò¿5¼úá;v¼w¿:Wè8ø¥tf”Ž~¥T>) í!ÛS6²/ Ö§mOÃÏ!xÁf´ᩨ•ê­„XwÂý@ð" @¤Ó£½Ê\s]¯4 I¤Qê’ð$ °W I$Éai52ËfÅÜi25kÌŠ{È}ÔM¤q§pDËI¸#èèp¬vìupJî¸úÜ=(! 8Ÿ‘ƒ>ú² -2‡è3î ñ± K©¿*•<0F!;%—ÈøV U‰¹=Ñû£ugðÛ^¾cRNãm0ôãm·D+àÝY·MËÂu#/ñ[K–îŸ?ùÎÓ¥‘ï’O•ùU®‘äEªÊ8 PÚù(í øVetuTpm€zÔ†p*C¸7bœ‹1è󙩇=„ô Ñ'êq»nÑOW¡Ã‚Ρó40Y$[S¬ÁZM’?áužaH„m"tŠÐ(‚,B¦H„ÏE8¯aŸ½"t‰ ˆ0^IN„w.ŠðžÃ"a@„u"4ˆP-‚[k¥QÜ&ž?yN/v‰ûÄ×ÅÏEÍákiÞ ‚S¬ûŧÅD~·øŠø‰H8ÑFá«EnY#…Ü&îSÓf^§ }.ê*Tô *zWñ§èõ«èýß#_vò6Úá:‘\‡t£Šæç"GoÃH”E¬ÑéµÀqOÿ2Hg — Øpzô¬"¥¤GŽ`È[ € À _0˜"LN^Vò$â&ø"¹L°‹'gÈ9‘5Z¯­Ö6j §Õ§ã ‰s ¤2ºƒ”•†‚>6Ó|í¥!Ên‚AKRYaˆMÁ¾5êgþu¬§ïê'^ÓÇ®qÀ¤Ÿ¬çDýéÑ‹Ê21’b’ ArHPË# ìJ ¦ÍHëHÛ’¶7íHšÖ”VE“ÇÓΤ]Hû,M[ÑAS8VGÒ”9]‘4%Çq§Éiiä¸ D”40ÑV°µÁˆiphL`§B•*” l}ù|}lõÑyDË ÙATÞÞ¢PlŽ$&ÙÀh‘!;ôœzðÁÄŠ%3Ý5)æKn(ÍðkòÒ•:òÒ]›*×û4š]„OÌ›³à.:f×èeœÏûQ"êWææ&@OÂÆ„] $W„q£¸K$»9àÜ‚YÁmæsÏpÍ#«·$âD£˜H¤ZA·—ÄK¼›WxNË$ƒIÓ`¬Òƒ^0YãõÝvU¢è ….%ÛÙ8Ú®ªe%Pô‹Ø€JBöÝk¶%† ‹Kp~^Sé¿Ý¾­è¶Ÿý,T•2.MgÿŽu×ßþv×HÓô*F•q£#̋Ǖ£|rBÉüS”çMÍÛòóÊ#ER„×KÛ¥ïH¤8­6 §A[ቢ9R–Z—ŠËR!U¢™bTKç8« 4'ÖŠXd¹Í•AP퀥ê0I¨” &¦¥jys½Ðì…D­×«M$¦¼|)ŸÍïº`a¤.ÆçCv>|™oä”åÃþ|ؘÅùµùKò‰#>χYÕ¶ü}ùxIþ†|\¦ÞbS9._21,FS‹©Ç´ÑÄéMoø?òá'Çü°ßý°Ä~(ö×ú±ÃŸûá#?¼î‡ýpÐ;ü°N)óƒÍŸéÇ?üüKvë‹~Ö׿Uð;ü˜Þù²æø—øwø ½ÃÇnzˇ~øíX«ßóÃ>µá5~èbÐ0Þ_íÇc°¿ðÃý¿òãS~xÜÛü°aØåÇ“($ú³ý˜óÃúÿæÇïùá ?бܯB.ñoðã±Ñd2XàØ˜”ßÄGuRføí÷“j£õÛókÞYç߯ªképH&IôãÏÙ>òã}þc~LÇУ šÕûñÕa>N[À»Ô!B'Ã!“vEJù_÷¿çÿÜÏ ¨d­÷ƒ'ë×êmGUÒôÇ(Òå'N?\V‰÷6#Õ6ÿ>ÿ)?Wå§Š€_òc–±–ÜsdâA­ŽÔöÄËü¸¼½N\«Ò¹ãFÙü-r»¯ïF)ÿ-’ý¦v¿MèÓÅL5‹ùß÷Q5#‰Z9Á`ßs(û'û:ú|±¿vöÏþú<^€œì6´Ì䱦CRbRqI%”XoÌpûù¬Î¬Ó ‚^gÕ<ýåÉ—´ Z­N'è$Íë?zM+Ñ´N§5iÏ ã8²ýÁö,×ÈT®|Ä“4Ù•“éRìø¿F)“Ò2¼479_`²m.•mk©l+D)÷/ÜÞÆ»ŒçRæ§çSxìK¦‹žOµ§â¬¬ôZ% ¬.ÝRº·””N°M±«"Íž±Û«¦¸yòÙÉøèd˜Ì*ÜTÖyfæ&–Í„”P‡ ‚¶½6l³™R¤@¨1I9>³ÍÔ~`2ÐÇìÆ«ºCa!Ó¨ A?U øŒlÆù« (.µ9•TuH´Ç§ñSªDxHaÐ&»-yôØÌ»ž˜û?©ås+Æ7Vfk^Õ—vZõÎ/ò+Lé “³Cud¢I«™·Þ;gkSþO'ÝÚZÔa{fÿò]ÓÓ1W1y~¹Ó”39dV–O÷½r"h˜É‘^ÎY2³x|c…ûëŠZ80¶Ö5w2™º“w'¥« U*¹’]¶c»ÝctÕžeûP’ÑEtñ:äÈ¥—Ãh‘´&Ä$`Uè]U{ê»TÈ çqrÈÌ´¢P:±‡Ô¡Ž‰<»ù^ÀžB€³úÊÊs 9½rnI ©Ì˜2©<)©¢²ÌVÙV‘¦%ñ|é¢]3GÞ{æÉ·T”…–+Vï2/nM_–Ž›Èb‚uu‚àœ¢¸Ò`ˆŠŒœ,4Åe³œs6ç|ÉaÕJ«NÇ£†¬,ÞÝ(ñ 1 †=CsY|ì²Ø×þ˜ÉªÆR\’”@õ:lŽ«yi‘lÞº5 ëïq©fa8Í^P;aÙŒ€ é_ ¤&kƒŽpq1íøº^J)u¤¦…êÇ%áÊ G;óB=ß]µâèÒPÖ‚'U[dûè§äª_d¡JÍ~)ž|O¹‡8j• a¯Ÿ1À^Ãèr öBæg™eJ™ræåLN—9›1Ã9—sðhôæ€:yDkRÄ¡ip%ZíFdb¥’ª­Qç½:kÖ¤\ ©&˜ãc.2‡X2É E^6¨>l†ò¤ñMUJw]î©ØbÀ“”ÊYËj[ïlÌ¡ÜoÖŒeM·ÏÄk¯<›Q?YÖòþ² [ð–¢4ÿ¼¡Åø—l¾ì¢ƒ ó慨¾µŠH´µˆ9 Ãûax; ¯] ’. cg„0üü“ð×aÜC…ÈÁðËá·Â<­žv "Öë _íèö0ÐêÃmáåaÎŽuñIŸ cZ¿%|Cµ! ²f”Q¸ÚÌqÖÌ¡0ÞÂYÆ3ÂP†L”övèkkow…¡> U¬Y0…]aêï?~%Ì­Vïuµì•0C†¨}€ÚÐöéP¾f7}ÆÆñ6úÂûت„ásvÃÓá„޴< ãÕ›La({…~&GðŽÝ‰uÇú¢uÇ0+îs´¡óaÀá¡ðÑðÙ0G{—à R¬aÐe5äJl5IVSPd¤P]OlIÅxK‡ª Ü¨çܨÝTz“nt}uÇÍ×·hV1Ù׎X*ʘÕãó˜Çcn7Š5õ'}¬&D]©%eó&zŸ¿¶¼“Kë(ý{SIò„†.eÖ­·džƒÂÏ-÷‘{Èì—ûÂå±E_×H0çk¼cöÈ=±5FþJ×XZù2Ê k+SkˆdÕ* Ž QÊ rÊË.æpgsÀ”q^æf¼ÌX{–ùÌ$Q/Š—ÙzŠ?ØóPÙ[Œ*>&âR‘ª…ÿœŒ¤ì_ñ¶5ÔØ cûÛ¢s¹4nÊFåhŸ"õ”n,Å=ùóñŽÌý™8“q«V©sµ¸p¶E‹wý„yÝ.*U´MQŽÒ±N—jªE’$ÉÒe‰ÓIàjôNš€]`tœpqNõ7dH‰&“SWÜÀÇ :ú˜üS=Ã…cÞ æ˜óù€2²s¼tìß$Ã7¹í{×=à™¼S óÕ€çPf-®ê=ØžûZrÅ©Lêe×­¨­_T‘Œ3úÏïojîÂn¹"-ÚÂkr"ùÉ •§Œ¯ Úî{wk×á¥OÞ½öÈB_ùª#ŒïR‰üœÎ‰´^™¹Q‚I°( p׺\ºÚ£”× yT3²‚ÕÛâroqïu_psnwŠäÖõêtçu©†¤“tjö,- Z:Ó”\yÐŽbJo½HªßǺ=Ø—L /Å6EnЕ¨¨_ÉÅ}bª®V§Ò3­s«éEaB÷¾[N®.ÌœØÜ½¦¼íÞnE|9aMÏ´nʼn3Ú÷U.]aœ¼y~ÙœïÞ¶òû·7…’ çn¨Nh]ê>“1~­Á·PùçSÒ1B?0 ª`pAú³ŽÃàAÉöE}ê–UÉÍE;·~²‹‰O*9ù’ê nSJT·ÁAÕµ°íG¸Ü4Õ„2³äw™H©!ø;ÔZè&·’» I`ŽŽÙû•4Aå©€M’ä“ú%ÌI¶Ø¥Zj”¶Iû¤×¥÷$Ý\ËóN 8 tÁªËÀ€Û0ÎNjӢ^ê-m–Ý–C–·-Xt£xÝòžµÀ6Ë> î´@µ¥Ñ‚Ýà,6 ~óâ5VÀ* f,Á*5NV 0P8ÄZ‚6ÖÄÊ|£×Ø¡p7÷wñ›øŒuËu_ƒÒý³cå±n•E±Ž5%×£ ©²À¿èóœn®Ä ZY$ Öš°I`κPUH17ÛÜó¯ÏÏ¿^<¬¹Þf¾A„¨ºß˜QM«˜¿žíR>á£=ôµÇÌfj(“¤JBíb¼ø7Ñ[ÏþUkµ™5«Í®ûâ Õø”Īê*jŒNªJÄ?ŽÍï2º–_äêQ zMiZØÀ«í[ì{ídy"dC¾ìãÇvŒ éÎtœYçõ¢åí²YZ‡­ÄZ6`¨Ó+Žôˆ^ï0ß'vS㨳ìl(ƒ2UKÌÉT•TV?Ÿ×àF™0Daœ™é–øNC¯À``œ‘-~éRüÇRVŒR£©ïªå{Õp¢–ÄvÌb¬’2È’t¸æ/'Eã‹™U½åš¸³œ¼XÑûhÏük¦YŽ$ ”/¨Í ÌZ_;q [ùõÏŸÿuê÷¹º)°ioÚŠ‰¾Ö¦úRøn¹u¦/Mé¹Å5w¦”3QW•ﲚók–LÛwèŽÝ¶ü2¯ij½¿,'M28¼ÁIÍ1ùÒ@mI/¿Y)§ìUZ²z²p­gŽg‰‡Ìq.qâ–¤ž$L'èó3fŽUl0‚Aµ»´xÙA0‡A‹V)C¶£6lËH_ō޵&­w-ï¸êÿ¦S\%V ~ ¤°TRš¤ƒåÃ;mû©%Ý'絛ßvjÙâÛny)wz_ä–u3róf¬©›²f†ÿèíè'OOúØßù $=>yòãÑóÄ…í%¥Û/|ÿ{ÿ~wEÅÝÿNçÑ+t2Ý> |2 ¸É~„†VPŽóCè(%ˆ"J‡ R¼é3]C‘Qÿ•Ÿ|ð­¦b™+á·"½º7Ý@YâA ìÔsÔâ $'ÛUØŸHyÅhðmúåú~=Ñë`u’Æ…¡_Äa ˸&yFÜZ]b"4Hf>tKlž©kBÌ{Þô…Úûbr©tO„Ì!;$-ûzHßS#Kñö×Þˆa‰®¤èÞj³iàoPýTí!/^¹å^r+Ÿ–™eùT—âLÑRzs(¾kcæ72òo3þéŽhœõK¿W…—®1qõÓξ힘_Cõ|‚—Ezdç$&¥«ĸ;žüŒ1I0‰.Stߎè^h2iÍUùðS_íZ›ÅDˆd·é ÷ïä™Ð2Húä\QÈYSnA0©¨¬´$Øs¥‘ßz%h«šT!I&UÚÈ/¿Ú“ §£_ÁVºžhúˈ½ø’ÁÑ@ûµŒ\‰tjŒCF¬ŒÃF2dPpäCºÔÙZùF˜j›¥4x+¡È[[[š­¿`\óOÍ­Ÿäž¸mâ1Þ¹`ôSþwqÞ¹B™Ú–)Y dÁ,Ø= õ@#•LNhKG,1ÃR# 6ÅdÊ&Ýyy8½í¸þŒ»õ`Ò»ôXïè0qÞ¶+ãšíí—Ú)ãT­›ø¦†ófdf3¾Yœ*ä¿Á7ùßuœŠ^yì¹èWÏ5Ï; ü“ObÞO&nyµÿŽn©š¸åµþmgú+ð›EÿvvéÊŸ€ñÈc eñ’W£_<ºåü¾††}ç·lùõÁ¦9ß‹ñ ÞÍâ1P·’fhUt{Ñt]@[pVï«ÔyÿÒý4Àú‡txb¾û%îÒ> Å]Zx=‹ðrÔv#Ò‚`Žé!S _¦ûJ‡uú!ᨀ$!cµøº¢ÕæX â,ªnnI*‹­ u¡”®“ö²PŸ9îU#blfQf£.5TeÖÈ»§éZùþŒ<éßž‘é‚©Ä?9|å1¾IÍFΤê0ó·›ù@A· qÌ`Ü €Ó¦¢`-æ™"%FªùF¾‹'¨ÎUU'£v'óÝ+™DKÕ2nˆÃ ×À]ä.s4}”ÃãÖ˜C‡ÁD»ÓÍ®¹_U í'?!ËÏ»òsçÔq>Bùs§íTª"ÛBznÁ=×H,VÌÞª(–ËQ ‘-C–˲×rÄrÜB,ÎÅ Šó¬ó¼ó¢“s2^Iyš®ußÁ¯æÉ^þÏÅžhy«†ˆHåܪ4fŠcœ›1gøX`!¯º½C78Å0þ`Ýù‡ç)[²{ö¬ûWUý°ýèïl•w½5H¶^Ù»ü;ó}þÎC«Iוûî9·sR|ä3jC5è}%²iÜà8¼A»C‹WB“q±·–/+ÇÙ¤˜àl å€ $9’6&íJâ4i‰iÒv¤qB°V)Ì`KÂ…œ0e@S˳AÎLJðü„)¦Ч¸§(Sð¹)€¦¸§ MžÂ5\˜g§ÀŒ)00åèlšœ‚ÏO¹ÌR Ë3e”4¸$ÓÄ{¢ÐP¤l h“2y`ÛKùÆVÊUkéÆý•;\g)…Á{Õ¢ÆÄwYˆÝlÓXoâ8³}h‰’ð‚¥¿+ÜU›mM½‘î¨ò²àÐêµOÔ-—§™ëé‚\CwqÍ¢‰.—²°º¸{Vatnö”…RêgfÔß6ç¹¼úroÍà»wßyþ¾i= •%¹DðM¨Ë¹òÓ?þ‰¼Ñ÷Ý%²ÜýÝÞõGæºAcü‚‹ªübÚ Z¢%H¯ÊC­Zž"/´²ÍC-r‹ ëØÂÏ \¡ƒÉÃØ\ß%5àDÝAô©qolÑc÷Ä¿OpWî'…W~Að[G'<µf}O§¶œƒòý ôoÊw6‘A‚×ãí¯/ß^Ž×‡¶‡ðúàö ^/nñ¦¬Á,Üf^nÆ)y`×Á†ÀŽÖ .²W;ƱQœãÈqè­îUãÆQûÎe ZXɬáêÏôÀì¼bǺ”éžl˜—½"{s6Ñg§dãlïZ¿VZ»Õ³ ‹ k Äfž²ÂC/?Àcïâñeh¹ÊÍl'“‡ÑXõYþ<‘§ @b± ±@½1sPõ70gôà)þ¯Æ3<îe{+Û[Ñ11HY™¡Vi0Âã(5¨¼È{Ö{Þ{ÑËõ‚É ^ðŽí­¤&מurHÙqÑqÙÁë)Èa°#K/ÅT‡ªoß[oÙNòƤ¥Âéµ]•K·OK{Á,7ת{,§0Á@¶–L+L*]¼§‘mÕ,­ño«¹“'z‡gRiŽöj\þbºVT3èRjŸL†þdx& œI¾¤Š¤þ$îI œ’Oªú%®ß lÄ€Z• ¢ªØZ‘FÒ(¢ÕX;´ÄÖ¡±Äm¶ùßf²Åü\,4~L…Éó‹—þú¾‘ÿ†_= Ö7VŸµïýÑÿ†òÕ¯ NÇ熣ÿóB;¿uæ“Ñ+§ö¾}gøë‘{ßcϤ Î㸗ΠbCXÁ½tì½rÎ}¼Á˜“¿)G{|ç‹«çN±ó+ðž2*ð–ð¾ð¥@^ Nh6 »®‚í8ü……·¼;–¯zîÍ÷…ü¶/ Goè¡7x§BžÚÆAáIÚªöcÚ0þ@€'Ø/@…Å€A€Ë…~a·ð´ðŠð‰ðµ mh©O¨`x|-àcTõ„d °[8DÁÞ¦åüð ¡CÀ²&ºÏ <ÌÒ¬t¯À]àˆp\`å\¯(ê>¾K¨¢«…#´â3A‹(ùL€¥]Î dµ Õ8€ó`H€ÕÂK‚[P„‹…œa v L‘çªp«hh©Nœ­ô1hzµGµÃì΀«^Õ§´n q<õàI!åËï°P2HI–¦|XØqƒƒæªk檯&š‹“»Î‰'Çœƒ;>ÿÃh*·ƒûÓ×NîO‡ãûD‹ÑC\„{ iв—OåÙ’!¹ô‚Øe`Ò)DÓ;€ênØèÜâ°›Þ\¥Ù¢Ù«!™– °µ†L\·š;Âãx9‚Ôø}·ýÝvHf€j¦¨þ"kذ/&¼ò8iÅïÂ÷ŠÞ½ïà·à×ã¤QqÒ0NljªÛ·¦AÓ«¡ö ÃIÃË\/7À® mA{é‚0á*¼Áç0N £Pˆá¤cÅq*) ˆáÔJqúãCa5¬z(:ÿ]Ê–Æu(f;Wä=vØ”8˜ˆ[´=ZU”o"¤waÜèíò®ó’ÆŒ®Œu¤(½&o/„Bf-èÅȶÈJ)J©IYŸÂ%¦€}µÍF…z0ëHŠÑi«$½[Uõ09=;¢OË_ïvO^ë°´c»I;>î>µ«Â¼Y<7Åd±MtÕ½0&ïyÓ¯n7ÚcÙoøÖkŸZÝzS¸æÎW6DîèžžôLjÿÌ©·5Œ;¹¶óðêðK™‘eµãºf†rë—MšØɆw—Ø2eþ €c¯Bê;Ó'¯jpµÍ¬Ýý«=m•ë¿ß[·avAÚÄe·L¿»«¼ iWÏs%R)@‡”‡’ŸNƸa»(€õÛ ð¦ÌÁ̇2 o°² Dƒq6&O[àˆ–[ú-»©M–*¶&)¢9’”ÄÎE¸2‚øxdÈ©yר±%·cK*¤¦æ9)_Îã˪R·§ãdñ;T¢d»ê¦¹zîëꙦtñÃ_•ØzÝñ¦¿4ÞûêÒ‘×1Zz`²gòâÉMw5¢=¼/z&6®‹¸gŽ›·µ!zÖÖõ·Â=Ëtøù­9[[+–6…MúòÖ[ñ¤5 £“<á9#?œ<Bj”KžÐE§ôktQl¦´"h“RKZMØ/ÂÌ%u‘NÔKç¨jB°m ^‹Ž3ô(?Ì“˜)Ú fÎRí@çæ‡èašÀó¥áˆú[ «¿/RsÔã6UàS=Ÿj„;å%”B1àµ3ìl^ÌÇFíè£tM —•;wø`™&eÍÊÂ|²=¹)™ÌI‚9Và-vK“…l2q‹±Çˆ—X†¡.«% ¥A¿¸[Ä U]õ™ó\ŠÇƒ¶¸öº°+8àv‚ÄÞvAŒÓÐ!#OÇeúd3ø”Ž<«ÔÁËÅ€‡  Ø` ¼fl÷…*¶_ó“¾ÓNó)q×CÜ9rõc¹“n<•ÂÖ@Iå—ff]ffãî– yöÎׇº¼/¦Ô-ÝÕ<ðÚæð¤;´eöž¾9iÑ6ÜÜòÈ«ËOF¿8Ñ‚ßT=G9ýÓŠÇ7MðŒyŽR JR£G£)òÜIÙÌ­zÍ. ÒçÊ£R%—Ŧaæúqs ×IØQî2§ãÈ5ë‰„ê¤ ²íöT¨ñwÿŒßúµSåéµP~•BŸM £™èŒ²m}îö\¼Þ³ÝƒÕ#†ëS·§âõÉÛ“ñ¦¤Á$¼É:hÅ›Œ°I7¨Ã›´ƒZ|ÍNlªY\ƒ›ê×ãÖ‰Ë&âñ«ìù«\¦L× j‚¸ì.=e`¦JW%vU+T’¡J¨œ=a&‰>Ó4y}YÙ´àúí´õñ]?Õº£kîZD ™™vìè¨tIº4¶uÕ—×í23¿¤ˆmÆbLÇÌ9r»ÙôçRÊÖ¿¸yó ·–g,.®h¯ò”õ>¾rí“«‹=UíáðÒ[üÿî¬ìª›²°*5±|ICSw‰Ù›Z½vÎŒÕ5n75ffõV§Á®Ö«*+Wh™vÛÜ"K¨œ»¬bê]‹ÊÊm›Z¾lnØÈé‹æÞ†o)j®òz«š‹ò›#@¤yäÑPG]AÁÔã'.Ÿ–Ÿ?m¥ªkvÒçc‰Ë“*=OæÀ£øŽñ1#~Ê Ͱλ͋׹·¹÷¹É&× ë!Ùät>ä$ý)»S¥ÖÜe¹1—•”LK±²Ðª µÊŠgXÏX1²²}nÅ:låµÖrÃj½>¸Ê­¡ê¿;;’f¿¶#yu2NNæó×fhÖ&]5ÇVPL´„‚—ؾµBj¼öÕ}ë±ëØníU¯LÉõ>™onÜZ¦l{mÃÌ;—DŸI½µ­nc“Œíuí+J:­¨¨ºíøêOþözVÝòÚ‰K#9ÞÚ¥5…ݳ‹ð^þéÕùžÚÞζ¦šÁó{‚SCΚÍÇ—¯îŸ=v|úà’Š@Ó¦ú)›ZBµËck+‰.„¿påÈ€«DöaØáÝÃ:¼Qwjî×à ¸=ŒðF%ú[õ8U›8°r@’á6Ø —¤½[{@K4:=h9N$ÕïY1vÒ1ÏPfÀœÁF{0|døÂ@^7À~Ãㆠd›4†lC­a‰a‡•½A!z2Ù5vÒ HÁz"žPÖ]ø8²A=”9G=2Z¬ÜLTf² Nü+Ίp’LÝ'É?~ó >á·êaÏÕÓœ±Vœ#î÷‹‹oˆ¿?…ý4Õ™W^:ÙÆZ"n m,[,1mèK°ÂÇÅ)4CBøH=»uÊNƒ’ë;þf¿Ô>IW,85[łニM ÝAñ}ëX~«öJ^g 0ljE®d‰Šçªâ_ž)!C5dÎèÄ6žÈ)vŽuH<*’ucgyc^ÝÔjc·fX’#GÕ³¬’Ø öŠ Z£ÕsœÖiLÛÇ<ïf15Ûw]DeÇš5¾o ùf‘ïÛŽ§^ƒòQ޾†mWéã‡[KKÕã­1ÿ 'R¯?ŠJ<Ñ?D?ø1lÞ÷&$€ñ­è}°^Vc?Nˆ¶Ác#Ÿü*6ú).S}!%e#Ú…0$Sý)š#sﻩ"Ï©GÇN1h+Ó‚¥ï¶—ªëßÎŽžz$Úcã/~åfím‰6ãGh{‰h’Rp·w Ðlƒf æäs„gI#Iš ÖþÆd™›ö-9y¤¶Ü~éöÒB5"HÈqeK~ëžÏÍßÕìó5ïšÿÜ‚=­ùض;ú—ß÷ôüá“èîÝÑOiê÷Ù£ŽêéüFÊWsÐ³Ê vô/æ×ìÏÚ…—eÃæÌ=™xY&,Ke/Vh%Ÿ¶, ïH‚ü¤eI˜×ÙuX âÛR:Sðñ”3)ئHÉÔh ­‘¤dä§üÖÃ'#·>uÞFq§;˜kƒ¹tÞžýóólêÒßSêìe¼ZrQCkÐßöRI)!Þ›½#×Ï^ˆ¢±xWìû–é+íaÓ÷÷Ÿ²éûÉØôîŽù<_¦ÄÚ¢êùZxFy„´a¼_û¸k÷—qu\ 5i•$gDÃËŽyiðáq3 Öð»:hÅûl`žæ~Ù(ÀæªGŸàN….a@v °PX#àj¡QÀB¡€m`þ&À{‡>)üXÀû„c^#Ü)`vž$€MÈÆ „®˜Ä2/Y¡} Êü…‘!,`á4 å`SsD˜Ù¹]¸GxX ÌË‚…)õáìäZZU5‰VA›°\ÀaaZƒ%Ìñƒßþ `æ‚BMæõiHšP `x[ø@øD Ì¡sF NÕ?ÄüF¼‰¢¿EØ+¡åçžyd°Ip XÛ ÐAç,˜ÃUG~A”êS }¢¼05¡5aY©áš¸ÅÙc‚rS«i™i“‰»‹@aGµÖnÚ†°€`@?€ ò¡ˆð1| T"e¡"D4>B_PþÍ"kSLù¦r!:üÙô6—)3—(W—@–:¥!é¬tYâ¥o¼ŸÁ»- ,[:-C–³–Ë>h&tòÌ=Å"Š®½û….xJ»»^ÿö—¢QXL'\;ï!’ðÆÈÞ‚¦tc‚hL0¦™aÛ[üÖ+î‚o^NVž·Y&½zÔØ öž—j¥`“aЀ{(sX¥Ñ #HF· L2¹©QÔ‰¨ñ„ŒëD Ÿ<æFëc,‰ #Ðè±Ý;>—P‹Ž3.;90åÕ†§È£Ügß‹þ&úËèN= 5Pâþ'>:—\¡º£ ŸS* ð†ƒìGpô°„UµqSÚ`ÚCi¤' N‡t‰šÎ÷[a‡ÖX©Ý»ÄŠï·±0Æ‘I«$”¬£æt—tÐ;\Ðâ‚Z8\ qÎe1«€f4žlO±§Ö³Ä³Á³Ãó¸çEÏž<_xŒo²+ö0Ž9úþÇ‘×=À*ñ¶oÑüÓû5žDZ âd±bÃÏ=pÑ?öüʃOyà¨îôÜïÁë<ÐéIžY<Þn`Ń?ô|îÁ*è1Ï)V!»<븵â¯K㽕á<®ùÇÑÆ¢™Â].Cú¾¢kèS£íѹñóÔIRh“RD›«3DWk7²Kv·]±sZ»=Ù1䀪Ø?þÀ¡üê7‘󎋼—½•¯ÁM—ú¾¹Q?ä8ªp38­rwœqœspŸ9`ØqÖqÞAª3(4q;`¯ZE(ÜjZ}žõ±×Ù{ëŽÐÛhkF¨Æ³"ÀZv ƒÝÏî ;”¢ÒH¯c€b7ìàxÔÅ›¡øRhŽU³^/:x—MRƒà;í})Ñ磫#f!øÆÂÖÆü<ê CX‚ŸßNy‚Ä¢Ûò ÙÍñc‘Eñ£>æÐ®SöâöHÆÄT1SÌ—ªo­\6½€ãwcÎæ›à‹ÛÚtþ¸¹JÝF?¬7C?Þq†uÆmF\k„M郔5¤·¤÷¤“õ®í.<Å5×Õí"÷@[Áò‚þ²U‚.i„›$wì0ÇEe”&îB°A5•Z]ˆSÓ#6%@}B[Âòö‚ c$%!?¡< ðq—t‰‹Yb‘H4qÏd‚˜˜’žŸ^žN„tø8ýËtlwe¹Š\„*¸¹¾paWºöÿÍŠÉéÏu‰Ûq¢6'‡½|(¥ ¿ ¼€Ú4ðç‚à‚p.¯àx`oú°:m˜<#°7p<@Š#5âÈl €à%ø“ôw ¿(½!ýV"DÒ™JM·™vš46iŒ&EudGL·ÊäßɤX®•çÈ$IΑ±F†¹[¾Uþ¾ü’ü¦ü_òÿʺl´r’Œßz“Bÿ—Ln“”ŸOË\ ¹r©LÍ?Ëð¾ OÈ?“ñAeh–—ʸŽ5 :9YÆÿ%ÃÏdø~,—+Gä2ðÍÜNµU¾Žµ ‚ìñ¿É–ñÛ2<$?%ÿ@&»eÏnÞ)“!_Ú£^†/eø‹ÚéÏe8-Ã.ù ü$C(jåòT¹U&y2¤È`”aéˆ ŸÊðÞ‘A}M†§e8,mw³ Ëe˜'C½ dðÉ*ƒA†+2|"Ãïe X¼:î‘a‹ +eèaš A¹JÆi2˜d =|¦öpNÚþq–a/ƒ½]Æm*t… 28ee(ýZ†K2| û2¼"ó2’6߯6_/·É¸LEÇ¡¢ó¥ŠÎTtbè?¬¢»Š~»Š~XvƒKÜ!o‘Ègä ò¨¬A”èì%ƒX›^@L$G1%ö'î¦Ï-$D!!¦'¶›Cì0 SÞ;®“ÿ¦.þÍw ]UÙ;¾ü›§ì}W¡æ_ÿu.c–S_.Ñó=Pa|J1k<öš"Ê|Ælòo&â’\õvÜ„ô?{Qß^Dh†9(­!þ¿>üÜàТÑløâÃè‚7GÌ.ƒh0IÚ“Ió÷—þ®1™´’ ¤ä4Ó—o’-ÙKƒ%eå%ò’ì+[©Ù¿µjó¸òñ5“S+'”$‘•WH*©¨L\[³tãx²E}Ÿ yÄ|ah©â‘  Ì?Ý©›ðì7ÐÜ0>‹9Ì6²³r#X2£ ËZЂvu,D%¨©Ò` ¯ˆ0?PèÝöBö­y·½ï÷ê^÷»l7•ùqØ/»×v:ºñûiò¼­WT}ÖƒOâÕ7±\©ŸÆ·ó+yRϵqË92I7K‡'kgk1Ò‰ØÁ‰ޏ±Œ1Nꫨº.èΈçD,‰n‹±ˆ<ÄŸ@Ñy§=övËwBï´ÿáöÐ;}kèÓŒŸÏJâ“´È)É*á)~?]Aô£—oÝøÖ×¢.ƒq'×Ú½­î«àQùGÝŽåó‡SìÝ* =Šõ: b5x‡‘á]Ö뵡ëã#¦µã"/råHƒ2ýaü,¦ÂÔ-ÇûµßÓâuÚmZ\«£]¢%¹L[Çýà46M¦æ˜æ”æ=͇-Õ ‰*  ˆ”œ’(f[D}¨’;¯+òÿtö,ÀMYv÷Œ~-Û’€íÌÇ6’%[æc',ħ˜#‰ ¶Ä/‹’l‹Ø’£›ƒ»1›BLK6¨Z*‹‰ 0—Mâ½K…ÚÜÝBåHîS{ÁÉæ¨pw[&)“º±}¯[cCËÝ­T=ýæõ{¯_¿îéžžé×3dÆgÍø¨0c¸ÙQÍx“7˜±ÇŒ˜«Í!s¯YäÄòŠÕ5²gòmDÝÉ”cfQ4ÏádœèLÅÒNœ!Õ Ãä™es¹Ý,8:ÕšY£êD 6Ô±[ùäv6þFÇ–¼m·¯;›ÓfãÃ7ßâ¯qêáVÅBÌVRáYYåä'c/ •c[È[»…y{vû/{¸Í Ç×§á>©m¾€Šá.ÆÎ\6Ì.6¥ÖdÚåónXLPCÂe˜Jšä›N)&‹T+]•F$Ñ @L$)«ô¦}fæÍ,4ùÞœ½„å £+*Æ\®¿çO§¹-LŸ|-ž¾`_öÌ6Î* 9Y|!|[ ½qCm^ÅöùÞùµ–ôîÜ•¿xÕ‚«ç..ëÿ§¶-8\ѰÌmÔîipáPë;~ºwüàÒµ•y¤‹äU®u¿TÝúHÉŽä¼®æú̇ÂHê=™œ×YnŠ¥&]‡¶²Õ%_x&¡Ó6¦"Æ~#ѳ‹Œ^£˜fÔãõóˆŸ$B'¹FHÜÅ=ÁVò2í§¿¦‚Ÿb­¢d:]GwÓo¨¨§øƒo(¾ÆðÓé ß§xÝôÂ"ŠK€ú½NE3Å/áûôcJNS|Œâƒ÷P¬Rì§M”,gî7 (É X¤x”‹|^¡äUzŽ’ý÷RÜIñfŠ(æ/æPœÍ‰¿‚¹ée:LÉ{¥ JPÜNqÚ6Å™”‰Å‘Ïé(%—©çä~–¾G…nºP Žn¢f¸2—I ä>¬åž`ù…¨ sàcTWF=<_ÄRAؾ$ÃZM(›)ª†™¦Ç€Uhg‰,s&@Ç3¢ø,ÅK襺+ôsJÞâRÆt±P'%HxPX)ü9›£ÅäjÄŠŒ*CðÛ|o€ïeßÙ‰ïî§YSÑŸäÛÉ@UÁ¹ÖG¯±æÜ¸19Å„Ù2¯)˜ÞûìC|¿ö!©$5BÕX€I¶Á:+>,Ff˜ó:þÁŒw™ñoEü¬ˆMø„>ÙÉý3Á•äxÒô±/6< C¾î _Ï}¨YïW‘ôÉû¡æC=‹/¨!G^_‹¿ˆ“Mã x`?oØÏòÝ×w \ßTî)0”uùCª¯¼Üß)þw¶Í]<ßcÏα¹KŠÜöÜ[7²ç/-¶-cÏüyKí¹øô^‹”–¶¼öÔ®×›KJš_ûµnGJIÓÀΧžp8¶ tíh*ùvnpçcò¬Çvnnì®-,¬í&±¹‡!z= ÑÃ×H ¬+xaÿW–%7‘”üžÕÅøÛ‡&¿¹Äž†ÀlüïûØÑÀgX:þzh’Jû:ÙíßZòŸ¨ZçG"„㺋üÈAª ÙøÑEù· é.NŒÁùr=Ãb–a¾ˆvë“8zEÄÓØ( ª®þ· vÝq€õU(Àò\3‡ý>Äè˜ÉÖpAXÍÎ!Ÿg!~žñÄß!‡8€Â<(¨…ÑÿÛ ¯Îï:›@‡VàéÞ /“‘ø Àgºû`†¦SÀ,¯^ Yɾ8ñÃ^d"ÿs€|4 ? r*'¨øK™Lµ‚d/•‰OY9 ùhØØŽ>ÁËñ°°DX"êÅNñ†nµA5ÊÆ¨ñSékZmþ:%”ŠR;SšvÍrÀJ­vëþô¯2\Ç3F§=•9'óùÌ+Y$+š½${{NeÎǹ›rMO›þÜŒgg\™™7óý¼Çó^ͯÉW ª ¾–{äòY½³~Y¨/¬›ýÀìçdÎ}}Þ¢yƒE«‹¾(^Z|¸d£íc¸0ÿÌ~°ÔUzÌqÍYè|ÄÙéüÀùE™«Þ'ë‡Ù"Y÷®ã&3Ë+œCM¼®&ë_nK†¹ý˜Ä˜&—Ñ´jõÕr €NŒ›ÕÛdvÜaã­\Ÿ e(K ÒOËhç– Ý!ýÿ«³ã¶lë=rºmS>F'ï#‹ÐAtß&Ï;˜íÆ%ñã,zžÇCcøÔFc˜ÖÞÂò-|³®XúÊ[,}é/ÝðڤƑ®b©ié95¢3ÿÛçÒï>óJ–ϰç3o¶ôé°Wº4|uxdXð W,ò{s¥ýÁUß'?|W±àû­0!Y>’>"üàù w¦÷Ò_ã·‡–H¿ª›'ýòbiâ®lìøB¤Á —W:ï>_{>v¾ëü‘ó§ÎÚO=8-XNã}oâÄ›Øò&6Zθόœºû$‘J\NÎSîSäèÉÄI2tòòIâp#¯á¡—OÚþ¾~âìõ¿Û?Ñ/zeŽT÷ ŽÄïĽùÒOäH]úLÊ^ð¼@º_Àí}Ý}d_ê»ÜGjŸk|.öœðcï„tdîÝY.©Š[R ±è)ê](ÍÀ¹¾é¹>C…àÓC™7AZ#„ǽåÒ†õ5Òzˆ§¹2|:°‰è|1[·@FVM¬"žU +½žUs‹½—< ux…W–j@æÃNyñUt{q¶+Ë—Ž->«Ëâ#ù0Â’dq[-]ÑbqZj-1KŸåªeÂbpnÄ"ÄîÎÆ:<ˆ÷½ÑPo³­4L¬^™0ÔmHàgsëÙѳj}BÿLùÖoXûÆÏ¯Ûµw/Zž¿2áª_›Ø”¿ne"€‡ÝXóßÈFËשŠÚ‘œ·%¤ÚlŠÂ æç¥Íê0‡°Md STNÔ¤Ø+ ŒN*à¼`EahÅ–@ðF5)ZQ€^~%w#´ëÿgH!ò endstream endobj 101 0 obj 21551 endobj 102 0 obj <> endobj 103 0 obj <> stream xœ]”ÍŽ›@„ï<ÇÍaó^ɲäµ×’ùQ¼y c)„Ùƒß>S]DÊÁVMÓ=óu1t±;îC¿ßæ±=Å%¿ôC7Çûø1·1?Çk?dÆæ]ß.º’ÿöÖLY‘jOûoÇá2®×Yñ==»/ó#Úvã9~ÊŠ¯sç~¸æO?v§´>}LÓ¯x‹Ã’—Ùf“wñ’öùÜL_š[,¤êùØ¥ÇýòxN%ÿÞSÌ­¬ QÚ±‹÷©iãÜ ×˜­Ër“¯‡M‡î¿g«š%çKû³™SªI©eéÍ&i+:”ÐŽÚB{êtm%§bÜA×¢«ôŠº‚~]{è-u ýÊ9wǸœµg<@¿1.9jÄMÉœhòW{hòWoÐä¯ÁiÈ_ӀߖF4ùkpò×'¿“Zò[Ù“ü½ò{9—üvM~ ù=|3äwèÑ’? /«þ¿B“ßIœün ­þ£wKÿ+xhÉï%N~~«ü'fKþ œVý›%¿—ò[ôeÉ$®ü¨uäwðÄ‘ßÁCG~ù=Þ‘#¿³#¿—}ÈïÀà”_òÉ_K\ý‡ŸŽüVâê?úuäw`vê¿ðßÊžä·ðÖ«ÿÈñÊ6Oþù^ùÑ£'¿ƒWÿñ¾<ù+ôëkÞ+ôåWÔàñê?Þ£'³Èo¥Vïä¨ÿ’£÷_âzÿ±gP~pò[ðý~Eë÷+ùz°O @/Aý—|úŸ®††NŒÌ·?c)o?æ9$‚2‹0…ú!þ“Ó8¡J~¿ÔÀ7€ endstream endobj 104 0 obj <> endobj 105 0 obj <> stream xœåY{x[Å•?sòC²–-[Rì{•ë·lÉ–â$Nìèú!ÅŽI,ÇV*'¸±bɱClKN„Ú´´ &iB7P | í–6¤M#‡R „$P>¶Û–†ýh?v i¡”¶„Ð-´»-‘÷Ì•œM»Ý~ûßêzî=sæÌ™3¿sæÌÜëøÄd40 ,ȃ£¡q¹²Ô? ¹ƒ;ââìè Ò瘡ñ­£îWßàd€ ~ëö]CÏï=°@Ý ùæp$þ¼úæ*€‚PÇÒad>`ë·Š‘| m:Š<‚ýiTÑ:Ãr¼*#3+[­ÉÑêô†\øÿõãÅp;ï…|X§Ü¯ùq+ vÌ¿KkWîÉOÌÿáÿÒŠLåN̤ ~ ¯^#|Þ‡ÿ„gá8¼ ç®–&åD ÞG™·àx ¾w}­¨OCJò_àuø%¼¯+—„¯â˜?ƒ½äNø9D6BŒäÁ«(}ŒXáKý“ÜÃÜw‰¼EÞƒãd%©cîcƈ~ÎÜq­®äÌ¿‡šÞ#ñþ+r?µœ¿ƒ5C‚Y{˜G˜üm`ö3£0?$+püM0_L+ˆÁí3¯ > ‡!r-}¥aÖÎÿ¾gáûðïðiØ÷ÁÃÌg÷ü8þE´3É'Ùé.§úªeÇ™SLæ¥à¼Öâ†0y ^!br­; ÷ÂK°‹äAn–T Þ@|Fá+°¾Ã1øWÒ‹ëçA8DÚˆw¾§–aámþËü§q}= #ÐÆdo_0ÐÛ³¾Ûßµní k:ÚWû¼m­-ͲgUSãÊ Ë—-­¯«u:jª+ÊËJK¤Å6¡0Ï ×isÔÙY™*žcÕ^É7 &Ê\™ÔÞ^CëR¡« Y¾keâ€"&^+)£äÐÇ$唤|Y’èÅFh¬©½’˜x±MçÈÆî ÒûÛ¤>1qA¡×*4W¦Tr°b³aÑ[8Ü&&È€èMøv ÏxÚP߬:»Ujd×TÃl¶I5R‰ iQ^E‚©ð®˜e 3‡›`K½¡pÂßô¶Ym¶¾šêŽ„VjSš UQ™Pµ&2•â5îg«ÏÎì›ÓÖ»&,…C7lûΰޙ™= ƒ=Q)µ%*o}«gITKmÞ„jí\yœÎ+C’_ª—Ä™§#]x÷ZN(ÍQ•ê?JúÞ™Ÿ$úffBsóÓ[$Q/ÍÌj43ã^DüAì57ÿÔÝÖ„o__B?0LV¤'ë[ß™0vo &˜RŸ8Bþy$Ûr«Íз ãÿKÍ€@ ˆ©ÍF'~÷œ [°’˜î¦ê"l±žÙiïK0´åìBK~€¶L/´\î> ¡7;{‚3 ®´#,yã»C‰é-OÛ¨+$}Bû{«MšÉ5ˆ Î>EVD«:Â#b‚/CX°×Õ0Rh—½RÑþ>õ¸`ÅÊ ¹bƒ„j¨¯äHÿí.DbMu¢Ýžr}o0!·!!‡Ò>òÎÖ:±Gh]4Ò¦¸/á”ÆyRËeR³¼#=A¥Kº["¯5ƒé^ §·Ž,zgÚR&P]RwðIpÏŸŸ]"ZsÃèk£Â¦VŒ«2ïL0<”¬a\iCbÐjKÈ}èà>)飆UžÇálʈ ¦µ7ØÙ#uvo .O’j ê¸RïÇÔHAkJ †\"³4S 2V¶õÈ}HH-xOd”fbÑ#à —†jK£Äü½ f$*Eo¤--Gë×(åi8µ¶/hSÑ*êim·Úúl©_M5ƒÍbz`ì‘IAm_hbK1 A5 ‹bYHc^ J©O²?HçFáQPNƒ¡`žöUï5µ«ÀB˜À†Í  fÂg·^ nbµR¿\mÿXsÇB³8“)uöÌPåRZ!îR¥  !,/7X•ÕO׳ä á"Æ­¬ç™YY¦ky˜.Û©#<#õiÌ ·[o¥cåB'éìm©©ÆdÖ2+‘½Ý³2ÙÛ³1ø¤Ïc{{ƒ'´´ôÍ–`[ðI@V¸ åR&­ˆ´B5­ÇJ¦"o}R˜VZ9…¡Ôç(¼ÌÁ9&ÅÓ/ðäq)ž¬ðè½T8ŒcþöŠaêŸÝ}Ã3}4ÆÁ„ˆàIi¢#­š%ŒJ“È–"- µÔBùÊ÷¤ø*ÊÏÀÈ &RS}ëŒÞ+}XXC·FÚðæx’ÎÇ,gãÉ ÎqÁ5«â_k<É2Hn‘ÍSöÉ •󣯓„òÝ›¡Ôf°µ1b²„ÜŸæüF÷"ÝréÉ€FZ»²žçø9b•õ*ÈS¯" YÏr„c)³Š!y aU&§WΧbE†èмGUPPQS©Tàìw;ûûݹ MN·›bUÿúŸÝÃÙõD¹?¯< í{ìÏ×Õ $?‹äG8ö£3l3Ѳç­äÓÉSo*Çøòüï85ß Ü(¯´ŠYšöŒ qÊxÄÈ6U¶Og¦™ƒ ‹—G˜Žl—°Yˆ ¬ óš²ˆŸáT£ÛíÔ_py.gÿÍH÷c%·Áy³ÛYW v"Õ»V¾ÍW̸]K—åkYi±ƒ«'í_÷;’S¼mu³<í)íX»Á½aw ~Q»û4±$ß>}é½’· ÍyJ¥Éâ‹\mk{+©í/à9¸[‡¶×?ÆYˆynþ¼lÂèõÙ‚`3eù²MìúEz½.+<Ï7q*6R6õ‘k™|ôáSn+f Ü«X·ËTÀ58·®ê Ø“ïhô¹*¢Si5j–Ëoè¯[¾½ŠõgªÛ& &×0Ï,o]_hZÖ´jQò”ñ´mþ]îA´«#ëf¹Ví´:íN–/"|Éf, S'úÔBÛTÛ6¶­ÍÇ›V4®Öó"_˳üÒ¹ù³ržÞؾTmÂËcè^¤/õøkÀ8·7"ý‹vú‚ÛyÁ€3êw_pã”úûûI?¿ØÁÔ/YÅxH=ΊN0£T™U~ úòeå’–5fhÙü<“ÛµŠ©'O¬»mƒC øF~Ù²ÅÂ’²B>ùª¦iô+Ñï¿’a”‰Å把šâm‘lÕ¢æîð‡Ÿ«Y×`kZ¹´weqž½çÖuŸé.%ܲ•]®|­´²F»zrƒó…³É[Ê+óU÷«²UÜpÄÕµ¬ˆÉbˆZjmXÛéèÜâ¦~C¼ˆ—käê‘b2b!z«U·hÑbÓeTŒþìÍz‚žÕËV¿•±ZñMAú=J°Q4 Œ¼ 0¸]ÅLO=­Ê×ÓÀãµ,3~dzӲïÎgoùÇÚä/4Á›‡êßžC,Ù«w}3Ïÿ…wïyùž–‡î¼AÛ3øÔlr&Îé¼kÄCóEíA{‹¡‚rîP9ZL†4Äl±è}—’RêAA­m/-µ—VÓ 0¼Ùl2t—”˜„îl½)e;u%ú¯ÁIm§iÇGÚükì/"¶ôªAãYêQ›ƒe&&Ÿ›YÛwèÌÐôÓ»/-šnlZ3‘G²rWÇ¿³w{*òC®¼©;Ï»ÿ'ÿø3+ú~cOfÛd ÎÓRàþD;[ä ûš·´ØàÏò•ЬÇ¥ä+PåŠÏa¾bx&•¯8>ãYn!a©x†aEŽè0¡Dᜀ3øŽ…ïòÎ~ÍW—ÓÕóú¹ô)_-«Ï"õÄaåÎrìíoÒט·’»’§q>Ä}ß‹YX"Hm¶®èq#ªÅÔÄðìÜüK²y¬3õ1ÁˆkuÙ•õa¯«- nÒÇÖ¿õѹ<þüÅԜ՘CžÃ·éR¸_ÜEî"v!Ä„mâRËËç,÷Y8Ë]æÌLÐ|‹™i0³ÊœCrvh>§¹OÃF4Dc4ªDV»´„”àŸ ´¼AGì:¢ÓŠF‹Ñl.-Ñiu9‚¯ñ—Ë…¹ÒÝàlp0#¹ûû1õã#· Á€w?½§HÔÕÚ$¶¬¼¬\•¡%¬ÄºÅ$é²Ud™‘’¦‚%K‘ä¸èUÁ E}èwO¼Õ£Êáx^qϳûTjŽã´›~N^YbÑeei5B²†[qé˵;WŒ†Ê<òB²!¯Ü`ÌmŒ¹™Íã;—Ûë,ÈV¹<#ƒãsðÕÞÇoFsÙ©eéÇ--»G þLp~gG”²¤·§‹æ§ºÚRLýõ¸QÖÛJëmù¬…„þô'rwòufeò—Ä|úôiæôéïž;§ìÇ!ôs3Ž]K¡I–nR“°àé‘„åÎÕ¢¶VËh¨òõ.?Ÿe¢¨zÜèßBH§C\&õ’×þU¹À½¤lIY=æü2R÷Ñg~AãmÚÂÿ¬°æIÈÆ ´7P‹tz£Ó™‰áU|Zˆ'£C˜ó›yIAžÚîûS[¿²ÎR»½Añt rSA~jŸÅ,–ÏìO¾3ÃJŸüêC4z´¯Xƒyàiv÷Gwânß³jwØ“›=—©¶8[«N§Ö茇F\£¢fR V1çø¦44ŒFS ¾s‘(dZ´\2«Ö™òò5€'WjÏ·÷§pSB‚¤6AÜð ÊQ¤àê1‡óªškì7,‰™°,I~@x–å—þät—DŒg¤³ª¦'æeÚ>š[ÜÙZŸ£©—eÓmãrôþ s"eï•µÓ Ûèʹ²p®¬\3pÕš!Ê©Ž.˜¯—«× ®Î𮑻°ó0–t`[dK˜*XÛ€­Ò­ÐmÓ±œ–hõëј9’![tÚ<2€euº¬¢¾VÏèõ‹ Ø.cÓ2› À´™guäÒ4•ÚžhÜ)¾EÛ0EíIåiBCÐF$êi‘ËÏÃ=)‹\ŽBv*ùúñä¿‘÷H&QU­j"ýÉ{¤–Ъ£‰;oaØK—xïž[s˦æÜKO³º}vcrï ‚Ý.ôµŸë‚•p«\©ZA²lf³´ÀW°¡€U1¤ª½²Òkòó›\ku{vöÃBB`:‹Åè~Á•Ï;ý%ãUD¨rV1UU%z½Ÿ×«E5£Vó¸ç*Ó;>ðEƒPú…×VjiiåËŠY%Vèñãd!…d8Xzœ áSÌrþæÝߎmýÚí½ùÐT­ê©¯íiZ\ˆ5·Ý9,7Æ¿ ÞK·þ¿2Jê}UápeçÖ¦Î{nö’Æu»?á,öŽu—Ö,/ÎV[ëJ«ê„®ª=X»+Pc[=¶ÎRî.V»K«‹òuz{çå9á‹¿]V”»Y×ø!©ï³ÿ4ñÌá+_ ÁàŠ&‰q’þJ¿-^zàêO«û–É0ï}o‰À—ñ\½ Æ Œtî; „í{0SìAú.Ø¥ÈWçà5RAÎ2…ÌÌ™$;Ã~[‚×§¸—ø ~#ÿ‚jƒ2мi;Ѓ6°¶wqÚºˆl¸l‹|Ù.‚q-§i8èJÓ,žõ{Ò4y0‘¦yÌ©ŸKÓ*ñ i:n…GÒt&ä!Mg–¸Ó´mh¾üßéOÓ90EîNÓZ°3ÙÔb. kÓL}š&PÌ<ž¦Èd^NÓ,¬b^MÓT°æ4ÍC!Ûœ¦UPÆö¥é ø€JÓ™PÁÅÒt,â§i5,çžHÓ¸‘»˜¦s Éw¦i-lPu´l‰Ü ‹áP<$>*ºjk—‰Í±ÁÈX82!¶F'Æ£¡øHtÌ!6oß.NŒlŽÇĉH,2±#vÜ0²%’j×FÇ¢-ÑíáËkĵдùz¼ ‘‰eÔ9j]WÚisÍǺŒÄÄŸ…#£¡‰›Äè¸moūŎ±A¶u$L sdL 8z¢?ŒÅÅÐXXì½Ü±khhd0¢0#ñ GãÃhô¶É‰‘XxdŽs\ˆžxdGD\ŠÇ#±èØp<>¾Âéܹs§#”DYÇ`tÔù×Úâ»Æ#áHldëÎÝ1݈Eè|âÃ8Ç«f<EãcÑ¡øÎÐD„Î?6¹e[d0.Æ£(·ã<ưkhëD$2Jg:©X¼sxdpXÜCƒƒ‘ñ8"BÅÿ’fÇ_3vûåNŠ¥øª:[±Ä±ÜŠK?Œ¯ca\úq,"<ŠÅµx-Cªb0ˆ2©$1œV<òOÀ¸r):¢ØêPd·ã%"Ÿêƶ˜R‹à“öÝ¡Œå€°}‹Â¹Ò_„µÊ3 -X¶£ÜŸ\ƒå¯÷/÷þ[å6(2±Ëuh_-Îÿzýz×ü£Œ(ó¦XÆ•jÿ(>'à&äEaïëÓ¸·+=«‘êÀ¾ƒ ޱ­Š–¸¢;%9¢è D"åWzR|âÊhcŠTïuF쇰?EóŠä ¢›ú<¥9Šôpém¸L(„•~ s‹áÈkDô(ÖíPÆ\«ðãJ$жa¥6ŽÇ'^;•Ë2×jLëu(Ô(Jþ½ý⸕+8F_oEٔߊÎQôf@‰ÒÿP,R~¼¾‡”'E>¦ôˆ£%!ÅW þ!†[Ɉ‚ÕMë¥2ÛÓþKB›hoê·ŸN^…ñNÅžA¼‹8—(¶Ñ>ƒŠŽqÙðUÚÿ·6;þnd·_g¤+˜*û¸òKJð"\ç'[ô—Èo}Âû¾yÁs1z‘ézwó»Œó7žß0O;4‘ªo~Ýô«À“¤ŠTžlħI%=4Ê'ȯޱãïz$4¿“¥ñ%~I¦Þ>ðö‘·Ùs¿ ò/ÄßÅ·È©ÞÔ o’ŸŸ·?;_!¼Ñôzà§MlàÄëä5v^¸ø“ùŸ0G^>ñ2óÏßkäï-¾ç¿käï }sÄvò¹FaŽˆrÖÙFAw† œA•*¹èt…àpüüñ÷sò)>©7úžœ?KŠä|Î÷cØ|làØùcïãu  ™åpË,'H¹\ÂÁQýQñèøQîá‡*ÿ‘#Ì— âCþ‡˜éÿ˜­mÖ’¶üXX4OBا”û "ÉEDÿàôƒd>@îÿb…0ðE½ïÜ}oÜǼL7[ ýVÔ…÷), Ô*õ3Ê}ïîKJ]—–:Aô²‰ÕÝë¹—Ñ"ºCÎCžCS‡ŽºxH5Grå¢}åÂ?|¡\8ˆÏ‹û‰nŸ°¡7ç¾#û8Ý)b@Ä À`0dÏèr}]{ÈæO£«,²qgµ°#V!LÆÌBKÌŸ+<ƒo}&Ì»)$¦“ÕÂÔ¬Àr ‹óÎ?i^„ÞÏ“k}Õ¸Ï%D±ŒaZHaÀì. d¸Ù€ £gËæ!„eËf¿YŠdÃ4É~œù¤¯Dèš#FÙLnô™…M]ÂFŸE0ºr@\tÝfÝ”ŽÓ霺.]Tw@÷†n^—áAÞE‚gðiἃ³½=v{ç\ÆüúÎD–S‚ìM”öлܽ1¡Ú›€ÀÆMÁYB>ß÷Ùýû¡¥¨3áê &Šú:a$dJL#¡/š5AK_,‹OÚ•‰Ûíq{ ïv°ÇVLáSRôB]i‚T5ÃfÔC™ñX,ONNÊ •IlC i”¤ªSrXb›ì »cj¡š*TØ´F[ìŠ&Ú_ bT*Vøß‡K¸ endstream endobj 106 0 obj 6259 endobj 107 0 obj <> endobj 108 0 obj <> stream xœ]‘Moƒ0 †ïüŠ»CEý”RG‹ÄaÛ€Ät‘FˆBzàß/Ž»MÚô8~_DZӪ97FûôÕM²Ïm”ƒyº9 ¬‡«6‰È˜ÒÒߣø—cg“4xÛeö06f˜Š"IßBnöna«“šzxHÒ§Àise«ª q{³ö F0žñ¤,™‚!Ôyêìs7B]ëF…´öË:Xþï‹–ÅXP+rR0ÛN‚ëÌ’‚ó’u]&`Ô¿œ8¥ägç‚T)çyUÎ"ï7È9q†¼‰¼È[âyG¼EÞS ò!rV#©ÎùDú#ò#q¼«"=G>GÞÄó ivÈ5ÕÁ»§sìYPÿ[ìSÜûÏãÃï/ÄàŽ~FËä͹0Ö¸È8Oœ¤6ð»k;YtÅïл•X endstream endobj 109 0 obj <> endobj 110 0 obj <> stream xœåY}P[Wv?÷>} ¤'!„@À{B > ÆÆH$„Á±ørÀ6F„Á$#$©ÙÝø Æñfãn:ÙÎ&ÛÆIagÇ8_¦»™Ùíìî$mÓvgâ4nšîn;N;Én'»†ž÷$ü‘º;m§ÿõI÷¾sÎ=÷Üs÷œûî“âÓ{³À€gx2-H7êà§D?<ç_ˆkj¾@7FwL–¸Þÿ@²@.Ý1±ôÑÏ~w @íH{w,Ù­~¾ ÀÄ¢Ú1,ß¾*CÞ|áØd|ßQITà'ψ ‡®é2?Š|Îdh_ô)‰“Aþ9äù©ÐdXzɇm¦·éÑH,ÞCÌ·±é=¡=:Ž~t£a’ŸH{PFð#\iHÊž2©L®PªÔðÿò’þTúSxLê…LŠõ}—d `/Àò »[/=üë…"y{Þ„ ðø1$`¾ß‚pþž‡Å»þ®Â_À‹pÞ€oÃIøÚçåÅõ½‚…‹ð4œƒÁ,êEPë(|þ‚D{¯Ãvò&a ûÑöŽÌK~¸ÔŸPü(áb§OÑ)ôâÁ×YøS˜Àú2L$ôßà,Ý SôyÆ Çp†AÚA£ðCfž#[a;fØ8úHÝgËÆl€#ðR{îm‘~}Q/ß@¤ž„óØ{7l….lš…,àh'gó}±Ã<_é+{‰Ò7¨âöyx?ñ3‚ñZ[zÓÂK¼pfé×ÏI½·¶ü©ôiz=çöÄà1y Ù‰¨>; Fk¡~ò78‡©Àãíïëíéîê lzhcGû†6«ÏÛÒÜ´Þãn\×°vMýêºÚšªJ§£¢¼¤ØVTh-°p&ƒŽÕjÒÕ*¥B.“JJ Ükõù„-˜Ø¬~…À[C(Ý#&xùî×IðAQ¿_Óƒš£_Ñô$5=w4 Ë7@CE9ïµò‰ŸµXù²¥³é“-Ö~>qS¤7Š´Ä&2éÈX,؃÷šÆZø òÞ„oflÎlA{ójU³µ9¬ª(‡y•I5R‰ktž”4‘ %Þ5ów1aØSä $}Þ³ÅÒ_QÞ–ÐX[Ä&hM&dÍ ¹h’\‡ãü|ùâ܉†‚ö´ëHh[_‚ aß9Æ;7w$¡³'J­-‰Ò›pæáD¹µÅ›° VÛ»îŒÓ~wH’±V~î ÀéXoÞ¸_JIdEì >„wnÎgå}sÁ¹ÐÂòì•g­sóiisQ/" >ìµ°üÚqsÂw¢?ÁÇÈšÔd}]퉌έ} ZäãÇB(Á¯ÛjYm¶èúWtÿU3 bj±?¾à!d³}Iž‡!óEð8íý ZWZ2{…–Ù•–;݃V\Íöî¾¹„¤¨mÄêEŒ‡³CO;…¥°² ͯÍëœ^Ç×;ûE]½jçR‚½î퀑"t™cEFóëäí¦°éô|½Ív¼Vo0õ3¡¾¢<á·'—¾§/áiAÂJ­‘w¾Ò‰=BA\¢ñqùNk4a°6ÝYOÁ-ïxwŸØ%Õ-ahN@p8Õ+áô¶#óÞ¹`KÒÁ–µ³ï ¸–¯Ï¯âÍ—\° ú[ec3Æ•Í;×72šà‚æÌ´Q¾ÏlIxúqû­}á~!СÒë8œE1A›{úÚ»­í[úV§I6æ$EÞ¯˜±ö™“f0äŠ"ßGÍL?*²(à}HX›°NÈ‹XX\” ¡ÚÔÀ÷3¬h£‰RÞnIé ü}F¥B85ûW¬Éí4ûÍ–~Kòª(§ØÌ§Æ TÿJS„;Ê(šE–&!æù>kØÚoãž@Ÿ07å"橵깻,„ ,ؼÂ`&|vó½à&ZEþëÿJsÛJ3?§°¶wÏ Æ­)ƒ€ž·%@aÏjYÌ~!Ÿ­¾&1f´˜ÏsóËcBÚÎYÛFæ¬Ý} ¢6î ™cé¡´÷4U”ãfÖ4o%G;ç=äh÷–¾+xæãöô]¤„6›úç ±­ï Ï QJ© ^`K]È(D}ó>ÛÄV‰(ùá¢L±"#0¼@“2vEFQ&IÊ<¢L¸p•Lcˆ1îß^~DXŸGûÇæ‚ýBŒƒÁ/Ik#¢cmœ'T––PYÃM µµI»¹;)— r9F1’Šòs¬×ú…©B|ôC V#Ò^kÈ}Zzfm€1&q»‰È¹]n=†—KWÐ hNÄkmI«×¯ýÏx!X‹+Ù7-D#`š àÁ¡€P[5ŒÜÚÈ`¢!Œr™ÜÕH\ÕÆLƒ\D›UˆÉ»q+i®[Zz3~>JÓÓ”ôÏU:+ÿâÕ.iºOó-oìyúÿZ­jšô›TJnM—Ë=Þ³ž,}¼ô‹ÍC9u‹DioðKn.õçÕs²Æ/¼<0[*Û7Y±ã…G]› ›·Õ™£ß÷Õ6Ä¿óx-tÀ+P½|ÝãWký´Z_MwåÌJ¥ÎŸßT j…zR_ïj-(kµÛmhÝd$FmWæ,cÊÊò‹•Mùù•l:Ó äl§<™·ÕÕnÌ\VHÖTòêEAµÀÔ×WU [SQu-FIE–5c˜ºnz¥b!“8™œ‘a8!\n‚ñ(8æK-§1Z½¶‡Û*³õŒìÛpèÊÌñÓ/ôÞH“J·m«îiªÒ]Éj}g׋/H¥[”…·Ò}d¸Q¥¿Z7=ܦ•¶E$LT¡èèÐZt«zÖòN–Vî:öG$k³Ë ½~mq³KçÙõýè7²*s–vK™]æÆkú%D[¹µ#×ÐèŸ)QÄt1-…sžî™Üùt&ëpÝŸv,ÚäÄÆlÉ’×É©ª(§¨¬ˆÉkåó+ói~~&â¬fÕT­¶g¶:K”°%´òؼ`^4o6o1ïÝX`G˜ $]c6kH—¦]Ë´,ËjY-1³E$] |3µ­Ìä6•U›ÔM}îPÎ;‡€#©h…6qL.KFíù3V\ý—É•m³‰þöˆ:§²©xmt …=ðêóòtµâ‚ ŸKLËk;+—Ÿ —×”T¯/f+zë¼}’é.ho®”KËë×§öÊs[o;ÅçLáz{%íÐsž ï z¨ÄmpÓèšÙ5tá±BêäÉ.Ž(ó³ó鸙Ï!rH©‚8üÏV¼Rqµ‚©ðà]±Þw&‹ f6‹Ï¢YY-ê6UÏ’U'uÎ8ˆ£„ej! Þ¾é~{ψÃÍ¿MÆÂÀÍ÷ì÷ Vb¢¸.ŸŸa"Åæîá@^+”L…¬|&ÓÀüFÛõµ—Æ·Ÿ]-yž–xë׌j•ŒcӮƺ]=«dšû¾;²éñ`í÷HAC—ã‹|¦Ø\½z&ˆÑÖq ×anÜÑÁÕ­/PëJ×WêÒ‹]…y:­µfÓZ3·!°ç¹‡½†ŠÕ–´o±šB'Ÿ­Õ­y¸É,îÉ™ô*žIu節[ý Kºàí:Ö Ó±„0J]¶®TÇètŒrë™LÂfò™Ÿe2™™<Í61&†Ù.‘ðTÇb‘°„F³É™l’ ¦A)#at ¬œ'«…ãÕ£¸a˜p»¾s¬|L|¸%Cj·¸‹àÆ}$u¦»…±â!Ò">Ép&Œf¥„± ÂLÏÒ§Ñ«DF>úËŸ)ÓÜcOl'¹kºôë¥Ï¶S÷¾îJê¾ýçRïÓÇŠ+ÙÑ¡½ý"ó39íÂRYIó!Ž~Ž,á¹€ƒ½—6"ž·ÝB~¾.O9@òCóé"íTf 2‹…òZ£Ÿ²º¨nVÀÅ’H`y2-IåÛ%ž‰ˆKÈ’»ÇgñÐ#ÎT‡sfG报ΒŠ,¹ƒ2HK,rzöò«——¾4™ÔжçO¦ó6¼†\]ëCþŒ¦Ñ UZJ>13/ý®?ÙáÓ[Ë™Bò#“2†ÚííªSbž`‘æ?ÿÁßyµ _—üíöGÓo>s÷×IÌ$ aƒ€d~ì…Ûçïùesä+¿6Sz„w›zˆ“4Ømx‚Œâ®4…ÄÊáÇd¹A_b63×$=’÷¤3Ò—¥|Jƒ©±(nLNÀ¥`.1YxZsÉæÔ/ÿøº™ê!ÔZð¤h 2Ø”¢<óö¦h a&EKq”)Z†Þ?¢åp^NÑ |‰*NÑJе)Z>´Ýù÷ÁAÂ):’'S´ìT/x,Q"7K×¥hùôÍM!¾Ÿ¢h¢¿LÑ(gJS´LLoŠ–A3™¢åð9ó­­€Éñ­„\É¥­†Õ’wRtl“ÊSt:,I‡S´6ËB-ã;ÆããÂ#üH(â_à«++ëøõ±áðÔHxšoŽLG#Ó¡øxdÊÁ¯Ÿ˜à§ÇwŒÅcüt8žž 8:ƇÂÉv~cd*ÒMŒßé^Á¥O*†®ïÜ3=F‹9Hw<<æ7†âñp,25G×8{÷îu„RÊèëŽL:_[|4<Žï˜ÂÙ;Æâ“½±°0ŸøÎñžFÐùXd4¾74æÛ3´3<çãÔ óˆOx »†vL‡Ã“ÂL÷ˆïã÷Göð¡ááp4Žˆêÿ•eÇïsvâN'ÑShqØ%Žå„q3ౄ!õ–j|¬„:¤ÖC †Qg 5Â0’fˆà=*Ö!ÑF[¢î~x” öǰ-&ra¼ }gıøÊ0C¢än·áÁ­GðcåýËïïÏßgᢻYÔ‹ÝѪB_+‹ÙX±Pñßm\ÄAÀ6.¶s™Äû4ìBYF±îJ­ƒ_ìY.z6…)wˆVâ¢í¤æ¸h»5ºE­€ØSÀ*.Ž6%jõ<`ÄM8â¨èoøÍaѶ0—¤åÒc)ÔwÂqUc¨)ô[™[ GþïFH·èÝŒ8æFQ#Ch¹(¾Ì;ñ³Wü8Pç~ËÃ)»‘šDÍÿm¿8ìG>,¶ÇÄhJ­½C´9‰ëÙ+FíÊúX$×ñÁk<*Þäcb8z×jeýcˆá"ñ,FRv‰ÔzL¥F ¡OBoaÝVÖtÏ=ïýƚǹD°Mè3,ÚˆŠÈŽÜcýê³ãìÄFº‹©ø|‡åÏ–¬Ð¸<­Œá6ù"PÂ}î+ãþÕWÂ}æ«á¾ý鋟¾þ)óÈ­oߢ?¹E^½Eì·vÝzä#¹a¸±êFËžñß+ ŸÉ'¯~BužRâYiöyþYŸåûåÇ6î¯ãþéã|Ný1ÉûÇ|œú#âùÈgäþáº{ýúO®¿ñ\wÕú®ûLÜø–ÕHôÐK2» Ló±— 9pyörâ²dX=ªïWqÚKîK·.1Wˆ…p8ĉ»˜ÇûHº‡»à眯¸_¡ßy9ñ2]|ùÝ—©ó%÷KôÙÉâ…w/Ð+Ë×Iþ%Þêk__Bò†B±~N¬‰õV±në ¬×a¡)ò2¡&Z¨&L.ÀšÅÂc‰Í«’?zFÏ žžÑè|üùÊóôüSzîiŸc¿E„©=ȩVö*|Ó¼ÌiϽrîê9Æs.¯Êç9gĵ>—¦õiŸt>é~òà“·ž”j_ÃÃl„¤yxzö¤{¢{™ûð ©> endobj 113 0 obj <> stream xœ]‘Ïn„ Æï<Çíaƒºê¶‰1Ùnkâ¡RÛP-I‚xðí ƒm“ ¿a¾o23°kûÐ*騫ռGG©„…E¯–`’Ф’»=›Ͻ!Ì{»mq0·jÔUEØ›Ï-Înôpz€Â^¬+ÕD×ÎÇÝjÌÌ MH]S£¯óÔ›ç~†®c+|Zºíè-‚÷ÍÍ0Nc+\ XLÏÁöjR%IM«¦© (ñ/—î–a䟽õÒÔK“$¬=gÈeø„|Îçñ= \DN—‘OÏ‘›À·‘±æ]¬ƒš ruÄ&÷nB»aŸ?k |µÖ¯—޳‡©¥‚ß1ÚžoE:„ú endstream endobj 114 0 obj <> endobj 115 0 obj <> stream xœÕ¼y\[×µ/¾‡s4G! !&Ä<é`@Æ6ƒÍ` Ø€Á`OIlâxˆqb;Cã nì&i'N34v3ØmrÛ¦MšÜÛö¾{oÓÆ½móúÚ¸ñm›Þ¶ ò[ûH`'>ï÷>¿žàí³Ï9ûì½ÖÚk}×ZûhjbziÐ ¢Hܰµ|òô‘ „Ð[aã†íS®—×[Ò |!R54¾qkfàÇ¿EˆKFHÎoܲkèºçûv„ÔpM½fx°à=õDBÍùÐFÉ0TœœZÇÃpœ6¼uj§Ï~M ÇwÁñW·Œmè×üò›ßD(RÇg·öï?COáøWpìíß:xä•}П<ïŸÇÇ&§ÚPz¡Ž÷Øùñ‰Áñ~ýðA8þú´ ê0ü±Š2vL(ÇËä ¥J­Ñêô‚Áh2[¬¶Ä${²#Åér§zÒ¼é™YÙ¾œÜ<~Aa ¨¸¤´¬¼¢²ªº&(Ö.©«o- 7.kZ¾bes¤¥uUúéÿſ…nãõIûÏ|¸ dF;ºþ!;º±®ùÿ·ŠØ× èUô4:¾¥ñSw¢=èËèòg.¿„ÞDÏ »Ð+èt÷?hö"´s«TºõþýËðSh íDOÀsï€ö^Fëð,¦¨M¡ÛÑxv„;Ͻ]Ž~ƒŸC¯c%ºûÈЇþNƒ÷¢§ÐfØ¿ûGXùº—Ô QòeÚ€ÃûÈr¨~ž½=»Ñ:˜a#Ð ¥áÏ´•N—¡Cè(Mß|†ßGH}ýÐãÃèôdmCݨ5~ú9³ÝM0𝢥º# ÷ÊÎÐqò QÌ?„î¿ð7€ðíèz*:=‰Á ¸þYÑn¾¬@šë¿å$GÐ(ZŽÖ£úªç bCgG{ÛªÖ–HóÊË›–5†—†êë–ÔŠÁšêªÊŠò²Ò’â‚|^nNfFº7Í“êvÚÌA¯ÓªUJ…\Æs”`”Óà õ¹æÒûæ¸tO8œËŽ=ýPÑSEßœ ªBŸ½fÎÕ']æúì•"\9ô¹+ÅØ•ââ•XpU¡ªÜWƒÇ5÷v½Çuwµt@ùîzO§kîªT^!•¹té@ n7Üáj° ×»æpŸ«a.´}x¶¡¯Ú;¯VÕyêU¹9è¼J E5”æ2=ãçqf – $³¡âÖjSëâsšn<Ïñ^ÁãšýÁpF¬òÎΆ<®Ðlßlÿ…ë3ë=.Á3{^£™o £HÜuáúרçBwuÎ }ø">ØPkÓœ©¥»cŽxC®á~¨ÿ Ç]fw:®‰ü½Ó䚺ÝlàG.ˆh=ÌÍ´tÄŽ]h½ý9$ú}s¤¹¼pÆÒÎÎÌ,œY¼½ÏÜlZÕ1;Çy< @ã#ýs3ëAž61Vx„9ÝínϬÑà*÷wJ׺ W#®9>ÈwÝ|H »eVtŒ}]µÃÒ FW¹šaí4xúâÿÛ‡mЀ+7g.싱¾­cN¬‡‚ØçQÃù|?ÜÑß,©—Ø7ç÷ŒÏ™=KùɺÕ0²ªCº%~Ûœ¹nõmˆß5ço¨gOv5ÌöÕǺÀÚò´t\DëWιìÏPê¬g'Ô\¥7Ìv Í9ûì0Ó†\v÷œØ îôt v2A e]ǹ¥'Αº¶Ž¦Už¦–®Ž²xGb'Xsœ·ásÍx:ì±f@äæ^…«ƒØi'\(@…+Ï’*ØÏɽ Ø ¸TËDuI•«ÛÑÂÕй,WÃ`}ü:vü™Fy&Nuá…ÖdìÚ© ÛÝîØ'7‡ÀiWüÁp‡‚5¼pŠzA@f¤*FK“yW‡gÐÓév͉‘66F‰ÊqbH4óªí3G7 È„Üpzá€s.ä³ßLܹ¥Òñâaøs§N»fž¦U³¬qO¼A=oœCL„Å2ƒ]šýl>{Bý0‰aFKóyö¼(²¹<Ì¦í¬§q`Ö³ª£Jº4ÈmöÝìYFÔ„›Ú–俀2[rÞƒïl9/â;Wuu\vÝÙÖñÁ¤®oIçù48×qÑ…(ÕVË*Ù‹°–Zá@!]o¿("4#å¤ éxÃŒ¤:ÅBF.X°PG Ž‹Õ‰Rû—lÃ@cÐß ®ÆŸ[;‡gû:™Œ£ üã9ì©êxjÎc"ÓÌ©<ƒKæÔž%¬>Èꃱz«—ƒdàœ›³{Vhð|lË•Ì;ª‡Ýß(YŽòÎcä¯zNÎ%_-si‘óþÔê¶ÂO–ß#õë8ô«ŠïBéè¸vZv@FÊ]xʾßN¶'L";,‡,dG¡2¢Â›Ü)`> §§;FŠ ‚Œ).)`(Ó8j2¡¾´ñ´™4š–öçPÓhÔNÚä8m¡ëW~ìïé^¤A°1@ß òQÏâ'P\ÃåOªŽÈ3jh 0…XÌ:Nî¶Ï9þø—´e,í¯,é åÈ/(űÇ6|eºfõ¡'NθȦûŸ¸gÿí–U­)·§TuV–¬Èï™í\÷¥ãûfnÝËÆ7L—('ʱX)';‹î,"[ŠpSQw™òï÷YÞö¼ƒytGÖ¡,²Å‹»¼xƒhq»ïRV]òÃr²‹¦är„’¤‚Ñ «×E\.4jM™°éÂõËb•ÅN2%™TÕé£êÑwTï«>RQ¤TDU’8™”$䤧{&säÂ$/ª« Û]SSµšODAÆgá*£#ÚÕrFÅ«1‚%ò±“ÿ¶«†òÏráƒÍ: gÉ(Mr–0êúpq䤸(Ý“*»‰ÌDnI¡\Sp×sSû^˜ªP~]á[¶µñÎG6î ­ŒvW¸cÇ}šÕ‘[íÜqfKÀÛ8¶¬õ¶6žè¾g ¤vóáFCÙÚ%i{vÕw'œL,í nÚ±{L×3Û[Öw{céÆÕ¢žSV­Ù›oAþa^¨µ‹Å#²]²Ã2ºW‰•JÓÊŽ“Ó lˆ^3&p˜Cܤ‚×kœ¿fLÃi4X-“a­`€‰R pµsu¡,MŠlðÜÅ8`X”ØMϼ0?Anùö+ÑãQ þF¿ƒwÑÝŸÞy”ÖÍ7¡òÑ€rÐQq݈‚ñ™ŽÈ§é2k—•4˜ÚM$UÔ©©hÔâMs;Ç\.•hÁÈrÙò®…Z,yêÑk*̘Lb,öNº\I“c™83SH›tË€Ë œe|e]füd| `ãs °Ím_œ«Ÿå#ã^|šxLn‹›Ö`ÆD®IÜóò-c_ž¨Ó}MÙ0M´äd¯ÜÎ]^[lóS÷üGþñ #Omñ+ÏÜ*êÞ²d6Uz|‘éÆªË}B²×Lþížèo±¸í¤Ä§@“0Ì™4T†žoÛMg)ÙMf ¦;é”nôìðòЩ;R¥Ò†ÒöRRW°ª€,ËíÊ%MÝ$Ùžc¯²S˨ٌFÏy±èÅÈ{Ùû®—z½ÿèqÕé±®¨®©8Uöä˜  ½‹M¥"Û¤þ˜[,zyÑ$#ÚU6!‰N=Œf D$š1erõ3S`dÅEÆy¬ò<Ìhf‰Êã$´˜S#)®œ|zì– »«ö½¼=¼gãJëÙä[Z–ílË-xn²ï‹cU/¥…7… Z™M›–Ôn §ãמ¹-ÔsöãÏcáBoJÝhÄÙÝÒpðŸnïî­™8½¹n<’ë®]_¾}}ynë”䨢GAîsAÆt¨XøQ™LƒÆÔji Ñ0…¡6Û¤™ÔÊx&àL²}=L&ØVe*bñ%‘Rw±›Ëí{fßòW"çúçô÷õÙèD߉~ëÔ£¸â´L×Stxf¡jÔ‚¾&î™Îü¯7¼›CµÃá Oh¸¡pãªbré|ôw/õ¸CãÍöîöúýoÜî_°×ï>38|fç’è swl¨Ì]5Z2¹¦0µnäûV c3ÐÑ„2í[K\8dXm !íj-i”wÊI#í¤DÈve1;’MPÎÎÊÎJ)6GÌ™±Ùœ›2“ÜæLܜٛI2³²<‰“z¹'®zÞîÙ¶`iââÚÓ³mB ÔÁ‹ZÿI¼Å ×¼âÀ CŸ»£©iÿ ›Ïï_þR&èéåSÍ™YÍK'š}ÑŽßÇ_þ÷K—>ŽU¯¿…5§DñTôoúអâ=?8õð¿Ì”•ÍüKêŸÿÓ+³ Wšø·­»ˆTׯ‰%JMØC$Ècž—‘”ƒŸÉÙKŽžˆfoÆ7ƒËmhà×c ³© °1 ÉFçcˆÍD¤ê‹™U÷Âô³Zò(Ÿ»-¤þ…è_°,wàÔ„#Yj1†›Ã¦%ëE'þ =ûi={4qðXw6•)¸{¨Œ§æ’uMª£±þ„¬…þ+Q@LR(xŽã1F¡Ó¬÷*µ<¢`=¤–š”P0ÓùÐ7`EA¾Ì €`ØÈ|ë§ÙøÉèûøGGåæŽÆæÚ>‘Fn%Ò# ñêTJ]J’q(yu2ÙlöNÙlÄÆN#AKÏ  ‚Ð'PAð&-E*¬²D´‚3Â'HÂpC nš ‹JJ0Âtø¼Jâëö¼8±õümõó¿úÃo_õ­Ø$ÖŽ6çú›GÊkÇ"¹$åèîj¨¿ëǰ'Fý`Ïë3²6Í‹´È‚}SÅÖçw/o|íú5úg¾ ÙQ‡X²É¶Û6k£¶L¥.,“^J:ŽáC’D£7œ$ªua”„“4k‚E€º<ÖK䘌U|¾ø¼º˜³ãë1LÌEsÃh%ýi‰QÄðÚÓ;ñ\4ÒÞŸÙÞÜ`K­*yì1˜28)úÁÑù©æår•†?,tªÃ÷“S’LÏ^ÿ€K”æ|m›êSÛRRiSawáæBZ7Ra^n‘OËÈ9—Äíæf9ÎÊF#>n»0W‰ÿÄ”®ò)¹´ÂŠ$¼eüôpAþÈS;§¾Ø—7ô¸Dƒ)ÜÁ­¡J~ûr±TN”Â&˜ÖÉíåNqç¸KωƄ0‡žÍÇ܇Ç1Ý žÃïbPz h˜¿ê÷mcl ßMg*v[0lSôçŸ:èÏiÇý÷GÑýàÎc¼:º†Þt· L1A]3èy'OxÞŠ®!50'³£¤ 0½‰ÈÃÐK@G‰!«ãpßkkuú|‡Ö¾Öw¸#‹gÿðÁ϶oûñŸ?þç_þû¶í?ûàìyxÞ´ô¼4Ñ„®©ÕV ž"ȈL@|üaIÎDdˆÈSC2€Œ¦³;­½Ü7Û‘Ý1Ûwyí¡Žlb>þÉ?–ž0{Xzê¿ÿòÏL3=YúÅ‹¾(¶$àïJ9œB’p½¥ÍBš Ý2­8  ê¥*UòÒ ½Ù~Ì~Ê~Îοcß~ÝNûìØnÏ0-e­Û1² ö>û¸}Æ~Ù.³3„›lO Ûí¶ˆ;Aáê½êcàíŠP hD`hÄ×Ó/¾ƶç3÷ô˜ìϬ—Ä®¤Ô$ûVßýBïú‡ÇBÚËÂÌöÕÓKÎ¥Óí[Ž^SÖO<:pøÒŽ’òø¿Í®Ù^¯ë)yd`àÔhŦ­šº[ו¯>ñ6ô~It w˜«€ùuNlM±éáAã´ñ€‘6::„ºÀÌ¥Õ”øH%!(¬iœFIGCˆlv ³m:‚Ûˆm—í0(4³Í©PRœ‚hñ’Êv:ÝFðØ*ƒ¨Ö‡ ûlØváúQ«Â6AH1è5Æc˜ F|=à”SËö@c9³ÐFIÁôø€8>·¤U2ŠH+ bÀ)ÔZCKMò odýΕ©.S¾¡ùH¾1š}+Ô®+¡Ö§æÓ×Öq¬’“¢tûíœ~½yER]ÝÔì ·Çl©äO€Œ¸mÒðÅYY#Y´1­3L;8ÈŽäCÉd§îNÙ­Õ’zÒFÍN¨™Ÿp=éSQ•*7ý¹b!IOçÝ‘$,RBfÀ𪄠¥.ÀTÉäƼÀÏ8~˜™à˜þY„ âÀ˜wÅKÒ—o[VÚ³¬Pó¨ nzpxòk{êšžë»ãʼn@Ô›7¸º’’°¢hÅzüßíÇ6–'æT§åæv7úÃGt÷Éî+k;ñÃþDz½ë×íYîbøåú'×Ó¸¾¾ôîŠÐË R — ôå Cxî_ßëë“hwLŠ{0œ£E¢˜*—3¤£^¦Ñ,¢^µJñèoB<7að_Þ €•äÅ¡Ï7ðï¿ó?4åè¿\¾ÃWÏÃs¥y]-¦§Î¤ÎmvO¹÷»9o¡ŒDMig´D›(‹8“^ Ú&Xþg`Ö12»  p`\ÁXñ0’¸+#ù•WäHzþiL(¡¶ÚöMKVͬÉ%/E6VÛrÛok™¿›®JmªË—ó9å•fÿòbGÎÚãƒóþX_¿ò•Æ5Wt@ìØbû¬‡­d‹o*Á“w¥k HZ)Îv`M¢„wY\$³1#…-g…ºüŸ0rö9Ç3NÎé·ð¹‘TWæq€ô™©‚a˜„x&O( ÂüÝXÂÍá— ¦ËKâék åÒ*ÇYwbb…ñ”¦¸i}yņpV c×Rqφê¾Ù<»¥Q÷˜<¯®-ïcßÊ-µµ‡·5ââå»Ûóì5—;KkSÕ†¬ÚüÂêì“!³v`Å}O:‚̹en͉¼òt»AÈm9Â}Ñ/P#è&f÷:Ä%0—p‚ÎVÊ™Y€y‹I)a,,aŒ9þ!Ù ùȸî8wŒ"w’Da¨åªðGiRÍK^ Æïô†Á®c“ãk¿‰8ƒ•Ñ7©û¢?úä y`>¶ãw W+' ‰¾²;e„K2'.ÑœH@³%(C*ApªÆT{UÇTœ*¶& ‚^ÉüŒ˜lnõÛb)Fs×ç7ÄË*‰W‚•³ø7Ö´\[ð‚F0Êž‘ëu*Â'×´Oµ–mɦ(ÔõÓ';¢yµljc«ÍVSW逸«ä¬ŸSèan ÷4’¡/"ÜÊsü¬2Ë/¼ÐJ9@%¬2“€#‡)7%ÍÆˆã”ÉöʨL4ZÂ2ªç P3R †«ý¶1èðÓ~ãç°´Cú¶ùùÞ`€[”XÂOÒ.Rù6~ìáè½Ñ{’èxdÞ üô¢1goê±Tr‹ûˆ›¨ÜIîl7-OƉºZC(m&¤±Yš`¶hÀŸ¹1K¥ÈáBÈа€ÃnÂfž¸J4à­Öâö ¸±1ãÅó4©¦uS¨k_[W1ßÚ¼©ÖÎf*™üôÙÏÏÔ{È?³>oÞïËÑÑ‹(ûú»Ï+õa×…ëïŠJm8µ<Œ6/|ÉÿŽÿºŸöùÇýÄé÷ûƒ~Úìïõïõós‚ßåÏ÷S¿¿2QFZAK®i±^Ô’w´ïk‰ ÅÚbY$15“2•äé$®5ðíÙ¶m"n¶mÛ& Ÿ…|¾¿¯¤¬‹ºÊ»Hf1“Æîs¹‹ÒÍg5¾ÀvD›åu¬1£¯,ì¯n+²>Å®Z²‚|•Ñ&ÐsGËü—´XVq™9ci‰³oÀßX˜Óe±ëžzjþn¦÷Ÿþ.½ïBE¨_\"…Pëmmòt{6{h‹“1ï´8§œZÚçÆnw‰Of!ÓŒ‰˜Ò#I)‚ i-ùY¢3g]ÒÏnh-,fÿ= HÉ€L.“XTâ¯ýÒ%ß{uêé|B(Å_eƒ¹9\þ™é×ßøzJ°wÉ’M™™#µÁ>ÑMR£¿ˆ~°z}Riž›SúªÂÜÕh§£,_ﺞ@Ôù0« C˜3EÎÝíÀO݇Ÿ"}Ñ6|ö^|6ÚvoÌ–ü0œè^€¦EãvýA=‰ö‰ °˜™­RÊf pAAÀ•ó_¼—j°FcØËcöØ«þX¯iÖŒiè1Í9 Ñhò?¶¡ü‘}!&ØTÊË0gÏXÓe=IÒ|c2XÌøÀÀˆÛÍxà’9¾•ØB“k·¬ôùWn6¬ô3〕?Ê­Í6e-Y•å[U›éþQtMNd¬÷×”$‘Ã$©tu î 7g±ä-+‰>Y¾¶!GET¹õ=Ñ/oê<¾ÃÃà;¼ ã—#¿˜Lär%ÿ»½BHT2Õö1 sa4‹ÁØ£0sSÁ z˜x¢÷à±èùô‘?IZ„„±Ú-ÚÍ­òßõÁŒa®ʇV¹y„oj2NÃ*¬ƒÖîVבõùÓÖÞ5˜$?Æ>°gI¢†>Àz†8?‚ÐBÒ`ì[ÄL»`\²t¦]Ç—rx»ü œ”ã]ø0¦Û8QÑ© *¢”S…L *^ÉQx”ˆP%n1 Š&%1+• æ[á²&™y$ƒ«äGÕJ¥ f‘RªVkyžÊU`$¼žÆÐQÀ Œgá1f Fk¹€¾qˆgêþMðÅÀ\¾,b›â²"¾Zôô †WÝJìQâ€ôOŸˆ^оúM|*:ùmœƒ³ßŒNâ'ð+Ñz’CtÑnüåù?Ìÿ ŒÛã¾ãÎÆ­¢0•²?…„RV§´”"€¹L¢—™láã<è`@œ¦9ŠDæHpdœ8•Œ7'ß’|$™:’s“«“©:ßb?b'v—ZÖ1¯&I—­«ÐQ˜ªZÖœ“5§Å^m±vZ{@Ëa©Œ³qÞ)b׌Ãm°^ňR· B“^gÖëuZÜšœ¼\®5˵·:<Žårl–c‡hžåÉjÊFælä‘'P½9{*{6ÍÎÎÑgÉq¡yrrBV¶@õzOÂtÂ’ ÅHga‘ð{ °L`{{züXbðáãD[Œ <‘,1îée¡©ø¿¤Š…ªØÎí¡y8#=C&×a9õЀ ¦hIi çÉ”‚­ VæÂ›ô/oS˜• !j¥Yuÿ÷^z®„D¡†#ù¡oì“™”j•B£¡ƒsøØ\^¯7͹ÔÍãú%[{ßZGn–§ÑŒŸŠ®1/õdå¥tõ®N$½’Îúù”þÿÒßií–m–D#´R½²W9¦¤j*W0Gz¹ÚV(TZž¡E§SiuãªÐ2dOµZ½@T*¬FšiÍ ¡JNÁn¢VÈ”5¯åÇå3òãr*‡¿ŠP.×¢˜:²|½! íà?6ß.£GÒ¿`ùƒ”5(Èý ½VÞ*WãŒRo)OäVäF?¸¸ã“;^þ*«5wrOlÜßø—0&×QøO7ã¬æ}ò¿$==)j·§L%#Y»²gÑd&]Õ(ü6Ø©ó½Øë5màù@b3bºŒ²ûÕéë½~o³wÌËóžc™lû8ñ†ºYQ3y‘ÒÄåq-m*féqÃBjÉK”»%œÀÀ“EG%}íùʺ[2k[}Y­K²ÌÙµ¹?ÂÊÏ«mÐj›pwEO}.ð!§am9î*Y–g9’Ý<Šž®Y]*éî’5Áè—êÇ"91;5ø ÆOÁ?KžÅ¸€"£˜„ð(.¡Ct;¥l²]{‰Ý@ACJŸ²Â–L+ °€|ý Züܧï˜ù+‘|SÔúâè Ý/.YÍáF]§ŽØõÝz¢Ôc/m¨K(ÉÄØiA½Rß$ ³ €Zn¥JÚÇÃJ2.ÌD`¢—¢Ò…ÁHX”艾]‰ë•8[Y¡$J„¥É s)°ÔÇBÌ.Þ¬ãÓ0öq{ã8@¾÷£hów±Fa4d2“Ù¢Àæ7aΈ Áú Å\L ß„1zUó (­ë-Ó–:¨ŸÖÝÜ5c=n}×zÅzÍÊ­ø2”É^ë1+±ZíÚ®cªSªs*úŽ ÇÒ=655öò&)À"ÊxÀ)Ø_ éÇptRsÕ;^Ü=õÕÉŠK‰Õ#–| ÿúð7o)+ž~ùÝúé³ý³™™Ç7Òăfèï0ß…‚hNÜUT·æâ&G·ƒlpŸOÕì¯!SÕX¬ŽT“ƒU¸¾ª­Šl/=XJ¦2ög€«ÎuڦƇåx·!xÁÙ]YY¨‹-419k•]{ÇDQÔ…œ‚“8‹L¼¿/-;;Óõò¢2|Q²AÆr}Ìõ;½ÿÚ‹Ûÿ•× §,º¿iŸõ~ùâ8º&­)<7\³÷õƒ¿Ž~’vQ“ß¶»=¼£=¿vÓú¡u-Õ©á=g¦ßVo~Eí[:PÙ²ÄQܽ«¡t|cç’t<Ñ~l¸âÂW½¥]µiöŠ®`¨£ÌcÐ:2Š›ëú¯ÉÌjÝq"%Éîò•¹UM.£Î™]Þ:Êr܌π<$ 7ÊC;ÄæÁ\¼) ¹°´>gJ½_}?èM53â&c·‘³´]VQk[­2 b*NMÍOÎêbQÕÓ²9'3fö&'gÙ{å4«Wf\Ð!’‰A<ÉU¾j(ïé¹»©ä,ä¥S(.J÷OHCÑÍ÷LÛÑW†£™øäô…™:wÝ@}ûyÑßž8ñþÏZ&Âî–@ϾȧXÕx[wߺñxw6ßÞ|ëê²Á–J²lÍ6’¹¹;Úç,Ìÿ{°£<)šj-[Ó#Œß:¨Ñ ±hJµ_EBªÕª!OÉ÷ËéÝoF· Òˆ:)Wa³ cX0Ê} %LÝæªõa…RP*‘Z€–'ÖÊi‹ŽÈU1¤%Ç žrÈ(!¡òrÉJHÄaF¸ ÐpYÀ×c(/G¾‚ü˜,!¶wc¹”¼–Ïo¢‰_ºDª~U²çLÔÇ7Ì÷’/Í¿ñéKãù.ŒKãéËd2 ŽøóJÝ8ƒ®]zePyLyJÉ5ƒeÜ Åw”ï+e[E¤ÑrŠ^¹‘ª{A:¤ZaÌ~Á·ùÁ†±Eh¦ЕBiߥ¥Ñ7pÕ§oâªè|ÃÉO~ò$§Å=E;¸® lT:)ÖìΟÍ'CAÜ i× jhSEwÅæ ZìÆ¼Ã"!/NeM²î¶ÎZ9¨05¢ÃÇu§u`¤“–ÊBüׯ_CÕ¸ŠÏ¤÷®êŠŠS©¤Dß+03Æ–Yn“T|l” øz$7ÅÇNM,®*ûL¤f­”¤ÓqEfÛkƒƒÍ–SÉ­S Ýýö¡Zqÿwg[‘ø”¾¨±¿ªsok:9sÇ÷î ç¯*© /`ò蓟ë.íÙµ¤6¯£>»þзcs>Ü[Àg92£ q‰‰€@µR-]ÇñfÔ‰#nEZ´N.3ËeZNc¹ý5€R¿£2£m_7>þ§è»Ñkضj[ƒ“ç¿Á7úg×Ôܲq¹~þúöûÑì̺.‰Oça–$Åy¿æEŸÀž%•0PNÀ³£t8’?ÌàòËN8Hibú0:BÌ› ¼ŸŸ)x5P ù3I™_ùS7†I‚Ɇ3ÑÿÆ¥¤Púâßš¿—Œ²õcôÜè9r ]âê펃RäÀÛ&’¢ÄXº¦ÒŠw™›H¥ ¯pƒ€?· u÷å%™bpÚº#*,°E6½zÎÇã±%ž’ mûkpúùÕVˆ²¨'1Hko¸¡ÐþK;÷^žë÷]ºõ¿±âÍG͏.o–tùâ2Ì»oÊtʮ݈32TÞslYªÙŒº¤ew{½Ç¼1×ÔWâ`ôøšƒstç«DUda­wFof¦KϤӶ^°îzεàx€²öÅ›1…Ý#¥6Ù‚ùÅ̈÷o¨éX®„ô8 ®q+Òz§¯<ø­}b;ï81Öd{&ýÈXמfÏ™³ù«ê ´Ñã÷ØJrSF¾ŽñC_=ÝUÔ¹«¡ltWáoï‹þ!úkƒ5Q‰#§™M[ÇÕr´L,Çb·¸KO‚ä9E.‘wˆ¬™ôJ«ÊÞ!ï™À %S(KÊàìú|ðÖBþéµhWÄùd wæäÉüº^Â{]b¥\T™Ã€÷Tà÷²4°–WvÅ¥¢WÏù½ü1žƒÝ)þÿ>%׋©2®€™äl›¸¡ˆb‹è}LÇlÑó™ääü˜y2Úõp4pðÌ5{|® ‹Mœ¥ÖX’íF~ Iu 3Á3N„yÅên$ÙŽs”ÑôaÿÂ[ržžÄ‹/6óâO CùX®Í ‘’móßåÜÖŦÞü½ÐÈå—ø¨5£^ôÑ6¹òŽ•dWËá2Ø1Ýq ƒŽ¬Âå^ì|ô¼RN–¾5á<&yÕPð±Ì˜`$áÆDOcM~ ίĕ•ù›#XcN6o1Ó̦Uf®&7RÄs‰ã535ÇÙßüD¦7ƒ‚)Ìljù‰ùý«ÃzQm ëûrÇsgré`gE0)ÊåTù MíMƒM´ÉœŸ¹Šï®kI¡¥Ý-H%e-˜ µ–÷øÙŽ1_|!¥Æ Ör©^zµ¥‡­–„ßôÁ’ÿ€zx†no`ÚÒÏ­f‘ ˜Ë¥Õlí^„¹ ÖÊâ{:¼˜üÈÏZ^W‘¼tõÆÊ­ä®Ü\£·[4¾5û;¶¯Î¯Ÿ¸o¥³¦~YvvÐ|OÒš_fR¾ÅV}Ù–+fä4§¤[ÅmíË:¿´¤}Kì¯ÍXZU ±xüI‰…é¶Š¡ÙÈŠ=[\Éõ˽5[[ò<õâÒ-«Cî’¾ž¼5ßÚå;òËu%¹òZÍ5¦–e$$æÕe×Nùì…K?ýÞÀϦò¾0X´¶>Ô’³×ÏG×pK¸ÊDUhP¬¨Ä¡ÊÕ•d³7ú:}D–ž¾=ý`:W䯕 ,½¤‚–öeᬬš@Š!„Œ3àþæERÒ›Þ`/‹¨øœMº)îaùŠ¿JüÿÕºß%™k-X]gåY*IJ2ždD¹Ä`d fôµ™_·Uö7V¯Èõ†7Õ7®¯L$©·¼û@»9'THœyŽh'O3—Uf+©·¨*©hy5rß÷o8¹¹ÌÛöÐäû³ËG‹áî›s»™d¹]$3(B<“ð$–ÛÃÌÉ]OÕs˜Ã,%²—ýL‚ÑF 3H``1µû†ðýBáïåvK‹•¸˜åv»>}’þüá‡ð}8ºîí¿J@§fGNtí"â`&>6€…äÓ”YîtLzšS™Žd gVr%r6>Á™"çdVÓY3Vf=kKòÓ ËÔR[¾L”EdT°¹läŠíš˜e6›ÌLUnƒA£QžeúRÁiÎiX›Œ„s†D‹¡Ù€› ½†À©á½ÚcÚSZÚ¬íÕ­Akà­&ªâ‘?ÀÞªar›¯g›!€©XÿŠ­’ˆå:üìŠmÒÒ`i;p•ÕÞ¼1·ß€Â˜ÛÄ6Oq6·)@Ù€z·‰>V‡¹è/;FWG¿Ð6ÚöæÏêþ Ë;G;ðæŽÑŽÌ‹ xS­¾¾%:ÌÞ­ÃnÁÕ[b¥èð–èë¸ZÊGÑèÈ‹Rþ¨\Ì”2’VC,jæ]ã1:‰áÐ⢇8öaK¨¤s¡5¶Âá†_ªFkÄ*u—‰ÖgðcRôùAbÑ‘qàÙ"†$½9>-Ÿ“K)·QfÞozo% %µÜR<„%·èæù?^ºDT—ÈØü=|ÃüwI‰ä\b”ý8#õã;âZ¥«eàÞŽÊ ¹˜9 5§–¹+T¼JU,+'0!r^GäfBä¼ ·ª9žS¯Sñf¯V1’(T†”œ‚cZÞ¦JsœV!ªíaRR‡œQ…)¨‰ Ë ÄúPb‚²-žéŠç»þs_=RÎËË‘!¼âíè üÞÛÑÙè‘·ñ{ÑoÓz‚ço’êù×É7ÈþE:<tP Äá"Y½¬MF×Êq¥¼ †+O”gÉé*ñõ0á/ð.žjx¹B.¼¦¹ìï NB.*¥ŒŠ(‚ú 2³å\ ÆH9Ìž@`Ì”«§0†g ¥ìG¯¤(‘ôÚ™”Ï#o¼M~oÇSo“ðü&óó_$ ÕFÃ0%šÓ+ðˆ¯QìP,E¹¢QA9…YALiÑur…Y® rÆ•çõæ0bÜq€YçäA×Ô~é%R ݼE½¬¯R¬ Ky0˜£>ßbä}!䞺ŠÁ/ìæîøä[´pÞJ¿ùé÷iÿ1.éä‘Oþ“é¬X>6¾¾(M4‚¯ËÉ*Ü#¼>–— .df…±Ü,åg#ehcK…¤µ-lí™´N9(fŒëft„ÓšµSÚýZÎ2ÝþýúèÿÖ§ýDõϟƹg*ÄËEƒ[¡A+ˆM`;µ-`0/°BCÅ‚`@Ë l´¢@:k†J鬇E’Õz´<Õ&íZÁ¢åà¹ØM,óý‚V/(Uh¹‘5h`猙ì„1“ÕXC&v_ª²PI§PÔêñy.`¹¨Qb3(AnMMJea¥Á¬Tn-ð¬+DæÂBð‘[ÍIæu&£™ýû”IÔ$âÂÂ"“ҟڜڛJSS“ LÔ—„pZN2 U`ånã¯É.¦Ç?Ÿ‹‹-†Êh3ìûìx–§±ì8gÇYJ¼¤TZ\lì`-ŒçÇßæuz½Ü`0äz½Žßôî^ݪPó<'r^'Ûzn« ¾å‚€e*løU|‡©¨2˜Z¾"”¬ ˜¢·ñ Ÿ¾Z{kAy ¡ÎQ]UjÅÇ¢ÛÊ*«u¡ú¡Ý%´n!ÄÞ%Ö +ê¦ÉBØòk2n±³5Í:`¥RË®÷é7ëi‘©p%Ũ iO³,y¢¹+(1õÊ©y!ß³°úü3±‡XÜÁbI9oŒ<ø“»¢Gq飿²ýrÙÄÙé]ýðûdî©èõ¯vò +ûËÙC—w•ò{¬’ÞÝ ŸÄ-“Þý—6åvçnÎ¥õm´"ƒ;šfI›N;Æ©\I®Ý®Yg yùˆ 76“©Â¿”¥­Š"‰Î£=;ž ^]@ñ•À,dp#úʳ¤´¤Tʰ  þ|.À°d¨¹ÚFXÈÿð/J/¿$[k¿ûÚëƹl¤¶¾¿Ú‘\Õ×P9¼2—[–×àO,/ðPefýúºOJðKII)É•ÅI8[`sÌ_ÙñèºÌÀÈ—F7ÚT’±á˜«·Kï®±÷®ºˆR@Ϙ@U¤§”¤l”²²Ë³Ù»±×ÄDÐ?Zí4iiÉ9k³‘@By)ì¬V,ž% É$™©žÌ\æÿ^•¶”p²Ìbq¤±#  Á4­6ÛA“aYÀ· …zbY_Ô6€[&ø Ù’BF­…U!Ò$XL,N¶HÄ@¥U„ƒÎ­{âð“ á‚Âhb´;}õ¢ÒÊ~¦L£¶)/þŒ6å J‹sÒ£Ëð×ôYþ[iU~QîHàÓ“|CÔj]‘žSà÷yW&â_Çqà7VÕvX*æpcjÌÇe—ë â½ø¦Að?N*-YaŒy2Í/f{nDDbf)âa+½n'O̯½DoáÎDÎÿœoÞg¿DEÞäë%,%Z¨üAKr Pd„ÿ"—%;±W^XÄ™-K?¿ío}ßM_ú ³BMG×Ðz°A‰ÈÄÌiÓ‘rÛl*KÒ2‡…ØËh–§*i•Y#6½Bš”‹ùêÅØ¿àŸÇsÔ kâiýÒí'Wgµ.¯µ%T…›3ËúÃYÑÒôï$o=Ñ›-×è•wñ•<¹º·Žþ“´\žÙ̧h¾ÿZC¯¾êcäŒý¶Ù·'^=¹ðû[×?ÙûÏ0öÃg$^‰ÙïrÍ?„n|0úì‡û]ûÑq4ƒ6Âv=Š »Ñ­h Å>¨y ®›ESx5ŽÀñtàú'àd<¾‚ûÐïÀÓ½ˆ6ÀÑú9~륭3ú'ô4ÐQÔ ºð1ô]¸ã1´ ZºŠWb‹Tw AÍr(=(‡µP‚YÖ< þ¡‹Ðûu¸Çàé·£oC§¥>ç èwø8QwÑ":ÊUp?åûøËü5Yø6]ð÷ž"A±R±_©R>®D‘j\õ-u‡ú¤úšFÔ<¬Í×~Uû¡n‹îAÝeÝèW !á²A4Œþ͘o¼b0½e6š/[R-/$$$”%´%ìIøWk«õ›Âv—íDEb[ÒꤟÚóìW’5É‘ä:Jw:¾êˆ¦L¥üÊùSW™ë5w›û¨ûk©2‰Úí ¸Çh ÊÐêÑ\j…:v6¯^䉸ÈŒôHŒ— Hxs¼LQZ¸žƒkÆãeìÌÞxY†t€be9ÚŠ—ÈŒMñ²épF¼¬†>/þ‚an‰—µh/^hS‡|8ÊzÌ)áh†dÅË¥3ñ2A:òíx™¢"ò£x™C)T/óÈF3âeJ&V–£?ÐîxY2¹æxY‰’¹ñ²•q÷ÅË´–û^¼¬EQ~¡MZ-óÖl™Ù=8àèŸêwqæç—ºj'7 Ž N¸êÆ&ÆÇ&ú§FÆFó\µ[¶¸&F6OMº&''¶ä-Y?;ïZ16:Ö:¸qzKÿÄâý¹®Ï]ð¹ÃÕƒ“¬\—_xãÔç.™tõ»¦&ú·öOlv ¹Z¡¿áþ©Wãè†<èÌÆ‘É©Á ¨uµç­ÊsEú§G§\ý£®¶Å›‡†F6 J•'¦úáⱩaèå¦é‰‘É‘ ìi“yk𫦷ºVôOM NŽOMWøý;vìÈë_¼®ÍÛ0¶ÕÿÎMíœÙ8 ÃΞں¥}rgjÆxÓˆ‡Æ ó“cCS;ú'Ùø'§×oÜ0嚃k][`£pkÿƉÁÁ­l¤ÓRw lví›võoØ08>a—ÿ½–óþQg·,Þ$õÕ£Py# xF`¢ ¢ä‚­Žû¡t¶B”¥PªE“ æÑ(\1ªÍ…êÐ|Kû~©18›']»þ\PÏÚ†s“ÒÑ |³{·KÏÊÕ7‚ÖK57îw¡Ò÷j…3Aåm³ãù¹°ýãþñÙÕÒ™ÉÅúèQ>ŒøoÝõ[‘ÆÇh6%a=Ü*õz3ÔšwI£aô Kwæ@©îÝ ÑkB)keJj;våˆÔv;\±Jº*"ÝÉ(0%=mTºªío<±ž8÷3zݸrƒÔ6ãm¬å1(Çi¹ èÛò†x»yRi+\ù{ßÚǃÒùII GãÜΓÚÜ RÕ.Iã-b|üÛ<’¾å'¥;¦ 'ý¯ø? 4\””èÇZ‹·Ë®ÙçÇhü©ýÐ'v7ãÛO§o¢ñ©?`ŒÁ9vÏ©q‰²7µþÿµÏyÿ×”Ýò7žtƒ¦’–>Qú›?Ú+()7?Žd:ÊtþW(Ûy-Tì<òÛG~ûÌoéæŽ|D^þ?ñ¶ÔýÑæ(÷aý‡Dõ›ÐuçÿüEºóƒ_T;ù‹çÏÿ3äTÿ'ÿ3”àüÙ•óå+ß»òã+T¼( ] Ùœ¯`3ªÁFÔŽM¢¦š¶¿_ý“öŸV¿×þr­'€Ùnƒýläúeœð¼&!亀žÃ½•;-ϽWí¼€ âzÝ)üÄõñ'‘ŸÌüdî'2×{‘÷fÞ›{Ó¿‡ßµœ½ßûÎÞïÐÞ×Ç^ßû:½ôMüHºsü5ìz-ÿµË¯Ññ×f^#úWœ¯ÿ+ÁWÆ^9÷Êû¯ðŸMwº.ä_ˆ\¿0s—ÞÁ¾`Ê /a×K‘—f^š{‰›yqîE¢>øüGÏK‰ßÓaçÌÜñ927wyîÝ9ê?¥&4 lÙ…- ÛÚ¶vy€¶Ë€¡}p®¶‹×¯`ùsÎôT¦äк®°sm¨ÀÙ ß]ðm*4¶ó˜¶s…´ýV¼h¯rê)¾ž³í¹b§x¾¬™¡ X%z¡ÁÖˆÝùQËõ"¶—…Äofè~9^r8›Bagä¶‹]x¼:†m)lçBøýÐG!2 …–vÖ· …úv‚A†v:õA}¯~¯žÓëýúfý˜þ˜þ}ýu½<ué逑O'`_ÀÇÏ·­òùš.ȯ·6Í)#ÝsøÎ9ï*¶[ºædwΡö®îŽóí> endobj 118 0 obj <> stream xœ]ÔMnÛ0à½N¡eº,‡b;¼èêôŽD§jYå…o_½yl t‘àIâPßP4›ývßwÓâÛxii*O]ߎéz¹M*ßÓG×Nʶk¦|eÿ›óq(síá~Òyߟ.Ëe±ø>?»Nã½|X·—÷ô©X|Û4výGùðcs˜¯·aø•ΩŸÊªX­Ê6æy>‡/ÇsZXÕã¾wÓýq.ù7àí>¤RìÚ‘Ò\ÚtŽMýG*–Uµ*—»ÝªH}ûß³'eÉû©ùyç¡nZUÞ­æ,Ì‚ì™=²2+r`È5s™#òóò3ó3òš¹B~±\[í†yƒ¼eÞ!¿2›mg9Âà*Ë‚yýµÝÏþ-2ýƒ£_`pô×èËÑí>ý5úrôýµ¡¿~E¦?Ú<ôûdú#ÖÐÑïÑ—Ë~Ì/ô×pJöc¼Ð/˜Gè–é–éVK¿À#ôGô+ôG| ¡_ÖÈôG«¥_УÐñ-„þ`NúzúNO¿ÂãéW¬§¿Æ{=ý ›§_1§_ñM=ýŠõñô lž~±wÑð­=ýÁîÃ/•³Zú½xúÕ Ù½á³}iÅZ¼Kéô®ôG¼Kóþ‡_óþ_é¼W³k®ôËyÿ`M4û±þš÷¿å¼ÿm|Þ?ðkÞÿX[Í~ô¢Ù^×?b C^ôèWôòþ·1ô×k;ò/Gή?GNÙÜÆq>n쀳s'L×§¿gàpPe¿Õ0‰ endstream endobj 119 0 obj <> endobj 120 0 obj <> stream xœåUëoU?wfv·…ÒvK±MVáN‡÷n»myÄ& E ¤/(í3¤†åv;íÎì²B› 4Fƒk0!AŒ~ÑÜÕúÁGP‰¬ñAšø ñƒ_ü@LLü`¤Ö3³· Á&þînïüÎ9¿ó;çÞÞ;7—É3¨‚3 CgÜ6Óõ„Hð%©‹ŸÈÑbà šägI'ì'?ºÆ$Š>žHNŒì´’¿È_cüÖ(3Õ¬<¿@¹ŠöæQt<5{0€öOh¯µs'¿€ÞE>4¡*™Š› †ÐW…C…mžL¥‚v=ÚÔ1mVùæÛ_¡½5´t*›«‡±9€Jݧ3,=þü%´O¢vů§ÐïÚüï?à<< oA7\¢°"ÐG`h°®Áuø>…«ð ¼Sp ^o@'à#Âai/_? óžm[#÷‡õ­†ç;eÐ[œ,milæ$BàUáf.Ezõ]š¡6s9b5RÞ9 «¼ÓhæJÄMU5uR¿š6BÈÓgCwŒ¦r_Xç]' /`¨ç‹,>ÔÌý‘b9‹ÕéÙáá” DŠ+=WgÙU© ÒŽh3¯ŒÐSn‘ÏP†ryU·F¹²º‡Ã€^`“ºàѪ¡‚g –,·à¢Rwµ¡ZGè·Þtª"4ÊáaÒÝZ—9FuzìhIÂå-q+ciZ » ]¦V Í+§¹â¼™8?×Á;™k`NµWiëL£ª†èL—“º±›ý¢7Õ£ÕD4:#ŠkTï ©œz'Ô­4Zè.h¦›PJqÍ áÿä)ÿžè¬‡wp„¹2ÍQN¦ ¯ˆr˜qm¥¶è#a.O+IZÛ6Õà*5¨NÉ0{Z‚¿Á?òçÅ)߸§ª‡ÜŽÈ·¡–ã–À–PÅj¢\™á‹§ñW¬õTHÓšÕ›6nÞÐÞðвú€Ÿröí»âØ}ý}½äÆžþ”syo¿“îÛdî.¹©¤¤'°Ï:OSFA%ê6…:²ºIU”ì_çÈͼ3M6}òñ‡¿>\³åXQámìë¿¿öëü&Ÿ»‹oˆ”ßí¶æ=æÌž¾ï,Ά¬LIßC’qp½b0æ±d¨:’÷V©u“¥9‘×D^)k-/ëX„YX+°Œþ¨À â}øžÚ!°ý{K‡F<©%L Ž ,A&–±£çJ+ãñ/ ìòßX‚ðÀî*ÿèa îŒ|R-° ¤A`‚¤¥´8,#Û&PAbc?dX`–Ûà “3»ú—– Ž¼.°Œœ÷peˆR‰öòÀê¥%¨–4eô· ¬ Þ%°%C`?ú¯¯£í­­t(ïÐ~+žIe'²9fgi·oÙ›fÎЄ}4•d‰|ÒÌÜsÜCX&k¥ÚÖÒÞvÏ»=™¤±‰t*‘1Ó£Vœv13—ϰlŸ•(A`åÈŽ”m£L™Ð•râ9ÎÒ\Yçxþ>…X*ŸcY:ò_<º?›gɤW’Í“F¬l|”áœ/&’V|tœY9æÌ§8s{>;É0æäDÖÌ`|O*c›)óºòÎ$–¶h̪(ÚÇJÑX>—céó¬ùM[/SœnÞ±þÝgŽÍ2ãvƒ$Víf6cÒÍtš%­±ñûzƒ‡u@ñÚjÅo¢!ȃƒÏ~°0–daÿrÀÀÆ'ÅëÎÁH ª4ú̘ÀÈQd&a= TH‚‰¹ 1ò@Oµ-´ÜÚm¨ÞŽãB\Ü‘¥÷R꺔ß'sOsrzyÅ€^$äy£ØåÞ>¼/ÖúAgŒGð–Ö ø‡‰l endstream endobj 121 0 obj 1401 endobj 122 0 obj <> endobj 123 0 obj <> stream xœ]ÁjÃ0 †ï~ ÛCqâ]ƒatrØ:šî[É ‹mç·¯â¶ì`£ýŸø%ylßÚà³ü¤h;Ì0øàç¸EèqôAÔ œ·ù¡Êo'“„d¶[çŒS†Ø4B^¸7gZa÷êb{!Ïä|a÷uìXwKJ?8aÈP ­ÁáÀsÞMú0ÊBZÇmŸ×#†ëšTÑõ=Šçd,’ #Цª44§“Ü¿žºý`¿ ±³f§ª”Ò\«R×/…{8¶ ÛŠÏd`"NUîPâlA|ÀßS¥˜6ª¼…oÀ endstream endobj 124 0 obj <> endobj 125 0 obj <> endobj 126 0 obj <> endobj 1 0 obj <>/Contents 2 0 R>> endobj 4 0 obj <>/Contents 5 0 R>> endobj 7 0 obj <>/Contents 8 0 R>> endobj 10 0 obj <>/Contents 11 0 R>> endobj 13 0 obj <>/Contents 14 0 R>> endobj 16 0 obj <>/Contents 17 0 R>> endobj 19 0 obj <>/Contents 20 0 R>> endobj 22 0 obj <>/Contents 23 0 R>> endobj 25 0 obj <>/Contents 26 0 R>> endobj 28 0 obj <>/Contents 29 0 R>> endobj 31 0 obj <>/Contents 32 0 R>> endobj 34 0 obj <>/Contents 35 0 R>> endobj 37 0 obj <>/Contents 38 0 R>> endobj 40 0 obj <>/Contents 41 0 R>> endobj 43 0 obj <>/Contents 44 0 R>> endobj 46 0 obj <>/Contents 47 0 R>> endobj 49 0 obj <>/Contents 50 0 R>> endobj 52 0 obj <>/Contents 53 0 R>> endobj 55 0 obj <>/Contents 56 0 R>> endobj 58 0 obj <>/Contents 59 0 R>> endobj 61 0 obj <>/Contents 62 0 R>> endobj 64 0 obj <>/Contents 65 0 R>> endobj 67 0 obj <>/Contents 68 0 R>> endobj 70 0 obj <>/Contents 71 0 R>> endobj 73 0 obj <>/Contents 74 0 R>> endobj 76 0 obj <>/Contents 77 0 R>> endobj 79 0 obj <>/Contents 80 0 R>> endobj 127 0 obj <> endobj 128 0 obj < /Dest[4 0 R/XYZ 78.3 745.4 0]/Parent 127 0 R/Next 133 0 R>> endobj 129 0 obj < /Dest[4 0 R/XYZ 85.5 655.4 0]/Parent 128 0 R/Next 130 0 R>> endobj 130 0 obj < /Dest[7 0 R/XYZ 85.5 745.3 0]/Parent 128 0 R/Prev 129 0 R/Next 131 0 R>> endobj 131 0 obj < /Dest[10 0 R/XYZ 85.5 745.3 0]/Parent 128 0 R/Prev 130 0 R/Next 132 0 R>> endobj 132 0 obj < /Dest[13 0 R/XYZ 85.5 745.3 0]/Parent 128 0 R/Prev 131 0 R>> endobj 133 0 obj < /Dest[16 0 R/XYZ 78.3 745.4 0]/Parent 127 0 R/Prev 128 0 R/Next 153 0 R>> endobj 134 0 obj < /Dest[16 0 R/XYZ 85.5 661.4 0]/Parent 133 0 R/Next 135 0 R>> endobj 135 0 obj < /Dest[22 0 R/XYZ 85.5 745.3 0]/Parent 133 0 R/Prev 134 0 R/Next 136 0 R>> endobj 136 0 obj < /Dest[25 0 R/XYZ 85.5 745.3 0]/Parent 133 0 R/Prev 135 0 R/Next 137 0 R>> endobj 137 0 obj < /Dest[28 0 R/XYZ 85.5 745.3 0]/Parent 133 0 R/Prev 136 0 R/Next 138 0 R>> endobj 138 0 obj < /Dest[31 0 R/XYZ 85.5 745.3 0]/Parent 133 0 R/Prev 137 0 R/Next 139 0 R>> endobj 139 0 obj < /Dest[34 0 R/XYZ 85.5 745.3 0]/Parent 133 0 R/Prev 138 0 R/Next 144 0 R>> endobj 140 0 obj < /Dest[34 0 R/XYZ 92.7 711.2 0]/Parent 139 0 R/Next 141 0 R>> endobj 141 0 obj < /Dest[37 0 R/XYZ 92.7 684.1 0]/Parent 139 0 R/Prev 140 0 R/Next 142 0 R>> endobj 142 0 obj < /Dest[37 0 R/XYZ 92.7 335.6 0]/Parent 139 0 R/Prev 141 0 R/Next 143 0 R>> endobj 143 0 obj < /Dest[40 0 R/XYZ 92.7 745.3 0]/Parent 139 0 R/Prev 142 0 R>> endobj 144 0 obj < /Dest[43 0 R/XYZ 85.5 745.3 0]/Parent 133 0 R/Prev 139 0 R/Next 148 0 R>> endobj 145 0 obj < /Dest[43 0 R/XYZ 92.7 638 0]/Parent 144 0 R/Next 146 0 R>> endobj 146 0 obj < /Dest[43 0 R/XYZ 92.7 386.7 0]/Parent 144 0 R/Prev 145 0 R/Next 147 0 R>> endobj 147 0 obj < /Dest[43 0 R/XYZ 92.7 251.8 0]/Parent 144 0 R/Prev 146 0 R>> endobj 148 0 obj < /Dest[46 0 R/XYZ 85.5 745.3 0]/Parent 133 0 R/Prev 144 0 R/Next 149 0 R>> endobj 149 0 obj < /Dest[49 0 R/XYZ 85.5 745.3 0]/Parent 133 0 R/Prev 148 0 R/Next 150 0 R>> endobj 150 0 obj < /Dest[52 0 R/XYZ 85.5 745.3 0]/Parent 133 0 R/Prev 149 0 R>> endobj 151 0 obj < /Dest[52 0 R/XYZ 128.2 409 0]/Parent 150 0 R/Next 152 0 R>> endobj 152 0 obj < /Dest[52 0 R/XYZ 128.2 232.7 0]/Parent 150 0 R/Prev 151 0 R>> endobj 153 0 obj < /Dest[55 0 R/XYZ 78.3 745.4 0]/Parent 127 0 R/Prev 133 0 R>> endobj 154 0 obj < /Dest[58 0 R/XYZ 85.5 745.3 0]/Parent 153 0 R/Next 155 0 R>> endobj 155 0 obj < /Dest[58 0 R/XYZ 85.5 414.8 0]/Parent 153 0 R/Prev 154 0 R/Next 156 0 R>> endobj 156 0 obj < /Dest[61 0 R/XYZ 85.5 745.3 0]/Parent 153 0 R/Prev 155 0 R/Next 160 0 R>> endobj 157 0 obj < /Dest[67 0 R/XYZ 92.7 745.3 0]/Parent 156 0 R/Next 158 0 R>> endobj 158 0 obj < /Dest[67 0 R/XYZ 92.7 530.6 0]/Parent 156 0 R/Prev 157 0 R/Next 159 0 R>> endobj 159 0 obj < /Dest[70 0 R/XYZ 92.7 745.4 0]/Parent 156 0 R/Prev 158 0 R>> endobj 160 0 obj < /Dest[73 0 R/XYZ 85.5 745.3 0]/Parent 153 0 R/Prev 156 0 R/Next 161 0 R>> endobj 161 0 obj < /Dest[76 0 R/XYZ 85.5 745.3 0]/Parent 153 0 R/Prev 160 0 R>> endobj 84 0 obj <> endobj 82 0 obj <> >> endobj 83 0 obj <> endobj 162 0 obj <> endobj 163 0 obj < /Creator /Producer /CreationDate(D:20100216025533+02'00')>> endobj xref 0 164 0000000000 65535 f 0000158943 00000 n 0000000019 00000 n 0000002671 00000 n 0000159088 00000 n 0000002692 00000 n 0000004556 00000 n 0000159233 00000 n 0000004577 00000 n 0000007988 00000 n 0000159378 00000 n 0000008009 00000 n 0000011468 00000 n 0000159525 00000 n 0000011490 00000 n 0000012472 00000 n 0000159672 00000 n 0000012493 00000 n 0000016195 00000 n 0000159837 00000 n 0000016217 00000 n 0000018473 00000 n 0000159984 00000 n 0000018495 00000 n 0000021230 00000 n 0000160131 00000 n 0000021252 00000 n 0000023519 00000 n 0000160278 00000 n 0000023541 00000 n 0000025692 00000 n 0000160425 00000 n 0000025714 00000 n 0000026254 00000 n 0000160572 00000 n 0000026275 00000 n 0000030433 00000 n 0000160719 00000 n 0000030455 00000 n 0000033322 00000 n 0000160866 00000 n 0000033344 00000 n 0000036894 00000 n 0000161013 00000 n 0000036916 00000 n 0000039867 00000 n 0000161160 00000 n 0000039889 00000 n 0000042030 00000 n 0000161307 00000 n 0000042052 00000 n 0000044812 00000 n 0000161454 00000 n 0000044834 00000 n 0000048819 00000 n 0000161601 00000 n 0000048841 00000 n 0000051690 00000 n 0000161748 00000 n 0000051712 00000 n 0000053829 00000 n 0000161895 00000 n 0000053851 00000 n 0000056298 00000 n 0000162042 00000 n 0000056320 00000 n 0000058141 00000 n 0000162189 00000 n 0000058163 00000 n 0000059838 00000 n 0000162354 00000 n 0000059860 00000 n 0000060828 00000 n 0000162501 00000 n 0000060849 00000 n 0000062111 00000 n 0000162648 00000 n 0000062133 00000 n 0000063383 00000 n 0000162795 00000 n 0000063405 00000 n 0000067015 00000 n 0000171114 00000 n 0000171275 00000 n 0000170832 00000 n 0000067037 00000 n 0000069104 00000 n 0000069126 00000 n 0000069320 00000 n 0000069611 00000 n 0000069775 00000 n 0000086449 00000 n 0000086472 00000 n 0000086674 00000 n 0000087266 00000 n 0000087709 00000 n 0000099597 00000 n 0000099620 00000 n 0000099827 00000 n 0000100290 00000 n 0000100611 00000 n 0000122251 00000 n 0000122275 00000 n 0000122472 00000 n 0000123139 00000 n 0000123652 00000 n 0000129999 00000 n 0000130022 00000 n 0000130222 00000 n 0000130600 00000 n 0000130842 00000 n 0000137387 00000 n 0000137410 00000 n 0000137615 00000 n 0000137959 00000 n 0000138175 00000 n 0000155227 00000 n 0000155251 00000 n 0000155446 00000 n 0000156103 00000 n 0000156604 00000 n 0000158093 00000 n 0000158116 00000 n 0000158309 00000 n 0000158608 00000 n 0000158776 00000 n 0000158886 00000 n 0000162942 00000 n 0000163002 00000 n 0000163295 00000 n 0000163444 00000 n 0000163650 00000 n 0000163957 00000 n 0000164135 00000 n 0000164351 00000 n 0000164541 00000 n 0000164788 00000 n 0000165023 00000 n 0000165258 00000 n 0000165517 00000 n 0000165740 00000 n 0000166014 00000 n 0000166337 00000 n 0000166608 00000 n 0000166810 00000 n 0000167041 00000 n 0000167273 00000 n 0000167532 00000 n 0000167750 00000 n 0000168025 00000 n 0000168348 00000 n 0000168534 00000 n 0000168723 00000 n 0000168922 00000 n 0000169148 00000 n 0000169374 00000 n 0000169613 00000 n 0000169864 00000 n 0000170018 00000 n 0000170181 00000 n 0000170419 00000 n 0000170634 00000 n 0000171392 00000 n 0000171509 00000 n trailer < <4CFD73664E14F97000964713C65ED1DF> ] /DocChecksum /C87BCC45932BCD123C69254390457CBB >> startxref 171759 %%EOF aprx-2.9.0/dprsgw.c000664 000000 000000 00000066277 13040775352 014156 0ustar00rootroot000000 000000 /* **************************************************************** * * * * APRX -- 2nd generation APRS iGate and digi with * * minimal requirement of esoteric facilities or * * libraries of any kind beyond UNIX system libc. * * * * (c) Matti Aarnio - OH2MQK, 2007-2014 * * * * **************************************************************** */ #include "aprx.h" #ifndef DISABLE_IGATE /* * The DPRS RX Gateway * * Receive data from DPRS. * Convert to 3rd-party frame. * Send out to APRSIS and Digipeaters. * * http://www.aprs-is.net/DPRS.aspx * * * * GPSxyz -> APRS symbols mapping: * * http://www.aprs.org/symbols/symbolsX.txt */ typedef struct dprsgw_history { time_t gated; char callsign[10]; } dprsgw_history_t; // Up to 30 history entries to not to send same callsign too often #define HISTORYSIZE 30 typedef struct dprs_gw { char *ggaline; char *rmcline; int ggaspace; int rmcspace; int historylimit; // Time limit in seconds dprsgw_history_t history[HISTORYSIZE]; } dprsgw_t; // The dprslog() logs ONLY when '-d' mode is running. // .. and it will be removed soon. const char *dprslogfile; void dprslog( const time_t stamp, const uint8_t *buf ) { if (dprslogfile == NULL) return; // Nothing to do FILE *fp = fopen(dprslogfile,"a"); if (fp != NULL) { fprintf(fp, "%ld\t%s\n", stamp, (const char *)buf); fclose(fp); } } static void dprsgw_flush(dprsgw_t *dp) { if (dp->ggaline == NULL) { dp->ggaspace = 200; dp->ggaline = malloc(200); } if (dp->rmcline == NULL) { dp->rmcspace = 200; dp->rmcline = malloc(200); } dp->ggaline[0] = 0; dp->rmcline[0] = 0; } static void *dprsgw_new(int historylimit) { dprsgw_t *dp = calloc(1, sizeof(*dp)); dp->historylimit = historylimit; dprsgw_flush(dp); // init buffers return dp; } // Ratelimit returns 0 for "can send", 1 for "too soon" static int dprsgw_ratelimit( dprsgw_t *dp, const void *tnc2buf ) { int i, n; char callsign[10]; time_t expiry = tick.tv_sec - dp->historylimit; memcpy(callsign, tnc2buf, sizeof(callsign)); callsign[sizeof(callsign)-1] = 0; for (i = 0; i < sizeof(callsign); ++i) { char c = callsign[i]; if (c == '>') { callsign[i] = 0; break; } } n = -1; for (i = 0; i < HISTORYSIZE; ++i) { // Is there an entry? if (dp->history[i].callsign[0] == 0) continue; if ((dp->history[i].gated - tick.tv_sec) > 0) { // system time has jumped backwards, expire it. dp->history[i].gated = expiry; } if ((dp->history[i].gated - expiry) > 0) { // Fresh enough to be interesting! if (strcmp(dp->history[i].callsign, callsign) == 0) { // This callsign! return 1; } } else { dp->history[i].callsign[0] = 0; // discard it.. if (n < 0) n = i; // save first free slot's index } } if (n >= 0) { memcpy(dp->history[n].callsign, callsign, sizeof(callsign)); dp->history[n].gated = tick.tv_sec; } return 0; } typedef struct gps2apr_syms { const char gps[3]; const char aprs[3]; int flags; } gps2aprs_syms_t; // FIXME: Some symbols have 3 characters, // others take 3rd as overlay... // Add control flags below! static const gps2aprs_syms_t gps2aprsSyms[] = { { "A0", "\\0", 0 }, { "A1", "\\1", 0 }, { "A2", "\\2", 0 }, { "A3", "\\3", 0 }, { "A4", "\\4", 0 }, { "A5", "\\5", 0 }, { "A6", "\\6", 0 }, { "A7", "\\7", 0 }, { "A8", "\\8", 0 }, { "A9", "\\9", 0 }, { "AA", "\\A", 0 }, { "AB", "\\B", 0 }, { "AC", "\\C", 0 }, { "AD", "\\D", 0 }, { "AE", "\\E", 0 }, { "AF", "\\F", 0 }, { "AG", "\\G", 0 }, { "AH", "\\H", 0 }, { "AI", "\\I", 0 }, { "AJ", "\\J", 0 }, { "AK", "\\K", 0 }, { "AL", "\\L", 0 }, { "AM", "\\M", 0 }, { "AN", "\\N", 0 }, { "AO", "\\O", 0 }, { "AP", "\\P", 0 }, { "AQ", "\\Q", 0 }, { "AR", "\\R", 0 }, { "AS", "\\S", 0 }, { "AT", "\\T", 0 }, { "AU", "\\U", 0 }, { "AV", "\\V", 0 }, { "AW", "\\W", 0 }, { "AX", "\\X", 0 }, { "AY", "\\Y", 0 }, { "AZ", "\\Z", 0 }, { "BB", "/!", 0 }, { "BC", "/\"", 0 }, { "BD", "/#", 0 }, { "BE", "/$", 0 }, { "BF", "/%", 0 }, { "BG", "/&", 0 }, { "BH", "/'", 0 }, { "BI", "/(", 0 }, { "BJ", "/)", 0 }, { "BK", "/*", 0 }, { "BL", "/+", 0 }, { "BM", "/,", 0 }, { "BN", "/-", 0 }, { "BO", "/.", 0 }, { "BP", "//", 0 }, { "DS", "\\[", 0 }, { "DT", "\\\\", 0 }, { "DU", "\\]", 0 }, { "DV", "\\^", 0 }, { "DW", "\\_", 0 }, { "DX", "\\`", 0 }, { "HS", "/[", 0 }, { "HT", "/\\", 0 }, { "HU", "/]", 0 }, { "HV", "/^", 0 }, { "HW", "/_", 0 }, { "HX", "/`", 0 }, { "J1", "/{", 0 }, { "J2", "/|", 0 }, { "J3", "/}", 0 }, { "J4", "/~", 0 }, { "LA", "/a", 0 }, { "LB", "/b", 0 }, { "LC", "/c", 0 }, { "LD", "/d", 0 }, { "LE", "/e", 0 }, { "LF", "/f", 0 }, { "LG", "/g", 0 }, { "LH", "/h", 0 }, { "LI", "/i", 0 }, { "LJ", "/j", 0 }, { "LK", "/k", 0 }, { "LL", "/l", 0 }, { "LM", "/m", 0 }, { "LN", "/n", 0 }, { "LO", "/o", 0 }, { "LP", "/p", 0 }, { "LQ", "/q", 0 }, { "LR", "/r", 0 }, { "LS", "/s", 0 }, { "LT", "/t", 0 }, { "LU", "/u", 0 }, { "LV", "/v", 0 }, { "LW", "/w", 0 }, { "LX", "/x", 0 }, { "LY", "/y", 0 }, { "LZ", "/z", 0 }, { "MR", "/:", 0 }, { "MS", "/;", 0 }, { "MT", "/<", 0 }, { "MU", "/=", 0 }, { "MV", "/>", 0 }, { "MW", "/?", 0 }, { "MX", "/@", 0 }, { "NR", "\\:", 0 }, { "NS", "\\;", 0 }, { "NT", "\\<", 0 }, { "NU", "\\=", 0 }, { "NV", "\\>", 0 }, { "NW", "\\?", 0 }, { "NX", "\\@", 0 }, { "OB", "\\!", 0 }, { "OC", "\\\"", 0 }, { "OD", "\\#", 0 }, { "OE", "\\$", 0 }, { "OF", "\\%", 0 }, { "OG", "\\&", 0 }, { "OH", "\\'", 0 }, { "OI", "\\(", 0 }, { "OJ", "\\)", 0 }, { "OK", "\\*", 0 }, { "OL", "\\+", 0 }, { "OM", "\\,", 0 }, { "ON", "\\-", 0 }, { "OO", "\\.", 0 }, { "OP", "\\/", 0 }, { "P0", "/0", 0 }, { "P1", "/1", 0 }, { "P2", "/2", 0 }, { "P3", "/3", 0 }, { "P4", "/4", 0 }, { "P5", "/5", 0 }, { "P6", "/6", 0 }, { "P7", "/7", 0 }, { "P8", "/8", 0 }, { "P9", "/9", 0 }, { "PA", "/A", 0 }, { "PB", "/B", 0 }, { "PC", "/C", 0 }, { "PD", "/D", 0 }, { "PE", "/E", 0 }, { "PF", "/F", 0 }, { "PG", "/G", 0 }, { "PH", "/H", 0 }, { "PI", "/I", 0 }, { "PJ", "/J", 0 }, { "PK", "/K", 0 }, { "PL", "/L", 0 }, { "PM", "/M", 0 }, { "PN", "/N", 0 }, { "PO", "/O", 0 }, { "PP", "/P", 0 }, { "PQ", "/Q", 0 }, { "PR", "/R", 0 }, { "PS", "/S", 0 }, { "PT", "/T", 0 }, { "PU", "/U", 0 }, { "PV", "/V", 0 }, { "PW", "/W", 0 }, { "PX", "/X", 0 }, { "PY", "/Y", 0 }, { "PZ", "/Z", 0 }, { "Q1", "\\{", 0 }, { "Q2", "\\|", 0 }, { "Q3", "\\}", 0 }, { "Q4", "\\~", 0 }, { "SA", "\\a", 0 }, { "SB", "\\b", 0 }, { "SC", "\\c", 0 }, { "SD", "\\d", 0 }, { "SE", "\\e", 0 }, { "SF", "\\f", 0 }, { "SG", "\\g", 0 }, { "SH", "\\h", 0 }, { "SI", "\\i", 0 }, { "SJ", "\\j", 0 }, { "SK", "\\k", 0 }, { "SL", "\\l", 0 }, { "SM", "\\m", 0 }, { "SN", "\\n", 0 }, { "SO", "\\o", 0 }, { "SP", "\\p", 0 }, { "SQ", "\\q", 0 }, { "SR", "\\r", 0 }, { "SS", "\\s", 0 }, { "ST", "\\t", 0 }, { "SU", "\\u", 0 }, { "SV", "\\v", 0 }, { "SW", "\\w", 0 }, { "SX", "\\x", 0 }, { "SY", "\\y", 0 }, { "SZ", "\\z", 0 }, }; static int gps2aprs_syms_count = sizeof(gps2aprsSyms) / sizeof(gps2aprsSyms[0]); static int parse_gps2aprs_symbol(const char *gpsxxx, char *aprssymbol) { int i, mid, high, low; char gps[3]; gps[0] = gpsxxx[0]; gps[1] = gpsxxx[1]; gps[2] = 0; low = 0; high = gps2aprs_syms_count-1; while (low < high) { mid = (low + high) >> 1; // divide by 2 i = strcmp(gps, gps2aprsSyms[mid].gps); // if (debug) printf("GPS2APRS: '%s' '%s', low=%d mid=%d high=%d\n",gps, gps2aprsSyms[mid].gps, low, mid, high); if (i == 0) { // Exact match char c3 = gpsxxx[2]; strcpy(aprssymbol, gps2aprsSyms[mid].aprs); if (c3 != 0 && c3 != ' ' && aprssymbol[0] != '/') { // FIXME: overlay ??? aprssymbol[0] = c3; } return 0; } if (i > 0) { low = mid+1; } else { high = mid-1; } } return i; } // The "Specification" says to use this checksum method.. // It uses right-left inverted version of the polynome // of CCITT-CRC-16 but in the end it INVERTS the result! // Thus the result is NOT CCITT-CRC-16, but something // uniquely ICOM D-STAR.. /* static int dprsgw_crccheck( const uint8_t *s, int len ) { int icomcrc = 0xffff; for ( ; len > 0; ++s, --len) { uint8_t ch = *s; int i; for (i = 0; i < 8; i++) { int xorflag = (icomcrc ^ ch) & 0x01; icomcrc >>= 1; if (xorflag) icomcrc ^= 0x8408; ch >>= 1; } } return (~icomcrc) & 0xffff; } */ static int dprsgw_isvalid( struct serialport *S ) { int i; if (S->rdlinelen < 20) { if (debug) printf("Too short a line for DPRS"); return 0; // definitely not! } if (memcmp("$$CRC", S->rdline, 5) == 0 && S->rdline[9] == ',') { // Maybe a $$CRCB727,OH3BK-D>APRATS,DSTAR*:@165340h6128.23N/02353.52E-D-RATS (GPS-A) /A=000377 int crc; int csum = -1; int crc16; S->rdline[S->rdlinelen] = '\r'; crc16 = calc_crc_ccitt(0xFFFF, S->rdline+10, S->rdlinelen+1-10); // INCLUDE the CR on CRC calculation! crc = (crc16 ^ 0xFFFF); // Output is INVERTED S->rdline[S->rdlinelen] = 0; i = sscanf((const char*)(S->rdline), "$$CRC%04x,", &csum); if (i != 1 || csum != crc) { if (debug) printf("Bad DPRS APRS CRC: l=%d, i=%d, %04x/%04x vs. %s\n", S->rdlinelen, i, crc, csum, S->rdline); // return 0; } else { if (debug>1) printf("$$CRC DSTAR=%04x CCITT-X25-FCS=%04x\n", csum, crc16); if (debug) printf("Good DPRS APRS CRC: l=%d, i=%d, %04x/%04x vs. %s\n", S->rdlinelen, i, crc, csum, S->rdline); return 1; } return 0; } else if (memcmp("$GP", S->rdline, 3) == 0) { // Maybe $GPRMC,170130.02,A,6131.6583,N,02339.1552,E,0.00,154.8,290510,6.5,E,A*02 ? int xor = 0; int csum = -1; char c; // if (debug) printf("NMEA: '%s'\n", S->rdline); for (i = 1; i < S->rdlinelen; ++i) { c = S->rdline[i]; if (c == '*' && (i >= S->rdlinelen - 3)) { break; } xor ^= c; } xor &= 0xFF; if (i != S->rdlinelen -3 || S->rdline[i] != '*') return 0; // Wrong place to stop if (sscanf((const char *)(S->rdline+i), "*%02x%c", &csum, &c) != 1) { return 0; // Too little or too much } if (xor != csum) { if (debug) printf("Bad DPRS $GP... checksum: %02x vs. %02x\n", csum, xor); return 0; } return 1; } else { int xor = 0; int csum = -1; char c; // .. uh? maybe? Precisely 29 characters: // "OH3KGR M, " if (S->rdlinelen != 29 || S->rdline[8] != ',') { if (debug) printf("Bad DPRS identification(?) packet - length(%d) != 29 || line[8] != ',': %s\n", S->rdlinelen, S->rdline); return 0; } if (debug) printf("DPRS NMEA: '%s'\n", S->rdline); for (i = 0; i < S->rdlinelen; ++i) { c = S->rdline[i]; if (c == '*') { break; } xor ^= c; } xor &= 0xFF; if (sscanf((const char *)(S->rdline+i), "*%x%c", &csum, &c) < 1) { if (memcmp(S->rdline+8, ", ", 21) == 0) { if (debug) printf("DPRS IDENT LINE OK: '%s'\n", S->rdline); return 1; } // if (debug) printf("csum bad NMEA: '%s'\n", S->rdline); return 0; // Too little or too much } if (xor != csum) { if (debug) printf("Bad DPRS IDENT LINE checksum: %02x vs. %02x\n", csum, xor); return 0; } if (debug) printf("DPRS IDENT LINE OK: '%s'\n", S->rdline); // if (debug) printf("csum valid NMEA: '%s'\n", S->rdline); return 1; // Maybe valid? } } // Split NMEA text line at ',' characters static int dprsgw_nmea_split(char *nmea, char *fields[], int n) { int i = 0; --n; fields[i] = nmea; for ( ; *nmea; ++nmea ) { for ( ; *nmea != 0 && *nmea != ','; ++nmea ) ; if (*nmea == 0) break; // THE END! if (*nmea == ',') *nmea++ = 0; // COMMA terminates a field, change to SPACE if (i < n) ++i; // Prep next field index fields[i] = nmea; // save field pointer } fields[i] = NULL; return i; } static void dprsgw_nmea_igate( const struct aprx_interface *aif, const uint8_t *ident, dprsgw_t *dp ) { int i; char *gga[20]; char *rmc[20]; char tnc2buf[2000]; int tnc2addrlen; int tnc2buflen; char *p, *p2; const char *p0; const char *s; int alt_feet = -9999999; char aprssym[3]; if (debug) { printf(" DPRS: ident='%s', GGA='%s', RMC='%s'\n", ident, dp->ggaline, dp->rmcline); } strcpy(aprssym, "/>"); // Default.. parse_gps2aprs_symbol((const char *)ident+9, aprssym); memset(gga, 0, sizeof(gga)); memset(rmc, 0, sizeof(rmc)); // $GPGGA,hhmmss.dd,xxmm.dddd,,yyymm.dddd,,v, // ss,d.d,h.h,M,g.g,M,a.a,xxxx*hh // $GPRMC,hhmmss.dd,S,xxmm.dddd,,yyymm.dddd,, // s.s,h.h,ddmmyy,d.d, ,M*hh // ,S, = Status: 'A' = Valid, 'V' = Invalid if (dp->ggaline[0] != 0) dprsgw_nmea_split(dp->ggaline, gga, 20); if (dp->rmcline[0] != 0) dprsgw_nmea_split(dp->rmcline, rmc, 20); if (rmc[2] != NULL && strcmp(rmc[2],"A") != 0) { if (debug) printf("Invalid DPRS $GPRMC packet (validity='%s')\n", rmc[2]); return; } if (gga[6] != NULL && strcmp(gga[6],"1") != 0) { if (debug) printf("Invalid DPRS $GPGGA packet (validity='%s')\n", gga[6]); return; } if (dp->ggaline[0] == 0 && dp->rmcline[0] == 0) { if (debug) printf("No DPRS $GPRMC nor $GPGGA packets available.\n"); return; } p = tnc2buf; for (i = 0; i < 8; ++i) { if (ident[i] == ' ') { *p++ = '-'; for ( ; ident[i+1] == ' ' && i < 8; ++i ); continue; } *p++ = ident[i]; } if (p > tnc2buf && p[-1] == '-') --p; p += sprintf(p, ">APDPRS,DSTAR*"); tnc2addrlen = p - tnc2buf; *p++ = ':'; *p++ = '!'; // Std position w/o messaging p2 = p; if (gga[2] != NULL) { s = gga[2]; } else if (rmc[3] != NULL) { s = rmc[3]; } else { // No coordinate! if (debug) printf("dprsgw: neither GGA nor RMC coordinates available, discarding!\n"); return; } p0 = strchr(s, '.'); if (!p0) { if (debug) printf("dprsgw: invalid format NMEA North coordinate: '%s'\n", s); return; } while (p0 - s < 4) { *p++ = '0'; ++p0; // move virtually } p += sprintf(p, "%s", s); if (p2+7 < p) { // Too long! p = p2+7; } while (p2+7 > p) { // Too short! *p++ = ' '; // unprecise position } if (gga[2] != NULL) { s = gga[3]; // } else if (rmc[3] != NULL) { s = rmc[4]; // } p += sprintf(p, "%s", s); *p++ = aprssym[0]; p2 = p; if (gga[2] != NULL) { s = gga[4]; // yyymm.dddd } else if (rmc[3] != NULL) { s = rmc[5]; // yyymm.dddd } p0 = strchr(s, '.'); if (!p0) { if (debug) printf("dprsgw: invalid format NMEA East coordinate: '%s'\n", s); return; } while (p0 - s < 5) { *p++ = '0'; ++p0; // move virtually } p += sprintf(p, "%s", s); if (p2+8 < p) { // Too long! p = p2+8; } while (p2+8 > p) { // Too short! *p++ = ' '; // unprecise position } if (gga[2] != NULL) { p += sprintf(p, "%s", gga[5]); // } else if (rmc[3] != NULL) { p += sprintf(p, "%s", rmc[6]); // } *p++ = aprssym[1]; // DPRS: ident='OH3BK D,BN *59 ', GGA='$GPGGA,204805,6128.230,N,2353.520,E,1,3,0,115,M,0,M,,*6d', RMC='' // DPRSGW GPS data: OH3BK-D>APDPRS,DSTAR*:!6128.23N/02353.52E> if (gga[2] != NULL) { if (gga[9] != NULL && gga[9][0] != 0) alt_feet = strtol(gga[9], NULL, 10); if (strcmp(gga[10],"M") == 0) { // Meters! Convert to feet.. alt_feet = (10000 * alt_feet) / 3048; } else { // Already feet - presumably } } // FIXME: more data! // RMC HEADING/SPEED p0 = (const char *)ident + 29; s = (const char *)ident + 9+4; p2 = p; for ( ; s < p0; ++s ) { if (*s != ' ') break; } if (s < p0) *p++ = ' '; for ( ; s < p0; ++s ) { if (*s == '*') break; *p++ = *s; } if (p > p2) *p++ = ' '; if (alt_feet > -9999999) { p += sprintf(p, "/A=%06d", alt_feet); } *p = 0; tnc2buflen = p - tnc2buf; if (debug) printf("DPRSGW GPS data: %s\n", tnc2buf); if (!dprsgw_ratelimit( dp, tnc2buf )) { char *b; if (aif != NULL) { igate_to_aprsis( aif->callsign, 0, (const char *)tnc2buf, tnc2addrlen, tnc2buflen, 0, 0); // Bytes have been counted previously, now count meaningful packet erlang_add(aif->callsign, ERLANG_RX, 0, 1); } char *heads[2]; heads[0] = tnc2buf; p = heads[0]; heads[1] = NULL; while (*p != '>' && *p != 0) ++p; if (*p == '>') { *p++ = 0; heads[1] = p; } else return; // BAD :-( p = heads[1]; while (p != NULL && *p != ':' && *p != 0 && *p != ',') ++p; if (p != NULL && (*p == ':' || *p == ',')) { *p++ = 0; } b = tnc2buf + tnc2addrlen +1; interface_receive_3rdparty( aif, heads, 2, "DSTAR*", b, tnc2buflen - (b-tnc2buf) ); } } static void dprsgw_rxigate( struct serialport *S ) { const struct aprx_interface *aif = S->interface[0]; uint8_t *tnc2addr = S->rdline; int tnc2addrlen = S->rdlinelen; uint8_t *tnc2body = S->rdline; int tnc2bodylen = S->rdlinelen; #ifndef DPRSGW_DEBUG_MAIN if (aif == NULL) { if (debug) printf("OOPS! NO ON DPRS SERIAL PORT! BUG!\n"); return; } #endif if (memcmp("$$CRC", tnc2addr, 5) == 0 && tnc2addrlen > 20) { tnc2addr += 10; tnc2addrlen -= 10; tnc2bodylen -= 10; // header + body together tnc2body = memchr( tnc2addr, ':', tnc2addrlen); if (tnc2body != NULL) { char *heads[2]; char *s; tnc2addrlen = tnc2body - tnc2addr; ++tnc2body; if (dprsgw_ratelimit(S->dprsgw, tnc2addr)) { // Rate-limit ordered rejection return; } // Acceptable packet, Rx-iGate it! igate_to_aprsis( aif->callsign, 0, (const char *)tnc2addr, tnc2addrlen, tnc2bodylen, 0, 0); // Bytes have been counted previously, now count meaningful packet erlang_add( aif->callsign, ERLANG_RX, 0, 1 ); heads[0] = (char*)tnc2addr; s = heads[0]; heads[1] = NULL; while (*s != '>' && *s != 0) ++s; if (*s == '>') { *s++ = 0; heads[1] = s; } else return; // BAD :-( s = heads[1]; while (s != NULL && *s != ':' && *s != 0 && *s != ',') ++s; if (s != NULL && (*s == ':' || *s == ',')) { *s++ = 0; } interface_receive_3rdparty( aif, heads, 2, "DSTAR*", (const char*)tnc2body, tnc2bodylen - (tnc2body-tnc2addr) ); return; } else { // Bad packet! if (debug) printf("Bad DPRS packet! %s\n", S->rdline); return; } } else if (memcmp("$GPGGA,", tnc2addr, 7) == 0) { dprsgw_t *dp = S->dprsgw; if (dp->ggaspace <= S->rdlinelen) { dp->ggaline = realloc(dp->ggaline, S->rdlinelen+1); dp->ggaspace = S->rdlinelen; } memcpy(dp->ggaline, tnc2addr, tnc2bodylen); dp->ggaline[tnc2bodylen] = 0; if (debug) printf("DPRS GGA: %s\n", dp->ggaline); } else if (memcmp("$GPRMC,", tnc2addr, 7) == 0) { dprsgw_t *dp = S->dprsgw; if (dp->rmcspace <= S->rdlinelen) { dp->rmcline = realloc(dp->rmcline, S->rdlinelen+1); dp->rmcspace = S->rdlinelen; } memcpy(dp->rmcline, tnc2addr, tnc2bodylen); dp->rmcline[tnc2bodylen] = 0; if (debug) printf("DPRS RMC: %s\n", dp->rmcline); } else if (tnc2addr[8] == ',' && tnc2bodylen == 29) { // Acceptable DPRS "ident" line dprsgw_t *dp = S->dprsgw; tnc2addr[tnc2bodylen] = 0; // zero-terminate just in case dprsgw_nmea_igate(aif, tnc2addr, dp); } else { // this should never be called... if (debug) printf("Unrecognized DPRS packet: %s\n", S->rdline); return; } } /* * Receive one text line from serial port * It will end with 0x00 byte, and not contain \r nor \n. * * It MAY have junk at the start. * * */ static void dprsgw_receive( struct serialport *S ) { int i; uint8_t *p; if (debug) dprslog(S->rdline_time, S->rdline); do { if (dprsgw_isvalid(S)) { // Feed it to DPRS-APRS-GATE dprsgw_rxigate( S ); return; // Done! } else { // Not a good packet! See if there is a good packet inside? dprsgw_flush(S->dprsgw); // bad input -> discard accumulated data p = memchr(S->rdline+1, '$', S->rdlinelen-1); if (p == NULL) break; // No '$' to start something i = S->rdlinelen - (p - S->rdline); if (i <= 0) break; // exhausted! S->rdlinelen = i; memcpy(S->rdline, p, S->rdlinelen); S->rdline[i] = 0; continue; } } while(1); } /* * Receive more data from DPRS type serial port * This handles correct data accumulation and sync hunting */ int dprsgw_pulldprs( struct serialport *S ) { const time_t rdtime = S->rdline_time; const struct aprx_interface *aif = S->interface[0]; int c; int i; // Account all received bytes, this may or may not be a packet erlang_add(aif->callsign, ERLANG_RX, S->rdlinelen, 0); if (S->dprsgw == NULL) S->dprsgw = dprsgw_new(30); // FIXME: hard-coded 30 second delay for DPRS repeats if ((rdtime+2 - tick.tv_sec) < 0) { // A timeout has happen? (2 seconds!) Either data is added constantly, // or nothing was received from DPRS datastream! if (S->rdlinelen > 0) if (debug)printf("dprsgw: previous data is %d sec old, discarding its state: %s\n",((int)(tick.tv_sec-rdtime)), S->rdline); S->rdline[S->rdlinelen] = 0; if (S->rdlinelen > 0 && debug) dprslog(rdtime, S->rdline); S->rdlinelen = 0; dprsgw_flush(S->dprsgw); // timeout -> discard accumulated data } S->rdline_time = tick.tv_sec; for (i=0 ; ; ++i) { c = ttyreader_getc(S); if (c < 0) { // if (debug) printf("dprsgw_pulldprs: read %d chars\n", i); return c; /* Out of input.. */ } if (debug>2) printf("DPRS %ld %3d %02X '%c'\n", tick.tv_sec, S->rdlinelen, c, c); /* S->dprsstate != 0: read data into S->rdline, == 0: discard data until CR|LF. Zero-size read line is discarded as well (only CR|LF on input frame) */ /* Looking for CR or LF.. */ if (c == '\n' || c == '\r') { /* End of line seen! */ if (S->rdlinelen > 0) { /* Non-zero-size string, put terminating 0 byte on it. */ S->rdline[S->rdlinelen] = 0; dprsgw_receive(S); } S->rdlinelen = 0; continue; } // A '$' starts possible data.. if (c == '$' && S->rdlinelen == 0) { S->rdline[S->rdlinelen++] = c; continue; } // More fits in? if (S->rdlinelen >= sizeof(S->rdline)-3) { // Too long a line... do { int len; uint8_t *p; dprsgw_flush(S->dprsgw); // Look for first '$' in buffer _after_ first char p = memchr(S->rdline+1, '$', S->rdlinelen-1); if (!p) { S->rdlinelen = 0; break; // Not found } len = S->rdlinelen - (p - S->rdline); if (len <= 0) { S->rdlinelen = 0; break; // exhausted } memcpy(S->rdline, p, len); S->rdline[len] = 0; S->rdlinelen = len; if (len >= 3) { if (memcmp("$$C", S->rdline, 3) != 0 && memcmp("$GP", S->rdline, 3) != 0) { // Not acceptable 3-char prefix // Eat away the collected prefixes.. continue; } } break; } while(1); } S->rdline[S->rdlinelen++] = c; /* // Too short to say anything? if (S->rdlinelen < 3) { continue; } if (S->rdlinelen == 3 && (memcmp("$$C", S->rdline, 3) != 0 && memcmp("$GP", S->rdline, 3) != 0)) { // No correct start, discard... dprsgw_flush(S->dprsgw); S->rdlinelen = 2; memcpy(S->rdline, S->rdline+1, 2); S->rdline[S->rdlinelen] = 0; if (S->rdline[0] != '$') { // Didn't start with a '$' S->rdlinelen = 0; } continue; } */ } /* .. input loop */ return 0; /* not reached */ } int dprsgw_prepoll(struct aprxpolls *app) { return 0; // returns number of sockets filled (ignored at caller) } int dprsgw_postpoll(struct aprxpolls *app) { return 0; // returns number of sockets filled (ignored at caller) } #ifdef DPRSGW_DEBUG_MAIN int freadln(FILE *fp, char *p, int buflen) // DPRSGW_DEBUG_MAIN { int n = 0; while (!feof(fp)) { int c = fgetc(fp); if (c == EOF) break; if (n >= buflen) break; *p++ = c; ++n; if (c == '\n') break; if (c == '\r') break; } return n; } int ttyreader_getc(struct serialport *S) // DPRSGW_DEBUG_MAIN { if (S->rdcursor >= S->rdlen) { /* Out of data ? */ if (S->rdcursor) S->rdcursor = S->rdlen = 0; /* printf("-\n"); */ return -1; } /* printf(" %02X", 0xFF & S->rdbuf[S->rdcursor++]); */ return (0xFF & S->rdbuf[S->rdcursor++]); } void igate_to_aprsis(const char *portname, const int tncid, const char *tnc2buf, int tnc2addrlen, int tnc2len, const int discard, const int strictax25_) // DPRSGW_DEBUG_MAIN { printf("DPRS RX-IGATE: %s\n", tnc2buf); } void interface_receive_3rdparty(const struct aprx_interface *aif, char **heads, int headscount, const char *gwtype, const char *tnc2data, const int tnc2datalen) // DPRSGW_DEBUG_MAIN { printf("DPRS 3RDPARTY RX: ....:}%s>%s,%s,GWCALLSIGN*:%s\n", heads[0], heads[1], gwtype, tnc2data); } int debug = 3; struct timeval tick; int main(int argc, char *argv[]) { struct serialport S; memset(&S, 0, sizeof(S)); #if 0 // A test where string has initially some incomplete data, then finally a real data printf("\nFIRST TEST\n"); strcpy((void*)S.rdline, "x$x4$GPPP$$$GP $$CRCB727,OH3BK-D>$$CRCB727,OH3BK-D>APRATS,DSTAR*:@165340h6128.23N/02353.52E-D-RATS (GPS-A) /A=000377"); S.rdlinelen = strlen((void*)S.rdline); dprsgw_receive(&S); printf("\nSECOND TEST\n"); strcpy((void*)S.rdline, "\304\3559\202\333$$CRCC3F5,OH3KGR-M>API282,DSTAR*:/123035h6131.29N/02340.45E>/IC-E2820"); S.rdlinelen = strlen((void*)S.rdline); dprsgw_receive(&S); printf("\nTHIRD TEST\n"); strcpy((void*)S.rdline, "[SOB]\"=@=@=@=>7\310=@\010!~~~~~~~!~~~~~~~\001\001\001\001\001\001\001\001[EOB]$$CRCBFB7,OH3BK>APRATS,DSTAR*:@124202h6128.23N/02353.52E-D-RATS (GPS-A) /A=000377"); S.rdlinelen = strlen((void*)S.rdline); dprsgw_receive(&S); printf("\nTEST 4.\n"); strcpy((void*)S.rdline, "$GPGGA,164829.02,6131.6572,N,02339.1567,E,1,08,1.1,111.3,M,19.0,M,,*61"); S.rdlinelen = strlen((void*)S.rdline); dprsgw_receive(&S); printf("\nTEST 5.\n"); strcpy((void*)S.rdline, "$GPRMC,170130.02,A,6131.6583,N,02339.1552,E,0.00,154.8,290510,6.5,E,A*02"); // strcpy((void*)S.rdline, "$GPRMC,164830.02,A,6131.6572,N,02339.1567,E,0.00,182.2,290510,6.5,E,A*07"); S.rdlinelen = strlen((void*)S.rdline); dprsgw_receive(&S); printf("\nTEST 6.\n"); strcpy((void*)S.rdline, "OH3BK D,BN *59 "); S.rdlinelen = strlen((void*)S.rdline); dprsgw_receive(&S); #endif S.ttyname = "testfile"; S.ttycallsign[0] = "OH2MQK-DR"; FILE *fp = fopen("tt.log", "r"); for (;;) { char buf1[3000]; int n = freadln(fp, buf1, sizeof(buf1)); if (n == 0) break; char *ep; tick.tv_sec = strtol(buf1, &ep, 10); // test code time init if (*ep == '\t') ++ep; int len = n - (ep - buf1); if (len > 0) { memcpy(S.rdbuf+S.rdlen, ep, len); S.rdlen += len; } if (S.rdlen > 0) dprsgw_pulldprs(&S); } fclose(fp); return 0; } #endif #endif aprx-2.9.0/dupecheck.c000664 000000 000000 00000027416 13040775352 014573 0ustar00rootroot000000 000000 /* **************************************************************** * * * * APRX -- 2nd generation APRS iGate and digi with * * minimal requirement of esoteric facilities or * * libraries of any kind beyond UNIX system libc. * * * * (c) Matti Aarnio - OH2MQK, 2007-2014 * * * * **************************************************************** */ #include "aprx.h" /* * Some parts of this code are copied from: * * aprsc * * (c) Heikki Hannikainen, OH7LZB * * This program is licensed under the BSD license, which can be found * in the file LICENSE. * */ /* * dupecheck.c: the dupe-checkers */ static int dupecheck_cellgauge; static int dupecheckers_count; static dupecheck_t **dupecheckers; #ifndef _FOR_VALGRIND_ cellarena_t *dupecheck_cells; #endif const int duperecord_size = sizeof(struct dupe_record_t); const int duperecord_align = __alignof__(struct dupe_record_t); /* * The cellmalloc does not need internal MUTEX, it is being used in single thread.. */ void dupecheck_init(void) { #ifndef _FOR_VALGRIND_ dupecheck_cells = cellinit( "dupecheck", duperecord_size, duperecord_align, CELLMALLOC_POLICY_LIFO | CELLMALLOC_POLICY_NOMUTEX, 4 /* 4 kB at the time */, 0 /* minfree */); #endif } /* * dupecheck_new() creates a new instance of dupechecker * */ dupecheck_t *dupecheck_new(const int storetime) { dupecheck_t *dp = calloc(1, sizeof(dupecheck_t)); ++dupecheckers_count; dupecheckers = realloc(dupecheckers, sizeof(dupecheck_t *) * dupecheckers_count); dupecheckers[ dupecheckers_count -1 ] = dp; dp->storetime = storetime; return dp; } static dupe_record_t *dupecheck_db_alloc(int alen, int pktlen) { dupe_record_t *dp; #ifndef _FOR_VALGRIND_ // if (debug) printf("DUPECHECK db alloc(alen=%d,dlen=%d) %s", // alen,pktlen, dupecheck_free ? "FreeChain":"CellMalloc"); dp = cellmalloc(dupecheck_cells); // if (debug) printf(" dp=%p\n",dp); if (dp == NULL) return NULL; // cellmalloc() block may need separate pktbuf memset(dp, 0, sizeof(*dp)); dp->packet = dp->packetbuf; if (pktlen > sizeof(dp->packetbuf)) dp->packet = malloc(pktlen+1); #else // directly malloced block is fine as is dp = calloc(1, pktlen + sizeof(*dp)); dp->packet = dp->packetbuf; // always suitable size #endif dp->alen = alen; dp->plen = pktlen; ++dupecheck_cellgauge; dupecheck_get(dp); // increment refcount // if(debug)printf("DUPECHECK db alloc() returning dp=%p\n",dp); return dp; } static void dupecheck_db_free(dupe_record_t *dp) { if (dp->pbuf != NULL) { // If a pbuf is referred, release it pbuf_put(dp->pbuf); // decrements refcount - and frees at zero. dp->pbuf = NULL; } #ifndef _FOR_VALGRIND_ if (dp->packet != dp->packetbuf) free(dp->packet); cellfree(dupecheck_cells, dp); #else free(dp); #endif --dupecheck_cellgauge; } // Increment refcount dupe_record_t *dupecheck_get(dupe_record_t *dp) { dp->refcount += 1; return dp; } // Decrement refcount, when zero, call free void dupecheck_put(dupe_record_t *dp) { dp->refcount -= 1; if (dp->refcount <= 0) { dupecheck_db_free(dp); } } /* The dupecheck_cleanup() is for regular database cleanups, * Call this about once a minute. * * Note: entry validity is possibly shorter time than the cleanup * invocation interval! */ static void dupecheck_cleanup(void) { dupe_record_t *dp, **dpp; int cleancount = 0, i, d; // All dupecheckers.. for (d = 0; d < dupecheckers_count; ++d) { // Within this dupechecker... struct dupecheck_t *dpc = dupecheckers[d]; for (i = 0; i < DUPECHECK_DB_SIZE; ++i) { dpp = & (dpc->dupecheck_db[i]); while (( dp = *dpp )) { if ((dp->t_exp - tick.tv_sec) < 0) { /* Old.. discard. */ *dpp = dp->next; dp->next = NULL; dupecheck_put(dp); ++cleancount; continue; } /* No expiry, just advance the pointer */ dpp = &dp->next; } } } // hlog( LOG_DEBUG, "dupecheck_cleanup() removed %d entries, count now %ld", // cleancount, dupecheck_cellgauge ); } /* * Check a single packet for duplicates in APRS sense * The addr/alen must be in TNC2 monitor format, data/dlen * are expected to be APRS payload as well. */ dupe_record_t *dupecheck_aprs(dupecheck_t *dpc, const char *addr, const int alen, const char *data, const int dlen) { /* check a single packet */ // pb->flags |= F_DUPE; /* this is a duplicate! */ int i; int addrlen; // length of the address part int datalen; // length of the payload uint32_t hash, idx; dupe_record_t **dpp, *dp; // 1) collect canonic rep of the address (SRC,DEST, no VIAs) i = 1; for (addrlen = 0; addrlen < alen; ++ addrlen) { const char c = addr[addrlen]; if (c == 0 || c == ',' || c == ':') { break; } if (c == '-' && i) { i = 0; } } // code to prevent segmentation fault if (addrlen > 18) { if (debug>1) printf(" addrlen=\"%d\" > 18, discard packet\n",addrlen); return NULL; } // Canonic tail has no SPACEs in data portion! // TODO: how to treat 0 bytes ??? datalen = dlen; while (datalen > 0 && data[datalen-1] == ' ') --datalen; // there are no 3rd-party frames in APRS-IS ... // 2) calculate checksum (from disjoint memory areas) hash = keyhash(addr, addrlen, 0); hash = keyhash(data, datalen, hash); idx = hash; // 3) lookup if same checksum is in some hash bucket chain // 3b) compare packet... // 3b1) flag as F_DUPE if so // DUPECHECK_DB_SIZE == 16 -> 4 bits index idx ^= (idx >> 16); /* fold the hash bits.. */ idx ^= (idx >> 8); /* fold the hash bits.. */ idx ^= (idx >> 4); /* fold the hash bits.. */ i = idx % DUPECHECK_DB_SIZE; dpp = &(dpc->dupecheck_db[i]); while (*dpp) { dp = *dpp; if ((dp->t_exp - tick.tv_sec) < 0) { // Old ones are discarded when seen *dpp = dp->next; dp->next = NULL; dupecheck_put(dp); continue; } if (dp->hash == hash) { // HASH match! And not too old! if (dp->alen == addrlen && dp->plen == datalen && memcmp(addr, dp->addresses, addrlen) == 0 && memcmp(data, dp->packet, datalen) == 0) { // PACKET MATCH! dp->seen += 1; return dp; } // no packet match.. check next } dpp = &dp->next; } // dpp points to pointer at the tail of the chain // 4) Add comparison copy of non-dupe into dupe-db dp = dupecheck_db_alloc(addrlen, datalen); if (dp == NULL) return NULL; // alloc error! *dpp = dp; // Put it on tail of existing chain memcpy(dp->addresses, addr, addrlen); memcpy(dp->packet, data, datalen); dp->seen = 1; // First observation gets number 1 dp->hash = hash; dp->t = tick.tv_sec; dp->t_exp = tick.tv_sec + dpc->storetime; return NULL; } /* * dupecheck_pbuf() returns pointer to dupe record, if pbuf is * a duplicate. Otherwise it return a NULL. */ dupe_record_t *dupecheck_pbuf(dupecheck_t *dpc, struct pbuf_t *pb, const int viscous_delay) { int i; uint32_t hash, idx; dupe_record_t **dpp, *dp; const char *addr = pb->data; int alen = pb->dstcall_end - addr; const char *dataend = pb->data + pb->packet_len; const char *data = pb->info_start; int dlen = dataend - data; int addrlen = alen; int datalen = dlen; char *p; /* if (debug && pb->is_aprs) { printf("dupecheck[1] addr='"); fwrite(addr, alen, 1, stdout); printf("' data='"); fwrite(data, dlen, 1, stdout); printf("'\n"); } */ // Canonic tail has no SPACEs in data portion! // TODO: how to treat 0 bytes ??? if (!pb->is_aprs) { // data and dlen are raw AX.25 section pointers data = (const char*) pb->ax25data; datalen = pb->ax25datalen; } else { // Do with APRS rules for (;;) { // 1) collect canonic rep of the address i = 1; for (addrlen = 0; addrlen < alen; ++ addrlen) { const char c = addr[addrlen]; if (c == 0 || c == ',' || c == ':') { break; } if (c == '-' && i) { i = 0; } } while (datalen > 0 && data[datalen-1] == ' ') --datalen; if (data[0] == '}') { // 3rd party frame! addr = data+1; p = memchr(addr,':',datalen-1); if (p == NULL) break; // Invalid 3rd party frame, no ":" in it alen = p - addr; data = p+1; datalen = dataend - data; /* if (debug && pb->is_aprs) { printf("dupecheck[2] 3rd-party: addr='"); fwrite(addr, alen, 1, stdout); printf("' data='"); fwrite(data, datalen, 1, stdout); printf("'\n"); } */ continue; // repeat the processing! } break; // No repeat necessary in general case } } // 2) calculate checksum (from disjoint memory areas) /* if (debug && pb->is_aprs) { printf("dupecheck[3] addr='"); fwrite(addr, addrlen, 1, stdout); printf("' data='"); fwrite(data, datalen, 1, stdout); printf("'\n"); } */ hash = keyhash(addr, addrlen, 0); hash = keyhash(data, datalen, hash); idx = hash; /* if (debug>1) { printf("DUPECHECK: Addr='"); fwrite(addr, 1, addrlen, stdout); printf("' Data='"); fwrite(data, 1, datalen, stdout); printf("' hash=%x\n", hash); } */ // 3) lookup if same checksum is in some hash bucket chain // 3b) compare packet... // 3b1) flag as F_DUPE if so // DUPECHECK_DB_SIZE == 16 -> 4 bits index idx ^= (idx >> 16); /* fold the hash bits.. */ idx ^= (idx >> 8); /* fold the hash bits.. */ idx ^= (idx >> 4); /* fold the hash bits.. */ i = idx % DUPECHECK_DB_SIZE; dpp = &(dpc->dupecheck_db[i]); while (*dpp) { dp = *dpp; if ((dp->t_exp - tick.tv_sec) < 0) { // Old ones are discarded when seen *dpp = dp->next; dp->next = NULL; dupecheck_put(dp); continue; } if (dp->hash == hash) { // HASH match! And not too old! if (dp->alen == addrlen && dp->plen == datalen && memcmp(addr, dp->addresses, addrlen) == 0 && memcmp(data, dp->packet, datalen) == 0) { // PACKET MATCH! if (viscous_delay > 0) dp->delayed_seen += 1; else dp->seen += 1; return dp; } // no packet match.. check next } dpp = &dp->next; } // dpp points to pointer at the tail of the chain // 4) Add comparison copy of non-dupe into dupe-db dp = dupecheck_db_alloc(addrlen, datalen); if (dp == NULL) { if (debug) printf("DUPECHECK ALLOC ERROR!\n"); return NULL; // alloc error! } *dpp = dp; // Put it on tail of existing chain memcpy(dp->addresses, addr, addrlen); memcpy(dp->packet, data, datalen); dp->pbuf = pbuf_get(pb); // increments refcount if (viscous_delay > 0) { // First observation gets number 1 dp->seen = 0; dp->delayed_seen = 1; dp->pbuf = pb; } else { dp->seen = 1; dp->delayed_seen = 0; } dp->hash = hash; dp->t = tick.tv_sec; dp->t_exp = tick.tv_sec + dpc->storetime; return dp; } /* * dupechecker aprx poll integration, timed tasks control * */ static struct timeval dupecheck_cleanup_nexttime; static void dupecheck_resettime(void *arg) { struct timeval *tv = (struct timeval *)arg; *tv = tick; } int dupecheck_prepoll(struct aprxpolls *app) { if (time_reset) { dupecheck_resettime(&dupecheck_cleanup_nexttime); } if (dupecheck_cleanup_nexttime.tv_sec == 0) dupecheck_cleanup_nexttime = tick; if (tv_timercmp(&dupecheck_cleanup_nexttime, &app->next_timeout) > 0) app->next_timeout = dupecheck_cleanup_nexttime; return 0; /* No poll descriptors, only time.. */ } int dupecheck_postpoll(struct aprxpolls *app) { if (tv_timercmp(&dupecheck_cleanup_nexttime, &tick) > 0) return 0; /* Too early.. */ tv_timeradd_seconds( &dupecheck_cleanup_nexttime, &tick, 30 ); // tick every 30 second or so dupecheck_cleanup(); return 0; } aprx-2.9.0/erlang.c000664 000000 000000 00000042765 13040775352 014114 0ustar00rootroot000000 000000 /* **************************************************************** * * * * APRX -- 2nd generation APRS iGate and digi with * * minimal requirement of esoteric facilities or * * libraries of any kind beyond UNIX system libc. * * * * (c) Matti Aarnio - OH2MQK, 2007-2014 * * * * **************************************************************** */ #include "aprx.h" #include #include #include #include /* The erlang module accounts data reception per 1m/10m/60m intervals, and reports them on verbout.. */ /* #define USE_ONE_MINUTE_INTERVAL 1 */ static struct timeval erlang_time_end_1min; static float erlang_time_ival_1min = 1.0; static struct timeval erlang_time_end_10min; static float erlang_time_ival_10min = 1.0; #ifdef ERLANGSTORAGE static struct timeval erlang_time_end_60min; static float erlang_time_ival_60min = 1.0; #endif #ifdef ERLANGSTORAGE static const char *erlangtitle = "APRX SNMP + Erlang dataset\n"; #endif int erlangsyslog; /* if set, will log via syslog(3) */ int erlanglog1min; /* if set, will log also "ERLANG1" interval */ const char *erlanglogfile; const char *erlang_backingstore = VARRUN "/aprx.state"; #ifdef ERLANGSTORAGE static int erlang_file_fd = -1; static int erlang_mmap_size; #endif static void *erlang_mmap; struct erlanghead *ErlangHead; struct erlangline **ErlangLines; int ErlangLinesCount; int erlang_data_is_nonshared; /* In embedded target.. */ struct erlang_file { struct erlanghead head; struct erlangline lines[1]; }; static void erlang_backingstore_startops(void) { ErlangHead->server_pid = getpid(); ErlangHead->start_time = time(NULL); if (!mycall) strncpy(ErlangHead->mycall, "N0CALL", sizeof(ErlangHead->mycall)); else strncpy(ErlangHead->mycall, mycall, sizeof(ErlangHead->mycall)); ErlangHead->mycall[sizeof(ErlangHead->mycall) - 1] = 0; /* NUL terminate */ } static int erlang_backingstore_grow(int do_create, int add_count) { struct erlang_file *EF; int i; #ifdef ERLANGSTORAGE struct stat st; char buf[256]; int new_size, pagesize = sysconf(_SC_PAGE_SIZE); int doing_init = 0; if (erlang_data_is_nonshared) goto embedded_only; if (erlang_file_fd < 0) { goto embedded_only; } fstat(erlang_file_fd, &st); lseek(erlang_file_fd, 0, SEEK_END); new_size = st.st_size; if (new_size % pagesize) { new_size /= pagesize; ++new_size; new_size *= pagesize; } if (new_size == 0) { new_size = pagesize; doing_init = 1; } /* new_size expanded to be exact page size multiple. */ /* If the new size is larger than the file size.. .. and at least one page size (e.g. 4 kB) .. */ if (new_size > st.st_size) { /* .. then we fill in the file to given size. */ int i, rc, l; i = st.st_size; memset(buf, 0, sizeof(buf)); lseek(erlang_file_fd, 0, SEEK_END); while (i < new_size) { l = sizeof(buf); if (new_size - i < l) l = new_size - i; rc = write(erlang_file_fd, buf, l); if (rc < 0 && errno == EINTR) continue; if (rc != l) break; i += rc; } } redo_open:; if (erlang_mmap) { msync(erlang_mmap, erlang_mmap_size, MS_SYNC); munmap(erlang_mmap, erlang_mmap_size); erlang_mmap = NULL; erlang_mmap_size = 0; ErlangHead = NULL; } /* Some (early Linux) systems mmap() offset on IO pointer... */ lseek(erlang_file_fd, 0, SEEK_SET); fstat(erlang_file_fd, &st); erlang_mmap_size = st.st_size; erlang_mmap = mmap(NULL, erlang_mmap_size, PROT_READ | (do_create ? PROT_WRITE : 0), MAP_SHARED, erlang_file_fd, 0); if (erlang_mmap == MAP_FAILED) { erlang_mmap = NULL; syslog(LOG_ERR, "Erlang-file mmap() failed, fd=%d, errno=%d: %s", erlang_file_fd, errno, strerror(errno)); } if (erlang_mmap) { int rc, l; EF = erlang_mmap; ErlangHead = &EF->head; if (EF->head.version != ERLANGLINE_STRUCT_VERSION || EF->head.last_update == 0) { if (doing_init) { /* Not initialized ? */ memset(erlang_mmap, 0, erlang_mmap_size); strcpy(EF->head.title, erlangtitle); EF->head.version = ERLANGLINE_STRUCT_VERSION; EF->head.linecount = 0; EF->head.last_update = tick.tv_sec; ErlangLinesCount = 0; } else { /* Wrong head magic, and not doing block init.. */ munmap(erlang_mmap, erlang_mmap_size); erlang_mmap = NULL; erlang_mmap_size = 0; syslog(LOG_ERR, "Erlang-file has bad magic in it, not opening! Not modifying!"); close(erlang_file_fd); erlang_file_fd = -1; goto embedded_only; /* BAD BAD ! */ } } if (EF->head.linecount != ErlangLinesCount || add_count > 0) { /* must resize.. */ int new_count = EF->head.linecount + add_count; new_size = sizeof(struct erlang_file) + sizeof(struct erlangline) * (new_count - 1); if (new_size % pagesize) { new_size /= pagesize; ++new_size; new_size *= pagesize; } i = st.st_size; memset(buf, 0, sizeof(buf)); lseek(erlang_file_fd, 0, SEEK_END); /* append on the file.. */ while (i < new_size) { l = sizeof(buf); if (new_size - i < l) l = new_size - i; rc = write(erlang_file_fd, buf, l); if (rc < 0 && errno == EINTR) continue; if (rc != l) break; i += rc; } if (i < new_size) { munmap(erlang_mmap, erlang_mmap_size); erlang_mmap = NULL; goto embedded_only; /* BAD BAD ! */ } add_count = 0; if (do_create) EF->head.linecount = new_count; ErlangLinesCount = new_count; goto redo_open; /* redo mapping */ } /* Ok, successfull open, correct linecount */ ErlangLines = (void *) realloc((void *) ErlangLines, (ErlangLinesCount + 1) * sizeof(void *)); for (i = 0; i < ErlangLinesCount; ++i) { ErlangLines[i] = &EF->lines[i]; } return 0; /* OK ! */ } embedded_only:; #endif /* ... ERLANGSTORAGE ... */ erlang_data_is_nonshared = 1; if (add_count > 0 || !erlang_mmap) { ErlangLinesCount += add_count; erlang_mmap = realloc(erlang_mmap, sizeof(*EF) + (ErlangLinesCount + 1) * sizeof(struct erlangline)); } EF = erlang_mmap; ErlangHead = &EF->head; /* Ok, successfull open, correct linecount */ ErlangLines = (void *) realloc((void *) ErlangLines, (ErlangLinesCount + 1) * sizeof(void *)); for (i = 0; i < ErlangLinesCount; ++i) { ErlangLines[i] = &EF->lines[i]; } return 0; } static int erlang_backingstore_open(int do_create) { #ifdef ERLANGSTORAGE if (!erlang_backingstore) { syslog(LOG_ERR, "erlang_backingstore not defined!"); erlang_data_is_nonshared = 1; } if (erlang_file_fd < 0 && erlang_backingstore) { erlang_file_fd = open(erlang_backingstore, do_create ? O_RDWR : O_RDONLY, 0644); /* Presume: it exists! */ if ((erlang_file_fd < 0) && do_create && (errno == ENOENT)) { erlang_file_fd = open(erlang_backingstore, O_RDWR | O_CREAT | O_EXCL, 0644); } } if (erlang_file_fd < 0) { syslog(LOG_ERR, "Open of '%s' for erlang_backingstore file failed! errno=%d: %s", erlang_backingstore, errno, strerror(errno)); erlang_data_is_nonshared = 1; } else { erlang_data_is_nonshared = 0; } #endif return erlang_backingstore_grow(do_create, 0); /* Just open */ } static struct erlangline *erlang_findline(const char *portname, int bytes_per_minute) { int i; struct erlangline *E; if (portname == NULL) return NULL; if (bytes_per_minute == 0) bytes_per_minute = (int) ((1200.0 * 60) / 8.2); // Default of 1200 bps /* Allocate a new ErlangLines[] entry for this object, if no existing one is found.. */ E = NULL; if (ErlangLines) { for (i = 0; i < ErlangLinesCount; ++i) { if (strcmp(portname, ErlangLines[i]->name) == 0) { /* HOO-RAY! It is this one! */ E = ErlangLines[i]; break; } } } /* If found -- err... why we are SETing it AGAIN ? */ if (!E) { /* Allocate a new one */ erlang_backingstore_grow(1, 1); if (!ErlangLines) return NULL; /* D'uh! */ E = ErlangLines[ErlangLinesCount - 1]; /* Last one is the lattest.. */ memset(E, 0, sizeof(*E)); strncpy(E->name, portname, sizeof(E->name) - 1); E->name[sizeof(E->name) - 1] = 0; E->erlang_capa = bytes_per_minute; E->index = ErlangLinesCount - 1; #ifdef ERLANGSTORAGE E->e1_cursor = 0; E->e1_max = APRXERL_1M_COUNT; E->e10_cursor = 0; E->e10_max = APRXERL_10M_COUNT; E->e60_cursor = 0; E->e60_max = APRXERL_60M_COUNT; #else #if (USE_ONE_MINUTE_DATA == 1) E->e1_cursor = 0; E->e1_max = APRXERL_1M_COUNT; #else E->e10_cursor = 0; E->e10_max = APRXERL_10M_COUNT; #endif #endif } return E; } static void erlang_timer_init(void *dummy) { /* Time intervals will end at next even 1 minute/10 minutes/60 minutes, although said interval will be shorter than full. */ erlang_time_end_1min.tv_sec = tick.tv_sec + 60 - (tick.tv_sec % 60); erlang_time_end_1min.tv_usec = 0; erlang_time_ival_1min = (float) (60 - tick.tv_sec % 60) / 60.0; erlang_time_end_10min.tv_sec = tick.tv_sec + 600 - (tick.tv_sec % 600); erlang_time_end_10min.tv_usec = 0; erlang_time_ival_10min = (float) (600 - tick.tv_sec % 600) / 600.0; #ifdef ERLANGSTORAGE erlang_time_end_60min.tv_sec = tick.tv_sec + 3600 - (tick.tv_sec % 3600); erlang_time_end_60min.tv_usec = 0; erlang_time_ival_60min = (float) (3600 - tick.tv_sec % 3600) / 3600.0; #endif } /* * erlang_set() */ void erlang_set(const char *portname, int bytes_per_minute) { erlang_findline(portname, bytes_per_minute); } /* * erlang_add() */ void erlang_add(const char *portname, ErlangMode erl, int bytes, int packets) { struct erlangline *E; if (!portname) return; E = erlang_findline(portname, (int) ((1200.0 * 60) / 8.2)); if (debug > 1) printf("erlang_add(%s, %s, %d, %d)\n", portname, (erl == ERLANG_RX ? "RX":(erl == ERLANG_TX ? "TX": "DROP")), bytes, packets); if (!E) return; if (erl == ERLANG_RX) { E->SNMP.bytes_rx += bytes; E->SNMP.packets_rx += packets; E->SNMP.update = tick.tv_sec; E->last_update = tick.tv_sec; #ifdef ERLANGSTORAGE E->erl1m.bytes_rx += bytes; E->erl1m.packets_rx += packets; E->erl1m.update = tick.tv_sec; E->erl10m.bytes_rx += bytes; E->erl10m.packets_rx += packets; E->erl10m.update = tick.tv_sec; E->erl60m.bytes_rx += bytes; E->erl60m.packets_rx += packets; E->erl60m.update = tick.tv_sec; #else #if (USE_ONE_MINUTE_STORAGE == 1) E->erl1m.bytes_rx += bytes; E->erl1m.packets_rx += packets; E->erl1m.update = tick.tv_sec; #else E->erl10m.bytes_rx += bytes; E->erl10m.packets_rx += packets; E->erl10m.update = tick.tv_sec; #endif #endif } if (erl == ERLANG_TX) { E->SNMP.bytes_tx += bytes; E->SNMP.packets_tx += packets; E->SNMP.update = tick.tv_sec; E->last_update = tick.tv_sec; #ifdef ERLANGSTORAGE E->erl1m.bytes_tx += bytes; E->erl1m.packets_tx += packets; E->erl1m.update = tick.tv_sec; E->erl10m.bytes_tx += bytes; E->erl10m.packets_tx += packets; E->erl10m.update = tick.tv_sec; E->erl60m.bytes_tx += bytes; E->erl60m.packets_tx += packets; E->erl60m.update = tick.tv_sec; #else #if (USE_ONE_MINUTE_STORAGE == 1) E->erl1m.bytes_tx += bytes; E->erl1m.packets_tx += packets; E->erl1m.update = tick.tv_sec; #else E->erl10m.bytes_tx += bytes; E->erl10m.packets_tx += packets; E->erl10m.update = tick.tv_sec; #endif #endif } if (erl == ERLANG_DROP) { E->SNMP.bytes_rxdrop += bytes; E->SNMP.packets_rxdrop += packets; E->SNMP.update = tick.tv_sec; E->last_update = tick.tv_sec; #ifdef ERLANGSTORAGE E->erl1m.bytes_rxdrop += bytes; E->erl1m.packets_rxdrop += packets; E->erl1m.update = tick.tv_sec; E->erl10m.bytes_rxdrop += bytes; E->erl10m.packets_rxdrop += packets; E->erl10m.update = tick.tv_sec; E->erl60m.bytes_rxdrop += bytes; E->erl60m.packets_rxdrop += packets; E->erl60m.update = tick.tv_sec; #else #if (USE_ONE_MINUTE_STORAGE == 1) E->erl1m.bytes_rxdrop += bytes; E->erl1m.packets_rxdrop += packets; E->erl1m.update = tick.tv_sec; #else E->erl10m.bytes_rxdrop += bytes; E->erl10m.packets_rxdrop += packets; E->erl10m.update = tick.tv_sec; #endif #endif } } /* * erlang_time_end() - process erlang measurement interval time end event */ static void erlang_time_end(void) { int i; char msgbuf[500]; char logtime[40]; FILE *fp = NULL; if (erlanglogfile) { /* actually we want it to the erlanglogfile... */ fp = fopen(erlanglogfile, "a"); } printtime(logtime, sizeof(logtime)); if (tv_timercmp(&tick, &erlang_time_end_1min) >= 0) { erlang_time_end_1min.tv_sec += 60; #if (defined(ERLANGSTORAGE) || (USE_ONE_MINUTE_STORAGE == 1)) for (i = 0; i < ErlangLinesCount; ++i) { struct erlangline *E = ErlangLines[i]; E->last_update = tick.tv_sec; if (erlanglog1min) { sprintf(msgbuf, "ERLANG%-2d %s Rx %6ld %3ld Dp %6ld %3ld Tx %6ld %3ld : %5.3f %5.3f %5.3f", 1, E->name, E->erl1m.bytes_rx, E->erl1m.packets_rx, E->erl1m.bytes_rxdrop, E->erl1m.packets_rxdrop, E->erl1m.bytes_tx, E->erl1m.packets_tx, ((float) E->erl1m.bytes_rx / (float) E->erlang_capa * erlang_time_ival_1min), ((float) E->erl1m.bytes_rxdrop / (float) E->erlang_capa * erlang_time_ival_1min), ((float)E->erl1m.bytes_tx / (float)E->erlang_capa * erlang_time_ival_1min) ); if (fp) fprintf(fp, "%s %s\n", logtime, msgbuf); else if (erlangout) printf("%ld\t%s\n", tick.tv_sec, msgbuf); if (erlangsyslog) syslog(LOG_INFO, "%ld %s", tick.tv_sec, msgbuf); } E->erl1m.update = tick.tv_sec; E->e1[E->e1_cursor] = E->erl1m; ++E->e1_cursor; if (E->e1_cursor >= E->e1_max) E->e1_cursor = 0; memset(&E->erl1m, 0, sizeof(E->erl1m)); E->erl1m.update = tick.tv_sec; } erlang_time_ival_1min = 1.0; #endif } if (tv_timercmp(&tick, &erlang_time_end_10min) >= 0) { erlang_time_end_10min.tv_sec += 600; #if (defined(ERLANGSTORAGE) || (USE_ONE_MINUTE_STORAGE == 0)) for (i = 0; i < ErlangLinesCount; ++i) { struct erlangline *E = ErlangLines[i]; E->last_update = tick.tv_sec; sprintf(msgbuf, "ERLANG%-2d %s Rx %6ld %3ld Dp %6ld %3ld Tx %6ld %3ld : %5.3f %5.3f %5.3f", 10, E->name, E->erl10m.bytes_rx, E->erl10m.packets_rx, E->erl10m.bytes_rxdrop, E->erl10m.packets_rxdrop, E->erl10m.bytes_tx, E->erl10m.packets_tx, ((float) E->erl10m.bytes_rx / ((float) E->erlang_capa * 10.0 * erlang_time_ival_10min)), ((float) E->erl10m.bytes_rxdrop / ((float) E->erlang_capa * 10.0 * erlang_time_ival_10min)), ((float)E->erl10m.bytes_tx / ((float)E->erlang_capa * 10.0 * erlang_time_ival_10min)) ); if (fp) fprintf(fp, "%s %s\n", logtime, msgbuf); else if (erlangout) printf("%ld\t%s\n", tick.tv_sec, msgbuf); if (erlangsyslog) syslog(LOG_INFO, "%ld %s", tick.tv_sec, msgbuf); E->erl10m.update = tick.tv_sec; E->e10[E->e10_cursor] = E->erl10m; ++E->e10_cursor; if (E->e10_cursor >= E->e10_max) E->e10_cursor = 0; memset(&E->erl10m, 0, sizeof(E->erl10m)); E->erl10m.update = tick.tv_sec; } erlang_time_ival_10min = 1.0; #endif } #ifdef ERLANGSTORAGE if (tv_timercmp(&tick, &erlang_time_end_60min) >= 0) { erlang_time_end_60min.tv_sec += 3600; for (i = 0; i < ErlangLinesCount; ++i) { struct erlangline *E = ErlangLines[i]; /* E->last_update = now.tv_sec; -- the 10 minute step does also this */ sprintf(msgbuf, "ERLANG%-2d %s Rx %6ld %3ld Dp %6ld %3ld Tx %6ld %3ld : %5.3f %5.3f %5.3f", 60, E->name, E->erl60m.bytes_rx, E->erl60m.packets_rx, E->erl60m.bytes_rxdrop, E->erl60m.packets_rxdrop, E->erl60m.bytes_tx, E->erl60m.packets_tx, ((float) E->erl60m.bytes_rx / ((float) E->erlang_capa * 60.0 * erlang_time_ival_60min)), ((float) E->erl60m.bytes_rxdrop / ((float) E->erlang_capa * 60.0 * erlang_time_ival_60min)), ((float)E->erl60m.bytes_tx / ((float)E->erlang_capa * 60.0 * erlang_time_ival_60min)) ); if (fp) fprintf(fp, "%s %s\n", logtime, msgbuf); else if (erlangout) printf("%ld\t%s\n", tick.tv_sec, msgbuf); if (erlangsyslog) syslog(LOG_INFO, "%ld %s", tick.tv_sec, msgbuf); E->erl60m.update = tick.tv_sec; E->e60[E->e60_cursor] = E->erl60m; ++E->e60_cursor; if (E->e60_cursor >= E->e60_max) E->e60_cursor = 0; memset(&E->erl60m, 0, sizeof(E->erl60m)); E->erl60m.update = tick.tv_sec; } erlang_time_ival_60min = 1.0; } #endif if (fp) fclose(fp); } int erlang_prepoll(struct aprxpolls *app) { if (time_reset) { if (debug) printf("erlang_timer_init() to be called\n"); erlang_timer_init(NULL); } if (tv_timercmp(&app->next_timeout, &erlang_time_end_1min) > 0) app->next_timeout = erlang_time_end_1min; if (tv_timercmp(&app->next_timeout, &erlang_time_end_10min) > 0) app->next_timeout = erlang_time_end_10min; #ifdef ERLANGSTORAGE if (tv_timercmp(&app->next_timeout, &erlang_time_end_60min) > 0) app->next_timeout = erlang_time_end_60min; #endif return 0; } int erlang_postpoll(struct aprxpolls *app) { if (tv_timercmp(&tick, &erlang_time_end_1min) >= 0 || tv_timercmp(&tick, &erlang_time_end_10min) >= 0 #ifdef ERLANGSTORAGE || tv_timercmp(&tick, &erlang_time_end_60min) >= 0 #endif ) erlang_time_end(); return 0; } void erlang_init(const char *syslog_facility_name) { erlang_timer_init(NULL); } void erlang_start(int do_create) { erlang_backingstore_open(do_create); if (do_create > 1) erlang_backingstore_startops(); } aprx-2.9.0/filter.c000664 000000 000000 00000165572 13040775352 014133 0ustar00rootroot000000 000000 /******************************************************************** * APRX -- 2nd generation APRS-i-gate with * * minimal requirement of esoteric facilities or * * libraries of any kind beyond UNIX system libc. * * * * (c) Matti Aarnio - OH2MQK, 2007-2014 * * * ********************************************************************/ /* * Some parts of this code are copied from: * * aprsc * * (c) Matti Aarnio, OH2MQK, * * This program is licensed under the BSD license, which can be found * in the file LICENSE. * */ #include "aprx.h" #include "cellmalloc.h" #include "historydb.h" #include "keyhash.h" /* See: http://www.aprs-is.net/javaprssrvr/javaprsfilter.htm a/latN/lonW/latS/lonE Area filter b/call1/call2... Budlist filter (*) d/digi1/digi2... Digipeater filter (*) e/call1/call1/... Entry station filter (*) f/call/dist Friend Range filter g/call1/call2.. Group Messaging filter (*) m/dist My Range filter o/obj1/obj2... Object filter (*) p/aa/bb/cc... Prefix filter q/con/ana q Contruct filter r/lat/lon/dist Range filter s/pri/alt/over Symbol filter t/poimntqsu3*c Type filter t/poimntqsu3*c/call/km Type filter u/unproto1/unproto2/.. Unproto filter (*) Sample usage frequencies (out of entire APRS-IS): 23.7 a/ <-- Optimize! 9.2 b/ <-- Optimize? 1.4 d/ 0.2 e/ 2.2 f/ 20.9 m/ <-- Optimize! 0.2 o/ 14.4 p/ <-- Optimize! 0.0 pk 0.0 pm 0.4 q/ 19.0 r/ <-- Optimize! 0.1 s_ 1.6 s/ 6.6 t/ 0.1 u/ (*) = wild-card supported Undocumented at above web-page, but apparent behaviour is: - Everything not explicitely stated to be case sensitive is case INSENSITIVE - Minus-prefixes on filters behave as is there are two sets of filters: - filters without minus-prefixes add on approved set, and all those without are evaluated at first - filters with minus-prefixes are evaluated afterwards to drop selections after the additive filter has been evaluated - Our current behaviour is: "evaluate everything in entry order, stop at first match", which enables filters like: p/OH2R -p/OH2 p/OH while javAPRSSrvr filter adjunct behaves like the request is: -p/OH2 p/OH that is, OH2R** stations are not passed thru. */ /* FIXME: What exactly is the meaning of negation on the pattern ? ** Match as a failure to match, and stop searching ? ** Something filter dependent ? ** ** javAPRSSrvr Filter Adjunct manual tells: #14 Exclusion filter All the above filters also support exclusion. Be prefixing the above filters with a dash the result will be the opposite. Any packet that match the exclusion filter will NOT pass. The exclusion filters will be processed first so if there is a match for an exclusion then the packet is not passed no matter any other filter definitions. */ #define WildCard 0x80 /* it is wild-carded prefix string */ #define NegationFlag 0x40 /* */ #define LengthMask 0x0F /* only low 4 bits encode length */ /* values above are chosen for 4 byte alignment.. */ struct filter_refcallsign_t { char callsign[CALLSIGNLEN_MAX+1]; /* size: 10.. */ int8_t reflen; /* length and flags */ }; struct filter_head_t { struct filter_t *next; const char *text; /* filter text as is */ float f_latN, f_lonE; union { float f_latS; /* for A filter */ float f_coslat; /* for R filter */ } u1; union { float f_lonW; /* for A filter */ float f_dist; /* for R filter */ } u2; time_t hist_age; char type; /* 1 char */ int16_t negation; /* boolean flag */ union { int16_t numnames; /* used as named, and as cache validity flag */ int16_t len1s; /* or len1 of s-filter */ } u3; union { int16_t bitflags; /* used as bit-set on T_*** enumerations */ int16_t len1; /* or as len2 of s-filter */ } u4; union { struct { int16_t len2s, len2, len3s, len3; } lens; /* of s-filter */ /* for cases where there is only one.. */ struct filter_refcallsign_t refcallsign; /* malloc()ed array, alignment important! */ struct filter_refcallsign_t *refcallsigns; } u5; }; struct filter_t { struct filter_head_t h; #define FILT_TEXTBUFSIZE (508-sizeof(struct filter_head_t)) char textbuf[FILT_TEXTBUFSIZE]; }; #define QC_C 0x001 /* Q-filter flag bits */ #define QC_X 0x002 #define QC_U 0x004 #define QC_o 0x008 #define QC_O 0x010 #define QC_S 0x020 #define QC_r 0x040 #define QC_R 0x080 #define QC_Z 0x100 #define QC_I 0x200 #define QC_AnalyticsI 0x800 /* // For q-filter analytics: entrycall igate filter database struct filter_entrycall_t { struct filter_entrycall_t *next; time_t expirytime; uint32_t hash; int len; char callsign[CALLSIGNLEN_MAX+1]; }; */ /* struct filter_wx_t { struct filter_wx_t *next; time_t expirytime; uint32_t hash; int len; char callsign[CALLSIGNLEN_MAX+1]; }; */ typedef enum { MatchExact, MatchPrefix, MatchWild } MatchEnum; /* #define FILTER_ENTRYCALL_HASHSIZE 2048 // Around 500-600 in db, this looks // for collision free result.. int filter_entrycall_maxage = 60*60; // 1 hour, default. Validity on // lookups: 5 minutes less.. int filter_entrycall_cellgauge; struct filter_entrycall_t *filter_entrycall_hash[FILTER_ENTRYCALL_HASHSIZE]; */ /* #define FILTER_WX_HASHSIZE 1024 // Around 300-400 in db, this looks // for collision free result.. int filter_wx_maxage = 60*60; // 1 hour, default. Validity on // lookups: 5 minutes less.. int filter_wx_cellgauge; struct filter_wx_t *filter_wx_hash[FILTER_WX_HASHSIZE]; */ #ifndef _FOR_VALGRIND_ cellarena_t *filter_cells; //cellarena_t *filter_entrycall_cells; //cellarena_t *filter_wx_cells; #endif int hist_lookup_interval = 20; /* FIXME: Configurable: Cache historydb position lookups this much seconds on each filter entry referring to some fixed callsign (f,m,t) */ float filter_lat2rad(float lat) { return (lat * (M_PI / 180.0)); } float filter_lon2rad(float lon) { return (lon * (M_PI / 180.0)); } const int filter_cellsize = sizeof(struct filter_t); const int filter_cellalign = __alignof__(struct filter_t); void filter_init(void) { #ifndef _FOR_VALGRIND_ /* A _few_... */ filter_cells = cellinit( "filter", filter_cellsize, filter_cellalign, CELLMALLOC_POLICY_LIFO, 4 /* 4 kB at the time, should be enough in all cases.. */, 0 /* minfree */ ); /* printf("filter: sizeof=%d alignof=%d\n", sizeof(struct filter_t),__alignof__(struct filter_t)); */ /* // Couple thousand filter_entrycall_cells = cellinit( "entrycall", sizeof(struct filter_entrycall_t), __alignof__(struct filter_entrycall_t), CELLMALLOC_POLICY_FIFO, 32, // 32 kB at the time, 0 // minfree ); */ /* // Under 1 thousand.. filter_wx_cells = cellinit( "wxcalls", sizeof(struct filter_wx_t), __alignof__(struct filter_wx_t), CELLMALLOC_POLICY_FIFO, 32, // 32 kB at the time 0 // minfree ); */ #endif } #if 0 static void filter_entrycall_free(struct filter_entrycall_t *f) { #ifndef _FOR_VALGRIND_ cellfree( filter_entrycall_cells, f ); #else free(f); #endif -- filter_entrycall_cellgauge; } /* * filter_entrycall_insert() is for support of q//i filters. * That is, "pass on any message that has traversed thru entry * igate which has identified itself with qAr or qAR. Not all * messages traversed thru such gate will have those same q-cons * values, thus this database keeps info about entry igate that * have shown such capability in recent past. * * This must be called by the incoming_parse() in every case * (or at least when qcons is either 'r' or 'R'.) * * The key has no guaranteed alignment, no way to play tricks * with gcc builtin optimizers. */ int filter_entrycall_insert(struct pbuf_t *pb) { struct filter_entrycall_t *f, **fp, *f2; /* OK, pre-parsing produced accepted result */ uint32_t hash; int idx, keylen; const char qcons = pb->qconst_start[2]; const char *key = pb->qconst_start+4; char uckey[CALLSIGNLEN_MAX+1]; for (keylen = 0; keylen < CALLSIGNLEN_MAX; ++keylen) { int c = key[keylen]; if (c == ',' || c == ':') break; if ('a' <= c && c <= 'z') c -= ('a' - 'A'); uckey[keylen] = c; uckey[keylen+1] = 0; } if ((key[keylen] != ',' && key[keylen] != ':') || keylen < CALLSIGNLEN_MIN) return 0; /* Bad entry-station callsign */ pb->entrycall_len = keylen; // FIXME: should be in incoming parser... /* We insert only those that have Q-Constructs of qAR or qAr */ if (qcons != 'r' && qcons != 'R') return 0; hash = keyhash(uckey, keylen, 0); idx = (hash ^ (hash >> 11) ^ (hash >> 22) ) % FILTER_ENTRYCALL_HASHSIZE; /* Fold the hashbits.. */ fp = &filter_entrycall_hash[idx]; f2 = NULL; while (( f = *fp )) { if ( f->hash == hash ) { if (f->len == keylen) { int cmp = strncasecmp(f->callsign, uckey, keylen); if (cmp == 0) { /* Have key match */ f->expirytime = tick.tv_sec + filter_entrycall_maxage; f2 = f; break; } } } /* No match at all, advance the pointer.. */ fp = &(f -> next); } if (!f2) { /* Allocate and insert into hash table */ fp = &filter_entrycall_hash[idx]; #ifndef _FOR_VALGRIND_ f = cellmalloc(filter_entrycall_cells); #else f = calloc(1, sizeof(*f)); #endif if (f) { f->next = *fp; f->expirytime = tick.tv_sec + filter_entrycall_maxage; f->hash = hash; f->len = keylen; memcpy(f->callsign, uckey, keylen); memset(f->callsign+keylen, 0, sizeof(f->callsign)-keylen); *fp = f2 = f; ++ filter_entrycall_cellgauge; } } return (f2 != NULL); } /* * filter_entrycall_lookup() is for support of q//i filters. * That is, "pass on any message that has traversed thru entry * igate which has identified itself with qAr or qAR. Not all * messages traversed thru such gate will have those same q-cons * values, thus this keeps database about entry servers that have * shown such capability in recent past. * * The key has no guaranteed alignment, no way to play tricks * with gcc builtin optimizers. */ static int filter_entrycall_lookup(const struct pbuf_t *pb) { struct filter_entrycall_t *f, **fp, *f2; const char *key = pb->qconst_start+4; const int keylen = pb->entrycall_len; uint32_t hash = keyhashuc(key, keylen, 0); int idx = ( hash ^ (hash >> 11) ^ (hash >> 22) ) % FILTER_ENTRYCALL_HASHSIZE; /* fold the hashbits.. */ f2 = NULL; fp = &filter_entrycall_hash[idx]; while (( f = *fp )) { if ( f->hash == hash ) { if (f->len == keylen) { int rc = strncasecmp(f->callsign, key, keylen); if (rc == 0) { /* Have key match, see if it is still valid entry ? */ if ((f->expirytime - (tick.tv_sec - 60)) < 0) { f2 = f; break; } } } } /* No match at all, advance the pointer.. */ fp = &(f -> next); } return (f2 != NULL); } /* * The filter_entrycall_cleanup() does purge old entries * out of the database. Run about once a minute. */ void filter_entrycall_cleanup(void) { int k, cleancount = 0; struct filter_entrycall_t *f, **fp; for (k = 0; k < FILTER_ENTRYCALL_HASHSIZE; ++k) { fp = & filter_entrycall_hash[k]; while (( f = *fp )) { /* Did it expire ? */ if ((f->expirytime - tick.tv_sec) <= 0) { *fp = f->next; f->next = NULL; filter_entrycall_free(f); ++cleancount; continue; } /* No purge, advance the pointer.. */ fp = &(f -> next); } } // hlog( LOG_DEBUG, "filter_entrycall_cleanup() removed %d entries, count now: %ld", // cleancount, filter_entrycall_cellgauge ); } /* * The filter_entrycall_atend() does purge all entries * out of the database. Run at the exit of the program. * This exists primarily to make valgrind happy... */ void filter_entrycall_atend(void) { int k; struct filter_entrycall_t *f, **fp; for (k = 0; k < FILTER_ENTRYCALL_HASHSIZE; ++k) { fp = & filter_entrycall_hash[k]; while (( f = *fp )) { *fp = f->next; f->next = NULL; filter_entrycall_free(f); } } } void filter_entrycall_dump(FILE *fp) { int k; struct filter_entrycall_t *f; for (k = 0; k < FILTER_ENTRYCALL_HASHSIZE; ++k) { f = filter_entrycall_hash[k]; for ( ; f; f = f->next ) { fprintf( fp, "%ld\t%s\n", (long)f->expirytime, f->callsign ); } } } #endif /* ================================================================ */ #if 0 static void filter_wx_free(struct filter_wx_t *f) { #ifndef _FOR_VALGRIND_ cellfree( filter_wx_cells, f ); #else free(f); #endif --filter_wx_cellgauge; } /* * The filter_wx_insert() does lookup key storage for problem of: * * Positionless T_WX packets want also position packets on output filters. */ int filter_wx_insert(struct pbuf_t *pb) { struct filter_wx_t *f, **fp, *f2; /* OK, pre-parsing produced accepted result */ const char *key = pb->data; const int keylen = pb->srccall_end - key; uint32_t hash; int idx; char uckey[CALLSIGNLEN_MAX+1]; /* If it is not a WX packet without position, we are not intrerested */ if (!((pb->packettype & T_WX) && !(pb->flags & F_HASPOS))) return 0; for (idx = 0; idx <= keylen && idx < CALLSIGNLEN_MAX; ++idx) { int c = key[idx]; if (c == ',' || c == ':') break; if ('a' <= c && c <= 'z') c -= ('a' - 'A'); uckey[idx] = c; uckey[idx+1] = 0; } hash = keyhash(uckey, keylen, 0); idx = ( hash ^ (hash >> 10) ^ (hash >> 20) ) % FILTER_WX_HASHSIZE; /* fold the hashbits.. */ fp = &filter_wx_hash[idx]; f2 = NULL; while (( f = *fp )) { if ( f->hash == hash ) { if (f->len == keylen) { int cmp = memcmp(f->callsign, uckey, keylen); if (cmp == 0) { /* Have key match */ f->expirytime = tick.tv_sec + filter_wx_maxage; f2 = f; break; } } } /* No match at all, advance the pointer.. */ fp = &(f -> next); } if (!f2) { /* Allocate and insert into hash table */ fp = &filter_wx_hash[idx]; #ifndef _FOR_VALGRIND_ f = cellmalloc(filter_wx_cells); #else f = calloc(1, sizeof(*f)); #endif ++filter_wx_cellgauge; if (f) { f->next = *fp; f->expirytime = tick.tv_sec + filter_wx_maxage; f->hash = hash; f->len = keylen; memcpy(f->callsign, key, keylen); memset(f->callsign+keylen, 0, sizeof(f->callsign)-keylen); *fp = f2 = f; } } return 0; } static int filter_wx_lookup(const struct pbuf_t *pb) { struct filter_wx_t *f, **fp, *f2; const char *key = pb->data; const int keylen = pb->srccall_end - key; uint32_t hash = keyhashuc(key, keylen, 0); int idx = ( hash ^ (hash >> 10) ^ (hash >> 20) ) % FILTER_WX_HASHSIZE; /* fold the hashbits.. */ f2 = NULL; fp = &filter_wx_hash[idx]; while (( f = *fp )) { if ( f->hash == hash ) { if (f->len == keylen) { int rc = strncasecmp(f->callsign, key, keylen); if (rc == 0) { /* Have key match, see if it is still valid entry ? */ if ((f->expirytime - (tick.tv_sec - 60)) < 0) { f2 = f; break; } } } } /* No match at all, advance the pointer.. */ fp = &(f -> next); } return (f2 != NULL); } /* * The filter_wx_cleanup() does purge old entries * out of the database. Run about once a minute. */ void filter_wx_cleanup(void) { int k, cleancount = 0; struct filter_wx_t *f, **fp; for (k = 0; k < FILTER_WX_HASHSIZE; ++k) { fp = & filter_wx_hash[k]; while (( f = *fp )) { /* Did it expire ? */ if ((f->expirytime - tick.tv_sec) <= 0) { *fp = f->next; f->next = NULL; filter_wx_free(f); ++cleancount; continue; } /* No purge, advance the pointer.. */ fp = &(f -> next); } } // hlog( LOG_DEBUG, "filter_wx_cleanup() removed %d entries, count now: %ld", // cleancount, filter_wx_cellgauge ); } /* * The filter_wx_atend() does purge all entries * out of the database. Run at the exit of the program. * This exists primarily to make valgrind happy... */ void filter_wx_atend(void) { int k; struct filter_wx_t *f, **fp; for (k = 0; k < FILTER_WX_HASHSIZE; ++k) { fp = & filter_wx_hash[k]; while (( f = *fp )) { *fp = f->next; f->next = NULL; filter_wx_free(f); } } } void filter_wx_dump(FILE *fp) { int k; struct filter_wx_t *f; for (k = 0; k < FILTER_WX_HASHSIZE; ++k) { f = filter_wx_hash[k]; for ( ; f; f = f->next ) { fprintf( fp, "%ld\t%s\n", (long)f->expirytime, f->callsign ); } } } #endif /* ================================================================ */ void filter_preprocess_dupefilter(struct pbuf_t *pbuf) { #if 0 filter_entrycall_insert(pbuf); filter_wx_insert(pbuf); #endif } void filter_postprocess_dupefilter(struct pbuf_t *pbuf, historydb_t *historydb) { /* * If there is no position at this packet from earlier * processing, try now to find one by the callsign of * the packet sender. * */ #ifndef DISABLE_IGATE if (!(pbuf->flags & F_HASPOS)) { history_cell_t *hist; hist = historydb_lookup(historydb, pbuf->srcname, pbuf->srcname_len); // hlog( LOG_DEBUG, "postprocess_dupefilter: no pos, looking up '%.*s', rc=%d", // pbuf->srcname_len, pbuf->srcname, rc ); if (hist != NULL) { pbuf->lat = hist->lat; pbuf->lng = hist->lon; pbuf->cos_lat = hist->coslat; pbuf->flags |= F_HASPOS; } } #endif } /* ================================================================ */ /* * filter_match_on_callsignset() matches prefixes, or exact keys * on filters of types: b, d, e, o, p, u * ('p' and 'b' need OPTIMIZATION - others get it for free) * */ static int filter_match_on_callsignset(struct filter_refcallsign_t *ref, int keylen, struct filter_t *f, const MatchEnum wildok) { int i; struct filter_refcallsign_t *r = f->h.u5.refcallsigns; const char *r1 = (const void*)ref->callsign; if (debug) printf(" filter_match_on_callsignset(ref='%s', keylen=%d, filter='%s')\n", ref->callsign, keylen, f->h.text); for (i = 0; i < f->h.u3.numnames; ++i) { const int reflen = r[i].reflen; const int len = reflen & LengthMask; const char *r2 = (const void*)r[i].callsign; if (debug)printf(" .. reflen=0x%02x r2='%s'\n", reflen & 0xFF, r2); switch (wildok) { case MatchExact: if (len != keylen) continue; /* no match */ /* length OK, compare content */ if (strncasecmp( r1, r2, len ) != 0) continue; /* So it was an exact match ** Precisely speaking.. we should check that there is ** no WildCard flag, or such. But then this match ** method should not be used if parser finds any such. */ return ( reflen & NegationFlag ? 2 : 1 ); break; case MatchPrefix: if (len > keylen || !len) { /* reference string length is longer than our key */ continue; } if (strncasecmp( r1, r2, len ) != 0) continue; return ( reflen & NegationFlag ? 2 : 1 ); break; case MatchWild: if (len > keylen || !len) { /* reference string length is longer than our key */ continue; } if (strncasecmp( r1, r2, len ) != 0) continue; if (reflen & WildCard) return ( reflen & NegationFlag ? 2 : 1 ); if (len == keylen) return ( reflen & NegationFlag ? 2 : 1 ); break; default: break; } } return 0; /* no match */ } /* * filter_parse_one_callsignset() collects multiple callsigns * on filters of types: b, d, e, o, p, u * * If previous filter was of same type as this one, that one's refbuf is extended. */ static int filter_parse_one_callsignset(struct filter_t **ffp, struct filter_t *f0, const char *filt0, MatchEnum wildok) { char prefixbuf[CALLSIGNLEN_MAX+1]; char *k; const char *p; int i, refcount, wildcard; int refmax = 0, extend = 0; struct filter_refcallsign_t *refbuf; struct filter_t *ff = *ffp; p = filt0; if (*p == '-') ++p; // Skip the first '/' while (*p && *p != '/') ++p; if (*p == '/') ++p; /* count the number of prefixes in there.. */ while (*p) { if (*p) ++refmax; while (*p && *p != '/') ++p; if (*p == '/') ++p; } if (refmax == 0) { printf("Filter definition of '%s' has no prefixes defined.\n", filt0); return -1; /* No prefixes ?? */ } if (ff && ff->h.type == f0->h.type) { /* SAME TYPE, extend previous record! */ extend = 1; refcount = ff->h.u3.numnames + refmax; refbuf = realloc(ff->h.u5.refcallsigns, sizeof(*refbuf) * refcount); ff->h.u5.refcallsigns = refbuf; refcount = ff->h.u3.numnames; } else { refbuf = calloc(1, sizeof(*refbuf)*refmax); refcount = 0; f0->h.u5.refcallsigns = refbuf; f0->h.u3.numnames = 0; } p = filt0; if (*p == '-') ++p; // Skip the first '/' while (*p && *p != '/') ++p; if (*p == '/') ++p; /* hlog(LOG_DEBUG, "p-filter: '%s' vs. '%s'", p, keybuf); */ while (*p) { k = prefixbuf; memset(prefixbuf, 0, sizeof(prefixbuf)); i = 0; wildcard = 0; while (*p != 0 && *p != '/') { int c = *p++; if (c == '*') { wildcard = 1; if (wildok != MatchWild) { printf("Wild-card matching not permitted, yet filter definition says: '%s'\n", filt0); return -1; } continue; } if (i < CALLSIGNLEN_MAX) { *k++ = c; ++i; } else { printf("Too long callsign string: '%s' input: '%s'\n", prefixbuf, filt0); return -1; // invalid input } } *k = 0; /* OK, we have one prefix part collected, scan source until next '/' */ if (*p != 0 && *p != '/') ++p; if (*p == '/') ++p; /* If there is more of patterns, the loop continues.. */ /* Store the refprefix */ memset(&refbuf[refcount], 0, sizeof(refbuf[refcount])); memcpy(refbuf[refcount].callsign, prefixbuf, sizeof(refbuf[refcount].callsign)); refbuf[refcount].reflen = strlen(prefixbuf); if (wildcard) refbuf[refcount].reflen |= WildCard; if (f0->h.negation) refbuf[refcount].reflen |= NegationFlag; ++refcount; } f0->h.u3.numnames = refcount; if (extend) { char *s; ff->h.u3.numnames = refcount; i = strlen(ff->h.text) + strlen(filt0)+2; if (i <= FILT_TEXTBUFSIZE) { /* Fits in our built-in buffer block - like previous.. ** Append on existing buffer */ s = ff->textbuf + strlen(ff->textbuf); sprintf(s, " %s", filt0); } else { /* It does not fit anymore.. */ s = malloc(i); /* alloc a new one */ sprintf(s, "%s %s", p, filt0); /* .. and catenate. */ p = ff->h.text; if (ff->h.text != ff->textbuf) /* possibly free old */ free((void*)p); ff->h.text = s; /* store new */ } } /* If not extending existing filter item, let main parser do the finalizations */ return extend; } int filter_parse_one_s(struct filter_t *f0, struct filter_t **ffp, const char *filt0) { /* s/pri/alt/over Symbol filter pri = symbols in primary table alt = symbols in alternate table over = overlay character (case sensitive) For example: s/-> This will pass all House and Car symbols (primary table) s//# This will pass all Digi with or without overlay s//#/T This will pass all Digi with overlay of capital T About 10-15 s-filters in entire APRS-IS core at any given time. Up to 520 invocations per second at peak. */ const char *s = filt0; // struct filter_t *ff = *ffp; int len1, len2, len3, len4, len5, len6; if (*s == '-') ++s; if (*s == 's' || *s == 'S') ++s; if (*s != '/') return -1; ++s; len1 = len2 = len3 = len4 = len5 = len6 = 0; while (1) { len1 = s - filt0; while (*s && *s != '/') ++s; len2 = s - filt0; f0->h.u3.len1s = len1; f0->h.u4.len1 = len2 - len1; f0->h.u5.lens.len2s = f0->h.u5.lens.len2 = f0->h.u5.lens.len3s = f0->h.u5.lens.len3 = 0; if (!*s) break; if (*s == '/') ++s; len3 = s - filt0; while (*s && *s != '/') ++s; len4 = s - filt0; f0->h.u5.lens.len2s = len3; f0->h.u5.lens.len2 = len4 - len3; if (!*s) break; if (*s == '/') ++s; len5 = s - filt0; while (*s) ++s; len6 = s - filt0; f0->h.u5.lens.len3s = len5; f0->h.u5.lens.len3 = len6 - len5; break; } if ((len6-len5 > 0) && (len4-len3 == 0)) { /* overlay but no secondary table.. */ return -1; /* bad parse */ } #if 0 { const char *s1 = filt0+len1, *s2 = filt0+len3, *s3 = filt0+len5; int l1 = len2-len1, l2 = len4-len3, l3 = len6-len5; // hlog( LOG_DEBUG, "parse s-filter: '%.*s' '%.*s' '%.*s'", l1, s1, l2, s2, l3, s3 ); } #endif return 0; } int filter_parse(struct filter_t **ffp, const char *filt) { struct filter_t f0; int i; const char *filt0 = filt; const char *s; char dummyc, dummy2; struct filter_t *ff, *f; ff = *ffp; for ( ; ff && ff->h.next; ff = ff->h.next) ; /* ff points to last so far accumulated filter, if none were previously received, it is NULL.. */ memset(&f0, 0, sizeof(f0)); if (*filt == '-') { f0.h.negation = 1; ++filt; } f0.h.type = *filt; if (!strchr("abdefmopqrstuABDEFMOPQRSTU",*filt)) { // Not valid filter code // hlog(LOG_DEBUG, "Bad filter code: %s", filt0); if (debug) printf("Bad filter code: %s\n", filt0); return -1; } switch (f0.h.type) { case 'a': case 'A': /* a/latN/lonW/latS/lonE Area filter -- OPTIMIZE! */ f0.h.type = 'a'; // inside area i = sscanf(filt+1, "/%f/%f/%f/%f%c%c", &f0.h.f_latN, &f0.h.u2.f_lonW, &f0.h.u1.f_latS, &f0.h.f_lonE, &dummyc, &dummy2); if (i == 6 && dummyc == '/' && dummy2 == '-') { i = 4; f0.h.type = 'A'; // outside area! } if (i == 5 && dummyc == '-') { i = 4; f0.h.type = 'A'; // outside area! } if (i == 5 && dummyc == '/') { i = 4; } if (i != 4) { // hlog(LOG_DEBUG, "Bad filter parse: %s", filt0); if (debug) printf("Bad filter parse: %s", filt0); return -1; } if (!( -90.01 < f0.h.f_latN && f0.h.f_latN < 90.01)) { // hlog(LOG_DEBUG, "Bad filter latN value: %s", filt0); if (debug) printf("Bad filter latN value: %s", filt0); return -2; } if (!(-180.01 < f0.h.u2.f_lonW && f0.h.u2.f_lonW < 180.01)) { // hlog(LOG_DEBUG, "Bad filter lonW value: %s", filt0); if (debug) printf("Bad filter lonW value: %s", filt0); return -2; } if (!( -90.01 < f0.h.u1.f_latS && f0.h.u1.f_latS < 90.01)) { // hlog(LOG_DEBUG, "Bad filter latS value: %s", filt0); if (debug) printf("Bad filter latS value: %s", filt0); return -2; } if (!(-180.01 < f0.h.f_lonE && f0.h.f_lonE < 180.01)) { // hlog(LOG_DEBUG, "Bad filter lonE value: %s", filt0); if (debug) printf("Bad filter lonE value: %s", filt0); return -2; } if (f0.h.u2.f_lonW > f0.h.f_lonE) { // wrong way, swap longitudes float t = f0.h.u2.f_lonW; f0.h.u2.f_lonW = f0.h.f_lonE; f0.h.f_lonE = t; } if (f0.h.u1.f_latS > f0.h.f_latN) { // wrong way, swap latitudes float t = f0.h.u1.f_latS; f0.h.u1.f_latS = f0.h.f_latN; f0.h.f_latN = t; } // hlog(LOG_DEBUG, "Filter: %s -> A %.3f %.3f %.3f %.3f", filt0, f0.h.f_latN, f0.h.f_lonW, f0.h.f_latS, f0.h.f_lonE); f0.h.f_latN = filter_lat2rad(f0.h.f_latN); f0.h.u2.f_lonW = filter_lon2rad(f0.h.u2.f_lonW); f0.h.u1.f_latS = filter_lat2rad(f0.h.u1.f_latS); f0.h.f_lonE = filter_lon2rad(f0.h.f_lonE); break; case 'b': case 'B': /* b/call1/call2... Budlist filter (*) */ i = filter_parse_one_callsignset(ffp, &f0, filt0, MatchWild ); if (i < 0) return i; if (i > 0) /* extended previous */ return 0; break; case 'd': case 'D': /* d/digi1/digi2... Digipeater filter (*) */ i = filter_parse_one_callsignset(ffp, &f0, filt0, MatchWild ); if (i < 0) return i; if (i > 0) /* extended previous */ return 0; break; #if 0 case 'e': case 'E': /* e/call1/call1/... Entry station filter (*) */ i = filter_parse_one_callsignset(ffp, &f0, filt0, MatchWild ); if (i < 0) return i; if (i > 0) /* extended previous */ return 0; break; #endif case 'f': case 'F': /* f/call/dist Friend's range filter */ i = sscanf(filt+1, "/%9[^/]/%f", f0.h.u5.refcallsign.callsign, &f0.h.u2.f_dist); // negative distance means "outside this range." // and makes most sense with overall negative filter! if (i != 2 || (-0.1 < f0.h.u2.f_dist && f0.h.u2.f_dist < 0.1)) { // hlog(LOG_DEBUG, "Bad filter parse: %s", filt0); if (debug) printf("Bad filter parse: %s", filt0); return -1; } f0.h.u5.refcallsign.callsign[CALLSIGNLEN_MAX] = 0; f0.h.u5.refcallsign.reflen = strlen(f0.h.u5.refcallsign.callsign); f0.h.u3.numnames = 0; /* reusing this as "position-cache valid" flag */ // hlog(LOG_DEBUG, "Filter: %s -> F xxx %.3f", filt0, f0.h.u2.f_dist); /* NOTE: Could do static location resolving at connect time, ** and then use the same way as 'r' range does. The friends ** are rarely moving... */ break; case 'g': case 'G': // g/call1/call2/ Group Messaging filter i = filter_parse_one_callsignset(ffp, &f0, filt0, MatchWild ); if (i < 0) return i; if (i > 0) /* extended previous */ return 0; break; case 'm': case 'M': /* m/dist My range filter */ if (myloc_latstr == NULL) { printf("The M/radius_km filter requires top-level myloc definition. It doesn't exist.\n"); return -1; } f0.h.type = 'r'; // internal implementation at Aprx is a RANGE filter. f0.h.f_latN = myloc_lat; // radians f0.h.f_lonE = myloc_lon; // radians f0.h.u1.f_coslat = myloc_coslat; i = sscanf(filt+1, "/%f", &f0.h.u2.f_dist); if (i != 1 || f0.h.u2.f_dist < 0.1) { // hlog(LOG_DEBUG, "Bad filter parse: %s", filt0); if (debug) printf("Bad filter parse: %s", filt0); return -1; } f0.h.u3.numnames = 0; /* reusing this as "position-cache valid" flag */ // hlog(LOG_DEBUG, "Filter: %s -> M %.3f", filt0, f0.h.u2.f_dist); break; case 'o': case 'O': /* o/obje1/obj2... Object filter (*) */ i = filter_parse_one_callsignset(ffp, &f0, filt0, MatchWild ); if (i < 0) return i; if (i > 0) /* extended previous */ return 0; break; case 'p': case 'P': /* p/aa/bb/cc... Prefix filter Pass traffic with fromCall that start with aa or bb or cc... */ i = filter_parse_one_callsignset(ffp, &f0, filt0, MatchWild ); if (i < 0) return i; if (i > 0) /* extended previous */ return 0; break; #if 0 case 'q': case 'Q': /* q/con/ana q Contruct filter */ s = filt+1; f0.h.type = 'q'; f0.h.u4.bitflags = 0; /* For QC_* flags */ if (*s++ != '/') { // hlog(LOG_DEBUG, "Bad q-filter parse: %s", filt0); if (debug) printf("Bad q-filter parse: %s", filt0); return -1; } for ( ; *s && *s != '/'; ++s ) { switch (*s) { case 'C': f0.h.u4.bitflags |= QC_C; break; case 'X': f0.h.u4.bitflags |= QC_X; break; case 'U': f0.h.u4.bitflags |= QC_U; break; case 'o': f0.h.u4.bitflags |= QC_o; break; case 'O': f0.h.u4.bitflags |= QC_O; break; case 'S': f0.h.u4.bitflags |= QC_S; break; case 'r': f0.h.u4.bitflags |= QC_r; break; case 'R': f0.h.u4.bitflags |= QC_R; break; case 'Z': f0.h.u4.bitflags |= QC_Z; break; case 'I': f0.h.u4.bitflags |= QC_I; break; default: // hlog(LOG_DEBUG, "Bad q-filter parse: %s", filt0); if (debug) printf("Bad q-filter parse: %s", filt0); return -1; } } if (*s == '/') { /* second format */ ++s; if (*s == 'i' || *s == 'I') { f0.h.u4.bitflags |= QC_AnalyticsI; ++s; } if (*s) { // hlog(LOG_DEBUG, "Bad q-filter parse: %s", filt0); if (debug) printf("Bad q-filter parse: %s", filt0); return -1; } } break; #endif case 'r': case 'R': /* r/lat/lon/dist Range filter */ i = sscanf(filt+1, "/%f/%f/%f", &f0.h.f_latN, &f0.h.f_lonE, &f0.h.u2.f_dist); // negative distance means "outside this range." // and makes most sense with overall negative filter! if (i != 3 || (-0.1 < f0.h.u2.f_dist && f0.h.u2.f_dist < 0.1)) { // hlog(LOG_DEBUG, "Bad filter parse: %s", filt0); if (debug) printf("Bad filter parse: %s", filt0); return -1; } if (!( -90.01 < f0.h.f_latN && f0.h.f_latN < 90.01)) { // hlog(LOG_DEBUG, "Bad filter lat value: %s", filt0); if (debug) printf("Bad filter lat value: %s", filt0); return -2; } if (!(-180.01 < f0.h.f_lonE && f0.h.f_lonE < 180.01)) { // hlog(LOG_DEBUG, "Bad filter lon value: %s", filt0); if (debug) printf("Bad filter lon value: %s", filt0); return -2; } // hlog(LOG_DEBUG, "Filter: %s -> R %.3f %.3f %.3f", filt0, f0.h.f_latN, f0.h.f_lonE, f0.h.u2.f_dist); f0.h.f_latN = filter_lat2rad(f0.h.f_latN); f0.h.f_lonE = filter_lon2rad(f0.h.f_lonE); f0.h.u1.f_coslat = cosf( f0.h.f_latN ); /* Store pre-calculated COS of LAT */ break; case 's': case 'S': /* s/pri/alt/over Symbol filter */ i = filter_parse_one_s( &f0, ffp, filt0 ); if (i < 0) { // hlog(LOG_DEBUG, "Bad s-filter syntax: %s", filt0); if (debug) printf("Bad s-filter syntax: %s", filt0); return i; } if (i > 0) /* extended previous */ return 0; break; case 't': case 'T': /* t/.............. t/............../call/km */ s = filt+1; f0.h.type = 't'; f0.h.u4.bitflags = 0; f0.h.u3.numnames = 0; /* reusing this as "position-cache valid" flag */ if (*s++ != '/') { // hlog(LOG_DEBUG, "Bad filter parse: %s", filt0); if (debug) printf("Bad t-filter syntax: %s", filt0); return -1; } for ( ; *s && *s != '/'; ++s ) { switch (*s) { case '*': f0.h.u4.bitflags |= ~T_CWOP; /* "ALL" -- excluding CWOP */ break; case '3': f0.h.u4.bitflags |= T_THIRDPARTY; break; case 'c': case 'C': f0.h.u4.bitflags |= T_CWOP; break; case 'i': case 'I': f0.h.u4.bitflags |= T_ITEM; break; case 'm': case 'M': f0.h.u4.bitflags |= T_MESSAGE; break; case 'n': case 'N': f0.h.u4.bitflags |= T_NWS; break; case 'o': case 'O': f0.h.u4.bitflags |= T_OBJECT; break; case 'p': case 'P': f0.h.u4.bitflags |= T_POSITION; break; case 'q': case 'Q': f0.h.u4.bitflags |= T_QUERY; break; case 's': case 'S': f0.h.u4.bitflags |= T_STATUS; break; case 't': case 'T': f0.h.u4.bitflags |= T_TELEMETRY; break; case 'u': case 'U': f0.h.u4.bitflags |= T_USERDEF; break; case 'w': case 'W': f0.h.u4.bitflags |= T_WX; break; default: // hlog(LOG_DEBUG, "Bad filter parse: %s", filt0); if (debug) printf("Bad t-filter syntax: %s", filt0); return -1; } } if (*s == '/' && s[1] != 0) { /* second format */ i = sscanf(s, "/%9[^/]/%f%c", f0.h.u5.refcallsign.callsign, &f0.h.u2.f_dist, &dummyc); // negative distance means "outside this range." // and makes most sense with overall negative filter! if ( i != 2 || (-0.1 < f0.h.u2.f_dist && f0.h.u2.f_dist < 0.1) || /* 0.1 km minimum radius */ strlen(f0.h.u5.refcallsign.callsign) < CALLSIGNLEN_MIN ) { // hlog(LOG_DEBUG, "Bad filter parse: %s", filt0); if (debug) printf("Bad t-filter parse: %s", filt0); return -1; } f0.h.u5.refcallsign.callsign[CALLSIGNLEN_MAX] = 0; f0.h.u5.refcallsign.reflen = strlen(f0.h.u5.refcallsign.callsign); f0.h.type = 'T'; /* two variants... */ } break; case 'u': case 'U': /* u/unproto1/unproto2... Unproto filter (*) */ i = filter_parse_one_callsignset(ffp, &f0, filt0, MatchWild ); if (i < 0) return i; if (i > 0) /* extended previous */ return 0; break; default:; /* No pre-parsers for other types */ // hlog(LOG_DEBUG, "Filter: %s", filt0); if (debug) printf("Bad filter code: %s\n", filt0); return -1; break; } // if (!c) return 0; /* Just a verification scan, not actual fill in parse */ /* OK, pre-parsing produced accepted result */ #ifndef _FOR_VALGRIND_ f = cellmalloc(filter_cells); if (!f) return -1; *f = f0; /* store pre-parsed values */ if (strlen(filt0) < FILT_TEXTBUFSIZE) { strcpy(f->textbuf, filt0); f->h.text = f->textbuf; } else f->h.text = strdup(filt0); /* and copy of filter text */ #else f = calloc(1, sizeof(*f) + strlen(filt0)); *f = f0; /* store pre-parsed values */ f->h.text = f->textbuf; strcpy(f->textbuf, filt); /* and copy of filter text */ #endif /* hlog(LOG_DEBUG, "parsed filter: t=%c n=%d '%s'", f->h.type, f->h.negation, f->h.text); */ /* link to the tail.. */ if (ff) ffp = &ff->h.next; *ffp = f; return 0; } /* Discard the defined filter chain */ void filter_free(struct filter_t *f) { struct filter_t *fnext; for ( ; f ; f = fnext ) { fnext = f->h.next; /* If not pointer to internal string, free it.. */ #ifndef _FOR_VALGRIND_ if (f->h.text != f->textbuf) free((void*)(f->h.text)); cellfree(filter_cells, f); #else free(f); #endif } } /* # # Input: This[La] Source Latitude, in radians # This[Lo] Source Longitude, in radians # That[La] Destination Latitude, in radians # That[Lo] Destination Longitude, in radians # Output: R[s] Distance, in kilometers # function maidenhead_km_distance($This, $That) { #Haversine Formula (from R.W. Sinnott, "Virtues of the Haversine", #Sky and Telescope, vol. 68, no. 2, 1984, p. 159): $dlon = $That[Lo] - $This[Lo]; $dlat = $That[La] - $This[La]; $sinDlat2 = sin($dlat/2); $sinDlon2 = sin($dlon/2); $a = ($sinDlat2 * $sinDlat2 + cos($This[La]) * cos($That[La]) * $sinDlon2 * $sinDlon2); # The Haversine Formula can be expressed in terms of a two-argument # inverse tangent function, atan2(y,x), instead of an inverse sine # as follows (no bulletproofing is needed for an inverse tangent): $c = 2.0 * atan2( sqrt($a), sqrt(1.0-$a) ); # $d = R * $c ; # Radius of ball times angle [radians] ... $R[s] = rad2deg($c) * 111.2; return($R); } */ static float maidenhead_km_distance(float lat1, float coslat1, float lon1, float lat2, float coslat2, float lon2) { float sindlat2 = sinf((lat1 - lat2) * 0.5); float sindlon2 = sinf((lon1 - lon2) * 0.5); float a = (sindlat2 * sindlat2 + coslat1 * coslat2 * sindlon2 * sindlon2); float c = 2.0 * atan2f( sqrtf(a), sqrtf(1.0 - a)); return ((111.2 * 180.0 / M_PI) * c); } /* * * http://www.aprs-is.net/javaprssrvr/javaprsfilter.htm * */ static int filter_process_one_a(struct pbuf_t *pb, struct filter_t *f) { /* a/latN/lonW/latS/lonE Area filter The area filter works the same as range filter but the filter is defined as a box of coordinates. The coordinates can also been seen as upper left coordinate and lower right. Lat/lon are decimal degrees. South and west are negative. Multiple area filters can be defined at the same time. Messages addressed to stations within the area are also passed. (by means of aprs packet parse finding out the location..) 50-70 instances in APRS-IS core at any given time. Up to 2500 invocations per second. */ ; if (!(pb->flags & F_HASPOS)) /* packet with a position.. (msgs with RECEIVER's position) */ return 0; if ((pb->lat <= f->h.f_latN) && (pb->lat >= f->h.u1.f_latS) && (pb->lng <= f->h.f_lonE) && /* East POSITIVE ! */ (pb->lng >= f->h.u2.f_lonW)) { /* Inside the box */ return f->h.negation ? 2 : 1; } else if (f->h.type == 'A') { /* Outside the box */ return f->h.negation ? 2 : 1; } return 0; } static int filter_process_one_b(struct pbuf_t *pb, struct filter_t *f) { /* b/call1/call2... Budlist filter Pass all traffic FROM exact call: call1, call2, ... (* wild card allowed) 50/70 instances in APRS-IS core at any given time. Up to 2500 invocations per second. */ struct filter_refcallsign_t ref; int i = pb->srccall_end - pb->data; if (i > CALLSIGNLEN_MAX) i = CALLSIGNLEN_MAX; /* source address "addr">... */ memset( &ref, 0, sizeof(ref) ); // clear it all memcpy( ref.callsign, pb->data, i); return filter_match_on_callsignset(&ref, i, f, MatchWild); } static int filter_process_one_d(struct pbuf_t *pb, struct filter_t *f) { /* d/digi1/digi2... Digipeater filter The digipeater filter will match all packets that have been digipeated by a particular station(s) (the station's call is in the path). This filter allows the * wildcard. 25-35 instances in APRS-IS core at any given time. Up to 1300 invocations per second. */ struct filter_refcallsign_t ref; const char *d = pb->srccall_end + 1 + pb->dstcall_len + 1; /* viacall start */ const char *q = pb->qconst_start-1; int rc, i, j = 0; // hlog( LOG_INFO, "digifilter: '%.*s' -> '%.*s' q-d=%d", // (int)(pb->packet_len < 50 ? pb->packet_len : 50), // pb->data, (int)i, d, (int)(q-d) ); for (i = 0; d < q; ) { ++j; if (j > 10) break; // way too many callsigns... (code bug?) if (*d == ':') break; //end of via fields if (*d == ',') ++d; // second round and onwards.. for (i = 0; i+d <= q && i <= CALLSIGNLEN_MAX; ++i) { if ((d[i] == ',') || (d[i] == ':')) break; } // hlog(LOG_INFO, "d: -> (%d,%d) '%.*s'", (int)(d-pb->data), i, i, d); // digipeater address ",addr," memset( &ref, 0, sizeof(ref) ); // clear it all memcpy( ref.callsign, d, i); if (i > CALLSIGNLEN_MAX) i = CALLSIGNLEN_MAX; rc = filter_match_on_callsignset(&ref, i, f, MatchWild); if (rc) { return (rc); } d += i; } return 0; } #if 0 static int filter_process_one_e(struct pbuf_t *pb, struct filter_t *f) { /* e/call1/call1/... Entry station filter This filter matches all packets with the specified callsign-SSID(s) immediately following the q construct. This allows filtering based on receiving IGate, etc. Supports * wildcard. 2-6 instances in APRS-IS core at any given time. Up to 200 invocations per second. */ struct filter_refcallsign_t ref; const char *e = pb->qconst_start+4; int i = pb->entrycall_len; if (i < 1) /* should not happen.. */ return 0; /* Bad Entry-station callsign */ /* entry station address "qA*,addr," */ memset( &ref, 0, sizeof(ref) ); // clear it all memcpy( ref.callsign, e, i); return filter_match_on_callsignset(&ref, i, f, MatchWild); } #endif #ifndef DISABLE_IGATE static int filter_process_one_f(struct pbuf_t *pb, struct filter_t *f, historydb_t *historydb) { /* f/call/dist Friend Range filter This is the same as the range filter except that the center is defined as the last known position of call. Multiple friend filters can be defined at the same time. Messages addressed to stations within the range are also passed. (by means of aprs packet parse finding out the location..) NOTE: Could do static location resolving at connect time, and then use the same way as 'r' range does. The friends are rarely moving... 15-25 instances in APRS-IS core at any given time. Up to 900 invocations per second. Caching the historydb_lookup() result will lower CPU power spent on the historydb. */ history_cell_t *history; float r; float lat1, lon1, coslat1; float lat2, lon2, coslat2; const char *callsign = f->h.u5.refcallsign.callsign; int i = f->h.u5.refcallsign.reflen; if (!(pb->flags & F_HASPOS)) { /* packet with a position.. (msgs with RECEIVER's position) */ if (debug) printf("f-filter: no position -> return 0\n"); return 0; /* No position data... */ } /* find friend's last location packet */ if (f->h.hist_age < tick.tv_sec) { history = historydb_lookup( historydb, callsign, i ); f->h.hist_age = tick.tv_sec + hist_lookup_interval; if (!history) { if (debug) printf("f-filter: no history lookup result (%.*s) -> return 0\n", i, callsign ); return 0; /* no lookup result.. */ } f->h.u3.numnames = 1; f->h.f_latN = history->lat; f->h.f_lonE = history->lon; f->h.u1.f_coslat = history->coslat; } if (!f->h.u3.numnames) { if (debug) printf("f-filter: no history lookup result (numnames == 0) -> return 0\n"); return 0; /* histdb lookup cache invalid */ } lat1 = f->h.f_latN; lon1 = f->h.f_lonE; coslat1 = f->h.u1.f_coslat; lat2 = pb->lat; lon2 = pb->lng; coslat2 = pb->cos_lat; r = maidenhead_km_distance(lat1, coslat1, lon1, lat2, coslat2, lon2); if (debug) printf("f-filter: r=%.1f km\n", r); if (f->h.u2.f_dist < 0.0) { // Test for _outside_ the range if (r > -f->h.u2.f_dist) /* Range is more than given limit */ return (f->h.negation) ? 2 : 1; } else { // Test for _inside_ the range if (r < f->h.u2.f_dist) /* Range is less than given limit */ return (f->h.negation) ? 2 : 1; } return 0; } #endif static int filter_process_one_g(struct pbuf_t *pb, struct filter_t *f) { /* g/call1/call2... Group Messaging filter Pass all message traffic TO calls call1/call2/... (* wild card allowed) */ struct filter_refcallsign_t ref; int i = pb->dstname_len; if (i > CALLSIGNLEN_MAX) i = CALLSIGNLEN_MAX; /* source address "addr">... */ memset( &ref, 0, sizeof(ref) ); // clear it all memcpy( ref.callsign, pb->dstname, i); return filter_match_on_callsignset(&ref, i, f, MatchWild); } #if 0 // No M filter implementation, but there is M filter parse producing R filter.. static int filter_process_one_m(struct pbuf_t *pb, struct filter_t *f) { /* m/dist My Range filter This is the same as the range filter except that the center is defined as the last known position of the logged in client. Messages addressed to stations within the range are also passed. (by means of aprs packet parse finding out the location..) NOTE: MY RANGE is rarely moving, once there is a positional fix, it could stay fixed... 80-120 instances in APRS-IS core at any given time. Up to 4200 invocations per second. Caching the historydb_lookup() result will lower CPU power spent on the historydb. At Aprx: Implemented using Range filter, and prepared at parse time.. */ float lat2, lon2, coslat2; float r; if (!(pb->flags & F_HASPOS)) /* packet with a position.. (msgs with RECEIVER's position) */ return 0; lat2 = pb->lat; lon2 = pb->lng; coslat2 = pb->cos_lat; r = maidenhead_km_distance(myloc_lat, myloc_coslat, myloc_lon, lat2, coslat2, lon2); if (f->h.u2.f_dist < 0.0) { // Test for _outside_ the range if (r > -f->h.u2.f_dist) /* Range is more than given limit */ return (f->h.negation) ? 2 : 1; } else { // Test for _inside_ the range if (r < f->h.u2.f_dist) /* Range is less than given limit */ return (f->h.negation) ? 2 : 1; } return 0; } #endif static int filter_process_one_o(struct pbuf_t *pb, struct filter_t *f) { /* o/obj1/obj2... Object filter Pass all objects with the exact name of obj1, obj2, ... (* wild card allowed) PROBABLY ALSO ITEMs Usage frequency: 0.2% .. 2 cases in entire APRS-IS core at any time. About 50-70 invocations per second at peak. */ struct filter_refcallsign_t ref; int i; // const char *s; if ( (pb->packettype & (T_OBJECT|T_ITEM)) == 0 ) { /* not an Object NOR Item */ if (debug) printf("o-filter: packet type not OBJECT nor ITEM\n"); return 0; } /* parse_aprs() has picked item/object name pointer and length.. */ // s = pb->srcname; i = pb->srcname_len; if (i < 1) { if (debug) printf("o-filter: object/item name length < 1 at the packet\n"); return 0; /* Bad object/item name */ } /* object name */ memset( &ref, 0, sizeof(ref) ); // clear it all memcpy( ref.callsign, pb->srcname, i); // copy the interesting part return filter_match_on_callsignset(&ref, i, f, MatchWild); } static int filter_process_one_p(struct pbuf_t *pb, struct filter_t *f) { /* p/aa/bb/cc... Prefix filter Pass traffic with fromCall that start with aa or bb or cc... Usage frequency: 14.4% .. 80-100 cases in entire APRS-IS core at any time. Up to 3500 invocations per second at peak. */ struct filter_refcallsign_t ref; int i = pb->srccall_end - pb->data; if (i > CALLSIGNLEN_MAX) i = CALLSIGNLEN_MAX; /* source address "addr">... */ memset( &ref, 0, sizeof(ref) ); // clear it all memcpy( ref.callsign, pb->data, i); return filter_match_on_callsignset(&ref, i, f, MatchPrefix); } #if 0 static int filter_process_one_q(struct pbuf_t *pb, struct filter_t *f) { /* q/con/ana q Contruct filter q = q Construct command con = list of q Construct to pass (case sensitive) ana = analysis based on q Construct. I = Pass positions from IGATES identified by qAr or qAR. For example: q/C Pass all traffic with qAC q/rR Pass all traffic with qAr or qAR q//I Pass all position packets from IGATES identified in other packets by qAr or qAR Usage frequency: 0.4% .. 2-6 cases in entire APRS-IS core at any time. Up to 200 invocations per second at peak. */ const char *e = pb->qconst_start+2; int mask; switch (*e) { case 'C': mask = QC_C; break; case 'X': mask = QC_X; break; case 'U': mask = QC_U; break; case 'o': mask = QC_o; break; case 'O': mask = QC_O; break; case 'S': mask = QC_S; break; case 'r': mask = QC_r; break; case 'R': mask = QC_R; break; case 'Z': mask = QC_Z; break; case 'I': mask = QC_I; break; default: return 0; /* Should not happen... */ break; } if (f->h.u4.bitflags & mask) { /* Something matched! */ return 1; } if (f->h.u4.bitflags & QC_AnalyticsI) { /* Oh ? Analytical! Has it ever been accepted into entry-igate database ? */ if (filter_entrycall_lookup(pb)) return 1; /* Found on entry-igate database! */ } return 0; /* No match */ } #endif static int filter_process_one_r(struct pbuf_t *pb, struct filter_t *f) { /* r/lat/lon/dist Range filter Pass posits and objects within dist km from lat/lon. lat and lon are signed degrees, i.e. negative for West/South and positive for East/North. Multiple range filters can be defined at the same time. Messages addressed to stations within the range are also passed. (by means of aprs packet parse finding out the location..) About 120-150 r-filters in entire APRS-IS core at any given time. Up to 5200 invocations per second at peak. */ float lat1 = f->h.f_latN; float lon1 = f->h.f_lonE; float coslat1 = f->h.u1.f_coslat; float r; float lat2, lon2, coslat2; if (!(pb->flags & F_HASPOS)) { /* packet with a position.. (msgs with RECEIVER's position) */ return 0; } lat2 = pb->lat; lon2 = pb->lng; coslat2 = pb->cos_lat; r = maidenhead_km_distance(lat1, coslat1, lon1, lat2, coslat2, lon2); if (f->h.u2.f_dist < 0.0) { // Test for _outside_ the range if (r > -f->h.u2.f_dist) /* Range is more than given limit */ return (f->h.negation) ? 2 : 1; } else { // Test for _inside_ the range if (r < f->h.u2.f_dist) /* Range is less than given limit */ return (f->h.negation) ? 2 : 1; } return 0; } static int filter_process_one_s(struct pbuf_t *pb, struct filter_t *f) { /* s/pri/alt/over Symbol filter pri = symbols in primary table alt = symbols in alternate table over = overlay character (case sensitive) For example: s/-> This will pass all House and Car symbols (primary table) s//# This will pass all Digi with or without overlay s//#/T This will pass all Digi with overlay of capital T About 10-15 s-filters in entire APRS-IS core at any given time. Up to 520 invocations per second at peak. */ const char symtable = (pb->symbol[0] == '/') ? '/' : '\\'; const char symcode = pb->symbol[1]; const char symolay = (pb->symbol[0] != symtable) ? pb->symbol[0] : 0; // hlog( LOG_DEBUG, "s-filt %c|%c|%c %s", symtable, symcode, symolay ? symolay : '-', f->h.text ); if (f->h.u4.len1 != 0) { /* Primary table symbols */ if ( symtable == '/' && memchr(f->h.text+f->h.u3.len1s, symcode, f->h.u4.len1) != NULL ) return f->h.negation ? 2 : 1; // return 0; } if (f->h.u5.lens.len3 != 0) { /* Secondary table with overlay */ if ( memchr(f->h.text+f->h.u5.lens.len3s, symolay, f->h.u5.lens.len3) == NULL ) return 0; // No match on overlay if ( memchr(f->h.text+f->h.u5.lens.len2s, symcode, f->h.u5.lens.len2) == NULL ) return 0; // No match on overlay return f->h.negation ? 2 : 1; } /* OK, no overlay... */ if (f->h.u5.lens.len2 != 0) { /* Secondary table symbols */ if ( symtable != '/' && memchr(f->h.text+f->h.u5.lens.len2s, symcode, f->h.u5.lens.len2) != NULL ) return f->h.negation ? 2 : 1; } /* No match */ return 0; } static int filter_process_one_t(struct pbuf_t *pb, struct filter_t *f, historydb_t *historydb) { /* [-]t/poimntqsu3*c [-]t/poimntqsu3*c/call/km Type filter Pass all traffic based on packet type. One or more types can be defined at the same time, t/otq is a valid definition. c = CWOP (local extension) * = ALL (local extension) i = Items m = Message n = NWS Weather & Weather Objects o = Objects p = Position packets q = Query s = Status t = Telemetry u = User-defined w = Weather 3 = 3rd party frame Note: The weather type filter also passes positions packets for positionless weather packets. The second format allows putting a radius limit around "call" (station callsign-SSID or object name) for the requested station types. About 40-60 s-filters in entire APRS-IS core at any given time. Up to 2100 invocations per second at peak. For the second format perhaps 2-3 in APRS-IS at any time. (mapping to 60-100 invocations per second) Usage examples: -t/c Everything except CWOP t/.*./OH2RDY/50 Everything within 50 km of OH2RDY's last known position ("." is dummy addition for C comments..) */ int rc = 0; if (pb->packettype & f->h.u4.bitflags) /* u4.bitflags as comparison bitmask */ rc = 1; #if 0 if (!rc && (f->h.u4.bitflags & T_WX) && (pb->flags & F_HASPOS)) { /* "Note: The weather type filter also passes positions packets // for positionless weather packets." // // 1) recognize positionless weather packets // 2) register their source callsigns, do this in input_parse // 3) when filtering for weather data, check non-weather // recognized packets against the database in point 2 // 4) pass on packets matching point 3 */ rc = filter_wx_lookup(pb); } #endif /* Either it stops here, or it continues... */ if (rc && f->h.type == 'T') { /* Within a range of callsign ? * Rather rare.. perhaps 2-3 in APRS-IS. */ float range, r; float lat1, lon1, coslat1; float lat2, lon2, coslat2; #ifndef DISABLE_IGATE const char *callsign = f->h.u5.refcallsign.callsign; const int callsignlen = f->h.u5.refcallsign.reflen; history_cell_t *history; #endif /* hlog(LOG_DEBUG, "Type filter with callsign range used! '%s'", f->h.text); */ if (!(pb->flags & F_HASPOS)) /* packet with a position.. (msgs with RECEIVER's position) */ return 0; /* No positional data.. */ range = f->h.u2.f_dist; /* So.. Now we have a callsign, and we have range. Lets find callsign's location, and range to that item.. .. 60-100 lookups per second. */ #ifndef DISABLE_IGATE if (f->h.hist_age < tick.tv_sec) { history = historydb_lookup( historydb, callsign, callsignlen ); /* hlog( LOG_DEBUG, "Type filter with callsign range used! call='%s', range=%.1f position %sfound", // callsign, range, i ? "" : "not "); */ if (!history) return 0; /* no lookup result.. */ f->h.u3.numnames = 1; f->h.hist_age = tick.tv_sec + hist_lookup_interval; f->h.f_latN = history->lat; f->h.f_lonE = history->lon; f->h.u1.f_coslat = history->coslat; } #endif if (!f->h.u3.numnames) return 0; /* No valid data at range center position cache */ lat1 = f->h.f_latN; lon1 = f->h.f_lonE; coslat1 = f->h.u1.f_coslat; lat2 = pb->lat; lon2 = pb->lng; coslat2 = pb->cos_lat; r = maidenhead_km_distance(lat1, coslat1, lon1, lat2, coslat2, lon2); if (range < 0.0) { // Test for _outside_ the range if (r > -range) /* Range is more than given limit */ return (f->h.negation) ? 2 : 1; } else { // Test for _inside_ the range if (r < range) /* Range is less than given limit */ return (f->h.negation) ? 2 : 1; } return 0; /* unimplemented! */ } return (f->h.negation ? (rc+rc) : rc); } static int filter_process_one_u(struct pbuf_t *pb, struct filter_t *f) { /* u/unproto1/unproto2/... Unproto filter This filter passes all packets with the specified destination callsign-SSID(s) (also known as the To call or unproto call). Supports * wild card. Seen hardly ever in APRS-IS core, some rare instances in Tier-2. */ struct filter_refcallsign_t ref; const char *d = pb->srccall_end+1; int i; i = pb->dstcall_len; if (i > CALLSIGNLEN_MAX) i = CALLSIGNLEN_MAX; /* hlog( LOG_INFO, "unproto: '%.*s' -> '%.*s'", // (int)(pb->packet_len < 30 ? pb->packet_len : 30), pb->data, (int)i, d); */ /* destination address ">addr," */ memset( &ref, 0, sizeof(ref) ); // clear it all memcpy( ref.callsign, d, i); return filter_match_on_callsignset(&ref, i, f, MatchWild); } static int filter_process_one(struct pbuf_t *pb, struct filter_t *f, historydb_t *historydb) { int rc = 0; if (debug>1) printf("filter_process_one() type=%c '%s'\n",f->h.type, f->h.text); switch (f->h.type) { case 'a': case 'A': rc = filter_process_one_a(pb, f); break; case 'b': case 'B': rc = filter_process_one_b(pb, f); break; case 'd': case 'D': rc = filter_process_one_d(pb, f); break; #if 0 case 'e': case 'E': rc = filter_process_one_e(pb, f); break; #endif #ifndef DISABLE_IGATE case 'f': case 'F': rc = filter_process_one_f(pb, f, historydb); break; #endif case 'g': case 'G': rc = filter_process_one_g(pb, f); break; #if 0 // these are compiled as R filters, no M filters exist internally case 'm': case 'M': rc = filter_process_one_m(pb, f); break; #endif case 'o': case 'O': rc = filter_process_one_o(pb, f); break; case 'p': case 'P': rc = filter_process_one_p(pb, f); break; #if 0 case 'q': case 'Q': rc = filter_process_one_q(pb, f); break; #endif case 'r': case 'R': rc = filter_process_one_r(pb, f); break; case 's': case 'S': rc = filter_process_one_s(pb, f); break; case 't': case 'T': rc = filter_process_one_t(pb, f, historydb); break; case 'u': case 'U': rc = filter_process_one_u(pb, f); break; default: rc = -1; break; } // hlog(LOG_DEBUG, "filter '%s' rc=%d", f->h.text, rc); return rc; } int filter_process(struct pbuf_t *pb, struct filter_t *f, historydb_t *historydb) { int seen_accept = 0; for ( ; f; f = f->h.next ) { int rc = filter_process_one(pb, f, historydb); /* no reports to user about bad filters.. */ if (rc == 1) seen_accept = 1; else if (rc == 2) return -1; /* "2" reply means: "match, but don't pass.." */ } return seen_accept; } aprx-2.9.0/historydb.c000664 000000 000000 00000042106 13040775352 014640 0ustar00rootroot000000 000000 /******************************************************************** * APRX -- 2nd generation APRS iGate and digi with * * minimal requirement of esoteric facilities or * * libraries of any kind beyond UNIX system libc. * * * * (c) Matti Aarnio - OH2MQK, 2007-2014 * * * ********************************************************************/ #include "aprx.h" #ifndef DISABLE_IGATE #include #include #include int lastposition_storetime = 3600; // 1 hour static historydb_t **_dbs; static int _dbs_count; void historydb_nopos(void) {} /* profiler call counter items */ void historydb_nointerest(void) {} void historydb_hashmatch(void) {} void historydb_keymatch(void) {} void historydb_dataupdate(void) {} // Single aprx wide alloc system static cellarena_t *historydb_cells; const int historydb_cellsize = sizeof(struct history_cell_t); const int historydb_cellalign = __alignof__(struct history_cell_t); void historydb_init(void) { // printf("historydb_init() sizeof(mutex)=%d sizeof(rwlock)=%d\n", // sizeof(pthread_mutex_t), sizeof(rwlock_t)); // _dbs = malloc(sizeof(void*)); // _dbs_count = 0; historydb_cells = cellinit( "historydb", historydb_cellsize, historydb_cellalign, CELLMALLOC_POLICY_FIFO, 32 /* 32 kB */, 0 /* minfree */ ); } /* new instance - for new digipeater tx */ historydb_t *historydb_new(void) { historydb_t *db = calloc(1, sizeof(*db)); ++_dbs_count; _dbs = realloc(_dbs, sizeof(void*)*_dbs_count); _dbs[_dbs_count-1] = db; return db; } /* Called only under WR-LOCK */ void historydb_free(struct history_cell_t *p) { if (p->packet != p->packetbuf) free(p->packet); if (p->last_heard != p->last_heard_buf) free(p->last_heard); --p->db->historydb_cellgauge; cellfree( historydb_cells, p ); } /* Called only under WR-LOCK */ struct history_cell_t *historydb_alloc(historydb_t *db, int packet_len) { struct history_cell_t *ret = cellmalloc( historydb_cells ); if (!ret) return NULL; ++db->historydb_cellgauge; ret->db = db; ret->last_heard = ((top_interfaces_group <= MAX_IF_GROUP) ? ret->last_heard_buf : malloc(sizeof(time_t)*top_interfaces_group)); return ret; } /* * The historydb_atend() does exist primarily to make valgrind * happy about lost memory object tracking. */ void historydb_atend(void) { int j, i; for (j = 0; j < _dbs_count; ++j) { historydb_t *db = _dbs[j]; struct history_cell_t *hp, *hp2; for (i = 0; i < HISTORYDB_HASH_MODULO; ++i) { hp = db->hash[i]; while (hp) { hp2 = hp->next; historydb_free(hp); hp = hp2; } } } } void historydb_dump_entry(FILE *fp, const struct history_cell_t *hp) { fprintf(fp, "%ld\t", hp->arrivaltime); (void)fwrite(hp->key, hp->keylen, 1, fp); fprintf(fp, "\t"); fprintf(fp, "%d\t%d\t", hp->packettype, hp->flags); fprintf(fp, "%f\t%f\t", hp->lat, hp->lon); fprintf(fp, "%d\t", hp->packetlen); (void)fwrite(hp->packet, hp->packetlen, 1, fp); fprintf(fp, "\n"); /* newline */ } void historydb_dump(const historydb_t *db, FILE *fp) { /* Dump the historydb out on text format */ int i; struct history_cell_t *hp; time_t expirytime = tick.tv_sec - lastposition_storetime; for ( i = 0; i < HISTORYDB_HASH_MODULO; ++i ) { hp = db->hash[i]; for ( ; hp ; hp = hp->next ) if (timecmp(hp->arrivaltime, expirytime) > 0) historydb_dump_entry(fp, hp); } } static int foldhash( const unsigned int h1 ) { unsigned int h2 = h1 ^ (h1 >> 7) ^ (h1 >> 14); /* fold hash bits.. */ return (h2 % HISTORYDB_HASH_MODULO); } /* insert... */ history_cell_t *historydb_insert(historydb_t *db, const struct pbuf_t *pb) { return historydb_insert_(db, pb, 0); } history_cell_t *historydb_insert_(historydb_t *db, const struct pbuf_t *pb, const int insertall) { int i; unsigned int h1; int isdead = 0, keylen; struct history_cell_t **hp, *cp, *cp1; time_t expirytime = tick.tv_sec - lastposition_storetime; char keybuf[CALLSIGNLEN_MAX+2]; char *s; // (pb->flags & F_HASPOS) <-- that indicates that at parse time // the packet either had a position, or // a position information was supplemented // to it via historydb lookup if (!insertall && !(pb->packettype & T_POSITION)) { // <-- packet has position data ++db->historydb_noposcount; historydb_nopos(); /* debug thing -- profiling counter */ return NULL; /* No positional data... */ } /* NOTE: Parser does set on MESSAGES the RECIPIENTS ** location if such is known! We do not want them... ** .. and several other cases where packet has no ** positional data in it, but source callsign may ** have previous entry with data. */ /* NOTE2: We could use pb->srcname, and pb->srcname_len here, ** but then we would not know if this is a "kill-item" */ keybuf[CALLSIGNLEN_MAX] = 0; if (pb->packettype & T_OBJECT) { /* Pick object name ";item *" */ memcpy( keybuf, pb->info_start+1, CALLSIGNLEN_MAX+1); keybuf[CALLSIGNLEN_MAX+1] = 0; s = strchr(keybuf, '*'); if (s) *s = 0; else { s = strchr(keybuf, '_'); // kill an object! if (s) { *s = 0; isdead = 1; } } s = keybuf + strlen(keybuf); for ( ; s > keybuf; --s ) { // tail space padded.. if (*s == ' ') *s = ' '; else break; } } else if (pb->packettype & T_ITEM) { // Pick item name ") . . . !" or ") . . . _" memcpy( keybuf, pb->info_start+1, CALLSIGNLEN_MAX+1); keybuf[CALLSIGNLEN_MAX+1] = 0; s = strchr(keybuf, '!'); if (s) *s = 0; else { s = strchr(keybuf, '_'); // kill an item! if (s) { *s = 0; isdead = 1; } } } else if (pb->packettype & T_MESSAGE) { // Pick originator callsign memcpy( keybuf, pb->data, CALLSIGNLEN_MAX) ; s = strchr(keybuf, '>'); if (s) *s = 0; } else if (pb->packettype & T_POSITION) { // Pick originator callsign memcpy( keybuf, pb->data, CALLSIGNLEN_MAX) ; s = strchr(keybuf, '>'); if (s) *s = 0; } else { if (insertall) { // Pick originator callsign memcpy( keybuf, pb->data, CALLSIGNLEN_MAX) ; s = strchr(keybuf, '>'); if (s) *s = 0; } else { historydb_nointerest(); // debug thing -- a profiling counter return NULL; // Not a packet with positional data, not interested in... } } keylen = strlen(keybuf); ++db->historydb_inserts; h1 = keyhash(keybuf, keylen, 0); i = foldhash(h1); if (debug > 1) printf(" key='%s' hash=%d", keybuf, i); cp = cp1 = NULL; hp = &db->hash[i]; // scan the hash-bucket chain, and do incidential obsolete data discard while (( cp = *hp )) { if (timecmp(cp->arrivaltime, expirytime) < 0) { // OLD... *hp = cp->next; cp->next = NULL; historydb_free(cp); continue; } if ( (cp->hash1 == h1)) { // Hash match, compare the key historydb_hashmatch(); // debug thing -- a profiling counter ++db->historydb_hashmatches; if ( cp->keylen == keylen && (memcmp(cp->key, keybuf, keylen) == 0) ) { // Key match! historydb_keymatch(); // debug thing -- a profiling counter ++db->historydb_keymatches; if (isdead) { // Remove this key.. *hp = cp->next; cp->next = NULL; historydb_free(cp); continue; } else { historydb_dataupdate(); // debug thing -- a profiling counter // Update the data content cp1 = cp; if (pb->flags & F_HASPOS) { // Update coordinate, if available cp->lat = pb->lat; cp->coslat = pb->cos_lat; cp->lon = pb->lng; cp->positiontime = pb->t; } cp->packettype = pb->packettype; cp->flags |= pb->flags; cp->arrivaltime = pb->t; cp->flags = pb->flags; cp->packetlen = pb->packet_len; cp->last_heard[pb->source_if_group] = pb->t; if ( cp->packet != cp->packetbuf ) free( cp->packet ); cp->packet = cp->packetbuf; // default case if ( cp->packetlen > sizeof(cp->packetbuf) ) { // Needs bigger buffer than pre-allocated one, // thus it retrieves that one from heap. cp->packet = malloc( cp->packetlen ); } memcpy( cp->packet, pb->data, cp->packetlen ); } } } // .. else no match, advance hp.. hp = &(cp -> next); } if (!cp1 && !isdead) { // Not found on this chain, append it! cp = historydb_alloc(db, pb->packet_len); cp->next = NULL; memcpy(cp->key, keybuf, keylen); cp->key[keylen] = 0; /* zero terminate */ cp->keylen = keylen; cp->hash1 = h1; cp->lat = pb->lat; cp->coslat = pb->cos_lat; cp->lon = pb->lng; cp->arrivaltime = pb->t; cp->packettype = pb->packettype; cp->flags = pb->flags; cp->last_heard[pb->source_if_group] = pb->t; if (pb->flags & F_HASPOS) cp->positiontime = pb->t; cp->packetlen = pb->packet_len; cp->packet = cp->packetbuf; // default case if (cp->packetlen > sizeof(cp->packetbuf)) { // Needs bigger buffer than pre-allocated one, // thus it retrieves that one from heap. cp->packet = malloc( cp->packetlen ); } // Initial value is 32.0 tokens to permit // digipeat a packet source at the first // time it has been heard -- including to // possible multiple transmitters. Within // about 5 seconds this will be dropped // down to max burst rate of the srcratefilter // parameter. This code does not know how // many interfaces there are... cp->tokenbucket = 32.0; *hp = cp; } return *hp; } history_cell_t *historydb_insert_heard(historydb_t *db, const struct pbuf_t *pb) { int i; unsigned int h1; int keylen; struct history_cell_t **hp, *cp, *cp1; time_t expirytime = tick.tv_sec - lastposition_storetime; char keybuf[CALLSIGNLEN_MAX+2]; /* NOTE: Parser does set on MESSAGES the RECIPIENTS ** location if such is known! We do not want them... ** .. and several other cases where packet has no ** positional data in it, but source callsign may ** have previous entry with data. */ /* NOTE2: We could use pb->srcname, and pb->srcname_len here, ** but then we would not know if this is a "kill-item" */ keybuf[CALLSIGNLEN_MAX+1] = 0; if (pb->packettype & T_OBJECT) { historydb_nointerest(); // debug thing -- a profiling counter if (debug > 1) printf(" .. objects not interested\n"); return NULL; // Not interested in ";objects :" } else if (pb->packettype & T_ITEM) { historydb_nointerest(); // debug thing -- a profiling counter if (debug > 1) printf(" .. items not interested\n"); return NULL; // Not interested in ")items..." } else if (pb->packettype & T_MESSAGE) { // Pick originator callsign //memcpy( keybuf, pb->data, CALLSIGNLEN_MAX) ; //s = strchr(keybuf, '>'); //if (s) *s = 0; memcpy(keybuf, pb->srcname, pb->srcname_len); keybuf[pb->srcname_len] = 0; } else if (pb->packettype & T_POSITION) { // Something with a position (but not an item or an object) //memcpy( keybuf, pb->data, CALLSIGNLEN_MAX) ; //s = strchr(keybuf, '>'); //if (s) *s = 0; memcpy(keybuf, pb->srcname, pb->srcname_len); keybuf[pb->srcname_len] = 0; } else { if (debug > 1) printf(" .. other not interested\n"); historydb_nointerest(); // debug thing -- a profiling counter return NULL; // Not a packet with positional data, not interested in... } keylen = strlen(keybuf); ++db->historydb_inserts; h1 = keyhash(keybuf, keylen, 0); i = foldhash(h1); if (debug > 1) printf(" key='%s' hash=%d", keybuf, i); cp1 = NULL; hp = &db->hash[i]; // scan the hash-bucket chain, and do incidential obsolete data discard while (( cp = *hp ) != NULL) { if (timecmp(cp->arrivaltime, expirytime) < 0) { // OLD... if (debug > 1) printf(" .. dropping old record\n"); *hp = cp->next; cp->next = NULL; historydb_free(cp); continue; } if ( (cp->hash1 == h1)) { // Hash match, compare the key historydb_hashmatch(); // debug thing -- a profiling counter ++db->historydb_hashmatches; if (debug > 1) printf(" .. found matching hash"); if ( cp->keylen == keylen && (memcmp(cp->key, keybuf, keylen) == 0) ) { // Key match! if (debug > 1) printf(" .. found matching key!\n"); historydb_keymatch(); // debug thing -- a profiling counter ++db->historydb_keymatches; historydb_dataupdate(); // debug thing -- a profiling counter // Update the data content cp1 = cp; if (pb->flags & F_HASPOS) { // Update coordinate, if available cp->lat = pb->lat; cp->coslat = pb->cos_lat; cp->lon = pb->lng; cp->positiontime = pb->t; cp->arrivaltime = pb->t; } cp->flags |= pb->flags; // Track packet source timestamps cp->last_heard[pb->source_if_group] = pb->t; // Don't save a message on top of positional packet if (!(pb->packettype & T_MESSAGE)) { cp->packettype = pb->packettype; cp->arrivaltime = pb->t; cp->flags = pb->flags; cp->packetlen = pb->packet_len; if ( cp->packet != cp->packetbuf ) free( cp->packet ); cp->packet = cp->packetbuf; // default case if ( cp->packetlen > sizeof(cp->packetbuf) ) { // Needs bigger buffer than pre-allocated one, // thus it retrieves that one from heap. cp->packet = malloc( cp->packetlen ); } memcpy( cp->packet, pb->data, cp->packetlen ); } } } // .. else no match, advance hp.. hp = &(cp -> next); } if (!cp1) { if (debug > 1) printf(" .. inserting new history entry.\n"); // Not found on this chain, append it! cp = historydb_alloc(db, pb->packet_len); cp->next = NULL; memcpy(cp->key, keybuf, keylen); cp->key[keylen] = 0; /* zero terminate */ cp->keylen = keylen; cp->hash1 = h1; cp->lat = pb->lat; cp->coslat = pb->cos_lat; cp->lon = pb->lng; cp->arrivaltime = pb->t; cp->packettype = pb->packettype; cp->flags = pb->flags; cp->last_heard[pb->source_if_group] = pb->t; if (pb->flags & F_HASPOS) cp->positiontime = pb->t; cp->packetlen = pb->packet_len; cp->packet = cp->packetbuf; // default case if (cp->packetlen > sizeof(cp->packetbuf)) { // Needs bigger buffer than pre-allocated one, // thus it retrieves that one from heap. cp->packet = malloc( cp->packetlen ); } *hp = cp; } else return cp1; // != NULL return *hp; } /* lookup... */ history_cell_t *historydb_lookup(historydb_t *db, const char *keybuf, const int keylen) { int i; unsigned int h1; struct history_cell_t *cp; // validity is 5 minutes shorter than expiration time.. time_t validitytime = tick.tv_sec - lastposition_storetime + 5*60; ++db->historydb_lookups; h1 = keyhash(keybuf, keylen, 0); i = foldhash(h1); cp = db->hash[i]; if (debug > 1) printf("historydb_lookup('%.*s') -> i=%d", keylen, keybuf, i); for ( ; cp != NULL ; cp = cp->next ) { if ( (cp->hash1 == h1) && // Hash match, compare the key (cp->keylen == keylen) ) { if (debug > 1) printf(" .. hash match"); if (memcmp(cp->key, keybuf, keylen) == 0) { if (debug > 1) printf(" .. key match"); // Key match! if (timecmp(cp->arrivaltime, validitytime) > 0) { if (debug > 1) printf(" .. and not too old\n"); return cp; } } } } if (debug > 1) printf(" .. no match\n"); return NULL; } /* * The historydb_cleanup() exists to purge too old data out of * the database at regular intervals. Call this about once a minute. */ static void historydb_cleanup(historydb_t *db) { struct history_cell_t **hp, *cp; int i, cleancount = 0; if (debug > 1) printf("historydb_cleanup() "); time_t expirytime = tick.tv_sec - lastposition_storetime; for (i = 0; i < HISTORYDB_HASH_MODULO; ++i) { hp = &db->hash[i]; // multiple locks ? one for each bucket, or for a subset of buckets ? while (( cp = *hp )) { if (timecmp(cp->arrivaltime, expirytime) < 0) { // OLD... *hp = cp->next; cp->next = NULL; historydb_free(cp); ++cleancount; if (debug > 1) printf(" drop(%p) i=%d", cp, i); } else { /* No expiry, just advance the pointer */ hp = &(cp -> next); } } } if (debug > 1) printf(" .. done.\n"); } static time_t next_cleanup_time; int historydb_prepoll(struct aprxpolls *app) { return 0; } int historydb_postpoll(struct aprxpolls *app) { int i; // Limit next cleanup to be at most 60 second in future // (just in case the system time jumped back) if (next_cleanup_time >= tick.tv_sec+61) { next_cleanup_time = tick.tv_sec + 60; } if (next_cleanup_time >= tick.tv_sec) return 0; next_cleanup_time = tick.tv_sec + 60; // A minute from now.. for (i = 0; i < _dbs_count; ++i) { historydb_cleanup(_dbs[i]); } return 0; } #endif aprx-2.9.0/historydb.h000664 000000 000000 00000006063 13040775352 014647 0ustar00rootroot000000 000000 /******************************************************************** * APRX -- 2nd generation APRS iGate and digi with * * minimal requirement of esoteric facilities or * * libraries of any kind beyond UNIX system libc. * * * * (c) Matti Aarnio - OH2MQK, 2007-2014 * * * ********************************************************************/ /* * The historydb contains positional packet data in form of: * - position packet * - objects * - items * Keying varies, origination callsign of positions, name * for object/item. * * Inserting does incidential cleanup scanning while traversing * hash chains. * * In APRS-IS there are about 25 000 distinct callsigns or * item or object names with position information PER WEEK. * DB lifetime of 48 hours cuts that down a bit more. * Memory usage is around 3-4 MB * * -------------- * * On Tx-IGate the number of distinct callsigns is definitely * lower... * */ #ifndef __HISTORYDB_H__ #define __HISTORYDB_H__ #ifdef HAVE_STDINT_H # include #endif #define HISTORYDB_HASH_MODULO 128 /* fold bits: 7 & 14 */ struct pbuf_t; // forward declarator struct historydb_t; // forward.. typedef struct history_cell_t { struct history_cell_t *next; struct historydb_t *db; time_t arrivaltime; time_t positiontime; // When last position was received time_t *last_heard; // Usually points to last_heard_buf[] time_t last_heard_buf[MAX_IF_GROUP]; float tokenbucket; // Source callsign specific TokenBucket filter // Digi allocates HistoryDb per transmitter. uint16_t packettype; uint16_t flags; uint16_t packetlen; uint8_t keylen; char key[CALLSIGNLEN_MAX+2]; float lat, coslat, lon; uint32_t hash1; char *packet; char packetbuf[170]; /* Maybe a dozen packets are bigger than 170 bytes long out of some 17 000 .. */ } history_cell_t; typedef struct historydb_t { struct history_cell_t *hash[HISTORYDB_HASH_MODULO]; // monitor counters and gauges long historydb_inserts; long historydb_lookups; long historydb_hashmatches; long historydb_keymatches; long historydb_cellgauge; long historydb_noposcount; } historydb_t; extern void historydb_init(void); extern historydb_t *historydb_new(void); extern void historydb_dump(const historydb_t *, FILE *fp); extern void historydb_atend(void); extern int historydb_prepoll(struct aprxpolls *app); extern int historydb_postpoll(struct aprxpolls *app); /* insert and lookup... */ extern history_cell_t *historydb_insert(historydb_t *db, const struct pbuf_t*); extern history_cell_t *historydb_insert_(historydb_t *, const struct pbuf_t *, const int); extern history_cell_t *historydb_insert_heard(historydb_t *db, const struct pbuf_t*); extern history_cell_t *historydb_lookup(historydb_t *db, const char *keybuf, const int keylen); #endif aprx-2.9.0/hlog.c000664 000000 000000 00000030201 13040775352 013553 0ustar00rootroot000000 000000 /******************************************************************** * APRX -- 2nd generation APRS-i-gate with * * minimal requirement of esoteric facilities or * * libraries of any kind beyond UNIX system libc. * * * * (c) Matti Aarnio - OH2MQK, 2007-2014 * * * ********************************************************************/ /* * Some parts of this code are copied from: * * aprsc * * (c) Heikki Hannikainen, OH7LZB * * This program is licensed under the BSD license, which can be found * in the file LICENSE. * */ /* * log.c * * logging facility with configurable log levels and * logging destinations */ #include #include #include #include #include #include #include #include #include #include #include #include #include #include "hlog.h" #include "hmalloc.h" #include "rwlock.h" int log_dest = L_DEFDEST; /* Logging destination */ int log_level = LOG_INFO; /* Logging level */ int log_facility = LOG_DAEMON; /* Logging facility */ char *log_name = NULL; /* Logging name */ char log_basename[] = "aprx.log"; char *log_dir = NULL; /* Access log directory */ char *log_fname = NULL; /* Access log file name */ int log_file = -1; /* If logging to a file, the file name */ rwlock_t log_file_lock = RWL_INITIALIZER; char accesslog_basename[] = "aprx.access.log"; char *accesslog_dir = NULL; /* Access log directory */ char *accesslog_fname = NULL; /* Access log file name */ int accesslog_file = -1; /* Access log fd */ rwlock_t accesslog_lock = RWL_INITIALIZER; int log_rotate_size = 0; /* Rotate log when it reaches a given size */ int log_rotate_num = 5; /* How many logs to keep around */ char *log_levelnames[] = { "EMERG", "ALERT", "CRIT", "ERROR", "WARNING", "NOTICE", "INFO", "DEBUG", NULL }; char *log_destnames[] = { "none", "stderr", "syslog", "file", NULL }; /* * Quote a string, C-style. dst will be null-terminated, always. */ static int str_quote(char *dst, int dst_len, const char *src, int src_len) { int si; int di = 0; int dst_use_len = dst_len - 2; /* leave space for terminating NUL and escaping an escape */ unsigned char c; for (si = 0; si < src_len; si++) { if (di >= dst_use_len) break; c = (unsigned char) src[si]; /* printable ASCII */ if (c >= 0x20 && c < 0x7f) { /* escape the escape (space reserved already) */ if (c == '\\') dst[di++] = '\\'; dst[di++] = c; continue; } /* hex escape, is going to take more space */ if (di >= dst_use_len - 4) break; dst[di++] = '\\'; dst[di++] = 'x'; di += snprintf(dst + di, 3, "%.2X", c); } dst[di++] = 0; return di; } /* * Append a formatted string to a dynamically allocated string */ char *str_append(char *s, const char *fmt, ...) { va_list args; char buf[LOG_LEN]; int len; char *ret; va_start(args, fmt); vsnprintf(buf, LOG_LEN, fmt, args); va_end(args); buf[LOG_LEN-1] = 0; len = strlen(s); ret = hrealloc(s, len + strlen(buf) + 1); strcpy(ret + len, buf); return ret; } /* * Pick a log level */ int pick_loglevel(char *s, char **names) { int i; for (i = 0; (names[i]); i++) if (!strcasecmp(s, names[i])) return i; return -1; } /* * Open log */ int open_log(char *name, int reopen) { if (!reopen) rwl_wrlock(&log_file_lock); if (log_name) hfree(log_name); if (!(log_name = hstrdup(name))) { fprintf(stderr, "aprx logger: out of memory!\n"); exit(1); } if (log_dest == L_SYSLOG) openlog(name, LOG_NDELAY|LOG_PID, log_facility); if (log_dest == L_FILE) { if (log_fname) hfree(log_fname); log_fname = hmalloc(strlen(log_dir) + strlen(log_basename) + 2); sprintf(log_fname, "%s/%s", log_dir, log_basename); log_file = open(log_fname, O_WRONLY|O_CREAT|O_APPEND, S_IRUSR|S_IWUSR|S_IRGRP); if (log_file < 0) { fprintf(stderr, "aprx logger: Could not open %s: %s\n", log_fname, strerror(errno)); exit(1); } } rwl_wrunlock(&log_file_lock); if (log_dest == L_FILE) hlog(LOG_DEBUG, "Log file %s %sopened on fd %d", log_fname, (reopen) ? "re" : "", log_file); return 0; } /* * Close log */ int close_log(int reopen) { hlog(LOG_DEBUG, "close_log"); char *s = NULL; if (log_name) s = hstrdup(log_name); rwl_wrlock(&log_file_lock); if (log_name) { hfree(log_name); log_name = NULL; } if (log_dest == L_SYSLOG) { closelog(); } else if (log_dest == L_FILE) { if (log_file >= 0) { if (close(log_file)) fprintf(stderr, "aprx logger: Could not close log file %s: %s\n", log_fname, strerror(errno)); log_file = -1; } if (log_fname) { hfree(log_fname); log_fname = NULL; } } if (reopen && s) open_log(s, 1); if (!reopen) rwl_wrunlock(&log_file_lock); if (s) hfree(s); return 0; } /* * Rotate the log file */ int rotate_log(void) { char *tmp; int i; char *r1, *r2; if (rwl_trywrlock(&log_file_lock)) { fprintf(stderr, "failed to wrlock log_file_lock for rotation\n"); return 0; } // check if still oversize and not rotated by another thread off_t l = lseek(log_file, 0, SEEK_CUR); if (l < log_rotate_size) { rwl_wrunlock(&log_file_lock); return 0; } // rename tmp = hmalloc(strlen(log_fname) + 6); sprintf(tmp, "%s.tmp", log_fname); if (rename(log_fname, tmp) != 0) { fprintf(stderr, "aprx logger: Failed to rename %s to %s: %s\n", log_fname, tmp, strerror(errno)); // continue anyway, try to reopen } // reopen if (close(log_file)) fprintf(stderr, "aprx logger: Could not close log file %s: %s\n", log_fname, strerror(errno)); log_file = open(log_fname, O_WRONLY|O_CREAT|O_APPEND, S_IRUSR|S_IWUSR|S_IRGRP); if (log_file < 0) { fprintf(stderr, "aprx logger: Could not open %s: %s\n", log_fname, strerror(errno)); log_file = -1; } rwl_wrunlock(&log_file_lock); // do the rest of the rotation r1 = hmalloc(strlen(log_fname) + 16); r2 = hmalloc(strlen(log_fname) + 16); for (i = log_rotate_num-1; i > 0; i--) { sprintf(r1, "%s.%d", log_fname, i-1); sprintf(r2, "%s.%d", log_fname, i); if (rename(r1, r2) != 0 && errno != ENOENT) { fprintf(stderr, "rename %s => %s failed:%s\n", r1, r2, strerror(errno)); } } if (rename(tmp, r1) != 0) { fprintf(stderr, "aprx logger: Failed to rename %s to %s: %s\n", tmp, r1, strerror(errno)); } hfree(tmp); hfree(r1); hfree(r2); return 0; } static int hlog_write(int priority, const char *s) { struct tm lt; struct timeval tv; char wb[LOG_LEN]; int len, w; // Wall clock time gettimeofday(&tv, NULL); gmtime_r(&tv.tv_sec, <); if (log_dest & L_STDERR) { rwl_rdlock(&log_file_lock); fprintf(stderr, "%4d/%02d/%02d %02d:%02d:%02d.%06d %s[%d:%lx] %s: %s\n", lt.tm_year + 1900, lt.tm_mon + 1, lt.tm_mday, lt.tm_hour, lt.tm_min, lt.tm_sec, (int)tv.tv_usec, (log_name) ? log_name : "aprx", (int)getpid(), (unsigned long int)pthread_self(), log_levelnames[priority], s); rwl_rdunlock(&log_file_lock); } if ((log_dest & L_FILE) && (log_file >= 0)) { len = snprintf(wb, LOG_LEN, "%4d/%02d/%02d %02d:%02d:%02d.%06d %s[%d:%lx] %s: %s\n", lt.tm_year + 1900, lt.tm_mon + 1, lt.tm_mday, lt.tm_hour, lt.tm_min, lt.tm_sec, (int)tv.tv_usec, (log_name) ? log_name : "aprx", (int)getpid(), (unsigned long int)pthread_self(), log_levelnames[priority], s); wb[LOG_LEN-1] = 0; rwl_rdlock(&log_file_lock); if ((w = write(log_file, wb, len)) != len) fprintf(stderr, "aprx logger: Could not write to %s (fd %d): %s\n", log_fname, log_file, strerror(errno)); rwl_rdunlock(&log_file_lock); if (log_rotate_size) { off_t l = lseek(log_file, 0, SEEK_CUR); if (l >= log_rotate_size) { rotate_log(); } } } if (log_dest & L_SYSLOG) { rwl_rdlock(&log_file_lock); syslog(priority, "%s: %s", log_levelnames[priority], s); rwl_rdunlock(&log_file_lock); } return 1; } /* * Log a message with a packet (will be quoted) */ int hlog(int priority, const char *fmt, ...) { va_list args; char s[LOG_LEN]; if (priority > 7) priority = 7; else if (priority < 0) priority = 0; if (priority > log_level) return 0; va_start(args, fmt); vsnprintf(s, LOG_LEN, fmt, args); va_end(args); return hlog_write(priority, s); } /* * Log a message, with a packet in the end. * Packet will be quoted. */ int hlog_packet(int priority, const char *packet, int packetlen, const char *fmt, ...) { va_list args; char s[LOG_LEN]; int l; if (priority > 7) priority = 7; else if (priority < 0) priority = 0; if (priority > log_level) return 0; va_start(args, fmt); l = vsnprintf(s, LOG_LEN, fmt, args); va_end(args); str_quote(s + l, LOG_LEN - l, packet, packetlen); return hlog_write(priority, s); } /* * Open access log */ int accesslog_open(char *logd, int reopen) { if (!reopen) rwl_wrlock(&accesslog_lock); if (accesslog_fname) hfree(accesslog_fname); if (accesslog_dir) hfree(accesslog_dir); accesslog_dir = hstrdup(logd); accesslog_fname = hmalloc(strlen(accesslog_dir) + strlen(accesslog_basename) + 2); sprintf(accesslog_fname, "%s/%s", accesslog_dir, accesslog_basename); accesslog_file = open(accesslog_fname, O_WRONLY|O_CREAT|O_APPEND, S_IRUSR|S_IWUSR|S_IRGRP); if (accesslog_file < 0) hlog(LOG_CRIT, "Could not open %s: %s", accesslog_fname, strerror(errno)); rwl_wrunlock(&accesslog_lock); return accesslog_file; } /* * Close access log */ int accesslog_close(char *reopenpath) { hlog(LOG_DEBUG, "Closing access log..."); rwl_wrlock(&accesslog_lock); hlog(LOG_DEBUG, "Closing access log, got lock"); if (close(accesslog_file)) hlog(LOG_CRIT, "Could not close %s: %s", accesslog_fname, strerror(errno)); hfree(accesslog_fname); hfree(accesslog_dir); accesslog_fname = accesslog_dir = NULL; accesslog_file = -1; if (reopenpath) { return accesslog_open(reopenpath, 1); } else { rwl_wrunlock(&accesslog_lock); return 0; } } /* * Log an access log message */ int accesslog(const char *fmt, ...) { va_list args; char s[LOG_LEN], wb[LOG_LEN]; time_t t; struct tm lt; int len; ssize_t w; va_start(args, fmt); vsnprintf(s, LOG_LEN, fmt, args); va_end(args); s[LOG_LEN-1] = 0; time(&t); gmtime_r(&t, <); len = snprintf(wb, LOG_LEN, "[%4.4d/%2.2d/%2.2d %2.2d:%2.2d:%2.2d] %s\n", lt.tm_year + 1900, lt.tm_mon + 1, lt.tm_mday, lt.tm_hour, lt.tm_min, lt.tm_sec, s); wb[LOG_LEN-1] = 0; rwl_rdlock(&accesslog_lock); if (accesslog_file >= 0) { if ((w = write(accesslog_file, wb, len)) != len) hlog(LOG_CRIT, "Could not write to %s (fd %d): %s", accesslog_fname, accesslog_file, strerror(errno)); } else { if (accesslog_file != -666) { hlog(LOG_ERR, "Access log not open, log lines are lost!"); accesslog_file = -666; } } rwl_rdunlock(&accesslog_lock); return 1; } /* * Write my PID to file, after locking the pid file. * Leaves the file descriptor open so that the lock will be held * as long as the process is running. */ int pidfile_fd = -1; int writepid(char *name) { int f; char s[32]; int l; f = open(name, O_WRONLY|O_CREAT, S_IRUSR|S_IWUSR|S_IRGRP|S_IROTH); if (f < 0) { hlog(LOG_CRIT, "Could not open %s for writing: %s", name, strerror(errno)); return 0; } pidfile_fd = f; if (flock(f, LOCK_EX|LOCK_NB) < 0) { if (errno == EWOULDBLOCK) { hlog(LOG_CRIT, "Could not lock pid file file %s, another process has a lock on it. Another process running - bailing out.", name); } else { hlog(LOG_CRIT, "Failed to lock pid file %s: %s", name, strerror(errno)); } return 0; } l = snprintf(s, 32, "%ld\n", (long)getpid()); if (ftruncate(f, 0) < 0) { hlog(LOG_CRIT, "Could not truncate pid file %s: %s", name, strerror(errno)); return 0; } if (write(f, s, l) != l) { hlog(LOG_CRIT, "Could not write pid to %s: %s", name, strerror(errno)); return 0; } return 1; } int closepid(void) { if (pidfile_fd >= 0) { if (close(pidfile_fd) != 0) { hlog(LOG_CRIT, "Could not close pid file: %s", strerror(errno)); return -1; } pidfile_fd = -1; } return 0; } aprx-2.9.0/hlog.h000664 000000 000000 00000004040 13040775352 013562 0ustar00rootroot000000 000000 /******************************************************************** * APRX -- 2nd generation APRS-i-gate with * * minimal requirement of esoteric facilities or * * libraries of any kind beyond UNIX system libc. * * * * (c) Matti Aarnio - OH2MQK, 2007-2014 * * * ********************************************************************/ /* * Some parts of this code are copied from: * * aprsc * * (c) Heikki Hannikainen, OH7LZB * * This program is licensed under the BSD license, which can be found * in the file LICENSE. * */ #ifndef LOG_H #define LOG_H #define LOG_LEN 2048 #define L_STDERR 1 /* Log to stderror */ #define L_SYSLOG (1 << 1) /* Log to syslog */ #define L_FILE (1 << 2) /* Log to a file */ #ifdef __CYGWIN__ #define L_DEFDEST L_FILE #else #define L_DEFDEST L_STDERR #endif #define LOG_LEVELS "emerg alert crit err warning notice info debug" #define LOG_DESTS "syslog stderr file" #include extern char *log_levelnames[]; extern char *log_destnames[]; extern int log_dest; /* Logging destination */ extern int log_level; /* Logging level */ extern char *log_dir; /* Log directory */ extern int log_rotate_size; /* Rotate log when it reaches a given size */ extern int log_rotate_num; /* How many logs to keep around */ extern char *str_append(char *s, const char *fmt, ...); extern int pick_loglevel(char *s, char **names); extern int open_log(char *name, int reopen); extern int close_log(int reopen); extern int hlog(int priority, const char *fmt, ...); extern int hlog_packet(int priority, const char *packet, int packetlen, const char *fmt, ...); extern int accesslog_open(char *logd, int reopen); extern int accesslog_close(char *reopenpath); extern int accesslog(const char *fmt, ...); extern int writepid(char *name); extern int closepid(void); #endif aprx-2.9.0/igate.c000664 000000 000000 00000037323 13040775352 013727 0ustar00rootroot000000 000000 /* **************************************************************** * * * * APRX -- 2nd generation APRS iGate and digi with * * minimal requirement of esoteric facilities or * * libraries of any kind beyond UNIX system libc. * * * * (c) Matti Aarnio - OH2MQK, 2007-2014 * * * * IGATE: Pass packets in between RF network and APRS-IS * * * * **************************************************************** */ #include "aprx.h" const char *tnc2_verify_callsign_format(const char *t, int starok, int strictax25, const char *e) { const char *s = t; for (; *s && s < e; ++s) { /* Valid station-id charset is: [A-Z0-9] */ int c = *s; if (!(('A' <= c && c <= 'Z') || ('0' <= c && c <= '9'))) { /* Not A-Z, 0-9 */ break; } } /* Now *s can be any of: '>,*-:' */ if (*s == '-') { /* Minus and digits.. */ ++s; if (strictax25) { if ('1' <= *s && *s <= '9') ++s; if ('0' <= *s && *s <= '9') ++s; } else { // Up to 2 of any alphanumeric if (('0' <= *s && *s <= '9') || ('a' <= *s && *s <= 'z') || ('A' <= *s && *s <= 'Z')) ++s; if (('0' <= *s && *s <= '9') || ('a' <= *s && *s <= 'z') || ('A' <= *s && *s <= 'Z')) ++s; } } if (*s == '*' /* && starok */ ) /* Star is present at way too many SRC and DEST addresses, it is not limited to VIA fields :-( */ ++s; if (s > e) { if (debug) printf("callsign scanner ran over end of buffer"); return NULL; /* Over the end-of-buffer */ } if (s == t) { if (debug) printf("%s callsign format verify got bad character: '%c' in string: '%.20s'\n", strictax25 ? "Strict":"Lenient", *s, t); return NULL; /* Too short ? */ } if (*s != '>' && *s != ',' && *s != ':' && *s != 0) { /* Terminates badly.. */ if (debug) printf("%s callsign format verify got bad character: '%c' in string: '%.20s'\n", strictax25 ? "Strict":"Lenient", *s, t); return NULL; } return s; } #ifndef DISABLE_IGATE /* * igate start -- make TX-igate allocations and inits */ void igate_start() { // Always relay all traffic from RF to APRSIS, other // direction is handled per transmitter interface... // enable_aprsis_rx_dupecheck(); } static const char *tnc2_forbidden_source_stationid(const char *t, const int strictax25,const char *e) { const char *s; s = tnc2_verify_callsign_format(t, 0, strictax25, e); if (!s) return NULL; if (memcmp("WIDE", t, 4) == 0 || /* just plain wrong setting */ memcmp("RELAY", t, 5) == 0 || /* just plain wrong setting */ memcmp("TRACE", t, 5) == 0 || /* just plain wrong setting */ memcmp("TCPIP", t, 5) == 0 || /* just plain wrong setting */ memcmp("TCPXX", t, 5) == 0 || /* just plain wrong setting */ memcmp("N0CALL", t, 6) == 0 || /* TNC default setting */ memcmp("NOCALL", t, 6) == 0) /* TNC default setting */ return NULL; return s; } static const char *tnc2_forbidden_destination_stationid(const char *t, const int strictax25, const char *e) { const char *s; s = tnc2_verify_callsign_format(t, 0, strictax25, e); if (!s) return NULL; if (memcmp("TCPIP", t, 5) == 0 || /* just plain wrong */ memcmp("TCPXX", t, 5) == 0 || /* Forbidden to gate */ memcmp("NOGATE", t, 5) == 0 || /* Forbidden to gate */ memcmp("RFONLY", t, 5) == 0 || /* Forbidden to gate */ memcmp("N0CALL", t, 6) == 0 || /* TNC default setting */ memcmp("NOCALL", t, 6) == 0) /* TNC default setting */ return NULL; return s; } static const char *tnc2_forbidden_via_stationid(const char *t, const int strictax25, const char *e) { const char *s; s = tnc2_verify_callsign_format(t, 1, strictax25, e); if (!s) return NULL; if (memcmp("RFONLY", t, 6) == 0 || memcmp("NOGATE", t, 6) == 0 || memcmp("TCPIP", t, 5) == 0 || memcmp("TCPXX", t, 5) == 0) return NULL; return s; } /* static int tnc2_forbidden_data(const char *t) { int i; for (i = 0; i < dataregscount; ++i) { int stat = regexec(dataregs[i], t, 0, NULL, 0); if (stat == 0) return 1; // MATCH! } return 0; } */ void verblog(const char *portname, int istx, const char *tnc2buf, int tnc2len) { if (verbout) { printf("%ld\t%-9s ", (long) tick.tv_sec, portname); printf("%s \t", istx ? "T":"R"); fwrite(tnc2buf, tnc2len, 1, stdout); printf("\n"); } } /* * The tnc2_rxgate() is actual RX-iGate filter function, and processes * prepated TNC2 format text presentation of the packet. * It does presume that the record is in a buffer that can be written on! */ void igate_to_aprsis(const char *portname, const int tncid, const char *tnc2buf, int tnc2addrlen, int tnc2len, const int discard0, const int strictax25_) { const char *tp, *t, *t0; const char *s; const char *ae; const char *e; int discard = discard0; int strictax25 = strictax25_; // Callsigns per strict AX25 (not 3rd-party) tp = tnc2buf; // 3rd-party recursion moves tp ae = tp + tnc2addrlen; // 3rd-party recursion moves ae e = tp + tnc2len; // stays the same all the time redo_frame_filter:; t = tp; t0 = NULL; /* t == beginning of the TNC2 format packet */ /* * If any of following matches, discard the packet! * next if ($axpath =~ m/^WIDE/io); # Begins with = is sourced by.. * next if ($axpath =~ m/^RELAY/io); * next if ($axpath =~ m/^TRACE/io); */ s = tnc2_forbidden_source_stationid(t, strictax25, e); if (s) t = (char *) s; else { /* Forbidden in source fields.. */ if (debug) printf("TNC2 forbidden source stationid: '%.20s'\n", t); goto discard; } /* SOURCE>DESTIN,VIA,VIA:payload */ if (*t == '>') { ++t; } else { if (debug) printf("TNC2 bad address format, expected '>', got: '%.20s'\n", t); goto discard; } s = tnc2_forbidden_destination_stationid(t, strictax25, e); if (s) t = (char *) s; else { if (debug) printf("TNC2 forbidden (by REGEX) destination stationid: '%.20s'\n", t); goto discard; } while (*t && t < ae) { if (*t == ',') { ++t; } else { if (debug) printf("TNC2 via address syntax bug, wanted ',' or ':', got: '%.20s'\n", t); goto discard; } /* * next if ($axpath =~ m/RFONLY/io); # Has any of these in via fields.. * next if ($axpath =~ m/TCPIP/io); * next if ($axpath =~ m/TCPXX/io); * next if ($axpath =~ m/NOGATE/io); # .. drop it. */ s = tnc2_forbidden_via_stationid(t, strictax25, e); if (!s) { /* Forbidden in via fields.. */ if (debug) printf("TNC2 forbidden VIA stationid, got: '%.20s'\n", t); goto discard; } else t = (char *) s; } /* Now we have processed the address, this should be ABORT time if the current character is not ':' ! */ if (*t == ':') { #if 0 // *t++ = 0; /* turn it to NUL character */ #else /* Don't zero! */ ++t; #endif ; } else { if (debug) printf("TNC2 address parsing did not find ':': '%.20s'\n",t); goto discard; } t0 = t; // Start of payload /* Now 't' points to data.. */ /* if (tnc2_forbidden_data(t)) { if (debug) printf("Forbidden data in TNC2 packet - REGEX match"); goto discard; } */ /* Will not relay messages that begin with '?' char: */ if (*t == '?') { if (debug) printf("Will not relay packets where payload begins with '?'\n"); goto discard; } /* Messages begining with '}' char are 3rd-party frames.. */ if (*t == '}') { /* DEBUG OUTPUT TO STDOUT ! */ verblog(portname, 0, tp, tnc2len); strictax25 = 0; /* Copy the 3rd-party message content into begining of the buffer... */ ++t; /* Skip the '}' */ tp = t; tnc2len = e - t; /* New length */ // end pointer (e) does not change // Address end must be searched again ae = memchr(tp, ':', tnc2len); if (ae == NULL) { // Bad 3rd-party frame goto discard; } tnc2addrlen = (int)(ae - tp); /* .. and redo the filtering. */ goto redo_frame_filter; } /* TODO: Verify message being of recognized APRS packet type */ /* '\0x60', '\0x27': MIC-E, len >= 9 * '!','=','/','{': Normal or compressed location packet.. * '$': NMEA data, if it begins as '$GP' * '$': WX data (maybe) if not NMEA data * ';': Object data, len >= 31 * ')': Item data, len >= 18 * ':': message, bulletin or aanouncement, len >= 11 * '<': Station Capabilities, len >= 2 * '>': Status report * '}': Third-party message * ... and many more ... */ // FIXME: Duplicate filter messages to APRSIS /* _NO_ ending CRLF, the APRSIS subsystem adds it. */ /* printf("alen=%d tlen=%d tnc2buf=%s\n",t0-1-tnc2buf, e-t0, tnc2buf); */ discard = aprsis_queue(tp, tnc2addrlen, qTYPE_IGATED, portname, t0, e - t0); /* Send it.. */ /* DEBUG OUTPUT TO STDOUT ! */ verblog(portname, 0, tp, tnc2len); if (0) { discard:; discard = -1; } if (discard) { erlang_add(portname, ERLANG_DROP, tnc2len, 1); rflog(portname, 'd', discard, tp, tnc2len); } else { rflog(portname, 'R', discard, tp, tnc2len); } } /* ---------------------------------------------------------- */ /* * Study APRS-IS received message's address header part * to determine if it is not to be relayed back to RF.. */ static int forbidden_to_gate_addr(const char *s) { if (memcmp(s, "TCPXX", 5) == 0) return 1; /* Forbidden to be relayed */ if (memcmp(s, "NOGATE", 6) == 0) return 1; /* Forbidden to be relayed */ if (memcmp(s, "RFONLY", 6) == 0) return 1; /* Forbidden to be relayed */ if (memcmp(s, "qAX", 3) == 0) return 1; return 0; /* Found nothing forbidden */ } /* * For APRSIS -> APRX -> RF gatewaying. * Have to convert incoming TNC2 format messge to AX.25.. * * See: http://www.aprs-is.net/IGateDetails.aspx * * ---------------------------------------------------------------- * * Gate message packets and associated posits to RF if * * 1. the receiving station has been heard within range within * a predefined time period (range defined as digi hops, * distance, or both). * 2. the sending station has not been heard via RF within * a predefined time period (packets gated from the Internet * by other stations are excluded from this test). * 3. the sending station does not have TCPXX, NOGATE, or RFONLY * in the header. * 4. the receiving station has not been heard via the Internet * within a predefined time period. * * A station is said to be heard via the Internet if packets from * the station contain TCPIP* or TCPXX* in the header or if gated * (3rd-party) packets are seen on RF gated by the station and * containing TCPIP or TCPXX in the 3rd-party header (in other * words, the station is seen on RF as being an IGate). * * Gate all packets to RF based on criteria set by the sysop (such * as callsign, object name, etc.). * * ---------------------------------------------------------------- * * TODO: * a) APRS-IS relayed third-party frames are ignored. * * 3) The message path does not have TCPXX, NOGATE, RFONLY * in it. * * Following steps are done in interface_receive_3rdparty() * * 1) The receiving station has been heard recently * within defined range limits, and more recently * than since given interval T1. (Range as digi-hops [N1] * or coordinates, or both.) * * 2) The sending station has not been heard via RF * within timer interval T2. (Third-party relayed * frames are not analyzed for this.) * * 4) the receiving station has not been heard via the Internet * within a predefined time period. * A station is said to be heard via the Internet if packets * from the station contain TCPIP* or TCPXX* in the header or * if gated (3rd-party) packets are seen on RF gated by the * station and containing TCPIP or TCPXX in the 3rd-party * header (in other words, the station is seen on RF as being * an IGate). * * 5) Gate all packets to RF based on criteria set by the sysop * (such as callsign, object name, etc.). * * c) Drop everything else. * * Paths * * IGates should use the 3rd-party format on RF of * IGATECALL>APRS,GATEPATH}FROMCALL>TOCALL,TCPIP,IGATECALL*:original packet data * where GATEPATH is the path that the gated packet is to follow * on RF. This format will allow IGates to prevent gating the packet * back to APRS-IS. * * q constructs should never appear on RF. * The I construct should never appear on RF. * Except for within gated packets, TCPIP and TCPXX should not be * used on RF. */ static void pick_heads(char *ax25, int headlen, char *heads[20], int *headscount) { char *p = ax25; char *e = ax25 + headlen; char *p0 = p; // if (debug)printf(" head parse: "); while (p <= e) { p0 = p; while (p <= e) { const char c = *p; if (c != '>' && c != ',' && c != ':') { ++p; continue; } *p++ = 0; if (*headscount >= 19) continue; /* too many head parts.. */ heads[*headscount] = p0; *headscount += 1; // if (debug) printf(" %-9s", p0); break; } } heads[*headscount] = NULL; // if (debug)printf("\n"); } static void aprsis_commentframe(const char *tnc2buf, int tnc2len) { // TODO .. #TICK -> #TOCK ?? } void igate_from_aprsis(const char *ax25, int ax25len) { // const char *p = ax25; int colonidx; int i; const char *b; // const char *e = p + ax25len; /* string end pointer */ // char axbuf[3000]; /* enough and then some more.. */ // char axbuf2[1000]; /* enough and then some more.. */ char *heads[20]; char *headsbuf; int headscount = 0; // char *s; if (ax25[0] == '#') { // Comment line, timer tick, something such... aprsis_commentframe(ax25, ax25len); return; } if (ax25len > 520) { /* Way too large a frame... */ if (debug)printf("APRSIS dataframe length is too large! (%d)\n",ax25len); return; } b = memchr(ax25, ':', ax25len); if (b == NULL) { if (debug)printf("APRSIS dataframe does not have ':' in it\n"); return; // Huh? No double-colon on line, it is not proper packet line } colonidx = b-ax25; if (colonidx+3 >= ax25len) { /* Not really any data there.. */ if (debug)printf("APRSIS dataframe too short to contain anything\n"); return; } rflog("APRSIS",'R',0,ax25, ax25len); headsbuf = alloca(colonidx+1); memcpy(headsbuf, ax25, colonidx+1); headscount = 0; pick_heads(headsbuf, colonidx, heads, &headscount); if (headscount < 4) { // Less than 3 header fields coming from APRS-IS ? if (debug) printf("Not relayable packet! [1]\n"); return; } if (memcmp(heads[1],"RXTLM-",6)==0) { if (debug) printf("Not relayable packet! [2]\n"); return; } for (i = 0; i < headscount; ++i) { /* 3) */ if (forbidden_to_gate_addr(heads[i])) { if (debug) printf("Not relayable packet! [3]: %s\n", heads[i]); return; } } ++b; /* Skip the ':' */ /* a) */ /* Check for forbidden things that cause dropping the packet */ if (*b == '}') { /* Third-party packet from APRS-IS */ if (debug) printf("Not relayable packet! [5]\n"); return; /* drop it */ } // Following logic steps are done in interface_receive_3rdparty! // FIXME: 1) - verify receiving station has been heard recently on radio // FIXME: 2) - sending station has not been heard recently on radio // FIXME: 4) - the receiving station has not been heard via the Internet within a predefined time period. // FIXME: f) - ?? if (debug) printf(".. igate from aprsis\n"); interface_receive_3rdparty( &aprsis_interface, heads, headscount, "TCPIP", b, ax25len - (b-ax25) ); } #endif aprx-2.9.0/install-sh000775 000000 000000 00000031600 13040775352 014466 0ustar00rootroot000000 000000 #!/bin/sh # install - install a program, script, or datafile scriptversion=2006-10-14.15 # This originates from X11R5 (mit/util/scripts/install.sh), which was # later released in X11R6 (xc/config/util/install.sh) with the # following copyright and license. # # Copyright (C) 1994 X Consortium # # Permission is hereby granted, free of charge, to any person obtaining a copy # of this software and associated documentation files (the "Software"), to # deal in the Software without restriction, including without limitation the # rights to use, copy, modify, merge, publish, distribute, sublicense, and/or # sell copies of the Software, and to permit persons to whom the Software is # furnished to do so, subject to the following conditions: # # The above copyright notice and this permission notice shall be included in # all copies or substantial portions of the Software. # # THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR # IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, # FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE # X CONSORTIUM BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN # AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNEC- # TION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. # # Except as contained in this notice, the name of the X Consortium shall not # be used in advertising or otherwise to promote the sale, use or other deal- # ings in this Software without prior written authorization from the X Consor- # tium. # # # FSF changes to this file are in the public domain. # # Calling this script install-sh is preferred over install.sh, to prevent # `make' implicit rules from creating a file called install from it # when there is no Makefile. # # This script is compatible with the BSD install script, but was written # from scratch. nl=' ' IFS=" "" $nl" # set DOITPROG to echo to test this script # Don't use :- since 4.3BSD and earlier shells don't like it. doit="${DOITPROG-}" if test -z "$doit"; then doit_exec=exec else doit_exec=$doit fi # Put in absolute file names if you don't have them in your path; # or use environment vars. mvprog="${MVPROG-mv}" cpprog="${CPPROG-cp}" chmodprog="${CHMODPROG-chmod}" chownprog="${CHOWNPROG-chown}" chgrpprog="${CHGRPPROG-chgrp}" stripprog="${STRIPPROG-strip}" rmprog="${RMPROG-rm}" mkdirprog="${MKDIRPROG-mkdir}" posix_glob= posix_mkdir= # Desired mode of installed file. mode=0755 chmodcmd=$chmodprog chowncmd= chgrpcmd= stripcmd= rmcmd="$rmprog -f" mvcmd="$mvprog" src= dst= dir_arg= dstarg= no_target_directory= usage="Usage: $0 [OPTION]... [-T] SRCFILE DSTFILE or: $0 [OPTION]... SRCFILES... DIRECTORY or: $0 [OPTION]... -t DIRECTORY SRCFILES... or: $0 [OPTION]... -d DIRECTORIES... In the 1st form, copy SRCFILE to DSTFILE. In the 2nd and 3rd, copy all SRCFILES to DIRECTORY. In the 4th, create DIRECTORIES. Options: -c (ignored) -d create directories instead of installing files. -g GROUP $chgrpprog installed files to GROUP. -m MODE $chmodprog installed files to MODE. -o USER $chownprog installed files to USER. -s $stripprog installed files. -t DIRECTORY install into DIRECTORY. -T report an error if DSTFILE is a directory. --help display this help and exit. --version display version info and exit. Environment variables override the default commands: CHGRPPROG CHMODPROG CHOWNPROG CPPROG MKDIRPROG MVPROG RMPROG STRIPPROG " while test $# -ne 0; do case $1 in -c) shift continue;; -d) dir_arg=true shift continue;; -g) chgrpcmd="$chgrpprog $2" shift shift continue;; --help) echo "$usage"; exit $?;; -m) mode=$2 shift shift case $mode in *' '* | *' '* | *' '* | *'*'* | *'?'* | *'['*) echo "$0: invalid mode: $mode" >&2 exit 1;; esac continue;; -o) chowncmd="$chownprog $2" shift shift continue;; -s) stripcmd=$stripprog shift continue;; -t) dstarg=$2 shift shift continue;; -T) no_target_directory=true shift continue;; --version) echo "$0 $scriptversion"; exit $?;; --) shift break;; -*) echo "$0: invalid option: $1" >&2 exit 1;; *) break;; esac done if test $# -ne 0 && test -z "$dir_arg$dstarg"; then # When -d is used, all remaining arguments are directories to create. # When -t is used, the destination is already specified. # Otherwise, the last argument is the destination. Remove it from $@. for arg do if test -n "$dstarg"; then # $@ is not empty: it contains at least $arg. set fnord "$@" "$dstarg" shift # fnord fi shift # arg dstarg=$arg done fi if test $# -eq 0; then if test -z "$dir_arg"; then echo "$0: no input file specified." >&2 exit 1 fi # It's OK to call `install-sh -d' without argument. # This can happen when creating conditional directories. exit 0 fi if test -z "$dir_arg"; then trap '(exit $?); exit' 1 2 13 15 # Set umask so as not to create temps with too-generous modes. # However, 'strip' requires both read and write access to temps. case $mode in # Optimize common cases. *644) cp_umask=133;; *755) cp_umask=22;; *[0-7]) if test -z "$stripcmd"; then u_plus_rw= else u_plus_rw='% 200' fi cp_umask=`expr '(' 777 - $mode % 1000 ')' $u_plus_rw`;; *) if test -z "$stripcmd"; then u_plus_rw= else u_plus_rw=,u+rw fi cp_umask=$mode$u_plus_rw;; esac fi for src do # Protect names starting with `-'. case $src in -*) src=./$src ;; esac if test -n "$dir_arg"; then dst=$src dstdir=$dst test -d "$dstdir" dstdir_status=$? else # Waiting for this to be detected by the "$cpprog $src $dsttmp" command # might cause directories to be created, which would be especially bad # if $src (and thus $dsttmp) contains '*'. if test ! -f "$src" && test ! -d "$src"; then echo "$0: $src does not exist." >&2 exit 1 fi if test -z "$dstarg"; then echo "$0: no destination specified." >&2 exit 1 fi dst=$dstarg # Protect names starting with `-'. case $dst in -*) dst=./$dst ;; esac # If destination is a directory, append the input filename; won't work # if double slashes aren't ignored. if test -d "$dst"; then if test -n "$no_target_directory"; then echo "$0: $dstarg: Is a directory" >&2 exit 1 fi dstdir=$dst dst=$dstdir/`basename "$src"` dstdir_status=0 else # Prefer dirname, but fall back on a substitute if dirname fails. dstdir=` (dirname "$dst") 2>/dev/null || expr X"$dst" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ X"$dst" : 'X\(//\)[^/]' \| \ X"$dst" : 'X\(//\)$' \| \ X"$dst" : 'X\(/\)' \| . 2>/dev/null || echo X"$dst" | sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/ q } /^X\(\/\/\)[^/].*/{ s//\1/ q } /^X\(\/\/\)$/{ s//\1/ q } /^X\(\/\).*/{ s//\1/ q } s/.*/./; q' ` test -d "$dstdir" dstdir_status=$? fi fi obsolete_mkdir_used=false if test $dstdir_status != 0; then case $posix_mkdir in '') # Create intermediate dirs using mode 755 as modified by the umask. # This is like FreeBSD 'install' as of 1997-10-28. umask=`umask` case $stripcmd.$umask in # Optimize common cases. *[2367][2367]) mkdir_umask=$umask;; .*0[02][02] | .[02][02] | .[02]) mkdir_umask=22;; *[0-7]) mkdir_umask=`expr $umask + 22 \ - $umask % 100 % 40 + $umask % 20 \ - $umask % 10 % 4 + $umask % 2 `;; *) mkdir_umask=$umask,go-w;; esac # With -d, create the new directory with the user-specified mode. # Otherwise, rely on $mkdir_umask. if test -n "$dir_arg"; then mkdir_mode=-m$mode else mkdir_mode= fi posix_mkdir=false case $umask in *[123567][0-7][0-7]) # POSIX mkdir -p sets u+wx bits regardless of umask, which # is incompatible with FreeBSD 'install' when (umask & 300) != 0. ;; *) tmpdir=${TMPDIR-/tmp}/ins$RANDOM-$$ trap 'ret=$?; rmdir "$tmpdir/d" "$tmpdir" 2>/dev/null; exit $ret' 0 if (umask $mkdir_umask && exec $mkdirprog $mkdir_mode -p -- "$tmpdir/d") >/dev/null 2>&1 then if test -z "$dir_arg" || { # Check for POSIX incompatibilities with -m. # HP-UX 11.23 and IRIX 6.5 mkdir -m -p sets group- or # other-writeable bit of parent directory when it shouldn't. # FreeBSD 6.1 mkdir -m -p sets mode of existing directory. ls_ld_tmpdir=`ls -ld "$tmpdir"` case $ls_ld_tmpdir in d????-?r-*) different_mode=700;; d????-?--*) different_mode=755;; *) false;; esac && $mkdirprog -m$different_mode -p -- "$tmpdir" && { ls_ld_tmpdir_1=`ls -ld "$tmpdir"` test "$ls_ld_tmpdir" = "$ls_ld_tmpdir_1" } } then posix_mkdir=: fi rmdir "$tmpdir/d" "$tmpdir" else # Remove any dirs left behind by ancient mkdir implementations. rmdir ./$mkdir_mode ./-p ./-- 2>/dev/null fi trap '' 0;; esac;; esac if $posix_mkdir && ( umask $mkdir_umask && $doit_exec $mkdirprog $mkdir_mode -p -- "$dstdir" ) then : else # The umask is ridiculous, or mkdir does not conform to POSIX, # or it failed possibly due to a race condition. Create the # directory the slow way, step by step, checking for races as we go. case $dstdir in /*) prefix=/ ;; -*) prefix=./ ;; *) prefix= ;; esac case $posix_glob in '') if (set -f) 2>/dev/null; then posix_glob=true else posix_glob=false fi ;; esac oIFS=$IFS IFS=/ $posix_glob && set -f set fnord $dstdir shift $posix_glob && set +f IFS=$oIFS prefixes= for d do test -z "$d" && continue prefix=$prefix$d if test -d "$prefix"; then prefixes= else if $posix_mkdir; then (umask=$mkdir_umask && $doit_exec $mkdirprog $mkdir_mode -p -- "$dstdir") && break # Don't fail if two instances are running concurrently. test -d "$prefix" || exit 1 else case $prefix in *\'*) qprefix=`echo "$prefix" | sed "s/'/'\\\\\\\\''/g"`;; *) qprefix=$prefix;; esac prefixes="$prefixes '$qprefix'" fi fi prefix=$prefix/ done if test -n "$prefixes"; then # Don't fail if two instances are running concurrently. (umask $mkdir_umask && eval "\$doit_exec \$mkdirprog $prefixes") || test -d "$dstdir" || exit 1 obsolete_mkdir_used=true fi fi fi if test -n "$dir_arg"; then { test -z "$chowncmd" || $doit $chowncmd "$dst"; } && { test -z "$chgrpcmd" || $doit $chgrpcmd "$dst"; } && { test "$obsolete_mkdir_used$chowncmd$chgrpcmd" = false || test -z "$chmodcmd" || $doit $chmodcmd $mode "$dst"; } || exit 1 else # Make a couple of temp file names in the proper directory. dsttmp=$dstdir/_inst.$$_ rmtmp=$dstdir/_rm.$$_ # Trap to clean up those temp files at exit. trap 'ret=$?; rm -f "$dsttmp" "$rmtmp" && exit $ret' 0 # Copy the file name to the temp name. (umask $cp_umask && $doit_exec $cpprog "$src" "$dsttmp") && # and set any options; do chmod last to preserve setuid bits. # # If any of these fail, we abort the whole thing. If we want to # ignore errors from any of these, just make sure not to ignore # errors from the above "$doit $cpprog $src $dsttmp" command. # { test -z "$chowncmd" || $doit $chowncmd "$dsttmp"; } \ && { test -z "$chgrpcmd" || $doit $chgrpcmd "$dsttmp"; } \ && { test -z "$stripcmd" || $doit $stripcmd "$dsttmp"; } \ && { test -z "$chmodcmd" || $doit $chmodcmd $mode "$dsttmp"; } && # Now rename the file to the real destination. { $doit $mvcmd -f "$dsttmp" "$dst" 2>/dev/null \ || { # The rename failed, perhaps because mv can't rename something else # to itself, or perhaps because mv is so ancient that it does not # support -f. # Now remove or move aside any old file at destination location. # We try this two ways since rm can't unlink itself on some # systems and the destination file might be busy for other # reasons. In this case, the final cleanup might fail but the new # file should still install successfully. { if test -f "$dst"; then $doit $rmcmd -f "$dst" 2>/dev/null \ || { $doit $mvcmd -f "$dst" "$rmtmp" 2>/dev/null \ && { $doit $rmcmd -f "$rmtmp" 2>/dev/null; :; }; }\ || { echo "$0: cannot unlink or rename $dst" >&2 (exit 1); exit 1 } else : fi } && # Now rename the file to the real destination. $doit $mvcmd "$dsttmp" "$dst" } } || exit 1 trap '' 0 fi done # Local variables: # eval: (add-hook 'write-file-hooks 'time-stamp) # time-stamp-start: "scriptversion=" # time-stamp-format: "%:y-%02m-%02d.%02H" # time-stamp-end: "$" # End: aprx-2.9.0/interface.c000664 000000 000000 00000164544 13040775352 014604 0ustar00rootroot000000 000000 /* **************************************************************** * * * * APRX -- 2nd generation APRS iGate and digi with * * minimal requirement of esoteric facilities or * * libraries of any kind beyond UNIX system libc. * * * * (c) Matti Aarnio - OH2MQK, 2007-2014 * * * * **************************************************************** */ #include "aprx.h" #include /* * The interface subsystem describes all interfaces in one * coherent way, independent of their actual implementation. * */ /* serial-device /dev/ttyUSB1 19200 8n1 KISS tx-ok false # receive only (default) callsign OH2XYZ-R2 # KISS subif 0 initstring "...." # initstring option timeout 900 # 900 seconds of no Rx serial-device /dev/ttyUSB2 19200 8n1 KISS initstring "...." timeout 900 # 900 seconds of no Rx callsign OH2XYZ-2 tx-ok true # This is our transmitter callsign OH2XYZ-R3 # This is receiver tx-ok false # receive only (default) tcp-device 172.168.1.1 4001 KISS tx-ok false # receive only (default) callsign OH2XYZ-R4 # KISS subif 0 initstring "...." # initstring option timeout 900 # 900 seconds of no Rx ax25-device OH2XYZ-6 # Works only on Linux systems tx-ok true # This is also transmitter */ struct aprx_interface **all_interfaces; int all_interfaces_count; int top_interfaces_group; // Init-code stores this with ifindex = 0. // This is necessary even for system where igate is removed struct aprx_interface aprsis_interface = { IFTYPE_APRSIS, 0, 0, 0, "APRSIS", {'A'<<1,'P'<<1,'R'<<1,'S'<<1,'I'<<1,'S'<<1, 0x60}, 0, NULL, 0, 0, 0, // subif, txrefcount, tx_ok 1, 1, 0, // telemeter-to-is, telemeter-to-rf, telemeter-newformat 0, NULL, NULL, #ifdef ENABLE_AGWPE NULL, #endif NULL, 0, NULL }; int interface_is_beaconable(const struct aprx_interface *aif) { switch (aif->iftype) { case IFTYPE_AX25: case IFTYPE_SERIAL: case IFTYPE_TCPIP: case IFTYPE_NULL: case IFTYPE_APRSIS: // case IFTYPE_AGWPE: // These are beaconable. return 1; default: break; } return 0; } int interface_is_telemetrable(const struct aprx_interface *aif) { // Check if the interface type is really an RF rx and/or tx switch (aif->iftype) { case IFTYPE_AX25: case IFTYPE_SERIAL: case IFTYPE_TCPIP: // case IFTYPE_AGWPE: // These are real interfaces, and telemetry sources return 1; default: break; } return 0; } #ifndef DISABLE_IGATE /* * A helper for interface_receive_ax25() - analyze 3rd-party packets received * via radio. If data content inside has path saying "TCPIP" or "TCPXX", consider * the packet to be indication that fromcall is an IGate. */ static void rx_analyze_3rdparty( historydb_t *historydb, struct pbuf_t *pb ) { const char *e = pb->data + pb->packet_len - 6; const char *p = pb->info_start; int from_igate = 0; history_cell_t *hist_rx; if (!p) return; // Bad packet.. ++p; for ( ; p < e; ++p ) { if (*p == ':') break; if (*p == ',') { // The "TCPIP*" or "TCPXX*" will always have preceding "," if (memcmp(",TCPIP*", p, 7) == 0) { from_igate = 1; break; } if (memcmp(",TCPXX*", p, 7) == 0) { from_igate = 1; break; } } // Start with 'T'. } if (!from_igate) return; // Not recognized as being sent from another TX-IGATE // OK, this packet originated from an TX-IGATE // Insert it afresh hist_rx = historydb_insert_heard(historydb, pb); if (hist_rx != NULL) { // Explicitly mark it as "received from APRSIS" // The packet was received from a TX-IGATE, therefore // the source of that packet is now logged as "from APRSIS". hist_rx->last_heard[0] = pb->t; } } #endif static char *interface_default_aliases[] = { "RELAY","WIDE","TRACE" }; static void interface_store(struct aprx_interface *aif) { if (debug) printf("interface_store() aif->callsign = '%s'\n", aif->callsign); // Init the interface specific Erlang accounting erlang_add(aif->callsign, ERLANG_RX, 0, 0); all_interfaces_count += 1; all_interfaces = realloc(all_interfaces, sizeof(*all_interfaces) * all_interfaces_count); all_interfaces[all_interfaces_count -1] = aif; if (aif->ifindex < 0) aif->ifindex = all_interfaces_count -1; if (aif->ifgroup < 0) { aif->ifgroup = all_interfaces_count; // starting at 1. the 0 is for APRSIS /* -- no hard upper limit anymore if (aif->ifgroup >= MAX_IF_GROUP) aif->ifgroup = MAX_IF_GROUP -1; */ } if (top_interfaces_group <= aif->ifgroup) top_interfaces_group = aif->ifgroup +1; } struct aprx_interface *find_interface_by_callsign(const char *callsign) { int i; for (i = 0; i < all_interfaces_count; ++i) { if ((all_interfaces[i]->callsign != NULL) && (strcasecmp(callsign, all_interfaces[i]->callsign) == 0)) { return all_interfaces[i]; } } return NULL; // Not found! } struct aprx_interface *find_interface_by_index(const int index) { if (index >= all_interfaces_count || index < 0) { return NULL; // Invalid index value } else { return all_interfaces[index]; } } static int config_kiss_subif(struct configfile *cf, struct aprx_interface *aifp, char *param1, char *str, int maxsubif) { struct aprx_interface *aif; int fail = 0; char *name; int parlen = 0; char *initstring = NULL; int initlength = 0; char *callsign = NULL; int subif = 0; int tx_ok = 0; int telemeter_to_is = 1; int telemeter_to_rf = 1; int aliascount = 0; char **aliases = NULL; int ifgroup = -1; const char *p = param1; int c; if (aifp == NULL || aifp->tty == NULL) { printf("%s:%d ERROR: on bad type of entry.\n", cf->name, cf->linenum); return 1; } for ( ; *p; ++p ) { c = *p; if ('0' <= c && c <= '9') { subif = subif * 10 + (c - '0'); } else if (c == '>') { // all fine.. break; } else { // FIXME: parameter value is bad! printf("%s:%d ERROR: name, cf->linenum, param1); return 1; } } if (subif >= maxsubif) { // FIXME: parameter value is bad! printf("%s:%d ERROR: name, cf->linenum, param1); return 1; } while (readconfigline(cf) != NULL) { if (configline_is_comment(cf)) continue; /* Comment line, or empty line */ // It can be severely indented... str = config_SKIPSPACE(cf->buf); name = str; str = config_SKIPTEXT(str, NULL); str = config_SKIPSPACE(str); config_STRLOWER(name); param1 = str; str = config_SKIPTEXT(str, &parlen); str = config_SKIPSPACE(str); if (strcmp(name, "") == 0) { break; // End of this sub-group } if (strcmp(name, "callsign") == 0) { if (strcasecmp(param1,"$mycall") == 0) callsign = strdup(mycall); else callsign = strdup(param1); if (!validate_callsign_input(callsign,tx_ok)) { if (tx_ok) printf("%s:%d ERROR: The CALLSIGN parameter on AX25-DEVICE must be of valid AX.25 format! '%s'\n", cf->name, cf->linenum, callsign); else printf("%s:%d ERROR: The CALLSIGN parameter on AX25-DEVICE must be of valid APRSIS format! '%s'\n", cf->name, cf->linenum, callsign); fail = 1; break; } if (find_interface_by_callsign(callsign) != NULL) { // An interface with THIS callsign does exist already! printf("%s:%d ERROR: Same callsign (%s) exists already on another interface.\n", cf->name, cf->linenum, callsign); fail = 1; continue; } } else if (strcmp(name, "initstring") == 0) { if (initstring == NULL) { initlength = parlen; initstring = malloc(parlen); memcpy(initstring, param1, parlen); } else { printf("%s:%d ERROR: Double-definition of initstring parameter.\n", cf->name, cf->linenum); fail = 1; break; } } else if (strcmp(name, "tx-ok") == 0) { if (!config_parse_boolean(param1, &tx_ok)) { printf("%s:%d ERROR: Bad TX-OK parameter value -- not a recognized boolean: %s\n", cf->name, cf->linenum, param1); fail = 1; break; } } else if (strcmp(name, "telem-to-is") == 0) { if (!config_parse_boolean(param1, &telemeter_to_is)) { printf("%s:%d ERROR: Bad TELEM-TO-IS parameter value -- not a recognized boolean: %s\n", cf->name, cf->linenum, param1); fail = 1; break; } } else if (strcmp(name, "telem-to-rf") == 0) { if (!config_parse_boolean(param1, &telemeter_to_rf)) { printf("%s:%d ERROR: Bad TELEM-TO-RF parameter value -- not a recognized boolean: %s\n", cf->name, cf->linenum, param1); fail = 1; break; } } else if (strcmp(name, "alias") == 0) { char *k = strtok(param1, ","); for (; k ; k = strtok(NULL,",")) { ++aliascount; if (debug) printf(" n=%d alias='%s'\n",aliascount,k); aliases = realloc(aliases, sizeof(char*) * aliascount); aliases[aliascount-1] = strdup(k); } #ifndef DISABLE_IGATE } else if (strcmp(name, "igate-group") == 0) { // param1 = integer 1 to N. ifgroup = atol(param1); if (ifgroup < 1) { printf("%s:%d ERROR: interface 'igate-group' parameter value: '%s' is an integer with minimum value of 1.\n", cf->name, cf->linenum, param1); fail = 1; break; /* -- no hard upper limit anymore } else if (ifgroup >= MAX_IF_GROUP) { printf("%s:%d ERROR: interface 'igate-group' parameter value: '%s' is an integer with maximum value of %d.\n", cf->name, cf->linenum, param1, MAX_IF_GROUP-1); fail = 1; break; */ } #endif } else { printf("%s:%d ERROR: Unrecognized block keyword: %s\n", cf->name, cf->linenum, name); fail = 1; break; } } if (fail) { ERRORMEMFREE: if (aliases != NULL) free(aliases); if (initstring != NULL) free(initstring); return 1; // this leaks memory (but also diagnoses bad input) } if (callsign == NULL) { // FIXME: Must define at least a callsign! printf("%s:%d ERROR: MUST define CALLSIGN parameter!\n", cf->name, cf->linenum); goto ERRORMEMFREE; } if (find_interface_by_callsign(callsign) != NULL) { // An interface with THIS callsign does exist already! printf("%s:%d ERROR: Same callsign (%s) exists already on another interface.\n", cf->name, cf->linenum, callsign); goto ERRORMEMFREE; } if (debug) printf(" Defining callsign=%s txok=%s\n", subif, callsign, tx_ok ? "true":"false"); aif = malloc(sizeof(*aif)); memcpy(aif, aifp, sizeof(*aif)); aif->callsign = callsign; parse_ax25addr(aif->ax25call, callsign, 0x60); aif->subif = subif; aif->tx_ok = tx_ok; aif->telemeter_to_is = telemeter_to_is; aif->telemeter_to_rf = telemeter_to_rf; // aif->telemeter_newformat = ... aif->ifindex = -1; // system sets automatically at store time aif->ifgroup = ifgroup; // either user sets, or system sets at store time aifp->tty->interface [subif] = aif; aifp->tty->ttycallsign[subif] = callsign; #ifdef PF_AX25 /* PF_AX25 exists -- highly likely a Linux system ! */ aifp->tty->netax25 [subif] = netax25_open(callsign); #endif if (initstring != NULL) { aifp->tty->initlen[subif] = initlength; aifp->tty->initstring[subif] = initstring; } if (aliascount == 0 || aliases == NULL) { aif->aliascount = 3; aif->aliases = interface_default_aliases; } else { aif->aliascount = aliascount; aif->aliases = aliases; } return 0; } void interface_init() { interface_store( &aprsis_interface ); } int interface_config(struct configfile *cf) { struct aprx_interface *aif = calloc(1, sizeof(*aif)); char *name, *param1; char *str = cf->buf; int parlen = 0; int have_fault = 0; int maxsubif = 16; // 16 for most KISS modes, 8 for SMACK int defined_subinterface_count = 0; int ifgroup = -1; aif->iftype = IFTYPE_UNSET; aif->aliascount = 3; aif->aliases = interface_default_aliases; aif->ifindex = -1; // system sets automatically at store time aif->ifgroup = ifgroup; // either user sets, or system sets at store time aif->tx_ok = 0; aif->telemeter_to_is = 1; aif->telemeter_to_rf = 1; aif->telemeter_newformat = 0; while (readconfigline(cf) != NULL) { if (configline_is_comment(cf)) continue; /* Comment line, or empty line */ // It can be severely indented... str = config_SKIPSPACE(cf->buf); name = str; str = config_SKIPTEXT(str, NULL); str = config_SKIPSPACE(str); config_STRLOWER(name); param1 = str; str = config_SKIPTEXT(str, &parlen); str = config_SKIPSPACE(str); if (strcmp(name, "") == 0) { // End of this interface definition // make the interface... break; } if (strcmp(name, "iftype == IFTYPE_UNSET) { aif->iftype = IFTYPE_AX25; // aif->nax25p = NULL; } else { printf("%s:%d ERROR: Only single device specification per interface block!\n", cf->name, cf->linenum); have_fault = 1; continue; } if (strcasecmp(param1,"$mycall") == 0) param1 = strdup(mycall); if (!validate_callsign_input(param1,1)) { printf("%s:%d ERROR: The CALLSIGN parameter on AX25-DEVICE must be of valid AX.25 format! '%s'\n", cf->name, cf->linenum, param1); have_fault = 1; continue; } if (find_interface_by_callsign(param1) != NULL) { // An interface with THIS callsign does exist already! printf("%s:%d ERROR: Same callsign (%s) exists already on another interface.\n", cf->name, cf->linenum, param1); have_fault = 1; continue; } if (debug) printf("%s:%d: AX25-DEVICE '%s' '%s'\n", cf->name, cf->linenum, param1, str); aif->callsign = strdup(param1); parse_ax25addr(aif->ax25call, aif->callsign, 0x60); aif->nax25p = netax25_addrxport(param1, aif); if (aif->nax25p == NULL) { printf("%s:%d ERROR: Failed to open this AX25-DEVICE: '%s'\n", cf->name, cf->linenum, param1); have_fault = 1; continue; } #else printf("%s:%d ERROR: AX25-DEVICE interfaces are not supported at this system!\n", cf->name, cf->linenum); have_fault = 1; #endif } else if ((strcmp(name,"serial-device") == 0) && (aif->tty == NULL)) { if (aif->iftype == IFTYPE_UNSET) { aif->iftype = IFTYPE_SERIAL; aif->tty = ttyreader_new(); aif->tty->ttyname = strdup(param1); aif->tty->interface[0] = aif; aif->tty->ttycallsign[0] = mycall; // end processing registers it } else { printf("%s:%d ERROR: Only single device specification per interface block!\n", cf->name, cf->linenum); have_fault = 1; continue; } if (debug) printf(".. new style serial: '%s' '%s'.. tncid=0\n", aif->tty->ttyname, str); have_fault |= ttyreader_parse_ttyparams(cf, aif->tty, str); switch (aif->tty->linetype) { case LINETYPE_KISSSMACK: maxsubif = 8; // 16 for most KISS modes, 8 for SMACK break; case LINETYPE_KISSFLEXNET: // ??? break; default: break; } // Always count as defined, even when an error happened! ++defined_subinterface_count; } else if ((strcmp(name,"tcp-device") == 0) && (aif->tty == NULL)) { int len; char *host, *port; if (aif->iftype == IFTYPE_UNSET) { aif->iftype = IFTYPE_TCPIP; aif->tty = ttyreader_new(); aif->tty->interface[0] = aif; aif->tty->ttycallsign[0] = mycall; // end-step processing registers it } else { printf("%s:%d ERROR: Only single device specification per interface block!\n", cf->name, cf->linenum); have_fault = 1; continue; } host = param1; port = str; str = config_SKIPTEXT(str, NULL); str = config_SKIPSPACE(str); if (debug) printf(".. new style tcp!: '%s' '%s' '%s'..\n", host, port, str); len = strlen(host) + strlen(port) + 8; aif->tty->ttyname = malloc(len); sprintf((char *) (aif->tty->ttyname), "tcp!%s!%s!", host, port); have_fault |= ttyreader_parse_ttyparams( cf, aif->tty, str ); switch (aif->tty->linetype) { case LINETYPE_KISSSMACK: maxsubif = 8; // 16 for most KISS modes, 8 for SMACK break; case LINETYPE_KISSFLEXNET: // ??? break; default: break; } // Always count as defined, even when an error happened! ++defined_subinterface_count; } else if (strcmp(name,"null-device") == 0) { if (aif->iftype == IFTYPE_UNSET) { aif->iftype = IFTYPE_NULL; // aif->nax25p = NULL; } else { printf("%s:%d ERROR: Only single device specification per interface block!\n", cf->name, cf->linenum); have_fault = 1; continue; } aif->tx_ok = 1; if (strcasecmp(param1,"$mycall") == 0) param1 = strdup(mycall); if (find_interface_by_callsign(param1) != NULL) { // An interface with THIS callsign does exist already! printf("%s:%d ERROR: Same callsign (%s) exists already on another interface.\n", cf->name, cf->linenum, param1); have_fault = 1; continue; } if (!have_fault) { aif->iftype = IFTYPE_TCPIP; aif->tty = ttyreader_new(); aif->tty->interface[0] = aif; aif->tty->ttycallsign[0] = mycall; } have_fault |= ttyreader_parse_nullparams(cf, aif->tty, str); if (debug) printf("%s:%d: NULL-DEVICE '%s' '%s'\n", cf->name, cf->linenum, param1, str); aif->callsign = strdup(param1); parse_ax25addr(aif->ax25call, aif->callsign, 0x60); #ifdef ENABLE_AGWPE } else if ((strcmp(name,"agwpe-device") == 0) && (aif->tty == NULL)) { // agwpe-device hostname hostport callsign agwpeportnum int len; const char *hostname, *hostport; char *callsign, *agwpeportnum; if (aif->iftype == IFTYPE_UNSET) { aif->iftype = IFTYPE_AGWPE; aif->tty = ttyreader_new(); aif->tty->interface[0] = aif; aif->tty->ttycallsign[0] = mycall; // end-step processing registers it } else { printf("%s:%d ERROR: Only single device specification per interface block!\n", cf->name, cf->linenum); have_fault = 1; continue; } hostname = strdup(param1); hostport = str; str = config_SKIPTEXT(str, NULL); str = config_SKIPSPACE(str); hostport = strdup(hostport); callsign = str; str = config_SKIPTEXT(str, NULL); str = config_SKIPSPACE(str); agwpeportnum = str; str = config_SKIPTEXT(str, NULL); str = config_SKIPSPACE(str); if (debug) printf(".. AGWPE-DEVICE: '%s' '%s' '%s' '%s' ('%s'...)\n", hostname, hostport, callsign, agwpeportnum, str); len = strlen(hostname) + strlen(hostport) + strlen(agwpeportnum) + 8; aif->tty->ttyname = malloc(len); sprintf((char *) (aif->tty->ttyname), "tcp!%s!%s[%s]", hostname, hostport, agwpeportnum); if (strcasecmp(callsign,"$mycall") == 0) callsign = strdup(mycall); else callsign = strdup(callsign); if (!validate_callsign_input(callsign,1)) { printf("%s:%d ERROR: The CALLSIGN parameter on AGWPE-DEVICE must be of valid AX.25 format! '%s'\n", cf->name, cf->linenum, callsign); have_fault = 1; continue; } if (find_interface_by_callsign(callsign) != NULL) { // An interface with THIS callsign does exist already! printf("%s:%d ERROR: Same callsign (%s) exists already on another interface.\n", cf->name, cf->linenum, callsign); have_fault = 1; continue; } aif->callsign = callsign; parse_ax25addr(aif->ax25call, aif->callsign, 0x60); aif->agwpe = agwpe_addport(hostname, hostport, agwpeportnum, aif); if (aif->agwpe == NULL) { printf("%s:%d ERROR: Failed to setup this AGWPE-DEVICE: '%s'\n", cf->name, cf->linenum, callsign); have_fault = 1; continue; } // Always count as defined, even when an error happened! ++defined_subinterface_count; #endif } else if (strcmp(name,"tx-ok") == 0) { int bool; if (!config_parse_boolean(param1, &bool)) { printf("%s:%d ERROR: Bad TX-OK parameter value -- not a recognized boolean: %s\n", cf->name, cf->linenum, param1); have_fault = 1; continue; } aif->tx_ok = bool; if (bool && aif->callsign) { if (!validate_callsign_input(aif->callsign,bool)) { // Transmitters REQUIRE valid AX.25 address printf("%s:%d: ERROR: TX-OK 'TRUE' -- BUT PREVIOUSLY SET CALLSIGN IS NOT VALID AX.25 ADDRESS \n", cf->name, cf->linenum); continue; } } } else if (strcmp(name, "telem-to-is") == 0) { int bool; if (!config_parse_boolean(param1, &bool)) { printf("%s:%d ERROR: Bad TELEM-TO-IS parameter value -- not a recognized boolean: %s\n", cf->name, cf->linenum, param1); have_fault = 1; break; } aif->telemeter_to_is = bool; } else if (strcmp(name, "telem-to-rf") == 0) { int bool; if (!config_parse_boolean(param1, &bool)) { printf("%s:%d ERROR: Bad TELEM-TO-RF parameter value -- not a recognized boolean: %s\n", cf->name, cf->linenum, param1); have_fault = 1; break; } aif->telemeter_to_rf = bool; } else if (strcmp(name,"timeout") == 0) { if (config_parse_interval(param1, &(aif->timeout) ) || (aif->timeout < 0) || (aif->timeout > 14400)) { aif->timeout = 0; printf("%s:%d ERROR: Bad TIMEOUT parameter value: '%s' accepted range: 0s to 4h.\n", cf->name, cf->linenum, param1); have_fault = 1; continue; } if (aif->tty != NULL) { aif->tty->read_timeout = aif->timeout; } } else if (strcmp(name, "callsign") == 0) { if (strcasecmp(param1,"$mycall") == 0) param1 = strdup(mycall); if (find_interface_by_callsign(param1) != NULL) { // An interface with THIS callsign does exist already! printf("%s:%d ERROR: Same callsign (%s) exists already on another interface.\n", cf->name, cf->linenum, param1); have_fault = 1; continue; } if (!validate_callsign_input(param1, aif->tx_ok)) { if (aif->tx_ok && aif->iftype != IFTYPE_NULL) { printf("%s:%d ERROR: The CALLSIGN parameter on transmit capable interface must be of valid AX.25 format! '%s'\n", cf->name, cf->linenum, param1); have_fault = 1; continue; } } if (aif->callsign != NULL) free(aif->callsign); aif->callsign = strdup(param1); parse_ax25addr(aif->ax25call, aif->callsign, 0x60); if (aif->tty != NULL) aif->tty->ttycallsign[0] = aif->callsign; if (debug) printf(" callsign= '%s'\n", aif->callsign); } else if (strcmp(name, "initstring") == 0) { if (aif->tty != NULL) { int initlength = parlen; char *initstring = malloc(parlen); memcpy(initstring, param1, parlen); aif->tty->initstring[0] = initstring; aif->tty->initlen[0] = initlength; } } else if (strcmp(name, "alias") == 0) { char *k = strtok(param1, ","); if (aif->aliases == interface_default_aliases) { aif->aliascount = 0; aif->aliases = NULL; } for (; k ; k = strtok(NULL,",")) { aif->aliascount += 1; if (debug) printf(" n=%d alias='%s'\n",aif->aliascount,k); aif->aliases = realloc(aif->aliases, sizeof(char*) * aif->aliascount); aif->aliases[aif->aliascount-1] = strdup(k); } #ifndef DISABLE_IGATE } else if (strcmp(name, "igate-group") == 0) { // param1 = integer 1 to N. ifgroup = atol(param1); if (ifgroup < 1) { printf("%s:%d ERROR: interface 'igate-group' parameter value: '%s' is an integer with minimum value of 1.\n", cf->name, cf->linenum, param1); have_fault = 1; continue; /* -- no hard upper limit anymore } else if (ifgroup >= MAX_IF_GROUP) { printf("%s:%d ERROR: interface 'igate-group' parameter value: '%s' is an integer with maximum value of %d.\n", cf->name, cf->linenum, param1, MAX_IF_GROUP-1); have_fault = 1; continue; */ } #endif } else { printf("%s:%d ERROR: Unknown config entry name: '%s'\n", cf->name, cf->linenum, name); have_fault = 1; } } while (!have_fault && aif->callsign == NULL && (aif->iftype == IFTYPE_SERIAL || aif->iftype == IFTYPE_TCPIP) && defined_subinterface_count == 1) { // First check if there already is an interface with $mycall // callsign on it.. if (find_interface_by_callsign(mycall) != NULL) { // An interface with $MYCALL callsign does exist already! printf("%s:%d ERROR: The $MYCALL callsign (%s) exists already on another interface.\n", cf->name, cf->linenum, mycall); have_fault = 1; break; } // Supply a default value aif->callsign = strdup(mycall); parse_ax25addr(aif->ax25call, aif->callsign, 0x60); #ifdef PF_AX25 // PF_AX25 exists -- highly likely a Linux system ! // With enough defaults being used, the callsign is defined // by global "macro" mycall, and never ends up activating // the tty -> linux kernel kiss/smack pty interface. // This part does that final step for minimalistic config. if (aif->tty != NULL && aif->tty->netax25[0] == NULL && aif->tty->ttycallsign[0] != NULL) { aif->tty->netax25[0] = netax25_open(aif->tty->ttycallsign[0]); } #endif // Done it, leave.. break; } if (!have_fault) { int i; if (aif->tty != NULL) { // Register all tty subinterfaces if (debug) printf(" .. store tty subinterfaces\n"); for (i = 0; i < maxsubif; ++i) { if (aif->tty->interface[i] != NULL) { if (debug) printf(" .. store interface[%d] callsign='%s'\n",i, aif->tty->interface[i]->callsign); interface_store(aif->tty->interface[i]); } } } else { // Not TTY multiplexed ( = KISS ) interface, // register just the primary. aif->ifgroup = ifgroup; // either user sets, or system sets at store time interface_store(aif); if (debug) printf(" .. store other interface\n"); } if (aif->iftype == IFTYPE_SERIAL) ttyreader_register(aif->tty); if (aif->iftype == IFTYPE_TCPIP) ttyreader_register(aif->tty); } else { if (aif->callsign) free(aif->callsign); if (aif->tty) { if (aif->tty->ttyname) free((void*)(aif->tty->ttyname)); } free(aif); } // coverity[leaked_storage] return have_fault; } /* * Process received AX.25 packet * - from AIF do find all DIGIPEATERS wanting this source. * - If there are none, end processing. * - Parse the received frame for possible latter filters * - Feed the resulting parsed packet to each digipeater * * * Tx-IGate rules: * // 2) - sending station has not been heard recently // on radio // 1) - verify receiving station has been heard // recently on radio // 4) - the receiving station has not been heard via // the Internet within a predefined time period. // (Note that _this_ packet is heard from internet, // so one must not confuse this to history.. // Nor this siblings that are being created // one for each tx-interface...) // // A station is said to be heard via the Internet if packets // from the station contain TCPIP* or TCPXX* in the header or // if gated (3rd-party) packets are seen on RF gated by the // station and containing TCPIP or TCPXX in the 3rd-party // header (in other words, the station is seen on RF as being // an IGate). * * That is, this part of code collects knowledge of RF-wise near-by TX-IGATEs. */ void interface_receive_ax25(const struct aprx_interface *aif, const char *ifaddress, const int is_aprs, const int ui_pid, const uint8_t *axbuf, const int axaddrlen, const int axlen, const char *tnc2buf, const int tnc2addrlen, const int tnc2len) { int i; int digi_like_aprs = is_aprs; if (aif == NULL) return; // Not a real interface for digi use if (aif->digisourcecount == 0) { if (debug>1) printf("interface_receive_ax25() no receivers for source %s\n",aif->callsign); if (!is_aprs) return; if (debug > 1) printf(" Adding to histroydb anyways..."); struct digipeater *digi = digipeater_find_by_iface(aif); if (digi == NULL) return; historydb_t *historydb = digi->historydb; struct pbuf_t *pb = pbuf_new(is_aprs, digi_like_aprs, tnc2addrlen, tnc2buf, tnc2len, axaddrlen, axbuf, axlen); if (pb == NULL) return; pb->source_if_group = aif->ifgroup; parse_aprs(pb, historydb); historydb_insert_heard(historydb, pb); pbuf_put(pb); return; // No receivers for this source } if (debug) printf("interface_receive_ax25() from %s axlen=%d tnc2len=%d\n",aif->callsign,axlen,tnc2len); // AX.25 address length is missing at least a SRCADDR>DESTADDR if (axaddrlen < 14) return; // FIXME: match ui_pid to list of UI PIDs that are treated with similar // digipeat rules as is APRS New-N. // ui_pid < 0 means that this frame is not an UI frame at all. if (ui_pid >= 0) digi_like_aprs = 1; // FIXME: more precise matching? for (i = 0; i < aif->digisourcecount; ++i) { struct digipeater_source *digisource = aif->digisources[i]; #ifndef DISABLE_IGATE // Transmitter's HistoryDB historydb_t *historydb = digisource->parent->historydb; #endif // Allocate pbuf, it is born "gotten" (refcount == 1) struct pbuf_t *pb = pbuf_new(is_aprs, digi_like_aprs, tnc2addrlen, tnc2buf, tnc2len, axaddrlen, axbuf, axlen); if (pb == NULL) { // Urgh! Can't do a thing to this! // Likely reason: axlen+tnc2len > 2100 bytes! continue; } pb->source_if_group = aif->ifgroup; // If APRS packet, then parse for APRS meaning ... if (is_aprs) { int rc = parse_aprs(pb, #ifndef DISABLE_IGATE historydb #else NULL #endif ); // don't look inside 3rd party char *srcif = aif->callsign; if (debug) printf(".. parse_aprs() rc=%s type=0x%02x srcif=%s tnc2addr='%s' info_start='%s'\n", rc ? "OK":"FAIL", pb->packettype, srcif, pb->data, pb->info_start); // If there are no filters, permit all packets if (digisource->src_filters != NULL) { int filter_discard = filter_process(pb, digisource->src_filters, #ifndef DISABLE_IGATE historydb // Transmitter HistoryDB #else NULL #endif ); // filter_discard > 0: accept // filter_discard = 0: indifferent (not reject, not accept), tx-igate rules as is. // filter_discard < 0: reject if (debug) printf("source filtering result: %s\n", (filter_discard < 0 ? "DISCARD" : (filter_discard > 0 ? "ACCEPT" : "no-match"))); if (filter_discard <= 0) { pbuf_put(pb); continue; // allow only explicitly accepted } } #ifndef DISABLE_IGATE // Find out IGATE callsign (if any), and record it on transmitter's historydb. if (pb->packettype & T_THIRDPARTY) { rx_analyze_3rdparty( historydb, pb ); } else { // Everything else, feed to history-db historydb_insert_heard( historydb, pb ); } #endif } // Feed it to digipeater ... digipeater_receive( digisource, pb); // .. and finally free up the pbuf (if refcount goes to zero) pbuf_put(pb); } } /* * Process AX.25 packet transmit; beacons, digi output, igate output... * * - aif: output interface * - axaddr: ax.25 address * - axdata: payload content, with control and PID bytes prefixing them */ void interface_transmit_ax25(const struct aprx_interface *aif, uint8_t *axaddr, const int axaddrlen, const char *axdata, const int axdatalen) { int axlen = axaddrlen + axdatalen; uint8_t *axbuf; if (debug) { const char *callsign = ""; if (aif != NULL) callsign=aif->callsign; printf("interface_transmit_ax25(aif=%p[%s], .., axlen=%d)\n", aif, callsign, axlen); } if (axlen == 0) return; if (aif == NULL) return; switch (aif->iftype) { case IFTYPE_SERIAL: case IFTYPE_TCPIP: // If there is linetype error, kisswrite detects it. // Make it into single buffer to give to KISS sender if (debug>2) { printf("serial_sendto() len=%d,%d: ",axaddrlen,axdatalen); hexdumpfp(stdout, axaddr, axaddrlen, 1); printf(" // "); hexdumpfp(stdout, (uint8_t*)axdata, axdatalen, 0); printf("\n"); } axbuf = alloca(axlen); memcpy(axbuf, axaddr, axaddrlen); memcpy(axbuf + axaddrlen, axdata, axdatalen); kiss_kisswrite(aif->tty, aif->subif, axbuf, axlen); break; #ifdef PF_AX25 /* PF_AX25 exists -- highly likely a Linux system ! */ case IFTYPE_AX25: // The Linux netax25 sender takes same data as this interface netax25_sendto( aif->nax25p, axaddr, axaddrlen, axdata, axdatalen ); break; #endif #ifdef ENABLE_AGWPE case IFTYPE_AGWPE: agwpe_sendto( aif->agwpe, axaddr, axaddrlen, axdata, axdatalen ); break; #endif case IFTYPE_NULL: // Efficient transmitter :-) if (debug>1) printf("tx null-device: %s\n", aif->callsign); if (debug>2) { printf("null_sendto() len=%d,%d ",axaddrlen,axdatalen); hexdumpfp(stdout, axaddr, axaddrlen, 1); printf(" // "); hexdumpfp(stdout, (uint8_t*)axdata, axdatalen, 0); printf("\n"); } // Account the transmission anyway ;-) erlang_add(aif->callsign, ERLANG_TX, axaddrlen+axdatalen + 10, 1); break; default: break; } } #ifndef DISABLE_IGATE /* * Process received AX.25 packet -- for APRSIS * - from AIF do find all DIGIPEATERS wanting this source. * - If there are none, end processing. * - Parse the received frame for possible latter filters * - Feed the resulting parsed packet to each digipeater * * See: http://www.aprs-is.net/IGateDetails.aspx * * Paths * * IGates should use the 3rd-party format on RF of * IGATECALL>APRS,GATEPATH}FROMCALL>TOCALL,TCPIP,IGATECALL*:original packet data * where GATEPATH is the path that the gated packet is to follow * on RF. This format will allow IGates to prevent gating the packet * back to APRS-IS. * * q constructs should never appear on RF. * The I construct should never appear on RF. * Except for within gated packets, TCPIP and TCPXX should not be * used on RF. * * Part of the Tx-IGate logic is here because we use pbuf_t data blocks: * * 1) The receiving station has been heard recently * within defined range limits, and more recently * than since given interval T1. (Range as digi-hops [N1] * or coordinates, or both.) * * 2) The sending station has not been heard via RF * within timer interval T2. (Third-party relayed * frames are not analyzed for this.) * * 4) the receiving station has not been heard via the Internet * within a predefined time period. * A station is said to be heard via the Internet if packets * from the station contain TCPIP* or TCPXX* in the header or * if gated (3rd-party) packets are seen on RF gated by the * station and containing TCPIP or TCPXX in the 3rd-party * header (in other words, the station is seen on RF as being * an IGate). * * 5) Gate all packets to RF based on criteria set by the sysop * (such as callsign, object name, etc.). * * c) Drop everything else. */ static uint8_t toaprs[7] = { 'A'<<1,'P'<<1,'R'<<1,'S'<<1,' '<<1,' '<<1,0x60 }; void interface_receive_3rdparty( const struct aprx_interface *aif, char **heads, const int headscount, const char *gwtype, const char *tnc2data, const int tnc2datalen ) { int d; // digipeater index const char *fromcall = heads[0]; const char *origtocall = heads[1]; char tnc2buf1[2800]; uint8_t ax25buf1[2800]; time_t recent_time = tick.tv_sec - 3600; // "recent" = 1 hour uint16_t filter_packettype = 0; int ax25addrlen1; int ax25len1; int rc, tnc2addrlen1, tnc2len1; uint8_t *a, *b; char *t; struct pbuf_t *pb; if (debug) printf("interface_receive_3rdparty() aif=%p, aif->digicount=%d\n", aif, aif ? aif->digisourcecount : -1); if (aif == NULL) { return; // Not a real interface for digi use } // We have to recognize incoming messages targeted to // this server. For this we need to parse the TNC2 frame. // // We have a also filter statements to process here, // we need to turn incoming APRSIS frame to something // that the filter can process: // Incoming: // EI7IG-1>APRSX,TCPIP*,qAC,T2IRELAND:@262231z5209.97N/00709.65W_238/019g019t049P006h95b10290.wview_5_19_0 // Filtered: // MYCALL>APRSX,VIA:}EI7IG-1>APRSX:@262231z5209.97N/00709.65W_238/019g019t049P006h95b10290.wview_5_19_0 a = ax25buf1; parse_ax25addr( a, tocall, 0x60 ); a += 7; parse_ax25addr( a, fromcall, 0x60 ); a += 7; // No need to add generated VIA address component // to this filter input data a[-1] |= 0x01; // end-of-address bit ax25addrlen1 = a - ax25buf1; *a++ = 0x03; *a++ = 0xF0; if ((sizeof(ax25buf1) - tnc2datalen) <= (a-ax25buf1)) { if (debug) printf(" .. data does not fit on ax25buf"); return; } memcpy( a, tnc2data, tnc2datalen ); a += tnc2datalen; ax25len1 = (a - ax25buf1); t = tnc2buf1; t += sprintf(t, "%s>%s:", fromcall, origtocall); tnc2addrlen1 = t - tnc2buf1 - 1; if ((sizeof(tnc2buf1) - tnc2datalen) <= (t-tnc2buf1)) { if (debug) printf(" .. data does not fit on tnc2buf"); return; } memcpy(t, tnc2data, tnc2datalen); t += tnc2datalen; tnc2len1 = (t - tnc2buf1); // Allocate temporary pbuf for filter call use pb = pbuf_new(1 /*is_aprs*/, 1 /* digi_like_aprs */, tnc2addrlen1, tnc2buf1, tnc2len1, ax25addrlen1, ax25buf1, ax25len1); if (pb == NULL) { // Urgh! Can't do a thing to this! // Likely reason: ax25len+tnc2len > 2100 bytes! if (debug) printf("pbuf_new() returned NULL! Discarding!\n"); return; } pb->source_if_group = 0; // 3rd-party frames are always from APRSIS // This is APRS packet, parse for APRS meaning ... rc = parse_aprs(pb, NULL); // look inside 3rd party -- historydb is looked up again below if (debug) { const char *srcif = aif->callsign ? aif->callsign : "??"; printf(".. parse_aprs() rc=%s type=0x%02x srcif=%s tnc2addr='%s' info_start='%s'\n", rc ? "OK":"FAIL", pb->packettype, srcif, pb->data, pb->info_start); } filter_packettype = pb->packettype; // Check if it is a message destined to myself, and process if so. rc = process_message_to_myself(aif, pb); // Drop the temporary pbuf.. pbuf_put(pb); if (rc != 0) { return; // Processed as message-to-myself } if (aif->digisourcecount == 0) { return; // No receivers for this source } // Feed it to digipeaters ... for (d = 0; d < aif->digisourcecount; ++d) { struct digipeater_source *digisrc = aif->digisources[d]; struct digipeater *digi = digisrc->parent; struct aprx_interface *tx_aif = digi->transmitter; #ifndef DISABLE_IGATE historydb_t *historydb = digi->historydb; #endif char *srcif; int discard_this, filter_discard; char tnc2buf[2800]; uint8_t ax25buf[2800]; int ax25addrlen, ax25len; int tnc2addrlen, tnc2len; // This is APRS packet, parse for APRS meaning ... rc = parse_aprs(pb, #ifndef DISABLE_IGATE historydb // Transmitter HistoryDB #else NULL #endif ); // look inside 3rd party -- TODO: but what HISTORYDB ? if (debug) { const char *srcif = aif->callsign ? aif->callsign : "??"; printf(".. parse_aprs() rc=%s type=0x%02x srcif=%s tnc2addr='%s' info_start='%s'\n", rc ? "OK":"FAIL", pb->packettype, srcif, pb->data, pb->info_start); } // Produced 3rd-party packet: // IGATECALL>APRS,GATEPATH:}FROMCALL>TOCALL,TCPIP,IGATECALL*:original packet data if (debug) printf("## produce 3rd-party AX.25 frames for transmit, and original source one for filtering:\n"); // Parse the TNC2 format to AX.25 format // using ax25buf[] storage area. memcpy(ax25buf, toaprs, 7); // AX.25 DEST call // FIXME: should this be IGATECALL, not tx_aif->ax25call ?? memcpy(ax25buf+7, tx_aif->ax25call, 7); // AX.25 SRC call a = ax25buf + 2*7; if ((filter_packettype & T_MESSAGE) != 0 && digisrc->msg_path != NULL) { if (digisrc->msg_path != NULL) { memcpy(a, digisrc->msgviapath, 7); // AX.25 VIA call for a Message a += 7; } } else { if (digisrc->via_path != NULL) { memcpy(a, digisrc->ax25viapath, 7); // AX.25 VIA call a += 7; } } *(a-1) |= 0x01; // DEST,SRC(,VIA1) - end-of-address bit ax25addrlen = a - ax25buf; if (debug>2) { printf("ax25hdr "); hexdumpfp(stdout, ax25buf, ax25addrlen, 1); printf("\n"); } *a++ = 0x03; // UI *a++ = 0xF0; // PID = 0xF0 b = a; // AX.25 data body a += sprintf((char*)a, "}%s>%s,%s,%s*:", fromcall, origtocall, gwtype, tx_aif->callsign ); ax25len = a - ax25buf; if (tnc2datalen + ax25len > sizeof(ax25buf)) { // Urgh... Can not fit it in :-( if(debug)printf("data does not fit into ax25buf: %d > %d\n", tnc2datalen+ax25len, (int)sizeof(ax25buf)); continue; } memcpy(a, tnc2data, tnc2datalen); ax25len += tnc2datalen; a += tnc2datalen; if (debug>1) { printf("Formatted AX.25: %s>APRS", tx_aif->callsign); if ((filter_packettype & T_MESSAGE) != 0 && digisrc->msg_path != NULL) { if (digisrc->msg_path != NULL) { printf(",%s", digisrc->msg_path); } } else { if (digisrc->via_path != NULL) { printf( ",%s", digisrc->via_path); } } printf(":"); fwrite(b, 1, a-b, stdout); printf("\n"); } // AX.25 packet is built, now build TNC2 version of it t = tnc2buf; // NOTE: Building TNC2 form for filter purposes, that is the data // has original source address, and not out interface specific one! // //t += sprintf(t, "%s>%s", tx_aif->callsign, tocall); t += sprintf(t, "%s>%s", fromcall, origtocall); { int i; for (i=2; imsg_path != NULL) { if (digisrc->msg_path != NULL) { t += sprintf(t, ",%s", digisrc->msg_path); } } else { if (digisrc->via_path != NULL) { t += sprintf(t, ",%s", digisrc->via_path); } } */ if (debug>1)printf(" filter tnc2addr = %s\n", tnc2buf); tnc2addrlen = t - tnc2buf; *t++ = ':'; t += sprintf(t, "}%s>%s,%s,%s*:", fromcall, origtocall, gwtype, tx_aif->callsign ); if (tnc2datalen + (t-tnc2buf) +4 > sizeof(tnc2buf)) { // Urgh... Can not fit it in :-( if(debug)printf("data does not fit into tnc2buf: %d > %d\n", (int)(tnc2datalen+(t-tnc2buf)+4), (int)sizeof(tnc2buf)); continue; } memcpy(t, tnc2data, tnc2datalen); t += tnc2datalen; tnc2len = (t - tnc2buf); // Allocate pbuf, it is born "gotten" (refcount == 1) pb = pbuf_new(1 /*is_aprs*/, 1 /* digi_like_aprs */, tnc2addrlen, tnc2buf, tnc2len, ax25addrlen, ax25buf, ax25len); if (pb == NULL) { // Urgh! Can't do a thing to this! // Likely reason: ax25len+tnc2len > 2100 bytes! if (debug) printf("pbuf_new() returned NULL! Discarding!\n"); continue; } pb->source_if_group = 0; // 3rd-party frames are always from APRSIS srcif = aif->callsign ? aif->callsign : "??"; // This is APRS packet, parse for APRS meaning ... rc = parse_aprs(pb, historydb); // look inside 3rd party if (debug) printf(".. parse_aprs() rc=%s type=0x%02x srcif=%s tnc2addr='%s' info_start='%s'\n", rc ? "OK":"FAIL", pb->packettype, srcif, pb->data, pb->info_start); // 1) - verify receiving station has been heard // recently on radio // 2) - sending station has not been heard recently // on radio // 4) - the receiving station has not been heard via // the Internet within a predefined time period. // (Note that _this_ packet is heard from internet, // so one must not confuse this to history.. // Nor this siblings that are being created // one for each tx-interface...) // // A station is said to be heard via the Internet if packets // from the station contain TCPIP* or TCPXX* in the header or // if gated (3rd-party) packets are seen on RF gated by the // station and containing TCPIP or TCPXX in the 3rd-party // header (in other words, the station is seen on RF as being // an IGate). // Message Tx-IGate rules.. discard_this = 0; if (pb->dstname == NULL) { // Sanity -- not a message.. discard_this = 1; } if (filter_packettype == 0) filter_packettype = pb->packettype; if ((filter_packettype & T_MESSAGE) == 0) { // Not a message packet discard_this = 1; } if ((filter_packettype & (T_NWS)) != 0) { // Not a weather alert packet discard_this = 1; } // Accept/Reject the packet by digipeater rx filter? filter_discard = 0; if (digisrc->src_filters == NULL) { // No filters defined, default Tx-iGate rules apply } else { if (debug) printf("## process source filter\n"); { // Stores position, and message references void *v = historydb_insert_heard( historydb, pb ); if (debug) printf("historydb_insert_heard(APRSIS) v=%p\n", v); } filter_discard = filter_process(pb, digisrc->src_filters, historydb); if (debug) printf("filter says: %d (%s)\n", filter_discard, (filter_discard > 0 ? "accept" : (filter_discard == 0 ? "indifferent" : "reject"))); // filter_discard > 0: accept // filter_discard = 0: indifferent (not reject, not accept), tx-igate rules as is. // filter_discard < 0: reject // Manual filter says: Reject! if (filter_discard < 0) { if (debug) printf("REJECTED!\n"); discard_this = 1; } // Manual filter says: Accept! if (discard_this && filter_discard > 0) { if (debug) printf("filters say: send!\n"); discard_this = 0; } } if (!discard_this && pb->dstname != NULL) { // 1) - verify receiving station has been heard // recently on radio char recipient[10]; history_cell_t *hist_rx; int i = 0; while ( i < 9 && pb->dstname[i] != 0 && pb->dstname[i] != ' ' ) { recipient[i] = pb->dstname[i]; ++i; } recipient[i] = 0; pb->dstname_len = strlen(recipient); // FIXME? Should test all SSIDs of this target callsign, // not just this one target, // if this is a T_MESSAGE! (strange BoB rules...) hist_rx = historydb_lookup(historydb, recipient, strlen(recipient)); if (hist_rx == NULL) { if (debug) printf("No history entry for receiving call: '%s' DISCARDING.\n", recipient); discard_this = 1; } // See that it has 'heard on radio' flag on this tx interface if (hist_rx != NULL && discard_this == 0) { if (timecmp(hist_rx->last_heard[tx_aif->ifgroup], recent_time) >= 0) { // Heard recently enough discard_this = 0; if (debug) printf("History entry for receiving call '%s' from RADIO is recent enough. KEEPING.\n", recipient); } } // FIXME: Check that recipient is in our service area // a) coordinate is "near by" // b) last known hop-count is low enough // (FIXME: RF hop-count recording infra needed!) // 4) the receiving station has not been heard via the internet if (hist_rx != NULL && timecmp(hist_rx->last_heard[0], recent_time) > 0) { // "is heard recently via internet" discard_this = 1; if (debug) printf("History entry for sending call '%s' from APRSIS is too new. DISCARDING.\n", fromcall); } } if (!discard_this) { history_cell_t *hist_tx = historydb_lookup(historydb, fromcall, strlen(fromcall)); // If no history entry for this tx callsign, // then rules 2 and 4 permit tx-igate if (hist_tx != NULL) { // There is a history entry for this tx callsign, check rules 2+4 // 2) Sending station has not been heard recently on radio (this target) if (timecmp(hist_tx->last_heard[tx_aif->ifgroup], recent_time) > 0) { // "is heard recently" discard_this = 1; if (debug) printf("History entry for sending call '%s' from RADIO is too new. DISCARDING.\n", fromcall); } } } { // Stores position, and message references void *v = historydb_insert_heard( historydb, pb ); if (debug) printf("historydb_insert_heard(APRSIS) v=%p\n",v); } if (filter_discard > 0 || (filter_discard == 0 && !discard_this)) { // Not discarding - approved for transmission if ((filter_packettype & T_POSITION) == 0) { // TODO: For position-less packets send at first a position packet // for same source call sign -- if available. } if (debug) printf("Send to digipeater\n"); digipeater_receive( digisrc, pb); } else { if (debug) printf("DISCARDED! (filter_discard=%d, discard_this=%d)\n",filter_discard, discard_this); } // .. and finally free up the pbuf (if refcount goes to 0) pbuf_put(pb); } } /* * See if this is a message that is destined to myself */ #define DSTNAMELEN 16 /* 8+1+2+1 = 12, use 16 for stack align */ static int dstname_is_myself(const struct pbuf_t*const pb, char *dstname, const struct aprx_interface**aifp) { struct aprx_interface *aif; // Copy message destination, if available. *dstname = 0; // always clear first.. if (pb->dstname != NULL) { strncpy(dstname, pb->dstname, DSTNAMELEN-1); dstname[DSTNAMELEN-1] = 0; } if (strcmp(dstname, mycall) == 0) { // To MYCALL account return 1; } if (aprsis_loginid != NULL && strcmp(dstname, aprsis_loginid) == 0) { // To APRSIS login account return 1; } // Maybe one of my transmitters? aif = find_interface_by_callsign(dstname); if (aif != NULL && aif->tx_ok) { // To one of my transmitter interfaces *aifp = aif; return 1; } // None of my identities return 0; } /* * Ack the message */ static void ack_message(const struct aprx_interface *const srcif, const struct aprx_interface *const aif, const struct pbuf_t*const pb, const struct aprs_message_t*const am, const char*const dstname) { // ACK message to APRSIS is simple(ish), routing it is another thing.. if (srcif == &aprsis_interface) { char destbuf[50]; int destlen = sprintf(destbuf, "%s>APRS,TCPIP*", dstname); char txt[50]; int txtlen; char *t = txt; const char *s = pb->srcname; int i; *t++ = ':'; for (i = 0; i < 9 && i < pb->srcname_len; ++i) { *t++ = *s++; } for ( ; i < 9 ; ++i) { *t++ = ' '; } *t++ = ':'; *t++ = 'a'; *t++ = 'c'; *t++ = 'k'; for (i = 0, s = am->msgid; i < am->msgid_len; ++i) { *t++ = *s++; } txtlen = t - txt; aprsis_queue(destbuf, destlen, qTYPE_LOCALGEN, aprsis_login, txt, txtlen); return; } // TODO: ACK things sent via radio interfaces? } /* * A message is destined to myself, lets look closer.. * Return non-zero if it was recognized as targeted to this node. */ int process_message_to_myself(const struct aprx_interface*const srcif, const struct pbuf_t*const pb) { struct aprs_message_t am; int rc; const struct aprx_interface*aif = srcif; char dstname[DSTNAMELEN]; if ((pb->packettype & T_MESSAGE) == 0) { return 0; // Not a message! } if (!dstname_is_myself(pb, dstname, &aif)) { // Not destined to me // This will also reject bulletins, which one is not supposed to ACK anyway.. return 0; } rc = parse_aprs_message(pb, &am); if (rc != 0) { // Not acceptable parse result return 0; } // Whatever message, syslog it. syslog(LOG_INFO, "%.*s", pb->packet_len, pb->data); if (am.is_rej || am.is_ack) { // A REJect or ACKnowledge received, drop. return 1; } // If there is msgid in the message -> I need to ACK it. if (am.msgid != NULL) { ack_message(srcif, aif, pb, &am, dstname); } // TODO: Process the message ? return 1; } #endif /* * Process transmit of APRS beacons * * Note: txbuf starts if AX.25 Control+PID bytes! */ int interface_transmit_beacon(const struct aprx_interface *aif, const char *src, const char *dest, const char *via, const char *txbuf, const int txlen) { uint8_t ax25addr[90]; int ax25addrlen; int have_fault = 0; int viaindex = 1; // First via field will be index 2 char axaddrbuf[128]; char *a = axaddrbuf; dupecheck_t *dupechecker; int axlen; if (debug) printf("interface_transmit_beacon() aif=%p, aif->txok=%d aif->callsign='%s'\n", aif, aif && aif->tx_ok ? 1 : 0, aif ? aif->callsign : ""); if (aif == NULL) return 0; if (!aif->tx_ok) return 0; // Sorry, no Tx dupechecker = digipeater_find_dupecheck(aif); // _FOR_VALGRIND_ -- and just in case for normal use memset(ax25addr, 0, sizeof(ax25addr)); memset(axaddrbuf, 0, sizeof(axaddrbuf)); if (parse_ax25addr(ax25addr + 7, src, 0x60)) { if (debug) printf("parse_ax25addr('%s') failed. [1]\n", src); return -1; } if (parse_ax25addr(ax25addr + 0, dest, 0x60)) { if (debug) printf("parse_ax25addr('%s') failed. [2]\n", dest); return -1; } ax25addrlen = 14; // Initial Src+Dest without any Via. a += sprintf(axaddrbuf, "%s>%s", src, dest); *a = 0; axlen = a - axaddrbuf; if (via != NULL) { char viafield[12]; int vialen = strlen(via); const char *s, *p = via; const char *ve = via + vialen; *a++ = ','; axlen = a - axaddrbuf; if (vialen > (sizeof(axaddrbuf)-axlen-3)) vialen = (sizeof(axaddrbuf)-axlen-3); if (vialen > 0) { memcpy(a, via, vialen); a += vialen; } *a = 0; axlen = a - axaddrbuf; while (p < ve) { int len; for (s = p; s < ve; ++s) { if (*s == ',') { break; } } // [p..s] is now one VIA field. if (s == p) { // BAD! have_fault = 1; if (debug>1) printf(" S==P "); break; } ++viaindex; if (viaindex >= 10) { if (debug) printf("too many via-fields: '%s'\n", via); return -1; // Too many VIA fields } len = s - p; if (len >= sizeof(viafield)) len = sizeof(viafield)-1; memcpy(viafield, p, len); viafield[len] = 0; if (*s == ',') ++s; p = s; // VIA-field picked up, now parse it.. if (parse_ax25addr(ax25addr + viaindex * 7, viafield, 0x60)) { // Error on VIA field value if (debug) printf("parse_ax25addr('%s') failed. [3]\n", viafield); return -1; } ax25addrlen += 7; } } if (have_fault) { if (debug) { printf("observed a fault in inputs of interface_transmit_beacon()\n"); } return 1; } ax25addr[ax25addrlen-1] |= 0x01; // set address field end bit // Feed to dupe-filter (transmitter specific) // this means we have already seen it, and when // it comes back from somewhere, we do not digipeat // it ourselves. if (dupechecker != NULL) dupecheck_aprs( dupechecker, axaddrbuf, strlen(axaddrbuf), txbuf+2, txlen-2 ); // ignore Ctrl+PID // Transmit it to actual radio interface interface_transmit_ax25( aif, ax25addr, ax25addrlen, txbuf, txlen); if (rflogfile) { char *axbuf; axbuf = alloca(axlen+txlen+3); memcpy( axbuf, axaddrbuf, axlen ); a = axbuf + axlen; *a++ = ':'; memcpy(a, txbuf+2, txlen-2); // forget control+pid bytes.. a += txlen -2; // final assembled message end pointer rflog(aif->callsign, 'T', 0, axbuf, a - axbuf); // beacon } return 0; } aprx-2.9.0/keyhash.c000664 000000 000000 00000004772 13040775352 014274 0ustar00rootroot000000 000000 /******************************************************************** * APRX -- 2nd generation APRS iGate and digi with * * minimal requirement of esoteric facilities or * * libraries of any kind beyond UNIX system libc. * * * * (c) Matti Aarnio - OH2MQK, 2007-2014 * * * ********************************************************************/ /* * Keyhash routines for the system. * * What is needed is _fast_ hash function. Preferrably arithmethic one, * which does not need table lookups, and can work with aligned 32 bit * data -- but also on unaligned, and on any byte counts... * * Contenders: * http://burtleburtle.net/bob/c/lookup3.c * http://www.ibiblio.org/pub/Linux/devel/lang/c/mph-1.2.tar.gz * http://www.concentric.net/~Ttwang/tech/inthash.htm * http://isthe.com/chongo/tech/comp/fnv/ * * Currently using FNV-1a * */ /* // FNV-1a hash from http://isthe.com/chongo/tech/comp/fnv/ // // It is algorithmic hash without memory lookups. // Compiler seems to prefer actual multiplication over a bunch of // fixed shifts and additions. */ #include #include #include "keyhash.h" void keyhash_init(void) { } uint32_t __attribute__((pure)) keyhash(const void const *p, int len, uint32_t hash) { const uint8_t *u = p; int i; #define FNV_32_PRIME 16777619U #define FNV_32_OFFSET 2166136261U if (hash == 0) hash = (uint32_t)FNV_32_OFFSET; for (i = 0; i < len; ++i, ++u) { #if defined(NO_FNV_GCC_OPTIMIZATION) hash *= FNV_32_PRIME; #else hash += (hash<<1) + (hash<<4) + (hash<<7) + (hash<<8) + (hash<<24); #endif hash ^= (uint32_t) *u; } return hash; } /* The data material is known to contain ASCII, and if any value in there * is a lower case letter, it is first converted to upper case one. */ uint32_t __attribute__((pure)) keyhashuc(const void const *p, int len, uint32_t hash) { const uint8_t *u = p; int i; if (hash == 0) hash = (uint32_t)FNV_32_OFFSET; for (i = 0; i < len; ++i, ++u) { #if defined(NO_FNV_GCC_OPTIMIZATION) hash *= FNV_32_PRIME; #else hash += (hash<<1) + (hash<<4) + (hash<<7) + (hash<<8) + (hash<<24); #endif uint32_t c = *u; // Is it lower case ASCII letter ? if ('a' <= c && c <= 'z') { // convert to upper case. c -= ('a' - 'A'); } hash ^= c; } return hash; } aprx-2.9.0/keyhash.h000664 000000 000000 00000001435 13040775352 014272 0ustar00rootroot000000 000000 /******************************************************************** * APRX -- 2nd generation APRS iGate and digi with * * minimal requirement of esoteric facilities or * * libraries of any kind beyond UNIX system libc. * * * * (c) Matti Aarnio - OH2MQK, 2007-2014 * * * ********************************************************************/ #ifndef KEYHASH_H #define KEYHASH_H extern void keyhash_init(void); extern unsigned int keyhash(const void *s, int slen, unsigned int hash0); extern unsigned int keyhashuc(const void *s, int slen, unsigned int hash0); #endif aprx-2.9.0/kiss.c000664 000000 000000 00000054655 13040775352 013616 0ustar00rootroot000000 000000 /* **************************************************************** * * * * APRX -- 2nd generation APRS iGate and digi with * * minimal requirement of esoteric facilities or * * libraries of any kind beyond UNIX system libc. * * * * (c) Matti Aarnio - OH2MQK, 2007-2014 * * * * **************************************************************** */ #include "aprx.h" /* * kissprocess() -- the S->rdline[] array has a KISS frame after * KISS escape decode. The frame begins with KISS command byte, then * AX25 headers and payload, and possibly a CRC-checksum. * Frame length is in S->rdlinelen variable. */ /* KA9Q describes the KISS frame format as follows: http://www.ka9q.net/papers/kiss.html - - - - - - - - - 4. Control of the KISS TNC To distinguish between command and data frames on the host/TNC link, the first byte of each asynchronous frame between host and TNC is a "type" indicator. This type indicator byte is broken into two 4-bit nibbles so that the low-order nibble indicates the command number (given in the table below) and the high-order nibble indicates the port number for that particular command. In systems with only one HDLC port, it is by definition Port 0. In multi-port TNCs, the upper 4 bits of the type indicator byte can specify one of up to sixteen ports. The following commands are defined in frames to the TNC (the "Command" field is in hexadecimal): . . . . . . CMD code 0 is for the data frame, and is only one present coming from TNC to host. - - - - - - - - - SYMEK et al. have defined a way to run CRC inside KISS frames to verify that the KISS-frame itself is correct: http://www.symek.com/g/smack.html http://www.ir3ip.net/iw3fqg/doc/smak.htm SMACK variation recycles the top-most bit of the TNC-id nibble, and thus permits up to 8 TNC ports on line. Top-most bit is always one on SMACK frames. SMACK runs CRC16 over whole KISS frame buffer, including the CMD byte. The CRC-code is thus _different_ from what will be sent out on radio, the latter being CRC-CCITT (see further below): Following CRC16-polynome is used: X^16 + X^15 + X^2 + 1 The CRC-generator is preset to zero. Chosen initialize to zero does mean that after a correct packet with a correct checksum is ran thru this CRC, the output checksum will be zero. - - - - - - - - - Where is FLEXNET specification? */ /* * kissencoder(): If (cmdbyte & 0x80) is set, then this * produces SMACK format frame, otherwise * plain KISS. * */ int kissencoder( void *kissbuf, int kissspace, LineType linetype, const void *pktbuf, int pktlen, int cmdbyte ) { uint8_t *kb = kissbuf; uint8_t *ke = kb + kissspace - 3; const uint8_t *pkt = pktbuf; int i; uint16_t crc16; uint16_t crcflex; crc16 = crc16_table[cmdbyte & 0xFF]; crcflex = 0xff00 ^ crc_flex_table[(~cmdbyte) & 0xff]; /* Expect the KISS buffer to be at least ... 8 bytes.. */ *kb++ = KISS_FEND; *kb++ = cmdbyte; for (i = 0; i < pktlen && kb < ke; ++i, ++pkt) { // Calc CRCs while encoding data.. int b = *pkt; crc16 = ((crc16 >> 8) & 0xff) ^ crc16_table[(crc16 ^ b) & 0xFF]; crcflex = (crcflex << 8) ^ crc_flex_table[((crcflex >> 8) ^ b) & 0xff]; if (b == KISS_FEND) { *kb++ = KISS_FESC; *kb++ = KISS_TFEND; } else { *kb++ = b; if (b == KISS_FESC) *kb++ = KISS_TFESC; } } /* If caller is asking for SMACK format frame, then store calculated CRC on frame. - CRC-bytes must be KISS escaped! */ /* If caller is asking for SMACK/FLEXNET format frame, then store calculated CRC on frame. - CRC-bytes must be KISS escaped! */ if (linetype == LINETYPE_KISSSMACK || linetype == LINETYPE_KISSFLEXNET) { int crc, b; if (linetype == LINETYPE_KISSSMACK) { crc = crc16; } else if (linetype == LINETYPE_KISSFLEXNET) { crc = crcflex; } else { // Silence compiler warning, this branch is never reached.. crc = 0; } b = crc & 0xFF; /* low crc byte */ if (b == KISS_FEND) { if (kb < ke) *kb++ = KISS_FESC; if (kb < ke) *kb++ = KISS_TFEND; } else { if (kb < ke) *kb++ = b; if (b == KISS_FESC && kb < ke) *kb++ = KISS_TFESC; } b = (crc >> 8) & 0xFF; /* high crc byte */ if (b == KISS_FEND) { if (kb < ke) *kb++ = KISS_FESC; if (kb < ke) *kb++ = KISS_TFEND; } else { if (kb < ke) *kb++ = b; if (b == KISS_FESC && kb < ke) *kb++ = KISS_TFESC; } } if (kb < ke) { *kb++ = KISS_FEND; return (kb - (uint8_t *) (kissbuf)); } else { /* Didn't fit in... */ return 0; } } static int kissprocess(struct serialport *S) { int i; int cmdbyte = S->rdline[0]; int tncid = (cmdbyte >> 4) & 0x0F; /* -- * C0 00 * 82 A0 B4 9A 88 A4 60 * 9E 90 64 90 A0 9C 72 * 9E 90 64 A4 88 A6 E0 * A4 8C 9E 9C 98 B2 61 * 03 F0 * 21 36 30 32 39 2E 35 30 4E 2F 30 32 35 30 35 2E 34 33 45 3E 20 47 43 53 2D 38 30 31 20 * C0 * -- */ /* printf("kissprocess() cmdbyte=%02X len=%d ",cmdbyte,S->rdlinelen); */ /* Ok, cmdbyte tells us something, and we should ignore the frame if we don't know it... */ if ((cmdbyte & 0x0F) != 0) { /* There should NEVER be any other value in the CMD bits than 0 coming from TNC to host! */ /* printf(" ..bad CMD byte\n"); */ if (debug) { printf("%ld\tTTY %s: Bad CMD byte on KISS frame: ", tick.tv_sec, S->ttyname); hexdumpfp(stdout, S->rdline, S->rdlinelen, 1); printf("\n"); } rfloghex(S->ttyname, 'D', 1, S->rdline, S->rdlinelen); erlang_add(S->ttycallsign[tncid], ERLANG_DROP, S->rdlinelen, 1); /* Account one packet */ return -1; } if (S->linetype == LINETYPE_KISS && (cmdbyte & 0x20)) { // Huh? Perhaps a FLEXNET packet? int crcflex = calc_crc_flex(S->rdline, S->rdlinelen); if (crcflex == 0x7070) { if (debug) printf("ALERT: Looks like received KISS frame is a FLEXNET with CRC!\n"); S->linetype = LINETYPE_KISSFLEXNET; } } if (S->linetype == LINETYPE_KISS && (cmdbyte & 0x80)) { // Huh? Perhaps a SMACK packet? int smack_ok = check_crc_16(S->rdline, S->rdlinelen); if (smack_ok == 0) { if (debug) printf("ALERT: Looks like received KISS frame is a SMACK with CRC!\n"); S->linetype = LINETYPE_KISSSMACK; } } /* Are we expecting FLEXNET KISS ? */ if (S->linetype == LINETYPE_KISSFLEXNET && (cmdbyte & 0x20)) { int crc; tncid &= ~0x20; // FlexNet puts 0x20 as indication of CRC presence.. if (S->ttycallsign[tncid] == NULL) { /* D'OH! received packet on multiplexer tncid without callsign definition! We discard this packet! */ if (debug > 0) { printf("%ld\tTTY %s: Bad TNCID on CMD byte on a KISS frame: %02x No interface configured for it! ", tick.tv_sec, S->ttyname, cmdbyte); hexdumpfp(stdout, S->rdline, S->rdlinelen, 1); printf("\n"); } rfloghex(S->ttyname, 'D', 1, S->rdline, S->rdlinelen); erlang_add(S->ttycallsign[tncid], ERLANG_DROP, S->rdlinelen, 1); /* Account one packet */ return -1; } crc = calc_crc_flex(S->rdline, S->rdlinelen); if (crc != 0x7070) { aprxlog("Received FLEXNET frame with invalid CRC TTY=%s tncid=%d",S->ttyname,tncid); if (debug) { printf("%ld\tTTY %s tncid %d: Received FLEXNET frame with invalid CRC %04x: ", tick.tv_sec, S->ttyname, tncid, crc); hexdumpfp(stdout, S->rdline, S->rdlinelen, 1); printf("\n"); } rfloghex(S->ttyname, 'D', 1, S->rdline, S->rdlinelen); erlang_add(S->ttycallsign[tncid], ERLANG_DROP, S->rdlinelen, 1); // Account one packet return -1; // The CRC was invalid.. } S->rdlinelen -= 2; // remove 2 bytes! } /* Are we excepting BPQ "CRC" (XOR-sum of data) */ if (S->linetype == LINETYPE_KISSBPQCRC) { /* TODO: in what conditions the "CRC" is calculated and when not ? */ int xorsum = 0; if (S->ttycallsign[tncid] == NULL) { /* D'OH! received packet on multiplexer tncid without callsign definition! We discard this packet! */ if (debug > 0) { printf("%ld\tTTY %s: Bad TNCID on CMD byte on a KISS frame: %02x No interface configured for it! ", tick.tv_sec, S->ttyname, cmdbyte); hexdumpfp(stdout, S->rdline, S->rdlinelen, 1); printf("\n"); } rfloghex(S->ttyname, 'D', 1, S->rdline, S->rdlinelen); erlang_add(S->ttycallsign[tncid], ERLANG_DROP, S->rdlinelen, 1); /* Account one packet */ return -1; } for (i = 1; i < S->rdlinelen; ++i) xorsum ^= S->rdline[i]; xorsum &= 0xFF; if (xorsum != 0) { if (debug) { printf("%ld\tTTY %s tncid %d: Received bad BPQCRC: %02x: ", tick.tv_sec, S->ttyname, tncid, xorsum); hexdumpfp(stdout, S->rdline, S->rdlinelen, 1); printf("\n"); } rfloghex(S->ttyname, 'D', 1, S->rdline, S->rdlinelen); erlang_add(S->ttycallsign[tncid], ERLANG_DROP, S->rdlinelen, 1); /* Account one packet */ return -1; } S->rdlinelen -= 1; /* remove the sum-byte from tail */ if (debug > 2) printf("%ld\tTTY %s tncid %d: Received OK BPQCRC frame\n", tick.tv_sec, S->ttyname, tncid); } /* Are we expecting SMACK ? */ if (S->linetype == LINETYPE_KISSSMACK) { tncid &= 0x07; /* Chop off top bit */ if (S->ttycallsign[tncid] == NULL) { /* D'OH! received packet on multiplexer tncid without callsign definition! We discard this packet! */ if (debug > 0) { printf("%ld\tTTY %s: Bad TNCID on CMD byte on a KISS frame: %02x No interface configured for it! ", tick.tv_sec, S->ttyname, cmdbyte); hexdumpfp(stdout, S->rdline, S->rdlinelen, 1); printf("\n"); } rfloghex(S->ttyname, 'D', 1, S->rdline, S->rdlinelen); erlang_add(S->ttycallsign[tncid], ERLANG_DROP, S->rdlinelen, 1); /* Account one packet */ return -1; } if ((cmdbyte & 0x8F) == 0x80) { /* SMACK data frame */ if (debug > 3) printf("%ld\tTTY %s tncid %d: Received SMACK frame\n", tick.tv_sec, S->ttyname, tncid); if (!(S->smack_subids & (1 << tncid))) { aprxlog("Received SMACK frame TTY=%s tncid=%d",S->ttyname,tncid); if (debug) printf("%ld\t... marking received SMACK\n", tick.tv_sec); } S->smack_subids |= (1 << tncid); /* It is SMACK frame -- KISS with CRC16 at the tail. Now we ignore the TNC-id number field. Verify the CRC.. */ // Whole buffer including CMD-byte! if (check_crc_16(S->rdline, S->rdlinelen) != 0) { aprxlog("Received SMACK frame with invalid CTC TTY=%s tncid=%d",S->ttyname,tncid); if (debug) { printf("%ld\tTTY %s tncid %d: Received SMACK frame with invalid CRC: ", tick.tv_sec, S->ttyname, tncid); hexdumpfp(stdout, S->rdline, S->rdlinelen, 1); printf("\n"); } rfloghex(S->ttyname, 'D', 1, S->rdline, S->rdlinelen); erlang_add(S->ttycallsign[tncid], ERLANG_DROP, S->rdlinelen, 1); // Account one packet return -1; /* The CRC was invalid.. */ } S->rdlinelen -= 2; /* Chop off the two CRC bytes */ } else if ((cmdbyte & 0x8F) == 0x00) { /* * Expecting SMACK data, but got plain KISS data. * Send a flow-rate limited probes to TNC to enable * SMACK -- lets use 30 minutes window... */ S->smack_subids &= ~(1 << tncid); // Turn off the SMACK mode indication bit.. if (debug > 2) printf("%ld\tTTY %s tncid %d: Expected SMACK, got KISS.\n", tick.tv_sec, S->ttyname, tncid); if (timecmp(S->smack_probe[tncid], tick.tv_sec) < 0) { uint8_t probe[4]; uint8_t kissbuf[12]; int kisslen; probe[0] = cmdbyte | 0x80; /* Make it into SMACK */ probe[1] = 0; /* Convert the probe packet to KISS frame */ kisslen = kissencoder( kissbuf, sizeof(kissbuf), S->linetype, &(probe[1]), 1, probe[0] ); /* Send probe message.. */ if (S->wrlen + kisslen < sizeof(S->wrbuf)) { /* There is enough space in writebuf! */ memcpy(S->wrbuf + S->wrlen, kissbuf, kisslen); S->wrlen += kisslen; /* Flush it out.. and if not successfull, poll(2) will take care of it soon enough.. */ ttyreader_linewrite(S); S->smack_probe[tncid] = tick.tv_sec + 1800; /* 30 minutes */ aprxlog("Sent SMACK activation probe TTY=%s tncid=%d",S->ttyname,tncid); if (debug) printf("%ld\tTTY %s tncid %d: Sending SMACK activation probe packet\n", tick.tv_sec, S->ttyname, tncid); } /* Else no space to write ? Huh... */ } } else { // Else... there should be no other kind data frames if (debug) { printf("%ld\tTTY %s: Bad CMD byte on expected SMACK frame: %02x, len=%d: ", tick.tv_sec, S->ttyname, cmdbyte, S->rdlinelen); hexdumpfp(stdout, S->rdline, S->rdlinelen, 1); printf("\n"); } rfloghex(S->ttyname, 'D', 1, S->rdline, S->rdlinelen); erlang_add(S->ttycallsign[tncid], ERLANG_DROP, S->rdlinelen, 1); /* Account one packet */ return -1; } } /* Are we expecting Basic KISS ? */ if (S->linetype == LINETYPE_KISS) { if (S->ttycallsign[tncid] == NULL) { /* D'OH! received packet on multiplexer tncid without callsign definition! We discard this packet! */ if (debug > 0) { printf("%ld\tTTY %s: Bad TNCID on CMD byte on a KISS frame: %02x No interface configured for it! ", tick.tv_sec, S->ttyname, cmdbyte); hexdumpfp(stdout, S->rdline, S->rdlinelen, 1); printf("\n"); } rfloghex(S->ttyname, 'D', 1, S->rdline, S->rdlinelen); erlang_add(S->ttycallsign[tncid], ERLANG_DROP, S->rdlinelen, 1); /* Account one packet */ return -1; } } if (S->rdlinelen < 17) { /* 7+7+2 bytes of minimal AX.25 frame + 1 for KISS CMD byte */ /* Too short frame.. */ /* printf(" ..too short a frame for anything\n"); */ rfloghex(S->ttyname, 'D', 1, S->rdline, S->rdlinelen); erlang_add(S->ttycallsign[tncid], ERLANG_DROP, S->rdlinelen, 1); /* Account one packet */ return -1; } /* Valid AX.25 HDLC frame byte sequence is now at S->rdline[1..S->rdlinelen-1] */ /* Send the frame to APRS-IS, return 1 if valid AX.25 UI message, does not validate against valid APRS message rules... (TODO: it could do that too) */ // The AX25_TO_TNC2 does validate the AX.25 packet, // converts it to "TNC2 monitor format" and sends it to // Rx-IGate functionality. Returns non-zero only when // AX.25 header is OK, and packet is sane. erlang_add(S->ttycallsign[tncid], ERLANG_RX, S->rdlinelen, 1); /* Account one packet */ if (ax25_to_tnc2(S->interface[tncid], S->ttycallsign[tncid], tncid, cmdbyte, S->rdline + 1, S->rdlinelen - 1)) { // The packet is valid per AX.25 header bit rules. #ifdef PF_AX25 /* PF_AX25 exists -- highly likely a Linux system ! */ /* Send the frame without cmdbyte to internal AX.25 network */ if (S->netax25[tncid] != NULL) netax25_sendax25(S->netax25[tncid], S->rdline + 1, S->rdlinelen - 1); #endif } else { // The packet is not valid per AX.25 header bit rules rfloghex(S->ttyname, 'D', 1, S->rdline, S->rdlinelen); erlang_add(S->ttycallsign[tncid], ERLANG_DROP, S->rdlinelen, 1); /* Account one packet */ if (aprxlogfile) { // NOT replaced with aprxlog() -- because this is a bit more complicated.. FILE *fp = fopen(aprxlogfile, "a"); if (fp) { char timebuf[60]; printtime(timebuf, sizeof(timebuf)); setlinebuf(fp); fprintf(fp, "%s ax25_to_tnc2(%s,len=%d) rejected the message: ", timebuf, S->ttycallsign[tncid], S->rdlinelen-1); hexdumpfp(fp, S->rdline, S->rdlinelen, 1); fprintf(fp, "\n"); fclose(fp); } } } return 0; } /* * ttyreader_pullkiss() -- pull KISS (or KISS+CRC) frame, and call KISS processor */ int kiss_pullkiss(struct serialport *S) { /* printf("ttyreader_pullkiss() rdlen=%d rdcursor=%d, state=%d\n", S->rdlen, S->rdcursor, S->kissstate); fflush(stdout); */ /* At incoming call there is at least one byte in between S->rdcursor and S->rdlen */ /* Phases: kissstate == 0: hunt for KISS_FEND, discard everything before it. kissstate != 0: reading has globbed up preceding KISS_FENDs ("HDLC flags") and the cursor is in front of a frame */ /* There are TNCs that use "shared flags" - only one FEND in between data frames. */ if (S->kissstate == KISSSTATE_SYNCHUNT) { /* Hunt for KISS_FEND, discard everything until then! */ int c; for (;;) { c = ttyreader_getc(S); if (c < 0) return c; /* Out of buffer, stay in state, return latter when there is some refill */ if (c == KISS_FEND) /* Found the sync-byte ! change state! */ break; } S->kissstate = KISSSTATE_COLLECTING; } if (S->kissstate != KISSSTATE_SYNCHUNT) { /* Normal processing mode */ int c; for (;;) { c = ttyreader_getc(S); if (c < 0) return c; /* Out of input stream, exit now, come back latter.. */ /* printf(" %02X", c); if (c == KISS_FEND) { printf("\n");fflush(stdout); } */ if (c == KISS_FEND) { /* Found end-of-frame character -- or possibly beginning.. This never exists in datastream except as itself. */ if (S->rdlinelen > 0) { /* Non-zero sized frame Process it away ! */ kissprocess(S); S->kissstate = KISSSTATE_COLLECTING; S->rdlinelen = 0; } /* rdlinelen == 0 because we are receiving consequtive FENDs, or just processed our previous frame. Treat them the same: discard this byte. */ continue; } if (S->kissstate == KISSSTATE_KISSFESC) { /* We have some char, state switches to normal collecting */ S->kissstate = KISSSTATE_COLLECTING; if (c == KISS_TFEND) c = KISS_FEND; else if (c == KISS_TFESC) c = KISS_FESC; else continue; /* Accepted chars after KISS_FESC are only TFEND and TFESC. Others must be discarded. */ } else { /* Normal collection mode */ if (c == KISS_FESC) { S->kissstate = KISSSTATE_KISSFESC; continue; /* Back to top of the loop and continue.. */ } } if (S->rdlinelen >= (sizeof(S->rdline) - 3)) { /* Too long ! Way too long ! */ S->kissstate = KISSSTATE_SYNCHUNT; /* Sigh.. discard it. */ S->rdlinelen = 0; if (debug) { printf("%ld\tTTY %s: Too long frame to be KISS: ", tick.tv_sec, S->ttyname); hexdumpfp(stdout, S->rdline, S->rdlinelen, 1); printf("\n"); } continue; } /* Put it on record store: */ S->rdline[S->rdlinelen++] = c; } /* .. for(..) loop of data collecting */ } /* .. normal consumption mode ... */ return 0; } /* * kiss_kisswrite() -- write out buffered data */ void kiss_kisswrite(struct serialport *S, const int tncid, const uint8_t *ax25raw, const int ax25rawlen) { int i, len, ssid; uint8_t kissbuf[2300]; if (debug) { printf("kiss_kisswrite(->%s, axlen=%d)\n", S->ttycallsign[tncid], ax25rawlen); } if (S->fd < 0) { if (debug) printf("NOTE: Write to non-open serial port discarded."); return; } if ((S->linetype != LINETYPE_KISS) && (S->linetype != LINETYPE_KISSSMACK) && (S->linetype != LINETYPE_KISSFLEXNET) && (S->linetype != LINETYPE_KISSBPQCRC)) { if (debug) printf("WARNING: WRITING KISS FRAMES ON SERIAL/TCP LINE OF NO KISS TYPE IS UNSUPPORTED!\n"); return; } if ((S->wrlen == 0) || (S->wrlen > 0 && S->wrcursor >= S->wrlen)) { S->wrlen = S->wrcursor = 0; } else { /* There is some data in between wrcursor and wrlen */ len = S->wrlen - S->wrcursor; if (len > 0) { i = write(S->fd, S->wrbuf + S->wrcursor, len); } else i = 0; if (i > 0) { /* wrote something */ S->wrcursor += i; len = S->wrlen - S->wrcursor; if (len == 0) { S->wrcursor = S->wrlen = 0; /* wrote all ! */ } else { /* compact the buffer a bit */ memcpy(S->wrbuf, S->wrbuf + S->wrcursor, len); S->wrcursor = 0; S->wrlen = len; } } } ssid = (tncid << 4); switch (S->linetype) { case LINETYPE_KISSFLEXNET: len = kissencoder( kissbuf, sizeof(kissbuf), S->linetype, ax25raw, ax25rawlen, ssid |= 0x20 ); break; case LINETYPE_KISSSMACK: if (S->smack_subids & (1 << tncid)) //if SMACK currently active len = kissencoder( kissbuf, sizeof(kissbuf), S->linetype, ax25raw, ax25rawlen, ssid |= 0x80 ); else len = kissencoder( kissbuf, sizeof(kissbuf), LINETYPE_KISS, ax25raw, ax25rawlen, ssid ); break; default: len = kissencoder( kissbuf, sizeof(kissbuf), S->linetype, ax25raw, ax25rawlen, ssid ); break; } if (debug>2) { printf("ssid=%0x S->smack_subids=%0x\n",ssid,S->smack_subids); printf("kiss-encoded: "); hexdumpfp(stdout, kissbuf, len, 1); printf("\n"); } // Will the KISS encoded frame fit in the link buffer? if ((S->wrlen + len) < sizeof(S->wrbuf)) { memcpy(S->wrbuf + S->wrlen, kissbuf, len); S->wrlen += len; erlang_add(S->ttycallsign[tncid], ERLANG_TX, ax25rawlen, 1); if (debug) printf(" .. put %d bytes of KISS frame on IO buffer\n",len); } else { // No fit! if (debug) printf(" .. %d bytes of KISS frame did not fit on IO buffer\n",len); return; } // Try to write it immediately len = S->wrlen - S->wrcursor; if (len > 0) i = write(S->fd, S->wrbuf + S->wrcursor, len); else i = 0; if (i > 0) { /* wrote something */ S->wrcursor += i; len = S->wrlen - S->wrcursor; /* all done? */ if (len == 0) { S->wrcursor = S->wrlen = 0; /* wrote all ! */ } else { /* compact the buffer a bit */ memcpy(S->wrbuf, S->wrbuf + S->wrcursor, len); S->wrcursor = 0; S->wrlen = len; } } } void kiss_poll(struct serialport *S) { uint8_t probe[1]; uint8_t kissbuf[12]; int kisslen; int tncid; for (tncid = 0; tncid < 16; ++tncid) { if (S->interface[tncid] == NULL) { // No sub-interface here.. continue; } probe[0] = 0x0E | (tncid << 4); /* Convert the probe packet to KISS frame */ kisslen = kissencoder( kissbuf, sizeof(kissbuf), S->linetype, &(probe[0]), 0, probe[0] ); /* Send probe message.. */ if (S->wrlen + kisslen < sizeof(S->wrbuf)) { /* There is enough space in writebuf! */ memcpy(S->wrbuf + S->wrlen, kissbuf, kisslen); S->wrlen += kisslen; /* Flush it out.. and if not successfull, poll(2) will take care of it soon enough.. */ ttyreader_linewrite(S); if (debug) printf("%ld.%06d\tTTY %s tncid %d: Sending KISS POLL\n", (long)tick.tv_sec, (int)tick.tv_usec, S->ttyname, tncid); } } } aprx-2.9.0/logrotate.aprx.in000664 000000 000000 00000000233 13040775352 015761 0ustar00rootroot000000 000000 @VARLOG@/aprx-rf.log @VARLOG@/aprx.log @VARLOG@/dprs.log @VARLOG@/erlang.log { weekly rotate 4 compress missingok notifempty create 644 root adm } aprx-2.9.0/man-to-html.sh000664 000000 000000 00000006300 13040775352 015152 0ustar00rootroot000000 000000 #! /bin/sh ## man-page to HTML format converter, when existing ones ## were seriously unacceptable form... ## ## By Matti Aarnio, OH2MQK, , about 1995 unset LC_CTYPE LANG=en_US export LANG TERM=xterm export TERM COLUMNS=80 export COLUMNS LINES=9999 export LINES echo "" basename "$1" echo '
'
groff -t -man -Tascii -P-c "$1" | \
    perl -e '
        #select STDIN; $| = 1;
        select STDERR; $| = 1;
        #select STDOUT; $| = 1;
        $h = "\010";
        $c0 = undef;
        while(read(STDIN,$c,1) > 0) {

#printf STDERR "c0 = \"%s\"  c = \"%s\"\n",
#	      !defined $c0 ? "" : (ord($c0) < 32 ?
# 				          sprintf("\\%03o",ord($c0)): $c0),
#	      ord($c) < 32 ? sprintf("\\%03o",ord($c)) : $c;

          if (defined $c0) {
            if ($c eq $h) {
              # X ^H * -> bold/italic/something
              read(STDIN,$c1,1);

#printf STDERR " .. c1 = \"%s\"\n",
#	      ord($c1) < 32 ? sprintf("\\%03o",ord($c1)) : $c1;

              if ($c0 eq $c1) {
                # bold
	        if    ($c0 eq "&") { $c0 = "&"; }
		elsif ($c0 eq "<") { $c0 = "<";  }
		elsif ($c0 eq ">") { $c0 = ">";  }
                printf STDOUT "%s",$c0;
              } elsif ($c0 eq "_") {
                # italic
	        if    ($c1 eq "&") { $c1 = "&"; }
		elsif ($c1 eq "<") { $c1 = "<";  }
		elsif ($c1 eq ">") { $c1 = ">";  }
                printf STDOUT "%s",$c1;
              } elsif ($c0.$c1 eq "+o") {
                # Bullet
                printf STDOUT "";
              } else {
                # something -- overstrike ?
	        if    ($c1 eq "&") { $c1 = "&"; }
		elsif ($c1 eq "<") { $c1 = "<";  }
		elsif ($c1 eq ">") { $c1 = ">";  }
                printf STDOUT "%s",$c1;
              }
              $c0 = undef;
              if ($c1 eq "\n") { printf STDOUT "\n"; }
            } else {
              # Not  X ^H *, but X is defined.
              if    ($c0 eq "&") { $c0 = "&"; }
	      elsif ($c0 eq "<") { $c0 = "<";  }
	      elsif ($c0 eq ">") { $c0 = ">";  }
              printf STDOUT "%s",$c0;
              $c0 = $c;
            }
          } else {
            # $c0 not defined!
            $c0 = $c;
          }
        } # ... while()
        if ($c0) { printf STDOUT "%s",$c0; }' |  \
    perl -ne '
        s{(\s*)}{\1}og;
        s{(\s*)}{\1}og;
        s{(\s*)}{\1}og;
        s{_}{_}og;
	# Ordinary man-pages
        s{([-.0-9a-zA-Z_]+)\((\dzm)\)}{\1(\2)}og;

	# Ordinary PERL PODs
        s{([-.0-9a-zA-Z_]+::[-.0-9a-zA-Z_]+)\((\d\w+)\)}{\1(\2)}og;
	print;' | \
    perl -e '
	@labels=();
	while () {
	  if (m{^(.*)$}o) {
	    my $n = $1; $n =~ s/ /_/g;
	    printf "",$n;
	    push @labels, $n;
	  }
	  if (m{^   (.*)$}o) {
	    my $n = $1; $n =~ s/ /_/g;
	    printf "",$n;
	    push @labels, $n;
	  }
	  print;
	}
	printf "

\n

    %s\n",$n,$n; } printf "
\n"; ' echo "
" aprx-2.9.0/netax25.c000664 000000 000000 00000052030 13040775352 014114 0ustar00rootroot000000 000000 /* **************************************************************** * * * * APRX -- 2nd generation APRS iGate and digi with * * minimal requirement of esoteric facilities or * * libraries of any kind beyond UNIX system libc. * * * * (c) Matti Aarnio - OH2MQK, 2007-2014 * * * * NETAX25: Listen on (Linux) AX.25 socket and pick all AX.25 * * data packets ... actually don't pick those * * that are going outwards. All incoming ones do pick. * * * * **************************************************************** */ #include "aprx.h" #ifdef PF_AX25 /* PF_AX25 exists -- highly likely a Linux system ! */ #include #include #include #include #include #include /* * Link-level device access * * s = socket(PF_PACKET, SOCK_RAW, htons(ETH_P_AX25)); * */ /* struct sockaddr_ll { unsigned short int sll_family; unsigned short int sll_protocol; int sll_ifindex; unsigned short int sll_hatype; unsigned char sll_pkttype; unsigned char sll_halen; unsigned char sll_addr[8]; }; SOCK_RAW Sending uses sll_ifindex and sll_protocol */ struct netax25_dev { int ifindex; int16_t protocol; uint8_t ax25addr[7]; uint8_t rxok; //uint8_t txok; uint8_t scan; char devname[IFNAMSIZ]; char callsign[10]; const struct aprx_interface *interface; }; static struct netax25_dev **netax25_devs; static int netax25_devcount; /* * Talking to Linux kernel 2.6.x, using SMACK type frames * on each configured serial port callsign -> ptymux * writer channel. If system does not write correct SMACK * frame on that KISS port for any number of reasons, * including writing incompletely buffered data, then * kernel will be able to notice that frame it received * is not valid, and discards it. (Maybe... P = 2^-16 to * accepting of error frame in spite of these controls.) */ struct netax25_pty { int fd; int ifindex; const char *callsign; const struct aprx_interface *interface; struct sockaddr_ax25 ax25addr; }; static int rx_socket = -1; static int tx_socket = -1; static struct netax25_pty **ax25rxports; static int ax25rxportscount; static char **ax25ttyports; static int *ax25ttyfds; static int ax25ttyportscount; #if defined(HAVE_OPENPTY) #ifdef HAVE_PTY_H #include #endif static void netax25_addttyport(const char *callsign, const int masterfd, const int slavefd); static const void* netax25_openpty(const char *mycall) { int rc; int disc; struct termios tio; char devname[64]; uint8_t ax25call[64]; // overlarge for AX.25 - which needs only 7 bytes, but valgrind whines.. struct ifreq ifr; int fd = -1; struct netax25_pty *nax25 = NULL; int pty_master, pty_slave; if (!mycall) return NULL; /* No mycall, no ptys! */ memset(ax25call, 0, sizeof(ax25call)); // valgrind if (parse_ax25addr(ax25call, mycall, 0x60)) { // Not valid per AX.25 rules if (debug) printf(" netax25_openpty('%s') failed to parse the parameter string as valid AX.25 callsign. Not opening kernel pty.\n", mycall); return NULL; } memset(devname, 0, sizeof(devname)); // valgrind rc = openpty(&pty_master, &pty_slave, devname, NULL, NULL); if (debug) printf("openpty() rc=%d name='%s' master=%d slave=%d\n", rc, devname, pty_master, pty_slave); if (rc != 0 || pty_slave < 0) { error_exit:; if (pty_master >= 0) close(pty_master); pty_master = -1; if (pty_slave >= 0) close(pty_slave); pty_slave = -1; if (fd >= 0) close(fd); if (debug) printf("netax25_openpty() error exit.\n"); if (nax25 != NULL) free(nax25); return NULL; /* D'uh.. */ } nax25 = calloc( 1,sizeof(*nax25) ); nax25->fd = pty_master; nax25->ifindex = -1; nax25->callsign = mycall; nax25->ax25addr.sax25_family = PF_AX25; nax25->ax25addr.sax25_ndigis = 0; memcpy(&nax25->ax25addr.sax25_call, ax25call, 7); /* setup termios parameters for this line.. */ memset(&tio, 0, sizeof(tio)); // please valgrind aprx_cfmakeraw(&tio, 0); tio.c_cc[VMIN] = 1; /* pick at least one char .. */ tio.c_cc[VTIME] = 3; /* 0.3 seconds timeout - 36 chars @ 1200 baud */ tio.c_cflag |= (CREAD | CLOCAL); cfsetispeed(&tio, B38400); /* Pseudo-tty -- pseudo speed */ cfsetospeed(&tio, B38400); rc = tcsetattr(pty_slave, TCSANOW, &tio); if (rc < 0) goto error_exit; /* The pty_slave will get N_AX25 discipline attached on itself.. */ disc = N_AX25; rc = ioctl(pty_slave, TIOCSETD, &disc); if (rc < 0) goto error_exit; rc = ioctl(pty_slave, SIOCGIFNAME, devname); if (rc < 0) goto error_exit; /* Convert mycall[] to AX.25 format callsign */ rc = ioctl(pty_slave, SIOCSIFHWADDR, ax25call); if (rc < 0) goto error_exit; /* Now set encapsulation.. */ disc = 4; rc = ioctl(pty_slave, SIOCSIFENCAP, &disc); if (rc < 0) goto error_exit; /* Then final tricks to start the interface... */ fd = socket(AF_INET, SOCK_DGRAM, 0); if (fd < 0) goto error_exit; memset(&ifr, 0, sizeof(ifr)); // please valgrind strncpy(ifr.ifr_name, devname, sizeof(ifr.ifr_name)); ifr.ifr_name[sizeof(ifr.ifr_name)-1] = 0; ifr.ifr_mtu = 512; rc = ioctl(fd, SIOCSIFMTU, &ifr); if (rc < 0) goto error_exit; ifr.ifr_flags = IFF_UP | IFF_RUNNING | IFF_NOARP; rc = ioctl(fd, SIOCSIFFLAGS, &ifr); if (rc < 0) goto error_exit; close(fd); /* OK, we write and read on pty_master, the pty_slave is now attached on kernel side AX.25 interface with call: mycall */ netax25_addttyport( mycall, pty_master, pty_slave ); return (void*) nax25; } void netax25_sendax25(const void *nax25p, const void *ax25, int ax25len) { int rc, p; uint8_t ax25buf[2100]; const struct netax25_pty *nax25 = nax25p; /* kissencoder() takes AX.25 frame, and adds framing + cmd-byte */ rc = kissencoder(ax25buf, sizeof(ax25buf), LINETYPE_KISSSMACK, ax25, ax25len, 0x80); if (rc < 0) return; ax25len = rc; if (debug>2) { printf("netax25_sendax25() len=%d ",ax25len); hexdumpfp(stdout, ax25, ax25len, 1); printf("\n"); } /* Try to write it to the PTY */ p = 0; rc = write(nax25->fd, ax25buf + p, ax25len - p); if (rc < 0) rc = 0; // error hickup.. p += rc; rc = 0; if (p < ax25len) { // something left unwritten rc = write(nax25->fd, ax25buf + p, ax25len - p); if (rc < 0) rc = 0; // error hickup.. } p += rc; rc = 0; if (p < ax25len) { // something left unwritten rc = write(nax25->fd, ax25buf + p, ax25len - p); if (rc < 0) rc = 0; // error hickup.. } p += rc; rc = 0; // Now it either succeeded, or it failed. // in both cases we give up on this frame. if (p < ax25len) { if (aprxlogfile) { aprxlog("netax25_sendax25(%s,len=%d) wrote %d bytes\n", nax25->callsign, ax25len, p); } } } #else /* !HAVE_OPENPTY */ static const void* netax25_openpty(const char *mycall) { return NULL; } void netax25_sendax25(const void *nax25, const void *ax25, int ax25len) { } #endif /* HAVE_OPENPTY */ static int is_ax25ttyport(const char *callsign) { int i; for (i = 0; i < ax25ttyportscount; ++i) { if (strcmp(callsign,ax25ttyports[i]) == 0) return 1; // Have match } return 0; // No match } static int scan_linux_devices(void) { FILE *fp; struct ifreq ifr; char buffer[512], *s; int fd; struct netax25_dev ax25dev, *d; int i; // Mark all devices ready for scanning for (i = 0; i < netax25_devcount; ++i) netax25_devs[i]->scan = 0; fd = socket(PF_FILE, SOCK_DGRAM, 0); if (fd < 0) { // ... error if (debug)printf("Can not create socket(PF_FILE,SOCK_DGRAM,0); errno=%d\n", errno); return -1; } fp = fopen("/proc/net/dev", "r"); if (fp == NULL) { if (debug)printf("Can not open /proc/net/dev for reading; errno=%d\n", errno); close(fd); // ... error return -1; } // Two header lines s = fgets(buffer, sizeof(buffer), fp); s = fgets(buffer, sizeof(buffer), fp); // Then network interface names while (!feof(fp)) { if (!fgets(buffer, sizeof(buffer), fp)) break; // EOF s = strchr(buffer, ':'); if (s) *s = 0; s = buffer; while (*s == ' '||*s == '\t') ++s; memset(&ifr, 0, sizeof(ifr)); // please valgrind strncpy(ifr.ifr_name, s, IFNAMSIZ-1); ifr.ifr_name[IFNAMSIZ-1] = 0; // Is it active? if (ioctl(fd, SIOCGIFFLAGS, &ifr) < 0) { // error continue; } if (!(ifr.ifr_flags & IFF_UP)) continue; // not active, try next // Does it have AX.25 HW address ? if (ioctl(fd, SIOCGIFHWADDR, &ifr) < 0) { // Error continue; } if (ifr.ifr_hwaddr.sa_family != ARPHRD_AX25) continue; // Not AX.25 HW address, try next memset(&ax25dev, 0, sizeof(ax25dev)); memcpy(ax25dev.devname, ifr.ifr_name, IFNAMSIZ); memcpy(ax25dev.ax25addr, ifr.ifr_hwaddr.sa_data, 7); // AX.25 address ax25_to_tnc2_fmtaddress(ax25dev.callsign, ax25dev.ax25addr, 0); // in text if (ioctl(fd, SIOCGIFINDEX, &ifr) < 0) { // Error continue; } ax25dev.ifindex = ifr.ifr_ifindex; // Store/Update internal kernel interface index list d = NULL; for (i = 0; i < netax25_devcount; ++i) { d = netax25_devs[i]; if (d->ifindex == ax25dev.ifindex) { d->scan = 1; // The ifindex does not change during interface lifetime break; } d = NULL; } if (d == NULL) { // Not in known interfaces, add a new one.. d = malloc(sizeof(*d)); ++netax25_devcount; netax25_devs = realloc( netax25_devs, sizeof(void*) * netax25_devcount ); netax25_devs[netax25_devcount-1] = d; memcpy(d, &ax25dev, sizeof(*d)); d->scan = 1; d->rxok = !is_ax25ttyport(d->callsign); } } fclose(fp); close(fd); // Remove devices no longer known for (i = 0; i < netax25_devcount; ++i) { if (netax25_devs[i]->scan == 0) { int j; if (debug>1)printf("Compating netax25_devs[] i=%d callsign=%s\n", i, netax25_devs[i]->callsign); free(netax25_devs[i]); for (j = i+1; j < netax25_devcount; ++j) { netax25_devs[j-1] = netax25_devs[j]; } --netax25_devcount; } } // Link interfaces for (i = 0; i < netax25_devcount; ++i) { int j; struct netax25_dev *d = netax25_devs[i]; for (j = 0; j < ax25rxportscount; ++j) { if (strcmp(ax25rxports[j]->callsign,d->callsign) == 0) { d->interface = ax25rxports[j]->interface; ax25rxports[j]->ifindex = d->ifindex; } } } return 0; } /* config interface: ax25-rxport: callsign */ void *netax25_addrxport(const char *callsign, const struct aprx_interface *interface) { struct netax25_pty *nax25p = calloc(1, sizeof(*nax25p)); nax25p->fd = -1; nax25p->interface = interface; nax25p->ax25addr.sax25_family = PF_AX25; nax25p->ax25addr.sax25_ndigis = 0; if (interface == NULL) { // Old config style if (parse_ax25addr((uint8_t*)&nax25p->ax25addr.sax25_call, callsign, 0x60)) { // Not valid per AX.25 rules free(nax25p); return NULL; } nax25p->callsign = strdup(callsign); } else { // new config fule memcpy(&nax25p->ax25addr.sax25_call, interface->ax25call, sizeof(interface->ax25call)); nax25p->callsign = interface->callsign; } ax25rxports = realloc(ax25rxports, sizeof(struct netax25_pty*) * (ax25rxportscount + 1)); ax25rxports[ax25rxportscount++] = nax25p; return nax25p; } static void netax25_addttyport(const char *callsign, const int masterfd, const int slavefd) { ax25ttyports = realloc(ax25ttyports, sizeof(void *) * (ax25ttyportscount + 1)); ax25ttyfds = realloc(ax25ttyfds, sizeof(int) * (ax25ttyportscount + 1)); ax25ttyports[ax25ttyportscount] = strdup(callsign); ax25ttyfds [ax25ttyportscount] = masterfd; /* slavefd forgotten */ ++ax25ttyportscount; } /* Nothing much in early init */ void netax25_init(void) { } /* .. but all things in late start.. */ void netax25_start(void) { int i; int rx_protocol; rx_socket = -1; /* Initialize for early bail-out */ tx_socket = -1; if (!ax25rxports) return; /* No configured receiver ports. No receiver socket creation. */ rx_protocol = ETH_P_AX25; /* Choosing ETH_P_ALL would pick also outbound packets, but also all of the ethernet traffic.. ETH_P_AX25 picks only inbound-at-ax25-devices ..packets. */ rx_socket = socket(PF_PACKET, SOCK_RAW, htons(rx_protocol)); tx_socket = socket(PF_PACKET, SOCK_RAW, htons(ETH_P_AX25)); if (rx_socket < 0) { i = errno; /* D'uh.. could not open it, report and leave it at that. */ fprintf(stderr, "aprx: Could not open socket(PF_PACKET,SOCK_RAW,ETH_P_AX25) for listening. Errno=%d (%s)" " -- not a big deal unless you want to receive via AX.25 sockets.\n", i, strerror(i)); return; } if (tx_socket < 0) { i = errno; /* D'uh.. could not open it, report and leave it at that. */ fprintf(stderr, "aprx: Could not open socket(PF_PACKET,SOCK_RAW,ETH_P_AX25) for sending. Errno=%d (%s)" " -- not a big deal unless you want to send via AX.25 sockets.\n", i, strerror(i)); return; } if (rx_socket >= 0) fd_nonblockingmode(rx_socket); } /* .. but all things in late start.. */ const void* netax25_open(const char *ifcallsign) { return netax25_openpty(ifcallsign); } static struct timeval next_scantime; static void netax25_resettimer(void*arg) { struct timeval *tv = (struct timeval *)arg; tv_timeradd_seconds(tv, &tick, 60); scan_linux_devices(); } int netax25_prepoll(struct aprxpolls *app) { struct pollfd *pfd; int i; if (next_scantime.tv_sec == 0) next_scantime = tick; if (time_reset) { netax25_resettimer(&next_scantime); } if (rx_socket >= 0) { /* FD is open, lets mark it for poll read.. */ pfd = aprxpolls_new(app); pfd->fd = rx_socket; pfd->events = POLLIN | POLLPRI; pfd->revents = 0; } /* read from PTY masters */ for (i = 0; i < ax25ttyportscount; ++i) { if (ax25ttyfds[i] >= 0) { pfd = aprxpolls_new(app); pfd->fd = ax25ttyfds[i]; pfd->events = POLLIN | POLLPRI; pfd->revents = 0; } } return 1; } static int rxsock_read( const int fd ) { struct sockaddr_ll sll; socklen_t sllsize; int rcvlen, ifindex, i; struct netax25_dev *netdev; uint8_t rxbuf[3000]; sllsize = sizeof(sll); rcvlen = recvfrom(fd, rxbuf, sizeof(rxbuf), 0, (struct sockaddr*)&sll, &sllsize); if (rcvlen < 0) { return 0; /* No more at this time.. */ } /* struct sockaddr_ll { unsigned short int sll_family; = PF_PACKET unsigned short int sll_protocol; = 200 ? int sll_ifindex; = 4 unsigned short int sll_hatype; = 3 = SOCK_RAW ? unsigned char sll_pkttype; = 0 unsigned char sll_halen; = 0 unsigned char sll_addr[8]; = random }; netax25rx packet len=54 from rx_socket; family=17 protocol=200 ifindex=4 hatype=3 pkttype=0 halen=0 addr=84:f9:ca:bf:d7:04:f3:b7 Data: 00 82 a0 aa 64 6a 9c e0 9e 90 70 9a b0 94 60 ae 92 88 8a 64 40 61 03 f0 3d 36 33 35 33 2e ... Text: 00 82 a0 aa d j 9c e0 9e 90 p 9a b0 94 ` ae 92 88 8a d @ a 03 f0 = 6 3 5 3 . ... AX25: 00 A P U 2 5 N p O H 8 M X J 0 W I D E 2 0 01 x 1e 1b 19 1a 19 17 ... Leads with 00 byte, then AX.25 address.. */ if (sll.sll_family != PF_PACKET || sll.sll_protocol != htons(ETH_P_AX25) || sll.sll_hatype != SOCK_RAW || sll.sll_pkttype != 0 || sll.sll_halen != 0 || rxbuf[0] != 0 ) { return 1; // Not of our interest } ifindex = sll.sll_ifindex; if (debug>1) { printf("netax25rx packet len=%d from rx_socket; family=%d protocol=%x ifindex=%d hatype=%d pkttype=%d halen=%d\n", rcvlen, sll.sll_family, sll.sll_protocol, sll.sll_ifindex, sll.sll_hatype, sll.sll_pkttype, sll.sll_halen); /* printf(" addr=%02x:%02x:%02x:%02x:%02x:%02x:%02x:%02x\n", sll.sll_addr[0],sll.sll_addr[1],sll.sll_addr[2],sll.sll_addr[3], sll.sll_addr[4],sll.sll_addr[5],sll.sll_addr[6],sll.sll_addr[7]); int i; printf("Data: "); for (i = 0; i < rcvlen; ++i) printf(" %02x", rxbuf[i]); printf("\n"); printf("Text: "); for (i = 0; i < rcvlen; ++i) { uint8_t c = rxbuf[i]; if (32 <= c && c <= 126) printf(" %c", c); else printf(" %02x", c); } printf("\n"); printf("AX25: "); for (i = 0; i < rcvlen; ++i) { uint8_t c = rxbuf[i] >> 1; if (32 <= c && c <= 126) printf(" %c", c); else printf(" %02x", c); } printf("\n"); */ } netdev = NULL; for (i = 0; i < netax25_devcount; ++i) { if (netax25_devs[i]->ifindex == ifindex) { netdev = netax25_devs[i]; break; } } if (netdev == NULL) { // Not found from Ax.25 devices if (debug>1) printf(".. not from known AX.25 device\n"); return 1; } if (netdev->interface == NULL) { if (debug>1) printf(".. not from AX.25 device configured for receiving.\n"); return 1; } if (debug) printf("Received frame of %d bytes from %s: %s\n", rcvlen, netdev->devname, netdev->callsign); // if (is_ax25ttyport(netdev->callsign)) { if (!netdev->rxok) { if (debug > 1) { printf("%s is ttyport which we serve.\n",netdev->callsign); } return 1; // We drop our own packets, if we ever see them } /// Now: actual AX.25 frame reception, // and transmit via ax25_to_tnc2() ! /* * "+10" is a magic constant for trying * to estimate channel occupation overhead */ erlang_add(netdev->callsign, ERLANG_RX, rcvlen + 10, 1); // rxsock_read() // Send it to Rx-IGate, validates also AX.25 header bits, // and returns non-zero only when things are OK for processing. // Will internally also send to interface layer, if OK. if (ax25_to_tnc2(netdev->interface, netdev->callsign, 0, rxbuf[0], rxbuf + 1, rcvlen - 1)) { // The packet is valid per AX.25 header bit rules. // ax25_to_tnc2() did send the packet to rx-igate ; } else { // The packet is not valid per AX.25 header bit rules rfloghex(netdev->callsign, 'D', 1, rxbuf, rcvlen); erlang_add(netdev->callsign, ERLANG_DROP, rcvlen+10, 1); /* Account one packet */ if (aprxlogfile) { FILE *fp = fopen(aprxlogfile, "a"); if (fp) { char timebuf[60]; printtime(timebuf, sizeof(timebuf)); fprintf(fp, "%s ax25_to_tnc2(%s,len=%d) rejected the message: ", timebuf, netdev->callsign, rcvlen); hexdumpfp(fp, rxbuf, rcvlen, 1); fprintf(fp, "\n"); fclose(fp); } } } return 1; } static void discard_read_fd( const int fd ) { char buf[2000]; (void)read(fd, buf, sizeof(buf)); } int netax25_postpoll(struct aprxpolls *app) { int i, j; struct pollfd *pfd; // char ifaddress[10]; assert(app->polls != NULL); if (tv_timercmp(&tick, &next_scantime) > 0) { scan_linux_devices(); // Rescan every 60 seconds, on the dot. tv_timeradd_seconds(&next_scantime, &next_scantime, 60); } pfd = app->polls; if (rx_socket < 0) return 0; for (i = 0; i < app->pollcount; ++i, ++pfd) { if ((pfd->fd == rx_socket) && (pfd->revents & (POLLIN | POLLPRI))) { /* something coming in.. */ rxsock_read( rx_socket ); } for (j = 0; j < ax25ttyportscount; ++j) { if ((pfd->revents & (POLLIN | POLLPRI)) && (ax25ttyfds[j] == pfd->fd)) { discard_read_fd(ax25ttyfds[j]); } } } return 0; } void netax25_sendto(const void *nax25p, const uint8_t *axaddr, const int axaddrlen, const char *axdata, const int axdatalen) { const struct netax25_pty *nax25 = nax25p; struct sockaddr_ll sll; char c0[1]; struct iovec iovec[3]; struct msghdr mh; int i, len; if (tx_socket < 0) { if (debug>1) printf("netax25_sendto() tx_socket = -1, can not do..\n"); return; // D'uh.. } if (nax25->ifindex < 0) { if (debug>1) printf("netax25_sendto() ifindex < 0, can not do..\n"); return; // D'uh.. } if (debug>2) { printf("netax25_sendto() len=%d,%d ",axaddrlen,axdatalen); hexdumpfp(stdout, axaddr, axaddrlen, 1); printf(" // "); hexdumpfp(stdout, (uint8_t*)axdata, axdatalen, 0); printf("\n"); } memset(&sll, 0, sizeof(sll)); sll.sll_family = PF_PACKET; sll.sll_ifindex = nax25->ifindex; sll.sll_protocol = htons(ETH_P_AX25); sll.sll_hatype = SOCK_RAW; c0[0] = 0; iovec[0].iov_base = c0; iovec[0].iov_len = 1; iovec[1].iov_base = (void*)axaddr; // silence the compiler iovec[1].iov_len = axaddrlen; iovec[2].iov_base = (void*)axdata; // silence the compiler iovec[2].iov_len = axdatalen; len = 1+axaddrlen+axdatalen; // for debugging memset(&mh, 0, sizeof(mh)); mh.msg_name = &sll; mh.msg_namelen = sizeof(sll); mh.msg_iov = iovec; mh.msg_iovlen = 3; errno = 0; i = sendmsg(tx_socket, &mh, 0); if (debug>1)printf("netax25_sendto() the sendmsg len=%d rc=%d errno=%d\n", len, i, errno); erlang_add(nax25->callsign, ERLANG_TX, axaddrlen+axdatalen + 10, 1); // netax25_sendto() } #endif aprx-2.9.0/netresolver.c000664 000000 000000 00000010205 13040775352 015174 0ustar00rootroot000000 000000 /* **************************************************************** * * * * APRX -- 2nd generation APRS iGate and digi with * * minimal requirement of esoteric facilities or * * libraries of any kind beyond UNIX system libc. * * * * (c) Matti Aarnio - OH2MQK, 2007-2014 * * * * **************************************************************** */ #include "aprx.h" #if defined(HAVE_PTHREAD_CREATE) && defined(ENABLE_PTHREAD) #include #include pthread_t netresolv_thread; pthread_attr_t pthr_attrs; #endif static int nrcount; static struct netresolver **nr; static int RE_RESOLVE_INTERVAL = 300; // 15 minutes ? struct netresolver *netresolv_add(const char *hostname, const char *port) { struct netresolver *n = malloc(sizeof(*n)); memset(n, 0, sizeof(*n)); n->hostname = hostname; n->port = port; n->ai.ai_addr = &n->sa; ++nrcount; nr = realloc(nr, sizeof(void*)*nrcount); nr[nrcount-1] = n; return n; } static void resolve_all(void) { int i; if (debug>1) printf("netresolve nrcount=%d\n", nrcount); for (i = 0; i < nrcount; ++i) { struct netresolver *n = nr[i]; struct addrinfo *ai, req; int rc; timetick(); if (timecmp(n->re_resolve_time, tick.tv_sec) > 0) { // Not yet to re-resolve this one if (debug>1) printf("nr[%d] re_resolve_time in future (%d secs)\n", i, (int)(n->re_resolve_time - tick.tv_sec)); continue; } memset(&req, 0, sizeof(req)); req.ai_socktype = SOCK_STREAM; req.ai_protocol = IPPROTO_TCP; req.ai_flags = 0; #if 1 req.ai_family = AF_UNSPEC; /* IPv4 and IPv6 are both OK */ #else req.ai_family = AF_INET; /* IPv4 only */ #endif ai = NULL; rc = getaddrinfo(n->hostname, n->port, &req, &ai); if (rc != 0) { // re-resolving failed, discard possible junk result if (debug>1) printf("nr[%d] resolving of %s:%s failed, error: %s\n", i, n->hostname, n->port, gai_strerror(errno)); if (ai != NULL) freeaddrinfo(ai); continue; } if (debug>1) printf("nr[%d] resolving of %s:%s success!\n", i, n->hostname, n->port); timetick(); // Make local static copy of first result memcpy(&n->sa, ai->ai_addr, ai->ai_addrlen); n->ai.ai_flags = ai->ai_flags; n->ai.ai_family = ai->ai_family; n->ai.ai_socktype = ai->ai_socktype; n->ai.ai_protocol = ai->ai_protocol; n->ai.ai_addrlen = ai->ai_addrlen; n->ai.ai_addrlen = ai->ai_addrlen; freeaddrinfo(ai); n->re_resolve_time = tick.tv_sec + RE_RESOLVE_INTERVAL; } } #if defined(HAVE_PTHREAD_CREATE) && defined(ENABLE_PTHREAD) static void netresolv_runthread(void) { sigset_t sigs_to_block; sigemptyset(&sigs_to_block); sigaddset(&sigs_to_block, SIGALRM); sigaddset(&sigs_to_block, SIGINT); sigaddset(&sigs_to_block, SIGTERM); sigaddset(&sigs_to_block, SIGQUIT); sigaddset(&sigs_to_block, SIGHUP); sigaddset(&sigs_to_block, SIGURG); sigaddset(&sigs_to_block, SIGPIPE); sigaddset(&sigs_to_block, SIGUSR1); pthread_sigmask(SIG_BLOCK, &sigs_to_block, NULL); // the main program can cancel us at will pthread_setcancelstate(PTHREAD_CANCEL_ENABLE, NULL); while (!die_now) { poll(NULL, 0, 30000); // Sleep 30 seconds (in a reliable way) resolve_all(); } } #endif // Start netresolver thread, but at first run one round of resolving! void netresolv_start(void) { resolve_all(); #if defined(HAVE_PTHREAD_CREATE) && defined(ENABLE_PTHREAD) pthread_attr_init(&pthr_attrs); /* 64 kB stack is enough for this thread (I hope!) default of 2 MB is way too much...*/ pthread_attr_setstacksize(&pthr_attrs, 64*1024); pthread_create(&netresolv_thread, &pthr_attrs, (void*)netresolv_runthread, NULL); #endif } // Shutdown the netresolver thread void netresolv_stop(void) { die_now = 1; #if defined(HAVE_PTHREAD_CREATE) && defined(ENABLE_PTHREAD) pthread_cancel(netresolv_thread); pthread_join(netresolv_thread, NULL); #endif } aprx-2.9.0/parse_aprs.c000664 000000 000000 00000113730 13040775352 014772 0ustar00rootroot000000 000000 /******************************************************************** * APRX -- 2nd generation APRS-i-gate with * * minimal requirement of esoteric facilities or * * libraries of any kind beyond UNIX system libc. * * * * (c) Matti Aarnio - OH2MQK, 2007-2014 * * * ********************************************************************/ /* * Some parts of this code are copied from: * * aprsc * * (c) Heikki Hannikainen, OH7LZB * * This program is licensed under the BSD license, which can be found * in the file LICENSE. * */ /* * A simple APRS parser from aprsc. Translated from Ham::APRS::FAP * perl module (by OH2KKU). * * Only needs to get lat/lng out of the packet, other features would * be unnecessary in this application, and slow down the parser. * ... but lets still classify the packet, output filter needs that. * */ #include "aprx.h" #include #define DEBUG_LOG(...) if(debug)printf(__VA_ARGS__) /* * Check if the given character is a valid symbol table identifier * or an overlay character. The set is different for compressed * and uncompressed packets - the former has the overlaid number (0-9) * replaced with n-j. */ static int valid_sym_table_compressed(char c) { return (c == '/' || c == '\\' || (c >= 0x41 && c <= 0x5A) || (c >= 0x61 && c <= 0x6A)); /* [\/\\A-Za-j] */ } static int valid_sym_table_uncompressed(char c) { return (c == '/' || c == '\\' || (c >= 0x41 && c <= 0x5A) || (c >= 0x30 && c <= 0x39)); /* [\/\\A-Z0-9] */ } /* * Fill the pbuf_t structure with a parsed position and * symbol table & code. Also does range checking for lat/lng * and pre-calculates cosf(lat) for range filters. */ static int pbuf_fill_pos(struct pbuf_t *pb, const float lat, const float lng, const char sym_table, const char sym_code) { int bad = 0; /* symbol table and code */ pb->symbol[0] = sym_table; pb->symbol[1] = sym_code; pb->symbol[2] = 0; /* Is it perhaps a weather report ? */ if (sym_code == '_' && (sym_table == '/' || sym_table == '\\')) pb->packettype |= T_WX; if (sym_code == '@' && (sym_table == '/' || sym_table == '\\')) pb->packettype |= T_WX; /* Hurricane */ bad |= (lat < -89.9 && -0.0001 <= lng && lng <= 0.0001); bad |= (lat > 89.9 && -0.0001 <= lng && lng <= 0.0001); if (-0.0001 <= lat && lat <= 0.0001) { bad |= ( -0.0001 <= lng && lng <= 0.0001); bad |= ( -90.01 <= lng && lng <= -89.99); bad |= ( 89.99 <= lng && lng <= 90.01); } if (bad || lat < -90.0 || lat > 90.0 || lng < -180.0 || lng > 180.0) { if (debug) printf("\tposition out of range: lat %.3f lng %.3f", lat, lng); return 0; /* out of range */ } if (debug) printf("\tposition ok: lat %.3f lng %.3f", lat, lng); /* Pre-calculations for A/R/F/M-filter tests */ pb->lat = filter_lat2rad(lat); /* deg-to-radians */ pb->cos_lat = cosf(pb->lat); /* used in range filters */ pb->lng = filter_lon2rad(lng); /* deg-to-radians */ pb->flags |= F_HASPOS; /* the packet has positional data */ return 1; } /* * Parse symbol from destination callsign */ static int get_symbol_from_dstcall_twochar(const char c1, const char c2, char *sym_table, char *sym_code) { //hlog(LOG_DEBUG, "\ttwochar %c %c", c1, c2); if (c1 == 'B') { if (c2 >= 'B' && c2 <= 'P') { *sym_table = '/'; *sym_code = c2 - 'B' + '!'; return 1; } return 0; } if (c1 == 'P') { if (c2 >= '0' && c2 <= '9') { *sym_table = '/'; *sym_code = c2; return 1; } if (c2 >= 'A' && c2 <= 'Z') { *sym_table = '/'; *sym_code = c2; return 1; } return 0; } if (c1 == 'M') { if (c2 >= 'R' && c2 <= 'X') { *sym_table = '/'; *sym_code = c2 - 'R' + ':'; return 1; } return 0; } if (c1 == 'H') { if (c2 >= 'S' && c2 <= 'X') { *sym_table = '/'; *sym_code = c2 - 'S' + '['; return 1; } return 0; } if (c1 == 'L') { if (c2 >= 'A' && c2 <= 'Z') { *sym_table = '/'; *sym_code = c2 - 'A' + 'a'; return 1; } return 0; } if (c1 == 'J') { if (c2 >= '1' && c2 <= '4') { *sym_table = '/'; *sym_code = c2 - '1' + '{'; return 1; } return 0; } if (c1 == 'O') { if (c2 >= 'B' && c2 <= 'P') { *sym_table = '\\'; *sym_code = c2 - 'B' + '!'; return 1; } return 0; } if (c1 == 'A') { if (c2 >= '0' && c2 <= '9') { *sym_table = '\\'; *sym_code = c2; return 1; } if (c2 >= 'A' && c2 <= 'Z') { *sym_table = '\\'; *sym_code = c2; return 1; } return 0; } if (c1 == 'N') { if (c2 >= 'R' && c2 <= 'X') { *sym_table = '\\'; *sym_code = c2 - 'R' + ':'; return 1; } return 0; } if (c1 == 'D') { if (c2 >= 'S' && c2 <= 'X') { *sym_table = '\\'; *sym_code = c2 - 'S' + '['; return 1; } return 0; } if (c1 == 'S') { if (c2 >= 'A' && c2 <= 'Z') { *sym_table = '\\'; *sym_code = c2 - 'A' + 'a'; return 1; } return 0; } if (c1 == 'Q') { if (c2 >= '1' && c2 <= '4') { *sym_table = '\\'; *sym_code = c2 - '1' + '{'; return 1; } return 0; } return 0; } static int get_symbol_from_dstcall(struct pbuf_t *pb, char *sym_table, char *sym_code) { const char *d_start; char type; char overlay; int sublength; int numberid; /* check that the destination call exists and is of the right size for symbol */ d_start = pb->srccall_end+1; if (pb->dstcall_end_or_ssid - d_start < 5) return 0; /* too short */ /* length of the parsed string */ sublength = pb->dstcall_end_or_ssid - d_start - 3; if (sublength > 3) sublength = 3; #ifdef DEBUG_PARSE_APRS if (debug) printf("\tget_symbol_from_dstcall: %.*s (%d)", (int)(pb->dstcall_end_or_ssid - d_start), d_start, sublength); #endif if (strncmp(d_start, "GPS", 3) != 0 && strncmp(d_start, "SPC", 3) != 0 && strncmp(d_start, "SYM", 3) != 0) return 0; // hlog(LOG_DEBUG, "\ttesting %c %c %c", d_start[3], d_start[4], d_start[5]); if (!isalnum(d_start[3]) || !isalnum(d_start[4])) return 0; if (sublength == 3 && !isalnum(d_start[5])) return 0; type = d_start[3]; if (sublength == 3) { if (type == 'C' || type == 'E') { if (!isdigit(d_start[4])) return 0; if (!isdigit(d_start[5])) return 0; numberid = (d_start[4] - 48) * 10 + (d_start[5] - 48); *sym_code = numberid + 32; if (type == 'C') *sym_table = '/'; else *sym_table = '\\'; #ifdef DEBUG_PARSE_APRS if (debug) printf("\tnumeric symbol id in dstcall: %.*s: table %c code %c", (int)(pb->dstcall_end_or_ssid - d_start - 3), d_start + 3, *sym_table, *sym_code); #endif return 1; } else { /* secondary symbol table, with overlay * Check first that we really are in the secondary symbol table */ overlay = d_start[5]; if ((type == 'O' || type == 'A' || type == 'N' || type == 'D' || type == 'S' || type == 'Q') && isalnum(overlay)) { return get_symbol_from_dstcall_twochar(d_start[3], d_start[4], sym_table, sym_code); } return 0; } } else { // primary or secondary table, no overlay return get_symbol_from_dstcall_twochar(d_start[3], d_start[4], sym_table, sym_code); } return 0; } /* * Parse NMEA position packets. */ static int parse_aprs_nmea(struct pbuf_t *pb, const char *body, const char *body_end) { float lat, lng; const char *latp, *lngp; int i, la, lo; char lac, loc; char sym_table, sym_code; if (memcmp(body,"ULT",3) == 0) { /* Ah.. "$ULT..." - that is, Ultimeter 2000 weather instrument */ pb->packettype |= T_WX; return 1; } lat = lng = 0.0; latp = lngp = NULL; /* NMEA sentences to understand: $GPGGA Global Positioning System Fix Data $GPGLL Geographic Position, Latitude/Longitude Data $GPRMC Remommended Minimum Specific GPS/Transit Data $GPWPT Way Point Location ?? (bug in APRS specs ?) $GPWPL Waypoint Load (not in APRS specs, but in NMEA specs) $PNTS Seen on APRS-IS, private sentense based on NMEA.. $xxTLL Not seen on radio network, usually $RATLL - Target positions reported by RAdar. */ if (memcmp(body, "GPGGA,", 6) == 0) { /* GPGGA,175059,3347.4969,N,11805.7319,W,2,12,1.0,6.8,M,-32.1,M,,*7D // v=1, looks fine // GPGGA,000000,5132.038,N,11310.221,W,1,09,0.8,940.0,M,-17.7,, // v=1, timestamp odd, coords look fine // GPGGA,,,,,,0,00,,,,,,,*66 // v=0, invalid // GPGGA,121230,4518.7931,N,07322.3202,W,2,08,1.0,40.0,M,-32.4,M,,*46 // v=2, looks valid ? // GPGGA,193115.00,3302.50182,N,11651.22581,W,1,08,01.6,00465.90,M,-32.891,M,,*5F // $GPGGA,hhmmss.dd,xxmm.dddd,,yyymm.dddd,,v, // ss,d.d,h.h,M,g.g,M,a.a,xxxx*hh */ latp = body+6; // over the keyword while (latp < body_end && *latp != ',') latp++; // scan over the timestamp if (*latp == ',') latp++; // .. and into latitude. lngp = latp; while (lngp < body_end && *lngp != ',') lngp++; if (*lngp == ',') lngp++; if (*lngp != ',') lngp++; if (*lngp == ',') lngp++; /* latp, and lngp point to start of latitude and longitude substrings // respectively. */ } else if (memcmp(body, "GPGLL,", 6) == 0) { /* $GPGLL,xxmm.dddd,,yyymm.dddd,,hhmmss.dd,S,M*hh */ latp = body+6; // over the keyword lngp = latp; while (lngp < body_end && *lngp != ',') // over latitude lngp++; if (*lngp == ',') lngp++; // and lat designator if (*lngp != ',') lngp++; // and lat designator if (*lngp == ',') lngp++; /* latp, and lngp point to start of latitude and longitude substrings // respectively */ } else if (memcmp(body, "GPRMC,", 6) == 0) { /* $GPRMC,hhmmss.dd,S,xxmm.dddd,,yyymm.dddd,,s.s,h.h,ddmmyy,d.d, ,M*hh // ,S, = Status: 'A' = Valid, 'V' = Invalid // // GPRMC,175050,A,4117.8935,N,10535.0871,W,0.0,324.3,100208,10.0,E,A*3B // GPRMC,000000,V,0000.0000,0,00000.0000,0,000,000,000000,,*01/It wasn't me :) // invalid.. // GPRMC,000043,V,4411.7761,N,07927.0448,W,0.000,0.0,290697,10.7,W*57 // GPRMC,003803,A,3347.1727,N,11812.7184,W,000.0,000.0,140208,013.7,E*67 // GPRMC,050058,A,4609.1143,N,12258.8184,W,0.000,0.0,100208,18.0,E*5B */ latp = body+6; // over the keyword while (latp < body_end && *latp != ',') latp++; // scan over the timestamp if (*latp == ',') latp++; // .. and into VALIDITY if (*latp != 'A' && *latp != 'V') return 0; // INVALID ! if (*latp != ',') latp++; if (*latp == ',') latp++; /* now it points to latitude substring */ lngp = latp; while (lngp < body_end && *lngp != ',') lngp++; if (*lngp == ',') lngp++; if (*lngp != ',') lngp++; if (*lngp == ',') lngp++; /* latp, and lngp point to start of latitude and longitude substrings // respectively. */ } else if (memcmp(body, "GPWPL,", 6) == 0) { /* $GPWPL,4610.586,N,00607.754,E,4*70 // $GPWPL,4610.452,N,00607.759,E,5*74 */ latp = body+6; } else if (memcmp(body, "PNTS,1,", 7) == 0) { /* PNTS version 1 */ /* $PNTS,1,0,11,01,2002,231932,3539.687,N,13944.480,E,0,000,5,Roppongi UID RELAY,000,1*35 // $PNTS,1,0,14,01,2007,131449,3535.182,N,13941.200,E,0,0.0,6,Oota-Ku KissUIDigi,000,1*1D // $PNTS,1,0,17,02,2008,120824,3117.165,N,13036.481,E,49,059,1,Kagoshima,000,1*71 // $PNTS,1,0,17,02,2008,120948,3504.283,N,13657.933,E,00,000.0,6,,000,1*36 // // From Alinco EJ-41U Terminal Node Controller manual: // // 5-4-7 $PNTS // This is a private-sentence based on NMEA-0183. The data contains date, // time, latitude, longitude, moving speed, direction, altitude plus a short // message, group codes, and icon numbers. The EJ-41U does not analyze this // format but can re-structure it. // The data contains the following information: // l $PNTS Starts the $PNTS sentence // l version // l the registered information. [0]=normal geographical location data. // This is the only data EJ-41U can re-structure. [s]=Initial position // for the course setting [E]=ending position for the course setting // [1]=the course data between initial and ending [P]=the check point // registration [A]=check data when the automatic position transmission // is set OFF [R]=check data when the course data or check point data is // received. // l dd,mm,yyyy,hhmmss: Date and time indication. // l Latitude in DMD followed by N or S // l Longitude in DMD followed by E or W // l Direction: Shown with the number 360 degrees divided by 64. // 00 stands for true north, 16 for east. Speed in Km/h // l One of 15 characters [0] to [9], [A] to [E]. // NTSMRK command determines this character when EJ-41U is used. // l A short message up to 20 bites. Use NTSMSG command to determine this message. // l A group code: 3 letters with a combination of [0] to [9], [A] to [Z]. // Use NTSGRP command to determine. // l Status: [1] for usable information, [0] for non-usable information. // l *hh the check-sum and end of PNTS sentence. */ if (body+55 > body_end) { DEBUG_LOG("body too short"); return 0; /* Too short.. */ } latp = body+7; /* Over the keyword */ /* Accept any registered information code */ if (*latp++ == ',') return 0; if (*latp++ != ',') return 0; /* Scan over date+time info */ while (*latp != ',' && latp <= body_end) ++latp; if (*latp == ',') ++latp; while (*latp != ',' && latp <= body_end) ++latp; if (*latp == ',') ++latp; while (*latp != ',' && latp <= body_end) ++latp; if (*latp == ',') ++latp; while (*latp != ',' && latp <= body_end) ++latp; if (*latp == ',') ++latp; /* now it points to latitude substring */ lngp = latp; while (lngp < body_end && *lngp != ',') lngp++; if (*lngp == ',') lngp++; if (*lngp != ',') lngp++; if (*lngp == ',') lngp++; /* latp, and lngp point to start of latitude and longitude substrings // respectively. */ #if 1 } else if (memcmp(body, "GPGSA,", 6) == 0 || memcmp(body, "GPVTG,", 6) == 0 || memcmp(body, "GPGSV,", 6) == 0) { /* Recognized but ignored */ return 1; #endif } if (!latp || !lngp) { if (debug) fprintf(stderr, "Unknown NMEA: '%.11s' %.*s", pb->data, (int)(body_end - body), body); return 0; /* Well.. Not NMEA frame */ } // hlog(LOG_DEBUG, "NMEA parsing: %.*s", (int)(body_end - body), body); // hlog(LOG_DEBUG, " lat=%.10s lng=%.10s", latp, lngp); i = sscanf(latp, "%2d%f,%c,", &la, &lat, &lac); if (i != 3) return 0; // parse failure i = sscanf(lngp, "%3d%f,%c,", &lo, &lng, &loc); if (i != 3) return 0; // parse failure if (lac != 'N' && lac != 'S' && lac != 'n' && lac != 's') return 0; // bad indicator value if (loc != 'E' && loc != 'W' && loc != 'e' && loc != 'w') return 0; // bad indicator value // hlog(LOG_DEBUG, " lat: %c %2d %7.4f lng: %c %2d %7.4f", // lac, la, lat, loc, lo, lng); lat = (float)la + lat/60.0; lng = (float)lo + lng/60.0; if (lac == 'S' || lac == 's') lat = -lat; if (loc == 'W' || loc == 'w') lng = -lng; pb->packettype |= T_POSITION; // Parse symbol from destination callsign get_symbol_from_dstcall(pb, &sym_table, &sym_code); #ifdef DEBUG_PARSE_APRS if (debug) { printf("\tget_symbol_from_dstcall: %.*s => %c%c", (int)(pb->dstcall_end_or_ssid - pb->srccall_end-1), pb->srccall_end+1, sym_table, sym_code); } #endif return pbuf_fill_pos(pb, lat, lng, sym_table, sym_code); } static int parse_aprs_telem(struct pbuf_t *pb, const char *body, const char *body_end) { // float lat = 0.0, lng = 0.0; DEBUG_LOG("parse_aprs_telem"); //pbuf_fill_pos(pb, lat, lng, 0, 0); return 1; // okay } /* * Parse a MIC-E position packet * * APRS PROTOCOL REFERENCE 1.0.1 Chapter 10, page 42 (52 in PDF) * */ static int parse_aprs_mice(struct pbuf_t *pb, const unsigned char *body, const unsigned char *body_end) { float lat = 0.0, lng = 0.0; unsigned int lat_deg = 0, lat_min = 0, lat_min_frag = 0, lng_deg = 0, lng_min = 0, lng_min_frag = 0; const char *d_start; char dstcall[7]; char *p; char sym_table, sym_code; int posambiguity = 0; int i; DEBUG_LOG("parse_aprs_mice: %.*s", pb->packet_len-2, pb->data); /* check packet length */ if (body_end - body < 8) return 0; /* check that the destination call exists and is of the right size for mic-e */ d_start = pb->srccall_end+1; if (pb->dstcall_end_or_ssid - d_start != 6) { DEBUG_LOG(".. bad destcall length! "); return 0; /* eh...? */ } /* validate destination call: * A-K characters are not used in the last 3 characters * and MNO are never used */ if (debug)printf(" destcall='%6.6s'",d_start); for (i = 0; i < 3; i++) if (!((d_start[i] >= '0' && d_start[i] <= '9') || (d_start[i] >= 'A' && d_start[i] <= 'L') || (d_start[i] >= 'P' && d_start[i] <= 'Z'))) { DEBUG_LOG(".. bad destcall characters in posits 1..3"); return 0; } for (i = 3; i < 6; i++) if (!((d_start[i] >= '0' && d_start[i] <= '9') || (d_start[i] == 'L') || (d_start[i] >= 'P' && d_start[i] <= 'Z'))) { DEBUG_LOG(".. bad destcall characters in posits 4..6"); return 0; } DEBUG_LOG("\tpassed dstcall format check"); /* validate information field (longitude, course, speed and * symbol table and code are checked). Not bullet proof.. * * 0 1 23 4 5 6 7 * /^[\x26-\x7f][\x26-\x61][\x1c-\x7f]{2}[\x1c-\x7d][\x1c-\x7f][\x21-\x7b\x7d][\/\\A-Z0-9]/ */ if (body[0] < 0x26 || body[0] > 0x7f) { DEBUG_LOG("..bad infofield column 1"); return 0; } if (body[1] < 0x26 || body[1] > 0x61) { DEBUG_LOG("..bad infofield column 2"); return 0; } if (body[2] < 0x1c || body[2] > 0x7f) { DEBUG_LOG("..bad infofield column 3"); return 0; } if (body[3] < 0x1c || body[3] > 0x7f) { DEBUG_LOG("..bad infofield column 4"); return 0; } if (body[4] < 0x1c || body[4] > 0x7d) { DEBUG_LOG("..bad infofield column 5"); return 0; } if (body[5] < 0x1c || body[5] > 0x7f) { DEBUG_LOG("..bad infofield column 6"); return 0; } if ((body[6] < 0x21 || body[6] > 0x7b) && body[6] != 0x7d) { DEBUG_LOG("..bad infofield column 7"); return 0; } if (!valid_sym_table_uncompressed(body[7])) { DEBUG_LOG("..bad symbol table entry on column 8"); return 0; } DEBUG_LOG("\tpassed info format check"); /* make a local copy, we're going to modify it */ strncpy(dstcall, d_start, 6); dstcall[6] = 0; /* First do the destination callsign * (latitude, message bits, N/S and W/E indicators and long. offset) * * Translate the characters to get the latitude */ //fprintf(stderr, "\tuntranslated dstcall: %s\n", dstcall); for (p = dstcall; *p; p++) { if (*p >= 'A' && *p <= 'J') *p -= 'A' - '0'; else if (*p >= 'P' && *p <= 'Y') *p -= 'P' - '0'; else if (*p == 'K' || *p == 'L' || *p == 'Z') *p = '_'; } //fprintf(stderr, "\ttranslated dstcall: %s\n", dstcall); // position ambiquity is going to get ignored now, // it's not needed in this application. if (dstcall[5] == '_') { dstcall[5] = '5'; posambiguity = 1; } if (dstcall[4] == '_') { dstcall[4] = '5'; posambiguity = 2; } if (dstcall[3] == '_') { dstcall[3] = '5'; posambiguity = 3; } if (dstcall[2] == '_') { dstcall[2] = '3'; posambiguity = 4; } if (dstcall[1] == '_' || dstcall[0] == '_') { DEBUG_LOG("..bad pos-ambiguity on destcall"); return 0; } // cannot use posamb here // convert to degrees, minutes and decimal degrees, // and then to a float lat if (sscanf(dstcall, "%2u%2u%2u", &lat_deg, &lat_min, &lat_min_frag) != 3) { DEBUG_LOG("\tsscanf failed"); return 0; } lat = (float)lat_deg + (float)lat_min / 60.0 + (float)lat_min_frag / 6000.0; // check the north/south direction and correct the latitude if necessary if (d_start[3] <= 0x4c) lat = 0 - lat; /* Decode the longitude, the first three bytes of the body * after the data type indicator. First longitude degrees, * remember the longitude offset. */ lng_deg = body[0] - 28; if (d_start[4] >= 0x50) lng_deg += 100; if (lng_deg >= 180 && lng_deg <= 189) lng_deg -= 80; else if (lng_deg >= 190 && lng_deg <= 199) lng_deg -= 190; /* Decode the longitude minutes */ lng_min = body[1] - 28; if (lng_min >= 60) lng_min -= 60; /* ... and minute decimals */ lng_min_frag = body[2] - 28; /* apply position ambiguity to longitude */ switch (posambiguity) { case 0: /* use everything */ lng = (float)lng_deg + (float)lng_min / 60.0 + (float)lng_min_frag / 6000.0; break; case 1: /* ignore last number of lng_min_frag */ lng = (float)lng_deg + (float)lng_min / 60.0 + (float)(lng_min_frag - lng_min_frag % 10 + 5) / 6000.0; break; case 2: /* ignore lng_min_frag */ lng = (float)lng_deg + ((float)lng_min + 0.5) / 60.0; break; case 3: /* ignore lng_min_frag and last number of lng_min */ lng = (float)lng_deg + (float)(lng_min - lng_min % 10 + 5) / 60.0; break; case 4: /* minute is unused -> add 0.5 degrees to longitude */ lng = (float)lng_deg + 0.5; break; default: DEBUG_LOG(".. posambiguity code BUG!"); return 0; } /* check the longitude E/W sign */ if (d_start[5] >= 0x50) lng = 0 - lng; /* save the symbol table and code */ sym_code = body[6]; sym_table = body[7]; /* ok, we're done */ /* fprintf(stderr, "\tlat %u %u.%u (%.4f) lng %u %u.%u (%.4f)\n", lat_deg, lat_min, lat_min_frag, lat, lng_deg, lng_min, lng_min_frag, lng); fprintf(stderr, "\tsym '%c' '%c'\n", sym_table, sym_code); */ return pbuf_fill_pos(pb, lat, lng, sym_table, sym_code); } /* * Parse a compressed APRS position packet * * APRS PROTOCOL REFERENCE 1.0.1 Chapter 9, page 36 (46 in PDF) * */ static int parse_aprs_compressed(struct pbuf_t *pb, const char *body, const char *body_end) { char sym_table, sym_code; int i; int lat1, lat2, lat3, lat4; int lng1, lng2, lng3, lng4; float lat, lng; DEBUG_LOG("parse_aprs_compressed"); /* A compressed position is always 13 characters long. * Make sure we get at least 13 characters and that they are ok. * Also check the allowed base-91 characters at the same time. */ if (body_end - body < 13) { DEBUG_LOG("\ttoo short"); return 0; /* too short. */ } sym_table = body[0]; /* has been validated before entering this function */ sym_code = body[9]; /* base-91 check */ for (i = 1; i <= 8; i++) if (body[i] < 0x21 || body[i] > 0x7b) return 0; // fprintf(stderr, "\tpassed length and format checks, sym %c%c\n", sym_table, sym_code); /* decode */ lat1 = (body[1] - 33); lat2 = (body[2] - 33); lat3 = (body[3] - 33); lat4 = (body[4] - 33); lat1 = ((((lat1 * 91) + lat2) * 91) + lat3) * 91 + lat4; lng1 = (body[5] - 33); lng2 = (body[6] - 33); lng3 = (body[7] - 33); lng4 = (body[8] - 33); lng1 = ((((lng1 * 91) + lng2) * 91) + lng3) * 91 + lng4; /* calculate latitude and longitude */ lat = 90.0F - ((float)(lat1) / 380926.0F); lng = -180.0F + ((float)(lng1) / 190463.0F); return pbuf_fill_pos(pb, lat, lng, sym_table, sym_code); } /* * Parse an uncompressed "normal" APRS packet * * APRS PROTOCOL REFERENCE 1.0.1 Chapter 8, page 32 (42 in PDF) * */ static int parse_aprs_uncompressed(struct pbuf_t *pb, const char *body, const char *body_end) { char posbuf[20]; unsigned int lat_deg = 0, lat_min = 0, lat_min_frag = 0, lng_deg = 0, lng_min = 0, lng_min_frag = 0; float lat, lng; char lat_hemi, lng_hemi; char sym_table, sym_code; int issouth = 0; int iswest = 0; DEBUG_LOG("parse_aprs_uncompressed"); if (body_end - body < 19) { DEBUG_LOG("\ttoo short"); return 0; } /* make a local copy, so we can overwrite it at will. */ memcpy(posbuf, body, 19); posbuf[19] = 0; // fprintf(stderr, "\tposbuf: %s\n", posbuf); // position ambiquity is going to get ignored now, // it's not needed in this application. /* lat */ if (posbuf[2] == ' ') posbuf[2] = '3'; if (posbuf[3] == ' ') posbuf[3] = '5'; if (posbuf[5] == ' ') posbuf[5] = '5'; if (posbuf[6] == ' ') posbuf[6] = '5'; /* lng */ if (posbuf[12] == ' ') posbuf[12] = '3'; if (posbuf[13] == ' ') posbuf[13] = '5'; if (posbuf[15] == ' ') posbuf[15] = '5'; if (posbuf[16] == ' ') posbuf[16] = '5'; // fprintf(stderr, "\tafter filling amb: %s\n", posbuf); /* 3210.70N/13132.15E# */ if (sscanf(posbuf, "%2u%2u.%2u%c%c%3u%2u.%2u%c%c", &lat_deg, &lat_min, &lat_min_frag, &lat_hemi, &sym_table, &lng_deg, &lng_min, &lng_min_frag, &lng_hemi, &sym_code) != 10) { DEBUG_LOG("\tsscanf failed"); return 0; } if (!valid_sym_table_uncompressed(sym_table)) sym_table = 0; if (lat_hemi == 'S' || lat_hemi == 's') issouth = 1; else if (lat_hemi != 'N' && lat_hemi != 'n') return 0; /* neither north or south? bail out... */ if (lng_hemi == 'W' || lng_hemi == 'w') iswest = 1; else if (lng_hemi != 'E' && lng_hemi != 'e') return 0; /* neither west or east? bail out ... */ if (lat_deg > 89 || lng_deg > 179) return 0; /* too large values for lat/lng degrees */ lat = (float)lat_deg + (float)lat_min / 60.0 + (float)lat_min_frag / 6000.0; lng = (float)lng_deg + (float)lng_min / 60.0 + (float)lng_min_frag / 6000.0; /* Finally apply south/west indicators */ if (issouth) lat = 0.0 - lat; if (iswest) lng = 0.0 - lng; // fprintf(stderr, "\tlat %u %u.%u %c (%.3f) lng %u %u.%u %c (%.3f)\n", // lat_deg, lat_min, lat_min_frag, (int)lat_hemi, lat, // lng_deg, lng_min, lng_min_frag, (int)lng_hemi, lng); // fprintf(stderr, "\tsym '%c' '%c'\n", sym_table, sym_code); return pbuf_fill_pos(pb, lat, lng, sym_table, sym_code); } /* * Parse an APRS object * * APRS PROTOCOL REFERENCE 1.0.1 Chapter 11, page 58 (68 in PDF) * */ static int parse_aprs_object(struct pbuf_t *pb, const char *body, const char *body_end) { int i; int namelen = -1; pb->packettype |= T_OBJECT; DEBUG_LOG("parse_aprs_object"); /* check that the object name ends with either * or _ */ if (*(body + 9) != '*' && *(body + 9) != '_') { DEBUG_LOG("\tinvalid object kill character"); return 0; } /* check that the timestamp ends with one of the valid timestamp type IDs */ char tz_end = body[16]; if (tz_end != 'z' && tz_end != 'h' && tz_end != '/') { DEBUG_LOG("\tinvalid object timestamp character: '%c'", tz_end); return 0; } /* check object's name - scan for non-printable characters and the last * non-space character */ for (i = 0; i < 9; i++) { if (body[i] < 0x20 || body[i] > 0x7e) { DEBUG_LOG("\tobject name has unprintable characters"); return 0; // non-printable } if (body[i] != ' ') namelen = i; } if (namelen < 0) { DEBUG_LOG("\tobject has empty name"); return 0; } pb->srcname = body; pb->srcname_len = namelen+1; DEBUG_LOG("object name: '%.*s'\n", pb->srcname_len, pb->srcname); /* Forward the location parsing onwards */ if (valid_sym_table_compressed(body[17])) return parse_aprs_compressed(pb, body + 17, body_end); if (body[17] >= '0' && body[17] <= '9') return parse_aprs_uncompressed(pb, body + 17, body_end); DEBUG_LOG("no valid position in object"); return 0; } /* * Parse an APRS item * * APRS PROTOCOL REFERENCE 1.0.1 Chapter 11, page 59 (69 in PDF) * */ static int parse_aprs_item(struct pbuf_t *pb, const char *body, const char *body_end) { int i; pb->packettype |= T_ITEM; DEBUG_LOG("parse_aprs_item"); /* check item's name - scan for non-printable characters and the * ending character ! or _ */ for (i = 0; i < 9 && body[i] != '!' && body[i] != '_'; i++) { if (body[i] < 0x20 || body[i] > 0x7e) { DEBUG_LOG("\titem name has unprintable characters"); return 0; /* non-printable */ } } if (body[i] != '!' && body[i] != '_') { DEBUG_LOG("\titem name ends with neither ! or _"); return 0; } if (i < 3 || i > 9) { DEBUG_LOG("\titem name has invalid length"); return 0; } pb->srcname = body; pb->srcname_len = i; //fprintf(stderr, "\titem name: '%.*s'\n", pb->srcname_len, pb->srcname); /* Forward the location parsing onwards */ i++; if (valid_sym_table_compressed(body[i])) return parse_aprs_compressed(pb, body + i, body_end); if (body[i] >= '0' && body[i] <= '9') return parse_aprs_uncompressed(pb, body + i, body_end); DEBUG_LOG("\tno valid position in item"); return 0; } #if 0 int parse_aprs_txgate(struct pbuf_t *pb, int look_inside_3rd_party, historydb_t *historydb) { int rc = parse_aprs(pb, look_inside_3rd_party, historydb); if (pb->packettype & T_THIRDPARTY) { // Tx-IGate needs to know from RF received frames, if there is // source address that arrived from an Tx-IGate... const char *body; const char *body_end; const char *pos_start; const char *info_start = pb->info_start; } return rc; } #endif /* * Try to parse an APRS packet. * Returns 1 if position was parsed successfully, * 0 if parsing failed. * * Does also front-end part of the output filter's * packet type classification job. * * TODO: Recognize TELEM packets in !/=@ packets too! * * Return 0 for parse failures, 1 for OK. */ int parse_aprs(struct pbuf_t*const pb, historydb_t*const historydb) { char packettype, poschar; int paclen; int rc; const char *body; const char *body_end; const char *pos_start; const char *info_start = pb->info_start; int look_inside_3rd_party = 1; // Look there once.. pb->packettype = T_ALL; pb->flags = 0; if (!pb->info_start) return 0; if (pb->data[0] == 'C' && /* Perhaps CWOP ? */ pb->data[1] == 'W') { const char *s = pb->data + 2; const char *pe = pb->data + pb->packet_len; for ( ; *s && s < pe ; ++s ) { int c = *s; if (c < '0' || c > '9') break; } if (*s == '>') pb->packettype |= T_CWOP; } /* the following parsing logic has been translated from Ham::APRS::FAP * Perl module to C */ // ignore the CRLF in the end of the body body_end = pb->data + pb->packet_len; do { // body is right after the packet type character body = info_start + 1; // length of the info field: paclen = body_end - info_start; if (paclen < 1) return 0; // consumed all, or empty packet // Check the first character of the packet and // determine the packet type packettype = *info_start; // Exit this loop unless it is 3rd-party frame if (packettype != '}') break; // Look for ':' character separating address block // from 3rd-party body info_start = memchr(body, ':', (int)(body_end - body)); if (info_start == NULL) { // Not valid 3rd party frame! return 0; } pb->packettype |= T_THIRDPARTY; if (!look_inside_3rd_party) return 1; // Correct 3rd-party, don't look further. // Look once inside the 3rd party frame, // this is used in aprx's tx-igate, which builds // the 3rd-party frame before parsing message-to-be-tx:ed // .. and doing content filters. --look_inside_3rd_party; pb->packettype = 0; // Skip over the ':' ++info_start; continue; // and loop.. } while (1); switch (packettype) { /* the following are obsolete mic-e types: 0x1c 0x1d * case 0x1c: * case 0x1d: */ case 0x27: /* ' */ case 0x60: /* ` */ /* could be mic-e, minimum body length 9 chars */ if (paclen >= 9) { pb->packettype |= T_POSITION; rc = parse_aprs_mice(pb, (const unsigned char*)body, (const unsigned char*)body_end); DEBUG_LOG("\n"); return rc; } return 0; // bad case '!': if (*body == '!') { /* Ultimeter 2000 - "tnc2addr:!!" */ pb->packettype |= T_WX; return 1; // Known Ultimeter format } case '=': case '/': case '@': /* check that we won't run over right away */ if (body_end - body < 10) return 0; // bad /* Normal or compressed location packet, with or without * timestamp, with or without messaging capability * * ! and / have messaging, / and @ have a prepended timestamp */ pb->packettype |= T_POSITION; if (packettype == '/' || packettype == '@') { /* With a prepended timestamp, jump over it. */ body += 7; } poschar = *body; if (valid_sym_table_compressed(poschar)) { /* [\/\\A-Za-j] */ /* compressed position packet */ rc = 0; if (body_end - body >= 13) rc = parse_aprs_compressed(pb, body, body_end); DEBUG_LOG("\n"); return rc; } else if (poschar >= 0x30 && poschar <= 0x39) { /* [0-9] */ /* normal uncompressed position */ rc = 0; if (body_end - body >= 19) rc = parse_aprs_uncompressed(pb, body, body_end); DEBUG_LOG("\n"); return rc; } return 0; case '$': if (body_end - body > 10) { // Is it OK to declare it as position packet ? rc = parse_aprs_nmea(pb, body, body_end); DEBUG_LOG("\n"); return rc; } return 0; case ':': pb->packettype |= T_MESSAGE; // quick and loose way to identify NWS and SKYWARN messages // they do apparently originate from "WXSRV", but that is not // guaranteed thing... if (memcmp(body,"NWS-",4) == 0) // as seen on specification pb->packettype |= T_NWS; if (memcmp(body,"NWS_",4) == 0) // as seen on data pb->packettype |= T_NWS; if (memcmp(body,"SKY",3) == 0) // as seen on specification pb->packettype |= T_NWS; // Is it perhaps TELEMETRY related "message" ? if ( body[9] == ':' && ( memcmp( body+9, ":PARM.", 6 ) == 0 || memcmp( body+9, ":UNIT.", 6 ) == 0 || memcmp( body+9, ":EQNS.", 6 ) == 0 || memcmp( body+9, ":BITS.", 6 ) == 0 )) { pb->packettype &= ~T_MESSAGE; pb->packettype |= T_TELEMETRY; // Fall through to recipient location lookup } // Or perhaps a DIRECTED QUERY ? if (body[9] == ':' && body[10] == '?') { pb->packettype &= ~T_MESSAGE; pb->packettype |= T_QUERY; // Fall through to recipient location lookup } // Now find out if the message RECIPIENT address is known // to have some location data ? Because then we can treat // them the same way in filters as we do those with real // positions.. { const char *p; int i; #ifndef DISABLE_IGATE history_cell_t *history; #endif pb->dstname = body; p = body; for (i = 0; i < CALLSIGNLEN_MAX; ++i) { // the recipient address is space padded // to 9 chars, while our historydb is not. if (*p == 0 || *p == ' ' || *p == ':') break; } pb->dstname_len = p - body; #ifndef DISABLE_IGATE if (historydb != NULL) { history = historydb_lookup( historydb, pb->dstname, i ); if (history != NULL) { pb->lat = history->lat; pb->lng = history->lon; pb->cos_lat = history->coslat; pb->flags |= F_HASPOS; } } #endif } return 1; case ';': if (body_end - body > 29) { rc = parse_aprs_object(pb, body, body_end); DEBUG_LOG("\n"); return rc; } return 0; // too short case '>': pb->packettype |= T_STATUS; return 1; // ok case '<': pb->packettype |= T_STATCAPA; return 1; // ok case '?': pb->packettype |= T_QUERY; return 1; // ok at igate/digi case ')': if (body_end - body > 18) { rc = parse_aprs_item(pb, body, body_end); DEBUG_LOG("\n"); return rc; } return 0; // too short case 'T': if (body_end - body > 18) { pb->packettype |= T_TELEMETRY; rc = parse_aprs_telem(pb, body, body_end); DEBUG_LOG("\n"); return rc; } return 0; // too short case '#': /* Peet Bros U-II Weather Station */ case '*': /* Peet Bros U-I Weather Station */ case '_': /* Weather report without position */ pb->packettype |= T_WX; return 1; // good case '{': pb->packettype |= T_USERDEF; return 1; // okay at digi? // the packettype is never '}' // case '}': // pb->packettype |= T_THIRDPARTY; // return 1; // 3rd-party is okay at digi default: break; } /* When all else fails, try to look for a !-position that can * occur anywhere within the 40 first characters according * to the spec. (X1J TNC digipeater bugs...) */ pos_start = memchr(body, '!', body_end - body); if ((pos_start) && pos_start - body <= 39) { poschar = *pos_start; if (valid_sym_table_compressed(poschar)) { /* [\/\\A-Za-j] */ /* compressed position packet */ int rc = 0; if (body_end - pos_start >= 13) rc = parse_aprs_compressed(pb, pos_start, body_end); DEBUG_LOG("\n"); return rc; } else if (poschar >= 0x30 && poschar <= 0x39) { /* [0-9] */ /* normal uncompressed position */ int rc = 0; if (body_end - pos_start >= 19) rc = parse_aprs_uncompressed(pb, pos_start, body_end); DEBUG_LOG("\n"); return rc; } } return 0; // bad } /* * Parse an aprs text message (optional, only done to messages addressed to * SERVER */ int parse_aprs_message(const struct pbuf_t *pb, struct aprs_message_t * const am) { const char *p; memset(am, 0, sizeof(*am)); if (!(pb->packettype & T_MESSAGE)) return -1; if (pb->info_start[10] != ':') return -2; am->body = pb->info_start + 11; /* -2 for the CRLF already in place */ am->body_len = pb->packet_len - 2 - (pb->info_start - pb->data); /* search for { looking backwards from the end of the packet, * it separates the msgid */ p = am->body + am->body_len - 1; while (p > am->body && *p != '{') p--; if (*p == '{') { am->msgid = p+1; am->msgid_len = pb->packet_len - 2 - (am->msgid - pb->data); am->body_len = p - am->body; } /* check if this is an ACK */ if ((!am->msgid_len) && am->body_len > 3 && am->body[0] == 'a' && am->body[1] == 'c' && am->body[2] == 'k') { am->is_ack = 1; am->msgid = am->body + 3; am->msgid_len = am->body_len - 3; am->body_len = 0; return 0; } /* check if this is an REJ */ if ((!am->msgid_len) && am->body_len > 3 && am->body[0] == 'r' && am->body[1] == 'e' && am->body[2] == 'j') { am->is_rej = 1; am->msgid = am->body + 3; am->msgid_len = am->body_len - 3; am->body_len = 0; return 0; } return 0; } aprx-2.9.0/pbuf.c000664 000000 000000 00000016031 13040775352 013563 0ustar00rootroot000000 000000 /* **************************************************************** * * * * APRX -- 2nd generation APRS iGate and digi with * * minimal requirement of esoteric facilities or * * libraries of any kind beyond UNIX system libc. * * * * (c) Matti Aarnio - OH2MQK, 2007-2014 * * * * **************************************************************** */ #define _SVID_SOURCE 1 #include "aprx.h" /* * - Allocate pbuf * - Free pbuf * - Handle refcount (get/put) */ #ifndef _FOR_VALGRIND_ static cellarena_t *pbuf_cells; #endif // int pbuf_size = sizeof(struct pbuf_t); // 152 bytes on i386 // int pbuf_alignment = __alignof__(struct pbuf_t); // 8 on i386 // 2150 byte pbuf takes in an AX.25 packet of about 1kB in size, // and in APRS use there never should be larger than about 512 bytes. // A 16 kB arena fits in 7 of these humongous pbufs. const int pbufcell_size = sizeof(struct pbuf_t) + 2150; const int pbufcell_align = __alignof__(struct pbuf_t); void pbuf_init(void) { #ifndef _FOR_VALGRIND_ /* A _few_... */ pbuf_cells = cellinit( "filter", pbufcell_size, pbufcell_align, CELLMALLOC_POLICY_LIFO, 16, // 16 kB at the time 0 // minfree ); #endif } static void pbuf_free(struct pbuf_t *pb) { #ifndef _FOR_VALGRIND_ cellfree(pbuf_cells, pb); #else free(pb); #endif if (debug > 1) printf("pbuf_free(%p)\n",pb); } static struct pbuf_t *pbuf_alloc( const int axlen, const int tnc2len ) { int pblen = sizeof(struct pbuf_t) + axlen + tnc2len + 2; #ifndef _FOR_VALGRIND_ // Picks suitably sized pbuf, and pre-cleans it // before passing to user struct pbuf_t *pb; if (pblen > 2150) { // Outch! return NULL; } pb = cellmalloc(pbuf_cells); memset(pb, 0, pblen ); #else // No size limits with valgrind.. struct pbuf_t *pb = calloc( 1, pblen ); #endif if (debug > 1) printf("pbuf_alloc(%d,%d) -> %p\n",axlen,tnc2len,pb); pb->packet_len = tnc2len; pb->buf_len = tnc2len; pb->data[tnc2len] = 0; pb->ax25addr = (uint8_t*)pb->data + tnc2len + 1; return pb; } struct pbuf_t *pbuf_get( struct pbuf_t *pb ) { // Increments refcount pb->refcount += 1; return pb; } void pbuf_put( struct pbuf_t *pb ) { // Decrements refcount, if 0 -> free()! pb->refcount -= 1; if (pb->refcount == 0) pbuf_free(pb); } static struct pbuf_t *_pbuf_new(const int is_aprs, const int digi_like_aprs, const int axlen, const int tnc2len); static struct pbuf_t *_pbuf_new(const int is_aprs, const int digi_like_aprs, const int axlen, const int tnc2len) { struct pbuf_t *pb = pbuf_alloc( axlen, tnc2len ); if (pb == NULL) return NULL; pbuf_get(pb); pb->is_aprs = is_aprs; pb->digi_like_aprs = digi_like_aprs; pb->t = tick.tv_sec; // Arrival time return pb; } // Do the pbuf filling in single location, processes the TNC2 header data struct pbuf_t * pbuf_new( const int is_aprs, const int digi_like_aprs, const int tnc2addrlen, const char *tnc2buf, const int tnc2len, const int ax25addrlen, const void *ax25buf, const int ax25len ) { char *p; char *src_end; /* pointer to the > after srccall */ char *path_start; /* pointer to the start of the path */ const char *path_end; /* pointer to the : after the path */ const char *packet_end; /* pointer to the end of the packet */ const char *info_start; /* pointer to the beginning of the info */ const char *info_end; /* end of the info */ char *dstcall_end_or_ssid; /* end of dstcall, before SSID ([-:,]) */ char *dstcall_end; /* end of dstcall including SSID ([:,]) */ char *via_start; /* start of the digipeater path (after dstcall,) */ // const char *data; /* points to original incoming path/payload separating ':' character */ // int datalen; /* length of the data block excluding tail \r\n */ int pathlen; /* length of the path == data-s */ struct pbuf_t *pb; /* a packet looks like: * SRCCALL>DSTCALL,PATH,PATH:INFO\r\n * (we have normalized the \r\n by now) * * The tnc2addrlen is index of the first ':'. */ path_end = tnc2buf + tnc2addrlen; pathlen = tnc2addrlen; // data = path_end; // Begins with ":" // datalen = tnc2len - pathlen; // Not including line end \r\n packet_end = tnc2buf + tnc2len; // Just to compare against far end.. /* look for the '>' */ src_end = memchr(tnc2buf, '>', pathlen < CALLSIGNLEN_MAX+1 ? pathlen : CALLSIGNLEN_MAX+1); if (!src_end) { return NULL; // No ">" in packet start.. } path_start = src_end+1; if (path_start >= packet_end) { // We're already at the path end return NULL; } if (src_end - tnc2buf > CALLSIGNLEN_MAX || src_end - tnc2buf < CALLSIGNLEN_MIN) { return NULL; /* too long source callsign */ } info_start = path_end+1; // @":"+1 - first char of the payload if (info_start >= packet_end) { return NULL; } /* see that there is at least some data in the packet */ info_end = packet_end; if (info_end <= info_start) { return NULL; } /* look up end of dstcall (excluding SSID - this is the way dupecheck and * mic-e parser wants it) */ dstcall_end = path_start; while (dstcall_end < path_end && *dstcall_end != '-' && *dstcall_end != ',' && *dstcall_end != ':') dstcall_end++; dstcall_end_or_ssid = dstcall_end; // OK, SSID is here (or the dstcall end), go for the real end while (dstcall_end < path_end && *dstcall_end != ',' && *dstcall_end != ':') dstcall_end++; if (dstcall_end - path_start > CALLSIGNLEN_MAX) { return NULL; /* too long for destination callsign */ } /* where does the digipeater path start? */ via_start = dstcall_end; while (via_start < path_end && (*via_start != ',' && *via_start != ':')) { via_start++; } pb = _pbuf_new( is_aprs, digi_like_aprs, ax25len, tnc2len ); if (!pb) { // This should never happen... return NULL; } // copy TNC2 data to its area p = pb->data; memcpy(p, tnc2buf, tnc2len); p += tnc2len; // Copy AX.25 data to its area.. memcpy(pb->ax25addr, ax25buf, ax25len); pb->ax25addrlen = ax25addrlen; pb->ax25data = pb->ax25addr + ax25addrlen; pb->ax25datalen = ax25len - ax25addrlen; // How much there really is data? pb->packet_len = tnc2len; packet_end = p; /* for easier overflow checking expressions */ /* fill necessary info for parsing and dupe checking in the packet buffer */ pb->srcname = pb->data; pb->srcname_len = src_end - tnc2buf; pb->srccall_end = pb->data + (src_end - tnc2buf); // "srccall>.." <-- @'>' pb->dstcall_end_or_ssid = pb->data + (dstcall_end_or_ssid - tnc2buf); pb->dstcall_end = pb->data + (dstcall_end - tnc2buf); pb->dstcall_len = via_start - src_end - 1; pb->info_start = pb->data + tnc2addrlen + 1; return pb; } aprx-2.9.0/pbuf.h000664 000000 000000 00000012157 13040775352 013575 0ustar00rootroot000000 000000 /******************************************************************** * APRX -- 2nd generation APRS-i-gate with * * minimal requirement of esoteric facilities or * * libraries of any kind beyond UNIX system libc. * * * * (c) Matti Aarnio - OH2MQK, 2007-2014 * * * ********************************************************************/ /* * Some parts of this code are copied from: * * aprsc * * (c) Heikki Hannikainen, OH7LZB * * This program is licensed under the BSD license, which can be found * in the file LICENSE. * */ /* Modified for APRX by Matti Aarnio, OH2MQK * Altered name from worker.h to pbuf.h, and * dropped about 70% of worker.h stuff... */ #ifndef PBUF_H #define PBUF_H /* minimum and maximum length of a callsign on APRS-IS */ #define CALLSIGNLEN_MIN 3 #define CALLSIGNLEN_MAX 9 /* packet length limiters and buffer sizes */ #define PACKETLEN_MIN 10 /* minimum length for a valid APRS-IS packet: "A1A>B1B:\r\n" */ #define PACKETLEN_MAX 512 /* maximum length for a valid APRS-IS packet (incl. CRLF) */ /* * Packet length statistics: * * <= 80: about 25% * <= 90: about 36% * <= 100: about 73% * <= 110: about 89% * <= 120: about 94% * <= 130: about 97% * <= 140: about 98.7% * <= 150: about 99.4% */ #define PACKETLEN_MAX_SMALL 100 #define PACKETLEN_MAX_MEDIUM 180 /* about 99.5% are smaller than this */ #define PACKETLEN_MAX_LARGE PACKETLEN_MAX /* number of pbuf_t structures to allocate at a time */ #define PBUF_ALLOCATE_BUNCH_SMALL 2000 /* grow to 2000 in production use */ #define PBUF_ALLOCATE_BUNCH_MEDIUM 2000 /* grow to 2000 in production use */ #define PBUF_ALLOCATE_BUNCH_LARGE 50 /* grow to 50 in production use */ /* a packet buffer */ /* Type flags -- some can happen in combinations: T_CWOP + T_WX / T_CWOP + T_POSITION ... */ #define T_POSITION (1 << 0) // Packet is of position type #define T_OBJECT (1 << 1) // packet is an object #define T_ITEM (1 << 2) // packet is an item #define T_MESSAGE (1 << 3) // packet is a message #define T_NWS (1 << 4) // packet is a NWS message #define T_WX (1 << 5) // packet is WX data #define T_TELEMETRY (1 << 6) // packet is telemetry #define T_QUERY (1 << 7) // packet is a query #define T_STATUS (1 << 8) // packet is status #define T_USERDEF (1 << 9) // packet is userdefined #define T_CWOP (1 << 10) // packet is recognized as CWOP #define T_STATCAPA (1 << 11) // packet is station capability response #define T_THIRDPARTY (1 << 12) #define T_ALL (1 << 15) // set on _all_ packets #define F_DUPE (1 << 0) // Duplicate of a previously seen packet #define F_HASPOS (1 << 1) // This packet has valid parsed position #define F_HAS_TCPIP (1 << 2) // There is a TCPIP* in the path struct pbuf_t { struct pbuf_t *next; int16_t is_aprs; // If not, then just digipeated frame.. int16_t digi_like_aprs; int16_t source_if_group; int16_t refcount; int16_t reqcount; // How many digipeat hops are requested? int16_t donecount; // How many digipeat hops are already done? time_t t; /* when the packet was received */ uint32_t seqnum; /* ever increasing counter, dupecheck sets */ uint16_t packettype; /* bitmask: one or more of T_* */ uint16_t flags; /* bitmask: one or more of F_* */ uint16_t srcname_len; /* parsed length of source (object, item, srcall) name 3..9 */ uint16_t dstcall_len; /* parsed length of destination callsign *including* SSID */ uint16_t dstname_len; /* parsed length of message destination including SSID */ uint16_t entrycall_len; int packet_len; /* the actual length of the TNC2 packet */ int buf_len; /* the length of this buffer */ const char *srccall_end; /* source callsign with SSID */ const char *dstcall_end_or_ssid; /* end of dest callsign (without SSID) */ const char *dstcall_end; /* end of dest callsign with SSID */ const char *qconst_start; /* "qAX,incomingSSID:" -- for q and e filters */ const char *info_start; /* pointer to start of info field */ const char *srcname; /* source's name (either srccall or object/item name) */ const char *dstname; /* message destination callsign */ float lat; /* if the packet is PT_POSITION, latitude and longitude go here */ float lng; /* .. in RADIAN */ float cos_lat; /* cache of COS of LATitude for radial distance filter */ char symbol[3]; /* 2(+1) chars of symbol, if any, NUL for not found */ uint8_t *ax25addr; // Start of AX.25 address int ax25addrlen; // length of AX.25 address uint8_t *ax25data; // Start of AX.25 data after addresses int ax25datalen; // length of that data char data[1]; }; /* global packet buffer */ extern struct pbuf_t *pbuf_global; extern struct pbuf_t *pbuf_global_last; extern struct pbuf_t **pbuf_global_prevp; extern struct pbuf_t *pbuf_global_dupe; extern struct pbuf_t *pbuf_global_dupe_last; extern struct pbuf_t **pbuf_global_dupe_prevp; #endif aprx-2.9.0/rpm/000775 000000 000000 00000000000 13040775352 013260 5ustar00rootroot000000 000000 aprx-2.9.0/rpm/aprx.default000664 000000 000000 00000000277 13040775352 015606 0ustar00rootroot000000 000000 # # STARTAPRX: start aprx on boot. Should be set to "yes" once you have # configured aprx. # STARTAPRX="no" # # Additional options that are passed to the Daemon. # DAEMON_OPTS="" aprx-2.9.0/rpm/aprx.init000775 000000 000000 00000003121 13040775352 015117 0ustar00rootroot000000 000000 #!/bin/bash # # chkconfig: - 16 84 # description: Start up a receive only APRS igate # processname: aprx # config: /etc/sysconfig/aprx ### BEGIN INIT INFO -- debian style: # Provides: aprx # Required-Start: $syslog $local_fs # Required-Stop: $syslog $local_fs # Default-Stop: 0 1 6 # Short-Description: start and stop aprx # Description: Monitor and gateway radio amateur APRS radio network datagrams ### END INIT INFO # source function library . /etc/rc.d/init.d/functions # Check that networking is up. [ "${NETWORKING}" = "no" ] && exit 0 # defaults PATH=/sbin:/bin:/usr/sbin:/usr/bin DAEMON=/usr/sbin/aprx NAME=aprx DESC="aprx igate" # source the config, if it exists if [ -f /etc/sysconfig/aprx ] ; then . /etc/sysconfig/aprx fi test -x $DAEMON || exit 0 if [ "$STARTAPRX" != "yes" ];then echo "Starting of $NAME not enabled in /etc/sysconfig/$NAME." exit 0 fi set -e case "$1" in start) echo -n $"Starting aprx server: " $DAEMON disown -ar usleep 500000 status $NAME &> /dev/null && echo_success || echo_failure RETVAL=$? [ $RETVAL -eq 0 ] && touch /var/lock/subsys/$NAME echo ;; stop) echo -n $"Shutting down aprx server: " killproc $DAEMON RETVAL=$? [ $RETVAL -eq 0 ] && rm -f /var/lock/subsys/$NAME echo_success ;; restart|reload) $0 stop $0 start RETVAL=$? ;; condrestart) if [ -f /var/lock/subsys/$NAME ]; then $0 stop $0 start fi RETVAL=$? ;; status) status $NAME RETVAL=$? ;; *) echo $"Usage: $0 {start|stop|restart|reload|condrestart|status}" exit 1 esac exit $RETVAL aprx-2.9.0/rpm/aprx.service000664 000000 000000 00000000314 13040775352 015612 0ustar00rootroot000000 000000 [Unit] Description=Amateur Radio APRS Gateway & Digipeater Documentation=man:aprx(8) [Service] Type=simple ExecStart=/usr/sbin/aprx # doesn't do any internal reload [Install] WantedBy=multi-user.target aprx-2.9.0/rpm/aprx.spec.in000664 000000 000000 00000006010 13040775352 015510 0ustar00rootroot000000 000000 Name: aprx Version: @VERSION@ Release: 1%{?dist} Summary: Hamradio APRS iGate / Digipeater License: BSD URL: http://ham.zmailer.org/oh2mqk/aprx/ Source0: http://ham.zmailer.org/oh2mqk/aprx/%{name}-%{version}.tar.gz %if 0%{?rhel} >= 7 || 0%{?fedora} >= 16 BuildRequires: systemd-units %endif %if 0%{?fedora} >= 18 Requires(post): systemd Requires(preun): systemd Requires(postun): systemd %post %systemd_post %{name}.service %preun %systemd_preun %{name}.service %postun %systemd_postun_with_restart %{name}.service %else 0%{?fedora} = 17 Requires(post): systemd-units Requires(preun): systemd-units Requires(postun): systemd-units %post if [ $1 -eq 1 ] ; then # Initial installation /bin/systemctl daemon-reload >/dev/null 2>&1 || : fi %preun if [ $1 -eq 0 ] ; then # Package removal, not upgrade /bin/systemctl --no-reload disable aprx.service > /dev/null 2>&1 || : /bin/systemctl stop aprx.service > /dev/null 2>&1 || : fi %postun /bin/systemctl daemon-reload >/dev/null 2>&1 || : if [ $1 -ge 1 ] ; then # Package upgrade, not uninstall /bin/systemctl try-restart aprx.service >/dev/null 2>&1 || : fi %endif %description Aprx is an APRS iGate that has minimal system requirements. It can handle an arbitrary number of radio modems, optionally relay APRS packets from radio to the APRS-IS network, optionally digipeat AX25 with or without NEWn-N rules, optionally relay APRS packets from APRS-IS to radio (TX-iGate) %prep %setup -q %build %configure --with-erlangstorage CFLAGS="-m32 -march=i386" LDFLAGS="-m32 -march=i386" make %{?_smp_mflags} make logrotate.aprx %install mkdir -p $RPM_BUILD_ROOT/etc/sysconfig mkdir -p $RPM_BUILD_ROOT/etc/logrotate.d mkdir -p $RPM_BUILD_ROOT/var/log/aprx make install DESTDIR=$RPM_BUILD_ROOT install -m 644 logrotate.aprx $RPM_BUILD_ROOT%{_sysconfdir}/logrotate.d/aprx install -m 644 rpm/aprx.default $RPM_BUILD_ROOT%{_sysconfdir}/sysconfig/aprx %if 0%{?rhel} >= 7 || 0%{?fedora} >= 16 mkdir -p $RPM_BUILD_ROOT%{_unitdir} install -m 644 rpm/aprx.service $RPM_BUILD_ROOT%{_unitdir}/%{name}.service %else mkdir -p $RPM_BUILD_ROOT%{_initddir} install -m 755 rpm/aprx.init $RPM_BUILD_ROOT%{_initddir}/aprx %endif %clean rm -rf $RPM_BUILD_ROOT %files %defattr(-,root,root,-) # INSTALL not bundled %doc LICENSE README TODO PROTOCOLS %doc ChangeLog %doc aprx.conf aprx-complex.conf %doc doc/aprx-manual.pdf %doc ViscousDigipeater.README ViscousDigipeaterTxEffect.png %dir /var/log/aprx %if 0%{?rhel} >= 7 || 0%{?fedora} >= 16 %{_unitdir}/%{name}.service %else %{_initddir}/%{name} %endif %config(noreplace) %{_sysconfdir}/aprx.conf %config(noreplace) %{_sysconfdir}/sysconfig/aprx %config(noreplace) %{_sysconfdir}/logrotate.d/aprx %{_sbindir}/aprx %{_sbindir}/aprx-stat %doc %{_mandir}/man8/aprx.8.gz %doc %{_mandir}/man8/aprx-stat.8.gz %changelog * Thu Oct 11 2012 Andrew Elwell - @VERSION@ - Packaging for Fedora * Sat Jan 12 2008 Matti Aarnio - OH2MQK - KP20NG - - RPM framework added aprx-2.9.0/ssl.c000664 000000 000000 00000056645 13040775352 013447 0ustar00rootroot000000 000000 /* * This OpenSSL interface code has been proudly copied from * the excellent NGINX web server. * * Its license is reproduced here. */ /* * Copyright (C) 2002-2013 Igor Sysoev * Copyright (C) 2011-2013 Nginx, 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: * 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. * * 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. */ /* * OpenSSL thread-safe example code (ssl_thread_* functions) have been * proudly copied from the excellent CURL package, the original author * is Jeremy Brown. * * https://github.com/bagder/curl/blob/master/docs/examples/opensslthreadlock.c * * COPYRIGHT AND PERMISSION NOTICE * Copyright (c) 1996 - 2013, Daniel Stenberg, . * * All rights reserved. * * Permission to use, copy, modify, and distribute this software for any purpose * with or without fee is hereby granted, provided that the above copyright * notice and this permission notice appear in all copies. * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT OF THIRD PARTY RIGHTS. IN * NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, * DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR * OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE * OR OTHER DEALINGS IN THE SOFTWARE. * * Except as contained in this notice, the name of a copyright holder shall not * be used in advertising or otherwise to promote the sale, use or other dealings * in this Software without prior written authorization of the copyright holder. * */ #include "config.h" #include "ssl.h" #include "hlog.h" #include "hmalloc.h" #include "worker.h" #ifdef USE_SSL #include #include #include #include #include #define SSL_DEFAULT_CIPHERS "HIGH:!aNULL:!MD5" #define SSL_PROTOCOLS (NGX_SSL_SSLv3|NGX_SSL_TLSv1 |NGX_SSL_TLSv1_1|NGX_SSL_TLSv1_2) /* ssl error strings */ #define SSL_ERR_LABELS_COUNT 6 static const char *ssl_err_labels[][2] = { { "invalid_err", "Invalid, unknown error" }, { "internal_err", "Internal error" }, { "peer_cert_unverified", "Peer certificate is not valid or not trusted" }, { "no_peer_cert", "Peer did not present a certificate" }, { "cert_no_subj", "Certificate does not contain a Subject field" }, { "cert_no_callsign", "Certificate does not contain a TQSL callsign in CN - not a ham cert" }, { "cert_callsign_mismatch", "Certificate callsign does not match login username" } }; /* pthread wrapping for openssl */ #define MUTEX_TYPE pthread_mutex_t #define MUTEX_SETUP(x) pthread_mutex_init(&(x), NULL) #define MUTEX_CLEANUP(x) pthread_mutex_destroy(&(x)) #define MUTEX_LOCK(x) pthread_mutex_lock(&(x)) #define MUTEX_UNLOCK(x) pthread_mutex_unlock(&(x)) #define THREAD_ID pthread_self( ) int ssl_available; int ssl_connection_index; int ssl_server_conf_index; int ssl_session_cache_index; /* This array will store all of the mutexes available to OpenSSL. */ static MUTEX_TYPE *mutex_buf= NULL; static void ssl_thread_locking_function(int mode, int n, const char * file, int line) { if (mode & CRYPTO_LOCK) MUTEX_LOCK(mutex_buf[n]); else MUTEX_UNLOCK(mutex_buf[n]); } static unsigned long ssl_thread_id_function(void) { return ((unsigned long)THREAD_ID); } static int ssl_thread_setup(void) { int i; hlog(LOG_DEBUG, "Creating OpenSSL mutexes (%d)...", CRYPTO_num_locks()); mutex_buf = hmalloc(CRYPTO_num_locks() * sizeof(MUTEX_TYPE)); for (i = 0; i < CRYPTO_num_locks(); i++) MUTEX_SETUP(mutex_buf[i]); CRYPTO_set_id_callback(ssl_thread_id_function); CRYPTO_set_locking_callback(ssl_thread_locking_function); return 0; } static int ssl_thread_cleanup(void) { int i; if (!mutex_buf) return 0; CRYPTO_set_id_callback(NULL); CRYPTO_set_locking_callback(NULL); for (i = 0; i < CRYPTO_num_locks( ); i++) MUTEX_CLEANUP(mutex_buf[i]); hfree(mutex_buf); mutex_buf = NULL; return 0; } /* * string representations for error codes */ const char *ssl_strerror(int code) { code *= -1; if (code >= 0 && code < (sizeof ssl_err_labels / sizeof ssl_err_labels[0])) return ssl_err_labels[code][1]; return ssl_err_labels[0][1]; } /* * Clear OpenSSL error queue */ static void ssl_error(int level, const char *msg) { unsigned long n; char errstr[512]; for ( ;; ) { n = ERR_get_error(); if (n == 0) break; ERR_error_string_n(n, errstr, sizeof(errstr)); errstr[sizeof(errstr)-1] = 0; hlog(level, "%s (%d): %s", msg, n, errstr); } } static void ssl_clear_error(void) { while (ERR_peek_error()) { ssl_error(LOG_INFO, "Ignoring stale SSL error"); } ERR_clear_error(); } /* * TrustedQSL custom X.509 certificate objects */ #define TRUSTEDQSL_OID "1.3.6.1.4.1.12348.1." #define TRUSTEDQSL_OID_CALLSIGN TRUSTEDQSL_OID "1" #define TRUSTEDQSL_OID_QSO_NOT_BEFORE TRUSTEDQSL_OID "2" #define TRUSTEDQSL_OID_QSO_NOT_AFTER TRUSTEDQSL_OID "3" #define TRUSTEDQSL_OID_DXCC_ENTITY TRUSTEDQSL_OID "4" #define TRUSTEDQSL_OID_SUPERCEDED_CERT TRUSTEDQSL_OID "5" #define TRUSTEDQSL_OID_CRQ_ISSUER_ORGANIZATION TRUSTEDQSL_OID "6" #define TRUSTEDQSL_OID_CRQ_ISSUER_ORGANIZATIONAL_UNIT TRUSTEDQSL_OID "7" static const char *tqsl_NIDs[][2] = { { TRUSTEDQSL_OID_CALLSIGN, "AROcallsign" }, { TRUSTEDQSL_OID_QSO_NOT_BEFORE, "QSONotBeforeDate" }, { TRUSTEDQSL_OID_QSO_NOT_AFTER, "QSONotAfterDate" }, { TRUSTEDQSL_OID_DXCC_ENTITY, "dxccEntity" }, { TRUSTEDQSL_OID_SUPERCEDED_CERT, "supercededCertificate" }, { TRUSTEDQSL_OID_CRQ_ISSUER_ORGANIZATION, "tqslCRQIssuerOrganization" }, { TRUSTEDQSL_OID_CRQ_ISSUER_ORGANIZATIONAL_UNIT, "tqslCRQIssuerOrganizationalUnit" }, }; static int load_tqsl_custom_objects(void) { int i; for (i = 0; i < (sizeof tqsl_NIDs / sizeof tqsl_NIDs[0]); ++i) if (OBJ_create(tqsl_NIDs[i][0], tqsl_NIDs[i][1], NULL) == 0) return -1; return 0; } static void ssl_info_callback(SSL *ssl, int where, int ret) { struct client_t *c = SSL_get_ex_data(ssl, ssl_connection_index); if (!c) { hlog(LOG_ERR, "ssl_info_callback: no application data for connection"); return; } struct ssl_connection_t *ssl_conn = c->ssl_con; if (!ssl_conn) { hlog(LOG_ERR, "ssl_info_callback: no ssl_conn for connection"); return; } if (where & SSL_CB_HANDSHAKE_START) { hlog(LOG_INFO, "%s/%d: SSL handshake start", c->addr_rem, c->fd); if (ssl_conn->handshaked) { ssl_conn->renegotiation = 1; } } if (where & SSL_CB_HANDSHAKE_DONE) { hlog(LOG_INFO, "%s/%d: SSL handshake done", c->addr_rem, c->fd); } } /* * Initialize SSL */ int ssl_init(void) { hlog(LOG_INFO, "Initializing OpenSSL, built against %s ...", OPENSSL_VERSION_TEXT); OPENSSL_config(NULL); SSL_library_init(); SSL_load_error_strings(); ssl_thread_setup(); OpenSSL_add_all_algorithms(); load_tqsl_custom_objects(); #if OPENSSL_VERSION_NUMBER >= 0x0090800fL #ifndef SSL_OP_NO_COMPRESSION { /* * Disable gzip compression in OpenSSL prior to 1.0.0 version, * this saves about 522K per connection. */ int n; STACK_OF(SSL_COMP) *ssl_comp_methods; ssl_comp_methods = SSL_COMP_get_compression_methods(); n = sk_SSL_COMP_num(ssl_comp_methods); while (n--) { (void) sk_SSL_COMP_pop(ssl_comp_methods); } } #endif #endif ssl_connection_index = SSL_get_ex_new_index(0, NULL, NULL, NULL, NULL); if (ssl_connection_index == -1) { ssl_error(LOG_ERR, "SSL_get_ex_new_index for connection"); return -1; } ssl_server_conf_index = SSL_CTX_get_ex_new_index(0, NULL, NULL, NULL, NULL); if (ssl_server_conf_index == -1) { ssl_error(LOG_ERR, "SSL_CTX_get_ex_new_index for conf"); return -1; } ssl_session_cache_index = SSL_CTX_get_ex_new_index(0, NULL, NULL, NULL, NULL); if (ssl_session_cache_index == -1) { ssl_error(LOG_ERR, "SSL_CTX_get_ex_new_index for session cache"); return -1; } ssl_available = 1; return 0; } void ssl_atend(void) { ssl_thread_cleanup(); } struct ssl_t *ssl_alloc(void) { struct ssl_t *ssl; ssl = hmalloc(sizeof(*ssl)); memset(ssl, 0, sizeof(*ssl)); return ssl; } void ssl_free(struct ssl_t *ssl) { if (ssl->ctx) SSL_CTX_free(ssl->ctx); hfree(ssl); } int ssl_create(struct ssl_t *ssl, void *data) { ssl->ctx = SSL_CTX_new(SSLv23_method()); if (ssl->ctx == NULL) { ssl_error(LOG_ERR, "ssl_create SSL_CTX_new failed"); return -1; } if (SSL_CTX_set_ex_data(ssl->ctx, ssl_server_conf_index, data) == 0) { ssl_error(LOG_ERR, "ssl_create SSL_CTX_set_ex_data failed"); return -1; } /* client side options */ SSL_CTX_set_options(ssl->ctx, SSL_OP_MICROSOFT_SESS_ID_BUG); SSL_CTX_set_options(ssl->ctx, SSL_OP_NETSCAPE_CHALLENGE_BUG); /* server side options */ SSL_CTX_set_options(ssl->ctx, SSL_OP_SSLREF2_REUSE_CERT_TYPE_BUG); SSL_CTX_set_options(ssl->ctx, SSL_OP_MICROSOFT_BIG_SSLV3_BUFFER); /* this option allow a potential SSL 2.0 rollback (CAN-2005-2969) */ SSL_CTX_set_options(ssl->ctx, SSL_OP_MSIE_SSLV2_RSA_PADDING); SSL_CTX_set_options(ssl->ctx, SSL_OP_SSLEAY_080_CLIENT_DH_BUG); SSL_CTX_set_options(ssl->ctx, SSL_OP_TLS_D5_BUG); SSL_CTX_set_options(ssl->ctx, SSL_OP_TLS_BLOCK_PADDING_BUG); SSL_CTX_set_options(ssl->ctx, SSL_OP_DONT_INSERT_EMPTY_FRAGMENTS); SSL_CTX_set_options(ssl->ctx, SSL_OP_SINGLE_DH_USE); /* SSL protocols not configurable for now */ int protocols = SSL_PROTOCOLS; if (!(protocols & NGX_SSL_SSLv2)) { SSL_CTX_set_options(ssl->ctx, SSL_OP_NO_SSLv2); } if (!(protocols & NGX_SSL_SSLv3)) { SSL_CTX_set_options(ssl->ctx, SSL_OP_NO_SSLv3); } if (!(protocols & NGX_SSL_TLSv1)) { SSL_CTX_set_options(ssl->ctx, SSL_OP_NO_TLSv1); } #ifdef SSL_OP_NO_TLSv1_1 if (!(protocols & NGX_SSL_TLSv1_1)) { SSL_CTX_set_options(ssl->ctx, SSL_OP_NO_TLSv1_1); } #endif #ifdef SSL_OP_NO_TLSv1_2 if (!(protocols & NGX_SSL_TLSv1_2)) { SSL_CTX_set_options(ssl->ctx, SSL_OP_NO_TLSv1_2); } #endif #ifdef SSL_OP_NO_COMPRESSION SSL_CTX_set_options(ssl->ctx, SSL_OP_NO_COMPRESSION); #endif #ifdef SSL_MODE_RELEASE_BUFFERS SSL_CTX_set_mode(ssl->ctx, SSL_MODE_RELEASE_BUFFERS); #endif SSL_CTX_set_mode(ssl->ctx, SSL_MODE_ENABLE_PARTIAL_WRITE); SSL_CTX_set_read_ahead(ssl->ctx, 1); SSL_CTX_set_info_callback(ssl->ctx, (void *)ssl_info_callback); if (SSL_CTX_set_cipher_list(ssl->ctx, SSL_DEFAULT_CIPHERS) == 0) { ssl_error(LOG_ERR, "ssl_create SSL_CTX_set_cipher_list failed"); return -1; } /* prefer server-selected ciphers */ SSL_CTX_set_options(ssl->ctx, SSL_OP_CIPHER_SERVER_PREFERENCE); return 0; } /* * Load server key and certificate */ int ssl_certificate(struct ssl_t *ssl, const char *certfile, const char *keyfile) { if (SSL_CTX_use_certificate_chain_file(ssl->ctx, certfile) == 0) { hlog(LOG_ERR, "Error while loading SSL certificate chain file \"%s\"", certfile); ssl_error(LOG_ERR, "SSL_CTX_use_certificate_chain_file"); return -1; } if (SSL_CTX_use_PrivateKey_file(ssl->ctx, keyfile, SSL_FILETYPE_PEM) == 0) { hlog(LOG_ERR, "Error while loading SSL private key file \"%s\"", keyfile); ssl_error(LOG_ERR, "SSL_CTX_use_PrivateKey_file"); return -1; } if (!SSL_CTX_check_private_key(ssl->ctx)) { hlog(LOG_ERR, "SSL private key (%s) does not work with this certificate (%s)", keyfile, certfile); ssl_error(LOG_ERR, "SSL_CTX_check_private_key"); return -1; } return 0; } static int ssl_verify_callback(int ok, X509_STORE_CTX *x509_store) { hlog(LOG_DEBUG, "ssl_verify_callback, ok: %d", ok); #if (NGX_DEBUG) char *subject, *issuer; int err, depth; X509 *cert; X509_NAME *sname, *iname; ngx_connection_t *c; ngx_ssl_conn_t *ssl_conn; ssl_conn = X509_STORE_CTX_get_ex_data(x509_store, SSL_get_ex_data_X509_STORE_CTX_idx()); c = ngx_ssl_get_connection(ssl_conn); cert = X509_STORE_CTX_get_current_cert(x509_store); err = X509_STORE_CTX_get_error(x509_store); depth = X509_STORE_CTX_get_error_depth(x509_store); sname = X509_get_subject_name(cert); subject = sname ? X509_NAME_oneline(sname, NULL, 0) : "(none)"; iname = X509_get_issuer_name(cert); issuer = iname ? X509_NAME_oneline(iname, NULL, 0) : "(none)"; ngx_log_debug5(NGX_LOG_DEBUG_EVENT, c->log, 0, "verify:%d, error:%d, depth:%d, " "subject:\"%s\",issuer: \"%s\"", ok, err, depth, subject, issuer); if (sname) { OPENSSL_free(subject); } if (iname) { OPENSSL_free(issuer); } #endif return 1; } /* * Load trusted CA certs for verifying our peers */ int ssl_ca_certificate(struct ssl_t *ssl, const char *cafile, int depth) { STACK_OF(X509_NAME) *list; SSL_CTX_set_verify(ssl->ctx, SSL_VERIFY_PEER, ssl_verify_callback); SSL_CTX_set_verify_depth(ssl->ctx, depth); if (SSL_CTX_load_verify_locations(ssl->ctx, cafile, NULL) == 0) { hlog(LOG_ERR, "Failed to load trusted CA list from \"%s\"", cafile); ssl_error(LOG_ERR, "SSL_CTX_load_verify_locations"); return -1; } list = SSL_load_client_CA_file(cafile); if (list == NULL) { hlog(LOG_ERR, "Failed to load client CA file from \"%s\"", cafile); ssl_error(LOG_ERR, "SSL_load_client_CA_file"); return -1; } /* * before 0.9.7h and 0.9.8 SSL_load_client_CA_file() * always leaved an error in the error queue */ ERR_clear_error(); SSL_CTX_set_client_CA_list(ssl->ctx, list); ssl->validate = 1; return 0; } /* * Create a connect */ int ssl_create_connection(struct ssl_t *ssl, struct client_t *c, int i_am_client) { struct ssl_connection_t *sc; sc = hmalloc(sizeof(*sc)); sc->connection = SSL_new(ssl->ctx); if (sc->connection == NULL) { ssl_error(LOG_ERR, "SSL_new failed"); hfree(sc); return -1; } if (SSL_set_fd(sc->connection, c->fd) == 0) { ssl_error(LOG_ERR, "SSL_set_fd failed"); SSL_free(sc->connection); hfree(sc); return -1; } if (i_am_client) { SSL_set_connect_state(sc->connection); } else { SSL_set_accept_state(sc->connection); } if (SSL_set_ex_data(sc->connection, ssl_connection_index, c) == 0) { ssl_error(LOG_ERR, "SSL_set_ex_data failed"); SSL_free(sc->connection); hfree(sc); return -1; } sc->validate = ssl->validate; c->ssl_con = sc; return 0; } void ssl_free_connection(struct client_t *c) { if (!c->ssl_con) return; SSL_free(c->ssl_con->connection); hfree(c->ssl_con); c->ssl_con = NULL; } int ssl_cert_callsign_match(const char *subj_call, const char *username) { if (subj_call == NULL || username == NULL) return 0; while (*username != '-' && *username != 0 && *subj_call != 0) { if (toupper(*username) != toupper(*subj_call)) return 0; /* mismatch */ subj_call++; username++; } if (*subj_call != 0) return 0; /* if username is shorter than subject callsign, we fail */ if (*username != '-' && *username != 0) return 0; /* if we ran to end of subject callsign but not to end of username or start of SSID, we fail */ return 1; } /* * Validate client certificate */ int ssl_validate_peer_cert_phase1(struct client_t *c) { X509 *cert; int rc = SSL_get_verify_result(c->ssl_con->connection); if (rc != X509_V_OK) { /* client gave a certificate, but it's not valid */ hlog(LOG_DEBUG, "%s/%s: Peer SSL certificate verification error %d: %s", c->addr_rem, c->username, rc, X509_verify_cert_error_string(rc)); c->ssl_con->ssl_err_code = rc; return SSL_VALIDATE_CLIENT_CERT_UNVERIFIED; } cert = SSL_get_peer_certificate(c->ssl_con->connection); if (cert == NULL) { /* client did not give a certificate */ return SSL_VALIDATE_NO_CLIENT_CERT; } X509_free(cert); return 0; } int ssl_validate_peer_cert_phase2(struct client_t *c) { int ret = -1; X509 *cert; X509_NAME *sname, *iname; char *subject, *issuer; char *subj_cn = NULL; char *subj_call = NULL; int nid, idx; X509_NAME_ENTRY *entry; ASN1_STRING *edata; cert = SSL_get_peer_certificate(c->ssl_con->connection); if (cert == NULL) { /* client did not give a certificate */ return SSL_VALIDATE_NO_CLIENT_CERT; } /* ok, we have a cert, find subject */ sname = X509_get_subject_name(cert); if (!sname) { ret = SSL_VALIDATE_CERT_NO_SUBJECT; goto fail; } subject = X509_NAME_oneline(sname, NULL, 0); /* find tqsl callsign */ nid = OBJ_txt2nid("AROcallsign"); if (nid == NID_undef) { hlog(LOG_ERR, "OBJ_txt2nid could not find NID for AROcallsign"); ret = SSL_VALIDATE_INTERNAL_ERROR; goto fail; } idx = X509_NAME_get_index_by_NID(sname, nid, -1); if (idx == -1) { hlog(LOG_DEBUG, "%s/%s: peer certificate has no callsign: %s", c->addr_rem, c->username, subject); ret = SSL_VALIDATE_CERT_NO_CALLSIGN; goto fail; } entry = X509_NAME_get_entry(sname, idx); if (entry != NULL) { edata = X509_NAME_ENTRY_get_data(entry); if (edata != NULL) ASN1_STRING_to_UTF8((unsigned char **)&subj_call, edata); } /* find CN of subject */ idx = X509_NAME_get_index_by_NID(sname, NID_commonName, -1); if (idx == -1) { hlog(LOG_DEBUG, "%s/%s: peer certificate has no CN: %s", c->addr_rem, c->username, subject); } else { entry = X509_NAME_get_entry(sname, idx); if (entry != NULL) { edata = X509_NAME_ENTRY_get_data(entry); if (edata != NULL) ASN1_STRING_to_UTF8((unsigned char **)&subj_cn, edata); } } if (!subj_call) { hlog(LOG_DEBUG, "%s/%s: peer certificate callsign conversion failed: %s", c->addr_rem, c->username, subject); ret = SSL_VALIDATE_CERT_NO_CALLSIGN; goto fail; } if (!ssl_cert_callsign_match(subj_call, c->username)) { ret = SSL_VALIDATE_CERT_CALLSIGN_MISMATCH; goto fail; } /* find issuer */ iname = X509_get_issuer_name(cert); issuer = iname ? X509_NAME_oneline(iname, NULL, 0) : "(none)"; ret = 0; hlog(LOG_INFO, "%s/%s: Peer validated using SSL certificate: subject '%s' callsign '%s' CN '%s' issuer '%s'", c->addr_rem, c->username, subject, subj_call, (subj_cn) ? subj_cn : "(none)", issuer); /* store copies of cert subject and issuer */ strncpy(c->cert_subject, subject, sizeof(c->cert_subject)); c->cert_subject[sizeof(c->cert_subject)-1] = 0; strncpy(c->cert_issuer, issuer, sizeof(c->cert_issuer)); c->cert_issuer[sizeof(c->cert_issuer)-1] = 0; fail: /* free up whatever we allocated */ X509_free(cert); if (subj_call) OPENSSL_free(subj_call); if (subj_cn) OPENSSL_free(subj_cn); return ret; } /* * Write data to an SSL socket */ int ssl_write(struct worker_t *self, struct client_t *c) { int n; int sslerr; int err; int to_write; to_write = c->obuf_end - c->obuf_start; //hlog(LOG_DEBUG, "ssl_write fd %d of %d bytes", c->fd, to_write); ssl_clear_error(); n = SSL_write(c->ssl_con->connection, c->obuf + c->obuf_start, to_write); //hlog(LOG_DEBUG, "SSL_write fd %d returned %d", c->fd, n); if (n > 0) { /* ok, we wrote some */ c->obuf_start += n; c->obuf_wtime = tick; /* All done ? */ if (c->obuf_start >= c->obuf_end) { //hlog(LOG_DEBUG, "ssl_write fd %d (%s) obuf empty", c->fd, c->addr_rem); c->obuf_start = 0; c->obuf_end = 0; /* tell the poller that we have no outgoing data */ xpoll_outgoing(&self->xp, c->xfd, 0); return n; } xpoll_outgoing(&self->xp, c->xfd, 1); return n; } sslerr = SSL_get_error(c->ssl_con->connection, n); err = (sslerr == SSL_ERROR_SYSCALL) ? errno : 0; if (sslerr == SSL_ERROR_WANT_WRITE) { hlog(LOG_INFO, "ssl_write fd %d: SSL_write wants to write again, marking socket for write events", c->fd); /* tell the poller that we have outgoing data */ xpoll_outgoing(&self->xp, c->xfd, 1); return 0; } if (sslerr == SSL_ERROR_WANT_READ) { hlog(LOG_INFO, "ssl_write fd %d: SSL_write wants to read, returning 0", c->fd); /* tell the poller that we won't be writing now, until we've read... */ xpoll_outgoing(&self->xp, c->xfd, 0); return 0; } if (err) { hlog(LOG_DEBUG, "ssl_write fd %d: I/O syscall error: %s", c->fd, strerror(err)); } else { char ebuf[255]; ERR_error_string_n(sslerr, ebuf, sizeof(ebuf)); hlog(LOG_INFO, "ssl_write fd %d failed with ret %d sslerr %u errno %d: %s (%s)", c->fd, n, sslerr, err, ebuf, ERR_reason_error_string(sslerr)); } c->ssl_con->no_wait_shutdown = 1; c->ssl_con->no_send_shutdown = 1; hlog(LOG_DEBUG, "ssl_write fd %d: SSL_write() failed", c->fd); client_close(self, c, err); return -13; } int ssl_writable(struct worker_t *self, struct client_t *c) { int to_write; to_write = c->obuf_end - c->obuf_start; //hlog(LOG_DEBUG, "ssl_writable fd %d, %d available for writing", c->fd, to_write); /* SSL_write does not appreciate writing a 0-length buffer */ if (to_write == 0) { /* tell the poller that we have no outgoing data */ xpoll_outgoing(&self->xp, c->xfd, 0); return 0; } return ssl_write(self, c); } int ssl_readable(struct worker_t *self, struct client_t *c) { int r; int sslerr, err; //hlog(LOG_DEBUG, "ssl_readable fd %d", c->fd); ssl_clear_error(); r = SSL_read(c->ssl_con->connection, c->ibuf + c->ibuf_end, c->ibuf_size - c->ibuf_end - 1); if (r > 0) { /* we got some data... process */ //hlog(LOG_DEBUG, "SSL_read fd %d returned %d bytes of data", c->fd, r); /* TODO: whatever the client_readable does */ return client_postread(self, c, r); } sslerr = SSL_get_error(c->ssl_con->connection, r); err = (sslerr == SSL_ERROR_SYSCALL) ? errno : 0; if (sslerr == SSL_ERROR_WANT_READ) { hlog(LOG_DEBUG, "ssl_readable fd %d: SSL_read wants to read again, doing it later", c->fd); if (c->obuf_end - c->obuf_start > 0) { /* tell the poller that we have outgoing data */ xpoll_outgoing(&self->xp, c->xfd, 1); } return 0; } if (sslerr == SSL_ERROR_WANT_WRITE) { hlog(LOG_INFO, "ssl_readable fd %d: SSL_read wants to write (peer starts SSL renegotiation?), calling ssl_write", c->fd); return ssl_write(self, c); } c->ssl_con->no_wait_shutdown = 1; c->ssl_con->no_send_shutdown = 1; if (sslerr == SSL_ERROR_ZERO_RETURN || ERR_peek_error() == 0) { hlog(LOG_DEBUG, "ssl_readable fd %d: peer shutdown SSL cleanly", c->fd); client_close(self, c, CLIERR_EOF); return -1; } if (err) { hlog(LOG_DEBUG, "ssl_readable fd %d: I/O syscall error: %s", c->fd, strerror(err)); } else { char ebuf[255]; ERR_error_string_n(sslerr, ebuf, sizeof(ebuf)); hlog(LOG_INFO, "ssl_readable fd %d failed with ret %d sslerr %d errno %d: %s (%s)", c->fd, r, sslerr, err, ebuf, ERR_reason_error_string(sslerr)); } client_close(self, c, err); return -1; } #endif aprx-2.9.0/ssl.h000664 000000 000000 00000004504 13040775352 013437 0ustar00rootroot000000 000000 #include "config.h" #ifdef HAVE_OPENSSL_SSL_H #define USE_SSL #endif #ifndef SSL_H #define SSL_H #ifdef USE_SSL #include #include #include #include #include /* ssl error codes, must match ssl_err_labels order */ #define SSL_VALIDATE_INTERNAL_ERROR -1 #define SSL_VALIDATE_CLIENT_CERT_UNVERIFIED -2 #define SSL_VALIDATE_NO_CLIENT_CERT -3 #define SSL_VALIDATE_CERT_NO_SUBJECT -4 #define SSL_VALIDATE_CERT_NO_CALLSIGN -5 #define SSL_VALIDATE_CERT_CALLSIGN_MISMATCH -6 struct client_t; struct worker_t; struct ssl_t { SSL_CTX *ctx; unsigned validate; }; struct ssl_connection_t { SSL *connection; unsigned handshaked:1; unsigned renegotiation:1; unsigned buffer:1; unsigned no_wait_shutdown:1; unsigned no_send_shutdown:1; unsigned validate; int ssl_err_code; }; #define NGX_SSL_SSLv2 0x0002 #define NGX_SSL_SSLv3 0x0004 #define NGX_SSL_TLSv1 0x0008 #define NGX_SSL_TLSv1_1 0x0010 #define NGX_SSL_TLSv1_2 0x0020 #define NGX_SSL_BUFFER 1 #define NGX_SSL_CLIENT 2 #define NGX_SSL_BUFSIZE 16384 /* string representations for error codes */ extern const char *ssl_strerror(int code); /* initialize and deinit the library */ extern int ssl_init(void); extern void ssl_atend(void); /* per-listener structure allocators */ extern struct ssl_t *ssl_alloc(void); extern void ssl_free(struct ssl_t *ssl); /* create context for listener, load certs */ extern int ssl_create(struct ssl_t *ssl, void *data); extern int ssl_certificate(struct ssl_t *ssl, const char *certfile, const char *keyfile); extern int ssl_ca_certificate(struct ssl_t *ssl, const char *cafile, int depth); /* create / free connection */ extern int ssl_create_connection(struct ssl_t *ssl, struct client_t *c, int i_am_client); extern void ssl_free_connection(struct client_t *c); /* validate a client certificate */ extern int ssl_validate_peer_cert_phase1(struct client_t *c); extern int ssl_validate_peer_cert_phase2(struct client_t *c); extern int ssl_write(struct worker_t *self, struct client_t *c); extern int ssl_writable(struct worker_t *self, struct client_t *c); extern int ssl_readable(struct worker_t *self, struct client_t *c); #else struct ssl_t { }; #define ssl_init(...) { } #define ssl_atend(...) { } #endif /* USE_SSL */ #endif /* SSL_H */ aprx-2.9.0/telemetry.c000664 000000 000000 00000037713 13040775352 014653 0ustar00rootroot000000 000000 /* **************************************************************** * * * * APRX -- 2nd generation APRS iGate and digi with * * minimal requirement of esoteric facilities or * * libraries of any kind beyond UNIX system libc. * * * * (c) Matti Aarnio - OH2MQK, 2007-2014 * * * * **************************************************************** */ #include "aprx.h" #define telemetry_timescaler 2 // scale to 10 minute sums static int telemetry_interval = 20 * 60; // every 20 minutes static int telemetry_labelinterval = 120*60; // every 2 hours static int telemetry_labelindex = 0; #if (defined(ERLANGSTORAGE) || (USE_ONE_MINUTE_STORAGE == 1)) static int telemetry_1min_steps = 20; #endif #if (defined(ERLANGSTORAGE) || (USE_ONE_MINUTE_STORAGE == 0)) static int telemetry_10min_steps = 2; #endif static struct timeval telemetry_time; static struct timeval telemetry_labeltime; static int telemetry_seq; static int telemetry_params; struct rftelemetry { struct aprx_interface *transmitter; struct aprx_interface **sources; int source_count; char *viapath; }; static int rftelemetrycount; static struct rftelemetry **rftelemetry; static void rf_telemetry(const struct aprx_interface *sourceaif, const char *beaconaddr, const const char *buf, const int buflen); static void telemetry_resettime(void *arg) { struct timeval *tv = (struct timeval*)arg; tv_timeradd_seconds( tv, &tick, telemetry_interval ); } static void telemetry_resetlabeltime(void *arg) { struct timeval *tv = (struct timeval*)arg; tv_timeradd_seconds( tv, &tick, 120 ); // first label 2 minutes from now } void telemetry_start() { /* * Initialize the sequence start to be highly likely * different from previous one... This really should * be in some persistent database, but this is reasonable * compromise. */ telemetry_seq = (time(NULL)) & 255; // "tick" is supposedly current time.. telemetry_resettime( &telemetry_time ); telemetry_resetlabeltime( &telemetry_labeltime ); if (debug) printf("telemetry_start()\n"); } int telemetry_prepoll(struct aprxpolls *app) { // Check that time has not jumped too far ahead/back (1.5 telemetry intervals) if (time_reset) { telemetry_resettime(&telemetry_time); telemetry_resetlabeltime(&telemetry_labeltime); } // Normal operational step if (tv_timercmp(&app->next_timeout, &telemetry_time) > 0) app->next_timeout = telemetry_time; if (tv_timercmp(&app->next_timeout, &telemetry_labeltime) > 0) app->next_timeout = telemetry_labeltime; if (debug>1) printf("telemetry_prepoll()\n"); return 0; } static void telemetry_datatx(void); static void telemetry_labeltx(void); int telemetry_postpoll(struct aprxpolls *app) { if (debug>1) { printf("telemetry_postpoll() telemetrytime=%ds labeltime=%ds\n", tv_timerdelta_millis(&tick, &telemetry_time)/1000, tv_timerdelta_millis(&tick, &telemetry_labeltime)/1000); } if (tv_timercmp(&telemetry_time, &tick) <= 0) { tv_timeradd_seconds(&telemetry_time, &telemetry_time, telemetry_interval); telemetry_datatx(); } if (tv_timercmp(&telemetry_labeltime, &tick) <= 0) { tv_timeradd_seconds(&telemetry_labeltime, &telemetry_labeltime, telemetry_labelinterval); telemetry_labeltx(); } return 0; } static void telemetry_datatx(void) { int i, j, k, t; char buf[200], *s; int buflen; char beaconaddr[60]; int beaconaddrlen; long erlmax; float erlcapa; float f; if (debug) printf("Telemetry Tx run; next one in %.2f minutes\n", (telemetry_interval/60.0)); // Init these for RF transmission buf[0] = 0x03; // AX.25 Control buf[1] = 0xF0; // AX.25 PID ++telemetry_seq; telemetry_seq %= 1000; for (i = 0; i < ErlangLinesCount; ++i) { struct erlangline *E = ErlangLines[i]; struct aprx_interface *sourceaif = find_interface_by_callsign(E->name); if (!sourceaif || !interface_is_telemetrable(sourceaif)) continue; beaconaddrlen = sprintf(beaconaddr, "%s>%s,TCPIP*", E->name, tocall); // First two bytes of BUF are for AX.25 control+PID fields s = buf+2; s += sprintf(s, "T#%03d,", telemetry_seq); // Raw Rx Erlang - plotting scale factor: 1/200 erlmax = 0; #if (USE_ONE_MINUTE_DATA == 1) // Find busiest 1 minute k = E->e1_cursor; t = E->e1_max; if (t > telemetry_1min_steps) t = telemetry_1min_steps; // Up to 10 of 1 minute samples erlcapa = 1.0 / E->erlang_capa; // 1/capa of 1 minute for (j = 0; j < t; ++j) { --k; if (k < 0) k = E->e1_max - 1; if (E->e1[k].bytes_rx > erlmax) erlmax = E->e1[k].bytes_rx; } #else // Find busiest 10 minute k = E->e10_cursor; t = E->e10_max; if (t > telemetry_10min_steps) t = telemetry_10min_steps; // Up to 1 of 10 minute samples erlcapa = 0.1 / E->erlang_capa; // 1/capa of 10 minute for (j = 0; j < t; ++j) { --k; if (k < 0) k = E->e10_max - 1; if (E->e10[k].bytes_rx > erlmax) erlmax = E->e10[k].bytes_rx; } #endif f = (200.0 * erlcapa * erlmax); s += sprintf(s, "%.1f,", f); // Raw Tx Erlang - plotting scale factor: 1/200 erlmax = 0; #if (USE_ONE_MINUTE_DATA == 1) // Find busiest 1 minute k = E->e1_cursor; t = E->e1_max; if (t > telemetry_1min_steps) t = telemetry_1min_steps; // Up to 10 of 1 minute samples erlcapa = 1.0 / E->erlang_capa; // 1/capa of 1 minute for (j = 0; j < t; ++j) { --k; if (k < 0) k = E->e1_max - 1; if (E->e1[k].bytes_tx > erlmax) erlmax = E->e1[k].bytes_tx; } #else // Find busiest 10 minute k = E->e10_cursor; t = E->e10_max; if (t > telemetry_10min_steps) t = telemetry_10min_steps; // Up to 1 of 10 minute samples erlcapa = 0.1 / E->erlang_capa; // 1/capa of 10 minute for (j = 0; j < t; ++j) { --k; if (k < 0) k = E->e10_max - 1; if (E->e10[k].bytes_tx > erlmax) erlmax = E->e10[k].bytes_tx; } #endif f = (200.0 * erlcapa * erlmax); s += sprintf(s, "%.1f,", f); erlmax = 0; #if (USE_ONE_MINUTE_DATA == 1) // Sum of 1 minute packet counts k = E->e1_cursor; t = E->e1_max; if (t > telemetry_1min_steps) t = telemetry_1min_steps; /* Up to 10 of 1 minute samples */ for (j = 0; j < t; ++j) { --k; if (k < 0) k = E->e1_max - 1; erlmax += E->e1[k].packets_rx; } #else // Sum of 10 minute packet counts erlmax = 0; k = E->e10_cursor; t = E->e10_max; if (t > telemetry_10min_steps) t = telemetry_10min_steps; // Up to 1 of 10 minute samples for (j = 0; j < t; ++j) { --k; if (k < 0) k = E->e10_max - 1; erlmax += E->e10[k].packets_rx; } #endif f = erlmax / telemetry_timescaler; s += sprintf(s, "%.1f,", f); erlmax = 0; #if (USE_ONE_MINUTE_DATA == 1) // Sum of 1 minute packet drop counts k = E->e1_cursor; t = E->e1_max; if (t > telemetry_1min_steps) t = telemetry_1min_steps; /* Up to 10 of 1 minute samples */ for (j = 0; j < t; ++j) { --k; if (k < 0) k = E->e1_max - 1; erlmax += E->e1[k].packets_rxdrop; } #else // Sum of 10 minute packet drop counts k = E->e10_cursor; t = E->e10_max; if (t > telemetry_10min_steps) t = telemetry_10min_steps; // Up to 1 of 10 minute samples for (j = 0; j < t; ++j) { --k; if (k < 0) k = E->e10_max - 1; erlmax += E->e10[k].packets_rxdrop; } #endif f = erlmax / telemetry_timescaler; s += sprintf(s, "%.1f,", f); erlmax = 0; #if (USE_ONE_MINUTE_DATA == 1) // Sum of 1 minute packet tx counts k = E->e1_cursor; t = E->e1_max; if (t > telemetry_1min_steps) t = telemetry_1min_steps; /* Up to 10 of 1 minute samples */ for (j = 0; j < t; ++j) { --k; if (k < 0) k = E->e1_max - 1; erlmax += E->e1[k].packets_tx; } #else // Sum of 10 minute packet tx counts k = E->e10_cursor; t = E->e10_max; if (t > telemetry_10min_steps) t = telemetry_10min_steps; // Up to 1 of 10 minute samples for (j = 0; j < t; ++j) { --k; if (k < 0) k = E->e10_max - 1; erlmax += E->e10[k].packets_tx; } #endif f = erlmax / telemetry_timescaler; s += sprintf(s, "%.1f,", f); /* Tail filler */ s += sprintf(s, "00000000"); // FIXME: flag telemetry? if (debug>2) printf("%s (to is=%d rf=%d) %s\n", beaconaddr, sourceaif->telemeter_to_is, sourceaif->telemeter_to_rf, buf+2); /* _NO_ ending CRLF, the APRSIS subsystem adds it. */ /* Send those (net)beacons.. */ buflen = s - buf; #ifndef DISABLE_IGATE if (sourceaif->telemeter_to_is) { aprsis_queue(beaconaddr, beaconaddrlen, qTYPE_LOCALGEN, aprsis_login, buf+2, buflen-2); } #endif rf_telemetry(sourceaif, beaconaddr, buf, buflen); } ++telemetry_params; } // Telemetry Labels are transmitted separately static void telemetry_labeltx() { int i; char buf[200], *s; int buflen; char beaconaddr[60]; int beaconaddrlen; if (debug) printf("Telemetry LabelTx run; next one in %.2f minutes\n", (telemetry_labelinterval/60.0)); // Init these for RF transmission buf[0] = 0x03; // AX.25 Control buf[1] = 0xF0; // AX.25 PID ++telemetry_seq; telemetry_seq %= 1000; for (i = 0; i < ErlangLinesCount; ++i) { struct erlangline *E = ErlangLines[i]; struct aprx_interface *sourceaif = find_interface_by_callsign(E->name); if (!sourceaif || !interface_is_telemetrable(sourceaif)) continue; beaconaddrlen = sprintf(beaconaddr, "%s>%s,TCPIP*", E->name, tocall); // First two bytes of BUF are for AX.25 control+PID fields /* Send every 5h20m or thereabouts. */ switch (telemetry_labelindex) { case 0: s = buf+2 + sprintf(buf+2, ":%-9s:PARM.Avg 10m,Avg 10m,RxPkts,IGateDropRx,TxPkts", E->name); break; case 1: s = buf+2 + sprintf(buf+2, ":%-9s:UNIT.Rx Erlang,Tx Erlang,count/10m,count/10m,count/10m", E->name); break; case 2: s = buf+2 + sprintf(buf+2, ":%-9s:EQNS.0,0.005,0,0,0.005,0,0,1,0,0,1,0,0,1,0", E->name); break; default: s = buf+2; break; } if (debug>2) printf("%s (to is=%d rf=%d) %s\n", beaconaddr, sourceaif->telemeter_to_is, sourceaif->telemeter_to_rf, buf+2); buflen = s - buf; #ifndef DISABLE_IGATE if (sourceaif->telemeter_to_is) { aprsis_queue(beaconaddr, beaconaddrlen, qTYPE_LOCALGEN, aprsis_login, buf+2, buflen-2); } #endif rf_telemetry(sourceaif, beaconaddr, buf, buflen); } ++telemetry_params; // Switch label-index.. ++telemetry_labelindex; if (telemetry_labelindex > 2) telemetry_labelindex = 0; } /* * Transmit telemetry to the RF interface that is being monitored. * Interface 'flags' contain controls on thist. */ static void rf_telemetry(const struct aprx_interface *sourceaif, const char *beaconaddr, const char *buf, const const int buflen) { int i; int t_idx; char *dest; if (rftelemetrycount == 0) return; // Nothing to do! if (sourceaif == NULL) return; // Huh? Unknown source.. if (!sourceaif->telemeter_to_rf) return; // not wanted if (!interface_is_telemetrable(sourceaif)) return; // not possible // The beaconaddr comes in as: // "interfacecall>APRXxx,TCPIP*" dest = strchr(beaconaddr, ','); if (dest != NULL) *dest = 0; dest = strchr(beaconaddr, '>'); if (dest != NULL) *dest++ = 0; if (dest == NULL) { // Impossible -- said she... return; } for (t_idx = 0; t_idx < rftelemetrycount; ++t_idx) { struct rftelemetry *rftlm = rftelemetry[t_idx]; if (rftlm == NULL) break; for (i = 0; i < rftlm->source_count; ++i) { if (rftlm->sources[i] == sourceaif) { // Found telemetry transmitter which wants this source interface_transmit_beacon(rftlm->transmitter, beaconaddr, dest, rftlm->viapath, buf, buflen); } } } } int telemetry_config(struct configfile *cf) { char *name, *param1; char *str = cf->buf; int has_fault = 0; struct aprx_interface *aif = NULL; struct aprx_interface **sources = NULL; int source_count = 0; char *viapath = NULL; while (readconfigline(cf) != NULL) { if (configline_is_comment(cf)) continue; /* Comment line, or empty line */ // It can be severely indented... str = config_SKIPSPACE(cf->buf); name = str; str = config_SKIPTEXT(str, NULL); str = config_SKIPSPACE(str); config_STRLOWER(name); param1 = str; str = config_SKIPTEXT(str, NULL); str = config_SKIPSPACE(str); if (strcmp(name, "
") == 0) break; if (strcmp(name, "transmit") == 0 || strcmp(name, "transmitter") == 0) { if (strcasecmp(param1,"$mycall") == 0) param1 = (char*)mycall; aif = find_interface_by_callsign(param1); if (aif != NULL && (!aif->tx_ok)) { aif = NULL; // Not printf("%s:%d ERROR: This transmit interface has no TX-OK TRUE setting: '%s'\n", cf->name, cf->linenum, param1); has_fault = 1; } else if (aif == NULL) { printf("%s:%d ERROR: Unknown interface: '%s'\n", cf->name, cf->linenum, param1); has_fault = 1; } } else if (strcmp(name, "via") == 0) { if (viapath != NULL) { printf("%s:%d ERROR: Double definition of 'via'\n", cf->name, cf->linenum); has_fault = 1; } else if (*param1 == 0) { printf("%s:%d ERROR: 'via' keyword without parameter\n", cf->name, cf->linenum); has_fault = 1; } if (!has_fault) { const char *check; config_STRUPPER(param1); check = tnc2_verify_callsign_format(param1, 0, 1, param1+strlen(param1)); if (check == NULL) { has_fault = 1; printf("%s:%d ERROR: The 'via %s' parameter is not acceptable AX.25 format\n", cf->name, cf->linenum, param1); } } if (!has_fault) { // Save it viapath = strdup(param1); } } else if (strcmp(name, "source") == 0) { struct aprx_interface *source_aif = NULL; if (debug) printf("%s:%d source = '%s'\n", cf->name, cf->linenum, param1); if (strcasecmp(param1,"$mycall") == 0) param1 = (char*)mycall; source_aif = find_interface_by_callsign(param1); if (source_aif == NULL) { has_fault = 1; printf("%s:%d ERROR: Digipeater source '%s' not found\n", cf->name, cf->linenum, param1); } else { // Collect them all... sources = realloc(sources, sizeof(void*)*(source_count+3)); sources[source_count++] = source_aif; sources[source_count+1] = NULL; } if (debug>1) printf(" .. source_aif = %p\n", source_aif); } else { printf("%s:%d ERROR: Unknown block keyword '%s'\n", cf->name, cf->linenum, name); } } if (has_fault) { if (sources != NULL) free(sources); if (viapath != NULL) free(viapath); printf("ERROR: Failures on defining block parameters\n"); printf(" APRS RF-Telemetry will not be activated.\n"); } else { struct rftelemetry *newrf = calloc(1, sizeof(*newrf)); newrf->transmitter = aif; newrf->viapath = viapath; newrf->sources = sources; newrf->source_count = source_count; rftelemetry = realloc(rftelemetry, sizeof(void*)*(rftelemetrycount+2)); rftelemetry[rftelemetrycount++] = newrf; if (debug) printf("Defined to transmitter %s\n", aif ? aif->callsign : "ALL"); } return has_fault; } aprx-2.9.0/test.c000664 000000 000000 00000000536 13040775352 013611 0ustar00rootroot000000 000000 #include static int aprspass(const char *mycall) { int a = 0, h = 29666, c; for (; *mycall; ++mycall) { c = 0xFF & *mycall; if (!(('0' <= c && c <= '9') || ('A' <= c && c <= 'Z'))) break; h ^= ((0xFF & *mycall) * (a ? 1 : 256)); a = !a; } return h; } main() { printf("APRSPASS: %d\n", aprspass("OH2MQK-1")); return 0; } aprx-2.9.0/timercmp.c000664 000000 000000 00000011510 13040775352 014444 0ustar00rootroot000000 000000 /* **************************************************************** * * * * APRX -- 2nd generation APRS iGate and digi with * * minimal requirement of esoteric facilities or * * libraries of any kind beyond UNIX system libc. * * * * (c) Matti Aarnio - OH2MQK, 2007-2014 * * * * **************************************************************** */ #include "aprx.h" /* Bits used only in the main program.. */ #include #ifdef HAVE_SYS_TIME_H # include #endif #ifdef HAVE_TIME_H # include #endif #include struct timeval now; // public wall clock that can jump around struct timeval tick; // monotonic clock /* * Calculate difference from now time to target time in milliseconds. */ int tv_timerdelta_millis(struct timeval *_now, struct timeval *_target) { int deltasec = _target->tv_sec - _now->tv_sec; int deltausec = _target->tv_usec - _now->tv_usec; while (deltausec < 0) { deltausec += 1000000; --deltasec; } return deltasec * 1000 + deltausec / 1000; } /* * Add milliseconds to input parameter a returning * the result though parameter ret. */ void tv_timeradd_millis(struct timeval *ret, struct timeval *a, int millis) { if (ret != a) { // Copy if different pointers.. *ret = *a; } int usec = (int)(ret->tv_usec) + millis * 1000; if (usec >= 1000000) { int dsec = (usec / 1000000); ret->tv_sec += dsec; usec %= 1000000; // if (debug>3) printf("tv_timeadd_millis() dsec=%d dusec=%d\n",dsec, usec); } ret->tv_usec = usec; } /* * Add seconds to input parameter a returning * the result though parameter ret. */ void tv_timeradd_seconds(struct timeval *ret, struct timeval *a, int seconds) { if (ret != a) { // Copy if different pointers.. *ret = *a; } ret->tv_sec += seconds; } /* * Comparison returning -1/0/+1 depending on ( a <=> b ) * * This handles overflow wraparound of Y2038 issue of 32-bit UNIX time_t. */ int timecmp(const time_t a, const time_t b) { const int i = (int)(a - b); if (i == 0) return 0; if (i > 0) return 1; return -1; } /* * Time compare function returning -1/0/+1 depending * which parameter presents time before the other. * Zero means equals. */ int tv_timercmp(struct timeval * const a, struct timeval * const b) { // if (debug>3) { // int dt_sec = a->tv_sec - b->tv_sec; // int dt_usec = a->tv_usec - b->tv_usec; // printf("tv_timercmp(%d.%06d <=> %d.%06d) dt=%d:%06d ret= ", // a->tv_sec, a->tv_usec, b->tv_sec, b->tv_usec, dt_sec, dt_usec); // } // Time delta calculation to avoid year 2038 issue const int dt = timecmp(a->tv_sec, b->tv_sec); if (dt != 0) { // if (debug>3) printf("%ds\n", dt); return dt; } // tv_usec is always in range 0 .. 999 999 if (a->tv_usec < b->tv_usec) { // if (debug>3) printf("-1u\n"); return -1; } if (a->tv_usec > b->tv_usec) { // if (debug>3) printf("1u\n"); return 1; } // if (debug>3) printf("0\n"); return 0; // equals! } /* * Compare *tv with current time value (now), and if the difference * is more than margin seconds, then call resetfunc with resetarg. * * Usually resetarg == tv, but not always. * See */ void tv_timerbounds(const char *timername, struct timeval *tv, const int margin, void (*resetfunc)(void*), void *resetarg) { // Check that system time has not jumped too far ahead/back; // that it is within margin seconds to tv. struct timeval nowminus; struct timeval nowplus; tv_timeradd_seconds(&nowminus, &tick, -margin); // If current time MINUS margin is AFTER tv, then reset. if (tv_timercmp(tv, &nowminus) < 0) { if (debug) printf("System time has gone too much forwards, Resetting timer '%s'. dt=%d margin=%d\n", timername, (int)(tv->tv_sec - nowminus.tv_sec), margin); resetfunc(resetarg); } tv_timeradd_seconds(&nowplus, &tick, margin); // If current time PLUS margin is BEFORE tv, then reset. if (tv_timercmp(&nowplus, tv) < 0) { if (debug) printf("System time has gone too much backwards, Resetting timer '%s'. dt=%d margin=%d\n", timername, (int)(nowplus.tv_sec - tv->tv_sec), margin); resetfunc(resetarg); } } aprx-2.9.0/timestamp.c000664 000000 000000 00000013137 13040775352 014636 0ustar00rootroot000000 000000 #include "aprx.h" /* Time Base Conversion Macros * * The NTP timebase is 00:00 Jan 1 1900. The local * time base is 00:00 Jan 1 1970. Convert between * these two by added or substracting 70 years * worth of time. Note that 17 of these years were * leap years. */ #define TIME_BASEDIFF (((70U*365U + 17U) * 24U*3600U)) #define TIME_NTP_TO_LOCAL(t) ((t)-TIME_BASEDIFF) #define TIME_LOCAL_TO_NTP(t) ((t)+TIME_BASEDIFF) typedef struct ntptime { uint32_t seconds; uint32_t fraction; } ntptime_t; uint64_t unix_tv_to_ntp(struct timeval *tv) { // Reciprocal conversion of tv_usec to fractional NTP seconds // Multiply tv_usec by (2^64)/1_000_000 // GCC optimized this nicely on i386 uint64_t fract = 18446744073709ULL * (uint32_t)(tv->tv_usec); // Scale it back by 32 bit positions fract >>= 32; // Straight-forward conversion of tv_sec to NTP seconds uint64_t ntptime = TIME_LOCAL_TO_NTP(tv->tv_sec); ntptime <<= 32; return ntptime + fract; } void unix_tv_to_ntp4(struct timeval *tv, ntptime_t *ntp) { // Reciprocal conversion of tv_usec to fractional NTP seconds // Multiply tv_usec by ((2^64)/1_000_000) / (2^32) // GCC optimized this nicely on i386, and 64-bit machines uint32_t fract = (18446744073709ULL * (uint32_t)(tv->tv_usec)) >> 32; // // movl 4(%ebx), %eax // imull $4294, %eax, %esi ;; 32*32->32 --> %esi // movl $-140462611, %edi // mull %edi ;; 32*32->64 --> %edx:eax // addl %edx, %esi ;; sum %esi + %edx // ntp->fraction = fract; // Straight-forward conversion of tv_sec to NTP seconds ntp->seconds = TIME_LOCAL_TO_NTP(tv->tv_sec); } void unix_tv_to_ntp4a(struct timeval *tv, ntptime_t *ntp) { // Reciprocal conversion of tv_usec to fractional NTP seconds // Multiply tv_usec by ((2^64)/1_000_000) / (2^32) // GCC optimizes this slightly better for ARM, than ntp4() // .. for i386 ntp4() and ntp4a() are equal. uint64_t fract = 18446744073709ULL * (uint32_t)(tv->tv_usec); // Scale it back by 32 bit positions fract >>= 32; ntp->fraction = (uint32_t)fract; // Straight-forward conversion of tv_sec to NTP seconds ntp->seconds = TIME_LOCAL_TO_NTP(tv->tv_sec); } uint64_t unix_tv_to_ntp2(struct timeval *tv) { uint64_t tt = TIME_LOCAL_TO_NTP(tv->tv_sec); tt <<= 32; uint64_t tu = tv->tv_usec; tu <<= 32; // Following causes gcc to call __udivdi3() // on 32-bit machines tu /= 1000000; // Fixed point scaling.. return (tt + tu); } // static const double usec2NtpFract = 4294.9672960D; // 2^32 / 1E6 uint64_t unix_tv_to_ntp3(struct timeval *tv) { uint64_t tt = TIME_LOCAL_TO_NTP(tv->tv_sec); tt <<= 32; // FP math is bad on embedded systems... // double fract = usec2NtpFract * (uint32_t)tv->tv_usec; // tt += (int64_t)fract; return tt; } static const char *BASE64EncodingDictionary = "ABCDEFGHIJKLMNOPQRSTUVWXYZ" "abcdefghijklmnopqrstuvwxyz" "0123456789" "+/"; void encode_aprsis_ntptimestamp(uint64_t ntptime, char timestamp[8]) { int i; ntptime >>= 22; // scale to 1/1024 seconds for (i = 6; i >= 0; --i) { int n = (((int)ntptime) & 0x3F); // lowest 6 bits // printf(" [n=%d]\n", n); ntptime >>= 6; timestamp[i] = BASE64EncodingDictionary[n]; } timestamp[7] = 0; } static const int8_t BASE64DecodingDictionary[128] = { -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, -1, -1, -1, -1, -1, -1, -1, -1, // ' ', '!', '"', '#' -1, -1, -1, -1, // '$', '%', '&'', '\'' -1, -1, -1, 62, // '(', ')', '*', '+', -1, -1, -1, 63, // ',', '-', '.', '/' 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, // '0' .. '9' -1, -1, -1, -1, -1, -1, // ':', ';', '<', '=', '>', '?' -1, 0, 1, 2, 3, 4, 5, 6, // '@', 'A' .. 'G' 7, 8, 9, 10, 11, 12, 13, 14, // 'H' .. 'O' 15, 16, 17, 18, 19, 20, 21, 22, // 'P' .. 'W' 23, 24, 25, -1, -1, -1, -1, -1, // 'X'..'Z', '[', '\\', ']', '^', '_' -1, 26, 27, 28, 29, 30, 31, 32, // '`', 'a' .. 'g' 33, 34, 35, 36, 37, 38, 39, 40, // 'h' .. 'o' 41, 42, 43, 44, 45, 46, 47, 48, // 'p' .. 'w' 49, 50, 51, -1, -1, -1, -1, -1 }; // 'x'..'z', ... int decode_aprsis_ntptimestamp(char timestamp[8], uint64_t *ntptimep) { uint64_t ntptime = 0; int i, n; char c; for (i = 0; i < 7; ++i) { c = timestamp[i]; if (c <= 0 || c > 127) return -1; // BARF! n = BASE64DecodingDictionary[(int)c]; // printf(" [n=%d]\n", n); if (n < 0) { // Should not happen! return -1; // Decode fail! } ntptime <<= 6; ntptime |= n; } ntptime <<= 22; *ntptimep = ntptime; return 0; // Decode OK } #ifdef TESTING int main(int argc, char *argv[]) { struct timeval tv; char timestamp[8]; uint64_t ntptime; ntptime_t ntp_time; // gettimeofday(&tv, NULL); // Example time.. (refvalue: NTPseconds!) tv.tv_sec = TIME_NTP_TO_LOCAL(3484745636U); tv.tv_usec = 709603U; ntptime = unix_tv_to_ntp(&tv); printf("NTPtime1 = %08x.%08x \n", (uint32_t)(ntptime >> 32), (uint32_t)ntptime); ntptime = unix_tv_to_ntp2(&tv); printf("NTPtime2 = %08x.%08x \n", (uint32_t)(ntptime >> 32), (uint32_t)ntptime); // ntptime = unix_tv_to_ntp3(&tv); // printf("NTPtime3 = %08x.%08x \n", (uint32_t)(ntptime >> 32), (uint32_t)ntptime); unix_tv_to_ntp4(&tv, &ntp_time); printf("NTPtime4 = %08x.%08x \n", ntp_time.seconds, ntp_time.fraction); encode_aprsis_ntptimestamp( ntptime, timestamp ); printf("Timestamp = %s\n", timestamp); int rc = decode_aprsis_ntptimestamp( timestamp, &ntptime ); printf("Decode rc=%d\n", rc); printf("NTPtime = %08x.%08x \n", (uint32_t)(ntptime >> 32), (uint32_t)ntptime); return 0; } #endif aprx-2.9.0/ttyreader.c000664 000000 000000 00000071152 13040775352 014637 0ustar00rootroot000000 000000 /* **************************************************************** * * * * APRX -- 2nd generation APRS iGate and digi with * * minimal requirement of esoteric facilities or * * libraries of any kind beyond UNIX system libc. * * * * (c) Matti Aarnio - OH2MQK, 2007-2014 * * * * **************************************************************** */ #define _SVID_SOURCE 1 #include "aprx.h" #include #include #include /* The ttyreader does read TTY ports into a big buffer, and then from there to packet frames depending on what is attached... */ static struct serialport **ttys; static int ttycount; /* How many are defined ? */ #define TTY_OPEN_RETRY_DELAY_SECS 30 static int poll_millis; /* milliseconds (0 = none.) */ static struct timeval poll_millis_tv; void hexdumpfp(FILE *fp, const uint8_t *buf, const int len, int axaddr) { int i, j; for (i = 0, j=1; i < len; ++i,++j) { int c = buf[i] & 0xFF; fprintf(fp, "%02x", c); if (j < 8) fputc(' ',fp); else { fputc('|',fp); j = 0; } } fprintf(fp, " = "); for (i = 0, j = 1; i < len; ++i,++j) { int c = buf[i] & 0xFF; /* if ((c & 0x81) == 0x80 && (i < 8)) { // Auto-trigger AX.25 address plaintext converting axaddr = 1; } */ if (axaddr && ((c & 0x01) == 1) && i > 3) { // Definitely not AX.25 address anymore.. axaddr = 0; } if (axaddr) { // Shifted AX.25 address byte? c >>= 1; } if (c < 0x20 || c > 0x7E) c = '.'; fputc(c, fp); if (j >= 8) { fputc('|',fp); j = 0; } } } /* * ttyreader_getc() -- pick one char ( >= 0 ) out of input buffer, or -1 if out of buffer */ int ttyreader_getc(struct serialport *S) { if (S->rdcursor >= S->rdlen) { /* Out of data ? */ if (S->rdcursor) S->rdcursor = S->rdlen = 0; /* printf("-\n"); */ return -1; } /* printf(" %02X", 0xFF & S->rdbuf[S->rdcursor++]); */ return (0xFF & S->rdbuf[S->rdcursor++]); } /* * ttyreader_pulltnc2() -- process a line of text by calling * TNC2 UI Monitor analyzer */ static int ttyreader_pulltnc2(struct serialport *S) { const uint8_t *p; int addrlen = 0; p = memchr(S->rdline, ':', S->rdlinelen); if (p != NULL) addrlen = (int)(p - S->rdline); erlang_add(S->ttycallsign[0], ERLANG_RX, S->rdlinelen, 1); /* Account one packet */ /* Send the frame to internal AX.25 network */ /* netax25_sendax25_tnc2(S->rdline, S->rdlinelen); */ #ifndef DISABLE_IGATE /* S->rdline[] has text line without line ending CR/LF chars */ igate_to_aprsis(S->ttycallsign[0], 0, (char *) (S->rdline), addrlen, S->rdlinelen, 0, 1); #endif return 0; } #if 0 /* * ttyreader_pullaea() -- process a line of text by calling * AEA MONITOR 1 analyzer */ static int ttyreader_pullaea(struct serialport *S) { int i; if (S->rdline[S->rdlinelen - 1] == ':') { /* Could this be the AX25 header ? */ char *s = strchr(S->rdline, '>'); if (s) { /* Ah yes, it well could be.. */ strcpy(S->rdline2, S->rdline); return; } } /* FIXME: re-arrange the S->rdline2 contained AX25 address tokens and flags.. perl code: @addrs = split('>', $rdline2); $out = shift @addrs; # pop first token in sequence $out .= '>'; $out .= pop @addrs; # pop last token in sequence foreach $a (@addrs) { # rest of the tokens in sequence, if any $out .= ',' . $a; } # now $out has address data in TNC2 sequence. */ /* printf("%s%s\n", S->rdline2, S->rdline); fflush(stdout); */ return 0; } #endif /* * ttyreader_pulltext() -- process a line of text from the serial port.. */ static int ttyreader_pulltext(struct serialport *S) { int c; const time_t rdtime = S->rdline_time; // "rdtime > now" case ("now" going backwards) is always overwritten below if (timecmp(rdtime+2, tick.tv_sec) < 0) { // A timeout has happen? Either data is added constantly, or // nothing was received from TEXT datastream for couple seconds! S->rdlinelen = 0; // S->kissstate = KISSSTATE_SYNCHUNT; } S->rdline_time = tick.tv_sec; for (;;) { c = ttyreader_getc(S); if (c < 0) return c; /* Out of input.. */ /* S->kissstate != 0: read data into S->rdline, == 0: discard data until CR|LF. Zero-size read line is discarded as well (only CR|LF on input frame) */ if (S->kissstate == KISSSTATE_SYNCHUNT) { /* Looking for CR or LF.. */ if (c == '\n' || c == '\r') S->kissstate = KISSSTATE_COLLECTING; S->rdlinelen = 0; continue; } /* Now: (S->kissstate != KISSSTATE_SYNCHUNT) */ if (c == '\n' || c == '\r') { /* End of line seen! */ if (S->rdlinelen > 0) { /* Non-zero-size string, put terminating 0 byte on it. */ S->rdline[S->rdlinelen] = 0; /* .. and process it depending .. */ if (S->linetype == LINETYPE_TNC2) { ttyreader_pulltnc2(S); #if 0 } else { /* .. it is LINETYPE_AEA ? */ ttyreader_pullaea(S); #endif } } S->rdlinelen = 0; continue; } /* Now place the char in the linebuffer, if there is space.. */ if (S->rdlinelen >= (sizeof(S->rdline) - 3)) { /* Too long ! Way too long ! */ S->kissstate = KISSSTATE_SYNCHUNT; /* Sigh.. discard it. */ S->rdlinelen = 0; continue; } /* Put it on line store: */ S->rdline[S->rdlinelen++] = c; } /* .. input loop */ return 0; /* not reached */ } /* * ttyreader_linewrite() -- write out buffered data */ void ttyreader_linewrite(struct serialport *S) { int i, len; if ((S->wrlen == 0) || (S->wrlen > 0 && S->wrcursor >= S->wrlen)) { S->wrlen = S->wrcursor = 0; /* already all written */ return; } /* Now there is some data in between wrcursor and wrlen */ len = S->wrlen - S->wrcursor; if (len > 0) i = write(S->fd, S->wrbuf + S->wrcursor, len); else i = 0; if (i > 0) { /* wrote something */ S->wrcursor += i; len = S->wrlen - S->wrcursor; if (len == 0) { S->wrcursor = S->wrlen = 0; /* wrote all ! */ } else { /* compact the buffer a bit */ memcpy(S->wrbuf, S->wrbuf + S->wrcursor, len); S->wrcursor = 0; S->wrlen = len; } } } /* * ttyreader_lineread() -- read what there is into our buffer, * and process the buffer.. */ static void ttyreader_lineread(struct serialport *S) { int i; int rdspace = sizeof(S->rdbuf) - S->rdlen; if (S->rdcursor > 0) { /* Read-out cursor is not at block beginning, is there unread data too ? */ if (S->rdlen > S->rdcursor) { /* Uh.. lets move buffer down a bit, to make room for more to the end.. */ memcpy(S->rdbuf, S->rdbuf + S->rdcursor, S->rdlen - S->rdcursor); S->rdlen = S->rdlen - S->rdcursor; } else S->rdlen = 0; /* all processed, mark its size zero */ /* Cursor to zero, rdspace recalculated */ S->rdcursor = 0; /* recalculate */ rdspace = sizeof(S->rdbuf) - S->rdlen; } if (rdspace > 0) { /* We have room to read into.. */ i = read(S->fd, S->rdbuf + S->rdlen, rdspace); if (i == 0) { /* EOF ? USB unplugged ? */ close(S->fd); S->fd = -1; tv_timeradd_seconds(&S->wait_until, &tick, TTY_OPEN_RETRY_DELAY_SECS); aprxlog("TTY %s EOF - CLOSED, WAITING %d SECS\n", S->ttyname, TTY_OPEN_RETRY_DELAY_SECS); return; } if (i < 0) /* EAGAIN or whatever.. */ return; /* Some data has been accumulated ! */ if (debug > 2) { printf("%ld\tTTY %s: read() frame: ", tick.tv_sec, S->ttyname); hexdumpfp(stdout, S->rdbuf+S->rdlen, i, 1); printf("\n"); } S->rdlen += i; S->last_read_something = tick.tv_sec; } /* Done reading, maybe. Now processing. The pullXX does read up all input, and does however many frames there are in, and pauses when there is no enough input data for a full frame/line/whatever. */ if (S->linetype == LINETYPE_KISS || S->linetype == LINETYPE_KISSFLEXNET || S->linetype == LINETYPE_KISSBPQCRC || S->linetype == LINETYPE_KISSSMACK) { kiss_pullkiss(S); #ifndef DISABLE_IGATE } else if (S->linetype == LINETYPE_DPRSGW) { dprsgw_pulldprs(S); #endif } else if (S->linetype == LINETYPE_TNC2 #if 0 || S->linetype == LINETYPE_AEA #endif ) { ttyreader_pulltext(S); } else { close(S->fd); /* Urgh ?? Bad linetype value ?? */ S->fd = -1; tv_timeradd_seconds(&S->wait_until, &tick, TTY_OPEN_RETRY_DELAY_SECS); aprxlog("TTY %s Unsupported linetype - CLOSED, WAITING %d SECS\n", S->ttyname, TTY_OPEN_RETRY_DELAY_SECS); } /* Consumed something, and our read cursor is not in the beginning ? */ if (S->rdcursor > 0 && S->rdcursor < S->rdlen) { /* Compact the input buffer! */ memcpy(S->rdbuf, S->rdbuf + S->rdcursor, S->rdlen - S->rdcursor); } S->rdlen -= S->rdcursor; S->rdcursor = 0; } /* * ttyreader_linesetup() -- open and configure the serial port */ static void ttyreader_linesetup(struct serialport *S) { int i; S->wait_until.tv_sec = 0; // Zero it just to be safe S->wait_until.tv_usec = 0; // Zero it just to be safe S->wrlen = S->wrcursor = 0; // init them at first // If NOT tcp! type socket, it is presumably openable with // open(2) instead of something else, like socket(2)... if (memcmp(S->ttyname, "tcp!", 4) != 0) { int e; // Open the serial port as RW, non-blocking, no-control-tty S->fd = open(S->ttyname, O_RDWR | O_NOCTTY | O_NONBLOCK, 0); e = errno; if (debug) { printf("%ld\tTTY %s OPEN - fd=%d - ", tick.tv_sec, S->ttyname, S->fd); if (S->fd < 0) { printf("errno=%d (%s) - ", e, strerror(e)); } } if (S->fd < 0) { /* Urgh.. an error.. */ tv_timeradd_seconds(&S->wait_until, &tick, TTY_OPEN_RETRY_DELAY_SECS); if (debug) printf("FAILED, WAITING %d SECS\n", TTY_OPEN_RETRY_DELAY_SECS); aprxlog("TTY %s failed to open; errno=%d (%s)", S->ttyname, e, strerror(e)); return; } if (debug) printf("OK\n"); aprxlog("TTY %s opened", S->ttyname); /* Set attributes */ aprx_cfmakeraw(&S->tio, 1); /* hw-flow on */ i = tcsetattr(S->fd, TCSAFLUSH, &S->tio); if (i < 0) { if (debug) printf("%ld\tERROR: TCSETATTR failed; errno=%d\n", tick.tv_sec, errno); close(S->fd); S->fd = -1; tv_timeradd_seconds(&S->wait_until, &tick, TTY_OPEN_RETRY_DELAY_SECS); aprxlog("TTY %s tcsetattr() failed. CLOSING TTY.\n", S->ttyname); return; } // FIXME: ?? Set baud-rates ? // Used system (Linux) has them in 'struct termios' so they // are now set, but other systems may have different ways.. // Flush buffers once again. i = tcflush(S->fd, TCIOFLUSH); for (i = 0; i < 16; ++i) { if (S->initstring[i] != NULL) { memcpy(S->wrbuf + S->wrlen, S->initstring[i], S->initlen[i]); S->wrlen += S->initlen[i]; } } /* Flush it out.. and if not successfull, poll(2) will take care of it soon enough.. */ ttyreader_linewrite(S); } else { /* socket connection to remote TTY.. */ /* "tcp!hostname-or-ip!port!opt-parameters" */ char *par = strdup(S->ttyname); char *host = NULL, *port = NULL, *opts = NULL; struct addrinfo req, *ai; int i; if (debug) printf("socket connect() preparing: %s\n", par); while (1) { host = strchr(par, '!'); if (host) ++host; else break; /* Found no '!' ! */ port = strchr(host, '!'); if (port) *port++ = 0; else break; /* Found no '!' ! */ opts = strchr(port, '!'); if (opts) *opts++ = 0; break; } if (!port) { /* Still error condition.. no port data */ } memset(&req, 0, sizeof(req)); req.ai_socktype = SOCK_STREAM; req.ai_protocol = IPPROTO_TCP; req.ai_flags = 0; #if 1 req.ai_family = AF_UNSPEC; /* IPv4 and IPv6 are both OK */ #else req.ai_family = AF_INET; /* IPv4 only */ #endif ai = NULL; i = getaddrinfo(host, port, &req, &ai); if (ai) { S->fd = socket(ai->ai_family, SOCK_STREAM, 0); if (S->fd >= 0) { fd_nonblockingmode(S->fd); i = connect(S->fd, ai->ai_addr, ai->ai_addrlen); if ((i != 0) && (errno != EINPROGRESS)) { /* non-blocking connect() yields EINPROGRESS, anything else and we fail entirely... */ if (debug) printf("ttyreader socket connect call failed: %d : %s\n", errno, strerror(errno)); close(S->fd); S->fd = -1; aprxlog("TTY %s Socket open failed.\n", S->ttyname); } } freeaddrinfo(ai); } free(par); } S->last_read_something = tick.tv_sec; /* mark the timeout for future.. */ S->rdlen = S->rdcursor = S->rdlinelen = 0; S->kissstate = KISSSTATE_SYNCHUNT; memset( S->smack_probe, 0, sizeof(S->smack_probe) ); S->smack_subids = 0; } /* * ttyreader_init() */ void ttyreader_init(void) { /* nothing.. */ } /* * ttyreader_prepoll() -- prepare system for next round of polling */ int ttyreader_prepoll(struct aprxpolls *app) { int idx = 0; /* returns number of *fds filled.. */ int i; struct serialport *S; struct pollfd *pfd; if (poll_millis_tv.tv_sec == 0) { poll_millis_tv = tick; } // if (debug) printf("ttyreader_prepoll() %d\n", poll_millis); for (i = 0; i < ttycount; ++i) { S = ttys[i]; if (!S->ttyname) continue; /* No name, no look... */ #if 0 // occasional debug mode without real hardware at hand if (poll_millis > 0) { int deltams = tv_timerdelta_millis(&tick, &poll_millis_tv); struct timeval tv; if (debug) printf("%d.%06d .. defining %d ms KISS POLL\n", tick.tv_sec, tick.tv_usec, poll_millis); } #endif if (S->fd < 0) { if (time_reset && (S->wait_until.tv_sec != 0)) { // System time jumped, reset it to NOW. S->wait_until = tick; } /* Not an open TTY, but perhaps waiting ? */ if ((S->wait_until.tv_sec != 0) && tv_timercmp( &S->wait_until, &tick) > 0) { /* .. waiting for future! */ if (tv_timercmp( &app->next_timeout, &S->wait_until ) > 0) { app->next_timeout = S->wait_until; } /* .. but only until our timeout, if it is sooner than global one. */ continue; /* Waiting on this one.. */ } /* Waiting or not, FD is not open, and deadline is past. Lets try to open! */ ttyreader_linesetup(S); } /* .. No open FD */ /* Still no open FD ? */ if (S->fd < 0) continue; // FD is open, check read/idle timeout ... if (time_reset) { // System time has jumped, Reset the read time to NOW. S->last_read_something = tick.tv_sec; } // FD is open, check read/idle timeout ... if ((S->read_timeout > 0) && timecmp(tick.tv_sec, (S->last_read_something + S->read_timeout)) > 0) { if (debug) printf("%ld\tRead timeout on %s; %d seconds w/o input. fd=%d\n", tick.tv_sec, S->ttyname, S->read_timeout, S->fd); close(S->fd); /* Close and mark for re-open */ S->fd = -1; tv_timeradd_seconds( &S->wait_until, &tick, TTY_OPEN_RETRY_DELAY_SECS); aprxlog("TTY %s read timeout. Closing TTY for later re-open.\n", S->ttyname); continue; } if (poll_millis > 0) { int margin = poll_millis*2; // Limit large delta time to within 0..2*poll_millis. int deltams = tv_timerdelta_millis(&tick, &poll_millis_tv); if (deltams > margin) deltams = poll_millis; if (deltams < -margin) deltams = poll_millis; tv_timeradd_millis(&poll_millis_tv, &tick, deltams); if (debug) printf("%ld.%06d .. defining %d ms KISS POLL\n", (long)tick.tv_sec, (int)tick.tv_usec, poll_millis); } /* FD is open, lets mark it for poll read.. */ pfd = aprxpolls_new(app); pfd->fd = S->fd; pfd->events = POLLIN | POLLPRI; pfd->revents = 0; if (S->wrlen > 0 && S->wrlen > S->wrcursor) pfd->events |= POLLOUT; ++idx; } return idx; } /* * ttyreader_postpoll() -- Done polling, what happened ? */ int ttyreader_postpoll(struct aprxpolls *app) { int idx, i; struct serialport *S; struct pollfd *P; // if (debug) printf("ttyreader_postpoll()\n"); for (idx = 0, P = app->polls; idx < app->pollcount; ++idx, ++P) { // Are we operating in active KISS polling mode? if (poll_millis > 0) { for (i = 0; i < ttycount; ++i) { S = ttys[i]; #if 0 // occasional debug mode without real hardware at hand if (tv_timercmp(&poll_millis_tv, &tick) <= 0) { // Poll interval gone, time for next active POLL request! kiss_poll(S); tv_timeradd_millis(&poll_millis_tv, &poll_millis_tv, poll_millis); } #endif if (S->fd != P->fd) continue; /* Not this one ? */ if (S->fd < 0) continue; /* Not this one ? */ if (!(S->linetype == LINETYPE_KISS || S->linetype == LINETYPE_KISSFLEXNET || S->linetype == LINETYPE_KISSBPQCRC || S->linetype == LINETYPE_KISSSMACK)) { // Not a KISS line.. continue; } if (tv_timercmp(&poll_millis_tv, &tick) <= 0) { // Poll interval gone, time for next active POLL request! kiss_poll(S); tv_timeradd_millis(&poll_millis_tv, &poll_millis_tv, poll_millis); } } } for (i = 0; i < ttycount; ++i) { S = ttys[i]; if (S->fd != P->fd) continue; /* Not this one ? */ /* It is this one! */ if (P->revents & POLLOUT) ttyreader_linewrite(S); if (P->revents & (POLLIN | POLLPRI | POLLERR | POLLHUP)) ttyreader_lineread(S); } } return 0; } /* * Make a pre-existing termios structure into "raw" mode: character-at-a-time * mode with no characters interpreted, 8-bit data path. */ void aprx_cfmakeraw(t, f) struct termios *t; { t->c_iflag &= ~(IMAXBEL|IXOFF|INPCK|BRKINT|PARMRK|ISTRIP|INLCR|IGNCR|ICRNL|IXON|IGNPAR); t->c_iflag |= IGNBRK; t->c_oflag &= ~OPOST; if (f) { t->c_oflag |= CRTSCTS; } else { t->c_oflag &= ~CRTSCTS; } t->c_lflag &= ~(ECHO|ECHOE|ECHOK|ECHONL|ICANON|ISIG|IEXTEN|NOFLSH|TOSTOP|PENDIN); t->c_cflag &= ~(CSIZE|PARENB); t->c_cflag |= CS8|CREAD; t->c_cc[VMIN] = 80; t->c_cc[VTIME] = 3; } struct serialport *ttyreader_new(void) { struct serialport *tty = calloc(1, sizeof(*tty)); int baud = B1200; tty->fd = -1; tv_timeradd_seconds( &tty->wait_until, &tick, -1); /* begin opening immediately */ tty->last_read_something = tick.tv_sec; /* well, not really.. */ tty->linetype = LINETYPE_KISS; /* default */ tty->kissstate = KISSSTATE_SYNCHUNT; tty->read_timeout = 3600; /* Default port read timeout is 60 minutes. */ tty->ttyname = NULL; /* setup termios parameters for this line.. */ aprx_cfmakeraw(&tty->tio, 0); tty->tio.c_cc[VMIN] = 80; /* pick at least one char .. */ tty->tio.c_cc[VTIME] = 3; /* 0.3 seconds timeout - 36 chars @ 1200 baud */ tty->tio.c_cflag |= (CREAD | CLOCAL); cfsetispeed(&tty->tio, baud); cfsetospeed(&tty->tio, baud); return tty; } /* * Parse tty related parameters, return 0 for OK, 1 for error */ int ttyreader_parse_nullparams(struct configfile *cf, struct serialport *tty, char *str) { char *param1 = 0; int has_fault = 0; /* FIXME: analyze correct serial port data and parity format settings, now hardwired to 8-n-1 -- does not work without for KISS anyway.. */ config_STRLOWER(str); /* until end of line */ /* Optional parameters */ while (*str != 0) { param1 = str; str = config_SKIPTEXT(str, NULL); str = config_SKIPSPACE(str); if (debug) printf(" .. param='%s'",param1); /* Note: param1 is now lower-case string */ if (strcmp(param1, "pollmillis") == 0) { param1 = str; str = config_SKIPTEXT(str, NULL); str = config_SKIPSPACE(str); tty->poll_millis = atol(param1); // milliseconds if (poll_millis == 0) poll_millis = tty->poll_millis; if (tty->poll_millis < poll_millis) poll_millis = tty->poll_millis; if (poll_millis < 1 || poll_millis > 10000) { has_fault = 1; printf("%s:%d POLLMILLIS value not in sanity range of 1 to 10 000: '%s'", cf->name, cf->linenum, param1); } else { if (debug) printf(" .. pollmillis %d -- polling interval\n", tty->poll_millis); } } else { printf("%s:%d ERROR: Unknown sub-keyword on a serial/tcp device configuration: '%s'\n", cf->name, cf->linenum, param1); has_fault = 1; } } if (debug) printf("\n"); return has_fault; } /* * Parse tty related parameters, return 0 for OK, 1 for error */ int ttyreader_parse_ttyparams(struct configfile *cf, struct serialport *tty, char *str) { int i; speed_t baud; int tncid = 0; char *param1 = 0; int has_fault = 0; /* FIXME: analyze correct serial port data and parity format settings, now hardwired to 8-n-1 -- does not work without for KISS anyway.. */ config_STRLOWER(str); /* until end of line */ /* Optional parameters */ while (*str != 0) { param1 = str; str = config_SKIPTEXT(str, NULL); str = config_SKIPSPACE(str); if (debug) printf(" .. param='%s'",param1); /* See if it is baud-rate ? */ i = atol(param1); /* serial port speed - baud rate */ baud = B1200; switch (i) { case 1200: baud = B1200; break; #ifdef B1800 case 1800: baud = B1800; break; #endif case 2400: baud = B2400; break; case 4800: baud = B4800; break; case 9600: baud = B9600; break; #ifdef B19200 case 19200: baud = B19200; break; #endif #ifdef B38400 case 38400: baud = B38400; break; #endif #ifdef B57600 case 57600: baud = B57600; break; #endif #ifdef B115200 case 115200: baud = B115200; break; #endif #ifdef B230400 case B230400: baud = B230400; break; #endif #ifdef B460800 case 460800: baud = B460800; break; #endif #ifdef B500000 case 500000: baud = B500000; break; #endif #ifdef B576000 case 576000: baud = B576000; break; #endif default: i = -1; break; } if (baud != B1200) { cfsetispeed(&tty->tio, baud); cfsetospeed(&tty->tio, baud); } /* Note: param1 is now lower-case string */ if (i > 0) { ; } else if (strcmp(param1, "8n1") == 0) { /* default behaviour, ignore */ } else if (strcmp(param1, "kiss") == 0) { tty->linetype = LINETYPE_KISS; /* plain basic KISS */ } else if (strcmp(param1, "xorsum") == 0) { tty->linetype = LINETYPE_KISSBPQCRC; /* KISS with BPQ "CRC" */ } else if (strcmp(param1, "xkiss") == 0) { tty->linetype = LINETYPE_KISSBPQCRC; /* KISS with BPQ "CRC" */ } else if (strcmp(param1, "bpqcrc") == 0) { tty->linetype = LINETYPE_KISSBPQCRC; /* KISS with BPQ "CRC" */ } else if (strcmp(param1, "flexnet") == 0) { tty->linetype = LINETYPE_KISSFLEXNET; /* KISS with FLEXNET's CRC16 */ } else if (strcmp(param1, "smack") == 0) { tty->linetype = LINETYPE_KISSSMACK; /* KISS with SMACK / CRC16 */ } else if (strcmp(param1, "crc16") == 0) { tty->linetype = LINETYPE_KISSSMACK; /* KISS with SMACK / CRC16 */ } else if (strcmp(param1, "poll") == 0) { /* FIXME: Some systems want polling... */ } else if (strcmp(param1, "callsign") == 0 || strcmp(param1, "alias") == 0) { param1 = str; str = config_SKIPTEXT(str, NULL); str = config_SKIPSPACE(str); config_STRUPPER(param1); tty->ttycallsign[tncid] = strdup(param1); #ifdef PF_AX25 /* PF_AX25 exists -- highly likely a Linux system ! */ tty->netax25[tncid] = netax25_open(param1); #endif /* Use side-effect: this defines the tty into erlang accounting */ erlang_set(param1, /* Heuristic constant for max channel capa.. */ (int) ((1200.0 * 60) / 8.2)); } else if (strcmp(param1, "timeout") == 0) { param1 = str; str = config_SKIPTEXT(str, NULL); str = config_SKIPSPACE(str); tty->read_timeout = atol(param1); } else if (strcmp(param1, "tncid") == 0) { param1 = str; str = config_SKIPTEXT(str, NULL); str = config_SKIPSPACE(str); tncid = atoi(param1); if (tncid < 0 || tncid > 15) { tncid = 0; printf("%s:%d TNCID value not in sanity range of 0 to 15: '%s'", cf->name, cf->linenum, param1); has_fault = 1; } } else if (strcmp(param1, "pollmillis") == 0) { param1 = str; str = config_SKIPTEXT(str, NULL); str = config_SKIPSPACE(str); tty->poll_millis = atol(param1); // milliseconds if (poll_millis == 0) poll_millis = tty->poll_millis; if (tty->poll_millis < poll_millis) poll_millis = tty->poll_millis; if (poll_millis < 1 || poll_millis > 10000) { has_fault = 1; printf("%s:%d POLLMILLIS value not in sanity range of 1 to 10 000: '%s'", cf->name, cf->linenum, param1); } else { if (debug) printf(" .. pollmillis %d -- polling interval\n", tty->poll_millis); } #ifndef DISABLE_IGATE } else if (strcmp(param1, "tnc2") == 0) { tty->linetype = LINETYPE_TNC2; /* TNC2 monitor */ } else if (strcmp(param1, "dprs") == 0) { tty->linetype = LINETYPE_DPRSGW; #endif } else if (strcmp(param1, "initstring") == 0) { int parlen; param1 = str; str = config_SKIPTEXT(str, &parlen); str = config_SKIPSPACE(str); tty->initlen[tncid] = parlen; tty->initstring[tncid] = malloc(parlen); memcpy(tty->initstring[tncid], param1, parlen); if (debug) printf("initstring len=%d\n",parlen); } else { printf("%s:%d ERROR: Unknown sub-keyword on a serial/tcp device configuration: '%s'\n", cf->name, cf->linenum, param1); has_fault = 1; } } if (debug) printf("\n"); return has_fault; } void ttyreader_register(struct serialport *tty) { /* Grow the array as is needed.. - this is array of pointers, not array of blocks so that memory allocation does not grow into way too big chunks. */ ttys = realloc(ttys, sizeof(void *) * (ttycount + 1)); ttys[ttycount++] = tty; } const char *ttyreader_serialcfg(struct configfile *cf, char *param1, char *str) { /* serialport /dev/ttyUSB123 19200 8n1 {KISS|TNC2|AEA|..} */ struct serialport *tty; /* radio serial /dev/ttyUSB123 [19200 [8n1]] KISS radio tcp 12.34.56.78 4001 KISS */ if (*param1 == 0) return "Bad mode keyword"; if (*str == 0) return "Bad tty-name/param"; tty = ttyreader_new(); ttyreader_register(tty); if (strcmp(param1, "serial") == 0) { /* New style! */ free((char *) (tty->ttyname)); param1 = str; str = config_SKIPTEXT(str, NULL); str = config_SKIPSPACE(str); tty->ttyname = strdup(param1); if (debug) printf(".. new style serial: '%s' '%s'..\n", tty->ttyname, str); } else if (strcmp(param1, "tcp") == 0) { /* New style! */ int len; char *host, *port; free((char *) (tty->ttyname)); host = str; str = config_SKIPTEXT(str, NULL); str = config_SKIPSPACE(str); port = str; str = config_SKIPTEXT(str, NULL); str = config_SKIPSPACE(str); if (debug) printf(".. new style tcp!: '%s' '%s' '%s'..\n", host, port, str); len = strlen(host) + strlen(port) + 8; tty->ttyname = malloc(len); sprintf((char *) (tty->ttyname), "tcp!%s!%s!", host, port); } if (ttyreader_parse_ttyparams( cf, tty, str)) return "Bad ttyparameters"; return NULL; // All OK } aprx-2.9.0/valgrind.c000664 000000 000000 00000005143 13040775352 014437 0ustar00rootroot000000 000000 /* **************************************************************** * * * * APRX -- 2nd generation APRS iGate and digi with * * minimal requirement of esoteric facilities or * * libraries of any kind beyond UNIX system libc. * * * * (c) Matti Aarnio - OH2MQK, 2007-2014 * * * * **************************************************************** */ #ifdef _FOR_VALGRIND_ #include "aprx.h" /* * High-efficiency algorithms used by libc cause terrible complaints * from valgrind.. * * These naive single char at the time things don't go reading into * uninitialized areas.. * */ int memcmp(const void *p1, const void *p2, size_t n) { const char *s1 = p1; const char *s2 = p2; for( ; n > 0 && *s1 == *s2 ; ++s1, ++s2, --n ) ; if (n == 0) return 0; return (*s1 - *s2); } void *memcpy(void *dest, const void *src, size_t n) { char *p = dest; const char *s = src; for ( ; n > 0; --n ) { *p++ = *s++; } return dest; } size_t strlen(const char *p) { size_t i; for ( i = 0; *p != 0; ++p, ++i ) ; return i; } char *strdup(const char *s) { int len = strlen(s)+1; char *p = malloc(len); memcpy(p, s, len); return p; } int strcmp(const char *s1, const char *s2) { for( ; *s1 && *s2 && *s1 == *s2 ; ++s1, ++s2 ) ; if (*s1 == 0 && *s2 == 0) return 0; if (*s1 == 0) return -1; if (*s2 == 0) return 1; return (*s1 - *s2); } int strncmp(const char *s1, const char *s2, size_t n) { for( ; n > 0 && *s1 && *s2 && *s1 == *s2 ; ++s1, ++s2, --n ) ; if (n == 0) return 0; if (*s1 == 0) return -1; if (*s2 == 0) return 1; return (*s1 - *s2); } char *strcpy(char *dest, const char *src) { char *p = dest; while (*src != 0) { *p++ = *src++; } return dest; } char *strncpy(char *dest, const char *src, size_t n) { char *p = dest; for (;*src != 0 && n > 0; --n) { *p++ = *src++; } return dest; } void *memchr(const void *s, int c, size_t n) { const unsigned char *p = s; c &= 0xFF; for (p = s; n > 0; --n, ++p) { if (*p == c) return (void*)p; } return NULL; } void *memrchr(const void *s, int c, size_t n) { const unsigned char *p = s; c &= 0xFF; for (p = s+n; n > 0; --n, --p) { if (*p == c) return (void*)p; } return NULL; } char *strchr(const char *s, int c) { c &= 0xFF; for (; *s != 0; ++s) { if (((*s) & 0xFF) == c) return (char*)s; } return NULL; } #endif