From 9116158c3091065ed0ddcb569209119ed98b4fed Mon Sep 17 00:00:00 2001 From: LaMont Jones Date: Thu, 15 May 2008 17:19:35 -0600 Subject: 9.5.0rc1 --- CHANGES | 133 +- FAQ | 21 +- FAQ.xml | 37 +- README | 16 +- bin/dig/dig.c | 97 +- bin/dig/dighost.c | 25 +- bin/dig/host.1 | 8 +- bin/dig/host.docbook | 7 +- bin/dig/host.html | 14 +- bin/dig/include/dig/dig.h | 31 +- bin/named/Makefile.in | 4 +- bin/named/bind9.xsl | 379 +- bin/named/bind9.xsl.h | 699 +- bin/named/client.c | 159 +- bin/named/config.c | 5 +- bin/named/convertxsl.pl | 60 +- bin/named/include/named/client.h | 11 +- bin/named/include/named/server.h | 57 +- bin/named/include/named/statschannel.h | 8 +- bin/named/main.c | 11 +- bin/named/query.c | 74 +- bin/named/server.c | 151 +- bin/named/statschannel.c | 638 +- bin/named/unix/os.c | 108 +- bin/named/update.c | 141 +- bin/named/xfrout.c | 87 +- bin/named/zoneconf.c | 37 +- bin/tests/system/ifconfig.sh | 10 +- bin/tests/system/ixfr/ns1/.exists | 0 bin/tests/system/rrsetorder/clean.sh | 5 +- bin/tests/system/rrsetorder/dig.out.cyclic.good1 | 4 - bin/tests/system/rrsetorder/dig.out.cyclic.good2 | 4 - bin/tests/system/rrsetorder/dig.out.cyclic.good3 | 4 - bin/tests/system/rrsetorder/dig.out.cyclic.good4 | 4 - bin/tests/system/rrsetorder/tests.sh | 247 +- config.h.in | 11 +- config.h.win32 | 12 +- configure | 166 +- configure.in | 32 +- contrib/query-loc-0.3.0/ADDRESSES | 18 - contrib/query-loc-0.3.0/ALGO | 48 - contrib/query-loc-0.3.0/INSTALL | 9 - contrib/query-loc-0.3.0/Makefile.in | 40 - contrib/query-loc-0.3.0/README | 20 - contrib/query-loc-0.3.0/USAGE | 8 - contrib/query-loc-0.3.0/config.h.in | 69 - contrib/query-loc-0.3.0/configure | 6436 ---------- contrib/query-loc-0.3.0/configure.in | 65 - contrib/query-loc-0.3.0/install-sh | 251 - contrib/query-loc-0.3.0/loc.c | 566 - contrib/query-loc-0.3.0/loc.h | 78 - contrib/query-loc-0.3.0/loc_ntoa.c | 248 - contrib/query-loc-0.3.0/query-loc.1 | 55 - contrib/query-loc-0.3.0/query-loc.c | 98 - contrib/query-loc-0.4.0/ADDRESSES | 16 + contrib/query-loc-0.4.0/ALGO | 48 + contrib/query-loc-0.4.0/INSTALL | 9 + contrib/query-loc-0.4.0/Makefile.in | 42 + contrib/query-loc-0.4.0/README | 21 + contrib/query-loc-0.4.0/USAGE | 7 + contrib/query-loc-0.4.0/config.h.in | 69 + contrib/query-loc-0.4.0/configure | 6436 ++++++++++ contrib/query-loc-0.4.0/configure.in | 65 + contrib/query-loc-0.4.0/install-sh | 323 + contrib/query-loc-0.4.0/loc.c | 590 + contrib/query-loc-0.4.0/loc.h | 78 + contrib/query-loc-0.4.0/loc_ntoa.c | 248 + contrib/query-loc-0.4.0/query-loc.1 | 55 + contrib/query-loc-0.4.0/query-loc.c | 98 + contrib/query-loc-0.4.0/reconf | 8 + doc/arm/Bv9ARM-book.xml | 1468 ++- doc/arm/Bv9ARM.ch01.html | 52 +- doc/arm/Bv9ARM.ch02.html | 22 +- doc/arm/Bv9ARM.ch03.html | 26 +- doc/arm/Bv9ARM.ch04.html | 70 +- doc/arm/Bv9ARM.ch05.html | 6 +- doc/arm/Bv9ARM.ch06.html | 1552 ++- doc/arm/Bv9ARM.ch07.html | 14 +- doc/arm/Bv9ARM.ch08.html | 18 +- doc/arm/Bv9ARM.ch09.html | 180 +- doc/arm/Bv9ARM.html | 152 +- doc/arm/Bv9ARM.pdf | 14084 +++++++++++---------- doc/arm/man.dig.html | 20 +- doc/arm/man.dnssec-keygen.html | 14 +- doc/arm/man.dnssec-signzone.html | 12 +- doc/arm/man.host.html | 12 +- doc/arm/man.named-checkconf.html | 12 +- doc/arm/man.named-checkzone.html | 12 +- doc/arm/man.named.html | 16 +- doc/arm/man.rndc-confgen.html | 12 +- doc/arm/man.rndc.conf.html | 12 +- doc/arm/man.rndc.html | 12 +- doc/misc/migration | 14 +- doc/misc/options | 33 +- lib/bind/api | 6 +- lib/bind/bsd/Makefile.in | 6 +- lib/bind/bsd/strerror.c | 6 +- lib/bind/bsd/strtoul.c | 10 +- lib/bind/config.h.in | 7 + lib/bind/configure | 1533 ++- lib/bind/configure.in | 214 +- lib/bind/dst/Makefile.in | 6 +- lib/bind/include/arpa/nameser.h | 5 +- lib/bind/include/isc/misc.h | 3 +- lib/bind/include/netdb.h | 4 +- lib/bind/include/resolv.h | 6 +- lib/bind/inet/Makefile.in | 6 +- lib/bind/irs/Makefile.in | 6 +- lib/bind/irs/getnetgrent.c | 6 +- lib/bind/irs/getnetgrent_r.c | 81 +- lib/bind/irs/irp.c | 5 +- lib/bind/isc/Makefile.in | 6 +- lib/bind/isc/ctl_clnt.c | 5 +- lib/bind/isc/ctl_srvr.c | 5 +- lib/bind/isc/logging.c | 12 +- lib/bind/nameser/Makefile.in | 6 +- lib/bind/port_after.h.in | 109 +- lib/bind/port_before.h.in | 31 +- lib/bind/resolv/Makefile.in | 6 +- lib/bind/resolv/res_debug.c | 55 +- lib/bind/resolv/res_mkquery.c | 66 +- lib/bind/resolv/res_query.c | 14 +- lib/bind9/api | 2 +- lib/bind9/check.c | 134 +- lib/dns/acache.c | 48 +- lib/dns/acl.c | 4 +- lib/dns/adb.c | 5598 ++++---- lib/dns/api | 4 +- lib/dns/cache.c | 1502 ++- lib/dns/db.c | 30 +- lib/dns/dispatch.c | 362 +- lib/dns/dst_api.c | 5 +- lib/dns/gssapi_link.c | 8 +- lib/dns/gssapictx.c | 53 +- lib/dns/include/dns/adb.h | 13 +- lib/dns/include/dns/db.h | 30 +- lib/dns/include/dns/dispatch.h | 29 +- lib/dns/include/dns/message.h | 16 +- lib/dns/include/dns/peer.h | 15 +- lib/dns/include/dns/rdatalist.h | 25 +- lib/dns/include/dns/resolver.h | 11 +- lib/dns/include/dns/stats.h | 273 +- lib/dns/include/dns/types.h | 4 +- lib/dns/include/dns/view.h | 70 +- lib/dns/include/dns/zone.h | 66 +- lib/dns/masterdump.c | 20 +- lib/dns/message.c | 61 +- lib/dns/name.c | 25 +- lib/dns/peer.c | 61 +- lib/dns/rbt.c | 17 +- lib/dns/rbtdb.c | 12724 +++++++++---------- lib/dns/rdata/generic/txt_16.c | 6 +- lib/dns/rdata/in_1/naptr_35.c | 12 +- lib/dns/rdatalist.c | 14 +- lib/dns/rdataslab.c | 18 +- lib/dns/resolver.c | 316 +- lib/dns/rootns.c | 48 +- lib/dns/sdb.c | 3 +- lib/dns/sdlz.c | 11 +- lib/dns/spnego.c | 195 +- lib/dns/stats.c | 452 +- lib/dns/tkey.c | 8 +- lib/dns/validator.c | 34 +- lib/dns/view.c | 83 +- lib/dns/win32/libdns.def | 34 +- lib/dns/zone.c | 232 +- lib/isc/api | 4 +- lib/isc/include/isc/mem.h | 142 +- lib/isc/mem.c | 292 +- lib/isc/print.c | 93 +- lib/isc/pthreads/mutex.c | 76 +- lib/isc/task.c | 32 +- lib/isc/unix/socket.c | 19 +- lib/isc/unix/time.c | 8 +- lib/isc/win32/include/isc/platform.h | 13 +- lib/isc/win32/interfaceiter.c | 234 +- lib/isc/win32/libisc.def | 4 + lib/isc/win32/net.c | 63 +- lib/isc/win32/socket.c | 37 +- lib/isccfg/api | 2 +- lib/isccfg/namedconf.c | 117 +- make/rules.in | 6 +- version | 6 +- 183 files changed, 35377 insertions(+), 28136 deletions(-) delete mode 100644 bin/tests/system/ixfr/ns1/.exists delete mode 100644 bin/tests/system/rrsetorder/dig.out.cyclic.good1 delete mode 100644 bin/tests/system/rrsetorder/dig.out.cyclic.good2 delete mode 100644 bin/tests/system/rrsetorder/dig.out.cyclic.good3 delete mode 100644 bin/tests/system/rrsetorder/dig.out.cyclic.good4 delete mode 100644 contrib/query-loc-0.3.0/ADDRESSES delete mode 100644 contrib/query-loc-0.3.0/ALGO delete mode 100644 contrib/query-loc-0.3.0/INSTALL delete mode 100644 contrib/query-loc-0.3.0/Makefile.in delete mode 100644 contrib/query-loc-0.3.0/README delete mode 100644 contrib/query-loc-0.3.0/USAGE delete mode 100644 contrib/query-loc-0.3.0/config.h.in delete mode 100755 contrib/query-loc-0.3.0/configure delete mode 100644 contrib/query-loc-0.3.0/configure.in delete mode 100755 contrib/query-loc-0.3.0/install-sh delete mode 100644 contrib/query-loc-0.3.0/loc.c delete mode 100644 contrib/query-loc-0.3.0/loc.h delete mode 100644 contrib/query-loc-0.3.0/loc_ntoa.c delete mode 100644 contrib/query-loc-0.3.0/query-loc.1 delete mode 100644 contrib/query-loc-0.3.0/query-loc.c create mode 100644 contrib/query-loc-0.4.0/ADDRESSES create mode 100644 contrib/query-loc-0.4.0/ALGO create mode 100644 contrib/query-loc-0.4.0/INSTALL create mode 100644 contrib/query-loc-0.4.0/Makefile.in create mode 100644 contrib/query-loc-0.4.0/README create mode 100644 contrib/query-loc-0.4.0/USAGE create mode 100644 contrib/query-loc-0.4.0/config.h.in create mode 100755 contrib/query-loc-0.4.0/configure create mode 100644 contrib/query-loc-0.4.0/configure.in create mode 100755 contrib/query-loc-0.4.0/install-sh create mode 100644 contrib/query-loc-0.4.0/loc.c create mode 100644 contrib/query-loc-0.4.0/loc.h create mode 100644 contrib/query-loc-0.4.0/loc_ntoa.c create mode 100644 contrib/query-loc-0.4.0/query-loc.1 create mode 100644 contrib/query-loc-0.4.0/query-loc.c create mode 100755 contrib/query-loc-0.4.0/reconf diff --git a/CHANGES b/CHANGES index 2e3e8dba..837eb455 100644 --- a/CHANGES +++ b/CHANGES @@ -1,6 +1,129 @@ + --- 9.5.0rc1 released --- + +2368. [port] Linux: use libcap for capability management if + possible. [RT# 18026] + +2367. [bug] Improve counting of dns_resstatscounter_retry + [RT #18030] + +2366. [bug] Adb shutdown race. [RT #18021] + +2365. [bug] Fix a bug that caused dns_acl_isany() to return + spurious results. [RT #18000] + +2364. [bug] named could trigger a assertion when serving a + malformed signed zone. [RT #17828] + +2363. [port] sunos: pre-set "lt_cv_sys_max_cmd_len=4096;". + [RT #17513] + +2362. [cleanup] Make "rrset-order fixed" a compile-time option. + settable by "./configure --enable-fixed-rrset". + Disabled by default. [RT #17977] + +2361. [bug] "recursion" statistics counter could be counted + multiple times for a single query. [RT #17990] + + --- 9.5.0b3 released --- + +2360. [bug] Fix a condition where we release a database version + (which may acquire a lock) while holding the lock. + +2359. [bug] Fix NSID bug. [RT #17942] + +2358. [doc] Update host's default query description. [RT #17934] + +2356. [bug] Builtin mutex profiler was not scalable enough. + [RT #17436] + +2355. [func] Extend the number statistics counters available. + [RT #17590] + +2354. [bug] Failed to initialise sone rdatasetheader_t elements. + [RT #17927] + +2353. [func] Add support for Name Server ID (RFC 5001). + 'dig +nsid' requests NSID from server. + 'request-nsid yes;' causes recursive server to send + NSID requests to upstream servers. Server responds + to NSID requests with the string configured by + 'server-id' option. [RT #17091] + +2352. [bug] Various GSS_API fixups. [RT #17729] + +2351. [bug] convertxsl.pl generated very long lines. [RT #17906] + +2350. [port] win32: IPv6 support. [RT #17797] + +2347. [bug] Delete now traverses the RB tree in the canonical + order. [RT #17451] + +2346. [func] Memory statistics now cover all active memory contexts + in increased detail. [RT #17580] + +2345. [bug] named-checkconf failed to detect when forwarders + were set at both the options/view level and in + a root zone. [RT #17671] + +2344. [bug] Improve "logging{ file ...; };" documentation. + [RT #17888] + +2343. [bug] (Seemingly) duplicate IPv6 entries could be + created in ADB. [RT #17837] + +2341. [bug] libbind: add missing -I../include for off source + tree builds. [RT #17606] + +2340. [port] openbsd: interface configuration. [RT #17700] + +2339. [port] tru64: support for libbind. [RT #17589] + +2338. [bug] check_ds() could be called with a non DS rdataset. + [RT #17598] + +2337. [bug] BUILD_LDFLAGS was not being correctly set. [RT #17614] + +2335. [port] sunos: libbind and *printf() support for long long. + [RT #17513] + +2334. [bug] Bad REQUIRES in fromstruct_in_naptr(), off by one + bug in fromstruct_txt(). [RT #17609] + +2333. [bug] Fix off by one error in isc_time_nowplusinterval(). + [RT #17608] + +2332. [contrib] query-loc-0.4.0. [RT #17602] + +2331. [bug] Failure to regenerate any signatures was not being + reported nor being past back to the UPDATE client. + [RT #17570] + +2330. [bug] Remove potential race condition when handling + over memory events. [RT #17572] + + WARNING: API CHANGE: over memory callback + function now needs to call isc_mem_waterack(). + See for details. + +2329. [bug] Clearer help text for dig's '-x' and '-i' options. + +2328. [maint] Add AAAA addresses for A.ROOT-SERVERS.NET, + F.ROOT-SERVERS.NET, H.ROOT-SERVERS.NET, + J.ROOT-SERVERS.NET, K.ROOT-SERVERS.NET and + M.ROOT-SERVERS.NET. + +2327. [bug] It was possible to dereference a NULL pointer in + rbtdb.c. Implement deadnode processing in zones as + we do for caches. [RT #17312] + +2326. [bug] It was possible to trigger a INSIST in the acache + processing. + +2325. [port] Linux: use capset() function if available. [RT #17557] + --- 9.5.0b2 released --- -2324. [bug] Fix IPv6 matching against "any;" [RT #17533] +2324. [bug] Fix IPv6 matching against "any;". [RT #17533] 2323. [port] tru64: namespace clash. [RT #17547] @@ -133,7 +256,7 @@ 2275. [func] Add support to dig to perform IXFR queries over UDP. [RT #17235] -2274. [func] Log zone transfer statistics. [RT #17161] +2274. [func] Log zone transfer statistics. [RT #17336] 2273. [bug] Adjust log level to WARNING when saving inconsistant stub/slave master and journal files. [RT# 17279] @@ -189,7 +312,7 @@ 2256. [bug] win32: Correctly register the installation location of bindevt.dll. [RT #17159] -2255. [bug] L.ROOT-SERVERS.NET is now 199.7.83.42. +2255. [maint] L.ROOT-SERVERS.NET is now 199.7.83.42. 2254. [bug] timer.c:dispatch() failed to lock timer->lock when reading timer->idle allowing it to see @@ -2284,7 +2407,7 @@ 1568. [bug] nsupdate now reports that the update failed in interactive mode. [RT# 10236] -1567. [bug] B.ROOT-SERVERS.NET is now 192.228.79.201. +1567. [maint] B.ROOT-SERVERS.NET is now 192.228.79.201. 1566. [port] Support for the cmsg framework on Solaris and HP/UX. This also solved the problem that match-destinations @@ -2787,7 +2910,7 @@ 1398. [doc] ARM: notify-also should have been also-notify. [RT #4345] -1397. [bug] J.ROOT-SERVERS.NET is now 192.58.128.30. +1397. [maint] J.ROOT-SERVERS.NET is now 192.58.128.30. 1396. [func] dnssec-signzone: adjust the default signing time by 1 hour to allow for clock skew. diff --git a/FAQ b/FAQ index 90b3ca04..e6b2ff27 100644 --- a/FAQ +++ b/FAQ @@ -1,6 +1,6 @@ Frequently Asked Questions about BIND 9 -Copyright © 2004-2007 Internet Systems Consortium, Inc. ("ISC") +Copyright © 2004-2008 Internet Systems Consortium, Inc. ("ISC") Copyright © 2000-2003 Internet Software Consortium. @@ -594,7 +594,12 @@ Q: I get the error message "named: capset failed: Operation not permitted" when starting named. A: The capability module, part of "Linux Security Modules/LSM", has not - been loaded into the kernel. See insmod(8). + been loaded into the kernel. See insmod(8), modprobe(8). + + The relevant modules can be loaded by running: + + modprobe commoncap + modprobe capability Q: I'm running BIND on Red Hat Enterprise Linux or Fedora Core - @@ -699,6 +704,18 @@ A: Red Hat Security Enhanced Linux (SELinux) policy security protections : See these man-pages for more information : selinux(8), named_selinux (8), chcon(1), setsebool(8) +Q: Listening on individual IPv6 interfaces does not work. + +A: This is usually due to "/proc/net/if_inet6" not being available in the + chroot file system. Mount another instance of "proc" in the chroot file + system. + + This can be be made permanent by adding a second instance to /etc/ + fstab. + + proc /proc proc defaults 0 0 + proc /var/named/proc proc defaults 0 0 + 4.3. Windows Q: Zone transfers from my BIND 9 master to my Windows 2000 slave fail. diff --git a/FAQ.xml b/FAQ.xml index f2b8e3f2..9729ba5b 100644 --- a/FAQ.xml +++ b/FAQ.xml @@ -1,7 +1,7 @@ - +
Frequently Asked Questions about BIND 9 @@ -27,6 +27,7 @@ 2005 2006 2007 + 2008 Internet Systems Consortium, Inc. ("ISC") @@ -1064,7 +1065,13 @@ client: UDP client handler shutting down due to fatal receive error: unexpected The capability module, part of "Linux Security Modules/LSM", - has not been loaded into the kernel. See insmod(8). + has not been loaded into the kernel. See insmod(8), modprobe(8). + + + The relevant modules can be loaded by running: + +modprobe commoncap +modprobe capability @@ -1233,6 +1240,30 @@ named_cache_t: for files modifiable by named - $ROOTDIR/var/{tmp,named/{slaves,d + + + + + Listening on individual IPv6 interfaces does not work. + + + + + This is usually due to "/proc/net/if_inet6" not being available + in the chroot file system. Mount another instance of "proc" + in the chroot file system. + + + This can be be made permanent by adding a second instance to + /etc/fstab. + + +proc /proc proc defaults 0 0 +proc /var/named/proc proc defaults 0 0 + + + + diff --git a/README b/README index da800c59..b89fa896 100644 --- a/README +++ b/README @@ -54,12 +54,16 @@ BIND 9.5.0 Experimental http server and statistics support for named via xml. + More detailed statistics counters including those supported in BIND 8. + Faster ACL processing. - Use Doxygen to generate internal documention. + Use Doxygen to generate internal documentation. Efficient LRU cache-cleaning mechanism. + NSID support (RFC 5001). + BIND 9.4.0 BIND 9.4.0 has a number of new features over 9.3, @@ -429,8 +433,6 @@ Building -DDIG_SIGCHASE_BU=1) Disable dropping queries from particular well known ports. -DNS_CLIENT_DROPPORT=0 - Disable support for "rrset-order fixed". - -DDNS_RDATASET_FIXED=0 LDFLAGS Linker flags. Defaults to empty string. @@ -466,6 +468,11 @@ Building on the configure command line. The default is operating system dependent. + Support for the "fixed" rrset-order option can be enabled + or disabled by specifying "--enable-fixed-rrset" or + "--disable-fixed-rrset" on the configure command line. + The default is "disabled", to reduce memory footprint. + If your operating system has integrated support for IPv6, it will be used automatically. If you have installed KAME IPv6 separately, use "--with-kame[=PATH]" to specify its location. @@ -508,6 +515,9 @@ Building on your system, and some require Perl; see bin/tests/system/README for details. + SunOS 4 requires "printf" to be installed to make the shared + libraries. sh-utils-1.16 provides a "printf" which compiles + on SunOS 4. Documentation diff --git a/bin/dig/dig.c b/bin/dig/dig.c index f4b43890..9866fa1a 100644 --- a/bin/dig/dig.c +++ b/bin/dig/dig.c @@ -1,5 +1,5 @@ /* - * Copyright (C) 2004-2007 Internet Systems Consortium, Inc. ("ISC") + * Copyright (C) 2004-2008 Internet Systems Consortium, Inc. ("ISC") * Copyright (C) 2000-2003 Internet Software Consortium. * * Permission to use, copy, modify, and/or distribute this software for any @@ -15,7 +15,7 @@ * PERFORMANCE OF THIS SOFTWARE. */ -/* $Id: dig.c,v 1.218 2007/12/03 00:21:48 marka Exp $ */ +/* $Id: dig.c,v 1.218.12.3 2008/04/03 02:12:21 marka Exp $ */ /*! \file */ @@ -50,7 +50,7 @@ #define ADD_STRING(b, s) { \ if (strlen(s) >= isc_buffer_availablelength(b)) \ - return (ISC_R_NOSPACE); \ + return (ISC_R_NOSPACE); \ else \ isc_buffer_putstr(b, s); \ } @@ -144,8 +144,8 @@ help(void) { " q-type is one of (a,any,mx,ns,soa,hinfo,axfr,txt,...) [default:a]\n" " (Use ixfr=version for type ixfr)\n" " q-opt is one of:\n" -" -x dot-notation (shortcut for in-addr lookups)\n" -" -i (IP6.INT reverse IPv6 lookups)\n" +" -x dot-notation (shortcut for reverse lookups)\n" +" -i (use IP6.INT for IPv6 reverse lookups)\n" " -f filename (batch mode)\n" " -b address[#port] (bind to source address/port)\n" " -p port (specify port number)\n" @@ -194,6 +194,7 @@ help(void) { " +[no]identify (ID responders in short answers)\n" " +[no]trace (Trace delegation down from root)\n" " +[no]dnssec (Request DNSSEC records)\n" +" +[no]nsid (Request Name Server ID)\n" #ifdef DIG_SIGCHASE " +[no]sigchase (Chase DNSSEC signatures)\n" " +trusted-key=#### (Trusted Key when chasing DNSSEC sigs)\n" @@ -383,7 +384,7 @@ printrdataset(dns_name_t *owner_name, dns_rdataset_t *rdataset, else if (nottl || noclass) result = dns_master_stylecreate(&style, styleflags, 24, 24, 32, 40, 80, 8, mctx); - else + else result = dns_master_stylecreate(&style, styleflags, 24, 32, 40, 48, 80, 8, mctx); check_result(result, "dns_master_stylecreate"); @@ -392,7 +393,7 @@ printrdataset(dns_name_t *owner_name, dns_rdataset_t *rdataset, if (style != NULL) dns_master_styledestroy(&style, mctx); - + return(result); } #endif @@ -429,7 +430,7 @@ printmessage(dig_query_t *query, dns_message_t *msg, isc_boolean_t headers) { else if (nottl || noclass) result = dns_master_stylecreate(&style, styleflags, 24, 24, 32, 40, 80, 8, mctx); - else + else result = dns_master_stylecreate(&style, styleflags, 24, 32, 40, 48, 80, 8, mctx); check_result(result, "dns_master_stylecreate"); @@ -638,7 +639,7 @@ printgreeting(int argc, char **argv, dig_lookup_t *lookup) { strncat(lookup->cmdline, append, remaining); } if (first) { - snprintf(append, sizeof(append), + snprintf(append, sizeof(append), ";; global options: %s %s\n", short_form ? "short_form" : "", printcmd ? "printcmd" : ""); @@ -716,7 +717,7 @@ plus_option(char *option, isc_boolean_t is_batchfile, FULLCHECK2("aaonly", "aaflag"); lookup->aaonly = state; break; - case 'd': + case 'd': switch (cmd[2]) { case 'd': /* additional */ FULLCHECK("additional"); @@ -801,13 +802,13 @@ plus_option(char *option, isc_boolean_t is_batchfile, FULLCHECK("defname"); usesearch = state; break; - case 'n': /* dnssec */ + case 'n': /* dnssec */ FULLCHECK("dnssec"); if (state && lookup->edns == -1) lookup->edns = 0; lookup->dnssec = state; break; - case 'o': /* domain */ + case 'o': /* domain */ FULLCHECK("domain"); if (value == NULL) goto need_value; @@ -860,28 +861,40 @@ plus_option(char *option, isc_boolean_t is_batchfile, goto invalid_option; ndots = parse_uint(value, "ndots", MAXNDOTS); break; - case 's': /* nssearch */ - FULLCHECK("nssearch"); - lookup->ns_search_only = state; - if (state) { - lookup->trace_root = ISC_TRUE; - lookup->recurse = ISC_TRUE; - lookup->identify = ISC_TRUE; - lookup->stats = ISC_FALSE; - lookup->comments = ISC_FALSE; - lookup->section_additional = ISC_FALSE; - lookup->section_authority = ISC_FALSE; - lookup->section_question = ISC_FALSE; - lookup->rdtype = dns_rdatatype_ns; - lookup->rdtypeset = ISC_TRUE; - short_form = ISC_TRUE; + case 's': + switch (cmd[2]) { + case 'i': /* nsid */ + FULLCHECK("nsid"); + if (state && lookup->edns == -1) + lookup->edns = 0; + lookup->nsid = state; + break; + case 's': /* nssearch */ + FULLCHECK("nssearch"); + lookup->ns_search_only = state; + if (state) { + lookup->trace_root = ISC_TRUE; + lookup->recurse = ISC_TRUE; + lookup->identify = ISC_TRUE; + lookup->stats = ISC_FALSE; + lookup->comments = ISC_FALSE; + lookup->section_additional = ISC_FALSE; + lookup->section_authority = ISC_FALSE; + lookup->section_question = ISC_FALSE; + lookup->rdtype = dns_rdatatype_ns; + lookup->rdtypeset = ISC_TRUE; + short_form = ISC_TRUE; + } + break; + default: + goto invalid_option; } break; default: goto invalid_option; } break; - case 'q': + case 'q': switch (cmd[1]) { case 'r': /* qr */ FULLCHECK("qr"); @@ -957,11 +970,11 @@ plus_option(char *option, isc_boolean_t is_batchfile, break; #ifdef DIG_SIGCHASE case 'i': /* sigchase */ - FULLCHECK("sigchase"); + FULLCHECK("sigchase"); lookup->sigchase = state; if (lookup->sigchase) lookup->dnssec = ISC_TRUE; - break; + break; #endif case 't': /* stats */ FULLCHECK("stats"); @@ -989,7 +1002,7 @@ plus_option(char *option, isc_boolean_t is_batchfile, timeout = 1; break; #if DIG_SIGCHASE_TD - case 'o': /* topdown */ + case 'o': /* topdown */ FULLCHECK("topdown"); lookup->do_topdown = state; break; @@ -1024,7 +1037,7 @@ plus_option(char *option, isc_boolean_t is_batchfile, #ifdef DIG_SIGCHASE case 'u': /* trusted-key */ FULLCHECK("trusted-key"); - if (value == NULL) + if (value == NULL) goto need_value; if (!state) goto invalid_option; @@ -1158,7 +1171,7 @@ dash_option(char *option, char *next, dig_lookup_t **lookup, hash = strchr(value, '#'); if (hash != NULL) { srcport = (in_port_t) - parse_uint(hash + 1, + parse_uint(hash + 1, "port number", MAXPORT); *hash = '\0'; } else @@ -1211,7 +1224,7 @@ dash_option(char *option, char *next, dig_lookup_t **lookup, (*lookup) = clone_lookup(default_lookup, ISC_TRUE); *need_clone = ISC_TRUE; - strncpy((*lookup)->textname, value, + strncpy((*lookup)->textname, value, sizeof((*lookup)->textname)); (*lookup)->textname[sizeof((*lookup)->textname)-1]=0; (*lookup)->trace_root = ISC_TF((*lookup)->trace || @@ -1250,7 +1263,7 @@ dash_option(char *option, char *next, dig_lookup_t **lookup, (*lookup)->rdtypeset = ISC_TRUE; (*lookup)->ixfr_serial = parse_uint(&value[5], "serial number", - MAXSERIAL); + MAXSERIAL); (*lookup)->section_question = plusquest; (*lookup)->comments = pluscomm; (*lookup)->tcp_mode = ISC_TRUE; @@ -1277,7 +1290,7 @@ dash_option(char *option, char *next, dig_lookup_t **lookup, if (ptr2 == NULL) usage(); ptr3 = next_token(&value,":"); /* secret or NULL */ - if (ptr3 != NULL) { + if (ptr3 != NULL) { if (strcasecmp(ptr, "hmac-md5") == 0) { hmacname = DNS_TSIG_HMACMD5_NAME; digestbits = 0; @@ -1426,7 +1439,7 @@ getaddresses(dig_lookup_t *lookup, const char *host) { char tmp[ISC_NETADDR_FORMATSIZE]; result = bind9_getaddresses(host, 0, sockaddrs, - DIG_MAX_ADDRESSES, &count); + DIG_MAX_ADDRESSES, &count); if (result != ISC_R_SUCCESS) fatal("couldn't get address for '%s': %s", host, isc_result_totext(result)); @@ -1488,7 +1501,7 @@ parse_args(isc_boolean_t is_batchfile, isc_boolean_t config_only, if (homedir != NULL) { unsigned int n; n = snprintf(rcfile, sizeof(rcfile), "%s/.digrc", - homedir); + homedir); if (n < sizeof(rcfile)) batchfp = fopen(rcfile, "r"); } @@ -1568,7 +1581,7 @@ parse_args(isc_boolean_t is_batchfile, isc_boolean_t config_only, tr.base = rv[0]; tr.length = strlen(rv[0]); result = dns_rdatatype_fromtext(&rdtype, - (isc_textregion_t *)&tr); + (isc_textregion_t *)&tr); if (result == ISC_R_SUCCESS && rdtype == dns_rdatatype_ixfr) { result = DNS_R_UNKNOWN; @@ -1589,8 +1602,8 @@ parse_args(isc_boolean_t is_batchfile, isc_boolean_t config_only, lookup->rdtypeset = ISC_TRUE; lookup->ixfr_serial = parse_uint(&rv[0][5], - "serial number", - MAXSERIAL); + "serial number", + MAXSERIAL); lookup->section_question = plusquest; lookup->comments = pluscomm; @@ -1626,7 +1639,7 @@ parse_args(isc_boolean_t is_batchfile, isc_boolean_t config_only, lookup = clone_lookup(default_lookup, ISC_TRUE); need_clone = ISC_TRUE; - strncpy(lookup->textname, rv[0], + strncpy(lookup->textname, rv[0], sizeof(lookup->textname)); lookup->textname[sizeof(lookup->textname)-1]=0; lookup->trace_root = ISC_TF(lookup->trace || diff --git a/bin/dig/dighost.c b/bin/dig/dighost.c index e83736d5..5419fc7a 100644 --- a/bin/dig/dighost.c +++ b/bin/dig/dighost.c @@ -15,7 +15,7 @@ * PERFORMANCE OF THIS SOFTWARE. */ -/* $Id: dighost.c,v 1.304.12.4 2008/01/17 23:46:35 tbox Exp $ */ +/* $Id: dighost.c,v 1.304.12.5 2008/04/03 02:12:21 marka Exp $ */ /*! \file * \note @@ -724,6 +724,7 @@ make_empty_lookup(void) { looknew->servfail_stops = ISC_TRUE; looknew->besteffort = ISC_TRUE; looknew->dnssec = ISC_FALSE; + looknew->nsid = ISC_FALSE; #ifdef DIG_SIGCHASE looknew->sigchase = ISC_FALSE; #if DIG_SIGCHASE_TD @@ -803,6 +804,7 @@ clone_lookup(dig_lookup_t *lookold, isc_boolean_t servers) { looknew->servfail_stops = lookold->servfail_stops; looknew->besteffort = lookold->besteffort; looknew->dnssec = lookold->dnssec; + looknew->nsid = lookold->nsid; #ifdef DIG_SIGCHASE looknew->sigchase = lookold->sigchase; #if DIG_SIGCHASE_TD @@ -1155,11 +1157,11 @@ setup_libs(void) { /*% * Add EDNS0 option record to a message. Currently, the only supported - * options are UDP buffer size and the DO bit. + * options are UDP buffer size, the DO bit, and NSID request. */ static void add_opt(dns_message_t *msg, isc_uint16_t udpsize, isc_uint16_t edns, - isc_boolean_t dnssec) + isc_boolean_t dnssec, isc_boolean_t nsid) { dns_rdataset_t *rdataset = NULL; dns_rdatalist_t *rdatalist = NULL; @@ -1182,8 +1184,19 @@ add_opt(dns_message_t *msg, isc_uint16_t udpsize, isc_uint16_t edns, rdatalist->ttl = edns << 16; if (dnssec) rdatalist->ttl |= DNS_MESSAGEEXTFLAG_DO; - rdata->data = NULL; - rdata->length = 0; + if (nsid) { + unsigned char data[4]; + isc_buffer_t buf; + + isc_buffer_init(&buf, data, sizeof(data)); + isc_buffer_putuint16(&buf, DNS_OPT_NSID); + isc_buffer_putuint16(&buf, 0); + rdata->data = data; + rdata->length = sizeof(data); + } else { + rdata->data = NULL; + rdata->length = 0; + } ISC_LIST_INIT(rdatalist->rdata); ISC_LIST_APPEND(rdatalist->rdata, rdata, link); dns_rdatalist_tordataset(rdatalist, rdataset); @@ -1998,7 +2011,7 @@ setup_lookup(dig_lookup_t *lookup) { if (lookup->edns < 0) lookup->edns = 0; add_opt(lookup->sendmsg, lookup->udpsize, - lookup->edns, lookup->dnssec); + lookup->edns, lookup->dnssec, lookup->nsid); } result = dns_message_rendersection(lookup->sendmsg, diff --git a/bin/dig/host.1 b/bin/dig/host.1 index 97d2a27e..d985a95a 100644 --- a/bin/dig/host.1 +++ b/bin/dig/host.1 @@ -1,4 +1,4 @@ -.\" Copyright (C) 2004, 2005, 2007 Internet Systems Consortium, Inc. ("ISC") +.\" Copyright (C) 2004, 2005, 2007, 2008 Internet Systems Consortium, Inc. ("ISC") .\" Copyright (C) 2000-2002 Internet Software Consortium. .\" .\" Permission to use, copy, modify, and distribute this software for any @@ -13,7 +13,7 @@ .\" OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR .\" PERFORMANCE OF THIS SOFTWARE. .\" -.\" $Id: host.1,v 1.28 2007/05/09 03:33:50 marka Exp $ +.\" $Id: host.1,v 1.28.164.2 2008/04/06 01:41:39 tbox Exp $ .\" .hy 0 .ad l @@ -154,7 +154,7 @@ option is used to select the query type. \fItype\fR can be any recognized query type: CNAME, NS, SOA, SIG, KEY, AXFR, etc. When no query type is specified, \fBhost\fR -automatically selects an appropriate query type. By default it looks for A records, but if the +automatically selects an appropriate query type. By default it looks for A, AAAA, and MX records, but if the \fB\-C\fR option was given, queries will be made for SOA records, and if \fIname\fR @@ -213,7 +213,7 @@ runs. \fBdig\fR(1), \fBnamed\fR(8). .SH "COPYRIGHT" -Copyright \(co 2004, 2005, 2007 Internet Systems Consortium, Inc. ("ISC") +Copyright \(co 2004, 2005, 2007, 2008 Internet Systems Consortium, Inc. ("ISC") .br Copyright \(co 2000\-2002 Internet Software Consortium. .br diff --git a/bin/dig/host.docbook b/bin/dig/host.docbook index ffdec1bc..c2951283 100644 --- a/bin/dig/host.docbook +++ b/bin/dig/host.docbook @@ -2,7 +2,7 @@ "http://www.oasis-open.org/docbook/xml/4.2/docbookx.dtd" []> - + @@ -41,6 +41,7 @@ 2004 2005 2007 + 2008 Internet Systems Consortium, Inc. ("ISC") @@ -199,7 +200,7 @@ NS, SOA, SIG, KEY, AXFR, etc. When no query type is specified, host automatically selects an appropriate query - type. By default it looks for A records, but if the + type. By default it looks for A, AAAA, and MX records, but if the option was given, queries will be made for SOA records, and if name is a dotted-decimal IPv4 diff --git a/bin/dig/host.html b/bin/dig/host.html index 3caafc1a..1d1c1898 100644 --- a/bin/dig/host.html +++ b/bin/dig/host.html @@ -1,5 +1,5 @@ - + @@ -32,7 +32,7 @@

host [-aCdlnrsTwv] [-c class] [-N ndots] [-R number] [-t type] [-W wait] [-m flag] [-4] [-6] {name} [server]

-

DESCRIPTION

+

DESCRIPTION

host is a simple utility for performing DNS lookups. It is normally used to convert names to IP addresses and vice versa. @@ -148,7 +148,7 @@ NS, SOA, SIG, KEY, AXFR, etc. When no query type is specified, host automatically selects an appropriate query - type. By default it looks for A records, but if the + type. By default it looks for A, AAAA, and MX records, but if the -C option was given, queries will be made for SOA records, and if name is a dotted-decimal IPv4 @@ -184,7 +184,7 @@

-

IDN SUPPORT

+

IDN SUPPORT

If host has been built with IDN (internationalized domain name) support, it can accept and display non-ASCII domain names. @@ -198,12 +198,12 @@

-

FILES

+

FILES

/etc/resolv.conf

-

SEE ALSO

+

SEE ALSO

dig(1), named(8).

diff --git a/bin/dig/include/dig/dig.h b/bin/dig/include/dig/dig.h index 4c4608df..262a4e5b 100644 --- a/bin/dig/include/dig/dig.h +++ b/bin/dig/include/dig/dig.h @@ -1,5 +1,5 @@ /* - * Copyright (C) 2004-2007 Internet Systems Consortium, Inc. ("ISC") + * Copyright (C) 2004-2008 Internet Systems Consortium, Inc. ("ISC") * Copyright (C) 2000-2003 Internet Software Consortium. * * Permission to use, copy, modify, and/or distribute this software for any @@ -15,7 +15,7 @@ * PERFORMANCE OF THIS SOFTWARE. */ -/* $Id: dig.h,v 1.105 2007/06/18 23:47:17 tbox Exp $ */ +/* $Id: dig.h,v 1.105.130.2 2008/04/03 06:08:26 tbox Exp $ */ #ifndef DIG_H #define DIG_H @@ -102,7 +102,7 @@ typedef struct dig_searchlist dig_searchlist_t; /*% The dig_lookup structure */ struct dig_lookup { isc_boolean_t - pending, /*%< Pending a successful answer */ + pending, /*%< Pending a successful answer */ waiting_connect, doing_xfr, ns_search_only, /*%< dig +nssearch, host -C */ @@ -129,27 +129,28 @@ struct dig_lookup { need_search, done_as_is, besteffort, - dnssec; + dnssec, + nsid; /*% Name Server ID (RFC 5001) */ #ifdef DIG_SIGCHASE isc_boolean_t sigchase; #if DIG_SIGCHASE_TD - isc_boolean_t do_topdown, - trace_root_sigchase, - rdtype_sigchaseset, - rdclass_sigchaseset; + isc_boolean_t do_topdown, + trace_root_sigchase, + rdtype_sigchaseset, + rdclass_sigchaseset; /* Name we are going to validate RRset */ - char textnamesigchase[MXNAME]; + char textnamesigchase[MXNAME]; #endif #endif - + char textname[MXNAME]; /*% Name we're going to be looking up */ char cmdline[MXNAME]; dns_rdatatype_t rdtype; dns_rdatatype_t qrdtype; #if DIG_SIGCHASE_TD - dns_rdatatype_t rdtype_sigchase; - dns_rdatatype_t qrdtype_sigchase; - dns_rdataclass_t rdclass_sigchase; + dns_rdatatype_t rdtype_sigchase; + dns_rdatatype_t qrdtype_sigchase; + dns_rdataclass_t rdclass_sigchase; #endif dns_rdataclass_t rdclass; isc_boolean_t rdtypeset; @@ -231,7 +232,7 @@ struct dig_searchlist { }; #ifdef DIG_SIGCHASE struct dig_message { - dns_message_t *msg; + dns_message_t *msg; ISC_LINK(dig_message_t) link; }; #endif @@ -249,7 +250,7 @@ extern dig_searchlistlist_t search_list; extern unsigned int extrabytes; extern isc_boolean_t check_ra, have_ipv4, have_ipv6, specified_source, - usesearch, showsearch, qr; + usesearch, showsearch, qr; extern in_port_t port; extern unsigned int timeout; extern isc_mem_t *mctx; diff --git a/bin/named/Makefile.in b/bin/named/Makefile.in index 6655cb19..5f61cdf3 100644 --- a/bin/named/Makefile.in +++ b/bin/named/Makefile.in @@ -13,7 +13,7 @@ # OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR # PERFORMANCE OF THIS SOFTWARE. -# $Id: Makefile.in,v 1.96.130.3 2008/01/22 22:51:26 marka Exp $ +# $Id: Makefile.in,v 1.96.130.4 2008/03/31 05:06:47 marka Exp $ srcdir = @srcdir@ VPATH = @srcdir@ @@ -134,7 +134,7 @@ bind9.xsl.h: bind9.xsl convertxsl.pl ${PERL} ${srcdir}/convertxsl.pl < ${srcdir}/bind9.xsl > bind9.xsl.h depend: bind9.xsl.h -server.@O@: bind9.xsl.h +statschannel.@O@: bind9.xsl.h installdirs: $(SHELL) ${top_srcdir}/mkinstalldirs ${DESTDIR}${sbindir} diff --git a/bin/named/bind9.xsl b/bin/named/bind9.xsl index 25f72738..edc10ece 100644 --- a/bin/named/bind9.xsl +++ b/bin/named/bind9.xsl @@ -1,6 +1,6 @@ - + - - + + - - + +
Server statistics
Incoming Requests
-
+
+ + + + + + + + + +
Incoming Queries
+ +
+ + + + + + + + + + + + +
Outgoing Queries from View
+
+
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Server Statistics
Requestv4Requestv6ReqEdns0ReqBadEDNSVerReqTSIGReqSIG0ReqBadSIGReqTCPAuthQryRejRecQryRej
XfrRejUpdateRejResponseRespTruncatedRespEDNS0RespTSIGRespSIG0QrySuccessQryAuthAnsQryNoauthAns
QryReferralQryNxrrsetQrySERVFAILQryFORMERRQryNXDOMAINQryRecursionQryDuplicateQryDroppedQryFailureXfrReqDone
UpdateReqFwdUpdateRespFwdUpdateFwdFailUpdateDoneUpdateFailUpdateBadPrereqRespMismatch + + +
+ + +
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Zone Maintenance Statistics
NotifyOutv4NotifyOutv6NotifyInv4NotifyInv6NotifyRejSOAOutv4SOAOutv6AXFRReqv4AXFRReqv6IXFRReqv4
IXFRReqv6XfrSuccessXfrFail + + + + + + +
+ + + + + + +
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Resolver Statistics for View
Queryv4Queryv6Responsev4Responsev6NXDOMAINSERVFAILFORMERROtherErrorEDNS0FailTruncated
LameRetryGlueFetchv4GlueFetchv6GlueFetchv4FailGlueFetchv6FailValAttemptValOkValNegOkValFail
+
+
+ +
+ + + + + + + + + + + + +
Cache DB RRsets for View
+
+
+ +
- + @@ -123,10 +400,9 @@ tr.lrow { - - - + + @@ -140,28 +416,25 @@ tr.lrow { - @@ -274,6 +547,70 @@ tr.lrow {
Zones for View Zones for View
NameReferral NXRRSET NXDOMAINRecursion FailureDuplicateDroppedXfrReqDoneXfrRej
- - - + - + - + - + - + - + - +
+
+ + + + + + + + + + +
Memory Usage Summary
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Memory Contexts
IDNameReferencesTotalUseInUseMaxUseBlockSizePoolsHiWaterLoWater
+ + + + + + + + + + + + + + + + + + + +
diff --git a/bin/named/bind9.xsl.h b/bin/named/bind9.xsl.h index 3d4cabd1..80788f8c 100644 --- a/bin/named/bind9.xsl.h +++ b/bin/named/bind9.xsl.h @@ -1,5 +1,698 @@ /* - * Generated by convertxsl.pl 1.9 2007/09/14 06:14:44 marka Exp - * From bind9.xsl 1.13 2007/06/18 23:47:18 tbox Exp + * Generated by convertxsl.pl 1.9.60.4 2008/04/03 10:51:01 marka Exp + * From bind9.xsl 1.13.130.4 2008/04/09 22:49:37 jinmei Exp */ -static char msg[] = "BIND 9 Statistics
Bind 9 Configuration and Statistics

Times
boot-time
current-time

Server statistics

Zones for View
NameClassSerialSuccessReferralNXRRSETNXDOMAINRecursionFailureDuplicateDropped


Network Status
IDNameTypeReferencesLocalAddressPeerAddressState

Task Manager Configuration
Thread-Model
Worker Threads
Default Quantum
Tasks Running

Tasks
IDNameReferencesStateQuantum
\n"; +static char xslmsg[] = + "\n" + "\n" + "\n" + "\n" + "\n" + "\n" + " \n" + " \n" + " \n" + " \n" + " BIND 9 Statistics\n" + " \n" + " \n" + "
Bind 9 Configuration and Statistics
\n" + "\n" + "
\n" + "\n" + " \n" + " \n" + " \n" + " \n" + " \n" + " \n" + " \n" + " \n" + " \n" + " \n" + "
Times
boot-time
current-time
\n" + "\n" + "
\n" + "\n" + " \n" + " \n" + " \n" + " \n" + " \n" + " \n" + " \n" + " \n" + "
Incoming Requests
\n" + "\n" + "
\n" + "\n" + " \n" + " \n" + " \n" + " \n" + " \n" + " \n" + " \n" + " \n" + "
Incoming Queries
\n" + "\n" + "
\n" + "\n" + " \n" + " \n" + " \n" + " \n" + " \n" + " \n" + " \n" + " \n" + " \n" + " \n" + " \n" + "
Outgoing Queries from View
\n" + "
\n" + "
\n" + "\n" + "
\n" + "\n" + " \n" + " \n" + " \n" + " \n" + " \n" + " \n" + " \n" + " \n" + " \n" + " \n" + " \n" + " \n" + " \n" + " \n" + " \n" + " \n" + " \n" + " \n" + " \n" + " \n" + " \n" + " \n" + " \n" + " \n" + " \n" + " \n" + " \n" + " \n" + " \n" + " \n" + " \n" + " \n" + " \n" + " \n" + " \n" + " \n" + " \n" + " \n" + " \n" + " \n" + " \n" + " \n" + " \n" + " \n" + " \n" + " \n" + " \n" + " \n" + " \n" + " \n" + " \n" + " \n" + " \n" + " \n" + " \n" + " \n" + " \n" + " \n" + " \n" + " \n" + " \n" + " \n" + " \n" + " \n" + " \n" + " \n" + " \n" + " \n" + " \n" + " \n" + " \n" + " \n" + " \n" + " \n" + " \n" + " \n" + " \n" + " \n" + " \n" + " \n" + " \n" + " \n" + " \n" + " \n" + " \n" + " \n" + " \n" + " \n" + " \n" + " \n" + " \n" + " \n" + " \n" + "
Server Statistics
Requestv4Requestv6ReqEdns0ReqBadEDNSVerReqTSIGReqSIG0ReqBadSIGReqTCPAuthQryRejRecQryRej
XfrRejUpdateRejResponseRespTruncatedRespEDNS0RespTSIGRespSIG0QrySuccessQryAuthAnsQryNoauthAns
QryReferralQryNxrrsetQrySERVFAILQryFORMERRQryNXDOMAINQryRecursionQryDuplicateQryDroppedQryFailureXfrReqDone
UpdateReqFwdUpdateRespFwdUpdateFwdFailUpdateDoneUpdateFailUpdateBadPrereqRespMismatch\n" + " \n" + " \n" + "
\n" + " \n" + " \n" + "
\n" + "\n" + "
\n" + "\n" + " \n" + " \n" + " \n" + " \n" + " \n" + " \n" + " \n" + " \n" + " \n" + " \n" + " \n" + " \n" + " \n" + " \n" + " \n" + " \n" + " \n" + " \n" + " \n" + " \n" + " \n" + " \n" + " \n" + " \n" + " \n" + " \n" + " \n" + " \n" + " \n" + " \n" + " \n" + " \n" + " \n" + " \n" + " \n" + " \n" + " \n" + "
Zone Maintenance Statistics
NotifyOutv4NotifyOutv6NotifyInv4NotifyInv6NotifyRejSOAOutv4SOAOutv6AXFRReqv4AXFRReqv6IXFRReqv4
IXFRReqv6XfrSuccessXfrFail\n" + " \n" + " \n" + " \n" + " \n" + " \n" + " \n" + "
\n" + " \n" + " \n" + " \n" + " \n" + " \n" + " \n" + "
\n" + "\n" + "
\n" + "\n" + " \n" + " \n" + " \n" + " \n" + " \n" + " \n" + " \n" + " \n" + " \n" + " \n" + " \n" + " \n" + " \n" + " \n" + " \n" + " \n" + " \n" + " \n" + " \n" + " \n" + " \n" + " \n" + " \n" + " \n" + " \n" + " \n" + " \n" + " \n" + " \n" + " \n" + " \n" + " \n" + " \n" + " \n" + " \n" + " \n" + " \n" + " \n" + " \n" + " \n" + " \n" + " \n" + " \n" + " \n" + " \n" + " \n" + " \n" + " \n" + " \n" + " \n" + " \n" + " \n" + " \n" + " \n" + " \n" + " \n" + "
Resolver Statistics for View
Queryv4Queryv6Responsev4Responsev6NXDOMAINSERVFAILFORMERROtherErrorEDNS0FailTruncated
LameRetryGlueFetchv4GlueFetchv6GlueFetchv4FailGlueFetchv6FailValAttemptValOkValNegOkValFail
\n" + "
\n" + "
\n" + "\n" + "
\n" + "\n" + " \n" + " \n" + " \n" + " \n" + " \n" + " \n" + " \n" + " \n" + " \n" + " \n" + " \n" + "
Cache DB RRsets for View
\n" + "
\n" + "
\n" + "\n" + "
\n" + "\n" + " \n" + " \n" + " \n" + " \n" + " \n" + " \n" + " \n" + " \n" + " \n" + " \n" + " \n" + " \n" + " \n" + " \n" + " \n" + " \n" + " \n" + " \n" + " \n" + " \n" + " \n" + " \n" + " \n" + " \n" + " \n" + " \n" + " \n" + " \n" + " \n" + " \n" + " \n" + "
Zones for View
NameClassSerialSuccessReferralNXRRSETNXDOMAINFailureXfrReqDoneXfrRej
\n" + " \n" + " \n" + " \n" + " \n" + " \n" + " \n" + " \n" + " \n" + " \n" + " \n" + " \n" + " \n" + " \n" + " \n" + " \n" + " \n" + " \n" + " \n" + " \n" + "
\n" + "
\n" + "
\n" + "\n" + "
\n" + "\n" + " \n" + " \n" + " \n" + " \n" + " \n" + " \n" + " \n" + " \n" + " \n" + " \n" + " \n" + " \n" + " \n" + " \n" + " \n" + " \n" + " \n" + " \n" + " \n" + " \n" + " \n" + " \n" + " \n" + " \n" + "
Network Status
IDNameTypeReferencesLocalAddressPeerAddressState
\n" + " \n" + " \n" + " \n" + " \n" + " \n" + " \n" + " \n" + " \n" + " \n" + " \n" + " \n" + " \n" + " \n" + " \n" + " \n" + "
\n" + "
\n" + " \n" + " \n" + " \n" + " \n" + " \n" + " \n" + " \n" + " \n" + " \n" + " \n" + " \n" + " \n" + " \n" + " \n" + " \n" + " \n" + " \n" + " \n" + " \n" + " \n" + "
Task Manager Configuration
Thread-Model\n" + " \n" + "
Worker Threads\n" + " \n" + "
Default Quantum\n" + " \n" + "
Tasks Running\n" + " \n" + "
\n" + "
\n" + " \n" + " \n" + " \n" + " \n" + " \n" + " \n" + " \n" + " \n" + " \n" + " \n" + " \n" + " \n" + " \n" + " \n" + " \n" + " \n" + " \n" + " \n" + " \n" + " \n" + "
Tasks
IDNameReferencesStateQuantum
\n" + " \n" + " \n" + " \n" + " \n" + " \n" + " \n" + " \n" + " \n" + " \n" + "
\n" + "
\n" + " \n" + " \n" + " \n" + " \n" + " \n" + " \n" + " \n" + " \n" + " \n" + " \n" + "
Memory Usage Summary
\n" + "
\n" + " \n" + " \n" + " \n" + " \n" + " \n" + " \n" + " \n" + " \n" + " \n" + " \n" + " \n" + " \n" + " \n" + " \n" + " \n" + " \n" + " \n" + " \n" + " \n" + " \n" + " \n" + " \n" + " \n" + " \n" + " \n" + " \n" + " \n" + " \n" + " \n" + " \n" + "
Memory Contexts
IDNameReferencesTotalUseInUseMaxUseBlockSizePoolsHiWaterLoWater
\n" + " \n" + " \n" + " \n" + " \n" + " \n" + " \n" + " \n" + " \n" + " \n" + " \n" + " \n" + " \n" + " \n" + " \n" + " \n" + " \n" + " \n" + " \n" + " \n" + "
\n" + "\n" + " \n" + " \n" + "
\n" + "
\n"; +#ifdef HAVE_LIBXML2 +static const char *nsstats_xmldesc[] = { "Requestv4", + "Requestv6", + "ReqEdns0", + "ReqBadEDNSVer", + "ReqTSIG", + "ReqSIG0", + "ReqBadSIG", + "ReqTCP", + "AuthQryRej", + "RecQryRej", + "XfrRej", + "UpdateRej", + "Response", + "TruncatedResp", + "RespEDNS0", + "RespTSIG", + "RespSIG0", + "QrySuccess", + "QryAuthAns", + "QryNoauthAns", + "QryReferral", + "QryNxrrset", + "QrySERVFAIL", + "QryFORMERR", + "QryNXDOMAIN", + "QryRecursion", + "QryDuplicate", + "QryDropped", + "QryFailure", + "XfrReqDone", + "UpdateReqFwd", + "UpdateRespFwd", + "UpdateFwdFail", + "UpdateDone", + "UpdateFail", + "UpdateBadPrereq" +}; +static const char *zonestats_xmldesc[] = { "NotifyOutv4", + "NotifyOutv6", + "NotifyInv4", + "NotifyInv6", + "NotifyRej", + "SOAOutv4", + "SOAOutv6", + "AXFRReqv4", + "AXFRReqv6", + "IXFRReqv4", + "IXFRReqv6", + "XfrSuccess", + "XfrFail" +}; +static const char *resstats_xmldesc[] = { "Queryv4", + "Queryv6", + "Responsev4", + "Responsev6", + "NXDOMAIN", + "SERVFAIL", + "FORMERR", + "OtherError", + "EDNS0Fail", + "Mismatch", + "Truncated", + "Lame", + "Retry", + "GlueFetchv4", + "GlueFetchv6", + "GlueFetchv4Fail", + "GlueFetchv6Fail", + "ValAttempt", + "ValOk", + "ValNegOk", + "ValFail" +}; +#endif diff --git a/bin/named/client.c b/bin/named/client.c index df98201c..0f076d81 100644 --- a/bin/named/client.c +++ b/bin/named/client.c @@ -1,5 +1,5 @@ /* - * Copyright (C) 2004-2007 Internet Systems Consortium, Inc. ("ISC") + * Copyright (C) 2004-2008 Internet Systems Consortium, Inc. ("ISC") * Copyright (C) 1999-2003 Internet Software Consortium. * * Permission to use, copy, modify, and/or distribute this software for any @@ -15,7 +15,7 @@ * PERFORMANCE OF THIS SOFTWARE. */ -/* $Id: client.c,v 1.250 2007/11/26 04:47:17 marka Exp $ */ +/* $Id: client.c,v 1.250.16.5 2008/04/03 06:20:33 tbox Exp $ */ #include @@ -41,6 +41,7 @@ #include #include #include +#include #include #include #include @@ -48,6 +49,7 @@ #include #include #include +#include #include #include @@ -132,7 +134,7 @@ struct ns_clientmgr { #define MANAGER_MAGIC ISC_MAGIC('N', 'S', 'C', 'm') #define VALID_MANAGER(m) ISC_MAGIC_VALID(m, MANAGER_MAGIC) -/*! +/*! * Client object states. Ordering is significant: higher-numbered * states are generally "more active", meaning that the client can * have more dynamically allocated data, outstanding events, etc. @@ -286,7 +288,7 @@ exit_check(ns_client_t *client) { * * Keep the view attached until any outstanding updates complete. */ - if (client->nupdates == 0 && + if (client->nupdates == 0 && client->newstate == NS_CLIENTSTATE_FREED && client->view != NULL) dns_view_detach(&client->view); @@ -834,7 +836,7 @@ client_sendpkg(ns_client_t *client, isc_buffer_t *buffer) { isc_buffer_usedregion(buffer, &r); CTRACE("sendto"); - + result = isc_socket_sendto2(socket, &r, client->task, address, pktinfo, client->sendevent, sockflags); @@ -906,6 +908,7 @@ ns_client_send(ns_client_t *client) { unsigned char sendbuf[SEND_BUFFER_SIZE]; unsigned int dnssec_opts; unsigned int preferred_glue; + isc_boolean_t opt_included = ISC_FALSE; REQUIRE(NS_CLIENT_VALID(client)); @@ -943,11 +946,10 @@ ns_client_send(ns_client_t *client) { result = dns_message_renderbegin(client->message, &cctx, &buffer); if (result != ISC_R_SUCCESS) goto done; + if (client->opt != NULL) { result = dns_message_setopt(client->message, client->opt); - /* - * XXXRTH dns_message_setopt() should probably do this... - */ + opt_included = ISC_TRUE; client->opt = NULL; if (result != ISC_R_SUCCESS) goto done; @@ -1003,6 +1005,26 @@ ns_client_send(ns_client_t *client) { result = client_sendpkg(client, &tcpbuffer); } else result = client_sendpkg(client, &buffer); + + /* update statistics (XXXJT: is it okay to access message->xxxkey?) */ + dns_generalstats_increment(ns_g_server->nsstats, + dns_nsstatscounter_response); + if (opt_included) { + dns_generalstats_increment(ns_g_server->nsstats, + dns_nsstatscounter_edns0out); + } + if (client->message->tsigkey != NULL) { + dns_generalstats_increment(ns_g_server->nsstats, + dns_nsstatscounter_tsigout); + } + if (client->message->sig0key != NULL) { + dns_generalstats_increment(ns_g_server->nsstats, + dns_nsstatscounter_sig0out); + } + if ((client->message->flags & DNS_MESSAGEFLAG_TC) != 0) + dns_generalstats_increment(ns_g_server->nsstats, + dns_nsstatscounter_truncatedresp); + if (result == ISC_R_SUCCESS) return; @@ -1108,8 +1130,8 @@ ns_client_error(ns_client_t *client, isc_result_t result) { /* * FORMERR loop avoidance: If we sent a FORMERR message * with the same ID to the same client less than two - * seconds ago, assume that we are in an infinite error - * packet dialog with a server for some protocol whose + * seconds ago, assume that we are in an infinite error + * packet dialog with a server for some protocol whose * error responses look enough like DNS queries to * elicit a FORMERR response. Drop a packet to break * the loop. @@ -1179,11 +1201,46 @@ client_addopt(ns_client_t *client) { */ rdatalist->ttl = (client->extflags & DNS_MESSAGEEXTFLAG_REPLYPRESERVE); - /* - * No EDNS options in the default case. - */ - rdata->data = NULL; - rdata->length = 0; + /* Set EDNS options if applicable */ + if (client->attributes & NS_CLIENTATTR_WANTNSID && + (ns_g_server->server_id != NULL || + ns_g_server->server_usehostname)) { + /* + * Space required for NSID data: + * 2 bytes for opt code + * + 2 bytes for NSID length + * + NSID itself + */ + char nsid[BUFSIZ]; + isc_buffer_t *buffer = NULL; + + if (ns_g_server->server_usehostname) { + isc_result_t result; + result = ns_os_gethostname(nsid, sizeof(nsid)); + if (result != ISC_R_SUCCESS) { + goto no_nsid; + } + } else { + strncpy(nsid, ns_g_server->server_id, sizeof(nsid)); + } + + rdata->length = strlen(nsid) + 4; + result = isc_buffer_allocate(client->mctx, &buffer, + rdata->length); + if (result != ISC_R_SUCCESS) + goto no_nsid; + + isc_buffer_putuint16(buffer, DNS_OPT_NSID); + isc_buffer_putuint16(buffer, strlen(nsid)); + isc_buffer_putstr(buffer, nsid); + rdata->data = buffer->base; + dns_message_takebuffer(client->message, &buffer); + } else { +no_nsid: + rdata->data = NULL; + rdata->length = 0; + } + rdata->rdclass = rdatalist->rdclass; rdata->type = rdatalist->type; rdata->flags = 0; @@ -1284,6 +1341,7 @@ client_request(isc_task_t *task, isc_event_t *event) { isc_buffer_t tbuffer; dns_view_t *view; dns_rdataset_t *opt; + dns_name_t *signame; isc_boolean_t ra; /* Recursion available. */ isc_netaddr_t netaddr; isc_netaddr_t destaddr; @@ -1291,6 +1349,8 @@ client_request(isc_task_t *task, isc_event_t *event) { dns_messageid_t id; unsigned int flags; isc_boolean_t notimp; + dns_rdata_t rdata; + isc_uint16_t optcode; REQUIRE(event != NULL); client = event->ev_arg; @@ -1439,6 +1499,20 @@ client_request(isc_task_t *task, isc_event_t *event) { } } + /* + * Update some statistics counters. Don't count responses. + */ + if (isc_sockaddr_pf(&client->peeraddr) == PF_INET) { + dns_generalstats_increment(ns_g_server->nsstats, + dns_nsstatscounter_requestv4); + } else { + dns_generalstats_increment(ns_g_server->nsstats, + dns_nsstatscounter_requestv6); + } + if (TCP_CLIENT(client)) + dns_generalstats_increment(ns_g_server->nsstats, + dns_nsstatscounter_tcp); + /* * Hash the incoming request here as it is after * dns_dispatch_importrecv(). @@ -1460,6 +1534,8 @@ client_request(isc_task_t *task, isc_event_t *event) { goto cleanup; } + dns_opcodestats_increment(ns_g_server->opcodestats, + client->message->opcode); switch (client->message->opcode) { case dns_opcode_query: case dns_opcode_update: @@ -1507,12 +1583,35 @@ client_request(isc_task_t *task, isc_event_t *event) { */ client->ednsversion = (opt->ttl & 0x00FF0000) >> 16; if (client->ednsversion > 0) { + dns_generalstats_increment(ns_g_server->nsstats, + dns_nsstatscounter_badednsver); result = client_addopt(client); if (result == ISC_R_SUCCESS) result = DNS_R_BADVERS; ns_client_error(client, result); goto cleanup; } + + /* Check for NSID request */ + result = dns_rdataset_first(opt); + if (result == ISC_R_SUCCESS) { + dns_rdata_init(&rdata); + dns_rdataset_current(opt, &rdata); + if (rdata.length >= 2) { + isc_buffer_t nsidbuf; + isc_buffer_init(&nsidbuf, + rdata.data, rdata.length); + isc_buffer_add(&nsidbuf, rdata.length); + optcode = isc_buffer_getuint16(&nsidbuf); + if (optcode == DNS_OPT_NSID) + client->attributes |= + NS_CLIENTATTR_WANTNSID; + } + } + + dns_generalstats_increment(ns_g_server->nsstats, + dns_nsstatscounter_edns0in); + /* * Create an OPT for our reply. */ @@ -1542,7 +1641,7 @@ client_request(isc_task_t *task, isc_event_t *event) { * For IPv6 UDP queries, we get this from the pktinfo structure (if * supported). * If all the attempts fail (this can happen due to memory shortage, - * etc), we regard this as an error for safety. + * etc), we regard this as an error for safety. */ if ((client->interface->flags & NS_INTERFACEFLAG_ANYADDR) == 0) isc_netaddr_fromsockaddr(&destaddr, &client->interface->addr); @@ -1657,6 +1756,17 @@ client_request(isc_task_t *task, isc_event_t *event) { client->signer = NULL; dns_name_init(&client->signername, NULL); result = dns_message_signer(client->message, &client->signername); + if (result != ISC_R_NOTFOUND) { + signame = NULL; + if (dns_message_gettsig(client->message, &signame) != NULL) { + dns_generalstats_increment(ns_g_server->nsstats, + dns_nsstatscounter_tsigin); + } else { + dns_generalstats_increment(ns_g_server->nsstats, + dns_nsstatscounter_sig0in); + } + + } if (result == ISC_R_SUCCESS) { ns_client_log(client, DNS_LOGCATEGORY_SECURITY, NS_LOGMODULE_CLIENT, ISC_LOG_DEBUG(3), @@ -1673,15 +1783,17 @@ client_request(isc_task_t *task, isc_event_t *event) { } else { char tsigrcode[64]; isc_buffer_t b; - dns_name_t *name = NULL; dns_rcode_t status; isc_result_t tresult; /* There is a signature, but it is bad. */ - if (dns_message_gettsig(client->message, &name) != NULL) { + dns_generalstats_increment(ns_g_server->nsstats, + dns_nsstatscounter_invalidsig); + signame = NULL; + if (dns_message_gettsig(client->message, &signame) != NULL) { char namebuf[DNS_NAME_FORMATSIZE]; char cnamebuf[DNS_NAME_FORMATSIZE]; - dns_name_format(name, namebuf, sizeof(namebuf)); + dns_name_format(signame, namebuf, sizeof(namebuf)); status = client->message->tsigstatus; isc_buffer_init(&b, tsigrcode, sizeof(tsigrcode) - 1); tresult = dns_tsigrcode_totext(status, &b); @@ -1851,6 +1963,7 @@ get_clientmctx(ns_clientmgr_t *manager, isc_mem_t **mctxp) { result = isc_mem_create(0, 0, &clientmctx); if (result != ISC_R_SUCCESS) return (result); + isc_mem_setname(clientmctx, "client", NULL); manager->mctxpool[manager->nextmctx] = clientmctx; } @@ -2490,12 +2603,12 @@ ns_client_checkaclsilent(ns_client_t *client, isc_sockaddr_t *sockaddr, goto deny; } - + if (sockaddr == NULL) isc_netaddr_fromsockaddr(&netaddr, &client->peeraddr); else isc_netaddr_fromsockaddr(&netaddr, sockaddr); - + result = dns_acl_match(&netaddr, client->signer, acl, &ns_g_server->aclenv, &match, NULL); @@ -2521,7 +2634,7 @@ ns_client_checkacl(ns_client_t *client, isc_sockaddr_t *sockaddr, isc_result_t result = ns_client_checkaclsilent(client, sockaddr, acl, default_allow); - if (result == ISC_R_SUCCESS) + if (result == ISC_R_SUCCESS) ns_client_log(client, DNS_LOGCATEGORY_SECURITY, NS_LOGMODULE_CLIENT, ISC_LOG_DEBUG(3), "%s approved", opname); @@ -2577,7 +2690,7 @@ ns_client_log(ns_client_t *client, isc_logcategory_t *category, void ns_client_aclmsg(const char *msg, dns_name_t *name, dns_rdatatype_t type, - dns_rdataclass_t rdclass, char *buf, size_t len) + dns_rdataclass_t rdclass, char *buf, size_t len) { char namebuf[DNS_NAME_FORMATSIZE]; char typebuf[DNS_RDATATYPE_FORMATSIZE]; diff --git a/bin/named/config.c b/bin/named/config.c index efc67966..ac1074b4 100644 --- a/bin/named/config.c +++ b/bin/named/config.c @@ -15,7 +15,7 @@ * PERFORMANCE OF THIS SOFTWARE. */ -/* $Id: config.c,v 1.82.38.2 2008/01/22 23:27:35 tbox Exp $ */ +/* $Id: config.c,v 1.82.38.4 2008/05/01 18:32:31 jinmei Exp $ */ /*! \file */ @@ -99,6 +99,7 @@ options {\n\ use-ixfr true;\n\ edns-udp-size 4096;\n\ max-udp-size 4096;\n\ + request-nsid false;\n\ \n\ /* view */\n\ allow-notify {none;};\n\ @@ -123,7 +124,7 @@ options {\n\ query-source-v6 address *;\n\ notify-source *;\n\ notify-source-v6 *;\n\ - cleaning-interval 60;\n\ + cleaning-interval 0; /* now meaningless */\n\ min-roots 2;\n\ lame-ttl 600;\n\ max-ncache-ttl 10800; /* 3 hours */\n\ diff --git a/bin/named/convertxsl.pl b/bin/named/convertxsl.pl index b6ea4bd9..3ac071a9 100755 --- a/bin/named/convertxsl.pl +++ b/bin/named/convertxsl.pl @@ -1,6 +1,6 @@ #!/usr/bin/env perl # -# Copyright (C) 2006, 2007 Internet Systems Consortium, Inc. ("ISC") +# Copyright (C) 2006-2008 Internet Systems Consortium, Inc. ("ISC") # # Permission to use, copy, modify, and/or distribute this software for any # purpose with or without fee is hereby granted, provided that the above @@ -14,19 +14,19 @@ # OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR # PERFORMANCE OF THIS SOFTWARE. -# $Id: convertxsl.pl,v 1.9 2007/09/14 06:14:44 marka Exp $ +# $Id: convertxsl.pl,v 1.9.60.4 2008/04/03 10:51:01 marka Exp $ use strict; use warnings; -my $rev = '$Id: convertxsl.pl,v 1.9 2007/09/14 06:14:44 marka Exp $'; +my $rev = '$Id: convertxsl.pl,v 1.9.60.4 2008/04/03 10:51:01 marka Exp $'; $rev =~ s/\$//g; $rev =~ s/,v//g; $rev =~ s/Id: //; my $xsl = "unknown"; - my $lines = ''; +my (@nsstatsdesc, @zonestatsdesc, @resstatsdesc); while (<>) { chomp; @@ -34,7 +34,23 @@ while (<>) { $xsl = $_ if (//); # convert Id string to a form not recognisable by cvs. $_ =~ s///; - $lines .= $_; + if (/server\/nsstats\/(\w+)\"/) { + push(@nsstatsdesc, $1); + } elsif (/server\/zonestats\/(\w+)\"/) { + push(@zonestatsdesc, $1); + } elsif (/\"resstats\/(\w+)\"/) { + push(@resstatsdesc, $1); + } + s/[\ \t]+/ /g; + s/\>\ \\.*//; $xsl =~ s/,v//; -$lines =~ s/[\ \t]+/ /g; -$lines =~ s/\>\ \\query.authzone; - REQUIRE(counter < DNS_STATS_NCOUNTERS); - - dns_stats_incrementcounter(ns_g_server->querystats, counter); + dns_generalstats_increment(ns_g_server->nsstats, counter); if (zone != NULL) { - dns_stats_t *zonestats = dns_zone_getstats(zone); + dns_stats_t *zonestats = dns_zone_getrequeststats(zone); if (zonestats != NULL) - dns_stats_incrementcounter(zonestats, counter); + dns_generalstats_increment(zonestats, counter); } } static void query_send(ns_client_t *client) { dns_statscounter_t counter; + if ((client->message->flags & DNS_MESSAGEFLAG_AA) == 0) + inc_stats(client, dns_nsstatscounter_nonauthans); + else + inc_stats(client, dns_nsstatscounter_authans); if (client->message->rcode == dns_rcode_noerror) { if (ISC_LIST_EMPTY(client->message->sections[DNS_SECTION_ANSWER])) { if (client->query.isreferral) { - counter = dns_statscounter_referral; + counter = dns_nsstatscounter_referral; } else { - counter = dns_statscounter_nxrrset; + counter = dns_nsstatscounter_nxrrset; } } else { - counter = dns_statscounter_success; + counter = dns_nsstatscounter_success; } } else if (client->message->rcode == dns_rcode_nxdomain) { - counter = dns_statscounter_nxdomain; + counter = dns_nsstatscounter_nxdomain; } else { /* We end up here in case of YXDOMAIN, and maybe others */ - counter = dns_statscounter_failure; + counter = dns_nsstatscounter_failure; } inc_stats(client, counter); ns_client_send(client); @@ -164,18 +166,28 @@ query_send(ns_client_t *client) { static void query_error(ns_client_t *client, isc_result_t result) { - inc_stats(client, dns_statscounter_failure); + switch (result) { + case DNS_R_SERVFAIL: + inc_stats(client, dns_nsstatscounter_servfail); + break; + case DNS_R_FORMERR: + inc_stats(client, dns_nsstatscounter_formerr); + break; + default: + inc_stats(client, dns_nsstatscounter_failure); + break; + } ns_client_error(client, result); } static void query_next(ns_client_t *client, isc_result_t result) { if (result == DNS_R_DUPLICATE) - inc_stats(client, dns_statscounter_duplicate); + inc_stats(client, dns_nsstatscounter_duplicate); else if (result == DNS_R_DROP) - inc_stats(client, dns_statscounter_dropped); + inc_stats(client, dns_nsstatscounter_dropped); else - inc_stats(client, dns_statscounter_failure); + inc_stats(client, dns_nsstatscounter_failure); ns_client_next(client, result); } @@ -2758,6 +2770,13 @@ query_addwildcardproof(ns_client_t *client, dns_db_t *db, &olabels); (void)dns_name_fullcompare(name, &nsec.next, &order, &nlabels); + /* + * Check for a pathological condition created when + * serving some malformed signed zones and bail out. + */ + if (dns_name_countlabels(name) == nlabels) + goto cleanup; + if (olabels > nlabels) dns_name_split(name, olabels, NULL, wname); else @@ -2925,13 +2944,14 @@ query_resume(isc_task_t *task, isc_event_t *event) { static isc_result_t query_recurse(ns_client_t *client, dns_rdatatype_t qtype, dns_name_t *qdomain, - dns_rdataset_t *nameservers) + dns_rdataset_t *nameservers, isc_boolean_t resuming) { isc_result_t result; dns_rdataset_t *rdataset, *sigrdataset; isc_sockaddr_t *peeraddr; - inc_stats(client, dns_statscounter_recursion); + if (!resuming) + inc_stats(client, dns_nsstatscounter_recursion); /* * We are about to recurse, which means that this client will @@ -3336,6 +3356,7 @@ query_find(ns_client_t *client, dns_fetchevent_t *event, dns_rdatatype_t qtype) unsigned int options; isc_boolean_t empty_wild; dns_rdataset_t *noqname; + isc_boolean_t resuming; CTRACE("query_find"); @@ -3361,6 +3382,7 @@ query_find(ns_client_t *client, dns_fetchevent_t *event, dns_rdatatype_t qtype) need_wildcardproof = ISC_FALSE; empty_wild = ISC_FALSE; options = 0; + resuming = ISC_FALSE; if (event != NULL) { /* @@ -3403,6 +3425,7 @@ query_find(ns_client_t *client, dns_fetchevent_t *event, dns_rdatatype_t qtype) } result = event->result; + resuming = ISC_TRUE; goto resume; } @@ -3490,6 +3513,11 @@ query_find(ns_client_t *client, dns_fetchevent_t *event, dns_rdatatype_t qtype) } if (result != ISC_R_SUCCESS) { if (result == DNS_R_REFUSED) { + if (WANTRECURSION(client)) { + inc_stats(client, + dns_nsstatscounter_recurserej); + } else + inc_stats(client, dns_nsstatscounter_authrej); if (!PARTIALANSWER(client)) QUERY_ERROR(DNS_R_REFUSED); } else @@ -3603,7 +3631,7 @@ query_find(ns_client_t *client, dns_fetchevent_t *event, dns_rdatatype_t qtype) */ if (RECURSIONOK(client)) { result = query_recurse(client, qtype, - NULL, NULL); + NULL, NULL, resuming); if (result == ISC_R_SUCCESS) client->query.attributes |= NS_QUERYATTR_RECURSING; @@ -3774,10 +3802,12 @@ query_find(ns_client_t *client, dns_fetchevent_t *event, dns_rdatatype_t qtype) */ if (dns_rdatatype_atparent(type)) result = query_recurse(client, qtype, - NULL, NULL); + NULL, NULL, + resuming); else result = query_recurse(client, qtype, - fname, rdataset); + fname, rdataset, + resuming); if (result == ISC_R_SUCCESS) client->query.attributes |= NS_QUERYATTR_RECURSING; @@ -4221,7 +4251,8 @@ query_find(ns_client_t *client, dns_fetchevent_t *event, dns_rdatatype_t qtype) result = query_recurse(client, qtype, NULL, - NULL); + NULL, + resuming); if (result == ISC_R_SUCCESS) client->query.attributes |= NS_QUERYATTR_RECURSING; @@ -4531,6 +4562,7 @@ ns_query_start(ns_client_t *client) { rdataset = ISC_LIST_HEAD(client->query.qname->list); INSIST(rdataset != NULL); qtype = rdataset->type; + dns_rdatatypestats_increment(ns_g_server->rcvquerystats, qtype); if (dns_rdatatype_ismeta(qtype)) { switch (qtype) { case dns_rdatatype_any: diff --git a/bin/named/server.c b/bin/named/server.c index 08973564..d0037d92 100644 --- a/bin/named/server.c +++ b/bin/named/server.c @@ -15,7 +15,7 @@ * PERFORMANCE OF THIS SOFTWARE. */ -/* $Id: server.c,v 1.495.10.6 2008/01/24 02:29:56 jinmei Exp $ */ +/* $Id: server.c,v 1.495.10.10 2008/04/03 06:20:33 tbox Exp $ */ /*! \file */ @@ -729,6 +729,11 @@ configure_peer(const cfg_obj_t *cpeer, isc_mem_t *mctx, dns_peer_t **peerp) { if (obj != NULL) CHECK(dns_peer_setrequestixfr(peer, cfg_obj_asboolean(obj))); + obj = NULL; + (void)cfg_map_get(cpeer, "request-nsid", &obj); + if (obj != NULL) + CHECK(dns_peer_setrequestnsid(peer, cfg_obj_asboolean(obj))); + obj = NULL; (void)cfg_map_get(cpeer, "edns", &obj); if (obj != NULL) @@ -937,6 +942,24 @@ check_dbtype(dns_zone_t **zonep, unsigned int dbtypec, const char **dbargv, isc_mem_free(mctx, argv); } +static isc_result_t +setquerystats(dns_zone_t *zone, isc_mem_t *mctx, isc_boolean_t on) { + isc_result_t result; + dns_stats_t *zoneqrystats; + + zoneqrystats = NULL; + if (on) { + result = dns_generalstats_create(mctx, &zoneqrystats, + dns_nsstatscounter_max); + if (result != ISC_R_SUCCESS) + return (result); + } + dns_zone_setrequeststats(zone, zoneqrystats); + if (zoneqrystats != NULL) + dns_stats_detach(&zoneqrystats); + + return (ISC_R_SUCCESS); +} /* * Configure 'view' according to 'vconfig', taking defaults from 'config' @@ -993,6 +1016,8 @@ configure_view(dns_view_t *view, const cfg_obj_t *config, isc_boolean_t empty_zones_enable; const cfg_obj_t *disablelist = NULL; isc_uint32_t nqports, qports_updateinterval; + dns_stats_t *resstats = NULL; + dns_stats_t *resquerystats = NULL; REQUIRE(DNS_VIEW_VALID(view)); @@ -1042,6 +1067,7 @@ configure_view(dns_view_t *view, const cfg_obj_t *config, CHECK(isc_mem_create(0, 0, &cmctx)); CHECK(dns_acache_create(&view->acache, cmctx, ns_g_taskmgr, ns_g_timermgr)); + isc_mem_setname(cmctx, "acache", NULL); isc_mem_detach(&cmctx); } if (view->acache != NULL) { @@ -1136,6 +1162,8 @@ configure_view(dns_view_t *view, const cfg_obj_t *config, * Configure the view's cache. Try to reuse an existing * cache if possible, otherwise create a new cache. * Note that the ADB is not preserved in either case. + * When a matching view is found, the associated statistics are + * also retrieved and reused. * * XXX Determining when it is safe to reuse a cache is * tricky. When the view's configuration changes, the cached @@ -1157,11 +1185,14 @@ configure_view(dns_view_t *view, const cfg_obj_t *config, "reusing existing cache"); reused_cache = ISC_TRUE; dns_cache_attach(pview->cache, &cache); + dns_view_getresstats(pview, &resstats); + dns_view_getresquerystats(pview, &resquerystats); dns_view_detach(&pview); } else { CHECK(isc_mem_create(0, 0, &cmctx)); CHECK(dns_cache_create(cmctx, ns_g_taskmgr, ns_g_timermgr, view->rdclass, "rbt", 0, NULL, &cache)); + isc_mem_setname(cmctx, "cache", NULL); } dns_view_setcache(view, cache); @@ -1337,6 +1368,15 @@ configure_view(dns_view_t *view, const cfg_obj_t *config, * 60)); } + if (resstats == NULL) { + CHECK(dns_generalstats_create(mctx, &resstats, + dns_resstatscounter_max)); + } + dns_view_setresstats(view, resstats); + if (resquerystats == NULL) + CHECK(dns_rdatatypestats_create(mctx, &resquerystats)); + dns_view_setresquerystats(view, resquerystats); + /* * Set the ADB cache size to 1/8th of the max-cache-size. */ @@ -1654,6 +1694,11 @@ configure_view(dns_view_t *view, const cfg_obj_t *config, INSIST(result == ISC_R_SUCCESS); view->provideixfr = cfg_obj_asboolean(obj); + obj = NULL; + result = ns_config_get(maps, "request-nsid", &obj); + INSIST(result == ISC_R_SUCCESS); + view->requestnsid = cfg_obj_asboolean(obj); + obj = NULL; result = ns_config_get(maps, "max-clients-per-query", &obj); INSIST(result == ISC_R_SUCCESS); @@ -1823,6 +1868,7 @@ configure_view(dns_view_t *view, const cfg_obj_t *config, const char *empty_dbtype[4] = { "_builtin", "empty", NULL, NULL }; int empty_dbtypec = 4; + isc_boolean_t zonestats_on; dns_fixedname_init(&fixed); name = dns_fixedname_name(&fixed); @@ -1857,6 +1903,11 @@ configure_view(dns_view_t *view, const cfg_obj_t *config, } else empty_dbtype[3] = "."; + obj = NULL; + result = ns_config_get(maps, "zone-statistics", &obj); + INSIST(result == ISC_R_SUCCESS); + zonestats_on = cfg_obj_asboolean(obj); + logit = ISC_TRUE; for (empty = empty_zones[empty_zone].zone; empty != NULL; @@ -1881,6 +1932,7 @@ configure_view(dns_view_t *view, const cfg_obj_t *config, */ (void)dns_view_findzone(view, name, &zone); if (zone != NULL) { + CHECK(setquerystats(zone, mctx, zonestats_on)); dns_zone_detach(&zone); continue; } @@ -1931,6 +1983,8 @@ configure_view(dns_view_t *view, const cfg_obj_t *config, if (zone != NULL) { dns_zone_setview(zone, view); CHECK(dns_view_addzone(view, zone)); + CHECK(setquerystats(zone, mctx, + zonestats_on)); dns_zone_detach(&zone); continue; } @@ -1942,6 +1996,7 @@ configure_view(dns_view_t *view, const cfg_obj_t *config, CHECK(dns_zonemgr_managezone(ns_g_server->zonemgr, zone)); dns_zone_setclass(zone, view->rdclass); dns_zone_settype(zone, dns_zone_master); + dns_zone_setstats(zone, ns_g_server->zonestats); CHECK(dns_zone_setdbtype(zone, empty_dbtypec, empty_dbtype)); if (view->queryacl != NULL) @@ -1952,6 +2007,7 @@ configure_view(dns_view_t *view, const cfg_obj_t *config, dns_zone_setnotifytype(zone, dns_notifytype_no); dns_zone_setoption(zone, DNS_ZONEOPT_NOCHECKNS, ISC_TRUE); + CHECK(setquerystats(zone, mctx, zonestats_on)); CHECK(dns_view_addzone(view, zone)); isc_log_write(ns_g_lctx, NS_LOGCATEGORY_GENERAL, NS_LOGMODULE_SERVER, ISC_LOG_INFO, @@ -1970,6 +2026,10 @@ configure_view(dns_view_t *view, const cfg_obj_t *config, dns_dispatch_detach(&dispatch4); if (dispatch6 != NULL) dns_dispatch_detach(&dispatch6); + if (resstats != NULL) + dns_stats_detach(&resstats); + if (resquerystats != NULL) + dns_stats_detach(&resquerystats); if (order != NULL) dns_order_detach(&order); if (cmctx != NULL) @@ -2418,6 +2478,7 @@ configure_zone(const cfg_obj_t *config, const cfg_obj_t *zconfig, if (view->acache != NULL) dns_zone_setacache(zone, view->acache); CHECK(dns_zonemgr_managezone(ns_g_server->zonemgr, zone)); + dns_zone_setstats(zone, ns_g_server->zonestats); } /* @@ -3461,8 +3522,12 @@ load_configuration(const char *filename, ns_server_t *server, result = ns_config_get(maps, "server-id", &obj); server->server_usehostname = ISC_FALSE; if (result == ISC_R_SUCCESS && cfg_obj_isboolean(obj)) { - server->server_usehostname = ISC_TRUE; + /* The parser translates "hostname" to ISC_TRUE */ + server->server_usehostname = cfg_obj_asboolean(obj); + result = setstring(server, &server->server_id, NULL); + RUNTIME_CHECK(result == ISC_R_SUCCESS); } else if (result == ISC_R_SUCCESS) { + /* Found a quoted string */ CHECKM(setoptstring(server, &server->server_id, obj), "strdup"); } else { result = setstring(server, &server->server_id, NULL); @@ -3595,6 +3660,8 @@ run_server(isc_task_t *task, isc_event_t *event) { &ns_g_dispatchmgr), "creating dispatch manager"); + dns_dispatchmgr_setstats(ns_g_dispatchmgr, server->resolverstats); + CHECKFATAL(ns_interfacemgr_create(ns_g_mctx, ns_g_taskmgr, ns_g_socketmgr, ns_g_dispatchmgr, &server->interfacemgr), @@ -3783,7 +3850,11 @@ ns_server_create(isc_mem_t *mctx, ns_server_t **serverp) { server->statsfile = isc_mem_strdup(server->mctx, "named.stats"); CHECKFATAL(server->statsfile == NULL ? ISC_R_NOMEMORY : ISC_R_SUCCESS, "isc_mem_strdup"); - server->querystats = NULL; + server->nsstats = NULL; + server->rcvquerystats = NULL; + server->opcodestats = NULL; + server->zonestats = NULL; + server->resolverstats = NULL; server->dumpfile = isc_mem_strdup(server->mctx, "named_dump.db"); CHECKFATAL(server->dumpfile == NULL ? ISC_R_NOMEMORY : ISC_R_SUCCESS, @@ -3800,8 +3871,24 @@ ns_server_create(isc_mem_t *mctx, ns_server_t **serverp) { server->server_usehostname = ISC_FALSE; server->server_id = NULL; - CHECKFATAL(dns_stats_create(ns_g_mctx, &server->querystats), - "dns_stats_create"); + CHECKFATAL(dns_generalstats_create(ns_g_mctx, &server->nsstats, + dns_nsstatscounter_max), + "dns_stats_create (server)"); + + CHECKFATAL(dns_rdatatypestats_create(ns_g_mctx, + &server->rcvquerystats), + "dns_stats_create (rcvquery)"); + + CHECKFATAL(dns_opcodestats_create(ns_g_mctx, &server->opcodestats), + "dns_stats_create (opcode)"); + + CHECKFATAL(dns_generalstats_create(ns_g_mctx, &server->zonestats, + dns_zonestatscounter_max), + "dns_stats_create (zone)"); + + CHECKFATAL(dns_generalstats_create(ns_g_mctx, &server->resolverstats, + dns_resstatscounter_max), + "dns_stats_create (resolver)"); server->flushonshutdown = ISC_FALSE; server->log_queries = ISC_FALSE; @@ -3825,7 +3912,11 @@ ns_server_destroy(ns_server_t **serverp) { ns_controls_destroy(&server->controls); - dns_stats_destroy(server->mctx, &server->querystats); + dns_stats_detach(&server->nsstats); + dns_stats_detach(&server->rcvquerystats); + dns_stats_detach(&server->opcodestats); + dns_stats_detach(&server->zonestats); + dns_stats_detach(&server->resolverstats); isc_mem_free(server->mctx, server->statsfile); isc_mem_free(server->mctx, server->dumpfile); @@ -4389,60 +4480,14 @@ ns_listenelt_fromconfig(const cfg_obj_t *listener, const cfg_obj_t *config, isc_result_t ns_server_dumpstats(ns_server_t *server) { isc_result_t result; - dns_zone_t *zone, *next; - isc_stdtime_t now; FILE *fp = NULL; - int i; - int ncounters; - isc_uint64_t counters[DNS_STATS_NCOUNTERS]; - - isc_stdtime_get(&now); CHECKMF(isc_stdio_open(server->statsfile, "a", &fp), "could not open statistics dump file", server->statsfile); - ncounters = DNS_STATS_NCOUNTERS; - fprintf(fp, "+++ Statistics Dump +++ (%lu)\n", (unsigned long)now); - - dns_stats_copy(server->querystats, counters); - for (i = 0; i < ncounters; i++) - fprintf(fp, "%s %" ISC_PRINT_QUADFORMAT "u\n", - dns_statscounter_names[i], counters[i]); - - zone = NULL; - for (result = dns_zone_first(server->zonemgr, &zone); - result == ISC_R_SUCCESS; - next = NULL, result = dns_zone_next(zone, &next), zone = next) - { - dns_stats_t *zonestats = dns_zone_getstats(zone); - if (zonestats != NULL) { - char zonename[DNS_NAME_FORMATSIZE]; - dns_view_t *view; - char *viewname; - - dns_stats_copy(zonestats, counters); - dns_name_format(dns_zone_getorigin(zone), - zonename, sizeof(zonename)); - view = dns_zone_getview(zone); - viewname = view->name; - for (i = 0; i < ncounters; i++) { - fprintf(fp, "%s %" ISC_PRINT_QUADFORMAT - "u %s", - dns_statscounter_names[i], - counters[i], - zonename); - if (strcmp(viewname, "_default") != 0) - fprintf(fp, " %s", viewname); - fprintf(fp, "\n"); - } - } - } - if (result == ISC_R_NOMORE) - result = ISC_R_SUCCESS; + result = ns_stats_dump(server, fp); CHECK(result); - fprintf(fp, "--- Statistics Dump --- (%lu)\n", (unsigned long)now); - cleanup: if (fp != NULL) (void)isc_stdio_close(fp); diff --git a/bin/named/statschannel.c b/bin/named/statschannel.c index 3b4bd831..e5b7c338 100644 --- a/bin/named/statschannel.c +++ b/bin/named/statschannel.c @@ -14,7 +14,7 @@ * PERFORMANCE OF THIS SOFTWARE. */ -/* $Id: statschannel.c,v 1.2.2.4 2008/01/24 02:29:56 jinmei Exp $ */ +/* $Id: statschannel.c,v 1.2.2.9 2008/04/09 22:53:06 tbox Exp $ */ /*! \file */ @@ -23,17 +23,25 @@ #include #include #include +#include #include #include #include +#include +#include +#include +#include #include #include +#include #include #include #include +#include "bind9.xsl.h" + struct ns_statschannel { /* Unlocked */ isc_httpdmgr_t *httpdmgr; @@ -51,6 +59,190 @@ struct ns_statschannel { ISC_LINK(struct ns_statschannel) link; }; +typedef enum { statsformat_file, statsformat_xml } statsformat_t; + +typedef struct +stats_dumparg { + statsformat_t type; + void *arg; /* type dependent argument */ + const char **desc; /* used for general statistics */ + int ncounters; /* used for general statistics */ +} stats_dumparg_t; + +static isc_once_t once = ISC_ONCE_INIT; + +static void +generalstat_dump(dns_statscounter_t counter, isc_uint64_t val, void *arg) { + stats_dumparg_t *dumparg = arg; + FILE *fp; +#ifdef HAVE_LIBXML2 + xmlTextWriterPtr writer; +#endif + + REQUIRE(counter < dumparg->ncounters); + + switch (dumparg->type) { + case statsformat_file: + fp = dumparg->arg; + fprintf(fp, "%20" ISC_PRINT_QUADFORMAT "u %s\n", val, + dumparg->desc[counter]); + break; + case statsformat_xml: +#ifdef HAVE_LIBXML2 + writer = dumparg->arg; + + xmlTextWriterStartElement(writer, ISC_XMLCHAR + dumparg->desc[counter]); + xmlTextWriterWriteFormatString(writer, + "%" ISC_PRINT_QUADFORMAT "u", + val); + xmlTextWriterEndElement(writer); +#endif + break; + } +} + +static void +rdtypestat_dump(dns_rdatastatstype_t type, isc_uint64_t val, void *arg) { + char typebuf[64]; + const char *typestr; + stats_dumparg_t *dumparg = arg; + FILE *fp; +#ifdef HAVE_LIBXML2 + xmlTextWriterPtr writer; +#endif + + if ((DNS_RDATASTATSTYPE_ATTR(type) & DNS_RDATASTATSTYPE_ATTR_OTHERTYPE) + == 0) { + dns_rdatatype_format(DNS_RDATASTATSTYPE_BASE(type), typebuf, + sizeof(typebuf)); + typestr = typebuf; + } else + typestr = "Others"; + + switch (dumparg->type) { + case statsformat_file: + fp = dumparg->arg; + fprintf(fp, "%20" ISC_PRINT_QUADFORMAT "u %s\n", val, typestr); + break; + case statsformat_xml: +#ifdef HAVE_LIBXML2 + writer = dumparg->arg; + + xmlTextWriterStartElement(writer, ISC_XMLCHAR "rdtype"); + + xmlTextWriterStartElement(writer, ISC_XMLCHAR "name"); + xmlTextWriterWriteString(writer, ISC_XMLCHAR typestr); + xmlTextWriterEndElement(writer); /* name */ + + xmlTextWriterStartElement(writer, ISC_XMLCHAR "counter"); + xmlTextWriterWriteFormatString(writer, + "%" ISC_PRINT_QUADFORMAT "u", + val); + xmlTextWriterEndElement(writer); /* counter */ + + xmlTextWriterEndElement(writer); /* rdtype */ +#endif + break; + } +} + +static void +rdatasetstats_dump(dns_rdatastatstype_t type, isc_uint64_t val, void *arg) { + stats_dumparg_t *dumparg = arg; + FILE *fp; + char typebuf[64]; + const char *typestr; + isc_boolean_t nxrrset = ISC_FALSE; +#ifdef HAVE_LIBXML2 + xmlTextWriterPtr writer; +#endif + + if ((DNS_RDATASTATSTYPE_ATTR(type) & DNS_RDATASTATSTYPE_ATTR_NXDOMAIN) + != 0) { + typestr = "NXDOMAIN"; + } else if ((DNS_RDATASTATSTYPE_ATTR(type) & + DNS_RDATASTATSTYPE_ATTR_OTHERTYPE) != 0) { + typestr = "Others"; + } else { + dns_rdatatype_format(DNS_RDATASTATSTYPE_BASE(type), typebuf, + sizeof(typebuf)); + typestr = typebuf; + } + + if ((DNS_RDATASTATSTYPE_ATTR(type) & DNS_RDATASTATSTYPE_ATTR_NXRRSET) + != 0) + nxrrset = ISC_TRUE; + + switch (dumparg->type) { + case statsformat_file: + fp = dumparg->arg; + fprintf(fp, "%20" ISC_PRINT_QUADFORMAT "u %s%s\n", val, + nxrrset ? "!" : "", typestr); + break; + case statsformat_xml: +#ifdef HAVE_LIBXML2 + writer = dumparg->arg; + + xmlTextWriterStartElement(writer, ISC_XMLCHAR "rrset"); + xmlTextWriterStartElement(writer, ISC_XMLCHAR "name"); + xmlTextWriterWriteFormatString(writer, "%s%s", + nxrrset ? "!" : "", typestr); + xmlTextWriterEndElement(writer); /* name */ + + xmlTextWriterStartElement(writer, ISC_XMLCHAR "counter"); + xmlTextWriterWriteFormatString(writer, + "%" ISC_PRINT_QUADFORMAT "u", + val); + xmlTextWriterEndElement(writer); /* counter */ + + xmlTextWriterEndElement(writer); /* rrset */ +#endif + break; + } +} + +static void +opcodestat_dump(dns_opcode_t code, isc_uint64_t val, void *arg) { + FILE *fp = arg; + isc_buffer_t b; + char codebuf[64]; + stats_dumparg_t *dumparg = arg; +#ifdef HAVE_LIBXML2 + xmlTextWriterPtr writer; +#endif + + isc_buffer_init(&b, codebuf, sizeof(codebuf) - 1); + dns_opcode_totext(code, &b); + codebuf[isc_buffer_usedlength(&b)] = '\0'; + + switch (dumparg->type) { + case statsformat_file: + fp = dumparg->arg; + fprintf(fp, "%20" ISC_PRINT_QUADFORMAT "u %s\n", val, codebuf); + break; + case statsformat_xml: +#ifdef HAVE_LIBXML2 + writer = dumparg->arg; + + xmlTextWriterStartElement(writer, ISC_XMLCHAR "opcode"); + + xmlTextWriterStartElement(writer, ISC_XMLCHAR "name"); + xmlTextWriterWriteString(writer, ISC_XMLCHAR codebuf); + xmlTextWriterEndElement(writer); /* name */ + + xmlTextWriterStartElement(writer, ISC_XMLCHAR "counter"); + xmlTextWriterWriteFormatString(writer, + "%" ISC_PRINT_QUADFORMAT "u", + val); + xmlTextWriterEndElement(writer); /* counter */ + + xmlTextWriterEndElement(writer); /* opcode */ +#endif + break; + } +} + #ifdef HAVE_LIBXML2 /* XXXMLG below here sucks. */ @@ -58,8 +250,50 @@ struct ns_statschannel { #define TRY(a) do { result = (a); INSIST(result == ISC_R_SUCCESS); } while(0); #define TRY0(a) do { xmlrc = (a); INSIST(xmlrc >= 0); } while(0); -#define NODES 8 -#define SPACES 3 +static isc_result_t +zone_xmlrender(dns_zone_t *zone, void *arg) { + char buf[1024 + 32]; /* sufficiently large for zone name and class */ + dns_rdataclass_t rdclass; + isc_uint32_t serial; + xmlTextWriterPtr writer = arg; + stats_dumparg_t dumparg; + dns_stats_t *zonestats; + + xmlTextWriterStartElement(writer, ISC_XMLCHAR "zone"); + + dns_zone_name(zone, buf, sizeof(buf)); + xmlTextWriterStartElement(writer, ISC_XMLCHAR "name"); + xmlTextWriterWriteString(writer, ISC_XMLCHAR buf); + xmlTextWriterEndElement(writer); + + rdclass = dns_zone_getclass(zone); + dns_rdataclass_format(rdclass, buf, sizeof(buf)); + xmlTextWriterStartElement(writer, ISC_XMLCHAR "rdataclass"); + xmlTextWriterWriteString(writer, ISC_XMLCHAR buf); + xmlTextWriterEndElement(writer); + + serial = dns_zone_getserial(zone); + xmlTextWriterStartElement(writer, ISC_XMLCHAR "serial"); + xmlTextWriterWriteFormatString(writer, "%u", serial); + xmlTextWriterEndElement(writer); + + dumparg.type = statsformat_xml; + dumparg.arg = writer; + dumparg.desc = nsstats_xmldesc; + dumparg.ncounters = dns_nsstatscounter_max; + + zonestats = dns_zone_getrequeststats(zone); + if (zonestats != NULL) { + xmlTextWriterStartElement(writer, ISC_XMLCHAR "counters"); + dns_generalstats_dump(zonestats, generalstat_dump, + &dumparg, DNS_STATSDUMP_VERBOSE); + xmlTextWriterEndElement(writer); /* counters */ + } + + xmlTextWriterEndElement(writer); /* zone */ + + return (ISC_R_SUCCESS); +} static void generatexml(ns_server_t *server, int *buflen, xmlChar **buf) { @@ -70,8 +304,8 @@ generatexml(ns_server_t *server, int *buflen, xmlChar **buf) { xmlDocPtr doc; int xmlrc; dns_view_t *view; - int i; - isc_uint64_t counters[DNS_STATS_NCOUNTERS]; + stats_dumparg_t dumparg; + dns_stats_t *cachestats; isc_time_now(&now); isc_time_formatISO8601(&ns_g_boottime, boottime, sizeof boottime); @@ -90,6 +324,10 @@ generatexml(ns_server_t *server, int *buflen, xmlChar **buf) { TRY0(xmlTextWriterWriteAttribute(writer, ISC_XMLCHAR "version", ISC_XMLCHAR "1.0")); + /* Set common fields for statistics dump */ + dumparg.type = statsformat_xml; + dumparg.arg = writer; + /* * Start by rendering the views we know of here. For each view we * know of, call its rendering function. @@ -97,7 +335,43 @@ generatexml(ns_server_t *server, int *buflen, xmlChar **buf) { view = ISC_LIST_HEAD(server->viewlist); TRY0(xmlTextWriterStartElement(writer, ISC_XMLCHAR "views")); while (view != NULL) { - dns_view_xmlrender(view, writer, ISC_XML_RENDERALL); + xmlTextWriterStartElement(writer, ISC_XMLCHAR "view"); + + xmlTextWriterStartElement(writer, ISC_XMLCHAR "name"); + xmlTextWriterWriteString(writer, ISC_XMLCHAR view->name); + xmlTextWriterEndElement(writer); + + xmlTextWriterStartElement(writer, ISC_XMLCHAR "zones"); + dns_zt_apply(view->zonetable, ISC_FALSE, zone_xmlrender, + writer); + xmlTextWriterEndElement(writer); + + if (view->resquerystats != NULL) { + dns_rdatatypestats_dump(view->resquerystats, + rdtypestat_dump, &dumparg, 0); + } + + if (view->resstats != NULL) { + xmlTextWriterStartElement(writer, + ISC_XMLCHAR "resstats"); + dumparg.ncounters = dns_resstatscounter_max; + dumparg.desc = resstats_xmldesc; /* auto-generated */ + dns_generalstats_dump(view->resstats, generalstat_dump, + &dumparg, DNS_STATSDUMP_VERBOSE); + xmlTextWriterEndElement(writer); /* resstats */ + } + + cachestats = dns_db_getrrsetstats(view->cachedb); + if (cachestats != NULL) { + xmlTextWriterStartElement(writer, + ISC_XMLCHAR "cache"); + dns_rdatasetstats_dump(cachestats, rdatasetstats_dump, + &dumparg, 0); + xmlTextWriterEndElement(writer); /* cache */ + } + + xmlTextWriterEndElement(writer); /* view */ + view = ISC_LIST_NEXT(view, link); } TRY0(xmlTextWriterEndElement(writer)); /* views */ @@ -117,21 +391,42 @@ generatexml(ns_server_t *server, int *buflen, xmlChar **buf) { xmlTextWriterStartElement(writer, ISC_XMLCHAR "current-time"); xmlTextWriterWriteString(writer, ISC_XMLCHAR nowstr); xmlTextWriterEndElement(writer); - TRY0(xmlTextWriterStartElement(writer, ISC_XMLCHAR "counters")); - dns_stats_copy(server->querystats, counters); - for (i = 0; i < DNS_STATS_NCOUNTERS; i++) { - xmlTextWriterStartElement(writer, - ISC_XMLCHAR dns_statscounter_names[i]); - xmlTextWriterWriteFormatString(writer, - "%" ISC_PRINT_QUADFORMAT "u", - counters[i]); - xmlTextWriterEndElement(writer); - } - xmlTextWriterEndElement(writer); /* counters */ + + TRY0(xmlTextWriterStartElement(writer, ISC_XMLCHAR "requests")); + dns_opcodestats_dump(server->opcodestats, opcodestat_dump, &dumparg, + 0); + xmlTextWriterEndElement(writer); /* requests */ + + TRY0(xmlTextWriterStartElement(writer, ISC_XMLCHAR "queries-in")); + dns_rdatatypestats_dump(server->rcvquerystats, rdtypestat_dump, + &dumparg, 0); + xmlTextWriterEndElement(writer); /* queries-in */ + + TRY0(xmlTextWriterStartElement(writer, ISC_XMLCHAR "nsstats")); + dumparg.desc = nsstats_xmldesc; /* auto-generated in bind9.xsl.h */ + dumparg.ncounters = dns_nsstatscounter_max; + dns_generalstats_dump(server->nsstats, generalstat_dump, &dumparg, + DNS_STATSDUMP_VERBOSE); + xmlTextWriterEndElement(writer); /* nsstats */ + + TRY0(xmlTextWriterStartElement(writer, ISC_XMLCHAR "zonestats")); + dumparg.desc = zonestats_xmldesc; /* auto-generated in bind9.xsl.h */ + dumparg.ncounters = dns_zonestatscounter_max; + dns_generalstats_dump(server->zonestats, generalstat_dump, &dumparg, + DNS_STATSDUMP_VERBOSE); + xmlTextWriterEndElement(writer); /* zonestats */ + + xmlTextWriterStartElement(writer, ISC_XMLCHAR "resstats"); + dumparg.ncounters = dns_resstatscounter_max; + dumparg.desc = resstats_xmldesc; + dns_generalstats_dump(server->resolverstats, generalstat_dump, + &dumparg, DNS_STATSDUMP_VERBOSE); + xmlTextWriterEndElement(writer); /* resstats */ + xmlTextWriterEndElement(writer); /* server */ TRY0(xmlTextWriterStartElement(writer, ISC_XMLCHAR "memory")); - isc_mem_renderxml(server->mctx, writer); + isc_mem_renderxml(writer); TRY0(xmlTextWriterEndElement(writer)); /* memory */ TRY0(xmlTextWriterEndElement(writer)); /* statistics */ @@ -187,8 +482,6 @@ render_xsl(const char *url, const char *querystring, void *args, isc_buffer_t *b, isc_httpdfree_t **freecb, void **freecb_args) { -#include "bind9.xsl.h" - UNUSED(url); UNUSED(querystring); UNUSED(args); @@ -196,8 +489,8 @@ render_xsl(const char *url, const char *querystring, void *args, *retcode = 200; *retmsg = "OK"; *mimetype = "text/xslt+xml"; - isc_buffer_reinit(b, msg, strlen(msg)); - isc_buffer_add(b, strlen(msg)); + isc_buffer_reinit(b, xslmsg, strlen(xslmsg)); + isc_buffer_add(b, strlen(xslmsg)); *freecb = NULL; *freecb_args = NULL; @@ -249,7 +542,7 @@ destroy_listener(void *arg) { REQUIRE(listener != NULL); REQUIRE(!ISC_LINK_LINKED(listener, link)); - /* We don't to have acquire the lock here since it's already unlinked */ + /* We don't have to acquire the lock here since it's already unlinked */ dns_acl_detach(&listener->acl); DESTROYLOCK(&listener->lock); @@ -533,3 +826,302 @@ ns_statschannels_shutdown(ns_server_t *server) { shutdown_listener(listener); } } + +/*% + * Statistics descriptions. These could be statistically initialized at + * compile time, but we configure them run time in the init_desc() function + * below so that they'll be less susceptible to counter name changes. + * Note that bind9.xsl must still be updated consistently with the counter + * numbering. + */ +static const char *nsstats_desc[dns_nsstatscounter_max]; +static const char *resstats_desc[dns_resstatscounter_max]; +static const char *zonestats_desc[dns_zonestatscounter_max]; + +static inline void +set_desc(int counter, int maxcounter, const char *desc, const char **descs) { + REQUIRE(counter < maxcounter); + REQUIRE(descs[counter] == NULL); + + descs[counter] = desc; +} + +static void +init_desc() { + int i; + + /* Initialize name server statistics */ + memset(nsstats_desc, 0, + dns_nsstatscounter_max * sizeof(nsstats_desc[0])); + set_desc(dns_nsstatscounter_requestv4, dns_nsstatscounter_max, + "IPv4 requests received", nsstats_desc); + set_desc(dns_nsstatscounter_requestv6, dns_nsstatscounter_max, + "IPv6 requests received", nsstats_desc); + set_desc(dns_nsstatscounter_edns0in, dns_nsstatscounter_max, + "requests with EDNS(0) received", nsstats_desc); + set_desc(dns_nsstatscounter_badednsver, dns_nsstatscounter_max, + "requests with unsupported EDNS version received", + nsstats_desc); + set_desc(dns_nsstatscounter_tsigin, dns_nsstatscounter_max, + "requests with TSIG received", nsstats_desc); + set_desc(dns_nsstatscounter_sig0in, dns_nsstatscounter_max, + "requests with SIG(0) received", nsstats_desc); + set_desc(dns_nsstatscounter_invalidsig, dns_nsstatscounter_max, + "requests with invalid signature", nsstats_desc); + set_desc(dns_nsstatscounter_tcp, dns_nsstatscounter_max, + "TCP requests received", nsstats_desc); + set_desc(dns_nsstatscounter_authrej, dns_nsstatscounter_max, + "auth queries rejected", nsstats_desc); + set_desc(dns_nsstatscounter_recurserej, dns_nsstatscounter_max, + "recursive queries rejected", nsstats_desc); + set_desc(dns_nsstatscounter_xfrrej, dns_nsstatscounter_max, + "transfer requests rejected", nsstats_desc); + set_desc(dns_nsstatscounter_updaterej, dns_nsstatscounter_max, + "update requests rejected", nsstats_desc); + set_desc(dns_nsstatscounter_response, dns_nsstatscounter_max, + "responses sent", nsstats_desc); + set_desc(dns_nsstatscounter_truncatedresp, dns_nsstatscounter_max, + "truncated responses sent", nsstats_desc); + set_desc(dns_nsstatscounter_edns0out, dns_nsstatscounter_max, + "responses with EDNS(0) sent", nsstats_desc); + set_desc(dns_nsstatscounter_tsigout, dns_nsstatscounter_max, + "responses with TSIG sent", nsstats_desc); + set_desc(dns_nsstatscounter_sig0out, dns_nsstatscounter_max, + "responses with SIG(0) sent", nsstats_desc); + set_desc(dns_nsstatscounter_success, dns_nsstatscounter_max, + "queries resulted in successful answer", nsstats_desc); + set_desc(dns_nsstatscounter_authans, dns_nsstatscounter_max, + "queries resulted in authoritative answer", nsstats_desc); + set_desc(dns_nsstatscounter_nonauthans, dns_nsstatscounter_max, + "queries resulted in non authoritative answer", nsstats_desc); + set_desc(dns_nsstatscounter_referral, dns_nsstatscounter_max, + "queries resulted in referral answer", nsstats_desc); + set_desc(dns_nsstatscounter_nxrrset, dns_nsstatscounter_max, + "queries resulted in nxrrset", nsstats_desc); + set_desc(dns_nsstatscounter_servfail, dns_nsstatscounter_max, + "queries resulted in SERVFAIL", nsstats_desc); + set_desc(dns_nsstatscounter_formerr, dns_nsstatscounter_max, + "queries resulted in FORMERR", nsstats_desc); + set_desc(dns_nsstatscounter_nxdomain, dns_nsstatscounter_max, + "queries resulted in NXDOMAIN", nsstats_desc); + set_desc(dns_nsstatscounter_recursion, dns_nsstatscounter_max, + "queries caused recursion", nsstats_desc); + set_desc(dns_nsstatscounter_duplicate, dns_nsstatscounter_max, + "duplicate queries received", nsstats_desc); + set_desc(dns_nsstatscounter_dropped, dns_nsstatscounter_max, + "queries dropped", nsstats_desc); + set_desc(dns_nsstatscounter_failure, dns_nsstatscounter_max, + "other query failures", nsstats_desc); + set_desc(dns_nsstatscounter_xfrdone, dns_nsstatscounter_max, + "requested transfers completed", nsstats_desc); + set_desc(dns_nsstatscounter_updatereqfwd, dns_nsstatscounter_max, + "update requests forwarded", nsstats_desc); + set_desc(dns_nsstatscounter_updaterespfwd, dns_nsstatscounter_max, + "update responses forwarded", nsstats_desc); + set_desc(dns_nsstatscounter_updatefwdfail, dns_nsstatscounter_max, + "update forward failed", nsstats_desc); + set_desc(dns_nsstatscounter_updatedone, dns_nsstatscounter_max, + "updates completed", nsstats_desc); + set_desc(dns_nsstatscounter_updatefail, dns_nsstatscounter_max, + "updates failed", nsstats_desc); + set_desc(dns_nsstatscounter_updatebadprereq, dns_nsstatscounter_max, + "updates rejected due to prerequisite failure", nsstats_desc); + + /* Initialize resolver statistics */ + memset(resstats_desc, 0, + dns_resstatscounter_max * sizeof(resstats_desc[0])); + set_desc(dns_resstatscounter_queryv4, dns_resstatscounter_max, + "IPv4 queries sent", resstats_desc); + set_desc(dns_resstatscounter_queryv6, dns_resstatscounter_max, + "IPv6 queries sent", resstats_desc); + set_desc(dns_resstatscounter_responsev4, dns_resstatscounter_max, + "IPv4 responses received", resstats_desc); + set_desc(dns_resstatscounter_responsev6, dns_resstatscounter_max, + "IPv6 responses received", resstats_desc); + set_desc(dns_resstatscounter_nxdomain, dns_resstatscounter_max, + "NXDOMAIN received", resstats_desc); + set_desc(dns_resstatscounter_servfail, dns_resstatscounter_max, + "SERVFAIL received", resstats_desc); + set_desc(dns_resstatscounter_formerr, dns_resstatscounter_max, + "FORMERR received", resstats_desc); + set_desc(dns_resstatscounter_othererror, dns_resstatscounter_max, + "other errors received", resstats_desc); + set_desc(dns_resstatscounter_edns0fail, dns_resstatscounter_max, + "EDNS(0) query failures", resstats_desc); + set_desc(dns_resstatscounter_mismatch, dns_resstatscounter_max, + "mismatch responses received", resstats_desc); + set_desc(dns_resstatscounter_truncated, dns_resstatscounter_max, + "truncated responses received", resstats_desc); + set_desc(dns_resstatscounter_lame, dns_resstatscounter_max, + "lame delegations received", resstats_desc); + set_desc(dns_resstatscounter_retry, dns_resstatscounter_max, + "query retries", resstats_desc); + set_desc(dns_resstatscounter_gluefetchv4, dns_resstatscounter_max, + "IPv4 NS address fetches", resstats_desc); + set_desc(dns_resstatscounter_gluefetchv6, dns_resstatscounter_max, + "IPv6 NS address fetches", resstats_desc); + set_desc(dns_resstatscounter_gluefetchv4fail, dns_resstatscounter_max, + "IPv4 NS address fetch failed", resstats_desc); + set_desc(dns_resstatscounter_gluefetchv6fail, dns_resstatscounter_max, + "IPv6 NS address fetch failed", resstats_desc); + set_desc(dns_resstatscounter_val, dns_resstatscounter_max, + "DNSSEC validation attempted", resstats_desc); + set_desc(dns_resstatscounter_valsuccess, dns_resstatscounter_max, + "DNSSEC validation succeeded", resstats_desc); + set_desc(dns_resstatscounter_valnegsuccess, dns_resstatscounter_max, + "DNSSEC NX validation succeeded", resstats_desc); + set_desc(dns_resstatscounter_valfail, dns_resstatscounter_max, + "DNSSEC validation failed", resstats_desc); + + /* Initialize zone statistics */ + memset(zonestats_desc, 0, + dns_zonestatscounter_max * sizeof(zonestats_desc[0])); + set_desc(dns_zonestatscounter_notifyoutv4, dns_zonestatscounter_max, + "IPv4 notifies sent", zonestats_desc); + set_desc(dns_zonestatscounter_notifyoutv6, dns_zonestatscounter_max, + "IPv6 notifies sent", zonestats_desc); + set_desc(dns_zonestatscounter_notifyinv4, dns_zonestatscounter_max, + "IPv4 notifies received", zonestats_desc); + set_desc(dns_zonestatscounter_notifyinv6, dns_zonestatscounter_max, + "IPv6 notifies received", zonestats_desc); + set_desc(dns_zonestatscounter_notifyrej, dns_zonestatscounter_max, + "notifies rejected", zonestats_desc); + set_desc(dns_zonestatscounter_soaoutv4, dns_zonestatscounter_max, + "IPv4 SOA queries sent", zonestats_desc); + set_desc(dns_zonestatscounter_soaoutv6, dns_zonestatscounter_max, + "IPv6 SOA queries sent", zonestats_desc); + set_desc(dns_zonestatscounter_axfrreqv4, dns_zonestatscounter_max, + "IPv4 AXFR requested", zonestats_desc); + set_desc(dns_zonestatscounter_axfrreqv6, dns_zonestatscounter_max, + "IPv6 AXFR requested", zonestats_desc); + set_desc(dns_zonestatscounter_ixfrreqv4, dns_zonestatscounter_max, + "IPv4 IXFR requested", zonestats_desc); + set_desc(dns_zonestatscounter_ixfrreqv6, dns_zonestatscounter_max, + "IPv6 IXFR requested", zonestats_desc); + set_desc(dns_zonestatscounter_xfrsuccess, dns_zonestatscounter_max, + "transfer requests succeeded", zonestats_desc); + set_desc(dns_zonestatscounter_xfrfail, dns_zonestatscounter_max, + "transfer requests failed", zonestats_desc); + + /* Sanity check */ + for (i = 0; i < dns_nsstatscounter_max; i++) + INSIST(nsstats_desc[i] != NULL); + for (i = 0; i < dns_resstatscounter_max; i++) + INSIST(resstats_desc[i] != NULL); + for (i = 0; i < dns_zonestatscounter_max; i++) + INSIST(zonestats_desc[i] != NULL); +} + +isc_result_t +ns_stats_dump(ns_server_t *server, FILE *fp) { + isc_stdtime_t now; + isc_result_t result; + dns_view_t *view; + dns_zone_t *zone, *next; + stats_dumparg_t dumparg; + + RUNTIME_CHECK(isc_once_do(&once, init_desc) == ISC_R_SUCCESS); + + /* Set common fields */ + dumparg.type = statsformat_file; + dumparg.arg = fp; + + isc_stdtime_get(&now); + fprintf(fp, "+++ Statistics Dump +++ (%lu)\n", (unsigned long)now); + + fprintf(fp, "++ Incoming Requests ++\n"); + dns_opcodestats_dump(server->opcodestats, opcodestat_dump, &dumparg, 0); + + fprintf(fp, "++ Incoming Queries ++\n"); + dns_rdatatypestats_dump(server->rcvquerystats, rdtypestat_dump, + &dumparg, 0); + + fprintf(fp, "++ Outgoing Queries ++\n"); + for (view = ISC_LIST_HEAD(server->viewlist); + view != NULL; + view = ISC_LIST_NEXT(view, link)) { + if (view->resquerystats == NULL) + continue; + if (strcmp(view->name, "_default") == 0) + fprintf(fp, "[View: default]\n"); + else + fprintf(fp, "[View: %s]\n", view->name); + dns_rdatatypestats_dump(view->resquerystats, rdtypestat_dump, + &dumparg, 0); + } + + fprintf(fp, "++ Name Server Statistics ++\n"); + dumparg.desc = nsstats_desc; + dumparg.ncounters = dns_nsstatscounter_max; + dns_generalstats_dump(server->nsstats, generalstat_dump, &dumparg, 0); + fprintf(fp, "++ Zone Maintenance Statistics ++\n"); + dumparg.desc = zonestats_desc; + dumparg.ncounters = dns_zonestatscounter_max; + dns_generalstats_dump(server->zonestats, generalstat_dump, &dumparg, 0); + + fprintf(fp, "++ Resolver Statistics ++\n"); + fprintf(fp, "[Common]\n"); + dumparg.desc = resstats_desc; + dumparg.ncounters = dns_resstatscounter_max; + dns_generalstats_dump(server->resolverstats, generalstat_dump, &dumparg, + 0); + for (view = ISC_LIST_HEAD(server->viewlist); + view != NULL; + view = ISC_LIST_NEXT(view, link)) { + if (view->resstats == NULL) + continue; + if (strcmp(view->name, "_default") == 0) + fprintf(fp, "[View: default]\n"); + else + fprintf(fp, "[View: %s]\n", view->name); + dns_generalstats_dump(view->resstats, generalstat_dump, + &dumparg, 0); + } + + fprintf(fp, "++ Cache DB RRsets ++\n"); + for (view = ISC_LIST_HEAD(server->viewlist); + view != NULL; + view = ISC_LIST_NEXT(view, link)) { + dns_stats_t *cachestats; + + cachestats = dns_db_getrrsetstats(view->cachedb); + if (cachestats == NULL) + continue; + if (strcmp(view->name, "_default") == 0) + fprintf(fp, "[View: default]\n"); + else + fprintf(fp, "[View: %s]\n", view->name); + dns_rdatasetstats_dump(cachestats, rdatasetstats_dump, &dumparg, + 0); + } + + fprintf(fp, "++ Per Zone Query Statistics ++\n"); + zone = NULL; + for (result = dns_zone_first(server->zonemgr, &zone); + result == ISC_R_SUCCESS; + next = NULL, result = dns_zone_next(zone, &next), zone = next) + { + dns_stats_t *zonestats = dns_zone_getrequeststats(zone); + if (zonestats != NULL) { + char zonename[DNS_NAME_FORMATSIZE]; + + dns_name_format(dns_zone_getorigin(zone), + zonename, sizeof(zonename)); + view = dns_zone_getview(zone); + + fprintf(fp, "[%s", zonename); + if (strcmp(view->name, "_default") != 0) + fprintf(fp, " (view: %s)", view->name); + fprintf(fp, "]\n"); + + dumparg.desc = nsstats_desc; + dumparg.ncounters = dns_nsstatscounter_max; + dns_generalstats_dump(zonestats, generalstat_dump, + &dumparg, 0); + } + } + + fprintf(fp, "--- Statistics Dump --- (%lu)\n", (unsigned long)now); + + return (ISC_R_SUCCESS); /* this function currently always succeeds */ +} diff --git a/bin/named/unix/os.c b/bin/named/unix/os.c index b12470d6..16a4272a 100644 --- a/bin/named/unix/os.c +++ b/bin/named/unix/os.c @@ -15,7 +15,7 @@ * PERFORMANCE OF THIS SOFTWARE. */ -/* $Id: os.c,v 1.79.128.3 2008/01/17 23:46:36 tbox Exp $ */ +/* $Id: os.c,v 1.79.128.5 2008/05/06 01:32:51 each Exp $ */ /*! \file */ @@ -69,7 +69,7 @@ static int devnullfd = -1; /* * Linux defines: * (T) HAVE_LINUXTHREADS - * (C) HAVE_LINUX_CAPABILITY_H + * (C) HAVE_SYS_CAPABILITY_H (or HAVE_LINUX_CAPABILITY_H) * (P) HAVE_SYS_PRCTL_H * The possible cases are: * none: setuid() normally @@ -116,6 +116,9 @@ static int dfd[2] = { -1, -1 }; static isc_boolean_t non_root = ISC_FALSE; static isc_boolean_t non_root_caps = ISC_FALSE; +#ifdef HAVE_SYS_CAPABILITY_H +#include +#else /*% * We define _LINUX_FS_H to prevent it from being included. We don't need * anything from it, and the files it includes cause warnings with 2.2 @@ -123,9 +126,15 @@ static isc_boolean_t non_root_caps = ISC_FALSE; * and ) on 2.3 kernels. */ #define _LINUX_FS_H - -#include /* Required for syscall(). */ -#include /* Required for _LINUX_CAPABILITY_VERSION. */ +#include +#include +#ifndef SYS_capset +#ifndef __NR_capset +#include /* Slackware 4.0 needs this. */ +#endif /* __NR_capset */ +#define SYS_capset __NR_capset +#endif /* SYS_capset */ +#endif /* HAVE_SYS_CAPABILITY_H */ #ifdef HAVE_SYS_PRCTL_H #include /* Required for prctl(). */ @@ -142,22 +151,24 @@ static isc_boolean_t non_root_caps = ISC_FALSE; #endif /* HAVE_SYS_PRCTL_H */ -#ifndef SYS_capset -#ifndef __NR_capset -#include /* Slackware 4.0 needs this. */ -#endif -#define SYS_capset __NR_capset -#endif +#ifdef HAVE_LIBCAP +#define SETCAPS_FUNC "cap_set_proc " +#else +typedef unsigned int cap_t; +#define SETCAPS_FUNC "syscall(capset) " +#endif /* HAVE_LIBCAP */ static void -linux_setcaps(unsigned int caps) { +linux_setcaps(cap_t caps) { +#ifndef HAVE_LIBCAP struct __user_cap_header_struct caphead; struct __user_cap_data_struct cap; +#endif char strbuf[ISC_STRERRORSIZE]; if ((getuid() != 0 && !non_root_caps) || non_root) return; - +#ifndef HAVE_LIBCAP memset(&caphead, 0, sizeof(caphead)); caphead.version = _LINUX_CAPABILITY_VERSION; caphead.pid = 0; @@ -165,36 +176,74 @@ linux_setcaps(unsigned int caps) { cap.effective = caps; cap.permitted = caps; cap.inheritable = 0; +#endif +#ifdef HAVE_LIBCAP + if (cap_set_proc(caps) < 0) { +#else if (syscall(SYS_capset, &caphead, &cap) < 0) { +#endif isc__strerror(errno, strbuf, sizeof(strbuf)); - ns_main_earlyfatal("capset failed: %s:" + ns_main_earlyfatal(SETCAPS_FUNC "failed: %s:" " please ensure that the capset kernel" " module is loaded. see insmod(8)", strbuf); } } +#ifdef HAVE_LIBCAP +#define SET_CAP(flag) \ + do { \ + capval = (flag); \ + err = cap_set_flag(caps, CAP_EFFECTIVE, 1, &capval, CAP_SET); \ + if (err == -1) { \ + isc__strerror(errno, strbuf, sizeof(strbuf)); \ + ns_main_earlyfatal("cap_set_proc failed: %s", strbuf); \ + } \ + \ + err = cap_set_flag(caps, CAP_PERMITTED, 1, &capval, CAP_SET); \ + if (err == -1) { \ + isc__strerror(errno, strbuf, sizeof(strbuf)); \ + ns_main_earlyfatal("cap_set_proc failed: %s", strbuf); \ + } \ + } while (0) +#define INIT_CAP \ + do { \ + caps = cap_init(); \ + if (caps == NULL) { \ + isc__strerror(errno, strbuf, sizeof(strbuf)); \ + ns_main_earlyfatal("cap_init failed: %s", strbuf); \ + } \ + } while (0) +#else +#define SET_CAP(flag) { caps |= (1 << (flag)); } +#define INIT_CAP { caps = 0; } +#endif /* HAVE_LIBCAP */ + static void linux_initialprivs(void) { - unsigned int caps; + cap_t caps; +#ifdef HAVE_LIBCAP + cap_value_t capval; + char strbuf[ISC_STRERRORSIZE]; + int err; +#endif /*% * We don't need most privileges, so we drop them right away. * Later on linux_minprivs() will be called, which will drop our * capabilities to the minimum needed to run the server. */ - - caps = 0; + INIT_CAP; /* * We need to be able to bind() to privileged ports, notably port 53! */ - caps |= (1 << CAP_NET_BIND_SERVICE); + SET_CAP(CAP_NET_BIND_SERVICE); /* * We need chroot() initially too. */ - caps |= (1 << CAP_SYS_CHROOT); + SET_CAP(CAP_SYS_CHROOT); #if defined(HAVE_SYS_PRCTL_H) || !defined(HAVE_LINUXTHREADS) /* @@ -203,19 +252,19 @@ linux_initialprivs(void) { * tried) or we're not using threads. If either of these is * true, we want the setuid capability. */ - caps |= (1 << CAP_SETUID); + SET_CAP(CAP_SETUID); #endif /* * Since we call initgroups, we need this. */ - caps |= (1 << CAP_SETGID); + SET_CAP(CAP_SETGID); /* * Without this, we run into problems reading a configuration file * owned by a non-root user and non-world-readable on startup. */ - caps |= (1 << CAP_DAC_READ_SEARCH); + SET_CAP(CAP_DAC_READ_SEARCH); /* * XXX We might want to add CAP_SYS_RESOURCE, though it's not @@ -224,15 +273,21 @@ linux_initialprivs(void) { * of files, the stack size, data size, and core dump size to * support named.conf options, this is now being added to test. */ - caps |= (1 << CAP_SYS_RESOURCE); + SET_CAP(CAP_SYS_RESOURCE); linux_setcaps(caps); } static void linux_minprivs(void) { - unsigned int caps; + cap_t caps; +#ifdef HAVE_LIBCAP + cap_value_t capval; + char strbuf[ISC_STRERRORSIZE]; + int err; +#endif + INIT_CAP; /*% * Drop all privileges except the ability to bind() to privileged * ports. @@ -241,8 +296,7 @@ linux_minprivs(void) { * chroot() could be used to escape from the chrooted area. */ - caps = 0; - caps |= (1 << CAP_NET_BIND_SERVICE); + SET_CAP(CAP_NET_BIND_SERVICE); /* * XXX We might want to add CAP_SYS_RESOURCE, though it's not @@ -251,7 +305,7 @@ linux_minprivs(void) { * of files, the stack size, data size, and core dump size to * support named.conf options, this is now being added to test. */ - caps |= (1 << CAP_SYS_RESOURCE); + SET_CAP(CAP_SYS_RESOURCE); linux_setcaps(caps); } diff --git a/bin/named/update.c b/bin/named/update.c index 4b2a06ce..0c6e44bb 100644 --- a/bin/named/update.c +++ b/bin/named/update.c @@ -15,7 +15,7 @@ * PERFORMANCE OF THIS SOFTWARE. */ -/* $Id: update.c,v 1.138.2.2 2008/01/17 23:46:36 tbox Exp $ */ +/* $Id: update.c,v 1.138.2.4 2008/04/03 06:10:19 marka Exp $ */ #include @@ -41,12 +41,14 @@ #include #include #include +#include #include #include #include #include #include +#include #include /*! \file @@ -117,6 +119,11 @@ msg, isc_result_totext(result)); \ if (result != ISC_R_SUCCESS) goto failure; \ } while (0) +#define PREREQFAILC(code, msg) \ + do { \ + inc_stats(zone, dns_nsstatscounter_updatebadprereq); \ + FAILC(code, msg); \ + } while (0) #define FAILN(code, name, msg) \ do { \ @@ -138,6 +145,11 @@ } \ if (result != ISC_R_SUCCESS) goto failure; \ } while (0) +#define PREREQFAILN(code, name, msg) \ + do { \ + inc_stats(zone, dns_nsstatscounter_updatebadprereq); \ + FAILN(code, name, msg); \ + } while (0) #define FAILNT(code, name, type, msg) \ do { \ @@ -162,6 +174,12 @@ } \ if (result != ISC_R_SUCCESS) goto failure; \ } while (0) +#define PREREQFAILNT(code, name, type, msg) \ + do { \ + inc_stats(zone, dns_nsstatscounter_updatebadprereq); \ + FAILNT(code, name, type, msg); \ + } while (0) + /*% * Fail unconditionally and log as a server error. * The test against ISC_R_SUCCESS is there to keep the Solaris compiler @@ -240,6 +258,20 @@ update_log(ns_client_t *client, dns_zone_t *zone, namebuf, classbuf, message); } +/*% + * Increment updated-related statistics counters. + */ +static inline void +inc_stats(dns_zone_t *zone, dns_statscounter_t counter) { + dns_generalstats_increment(ns_g_server->nsstats, counter); + + if (zone != NULL) { + dns_stats_t *zonestats = dns_zone_getrequeststats(zone); + if (zonestats != NULL) + dns_generalstats_increment(zonestats, counter); + } +} + /*% * Override the default acl logging when checking whether a client * can update the zone or whether we can forward the request to the @@ -1653,10 +1685,11 @@ ksk_sanity(dns_db_t *db, dns_dbversion_t *ver) { * Add RRSIG records for an RRset, recording the change in "diff". */ static isc_result_t -add_sigs(dns_db_t *db, dns_dbversion_t *ver, dns_name_t *name, - dns_rdatatype_t type, dns_diff_t *diff, dst_key_t **keys, - unsigned int nkeys, isc_mem_t *mctx, isc_stdtime_t inception, - isc_stdtime_t expire, isc_boolean_t check_ksk) +add_sigs(ns_client_t *client, dns_zone_t *zone, dns_db_t *db, + dns_dbversion_t *ver, dns_name_t *name, dns_rdatatype_t type, + dns_diff_t *diff, dst_key_t **keys, unsigned int nkeys, + isc_mem_t *mctx, isc_stdtime_t inception, isc_stdtime_t expire, + isc_boolean_t check_ksk) { isc_result_t result; dns_dbnode_t *node = NULL; @@ -1665,6 +1698,7 @@ add_sigs(dns_db_t *db, dns_dbversion_t *ver, dns_name_t *name, isc_buffer_t buffer; unsigned char data[1024]; /* XXX */ unsigned int i; + isc_boolean_t added_sig = ISC_FALSE; dns_rdataset_init(&rdataset); isc_buffer_init(&buffer, data, sizeof(data)); @@ -1694,6 +1728,13 @@ add_sigs(dns_db_t *db, dns_dbversion_t *ver, dns_name_t *name, CHECK(update_one_rr(db, ver, diff, DNS_DIFFOP_ADD, name, rdataset.ttl, &sig_rdata)); dns_rdata_reset(&sig_rdata); + added_sig = ISC_TRUE; + } + if (!added_sig) { + update_log(client, zone, ISC_LOG_ERROR, + "found no private keys, " + "unable to generate any signatures"); + result = ISC_R_NOTFOUND; } failure: @@ -1825,9 +1866,9 @@ update_signatures(ns_client_t *client, dns_zone_t *zone, dns_db_t *db, */ CHECK(rrset_exists(db, newver, name, type, 0, &flag)); if (flag) { - CHECK(add_sigs(db, newver, name, type, - &sig_diff, zone_keys, nkeys, - client->mctx, inception, + CHECK(add_sigs(client, zone, db, newver, name, + type, &sig_diff, zone_keys, + nkeys, client->mctx, inception, expire, check_ksk)); } skip: @@ -2011,10 +2052,10 @@ update_signatures(ns_client_t *client, dns_zone_t *zone, dns_db_t *db, dns_rdatatype_rrsig, dns_rdatatype_nsec, NULL, &sig_diff)); } else if (t->op == DNS_DIFFOP_ADD) { - CHECK(add_sigs(db, newver, &t->name, dns_rdatatype_nsec, - &sig_diff, zone_keys, nkeys, - client->mctx, inception, expire, - check_ksk)); + CHECK(add_sigs(client, zone, db, newver, &t->name, + dns_rdatatype_nsec, &sig_diff, + zone_keys, nkeys, client->mctx, + inception, expire, check_ksk)); } else { INSIST(0); } @@ -2167,6 +2208,10 @@ ns_update_start(ns_client_t *client, isc_result_t sigresult) { return; failure: + if (result == DNS_R_REFUSED) { + INSIST(dns_zone_gettype(zone) == dns_zone_slave); + inc_stats(zone, dns_nsstatscounter_updaterej); + } /* * We failed without having sent an update event to the zone. * We are still in the client task context, so we can @@ -2371,54 +2416,59 @@ update_action(isc_task_t *task, isc_event_t *event) { &name, &rdata, &covers, &ttl, &update_class); if (ttl != 0) - FAILC(DNS_R_FORMERR, "prerequisite TTL is not zero"); + PREREQFAILC(DNS_R_FORMERR, + "prerequisite TTL is not zero"); if (! dns_name_issubdomain(name, zonename)) - FAILN(DNS_R_NOTZONE, name, - "prerequisite name is out of zone"); + PREREQFAILN(DNS_R_NOTZONE, name, + "prerequisite name is out of zone"); if (update_class == dns_rdataclass_any) { if (rdata.length != 0) - FAILC(DNS_R_FORMERR, + PREREQFAILC(DNS_R_FORMERR, "class ANY prerequisite " "RDATA is not empty"); if (rdata.type == dns_rdatatype_any) { CHECK(name_exists(db, ver, name, &flag)); if (! flag) { - FAILN(DNS_R_NXDOMAIN, name, - "'name in use' prerequisite " - "not satisfied"); + PREREQFAILN(DNS_R_NXDOMAIN, name, + "'name in use' " + "prerequisite not " + "satisfied"); } } else { CHECK(rrset_exists(db, ver, name, rdata.type, covers, &flag)); if (! flag) { /* RRset does not exist. */ - FAILNT(DNS_R_NXRRSET, name, rdata.type, + PREREQFAILNT(DNS_R_NXRRSET, name, rdata.type, "'rrset exists (value independent)' " "prerequisite not satisfied"); } } } else if (update_class == dns_rdataclass_none) { if (rdata.length != 0) - FAILC(DNS_R_FORMERR, - "class NONE prerequisite " - "RDATA is not empty"); + PREREQFAILC(DNS_R_FORMERR, + "class NONE prerequisite " + "RDATA is not empty"); if (rdata.type == dns_rdatatype_any) { CHECK(name_exists(db, ver, name, &flag)); if (flag) { - FAILN(DNS_R_YXDOMAIN, name, - "'name not in use' prerequisite " - "not satisfied"); + PREREQFAILN(DNS_R_YXDOMAIN, name, + "'name not in use' " + "prerequisite not " + "satisfied"); } } else { CHECK(rrset_exists(db, ver, name, rdata.type, covers, &flag)); if (flag) { /* RRset exists. */ - FAILNT(DNS_R_YXRRSET, name, rdata.type, - "'rrset does not exist' " - "prerequisite not satisfied"); + PREREQFAILNT(DNS_R_YXRRSET, name, + rdata.type, + "'rrset does not exist' " + "prerequisite not " + "satisfied"); } } } else if (update_class == zoneclass) { @@ -2431,7 +2481,7 @@ update_action(isc_task_t *task, isc_event_t *event) { FAIL(ISC_R_UNEXPECTED); } } else { - FAILC(DNS_R_FORMERR, "malformed prerequisite"); + PREREQFAILC(DNS_R_FORMERR, "malformed prerequisite"); } } if (result != ISC_R_NOMORE) @@ -2880,6 +2930,9 @@ update_action(isc_task_t *task, isc_event_t *event) { goto common; failure: + if (result == DNS_R_REFUSED) + inc_stats(zone, dns_nsstatscounter_updaterej); + /* * The reason for failure should have been logged at this point. */ @@ -2902,11 +2955,10 @@ update_action(isc_task_t *task, isc_event_t *event) { if (ssutable != NULL) dns_ssutable_detach(&ssutable); - if (zone != NULL) - dns_zone_detach(&zone); - isc_task_detach(&task); uev->result = result; + if (zone != NULL) + INSIST(uev->zone == zone); /* we use this later */ uev->ev_type = DNS_EVENT_UPDATEDONE; uev->ev_action = updatedone_action; isc_task_send(client->task, &event); @@ -2924,6 +2976,19 @@ updatedone_action(isc_task_t *task, isc_event_t *event) { INSIST(task == client->task); INSIST(client->nupdates > 0); + switch (uev->result) { + case ISC_R_SUCCESS: + inc_stats(uev->zone, dns_nsstatscounter_updatedone); + break; + case DNS_R_REFUSED: + inc_stats(uev->zone, dns_nsstatscounter_updaterej); + break; + default: + inc_stats(uev->zone, dns_nsstatscounter_updatefail); + break; + } + if (uev->zone != NULL) + dns_zone_detach(&uev->zone); client->nupdates--; respond(client, uev->result); isc_event_free(&event); @@ -2952,17 +3017,21 @@ static void forward_callback(void *arg, isc_result_t result, dns_message_t *answer) { update_event_t *uev = arg; ns_client_t *client = uev->ev_arg; + dns_zone_t *zone = uev->zone; if (result != ISC_R_SUCCESS) { INSIST(answer == NULL); uev->ev_type = DNS_EVENT_UPDATEDONE; uev->ev_action = forward_fail; + inc_stats(zone, dns_nsstatscounter_updatefwdfail); } else { uev->ev_type = DNS_EVENT_UPDATEDONE; uev->ev_action = forward_done; uev->answer = answer; + inc_stats(zone, dns_nsstatscounter_updaterespfwd); } isc_task_send(client->task, ISC_EVENT_PTR(&uev)); + dns_zone_detach(&zone); } static void @@ -2993,8 +3062,10 @@ forward_action(isc_task_t *task, isc_event_t *event) { uev->ev_type = DNS_EVENT_UPDATEDONE; uev->ev_action = forward_fail; isc_task_send(client->task, &event); - } - dns_zone_detach(&zone); + inc_stats(zone, dns_nsstatscounter_updatefwdfail); + dns_zone_detach(&zone); + } else + inc_stats(zone, dns_nsstatscounter_updatereqfwd); isc_task_detach(&task); } diff --git a/bin/named/xfrout.c b/bin/named/xfrout.c index 6cc8f706..fb531cc7 100644 --- a/bin/named/xfrout.c +++ b/bin/named/xfrout.c @@ -1,5 +1,5 @@ /* - * Copyright (C) 2004-2007 Internet Systems Consortium, Inc. ("ISC") + * Copyright (C) 2004-2008 Internet Systems Consortium, Inc. ("ISC") * Copyright (C) 1999-2003 Internet Software Consortium. * * Permission to use, copy, modify, and/or distribute this software for any @@ -15,7 +15,7 @@ * PERFORMANCE OF THIS SOFTWARE. */ -/* $Id: xfrout.c,v 1.126 2007/06/18 23:47:19 tbox Exp $ */ +/* $Id: xfrout.c,v 1.126.128.2 2008/04/03 06:20:33 tbox Exp $ */ #include @@ -40,6 +40,7 @@ #include #include #include +#include #include #include #include @@ -51,7 +52,7 @@ #include #include -/*! \file +/*! \file * \brief * Outgoing AXFR and IXFR. */ @@ -86,7 +87,7 @@ ns_client_log(client, DNS_LOGCATEGORY_XFER_OUT, \ NS_LOGMODULE_XFER_OUT, ISC_LOG_INFO, \ "bad zone transfer request: %s (%s)", \ - msg, isc_result_totext(code)); \ + msg, isc_result_totext(code)); \ if (result != ISC_R_SUCCESS) goto failure; \ } while (0) @@ -100,12 +101,12 @@ ns_client_log(client, DNS_LOGCATEGORY_XFER_OUT, \ NS_LOGMODULE_XFER_OUT, ISC_LOG_INFO, \ "bad zone transfer request: '%s/%s': %s (%s)", \ - _buf1, _buf2, msg, isc_result_totext(code)); \ + _buf1, _buf2, msg, isc_result_totext(code)); \ if (result != ISC_R_SUCCESS) goto failure; \ } while (0) #define CHECK(op) \ - do { result = (op); \ + do { result = (op); \ if (result != ISC_R_SUCCESS) goto failure; \ } while (0) @@ -121,12 +122,12 @@ typedef struct db_rr_iterator db_rr_iterator_t; struct db_rr_iterator { isc_result_t result; dns_db_t *db; - dns_dbiterator_t *dbit; + dns_dbiterator_t *dbit; dns_dbversion_t *ver; isc_stdtime_t now; dns_dbnode_t *node; dns_fixedname_t fixedname; - dns_rdatasetiter_t *rdatasetit; + dns_rdatasetiter_t *rdatasetit; dns_rdataset_t rdataset; dns_rdata_t rdata; }; @@ -148,6 +149,16 @@ db_rr_iterator_current(db_rr_iterator_t *it, dns_name_t **name, static void db_rr_iterator_destroy(db_rr_iterator_t *it); +static inline void +inc_stats(dns_zone_t *zone, dns_statscounter_t counter) { + dns_generalstats_increment(ns_g_server->nsstats, counter); + if (zone != NULL) { + dns_stats_t *zonestats = dns_zone_getrequeststats(zone); + if (zonestats != NULL) + dns_generalstats_increment(zonestats, counter); + } +} + static isc_result_t db_rr_iterator_init(db_rr_iterator_t *it, dns_db_t *db, dns_dbversion_t *ver, isc_stdtime_t now) @@ -326,7 +337,7 @@ log_rr(dns_name_t *name, dns_rdata_t *rdata, isc_uint32_t ttl) { INSIST(buf.used >= 1 && ((char *) buf.base)[buf.used - 1] == '\n'); buf.used--; - + isc_log_write(XFROUT_RR_LOGARGS, "%.*s", (int)isc_buffer_usedlength(&buf), (char *)isc_buffer_base(&buf)); @@ -818,6 +829,7 @@ typedef struct { dns_name_t *qname; /* Question name of request */ dns_rdatatype_t qtype; /* dns_rdatatype_{a,i}xfr */ dns_rdataclass_t qclass; + dns_zone_t *zone; /* (necessary for stats) */ dns_db_t *db; dns_dbversion_t *ver; isc_quota_t *quota; @@ -841,7 +853,7 @@ typedef struct { static isc_result_t xfrout_ctx_create(isc_mem_t *mctx, ns_client_t *client, unsigned int id, dns_name_t *qname, dns_rdatatype_t qtype, - dns_rdataclass_t qclass, + dns_rdataclass_t qclass, dns_zone_t *zone, dns_db_t *db, dns_dbversion_t *ver, isc_quota_t *quota, rrstream_t *stream, dns_tsigkey_t *tsigkey, isc_buffer_t *lasttsig, @@ -969,7 +981,7 @@ ns_xfr_start(ns_client_t *client, dns_rdatatype_t reqtype) { /* * Normal zone table does not have a match. Try the DLZ database */ - if (client->view->dlzdatabase != NULL) { + if (client->view->dlzdatabase != NULL) { result = dns_dlzallowzonexfr(client->view, question_name, &client->peeraddr, &db); @@ -1006,7 +1018,7 @@ ns_xfr_start(ns_client_t *client, dns_rdatatype_t reqtype) { } else { /* - * not DLZ and not in normal zone table, we are + * not DLZ and not in normal zone table, we are * not authoritative */ FAILQ(DNS_R_NOTAUTH, "non-authoritative zone", @@ -1210,26 +1222,28 @@ ns_xfr_start(ns_client_t *client, dns_rdatatype_t reqtype) { #ifdef DLZ if (is_dlz) - CHECK(xfrout_ctx_create(mctx, client, request->id, question_name, - reqtype, question_class, db, ver, quota, - stream, dns_message_gettsigkey(request), - tsigbuf, - 3600, - 3600, - (format == dns_many_answers) ? - ISC_TRUE : ISC_FALSE, - &xfr)); - else + CHECK(xfrout_ctx_create(mctx, client, request->id, question_name, + reqtype, question_class, zone, db, ver, + quota, stream, + dns_message_gettsigkey(request), + tsigbuf, + 3600, + 3600, + (format == dns_many_answers) ? + ISC_TRUE : ISC_FALSE, + &xfr)); + else #endif - CHECK(xfrout_ctx_create(mctx, client, request->id, question_name, - reqtype, question_class, db, ver, quota, - stream, dns_message_gettsigkey(request), - tsigbuf, - dns_zone_getmaxxfrout(zone), - dns_zone_getidleout(zone), - (format == dns_many_answers) ? - ISC_TRUE : ISC_FALSE, - &xfr)); + CHECK(xfrout_ctx_create(mctx, client, request->id, question_name, + reqtype, question_class, zone, db, ver, + quota, stream, + dns_message_gettsigkey(request), + tsigbuf, + dns_zone_getmaxxfrout(zone), + dns_zone_getidleout(zone), + (format == dns_many_answers) ? + ISC_TRUE : ISC_FALSE, + &xfr)); xfr->mnemonic = mnemonic; stream = NULL; @@ -1261,6 +1275,8 @@ ns_xfr_start(ns_client_t *client, dns_rdatatype_t reqtype) { result = ISC_R_SUCCESS; failure: + if (result == DNS_R_REFUSED) + inc_stats(zone, dns_nsstatscounter_xfrrej); if (quota != NULL) isc_quota_detach("a); if (current_soa_tuple != NULL) @@ -1291,7 +1307,7 @@ ns_xfr_start(ns_client_t *client, dns_rdatatype_t reqtype) { static isc_result_t xfrout_ctx_create(isc_mem_t *mctx, ns_client_t *client, unsigned int id, dns_name_t *qname, dns_rdatatype_t qtype, - dns_rdataclass_t qclass, + dns_rdataclass_t qclass, dns_zone_t *zone, dns_db_t *db, dns_dbversion_t *ver, isc_quota_t *quota, rrstream_t *stream, dns_tsigkey_t *tsigkey, isc_buffer_t *lasttsig, unsigned int maxtime, @@ -1314,8 +1330,10 @@ xfrout_ctx_create(isc_mem_t *mctx, ns_client_t *client, unsigned int id, xfr->qname = qname; xfr->qtype = qtype; xfr->qclass = qclass; + xfr->zone = NULL; xfr->db = NULL; xfr->ver = NULL; + dns_zone_attach(zone, &xfr->zone); dns_db_attach(db, &xfr->db); dns_db_attachversion(db, ver, &xfr->ver); xfr->end_of_stream = ISC_FALSE; @@ -1663,7 +1681,7 @@ sendstream(xfrout_ctx_t *xfr) { * iterators before returning from the event handler. */ xfr->stream->methods->pause(xfr->stream); - + if (result == ISC_R_SUCCESS) return; @@ -1691,6 +1709,8 @@ xfrout_ctx_destroy(xfrout_ctx_t **xfrp) { isc_quota_detach(&xfr->quota); if (xfr->ver != NULL) dns_db_closeversion(xfr->db, &xfr->ver, ISC_FALSE); + if (xfr->zone != NULL) + dns_zone_detach(&xfr->zone); if (xfr->db != NULL) dns_db_detach(&xfr->db); @@ -1724,6 +1744,7 @@ xfrout_senddone(isc_task_t *task, isc_event_t *event) { sendstream(xfr); } else { /* End of zone transfer stream. */ + inc_stats(xfr->zone, dns_nsstatscounter_xfrdone); xfrout_log(xfr, ISC_LOG_INFO, "%s ended", xfr->mnemonic); ns_client_next(xfr->client, ISC_R_SUCCESS); xfrout_ctx_destroy(&xfr); diff --git a/bin/named/zoneconf.c b/bin/named/zoneconf.c index 4f53a8f1..2ee22bd0 100644 --- a/bin/named/zoneconf.c +++ b/bin/named/zoneconf.c @@ -1,5 +1,5 @@ /* - * Copyright (C) 2004-2007 Internet Systems Consortium, Inc. ("ISC") + * Copyright (C) 2004-2008 Internet Systems Consortium, Inc. ("ISC") * Copyright (C) 1999-2003 Internet Software Consortium. * * Permission to use, copy, modify, and/or distribute this software for any @@ -15,7 +15,7 @@ * PERFORMANCE OF THIS SOFTWARE. */ -/* $Id: zoneconf.c,v 1.139 2007/09/18 00:22:30 marka Exp $ */ +/* $Id: zoneconf.c,v 1.139.56.2 2008/04/03 06:20:33 tbox Exp $ */ /*% */ @@ -34,6 +34,7 @@ #include #include #include +#include #include #include @@ -60,7 +61,7 @@ static isc_result_t configure_zone_acl(const cfg_obj_t *zconfig, const cfg_obj_t *vconfig, const cfg_obj_t *config, const char *aclname, - cfg_aclconfctx_t *actx, dns_zone_t *zone, + cfg_aclconfctx_t *actx, dns_zone_t *zone, void (*setzacl)(dns_zone_t *, dns_acl_t *), void (*clearzacl)(dns_zone_t *)) { @@ -272,11 +273,11 @@ strtoargvsub(isc_mem_t *mctx, char *s, unsigned int *argcp, char ***argvp, unsigned int n) { isc_result_t result; - + /* Discard leading whitespace. */ while (*s == ' ' || *s == '\t') s++; - + if (*s == '\0') { /* We have reached the end of the string. */ *argcp = n; @@ -361,6 +362,8 @@ ns_zone_configure(const cfg_obj_t *config, const cfg_obj_t *vconfig, isc_boolean_t warn = ISC_FALSE, ignore = ISC_FALSE; isc_boolean_t ixfrdiff; dns_masterformat_t masterformat; + dns_stats_t *zoneqrystats; + isc_boolean_t zonestats_on; i = 0; if (zconfig != NULL) { @@ -488,7 +491,15 @@ ns_zone_configure(const cfg_obj_t *config, const cfg_obj_t *vconfig, obj = NULL; result = ns_config_get(maps, "zone-statistics", &obj); INSIST(result == ISC_R_SUCCESS); - RETERR(dns_zone_setstatistics(zone, cfg_obj_asboolean(obj))); + zonestats_on = cfg_obj_asboolean(obj); + zoneqrystats = NULL; + if (zonestats_on) { + RETERR(dns_generalstats_create(mctx, &zoneqrystats, + dns_nsstatscounter_max)); + } + dns_zone_setrequeststats(zone, zoneqrystats); + if (zoneqrystats != NULL) + dns_stats_detach(&zoneqrystats); /* * Configure master functionality. This applies @@ -628,7 +639,7 @@ ns_zone_configure(const cfg_obj_t *config, const cfg_obj_t *vconfig, obj = NULL; result = ns_config_get(maps, "check-sibling", &obj); INSIST(result == ISC_R_SUCCESS); - dns_zone_setoption(zone, DNS_ZONEOPT_CHECKSIBLING, + dns_zone_setoption(zone, DNS_ZONEOPT_CHECKSIBLING, cfg_obj_asboolean(obj)); obj = NULL; @@ -647,7 +658,7 @@ ns_zone_configure(const cfg_obj_t *config, const cfg_obj_t *vconfig, "allow-update", ac, zone, dns_zone_setupdateacl, dns_zone_clearupdateacl)); - + updateacl = dns_zone_getupdateacl(zone); if (updateacl != NULL && dns_acl_isinsecure(updateacl)) isc_log_write(ns_g_lctx, DNS_LOGCATEGORY_SECURITY, @@ -655,7 +666,7 @@ ns_zone_configure(const cfg_obj_t *config, const cfg_obj_t *vconfig, "zone '%s' allows updates by IP " "address, which is insecure", zname); - + RETERR(configure_zone_ssutable(zoptions, zone)); obj = NULL; @@ -703,7 +714,7 @@ ns_zone_configure(const cfg_obj_t *config, const cfg_obj_t *vconfig, obj = NULL; result = ns_config_get(maps, "check-integrity", &obj); INSIST(obj != NULL); - dns_zone_setoption(zone, DNS_ZONEOPT_CHECKINTEGRITY, + dns_zone_setoption(zone, DNS_ZONEOPT_CHECKINTEGRITY, cfg_obj_asboolean(obj)); obj = NULL; @@ -739,7 +750,7 @@ ns_zone_configure(const cfg_obj_t *config, const cfg_obj_t *vconfig, obj = NULL; result = ns_config_get(maps, "update-check-ksk", &obj); INSIST(result == ISC_R_SUCCESS); - dns_zone_setoption(zone, DNS_ZONEOPT_UPDATECHECKKSK, + dns_zone_setoption(zone, DNS_ZONEOPT_UPDATECHECKKSK, cfg_obj_asboolean(obj)); } @@ -753,7 +764,7 @@ ns_zone_configure(const cfg_obj_t *config, const cfg_obj_t *vconfig, "allow-update", ac, zone, dns_zone_setupdateacl, dns_zone_clearupdateacl)); - + updateacl = dns_zone_getupdateacl(zone); if (updateacl != NULL && dns_acl_isinsecure(updateacl)) isc_log_write(ns_g_lctx, DNS_LOGCATEGORY_SECURITY, @@ -761,7 +772,7 @@ ns_zone_configure(const cfg_obj_t *config, const cfg_obj_t *vconfig, "zone '%s' allows updates by IP " "address, which is insecure", zname); - + RETERR(configure_zone_ssutable(zoptions, zone)); obj = NULL; diff --git a/bin/tests/system/ifconfig.sh b/bin/tests/system/ifconfig.sh index 2e041015..0cecbf16 100755 --- a/bin/tests/system/ifconfig.sh +++ b/bin/tests/system/ifconfig.sh @@ -1,6 +1,6 @@ #!/bin/sh # -# Copyright (C) 2004, 2007 Internet Systems Consortium, Inc. ("ISC") +# Copyright (C) 2004, 2007, 2008 Internet Systems Consortium, Inc. ("ISC") # Copyright (C) 2000-2003 Internet Software Consortium. # # Permission to use, copy, modify, and/or distribute this software for any @@ -15,7 +15,7 @@ # OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR # PERFORMANCE OF THIS SOFTWARE. -# $Id: ifconfig.sh,v 1.51 2007/06/19 23:47:00 tbox Exp $ +# $Id: ifconfig.sh,v 1.51.128.2 2008/03/03 23:46:26 tbox Exp $ # # Set up interface aliases for bind9 system tests. @@ -85,6 +85,9 @@ case "$1" in *-unknown-netbsd*) ifconfig lo0 10.53.0.$ns alias netmask 255.255.255.0 ;; + *-unknown-openbsd*) + ifconfig lo0 10.53.0.$ns alias netmask 255.255.255.0 + ;; *-*-bsdi[3-5].*) ifconfig lo0 add 10.53.0.$ns netmask 255.255.255.0 ;; @@ -145,6 +148,9 @@ case "$1" in *-unknown-netbsd*) ifconfig lo0 10.53.0.$ns delete ;; + *-unknown-openbsd*) + ifconfig lo0 10.53.0.$ns delete + ;; *-*-bsdi[3-5].*) ifconfig lo0 remove 10.53.0.$ns ;; diff --git a/bin/tests/system/ixfr/ns1/.exists b/bin/tests/system/ixfr/ns1/.exists deleted file mode 100644 index e69de29b..00000000 diff --git a/bin/tests/system/rrsetorder/clean.sh b/bin/tests/system/rrsetorder/clean.sh index 0cb15620..dd2dc114 100644 --- a/bin/tests/system/rrsetorder/clean.sh +++ b/bin/tests/system/rrsetorder/clean.sh @@ -1,6 +1,6 @@ #!/bin/sh # -# Copyright (C) 2006, 2007 Internet Systems Consortium, Inc. ("ISC") +# Copyright (C) 2006-2008 Internet Systems Consortium, Inc. ("ISC") # # Permission to use, copy, modify, and/or distribute this software for any # purpose with or without fee is hereby granted, provided that the above @@ -14,9 +14,10 @@ # OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR # PERFORMANCE OF THIS SOFTWARE. -# $Id: clean.sh,v 1.6 2007/09/26 03:22:44 marka Exp $ +# $Id: clean.sh,v 1.6.46.2 2008/04/24 23:46:29 tbox Exp $ rm -f dig.out.cyclic dig.out.fixed dig.out.random +rm -f dig.out.0 dig.out.1 dig.out.2 dig.out.3 rm -f ns2/root.bk rm -f ns?/named.run ns?/named.core rm -f */named.memstats diff --git a/bin/tests/system/rrsetorder/dig.out.cyclic.good1 b/bin/tests/system/rrsetorder/dig.out.cyclic.good1 deleted file mode 100644 index d2ca6fc3..00000000 --- a/bin/tests/system/rrsetorder/dig.out.cyclic.good1 +++ /dev/null @@ -1,4 +0,0 @@ -1.2.3.1 -1.2.3.4 -1.2.3.3 -1.2.3.2 diff --git a/bin/tests/system/rrsetorder/dig.out.cyclic.good2 b/bin/tests/system/rrsetorder/dig.out.cyclic.good2 deleted file mode 100644 index c25c7560..00000000 --- a/bin/tests/system/rrsetorder/dig.out.cyclic.good2 +++ /dev/null @@ -1,4 +0,0 @@ -1.2.3.4 -1.2.3.3 -1.2.3.2 -1.2.3.1 diff --git a/bin/tests/system/rrsetorder/dig.out.cyclic.good3 b/bin/tests/system/rrsetorder/dig.out.cyclic.good3 deleted file mode 100644 index e8deb671..00000000 --- a/bin/tests/system/rrsetorder/dig.out.cyclic.good3 +++ /dev/null @@ -1,4 +0,0 @@ -1.2.3.3 -1.2.3.2 -1.2.3.1 -1.2.3.4 diff --git a/bin/tests/system/rrsetorder/dig.out.cyclic.good4 b/bin/tests/system/rrsetorder/dig.out.cyclic.good4 deleted file mode 100644 index 3b276939..00000000 --- a/bin/tests/system/rrsetorder/dig.out.cyclic.good4 +++ /dev/null @@ -1,4 +0,0 @@ -1.2.3.2 -1.2.3.1 -1.2.3.4 -1.2.3.3 diff --git a/bin/tests/system/rrsetorder/tests.sh b/bin/tests/system/rrsetorder/tests.sh index de9136e9..cf38a703 100644 --- a/bin/tests/system/rrsetorder/tests.sh +++ b/bin/tests/system/rrsetorder/tests.sh @@ -1,6 +1,6 @@ #!/bin/sh # -# Copyright (C) 2006, 2007 Internet Systems Consortium, Inc. ("ISC") +# Copyright (C) 2006-2008 Internet Systems Consortium, Inc. ("ISC") # # Permission to use, copy, modify, and/or distribute this software for any # purpose with or without fee is hereby granted, provided that the above @@ -14,54 +14,60 @@ # OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR # PERFORMANCE OF THIS SOFTWARE. -# $Id: tests.sh,v 1.5 2007/06/19 23:47:05 tbox Exp $ +# $Id: tests.sh,v 1.5.128.2 2008/04/24 23:46:29 tbox Exp $ SYSTEMTESTTOP=.. . $SYSTEMTESTTOP/conf.sh status=0 +if grep -q "^#define DNS_RDATASET_FIXED" $TOP/config.h; then + test_fixed=true +else + echo "I: Order 'fixed' disabled at compile time" + test_fixed=false +fi + # # # -echo "I: Checking order fixed (master)" -ret=0 -for i in 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 -do -$DIG +nosea +nocomm +nocmd +noquest +noadd +noauth +nocomm +nostat +short \ - -p 5300 @10.53.0.1 fixed.example > dig.out.fixed || ret=1 -cmp -s dig.out.fixed dig.out.fixed.good || ret=1 -done -if [ $ret != 0 ]; then echo "I:failed"; fi -status=`expr $status + $ret` +if $test_fixed; then + echo "I: Checking order fixed (master)" + ret=0 + for i in 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 + do + $DIG +nosea +nocomm +nocmd +noquest +noadd +noauth +nocomm +nostat +short \ + -p 5300 @10.53.0.1 fixed.example > dig.out.fixed || ret=1 + cmp -s dig.out.fixed dig.out.fixed.good || ret=1 + done + if [ $ret != 0 ]; then echo "I:failed"; fi + status=`expr $status + $ret` +fi # # # echo "I: Checking order cyclic (master)" ret=0 -match1=0 -match2=0 -match3=0 -match4=0 -for i in 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 +matches=0 +for i in 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 do -$DIG +nosea +nocomm +nocmd +noquest +noadd +noauth +nocomm +nostat +short \ - -p 5300 @10.53.0.1 cyclic.example > dig.out.cyclic || ret=1 -cmp -s dig.out.cyclic dig.out.cyclic.good1 || \ -cmp -s dig.out.cyclic dig.out.cyclic.good2 || \ -cmp -s dig.out.cyclic dig.out.cyclic.good3 || \ -cmp -s dig.out.cyclic dig.out.cyclic.good4 || \ -ret=1 - -cmp -s dig.out.cyclic dig.out.cyclic.good1 && match1=1 -cmp -s dig.out.cyclic dig.out.cyclic.good2 && match2=1 -cmp -s dig.out.cyclic dig.out.cyclic.good3 && match3=1 -cmp -s dig.out.cyclic dig.out.cyclic.good4 && match4=1 - + j=`expr $i % 4` + $DIG +nosea +nocomm +nocmd +noquest +noadd +noauth +nocomm +nostat +short \ + -p 5300 @10.53.0.1 cyclic.example > dig.out.cyclic || ret=1 + if [ $i -le 4 ]; then + cp dig.out.cyclic dig.out.$j + else + cmp -s dig.out.cyclic dig.out.$j && matches=`expr $matches + 1` + fi done -match=`expr $match1 + $match2 + $match3 + $match4` -if [ $match != 4 ]; then ret=1; fi +cmp -s dig.out.0 dig.out.1 && ret=1 +cmp -s dig.out.0 dig.out.2 && ret=1 +cmp -s dig.out.0 dig.out.3 && ret=1 +cmp -s dig.out.1 dig.out.2 && ret=1 +cmp -s dig.out.1 dig.out.3 && ret=1 +cmp -s dig.out.2 dig.out.3 && ret=1 +if [ $matches -ne 16 ]; then ret=1; fi if [ $ret != 0 ]; then echo "I:failed"; fi status=`expr $status + $ret` @@ -96,44 +102,43 @@ status=`expr $status + $ret` # # # -echo "I: Checking order fixed (slave)" -ret=0 -for i in 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 -do -$DIG +nosea +nocomm +nocmd +noquest +noadd +noauth +nocomm +nostat +short \ - -p 5300 @10.53.0.2 fixed.example > dig.out.fixed || ret=1 -cmp -s dig.out.fixed dig.out.fixed.good || ret=1 -done -if [ $ret != 0 ]; then echo "I:failed"; fi -status=`expr $status + $ret` +if $test_fixed; then + echo "I: Checking order fixed (slave)" + ret=0 + for i in 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 + do + $DIG +nosea +nocomm +nocmd +noquest +noadd +noauth +nocomm +nostat +short \ + -p 5300 @10.53.0.2 fixed.example > dig.out.fixed || ret=1 + cmp -s dig.out.fixed dig.out.fixed.good || ret=1 + done + if [ $ret != 0 ]; then echo "I:failed"; fi + status=`expr $status + $ret` +fi # # # echo "I: Checking order cyclic (slave)" ret=0 -match1=0 -match2=0 -match3=0 -match4=0 -for i in 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 +matches=0 +for i in 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 do -$DIG +nosea +nocomm +nocmd +noquest +noadd +noauth +nocomm +nostat +short \ - -p 5300 @10.53.0.2 cyclic.example > dig.out.cyclic || ret=1 -cmp -s dig.out.cyclic dig.out.cyclic.good1 || \ -cmp -s dig.out.cyclic dig.out.cyclic.good2 || \ -cmp -s dig.out.cyclic dig.out.cyclic.good3 || \ -cmp -s dig.out.cyclic dig.out.cyclic.good4 || \ -ret=1 - -cmp -s dig.out.cyclic dig.out.cyclic.good1 && match1=1 -cmp -s dig.out.cyclic dig.out.cyclic.good2 && match2=1 -cmp -s dig.out.cyclic dig.out.cyclic.good3 && match3=1 -cmp -s dig.out.cyclic dig.out.cyclic.good4 && match4=1 - + j=`expr $i % 4` + $DIG +nosea +nocomm +nocmd +noquest +noadd +noauth +nocomm +nostat +short \ + -p 5300 @10.53.0.2 cyclic.example > dig.out.cyclic || ret=1 + if [ $i -le 4 ]; then + cp dig.out.cyclic dig.out.$j + else + cmp -s dig.out.cyclic dig.out.$j && matches=`expr $matches + 1` + fi done -match=`expr $match1 + $match2 + $match3 + $match4` -if [ $match != 4 ]; then ret=1; fi +cmp -s dig.out.0 dig.out.1 && ret=1 +cmp -s dig.out.0 dig.out.2 && ret=1 +cmp -s dig.out.0 dig.out.3 && ret=1 +cmp -s dig.out.1 dig.out.2 && ret=1 +cmp -s dig.out.1 dig.out.3 && ret=1 +cmp -s dig.out.2 dig.out.3 && ret=1 +if [ $matches -ne 16 ]; then ret=1; fi if [ $ret != 0 ]; then echo "I:failed"; fi status=`expr $status + $ret` @@ -184,44 +189,43 @@ echo "I: Re-starting slave" # # # -echo "I: Checking order fixed (slave loaded from disk)" -ret=0 -for i in 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 -do -$DIG +nosea +nocomm +nocmd +noquest +noadd +noauth +nocomm +nostat +short \ - -p 5300 @10.53.0.2 fixed.example > dig.out.fixed || ret=1 -cmp -s dig.out.fixed dig.out.fixed.good || ret=1 -done -if [ $ret != 0 ]; then echo "I:failed"; fi -status=`expr $status + $ret` +if $test_fixed; then + echo "I: Checking order fixed (slave loaded from disk)" + ret=0 + for i in 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 + do + $DIG +nosea +nocomm +nocmd +noquest +noadd +noauth +nocomm +nostat +short \ + -p 5300 @10.53.0.2 fixed.example > dig.out.fixed || ret=1 + cmp -s dig.out.fixed dig.out.fixed.good || ret=1 + done + if [ $ret != 0 ]; then echo "I:failed"; fi + status=`expr $status + $ret` +fi # # # echo "I: Checking order cyclic (slave loaded from disk)" ret=0 -match1=0 -match2=0 -match3=0 -match4=0 -for i in 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 +matches=0 +for i in 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 do -$DIG +nosea +nocomm +nocmd +noquest +noadd +noauth +nocomm +nostat +short \ - -p 5300 @10.53.0.2 cyclic.example > dig.out.cyclic || ret=1 -cmp -s dig.out.cyclic dig.out.cyclic.good1 || \ -cmp -s dig.out.cyclic dig.out.cyclic.good2 || \ -cmp -s dig.out.cyclic dig.out.cyclic.good3 || \ -cmp -s dig.out.cyclic dig.out.cyclic.good4 || \ -ret=1 - -cmp -s dig.out.cyclic dig.out.cyclic.good1 && match1=1 -cmp -s dig.out.cyclic dig.out.cyclic.good2 && match2=1 -cmp -s dig.out.cyclic dig.out.cyclic.good3 && match3=1 -cmp -s dig.out.cyclic dig.out.cyclic.good4 && match4=1 - + j=`expr $i % 4` + $DIG +nosea +nocomm +nocmd +noquest +noadd +noauth +nocomm +nostat +short \ + -p 5300 @10.53.0.2 cyclic.example > dig.out.cyclic || ret=1 + if [ $i -le 4 ]; then + cp dig.out.cyclic dig.out.$j + else + cmp -s dig.out.cyclic dig.out.$j && matches=`expr $matches + 1` + fi done -match=`expr $match1 + $match2 + $match3 + $match4` -if [ $match != 4 ]; then ret=1; fi +cmp -s dig.out.0 dig.out.1 && ret=1 +cmp -s dig.out.0 dig.out.2 && ret=1 +cmp -s dig.out.0 dig.out.3 && ret=1 +cmp -s dig.out.1 dig.out.2 && ret=1 +cmp -s dig.out.1 dig.out.3 && ret=1 +cmp -s dig.out.2 dig.out.3 && ret=1 +if [ $matches -ne 16 ]; then ret=1; fi if [ $ret != 0 ]; then echo "I:failed"; fi status=`expr $status + $ret` @@ -256,44 +260,43 @@ status=`expr $status + $ret` # # # -echo "I: Checking order fixed (cache)" -ret=0 -for i in 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 -do -$DIG +nosea +nocomm +nocmd +noquest +noadd +noauth +nocomm +nostat +short \ - -p 5300 @10.53.0.3 fixed.example > dig.out.fixed || ret=1 -cmp -s dig.out.fixed dig.out.fixed.good || ret=1 -done -if [ $ret != 0 ]; then echo "I:failed"; fi -status=`expr $status + $ret` +if $test_fixed; then + echo "I: Checking order fixed (cache)" + ret=0 + for i in 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 + do + $DIG +nosea +nocomm +nocmd +noquest +noadd +noauth +nocomm +nostat +short \ + -p 5300 @10.53.0.3 fixed.example > dig.out.fixed || ret=1 + cmp -s dig.out.fixed dig.out.fixed.good || ret=1 + done + if [ $ret != 0 ]; then echo "I:failed"; fi + status=`expr $status + $ret` +fi # # # echo "I: Checking order cyclic (cache)" ret=0 -match1=0 -match2=0 -match3=0 -match4=0 -for i in 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 +matches=0 +for i in 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 do -$DIG +nosea +nocomm +nocmd +noquest +noadd +noauth +nocomm +nostat +short \ - -p 5300 @10.53.0.3 cyclic.example > dig.out.cyclic || ret=1 -cmp -s dig.out.cyclic dig.out.cyclic.good1 || \ -cmp -s dig.out.cyclic dig.out.cyclic.good2 || \ -cmp -s dig.out.cyclic dig.out.cyclic.good3 || \ -cmp -s dig.out.cyclic dig.out.cyclic.good4 || \ -ret=1 - -cmp -s dig.out.cyclic dig.out.cyclic.good1 && match1=1 -cmp -s dig.out.cyclic dig.out.cyclic.good2 && match2=1 -cmp -s dig.out.cyclic dig.out.cyclic.good3 && match3=1 -cmp -s dig.out.cyclic dig.out.cyclic.good4 && match4=1 - + j=`expr $i % 4` + $DIG +nosea +nocomm +nocmd +noquest +noadd +noauth +nocomm +nostat +short \ + -p 5300 @10.53.0.3 cyclic.example > dig.out.cyclic || ret=1 + if [ $i -le 4 ]; then + cp dig.out.cyclic dig.out.$j + else + cmp -s dig.out.cyclic dig.out.$j && matches=`expr $matches + 1` + fi done -match=`expr $match1 + $match2 + $match3 + $match4` -if [ $match != 4 ]; then ret=1; fi +cmp -s dig.out.0 dig.out.1 && ret=1 +cmp -s dig.out.0 dig.out.2 && ret=1 +cmp -s dig.out.0 dig.out.3 && ret=1 +cmp -s dig.out.1 dig.out.2 && ret=1 +cmp -s dig.out.1 dig.out.3 && ret=1 +cmp -s dig.out.2 dig.out.3 && ret=1 +if [ $matches -ne 16 ]; then ret=1; fi if [ $ret != 0 ]; then echo "I:failed"; fi status=`expr $status + $ret` diff --git a/config.h.in b/config.h.in index fdbe1923..e0fbcfc9 100644 --- a/config.h.in +++ b/config.h.in @@ -16,7 +16,7 @@ * PERFORMANCE OF THIS SOFTWARE. */ -/* $Id: config.h.in,v 1.90.60.4 2008/01/24 02:41:47 marka Exp $ */ +/* $Id: config.h.in,v 1.90.60.8 2008/05/06 01:32:51 each Exp $ */ /*! \file */ @@ -157,6 +157,9 @@ int sigwait(const unsigned int *set, int *sig); /* Define if you cannot bind() before connect() for TCP sockets. */ #undef BROKEN_TCP_BIND_BEFORE_CONNECT +/* Define to enable "rrset-order fixed" syntax. */ +#undef DNS_RDATASET_FIXED + /* Define to 1 if you have the header file. */ #undef HAVE_DLFCN_H @@ -175,6 +178,9 @@ int sigwait(const unsigned int *set, int *sig); /* Define to 1 if you have the `c' library (-lc). */ #undef HAVE_LIBC +/* Define to 1 if you have the `cap' library (-lcap). */ +#undef HAVE_LIBCAP + /* Define to 1 if you have the `c_r' library (-lc_r). */ #undef HAVE_LIBC_R @@ -223,6 +229,9 @@ int sigwait(const unsigned int *set, int *sig); /* 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_CAPABILITY_H + /* Define to 1 if you have the header file. */ #undef HAVE_SYS_PARAM_H diff --git a/config.h.win32 b/config.h.win32 index 31226de5..7e77ba93 100644 --- a/config.h.win32 +++ b/config.h.win32 @@ -1,5 +1,5 @@ /* - * Copyright (C) 2004, 2006, 2007 Internet Systems Consortium, Inc. ("ISC") + * Copyright (C) 2004, 2006-2008 Internet Systems Consortium, Inc. ("ISC") * Copyright (C) 1999-2001 Internet Software Consortium. * * Permission to use, copy, modify, and/or distribute this software for any @@ -15,7 +15,7 @@ * PERFORMANCE OF THIS SOFTWARE. */ -/* $Id: config.h.win32,v 1.16 2007/06/19 23:46:59 tbox Exp $ */ +/* $Id: config.h.win32,v 1.16.130.2 2008/04/02 23:46:28 tbox Exp $ */ /* * win32 configuration file @@ -123,9 +123,7 @@ /* Define if you have DH_generate_parameters(). */ #define HAVE_DH_GENERATE_PARAMETERS -#define ISC_PLATFORM_NEEDSTRLCAT - -#define ISC_PLATFORM_NEEDSTRLCPY +#define WANT_IPV6 #define S_IFMT _S_IFMT /* file type mask */ #define S_IFDIR _S_IFDIR /* directory */ @@ -146,7 +144,7 @@ /* open() under unix allows setting of read/write permissions * at the owner, group and other levels. These don't exist in NT - * We'll just map them all to the NT equivalent + * We'll just map them all to the NT equivalent */ #define S_IRUSR _S_IREAD /* Owner read permission */ @@ -196,7 +194,7 @@ typedef long off_t; */ #include -/* We actually are using the CryptAPI and not a device */ +/* We actually are using the CryptAPI and not a device */ #define PATH_RANDOMDEV "CryptAPI" #include diff --git a/configure b/configure index 3401f47f..7e616d0b 100755 --- a/configure +++ b/configure @@ -14,7 +14,7 @@ # OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR # PERFORMANCE OF THIS SOFTWARE. # -# $Id: configure,v 1.418.60.4 2008/01/24 02:41:48 marka Exp $ +# $Id: configure,v 1.418.60.8 2008/05/06 01:33:33 each Exp $ # # Portions Copyright (C) 1996-2001 Nominum, Inc. # @@ -29,7 +29,7 @@ # WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN # ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT # OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. -# From configure.in Revision: 1.432.60.5 . +# From configure.in Revision: 1.432.60.9 . # Guess values for system-dependent variables and create Makefiles. # Generated by GNU Autoconf 2.61. # @@ -1638,6 +1638,8 @@ Optional Features: --disable-linux-caps disable linux capabilities --enable-atomic enable machine specific atomic operations [default=autodetect] + --enable-fixed-rrset enable fixed rrset ordering + [default=no] Optional Packages: --with-PACKAGE[=ARG] use PACKAGE [ARG=yes] @@ -9045,6 +9047,14 @@ esac # # GNU libtool support # +case $host in +sunos*) + # Just set the maximum command line length for sunos as it otherwise + # takes a exceptionally long time to work it out. Required for libtool. + lt_cv_sys_max_cmd_len=4096; + ;; +esac + # Check whether --with-libtool was given. if test "${with_libtool+set}" = set; then @@ -9581,7 +9591,7 @@ ia64-*-hpux*) ;; *-*-irix6*) # Find out which ABI we are using. - echo '#line 9584 "configure"' > conftest.$ac_ext + echo '#line 9594 "configure"' > conftest.$ac_ext if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 (eval $ac_compile) 2>&5 ac_status=$? @@ -11703,11 +11713,11 @@ else -e 's:.*FLAGS}? :&$lt_compiler_flag :; t' \ -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \ -e 's:$: $lt_compiler_flag:'` - (eval echo "\"\$as_me:11706: $lt_compile\"" >&5) + (eval echo "\"\$as_me:11716: $lt_compile\"" >&5) (eval "$lt_compile" 2>conftest.err) ac_status=$? cat conftest.err >&5 - echo "$as_me:11710: \$? = $ac_status" >&5 + echo "$as_me:11720: \$? = $ac_status" >&5 if (exit $ac_status) && test -s "$ac_outfile"; then # The compiler can only warn and ignore the option if not recognized # So say no if there are warnings @@ -11946,11 +11956,11 @@ else -e 's:.*FLAGS}? :&$lt_compiler_flag :; t' \ -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \ -e 's:$: $lt_compiler_flag:'` - (eval echo "\"\$as_me:11949: $lt_compile\"" >&5) + (eval echo "\"\$as_me:11959: $lt_compile\"" >&5) (eval "$lt_compile" 2>conftest.err) ac_status=$? cat conftest.err >&5 - echo "$as_me:11953: \$? = $ac_status" >&5 + echo "$as_me:11963: \$? = $ac_status" >&5 if (exit $ac_status) && test -s "$ac_outfile"; then # The compiler can only warn and ignore the option if not recognized # So say no if there are warnings @@ -12006,11 +12016,11 @@ else -e 's:.*FLAGS}? :&$lt_compiler_flag :; t' \ -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \ -e 's:$: $lt_compiler_flag:'` - (eval echo "\"\$as_me:12009: $lt_compile\"" >&5) + (eval echo "\"\$as_me:12019: $lt_compile\"" >&5) (eval "$lt_compile" 2>out/conftest.err) ac_status=$? cat out/conftest.err >&5 - echo "$as_me:12013: \$? = $ac_status" >&5 + echo "$as_me:12023: \$? = $ac_status" >&5 if (exit $ac_status) && test -s out/conftest2.$ac_objext then # The compiler can only warn and ignore the option if not recognized @@ -14154,7 +14164,7 @@ else lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2 lt_status=$lt_dlunknown cat > conftest.$ac_ext < conftest.$ac_ext <&5) + (eval echo "\"\$as_me:16458: $lt_compile\"" >&5) (eval "$lt_compile" 2>conftest.err) ac_status=$? cat conftest.err >&5 - echo "$as_me:16452: \$? = $ac_status" >&5 + echo "$as_me:16462: \$? = $ac_status" >&5 if (exit $ac_status) && test -s "$ac_outfile"; then # The compiler can only warn and ignore the option if not recognized # So say no if there are warnings @@ -16505,11 +16515,11 @@ else -e 's:.*FLAGS}? :&$lt_compiler_flag :; t' \ -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \ -e 's:$: $lt_compiler_flag:'` - (eval echo "\"\$as_me:16508: $lt_compile\"" >&5) + (eval echo "\"\$as_me:16518: $lt_compile\"" >&5) (eval "$lt_compile" 2>out/conftest.err) ac_status=$? cat out/conftest.err >&5 - echo "$as_me:16512: \$? = $ac_status" >&5 + echo "$as_me:16522: \$? = $ac_status" >&5 if (exit $ac_status) && test -s out/conftest2.$ac_objext then # The compiler can only warn and ignore the option if not recognized @@ -17833,7 +17843,7 @@ else lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2 lt_status=$lt_dlunknown cat > conftest.$ac_ext < conftest.$ac_ext <&5) + (eval echo "\"\$as_me:18781: $lt_compile\"" >&5) (eval "$lt_compile" 2>conftest.err) ac_status=$? cat conftest.err >&5 - echo "$as_me:18775: \$? = $ac_status" >&5 + echo "$as_me:18785: \$? = $ac_status" >&5 if (exit $ac_status) && test -s "$ac_outfile"; then # The compiler can only warn and ignore the option if not recognized # So say no if there are warnings @@ -18828,11 +18838,11 @@ else -e 's:.*FLAGS}? :&$lt_compiler_flag :; t' \ -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \ -e 's:$: $lt_compiler_flag:'` - (eval echo "\"\$as_me:18831: $lt_compile\"" >&5) + (eval echo "\"\$as_me:18841: $lt_compile\"" >&5) (eval "$lt_compile" 2>out/conftest.err) ac_status=$? cat out/conftest.err >&5 - echo "$as_me:18835: \$? = $ac_status" >&5 + echo "$as_me:18845: \$? = $ac_status" >&5 if (exit $ac_status) && test -s out/conftest2.$ac_objext then # The compiler can only warn and ignore the option if not recognized @@ -20862,11 +20872,11 @@ else -e 's:.*FLAGS}? :&$lt_compiler_flag :; t' \ -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \ -e 's:$: $lt_compiler_flag:'` - (eval echo "\"\$as_me:20865: $lt_compile\"" >&5) + (eval echo "\"\$as_me:20875: $lt_compile\"" >&5) (eval "$lt_compile" 2>conftest.err) ac_status=$? cat conftest.err >&5 - echo "$as_me:20869: \$? = $ac_status" >&5 + echo "$as_me:20879: \$? = $ac_status" >&5 if (exit $ac_status) && test -s "$ac_outfile"; then # The compiler can only warn and ignore the option if not recognized # So say no if there are warnings @@ -21105,11 +21115,11 @@ else -e 's:.*FLAGS}? :&$lt_compiler_flag :; t' \ -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \ -e 's:$: $lt_compiler_flag:'` - (eval echo "\"\$as_me:21108: $lt_compile\"" >&5) + (eval echo "\"\$as_me:21118: $lt_compile\"" >&5) (eval "$lt_compile" 2>conftest.err) ac_status=$? cat conftest.err >&5 - echo "$as_me:21112: \$? = $ac_status" >&5 + echo "$as_me:21122: \$? = $ac_status" >&5 if (exit $ac_status) && test -s "$ac_outfile"; then # The compiler can only warn and ignore the option if not recognized # So say no if there are warnings @@ -21165,11 +21175,11 @@ else -e 's:.*FLAGS}? :&$lt_compiler_flag :; t' \ -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \ -e 's:$: $lt_compiler_flag:'` - (eval echo "\"\$as_me:21168: $lt_compile\"" >&5) + (eval echo "\"\$as_me:21178: $lt_compile\"" >&5) (eval "$lt_compile" 2>out/conftest.err) ac_status=$? cat out/conftest.err >&5 - echo "$as_me:21172: \$? = $ac_status" >&5 + echo "$as_me:21182: \$? = $ac_status" >&5 if (exit $ac_status) && test -s out/conftest2.$ac_objext then # The compiler can only warn and ignore the option if not recognized @@ -23313,7 +23323,7 @@ else lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2 lt_status=$lt_dlunknown cat > conftest.$ac_ext < conftest.$ac_ext <&5 +echo $ECHO_N "checking for cap_set_proc in -lcap... $ECHO_C" >&6; } +if test "${ac_cv_lib_cap_cap_set_proc+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + ac_check_lib_save_LIBS=$LIBS +LIBS="-lcap $LIBS" +cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* 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 cap_set_proc (); +int +main () +{ +return cap_set_proc (); + ; + return 0; +} +_ACEOF +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 "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 + (eval "$ac_link") 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && { + test -z "$ac_c_werror_flag" || + test ! -s conftest.err + } && test -s conftest$ac_exeext && + $as_test_x conftest$ac_exeext; then + ac_cv_lib_cap_cap_set_proc=yes +else + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + ac_cv_lib_cap_cap_set_proc=no +fi + +rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \ + conftest$ac_exeext conftest.$ac_ext +LIBS=$ac_check_lib_save_LIBS +fi +{ echo "$as_me:$LINENO: result: $ac_cv_lib_cap_cap_set_proc" >&5 +echo "${ECHO_T}$ac_cv_lib_cap_cap_set_proc" >&6; } +if test $ac_cv_lib_cap_cap_set_proc = yes; then + cat >>confdefs.h <<_ACEOF +#define HAVE_LIBCAP 1 +_ACEOF + + LIBS="-lcap $LIBS" + +fi + ;; no) ;; @@ -29212,6 +29294,30 @@ fi ISC_ARCH_DIR=$arch +# +# Activate "rrset-order fixed" or not? +# +# Check whether --enable-fixed-rrset was given. +if test "${enable_fixed_rrset+set}" = set; then + enableval=$enable_fixed_rrset; enable_fixed="$enableval" +else + enable_fixed="no" +fi + +case "$enable_fixed" in + yes) + +cat >>confdefs.h <<\_ACEOF +#define DNS_RDATASET_FIXED 1 +_ACEOF + + ;; + no) + ;; + *) + ;; +esac + # # The following sets up how non-blocking i/o is established. # Sunos, cygwin and solaris 2.x (x<5) require special handling. diff --git a/configure.in b/configure.in index 1e991c55..4ffa8d7b 100644 --- a/configure.in +++ b/configure.in @@ -18,7 +18,7 @@ AC_DIVERT_PUSH(1)dnl esyscmd([sed "s/^/# /" COPYRIGHT])dnl AC_DIVERT_POP()dnl -AC_REVISION($Revision: 1.432.60.5 $) +AC_REVISION($Revision: 1.432.60.9 $) AC_INIT(lib/dns/name.c) AC_PREREQ(2.59) @@ -1097,6 +1097,14 @@ AC_SUBST(PURIFY) # # GNU libtool support # +case $host in +sunos*) + # Just set the maximum command line length for sunos as it otherwise + # takes a exceptionally long time to work it out. Required for libtool. + lt_cv_sys_max_cmd_len=4096; + ;; +esac + AC_ARG_WITH(libtool, [ --with-libtool use GNU libtool (following indented options supported)], use_libtool="$withval", use_libtool="no") @@ -1875,7 +1883,8 @@ AC_ARG_ENABLE(linux-caps, [ --disable-linux-caps disable linux capabilities]) case "$enable_linux_caps" in yes|'') - AC_CHECK_HEADERS(linux/capability.h) + AC_CHECK_HEADERS(linux/capability.h sys/capability.h) + AC_CHECK_LIB(cap, cap_set_proc) ;; no) ;; @@ -2253,6 +2262,25 @@ AC_SUBST(ISC_PLATFORM_USEMACASM) ISC_ARCH_DIR=$arch AC_SUBST(ISC_ARCH_DIR) +# +# Activate "rrset-order fixed" or not? +# +AC_ARG_ENABLE(fixed-rrset, + [ --enable-fixed-rrset enable fixed rrset ordering + [[default=no]]], + enable_fixed="$enableval", + enable_fixed="no") +case "$enable_fixed" in + yes) + AC_DEFINE(DNS_RDATASET_FIXED, 1, + [Define to enable "rrset-order fixed" syntax.]) + ;; + no) + ;; + *) + ;; +esac + # # The following sets up how non-blocking i/o is established. # Sunos, cygwin and solaris 2.x (x<5) require special handling. diff --git a/contrib/query-loc-0.3.0/ADDRESSES b/contrib/query-loc-0.3.0/ADDRESSES deleted file mode 100644 index 370fde06..00000000 --- a/contrib/query-loc-0.3.0/ADDRESSES +++ /dev/null @@ -1,18 +0,0 @@ -The following machines, at least today seem to have LOC -records: - -*.cpod.fr (for instance www.cpod.fr) -130.104.3.* -195.202.193.* -Melanie.Tolna.Net -204.92.254.* -mail.vitts.com -alink.net -caida.org -ckdhr.com -distributed.net (rc5stats.distributed.net) -nikhef.nl -yahoo.com -nic.af - -$Id: ADDRESSES,v 1.1 2005/04/01 05:34:59 marka Exp $ diff --git a/contrib/query-loc-0.3.0/ALGO b/contrib/query-loc-0.3.0/ALGO deleted file mode 100644 index 4695dc14..00000000 --- a/contrib/query-loc-0.3.0/ALGO +++ /dev/null @@ -1,48 +0,0 @@ -Just for info, can be out of date. - - -RFC 1876, 5.2, specially 5.2.3 - -Important points: - -- LOC RRs are always attached to a *name*. -- we can have two (or more) RRs for one address, one more specific than the other - -main - if (host is a name) - getLOCbyname - else # host is an IP address - gethostbyaddr - if (name) - getLOCbyname - # If there is none, do not search. We assume the above was sufficient # (But check 5.2.2) - else - getLOCbyaddress - -getLOCbyname (host) - get LOC for host - if (it exists) - OK - else - get all A records of the name - foreach A record - getLOCbyaddress - OK at the first one found - # we assume they are consistent - END - -getLOCbyaddress (address) - # May receive a mask. Otherwise, deduce it from the class - makeNetAddress - getLOCbynetwork - -getLOCbynetwork - get PTR and A for it - if (exist) - getLOCbyname - ******* DIFFICULT : we have to manage a stack. See the code - makeNetAddress (level--) - getLOCbynetwork - else - END - diff --git a/contrib/query-loc-0.3.0/INSTALL b/contrib/query-loc-0.3.0/INSTALL deleted file mode 100644 index 5f31e7bd..00000000 --- a/contrib/query-loc-0.3.0/INSTALL +++ /dev/null @@ -1,9 +0,0 @@ -Type './configure', then 'make' and (as root if necessary) 'make -install'. - -It requires a recent libresolv, with loc_ntoa, but use an alternative -which I provide, if not found. - -Tested on Linux (i386 and Alpha), Solaris (Sparc) and Digital Unix (Alpha). - -$Id: INSTALL,v 1.1 2005/04/01 05:34:59 marka Exp $ diff --git a/contrib/query-loc-0.3.0/Makefile.in b/contrib/query-loc-0.3.0/Makefile.in deleted file mode 100644 index 82075c30..00000000 --- a/contrib/query-loc-0.3.0/Makefile.in +++ /dev/null @@ -1,40 +0,0 @@ -# $Id: Makefile.in,v 1.1 2005/04/01 05:34:59 marka Exp $ -CC=@CC@ -CFLAGS=@CFLAGS@ -LIBS=@LIBS@ -DESTDIR=@prefix@ -BINDIR=@prefix@/bin -MANDIR=@prefix@/share/man/man1 -DISTRIB= README INSTALL ALGO USAGE ADDRESSES Makefile.in configure configure.in config.h.in install-sh loc.h loc.c query-loc.c loc_ntoa.c query-loc.1 -OBJS=query-loc.o loc.o @LOC_NTOA@ -VERSION=`grep VERSION loc.h | cut -d ' ' -f 3 | sed s/\"//g` - -all: query-loc - -query-loc: $(OBJS) - $(CC) -o $@ $(OBJS) $(LIBS) - -%.o: %.c loc.h - $(CC) $(CFLAGS) -c $< - -clean: - rm -f *.o query-loc *~ - -distclean: clean - rm -f config.h config.cache config.log config.status Makefile - -distrib: clean - ./reconf - @(echo Query-Loc is version ${VERSION}; \ - mkdir query-loc-${VERSION}; \ - cp $(DISTRIB) query-loc-${VERSION};\ - tar cvf query-loc-${VERSION}.tar query-loc-${VERSION}; \ - rm -rf query-loc-${VERSION}; \ - gzip -v -9 -f query-loc-${VERSION}.tar); - -install: - @INSTALL@ -m 0755 query-loc $(BINDIR) - if [ ! -d $(MANDIR) ]; then \ - mkdir $(MANDIR); \ - fi - @INSTALL@ -m 0644 query-loc.1 $(MANDIR) diff --git a/contrib/query-loc-0.3.0/README b/contrib/query-loc-0.3.0/README deleted file mode 100644 index fc49c739..00000000 --- a/contrib/query-loc-0.3.0/README +++ /dev/null @@ -1,20 +0,0 @@ - query-loc: a program to retrieve and display the location - information in the DNS. - - It uses the algorithms described in - RFC 1876 (and RFC 1101 to get the network names). - You can find examples of networks wchich implement this scheme - in the ADDRESSES file. - - It is under the General Public Licence (GPL, which - you can fetch from . - - Copyright Stéphane Bortzmeyer , 1998. - - Thanks to Paul Vixie for the RFC and its encouragements. Thanks - to Björn Augustsson for the xtraceroute program - . - -$Id: README,v 1.1 2005/04/01 05:34:59 marka Exp $ - - diff --git a/contrib/query-loc-0.3.0/USAGE b/contrib/query-loc-0.3.0/USAGE deleted file mode 100644 index 233d6ca1..00000000 --- a/contrib/query-loc-0.3.0/USAGE +++ /dev/null @@ -1,8 +0,0 @@ -query-loc [-v] [-d nnn] host-name-or-address - -Examples of hosts with LOCation info (quite uncommon, if you know more, -please tell me): - -- Everything in the 193.105.79.0 network, such as www.humanite.presse.fr -- Everything in the 192.88.144 network, such as www.kei.com - diff --git a/contrib/query-loc-0.3.0/config.h.in b/contrib/query-loc-0.3.0/config.h.in deleted file mode 100644 index d90187ce..00000000 --- a/contrib/query-loc-0.3.0/config.h.in +++ /dev/null @@ -1,69 +0,0 @@ -/* config.h.in. Generated from configure.in by autoheader. */ -/* $Id: config.h.in,v 1.1 2005/04/01 05:35:00 marka Exp $ */ - - -/* Define to 1 if you have the header file. */ -#undef HAVE_INTTYPES_H - -/* Define to 1 if you have the `resolv' library (-lresolv). */ -#undef HAVE_LIBRESOLV - -/* Define to 1 if you have the header file. */ -#undef HAVE_MEMORY_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_STAT_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_UNISTD_H - -/* 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 version of this package. */ -#undef PACKAGE_VERSION - -/* The size of a `char', as computed by sizeof. */ -#undef SIZEOF_CHAR - -/* The size of a `int', as computed by sizeof. */ -#undef SIZEOF_INT - -/* The size of a `long', as computed by sizeof. */ -#undef SIZEOF_LONG - -/* The size of a `short', as computed by sizeof. */ -#undef SIZEOF_SHORT - -/* Define to 1 if you have the ANSI C header files. */ -#undef STDC_HEADERS - -/* Define to empty if `const' does not conform to ANSI C. */ -#undef const - -/* Is there a loc_ntoa on this system? */ -#undef HAVE_LOC_NTOA diff --git a/contrib/query-loc-0.3.0/configure b/contrib/query-loc-0.3.0/configure deleted file mode 100755 index d77cf76c..00000000 --- a/contrib/query-loc-0.3.0/configure +++ /dev/null @@ -1,6436 +0,0 @@ -#! /bin/sh -# Guess values for system-dependent variables and create Makefiles. -# Generated by GNU Autoconf 2.59. -# -# Copyright (C) 2003 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 Bourne compatible -if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then - emulate sh - NULLCMD=: - # Zsh 3.x and 4.x performs word splitting on ${1+"$@"}, which - # is contrary to our usage. Disable this feature. - alias -g '${1+"$@"}'='"$@"' -elif test -n "${BASH_VERSION+set}" && (set -o posix) >/dev/null 2>&1; then - set -o posix -fi -DUALCASE=1; export DUALCASE # for MKS sh - -# Support unset when possible. -if ( (MAIL=60; unset MAIL) || exit) >/dev/null 2>&1; then - as_unset=unset -else - as_unset=false -fi - - -# Work around bugs in pre-3.0 UWIN ksh. -$as_unset ENV MAIL MAILPATH -PS1='$ ' -PS2='> ' -PS4='+ ' - -# NLS nuisances. -for as_var in \ - LANG LANGUAGE LC_ADDRESS LC_ALL LC_COLLATE LC_CTYPE LC_IDENTIFICATION \ - LC_MEASUREMENT LC_MESSAGES LC_MONETARY LC_NAME LC_NUMERIC LC_PAPER \ - LC_TELEPHONE LC_TIME -do - if (set +x; test -z "`(eval $as_var=C; export $as_var) 2>&1`"); then - eval $as_var=C; export $as_var - else - $as_unset $as_var - fi -done - -# Required to use basename. -if expr a : '\(a\)' >/dev/null 2>&1; 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 - - -# Name of the executable. -as_me=`$as_basename "$0" || -$as_expr X/"$0" : '.*/\([^/][^/]*\)/*$' \| \ - X"$0" : 'X\(//\)$' \| \ - X"$0" : 'X\(/\)$' \| \ - . : '\(.\)' 2>/dev/null || -echo X/"$0" | - sed '/^.*\/\([^/][^/]*\)\/*$/{ s//\1/; q; } - /^X\/\(\/\/\)$/{ s//\1/; q; } - /^X\/\(\/\).*/{ s//\1/; q; } - s/.*/./; q'` - - -# PATH needs CR, and LINENO needs CR and PATH. -# 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 - -# The user is always right. -if test "${PATH_SEPARATOR+set}" != set; then - echo "#! /bin/sh" >conf$$.sh - echo "exit 0" >>conf$$.sh - chmod +x conf$$.sh - if (PATH="/nonexistent;."; conf$$.sh) >/dev/null 2>&1; then - PATH_SEPARATOR=';' - else - PATH_SEPARATOR=: - fi - rm -f conf$$.sh -fi - - - as_lineno_1=$LINENO - as_lineno_2=$LINENO - as_lineno_3=`(expr $as_lineno_1 + 1) 2>/dev/null` - test "x$as_lineno_1" != "x$as_lineno_2" && - test "x$as_lineno_3" = "x$as_lineno_2" || { - # Find who we are. Look in the path if we contain no path at all - # relative or not. - 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 - - ;; - 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 - { echo "$as_me: error: cannot find myself; rerun with an absolute path" >&2 - { (exit 1); exit 1; }; } - fi - case $CONFIG_SHELL in - '') - as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in /bin$PATH_SEPARATOR/usr/bin$PATH_SEPARATOR$PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - for as_base in sh bash ksh sh5; do - case $as_dir in - /*) - if ("$as_dir/$as_base" -c ' - as_lineno_1=$LINENO - as_lineno_2=$LINENO - as_lineno_3=`(expr $as_lineno_1 + 1) 2>/dev/null` - test "x$as_lineno_1" != "x$as_lineno_2" && - test "x$as_lineno_3" = "x$as_lineno_2" ') 2>/dev/null; then - $as_unset BASH_ENV || test "${BASH_ENV+set}" != set || { BASH_ENV=; export BASH_ENV; } - $as_unset ENV || test "${ENV+set}" != set || { ENV=; export ENV; } - CONFIG_SHELL=$as_dir/$as_base - export CONFIG_SHELL - exec "$CONFIG_SHELL" "$0" ${1+"$@"} - fi;; - esac - done -done -;; - esac - - # Create $as_me.lineno as a copy of $as_myself, but with $LINENO - # uniformly replaced by the line number. The first 'sed' inserts a - # line-number line before each line; the second 'sed' does the real - # work. The second script uses 'N' to pair each line-number line - # with the numbered line, and appends trailing '-' during - # substitution so that $LINENO is not a special case at line end. - # (Raja R Harinath suggested sed '=', and Paul Eggert wrote the - # second 'sed' script. Blame Lee E. McMahon for sed's syntax. :-) - sed '=' <$as_myself | - sed ' - N - s,$,-, - : loop - s,^\(['$as_cr_digits']*\)\(.*\)[$]LINENO\([^'$as_cr_alnum'_]\),\1\2\1\3, - t loop - s,-$,, - s,^['$as_cr_digits']*\n,, - ' >$as_me.lineno && - chmod +x $as_me.lineno || - { echo "$as_me: error: cannot create $as_me.lineno; rerun with a POSIX shell" >&2 - { (exit 1); exit 1; }; } - - # 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 sensible to this). - . ./$as_me.lineno - # Exit status is that of the last command. - exit -} - - -case `echo "testing\c"; echo 1,2,3`,`echo -n testing; echo 1,2,3` in - *c*,-n*) ECHO_N= ECHO_C=' -' ECHO_T=' ' ;; - *c*,* ) ECHO_N=-n ECHO_C= ECHO_T= ;; - *) ECHO_N= ECHO_C='\c' ECHO_T= ;; -esac - -if expr a : '\(a\)' >/dev/null 2>&1; then - as_expr=expr -else - as_expr=false -fi - -rm -f conf$$ conf$$.exe conf$$.file -echo >conf$$.file -if ln -s conf$$.file conf$$ 2>/dev/null; then - # We could just check for DJGPP; but this test a) works b) is more generic - # and c) will remain valid once DJGPP supports symlinks (DJGPP 2.04). - if test -f conf$$.exe; then - # Don't use ln at all; we don't have any links - as_ln_s='cp -p' - else - as_ln_s='ln -s' - fi -elif ln conf$$.file conf$$ 2>/dev/null; then - as_ln_s=ln -else - as_ln_s='cp -p' -fi -rm -f conf$$ conf$$.exe conf$$.file - -if mkdir -p . 2>/dev/null; then - as_mkdir_p=: -else - test -d ./-p && rmdir ./-p - as_mkdir_p=false -fi - -as_executable_p="test -f" - -# 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'" - - -# IFS -# We need space, tab and new line, in precisely that order. -as_nl=' -' -IFS=" $as_nl" - -# CDPATH. -$as_unset CDPATH - - -# Name of the host. -# hostname on some systems (SVR3.2, Linux) returns a bogus exit status, -# so uname gets run too. -ac_hostname=`(hostname || uname -n) 2>/dev/null | sed 1q` - -exec 6>&1 - -# -# Initializations. -# -ac_default_prefix=/usr/local -ac_config_libobj_dir=. -cross_compiling=no -subdirs= -MFLAGS= -MAKEFLAGS= -SHELL=${CONFIG_SHELL-/bin/sh} - -# Maximum number of lines to put in a shell here document. -# This variable seems obsolete. It should probably be removed, and -# only ac_max_sed_lines should be used. -: ${ac_max_here_lines=38} - -# Identity of this package. -PACKAGE_NAME= -PACKAGE_TARNAME= -PACKAGE_VERSION= -PACKAGE_STRING= -PACKAGE_BUGREPORT= - -ac_unique_file="query-loc.c" -# Factoring default headers for most tests. -ac_includes_default="\ -#include -#if HAVE_SYS_TYPES_H -# include -#endif -#if HAVE_SYS_STAT_H -# include -#endif -#if STDC_HEADERS -# include -# include -#else -# if HAVE_STDLIB_H -# include -# endif -#endif -#if HAVE_STRING_H -# if !STDC_HEADERS && HAVE_MEMORY_H -# include -# endif -# include -#endif -#if HAVE_STRINGS_H -# include -#endif -#if HAVE_INTTYPES_H -# include -#else -# if HAVE_STDINT_H -# include -# endif -#endif -#if HAVE_UNISTD_H -# include -#endif" - -ac_subst_vars='SHELL PATH_SEPARATOR PACKAGE_NAME PACKAGE_TARNAME PACKAGE_VERSION PACKAGE_STRING PACKAGE_BUGREPORT exec_prefix prefix program_transform_name bindir sbindir libexecdir datadir sysconfdir sharedstatedir localstatedir libdir includedir oldincludedir infodir mandir build_alias host_alias target_alias DEFS ECHO_C ECHO_N ECHO_T LIBS CC CFLAGS LDFLAGS CPPFLAGS ac_ct_CC EXEEXT OBJEXT INSTALL_PROGRAM INSTALL_SCRIPT INSTALL_DATA CPP EGREP LOC_NTOA LIBOBJS LTLIBOBJS' -ac_subst_files='' - -# Initialize some variables set by options. -ac_init_help= -ac_init_version=false -# 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. -bindir='${exec_prefix}/bin' -sbindir='${exec_prefix}/sbin' -libexecdir='${exec_prefix}/libexec' -datadir='${prefix}/share' -sysconfdir='${prefix}/etc' -sharedstatedir='${prefix}/com' -localstatedir='${prefix}/var' -libdir='${exec_prefix}/lib' -includedir='${prefix}/include' -oldincludedir='/usr/include' -infodir='${prefix}/info' -mandir='${prefix}/man' - -ac_prev= -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 - - ac_optarg=`expr "x$ac_option" : 'x[^=]*=\(.*\)'` - - # Accept the important Cygnus configure options, so we can diagnose typos. - - case $ac_option in - - -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 | --data | --dat | --da) - ac_prev=datadir ;; - -datadir=* | --datadir=* | --datadi=* | --datad=* | --data=* | --dat=* \ - | --da=*) - datadir=$ac_optarg ;; - - -disable-* | --disable-*) - ac_feature=`expr "x$ac_option" : 'x-*disable-\(.*\)'` - # Reject names that are not valid shell variable names. - expr "x$ac_feature" : ".*[^-_$as_cr_alnum]" >/dev/null && - { echo "$as_me: error: invalid feature name: $ac_feature" >&2 - { (exit 1); exit 1; }; } - ac_feature=`echo $ac_feature | sed 's/-/_/g'` - eval "enable_$ac_feature=no" ;; - - -enable-* | --enable-*) - ac_feature=`expr "x$ac_option" : 'x-*enable-\([^=]*\)'` - # Reject names that are not valid shell variable names. - expr "x$ac_feature" : ".*[^-_$as_cr_alnum]" >/dev/null && - { echo "$as_me: error: invalid feature name: $ac_feature" >&2 - { (exit 1); exit 1; }; } - ac_feature=`echo $ac_feature | sed 's/-/_/g'` - case $ac_option in - *=*) ac_optarg=`echo "$ac_optarg" | sed "s/'/'\\\\\\\\''/g"`;; - *) ac_optarg=yes ;; - esac - eval "enable_$ac_feature='$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 ;; - - -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 ;; - - -localstatedir | --localstatedir | --localstatedi | --localstated \ - | --localstate | --localstat | --localsta | --localst \ - | --locals | --local | --loca | --loc | --lo) - ac_prev=localstatedir ;; - -localstatedir=* | --localstatedir=* | --localstatedi=* | --localstated=* \ - | --localstate=* | --localstat=* | --localsta=* | --localst=* \ - | --locals=* | --local=* | --loca=* | --loc=* | --lo=*) - 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 ;; - - -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_package=`expr "x$ac_option" : 'x-*with-\([^=]*\)'` - # Reject names that are not valid shell variable names. - expr "x$ac_package" : ".*[^-_$as_cr_alnum]" >/dev/null && - { echo "$as_me: error: invalid package name: $ac_package" >&2 - { (exit 1); exit 1; }; } - ac_package=`echo $ac_package| sed 's/-/_/g'` - case $ac_option in - *=*) ac_optarg=`echo "$ac_optarg" | sed "s/'/'\\\\\\\\''/g"`;; - *) ac_optarg=yes ;; - esac - eval "with_$ac_package='$ac_optarg'" ;; - - -without-* | --without-*) - ac_package=`expr "x$ac_option" : 'x-*without-\(.*\)'` - # Reject names that are not valid shell variable names. - expr "x$ac_package" : ".*[^-_$as_cr_alnum]" >/dev/null && - { echo "$as_me: error: invalid package name: $ac_package" >&2 - { (exit 1); exit 1; }; } - ac_package=`echo $ac_package | sed 's/-/_/g'` - eval "with_$ac_package=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 ;; - - -*) { echo "$as_me: error: unrecognized option: $ac_option -Try \`$0 --help' for more information." >&2 - { (exit 1); exit 1; }; } - ;; - - *=*) - ac_envvar=`expr "x$ac_option" : 'x\([^=]*\)='` - # Reject names that are not valid shell variable names. - expr "x$ac_envvar" : ".*[^_$as_cr_alnum]" >/dev/null && - { echo "$as_me: error: invalid variable name: $ac_envvar" >&2 - { (exit 1); exit 1; }; } - ac_optarg=`echo "$ac_optarg" | sed "s/'/'\\\\\\\\''/g"` - eval "$ac_envvar='$ac_optarg'" - export $ac_envvar ;; - - *) - # FIXME: should be removed in autoconf 3.0. - echo "$as_me: WARNING: you should use --build, --host, --target" >&2 - expr "x$ac_option" : ".*[^-._$as_cr_alnum]" >/dev/null && - 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'` - { echo "$as_me: error: missing argument to $ac_option" >&2 - { (exit 1); exit 1; }; } -fi - -# Be sure to have absolute paths. -for ac_var in exec_prefix prefix -do - eval ac_val=$`echo $ac_var` - case $ac_val in - [\\/$]* | ?:[\\/]* | NONE | '' ) ;; - *) { echo "$as_me: error: expected an absolute directory name for --$ac_var: $ac_val" >&2 - { (exit 1); exit 1; }; };; - esac -done - -# Be sure to have absolute paths. -for ac_var in bindir sbindir libexecdir datadir sysconfdir sharedstatedir \ - localstatedir libdir includedir oldincludedir infodir mandir -do - eval ac_val=$`echo $ac_var` - case $ac_val in - [\\/$]* | ?:[\\/]* ) ;; - *) { echo "$as_me: error: expected an absolute directory name for --$ac_var: $ac_val" >&2 - { (exit 1); exit 1; }; };; - esac -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 - echo "$as_me: WARNING: If you wanted to set the --build type, don't use --host. - If a cross compiler is detected then cross compile mode will be used." >&2 - 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 - - -# 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 its parent. - ac_confdir=`(dirname "$0") 2>/dev/null || -$as_expr X"$0" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ - X"$0" : 'X\(//\)[^/]' \| \ - X"$0" : 'X\(//\)$' \| \ - X"$0" : 'X\(/\)' \| \ - . : '\(.\)' 2>/dev/null || -echo X"$0" | - 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 - if test "$ac_srcdir_defaulted" = yes; then - { echo "$as_me: error: cannot find sources ($ac_unique_file) in $ac_confdir or .." >&2 - { (exit 1); exit 1; }; } - else - { echo "$as_me: error: cannot find sources ($ac_unique_file) in $srcdir" >&2 - { (exit 1); exit 1; }; } - fi -fi -(cd $srcdir && test -r ./$ac_unique_file) 2>/dev/null || - { echo "$as_me: error: sources are in $srcdir, but \`cd $srcdir' does not work" >&2 - { (exit 1); exit 1; }; } -srcdir=`echo "$srcdir" | sed 's%\([^\\/]\)[\\/]*$%\1%'` -ac_env_build_alias_set=${build_alias+set} -ac_env_build_alias_value=$build_alias -ac_cv_env_build_alias_set=${build_alias+set} -ac_cv_env_build_alias_value=$build_alias -ac_env_host_alias_set=${host_alias+set} -ac_env_host_alias_value=$host_alias -ac_cv_env_host_alias_set=${host_alias+set} -ac_cv_env_host_alias_value=$host_alias -ac_env_target_alias_set=${target_alias+set} -ac_env_target_alias_value=$target_alias -ac_cv_env_target_alias_set=${target_alias+set} -ac_cv_env_target_alias_value=$target_alias -ac_env_CC_set=${CC+set} -ac_env_CC_value=$CC -ac_cv_env_CC_set=${CC+set} -ac_cv_env_CC_value=$CC -ac_env_CFLAGS_set=${CFLAGS+set} -ac_env_CFLAGS_value=$CFLAGS -ac_cv_env_CFLAGS_set=${CFLAGS+set} -ac_cv_env_CFLAGS_value=$CFLAGS -ac_env_LDFLAGS_set=${LDFLAGS+set} -ac_env_LDFLAGS_value=$LDFLAGS -ac_cv_env_LDFLAGS_set=${LDFLAGS+set} -ac_cv_env_LDFLAGS_value=$LDFLAGS -ac_env_CPPFLAGS_set=${CPPFLAGS+set} -ac_env_CPPFLAGS_value=$CPPFLAGS -ac_cv_env_CPPFLAGS_set=${CPPFLAGS+set} -ac_cv_env_CPPFLAGS_value=$CPPFLAGS -ac_env_CPP_set=${CPP+set} -ac_env_CPP_value=$CPP -ac_cv_env_CPP_set=${CPP+set} -ac_cv_env_CPP_value=$CPP - -# -# 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 \`..'] - -_ACEOF - - cat <<_ACEOF -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] - --datadir=DIR read-only architecture-independent data [PREFIX/share] - --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] - --infodir=DIR info documentation [PREFIX/info] - --mandir=DIR man documentation [PREFIX/man] -_ACEOF - - cat <<\_ACEOF -_ACEOF -fi - -if test -n "$ac_init_help"; then - - cat <<\_ACEOF - -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 - CPPFLAGS 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. - -_ACEOF -fi - -if test "$ac_init_help" = "recursive"; then - # If there are subdirs, report their specific --help. - ac_popdir=`pwd` - for ac_dir in : $ac_subdirs_all; do test "x$ac_dir" = x: && continue - test -d $ac_dir || continue - ac_builddir=. - -if test "$ac_dir" != .; then - ac_dir_suffix=/`echo "$ac_dir" | sed 's,^\.[\\/],,'` - # A "../" for each directory in $ac_dir_suffix. - ac_top_builddir=`echo "$ac_dir_suffix" | sed 's,/[^\\/]*,../,g'` -else - ac_dir_suffix= ac_top_builddir= -fi - -case $srcdir in - .) # No --srcdir option. We are building in place. - ac_srcdir=. - if test -z "$ac_top_builddir"; then - ac_top_srcdir=. - else - ac_top_srcdir=`echo $ac_top_builddir | sed 's,/$,,'` - fi ;; - [\\/]* | ?:[\\/]* ) # Absolute path. - ac_srcdir=$srcdir$ac_dir_suffix; - ac_top_srcdir=$srcdir ;; - *) # Relative path. - ac_srcdir=$ac_top_builddir$srcdir$ac_dir_suffix - ac_top_srcdir=$ac_top_builddir$srcdir ;; -esac - -# Do not use `cd foo && pwd` to compute absolute paths, because -# the directories may not exist. -case `pwd` in -.) ac_abs_builddir="$ac_dir";; -*) - case "$ac_dir" in - .) ac_abs_builddir=`pwd`;; - [\\/]* | ?:[\\/]* ) ac_abs_builddir="$ac_dir";; - *) ac_abs_builddir=`pwd`/"$ac_dir";; - esac;; -esac -case $ac_abs_builddir in -.) ac_abs_top_builddir=${ac_top_builddir}.;; -*) - case ${ac_top_builddir}. in - .) ac_abs_top_builddir=$ac_abs_builddir;; - [\\/]* | ?:[\\/]* ) ac_abs_top_builddir=${ac_top_builddir}.;; - *) ac_abs_top_builddir=$ac_abs_builddir/${ac_top_builddir}.;; - esac;; -esac -case $ac_abs_builddir in -.) ac_abs_srcdir=$ac_srcdir;; -*) - case $ac_srcdir in - .) ac_abs_srcdir=$ac_abs_builddir;; - [\\/]* | ?:[\\/]* ) ac_abs_srcdir=$ac_srcdir;; - *) ac_abs_srcdir=$ac_abs_builddir/$ac_srcdir;; - esac;; -esac -case $ac_abs_builddir in -.) ac_abs_top_srcdir=$ac_top_srcdir;; -*) - case $ac_top_srcdir in - .) ac_abs_top_srcdir=$ac_abs_builddir;; - [\\/]* | ?:[\\/]* ) ac_abs_top_srcdir=$ac_top_srcdir;; - *) ac_abs_top_srcdir=$ac_abs_builddir/$ac_top_srcdir;; - esac;; -esac - - cd $ac_dir - # Check for guested configure; otherwise get Cygnus style 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 - elif test -f $ac_srcdir/configure.ac || - test -f $ac_srcdir/configure.in; then - echo - $ac_configure --help - else - echo "$as_me: WARNING: no configuration information is in $ac_dir" >&2 - fi - cd "$ac_popdir" - done -fi - -test -n "$ac_init_help" && exit 0 -if $ac_init_version; then - cat <<\_ACEOF - -Copyright (C) 2003 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 0 -fi -exec 5>config.log -cat >&5 <<_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.59. Invocation command line was - - $ $0 $@ - -_ACEOF -{ -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` -hostinfo = `(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=. - echo "PATH: $as_dir" -done - -} >&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_sep= -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=`echo "$ac_arg" | sed "s/'/'\\\\\\\\''/g"` ;; - esac - case $ac_pass in - 1) ac_configure_args0="$ac_configure_args0 '$ac_arg'" ;; - 2) - ac_configure_args1="$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 - ac_configure_args="$ac_configure_args$ac_sep'$ac_arg'" - # Get rid of the leading space. - ac_sep=" " - ;; - esac - done -done -$as_unset ac_configure_args0 || test "${ac_configure_args0+set}" != set || { ac_configure_args0=; export ac_configure_args0; } -$as_unset ac_configure_args1 || test "${ac_configure_args1+set}" != set || { ac_configure_args1=; export 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: Be sure not to use single quotes in there, as some shells, -# such as our DU 5.0 friend, will then `close' the trap. -trap 'exit_status=$? - # Save into config.log some information that might help in debugging. - { - echo - - cat <<\_ASBOX -## ---------------- ## -## Cache variables. ## -## ---------------- ## -_ASBOX - echo - # The following way of writing the cache mishandles newlines in values, -{ - (set) 2>&1 | - case `(ac_space='"'"' '"'"'; set | grep ac_space) 2>&1` in - *ac_space=\ *) - sed -n \ - "s/'"'"'/'"'"'\\\\'"'"''"'"'/g; - s/^\\([_$as_cr_alnum]*_cv_[_$as_cr_alnum]*\\)=\\(.*\\)/\\1='"'"'\\2'"'"'/p" - ;; - *) - sed -n \ - "s/^\\([_$as_cr_alnum]*_cv_[_$as_cr_alnum]*\\)=\\(.*\\)/\\1=\\2/p" - ;; - esac; -} - echo - - cat <<\_ASBOX -## ----------------- ## -## Output variables. ## -## ----------------- ## -_ASBOX - echo - for ac_var in $ac_subst_vars - do - eval ac_val=$`echo $ac_var` - echo "$ac_var='"'"'$ac_val'"'"'" - done | sort - echo - - if test -n "$ac_subst_files"; then - cat <<\_ASBOX -## ------------- ## -## Output files. ## -## ------------- ## -_ASBOX - echo - for ac_var in $ac_subst_files - do - eval ac_val=$`echo $ac_var` - echo "$ac_var='"'"'$ac_val'"'"'" - done | sort - echo - fi - - if test -s confdefs.h; then - cat <<\_ASBOX -## ----------- ## -## confdefs.h. ## -## ----------- ## -_ASBOX - echo - sed "/^$/d" confdefs.h | sort - echo - fi - test "$ac_signal" != 0 && - echo "$as_me: caught signal $ac_signal" - echo "$as_me: exit $exit_status" - } >&5 - rm -f core *.core && - rm -rf conftest* confdefs* conf$$* $ac_clean_files && - exit $exit_status - ' 0 -for ac_signal in 1 2 13 15; do - trap 'ac_signal='$ac_signal'; { (exit 1); exit 1; }' $ac_signal -done -ac_signal=0 - -# confdefs.h avoids OS command line length limits that DEFS can exceed. -rm -rf conftest* confdefs.h -# AIX cpp loses on an empty file, so make sure it contains at least a newline. -echo >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 - - -# Let the site file select an alternate cache file if it wants to. -# Prefer explicitly selected file to automatically selected ones. -if test -z "$CONFIG_SITE"; then - if test "x$prefix" != xNONE; then - CONFIG_SITE="$prefix/share/config.site $prefix/etc/config.site" - else - CONFIG_SITE="$ac_default_prefix/share/config.site $ac_default_prefix/etc/config.site" - fi -fi -for ac_site_file in $CONFIG_SITE; do - if test -r "$ac_site_file"; then - { echo "$as_me:$LINENO: loading site script $ac_site_file" >&5 -echo "$as_me: loading site script $ac_site_file" >&6;} - sed 's/^/| /' "$ac_site_file" >&5 - . "$ac_site_file" - 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. - if test -f "$cache_file"; then - { echo "$as_me:$LINENO: loading cache $cache_file" >&5 -echo "$as_me: loading cache $cache_file" >&6;} - case $cache_file in - [\\/]* | ?:[\\/]* ) . $cache_file;; - *) . ./$cache_file;; - esac - fi -else - { echo "$as_me:$LINENO: creating cache $cache_file" >&5 -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 `(set) 2>&1 | - sed -n 's/^ac_env_\([a-zA-Z_0-9]*\)_set=.*/\1/p'`; 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,) - { echo "$as_me:$LINENO: error: \`$ac_var' was set to \`$ac_old_val' in the previous run" >&5 -echo "$as_me: error: \`$ac_var' was set to \`$ac_old_val' in the previous run" >&2;} - ac_cache_corrupted=: ;; - ,set) - { echo "$as_me:$LINENO: error: \`$ac_var' was not set in the previous run" >&5 -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 - { echo "$as_me:$LINENO: error: \`$ac_var' has changed since the previous run:" >&5 -echo "$as_me: error: \`$ac_var' has changed since the previous run:" >&2;} - { echo "$as_me:$LINENO: former value: $ac_old_val" >&5 -echo "$as_me: former value: $ac_old_val" >&2;} - { echo "$as_me:$LINENO: current value: $ac_new_val" >&5 -echo "$as_me: current value: $ac_new_val" >&2;} - ac_cache_corrupted=: - fi;; - esac - # Pass precious variables to config.status. - if test "$ac_new_set" = set; then - case $ac_new_val in - *" "*|*" "*|*[\[\]\~\#\$\^\&\*\(\)\{\}\\\|\;\<\>\?\"\']*) - ac_arg=$ac_var=`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. - *) ac_configure_args="$ac_configure_args '$ac_arg'" ;; - esac - fi -done -if $ac_cache_corrupted; then - { echo "$as_me:$LINENO: error: changes in the environment can compromise the build" >&5 -echo "$as_me: error: changes in the environment can compromise the build" >&2;} - { { echo "$as_me:$LINENO: error: run \`make distclean' and/or \`rm $cache_file' and start over" >&5 -echo "$as_me: error: run \`make distclean' and/or \`rm $cache_file' and start over" >&2;} - { (exit 1); exit 1; }; } -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 -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 -echo "$as_me:$LINENO: checking for $ac_word" >&5 -echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6 -if test "${ac_cv_prog_CC+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&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_executable_p "$as_dir/$ac_word$ac_exec_ext"; then - ac_cv_prog_CC="${ac_tool_prefix}gcc" - echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 - break 2 - fi -done -done - -fi -fi -CC=$ac_cv_prog_CC -if test -n "$CC"; then - echo "$as_me:$LINENO: result: $CC" >&5 -echo "${ECHO_T}$CC" >&6 -else - echo "$as_me:$LINENO: result: no" >&5 -echo "${ECHO_T}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 -echo "$as_me:$LINENO: checking for $ac_word" >&5 -echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6 -if test "${ac_cv_prog_ac_ct_CC+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&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_executable_p "$as_dir/$ac_word$ac_exec_ext"; then - ac_cv_prog_ac_ct_CC="gcc" - echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 - break 2 - fi -done -done - -fi -fi -ac_ct_CC=$ac_cv_prog_ac_ct_CC -if test -n "$ac_ct_CC"; then - echo "$as_me:$LINENO: result: $ac_ct_CC" >&5 -echo "${ECHO_T}$ac_ct_CC" >&6 -else - echo "$as_me:$LINENO: result: no" >&5 -echo "${ECHO_T}no" >&6 -fi - - CC=$ac_ct_CC -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 -echo "$as_me:$LINENO: checking for $ac_word" >&5 -echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6 -if test "${ac_cv_prog_CC+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&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_executable_p "$as_dir/$ac_word$ac_exec_ext"; then - ac_cv_prog_CC="${ac_tool_prefix}cc" - echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 - break 2 - fi -done -done - -fi -fi -CC=$ac_cv_prog_CC -if test -n "$CC"; then - echo "$as_me:$LINENO: result: $CC" >&5 -echo "${ECHO_T}$CC" >&6 -else - echo "$as_me:$LINENO: result: no" >&5 -echo "${ECHO_T}no" >&6 -fi - -fi -if test -z "$ac_cv_prog_CC"; then - ac_ct_CC=$CC - # Extract the first word of "cc", so it can be a program name with args. -set dummy cc; ac_word=$2 -echo "$as_me:$LINENO: checking for $ac_word" >&5 -echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6 -if test "${ac_cv_prog_ac_ct_CC+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&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_executable_p "$as_dir/$ac_word$ac_exec_ext"; then - ac_cv_prog_ac_ct_CC="cc" - echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 - break 2 - fi -done -done - -fi -fi -ac_ct_CC=$ac_cv_prog_ac_ct_CC -if test -n "$ac_ct_CC"; then - echo "$as_me:$LINENO: result: $ac_ct_CC" >&5 -echo "${ECHO_T}$ac_ct_CC" >&6 -else - echo "$as_me:$LINENO: result: no" >&5 -echo "${ECHO_T}no" >&6 -fi - - CC=$ac_ct_CC -else - CC="$ac_cv_prog_CC" -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 -echo "$as_me:$LINENO: checking for $ac_word" >&5 -echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6 -if test "${ac_cv_prog_CC+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&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_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" - echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 - break 2 - fi -done -done - -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 - echo "$as_me:$LINENO: result: $CC" >&5 -echo "${ECHO_T}$CC" >&6 -else - echo "$as_me:$LINENO: result: no" >&5 -echo "${ECHO_T}no" >&6 -fi - -fi -if test -z "$CC"; then - if test -n "$ac_tool_prefix"; then - for ac_prog in cl - 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 -echo "$as_me:$LINENO: checking for $ac_word" >&5 -echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6 -if test "${ac_cv_prog_CC+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&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_executable_p "$as_dir/$ac_word$ac_exec_ext"; then - ac_cv_prog_CC="$ac_tool_prefix$ac_prog" - echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 - break 2 - fi -done -done - -fi -fi -CC=$ac_cv_prog_CC -if test -n "$CC"; then - echo "$as_me:$LINENO: result: $CC" >&5 -echo "${ECHO_T}$CC" >&6 -else - echo "$as_me:$LINENO: result: no" >&5 -echo "${ECHO_T}no" >&6 -fi - - test -n "$CC" && break - done -fi -if test -z "$CC"; then - ac_ct_CC=$CC - for ac_prog in cl -do - # Extract the first word of "$ac_prog", so it can be a program name with args. -set dummy $ac_prog; ac_word=$2 -echo "$as_me:$LINENO: checking for $ac_word" >&5 -echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6 -if test "${ac_cv_prog_ac_ct_CC+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&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_executable_p "$as_dir/$ac_word$ac_exec_ext"; then - ac_cv_prog_ac_ct_CC="$ac_prog" - echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 - break 2 - fi -done -done - -fi -fi -ac_ct_CC=$ac_cv_prog_ac_ct_CC -if test -n "$ac_ct_CC"; then - echo "$as_me:$LINENO: result: $ac_ct_CC" >&5 -echo "${ECHO_T}$ac_ct_CC" >&6 -else - echo "$as_me:$LINENO: result: no" >&5 -echo "${ECHO_T}no" >&6 -fi - - test -n "$ac_ct_CC" && break -done - - CC=$ac_ct_CC -fi - -fi - - -test -z "$CC" && { { echo "$as_me:$LINENO: error: no acceptable C compiler found in \$PATH -See \`config.log' for more details." >&5 -echo "$as_me: error: no acceptable C compiler found in \$PATH -See \`config.log' for more details." >&2;} - { (exit 1); exit 1; }; } - -# Provide some information about the compiler. -echo "$as_me:$LINENO:" \ - "checking for C compiler version" >&5 -ac_compiler=`set X $ac_compile; echo $2` -{ (eval echo "$as_me:$LINENO: \"$ac_compiler --version &5\"") >&5 - (eval $ac_compiler --version &5) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } -{ (eval echo "$as_me:$LINENO: \"$ac_compiler -v &5\"") >&5 - (eval $ac_compiler -v &5) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } -{ (eval echo "$as_me:$LINENO: \"$ac_compiler -V &5\"") >&5 - (eval $ac_compiler -V &5) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } - -cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF -/* end confdefs.h. */ - -int -main () -{ - - ; - return 0; -} -_ACEOF -ac_clean_files_save=$ac_clean_files -ac_clean_files="$ac_clean_files a.out 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. -echo "$as_me:$LINENO: checking for C compiler default output file name" >&5 -echo $ECHO_N "checking for C compiler default output file name... $ECHO_C" >&6 -ac_link_default=`echo "$ac_link" | sed 's/ -o *conftest[^ ]*//'` -if { (eval echo "$as_me:$LINENO: \"$ac_link_default\"") >&5 - (eval $ac_link_default) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; then - # Find the output, starting from the most likely. This scheme is -# not robust to junk in `.', hence go to wildcards (a.*) only as a last -# resort. - -# Be careful to initialize this variable, since it used to be cached. -# Otherwise an old cache value of `no' led to `EXEEXT = no' in a Makefile. -ac_cv_exeext= -# b.out is created by i960 compilers. -for ac_file in a_out.exe a.exe conftest.exe a.out conftest a.* conftest.* b.out -do - test -f "$ac_file" || continue - case $ac_file in - *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.o | *.obj ) - ;; - conftest.$ac_ext ) - # This is the source file. - ;; - [ab].out ) - # We found the default executable, but exeext='' is most - # certainly right. - break;; - *.* ) - ac_cv_exeext=`expr "$ac_file" : '[^.]*\(\..*\)'` - # FIXME: I believe we export ac_cv_exeext for Libtool, - # but it would be cool to find out if it's true. Does anybody - # maintain Libtool? --akim. - export ac_cv_exeext - break;; - * ) - break;; - esac -done -else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - -{ { echo "$as_me:$LINENO: error: C compiler cannot create executables -See \`config.log' for more details." >&5 -echo "$as_me: error: C compiler cannot create executables -See \`config.log' for more details." >&2;} - { (exit 77); exit 77; }; } -fi - -ac_exeext=$ac_cv_exeext -echo "$as_me:$LINENO: result: $ac_file" >&5 -echo "${ECHO_T}$ac_file" >&6 - -# Check the compiler produces executables we can run. If not, either -# the compiler is broken, or we cross compile. -echo "$as_me:$LINENO: checking whether the C compiler works" >&5 -echo $ECHO_N "checking whether the C compiler works... $ECHO_C" >&6 -# FIXME: These cross compiler hacks should be removed for Autoconf 3.0 -# If not cross compiling, check that we can run a simple program. -if test "$cross_compiling" != yes; then - if { ac_try='./$ac_file' - { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; }; then - cross_compiling=no - else - if test "$cross_compiling" = maybe; then - cross_compiling=yes - else - { { echo "$as_me:$LINENO: error: cannot run C compiled programs. -If you meant to cross compile, use \`--host'. -See \`config.log' for more details." >&5 -echo "$as_me: error: cannot run C compiled programs. -If you meant to cross compile, use \`--host'. -See \`config.log' for more details." >&2;} - { (exit 1); exit 1; }; } - fi - fi -fi -echo "$as_me:$LINENO: result: yes" >&5 -echo "${ECHO_T}yes" >&6 - -rm -f a.out a.exe conftest$ac_cv_exeext b.out -ac_clean_files=$ac_clean_files_save -# Check the compiler produces executables we can run. If not, either -# the compiler is broken, or we cross compile. -echo "$as_me:$LINENO: checking whether we are cross compiling" >&5 -echo $ECHO_N "checking whether we are cross compiling... $ECHO_C" >&6 -echo "$as_me:$LINENO: result: $cross_compiling" >&5 -echo "${ECHO_T}$cross_compiling" >&6 - -echo "$as_me:$LINENO: checking for suffix of executables" >&5 -echo $ECHO_N "checking for suffix of executables... $ECHO_C" >&6 -if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 - (eval $ac_link) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; 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 | *.o | *.obj ) ;; - *.* ) ac_cv_exeext=`expr "$ac_file" : '[^.]*\(\..*\)'` - export ac_cv_exeext - break;; - * ) break;; - esac -done -else - { { echo "$as_me:$LINENO: error: cannot compute suffix of executables: cannot compile and link -See \`config.log' for more details." >&5 -echo "$as_me: error: cannot compute suffix of executables: cannot compile and link -See \`config.log' for more details." >&2;} - { (exit 1); exit 1; }; } -fi - -rm -f conftest$ac_cv_exeext -echo "$as_me:$LINENO: result: $ac_cv_exeext" >&5 -echo "${ECHO_T}$ac_cv_exeext" >&6 - -rm -f conftest.$ac_ext -EXEEXT=$ac_cv_exeext -ac_exeext=$EXEEXT -echo "$as_me:$LINENO: checking for suffix of object files" >&5 -echo $ECHO_N "checking for suffix of object files... $ECHO_C" >&6 -if test "${ac_cv_objext+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 -else - cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF -/* end confdefs.h. */ - -int -main () -{ - - ; - return 0; -} -_ACEOF -rm -f conftest.o conftest.obj -if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 - (eval $ac_compile) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; then - for ac_file in `(ls conftest.o conftest.obj; ls conftest.*) 2>/dev/null`; do - case $ac_file in - *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg ) ;; - *) ac_cv_objext=`expr "$ac_file" : '.*\.\(.*\)'` - break;; - esac -done -else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - -{ { echo "$as_me:$LINENO: error: cannot compute suffix of object files: cannot compile -See \`config.log' for more details." >&5 -echo "$as_me: error: cannot compute suffix of object files: cannot compile -See \`config.log' for more details." >&2;} - { (exit 1); exit 1; }; } -fi - -rm -f conftest.$ac_cv_objext conftest.$ac_ext -fi -echo "$as_me:$LINENO: result: $ac_cv_objext" >&5 -echo "${ECHO_T}$ac_cv_objext" >&6 -OBJEXT=$ac_cv_objext -ac_objext=$OBJEXT -echo "$as_me:$LINENO: checking whether we are using the GNU C compiler" >&5 -echo $ECHO_N "checking whether we are using the GNU C compiler... $ECHO_C" >&6 -if test "${ac_cv_c_compiler_gnu+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 -else - cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF -/* end confdefs.h. */ - -int -main () -{ -#ifndef __GNUC__ - choke me -#endif - - ; - return 0; -} -_ACEOF -rm -f conftest.$ac_objext -if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 - (eval $ac_compile) 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && - { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err' - { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; } && - { ac_try='test -s conftest.$ac_objext' - { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; }; then - ac_compiler_gnu=yes -else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - -ac_compiler_gnu=no -fi -rm -f conftest.err conftest.$ac_objext conftest.$ac_ext -ac_cv_c_compiler_gnu=$ac_compiler_gnu - -fi -echo "$as_me:$LINENO: result: $ac_cv_c_compiler_gnu" >&5 -echo "${ECHO_T}$ac_cv_c_compiler_gnu" >&6 -GCC=`test $ac_compiler_gnu = yes && echo yes` -ac_test_CFLAGS=${CFLAGS+set} -ac_save_CFLAGS=$CFLAGS -CFLAGS="-g" -echo "$as_me:$LINENO: checking whether $CC accepts -g" >&5 -echo $ECHO_N "checking whether $CC accepts -g... $ECHO_C" >&6 -if test "${ac_cv_prog_cc_g+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 -else - cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF -/* end confdefs.h. */ - -int -main () -{ - - ; - return 0; -} -_ACEOF -rm -f conftest.$ac_objext -if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 - (eval $ac_compile) 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && - { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err' - { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; } && - { ac_try='test -s conftest.$ac_objext' - { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; }; then - ac_cv_prog_cc_g=yes -else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - -ac_cv_prog_cc_g=no -fi -rm -f conftest.err conftest.$ac_objext conftest.$ac_ext -fi -echo "$as_me:$LINENO: result: $ac_cv_prog_cc_g" >&5 -echo "${ECHO_T}$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 -echo "$as_me:$LINENO: checking for $CC option to accept ANSI C" >&5 -echo $ECHO_N "checking for $CC option to accept ANSI C... $ECHO_C" >&6 -if test "${ac_cv_prog_cc_stdc+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 -else - ac_cv_prog_cc_stdc=no -ac_save_CC=$CC -cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF -/* end confdefs.h. */ -#include -#include -#include -#include -/* 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 -std1 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 -std1. */ -int osf4_cc_array ['\x00' == 0 ? 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 -# Don't try gcc -ansi; that turns off useful extensions and -# breaks some systems' header files. -# AIX -qlanglvl=ansi -# Ultrix and OSF/1 -std1 -# HP-UX 10.20 and later -Ae -# HP-UX older versions -Aa -D_HPUX_SOURCE -# SVR4 -Xc -D__EXTENSIONS__ -for ac_arg in "" -qlanglvl=ansi -std1 -Ae "-Aa -D_HPUX_SOURCE" "-Xc -D__EXTENSIONS__" -do - CC="$ac_save_CC $ac_arg" - rm -f conftest.$ac_objext -if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 - (eval $ac_compile) 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && - { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err' - { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; } && - { ac_try='test -s conftest.$ac_objext' - { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; }; then - ac_cv_prog_cc_stdc=$ac_arg -break -else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - -fi -rm -f conftest.err conftest.$ac_objext -done -rm -f conftest.$ac_ext conftest.$ac_objext -CC=$ac_save_CC - -fi - -case "x$ac_cv_prog_cc_stdc" in - x|xno) - echo "$as_me:$LINENO: result: none needed" >&5 -echo "${ECHO_T}none needed" >&6 ;; - *) - echo "$as_me:$LINENO: result: $ac_cv_prog_cc_stdc" >&5 -echo "${ECHO_T}$ac_cv_prog_cc_stdc" >&6 - CC="$CC $ac_cv_prog_cc_stdc" ;; -esac - -# Some people use a C++ compiler to compile C. Since we use `exit', -# in C++ we need to declare it. In case someone uses the same compiler -# for both compiling C and C++ we need to have the C++ compiler decide -# the declaration of exit, since it's the most demanding environment. -cat >conftest.$ac_ext <<_ACEOF -#ifndef __cplusplus - choke me -#endif -_ACEOF -rm -f conftest.$ac_objext -if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 - (eval $ac_compile) 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && - { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err' - { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; } && - { ac_try='test -s conftest.$ac_objext' - { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; }; then - for ac_declaration in \ - '' \ - 'extern "C" void std::exit (int) throw (); using std::exit;' \ - 'extern "C" void std::exit (int); using std::exit;' \ - 'extern "C" void exit (int) throw ();' \ - 'extern "C" void exit (int);' \ - 'void exit (int);' -do - cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF -/* end confdefs.h. */ -$ac_declaration -#include -int -main () -{ -exit (42); - ; - return 0; -} -_ACEOF -rm -f conftest.$ac_objext -if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 - (eval $ac_compile) 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && - { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err' - { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; } && - { ac_try='test -s conftest.$ac_objext' - { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; }; then - : -else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - -continue -fi -rm -f conftest.err conftest.$ac_objext conftest.$ac_ext - cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF -/* end confdefs.h. */ -$ac_declaration -int -main () -{ -exit (42); - ; - return 0; -} -_ACEOF -rm -f conftest.$ac_objext -if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 - (eval $ac_compile) 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && - { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err' - { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; } && - { ac_try='test -s conftest.$ac_objext' - { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; }; then - break -else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - -fi -rm -f conftest.err conftest.$ac_objext conftest.$ac_ext -done -rm -f conftest* -if test -n "$ac_declaration"; then - echo '#ifdef __cplusplus' >>confdefs.h - echo $ac_declaration >>confdefs.h - echo '#endif' >>confdefs.h -fi - -else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - -fi -rm -f conftest.err conftest.$ac_objext conftest.$ac_ext -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 "$GCC" = "yes"; then - CFLAGS="${CFLAGS} -Wall" -fi -ac_aux_dir= -for ac_dir in $srcdir $srcdir/.. $srcdir/../..; do - if test -f $ac_dir/install-sh; then - ac_aux_dir=$ac_dir - ac_install_sh="$ac_aux_dir/install-sh -c" - break - elif test -f $ac_dir/install.sh; then - ac_aux_dir=$ac_dir - ac_install_sh="$ac_aux_dir/install.sh -c" - break - elif test -f $ac_dir/shtool; then - ac_aux_dir=$ac_dir - ac_install_sh="$ac_aux_dir/shtool install -c" - break - fi -done -if test -z "$ac_aux_dir"; then - { { echo "$as_me:$LINENO: error: cannot find install-sh or install.sh in $srcdir $srcdir/.. $srcdir/../.." >&5 -echo "$as_me: error: cannot find install-sh or install.sh in $srcdir $srcdir/.. $srcdir/../.." >&2;} - { (exit 1); exit 1; }; } -fi -ac_config_guess="$SHELL $ac_aux_dir/config.guess" -ac_config_sub="$SHELL $ac_aux_dir/config.sub" -ac_configure="$SHELL $ac_aux_dir/configure" # This should be Cygnus configure. - -# Find a good install program. We prefer a C program (faster), -# so one script is as good as another. But avoid the broken or -# incompatible versions: -# SysV /etc/install, /usr/sbin/install -# SunOS /usr/etc/install -# IRIX /sbin/install -# AIX /bin/install -# AmigaOS /C/install, which installs bootblocks on floppy discs -# AIX 4 /usr/bin/installbsd, which doesn't work without a -g flag -# AFS /usr/afsws/bin/install, which mishandles nonexistent args -# SVR4 /usr/ucb/install, which tries to use the nonexistent group "staff" -# OS/2's system install, which has a completely different semantic -# ./install, which can be erroneously created by make from ./install.sh. -echo "$as_me:$LINENO: checking for a BSD-compatible install" >&5 -echo $ECHO_N "checking for a BSD-compatible install... $ECHO_C" >&6 -if test -z "$INSTALL"; then -if test "${ac_cv_path_install+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 -else - as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - # Account for people who put trailing slashes in PATH elements. -case $as_dir/ in - ./ | .// | /cC/* | \ - /etc/* | /usr/sbin/* | /usr/etc/* | /sbin/* | /usr/afsws/bin/* | \ - ?:\\/os2\\/install\\/* | ?:\\/OS2\\/INSTALL\\/* | \ - /usr/ucb/* ) ;; - *) - # OSF1 and SCO ODT 3.0 have their own names for install. - # Don't use installbsd from OSF since it installs stuff as root - # by default. - for ac_prog in ginstall scoinst install; do - for ac_exec_ext in '' $ac_executable_extensions; do - if $as_executable_p "$as_dir/$ac_prog$ac_exec_ext"; then - if test $ac_prog = install && - grep dspmsg "$as_dir/$ac_prog$ac_exec_ext" >/dev/null 2>&1; then - # AIX install. It has an incompatible calling convention. - : - elif test $ac_prog = install && - grep pwplus "$as_dir/$ac_prog$ac_exec_ext" >/dev/null 2>&1; then - # program-specific install script used by HP pwplus--don't use. - : - else - ac_cv_path_install="$as_dir/$ac_prog$ac_exec_ext -c" - break 3 - fi - fi - done - done - ;; -esac -done - - -fi - if test "${ac_cv_path_install+set}" = set; then - INSTALL=$ac_cv_path_install - else - # As a last resort, use the slow shell script. We don't cache a - # path for INSTALL within a source directory, because that will - # break other packages using the cache if that directory is - # removed, or if the path is relative. - INSTALL=$ac_install_sh - fi -fi -echo "$as_me:$LINENO: result: $INSTALL" >&5 -echo "${ECHO_T}$INSTALL" >&6 - -# Use test -z because SunOS4 sh mishandles braces in ${var-val}. -# It thinks the first close brace ends the variable substitution. -test -z "$INSTALL_PROGRAM" && INSTALL_PROGRAM='${INSTALL}' - -test -z "$INSTALL_SCRIPT" && INSTALL_SCRIPT='${INSTALL}' - -test -z "$INSTALL_DATA" && INSTALL_DATA='${INSTALL} -m 644' - - - - -echo "$as_me:$LINENO: checking for res_query in -lresolv" >&5 -echo $ECHO_N "checking for res_query in -lresolv... $ECHO_C" >&6 -if test "${ac_cv_lib_resolv_res_query+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 -else - ac_check_lib_save_LIBS=$LIBS -LIBS="-lresolv $LIBS" -cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF -/* end confdefs.h. */ - -/* Override any gcc2 internal prototype to avoid an error. */ -#ifdef __cplusplus -extern "C" -#endif -/* We use char because int might match the return type of a gcc2 - builtin and then its argument prototype would still apply. */ -char res_query (); -int -main () -{ -res_query (); - ; - return 0; -} -_ACEOF -rm -f conftest.$ac_objext conftest$ac_exeext -if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 - (eval $ac_link) 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && - { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err' - { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; } && - { ac_try='test -s conftest$ac_exeext' - { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; }; then - ac_cv_lib_resolv_res_query=yes -else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - -ac_cv_lib_resolv_res_query=no -fi -rm -f conftest.err conftest.$ac_objext \ - conftest$ac_exeext conftest.$ac_ext -LIBS=$ac_check_lib_save_LIBS -fi -echo "$as_me:$LINENO: result: $ac_cv_lib_resolv_res_query" >&5 -echo "${ECHO_T}$ac_cv_lib_resolv_res_query" >&6 -if test $ac_cv_lib_resolv_res_query = yes; then - cat >>confdefs.h <<_ACEOF -#define HAVE_LIBRESOLV 1 -_ACEOF - - LIBS="-lresolv $LIBS" - -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 -echo "$as_me:$LINENO: checking how to run the C preprocessor" >&5 -echo $ECHO_N "checking how to run the C preprocessor... $ECHO_C" >&6 -# On Suns, sometimes $CPP names a directory. -if test -n "$CPP" && test -d "$CPP"; then - CPP= -fi -if test -z "$CPP"; then - if test "${ac_cv_prog_CPP+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&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 >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF -/* end confdefs.h. */ -#ifdef __STDC__ -# include -#else -# include -#endif - Syntax error -_ACEOF -if { (eval echo "$as_me:$LINENO: \"$ac_cpp conftest.$ac_ext\"") >&5 - (eval $ac_cpp conftest.$ac_ext) 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } >/dev/null; then - if test -s conftest.err; then - ac_cpp_err=$ac_c_preproc_warn_flag - ac_cpp_err=$ac_cpp_err$ac_c_werror_flag - else - ac_cpp_err= - fi -else - ac_cpp_err=yes -fi -if test -z "$ac_cpp_err"; then - : -else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - - # Broken: fails on valid input. -continue -fi -rm -f conftest.err conftest.$ac_ext - - # OK, works on sane cases. Now check whether non-existent headers - # can be detected and how. - cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF -/* end confdefs.h. */ -#include -_ACEOF -if { (eval echo "$as_me:$LINENO: \"$ac_cpp conftest.$ac_ext\"") >&5 - (eval $ac_cpp conftest.$ac_ext) 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } >/dev/null; then - if test -s conftest.err; then - ac_cpp_err=$ac_c_preproc_warn_flag - ac_cpp_err=$ac_cpp_err$ac_c_werror_flag - else - ac_cpp_err= - fi -else - ac_cpp_err=yes -fi -if test -z "$ac_cpp_err"; then - # Broken: success on invalid input. -continue -else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - - # Passes both tests. -ac_preproc_ok=: -break -fi -rm -f conftest.err conftest.$ac_ext - -done -# Because of `break', _AC_PREPROC_IFELSE's cleaning code was skipped. -rm -f 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 -echo "$as_me:$LINENO: result: $CPP" >&5 -echo "${ECHO_T}$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 >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF -/* end confdefs.h. */ -#ifdef __STDC__ -# include -#else -# include -#endif - Syntax error -_ACEOF -if { (eval echo "$as_me:$LINENO: \"$ac_cpp conftest.$ac_ext\"") >&5 - (eval $ac_cpp conftest.$ac_ext) 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } >/dev/null; then - if test -s conftest.err; then - ac_cpp_err=$ac_c_preproc_warn_flag - ac_cpp_err=$ac_cpp_err$ac_c_werror_flag - else - ac_cpp_err= - fi -else - ac_cpp_err=yes -fi -if test -z "$ac_cpp_err"; then - : -else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - - # Broken: fails on valid input. -continue -fi -rm -f conftest.err conftest.$ac_ext - - # OK, works on sane cases. Now check whether non-existent headers - # can be detected and how. - cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF -/* end confdefs.h. */ -#include -_ACEOF -if { (eval echo "$as_me:$LINENO: \"$ac_cpp conftest.$ac_ext\"") >&5 - (eval $ac_cpp conftest.$ac_ext) 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } >/dev/null; then - if test -s conftest.err; then - ac_cpp_err=$ac_c_preproc_warn_flag - ac_cpp_err=$ac_cpp_err$ac_c_werror_flag - else - ac_cpp_err= - fi -else - ac_cpp_err=yes -fi -if test -z "$ac_cpp_err"; then - # Broken: success on invalid input. -continue -else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - - # Passes both tests. -ac_preproc_ok=: -break -fi -rm -f conftest.err conftest.$ac_ext - -done -# Because of `break', _AC_PREPROC_IFELSE's cleaning code was skipped. -rm -f conftest.err conftest.$ac_ext -if $ac_preproc_ok; then - : -else - { { echo "$as_me:$LINENO: error: C preprocessor \"$CPP\" fails sanity check -See \`config.log' for more details." >&5 -echo "$as_me: error: C preprocessor \"$CPP\" fails sanity check -See \`config.log' for more details." >&2;} - { (exit 1); exit 1; }; } -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 - - -echo "$as_me:$LINENO: checking for egrep" >&5 -echo $ECHO_N "checking for egrep... $ECHO_C" >&6 -if test "${ac_cv_prog_egrep+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 -else - if echo a | (grep -E '(a|b)') >/dev/null 2>&1 - then ac_cv_prog_egrep='grep -E' - else ac_cv_prog_egrep='egrep' - fi -fi -echo "$as_me:$LINENO: result: $ac_cv_prog_egrep" >&5 -echo "${ECHO_T}$ac_cv_prog_egrep" >&6 - EGREP=$ac_cv_prog_egrep - - -echo "$as_me:$LINENO: checking for ANSI C header files" >&5 -echo $ECHO_N "checking for ANSI C header files... $ECHO_C" >&6 -if test "${ac_cv_header_stdc+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 -else - cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF -/* end confdefs.h. */ -#include -#include -#include -#include - -int -main () -{ - - ; - return 0; -} -_ACEOF -rm -f conftest.$ac_objext -if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 - (eval $ac_compile) 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && - { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err' - { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; } && - { ac_try='test -s conftest.$ac_objext' - { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; }; then - ac_cv_header_stdc=yes -else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - -ac_cv_header_stdc=no -fi -rm -f 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 >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF -/* 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 >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF -/* 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 >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF -/* end confdefs.h. */ -#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)) - exit(2); - exit (0); -} -_ACEOF -rm -f conftest$ac_exeext -if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 - (eval $ac_link) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && { ac_try='./conftest$ac_exeext' - { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; }; then - : -else - echo "$as_me: program exited with status $ac_status" >&5 -echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - -( exit $ac_status ) -ac_cv_header_stdc=no -fi -rm -f core *.core gmon.out bb.out conftest$ac_exeext conftest.$ac_objext conftest.$ac_ext -fi -fi -fi -echo "$as_me:$LINENO: result: $ac_cv_header_stdc" >&5 -echo "${ECHO_T}$ac_cv_header_stdc" >&6 -if test $ac_cv_header_stdc = yes; then - -cat >>confdefs.h <<\_ACEOF -#define STDC_HEADERS 1 -_ACEOF - -fi - - ac_config_headers="$ac_config_headers config.h" - -# 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=`echo "ac_cv_header_$ac_header" | $as_tr_sh` -echo "$as_me:$LINENO: checking for $ac_header" >&5 -echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6 -if eval "test \"\${$as_ac_Header+set}\" = set"; then - echo $ECHO_N "(cached) $ECHO_C" >&6 -else - cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF -/* end confdefs.h. */ -$ac_includes_default - -#include <$ac_header> -_ACEOF -rm -f conftest.$ac_objext -if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 - (eval $ac_compile) 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && - { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err' - { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; } && - { ac_try='test -s conftest.$ac_objext' - { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; }; then - eval "$as_ac_Header=yes" -else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - -eval "$as_ac_Header=no" -fi -rm -f conftest.err conftest.$ac_objext conftest.$ac_ext -fi -echo "$as_me:$LINENO: result: `eval echo '${'$as_ac_Header'}'`" >&5 -echo "${ECHO_T}`eval echo '${'$as_ac_Header'}'`" >&6 -if test `eval echo '${'$as_ac_Header'}'` = yes; then - cat >>confdefs.h <<_ACEOF -#define `echo "HAVE_$ac_header" | $as_tr_cpp` 1 -_ACEOF - -fi - -done - - -if test "${ac_cv_header_resolv_h+set}" = set; then - echo "$as_me:$LINENO: checking for resolv.h" >&5 -echo $ECHO_N "checking for resolv.h... $ECHO_C" >&6 -if test "${ac_cv_header_resolv_h+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 -fi -echo "$as_me:$LINENO: result: $ac_cv_header_resolv_h" >&5 -echo "${ECHO_T}$ac_cv_header_resolv_h" >&6 -else - # Is the header compilable? -echo "$as_me:$LINENO: checking resolv.h usability" >&5 -echo $ECHO_N "checking resolv.h usability... $ECHO_C" >&6 -cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF -/* end confdefs.h. */ -$ac_includes_default -#include -_ACEOF -rm -f conftest.$ac_objext -if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 - (eval $ac_compile) 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && - { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err' - { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; } && - { ac_try='test -s conftest.$ac_objext' - { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; }; then - ac_header_compiler=yes -else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - -ac_header_compiler=no -fi -rm -f conftest.err conftest.$ac_objext conftest.$ac_ext -echo "$as_me:$LINENO: result: $ac_header_compiler" >&5 -echo "${ECHO_T}$ac_header_compiler" >&6 - -# Is the header present? -echo "$as_me:$LINENO: checking resolv.h presence" >&5 -echo $ECHO_N "checking resolv.h presence... $ECHO_C" >&6 -cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF -/* end confdefs.h. */ -#include -_ACEOF -if { (eval echo "$as_me:$LINENO: \"$ac_cpp conftest.$ac_ext\"") >&5 - (eval $ac_cpp conftest.$ac_ext) 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } >/dev/null; then - if test -s conftest.err; then - ac_cpp_err=$ac_c_preproc_warn_flag - ac_cpp_err=$ac_cpp_err$ac_c_werror_flag - else - ac_cpp_err= - fi -else - ac_cpp_err=yes -fi -if test -z "$ac_cpp_err"; then - ac_header_preproc=yes -else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - - ac_header_preproc=no -fi -rm -f conftest.err conftest.$ac_ext -echo "$as_me:$LINENO: result: $ac_header_preproc" >&5 -echo "${ECHO_T}$ac_header_preproc" >&6 - -# So? What about this header? -case $ac_header_compiler:$ac_header_preproc:$ac_c_preproc_warn_flag in - yes:no: ) - { echo "$as_me:$LINENO: WARNING: resolv.h: accepted by the compiler, rejected by the preprocessor!" >&5 -echo "$as_me: WARNING: resolv.h: accepted by the compiler, rejected by the preprocessor!" >&2;} - { echo "$as_me:$LINENO: WARNING: resolv.h: proceeding with the compiler's result" >&5 -echo "$as_me: WARNING: resolv.h: proceeding with the compiler's result" >&2;} - ac_header_preproc=yes - ;; - no:yes:* ) - { echo "$as_me:$LINENO: WARNING: resolv.h: present but cannot be compiled" >&5 -echo "$as_me: WARNING: resolv.h: present but cannot be compiled" >&2;} - { echo "$as_me:$LINENO: WARNING: resolv.h: check for missing prerequisite headers?" >&5 -echo "$as_me: WARNING: resolv.h: check for missing prerequisite headers?" >&2;} - { echo "$as_me:$LINENO: WARNING: resolv.h: see the Autoconf documentation" >&5 -echo "$as_me: WARNING: resolv.h: see the Autoconf documentation" >&2;} - { echo "$as_me:$LINENO: WARNING: resolv.h: section \"Present But Cannot Be Compiled\"" >&5 -echo "$as_me: WARNING: resolv.h: section \"Present But Cannot Be Compiled\"" >&2;} - { echo "$as_me:$LINENO: WARNING: resolv.h: proceeding with the preprocessor's result" >&5 -echo "$as_me: WARNING: resolv.h: proceeding with the preprocessor's result" >&2;} - { echo "$as_me:$LINENO: WARNING: resolv.h: in the future, the compiler will take precedence" >&5 -echo "$as_me: WARNING: resolv.h: in the future, the compiler will take precedence" >&2;} - ( - cat <<\_ASBOX -## ------------------------------------------ ## -## Report this to the AC_PACKAGE_NAME lists. ## -## ------------------------------------------ ## -_ASBOX - ) | - sed "s/^/$as_me: WARNING: /" >&2 - ;; -esac -echo "$as_me:$LINENO: checking for resolv.h" >&5 -echo $ECHO_N "checking for resolv.h... $ECHO_C" >&6 -if test "${ac_cv_header_resolv_h+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 -else - ac_cv_header_resolv_h=$ac_header_preproc -fi -echo "$as_me:$LINENO: result: $ac_cv_header_resolv_h" >&5 -echo "${ECHO_T}$ac_cv_header_resolv_h" >&6 - -fi -if test $ac_cv_header_resolv_h = yes; then - : -else - { { echo "$as_me:$LINENO: error: \"No headers for name service applications\"" >&5 -echo "$as_me: error: \"No headers for name service applications\"" >&2;} - { (exit 1); exit 1; }; } -fi - - -if test "${ac_cv_header_arpa_nameser_h+set}" = set; then - echo "$as_me:$LINENO: checking for arpa/nameser.h" >&5 -echo $ECHO_N "checking for arpa/nameser.h... $ECHO_C" >&6 -if test "${ac_cv_header_arpa_nameser_h+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 -fi -echo "$as_me:$LINENO: result: $ac_cv_header_arpa_nameser_h" >&5 -echo "${ECHO_T}$ac_cv_header_arpa_nameser_h" >&6 -else - # Is the header compilable? -echo "$as_me:$LINENO: checking arpa/nameser.h usability" >&5 -echo $ECHO_N "checking arpa/nameser.h usability... $ECHO_C" >&6 -cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF -/* end confdefs.h. */ -$ac_includes_default -#include -_ACEOF -rm -f conftest.$ac_objext -if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 - (eval $ac_compile) 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && - { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err' - { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; } && - { ac_try='test -s conftest.$ac_objext' - { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; }; then - ac_header_compiler=yes -else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - -ac_header_compiler=no -fi -rm -f conftest.err conftest.$ac_objext conftest.$ac_ext -echo "$as_me:$LINENO: result: $ac_header_compiler" >&5 -echo "${ECHO_T}$ac_header_compiler" >&6 - -# Is the header present? -echo "$as_me:$LINENO: checking arpa/nameser.h presence" >&5 -echo $ECHO_N "checking arpa/nameser.h presence... $ECHO_C" >&6 -cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF -/* end confdefs.h. */ -#include -_ACEOF -if { (eval echo "$as_me:$LINENO: \"$ac_cpp conftest.$ac_ext\"") >&5 - (eval $ac_cpp conftest.$ac_ext) 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } >/dev/null; then - if test -s conftest.err; then - ac_cpp_err=$ac_c_preproc_warn_flag - ac_cpp_err=$ac_cpp_err$ac_c_werror_flag - else - ac_cpp_err= - fi -else - ac_cpp_err=yes -fi -if test -z "$ac_cpp_err"; then - ac_header_preproc=yes -else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - - ac_header_preproc=no -fi -rm -f conftest.err conftest.$ac_ext -echo "$as_me:$LINENO: result: $ac_header_preproc" >&5 -echo "${ECHO_T}$ac_header_preproc" >&6 - -# So? What about this header? -case $ac_header_compiler:$ac_header_preproc:$ac_c_preproc_warn_flag in - yes:no: ) - { echo "$as_me:$LINENO: WARNING: arpa/nameser.h: accepted by the compiler, rejected by the preprocessor!" >&5 -echo "$as_me: WARNING: arpa/nameser.h: accepted by the compiler, rejected by the preprocessor!" >&2;} - { echo "$as_me:$LINENO: WARNING: arpa/nameser.h: proceeding with the compiler's result" >&5 -echo "$as_me: WARNING: arpa/nameser.h: proceeding with the compiler's result" >&2;} - ac_header_preproc=yes - ;; - no:yes:* ) - { echo "$as_me:$LINENO: WARNING: arpa/nameser.h: present but cannot be compiled" >&5 -echo "$as_me: WARNING: arpa/nameser.h: present but cannot be compiled" >&2;} - { echo "$as_me:$LINENO: WARNING: arpa/nameser.h: check for missing prerequisite headers?" >&5 -echo "$as_me: WARNING: arpa/nameser.h: check for missing prerequisite headers?" >&2;} - { echo "$as_me:$LINENO: WARNING: arpa/nameser.h: see the Autoconf documentation" >&5 -echo "$as_me: WARNING: arpa/nameser.h: see the Autoconf documentation" >&2;} - { echo "$as_me:$LINENO: WARNING: arpa/nameser.h: section \"Present But Cannot Be Compiled\"" >&5 -echo "$as_me: WARNING: arpa/nameser.h: section \"Present But Cannot Be Compiled\"" >&2;} - { echo "$as_me:$LINENO: WARNING: arpa/nameser.h: proceeding with the preprocessor's result" >&5 -echo "$as_me: WARNING: arpa/nameser.h: proceeding with the preprocessor's result" >&2;} - { echo "$as_me:$LINENO: WARNING: arpa/nameser.h: in the future, the compiler will take precedence" >&5 -echo "$as_me: WARNING: arpa/nameser.h: in the future, the compiler will take precedence" >&2;} - ( - cat <<\_ASBOX -## ------------------------------------------ ## -## Report this to the AC_PACKAGE_NAME lists. ## -## ------------------------------------------ ## -_ASBOX - ) | - sed "s/^/$as_me: WARNING: /" >&2 - ;; -esac -echo "$as_me:$LINENO: checking for arpa/nameser.h" >&5 -echo $ECHO_N "checking for arpa/nameser.h... $ECHO_C" >&6 -if test "${ac_cv_header_arpa_nameser_h+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 -else - ac_cv_header_arpa_nameser_h=$ac_header_preproc -fi -echo "$as_me:$LINENO: result: $ac_cv_header_arpa_nameser_h" >&5 -echo "${ECHO_T}$ac_cv_header_arpa_nameser_h" >&6 - -fi -if test $ac_cv_header_arpa_nameser_h = yes; then - : -else - { { echo "$as_me:$LINENO: error: \"No headers for name service applications\"" >&5 -echo "$as_me: error: \"No headers for name service applications\"" >&2;} - { (exit 1); exit 1; }; } -fi - - -if test "${ac_cv_header_sys_time_h+set}" = set; then - echo "$as_me:$LINENO: checking for sys/time.h" >&5 -echo $ECHO_N "checking for sys/time.h... $ECHO_C" >&6 -if test "${ac_cv_header_sys_time_h+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 -fi -echo "$as_me:$LINENO: result: $ac_cv_header_sys_time_h" >&5 -echo "${ECHO_T}$ac_cv_header_sys_time_h" >&6 -else - # Is the header compilable? -echo "$as_me:$LINENO: checking sys/time.h usability" >&5 -echo $ECHO_N "checking sys/time.h usability... $ECHO_C" >&6 -cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF -/* end confdefs.h. */ -$ac_includes_default -#include -_ACEOF -rm -f conftest.$ac_objext -if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 - (eval $ac_compile) 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && - { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err' - { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; } && - { ac_try='test -s conftest.$ac_objext' - { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; }; then - ac_header_compiler=yes -else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - -ac_header_compiler=no -fi -rm -f conftest.err conftest.$ac_objext conftest.$ac_ext -echo "$as_me:$LINENO: result: $ac_header_compiler" >&5 -echo "${ECHO_T}$ac_header_compiler" >&6 - -# Is the header present? -echo "$as_me:$LINENO: checking sys/time.h presence" >&5 -echo $ECHO_N "checking sys/time.h presence... $ECHO_C" >&6 -cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF -/* end confdefs.h. */ -#include -_ACEOF -if { (eval echo "$as_me:$LINENO: \"$ac_cpp conftest.$ac_ext\"") >&5 - (eval $ac_cpp conftest.$ac_ext) 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } >/dev/null; then - if test -s conftest.err; then - ac_cpp_err=$ac_c_preproc_warn_flag - ac_cpp_err=$ac_cpp_err$ac_c_werror_flag - else - ac_cpp_err= - fi -else - ac_cpp_err=yes -fi -if test -z "$ac_cpp_err"; then - ac_header_preproc=yes -else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - - ac_header_preproc=no -fi -rm -f conftest.err conftest.$ac_ext -echo "$as_me:$LINENO: result: $ac_header_preproc" >&5 -echo "${ECHO_T}$ac_header_preproc" >&6 - -# So? What about this header? -case $ac_header_compiler:$ac_header_preproc:$ac_c_preproc_warn_flag in - yes:no: ) - { echo "$as_me:$LINENO: WARNING: sys/time.h: accepted by the compiler, rejected by the preprocessor!" >&5 -echo "$as_me: WARNING: sys/time.h: accepted by the compiler, rejected by the preprocessor!" >&2;} - { echo "$as_me:$LINENO: WARNING: sys/time.h: proceeding with the compiler's result" >&5 -echo "$as_me: WARNING: sys/time.h: proceeding with the compiler's result" >&2;} - ac_header_preproc=yes - ;; - no:yes:* ) - { echo "$as_me:$LINENO: WARNING: sys/time.h: present but cannot be compiled" >&5 -echo "$as_me: WARNING: sys/time.h: present but cannot be compiled" >&2;} - { echo "$as_me:$LINENO: WARNING: sys/time.h: check for missing prerequisite headers?" >&5 -echo "$as_me: WARNING: sys/time.h: check for missing prerequisite headers?" >&2;} - { echo "$as_me:$LINENO: WARNING: sys/time.h: see the Autoconf documentation" >&5 -echo "$as_me: WARNING: sys/time.h: see the Autoconf documentation" >&2;} - { echo "$as_me:$LINENO: WARNING: sys/time.h: section \"Present But Cannot Be Compiled\"" >&5 -echo "$as_me: WARNING: sys/time.h: section \"Present But Cannot Be Compiled\"" >&2;} - { echo "$as_me:$LINENO: WARNING: sys/time.h: proceeding with the preprocessor's result" >&5 -echo "$as_me: WARNING: sys/time.h: proceeding with the preprocessor's result" >&2;} - { echo "$as_me:$LINENO: WARNING: sys/time.h: in the future, the compiler will take precedence" >&5 -echo "$as_me: WARNING: sys/time.h: in the future, the compiler will take precedence" >&2;} - ( - cat <<\_ASBOX -## ------------------------------------------ ## -## Report this to the AC_PACKAGE_NAME lists. ## -## ------------------------------------------ ## -_ASBOX - ) | - sed "s/^/$as_me: WARNING: /" >&2 - ;; -esac -echo "$as_me:$LINENO: checking for sys/time.h" >&5 -echo $ECHO_N "checking for sys/time.h... $ECHO_C" >&6 -if test "${ac_cv_header_sys_time_h+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 -else - ac_cv_header_sys_time_h=$ac_header_preproc -fi -echo "$as_me:$LINENO: result: $ac_cv_header_sys_time_h" >&5 -echo "${ECHO_T}$ac_cv_header_sys_time_h" >&6 - -fi -if test $ac_cv_header_sys_time_h = yes; then - : -else - { { echo "$as_me:$LINENO: error: \"Mandatory header missing on your system\"" >&5 -echo "$as_me: error: \"Mandatory header missing on your system\"" >&2;} - { (exit 1); exit 1; }; } -fi - - -if test "${ac_cv_header_unistd_h+set}" = set; then - echo "$as_me:$LINENO: checking for unistd.h" >&5 -echo $ECHO_N "checking for unistd.h... $ECHO_C" >&6 -if test "${ac_cv_header_unistd_h+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 -fi -echo "$as_me:$LINENO: result: $ac_cv_header_unistd_h" >&5 -echo "${ECHO_T}$ac_cv_header_unistd_h" >&6 -else - # Is the header compilable? -echo "$as_me:$LINENO: checking unistd.h usability" >&5 -echo $ECHO_N "checking unistd.h usability... $ECHO_C" >&6 -cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF -/* end confdefs.h. */ -$ac_includes_default -#include -_ACEOF -rm -f conftest.$ac_objext -if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 - (eval $ac_compile) 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && - { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err' - { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; } && - { ac_try='test -s conftest.$ac_objext' - { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; }; then - ac_header_compiler=yes -else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - -ac_header_compiler=no -fi -rm -f conftest.err conftest.$ac_objext conftest.$ac_ext -echo "$as_me:$LINENO: result: $ac_header_compiler" >&5 -echo "${ECHO_T}$ac_header_compiler" >&6 - -# Is the header present? -echo "$as_me:$LINENO: checking unistd.h presence" >&5 -echo $ECHO_N "checking unistd.h presence... $ECHO_C" >&6 -cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF -/* end confdefs.h. */ -#include -_ACEOF -if { (eval echo "$as_me:$LINENO: \"$ac_cpp conftest.$ac_ext\"") >&5 - (eval $ac_cpp conftest.$ac_ext) 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } >/dev/null; then - if test -s conftest.err; then - ac_cpp_err=$ac_c_preproc_warn_flag - ac_cpp_err=$ac_cpp_err$ac_c_werror_flag - else - ac_cpp_err= - fi -else - ac_cpp_err=yes -fi -if test -z "$ac_cpp_err"; then - ac_header_preproc=yes -else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - - ac_header_preproc=no -fi -rm -f conftest.err conftest.$ac_ext -echo "$as_me:$LINENO: result: $ac_header_preproc" >&5 -echo "${ECHO_T}$ac_header_preproc" >&6 - -# So? What about this header? -case $ac_header_compiler:$ac_header_preproc:$ac_c_preproc_warn_flag in - yes:no: ) - { echo "$as_me:$LINENO: WARNING: unistd.h: accepted by the compiler, rejected by the preprocessor!" >&5 -echo "$as_me: WARNING: unistd.h: accepted by the compiler, rejected by the preprocessor!" >&2;} - { echo "$as_me:$LINENO: WARNING: unistd.h: proceeding with the compiler's result" >&5 -echo "$as_me: WARNING: unistd.h: proceeding with the compiler's result" >&2;} - ac_header_preproc=yes - ;; - no:yes:* ) - { echo "$as_me:$LINENO: WARNING: unistd.h: present but cannot be compiled" >&5 -echo "$as_me: WARNING: unistd.h: present but cannot be compiled" >&2;} - { echo "$as_me:$LINENO: WARNING: unistd.h: check for missing prerequisite headers?" >&5 -echo "$as_me: WARNING: unistd.h: check for missing prerequisite headers?" >&2;} - { echo "$as_me:$LINENO: WARNING: unistd.h: see the Autoconf documentation" >&5 -echo "$as_me: WARNING: unistd.h: see the Autoconf documentation" >&2;} - { echo "$as_me:$LINENO: WARNING: unistd.h: section \"Present But Cannot Be Compiled\"" >&5 -echo "$as_me: WARNING: unistd.h: section \"Present But Cannot Be Compiled\"" >&2;} - { echo "$as_me:$LINENO: WARNING: unistd.h: proceeding with the preprocessor's result" >&5 -echo "$as_me: WARNING: unistd.h: proceeding with the preprocessor's result" >&2;} - { echo "$as_me:$LINENO: WARNING: unistd.h: in the future, the compiler will take precedence" >&5 -echo "$as_me: WARNING: unistd.h: in the future, the compiler will take precedence" >&2;} - ( - cat <<\_ASBOX -## ------------------------------------------ ## -## Report this to the AC_PACKAGE_NAME lists. ## -## ------------------------------------------ ## -_ASBOX - ) | - sed "s/^/$as_me: WARNING: /" >&2 - ;; -esac -echo "$as_me:$LINENO: checking for unistd.h" >&5 -echo $ECHO_N "checking for unistd.h... $ECHO_C" >&6 -if test "${ac_cv_header_unistd_h+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 -else - ac_cv_header_unistd_h=$ac_header_preproc -fi -echo "$as_me:$LINENO: result: $ac_cv_header_unistd_h" >&5 -echo "${ECHO_T}$ac_cv_header_unistd_h" >&6 - -fi -if test $ac_cv_header_unistd_h = yes; then - : -else - { { echo "$as_me:$LINENO: error: \"Mandatory header missing on your system\"" >&5 -echo "$as_me: error: \"Mandatory header missing on your system\"" >&2;} - { (exit 1); exit 1; }; } -fi - - - - -echo "$as_me:$LINENO: checking if libnsl is mandatory" >&5 -echo $ECHO_N "checking if libnsl is mandatory... $ECHO_C" >&6 -cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF -/* end confdefs.h. */ -#include - #include - #include - #include - union - { - HEADER hdr; - u_char buf[4096]; /* With RFC 2671, otherwise 512 is enough */ - } - response; - char *domain; - int requested_type; -int -main () -{ -res_query(domain, - C_IN, - requested_type, - (u_char *) & response, - sizeof (response)) - ; - return 0; -} -_ACEOF -rm -f conftest.$ac_objext conftest$ac_exeext -if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 - (eval $ac_link) 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && - { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err' - { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; } && - { ac_try='test -s conftest$ac_exeext' - { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; }; then - echo "$as_me:$LINENO: result: no" >&5 -echo "${ECHO_T}no" >&6 -else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - - echo "$as_me:$LINENO: result: yes" >&5 -echo "${ECHO_T}yes" >&6; LIBS="${LIBS} -lnsl" -fi -rm -f conftest.err conftest.$ac_objext \ - conftest$ac_exeext conftest.$ac_ext - -echo "$as_me:$LINENO: checking loc_ntoa" >&5 -echo $ECHO_N "checking loc_ntoa... $ECHO_C" >&6 -cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF -/* end confdefs.h. */ -#include -int -main () -{ - u_char *cp; char *result; loc_ntoa(cp, result) - ; - return 0; -} -_ACEOF -rm -f conftest.$ac_objext conftest$ac_exeext -if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 - (eval $ac_link) 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && - { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err' - { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; } && - { ac_try='test -s conftest$ac_exeext' - { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; }; then - echo "$as_me:$LINENO: result: yes" >&5 -echo "${ECHO_T}yes" >&6; cat >>confdefs.h <<\_ACEOF -#define HAVE_LOC_NTOA 1 -_ACEOF - -else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - - echo "$as_me:$LINENO: result: no, using the alternative" >&5 -echo "${ECHO_T}no, using the alternative" >&6; LOC_NTOA=loc_ntoa.o -fi -rm -f conftest.err conftest.$ac_objext \ - conftest$ac_exeext conftest.$ac_ext - - -echo "$as_me:$LINENO: checking for an ANSI C-conforming const" >&5 -echo $ECHO_N "checking for an ANSI C-conforming const... $ECHO_C" >&6 -if test "${ac_cv_c_const+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 -else - cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF -/* end confdefs.h. */ - -int -main () -{ -/* FIXME: Include the comments suggested by Paul. */ -#ifndef __cplusplus - /* Ultrix mips cc rejects this. */ - typedef int charset[2]; - const charset x; - /* SunOS 4.1.1 cc rejects this. */ - char const *const *ccp; - char **p; - /* NEC SVR4.0.2 mips cc rejects this. */ - struct point {int x, y;}; - static struct point const zero = {0,0}; - /* AIX XL C 1.02.0.0 rejects this. - It does not let you subtract one const X* pointer from another in - an arm of an if-expression whose if-part is not a constant - expression */ - const char *g = "string"; - ccp = &g + (g ? g-g : 0); - /* HPUX 7.0 cc rejects these. */ - ++ccp; - p = (char**) ccp; - ccp = (char const *const *) p; - { /* SCO 3.2v4 cc rejects this. */ - char *t; - char const *s = 0 ? (char *) 0 : (char const *) 0; - - *t++ = 0; - } - { /* Someone thinks the Sun supposedly-ANSI compiler will reject this. */ - int x[] = {25, 17}; - const int *foo = &x[0]; - ++foo; - } - { /* Sun SC1.0 ANSI compiler rejects this -- but not the above. */ - typedef const int *iptr; - iptr p = 0; - ++p; - } - { /* AIX XL C 1.02.0.0 rejects this saying - "k.c", line 2.27: 1506-025 (S) Operand must be a modifiable lvalue. */ - struct s { int j; const int *ap[3]; }; - struct s *b; b->j = 5; - } - { /* ULTRIX-32 V3.1 (Rev 9) vcc rejects this */ - const int foo = 10; - } -#endif - - ; - return 0; -} -_ACEOF -rm -f conftest.$ac_objext -if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 - (eval $ac_compile) 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && - { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err' - { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; } && - { ac_try='test -s conftest.$ac_objext' - { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; }; then - ac_cv_c_const=yes -else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - -ac_cv_c_const=no -fi -rm -f conftest.err conftest.$ac_objext conftest.$ac_ext -fi -echo "$as_me:$LINENO: result: $ac_cv_c_const" >&5 -echo "${ECHO_T}$ac_cv_c_const" >&6 -if test $ac_cv_c_const = no; then - -cat >>confdefs.h <<\_ACEOF -#define const -_ACEOF - -fi - -echo "$as_me:$LINENO: checking for long" >&5 -echo $ECHO_N "checking for long... $ECHO_C" >&6 -if test "${ac_cv_type_long+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 -else - cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF -/* end confdefs.h. */ -$ac_includes_default -int -main () -{ -if ((long *) 0) - return 0; -if (sizeof (long)) - return 0; - ; - return 0; -} -_ACEOF -rm -f conftest.$ac_objext -if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 - (eval $ac_compile) 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && - { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err' - { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; } && - { ac_try='test -s conftest.$ac_objext' - { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; }; then - ac_cv_type_long=yes -else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - -ac_cv_type_long=no -fi -rm -f conftest.err conftest.$ac_objext conftest.$ac_ext -fi -echo "$as_me:$LINENO: result: $ac_cv_type_long" >&5 -echo "${ECHO_T}$ac_cv_type_long" >&6 - -echo "$as_me:$LINENO: checking size of long" >&5 -echo $ECHO_N "checking size of long... $ECHO_C" >&6 -if test "${ac_cv_sizeof_long+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 -else - if test "$ac_cv_type_long" = yes; then - # The cast to unsigned long 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. - if test "$cross_compiling" = yes; then - # Depending upon the size, compute the lo and hi bounds. -cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF -/* end confdefs.h. */ -$ac_includes_default -int -main () -{ -static int test_array [1 - 2 * !(((long) (sizeof (long))) >= 0)]; -test_array [0] = 0 - - ; - return 0; -} -_ACEOF -rm -f conftest.$ac_objext -if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 - (eval $ac_compile) 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && - { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err' - { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; } && - { ac_try='test -s conftest.$ac_objext' - { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; }; then - ac_lo=0 ac_mid=0 - while :; do - cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF -/* end confdefs.h. */ -$ac_includes_default -int -main () -{ -static int test_array [1 - 2 * !(((long) (sizeof (long))) <= $ac_mid)]; -test_array [0] = 0 - - ; - return 0; -} -_ACEOF -rm -f conftest.$ac_objext -if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 - (eval $ac_compile) 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && - { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err' - { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; } && - { ac_try='test -s conftest.$ac_objext' - { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; }; then - ac_hi=$ac_mid; break -else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - -ac_lo=`expr $ac_mid + 1` - if test $ac_lo -le $ac_mid; then - ac_lo= ac_hi= - break - fi - ac_mid=`expr 2 '*' $ac_mid + 1` -fi -rm -f conftest.err conftest.$ac_objext conftest.$ac_ext - done -else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - -cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF -/* end confdefs.h. */ -$ac_includes_default -int -main () -{ -static int test_array [1 - 2 * !(((long) (sizeof (long))) < 0)]; -test_array [0] = 0 - - ; - return 0; -} -_ACEOF -rm -f conftest.$ac_objext -if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 - (eval $ac_compile) 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && - { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err' - { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; } && - { ac_try='test -s conftest.$ac_objext' - { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; }; then - ac_hi=-1 ac_mid=-1 - while :; do - cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF -/* end confdefs.h. */ -$ac_includes_default -int -main () -{ -static int test_array [1 - 2 * !(((long) (sizeof (long))) >= $ac_mid)]; -test_array [0] = 0 - - ; - return 0; -} -_ACEOF -rm -f conftest.$ac_objext -if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 - (eval $ac_compile) 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && - { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err' - { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; } && - { ac_try='test -s conftest.$ac_objext' - { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; }; then - ac_lo=$ac_mid; break -else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - -ac_hi=`expr '(' $ac_mid ')' - 1` - if test $ac_mid -le $ac_hi; then - ac_lo= ac_hi= - break - fi - ac_mid=`expr 2 '*' $ac_mid` -fi -rm -f conftest.err conftest.$ac_objext conftest.$ac_ext - done -else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - -ac_lo= ac_hi= -fi -rm -f conftest.err conftest.$ac_objext conftest.$ac_ext -fi -rm -f conftest.err conftest.$ac_objext conftest.$ac_ext -# Binary search between lo and hi bounds. -while test "x$ac_lo" != "x$ac_hi"; do - ac_mid=`expr '(' $ac_hi - $ac_lo ')' / 2 + $ac_lo` - cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF -/* end confdefs.h. */ -$ac_includes_default -int -main () -{ -static int test_array [1 - 2 * !(((long) (sizeof (long))) <= $ac_mid)]; -test_array [0] = 0 - - ; - return 0; -} -_ACEOF -rm -f conftest.$ac_objext -if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 - (eval $ac_compile) 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && - { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err' - { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; } && - { ac_try='test -s conftest.$ac_objext' - { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; }; then - ac_hi=$ac_mid -else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - -ac_lo=`expr '(' $ac_mid ')' + 1` -fi -rm -f conftest.err conftest.$ac_objext conftest.$ac_ext -done -case $ac_lo in -?*) ac_cv_sizeof_long=$ac_lo;; -'') { { echo "$as_me:$LINENO: error: cannot compute sizeof (long), 77 -See \`config.log' for more details." >&5 -echo "$as_me: error: cannot compute sizeof (long), 77 -See \`config.log' for more details." >&2;} - { (exit 1); exit 1; }; } ;; -esac -else - if test "$cross_compiling" = yes; then - { { echo "$as_me:$LINENO: error: internal error: not reached in cross-compile" >&5 -echo "$as_me: error: internal error: not reached in cross-compile" >&2;} - { (exit 1); exit 1; }; } -else - cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF -/* end confdefs.h. */ -$ac_includes_default -long longval () { return (long) (sizeof (long)); } -unsigned long ulongval () { return (long) (sizeof (long)); } -#include -#include -int -main () -{ - - FILE *f = fopen ("conftest.val", "w"); - if (! f) - exit (1); - if (((long) (sizeof (long))) < 0) - { - long i = longval (); - if (i != ((long) (sizeof (long)))) - exit (1); - fprintf (f, "%ld\n", i); - } - else - { - unsigned long i = ulongval (); - if (i != ((long) (sizeof (long)))) - exit (1); - fprintf (f, "%lu\n", i); - } - exit (ferror (f) || fclose (f) != 0); - - ; - return 0; -} -_ACEOF -rm -f conftest$ac_exeext -if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 - (eval $ac_link) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && { ac_try='./conftest$ac_exeext' - { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; }; then - ac_cv_sizeof_long=`cat conftest.val` -else - echo "$as_me: program exited with status $ac_status" >&5 -echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - -( exit $ac_status ) -{ { echo "$as_me:$LINENO: error: cannot compute sizeof (long), 77 -See \`config.log' for more details." >&5 -echo "$as_me: error: cannot compute sizeof (long), 77 -See \`config.log' for more details." >&2;} - { (exit 1); exit 1; }; } -fi -rm -f core *.core gmon.out bb.out conftest$ac_exeext conftest.$ac_objext conftest.$ac_ext -fi -fi -rm -f conftest.val -else - ac_cv_sizeof_long=0 -fi -fi -echo "$as_me:$LINENO: result: $ac_cv_sizeof_long" >&5 -echo "${ECHO_T}$ac_cv_sizeof_long" >&6 -cat >>confdefs.h <<_ACEOF -#define SIZEOF_LONG $ac_cv_sizeof_long -_ACEOF - - -echo "$as_me:$LINENO: checking for int" >&5 -echo $ECHO_N "checking for int... $ECHO_C" >&6 -if test "${ac_cv_type_int+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 -else - cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF -/* end confdefs.h. */ -$ac_includes_default -int -main () -{ -if ((int *) 0) - return 0; -if (sizeof (int)) - return 0; - ; - return 0; -} -_ACEOF -rm -f conftest.$ac_objext -if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 - (eval $ac_compile) 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && - { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err' - { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; } && - { ac_try='test -s conftest.$ac_objext' - { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; }; then - ac_cv_type_int=yes -else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - -ac_cv_type_int=no -fi -rm -f conftest.err conftest.$ac_objext conftest.$ac_ext -fi -echo "$as_me:$LINENO: result: $ac_cv_type_int" >&5 -echo "${ECHO_T}$ac_cv_type_int" >&6 - -echo "$as_me:$LINENO: checking size of int" >&5 -echo $ECHO_N "checking size of int... $ECHO_C" >&6 -if test "${ac_cv_sizeof_int+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 -else - if test "$ac_cv_type_int" = yes; then - # The cast to unsigned long 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. - if test "$cross_compiling" = yes; then - # Depending upon the size, compute the lo and hi bounds. -cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF -/* end confdefs.h. */ -$ac_includes_default -int -main () -{ -static int test_array [1 - 2 * !(((long) (sizeof (int))) >= 0)]; -test_array [0] = 0 - - ; - return 0; -} -_ACEOF -rm -f conftest.$ac_objext -if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 - (eval $ac_compile) 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && - { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err' - { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; } && - { ac_try='test -s conftest.$ac_objext' - { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; }; then - ac_lo=0 ac_mid=0 - while :; do - cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF -/* end confdefs.h. */ -$ac_includes_default -int -main () -{ -static int test_array [1 - 2 * !(((long) (sizeof (int))) <= $ac_mid)]; -test_array [0] = 0 - - ; - return 0; -} -_ACEOF -rm -f conftest.$ac_objext -if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 - (eval $ac_compile) 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && - { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err' - { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; } && - { ac_try='test -s conftest.$ac_objext' - { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; }; then - ac_hi=$ac_mid; break -else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - -ac_lo=`expr $ac_mid + 1` - if test $ac_lo -le $ac_mid; then - ac_lo= ac_hi= - break - fi - ac_mid=`expr 2 '*' $ac_mid + 1` -fi -rm -f conftest.err conftest.$ac_objext conftest.$ac_ext - done -else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - -cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF -/* end confdefs.h. */ -$ac_includes_default -int -main () -{ -static int test_array [1 - 2 * !(((long) (sizeof (int))) < 0)]; -test_array [0] = 0 - - ; - return 0; -} -_ACEOF -rm -f conftest.$ac_objext -if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 - (eval $ac_compile) 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && - { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err' - { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; } && - { ac_try='test -s conftest.$ac_objext' - { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; }; then - ac_hi=-1 ac_mid=-1 - while :; do - cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF -/* end confdefs.h. */ -$ac_includes_default -int -main () -{ -static int test_array [1 - 2 * !(((long) (sizeof (int))) >= $ac_mid)]; -test_array [0] = 0 - - ; - return 0; -} -_ACEOF -rm -f conftest.$ac_objext -if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 - (eval $ac_compile) 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && - { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err' - { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; } && - { ac_try='test -s conftest.$ac_objext' - { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; }; then - ac_lo=$ac_mid; break -else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - -ac_hi=`expr '(' $ac_mid ')' - 1` - if test $ac_mid -le $ac_hi; then - ac_lo= ac_hi= - break - fi - ac_mid=`expr 2 '*' $ac_mid` -fi -rm -f conftest.err conftest.$ac_objext conftest.$ac_ext - done -else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - -ac_lo= ac_hi= -fi -rm -f conftest.err conftest.$ac_objext conftest.$ac_ext -fi -rm -f conftest.err conftest.$ac_objext conftest.$ac_ext -# Binary search between lo and hi bounds. -while test "x$ac_lo" != "x$ac_hi"; do - ac_mid=`expr '(' $ac_hi - $ac_lo ')' / 2 + $ac_lo` - cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF -/* end confdefs.h. */ -$ac_includes_default -int -main () -{ -static int test_array [1 - 2 * !(((long) (sizeof (int))) <= $ac_mid)]; -test_array [0] = 0 - - ; - return 0; -} -_ACEOF -rm -f conftest.$ac_objext -if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 - (eval $ac_compile) 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && - { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err' - { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; } && - { ac_try='test -s conftest.$ac_objext' - { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; }; then - ac_hi=$ac_mid -else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - -ac_lo=`expr '(' $ac_mid ')' + 1` -fi -rm -f conftest.err conftest.$ac_objext conftest.$ac_ext -done -case $ac_lo in -?*) ac_cv_sizeof_int=$ac_lo;; -'') { { echo "$as_me:$LINENO: error: cannot compute sizeof (int), 77 -See \`config.log' for more details." >&5 -echo "$as_me: error: cannot compute sizeof (int), 77 -See \`config.log' for more details." >&2;} - { (exit 1); exit 1; }; } ;; -esac -else - if test "$cross_compiling" = yes; then - { { echo "$as_me:$LINENO: error: internal error: not reached in cross-compile" >&5 -echo "$as_me: error: internal error: not reached in cross-compile" >&2;} - { (exit 1); exit 1; }; } -else - cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF -/* end confdefs.h. */ -$ac_includes_default -long longval () { return (long) (sizeof (int)); } -unsigned long ulongval () { return (long) (sizeof (int)); } -#include -#include -int -main () -{ - - FILE *f = fopen ("conftest.val", "w"); - if (! f) - exit (1); - if (((long) (sizeof (int))) < 0) - { - long i = longval (); - if (i != ((long) (sizeof (int)))) - exit (1); - fprintf (f, "%ld\n", i); - } - else - { - unsigned long i = ulongval (); - if (i != ((long) (sizeof (int)))) - exit (1); - fprintf (f, "%lu\n", i); - } - exit (ferror (f) || fclose (f) != 0); - - ; - return 0; -} -_ACEOF -rm -f conftest$ac_exeext -if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 - (eval $ac_link) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && { ac_try='./conftest$ac_exeext' - { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; }; then - ac_cv_sizeof_int=`cat conftest.val` -else - echo "$as_me: program exited with status $ac_status" >&5 -echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - -( exit $ac_status ) -{ { echo "$as_me:$LINENO: error: cannot compute sizeof (int), 77 -See \`config.log' for more details." >&5 -echo "$as_me: error: cannot compute sizeof (int), 77 -See \`config.log' for more details." >&2;} - { (exit 1); exit 1; }; } -fi -rm -f core *.core gmon.out bb.out conftest$ac_exeext conftest.$ac_objext conftest.$ac_ext -fi -fi -rm -f conftest.val -else - ac_cv_sizeof_int=0 -fi -fi -echo "$as_me:$LINENO: result: $ac_cv_sizeof_int" >&5 -echo "${ECHO_T}$ac_cv_sizeof_int" >&6 -cat >>confdefs.h <<_ACEOF -#define SIZEOF_INT $ac_cv_sizeof_int -_ACEOF - - -echo "$as_me:$LINENO: checking for short" >&5 -echo $ECHO_N "checking for short... $ECHO_C" >&6 -if test "${ac_cv_type_short+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 -else - cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF -/* end confdefs.h. */ -$ac_includes_default -int -main () -{ -if ((short *) 0) - return 0; -if (sizeof (short)) - return 0; - ; - return 0; -} -_ACEOF -rm -f conftest.$ac_objext -if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 - (eval $ac_compile) 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && - { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err' - { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; } && - { ac_try='test -s conftest.$ac_objext' - { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; }; then - ac_cv_type_short=yes -else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - -ac_cv_type_short=no -fi -rm -f conftest.err conftest.$ac_objext conftest.$ac_ext -fi -echo "$as_me:$LINENO: result: $ac_cv_type_short" >&5 -echo "${ECHO_T}$ac_cv_type_short" >&6 - -echo "$as_me:$LINENO: checking size of short" >&5 -echo $ECHO_N "checking size of short... $ECHO_C" >&6 -if test "${ac_cv_sizeof_short+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 -else - if test "$ac_cv_type_short" = yes; then - # The cast to unsigned long 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. - if test "$cross_compiling" = yes; then - # Depending upon the size, compute the lo and hi bounds. -cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF -/* end confdefs.h. */ -$ac_includes_default -int -main () -{ -static int test_array [1 - 2 * !(((long) (sizeof (short))) >= 0)]; -test_array [0] = 0 - - ; - return 0; -} -_ACEOF -rm -f conftest.$ac_objext -if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 - (eval $ac_compile) 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && - { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err' - { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; } && - { ac_try='test -s conftest.$ac_objext' - { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; }; then - ac_lo=0 ac_mid=0 - while :; do - cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF -/* end confdefs.h. */ -$ac_includes_default -int -main () -{ -static int test_array [1 - 2 * !(((long) (sizeof (short))) <= $ac_mid)]; -test_array [0] = 0 - - ; - return 0; -} -_ACEOF -rm -f conftest.$ac_objext -if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 - (eval $ac_compile) 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && - { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err' - { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; } && - { ac_try='test -s conftest.$ac_objext' - { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; }; then - ac_hi=$ac_mid; break -else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - -ac_lo=`expr $ac_mid + 1` - if test $ac_lo -le $ac_mid; then - ac_lo= ac_hi= - break - fi - ac_mid=`expr 2 '*' $ac_mid + 1` -fi -rm -f conftest.err conftest.$ac_objext conftest.$ac_ext - done -else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - -cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF -/* end confdefs.h. */ -$ac_includes_default -int -main () -{ -static int test_array [1 - 2 * !(((long) (sizeof (short))) < 0)]; -test_array [0] = 0 - - ; - return 0; -} -_ACEOF -rm -f conftest.$ac_objext -if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 - (eval $ac_compile) 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && - { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err' - { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; } && - { ac_try='test -s conftest.$ac_objext' - { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; }; then - ac_hi=-1 ac_mid=-1 - while :; do - cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF -/* end confdefs.h. */ -$ac_includes_default -int -main () -{ -static int test_array [1 - 2 * !(((long) (sizeof (short))) >= $ac_mid)]; -test_array [0] = 0 - - ; - return 0; -} -_ACEOF -rm -f conftest.$ac_objext -if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 - (eval $ac_compile) 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && - { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err' - { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; } && - { ac_try='test -s conftest.$ac_objext' - { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; }; then - ac_lo=$ac_mid; break -else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - -ac_hi=`expr '(' $ac_mid ')' - 1` - if test $ac_mid -le $ac_hi; then - ac_lo= ac_hi= - break - fi - ac_mid=`expr 2 '*' $ac_mid` -fi -rm -f conftest.err conftest.$ac_objext conftest.$ac_ext - done -else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - -ac_lo= ac_hi= -fi -rm -f conftest.err conftest.$ac_objext conftest.$ac_ext -fi -rm -f conftest.err conftest.$ac_objext conftest.$ac_ext -# Binary search between lo and hi bounds. -while test "x$ac_lo" != "x$ac_hi"; do - ac_mid=`expr '(' $ac_hi - $ac_lo ')' / 2 + $ac_lo` - cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF -/* end confdefs.h. */ -$ac_includes_default -int -main () -{ -static int test_array [1 - 2 * !(((long) (sizeof (short))) <= $ac_mid)]; -test_array [0] = 0 - - ; - return 0; -} -_ACEOF -rm -f conftest.$ac_objext -if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 - (eval $ac_compile) 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && - { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err' - { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; } && - { ac_try='test -s conftest.$ac_objext' - { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; }; then - ac_hi=$ac_mid -else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - -ac_lo=`expr '(' $ac_mid ')' + 1` -fi -rm -f conftest.err conftest.$ac_objext conftest.$ac_ext -done -case $ac_lo in -?*) ac_cv_sizeof_short=$ac_lo;; -'') { { echo "$as_me:$LINENO: error: cannot compute sizeof (short), 77 -See \`config.log' for more details." >&5 -echo "$as_me: error: cannot compute sizeof (short), 77 -See \`config.log' for more details." >&2;} - { (exit 1); exit 1; }; } ;; -esac -else - if test "$cross_compiling" = yes; then - { { echo "$as_me:$LINENO: error: internal error: not reached in cross-compile" >&5 -echo "$as_me: error: internal error: not reached in cross-compile" >&2;} - { (exit 1); exit 1; }; } -else - cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF -/* end confdefs.h. */ -$ac_includes_default -long longval () { return (long) (sizeof (short)); } -unsigned long ulongval () { return (long) (sizeof (short)); } -#include -#include -int -main () -{ - - FILE *f = fopen ("conftest.val", "w"); - if (! f) - exit (1); - if (((long) (sizeof (short))) < 0) - { - long i = longval (); - if (i != ((long) (sizeof (short)))) - exit (1); - fprintf (f, "%ld\n", i); - } - else - { - unsigned long i = ulongval (); - if (i != ((long) (sizeof (short)))) - exit (1); - fprintf (f, "%lu\n", i); - } - exit (ferror (f) || fclose (f) != 0); - - ; - return 0; -} -_ACEOF -rm -f conftest$ac_exeext -if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 - (eval $ac_link) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && { ac_try='./conftest$ac_exeext' - { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; }; then - ac_cv_sizeof_short=`cat conftest.val` -else - echo "$as_me: program exited with status $ac_status" >&5 -echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - -( exit $ac_status ) -{ { echo "$as_me:$LINENO: error: cannot compute sizeof (short), 77 -See \`config.log' for more details." >&5 -echo "$as_me: error: cannot compute sizeof (short), 77 -See \`config.log' for more details." >&2;} - { (exit 1); exit 1; }; } -fi -rm -f core *.core gmon.out bb.out conftest$ac_exeext conftest.$ac_objext conftest.$ac_ext -fi -fi -rm -f conftest.val -else - ac_cv_sizeof_short=0 -fi -fi -echo "$as_me:$LINENO: result: $ac_cv_sizeof_short" >&5 -echo "${ECHO_T}$ac_cv_sizeof_short" >&6 -cat >>confdefs.h <<_ACEOF -#define SIZEOF_SHORT $ac_cv_sizeof_short -_ACEOF - - -echo "$as_me:$LINENO: checking for char" >&5 -echo $ECHO_N "checking for char... $ECHO_C" >&6 -if test "${ac_cv_type_char+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 -else - cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF -/* end confdefs.h. */ -$ac_includes_default -int -main () -{ -if ((char *) 0) - return 0; -if (sizeof (char)) - return 0; - ; - return 0; -} -_ACEOF -rm -f conftest.$ac_objext -if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 - (eval $ac_compile) 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && - { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err' - { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; } && - { ac_try='test -s conftest.$ac_objext' - { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; }; then - ac_cv_type_char=yes -else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - -ac_cv_type_char=no -fi -rm -f conftest.err conftest.$ac_objext conftest.$ac_ext -fi -echo "$as_me:$LINENO: result: $ac_cv_type_char" >&5 -echo "${ECHO_T}$ac_cv_type_char" >&6 - -echo "$as_me:$LINENO: checking size of char" >&5 -echo $ECHO_N "checking size of char... $ECHO_C" >&6 -if test "${ac_cv_sizeof_char+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 -else - if test "$ac_cv_type_char" = yes; then - # The cast to unsigned long 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. - if test "$cross_compiling" = yes; then - # Depending upon the size, compute the lo and hi bounds. -cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF -/* end confdefs.h. */ -$ac_includes_default -int -main () -{ -static int test_array [1 - 2 * !(((long) (sizeof (char))) >= 0)]; -test_array [0] = 0 - - ; - return 0; -} -_ACEOF -rm -f conftest.$ac_objext -if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 - (eval $ac_compile) 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && - { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err' - { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; } && - { ac_try='test -s conftest.$ac_objext' - { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; }; then - ac_lo=0 ac_mid=0 - while :; do - cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF -/* end confdefs.h. */ -$ac_includes_default -int -main () -{ -static int test_array [1 - 2 * !(((long) (sizeof (char))) <= $ac_mid)]; -test_array [0] = 0 - - ; - return 0; -} -_ACEOF -rm -f conftest.$ac_objext -if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 - (eval $ac_compile) 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && - { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err' - { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; } && - { ac_try='test -s conftest.$ac_objext' - { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; }; then - ac_hi=$ac_mid; break -else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - -ac_lo=`expr $ac_mid + 1` - if test $ac_lo -le $ac_mid; then - ac_lo= ac_hi= - break - fi - ac_mid=`expr 2 '*' $ac_mid + 1` -fi -rm -f conftest.err conftest.$ac_objext conftest.$ac_ext - done -else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - -cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF -/* end confdefs.h. */ -$ac_includes_default -int -main () -{ -static int test_array [1 - 2 * !(((long) (sizeof (char))) < 0)]; -test_array [0] = 0 - - ; - return 0; -} -_ACEOF -rm -f conftest.$ac_objext -if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 - (eval $ac_compile) 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && - { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err' - { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; } && - { ac_try='test -s conftest.$ac_objext' - { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; }; then - ac_hi=-1 ac_mid=-1 - while :; do - cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF -/* end confdefs.h. */ -$ac_includes_default -int -main () -{ -static int test_array [1 - 2 * !(((long) (sizeof (char))) >= $ac_mid)]; -test_array [0] = 0 - - ; - return 0; -} -_ACEOF -rm -f conftest.$ac_objext -if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 - (eval $ac_compile) 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && - { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err' - { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; } && - { ac_try='test -s conftest.$ac_objext' - { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; }; then - ac_lo=$ac_mid; break -else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - -ac_hi=`expr '(' $ac_mid ')' - 1` - if test $ac_mid -le $ac_hi; then - ac_lo= ac_hi= - break - fi - ac_mid=`expr 2 '*' $ac_mid` -fi -rm -f conftest.err conftest.$ac_objext conftest.$ac_ext - done -else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - -ac_lo= ac_hi= -fi -rm -f conftest.err conftest.$ac_objext conftest.$ac_ext -fi -rm -f conftest.err conftest.$ac_objext conftest.$ac_ext -# Binary search between lo and hi bounds. -while test "x$ac_lo" != "x$ac_hi"; do - ac_mid=`expr '(' $ac_hi - $ac_lo ')' / 2 + $ac_lo` - cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF -/* end confdefs.h. */ -$ac_includes_default -int -main () -{ -static int test_array [1 - 2 * !(((long) (sizeof (char))) <= $ac_mid)]; -test_array [0] = 0 - - ; - return 0; -} -_ACEOF -rm -f conftest.$ac_objext -if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 - (eval $ac_compile) 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && - { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err' - { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; } && - { ac_try='test -s conftest.$ac_objext' - { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; }; then - ac_hi=$ac_mid -else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - -ac_lo=`expr '(' $ac_mid ')' + 1` -fi -rm -f conftest.err conftest.$ac_objext conftest.$ac_ext -done -case $ac_lo in -?*) ac_cv_sizeof_char=$ac_lo;; -'') { { echo "$as_me:$LINENO: error: cannot compute sizeof (char), 77 -See \`config.log' for more details." >&5 -echo "$as_me: error: cannot compute sizeof (char), 77 -See \`config.log' for more details." >&2;} - { (exit 1); exit 1; }; } ;; -esac -else - if test "$cross_compiling" = yes; then - { { echo "$as_me:$LINENO: error: internal error: not reached in cross-compile" >&5 -echo "$as_me: error: internal error: not reached in cross-compile" >&2;} - { (exit 1); exit 1; }; } -else - cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF -/* end confdefs.h. */ -$ac_includes_default -long longval () { return (long) (sizeof (char)); } -unsigned long ulongval () { return (long) (sizeof (char)); } -#include -#include -int -main () -{ - - FILE *f = fopen ("conftest.val", "w"); - if (! f) - exit (1); - if (((long) (sizeof (char))) < 0) - { - long i = longval (); - if (i != ((long) (sizeof (char)))) - exit (1); - fprintf (f, "%ld\n", i); - } - else - { - unsigned long i = ulongval (); - if (i != ((long) (sizeof (char)))) - exit (1); - fprintf (f, "%lu\n", i); - } - exit (ferror (f) || fclose (f) != 0); - - ; - return 0; -} -_ACEOF -rm -f conftest$ac_exeext -if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 - (eval $ac_link) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && { ac_try='./conftest$ac_exeext' - { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; }; then - ac_cv_sizeof_char=`cat conftest.val` -else - echo "$as_me: program exited with status $ac_status" >&5 -echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - -( exit $ac_status ) -{ { echo "$as_me:$LINENO: error: cannot compute sizeof (char), 77 -See \`config.log' for more details." >&5 -echo "$as_me: error: cannot compute sizeof (char), 77 -See \`config.log' for more details." >&2;} - { (exit 1); exit 1; }; } -fi -rm -f core *.core gmon.out bb.out conftest$ac_exeext conftest.$ac_objext conftest.$ac_ext -fi -fi -rm -f conftest.val -else - ac_cv_sizeof_char=0 -fi -fi -echo "$as_me:$LINENO: result: $ac_cv_sizeof_char" >&5 -echo "${ECHO_T}$ac_cv_sizeof_char" >&6 -cat >>confdefs.h <<_ACEOF -#define SIZEOF_CHAR $ac_cv_sizeof_char -_ACEOF - - - - 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, don't put newlines in cache variables' values. -# 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. -{ - (set) 2>&1 | - case `(ac_space=' '; set | grep ac_space) 2>&1` in - *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 \ - "s/^\\([_$as_cr_alnum]*_cv_[_$as_cr_alnum]*\\)=\\(.*\\)/\\1=\\2/p" - ;; - esac; -} | - sed ' - t clear - : clear - s/^\([^=]*\)=\(.*[{}].*\)$/test "${\1+set}" = set || &/ - t end - /^ac_cv_env/!s/^\([^=]*\)=\(.*\)$/\1=${\1=\2}/ - : end' >>confcache -if diff $cache_file confcache >/dev/null 2>&1; then :; else - if test -w $cache_file; then - test "x$cache_file" != "x/dev/null" && echo "updating cache $cache_file" - cat confcache >$cache_file - else - echo "not updating unwritable cache $cache_file" - 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}' - -# VPATH may cause trouble with some makes, so we remove $(srcdir), -# ${srcdir} and @srcdir@ 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[ ]*=/{ -s/:*\$(srcdir):*/:/; -s/:*\${srcdir}:*/:/; -s/:*@srcdir@:*/:/; -s/^\([^=]*=[ ]*\):*/\1/; -s/:*$//; -s/^[^=]*=[ ]*$//; -}' -fi - -DEFS=-DHAVE_CONFIG_H - -ac_libobjs= -ac_ltlibobjs= -for ac_i in : $LIBOBJS; do test "x$ac_i" = x: && continue - # 1. Remove the extension, and $U if already installed. - ac_i=`echo "$ac_i" | - sed 's/\$U\././;s/\.o$//;s/\.obj$//'` - # 2. Add them. - ac_libobjs="$ac_libobjs $ac_i\$U.$ac_objext" - ac_ltlibobjs="$ac_ltlibobjs $ac_i"'$U.lo' -done -LIBOBJS=$ac_libobjs - -LTLIBOBJS=$ac_ltlibobjs - - - -: ${CONFIG_STATUS=./config.status} -ac_clean_files_save=$ac_clean_files -ac_clean_files="$ac_clean_files $CONFIG_STATUS" -{ echo "$as_me:$LINENO: creating $CONFIG_STATUS" >&5 -echo "$as_me: creating $CONFIG_STATUS" >&6;} -cat >$CONFIG_STATUS <<_ACEOF -#! $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} -_ACEOF - -cat >>$CONFIG_STATUS <<\_ACEOF -## --------------------- ## -## M4sh Initialization. ## -## --------------------- ## - -# Be Bourne compatible -if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then - emulate sh - NULLCMD=: - # Zsh 3.x and 4.x performs word splitting on ${1+"$@"}, which - # is contrary to our usage. Disable this feature. - alias -g '${1+"$@"}'='"$@"' -elif test -n "${BASH_VERSION+set}" && (set -o posix) >/dev/null 2>&1; then - set -o posix -fi -DUALCASE=1; export DUALCASE # for MKS sh - -# Support unset when possible. -if ( (MAIL=60; unset MAIL) || exit) >/dev/null 2>&1; then - as_unset=unset -else - as_unset=false -fi - - -# Work around bugs in pre-3.0 UWIN ksh. -$as_unset ENV MAIL MAILPATH -PS1='$ ' -PS2='> ' -PS4='+ ' - -# NLS nuisances. -for as_var in \ - LANG LANGUAGE LC_ADDRESS LC_ALL LC_COLLATE LC_CTYPE LC_IDENTIFICATION \ - LC_MEASUREMENT LC_MESSAGES LC_MONETARY LC_NAME LC_NUMERIC LC_PAPER \ - LC_TELEPHONE LC_TIME -do - if (set +x; test -z "`(eval $as_var=C; export $as_var) 2>&1`"); then - eval $as_var=C; export $as_var - else - $as_unset $as_var - fi -done - -# Required to use basename. -if expr a : '\(a\)' >/dev/null 2>&1; 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 - - -# Name of the executable. -as_me=`$as_basename "$0" || -$as_expr X/"$0" : '.*/\([^/][^/]*\)/*$' \| \ - X"$0" : 'X\(//\)$' \| \ - X"$0" : 'X\(/\)$' \| \ - . : '\(.\)' 2>/dev/null || -echo X/"$0" | - sed '/^.*\/\([^/][^/]*\)\/*$/{ s//\1/; q; } - /^X\/\(\/\/\)$/{ s//\1/; q; } - /^X\/\(\/\).*/{ s//\1/; q; } - s/.*/./; q'` - - -# PATH needs CR, and LINENO needs CR and PATH. -# 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 - -# The user is always right. -if test "${PATH_SEPARATOR+set}" != set; then - echo "#! /bin/sh" >conf$$.sh - echo "exit 0" >>conf$$.sh - chmod +x conf$$.sh - if (PATH="/nonexistent;."; conf$$.sh) >/dev/null 2>&1; then - PATH_SEPARATOR=';' - else - PATH_SEPARATOR=: - fi - rm -f conf$$.sh -fi - - - as_lineno_1=$LINENO - as_lineno_2=$LINENO - as_lineno_3=`(expr $as_lineno_1 + 1) 2>/dev/null` - test "x$as_lineno_1" != "x$as_lineno_2" && - test "x$as_lineno_3" = "x$as_lineno_2" || { - # Find who we are. Look in the path if we contain no path at all - # relative or not. - 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 - - ;; - 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 - { { echo "$as_me:$LINENO: error: cannot find myself; rerun with an absolute path" >&5 -echo "$as_me: error: cannot find myself; rerun with an absolute path" >&2;} - { (exit 1); exit 1; }; } - fi - case $CONFIG_SHELL in - '') - as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in /bin$PATH_SEPARATOR/usr/bin$PATH_SEPARATOR$PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - for as_base in sh bash ksh sh5; do - case $as_dir in - /*) - if ("$as_dir/$as_base" -c ' - as_lineno_1=$LINENO - as_lineno_2=$LINENO - as_lineno_3=`(expr $as_lineno_1 + 1) 2>/dev/null` - test "x$as_lineno_1" != "x$as_lineno_2" && - test "x$as_lineno_3" = "x$as_lineno_2" ') 2>/dev/null; then - $as_unset BASH_ENV || test "${BASH_ENV+set}" != set || { BASH_ENV=; export BASH_ENV; } - $as_unset ENV || test "${ENV+set}" != set || { ENV=; export ENV; } - CONFIG_SHELL=$as_dir/$as_base - export CONFIG_SHELL - exec "$CONFIG_SHELL" "$0" ${1+"$@"} - fi;; - esac - done -done -;; - esac - - # Create $as_me.lineno as a copy of $as_myself, but with $LINENO - # uniformly replaced by the line number. The first 'sed' inserts a - # line-number line before each line; the second 'sed' does the real - # work. The second script uses 'N' to pair each line-number line - # with the numbered line, and appends trailing '-' during - # substitution so that $LINENO is not a special case at line end. - # (Raja R Harinath suggested sed '=', and Paul Eggert wrote the - # second 'sed' script. Blame Lee E. McMahon for sed's syntax. :-) - sed '=' <$as_myself | - sed ' - N - s,$,-, - : loop - s,^\(['$as_cr_digits']*\)\(.*\)[$]LINENO\([^'$as_cr_alnum'_]\),\1\2\1\3, - t loop - s,-$,, - s,^['$as_cr_digits']*\n,, - ' >$as_me.lineno && - chmod +x $as_me.lineno || - { { echo "$as_me:$LINENO: error: cannot create $as_me.lineno; rerun with a POSIX shell" >&5 -echo "$as_me: error: cannot create $as_me.lineno; rerun with a POSIX shell" >&2;} - { (exit 1); exit 1; }; } - - # 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 sensible to this). - . ./$as_me.lineno - # Exit status is that of the last command. - exit -} - - -case `echo "testing\c"; echo 1,2,3`,`echo -n testing; echo 1,2,3` in - *c*,-n*) ECHO_N= ECHO_C=' -' ECHO_T=' ' ;; - *c*,* ) ECHO_N=-n ECHO_C= ECHO_T= ;; - *) ECHO_N= ECHO_C='\c' ECHO_T= ;; -esac - -if expr a : '\(a\)' >/dev/null 2>&1; then - as_expr=expr -else - as_expr=false -fi - -rm -f conf$$ conf$$.exe conf$$.file -echo >conf$$.file -if ln -s conf$$.file conf$$ 2>/dev/null; then - # We could just check for DJGPP; but this test a) works b) is more generic - # and c) will remain valid once DJGPP supports symlinks (DJGPP 2.04). - if test -f conf$$.exe; then - # Don't use ln at all; we don't have any links - as_ln_s='cp -p' - else - as_ln_s='ln -s' - fi -elif ln conf$$.file conf$$ 2>/dev/null; then - as_ln_s=ln -else - as_ln_s='cp -p' -fi -rm -f conf$$ conf$$.exe conf$$.file - -if mkdir -p . 2>/dev/null; then - as_mkdir_p=: -else - test -d ./-p && rmdir ./-p - as_mkdir_p=false -fi - -as_executable_p="test -f" - -# 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'" - - -# IFS -# We need space, tab and new line, in precisely that order. -as_nl=' -' -IFS=" $as_nl" - -# CDPATH. -$as_unset CDPATH - -exec 6>&1 - -# Open the log real soon, to keep \$[0] and so on meaningful, and to -# report actual input values of CONFIG_FILES etc. instead of their -# values after options handling. Logging --version etc. is OK. -exec 5>>config.log -{ - echo - sed 'h;s/./-/g;s/^.../## /;s/...$/ ##/;p;x;p;x' <<_ASBOX -## Running $as_me. ## -_ASBOX -} >&5 -cat >&5 <<_CSEOF - -This file was extended by $as_me, which was -generated by GNU Autoconf 2.59. Invocation command line was - - CONFIG_FILES = $CONFIG_FILES - CONFIG_HEADERS = $CONFIG_HEADERS - CONFIG_LINKS = $CONFIG_LINKS - CONFIG_COMMANDS = $CONFIG_COMMANDS - $ $0 $@ - -_CSEOF -echo "on `(hostname || uname -n) 2>/dev/null | sed 1q`" >&5 -echo >&5 -_ACEOF - -# Files that config.status was made for. -if test -n "$ac_config_files"; then - echo "config_files=\"$ac_config_files\"" >>$CONFIG_STATUS -fi - -if test -n "$ac_config_headers"; then - echo "config_headers=\"$ac_config_headers\"" >>$CONFIG_STATUS -fi - -if test -n "$ac_config_links"; then - echo "config_links=\"$ac_config_links\"" >>$CONFIG_STATUS -fi - -if test -n "$ac_config_commands"; then - echo "config_commands=\"$ac_config_commands\"" >>$CONFIG_STATUS -fi - -cat >>$CONFIG_STATUS <<\_ACEOF - -ac_cs_usage="\ -\`$as_me' instantiates files from templates according to the -current configuration. - -Usage: $0 [OPTIONS] [FILE]... - - -h, --help print this help, then exit - -V, --version print version number, then exit - -q, --quiet 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 ." -_ACEOF - -cat >>$CONFIG_STATUS <<_ACEOF -ac_cs_version="\\ -config.status -configured by $0, generated by GNU Autoconf 2.59, - with options \\"`echo "$ac_configure_args" | sed 's/[\\""\`\$]/\\\\&/g'`\\" - -Copyright (C) 2003 Free Software Foundation, Inc. -This config.status script is free software; the Free Software Foundation -gives unlimited permission to copy, distribute and modify it." -srcdir=$srcdir -INSTALL="$INSTALL" -_ACEOF - -cat >>$CONFIG_STATUS <<\_ACEOF -# If no file are specified by the user, then we need to provide default -# value. By we need to know if files were specified by the user. -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=$1 - ac_optarg=$2 - ac_shift=shift - ;; - *) # This is not an option, so the user has probably given explicit - # arguments. - ac_option=$1 - ac_need_defaults=false;; - esac - - case $ac_option in - # Handling of the options. -_ACEOF -cat >>$CONFIG_STATUS <<\_ACEOF - -recheck | --recheck | --rechec | --reche | --rech | --rec | --re | --r) - ac_cs_recheck=: ;; - --version | --vers* | -V ) - echo "$ac_cs_version"; exit 0 ;; - --he | --h) - # Conflict between --help and --header - { { echo "$as_me:$LINENO: error: ambiguous option: $1 -Try \`$0 --help' for more information." >&5 -echo "$as_me: error: ambiguous option: $1 -Try \`$0 --help' for more information." >&2;} - { (exit 1); exit 1; }; };; - --help | --hel | -h ) - echo "$ac_cs_usage"; exit 0 ;; - --debug | --d* | -d ) - debug=: ;; - --file | --fil | --fi | --f ) - $ac_shift - CONFIG_FILES="$CONFIG_FILES $ac_optarg" - ac_need_defaults=false;; - --header | --heade | --head | --hea ) - $ac_shift - CONFIG_HEADERS="$CONFIG_HEADERS $ac_optarg" - ac_need_defaults=false;; - -q | -quiet | --quiet | --quie | --qui | --qu | --q \ - | -silent | --silent | --silen | --sile | --sil | --si | --s) - ac_cs_silent=: ;; - - # This is an error. - -*) { { echo "$as_me:$LINENO: error: unrecognized option: $1 -Try \`$0 --help' for more information." >&5 -echo "$as_me: error: unrecognized option: $1 -Try \`$0 --help' for more information." >&2;} - { (exit 1); exit 1; }; } ;; - - *) ac_config_targets="$ac_config_targets $1" ;; - - 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 -if \$ac_cs_recheck; then - echo "running $SHELL $0 " $ac_configure_args \$ac_configure_extra_args " --no-create --no-recursion" >&6 - exec $SHELL $0 $ac_configure_args \$ac_configure_extra_args --no-create --no-recursion -fi - -_ACEOF - - - - - -cat >>$CONFIG_STATUS <<\_ACEOF -for ac_config_target in $ac_config_targets -do - case "$ac_config_target" in - # Handling of arguments. - "Makefile" ) CONFIG_FILES="$CONFIG_FILES Makefile" ;; - "config.h" ) CONFIG_HEADERS="$CONFIG_HEADERS config.h" ;; - *) { { echo "$as_me:$LINENO: error: invalid argument: $ac_config_target" >&5 -echo "$as_me: error: invalid argument: $ac_config_target" >&2;} - { (exit 1); exit 1; }; };; - 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 to put it here, and in addition, -# creating and moving files from /tmp can sometimes cause problems. -# Create a temporary directory, and hook for its removal unless debugging. -$debug || -{ - trap 'exit_status=$?; rm -rf $tmp && exit $exit_status' 0 - trap '{ (exit 1); exit 1; }' 1 2 13 15 -} - -# Create a (secure) tmp directory for tmp files. - -{ - tmp=`(umask 077 && mktemp -d -q "./confstatXXXXXX") 2>/dev/null` && - test -n "$tmp" && test -d "$tmp" -} || -{ - tmp=./confstat$$-$RANDOM - (umask 077 && mkdir $tmp) -} || -{ - echo "$me: cannot create a temporary directory in ." >&2 - { (exit 1); exit 1; } -} - -_ACEOF - -cat >>$CONFIG_STATUS <<_ACEOF - -# -# CONFIG_FILES section. -# - -# No need to generate the scripts if there are no CONFIG_FILES. -# This happens for instance when ./config.status config.h -if test -n "\$CONFIG_FILES"; then - # Protect against being on the right side of a sed subst in config.status. - sed 's/,@/@@/; s/@,/@@/; s/,;t t\$/@;t t/; /@;t t\$/s/[\\\\&,]/\\\\&/g; - s/@@/,@/; s/@@/@,/; s/@;t t\$/,;t t/' >\$tmp/subs.sed <<\\CEOF -s,@SHELL@,$SHELL,;t t -s,@PATH_SEPARATOR@,$PATH_SEPARATOR,;t t -s,@PACKAGE_NAME@,$PACKAGE_NAME,;t t -s,@PACKAGE_TARNAME@,$PACKAGE_TARNAME,;t t -s,@PACKAGE_VERSION@,$PACKAGE_VERSION,;t t -s,@PACKAGE_STRING@,$PACKAGE_STRING,;t t -s,@PACKAGE_BUGREPORT@,$PACKAGE_BUGREPORT,;t t -s,@exec_prefix@,$exec_prefix,;t t -s,@prefix@,$prefix,;t t -s,@program_transform_name@,$program_transform_name,;t t -s,@bindir@,$bindir,;t t -s,@sbindir@,$sbindir,;t t -s,@libexecdir@,$libexecdir,;t t -s,@datadir@,$datadir,;t t -s,@sysconfdir@,$sysconfdir,;t t -s,@sharedstatedir@,$sharedstatedir,;t t -s,@localstatedir@,$localstatedir,;t t -s,@libdir@,$libdir,;t t -s,@includedir@,$includedir,;t t -s,@oldincludedir@,$oldincludedir,;t t -s,@infodir@,$infodir,;t t -s,@mandir@,$mandir,;t t -s,@build_alias@,$build_alias,;t t -s,@host_alias@,$host_alias,;t t -s,@target_alias@,$target_alias,;t t -s,@DEFS@,$DEFS,;t t -s,@ECHO_C@,$ECHO_C,;t t -s,@ECHO_N@,$ECHO_N,;t t -s,@ECHO_T@,$ECHO_T,;t t -s,@LIBS@,$LIBS,;t t -s,@CC@,$CC,;t t -s,@CFLAGS@,$CFLAGS,;t t -s,@LDFLAGS@,$LDFLAGS,;t t -s,@CPPFLAGS@,$CPPFLAGS,;t t -s,@ac_ct_CC@,$ac_ct_CC,;t t -s,@EXEEXT@,$EXEEXT,;t t -s,@OBJEXT@,$OBJEXT,;t t -s,@INSTALL_PROGRAM@,$INSTALL_PROGRAM,;t t -s,@INSTALL_SCRIPT@,$INSTALL_SCRIPT,;t t -s,@INSTALL_DATA@,$INSTALL_DATA,;t t -s,@CPP@,$CPP,;t t -s,@EGREP@,$EGREP,;t t -s,@LOC_NTOA@,$LOC_NTOA,;t t -s,@LIBOBJS@,$LIBOBJS,;t t -s,@LTLIBOBJS@,$LTLIBOBJS,;t t -CEOF - -_ACEOF - - cat >>$CONFIG_STATUS <<\_ACEOF - # Split the substitutions into bite-sized pieces for seds with - # small command number limits, like on Digital OSF/1 and HP-UX. - ac_max_sed_lines=48 - ac_sed_frag=1 # Number of current file. - ac_beg=1 # First line for current file. - ac_end=$ac_max_sed_lines # Line after last line for current file. - ac_more_lines=: - ac_sed_cmds= - while $ac_more_lines; do - if test $ac_beg -gt 1; then - sed "1,${ac_beg}d; ${ac_end}q" $tmp/subs.sed >$tmp/subs.frag - else - sed "${ac_end}q" $tmp/subs.sed >$tmp/subs.frag - fi - if test ! -s $tmp/subs.frag; then - ac_more_lines=false - else - # The purpose of the label and of the branching condition is to - # speed up the sed processing (if there are no `@' at all, there - # is no need to browse any of the substitutions). - # These are the two extra sed commands mentioned above. - (echo ':t - /@[a-zA-Z_][a-zA-Z_0-9]*@/!b' && cat $tmp/subs.frag) >$tmp/subs-$ac_sed_frag.sed - if test -z "$ac_sed_cmds"; then - ac_sed_cmds="sed -f $tmp/subs-$ac_sed_frag.sed" - else - ac_sed_cmds="$ac_sed_cmds | sed -f $tmp/subs-$ac_sed_frag.sed" - fi - ac_sed_frag=`expr $ac_sed_frag + 1` - ac_beg=$ac_end - ac_end=`expr $ac_end + $ac_max_sed_lines` - fi - done - if test -z "$ac_sed_cmds"; then - ac_sed_cmds=cat - fi -fi # test -n "$CONFIG_FILES" - -_ACEOF -cat >>$CONFIG_STATUS <<\_ACEOF -for ac_file in : $CONFIG_FILES; do test "x$ac_file" = x: && continue - # Support "outfile[:infile[:infile...]]", defaulting infile="outfile.in". - case $ac_file in - - | *:- | *:-:* ) # input from stdin - cat >$tmp/stdin - ac_file_in=`echo "$ac_file" | sed 's,[^:]*:,,'` - ac_file=`echo "$ac_file" | sed 's,:.*,,'` ;; - *:* ) ac_file_in=`echo "$ac_file" | sed 's,[^:]*:,,'` - ac_file=`echo "$ac_file" | sed 's,:.*,,'` ;; - * ) ac_file_in=$ac_file.in ;; - esac - - # Compute @srcdir@, @top_srcdir@, and @INSTALL@ for subdirectories. - ac_dir=`(dirname "$ac_file") 2>/dev/null || -$as_expr X"$ac_file" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ - X"$ac_file" : 'X\(//\)[^/]' \| \ - X"$ac_file" : 'X\(//\)$' \| \ - X"$ac_file" : 'X\(/\)' \| \ - . : '\(.\)' 2>/dev/null || -echo X"$ac_file" | - sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/; q; } - /^X\(\/\/\)[^/].*/{ s//\1/; q; } - /^X\(\/\/\)$/{ s//\1/; q; } - /^X\(\/\).*/{ s//\1/; q; } - s/.*/./; q'` - { if $as_mkdir_p; then - mkdir -p "$ac_dir" - else - as_dir="$ac_dir" - as_dirs= - while test ! -d "$as_dir"; do - as_dirs="$as_dir $as_dirs" - as_dir=`(dirname "$as_dir") 2>/dev/null || -$as_expr X"$as_dir" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ - X"$as_dir" : 'X\(//\)[^/]' \| \ - X"$as_dir" : 'X\(//\)$' \| \ - X"$as_dir" : 'X\(/\)' \| \ - . : '\(.\)' 2>/dev/null || -echo X"$as_dir" | - sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/; q; } - /^X\(\/\/\)[^/].*/{ s//\1/; q; } - /^X\(\/\/\)$/{ s//\1/; q; } - /^X\(\/\).*/{ s//\1/; q; } - s/.*/./; q'` - done - test ! -n "$as_dirs" || mkdir $as_dirs - fi || { { echo "$as_me:$LINENO: error: cannot create directory \"$ac_dir\"" >&5 -echo "$as_me: error: cannot create directory \"$ac_dir\"" >&2;} - { (exit 1); exit 1; }; }; } - - ac_builddir=. - -if test "$ac_dir" != .; then - ac_dir_suffix=/`echo "$ac_dir" | sed 's,^\.[\\/],,'` - # A "../" for each directory in $ac_dir_suffix. - ac_top_builddir=`echo "$ac_dir_suffix" | sed 's,/[^\\/]*,../,g'` -else - ac_dir_suffix= ac_top_builddir= -fi - -case $srcdir in - .) # No --srcdir option. We are building in place. - ac_srcdir=. - if test -z "$ac_top_builddir"; then - ac_top_srcdir=. - else - ac_top_srcdir=`echo $ac_top_builddir | sed 's,/$,,'` - fi ;; - [\\/]* | ?:[\\/]* ) # Absolute path. - ac_srcdir=$srcdir$ac_dir_suffix; - ac_top_srcdir=$srcdir ;; - *) # Relative path. - ac_srcdir=$ac_top_builddir$srcdir$ac_dir_suffix - ac_top_srcdir=$ac_top_builddir$srcdir ;; -esac - -# Do not use `cd foo && pwd` to compute absolute paths, because -# the directories may not exist. -case `pwd` in -.) ac_abs_builddir="$ac_dir";; -*) - case "$ac_dir" in - .) ac_abs_builddir=`pwd`;; - [\\/]* | ?:[\\/]* ) ac_abs_builddir="$ac_dir";; - *) ac_abs_builddir=`pwd`/"$ac_dir";; - esac;; -esac -case $ac_abs_builddir in -.) ac_abs_top_builddir=${ac_top_builddir}.;; -*) - case ${ac_top_builddir}. in - .) ac_abs_top_builddir=$ac_abs_builddir;; - [\\/]* | ?:[\\/]* ) ac_abs_top_builddir=${ac_top_builddir}.;; - *) ac_abs_top_builddir=$ac_abs_builddir/${ac_top_builddir}.;; - esac;; -esac -case $ac_abs_builddir in -.) ac_abs_srcdir=$ac_srcdir;; -*) - case $ac_srcdir in - .) ac_abs_srcdir=$ac_abs_builddir;; - [\\/]* | ?:[\\/]* ) ac_abs_srcdir=$ac_srcdir;; - *) ac_abs_srcdir=$ac_abs_builddir/$ac_srcdir;; - esac;; -esac -case $ac_abs_builddir in -.) ac_abs_top_srcdir=$ac_top_srcdir;; -*) - case $ac_top_srcdir in - .) ac_abs_top_srcdir=$ac_abs_builddir;; - [\\/]* | ?:[\\/]* ) ac_abs_top_srcdir=$ac_top_srcdir;; - *) ac_abs_top_srcdir=$ac_abs_builddir/$ac_top_srcdir;; - esac;; -esac - - - case $INSTALL in - [\\/$]* | ?:[\\/]* ) ac_INSTALL=$INSTALL ;; - *) ac_INSTALL=$ac_top_builddir$INSTALL ;; - esac - - # 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. */ - if test x"$ac_file" = x-; then - configure_input= - else - configure_input="$ac_file. " - fi - configure_input=$configure_input"Generated from `echo $ac_file_in | - sed 's,.*/,,'` by configure." - - # First look for the input files in the build tree, otherwise in the - # src tree. - ac_file_inputs=`IFS=: - for f in $ac_file_in; do - case $f in - -) echo $tmp/stdin ;; - [\\/$]*) - # Absolute (can't be DOS-style, as IFS=:) - test -f "$f" || { { echo "$as_me:$LINENO: error: cannot find input file: $f" >&5 -echo "$as_me: error: cannot find input file: $f" >&2;} - { (exit 1); exit 1; }; } - echo "$f";; - *) # Relative - if test -f "$f"; then - # Build tree - echo "$f" - elif test -f "$srcdir/$f"; then - # Source tree - echo "$srcdir/$f" - else - # /dev/null tree - { { echo "$as_me:$LINENO: error: cannot find input file: $f" >&5 -echo "$as_me: error: cannot find input file: $f" >&2;} - { (exit 1); exit 1; }; } - fi;; - esac - done` || { (exit 1); exit 1; } - - if test x"$ac_file" != x-; then - { echo "$as_me:$LINENO: creating $ac_file" >&5 -echo "$as_me: creating $ac_file" >&6;} - rm -f "$ac_file" - fi -_ACEOF -cat >>$CONFIG_STATUS <<_ACEOF - sed "$ac_vpsub -$extrasub -_ACEOF -cat >>$CONFIG_STATUS <<\_ACEOF -:t -/@[a-zA-Z_][a-zA-Z_0-9]*@/!b -s,@configure_input@,$configure_input,;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,@top_builddir@,$ac_top_builddir,;t t -s,@abs_top_builddir@,$ac_abs_top_builddir,;t t -s,@INSTALL@,$ac_INSTALL,;t t -" $ac_file_inputs | (eval "$ac_sed_cmds") >$tmp/out - rm -f $tmp/stdin - if test x"$ac_file" != x-; then - mv $tmp/out $ac_file - else - cat $tmp/out - rm -f $tmp/out - fi - -done -_ACEOF -cat >>$CONFIG_STATUS <<\_ACEOF - -# -# CONFIG_HEADER section. -# - -# These sed commands are passed to sed as "A NAME B NAME C VALUE D", where -# NAME is the cpp macro being defined and VALUE is the value it is being given. -# -# ac_d sets the value in "#define NAME VALUE" lines. -ac_dA='s,^\([ ]*\)#\([ ]*define[ ][ ]*\)' -ac_dB='[ ].*$,\1#\2' -ac_dC=' ' -ac_dD=',;t' -# ac_u turns "#undef NAME" without trailing blanks into "#define NAME VALUE". -ac_uA='s,^\([ ]*\)#\([ ]*\)undef\([ ][ ]*\)' -ac_uB='$,\1#\2define\3' -ac_uC=' ' -ac_uD=',;t' - -for ac_file in : $CONFIG_HEADERS; do test "x$ac_file" = x: && continue - # Support "outfile[:infile[:infile...]]", defaulting infile="outfile.in". - case $ac_file in - - | *:- | *:-:* ) # input from stdin - cat >$tmp/stdin - ac_file_in=`echo "$ac_file" | sed 's,[^:]*:,,'` - ac_file=`echo "$ac_file" | sed 's,:.*,,'` ;; - *:* ) ac_file_in=`echo "$ac_file" | sed 's,[^:]*:,,'` - ac_file=`echo "$ac_file" | sed 's,:.*,,'` ;; - * ) ac_file_in=$ac_file.in ;; - esac - - test x"$ac_file" != x- && { echo "$as_me:$LINENO: creating $ac_file" >&5 -echo "$as_me: creating $ac_file" >&6;} - - # First look for the input files in the build tree, otherwise in the - # src tree. - ac_file_inputs=`IFS=: - for f in $ac_file_in; do - case $f in - -) echo $tmp/stdin ;; - [\\/$]*) - # Absolute (can't be DOS-style, as IFS=:) - test -f "$f" || { { echo "$as_me:$LINENO: error: cannot find input file: $f" >&5 -echo "$as_me: error: cannot find input file: $f" >&2;} - { (exit 1); exit 1; }; } - # Do quote $f, to prevent DOS paths from being IFS'd. - echo "$f";; - *) # Relative - if test -f "$f"; then - # Build tree - echo "$f" - elif test -f "$srcdir/$f"; then - # Source tree - echo "$srcdir/$f" - else - # /dev/null tree - { { echo "$as_me:$LINENO: error: cannot find input file: $f" >&5 -echo "$as_me: error: cannot find input file: $f" >&2;} - { (exit 1); exit 1; }; } - fi;; - esac - done` || { (exit 1); exit 1; } - # Remove the trailing spaces. - sed 's/[ ]*$//' $ac_file_inputs >$tmp/in - -_ACEOF - -# Transform confdefs.h into two sed scripts, `conftest.defines' and -# `conftest.undefs', that substitutes the proper values into -# config.h.in to produce config.h. The first handles `#define' -# templates, and the second `#undef' templates. -# And first: Protect against being on the right side of a sed subst in -# config.status. Protect against being in an unquoted here document -# in config.status. -rm -f conftest.defines conftest.undefs -# Using a here document instead of a string reduces the quoting nightmare. -# Putting comments in sed scripts is not portable. -# -# `end' is used to avoid that the second main sed command (meant for -# 0-ary CPP macros) applies to n-ary macro definitions. -# See the Autoconf documentation for `clear'. -cat >confdef2sed.sed <<\_ACEOF -s/[\\&,]/\\&/g -s,[\\$`],\\&,g -t clear -: clear -s,^[ ]*#[ ]*define[ ][ ]*\([^ (][^ (]*\)\(([^)]*)\)[ ]*\(.*\)$,${ac_dA}\1${ac_dB}\1\2${ac_dC}\3${ac_dD},gp -t end -s,^[ ]*#[ ]*define[ ][ ]*\([^ ][^ ]*\)[ ]*\(.*\)$,${ac_dA}\1${ac_dB}\1${ac_dC}\2${ac_dD},gp -: end -_ACEOF -# If some macros were called several times there might be several times -# the same #defines, which is useless. Nevertheless, we may not want to -# sort them, since we want the *last* AC-DEFINE to be honored. -uniq confdefs.h | sed -n -f confdef2sed.sed >conftest.defines -sed 's/ac_d/ac_u/g' conftest.defines >conftest.undefs -rm -f confdef2sed.sed - -# This sed command replaces #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. -cat >>conftest.undefs <<\_ACEOF -s,^[ ]*#[ ]*undef[ ][ ]*[a-zA-Z_][a-zA-Z_0-9]*,/* & */, -_ACEOF - -# Break up conftest.defines because some shells have a limit on the size -# of here documents, and old seds have small limits too (100 cmds). -echo ' # Handle all the #define templates only if necessary.' >>$CONFIG_STATUS -echo ' if grep "^[ ]*#[ ]*define" $tmp/in >/dev/null; then' >>$CONFIG_STATUS -echo ' # If there are no defines, we may have an empty if/fi' >>$CONFIG_STATUS -echo ' :' >>$CONFIG_STATUS -rm -f conftest.tail -while grep . conftest.defines >/dev/null -do - # Write a limited-size here document to $tmp/defines.sed. - echo ' cat >$tmp/defines.sed <>$CONFIG_STATUS - # Speed up: don't consider the non `#define' lines. - echo '/^[ ]*#[ ]*define/!b' >>$CONFIG_STATUS - # Work around the forget-to-reset-the-flag bug. - echo 't clr' >>$CONFIG_STATUS - echo ': clr' >>$CONFIG_STATUS - sed ${ac_max_here_lines}q conftest.defines >>$CONFIG_STATUS - echo 'CEOF - sed -f $tmp/defines.sed $tmp/in >$tmp/out - rm -f $tmp/in - mv $tmp/out $tmp/in -' >>$CONFIG_STATUS - sed 1,${ac_max_here_lines}d conftest.defines >conftest.tail - rm -f conftest.defines - mv conftest.tail conftest.defines -done -rm -f conftest.defines -echo ' fi # grep' >>$CONFIG_STATUS -echo >>$CONFIG_STATUS - -# Break up conftest.undefs because some shells have a limit on the size -# of here documents, and old seds have small limits too (100 cmds). -echo ' # Handle all the #undef templates' >>$CONFIG_STATUS -rm -f conftest.tail -while grep . conftest.undefs >/dev/null -do - # Write a limited-size here document to $tmp/undefs.sed. - echo ' cat >$tmp/undefs.sed <>$CONFIG_STATUS - # Speed up: don't consider the non `#undef' - echo '/^[ ]*#[ ]*undef/!b' >>$CONFIG_STATUS - # Work around the forget-to-reset-the-flag bug. - echo 't clr' >>$CONFIG_STATUS - echo ': clr' >>$CONFIG_STATUS - sed ${ac_max_here_lines}q conftest.undefs >>$CONFIG_STATUS - echo 'CEOF - sed -f $tmp/undefs.sed $tmp/in >$tmp/out - rm -f $tmp/in - mv $tmp/out $tmp/in -' >>$CONFIG_STATUS - sed 1,${ac_max_here_lines}d conftest.undefs >conftest.tail - rm -f conftest.undefs - mv conftest.tail conftest.undefs -done -rm -f conftest.undefs - -cat >>$CONFIG_STATUS <<\_ACEOF - # 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. */ - if test x"$ac_file" = x-; then - echo "/* Generated by configure. */" >$tmp/config.h - else - echo "/* $ac_file. Generated by configure. */" >$tmp/config.h - fi - cat $tmp/in >>$tmp/config.h - rm -f $tmp/in - if test x"$ac_file" != x-; then - if diff $ac_file $tmp/config.h >/dev/null 2>&1; then - { echo "$as_me:$LINENO: $ac_file is unchanged" >&5 -echo "$as_me: $ac_file is unchanged" >&6;} - else - ac_dir=`(dirname "$ac_file") 2>/dev/null || -$as_expr X"$ac_file" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ - X"$ac_file" : 'X\(//\)[^/]' \| \ - X"$ac_file" : 'X\(//\)$' \| \ - X"$ac_file" : 'X\(/\)' \| \ - . : '\(.\)' 2>/dev/null || -echo X"$ac_file" | - sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/; q; } - /^X\(\/\/\)[^/].*/{ s//\1/; q; } - /^X\(\/\/\)$/{ s//\1/; q; } - /^X\(\/\).*/{ s//\1/; q; } - s/.*/./; q'` - { if $as_mkdir_p; then - mkdir -p "$ac_dir" - else - as_dir="$ac_dir" - as_dirs= - while test ! -d "$as_dir"; do - as_dirs="$as_dir $as_dirs" - as_dir=`(dirname "$as_dir") 2>/dev/null || -$as_expr X"$as_dir" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ - X"$as_dir" : 'X\(//\)[^/]' \| \ - X"$as_dir" : 'X\(//\)$' \| \ - X"$as_dir" : 'X\(/\)' \| \ - . : '\(.\)' 2>/dev/null || -echo X"$as_dir" | - sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/; q; } - /^X\(\/\/\)[^/].*/{ s//\1/; q; } - /^X\(\/\/\)$/{ s//\1/; q; } - /^X\(\/\).*/{ s//\1/; q; } - s/.*/./; q'` - done - test ! -n "$as_dirs" || mkdir $as_dirs - fi || { { echo "$as_me:$LINENO: error: cannot create directory \"$ac_dir\"" >&5 -echo "$as_me: error: cannot create directory \"$ac_dir\"" >&2;} - { (exit 1); exit 1; }; }; } - - rm -f $ac_file - mv $tmp/config.h $ac_file - fi - else - cat $tmp/config.h - rm -f $tmp/config.h - fi -done -_ACEOF - -cat >>$CONFIG_STATUS <<\_ACEOF - -{ (exit 0); exit 0; } -_ACEOF -chmod +x $CONFIG_STATUS -ac_clean_files=$ac_clean_files_save - - -# 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 || { (exit 1); exit 1; } -fi - - - - diff --git a/contrib/query-loc-0.3.0/configure.in b/contrib/query-loc-0.3.0/configure.in deleted file mode 100644 index f25a6a25..00000000 --- a/contrib/query-loc-0.3.0/configure.in +++ /dev/null @@ -1,65 +0,0 @@ -dnl Process this file with autoconf to produce a configure script. -AC_RELEASE("$Id: configure.in,v 1.1 2005/04/01 05:35:00 marka Exp $") -AC_INIT(query-loc.c) - -dnl Checks for programs. -AC_PROG_CC -if test "$GCC" = "yes"; then - CFLAGS="${CFLAGS} -Wall" -fi -AC_PROG_INSTALL - -dnl Checks for libraries. -AC_CHECK_LIB(resolv, res_query) - -dnl Checks for header files. -AC_HEADER_STDC -AC_CONFIG_HEADER(config.h) -AC_CHECK_HEADER(resolv.h, , AC_MSG_ERROR("No headers for name service applications")) -AC_CHECK_HEADER(arpa/nameser.h, , AC_MSG_ERROR("No headers for name service applications")) -AC_CHECK_HEADER(sys/time.h, , AC_MSG_ERROR("Mandatory header missing on your system")) -AC_CHECK_HEADER(unistd.h, , AC_MSG_ERROR("Mandatory header missing on your system")) - - -dnl This one is only useful for Solaris? -AC_MSG_CHECKING(if libnsl is mandatory) -AC_TRY_LINK([#include - #include - #include - #include - union - { - HEADER hdr; - u_char buf[4096]; /* With RFC 2671, otherwise 512 is enough */ - } - response; - char *domain; - int requested_type; ], - [res_query(domain, - C_IN, - requested_type, - (u_char *) & response, - sizeof (response)) ], dnl - [AC_MSG_RESULT(no)], dnl - [AC_MSG_RESULT(yes); LIBS="${LIBS} -lnsl"]) - -dnl Check for the loc_ntoa macro/function -AC_MSG_CHECKING(loc_ntoa) -AC_TRY_LINK([#include ], dnl - [u_char *cp; char *result; loc_ntoa(cp, result)], dnl - [AC_MSG_RESULT(yes); AC_DEFINE(HAVE_LOC_NTOA)], dnl - [AC_MSG_RESULT([no, using the alternative]); LOC_NTOA=loc_ntoa.o]) -AC_SUBST(LOC_NTOA) - -dnl Checks for typedefs, structures, and compiler characteristics. -AC_C_CONST -AC_CHECK_SIZEOF(long) -AC_CHECK_SIZEOF(int) -AC_CHECK_SIZEOF(short) -AC_CHECK_SIZEOF(char) - -dnl Misc. -AC_OUTPUT(Makefile) - - - diff --git a/contrib/query-loc-0.3.0/install-sh b/contrib/query-loc-0.3.0/install-sh deleted file mode 100755 index e9de2384..00000000 --- a/contrib/query-loc-0.3.0/install-sh +++ /dev/null @@ -1,251 +0,0 @@ -#!/bin/sh -# -# install - install a program, script, or datafile -# This comes from X11R5 (mit/util/scripts/install.sh). -# -# Copyright 1991 by the Massachusetts Institute of Technology -# -# Permission to use, copy, modify, distribute, and sell this software and its -# documentation for any purpose is hereby granted without fee, provided that -# the above copyright notice appear in all copies and that both that -# copyright notice and this permission notice appear in supporting -# documentation, and that the name of M.I.T. not be used in advertising or -# publicity pertaining to distribution of the software without specific, -# written prior permission. M.I.T. makes no representations about the -# suitability of this software for any purpose. It is provided "as is" -# without express or implied warranty. -# -# 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. It can only install one file at a time, a restriction -# shared with many OS's install programs. - - -# set DOITPROG to echo to test this script - -# Don't use :- since 4.3BSD and earlier shells don't like it. -doit="${DOITPROG-}" - - -# put in absolute paths if you don't have them in your path; or use env. 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}" - -transformbasename="" -transform_arg="" -instcmd="$mvprog" -chmodcmd="$chmodprog 0755" -chowncmd="" -chgrpcmd="" -stripcmd="" -rmcmd="$rmprog -f" -mvcmd="$mvprog" -src="" -dst="" -dir_arg="" - -while [ x"$1" != x ]; do - case $1 in - -c) instcmd="$cpprog" - shift - continue;; - - -d) dir_arg=true - shift - continue;; - - -m) chmodcmd="$chmodprog $2" - shift - shift - continue;; - - -o) chowncmd="$chownprog $2" - shift - shift - continue;; - - -g) chgrpcmd="$chgrpprog $2" - shift - shift - continue;; - - -s) stripcmd="$stripprog" - shift - continue;; - - -t=*) transformarg=`echo $1 | sed 's/-t=//'` - shift - continue;; - - -b=*) transformbasename=`echo $1 | sed 's/-b=//'` - shift - continue;; - - *) if [ x"$src" = x ] - then - src=$1 - else - # this colon is to work around a 386BSD /bin/sh bug - : - dst=$1 - fi - shift - continue;; - esac -done - -if [ x"$src" = x ] -then - echo "install: no input file specified" - exit 1 -else - true -fi - -if [ x"$dir_arg" != x ]; then - dst=$src - src="" - - if [ -d $dst ]; then - instcmd=: - chmodcmd="" - else - instcmd=mkdir - fi -else - -# Waiting for this to be detected by the "$instcmd $src $dsttmp" command -# might cause directories to be created, which would be especially bad -# if $src (and thus $dsttmp) contains '*'. - - if [ -f $src -o -d $src ] - then - true - else - echo "install: $src does not exist" - exit 1 - fi - - if [ x"$dst" = x ] - then - echo "install: no destination specified" - exit 1 - else - true - fi - -# If destination is a directory, append the input filename; if your system -# does not like double slashes in filenames, you may need to add some logic - - if [ -d $dst ] - then - dst="$dst"/`basename $src` - else - true - fi -fi - -## this sed command emulates the dirname command -dstdir=`echo $dst | sed -e 's,[^/]*$,,;s,/$,,;s,^$,.,'` - -# Make sure that the destination directory exists. -# this part is taken from Noah Friedman's mkinstalldirs script - -# Skip lots of stat calls in the usual case. -if [ ! -d "$dstdir" ]; then -defaultIFS=' -' -IFS="${IFS-${defaultIFS}}" - -oIFS="${IFS}" -# Some sh's can't handle IFS=/ for some reason. -IFS='%' -set - `echo ${dstdir} | sed -e 's@/@%@g' -e 's@^%@/@'` -IFS="${oIFS}" - -pathcomp='' - -while [ $# -ne 0 ] ; do - pathcomp="${pathcomp}${1}" - shift - - if [ ! -d "${pathcomp}" ] ; - then - $mkdirprog "${pathcomp}" - else - true - fi - - pathcomp="${pathcomp}/" -done -fi - -if [ x"$dir_arg" != x ] -then - $doit $instcmd $dst && - - if [ x"$chowncmd" != x ]; then $doit $chowncmd $dst; else true ; fi && - if [ x"$chgrpcmd" != x ]; then $doit $chgrpcmd $dst; else true ; fi && - if [ x"$stripcmd" != x ]; then $doit $stripcmd $dst; else true ; fi && - if [ x"$chmodcmd" != x ]; then $doit $chmodcmd $dst; else true ; fi -else - -# If we're going to rename the final executable, determine the name now. - - if [ x"$transformarg" = x ] - then - dstfile=`basename $dst` - else - dstfile=`basename $dst $transformbasename | - sed $transformarg`$transformbasename - fi - -# don't allow the sed command to completely eliminate the filename - - if [ x"$dstfile" = x ] - then - dstfile=`basename $dst` - else - true - fi - -# Make a temp file name in the proper directory. - - dsttmp=$dstdir/#inst.$$# - -# Move or copy the file name to the temp name - - $doit $instcmd $src $dsttmp && - - trap "rm -f ${dsttmp}" 0 && - -# 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 $instcmd $src $dsttmp" command. - - if [ x"$chowncmd" != x ]; then $doit $chowncmd $dsttmp; else true;fi && - if [ x"$chgrpcmd" != x ]; then $doit $chgrpcmd $dsttmp; else true;fi && - if [ x"$stripcmd" != x ]; then $doit $stripcmd $dsttmp; else true;fi && - if [ x"$chmodcmd" != x ]; then $doit $chmodcmd $dsttmp; else true;fi && - -# Now rename the file to the real destination. - - $doit $rmcmd -f $dstdir/$dstfile && - $doit $mvcmd $dsttmp $dstdir/$dstfile - -fi && - - -exit 0 diff --git a/contrib/query-loc-0.3.0/loc.c b/contrib/query-loc-0.3.0/loc.c deleted file mode 100644 index 502ed11b..00000000 --- a/contrib/query-loc-0.3.0/loc.c +++ /dev/null @@ -1,566 +0,0 @@ -#include "loc.h" - -/* $Id: loc.c,v 1.1 2005/04/01 05:35:00 marka Exp $ */ - -/* Global variables */ - -short rr_errno; - -/* - Prints the actual usage - */ -void -usage () -{ - (void) fprintf (stderr, - "Usage: %s: [-v] [-d nnn] hostname\n", progname); - exit (2); -} - -/* - Panics - */ -void -panic (message) - char *message; -{ - (void) fprintf (stderr, - "%s: %s\n", progname, message); - exit (2); -} - -/* - ** IN_ADDR_ARPA -- Convert dotted quad string to reverse in-addr.arpa - ** ------------------------------------------------------------------ - ** - ** Returns: - ** Pointer to appropriate reverse in-addr.arpa name - ** with trailing dot to force absolute domain name. - ** NULL in case of invalid dotted quad input string. - */ - -#ifndef ARPA_ROOT -#define ARPA_ROOT "in-addr.arpa" -#endif - -char * -in_addr_arpa (dottedquad) - char *dottedquad; /* input string with dotted quad */ -{ - static char addrbuf[4 * 4 + sizeof (ARPA_ROOT) + 2]; - unsigned int a[4]; - register int n; - - n = sscanf (dottedquad, "%u.%u.%u.%u", &a[0], &a[1], &a[2], &a[3]); - switch (n) - { - case 4: - (void) sprintf (addrbuf, "%u.%u.%u.%u.%s.", - a[3] & 0xff, a[2] & 0xff, a[1] & 0xff, a[0] & 0xff, ARPA_ROOT); - break; - - case 3: - (void) sprintf (addrbuf, "%u.%u.%u.%s.", - a[2] & 0xff, a[1] & 0xff, a[0] & 0xff, ARPA_ROOT); - break; - - case 2: - (void) sprintf (addrbuf, "%u.%u.%s.", - a[1] & 0xff, a[0] & 0xff, ARPA_ROOT); - break; - - case 1: - (void) sprintf (addrbuf, "%u.%s.", - a[0] & 0xff, ARPA_ROOT); - break; - - default: - return (NULL); - } - - while (--n >= 0) - if (a[n] > 255) - return (NULL); - - return (addrbuf); -} - -/* - Returns a human-readable version of the LOC information or - NULL if it failed. Argument is a name (of a network or a machine) - and a boolean telling is it is a network name or a machine name. - */ -char * -getlocbyname (name, is_network) - const char *name; - short is_network; -{ - char *result; - struct list_in_addr *list, *p; - result = findRR (name, T_LOC); - if (result != NULL) - { - if (debug >= 2) - printf ("LOC record found for the name %s\n", name); - return result; - } - else - { - if (!is_network) - { - list = findA (name); - if (debug >= 2) - printf ("No LOC record found for the name %s, trying addresses\n", name); - if (list != NULL) - { - for (p = list; p != NULL; p = p->next) - { - if (debug >= 2) - printf ("Trying address %s\n", inet_ntoa (p->addr)); - result = getlocbyaddr (p->addr, NULL); - if (result != NULL) - return result; - } - return NULL; - } - else - { - if (debug >= 2) - printf (" No A record found for %s\n", name); - return NULL; - } - } - else - { - if (debug >= 2) - printf ("No LOC record found for the network name %s\n", name); - return NULL; - } - } -} - -/* - Returns a human-readable version of the LOC information or - NULL if it failed. Argument is an IP address. - */ -char * -getlocbyaddr (addr, mask) - const struct in_addr addr; - const struct in_addr *mask; -{ - struct in_addr netaddr; - u_int32_t a; - struct in_addr themask; - char *text_addr, *text_mask; - - if (mask == NULL) - { - themask.s_addr = (u_int32_t) 0; - } - else - { - themask = *mask; - } - - text_addr = (char *) malloc (256); - text_mask = (char *) malloc (256); - strcpy (text_addr, inet_ntoa (addr)); - strcpy (text_mask, inet_ntoa (themask)); - - if (debug >= 2) - printf ("Testing address %s/%s\n", text_addr, text_mask); - if (mask == NULL) - { - a = ntohl (addr.s_addr); - if (IN_CLASSA (a)) - { - netaddr.s_addr = htonl (a & IN_CLASSA_NET); - } - else if (IN_CLASSB (a)) - { - netaddr.s_addr = htonl (a & IN_CLASSB_NET); - } - else if (IN_CLASSC (a)) - { - netaddr.s_addr = htonl (a & IN_CLASSC_NET); - } - else - { - /* Error */ - } - return getlocbynet (in_addr_arpa (inet_ntoa (netaddr)), addr, mask); - } - else - { - netaddr.s_addr = addr.s_addr & themask.s_addr; - return getlocbynet (in_addr_arpa (inet_ntoa (netaddr)), addr, mask); - } -} - -/* - Returns a human-readable LOC. - Argument is a network name in the 0.z.y.x.in-addr.arpa format - and the original address - */ -char * -getlocbynet (name, addr, mask) - char *name; - struct in_addr addr; - struct in_addr *mask; -{ - char *network; - char *result, *result_int; - struct list_in_addr *list; - if (debug >= 2) - printf ("Testing network %s\n", name); - network = findRR (name, T_PTR); - if (network == NULL) - { - if (debug >= 2) - printf ("No name for network %s\n", name); - return NULL; - } - else - { - result = getlocbyname (network, TRUE); - list = findA (network); - if (list == NULL) - { - return result; - } - else if ((mask != NULL) && - ((mask->s_addr) == (list->addr.s_addr))) - { - /* Already checked */ - return result; - } - else - { - result_int = getlocbyaddr (addr, &list->addr); - if (result_int == NULL) - return result; - else - return result_int; - } - } -} - -/* - The code for these two functions is stolen from the examples in Liu and Albitz - book "DNS and BIND" (O'Reilly). - */ - -/**************************************************************** - * skipName -- This routine skips over a domain name. If the * - * domain name expansion fails, it crashes. * - * dn_skipname() is probably not on your manual * - * page; it is similar to dn_expand() except that it just * - * skips over the name. dn_skipname() is in res_comp.c if * - * you need to find it. * - ****************************************************************/ -int -skipName (cp, endOfMsg) - u_char *cp; - u_char *endOfMsg; -{ - int n; - - if ((n = dn_skipname (cp, endOfMsg)) < 0) - { - panic ("dn_skipname failed\n"); - } - return (n); -} - -/**************************************************************** - * skipToData -- This routine advances the cp pointer to the * - * start of the resource record data portion. On the way, * - * it fills in the type, class, ttl, and data length * - ****************************************************************/ -int -skipToData (cp, type, class, ttl, dlen, endOfMsg) - u_char *cp; - u_short *type; - u_short *class; - u_int32_t *ttl; - u_short *dlen; - u_char *endOfMsg; -{ - u_char *tmp_cp = cp; /* temporary version of cp */ - - /* Skip the domain name; it matches the name we looked up */ - tmp_cp += skipName (tmp_cp, endOfMsg); - - /* - * Grab the type, class, and ttl. GETSHORT and GETLONG - * are macros defined in arpa/nameser.h. - */ - GETSHORT (*type, tmp_cp); - GETSHORT (*class, tmp_cp); - GETLONG (*ttl, tmp_cp); - GETSHORT (*dlen, tmp_cp); - - return (tmp_cp - cp); -} - - -/* - Returns a human-readable version of a DNS RR (resource record) - associated with the name 'domain'. - If it does not find, ir returns NULL and sets rr_errno to explain why. - - The code for this function is stolen from the examples in Liu and Albitz - book "DNS and BIND" (O'Reilly). - */ -char * -findRR (domain, requested_type) - char *domain; - int requested_type; -{ - char *result, *message; - - union - { - HEADER hdr; /* defined in resolv.h */ - u_char buf[PACKETSZ]; /* defined in arpa/nameser.h */ - } - response; /* response buffers */ -short found = 0; -int responseLen; /* buffer length */ - - u_char *cp; /* character pointer to parse DNS packet */ - u_char *endOfMsg; /* need to know the end of the message */ - u_short class; /* classes defined in arpa/nameser.h */ - u_short type; /* types defined in arpa/nameser.h */ - u_int32_t ttl; /* resource record time to live */ - u_short dlen; /* size of resource record data */ - - int i, count, dup; /* misc variables */ - - char *ptrList[1]; - int ptrNum = 0; - struct in_addr addr; - - result = (char *) malloc (256); - message = (char *) malloc (256); - /* - * Look up the records for the given domain name. - * We expect the domain to be a fully qualified name, so - * we use res_query(). If we wanted the resolver search - * algorithm, we would have used res_search() instead. - */ - if ((responseLen = - res_query (domain, /* the domain we care about */ - C_IN, /* Internet class records */ - requested_type, /* Look up name server records */ - (u_char *) & response, /*response buffer */ - sizeof (response))) /*buffer size */ - < 0) - { /*If negative */ - rr_errno = h_errno; - return NULL; - } - - /* - * Keep track of the end of the message so we don't - * pass it while parsing the response. responseLen is - * the value returned by res_query. - */ - endOfMsg = response.buf + responseLen; - - /* - * Set a pointer to the start of the question section, - * which begins immediately AFTER the header. - */ - cp = response.buf + sizeof (HEADER); - - /* - * Skip over the whole question section. The question - * section is comprised of a name, a type, and a class. - * QFIXEDSZ (defined in arpa/nameser.h) is the size of - * the type and class portions, which is fixed. Therefore, - * we can skip the question section by skipping the - * name (at the beginning) and then advancing QFIXEDSZ. - * After this calculation, cp points to the start of the - * answer section, which is a list of NS records. - */ - cp += skipName (cp, endOfMsg) + QFIXEDSZ; - - count = ntohs (response.hdr.ancount) + - ntohs (response.hdr.nscount); - while ((--count >= 0) /* still more records */ - && (cp < endOfMsg)) - { /* still inside the packet */ - - - /* Skip to the data portion of the resource record */ - cp += skipToData (cp, &type, &class, &ttl, &dlen, endOfMsg); - - if (type == requested_type) - { - switch (requested_type) - { - case (T_LOC): - loc_ntoa (cp, result); - return result; - break; - case (T_PTR): - ptrList[ptrNum] = (char *) malloc (MAXDNAME); - if (ptrList[ptrNum] == NULL) - { - panic ("Malloc failed"); - } - - if (dn_expand (response.buf, /* Start of the packet */ - endOfMsg, /* End of the packet */ - cp, /* Position in the packet */ - (u_char *) ptrList[ptrNum], /* Result */ - MAXDNAME) /* size of ptrList buffer */ - < 0) - { /* Negative: error */ - panic ("dn_expand failed"); - } - - /* - * Check the name we've just unpacked and add it to - * the list if it is not a duplicate. - * If it is a duplicate, just ignore it. - */ - for (i = 0, dup = 0; (i < ptrNum) && !dup; i++) - dup = !strcasecmp (ptrList[i], ptrList[ptrNum]); - if (dup) - free (ptrList[ptrNum]); - else - ptrNum++; - strcpy (result, ptrList[0]); - return result; - break; - case (T_A): - bcopy ((char *) cp, (char *) &addr, INADDRSZ); - strcat (result, " "); - strcat (result, inet_ntoa (addr)); - found = 1; - break; - default: - sprintf (message, "Unexpected type %u", requested_type); - panic (message); - } - } - - /* Advance the pointer over the resource record data */ - cp += dlen; - - } /* end of while */ - if (found) - return result; -else -return NULL; -} - -struct list_in_addr * -findA (domain) - char *domain; -{ - - struct list_in_addr *result, *end; - - union - { - HEADER hdr; /* defined in resolv.h */ - u_char buf[PACKETSZ]; /* defined in arpa/nameser.h */ - } - response; /* response buffers */ - int responseLen; /* buffer length */ - - u_char *cp; /* character pointer to parse DNS packet */ - u_char *endOfMsg; /* need to know the end of the message */ - u_short class; /* classes defined in arpa/nameser.h */ - u_short type; /* types defined in arpa/nameser.h */ - u_int32_t ttl; /* resource record time to live */ - u_short dlen; /* size of resource record data */ - - int count; /* misc variables */ - - struct in_addr addr; - - end = NULL; - result = NULL; - - /* - * Look up the records for the given domain name. - * We expect the domain to be a fully qualified name, so - * we use res_query(). If we wanted the resolver search - * algorithm, we would have used res_search() instead. - */ - if ((responseLen = - res_query (domain, /* the domain we care about */ - C_IN, /* Internet class records */ - T_A, - (u_char *) & response, /*response buffer */ - sizeof (response))) /*buffer size */ - < 0) - { /*If negative */ - rr_errno = h_errno; - return NULL; - } - - /* - * Keep track of the end of the message so we don't - * pass it while parsing the response. responseLen is - * the value returned by res_query. - */ - endOfMsg = response.buf + responseLen; - - /* - * Set a pointer to the start of the question section, - * which begins immediately AFTER the header. - */ - cp = response.buf + sizeof (HEADER); - - /* - * Skip over the whole question section. The question - * section is comprised of a name, a type, and a class. - * QFIXEDSZ (defined in arpa/nameser.h) is the size of - * the type and class portions, which is fixed. Therefore, - * we can skip the question section by skipping the - * name (at the beginning) and then advancing QFIXEDSZ. - * After this calculation, cp points to the start of the - * answer section, which is a list of NS records. - */ - cp += skipName (cp, endOfMsg) + QFIXEDSZ; - - count = ntohs (response.hdr.ancount) + - ntohs (response.hdr.nscount); - while ((--count >= 0) /* still more records */ - && (cp < endOfMsg)) - { /* still inside the packet */ - - - /* Skip to the data portion of the resource record */ - cp += skipToData (cp, &type, &class, &ttl, &dlen, endOfMsg); - - if (type == T_A) - { - bcopy ((char *) cp, (char *) &addr, INADDRSZ); - if (end == NULL) - { - result = (void *) malloc (sizeof (struct list_in_addr)); - result->addr = addr; - result->next = NULL; - end = result; - } - else - { - end->next = (void *) malloc (sizeof (struct list_in_addr)); - end = end->next; - end->addr = addr; - end->next = NULL; - } - } - - /* Advance the pointer over the resource record data */ - cp += dlen; - - } /* end of while */ - return result; -} diff --git a/contrib/query-loc-0.3.0/loc.h b/contrib/query-loc-0.3.0/loc.h deleted file mode 100644 index f794acbe..00000000 --- a/contrib/query-loc-0.3.0/loc.h +++ /dev/null @@ -1,78 +0,0 @@ -/* $Id: loc.h,v 1.1 2005/04/01 05:35:00 marka Exp $ */ - -#define VERSION "0.3.0" - -#include "config.h" - -/* Probably too many inclusions but this is to keep 'gcc -Wall' happy... */ -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include - -#ifndef FALSE -#define FALSE 0 -#endif -#ifndef TRUE -#define TRUE 1 -#endif - -#if SIZEOF_LONG == 4 -#define u_int32_t unsigned long -#ifndef int32_t -#define int32_t long -#endif -#else -#define u_int32_t unsigned int -#ifndef int32_t -#define int32_t int -#endif -#endif - -#if SIZEOF_CHAR == 1 -#define u_int8_t unsigned char -#ifndef int8_t -#define int8_t char -#endif -#else -#if SIZEOF_SHORT == 1 -#define u_int8_t unsigned short -#ifndef int8_t -#define int8_t short -#endif -#else -#error "No suitable native type for storing bytes" -#endif -#endif - -#ifndef INADDR_NONE -#define INADDR_NONE (in_addr_t)-1 -#endif - -struct list_in_addr - { - struct in_addr addr; - void *next; - }; - -void usage (); -void panic (); - -char *getlocbyname (); -char *getlocbyaddr (); -char *getlocbynet (); -char *findRR (); -struct list_in_addr *findA (); - -extern char *progname; -extern short debug; diff --git a/contrib/query-loc-0.3.0/loc_ntoa.c b/contrib/query-loc-0.3.0/loc_ntoa.c deleted file mode 100644 index 21eada3e..00000000 --- a/contrib/query-loc-0.3.0/loc_ntoa.c +++ /dev/null @@ -1,248 +0,0 @@ -/* Stolen from BIND */ - -/* - * Copyright (c) 1985 - * The Regents of the University of California. All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * 1. Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in the - * documentation and/or other materials provided with the distribution. - * 3. All advertising materials mentioning features or use of this software - * must display the following acknowledgement: - * This product includes software developed by the University of - * California, Berkeley and its contributors. - * 4. Neither the name of the University 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 REGENTS 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 REGENTS 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. - */ - -/* - * Portions Copyright (c) 1993 by Digital Equipment Corporation. - * - * 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, and that - * the name of Digital Equipment Corporation not be used in advertising or - * publicity pertaining to distribution of the document or software without - * specific, written prior permission. - * - * THE SOFTWARE IS PROVIDED "AS IS" AND DIGITAL EQUIPMENT CORP. DISCLAIMS ALL - * WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES - * OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL DIGITAL EQUIPMENT - * CORPORATION BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL - * DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR - * PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS - * ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS - * SOFTWARE. - */ - -/* - * Portions Copyright (c) 1995 by International Business Machines, Inc. - * - * International Business Machines, Inc. (hereinafter called IBM) grants - * permission under its copyrights to use, copy, modify, and distribute this - * Software with or without fee, provided that the above copyright notice and - * all paragraphs of this notice appear in all copies, and that the name of IBM - * not be used in connection with the marketing of any product incorporating - * the Software or modifications thereof, without specific, written prior - * permission. - * - * To the extent it has a right to do so, IBM grants an immunity from suit - * under its patents, if any, for the use, sale or manufacture of products to - * the extent that such products are used for performing Domain Name System - * dynamic updates in TCP/IP networks by means of the Software. No immunity is - * granted for any product per se or for any other function of any product. - * - * THE SOFTWARE IS PROVIDED "AS IS", AND IBM DISCLAIMS ALL WARRANTIES, - * INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A - * PARTICULAR PURPOSE. IN NO EVENT SHALL IBM BE LIABLE FOR ANY SPECIAL, - * DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER ARISING - * OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE, EVEN - * IF IBM IS APPRISED OF THE POSSIBILITY OF SUCH DAMAGES. - */ - -/* - * Portions Copyright (c) 1996-1999 by Internet Software Consortium. - * - * 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" AND INTERNET SOFTWARE CONSORTIUM DISCLAIMS - * ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES - * OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL INTERNET SOFTWARE - * CONSORTIUM BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL - * DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR - * PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS - * ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS - * SOFTWARE. - */ - -#include -#include -#include - -#include -#include -#include - -#include -#include -#include -#include -#include -#include -#include -#include -#include - -#include "loc.h" - -const char *precsize_ntoa(); - -/* takes an on-the-wire LOC RR and formats it in a human readable format. */ -const char * -loc_ntoa(binary, ascii) - const u_char *binary; - char *ascii; -{ - static char *error = "?"; - static char tmpbuf[sizeof -"1000 60 60.000 N 1000 60 60.000 W -12345678.00m 90000000.00m 90000000.00m 90000000.00m"]; - const u_char *cp = binary; - - int latdeg, latmin, latsec, latsecfrac; - int longdeg, longmin, longsec, longsecfrac; - char northsouth, eastwest; - int altmeters, altfrac, altsign; - - const u_int32_t referencealt = 100000 * 100; - - int32_t latval, longval, altval; - u_int32_t templ; - u_int8_t sizeval, hpval, vpval, versionval; - - char *sizestr, *hpstr, *vpstr; - - versionval = *cp++; - - if (ascii == NULL) - ascii = tmpbuf; - - if (versionval) { - (void) sprintf(ascii, "; error: unknown LOC RR version"); - return (ascii); - } - - sizeval = *cp++; - - hpval = *cp++; - vpval = *cp++; - - GETLONG(templ, cp); - latval = (templ - ((unsigned)1<<31)); - - GETLONG(templ, cp); - longval = (templ - ((unsigned)1<<31)); - - GETLONG(templ, cp); - if (templ < referencealt) { /* below WGS 84 spheroid */ - altval = referencealt - templ; - altsign = -1; - } else { - altval = templ - referencealt; - altsign = 1; - } - - if (latval < 0) { - northsouth = 'S'; - latval = -latval; - } else - northsouth = 'N'; - - latsecfrac = latval % 1000; - latval = latval / 1000; - latsec = latval % 60; - latval = latval / 60; - latmin = latval % 60; - latval = latval / 60; - latdeg = latval; - - if (longval < 0) { - eastwest = 'W'; - longval = -longval; - } else - eastwest = 'E'; - - longsecfrac = longval % 1000; - longval = longval / 1000; - longsec = longval % 60; - longval = longval / 60; - longmin = longval % 60; - longval = longval / 60; - longdeg = longval; - - altfrac = altval % 100; - altmeters = (altval / 100) * altsign; - - if ((sizestr = strdup(precsize_ntoa(sizeval))) == NULL) - sizestr = error; - if ((hpstr = strdup(precsize_ntoa(hpval))) == NULL) - hpstr = error; - if ((vpstr = strdup(precsize_ntoa(vpval))) == NULL) - vpstr = error; - - sprintf(ascii, - "%d %.2d %.2d.%.3d %c %d %.2d %.2d.%.3d %c %d.%.2dm %sm %sm %sm", - latdeg, latmin, latsec, latsecfrac, northsouth, - longdeg, longmin, longsec, longsecfrac, eastwest, - altmeters, altfrac, sizestr, hpstr, vpstr); - - if (sizestr != error) - free(sizestr); - if (hpstr != error) - free(hpstr); - if (vpstr != error) - free(vpstr); - - return (ascii); -} - -static unsigned int poweroften[10] = {1, 10, 100, 1000, 10000, 100000, - 1000000,10000000,100000000,1000000000}; - -/* takes an XeY precision/size value, returns a string representation. */ -const char * -precsize_ntoa(prec) - u_int8_t prec; -{ - static char retbuf[sizeof "90000000.00"]; /* XXX nonreentrant */ - unsigned long val; - int mantissa, exponent; - - mantissa = (int)((prec >> 4) & 0x0f) % 10; - exponent = (int)((prec >> 0) & 0x0f) % 10; - - val = mantissa * poweroften[exponent]; - - (void) sprintf(retbuf, "%ld.%.2ld", val/100, val%100); - return (retbuf); -} - diff --git a/contrib/query-loc-0.3.0/query-loc.1 b/contrib/query-loc-0.3.0/query-loc.1 deleted file mode 100644 index 97eb4362..00000000 --- a/contrib/query-loc-0.3.0/query-loc.1 +++ /dev/null @@ -1,55 +0,0 @@ -.\" Hey, EMACS: -*- nroff -*- -.\" First parameter, NAME, should be all caps -.\" Second parameter, SECTION, should be 1-8, maybe w/ subsection -.\" other parameters are allowed: see man(7), man(1) -.TH QUERY-LOC SECTION "January 11, 2005" -.\" Please adjust this date whenever revising the manpage. -.\" -.\" Some roff macros, for reference: -.\" .nh disable hyphenation -.\" .hy enable hyphenation -.\" .ad l left justify -.\" .ad b justify to both left and right margins -.\" .nf disable filling -.\" .fi enable filling -.\" .br insert line break -.\" .sp insert n+1 empty lines -.\" for manpage-specific macros, see man(7) -.SH NAME -query-loc \- to retrieve and display the location information in the DNS -.SH SYNOPSIS -.B query-loc -.RI [-v] [-d nnn] " host" -.SH DESCRIPTION -This manual page documents briefly the -.B query-loc -command. -.PP -.\" TeX users may be more comfortable with the \fB\fP and -.\" \fI\fP escape sequences to invode bold face and italics, -.\" respectively. -\fBquery-loc\fP is a program to retrieve and display the location -information in the DNS. - -It uses the algorithms described in -RFC 1876 (and RFC 1101 to get the network names). -You can find examples of networks wchich implement this scheme -in the ADDRESSES file. - -.SH OPTIONS -.TP -.B \-v -Verbose mode. -.TP -.B \-d nnn -Debug mode. Displays the RFC's algorithm - -.SH BUGS - -Very few hosts have location information. - -.SH AUTHOR -This manual page was written by Stephane Bortzmeyer -. - -.\" $Id: query-loc.1,v 1.1 2005/04/01 05:35:01 marka Exp $ diff --git a/contrib/query-loc-0.3.0/query-loc.c b/contrib/query-loc-0.3.0/query-loc.c deleted file mode 100644 index 6af57d42..00000000 --- a/contrib/query-loc-0.3.0/query-loc.c +++ /dev/null @@ -1,98 +0,0 @@ -#include "loc.h" - -/* $Id: query-loc.c,v 1.1 2005/04/01 05:35:01 marka Exp $ */ - -/* Global variables */ -char *progname; -short debug; - -int -main (argc, argv) - int argc; - char *argv[]; -{ - extern char *optarg; - extern int optind; - - short verbose = FALSE; - char *host; - - char ch; - - char *loc = NULL; - struct in_addr addr; - struct hostent *hp; - - progname = argv[0]; - while ((ch = getopt (argc, argv, "vd:")) != EOF) - { - switch (ch) - { - case 'v': - verbose = TRUE; - break; - case 'd': - debug = atoi (optarg); - if (debug <= 0) - { - (void) fprintf (stderr, - "%s: illegal debug value.\n", progname); - exit (2); - } - break; - default: - usage (); - } - } - argc -= optind; - argv += optind; - if (argc != 1) - { - usage (); - } - if (verbose || debug) - { - printf ("\nThis is %s, version %s.\n\n", progname, VERSION); - } - host = argv[0]; - (void) res_init (); - - if ((addr.s_addr = inet_addr (host)) == INADDR_NONE) - { - if (debug >= 1) - printf ("%s is a name\n", host); - loc = getlocbyname (host, FALSE); - } - else - { - if (debug >= 1) - printf ("%s is an IP address ", host); - hp = (struct hostent *) gethostbyaddr - ((char *) &addr, sizeof (addr), AF_INET); - if (hp) - { - if (debug >= 1) - printf ("and %s is its official name\n", - hp->h_name); - loc = getlocbyname (hp->h_name, FALSE); - } - else - { - if (debug >= 1) - printf ("which has no name\n"); - loc = getlocbyaddr (addr, NULL); - } - } - if (loc == NULL) - { - printf ("No LOCation found for %s\n", host); - exit (1); - } - else - { - if (verbose || debug) - printf ("LOCation for %s is ", host); - printf ("%s\n", loc); - exit (0); - } -} diff --git a/contrib/query-loc-0.4.0/ADDRESSES b/contrib/query-loc-0.4.0/ADDRESSES new file mode 100644 index 00000000..522967eb --- /dev/null +++ b/contrib/query-loc-0.4.0/ADDRESSES @@ -0,0 +1,16 @@ +The following machines, at least today seem to have LOC +records: + +147.210.73.0/24 (note the two /25 have different LOC, inherited differently) +130.104.3.* +Melanie.Tolna.Net +204.92.254.* +alink.net +caida.org +ckdhr.com +distributed.net (rc5stats.distributed.net) +nikhef.nl +yahoo.com +nic.af + +$Id: ADDRESSES,v 1.1.2.1 2008/02/15 02:11:57 marka Exp $ diff --git a/contrib/query-loc-0.4.0/ALGO b/contrib/query-loc-0.4.0/ALGO new file mode 100644 index 00000000..4695dc14 --- /dev/null +++ b/contrib/query-loc-0.4.0/ALGO @@ -0,0 +1,48 @@ +Just for info, can be out of date. + + +RFC 1876, 5.2, specially 5.2.3 + +Important points: + +- LOC RRs are always attached to a *name*. +- we can have two (or more) RRs for one address, one more specific than the other + +main + if (host is a name) + getLOCbyname + else # host is an IP address + gethostbyaddr + if (name) + getLOCbyname + # If there is none, do not search. We assume the above was sufficient # (But check 5.2.2) + else + getLOCbyaddress + +getLOCbyname (host) + get LOC for host + if (it exists) + OK + else + get all A records of the name + foreach A record + getLOCbyaddress + OK at the first one found + # we assume they are consistent + END + +getLOCbyaddress (address) + # May receive a mask. Otherwise, deduce it from the class + makeNetAddress + getLOCbynetwork + +getLOCbynetwork + get PTR and A for it + if (exist) + getLOCbyname + ******* DIFFICULT : we have to manage a stack. See the code + makeNetAddress (level--) + getLOCbynetwork + else + END + diff --git a/contrib/query-loc-0.4.0/INSTALL b/contrib/query-loc-0.4.0/INSTALL new file mode 100644 index 00000000..3b398fb4 --- /dev/null +++ b/contrib/query-loc-0.4.0/INSTALL @@ -0,0 +1,9 @@ +Type './configure', then 'make' and (as root if necessary) 'make +install'. + +It requires a recent libresolv, with loc_ntoa, but use an alternative +which I provide, if not found. + +Tested on Linux (i386 and Alpha), Solaris (Sparc) and Digital Unix (Alpha). + +$Id: INSTALL,v 1.1.2.1 2008/02/15 02:11:57 marka Exp $ diff --git a/contrib/query-loc-0.4.0/Makefile.in b/contrib/query-loc-0.4.0/Makefile.in new file mode 100644 index 00000000..e7fc6cff --- /dev/null +++ b/contrib/query-loc-0.4.0/Makefile.in @@ -0,0 +1,42 @@ +# $Id: Makefile.in,v 1.1.2.1 2008/02/15 02:11:57 marka Exp $ +CC=@CC@ +CFLAGS=@CFLAGS@ +LIBS=@LIBS@ +DESTDIR=@prefix@ +BINDIR=@prefix@/bin +MANDIR=@prefix@/share/man/man1 +DISTRIB= README INSTALL ALGO USAGE ADDRESSES Makefile.in configure configure.in config.h.in install-sh loc.h loc.c query-loc.c loc_ntoa.c query-loc.1 reconf +OBJS=query-loc.o loc.o @LOC_NTOA@ +VERSION=`grep VERSION loc.h | cut -d ' ' -f 3 | sed s/\"//g` + +all: query-loc + +query-loc: $(OBJS) + $(CC) -o $@ $(OBJS) $(LIBS) + +%.o: %.c loc.h + $(CC) $(CFLAGS) -c $< + +clean: + rm -f *.o query-loc *~ + +distclean: clean + rm -f config.h config.cache config.log config.status Makefile + +dist: distrib + +distrib: clean + ./reconf + @(echo Query-Loc is version ${VERSION}; \ + mkdir query-loc-${VERSION}; \ + cp $(DISTRIB) query-loc-${VERSION};\ + tar cvf query-loc-${VERSION}.tar query-loc-${VERSION}; \ + rm -rf query-loc-${VERSION}; \ + gzip -v -9 -f query-loc-${VERSION}.tar); + +install: + @INSTALL@ -m 0755 query-loc $(BINDIR) + if [ ! -d $(MANDIR) ]; then \ + mkdir $(MANDIR); \ + fi + @INSTALL@ -m 0644 query-loc.1 $(MANDIR) diff --git a/contrib/query-loc-0.4.0/README b/contrib/query-loc-0.4.0/README new file mode 100644 index 00000000..360091c7 --- /dev/null +++ b/contrib/query-loc-0.4.0/README @@ -0,0 +1,21 @@ + query-loc: a program to retrieve and display the location + information in the DNS. + + It uses the algorithms described in + RFC 1876 (and RFC 1101 to get the network names). + You can find examples of networks wchich implement this scheme + in the ADDRESSES file. + + It is under the General Public Licence (GPL, which + you can fetch from . + + Copyright Stéphane Bortzmeyer , 1998-2007. + + Thanks to Paul Vixie for the RFC and its encouragements. Thanks + to Björn Augustsson for the xtraceroute program + . Thanks to Roland + Dirlewanger for extensive patching. + +$Id: README,v 1.1.2.1 2008/02/15 02:11:57 marka Exp $ + + diff --git a/contrib/query-loc-0.4.0/USAGE b/contrib/query-loc-0.4.0/USAGE new file mode 100644 index 00000000..d3ee4c06 --- /dev/null +++ b/contrib/query-loc-0.4.0/USAGE @@ -0,0 +1,7 @@ +query-loc [-v] [-d nnn] host-name-or-address + +Examples of hosts with LOCation info (quite uncommon, if you know more, +please tell me): + +See the ADDRESSES file + diff --git a/contrib/query-loc-0.4.0/config.h.in b/contrib/query-loc-0.4.0/config.h.in new file mode 100644 index 00000000..e41250c9 --- /dev/null +++ b/contrib/query-loc-0.4.0/config.h.in @@ -0,0 +1,69 @@ +/* config.h.in. Generated from configure.in by autoheader. */ +/* $Id: config.h.in,v 1.1.2.1 2008/02/15 02:11:57 marka Exp $ */ + + +/* Define to 1 if you have the header file. */ +#undef HAVE_INTTYPES_H + +/* Define to 1 if you have the `resolv' library (-lresolv). */ +#undef HAVE_LIBRESOLV + +/* Define to 1 if you have the header file. */ +#undef HAVE_MEMORY_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_STAT_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_UNISTD_H + +/* 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 version of this package. */ +#undef PACKAGE_VERSION + +/* The size of a `char', as computed by sizeof. */ +#undef SIZEOF_CHAR + +/* The size of a `int', as computed by sizeof. */ +#undef SIZEOF_INT + +/* The size of a `long', as computed by sizeof. */ +#undef SIZEOF_LONG + +/* The size of a `short', as computed by sizeof. */ +#undef SIZEOF_SHORT + +/* Define to 1 if you have the ANSI C header files. */ +#undef STDC_HEADERS + +/* Define to empty if `const' does not conform to ANSI C. */ +#undef const + +/* Is there a loc_ntoa on this system? */ +#undef HAVE_LOC_NTOA diff --git a/contrib/query-loc-0.4.0/configure b/contrib/query-loc-0.4.0/configure new file mode 100755 index 00000000..d77cf76c --- /dev/null +++ b/contrib/query-loc-0.4.0/configure @@ -0,0 +1,6436 @@ +#! /bin/sh +# Guess values for system-dependent variables and create Makefiles. +# Generated by GNU Autoconf 2.59. +# +# Copyright (C) 2003 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 Bourne compatible +if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then + emulate sh + NULLCMD=: + # Zsh 3.x and 4.x performs word splitting on ${1+"$@"}, which + # is contrary to our usage. Disable this feature. + alias -g '${1+"$@"}'='"$@"' +elif test -n "${BASH_VERSION+set}" && (set -o posix) >/dev/null 2>&1; then + set -o posix +fi +DUALCASE=1; export DUALCASE # for MKS sh + +# Support unset when possible. +if ( (MAIL=60; unset MAIL) || exit) >/dev/null 2>&1; then + as_unset=unset +else + as_unset=false +fi + + +# Work around bugs in pre-3.0 UWIN ksh. +$as_unset ENV MAIL MAILPATH +PS1='$ ' +PS2='> ' +PS4='+ ' + +# NLS nuisances. +for as_var in \ + LANG LANGUAGE LC_ADDRESS LC_ALL LC_COLLATE LC_CTYPE LC_IDENTIFICATION \ + LC_MEASUREMENT LC_MESSAGES LC_MONETARY LC_NAME LC_NUMERIC LC_PAPER \ + LC_TELEPHONE LC_TIME +do + if (set +x; test -z "`(eval $as_var=C; export $as_var) 2>&1`"); then + eval $as_var=C; export $as_var + else + $as_unset $as_var + fi +done + +# Required to use basename. +if expr a : '\(a\)' >/dev/null 2>&1; 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 + + +# Name of the executable. +as_me=`$as_basename "$0" || +$as_expr X/"$0" : '.*/\([^/][^/]*\)/*$' \| \ + X"$0" : 'X\(//\)$' \| \ + X"$0" : 'X\(/\)$' \| \ + . : '\(.\)' 2>/dev/null || +echo X/"$0" | + sed '/^.*\/\([^/][^/]*\)\/*$/{ s//\1/; q; } + /^X\/\(\/\/\)$/{ s//\1/; q; } + /^X\/\(\/\).*/{ s//\1/; q; } + s/.*/./; q'` + + +# PATH needs CR, and LINENO needs CR and PATH. +# 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 + +# The user is always right. +if test "${PATH_SEPARATOR+set}" != set; then + echo "#! /bin/sh" >conf$$.sh + echo "exit 0" >>conf$$.sh + chmod +x conf$$.sh + if (PATH="/nonexistent;."; conf$$.sh) >/dev/null 2>&1; then + PATH_SEPARATOR=';' + else + PATH_SEPARATOR=: + fi + rm -f conf$$.sh +fi + + + as_lineno_1=$LINENO + as_lineno_2=$LINENO + as_lineno_3=`(expr $as_lineno_1 + 1) 2>/dev/null` + test "x$as_lineno_1" != "x$as_lineno_2" && + test "x$as_lineno_3" = "x$as_lineno_2" || { + # Find who we are. Look in the path if we contain no path at all + # relative or not. + 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 + + ;; + 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 + { echo "$as_me: error: cannot find myself; rerun with an absolute path" >&2 + { (exit 1); exit 1; }; } + fi + case $CONFIG_SHELL in + '') + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in /bin$PATH_SEPARATOR/usr/bin$PATH_SEPARATOR$PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for as_base in sh bash ksh sh5; do + case $as_dir in + /*) + if ("$as_dir/$as_base" -c ' + as_lineno_1=$LINENO + as_lineno_2=$LINENO + as_lineno_3=`(expr $as_lineno_1 + 1) 2>/dev/null` + test "x$as_lineno_1" != "x$as_lineno_2" && + test "x$as_lineno_3" = "x$as_lineno_2" ') 2>/dev/null; then + $as_unset BASH_ENV || test "${BASH_ENV+set}" != set || { BASH_ENV=; export BASH_ENV; } + $as_unset ENV || test "${ENV+set}" != set || { ENV=; export ENV; } + CONFIG_SHELL=$as_dir/$as_base + export CONFIG_SHELL + exec "$CONFIG_SHELL" "$0" ${1+"$@"} + fi;; + esac + done +done +;; + esac + + # Create $as_me.lineno as a copy of $as_myself, but with $LINENO + # uniformly replaced by the line number. The first 'sed' inserts a + # line-number line before each line; the second 'sed' does the real + # work. The second script uses 'N' to pair each line-number line + # with the numbered line, and appends trailing '-' during + # substitution so that $LINENO is not a special case at line end. + # (Raja R Harinath suggested sed '=', and Paul Eggert wrote the + # second 'sed' script. Blame Lee E. McMahon for sed's syntax. :-) + sed '=' <$as_myself | + sed ' + N + s,$,-, + : loop + s,^\(['$as_cr_digits']*\)\(.*\)[$]LINENO\([^'$as_cr_alnum'_]\),\1\2\1\3, + t loop + s,-$,, + s,^['$as_cr_digits']*\n,, + ' >$as_me.lineno && + chmod +x $as_me.lineno || + { echo "$as_me: error: cannot create $as_me.lineno; rerun with a POSIX shell" >&2 + { (exit 1); exit 1; }; } + + # 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 sensible to this). + . ./$as_me.lineno + # Exit status is that of the last command. + exit +} + + +case `echo "testing\c"; echo 1,2,3`,`echo -n testing; echo 1,2,3` in + *c*,-n*) ECHO_N= ECHO_C=' +' ECHO_T=' ' ;; + *c*,* ) ECHO_N=-n ECHO_C= ECHO_T= ;; + *) ECHO_N= ECHO_C='\c' ECHO_T= ;; +esac + +if expr a : '\(a\)' >/dev/null 2>&1; then + as_expr=expr +else + as_expr=false +fi + +rm -f conf$$ conf$$.exe conf$$.file +echo >conf$$.file +if ln -s conf$$.file conf$$ 2>/dev/null; then + # We could just check for DJGPP; but this test a) works b) is more generic + # and c) will remain valid once DJGPP supports symlinks (DJGPP 2.04). + if test -f conf$$.exe; then + # Don't use ln at all; we don't have any links + as_ln_s='cp -p' + else + as_ln_s='ln -s' + fi +elif ln conf$$.file conf$$ 2>/dev/null; then + as_ln_s=ln +else + as_ln_s='cp -p' +fi +rm -f conf$$ conf$$.exe conf$$.file + +if mkdir -p . 2>/dev/null; then + as_mkdir_p=: +else + test -d ./-p && rmdir ./-p + as_mkdir_p=false +fi + +as_executable_p="test -f" + +# 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'" + + +# IFS +# We need space, tab and new line, in precisely that order. +as_nl=' +' +IFS=" $as_nl" + +# CDPATH. +$as_unset CDPATH + + +# Name of the host. +# hostname on some systems (SVR3.2, Linux) returns a bogus exit status, +# so uname gets run too. +ac_hostname=`(hostname || uname -n) 2>/dev/null | sed 1q` + +exec 6>&1 + +# +# Initializations. +# +ac_default_prefix=/usr/local +ac_config_libobj_dir=. +cross_compiling=no +subdirs= +MFLAGS= +MAKEFLAGS= +SHELL=${CONFIG_SHELL-/bin/sh} + +# Maximum number of lines to put in a shell here document. +# This variable seems obsolete. It should probably be removed, and +# only ac_max_sed_lines should be used. +: ${ac_max_here_lines=38} + +# Identity of this package. +PACKAGE_NAME= +PACKAGE_TARNAME= +PACKAGE_VERSION= +PACKAGE_STRING= +PACKAGE_BUGREPORT= + +ac_unique_file="query-loc.c" +# Factoring default headers for most tests. +ac_includes_default="\ +#include +#if HAVE_SYS_TYPES_H +# include +#endif +#if HAVE_SYS_STAT_H +# include +#endif +#if STDC_HEADERS +# include +# include +#else +# if HAVE_STDLIB_H +# include +# endif +#endif +#if HAVE_STRING_H +# if !STDC_HEADERS && HAVE_MEMORY_H +# include +# endif +# include +#endif +#if HAVE_STRINGS_H +# include +#endif +#if HAVE_INTTYPES_H +# include +#else +# if HAVE_STDINT_H +# include +# endif +#endif +#if HAVE_UNISTD_H +# include +#endif" + +ac_subst_vars='SHELL PATH_SEPARATOR PACKAGE_NAME PACKAGE_TARNAME PACKAGE_VERSION PACKAGE_STRING PACKAGE_BUGREPORT exec_prefix prefix program_transform_name bindir sbindir libexecdir datadir sysconfdir sharedstatedir localstatedir libdir includedir oldincludedir infodir mandir build_alias host_alias target_alias DEFS ECHO_C ECHO_N ECHO_T LIBS CC CFLAGS LDFLAGS CPPFLAGS ac_ct_CC EXEEXT OBJEXT INSTALL_PROGRAM INSTALL_SCRIPT INSTALL_DATA CPP EGREP LOC_NTOA LIBOBJS LTLIBOBJS' +ac_subst_files='' + +# Initialize some variables set by options. +ac_init_help= +ac_init_version=false +# 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. +bindir='${exec_prefix}/bin' +sbindir='${exec_prefix}/sbin' +libexecdir='${exec_prefix}/libexec' +datadir='${prefix}/share' +sysconfdir='${prefix}/etc' +sharedstatedir='${prefix}/com' +localstatedir='${prefix}/var' +libdir='${exec_prefix}/lib' +includedir='${prefix}/include' +oldincludedir='/usr/include' +infodir='${prefix}/info' +mandir='${prefix}/man' + +ac_prev= +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 + + ac_optarg=`expr "x$ac_option" : 'x[^=]*=\(.*\)'` + + # Accept the important Cygnus configure options, so we can diagnose typos. + + case $ac_option in + + -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 | --data | --dat | --da) + ac_prev=datadir ;; + -datadir=* | --datadir=* | --datadi=* | --datad=* | --data=* | --dat=* \ + | --da=*) + datadir=$ac_optarg ;; + + -disable-* | --disable-*) + ac_feature=`expr "x$ac_option" : 'x-*disable-\(.*\)'` + # Reject names that are not valid shell variable names. + expr "x$ac_feature" : ".*[^-_$as_cr_alnum]" >/dev/null && + { echo "$as_me: error: invalid feature name: $ac_feature" >&2 + { (exit 1); exit 1; }; } + ac_feature=`echo $ac_feature | sed 's/-/_/g'` + eval "enable_$ac_feature=no" ;; + + -enable-* | --enable-*) + ac_feature=`expr "x$ac_option" : 'x-*enable-\([^=]*\)'` + # Reject names that are not valid shell variable names. + expr "x$ac_feature" : ".*[^-_$as_cr_alnum]" >/dev/null && + { echo "$as_me: error: invalid feature name: $ac_feature" >&2 + { (exit 1); exit 1; }; } + ac_feature=`echo $ac_feature | sed 's/-/_/g'` + case $ac_option in + *=*) ac_optarg=`echo "$ac_optarg" | sed "s/'/'\\\\\\\\''/g"`;; + *) ac_optarg=yes ;; + esac + eval "enable_$ac_feature='$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 ;; + + -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 ;; + + -localstatedir | --localstatedir | --localstatedi | --localstated \ + | --localstate | --localstat | --localsta | --localst \ + | --locals | --local | --loca | --loc | --lo) + ac_prev=localstatedir ;; + -localstatedir=* | --localstatedir=* | --localstatedi=* | --localstated=* \ + | --localstate=* | --localstat=* | --localsta=* | --localst=* \ + | --locals=* | --local=* | --loca=* | --loc=* | --lo=*) + 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 ;; + + -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_package=`expr "x$ac_option" : 'x-*with-\([^=]*\)'` + # Reject names that are not valid shell variable names. + expr "x$ac_package" : ".*[^-_$as_cr_alnum]" >/dev/null && + { echo "$as_me: error: invalid package name: $ac_package" >&2 + { (exit 1); exit 1; }; } + ac_package=`echo $ac_package| sed 's/-/_/g'` + case $ac_option in + *=*) ac_optarg=`echo "$ac_optarg" | sed "s/'/'\\\\\\\\''/g"`;; + *) ac_optarg=yes ;; + esac + eval "with_$ac_package='$ac_optarg'" ;; + + -without-* | --without-*) + ac_package=`expr "x$ac_option" : 'x-*without-\(.*\)'` + # Reject names that are not valid shell variable names. + expr "x$ac_package" : ".*[^-_$as_cr_alnum]" >/dev/null && + { echo "$as_me: error: invalid package name: $ac_package" >&2 + { (exit 1); exit 1; }; } + ac_package=`echo $ac_package | sed 's/-/_/g'` + eval "with_$ac_package=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 ;; + + -*) { echo "$as_me: error: unrecognized option: $ac_option +Try \`$0 --help' for more information." >&2 + { (exit 1); exit 1; }; } + ;; + + *=*) + ac_envvar=`expr "x$ac_option" : 'x\([^=]*\)='` + # Reject names that are not valid shell variable names. + expr "x$ac_envvar" : ".*[^_$as_cr_alnum]" >/dev/null && + { echo "$as_me: error: invalid variable name: $ac_envvar" >&2 + { (exit 1); exit 1; }; } + ac_optarg=`echo "$ac_optarg" | sed "s/'/'\\\\\\\\''/g"` + eval "$ac_envvar='$ac_optarg'" + export $ac_envvar ;; + + *) + # FIXME: should be removed in autoconf 3.0. + echo "$as_me: WARNING: you should use --build, --host, --target" >&2 + expr "x$ac_option" : ".*[^-._$as_cr_alnum]" >/dev/null && + 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'` + { echo "$as_me: error: missing argument to $ac_option" >&2 + { (exit 1); exit 1; }; } +fi + +# Be sure to have absolute paths. +for ac_var in exec_prefix prefix +do + eval ac_val=$`echo $ac_var` + case $ac_val in + [\\/$]* | ?:[\\/]* | NONE | '' ) ;; + *) { echo "$as_me: error: expected an absolute directory name for --$ac_var: $ac_val" >&2 + { (exit 1); exit 1; }; };; + esac +done + +# Be sure to have absolute paths. +for ac_var in bindir sbindir libexecdir datadir sysconfdir sharedstatedir \ + localstatedir libdir includedir oldincludedir infodir mandir +do + eval ac_val=$`echo $ac_var` + case $ac_val in + [\\/$]* | ?:[\\/]* ) ;; + *) { echo "$as_me: error: expected an absolute directory name for --$ac_var: $ac_val" >&2 + { (exit 1); exit 1; }; };; + esac +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 + echo "$as_me: WARNING: If you wanted to set the --build type, don't use --host. + If a cross compiler is detected then cross compile mode will be used." >&2 + 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 + + +# 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 its parent. + ac_confdir=`(dirname "$0") 2>/dev/null || +$as_expr X"$0" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ + X"$0" : 'X\(//\)[^/]' \| \ + X"$0" : 'X\(//\)$' \| \ + X"$0" : 'X\(/\)' \| \ + . : '\(.\)' 2>/dev/null || +echo X"$0" | + 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 + if test "$ac_srcdir_defaulted" = yes; then + { echo "$as_me: error: cannot find sources ($ac_unique_file) in $ac_confdir or .." >&2 + { (exit 1); exit 1; }; } + else + { echo "$as_me: error: cannot find sources ($ac_unique_file) in $srcdir" >&2 + { (exit 1); exit 1; }; } + fi +fi +(cd $srcdir && test -r ./$ac_unique_file) 2>/dev/null || + { echo "$as_me: error: sources are in $srcdir, but \`cd $srcdir' does not work" >&2 + { (exit 1); exit 1; }; } +srcdir=`echo "$srcdir" | sed 's%\([^\\/]\)[\\/]*$%\1%'` +ac_env_build_alias_set=${build_alias+set} +ac_env_build_alias_value=$build_alias +ac_cv_env_build_alias_set=${build_alias+set} +ac_cv_env_build_alias_value=$build_alias +ac_env_host_alias_set=${host_alias+set} +ac_env_host_alias_value=$host_alias +ac_cv_env_host_alias_set=${host_alias+set} +ac_cv_env_host_alias_value=$host_alias +ac_env_target_alias_set=${target_alias+set} +ac_env_target_alias_value=$target_alias +ac_cv_env_target_alias_set=${target_alias+set} +ac_cv_env_target_alias_value=$target_alias +ac_env_CC_set=${CC+set} +ac_env_CC_value=$CC +ac_cv_env_CC_set=${CC+set} +ac_cv_env_CC_value=$CC +ac_env_CFLAGS_set=${CFLAGS+set} +ac_env_CFLAGS_value=$CFLAGS +ac_cv_env_CFLAGS_set=${CFLAGS+set} +ac_cv_env_CFLAGS_value=$CFLAGS +ac_env_LDFLAGS_set=${LDFLAGS+set} +ac_env_LDFLAGS_value=$LDFLAGS +ac_cv_env_LDFLAGS_set=${LDFLAGS+set} +ac_cv_env_LDFLAGS_value=$LDFLAGS +ac_env_CPPFLAGS_set=${CPPFLAGS+set} +ac_env_CPPFLAGS_value=$CPPFLAGS +ac_cv_env_CPPFLAGS_set=${CPPFLAGS+set} +ac_cv_env_CPPFLAGS_value=$CPPFLAGS +ac_env_CPP_set=${CPP+set} +ac_env_CPP_value=$CPP +ac_cv_env_CPP_set=${CPP+set} +ac_cv_env_CPP_value=$CPP + +# +# 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 \`..'] + +_ACEOF + + cat <<_ACEOF +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] + --datadir=DIR read-only architecture-independent data [PREFIX/share] + --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] + --infodir=DIR info documentation [PREFIX/info] + --mandir=DIR man documentation [PREFIX/man] +_ACEOF + + cat <<\_ACEOF +_ACEOF +fi + +if test -n "$ac_init_help"; then + + cat <<\_ACEOF + +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 + CPPFLAGS 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. + +_ACEOF +fi + +if test "$ac_init_help" = "recursive"; then + # If there are subdirs, report their specific --help. + ac_popdir=`pwd` + for ac_dir in : $ac_subdirs_all; do test "x$ac_dir" = x: && continue + test -d $ac_dir || continue + ac_builddir=. + +if test "$ac_dir" != .; then + ac_dir_suffix=/`echo "$ac_dir" | sed 's,^\.[\\/],,'` + # A "../" for each directory in $ac_dir_suffix. + ac_top_builddir=`echo "$ac_dir_suffix" | sed 's,/[^\\/]*,../,g'` +else + ac_dir_suffix= ac_top_builddir= +fi + +case $srcdir in + .) # No --srcdir option. We are building in place. + ac_srcdir=. + if test -z "$ac_top_builddir"; then + ac_top_srcdir=. + else + ac_top_srcdir=`echo $ac_top_builddir | sed 's,/$,,'` + fi ;; + [\\/]* | ?:[\\/]* ) # Absolute path. + ac_srcdir=$srcdir$ac_dir_suffix; + ac_top_srcdir=$srcdir ;; + *) # Relative path. + ac_srcdir=$ac_top_builddir$srcdir$ac_dir_suffix + ac_top_srcdir=$ac_top_builddir$srcdir ;; +esac + +# Do not use `cd foo && pwd` to compute absolute paths, because +# the directories may not exist. +case `pwd` in +.) ac_abs_builddir="$ac_dir";; +*) + case "$ac_dir" in + .) ac_abs_builddir=`pwd`;; + [\\/]* | ?:[\\/]* ) ac_abs_builddir="$ac_dir";; + *) ac_abs_builddir=`pwd`/"$ac_dir";; + esac;; +esac +case $ac_abs_builddir in +.) ac_abs_top_builddir=${ac_top_builddir}.;; +*) + case ${ac_top_builddir}. in + .) ac_abs_top_builddir=$ac_abs_builddir;; + [\\/]* | ?:[\\/]* ) ac_abs_top_builddir=${ac_top_builddir}.;; + *) ac_abs_top_builddir=$ac_abs_builddir/${ac_top_builddir}.;; + esac;; +esac +case $ac_abs_builddir in +.) ac_abs_srcdir=$ac_srcdir;; +*) + case $ac_srcdir in + .) ac_abs_srcdir=$ac_abs_builddir;; + [\\/]* | ?:[\\/]* ) ac_abs_srcdir=$ac_srcdir;; + *) ac_abs_srcdir=$ac_abs_builddir/$ac_srcdir;; + esac;; +esac +case $ac_abs_builddir in +.) ac_abs_top_srcdir=$ac_top_srcdir;; +*) + case $ac_top_srcdir in + .) ac_abs_top_srcdir=$ac_abs_builddir;; + [\\/]* | ?:[\\/]* ) ac_abs_top_srcdir=$ac_top_srcdir;; + *) ac_abs_top_srcdir=$ac_abs_builddir/$ac_top_srcdir;; + esac;; +esac + + cd $ac_dir + # Check for guested configure; otherwise get Cygnus style 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 + elif test -f $ac_srcdir/configure.ac || + test -f $ac_srcdir/configure.in; then + echo + $ac_configure --help + else + echo "$as_me: WARNING: no configuration information is in $ac_dir" >&2 + fi + cd "$ac_popdir" + done +fi + +test -n "$ac_init_help" && exit 0 +if $ac_init_version; then + cat <<\_ACEOF + +Copyright (C) 2003 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 0 +fi +exec 5>config.log +cat >&5 <<_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.59. Invocation command line was + + $ $0 $@ + +_ACEOF +{ +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` +hostinfo = `(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=. + echo "PATH: $as_dir" +done + +} >&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_sep= +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=`echo "$ac_arg" | sed "s/'/'\\\\\\\\''/g"` ;; + esac + case $ac_pass in + 1) ac_configure_args0="$ac_configure_args0 '$ac_arg'" ;; + 2) + ac_configure_args1="$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 + ac_configure_args="$ac_configure_args$ac_sep'$ac_arg'" + # Get rid of the leading space. + ac_sep=" " + ;; + esac + done +done +$as_unset ac_configure_args0 || test "${ac_configure_args0+set}" != set || { ac_configure_args0=; export ac_configure_args0; } +$as_unset ac_configure_args1 || test "${ac_configure_args1+set}" != set || { ac_configure_args1=; export 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: Be sure not to use single quotes in there, as some shells, +# such as our DU 5.0 friend, will then `close' the trap. +trap 'exit_status=$? + # Save into config.log some information that might help in debugging. + { + echo + + cat <<\_ASBOX +## ---------------- ## +## Cache variables. ## +## ---------------- ## +_ASBOX + echo + # The following way of writing the cache mishandles newlines in values, +{ + (set) 2>&1 | + case `(ac_space='"'"' '"'"'; set | grep ac_space) 2>&1` in + *ac_space=\ *) + sed -n \ + "s/'"'"'/'"'"'\\\\'"'"''"'"'/g; + s/^\\([_$as_cr_alnum]*_cv_[_$as_cr_alnum]*\\)=\\(.*\\)/\\1='"'"'\\2'"'"'/p" + ;; + *) + sed -n \ + "s/^\\([_$as_cr_alnum]*_cv_[_$as_cr_alnum]*\\)=\\(.*\\)/\\1=\\2/p" + ;; + esac; +} + echo + + cat <<\_ASBOX +## ----------------- ## +## Output variables. ## +## ----------------- ## +_ASBOX + echo + for ac_var in $ac_subst_vars + do + eval ac_val=$`echo $ac_var` + echo "$ac_var='"'"'$ac_val'"'"'" + done | sort + echo + + if test -n "$ac_subst_files"; then + cat <<\_ASBOX +## ------------- ## +## Output files. ## +## ------------- ## +_ASBOX + echo + for ac_var in $ac_subst_files + do + eval ac_val=$`echo $ac_var` + echo "$ac_var='"'"'$ac_val'"'"'" + done | sort + echo + fi + + if test -s confdefs.h; then + cat <<\_ASBOX +## ----------- ## +## confdefs.h. ## +## ----------- ## +_ASBOX + echo + sed "/^$/d" confdefs.h | sort + echo + fi + test "$ac_signal" != 0 && + echo "$as_me: caught signal $ac_signal" + echo "$as_me: exit $exit_status" + } >&5 + rm -f core *.core && + rm -rf conftest* confdefs* conf$$* $ac_clean_files && + exit $exit_status + ' 0 +for ac_signal in 1 2 13 15; do + trap 'ac_signal='$ac_signal'; { (exit 1); exit 1; }' $ac_signal +done +ac_signal=0 + +# confdefs.h avoids OS command line length limits that DEFS can exceed. +rm -rf conftest* confdefs.h +# AIX cpp loses on an empty file, so make sure it contains at least a newline. +echo >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 + + +# Let the site file select an alternate cache file if it wants to. +# Prefer explicitly selected file to automatically selected ones. +if test -z "$CONFIG_SITE"; then + if test "x$prefix" != xNONE; then + CONFIG_SITE="$prefix/share/config.site $prefix/etc/config.site" + else + CONFIG_SITE="$ac_default_prefix/share/config.site $ac_default_prefix/etc/config.site" + fi +fi +for ac_site_file in $CONFIG_SITE; do + if test -r "$ac_site_file"; then + { echo "$as_me:$LINENO: loading site script $ac_site_file" >&5 +echo "$as_me: loading site script $ac_site_file" >&6;} + sed 's/^/| /' "$ac_site_file" >&5 + . "$ac_site_file" + 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. + if test -f "$cache_file"; then + { echo "$as_me:$LINENO: loading cache $cache_file" >&5 +echo "$as_me: loading cache $cache_file" >&6;} + case $cache_file in + [\\/]* | ?:[\\/]* ) . $cache_file;; + *) . ./$cache_file;; + esac + fi +else + { echo "$as_me:$LINENO: creating cache $cache_file" >&5 +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 `(set) 2>&1 | + sed -n 's/^ac_env_\([a-zA-Z_0-9]*\)_set=.*/\1/p'`; 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,) + { echo "$as_me:$LINENO: error: \`$ac_var' was set to \`$ac_old_val' in the previous run" >&5 +echo "$as_me: error: \`$ac_var' was set to \`$ac_old_val' in the previous run" >&2;} + ac_cache_corrupted=: ;; + ,set) + { echo "$as_me:$LINENO: error: \`$ac_var' was not set in the previous run" >&5 +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 + { echo "$as_me:$LINENO: error: \`$ac_var' has changed since the previous run:" >&5 +echo "$as_me: error: \`$ac_var' has changed since the previous run:" >&2;} + { echo "$as_me:$LINENO: former value: $ac_old_val" >&5 +echo "$as_me: former value: $ac_old_val" >&2;} + { echo "$as_me:$LINENO: current value: $ac_new_val" >&5 +echo "$as_me: current value: $ac_new_val" >&2;} + ac_cache_corrupted=: + fi;; + esac + # Pass precious variables to config.status. + if test "$ac_new_set" = set; then + case $ac_new_val in + *" "*|*" "*|*[\[\]\~\#\$\^\&\*\(\)\{\}\\\|\;\<\>\?\"\']*) + ac_arg=$ac_var=`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. + *) ac_configure_args="$ac_configure_args '$ac_arg'" ;; + esac + fi +done +if $ac_cache_corrupted; then + { echo "$as_me:$LINENO: error: changes in the environment can compromise the build" >&5 +echo "$as_me: error: changes in the environment can compromise the build" >&2;} + { { echo "$as_me:$LINENO: error: run \`make distclean' and/or \`rm $cache_file' and start over" >&5 +echo "$as_me: error: run \`make distclean' and/or \`rm $cache_file' and start over" >&2;} + { (exit 1); exit 1; }; } +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 +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 +echo "$as_me:$LINENO: checking for $ac_word" >&5 +echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6 +if test "${ac_cv_prog_CC+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&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_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_prog_CC="${ac_tool_prefix}gcc" + echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done +done + +fi +fi +CC=$ac_cv_prog_CC +if test -n "$CC"; then + echo "$as_me:$LINENO: result: $CC" >&5 +echo "${ECHO_T}$CC" >&6 +else + echo "$as_me:$LINENO: result: no" >&5 +echo "${ECHO_T}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 +echo "$as_me:$LINENO: checking for $ac_word" >&5 +echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6 +if test "${ac_cv_prog_ac_ct_CC+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&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_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_prog_ac_ct_CC="gcc" + echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done +done + +fi +fi +ac_ct_CC=$ac_cv_prog_ac_ct_CC +if test -n "$ac_ct_CC"; then + echo "$as_me:$LINENO: result: $ac_ct_CC" >&5 +echo "${ECHO_T}$ac_ct_CC" >&6 +else + echo "$as_me:$LINENO: result: no" >&5 +echo "${ECHO_T}no" >&6 +fi + + CC=$ac_ct_CC +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 +echo "$as_me:$LINENO: checking for $ac_word" >&5 +echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6 +if test "${ac_cv_prog_CC+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&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_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_prog_CC="${ac_tool_prefix}cc" + echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done +done + +fi +fi +CC=$ac_cv_prog_CC +if test -n "$CC"; then + echo "$as_me:$LINENO: result: $CC" >&5 +echo "${ECHO_T}$CC" >&6 +else + echo "$as_me:$LINENO: result: no" >&5 +echo "${ECHO_T}no" >&6 +fi + +fi +if test -z "$ac_cv_prog_CC"; then + ac_ct_CC=$CC + # Extract the first word of "cc", so it can be a program name with args. +set dummy cc; ac_word=$2 +echo "$as_me:$LINENO: checking for $ac_word" >&5 +echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6 +if test "${ac_cv_prog_ac_ct_CC+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&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_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_prog_ac_ct_CC="cc" + echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done +done + +fi +fi +ac_ct_CC=$ac_cv_prog_ac_ct_CC +if test -n "$ac_ct_CC"; then + echo "$as_me:$LINENO: result: $ac_ct_CC" >&5 +echo "${ECHO_T}$ac_ct_CC" >&6 +else + echo "$as_me:$LINENO: result: no" >&5 +echo "${ECHO_T}no" >&6 +fi + + CC=$ac_ct_CC +else + CC="$ac_cv_prog_CC" +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 +echo "$as_me:$LINENO: checking for $ac_word" >&5 +echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6 +if test "${ac_cv_prog_CC+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&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_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" + echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done +done + +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 + echo "$as_me:$LINENO: result: $CC" >&5 +echo "${ECHO_T}$CC" >&6 +else + echo "$as_me:$LINENO: result: no" >&5 +echo "${ECHO_T}no" >&6 +fi + +fi +if test -z "$CC"; then + if test -n "$ac_tool_prefix"; then + for ac_prog in cl + 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 +echo "$as_me:$LINENO: checking for $ac_word" >&5 +echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6 +if test "${ac_cv_prog_CC+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&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_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_prog_CC="$ac_tool_prefix$ac_prog" + echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done +done + +fi +fi +CC=$ac_cv_prog_CC +if test -n "$CC"; then + echo "$as_me:$LINENO: result: $CC" >&5 +echo "${ECHO_T}$CC" >&6 +else + echo "$as_me:$LINENO: result: no" >&5 +echo "${ECHO_T}no" >&6 +fi + + test -n "$CC" && break + done +fi +if test -z "$CC"; then + ac_ct_CC=$CC + for ac_prog in cl +do + # Extract the first word of "$ac_prog", so it can be a program name with args. +set dummy $ac_prog; ac_word=$2 +echo "$as_me:$LINENO: checking for $ac_word" >&5 +echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6 +if test "${ac_cv_prog_ac_ct_CC+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&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_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_prog_ac_ct_CC="$ac_prog" + echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done +done + +fi +fi +ac_ct_CC=$ac_cv_prog_ac_ct_CC +if test -n "$ac_ct_CC"; then + echo "$as_me:$LINENO: result: $ac_ct_CC" >&5 +echo "${ECHO_T}$ac_ct_CC" >&6 +else + echo "$as_me:$LINENO: result: no" >&5 +echo "${ECHO_T}no" >&6 +fi + + test -n "$ac_ct_CC" && break +done + + CC=$ac_ct_CC +fi + +fi + + +test -z "$CC" && { { echo "$as_me:$LINENO: error: no acceptable C compiler found in \$PATH +See \`config.log' for more details." >&5 +echo "$as_me: error: no acceptable C compiler found in \$PATH +See \`config.log' for more details." >&2;} + { (exit 1); exit 1; }; } + +# Provide some information about the compiler. +echo "$as_me:$LINENO:" \ + "checking for C compiler version" >&5 +ac_compiler=`set X $ac_compile; echo $2` +{ (eval echo "$as_me:$LINENO: \"$ac_compiler --version &5\"") >&5 + (eval $ac_compiler --version &5) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } +{ (eval echo "$as_me:$LINENO: \"$ac_compiler -v &5\"") >&5 + (eval $ac_compiler -v &5) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } +{ (eval echo "$as_me:$LINENO: \"$ac_compiler -V &5\"") >&5 + (eval $ac_compiler -V &5) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } + +cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ + +int +main () +{ + + ; + return 0; +} +_ACEOF +ac_clean_files_save=$ac_clean_files +ac_clean_files="$ac_clean_files a.out 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. +echo "$as_me:$LINENO: checking for C compiler default output file name" >&5 +echo $ECHO_N "checking for C compiler default output file name... $ECHO_C" >&6 +ac_link_default=`echo "$ac_link" | sed 's/ -o *conftest[^ ]*//'` +if { (eval echo "$as_me:$LINENO: \"$ac_link_default\"") >&5 + (eval $ac_link_default) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; then + # Find the output, starting from the most likely. This scheme is +# not robust to junk in `.', hence go to wildcards (a.*) only as a last +# resort. + +# Be careful to initialize this variable, since it used to be cached. +# Otherwise an old cache value of `no' led to `EXEEXT = no' in a Makefile. +ac_cv_exeext= +# b.out is created by i960 compilers. +for ac_file in a_out.exe a.exe conftest.exe a.out conftest a.* conftest.* b.out +do + test -f "$ac_file" || continue + case $ac_file in + *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.o | *.obj ) + ;; + conftest.$ac_ext ) + # This is the source file. + ;; + [ab].out ) + # We found the default executable, but exeext='' is most + # certainly right. + break;; + *.* ) + ac_cv_exeext=`expr "$ac_file" : '[^.]*\(\..*\)'` + # FIXME: I believe we export ac_cv_exeext for Libtool, + # but it would be cool to find out if it's true. Does anybody + # maintain Libtool? --akim. + export ac_cv_exeext + break;; + * ) + break;; + esac +done +else + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + +{ { echo "$as_me:$LINENO: error: C compiler cannot create executables +See \`config.log' for more details." >&5 +echo "$as_me: error: C compiler cannot create executables +See \`config.log' for more details." >&2;} + { (exit 77); exit 77; }; } +fi + +ac_exeext=$ac_cv_exeext +echo "$as_me:$LINENO: result: $ac_file" >&5 +echo "${ECHO_T}$ac_file" >&6 + +# Check the compiler produces executables we can run. If not, either +# the compiler is broken, or we cross compile. +echo "$as_me:$LINENO: checking whether the C compiler works" >&5 +echo $ECHO_N "checking whether the C compiler works... $ECHO_C" >&6 +# FIXME: These cross compiler hacks should be removed for Autoconf 3.0 +# If not cross compiling, check that we can run a simple program. +if test "$cross_compiling" != yes; then + if { ac_try='./$ac_file' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; }; then + cross_compiling=no + else + if test "$cross_compiling" = maybe; then + cross_compiling=yes + else + { { echo "$as_me:$LINENO: error: cannot run C compiled programs. +If you meant to cross compile, use \`--host'. +See \`config.log' for more details." >&5 +echo "$as_me: error: cannot run C compiled programs. +If you meant to cross compile, use \`--host'. +See \`config.log' for more details." >&2;} + { (exit 1); exit 1; }; } + fi + fi +fi +echo "$as_me:$LINENO: result: yes" >&5 +echo "${ECHO_T}yes" >&6 + +rm -f a.out a.exe conftest$ac_cv_exeext b.out +ac_clean_files=$ac_clean_files_save +# Check the compiler produces executables we can run. If not, either +# the compiler is broken, or we cross compile. +echo "$as_me:$LINENO: checking whether we are cross compiling" >&5 +echo $ECHO_N "checking whether we are cross compiling... $ECHO_C" >&6 +echo "$as_me:$LINENO: result: $cross_compiling" >&5 +echo "${ECHO_T}$cross_compiling" >&6 + +echo "$as_me:$LINENO: checking for suffix of executables" >&5 +echo $ECHO_N "checking for suffix of executables... $ECHO_C" >&6 +if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 + (eval $ac_link) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; 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 | *.o | *.obj ) ;; + *.* ) ac_cv_exeext=`expr "$ac_file" : '[^.]*\(\..*\)'` + export ac_cv_exeext + break;; + * ) break;; + esac +done +else + { { echo "$as_me:$LINENO: error: cannot compute suffix of executables: cannot compile and link +See \`config.log' for more details." >&5 +echo "$as_me: error: cannot compute suffix of executables: cannot compile and link +See \`config.log' for more details." >&2;} + { (exit 1); exit 1; }; } +fi + +rm -f conftest$ac_cv_exeext +echo "$as_me:$LINENO: result: $ac_cv_exeext" >&5 +echo "${ECHO_T}$ac_cv_exeext" >&6 + +rm -f conftest.$ac_ext +EXEEXT=$ac_cv_exeext +ac_exeext=$EXEEXT +echo "$as_me:$LINENO: checking for suffix of object files" >&5 +echo $ECHO_N "checking for suffix of object files... $ECHO_C" >&6 +if test "${ac_cv_objext+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ + +int +main () +{ + + ; + return 0; +} +_ACEOF +rm -f conftest.o conftest.obj +if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 + (eval $ac_compile) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; then + for ac_file in `(ls conftest.o conftest.obj; ls conftest.*) 2>/dev/null`; do + case $ac_file in + *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg ) ;; + *) ac_cv_objext=`expr "$ac_file" : '.*\.\(.*\)'` + break;; + esac +done +else + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + +{ { echo "$as_me:$LINENO: error: cannot compute suffix of object files: cannot compile +See \`config.log' for more details." >&5 +echo "$as_me: error: cannot compute suffix of object files: cannot compile +See \`config.log' for more details." >&2;} + { (exit 1); exit 1; }; } +fi + +rm -f conftest.$ac_cv_objext conftest.$ac_ext +fi +echo "$as_me:$LINENO: result: $ac_cv_objext" >&5 +echo "${ECHO_T}$ac_cv_objext" >&6 +OBJEXT=$ac_cv_objext +ac_objext=$OBJEXT +echo "$as_me:$LINENO: checking whether we are using the GNU C compiler" >&5 +echo $ECHO_N "checking whether we are using the GNU C compiler... $ECHO_C" >&6 +if test "${ac_cv_c_compiler_gnu+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ + +int +main () +{ +#ifndef __GNUC__ + choke me +#endif + + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext +if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 + (eval $ac_compile) 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && + { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; } && + { ac_try='test -s conftest.$ac_objext' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; }; then + ac_compiler_gnu=yes +else + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + +ac_compiler_gnu=no +fi +rm -f conftest.err conftest.$ac_objext conftest.$ac_ext +ac_cv_c_compiler_gnu=$ac_compiler_gnu + +fi +echo "$as_me:$LINENO: result: $ac_cv_c_compiler_gnu" >&5 +echo "${ECHO_T}$ac_cv_c_compiler_gnu" >&6 +GCC=`test $ac_compiler_gnu = yes && echo yes` +ac_test_CFLAGS=${CFLAGS+set} +ac_save_CFLAGS=$CFLAGS +CFLAGS="-g" +echo "$as_me:$LINENO: checking whether $CC accepts -g" >&5 +echo $ECHO_N "checking whether $CC accepts -g... $ECHO_C" >&6 +if test "${ac_cv_prog_cc_g+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ + +int +main () +{ + + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext +if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 + (eval $ac_compile) 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && + { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; } && + { ac_try='test -s conftest.$ac_objext' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; }; then + ac_cv_prog_cc_g=yes +else + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + +ac_cv_prog_cc_g=no +fi +rm -f conftest.err conftest.$ac_objext conftest.$ac_ext +fi +echo "$as_me:$LINENO: result: $ac_cv_prog_cc_g" >&5 +echo "${ECHO_T}$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 +echo "$as_me:$LINENO: checking for $CC option to accept ANSI C" >&5 +echo $ECHO_N "checking for $CC option to accept ANSI C... $ECHO_C" >&6 +if test "${ac_cv_prog_cc_stdc+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + ac_cv_prog_cc_stdc=no +ac_save_CC=$CC +cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ +#include +#include +#include +#include +/* 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 -std1 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 -std1. */ +int osf4_cc_array ['\x00' == 0 ? 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 +# Don't try gcc -ansi; that turns off useful extensions and +# breaks some systems' header files. +# AIX -qlanglvl=ansi +# Ultrix and OSF/1 -std1 +# HP-UX 10.20 and later -Ae +# HP-UX older versions -Aa -D_HPUX_SOURCE +# SVR4 -Xc -D__EXTENSIONS__ +for ac_arg in "" -qlanglvl=ansi -std1 -Ae "-Aa -D_HPUX_SOURCE" "-Xc -D__EXTENSIONS__" +do + CC="$ac_save_CC $ac_arg" + rm -f conftest.$ac_objext +if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 + (eval $ac_compile) 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && + { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; } && + { ac_try='test -s conftest.$ac_objext' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; }; then + ac_cv_prog_cc_stdc=$ac_arg +break +else + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + +fi +rm -f conftest.err conftest.$ac_objext +done +rm -f conftest.$ac_ext conftest.$ac_objext +CC=$ac_save_CC + +fi + +case "x$ac_cv_prog_cc_stdc" in + x|xno) + echo "$as_me:$LINENO: result: none needed" >&5 +echo "${ECHO_T}none needed" >&6 ;; + *) + echo "$as_me:$LINENO: result: $ac_cv_prog_cc_stdc" >&5 +echo "${ECHO_T}$ac_cv_prog_cc_stdc" >&6 + CC="$CC $ac_cv_prog_cc_stdc" ;; +esac + +# Some people use a C++ compiler to compile C. Since we use `exit', +# in C++ we need to declare it. In case someone uses the same compiler +# for both compiling C and C++ we need to have the C++ compiler decide +# the declaration of exit, since it's the most demanding environment. +cat >conftest.$ac_ext <<_ACEOF +#ifndef __cplusplus + choke me +#endif +_ACEOF +rm -f conftest.$ac_objext +if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 + (eval $ac_compile) 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && + { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; } && + { ac_try='test -s conftest.$ac_objext' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; }; then + for ac_declaration in \ + '' \ + 'extern "C" void std::exit (int) throw (); using std::exit;' \ + 'extern "C" void std::exit (int); using std::exit;' \ + 'extern "C" void exit (int) throw ();' \ + 'extern "C" void exit (int);' \ + 'void exit (int);' +do + cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ +$ac_declaration +#include +int +main () +{ +exit (42); + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext +if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 + (eval $ac_compile) 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && + { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; } && + { ac_try='test -s conftest.$ac_objext' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; }; then + : +else + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + +continue +fi +rm -f conftest.err conftest.$ac_objext conftest.$ac_ext + cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ +$ac_declaration +int +main () +{ +exit (42); + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext +if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 + (eval $ac_compile) 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && + { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; } && + { ac_try='test -s conftest.$ac_objext' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; }; then + break +else + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + +fi +rm -f conftest.err conftest.$ac_objext conftest.$ac_ext +done +rm -f conftest* +if test -n "$ac_declaration"; then + echo '#ifdef __cplusplus' >>confdefs.h + echo $ac_declaration >>confdefs.h + echo '#endif' >>confdefs.h +fi + +else + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + +fi +rm -f conftest.err conftest.$ac_objext conftest.$ac_ext +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 "$GCC" = "yes"; then + CFLAGS="${CFLAGS} -Wall" +fi +ac_aux_dir= +for ac_dir in $srcdir $srcdir/.. $srcdir/../..; do + if test -f $ac_dir/install-sh; then + ac_aux_dir=$ac_dir + ac_install_sh="$ac_aux_dir/install-sh -c" + break + elif test -f $ac_dir/install.sh; then + ac_aux_dir=$ac_dir + ac_install_sh="$ac_aux_dir/install.sh -c" + break + elif test -f $ac_dir/shtool; then + ac_aux_dir=$ac_dir + ac_install_sh="$ac_aux_dir/shtool install -c" + break + fi +done +if test -z "$ac_aux_dir"; then + { { echo "$as_me:$LINENO: error: cannot find install-sh or install.sh in $srcdir $srcdir/.. $srcdir/../.." >&5 +echo "$as_me: error: cannot find install-sh or install.sh in $srcdir $srcdir/.. $srcdir/../.." >&2;} + { (exit 1); exit 1; }; } +fi +ac_config_guess="$SHELL $ac_aux_dir/config.guess" +ac_config_sub="$SHELL $ac_aux_dir/config.sub" +ac_configure="$SHELL $ac_aux_dir/configure" # This should be Cygnus configure. + +# Find a good install program. We prefer a C program (faster), +# so one script is as good as another. But avoid the broken or +# incompatible versions: +# SysV /etc/install, /usr/sbin/install +# SunOS /usr/etc/install +# IRIX /sbin/install +# AIX /bin/install +# AmigaOS /C/install, which installs bootblocks on floppy discs +# AIX 4 /usr/bin/installbsd, which doesn't work without a -g flag +# AFS /usr/afsws/bin/install, which mishandles nonexistent args +# SVR4 /usr/ucb/install, which tries to use the nonexistent group "staff" +# OS/2's system install, which has a completely different semantic +# ./install, which can be erroneously created by make from ./install.sh. +echo "$as_me:$LINENO: checking for a BSD-compatible install" >&5 +echo $ECHO_N "checking for a BSD-compatible install... $ECHO_C" >&6 +if test -z "$INSTALL"; then +if test "${ac_cv_path_install+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + # Account for people who put trailing slashes in PATH elements. +case $as_dir/ in + ./ | .// | /cC/* | \ + /etc/* | /usr/sbin/* | /usr/etc/* | /sbin/* | /usr/afsws/bin/* | \ + ?:\\/os2\\/install\\/* | ?:\\/OS2\\/INSTALL\\/* | \ + /usr/ucb/* ) ;; + *) + # OSF1 and SCO ODT 3.0 have their own names for install. + # Don't use installbsd from OSF since it installs stuff as root + # by default. + for ac_prog in ginstall scoinst install; do + for ac_exec_ext in '' $ac_executable_extensions; do + if $as_executable_p "$as_dir/$ac_prog$ac_exec_ext"; then + if test $ac_prog = install && + grep dspmsg "$as_dir/$ac_prog$ac_exec_ext" >/dev/null 2>&1; then + # AIX install. It has an incompatible calling convention. + : + elif test $ac_prog = install && + grep pwplus "$as_dir/$ac_prog$ac_exec_ext" >/dev/null 2>&1; then + # program-specific install script used by HP pwplus--don't use. + : + else + ac_cv_path_install="$as_dir/$ac_prog$ac_exec_ext -c" + break 3 + fi + fi + done + done + ;; +esac +done + + +fi + if test "${ac_cv_path_install+set}" = set; then + INSTALL=$ac_cv_path_install + else + # As a last resort, use the slow shell script. We don't cache a + # path for INSTALL within a source directory, because that will + # break other packages using the cache if that directory is + # removed, or if the path is relative. + INSTALL=$ac_install_sh + fi +fi +echo "$as_me:$LINENO: result: $INSTALL" >&5 +echo "${ECHO_T}$INSTALL" >&6 + +# Use test -z because SunOS4 sh mishandles braces in ${var-val}. +# It thinks the first close brace ends the variable substitution. +test -z "$INSTALL_PROGRAM" && INSTALL_PROGRAM='${INSTALL}' + +test -z "$INSTALL_SCRIPT" && INSTALL_SCRIPT='${INSTALL}' + +test -z "$INSTALL_DATA" && INSTALL_DATA='${INSTALL} -m 644' + + + + +echo "$as_me:$LINENO: checking for res_query in -lresolv" >&5 +echo $ECHO_N "checking for res_query in -lresolv... $ECHO_C" >&6 +if test "${ac_cv_lib_resolv_res_query+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + ac_check_lib_save_LIBS=$LIBS +LIBS="-lresolv $LIBS" +cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ + +/* Override any gcc2 internal prototype to avoid an error. */ +#ifdef __cplusplus +extern "C" +#endif +/* We use char because int might match the return type of a gcc2 + builtin and then its argument prototype would still apply. */ +char res_query (); +int +main () +{ +res_query (); + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext conftest$ac_exeext +if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 + (eval $ac_link) 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && + { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; } && + { ac_try='test -s conftest$ac_exeext' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; }; then + ac_cv_lib_resolv_res_query=yes +else + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + +ac_cv_lib_resolv_res_query=no +fi +rm -f conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext +LIBS=$ac_check_lib_save_LIBS +fi +echo "$as_me:$LINENO: result: $ac_cv_lib_resolv_res_query" >&5 +echo "${ECHO_T}$ac_cv_lib_resolv_res_query" >&6 +if test $ac_cv_lib_resolv_res_query = yes; then + cat >>confdefs.h <<_ACEOF +#define HAVE_LIBRESOLV 1 +_ACEOF + + LIBS="-lresolv $LIBS" + +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 +echo "$as_me:$LINENO: checking how to run the C preprocessor" >&5 +echo $ECHO_N "checking how to run the C preprocessor... $ECHO_C" >&6 +# On Suns, sometimes $CPP names a directory. +if test -n "$CPP" && test -d "$CPP"; then + CPP= +fi +if test -z "$CPP"; then + if test "${ac_cv_prog_CPP+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&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 >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ +#ifdef __STDC__ +# include +#else +# include +#endif + Syntax error +_ACEOF +if { (eval echo "$as_me:$LINENO: \"$ac_cpp conftest.$ac_ext\"") >&5 + (eval $ac_cpp conftest.$ac_ext) 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } >/dev/null; then + if test -s conftest.err; then + ac_cpp_err=$ac_c_preproc_warn_flag + ac_cpp_err=$ac_cpp_err$ac_c_werror_flag + else + ac_cpp_err= + fi +else + ac_cpp_err=yes +fi +if test -z "$ac_cpp_err"; then + : +else + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + # Broken: fails on valid input. +continue +fi +rm -f conftest.err conftest.$ac_ext + + # OK, works on sane cases. Now check whether non-existent headers + # can be detected and how. + cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ +#include +_ACEOF +if { (eval echo "$as_me:$LINENO: \"$ac_cpp conftest.$ac_ext\"") >&5 + (eval $ac_cpp conftest.$ac_ext) 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } >/dev/null; then + if test -s conftest.err; then + ac_cpp_err=$ac_c_preproc_warn_flag + ac_cpp_err=$ac_cpp_err$ac_c_werror_flag + else + ac_cpp_err= + fi +else + ac_cpp_err=yes +fi +if test -z "$ac_cpp_err"; then + # Broken: success on invalid input. +continue +else + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + # Passes both tests. +ac_preproc_ok=: +break +fi +rm -f conftest.err conftest.$ac_ext + +done +# Because of `break', _AC_PREPROC_IFELSE's cleaning code was skipped. +rm -f 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 +echo "$as_me:$LINENO: result: $CPP" >&5 +echo "${ECHO_T}$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 >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ +#ifdef __STDC__ +# include +#else +# include +#endif + Syntax error +_ACEOF +if { (eval echo "$as_me:$LINENO: \"$ac_cpp conftest.$ac_ext\"") >&5 + (eval $ac_cpp conftest.$ac_ext) 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } >/dev/null; then + if test -s conftest.err; then + ac_cpp_err=$ac_c_preproc_warn_flag + ac_cpp_err=$ac_cpp_err$ac_c_werror_flag + else + ac_cpp_err= + fi +else + ac_cpp_err=yes +fi +if test -z "$ac_cpp_err"; then + : +else + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + # Broken: fails on valid input. +continue +fi +rm -f conftest.err conftest.$ac_ext + + # OK, works on sane cases. Now check whether non-existent headers + # can be detected and how. + cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ +#include +_ACEOF +if { (eval echo "$as_me:$LINENO: \"$ac_cpp conftest.$ac_ext\"") >&5 + (eval $ac_cpp conftest.$ac_ext) 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } >/dev/null; then + if test -s conftest.err; then + ac_cpp_err=$ac_c_preproc_warn_flag + ac_cpp_err=$ac_cpp_err$ac_c_werror_flag + else + ac_cpp_err= + fi +else + ac_cpp_err=yes +fi +if test -z "$ac_cpp_err"; then + # Broken: success on invalid input. +continue +else + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + # Passes both tests. +ac_preproc_ok=: +break +fi +rm -f conftest.err conftest.$ac_ext + +done +# Because of `break', _AC_PREPROC_IFELSE's cleaning code was skipped. +rm -f conftest.err conftest.$ac_ext +if $ac_preproc_ok; then + : +else + { { echo "$as_me:$LINENO: error: C preprocessor \"$CPP\" fails sanity check +See \`config.log' for more details." >&5 +echo "$as_me: error: C preprocessor \"$CPP\" fails sanity check +See \`config.log' for more details." >&2;} + { (exit 1); exit 1; }; } +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 + + +echo "$as_me:$LINENO: checking for egrep" >&5 +echo $ECHO_N "checking for egrep... $ECHO_C" >&6 +if test "${ac_cv_prog_egrep+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + if echo a | (grep -E '(a|b)') >/dev/null 2>&1 + then ac_cv_prog_egrep='grep -E' + else ac_cv_prog_egrep='egrep' + fi +fi +echo "$as_me:$LINENO: result: $ac_cv_prog_egrep" >&5 +echo "${ECHO_T}$ac_cv_prog_egrep" >&6 + EGREP=$ac_cv_prog_egrep + + +echo "$as_me:$LINENO: checking for ANSI C header files" >&5 +echo $ECHO_N "checking for ANSI C header files... $ECHO_C" >&6 +if test "${ac_cv_header_stdc+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ +#include +#include +#include +#include + +int +main () +{ + + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext +if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 + (eval $ac_compile) 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && + { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; } && + { ac_try='test -s conftest.$ac_objext' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; }; then + ac_cv_header_stdc=yes +else + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + +ac_cv_header_stdc=no +fi +rm -f 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 >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* 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 >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* 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 >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ +#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)) + exit(2); + exit (0); +} +_ACEOF +rm -f conftest$ac_exeext +if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 + (eval $ac_link) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && { ac_try='./conftest$ac_exeext' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; }; then + : +else + echo "$as_me: program exited with status $ac_status" >&5 +echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + +( exit $ac_status ) +ac_cv_header_stdc=no +fi +rm -f core *.core gmon.out bb.out conftest$ac_exeext conftest.$ac_objext conftest.$ac_ext +fi +fi +fi +echo "$as_me:$LINENO: result: $ac_cv_header_stdc" >&5 +echo "${ECHO_T}$ac_cv_header_stdc" >&6 +if test $ac_cv_header_stdc = yes; then + +cat >>confdefs.h <<\_ACEOF +#define STDC_HEADERS 1 +_ACEOF + +fi + + ac_config_headers="$ac_config_headers config.h" + +# 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=`echo "ac_cv_header_$ac_header" | $as_tr_sh` +echo "$as_me:$LINENO: checking for $ac_header" >&5 +echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6 +if eval "test \"\${$as_ac_Header+set}\" = set"; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ +$ac_includes_default + +#include <$ac_header> +_ACEOF +rm -f conftest.$ac_objext +if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 + (eval $ac_compile) 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && + { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; } && + { ac_try='test -s conftest.$ac_objext' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; }; then + eval "$as_ac_Header=yes" +else + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + +eval "$as_ac_Header=no" +fi +rm -f conftest.err conftest.$ac_objext conftest.$ac_ext +fi +echo "$as_me:$LINENO: result: `eval echo '${'$as_ac_Header'}'`" >&5 +echo "${ECHO_T}`eval echo '${'$as_ac_Header'}'`" >&6 +if test `eval echo '${'$as_ac_Header'}'` = yes; then + cat >>confdefs.h <<_ACEOF +#define `echo "HAVE_$ac_header" | $as_tr_cpp` 1 +_ACEOF + +fi + +done + + +if test "${ac_cv_header_resolv_h+set}" = set; then + echo "$as_me:$LINENO: checking for resolv.h" >&5 +echo $ECHO_N "checking for resolv.h... $ECHO_C" >&6 +if test "${ac_cv_header_resolv_h+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +fi +echo "$as_me:$LINENO: result: $ac_cv_header_resolv_h" >&5 +echo "${ECHO_T}$ac_cv_header_resolv_h" >&6 +else + # Is the header compilable? +echo "$as_me:$LINENO: checking resolv.h usability" >&5 +echo $ECHO_N "checking resolv.h usability... $ECHO_C" >&6 +cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ +$ac_includes_default +#include +_ACEOF +rm -f conftest.$ac_objext +if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 + (eval $ac_compile) 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && + { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; } && + { ac_try='test -s conftest.$ac_objext' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; }; then + ac_header_compiler=yes +else + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + +ac_header_compiler=no +fi +rm -f conftest.err conftest.$ac_objext conftest.$ac_ext +echo "$as_me:$LINENO: result: $ac_header_compiler" >&5 +echo "${ECHO_T}$ac_header_compiler" >&6 + +# Is the header present? +echo "$as_me:$LINENO: checking resolv.h presence" >&5 +echo $ECHO_N "checking resolv.h presence... $ECHO_C" >&6 +cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ +#include +_ACEOF +if { (eval echo "$as_me:$LINENO: \"$ac_cpp conftest.$ac_ext\"") >&5 + (eval $ac_cpp conftest.$ac_ext) 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } >/dev/null; then + if test -s conftest.err; then + ac_cpp_err=$ac_c_preproc_warn_flag + ac_cpp_err=$ac_cpp_err$ac_c_werror_flag + else + ac_cpp_err= + fi +else + ac_cpp_err=yes +fi +if test -z "$ac_cpp_err"; then + ac_header_preproc=yes +else + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + ac_header_preproc=no +fi +rm -f conftest.err conftest.$ac_ext +echo "$as_me:$LINENO: result: $ac_header_preproc" >&5 +echo "${ECHO_T}$ac_header_preproc" >&6 + +# So? What about this header? +case $ac_header_compiler:$ac_header_preproc:$ac_c_preproc_warn_flag in + yes:no: ) + { echo "$as_me:$LINENO: WARNING: resolv.h: accepted by the compiler, rejected by the preprocessor!" >&5 +echo "$as_me: WARNING: resolv.h: accepted by the compiler, rejected by the preprocessor!" >&2;} + { echo "$as_me:$LINENO: WARNING: resolv.h: proceeding with the compiler's result" >&5 +echo "$as_me: WARNING: resolv.h: proceeding with the compiler's result" >&2;} + ac_header_preproc=yes + ;; + no:yes:* ) + { echo "$as_me:$LINENO: WARNING: resolv.h: present but cannot be compiled" >&5 +echo "$as_me: WARNING: resolv.h: present but cannot be compiled" >&2;} + { echo "$as_me:$LINENO: WARNING: resolv.h: check for missing prerequisite headers?" >&5 +echo "$as_me: WARNING: resolv.h: check for missing prerequisite headers?" >&2;} + { echo "$as_me:$LINENO: WARNING: resolv.h: see the Autoconf documentation" >&5 +echo "$as_me: WARNING: resolv.h: see the Autoconf documentation" >&2;} + { echo "$as_me:$LINENO: WARNING: resolv.h: section \"Present But Cannot Be Compiled\"" >&5 +echo "$as_me: WARNING: resolv.h: section \"Present But Cannot Be Compiled\"" >&2;} + { echo "$as_me:$LINENO: WARNING: resolv.h: proceeding with the preprocessor's result" >&5 +echo "$as_me: WARNING: resolv.h: proceeding with the preprocessor's result" >&2;} + { echo "$as_me:$LINENO: WARNING: resolv.h: in the future, the compiler will take precedence" >&5 +echo "$as_me: WARNING: resolv.h: in the future, the compiler will take precedence" >&2;} + ( + cat <<\_ASBOX +## ------------------------------------------ ## +## Report this to the AC_PACKAGE_NAME lists. ## +## ------------------------------------------ ## +_ASBOX + ) | + sed "s/^/$as_me: WARNING: /" >&2 + ;; +esac +echo "$as_me:$LINENO: checking for resolv.h" >&5 +echo $ECHO_N "checking for resolv.h... $ECHO_C" >&6 +if test "${ac_cv_header_resolv_h+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + ac_cv_header_resolv_h=$ac_header_preproc +fi +echo "$as_me:$LINENO: result: $ac_cv_header_resolv_h" >&5 +echo "${ECHO_T}$ac_cv_header_resolv_h" >&6 + +fi +if test $ac_cv_header_resolv_h = yes; then + : +else + { { echo "$as_me:$LINENO: error: \"No headers for name service applications\"" >&5 +echo "$as_me: error: \"No headers for name service applications\"" >&2;} + { (exit 1); exit 1; }; } +fi + + +if test "${ac_cv_header_arpa_nameser_h+set}" = set; then + echo "$as_me:$LINENO: checking for arpa/nameser.h" >&5 +echo $ECHO_N "checking for arpa/nameser.h... $ECHO_C" >&6 +if test "${ac_cv_header_arpa_nameser_h+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +fi +echo "$as_me:$LINENO: result: $ac_cv_header_arpa_nameser_h" >&5 +echo "${ECHO_T}$ac_cv_header_arpa_nameser_h" >&6 +else + # Is the header compilable? +echo "$as_me:$LINENO: checking arpa/nameser.h usability" >&5 +echo $ECHO_N "checking arpa/nameser.h usability... $ECHO_C" >&6 +cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ +$ac_includes_default +#include +_ACEOF +rm -f conftest.$ac_objext +if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 + (eval $ac_compile) 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && + { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; } && + { ac_try='test -s conftest.$ac_objext' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; }; then + ac_header_compiler=yes +else + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + +ac_header_compiler=no +fi +rm -f conftest.err conftest.$ac_objext conftest.$ac_ext +echo "$as_me:$LINENO: result: $ac_header_compiler" >&5 +echo "${ECHO_T}$ac_header_compiler" >&6 + +# Is the header present? +echo "$as_me:$LINENO: checking arpa/nameser.h presence" >&5 +echo $ECHO_N "checking arpa/nameser.h presence... $ECHO_C" >&6 +cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ +#include +_ACEOF +if { (eval echo "$as_me:$LINENO: \"$ac_cpp conftest.$ac_ext\"") >&5 + (eval $ac_cpp conftest.$ac_ext) 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } >/dev/null; then + if test -s conftest.err; then + ac_cpp_err=$ac_c_preproc_warn_flag + ac_cpp_err=$ac_cpp_err$ac_c_werror_flag + else + ac_cpp_err= + fi +else + ac_cpp_err=yes +fi +if test -z "$ac_cpp_err"; then + ac_header_preproc=yes +else + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + ac_header_preproc=no +fi +rm -f conftest.err conftest.$ac_ext +echo "$as_me:$LINENO: result: $ac_header_preproc" >&5 +echo "${ECHO_T}$ac_header_preproc" >&6 + +# So? What about this header? +case $ac_header_compiler:$ac_header_preproc:$ac_c_preproc_warn_flag in + yes:no: ) + { echo "$as_me:$LINENO: WARNING: arpa/nameser.h: accepted by the compiler, rejected by the preprocessor!" >&5 +echo "$as_me: WARNING: arpa/nameser.h: accepted by the compiler, rejected by the preprocessor!" >&2;} + { echo "$as_me:$LINENO: WARNING: arpa/nameser.h: proceeding with the compiler's result" >&5 +echo "$as_me: WARNING: arpa/nameser.h: proceeding with the compiler's result" >&2;} + ac_header_preproc=yes + ;; + no:yes:* ) + { echo "$as_me:$LINENO: WARNING: arpa/nameser.h: present but cannot be compiled" >&5 +echo "$as_me: WARNING: arpa/nameser.h: present but cannot be compiled" >&2;} + { echo "$as_me:$LINENO: WARNING: arpa/nameser.h: check for missing prerequisite headers?" >&5 +echo "$as_me: WARNING: arpa/nameser.h: check for missing prerequisite headers?" >&2;} + { echo "$as_me:$LINENO: WARNING: arpa/nameser.h: see the Autoconf documentation" >&5 +echo "$as_me: WARNING: arpa/nameser.h: see the Autoconf documentation" >&2;} + { echo "$as_me:$LINENO: WARNING: arpa/nameser.h: section \"Present But Cannot Be Compiled\"" >&5 +echo "$as_me: WARNING: arpa/nameser.h: section \"Present But Cannot Be Compiled\"" >&2;} + { echo "$as_me:$LINENO: WARNING: arpa/nameser.h: proceeding with the preprocessor's result" >&5 +echo "$as_me: WARNING: arpa/nameser.h: proceeding with the preprocessor's result" >&2;} + { echo "$as_me:$LINENO: WARNING: arpa/nameser.h: in the future, the compiler will take precedence" >&5 +echo "$as_me: WARNING: arpa/nameser.h: in the future, the compiler will take precedence" >&2;} + ( + cat <<\_ASBOX +## ------------------------------------------ ## +## Report this to the AC_PACKAGE_NAME lists. ## +## ------------------------------------------ ## +_ASBOX + ) | + sed "s/^/$as_me: WARNING: /" >&2 + ;; +esac +echo "$as_me:$LINENO: checking for arpa/nameser.h" >&5 +echo $ECHO_N "checking for arpa/nameser.h... $ECHO_C" >&6 +if test "${ac_cv_header_arpa_nameser_h+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + ac_cv_header_arpa_nameser_h=$ac_header_preproc +fi +echo "$as_me:$LINENO: result: $ac_cv_header_arpa_nameser_h" >&5 +echo "${ECHO_T}$ac_cv_header_arpa_nameser_h" >&6 + +fi +if test $ac_cv_header_arpa_nameser_h = yes; then + : +else + { { echo "$as_me:$LINENO: error: \"No headers for name service applications\"" >&5 +echo "$as_me: error: \"No headers for name service applications\"" >&2;} + { (exit 1); exit 1; }; } +fi + + +if test "${ac_cv_header_sys_time_h+set}" = set; then + echo "$as_me:$LINENO: checking for sys/time.h" >&5 +echo $ECHO_N "checking for sys/time.h... $ECHO_C" >&6 +if test "${ac_cv_header_sys_time_h+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +fi +echo "$as_me:$LINENO: result: $ac_cv_header_sys_time_h" >&5 +echo "${ECHO_T}$ac_cv_header_sys_time_h" >&6 +else + # Is the header compilable? +echo "$as_me:$LINENO: checking sys/time.h usability" >&5 +echo $ECHO_N "checking sys/time.h usability... $ECHO_C" >&6 +cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ +$ac_includes_default +#include +_ACEOF +rm -f conftest.$ac_objext +if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 + (eval $ac_compile) 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && + { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; } && + { ac_try='test -s conftest.$ac_objext' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; }; then + ac_header_compiler=yes +else + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + +ac_header_compiler=no +fi +rm -f conftest.err conftest.$ac_objext conftest.$ac_ext +echo "$as_me:$LINENO: result: $ac_header_compiler" >&5 +echo "${ECHO_T}$ac_header_compiler" >&6 + +# Is the header present? +echo "$as_me:$LINENO: checking sys/time.h presence" >&5 +echo $ECHO_N "checking sys/time.h presence... $ECHO_C" >&6 +cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ +#include +_ACEOF +if { (eval echo "$as_me:$LINENO: \"$ac_cpp conftest.$ac_ext\"") >&5 + (eval $ac_cpp conftest.$ac_ext) 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } >/dev/null; then + if test -s conftest.err; then + ac_cpp_err=$ac_c_preproc_warn_flag + ac_cpp_err=$ac_cpp_err$ac_c_werror_flag + else + ac_cpp_err= + fi +else + ac_cpp_err=yes +fi +if test -z "$ac_cpp_err"; then + ac_header_preproc=yes +else + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + ac_header_preproc=no +fi +rm -f conftest.err conftest.$ac_ext +echo "$as_me:$LINENO: result: $ac_header_preproc" >&5 +echo "${ECHO_T}$ac_header_preproc" >&6 + +# So? What about this header? +case $ac_header_compiler:$ac_header_preproc:$ac_c_preproc_warn_flag in + yes:no: ) + { echo "$as_me:$LINENO: WARNING: sys/time.h: accepted by the compiler, rejected by the preprocessor!" >&5 +echo "$as_me: WARNING: sys/time.h: accepted by the compiler, rejected by the preprocessor!" >&2;} + { echo "$as_me:$LINENO: WARNING: sys/time.h: proceeding with the compiler's result" >&5 +echo "$as_me: WARNING: sys/time.h: proceeding with the compiler's result" >&2;} + ac_header_preproc=yes + ;; + no:yes:* ) + { echo "$as_me:$LINENO: WARNING: sys/time.h: present but cannot be compiled" >&5 +echo "$as_me: WARNING: sys/time.h: present but cannot be compiled" >&2;} + { echo "$as_me:$LINENO: WARNING: sys/time.h: check for missing prerequisite headers?" >&5 +echo "$as_me: WARNING: sys/time.h: check for missing prerequisite headers?" >&2;} + { echo "$as_me:$LINENO: WARNING: sys/time.h: see the Autoconf documentation" >&5 +echo "$as_me: WARNING: sys/time.h: see the Autoconf documentation" >&2;} + { echo "$as_me:$LINENO: WARNING: sys/time.h: section \"Present But Cannot Be Compiled\"" >&5 +echo "$as_me: WARNING: sys/time.h: section \"Present But Cannot Be Compiled\"" >&2;} + { echo "$as_me:$LINENO: WARNING: sys/time.h: proceeding with the preprocessor's result" >&5 +echo "$as_me: WARNING: sys/time.h: proceeding with the preprocessor's result" >&2;} + { echo "$as_me:$LINENO: WARNING: sys/time.h: in the future, the compiler will take precedence" >&5 +echo "$as_me: WARNING: sys/time.h: in the future, the compiler will take precedence" >&2;} + ( + cat <<\_ASBOX +## ------------------------------------------ ## +## Report this to the AC_PACKAGE_NAME lists. ## +## ------------------------------------------ ## +_ASBOX + ) | + sed "s/^/$as_me: WARNING: /" >&2 + ;; +esac +echo "$as_me:$LINENO: checking for sys/time.h" >&5 +echo $ECHO_N "checking for sys/time.h... $ECHO_C" >&6 +if test "${ac_cv_header_sys_time_h+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + ac_cv_header_sys_time_h=$ac_header_preproc +fi +echo "$as_me:$LINENO: result: $ac_cv_header_sys_time_h" >&5 +echo "${ECHO_T}$ac_cv_header_sys_time_h" >&6 + +fi +if test $ac_cv_header_sys_time_h = yes; then + : +else + { { echo "$as_me:$LINENO: error: \"Mandatory header missing on your system\"" >&5 +echo "$as_me: error: \"Mandatory header missing on your system\"" >&2;} + { (exit 1); exit 1; }; } +fi + + +if test "${ac_cv_header_unistd_h+set}" = set; then + echo "$as_me:$LINENO: checking for unistd.h" >&5 +echo $ECHO_N "checking for unistd.h... $ECHO_C" >&6 +if test "${ac_cv_header_unistd_h+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +fi +echo "$as_me:$LINENO: result: $ac_cv_header_unistd_h" >&5 +echo "${ECHO_T}$ac_cv_header_unistd_h" >&6 +else + # Is the header compilable? +echo "$as_me:$LINENO: checking unistd.h usability" >&5 +echo $ECHO_N "checking unistd.h usability... $ECHO_C" >&6 +cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ +$ac_includes_default +#include +_ACEOF +rm -f conftest.$ac_objext +if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 + (eval $ac_compile) 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && + { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; } && + { ac_try='test -s conftest.$ac_objext' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; }; then + ac_header_compiler=yes +else + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + +ac_header_compiler=no +fi +rm -f conftest.err conftest.$ac_objext conftest.$ac_ext +echo "$as_me:$LINENO: result: $ac_header_compiler" >&5 +echo "${ECHO_T}$ac_header_compiler" >&6 + +# Is the header present? +echo "$as_me:$LINENO: checking unistd.h presence" >&5 +echo $ECHO_N "checking unistd.h presence... $ECHO_C" >&6 +cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ +#include +_ACEOF +if { (eval echo "$as_me:$LINENO: \"$ac_cpp conftest.$ac_ext\"") >&5 + (eval $ac_cpp conftest.$ac_ext) 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } >/dev/null; then + if test -s conftest.err; then + ac_cpp_err=$ac_c_preproc_warn_flag + ac_cpp_err=$ac_cpp_err$ac_c_werror_flag + else + ac_cpp_err= + fi +else + ac_cpp_err=yes +fi +if test -z "$ac_cpp_err"; then + ac_header_preproc=yes +else + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + ac_header_preproc=no +fi +rm -f conftest.err conftest.$ac_ext +echo "$as_me:$LINENO: result: $ac_header_preproc" >&5 +echo "${ECHO_T}$ac_header_preproc" >&6 + +# So? What about this header? +case $ac_header_compiler:$ac_header_preproc:$ac_c_preproc_warn_flag in + yes:no: ) + { echo "$as_me:$LINENO: WARNING: unistd.h: accepted by the compiler, rejected by the preprocessor!" >&5 +echo "$as_me: WARNING: unistd.h: accepted by the compiler, rejected by the preprocessor!" >&2;} + { echo "$as_me:$LINENO: WARNING: unistd.h: proceeding with the compiler's result" >&5 +echo "$as_me: WARNING: unistd.h: proceeding with the compiler's result" >&2;} + ac_header_preproc=yes + ;; + no:yes:* ) + { echo "$as_me:$LINENO: WARNING: unistd.h: present but cannot be compiled" >&5 +echo "$as_me: WARNING: unistd.h: present but cannot be compiled" >&2;} + { echo "$as_me:$LINENO: WARNING: unistd.h: check for missing prerequisite headers?" >&5 +echo "$as_me: WARNING: unistd.h: check for missing prerequisite headers?" >&2;} + { echo "$as_me:$LINENO: WARNING: unistd.h: see the Autoconf documentation" >&5 +echo "$as_me: WARNING: unistd.h: see the Autoconf documentation" >&2;} + { echo "$as_me:$LINENO: WARNING: unistd.h: section \"Present But Cannot Be Compiled\"" >&5 +echo "$as_me: WARNING: unistd.h: section \"Present But Cannot Be Compiled\"" >&2;} + { echo "$as_me:$LINENO: WARNING: unistd.h: proceeding with the preprocessor's result" >&5 +echo "$as_me: WARNING: unistd.h: proceeding with the preprocessor's result" >&2;} + { echo "$as_me:$LINENO: WARNING: unistd.h: in the future, the compiler will take precedence" >&5 +echo "$as_me: WARNING: unistd.h: in the future, the compiler will take precedence" >&2;} + ( + cat <<\_ASBOX +## ------------------------------------------ ## +## Report this to the AC_PACKAGE_NAME lists. ## +## ------------------------------------------ ## +_ASBOX + ) | + sed "s/^/$as_me: WARNING: /" >&2 + ;; +esac +echo "$as_me:$LINENO: checking for unistd.h" >&5 +echo $ECHO_N "checking for unistd.h... $ECHO_C" >&6 +if test "${ac_cv_header_unistd_h+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + ac_cv_header_unistd_h=$ac_header_preproc +fi +echo "$as_me:$LINENO: result: $ac_cv_header_unistd_h" >&5 +echo "${ECHO_T}$ac_cv_header_unistd_h" >&6 + +fi +if test $ac_cv_header_unistd_h = yes; then + : +else + { { echo "$as_me:$LINENO: error: \"Mandatory header missing on your system\"" >&5 +echo "$as_me: error: \"Mandatory header missing on your system\"" >&2;} + { (exit 1); exit 1; }; } +fi + + + + +echo "$as_me:$LINENO: checking if libnsl is mandatory" >&5 +echo $ECHO_N "checking if libnsl is mandatory... $ECHO_C" >&6 +cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ +#include + #include + #include + #include + union + { + HEADER hdr; + u_char buf[4096]; /* With RFC 2671, otherwise 512 is enough */ + } + response; + char *domain; + int requested_type; +int +main () +{ +res_query(domain, + C_IN, + requested_type, + (u_char *) & response, + sizeof (response)) + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext conftest$ac_exeext +if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 + (eval $ac_link) 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && + { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; } && + { ac_try='test -s conftest$ac_exeext' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; }; then + echo "$as_me:$LINENO: result: no" >&5 +echo "${ECHO_T}no" >&6 +else + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + echo "$as_me:$LINENO: result: yes" >&5 +echo "${ECHO_T}yes" >&6; LIBS="${LIBS} -lnsl" +fi +rm -f conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext + +echo "$as_me:$LINENO: checking loc_ntoa" >&5 +echo $ECHO_N "checking loc_ntoa... $ECHO_C" >&6 +cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ +#include +int +main () +{ + u_char *cp; char *result; loc_ntoa(cp, result) + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext conftest$ac_exeext +if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 + (eval $ac_link) 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && + { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; } && + { ac_try='test -s conftest$ac_exeext' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; }; then + echo "$as_me:$LINENO: result: yes" >&5 +echo "${ECHO_T}yes" >&6; cat >>confdefs.h <<\_ACEOF +#define HAVE_LOC_NTOA 1 +_ACEOF + +else + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + echo "$as_me:$LINENO: result: no, using the alternative" >&5 +echo "${ECHO_T}no, using the alternative" >&6; LOC_NTOA=loc_ntoa.o +fi +rm -f conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext + + +echo "$as_me:$LINENO: checking for an ANSI C-conforming const" >&5 +echo $ECHO_N "checking for an ANSI C-conforming const... $ECHO_C" >&6 +if test "${ac_cv_c_const+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ + +int +main () +{ +/* FIXME: Include the comments suggested by Paul. */ +#ifndef __cplusplus + /* Ultrix mips cc rejects this. */ + typedef int charset[2]; + const charset x; + /* SunOS 4.1.1 cc rejects this. */ + char const *const *ccp; + char **p; + /* NEC SVR4.0.2 mips cc rejects this. */ + struct point {int x, y;}; + static struct point const zero = {0,0}; + /* AIX XL C 1.02.0.0 rejects this. + It does not let you subtract one const X* pointer from another in + an arm of an if-expression whose if-part is not a constant + expression */ + const char *g = "string"; + ccp = &g + (g ? g-g : 0); + /* HPUX 7.0 cc rejects these. */ + ++ccp; + p = (char**) ccp; + ccp = (char const *const *) p; + { /* SCO 3.2v4 cc rejects this. */ + char *t; + char const *s = 0 ? (char *) 0 : (char const *) 0; + + *t++ = 0; + } + { /* Someone thinks the Sun supposedly-ANSI compiler will reject this. */ + int x[] = {25, 17}; + const int *foo = &x[0]; + ++foo; + } + { /* Sun SC1.0 ANSI compiler rejects this -- but not the above. */ + typedef const int *iptr; + iptr p = 0; + ++p; + } + { /* AIX XL C 1.02.0.0 rejects this saying + "k.c", line 2.27: 1506-025 (S) Operand must be a modifiable lvalue. */ + struct s { int j; const int *ap[3]; }; + struct s *b; b->j = 5; + } + { /* ULTRIX-32 V3.1 (Rev 9) vcc rejects this */ + const int foo = 10; + } +#endif + + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext +if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 + (eval $ac_compile) 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && + { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; } && + { ac_try='test -s conftest.$ac_objext' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; }; then + ac_cv_c_const=yes +else + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + +ac_cv_c_const=no +fi +rm -f conftest.err conftest.$ac_objext conftest.$ac_ext +fi +echo "$as_me:$LINENO: result: $ac_cv_c_const" >&5 +echo "${ECHO_T}$ac_cv_c_const" >&6 +if test $ac_cv_c_const = no; then + +cat >>confdefs.h <<\_ACEOF +#define const +_ACEOF + +fi + +echo "$as_me:$LINENO: checking for long" >&5 +echo $ECHO_N "checking for long... $ECHO_C" >&6 +if test "${ac_cv_type_long+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ +$ac_includes_default +int +main () +{ +if ((long *) 0) + return 0; +if (sizeof (long)) + return 0; + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext +if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 + (eval $ac_compile) 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && + { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; } && + { ac_try='test -s conftest.$ac_objext' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; }; then + ac_cv_type_long=yes +else + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + +ac_cv_type_long=no +fi +rm -f conftest.err conftest.$ac_objext conftest.$ac_ext +fi +echo "$as_me:$LINENO: result: $ac_cv_type_long" >&5 +echo "${ECHO_T}$ac_cv_type_long" >&6 + +echo "$as_me:$LINENO: checking size of long" >&5 +echo $ECHO_N "checking size of long... $ECHO_C" >&6 +if test "${ac_cv_sizeof_long+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + if test "$ac_cv_type_long" = yes; then + # The cast to unsigned long 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. + if test "$cross_compiling" = yes; then + # Depending upon the size, compute the lo and hi bounds. +cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ +$ac_includes_default +int +main () +{ +static int test_array [1 - 2 * !(((long) (sizeof (long))) >= 0)]; +test_array [0] = 0 + + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext +if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 + (eval $ac_compile) 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && + { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; } && + { ac_try='test -s conftest.$ac_objext' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; }; then + ac_lo=0 ac_mid=0 + while :; do + cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ +$ac_includes_default +int +main () +{ +static int test_array [1 - 2 * !(((long) (sizeof (long))) <= $ac_mid)]; +test_array [0] = 0 + + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext +if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 + (eval $ac_compile) 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && + { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; } && + { ac_try='test -s conftest.$ac_objext' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; }; then + ac_hi=$ac_mid; break +else + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + +ac_lo=`expr $ac_mid + 1` + if test $ac_lo -le $ac_mid; then + ac_lo= ac_hi= + break + fi + ac_mid=`expr 2 '*' $ac_mid + 1` +fi +rm -f conftest.err conftest.$ac_objext conftest.$ac_ext + done +else + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + +cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ +$ac_includes_default +int +main () +{ +static int test_array [1 - 2 * !(((long) (sizeof (long))) < 0)]; +test_array [0] = 0 + + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext +if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 + (eval $ac_compile) 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && + { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; } && + { ac_try='test -s conftest.$ac_objext' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; }; then + ac_hi=-1 ac_mid=-1 + while :; do + cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ +$ac_includes_default +int +main () +{ +static int test_array [1 - 2 * !(((long) (sizeof (long))) >= $ac_mid)]; +test_array [0] = 0 + + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext +if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 + (eval $ac_compile) 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && + { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; } && + { ac_try='test -s conftest.$ac_objext' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; }; then + ac_lo=$ac_mid; break +else + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + +ac_hi=`expr '(' $ac_mid ')' - 1` + if test $ac_mid -le $ac_hi; then + ac_lo= ac_hi= + break + fi + ac_mid=`expr 2 '*' $ac_mid` +fi +rm -f conftest.err conftest.$ac_objext conftest.$ac_ext + done +else + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + +ac_lo= ac_hi= +fi +rm -f conftest.err conftest.$ac_objext conftest.$ac_ext +fi +rm -f conftest.err conftest.$ac_objext conftest.$ac_ext +# Binary search between lo and hi bounds. +while test "x$ac_lo" != "x$ac_hi"; do + ac_mid=`expr '(' $ac_hi - $ac_lo ')' / 2 + $ac_lo` + cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ +$ac_includes_default +int +main () +{ +static int test_array [1 - 2 * !(((long) (sizeof (long))) <= $ac_mid)]; +test_array [0] = 0 + + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext +if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 + (eval $ac_compile) 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && + { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; } && + { ac_try='test -s conftest.$ac_objext' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; }; then + ac_hi=$ac_mid +else + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + +ac_lo=`expr '(' $ac_mid ')' + 1` +fi +rm -f conftest.err conftest.$ac_objext conftest.$ac_ext +done +case $ac_lo in +?*) ac_cv_sizeof_long=$ac_lo;; +'') { { echo "$as_me:$LINENO: error: cannot compute sizeof (long), 77 +See \`config.log' for more details." >&5 +echo "$as_me: error: cannot compute sizeof (long), 77 +See \`config.log' for more details." >&2;} + { (exit 1); exit 1; }; } ;; +esac +else + if test "$cross_compiling" = yes; then + { { echo "$as_me:$LINENO: error: internal error: not reached in cross-compile" >&5 +echo "$as_me: error: internal error: not reached in cross-compile" >&2;} + { (exit 1); exit 1; }; } +else + cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ +$ac_includes_default +long longval () { return (long) (sizeof (long)); } +unsigned long ulongval () { return (long) (sizeof (long)); } +#include +#include +int +main () +{ + + FILE *f = fopen ("conftest.val", "w"); + if (! f) + exit (1); + if (((long) (sizeof (long))) < 0) + { + long i = longval (); + if (i != ((long) (sizeof (long)))) + exit (1); + fprintf (f, "%ld\n", i); + } + else + { + unsigned long i = ulongval (); + if (i != ((long) (sizeof (long)))) + exit (1); + fprintf (f, "%lu\n", i); + } + exit (ferror (f) || fclose (f) != 0); + + ; + return 0; +} +_ACEOF +rm -f conftest$ac_exeext +if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 + (eval $ac_link) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && { ac_try='./conftest$ac_exeext' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; }; then + ac_cv_sizeof_long=`cat conftest.val` +else + echo "$as_me: program exited with status $ac_status" >&5 +echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + +( exit $ac_status ) +{ { echo "$as_me:$LINENO: error: cannot compute sizeof (long), 77 +See \`config.log' for more details." >&5 +echo "$as_me: error: cannot compute sizeof (long), 77 +See \`config.log' for more details." >&2;} + { (exit 1); exit 1; }; } +fi +rm -f core *.core gmon.out bb.out conftest$ac_exeext conftest.$ac_objext conftest.$ac_ext +fi +fi +rm -f conftest.val +else + ac_cv_sizeof_long=0 +fi +fi +echo "$as_me:$LINENO: result: $ac_cv_sizeof_long" >&5 +echo "${ECHO_T}$ac_cv_sizeof_long" >&6 +cat >>confdefs.h <<_ACEOF +#define SIZEOF_LONG $ac_cv_sizeof_long +_ACEOF + + +echo "$as_me:$LINENO: checking for int" >&5 +echo $ECHO_N "checking for int... $ECHO_C" >&6 +if test "${ac_cv_type_int+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ +$ac_includes_default +int +main () +{ +if ((int *) 0) + return 0; +if (sizeof (int)) + return 0; + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext +if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 + (eval $ac_compile) 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && + { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; } && + { ac_try='test -s conftest.$ac_objext' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; }; then + ac_cv_type_int=yes +else + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + +ac_cv_type_int=no +fi +rm -f conftest.err conftest.$ac_objext conftest.$ac_ext +fi +echo "$as_me:$LINENO: result: $ac_cv_type_int" >&5 +echo "${ECHO_T}$ac_cv_type_int" >&6 + +echo "$as_me:$LINENO: checking size of int" >&5 +echo $ECHO_N "checking size of int... $ECHO_C" >&6 +if test "${ac_cv_sizeof_int+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + if test "$ac_cv_type_int" = yes; then + # The cast to unsigned long 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. + if test "$cross_compiling" = yes; then + # Depending upon the size, compute the lo and hi bounds. +cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ +$ac_includes_default +int +main () +{ +static int test_array [1 - 2 * !(((long) (sizeof (int))) >= 0)]; +test_array [0] = 0 + + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext +if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 + (eval $ac_compile) 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && + { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; } && + { ac_try='test -s conftest.$ac_objext' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; }; then + ac_lo=0 ac_mid=0 + while :; do + cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ +$ac_includes_default +int +main () +{ +static int test_array [1 - 2 * !(((long) (sizeof (int))) <= $ac_mid)]; +test_array [0] = 0 + + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext +if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 + (eval $ac_compile) 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && + { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; } && + { ac_try='test -s conftest.$ac_objext' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; }; then + ac_hi=$ac_mid; break +else + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + +ac_lo=`expr $ac_mid + 1` + if test $ac_lo -le $ac_mid; then + ac_lo= ac_hi= + break + fi + ac_mid=`expr 2 '*' $ac_mid + 1` +fi +rm -f conftest.err conftest.$ac_objext conftest.$ac_ext + done +else + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + +cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ +$ac_includes_default +int +main () +{ +static int test_array [1 - 2 * !(((long) (sizeof (int))) < 0)]; +test_array [0] = 0 + + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext +if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 + (eval $ac_compile) 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && + { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; } && + { ac_try='test -s conftest.$ac_objext' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; }; then + ac_hi=-1 ac_mid=-1 + while :; do + cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ +$ac_includes_default +int +main () +{ +static int test_array [1 - 2 * !(((long) (sizeof (int))) >= $ac_mid)]; +test_array [0] = 0 + + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext +if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 + (eval $ac_compile) 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && + { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; } && + { ac_try='test -s conftest.$ac_objext' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; }; then + ac_lo=$ac_mid; break +else + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + +ac_hi=`expr '(' $ac_mid ')' - 1` + if test $ac_mid -le $ac_hi; then + ac_lo= ac_hi= + break + fi + ac_mid=`expr 2 '*' $ac_mid` +fi +rm -f conftest.err conftest.$ac_objext conftest.$ac_ext + done +else + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + +ac_lo= ac_hi= +fi +rm -f conftest.err conftest.$ac_objext conftest.$ac_ext +fi +rm -f conftest.err conftest.$ac_objext conftest.$ac_ext +# Binary search between lo and hi bounds. +while test "x$ac_lo" != "x$ac_hi"; do + ac_mid=`expr '(' $ac_hi - $ac_lo ')' / 2 + $ac_lo` + cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ +$ac_includes_default +int +main () +{ +static int test_array [1 - 2 * !(((long) (sizeof (int))) <= $ac_mid)]; +test_array [0] = 0 + + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext +if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 + (eval $ac_compile) 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && + { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; } && + { ac_try='test -s conftest.$ac_objext' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; }; then + ac_hi=$ac_mid +else + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + +ac_lo=`expr '(' $ac_mid ')' + 1` +fi +rm -f conftest.err conftest.$ac_objext conftest.$ac_ext +done +case $ac_lo in +?*) ac_cv_sizeof_int=$ac_lo;; +'') { { echo "$as_me:$LINENO: error: cannot compute sizeof (int), 77 +See \`config.log' for more details." >&5 +echo "$as_me: error: cannot compute sizeof (int), 77 +See \`config.log' for more details." >&2;} + { (exit 1); exit 1; }; } ;; +esac +else + if test "$cross_compiling" = yes; then + { { echo "$as_me:$LINENO: error: internal error: not reached in cross-compile" >&5 +echo "$as_me: error: internal error: not reached in cross-compile" >&2;} + { (exit 1); exit 1; }; } +else + cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ +$ac_includes_default +long longval () { return (long) (sizeof (int)); } +unsigned long ulongval () { return (long) (sizeof (int)); } +#include +#include +int +main () +{ + + FILE *f = fopen ("conftest.val", "w"); + if (! f) + exit (1); + if (((long) (sizeof (int))) < 0) + { + long i = longval (); + if (i != ((long) (sizeof (int)))) + exit (1); + fprintf (f, "%ld\n", i); + } + else + { + unsigned long i = ulongval (); + if (i != ((long) (sizeof (int)))) + exit (1); + fprintf (f, "%lu\n", i); + } + exit (ferror (f) || fclose (f) != 0); + + ; + return 0; +} +_ACEOF +rm -f conftest$ac_exeext +if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 + (eval $ac_link) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && { ac_try='./conftest$ac_exeext' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; }; then + ac_cv_sizeof_int=`cat conftest.val` +else + echo "$as_me: program exited with status $ac_status" >&5 +echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + +( exit $ac_status ) +{ { echo "$as_me:$LINENO: error: cannot compute sizeof (int), 77 +See \`config.log' for more details." >&5 +echo "$as_me: error: cannot compute sizeof (int), 77 +See \`config.log' for more details." >&2;} + { (exit 1); exit 1; }; } +fi +rm -f core *.core gmon.out bb.out conftest$ac_exeext conftest.$ac_objext conftest.$ac_ext +fi +fi +rm -f conftest.val +else + ac_cv_sizeof_int=0 +fi +fi +echo "$as_me:$LINENO: result: $ac_cv_sizeof_int" >&5 +echo "${ECHO_T}$ac_cv_sizeof_int" >&6 +cat >>confdefs.h <<_ACEOF +#define SIZEOF_INT $ac_cv_sizeof_int +_ACEOF + + +echo "$as_me:$LINENO: checking for short" >&5 +echo $ECHO_N "checking for short... $ECHO_C" >&6 +if test "${ac_cv_type_short+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ +$ac_includes_default +int +main () +{ +if ((short *) 0) + return 0; +if (sizeof (short)) + return 0; + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext +if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 + (eval $ac_compile) 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && + { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; } && + { ac_try='test -s conftest.$ac_objext' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; }; then + ac_cv_type_short=yes +else + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + +ac_cv_type_short=no +fi +rm -f conftest.err conftest.$ac_objext conftest.$ac_ext +fi +echo "$as_me:$LINENO: result: $ac_cv_type_short" >&5 +echo "${ECHO_T}$ac_cv_type_short" >&6 + +echo "$as_me:$LINENO: checking size of short" >&5 +echo $ECHO_N "checking size of short... $ECHO_C" >&6 +if test "${ac_cv_sizeof_short+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + if test "$ac_cv_type_short" = yes; then + # The cast to unsigned long 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. + if test "$cross_compiling" = yes; then + # Depending upon the size, compute the lo and hi bounds. +cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ +$ac_includes_default +int +main () +{ +static int test_array [1 - 2 * !(((long) (sizeof (short))) >= 0)]; +test_array [0] = 0 + + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext +if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 + (eval $ac_compile) 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && + { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; } && + { ac_try='test -s conftest.$ac_objext' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; }; then + ac_lo=0 ac_mid=0 + while :; do + cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ +$ac_includes_default +int +main () +{ +static int test_array [1 - 2 * !(((long) (sizeof (short))) <= $ac_mid)]; +test_array [0] = 0 + + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext +if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 + (eval $ac_compile) 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && + { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; } && + { ac_try='test -s conftest.$ac_objext' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; }; then + ac_hi=$ac_mid; break +else + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + +ac_lo=`expr $ac_mid + 1` + if test $ac_lo -le $ac_mid; then + ac_lo= ac_hi= + break + fi + ac_mid=`expr 2 '*' $ac_mid + 1` +fi +rm -f conftest.err conftest.$ac_objext conftest.$ac_ext + done +else + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + +cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ +$ac_includes_default +int +main () +{ +static int test_array [1 - 2 * !(((long) (sizeof (short))) < 0)]; +test_array [0] = 0 + + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext +if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 + (eval $ac_compile) 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && + { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; } && + { ac_try='test -s conftest.$ac_objext' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; }; then + ac_hi=-1 ac_mid=-1 + while :; do + cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ +$ac_includes_default +int +main () +{ +static int test_array [1 - 2 * !(((long) (sizeof (short))) >= $ac_mid)]; +test_array [0] = 0 + + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext +if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 + (eval $ac_compile) 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && + { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; } && + { ac_try='test -s conftest.$ac_objext' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; }; then + ac_lo=$ac_mid; break +else + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + +ac_hi=`expr '(' $ac_mid ')' - 1` + if test $ac_mid -le $ac_hi; then + ac_lo= ac_hi= + break + fi + ac_mid=`expr 2 '*' $ac_mid` +fi +rm -f conftest.err conftest.$ac_objext conftest.$ac_ext + done +else + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + +ac_lo= ac_hi= +fi +rm -f conftest.err conftest.$ac_objext conftest.$ac_ext +fi +rm -f conftest.err conftest.$ac_objext conftest.$ac_ext +# Binary search between lo and hi bounds. +while test "x$ac_lo" != "x$ac_hi"; do + ac_mid=`expr '(' $ac_hi - $ac_lo ')' / 2 + $ac_lo` + cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ +$ac_includes_default +int +main () +{ +static int test_array [1 - 2 * !(((long) (sizeof (short))) <= $ac_mid)]; +test_array [0] = 0 + + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext +if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 + (eval $ac_compile) 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && + { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; } && + { ac_try='test -s conftest.$ac_objext' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; }; then + ac_hi=$ac_mid +else + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + +ac_lo=`expr '(' $ac_mid ')' + 1` +fi +rm -f conftest.err conftest.$ac_objext conftest.$ac_ext +done +case $ac_lo in +?*) ac_cv_sizeof_short=$ac_lo;; +'') { { echo "$as_me:$LINENO: error: cannot compute sizeof (short), 77 +See \`config.log' for more details." >&5 +echo "$as_me: error: cannot compute sizeof (short), 77 +See \`config.log' for more details." >&2;} + { (exit 1); exit 1; }; } ;; +esac +else + if test "$cross_compiling" = yes; then + { { echo "$as_me:$LINENO: error: internal error: not reached in cross-compile" >&5 +echo "$as_me: error: internal error: not reached in cross-compile" >&2;} + { (exit 1); exit 1; }; } +else + cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ +$ac_includes_default +long longval () { return (long) (sizeof (short)); } +unsigned long ulongval () { return (long) (sizeof (short)); } +#include +#include +int +main () +{ + + FILE *f = fopen ("conftest.val", "w"); + if (! f) + exit (1); + if (((long) (sizeof (short))) < 0) + { + long i = longval (); + if (i != ((long) (sizeof (short)))) + exit (1); + fprintf (f, "%ld\n", i); + } + else + { + unsigned long i = ulongval (); + if (i != ((long) (sizeof (short)))) + exit (1); + fprintf (f, "%lu\n", i); + } + exit (ferror (f) || fclose (f) != 0); + + ; + return 0; +} +_ACEOF +rm -f conftest$ac_exeext +if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 + (eval $ac_link) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && { ac_try='./conftest$ac_exeext' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; }; then + ac_cv_sizeof_short=`cat conftest.val` +else + echo "$as_me: program exited with status $ac_status" >&5 +echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + +( exit $ac_status ) +{ { echo "$as_me:$LINENO: error: cannot compute sizeof (short), 77 +See \`config.log' for more details." >&5 +echo "$as_me: error: cannot compute sizeof (short), 77 +See \`config.log' for more details." >&2;} + { (exit 1); exit 1; }; } +fi +rm -f core *.core gmon.out bb.out conftest$ac_exeext conftest.$ac_objext conftest.$ac_ext +fi +fi +rm -f conftest.val +else + ac_cv_sizeof_short=0 +fi +fi +echo "$as_me:$LINENO: result: $ac_cv_sizeof_short" >&5 +echo "${ECHO_T}$ac_cv_sizeof_short" >&6 +cat >>confdefs.h <<_ACEOF +#define SIZEOF_SHORT $ac_cv_sizeof_short +_ACEOF + + +echo "$as_me:$LINENO: checking for char" >&5 +echo $ECHO_N "checking for char... $ECHO_C" >&6 +if test "${ac_cv_type_char+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ +$ac_includes_default +int +main () +{ +if ((char *) 0) + return 0; +if (sizeof (char)) + return 0; + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext +if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 + (eval $ac_compile) 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && + { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; } && + { ac_try='test -s conftest.$ac_objext' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; }; then + ac_cv_type_char=yes +else + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + +ac_cv_type_char=no +fi +rm -f conftest.err conftest.$ac_objext conftest.$ac_ext +fi +echo "$as_me:$LINENO: result: $ac_cv_type_char" >&5 +echo "${ECHO_T}$ac_cv_type_char" >&6 + +echo "$as_me:$LINENO: checking size of char" >&5 +echo $ECHO_N "checking size of char... $ECHO_C" >&6 +if test "${ac_cv_sizeof_char+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + if test "$ac_cv_type_char" = yes; then + # The cast to unsigned long 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. + if test "$cross_compiling" = yes; then + # Depending upon the size, compute the lo and hi bounds. +cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ +$ac_includes_default +int +main () +{ +static int test_array [1 - 2 * !(((long) (sizeof (char))) >= 0)]; +test_array [0] = 0 + + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext +if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 + (eval $ac_compile) 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && + { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; } && + { ac_try='test -s conftest.$ac_objext' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; }; then + ac_lo=0 ac_mid=0 + while :; do + cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ +$ac_includes_default +int +main () +{ +static int test_array [1 - 2 * !(((long) (sizeof (char))) <= $ac_mid)]; +test_array [0] = 0 + + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext +if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 + (eval $ac_compile) 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && + { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; } && + { ac_try='test -s conftest.$ac_objext' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; }; then + ac_hi=$ac_mid; break +else + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + +ac_lo=`expr $ac_mid + 1` + if test $ac_lo -le $ac_mid; then + ac_lo= ac_hi= + break + fi + ac_mid=`expr 2 '*' $ac_mid + 1` +fi +rm -f conftest.err conftest.$ac_objext conftest.$ac_ext + done +else + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + +cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ +$ac_includes_default +int +main () +{ +static int test_array [1 - 2 * !(((long) (sizeof (char))) < 0)]; +test_array [0] = 0 + + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext +if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 + (eval $ac_compile) 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && + { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; } && + { ac_try='test -s conftest.$ac_objext' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; }; then + ac_hi=-1 ac_mid=-1 + while :; do + cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ +$ac_includes_default +int +main () +{ +static int test_array [1 - 2 * !(((long) (sizeof (char))) >= $ac_mid)]; +test_array [0] = 0 + + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext +if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 + (eval $ac_compile) 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && + { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; } && + { ac_try='test -s conftest.$ac_objext' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; }; then + ac_lo=$ac_mid; break +else + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + +ac_hi=`expr '(' $ac_mid ')' - 1` + if test $ac_mid -le $ac_hi; then + ac_lo= ac_hi= + break + fi + ac_mid=`expr 2 '*' $ac_mid` +fi +rm -f conftest.err conftest.$ac_objext conftest.$ac_ext + done +else + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + +ac_lo= ac_hi= +fi +rm -f conftest.err conftest.$ac_objext conftest.$ac_ext +fi +rm -f conftest.err conftest.$ac_objext conftest.$ac_ext +# Binary search between lo and hi bounds. +while test "x$ac_lo" != "x$ac_hi"; do + ac_mid=`expr '(' $ac_hi - $ac_lo ')' / 2 + $ac_lo` + cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ +$ac_includes_default +int +main () +{ +static int test_array [1 - 2 * !(((long) (sizeof (char))) <= $ac_mid)]; +test_array [0] = 0 + + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext +if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 + (eval $ac_compile) 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && + { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; } && + { ac_try='test -s conftest.$ac_objext' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; }; then + ac_hi=$ac_mid +else + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + +ac_lo=`expr '(' $ac_mid ')' + 1` +fi +rm -f conftest.err conftest.$ac_objext conftest.$ac_ext +done +case $ac_lo in +?*) ac_cv_sizeof_char=$ac_lo;; +'') { { echo "$as_me:$LINENO: error: cannot compute sizeof (char), 77 +See \`config.log' for more details." >&5 +echo "$as_me: error: cannot compute sizeof (char), 77 +See \`config.log' for more details." >&2;} + { (exit 1); exit 1; }; } ;; +esac +else + if test "$cross_compiling" = yes; then + { { echo "$as_me:$LINENO: error: internal error: not reached in cross-compile" >&5 +echo "$as_me: error: internal error: not reached in cross-compile" >&2;} + { (exit 1); exit 1; }; } +else + cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ +$ac_includes_default +long longval () { return (long) (sizeof (char)); } +unsigned long ulongval () { return (long) (sizeof (char)); } +#include +#include +int +main () +{ + + FILE *f = fopen ("conftest.val", "w"); + if (! f) + exit (1); + if (((long) (sizeof (char))) < 0) + { + long i = longval (); + if (i != ((long) (sizeof (char)))) + exit (1); + fprintf (f, "%ld\n", i); + } + else + { + unsigned long i = ulongval (); + if (i != ((long) (sizeof (char)))) + exit (1); + fprintf (f, "%lu\n", i); + } + exit (ferror (f) || fclose (f) != 0); + + ; + return 0; +} +_ACEOF +rm -f conftest$ac_exeext +if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 + (eval $ac_link) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && { ac_try='./conftest$ac_exeext' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; }; then + ac_cv_sizeof_char=`cat conftest.val` +else + echo "$as_me: program exited with status $ac_status" >&5 +echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + +( exit $ac_status ) +{ { echo "$as_me:$LINENO: error: cannot compute sizeof (char), 77 +See \`config.log' for more details." >&5 +echo "$as_me: error: cannot compute sizeof (char), 77 +See \`config.log' for more details." >&2;} + { (exit 1); exit 1; }; } +fi +rm -f core *.core gmon.out bb.out conftest$ac_exeext conftest.$ac_objext conftest.$ac_ext +fi +fi +rm -f conftest.val +else + ac_cv_sizeof_char=0 +fi +fi +echo "$as_me:$LINENO: result: $ac_cv_sizeof_char" >&5 +echo "${ECHO_T}$ac_cv_sizeof_char" >&6 +cat >>confdefs.h <<_ACEOF +#define SIZEOF_CHAR $ac_cv_sizeof_char +_ACEOF + + + + 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, don't put newlines in cache variables' values. +# 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. +{ + (set) 2>&1 | + case `(ac_space=' '; set | grep ac_space) 2>&1` in + *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 \ + "s/^\\([_$as_cr_alnum]*_cv_[_$as_cr_alnum]*\\)=\\(.*\\)/\\1=\\2/p" + ;; + esac; +} | + sed ' + t clear + : clear + s/^\([^=]*\)=\(.*[{}].*\)$/test "${\1+set}" = set || &/ + t end + /^ac_cv_env/!s/^\([^=]*\)=\(.*\)$/\1=${\1=\2}/ + : end' >>confcache +if diff $cache_file confcache >/dev/null 2>&1; then :; else + if test -w $cache_file; then + test "x$cache_file" != "x/dev/null" && echo "updating cache $cache_file" + cat confcache >$cache_file + else + echo "not updating unwritable cache $cache_file" + 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}' + +# VPATH may cause trouble with some makes, so we remove $(srcdir), +# ${srcdir} and @srcdir@ 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[ ]*=/{ +s/:*\$(srcdir):*/:/; +s/:*\${srcdir}:*/:/; +s/:*@srcdir@:*/:/; +s/^\([^=]*=[ ]*\):*/\1/; +s/:*$//; +s/^[^=]*=[ ]*$//; +}' +fi + +DEFS=-DHAVE_CONFIG_H + +ac_libobjs= +ac_ltlibobjs= +for ac_i in : $LIBOBJS; do test "x$ac_i" = x: && continue + # 1. Remove the extension, and $U if already installed. + ac_i=`echo "$ac_i" | + sed 's/\$U\././;s/\.o$//;s/\.obj$//'` + # 2. Add them. + ac_libobjs="$ac_libobjs $ac_i\$U.$ac_objext" + ac_ltlibobjs="$ac_ltlibobjs $ac_i"'$U.lo' +done +LIBOBJS=$ac_libobjs + +LTLIBOBJS=$ac_ltlibobjs + + + +: ${CONFIG_STATUS=./config.status} +ac_clean_files_save=$ac_clean_files +ac_clean_files="$ac_clean_files $CONFIG_STATUS" +{ echo "$as_me:$LINENO: creating $CONFIG_STATUS" >&5 +echo "$as_me: creating $CONFIG_STATUS" >&6;} +cat >$CONFIG_STATUS <<_ACEOF +#! $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} +_ACEOF + +cat >>$CONFIG_STATUS <<\_ACEOF +## --------------------- ## +## M4sh Initialization. ## +## --------------------- ## + +# Be Bourne compatible +if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then + emulate sh + NULLCMD=: + # Zsh 3.x and 4.x performs word splitting on ${1+"$@"}, which + # is contrary to our usage. Disable this feature. + alias -g '${1+"$@"}'='"$@"' +elif test -n "${BASH_VERSION+set}" && (set -o posix) >/dev/null 2>&1; then + set -o posix +fi +DUALCASE=1; export DUALCASE # for MKS sh + +# Support unset when possible. +if ( (MAIL=60; unset MAIL) || exit) >/dev/null 2>&1; then + as_unset=unset +else + as_unset=false +fi + + +# Work around bugs in pre-3.0 UWIN ksh. +$as_unset ENV MAIL MAILPATH +PS1='$ ' +PS2='> ' +PS4='+ ' + +# NLS nuisances. +for as_var in \ + LANG LANGUAGE LC_ADDRESS LC_ALL LC_COLLATE LC_CTYPE LC_IDENTIFICATION \ + LC_MEASUREMENT LC_MESSAGES LC_MONETARY LC_NAME LC_NUMERIC LC_PAPER \ + LC_TELEPHONE LC_TIME +do + if (set +x; test -z "`(eval $as_var=C; export $as_var) 2>&1`"); then + eval $as_var=C; export $as_var + else + $as_unset $as_var + fi +done + +# Required to use basename. +if expr a : '\(a\)' >/dev/null 2>&1; 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 + + +# Name of the executable. +as_me=`$as_basename "$0" || +$as_expr X/"$0" : '.*/\([^/][^/]*\)/*$' \| \ + X"$0" : 'X\(//\)$' \| \ + X"$0" : 'X\(/\)$' \| \ + . : '\(.\)' 2>/dev/null || +echo X/"$0" | + sed '/^.*\/\([^/][^/]*\)\/*$/{ s//\1/; q; } + /^X\/\(\/\/\)$/{ s//\1/; q; } + /^X\/\(\/\).*/{ s//\1/; q; } + s/.*/./; q'` + + +# PATH needs CR, and LINENO needs CR and PATH. +# 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 + +# The user is always right. +if test "${PATH_SEPARATOR+set}" != set; then + echo "#! /bin/sh" >conf$$.sh + echo "exit 0" >>conf$$.sh + chmod +x conf$$.sh + if (PATH="/nonexistent;."; conf$$.sh) >/dev/null 2>&1; then + PATH_SEPARATOR=';' + else + PATH_SEPARATOR=: + fi + rm -f conf$$.sh +fi + + + as_lineno_1=$LINENO + as_lineno_2=$LINENO + as_lineno_3=`(expr $as_lineno_1 + 1) 2>/dev/null` + test "x$as_lineno_1" != "x$as_lineno_2" && + test "x$as_lineno_3" = "x$as_lineno_2" || { + # Find who we are. Look in the path if we contain no path at all + # relative or not. + 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 + + ;; + 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 + { { echo "$as_me:$LINENO: error: cannot find myself; rerun with an absolute path" >&5 +echo "$as_me: error: cannot find myself; rerun with an absolute path" >&2;} + { (exit 1); exit 1; }; } + fi + case $CONFIG_SHELL in + '') + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in /bin$PATH_SEPARATOR/usr/bin$PATH_SEPARATOR$PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for as_base in sh bash ksh sh5; do + case $as_dir in + /*) + if ("$as_dir/$as_base" -c ' + as_lineno_1=$LINENO + as_lineno_2=$LINENO + as_lineno_3=`(expr $as_lineno_1 + 1) 2>/dev/null` + test "x$as_lineno_1" != "x$as_lineno_2" && + test "x$as_lineno_3" = "x$as_lineno_2" ') 2>/dev/null; then + $as_unset BASH_ENV || test "${BASH_ENV+set}" != set || { BASH_ENV=; export BASH_ENV; } + $as_unset ENV || test "${ENV+set}" != set || { ENV=; export ENV; } + CONFIG_SHELL=$as_dir/$as_base + export CONFIG_SHELL + exec "$CONFIG_SHELL" "$0" ${1+"$@"} + fi;; + esac + done +done +;; + esac + + # Create $as_me.lineno as a copy of $as_myself, but with $LINENO + # uniformly replaced by the line number. The first 'sed' inserts a + # line-number line before each line; the second 'sed' does the real + # work. The second script uses 'N' to pair each line-number line + # with the numbered line, and appends trailing '-' during + # substitution so that $LINENO is not a special case at line end. + # (Raja R Harinath suggested sed '=', and Paul Eggert wrote the + # second 'sed' script. Blame Lee E. McMahon for sed's syntax. :-) + sed '=' <$as_myself | + sed ' + N + s,$,-, + : loop + s,^\(['$as_cr_digits']*\)\(.*\)[$]LINENO\([^'$as_cr_alnum'_]\),\1\2\1\3, + t loop + s,-$,, + s,^['$as_cr_digits']*\n,, + ' >$as_me.lineno && + chmod +x $as_me.lineno || + { { echo "$as_me:$LINENO: error: cannot create $as_me.lineno; rerun with a POSIX shell" >&5 +echo "$as_me: error: cannot create $as_me.lineno; rerun with a POSIX shell" >&2;} + { (exit 1); exit 1; }; } + + # 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 sensible to this). + . ./$as_me.lineno + # Exit status is that of the last command. + exit +} + + +case `echo "testing\c"; echo 1,2,3`,`echo -n testing; echo 1,2,3` in + *c*,-n*) ECHO_N= ECHO_C=' +' ECHO_T=' ' ;; + *c*,* ) ECHO_N=-n ECHO_C= ECHO_T= ;; + *) ECHO_N= ECHO_C='\c' ECHO_T= ;; +esac + +if expr a : '\(a\)' >/dev/null 2>&1; then + as_expr=expr +else + as_expr=false +fi + +rm -f conf$$ conf$$.exe conf$$.file +echo >conf$$.file +if ln -s conf$$.file conf$$ 2>/dev/null; then + # We could just check for DJGPP; but this test a) works b) is more generic + # and c) will remain valid once DJGPP supports symlinks (DJGPP 2.04). + if test -f conf$$.exe; then + # Don't use ln at all; we don't have any links + as_ln_s='cp -p' + else + as_ln_s='ln -s' + fi +elif ln conf$$.file conf$$ 2>/dev/null; then + as_ln_s=ln +else + as_ln_s='cp -p' +fi +rm -f conf$$ conf$$.exe conf$$.file + +if mkdir -p . 2>/dev/null; then + as_mkdir_p=: +else + test -d ./-p && rmdir ./-p + as_mkdir_p=false +fi + +as_executable_p="test -f" + +# 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'" + + +# IFS +# We need space, tab and new line, in precisely that order. +as_nl=' +' +IFS=" $as_nl" + +# CDPATH. +$as_unset CDPATH + +exec 6>&1 + +# Open the log real soon, to keep \$[0] and so on meaningful, and to +# report actual input values of CONFIG_FILES etc. instead of their +# values after options handling. Logging --version etc. is OK. +exec 5>>config.log +{ + echo + sed 'h;s/./-/g;s/^.../## /;s/...$/ ##/;p;x;p;x' <<_ASBOX +## Running $as_me. ## +_ASBOX +} >&5 +cat >&5 <<_CSEOF + +This file was extended by $as_me, which was +generated by GNU Autoconf 2.59. Invocation command line was + + CONFIG_FILES = $CONFIG_FILES + CONFIG_HEADERS = $CONFIG_HEADERS + CONFIG_LINKS = $CONFIG_LINKS + CONFIG_COMMANDS = $CONFIG_COMMANDS + $ $0 $@ + +_CSEOF +echo "on `(hostname || uname -n) 2>/dev/null | sed 1q`" >&5 +echo >&5 +_ACEOF + +# Files that config.status was made for. +if test -n "$ac_config_files"; then + echo "config_files=\"$ac_config_files\"" >>$CONFIG_STATUS +fi + +if test -n "$ac_config_headers"; then + echo "config_headers=\"$ac_config_headers\"" >>$CONFIG_STATUS +fi + +if test -n "$ac_config_links"; then + echo "config_links=\"$ac_config_links\"" >>$CONFIG_STATUS +fi + +if test -n "$ac_config_commands"; then + echo "config_commands=\"$ac_config_commands\"" >>$CONFIG_STATUS +fi + +cat >>$CONFIG_STATUS <<\_ACEOF + +ac_cs_usage="\ +\`$as_me' instantiates files from templates according to the +current configuration. + +Usage: $0 [OPTIONS] [FILE]... + + -h, --help print this help, then exit + -V, --version print version number, then exit + -q, --quiet 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 ." +_ACEOF + +cat >>$CONFIG_STATUS <<_ACEOF +ac_cs_version="\\ +config.status +configured by $0, generated by GNU Autoconf 2.59, + with options \\"`echo "$ac_configure_args" | sed 's/[\\""\`\$]/\\\\&/g'`\\" + +Copyright (C) 2003 Free Software Foundation, Inc. +This config.status script is free software; the Free Software Foundation +gives unlimited permission to copy, distribute and modify it." +srcdir=$srcdir +INSTALL="$INSTALL" +_ACEOF + +cat >>$CONFIG_STATUS <<\_ACEOF +# If no file are specified by the user, then we need to provide default +# value. By we need to know if files were specified by the user. +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=$1 + ac_optarg=$2 + ac_shift=shift + ;; + *) # This is not an option, so the user has probably given explicit + # arguments. + ac_option=$1 + ac_need_defaults=false;; + esac + + case $ac_option in + # Handling of the options. +_ACEOF +cat >>$CONFIG_STATUS <<\_ACEOF + -recheck | --recheck | --rechec | --reche | --rech | --rec | --re | --r) + ac_cs_recheck=: ;; + --version | --vers* | -V ) + echo "$ac_cs_version"; exit 0 ;; + --he | --h) + # Conflict between --help and --header + { { echo "$as_me:$LINENO: error: ambiguous option: $1 +Try \`$0 --help' for more information." >&5 +echo "$as_me: error: ambiguous option: $1 +Try \`$0 --help' for more information." >&2;} + { (exit 1); exit 1; }; };; + --help | --hel | -h ) + echo "$ac_cs_usage"; exit 0 ;; + --debug | --d* | -d ) + debug=: ;; + --file | --fil | --fi | --f ) + $ac_shift + CONFIG_FILES="$CONFIG_FILES $ac_optarg" + ac_need_defaults=false;; + --header | --heade | --head | --hea ) + $ac_shift + CONFIG_HEADERS="$CONFIG_HEADERS $ac_optarg" + ac_need_defaults=false;; + -q | -quiet | --quiet | --quie | --qui | --qu | --q \ + | -silent | --silent | --silen | --sile | --sil | --si | --s) + ac_cs_silent=: ;; + + # This is an error. + -*) { { echo "$as_me:$LINENO: error: unrecognized option: $1 +Try \`$0 --help' for more information." >&5 +echo "$as_me: error: unrecognized option: $1 +Try \`$0 --help' for more information." >&2;} + { (exit 1); exit 1; }; } ;; + + *) ac_config_targets="$ac_config_targets $1" ;; + + 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 +if \$ac_cs_recheck; then + echo "running $SHELL $0 " $ac_configure_args \$ac_configure_extra_args " --no-create --no-recursion" >&6 + exec $SHELL $0 $ac_configure_args \$ac_configure_extra_args --no-create --no-recursion +fi + +_ACEOF + + + + + +cat >>$CONFIG_STATUS <<\_ACEOF +for ac_config_target in $ac_config_targets +do + case "$ac_config_target" in + # Handling of arguments. + "Makefile" ) CONFIG_FILES="$CONFIG_FILES Makefile" ;; + "config.h" ) CONFIG_HEADERS="$CONFIG_HEADERS config.h" ;; + *) { { echo "$as_me:$LINENO: error: invalid argument: $ac_config_target" >&5 +echo "$as_me: error: invalid argument: $ac_config_target" >&2;} + { (exit 1); exit 1; }; };; + 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 to put it here, and in addition, +# creating and moving files from /tmp can sometimes cause problems. +# Create a temporary directory, and hook for its removal unless debugging. +$debug || +{ + trap 'exit_status=$?; rm -rf $tmp && exit $exit_status' 0 + trap '{ (exit 1); exit 1; }' 1 2 13 15 +} + +# Create a (secure) tmp directory for tmp files. + +{ + tmp=`(umask 077 && mktemp -d -q "./confstatXXXXXX") 2>/dev/null` && + test -n "$tmp" && test -d "$tmp" +} || +{ + tmp=./confstat$$-$RANDOM + (umask 077 && mkdir $tmp) +} || +{ + echo "$me: cannot create a temporary directory in ." >&2 + { (exit 1); exit 1; } +} + +_ACEOF + +cat >>$CONFIG_STATUS <<_ACEOF + +# +# CONFIG_FILES section. +# + +# No need to generate the scripts if there are no CONFIG_FILES. +# This happens for instance when ./config.status config.h +if test -n "\$CONFIG_FILES"; then + # Protect against being on the right side of a sed subst in config.status. + sed 's/,@/@@/; s/@,/@@/; s/,;t t\$/@;t t/; /@;t t\$/s/[\\\\&,]/\\\\&/g; + s/@@/,@/; s/@@/@,/; s/@;t t\$/,;t t/' >\$tmp/subs.sed <<\\CEOF +s,@SHELL@,$SHELL,;t t +s,@PATH_SEPARATOR@,$PATH_SEPARATOR,;t t +s,@PACKAGE_NAME@,$PACKAGE_NAME,;t t +s,@PACKAGE_TARNAME@,$PACKAGE_TARNAME,;t t +s,@PACKAGE_VERSION@,$PACKAGE_VERSION,;t t +s,@PACKAGE_STRING@,$PACKAGE_STRING,;t t +s,@PACKAGE_BUGREPORT@,$PACKAGE_BUGREPORT,;t t +s,@exec_prefix@,$exec_prefix,;t t +s,@prefix@,$prefix,;t t +s,@program_transform_name@,$program_transform_name,;t t +s,@bindir@,$bindir,;t t +s,@sbindir@,$sbindir,;t t +s,@libexecdir@,$libexecdir,;t t +s,@datadir@,$datadir,;t t +s,@sysconfdir@,$sysconfdir,;t t +s,@sharedstatedir@,$sharedstatedir,;t t +s,@localstatedir@,$localstatedir,;t t +s,@libdir@,$libdir,;t t +s,@includedir@,$includedir,;t t +s,@oldincludedir@,$oldincludedir,;t t +s,@infodir@,$infodir,;t t +s,@mandir@,$mandir,;t t +s,@build_alias@,$build_alias,;t t +s,@host_alias@,$host_alias,;t t +s,@target_alias@,$target_alias,;t t +s,@DEFS@,$DEFS,;t t +s,@ECHO_C@,$ECHO_C,;t t +s,@ECHO_N@,$ECHO_N,;t t +s,@ECHO_T@,$ECHO_T,;t t +s,@LIBS@,$LIBS,;t t +s,@CC@,$CC,;t t +s,@CFLAGS@,$CFLAGS,;t t +s,@LDFLAGS@,$LDFLAGS,;t t +s,@CPPFLAGS@,$CPPFLAGS,;t t +s,@ac_ct_CC@,$ac_ct_CC,;t t +s,@EXEEXT@,$EXEEXT,;t t +s,@OBJEXT@,$OBJEXT,;t t +s,@INSTALL_PROGRAM@,$INSTALL_PROGRAM,;t t +s,@INSTALL_SCRIPT@,$INSTALL_SCRIPT,;t t +s,@INSTALL_DATA@,$INSTALL_DATA,;t t +s,@CPP@,$CPP,;t t +s,@EGREP@,$EGREP,;t t +s,@LOC_NTOA@,$LOC_NTOA,;t t +s,@LIBOBJS@,$LIBOBJS,;t t +s,@LTLIBOBJS@,$LTLIBOBJS,;t t +CEOF + +_ACEOF + + cat >>$CONFIG_STATUS <<\_ACEOF + # Split the substitutions into bite-sized pieces for seds with + # small command number limits, like on Digital OSF/1 and HP-UX. + ac_max_sed_lines=48 + ac_sed_frag=1 # Number of current file. + ac_beg=1 # First line for current file. + ac_end=$ac_max_sed_lines # Line after last line for current file. + ac_more_lines=: + ac_sed_cmds= + while $ac_more_lines; do + if test $ac_beg -gt 1; then + sed "1,${ac_beg}d; ${ac_end}q" $tmp/subs.sed >$tmp/subs.frag + else + sed "${ac_end}q" $tmp/subs.sed >$tmp/subs.frag + fi + if test ! -s $tmp/subs.frag; then + ac_more_lines=false + else + # The purpose of the label and of the branching condition is to + # speed up the sed processing (if there are no `@' at all, there + # is no need to browse any of the substitutions). + # These are the two extra sed commands mentioned above. + (echo ':t + /@[a-zA-Z_][a-zA-Z_0-9]*@/!b' && cat $tmp/subs.frag) >$tmp/subs-$ac_sed_frag.sed + if test -z "$ac_sed_cmds"; then + ac_sed_cmds="sed -f $tmp/subs-$ac_sed_frag.sed" + else + ac_sed_cmds="$ac_sed_cmds | sed -f $tmp/subs-$ac_sed_frag.sed" + fi + ac_sed_frag=`expr $ac_sed_frag + 1` + ac_beg=$ac_end + ac_end=`expr $ac_end + $ac_max_sed_lines` + fi + done + if test -z "$ac_sed_cmds"; then + ac_sed_cmds=cat + fi +fi # test -n "$CONFIG_FILES" + +_ACEOF +cat >>$CONFIG_STATUS <<\_ACEOF +for ac_file in : $CONFIG_FILES; do test "x$ac_file" = x: && continue + # Support "outfile[:infile[:infile...]]", defaulting infile="outfile.in". + case $ac_file in + - | *:- | *:-:* ) # input from stdin + cat >$tmp/stdin + ac_file_in=`echo "$ac_file" | sed 's,[^:]*:,,'` + ac_file=`echo "$ac_file" | sed 's,:.*,,'` ;; + *:* ) ac_file_in=`echo "$ac_file" | sed 's,[^:]*:,,'` + ac_file=`echo "$ac_file" | sed 's,:.*,,'` ;; + * ) ac_file_in=$ac_file.in ;; + esac + + # Compute @srcdir@, @top_srcdir@, and @INSTALL@ for subdirectories. + ac_dir=`(dirname "$ac_file") 2>/dev/null || +$as_expr X"$ac_file" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ + X"$ac_file" : 'X\(//\)[^/]' \| \ + X"$ac_file" : 'X\(//\)$' \| \ + X"$ac_file" : 'X\(/\)' \| \ + . : '\(.\)' 2>/dev/null || +echo X"$ac_file" | + sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/; q; } + /^X\(\/\/\)[^/].*/{ s//\1/; q; } + /^X\(\/\/\)$/{ s//\1/; q; } + /^X\(\/\).*/{ s//\1/; q; } + s/.*/./; q'` + { if $as_mkdir_p; then + mkdir -p "$ac_dir" + else + as_dir="$ac_dir" + as_dirs= + while test ! -d "$as_dir"; do + as_dirs="$as_dir $as_dirs" + as_dir=`(dirname "$as_dir") 2>/dev/null || +$as_expr X"$as_dir" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ + X"$as_dir" : 'X\(//\)[^/]' \| \ + X"$as_dir" : 'X\(//\)$' \| \ + X"$as_dir" : 'X\(/\)' \| \ + . : '\(.\)' 2>/dev/null || +echo X"$as_dir" | + sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/; q; } + /^X\(\/\/\)[^/].*/{ s//\1/; q; } + /^X\(\/\/\)$/{ s//\1/; q; } + /^X\(\/\).*/{ s//\1/; q; } + s/.*/./; q'` + done + test ! -n "$as_dirs" || mkdir $as_dirs + fi || { { echo "$as_me:$LINENO: error: cannot create directory \"$ac_dir\"" >&5 +echo "$as_me: error: cannot create directory \"$ac_dir\"" >&2;} + { (exit 1); exit 1; }; }; } + + ac_builddir=. + +if test "$ac_dir" != .; then + ac_dir_suffix=/`echo "$ac_dir" | sed 's,^\.[\\/],,'` + # A "../" for each directory in $ac_dir_suffix. + ac_top_builddir=`echo "$ac_dir_suffix" | sed 's,/[^\\/]*,../,g'` +else + ac_dir_suffix= ac_top_builddir= +fi + +case $srcdir in + .) # No --srcdir option. We are building in place. + ac_srcdir=. + if test -z "$ac_top_builddir"; then + ac_top_srcdir=. + else + ac_top_srcdir=`echo $ac_top_builddir | sed 's,/$,,'` + fi ;; + [\\/]* | ?:[\\/]* ) # Absolute path. + ac_srcdir=$srcdir$ac_dir_suffix; + ac_top_srcdir=$srcdir ;; + *) # Relative path. + ac_srcdir=$ac_top_builddir$srcdir$ac_dir_suffix + ac_top_srcdir=$ac_top_builddir$srcdir ;; +esac + +# Do not use `cd foo && pwd` to compute absolute paths, because +# the directories may not exist. +case `pwd` in +.) ac_abs_builddir="$ac_dir";; +*) + case "$ac_dir" in + .) ac_abs_builddir=`pwd`;; + [\\/]* | ?:[\\/]* ) ac_abs_builddir="$ac_dir";; + *) ac_abs_builddir=`pwd`/"$ac_dir";; + esac;; +esac +case $ac_abs_builddir in +.) ac_abs_top_builddir=${ac_top_builddir}.;; +*) + case ${ac_top_builddir}. in + .) ac_abs_top_builddir=$ac_abs_builddir;; + [\\/]* | ?:[\\/]* ) ac_abs_top_builddir=${ac_top_builddir}.;; + *) ac_abs_top_builddir=$ac_abs_builddir/${ac_top_builddir}.;; + esac;; +esac +case $ac_abs_builddir in +.) ac_abs_srcdir=$ac_srcdir;; +*) + case $ac_srcdir in + .) ac_abs_srcdir=$ac_abs_builddir;; + [\\/]* | ?:[\\/]* ) ac_abs_srcdir=$ac_srcdir;; + *) ac_abs_srcdir=$ac_abs_builddir/$ac_srcdir;; + esac;; +esac +case $ac_abs_builddir in +.) ac_abs_top_srcdir=$ac_top_srcdir;; +*) + case $ac_top_srcdir in + .) ac_abs_top_srcdir=$ac_abs_builddir;; + [\\/]* | ?:[\\/]* ) ac_abs_top_srcdir=$ac_top_srcdir;; + *) ac_abs_top_srcdir=$ac_abs_builddir/$ac_top_srcdir;; + esac;; +esac + + + case $INSTALL in + [\\/$]* | ?:[\\/]* ) ac_INSTALL=$INSTALL ;; + *) ac_INSTALL=$ac_top_builddir$INSTALL ;; + esac + + # 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. */ + if test x"$ac_file" = x-; then + configure_input= + else + configure_input="$ac_file. " + fi + configure_input=$configure_input"Generated from `echo $ac_file_in | + sed 's,.*/,,'` by configure." + + # First look for the input files in the build tree, otherwise in the + # src tree. + ac_file_inputs=`IFS=: + for f in $ac_file_in; do + case $f in + -) echo $tmp/stdin ;; + [\\/$]*) + # Absolute (can't be DOS-style, as IFS=:) + test -f "$f" || { { echo "$as_me:$LINENO: error: cannot find input file: $f" >&5 +echo "$as_me: error: cannot find input file: $f" >&2;} + { (exit 1); exit 1; }; } + echo "$f";; + *) # Relative + if test -f "$f"; then + # Build tree + echo "$f" + elif test -f "$srcdir/$f"; then + # Source tree + echo "$srcdir/$f" + else + # /dev/null tree + { { echo "$as_me:$LINENO: error: cannot find input file: $f" >&5 +echo "$as_me: error: cannot find input file: $f" >&2;} + { (exit 1); exit 1; }; } + fi;; + esac + done` || { (exit 1); exit 1; } + + if test x"$ac_file" != x-; then + { echo "$as_me:$LINENO: creating $ac_file" >&5 +echo "$as_me: creating $ac_file" >&6;} + rm -f "$ac_file" + fi +_ACEOF +cat >>$CONFIG_STATUS <<_ACEOF + sed "$ac_vpsub +$extrasub +_ACEOF +cat >>$CONFIG_STATUS <<\_ACEOF +:t +/@[a-zA-Z_][a-zA-Z_0-9]*@/!b +s,@configure_input@,$configure_input,;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,@top_builddir@,$ac_top_builddir,;t t +s,@abs_top_builddir@,$ac_abs_top_builddir,;t t +s,@INSTALL@,$ac_INSTALL,;t t +" $ac_file_inputs | (eval "$ac_sed_cmds") >$tmp/out + rm -f $tmp/stdin + if test x"$ac_file" != x-; then + mv $tmp/out $ac_file + else + cat $tmp/out + rm -f $tmp/out + fi + +done +_ACEOF +cat >>$CONFIG_STATUS <<\_ACEOF + +# +# CONFIG_HEADER section. +# + +# These sed commands are passed to sed as "A NAME B NAME C VALUE D", where +# NAME is the cpp macro being defined and VALUE is the value it is being given. +# +# ac_d sets the value in "#define NAME VALUE" lines. +ac_dA='s,^\([ ]*\)#\([ ]*define[ ][ ]*\)' +ac_dB='[ ].*$,\1#\2' +ac_dC=' ' +ac_dD=',;t' +# ac_u turns "#undef NAME" without trailing blanks into "#define NAME VALUE". +ac_uA='s,^\([ ]*\)#\([ ]*\)undef\([ ][ ]*\)' +ac_uB='$,\1#\2define\3' +ac_uC=' ' +ac_uD=',;t' + +for ac_file in : $CONFIG_HEADERS; do test "x$ac_file" = x: && continue + # Support "outfile[:infile[:infile...]]", defaulting infile="outfile.in". + case $ac_file in + - | *:- | *:-:* ) # input from stdin + cat >$tmp/stdin + ac_file_in=`echo "$ac_file" | sed 's,[^:]*:,,'` + ac_file=`echo "$ac_file" | sed 's,:.*,,'` ;; + *:* ) ac_file_in=`echo "$ac_file" | sed 's,[^:]*:,,'` + ac_file=`echo "$ac_file" | sed 's,:.*,,'` ;; + * ) ac_file_in=$ac_file.in ;; + esac + + test x"$ac_file" != x- && { echo "$as_me:$LINENO: creating $ac_file" >&5 +echo "$as_me: creating $ac_file" >&6;} + + # First look for the input files in the build tree, otherwise in the + # src tree. + ac_file_inputs=`IFS=: + for f in $ac_file_in; do + case $f in + -) echo $tmp/stdin ;; + [\\/$]*) + # Absolute (can't be DOS-style, as IFS=:) + test -f "$f" || { { echo "$as_me:$LINENO: error: cannot find input file: $f" >&5 +echo "$as_me: error: cannot find input file: $f" >&2;} + { (exit 1); exit 1; }; } + # Do quote $f, to prevent DOS paths from being IFS'd. + echo "$f";; + *) # Relative + if test -f "$f"; then + # Build tree + echo "$f" + elif test -f "$srcdir/$f"; then + # Source tree + echo "$srcdir/$f" + else + # /dev/null tree + { { echo "$as_me:$LINENO: error: cannot find input file: $f" >&5 +echo "$as_me: error: cannot find input file: $f" >&2;} + { (exit 1); exit 1; }; } + fi;; + esac + done` || { (exit 1); exit 1; } + # Remove the trailing spaces. + sed 's/[ ]*$//' $ac_file_inputs >$tmp/in + +_ACEOF + +# Transform confdefs.h into two sed scripts, `conftest.defines' and +# `conftest.undefs', that substitutes the proper values into +# config.h.in to produce config.h. The first handles `#define' +# templates, and the second `#undef' templates. +# And first: Protect against being on the right side of a sed subst in +# config.status. Protect against being in an unquoted here document +# in config.status. +rm -f conftest.defines conftest.undefs +# Using a here document instead of a string reduces the quoting nightmare. +# Putting comments in sed scripts is not portable. +# +# `end' is used to avoid that the second main sed command (meant for +# 0-ary CPP macros) applies to n-ary macro definitions. +# See the Autoconf documentation for `clear'. +cat >confdef2sed.sed <<\_ACEOF +s/[\\&,]/\\&/g +s,[\\$`],\\&,g +t clear +: clear +s,^[ ]*#[ ]*define[ ][ ]*\([^ (][^ (]*\)\(([^)]*)\)[ ]*\(.*\)$,${ac_dA}\1${ac_dB}\1\2${ac_dC}\3${ac_dD},gp +t end +s,^[ ]*#[ ]*define[ ][ ]*\([^ ][^ ]*\)[ ]*\(.*\)$,${ac_dA}\1${ac_dB}\1${ac_dC}\2${ac_dD},gp +: end +_ACEOF +# If some macros were called several times there might be several times +# the same #defines, which is useless. Nevertheless, we may not want to +# sort them, since we want the *last* AC-DEFINE to be honored. +uniq confdefs.h | sed -n -f confdef2sed.sed >conftest.defines +sed 's/ac_d/ac_u/g' conftest.defines >conftest.undefs +rm -f confdef2sed.sed + +# This sed command replaces #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. +cat >>conftest.undefs <<\_ACEOF +s,^[ ]*#[ ]*undef[ ][ ]*[a-zA-Z_][a-zA-Z_0-9]*,/* & */, +_ACEOF + +# Break up conftest.defines because some shells have a limit on the size +# of here documents, and old seds have small limits too (100 cmds). +echo ' # Handle all the #define templates only if necessary.' >>$CONFIG_STATUS +echo ' if grep "^[ ]*#[ ]*define" $tmp/in >/dev/null; then' >>$CONFIG_STATUS +echo ' # If there are no defines, we may have an empty if/fi' >>$CONFIG_STATUS +echo ' :' >>$CONFIG_STATUS +rm -f conftest.tail +while grep . conftest.defines >/dev/null +do + # Write a limited-size here document to $tmp/defines.sed. + echo ' cat >$tmp/defines.sed <>$CONFIG_STATUS + # Speed up: don't consider the non `#define' lines. + echo '/^[ ]*#[ ]*define/!b' >>$CONFIG_STATUS + # Work around the forget-to-reset-the-flag bug. + echo 't clr' >>$CONFIG_STATUS + echo ': clr' >>$CONFIG_STATUS + sed ${ac_max_here_lines}q conftest.defines >>$CONFIG_STATUS + echo 'CEOF + sed -f $tmp/defines.sed $tmp/in >$tmp/out + rm -f $tmp/in + mv $tmp/out $tmp/in +' >>$CONFIG_STATUS + sed 1,${ac_max_here_lines}d conftest.defines >conftest.tail + rm -f conftest.defines + mv conftest.tail conftest.defines +done +rm -f conftest.defines +echo ' fi # grep' >>$CONFIG_STATUS +echo >>$CONFIG_STATUS + +# Break up conftest.undefs because some shells have a limit on the size +# of here documents, and old seds have small limits too (100 cmds). +echo ' # Handle all the #undef templates' >>$CONFIG_STATUS +rm -f conftest.tail +while grep . conftest.undefs >/dev/null +do + # Write a limited-size here document to $tmp/undefs.sed. + echo ' cat >$tmp/undefs.sed <>$CONFIG_STATUS + # Speed up: don't consider the non `#undef' + echo '/^[ ]*#[ ]*undef/!b' >>$CONFIG_STATUS + # Work around the forget-to-reset-the-flag bug. + echo 't clr' >>$CONFIG_STATUS + echo ': clr' >>$CONFIG_STATUS + sed ${ac_max_here_lines}q conftest.undefs >>$CONFIG_STATUS + echo 'CEOF + sed -f $tmp/undefs.sed $tmp/in >$tmp/out + rm -f $tmp/in + mv $tmp/out $tmp/in +' >>$CONFIG_STATUS + sed 1,${ac_max_here_lines}d conftest.undefs >conftest.tail + rm -f conftest.undefs + mv conftest.tail conftest.undefs +done +rm -f conftest.undefs + +cat >>$CONFIG_STATUS <<\_ACEOF + # 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. */ + if test x"$ac_file" = x-; then + echo "/* Generated by configure. */" >$tmp/config.h + else + echo "/* $ac_file. Generated by configure. */" >$tmp/config.h + fi + cat $tmp/in >>$tmp/config.h + rm -f $tmp/in + if test x"$ac_file" != x-; then + if diff $ac_file $tmp/config.h >/dev/null 2>&1; then + { echo "$as_me:$LINENO: $ac_file is unchanged" >&5 +echo "$as_me: $ac_file is unchanged" >&6;} + else + ac_dir=`(dirname "$ac_file") 2>/dev/null || +$as_expr X"$ac_file" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ + X"$ac_file" : 'X\(//\)[^/]' \| \ + X"$ac_file" : 'X\(//\)$' \| \ + X"$ac_file" : 'X\(/\)' \| \ + . : '\(.\)' 2>/dev/null || +echo X"$ac_file" | + sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/; q; } + /^X\(\/\/\)[^/].*/{ s//\1/; q; } + /^X\(\/\/\)$/{ s//\1/; q; } + /^X\(\/\).*/{ s//\1/; q; } + s/.*/./; q'` + { if $as_mkdir_p; then + mkdir -p "$ac_dir" + else + as_dir="$ac_dir" + as_dirs= + while test ! -d "$as_dir"; do + as_dirs="$as_dir $as_dirs" + as_dir=`(dirname "$as_dir") 2>/dev/null || +$as_expr X"$as_dir" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ + X"$as_dir" : 'X\(//\)[^/]' \| \ + X"$as_dir" : 'X\(//\)$' \| \ + X"$as_dir" : 'X\(/\)' \| \ + . : '\(.\)' 2>/dev/null || +echo X"$as_dir" | + sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/; q; } + /^X\(\/\/\)[^/].*/{ s//\1/; q; } + /^X\(\/\/\)$/{ s//\1/; q; } + /^X\(\/\).*/{ s//\1/; q; } + s/.*/./; q'` + done + test ! -n "$as_dirs" || mkdir $as_dirs + fi || { { echo "$as_me:$LINENO: error: cannot create directory \"$ac_dir\"" >&5 +echo "$as_me: error: cannot create directory \"$ac_dir\"" >&2;} + { (exit 1); exit 1; }; }; } + + rm -f $ac_file + mv $tmp/config.h $ac_file + fi + else + cat $tmp/config.h + rm -f $tmp/config.h + fi +done +_ACEOF + +cat >>$CONFIG_STATUS <<\_ACEOF + +{ (exit 0); exit 0; } +_ACEOF +chmod +x $CONFIG_STATUS +ac_clean_files=$ac_clean_files_save + + +# 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 || { (exit 1); exit 1; } +fi + + + + diff --git a/contrib/query-loc-0.4.0/configure.in b/contrib/query-loc-0.4.0/configure.in new file mode 100644 index 00000000..10966c50 --- /dev/null +++ b/contrib/query-loc-0.4.0/configure.in @@ -0,0 +1,65 @@ +dnl Process this file with autoconf to produce a configure script. +AC_RELEASE("$Id: configure.in,v 1.1.2.1 2008/02/15 02:11:57 marka Exp $") +AC_INIT(query-loc.c) + +dnl Checks for programs. +AC_PROG_CC +if test "$GCC" = "yes"; then + CFLAGS="${CFLAGS} -Wall" +fi +AC_PROG_INSTALL + +dnl Checks for libraries. +AC_CHECK_LIB(resolv, res_query) + +dnl Checks for header files. +AC_HEADER_STDC +AC_CONFIG_HEADER(config.h) +AC_CHECK_HEADER(resolv.h, , AC_MSG_ERROR("No headers for name service applications")) +AC_CHECK_HEADER(arpa/nameser.h, , AC_MSG_ERROR("No headers for name service applications")) +AC_CHECK_HEADER(sys/time.h, , AC_MSG_ERROR("Mandatory header missing on your system")) +AC_CHECK_HEADER(unistd.h, , AC_MSG_ERROR("Mandatory header missing on your system")) + + +dnl This one is only useful for Solaris? +AC_MSG_CHECKING(if libnsl is mandatory) +AC_TRY_LINK([#include + #include + #include + #include + union + { + HEADER hdr; + u_char buf[4096]; /* With RFC 2671, otherwise 512 is enough */ + } + response; + char *domain; + int requested_type; ], + [res_query(domain, + C_IN, + requested_type, + (u_char *) & response, + sizeof (response)) ], dnl + [AC_MSG_RESULT(no)], dnl + [AC_MSG_RESULT(yes); LIBS="${LIBS} -lnsl"]) + +dnl Check for the loc_ntoa macro/function +AC_MSG_CHECKING(loc_ntoa) +AC_TRY_LINK([#include ], dnl + [u_char *cp; char *result; loc_ntoa(cp, result)], dnl + [AC_MSG_RESULT(yes); AC_DEFINE(HAVE_LOC_NTOA)], dnl + [AC_MSG_RESULT([no, using the alternative]); LOC_NTOA=loc_ntoa.o]) +AC_SUBST(LOC_NTOA) + +dnl Checks for typedefs, structures, and compiler characteristics. +AC_C_CONST +AC_CHECK_SIZEOF(long) +AC_CHECK_SIZEOF(int) +AC_CHECK_SIZEOF(short) +AC_CHECK_SIZEOF(char) + +dnl Misc. +AC_OUTPUT(Makefile) + + + diff --git a/contrib/query-loc-0.4.0/install-sh b/contrib/query-loc-0.4.0/install-sh new file mode 100755 index 00000000..1a835340 --- /dev/null +++ b/contrib/query-loc-0.4.0/install-sh @@ -0,0 +1,323 @@ +#!/bin/sh +# install - install a program, script, or datafile + +scriptversion=2005-02-02.21 + +# 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. It can only install one file at a time, a restriction +# shared with many OS's install programs. + +# set DOITPROG to echo to test this script + +# Don't use :- since 4.3BSD and earlier shells don't like it. +doit="${DOITPROG-}" + +# put in absolute paths if you don't have them in your path; or use env. 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}" + +chmodcmd="$chmodprog 0755" +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 -n "$1"; 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) chmodcmd="$chmodprog $2" + shift + shift + 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 $?;; + + *) # When -d is used, all remaining arguments are directories to create. + # When -t is used, the destination is already specified. + test -n "$dir_arg$dstarg" && break + # 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 + break;; + esac +done + +if test -z "$1"; 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 + +for src +do + # Protect names starting with `-'. + case $src in + -*) src=./$src ;; + esac + + if test -n "$dir_arg"; then + dst=$src + src= + + if test -d "$dst"; then + mkdircmd=: + chmodcmd= + else + mkdircmd=$mkdirprog + fi + 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 + dst=$dst/`basename "$src"` + fi + fi + + # This sed command emulates the dirname command. + dstdir=`echo "$dst" | sed -e 's,/*$,,;s,[^/]*$,,;s,/*$,,;s,^$,.,'` + + # Make sure that the destination directory exists. + + # Skip lots of stat calls in the usual case. + if test ! -d "$dstdir"; then + defaultIFS=' + ' + IFS="${IFS-$defaultIFS}" + + oIFS=$IFS + # Some sh's can't handle IFS=/ for some reason. + IFS='%' + set x `echo "$dstdir" | sed -e 's@/@%@g' -e 's@^%@/@'` + shift + IFS=$oIFS + + pathcomp= + + while test $# -ne 0 ; do + pathcomp=$pathcomp$1 + shift + if test ! -d "$pathcomp"; then + $mkdirprog "$pathcomp" + # mkdir can fail with a `File exist' error in case several + # install-sh are creating the directory concurrently. This + # is OK. + test -d "$pathcomp" || exit + fi + pathcomp=$pathcomp/ + done + fi + + if test -n "$dir_arg"; then + $doit $mkdircmd "$dst" \ + && { test -z "$chowncmd" || $doit $chowncmd "$dst"; } \ + && { test -z "$chgrpcmd" || $doit $chgrpcmd "$dst"; } \ + && { test -z "$stripcmd" || $doit $stripcmd "$dst"; } \ + && { test -z "$chmodcmd" || $doit $chmodcmd "$dst"; } + + else + dstfile=`basename "$dst"` + + # 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 + trap '(exit $?); exit' 1 2 13 15 + + # Copy the file name to the temp name. + $doit $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 "$dsttmp"; } && + + # Now rename the file to the real destination. + { $doit $mvcmd -f "$dsttmp" "$dstdir/$dstfile" 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 "$dstdir/$dstfile"; then + $doit $rmcmd -f "$dstdir/$dstfile" 2>/dev/null \ + || $doit $mvcmd -f "$dstdir/$dstfile" "$rmtmp" 2>/dev/null \ + || { + echo "$0: cannot unlink or rename $dstdir/$dstfile" >&2 + (exit 1); exit 1 + } + else + : + fi + } && + + # Now rename the file to the real destination. + $doit $mvcmd "$dsttmp" "$dstdir/$dstfile" + } + } + fi || { (exit 1); exit 1; } +done + +# The final little trick to "correctly" pass the exit status to the exit trap. +{ + (exit 0); exit 0 +} + +# 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: diff --git a/contrib/query-loc-0.4.0/loc.c b/contrib/query-loc-0.4.0/loc.c new file mode 100644 index 00000000..7d62089c --- /dev/null +++ b/contrib/query-loc-0.4.0/loc.c @@ -0,0 +1,590 @@ +#include "loc.h" + +/* $Id: loc.c,v 1.1.2.1 2008/02/15 02:11:57 marka Exp $ */ + +/* Global variables */ + +short rr_errno; + +/* + Prints the actual usage + */ +void +usage () +{ + (void) fprintf (stderr, + "Usage: %s: [-v] [-d nnn] hostname\n", progname); + exit (2); +} + +/* + Panics + */ +void +panic (message) + char *message; +{ + (void) fprintf (stderr, + "%s: %s\n", progname, message); + exit (2); +} + +/* + ** IN_ADDR_ARPA -- Convert dotted quad string to reverse in-addr.arpa + ** ------------------------------------------------------------------ + ** + ** Returns: + ** Pointer to appropriate reverse in-addr.arpa name + ** with trailing dot to force absolute domain name. + ** NULL in case of invalid dotted quad input string. + */ + +#ifndef ARPA_ROOT +#define ARPA_ROOT "in-addr.arpa" +#endif + +char * +in_addr_arpa (dottedquad) + char *dottedquad; /* input string with dotted quad */ +{ + static char addrbuf[4 * 4 + sizeof (ARPA_ROOT) + 2]; + unsigned int a[4]; + register int n; + + n = sscanf (dottedquad, "%u.%u.%u.%u", &a[0], &a[1], &a[2], &a[3]); + switch (n) + { + case 4: + (void) sprintf (addrbuf, "%u.%u.%u.%u.%s.", + a[3] & 0xff, a[2] & 0xff, a[1] & 0xff, a[0] & 0xff, ARPA_ROOT); + break; + + case 3: + (void) sprintf (addrbuf, "%u.%u.%u.%s.", + a[2] & 0xff, a[1] & 0xff, a[0] & 0xff, ARPA_ROOT); + break; + + case 2: + (void) sprintf (addrbuf, "%u.%u.%s.", + a[1] & 0xff, a[0] & 0xff, ARPA_ROOT); + break; + + case 1: + (void) sprintf (addrbuf, "%u.%s.", + a[0] & 0xff, ARPA_ROOT); + break; + + default: + return (NULL); + } + + while (--n >= 0) + if (a[n] > 255) + return (NULL); + + return (addrbuf); +} + +/* + Returns a human-readable version of the LOC information or + NULL if it failed. Argument is a name (of a network or a machine) + and a boolean telling is it is a network name or a machine name. + */ +char * +getlocbyname (name, is_network) + const char *name; + short is_network; +{ + char *result; + struct list_in_addr *list, *p; + result = findRR (name, T_LOC); + if (result != NULL) + { + if (debug >= 2) + printf ("LOC record found for the name %s\n", name); + return result; + } + else + { + if (!is_network) + { + list = findA (name); + if (debug >= 2) + printf ("No LOC record found for the name %s, trying addresses\n", name); + if (list != NULL) + { + for (p = list; p != NULL; p = p->next) + { + if (debug >= 2) + printf ("Trying address %s\n", inet_ntoa (p->addr)); + result = getlocbyaddr (p->addr, NULL); + if (result != NULL) + return result; + } + return NULL; + } + else + { + if (debug >= 2) + printf (" No A record found for %s\n", name); + return NULL; + } + } + else + { + if (debug >= 2) + printf ("No LOC record found for the network name %s\n", name); + return NULL; + } + } +} + +/* + Returns a human-readable version of the LOC information or + NULL if it failed. Argument is an IP address. + */ +char * +getlocbyaddr (addr, mask) + const struct in_addr addr; + const struct in_addr *mask; +{ + struct in_addr netaddr; + u_int32_t a; + struct in_addr themask; + char *text_addr, *text_mask; + + if (mask == NULL) + { + themask.s_addr = (u_int32_t) 0; + } + else + { + themask = *mask; + } + + text_addr = (char *) malloc (256); + text_mask = (char *) malloc (256); + strcpy (text_addr, inet_ntoa (addr)); + strcpy (text_mask, inet_ntoa (themask)); + + if (debug >= 2) + printf ("Testing address %s/%s\n", text_addr, text_mask); + if (mask == NULL) + { + a = ntohl (addr.s_addr); + if (IN_CLASSA (a)) + { + netaddr.s_addr = htonl (a & IN_CLASSA_NET); + themask.s_addr = htonl(IN_CLASSA_NET); + } + else if (IN_CLASSB (a)) + { + netaddr.s_addr = htonl (a & IN_CLASSB_NET); + themask.s_addr = htonl(IN_CLASSB_NET); + } + else if (IN_CLASSC (a)) + { + netaddr.s_addr = htonl (a & IN_CLASSC_NET); + themask.s_addr = htonl(IN_CLASSC_NET); + } + else + { + /* Error */ + return NULL; + } + return getlocbynet (in_addr_arpa (inet_ntoa (netaddr)), addr, &themask); + } + else + { + netaddr.s_addr = addr.s_addr & themask.s_addr; + return getlocbynet (in_addr_arpa (inet_ntoa (netaddr)), addr, mask); + } +} + +/* + Returns a human-readable LOC. + Argument is a network name in the 0.z.y.x.in-addr.arpa format + and the original address + */ +char * +getlocbynet (name, addr, mask) + char *name; + struct in_addr addr; + struct in_addr *mask; +{ + char *network; + char *result; + struct list_in_addr *list; + struct in_addr newmask; + u_int32_t a; + char newname[4 * 4 + sizeof (ARPA_ROOT) + 2]; + + if (debug >= 2) + printf ("Testing network %s with mask %s\n", name, inet_ntoa(*mask)); + + /* Check if this network has an A RR */ + list = findA (name); + if (list != NULL) + { + /* Yes, it does. This A record will be used as the + * new mask for recursion if it is longer than + * the actual mask. */ + if (mask != NULL && mask->s_addr < list->addr.s_addr) + { + /* compute the new arguments for recursion + * - compute the new network by applying the new mask + * to the address and get the in_addr_arpa representation + * of it. + * - the address remains unchanged + * - the new mask is the one given in the A record + */ + a = ntohl(addr.s_addr); /* start from host address */ + a &= ntohl(list->addr.s_addr); /* apply new mask */ + newname[sizeof newname - 1] = 0; + strncpy( + newname, + in_addr_arpa(inet_ntoa(inet_makeaddr(a, 0))), + sizeof newname); + newmask = inet_makeaddr(ntohl(list->addr.s_addr), 0); + result = getlocbynet (newname, addr, &newmask); + if (result != NULL) + { + return result; + } + } + /* couldn't find a LOC. Fall through and try with name */ + } + + /* Check if this network has a name */ + network = findRR (name, T_PTR); + if (network == NULL) + { + if (debug >= 2) + printf ("No name for network %s\n", name); + return NULL; + } + else + { + return getlocbyname (network, TRUE); + } +} + +/* + The code for these two functions is stolen from the examples in Liu and Albitz + book "DNS and BIND" (O'Reilly). + */ + +/**************************************************************** + * skipName -- This routine skips over a domain name. If the * + * domain name expansion fails, it crashes. * + * dn_skipname() is probably not on your manual * + * page; it is similar to dn_expand() except that it just * + * skips over the name. dn_skipname() is in res_comp.c if * + * you need to find it. * + ****************************************************************/ +int +skipName (cp, endOfMsg) + u_char *cp; + u_char *endOfMsg; +{ + int n; + + if ((n = dn_skipname (cp, endOfMsg)) < 0) + { + panic ("dn_skipname failed\n"); + } + return (n); +} + +/**************************************************************** + * skipToData -- This routine advances the cp pointer to the * + * start of the resource record data portion. On the way, * + * it fills in the type, class, ttl, and data length * + ****************************************************************/ +int +skipToData (cp, type, class, ttl, dlen, endOfMsg) + u_char *cp; + u_short *type; + u_short *class; + u_int32_t *ttl; + u_short *dlen; + u_char *endOfMsg; +{ + u_char *tmp_cp = cp; /* temporary version of cp */ + + /* Skip the domain name; it matches the name we looked up */ + tmp_cp += skipName (tmp_cp, endOfMsg); + + /* + * Grab the type, class, and ttl. GETSHORT and GETLONG + * are macros defined in arpa/nameser.h. + */ + GETSHORT (*type, tmp_cp); + GETSHORT (*class, tmp_cp); + GETLONG (*ttl, tmp_cp); + GETSHORT (*dlen, tmp_cp); + + return (tmp_cp - cp); +} + + +/* + Returns a human-readable version of a DNS RR (resource record) + associated with the name 'domain'. + If it does not find, ir returns NULL and sets rr_errno to explain why. + + The code for this function is stolen from the examples in Liu and Albitz + book "DNS and BIND" (O'Reilly). + */ +char * +findRR (domain, requested_type) + char *domain; + int requested_type; +{ + char *result, *message; + + union + { + HEADER hdr; /* defined in resolv.h */ + u_char buf[PACKETSZ]; /* defined in arpa/nameser.h */ + } + response; /* response buffers */ +short found = 0; +int responseLen; /* buffer length */ + + u_char *cp; /* character pointer to parse DNS packet */ + u_char *endOfMsg; /* need to know the end of the message */ + u_short class; /* classes defined in arpa/nameser.h */ + u_short type; /* types defined in arpa/nameser.h */ + u_int32_t ttl; /* resource record time to live */ + u_short dlen; /* size of resource record data */ + + int i, count, dup; /* misc variables */ + + char *ptrList[1]; + int ptrNum = 0; + struct in_addr addr; + + result = (char *) malloc (256); + message = (char *) malloc (256); + /* + * Look up the records for the given domain name. + * We expect the domain to be a fully qualified name, so + * we use res_query(). If we wanted the resolver search + * algorithm, we would have used res_search() instead. + */ + if ((responseLen = + res_query (domain, /* the domain we care about */ + C_IN, /* Internet class records */ + requested_type, /* Look up name server records */ + (u_char *) & response, /*response buffer */ + sizeof (response))) /*buffer size */ + < 0) + { /*If negative */ + rr_errno = h_errno; + return NULL; + } + + /* + * Keep track of the end of the message so we don't + * pass it while parsing the response. responseLen is + * the value returned by res_query. + */ + endOfMsg = response.buf + responseLen; + + /* + * Set a pointer to the start of the question section, + * which begins immediately AFTER the header. + */ + cp = response.buf + sizeof (HEADER); + + /* + * Skip over the whole question section. The question + * section is comprised of a name, a type, and a class. + * QFIXEDSZ (defined in arpa/nameser.h) is the size of + * the type and class portions, which is fixed. Therefore, + * we can skip the question section by skipping the + * name (at the beginning) and then advancing QFIXEDSZ. + * After this calculation, cp points to the start of the + * answer section, which is a list of NS records. + */ + cp += skipName (cp, endOfMsg) + QFIXEDSZ; + + count = ntohs (response.hdr.ancount) + + ntohs (response.hdr.nscount); + while ((--count >= 0) /* still more records */ + && (cp < endOfMsg)) + { /* still inside the packet */ + + + /* Skip to the data portion of the resource record */ + cp += skipToData (cp, &type, &class, &ttl, &dlen, endOfMsg); + + if (type == requested_type) + { + switch (requested_type) + { + case (T_LOC): + loc_ntoa (cp, result); + return result; + break; + case (T_PTR): + ptrList[ptrNum] = (char *) malloc (MAXDNAME); + if (ptrList[ptrNum] == NULL) + { + panic ("Malloc failed"); + } + + if (dn_expand (response.buf, /* Start of the packet */ + endOfMsg, /* End of the packet */ + cp, /* Position in the packet */ + (char *) ptrList[ptrNum], /* Result */ + MAXDNAME) /* size of ptrList buffer */ + < 0) + { /* Negative: error */ + panic ("dn_expand failed"); + } + + /* + * Check the name we've just unpacked and add it to + * the list if it is not a duplicate. + * If it is a duplicate, just ignore it. + */ + for (i = 0, dup = 0; (i < ptrNum) && !dup; i++) + dup = !strcasecmp (ptrList[i], ptrList[ptrNum]); + if (dup) + free (ptrList[ptrNum]); + else + ptrNum++; + strcpy (result, ptrList[0]); + return result; + break; + case (T_A): + bcopy ((char *) cp, (char *) &addr, INADDRSZ); + strcat (result, " "); + strcat (result, inet_ntoa (addr)); + found = 1; + break; + default: + sprintf (message, "Unexpected type %u", requested_type); + panic (message); + } + } + + /* Advance the pointer over the resource record data */ + cp += dlen; + + } /* end of while */ + if (found) + return result; +else +return NULL; +} + +struct list_in_addr * +findA (domain) + char *domain; +{ + + struct list_in_addr *result, *end; + + union + { + HEADER hdr; /* defined in resolv.h */ + u_char buf[PACKETSZ]; /* defined in arpa/nameser.h */ + } + response; /* response buffers */ + int responseLen; /* buffer length */ + + u_char *cp; /* character pointer to parse DNS packet */ + u_char *endOfMsg; /* need to know the end of the message */ + u_short class; /* classes defined in arpa/nameser.h */ + u_short type; /* types defined in arpa/nameser.h */ + u_int32_t ttl; /* resource record time to live */ + u_short dlen; /* size of resource record data */ + + int count; /* misc variables */ + + struct in_addr addr; + + end = NULL; + result = NULL; + + /* + * Look up the records for the given domain name. + * We expect the domain to be a fully qualified name, so + * we use res_query(). If we wanted the resolver search + * algorithm, we would have used res_search() instead. + */ + if ((responseLen = + res_query (domain, /* the domain we care about */ + C_IN, /* Internet class records */ + T_A, + (u_char *) & response, /*response buffer */ + sizeof (response))) /*buffer size */ + < 0) + { /*If negative */ + rr_errno = h_errno; + return NULL; + } + + /* + * Keep track of the end of the message so we don't + * pass it while parsing the response. responseLen is + * the value returned by res_query. + */ + endOfMsg = response.buf + responseLen; + + /* + * Set a pointer to the start of the question section, + * which begins immediately AFTER the header. + */ + cp = response.buf + sizeof (HEADER); + + /* + * Skip over the whole question section. The question + * section is comprised of a name, a type, and a class. + * QFIXEDSZ (defined in arpa/nameser.h) is the size of + * the type and class portions, which is fixed. Therefore, + * we can skip the question section by skipping the + * name (at the beginning) and then advancing QFIXEDSZ. + * After this calculation, cp points to the start of the + * answer section, which is a list of NS records. + */ + cp += skipName (cp, endOfMsg) + QFIXEDSZ; + + count = ntohs (response.hdr.ancount) + + ntohs (response.hdr.nscount); + while ((--count >= 0) /* still more records */ + && (cp < endOfMsg)) + { /* still inside the packet */ + + + /* Skip to the data portion of the resource record */ + cp += skipToData (cp, &type, &class, &ttl, &dlen, endOfMsg); + + if (type == T_A) + { + bcopy ((char *) cp, (char *) &addr, INADDRSZ); + if (end == NULL) + { + result = (void *) malloc (sizeof (struct list_in_addr)); + result->addr = addr; + result->next = NULL; + end = result; + } + else + { + end->next = (void *) malloc (sizeof (struct list_in_addr)); + end = end->next; + end->addr = addr; + end->next = NULL; + } + } + + /* Advance the pointer over the resource record data */ + cp += dlen; + + } /* end of while */ + return result; +} diff --git a/contrib/query-loc-0.4.0/loc.h b/contrib/query-loc-0.4.0/loc.h new file mode 100644 index 00000000..73901653 --- /dev/null +++ b/contrib/query-loc-0.4.0/loc.h @@ -0,0 +1,78 @@ +/* $Id: loc.h,v 1.1.2.1 2008/02/15 02:11:57 marka Exp $ */ + +#define VERSION "0.4.0" + +#include "config.h" + +/* Probably too many inclusions but this is to keep 'gcc -Wall' happy... */ +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#ifndef FALSE +#define FALSE 0 +#endif +#ifndef TRUE +#define TRUE 1 +#endif + +#if SIZEOF_LONG == 4 +#define u_int32_t unsigned long +#ifndef int32_t +#define int32_t long +#endif +#else +#define u_int32_t unsigned int +#ifndef int32_t +#define int32_t int +#endif +#endif + +#if SIZEOF_CHAR == 1 +#define u_int8_t unsigned char +#ifndef int8_t +#define int8_t char +#endif +#else +#if SIZEOF_SHORT == 1 +#define u_int8_t unsigned short +#ifndef int8_t +#define int8_t short +#endif +#else +#error "No suitable native type for storing bytes" +#endif +#endif + +#ifndef INADDR_NONE +#define INADDR_NONE (in_addr_t)-1 +#endif + +struct list_in_addr + { + struct in_addr addr; + void *next; + }; + +void usage (); +void panic (); + +char *getlocbyname (); +char *getlocbyaddr (); +char *getlocbynet (); +char *findRR (); +struct list_in_addr *findA (); + +extern char *progname; +extern short debug; diff --git a/contrib/query-loc-0.4.0/loc_ntoa.c b/contrib/query-loc-0.4.0/loc_ntoa.c new file mode 100644 index 00000000..21eada3e --- /dev/null +++ b/contrib/query-loc-0.4.0/loc_ntoa.c @@ -0,0 +1,248 @@ +/* Stolen from BIND */ + +/* + * Copyright (c) 1985 + * The Regents of the University of California. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * 3. All advertising materials mentioning features or use of this software + * must display the following acknowledgement: + * This product includes software developed by the University of + * California, Berkeley and its contributors. + * 4. Neither the name of the University 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 REGENTS 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 REGENTS 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. + */ + +/* + * Portions Copyright (c) 1993 by Digital Equipment Corporation. + * + * 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, and that + * the name of Digital Equipment Corporation not be used in advertising or + * publicity pertaining to distribution of the document or software without + * specific, written prior permission. + * + * THE SOFTWARE IS PROVIDED "AS IS" AND DIGITAL EQUIPMENT CORP. DISCLAIMS ALL + * WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES + * OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL DIGITAL EQUIPMENT + * CORPORATION BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL + * DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR + * PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS + * ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS + * SOFTWARE. + */ + +/* + * Portions Copyright (c) 1995 by International Business Machines, Inc. + * + * International Business Machines, Inc. (hereinafter called IBM) grants + * permission under its copyrights to use, copy, modify, and distribute this + * Software with or without fee, provided that the above copyright notice and + * all paragraphs of this notice appear in all copies, and that the name of IBM + * not be used in connection with the marketing of any product incorporating + * the Software or modifications thereof, without specific, written prior + * permission. + * + * To the extent it has a right to do so, IBM grants an immunity from suit + * under its patents, if any, for the use, sale or manufacture of products to + * the extent that such products are used for performing Domain Name System + * dynamic updates in TCP/IP networks by means of the Software. No immunity is + * granted for any product per se or for any other function of any product. + * + * THE SOFTWARE IS PROVIDED "AS IS", AND IBM DISCLAIMS ALL WARRANTIES, + * INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A + * PARTICULAR PURPOSE. IN NO EVENT SHALL IBM BE LIABLE FOR ANY SPECIAL, + * DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER ARISING + * OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE, EVEN + * IF IBM IS APPRISED OF THE POSSIBILITY OF SUCH DAMAGES. + */ + +/* + * Portions Copyright (c) 1996-1999 by Internet Software Consortium. + * + * 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" AND INTERNET SOFTWARE CONSORTIUM DISCLAIMS + * ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES + * OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL INTERNET SOFTWARE + * CONSORTIUM BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL + * DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR + * PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS + * ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS + * SOFTWARE. + */ + +#include +#include +#include + +#include +#include +#include + +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#include "loc.h" + +const char *precsize_ntoa(); + +/* takes an on-the-wire LOC RR and formats it in a human readable format. */ +const char * +loc_ntoa(binary, ascii) + const u_char *binary; + char *ascii; +{ + static char *error = "?"; + static char tmpbuf[sizeof +"1000 60 60.000 N 1000 60 60.000 W -12345678.00m 90000000.00m 90000000.00m 90000000.00m"]; + const u_char *cp = binary; + + int latdeg, latmin, latsec, latsecfrac; + int longdeg, longmin, longsec, longsecfrac; + char northsouth, eastwest; + int altmeters, altfrac, altsign; + + const u_int32_t referencealt = 100000 * 100; + + int32_t latval, longval, altval; + u_int32_t templ; + u_int8_t sizeval, hpval, vpval, versionval; + + char *sizestr, *hpstr, *vpstr; + + versionval = *cp++; + + if (ascii == NULL) + ascii = tmpbuf; + + if (versionval) { + (void) sprintf(ascii, "; error: unknown LOC RR version"); + return (ascii); + } + + sizeval = *cp++; + + hpval = *cp++; + vpval = *cp++; + + GETLONG(templ, cp); + latval = (templ - ((unsigned)1<<31)); + + GETLONG(templ, cp); + longval = (templ - ((unsigned)1<<31)); + + GETLONG(templ, cp); + if (templ < referencealt) { /* below WGS 84 spheroid */ + altval = referencealt - templ; + altsign = -1; + } else { + altval = templ - referencealt; + altsign = 1; + } + + if (latval < 0) { + northsouth = 'S'; + latval = -latval; + } else + northsouth = 'N'; + + latsecfrac = latval % 1000; + latval = latval / 1000; + latsec = latval % 60; + latval = latval / 60; + latmin = latval % 60; + latval = latval / 60; + latdeg = latval; + + if (longval < 0) { + eastwest = 'W'; + longval = -longval; + } else + eastwest = 'E'; + + longsecfrac = longval % 1000; + longval = longval / 1000; + longsec = longval % 60; + longval = longval / 60; + longmin = longval % 60; + longval = longval / 60; + longdeg = longval; + + altfrac = altval % 100; + altmeters = (altval / 100) * altsign; + + if ((sizestr = strdup(precsize_ntoa(sizeval))) == NULL) + sizestr = error; + if ((hpstr = strdup(precsize_ntoa(hpval))) == NULL) + hpstr = error; + if ((vpstr = strdup(precsize_ntoa(vpval))) == NULL) + vpstr = error; + + sprintf(ascii, + "%d %.2d %.2d.%.3d %c %d %.2d %.2d.%.3d %c %d.%.2dm %sm %sm %sm", + latdeg, latmin, latsec, latsecfrac, northsouth, + longdeg, longmin, longsec, longsecfrac, eastwest, + altmeters, altfrac, sizestr, hpstr, vpstr); + + if (sizestr != error) + free(sizestr); + if (hpstr != error) + free(hpstr); + if (vpstr != error) + free(vpstr); + + return (ascii); +} + +static unsigned int poweroften[10] = {1, 10, 100, 1000, 10000, 100000, + 1000000,10000000,100000000,1000000000}; + +/* takes an XeY precision/size value, returns a string representation. */ +const char * +precsize_ntoa(prec) + u_int8_t prec; +{ + static char retbuf[sizeof "90000000.00"]; /* XXX nonreentrant */ + unsigned long val; + int mantissa, exponent; + + mantissa = (int)((prec >> 4) & 0x0f) % 10; + exponent = (int)((prec >> 0) & 0x0f) % 10; + + val = mantissa * poweroften[exponent]; + + (void) sprintf(retbuf, "%ld.%.2ld", val/100, val%100); + return (retbuf); +} + diff --git a/contrib/query-loc-0.4.0/query-loc.1 b/contrib/query-loc-0.4.0/query-loc.1 new file mode 100644 index 00000000..87b1c0e9 --- /dev/null +++ b/contrib/query-loc-0.4.0/query-loc.1 @@ -0,0 +1,55 @@ +.\" Hey, EMACS: -*- nroff -*- +.\" First parameter, NAME, should be all caps +.\" Second parameter, SECTION, should be 1-8, maybe w/ subsection +.\" other parameters are allowed: see man(7), man(1) +.TH QUERY-LOC 1 "January 11, 2005" +.\" Please adjust this date whenever revising the manpage. +.\" +.\" Some roff macros, for reference: +.\" .nh disable hyphenation +.\" .hy enable hyphenation +.\" .ad l left justify +.\" .ad b justify to both left and right margins +.\" .nf disable filling +.\" .fi enable filling +.\" .br insert line break +.\" .sp insert n+1 empty lines +.\" for manpage-specific macros, see man(7) +.SH NAME +query-loc \- to retrieve and display the location information in the DNS +.SH SYNOPSIS +.B query-loc +.RI [-v] [-d nnn] " host" +.SH DESCRIPTION +This manual page documents briefly the +.B query-loc +command. +.PP +.\" TeX users may be more comfortable with the \fB\fP and +.\" \fI\fP escape sequences to invode bold face and italics, +.\" respectively. +\fBquery-loc\fP is a program to retrieve and display the location +information in the DNS. + +It uses the algorithms described in +RFC 1876 (and RFC 1101 to get the network names). +You can find examples of networks wchich implement this scheme +in the ADDRESSES file. + +.SH OPTIONS +.TP +.B \-v +Verbose mode. +.TP +.B \-d nnn +Debug mode. Displays the RFC's algorithm + +.SH BUGS + +Very few hosts have location information. + +.SH AUTHOR +This manual page was written by Stephane Bortzmeyer +. + +.\" $Id: query-loc.1,v 1.1.2.1 2008/02/15 02:11:57 marka Exp $ diff --git a/contrib/query-loc-0.4.0/query-loc.c b/contrib/query-loc-0.4.0/query-loc.c new file mode 100644 index 00000000..4af15b5f --- /dev/null +++ b/contrib/query-loc-0.4.0/query-loc.c @@ -0,0 +1,98 @@ +#include "loc.h" + +/* $Id: query-loc.c,v 1.1.2.1 2008/02/15 02:11:57 marka Exp $ */ + +/* Global variables */ +char *progname; +short debug; + +int +main (argc, argv) + int argc; + char *argv[]; +{ + extern char *optarg; + extern int optind; + + short verbose = FALSE; + char *host; + + char ch; + + char *loc = NULL; + struct in_addr addr; + struct hostent *hp; + + progname = argv[0]; + while ((ch = getopt (argc, argv, "vd:")) != EOF) + { + switch (ch) + { + case 'v': + verbose = TRUE; + break; + case 'd': + debug = atoi (optarg); + if (debug <= 0) + { + (void) fprintf (stderr, + "%s: illegal debug value.\n", progname); + exit (2); + } + break; + default: + usage (); + } + } + argc -= optind; + argv += optind; + if (argc != 1) + { + usage (); + } + if (verbose || debug) + { + printf ("\nThis is %s, version %s.\n\n", progname, VERSION); + } + host = argv[0]; + (void) res_init (); + + if ((addr.s_addr = inet_addr (host)) == INADDR_NONE) + { + if (debug >= 1) + printf ("%s is a name\n", host); + loc = getlocbyname (host, FALSE); + } + else + { + if (debug >= 1) + printf ("%s is an IP address ", host); + hp = (struct hostent *) gethostbyaddr + ((char *) &addr, sizeof (addr), AF_INET); + if (hp) + { + if (debug >= 1) + printf ("and %s is its official name\n", + hp->h_name); + loc = getlocbyname (hp->h_name, FALSE); + } + else + { + if (debug >= 1) + printf ("which has no name\n"); + loc = getlocbyaddr (addr, NULL); + } + } + if (loc == NULL) + { + printf ("No LOCation found for %s\n", host); + exit (1); + } + else + { + if (verbose || debug) + printf ("LOCation for %s is ", host); + printf ("%s\n", loc); + exit (0); + } +} diff --git a/contrib/query-loc-0.4.0/reconf b/contrib/query-loc-0.4.0/reconf new file mode 100755 index 00000000..0a3c822f --- /dev/null +++ b/contrib/query-loc-0.4.0/reconf @@ -0,0 +1,8 @@ +#!/bin/sh + +# $Id: reconf,v 1.1.2.1 2008/02/15 02:16:03 marka Exp $ + +autoreconf +# We do not use automake but we need its install-sh file. We do not +# care about the exit code. +automake --add-missing || true diff --git a/doc/arm/Bv9ARM-book.xml b/doc/arm/Bv9ARM-book.xml index cb7674b7..d332c569 100644 --- a/doc/arm/Bv9ARM-book.xml +++ b/doc/arm/Bv9ARM-book.xml @@ -18,7 +18,7 @@ - PERFORMANCE OF THIS SOFTWARE. --> - + BIND 9 Administrator Reference Manual @@ -67,7 +67,7 @@ - This version of the manual corresponds to BIND version 9.4. + This version of the manual corresponds to BIND version 9.5. @@ -6858,11 +6858,14 @@ query-source-v6 address * port *; cleaning-interval - The server will remove expired resource records + This interval is effectively obsolete. Previously, + the server would remove expired resource records from the cache every cleaning-interval minutes. - The default is 60 minutes. The maximum value is 28 days - (40320 minutes). - If set to 0, no periodic cleaning will occur. + BIND 9 now manages cache + memory in a more sophisticated manner and does not + rely on the periodic cleaning any more. + Specifying this option therefore has no effect on + the server's behavior. @@ -7144,8 +7147,13 @@ query-source-v6 address * port *; - Records are returned in a round-robin - order. + Records are returned in a cyclic round-robin order. + + + If BIND is configured with the + "--enable-fixed-rrset" option at compile time, then + the initial ordering of the RRset will match the + one specified in the zone file. @@ -7176,9 +7184,11 @@ query-source-v6 address * port *; - The rrset-order statement - is not yet fully implemented in BIND 9. - BIND 9 currently does not fully support "fixed" ordering. + In this release of BIND 9, the + rrset-order statement does not support + "fixed" ordering by default. Fixed ordering can be enabled + at compile time by specifying "--enable-fixed-rrset" on + the "configure" command line. @@ -7467,9 +7477,10 @@ query-source-v6 address * port *; server-id - The ID of the server should report via a query of - the name ID.SERVER - with type TXT, class CHAOS. + The ID the server should report when receiving a Name + Server Identifier (NSID) query, or a query of the name + ID.SERVER with type + TXT, class CHAOS. The primary purpose of such queries is to identify which of a group of anycast servers is actually answering your queries. Specifying server-id none; @@ -7605,162 +7616,6 @@ query-source-v6 address * port *; - - - The Statistics File - - - The statistics file generated by BIND 9 - is similar, but not identical, to that - generated by BIND 8. - - - The statistics dump begins with a line, like: - - - +++ Statistics Dump +++ (973798949) - - - The number in parentheses is a standard - Unix-style timestamp, measured as seconds since January 1, 1970. - Following - that line are a series of lines containing a counter type, the - value of the - counter, optionally a zone name, and optionally a view name. - The lines without view and zone listed are global statistics for - the entire server. - Lines with a zone and view name for the given view and zone (the - view name is - omitted for the default view). - - - The statistics dump ends with the line where the - number is identical to the number in the beginning line; for example: - - - --- Statistics Dump --- (973798949) - - - The following statistics counters are maintained: - - - - - - - - - success - - - - The number of - successful queries made to the server or zone. A - successful query - is defined as query which returns a NOERROR response - with at least - one answer RR. - - - - - - referral - - - - The number of queries which resulted - in referral responses. - - - - - - nxrrset - - - - The number of queries which resulted in - NOERROR responses with no data. - - - - - - nxdomain - - - - The number - of queries which resulted in NXDOMAIN responses. - - - - - - failure - - - - The number of queries which resulted in a - failure response other than those above. - - - - - - recursion - - - - The number of queries which caused the server - to perform recursion in order to find the final answer. - - - - - - duplicate - - - - The number of queries which the server attempted to - recurse but discover a existing query with the same - IP address, port, query id, name, type and class - already being processed. - - - - - - dropped - - - - The number of queries for which the server - discovered a excessive number of existing - recursive queries for the same name, type and - class and were subsequently dropped. - - - - - - - - - Each query received by the server will cause exactly one of - success, - referral, - nxrrset, - nxdomain, or - failure - to be incremented, and may additionally cause the - recursion counter to be - incremented. - - - Additional Section Caching @@ -7879,7 +7734,7 @@ query-source-v6 address * port *; - + <command>statistics-channels</command> Statement Grammar statistics-channels { @@ -10758,7 +10613,7 @@ $GENERATE 1-127 $ CNAME $.0 is equivalent to -0.0.0.192.IN-ADDR.ARPA NS SERVER1.EXAMPLE. +0.0.0.192.IN-ADDR.ARPA. NS SERVER1.EXAMPLE. 0.0.0.192.IN-ADDR.ARPA. NS SERVER2.EXAMPLE. 1.0.0.192.IN-ADDR.ARPA. CNAME 1.0.0.0.192.IN-ADDR.ARPA. 2.0.0.192.IN-ADDR.ARPA. CNAME 2.0.0.0.192.IN-ADDR.ARPA. @@ -10937,6 +10792,1275 @@ $GENERATE 1-127 $ CNAME $.0 + + + BIND9 Statistics + + BIND 9 maintains lots of statistics + information and provides several interfaces for users to + get access to the statistics. + The available statistics include all statistics counters + that were available in BIND 8 and + are meaningful in BIND 9, + and other information that is considered useful. + + + + The statistics information is categorized into the following + sections. + + + + + + + + + + + Incoming Requests + + + + The number of incoming DNS requests for each OPCODE. + + + + + + + Incoming Queries + + + + The number of incoming queries for each RR type. + + + + + + + Outgoing Queries + + + + The number of outgoing queries for each RR + type sent from the internal resolver. + Maintained per view. + + + + + + + Name Server Statistics + + + + Statistics counters about incoming request processing. + + + + + + + Zone Maintenance Statistics + + + + Statistics counters regarding zone maintenance + operations such as zone transfers. + + + + + + + Resolver Statistics + + + + Statistics counters about name resolution + performed in the internal resolver. + Maintained per view. + + + + + + + Cache DB RRsets + + + + The number of RRsets per RR type (positive + or negative) and nonexistent names stored in the + cache database. + Maintained per view. + + + + + + + + + + A subset of Name Server Statistics is collected and shown + per zone for which the server has the authority when + zone-statistics is set to + yes. + These statistics counters are shown with their zone and view + names. + In some cases the view names are omitted for the default view. + + + + There are currently two user interfaces to get access to the + statistics. + One is in the plain text format dumped to the file specified + by the statistics-file configuration option. + The other is remotely accessible via a statistics channel + when the statistics-channels statement + is specified in the configuration file + (see .) + + + + The Statistics File + + The text format statistics dump begins with a line, like: + + + +++ Statistics Dump +++ (973798949) + + + The number in parentheses is a standard + Unix-style timestamp, measured as seconds since January 1, 1970. + + Following + that line is a set of statistics information, which is categorized + as described above. + Each section begins with a line, like: + + + + ++ Name Server Statistics ++ + + + + Each section consists of lines, each containing the statistics + counter value followed by its textual description. + See below for available counters. + For brevity, counters that have a value of 0 are not shown + in the statistics file. + + + + The statistics dump ends with the line where the + number is identical to the number in the beginning line; for example: + + + --- Statistics Dump --- (973798949) + + + + + Statistics Counters + + The following tables summarize statistics counters that + BIND 9 provides. + For each row of the tables, the leftmost column is the + abbreviated symbol name of that counter. + These symbols are shown in the statistics information + accessed via an HTTP statistics channel. + The rightmost column gives the description of the counter, + which is also shown in the statistics file + (but, in this document, possibly with slight modification + for better readability). + Additional notes may also be provided in this column. + When a middle column exists between these two columns, + it gives the corresponding counter name of the + BIND 8 statistics, if applicable. + + + + Name Server Statistics Counters + + + + + + + + + + + Symbol + + + + + BIND8 Symbol + + + + + Description + + + + + + + Requestv4 + + + RQ + + + + IPv4 requests received. + Note: this also counts non query requests. + + + + + + Requestv6 + + + RQ + + + + IPv6 requests received. + Note: this also counts non query requests. + + + + + + ReqEdns0 + + + + + + + Requests with EDNS(0) received. + + + + + + ReqBadEDNSVer + + + + + + + Requests with unsupported EDNS version received. + + + + + + ReqTSIG + + + + + + + Requests with TSIG received. + + + + + + ReqSIG0 + + + + + + + Requests with SIG(0) received. + + + + + + ReqBadSIG + + + + + + + Requests with invalid (TSIG or SIG(0)) signature. + + + + + + ReqTCP + + + RTCP + + + + TCP requests received. + + + + + + AuthQryRej + + + RUQ + + + + Authoritative (non recursive) queries rejected. + + + + + + RecQryRej + + + RURQ + + + + Recursive queries rejected. + + + + + + XfrRej + + + RUXFR + + + + Zone transfer requests rejected. + + + + + + UpdateRej + + + RUUpd + + + + Dynamic update requests rejected. + + + + + + Response + + + SAns + + + + Responses sent. + + + + + + RespTruncated + + + + + + + Truncated responses sent. + + + + + + RespEDNS0 + + + + + + + Responses with EDNS(0) sent. + + + + + + RespTSIG + + + + + + + Responses with TSIG sent. + + + + + + RespSIG0 + + + + + + + Responses with SIG(0) sent. + + + + + + QrySuccess + + + + + + + Queries resulted in a successful answer. + This means the query which returns a NOERROR response + with at least one answer RR. + This corresponds to the + success counter + of previous versions of + BIND 9. + + + + + + QryAuthAns + + + + + + + Queries resulted in authoritative answer. + + + + + + QryNoauthAns + + + SNaAns + + + + Queries resulted in non authoritative answer. + + + + + + QryReferral + + + + + + + Queries resulted in referral answer. + This corresponds to the + referral counter + of previous versions of + BIND 9. + + + + + + QryNxrrset + + + + + + + Queries resulted in NOERROR responses with no data. + This corresponds to the + nxrrset counter + of previous versions of + BIND 9. + + + + + + QrySERVFAIL + + + SFail + + + + Queries resulted in SERVFAIL. + + + + + + QryFORMERR + + + SFErr + + + + Queries resulted in FORMERR. + + + + + + QryNXDOMAIN + + + SNXD + + + + Queries resulted in NXDOMAIN. + This corresponds to the + nxdomain counter + of previous versions of + BIND 9. + + + + + + QryRecursion + + + RFwdQ + + + + Queries which caused the server + to perform recursion in order to find the final answer. + This corresponds to the + recursion counter + of previous versions of + BIND 9. + + + + + + QryDuplicate + + + RDupQ + + + + Queries which the server attempted to + recurse but discovered an existing query with the same + IP address, port, query ID, name, type and class + already being processed. + This corresponds to the + duplicate counter + of previous versions of + BIND 9. + + + + + + QryDropped + + + + + + + Queries for which the server + discovered an excessive number of existing + recursive queries for the same name, type and + class and were subsequently dropped. + This corresponds to the + dropped counter + of previous versions of + BIND 9. + + + + + + QryFailure + + + + + + + Other query failures. + This corresponds to the + failure counter + of previous versions of + BIND 9. + + + + + + XfrReqDone + + + + + + + Requested zone transfers completed. + + + + + + UpdateReqFwd + + + + + + + Update requests forwarded. + + + + + + UpdateRespFwd + + + + + + + Update responses forwarded. + + + + + + UpdateFwdFail + + + + + + + Dynamic update forward failed. + + + + + + UpdateDone + + + + + + + Dynamic updates completed. + + + + + + UpdateFail + + + + + + + Dynamic updates failed. + + + + + + UpdateBadPrereq + + + + + + + Dynamic updates rejected due to prerequisite failure. + + + + + + + + + + Zone Maintenance Statistics Counters + + + + + + + + + + Symbol + + + + + Description + + + + + + + NotifyOutv4 + + + + IPv4 notifies sent. + + + + + + NotifyOutv6 + + + + IPv6 notifies sent. + + + + + + NotifyInv4 + + + + IPv4 notifies received. + + + + + + NotifyInv6 + + + + IPv6 notifies received. + + + + + + NotifyRej + + + + Incoming notifies rejected. + + + + + + SOAOutv4 + + + + IPv4 SOA queries sent. + + + + + + SOAOutv6 + + + + IPv6 SOA queries sent. + + + + + + AXFRReqv4 + + + + IPv4 AXFR requested. + + + + + + AXFRReqv6 + + + + IPv6 AXFR requested. + + + + + + IXFRReqv4 + + + + IPv4 IXFR requested. + + + + + + IXFRReqv6 + + + + IPv6 IXFR requested. + + + + + + XfrSuccess + + + + Zone transfer requests succeeded. + + + + + + XfrFail + + + + Zone transfer requests failed. + + + + + + + + + + Resolver Statistics Counters + + + + + + + + + + + Symbol + + + + + BIND8 Symbol + + + + + Description + + + + + + + + Queryv4 + + + SFwdQ + + + + IPv4 queries sent. + + + + + + Queryv6 + + + SFwdQ + + + + IPv6 queries sent. + + + + + + Responsev4 + + + RR + + + + IPv4 responses received. + + + + + + Responsev6 + + + RR + + + + IPv6 responses received. + + + + + + NXDOMAIN + + + RNXD + + + + NXDOMAIN received. + + + + + + SERVFAIL + + + RFail + + + + SERVFAIL received. + + + + + + FORMERR + + + RFErr + + + + FORMERR received. + + + + + + OtherError + + + RErr + + + + Other errors received. + + + + + + EDNS0Fail + + + + + + + EDNS(0) query failures. + + + + + + Mismatch + + + RDupR + + + + Mismatch responses received. + When shown via an HTTP statistics channel, + this counter is shown in the + Name Server Statistics section for brevity. + + + + + + Truncated + + + + + + + Truncated responses received. + + + + + + Lame + + + RLame + + + + Lame delegations received. + + + + + + Retry + + + SDupQ + + + + Query retries performed. + + + + + + GlueFetchv4 + + + SSysQ + + + + IPv4 NS address fetches invoked. + + + + + + GlueFetchv6 + + + SSysQ + + + + IPv6 NS address fetches invoked. + + + + + + GlueFetchv4Fail + + + + + + + IPv4 NS address fetch failed. + + + + + + GlueFetchv6Fail + + + + + + + IPv6 NS address fetch failed. + + + + + + ValAttempt + + + + + + + DNSSEC validation attempted. + + + + + + ValOk + + + + + + + DNSSEC validation succeeded. + + + + + + ValNegOk + + + + + + + DNSSEC validation on negative information succeeded. + + + + + + ValFail + + + + + + + DNSSEC validation failed. + + + + + + + + + + + + Compatibility with <emphasis>BIND</emphasis> 8 Counters + + Most statistics counters that were available + in BIND 8 are also supported in + BIND 9 as shown in the above tables. + Here are notes about other counters that do not appear + in these tables. + + + + + RFwdR,SFwdR + + + These counters are not supported + because BIND 9 does not adopt + the notion of forwarding + as BIND 8 did. + + + + + + RAXFR + + + This counter is accessible in the Incoming Queries section. + + + + + + RIQ + + + This counter is accessible in the Incoming Requests section. + + + + + + ROpts + + + This counter is not supported + because BIND 9 does not care + about IP options in the first place. + + + + + + SErr + + + This counter could be implemented, but is not yet + supported. + + + + + + + + + <acronym>BIND</acronym> 9 Security Considerations diff --git a/doc/arm/Bv9ARM.ch01.html b/doc/arm/Bv9ARM.ch01.html index a41798b5..cf83c2e8 100644 --- a/doc/arm/Bv9ARM.ch01.html +++ b/doc/arm/Bv9ARM.ch01.html @@ -14,7 +14,7 @@ - OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR - PERFORMANCE OF THIS SOFTWARE. --> - + @@ -45,17 +45,17 @@ @@ -71,7 +71,7 @@

-Scope of Document

+Scope of Document

The Berkeley Internet Name Domain (BIND) implements a @@ -82,12 +82,12 @@ system administrators.

- This version of the manual corresponds to BIND version 9.4. + This version of the manual corresponds to BIND version 9.5.

-Organization of This Document

+Organization of This Document

In this document, Section 1 introduces the basic DNS and BIND concepts. Section 2 @@ -116,7 +116,7 @@

-Conventions Used in This Document

+Conventions Used in This Document

In this document, we use the following general typographic conventions: @@ -243,7 +243,7 @@

-The Domain Name System (DNS)

+The Domain Name System (DNS)

The purpose of this document is to explain the installation and upkeep of the BIND (Berkeley Internet @@ -253,7 +253,7 @@

-DNS Fundamentals

+DNS Fundamentals

The Domain Name System (DNS) is a hierarchical, distributed database. It stores information for mapping Internet host names to @@ -273,7 +273,7 @@

-Domains and Domain Names

+Domains and Domain Names

The data stored in the DNS is identified by domain names that are organized as a tree according to organizational or administrative boundaries. Each node of the tree, @@ -319,7 +319,7 @@

-Zones

+Zones

To properly operate a name server, it is important to understand the difference between a zone @@ -372,7 +372,7 @@

-Authoritative Name Servers

+Authoritative Name Servers

Each zone is served by at least one authoritative name server, @@ -389,7 +389,7 @@

-The Primary Master

+The Primary Master

The authoritative server where the master copy of the zone data is maintained is called the @@ -409,7 +409,7 @@

-Slave Servers

+Slave Servers

The other authoritative servers, the slave servers (also known as secondary servers) @@ -425,7 +425,7 @@

-Stealth Servers

+Stealth Servers

Usually all of the zone's authoritative servers are listed in NS records in the parent zone. These NS records constitute @@ -460,7 +460,7 @@

-Caching Name Servers

+Caching Name Servers

The resolver libraries provided by most operating systems are stub resolvers, meaning that they are not @@ -487,7 +487,7 @@

-Forwarding

+Forwarding

Even a caching name server does not necessarily perform the complete recursive lookup itself. Instead, it can @@ -514,7 +514,7 @@

-Name Servers in Multiple Roles

+Name Servers in Multiple Roles

The BIND name server can simultaneously act as diff --git a/doc/arm/Bv9ARM.ch02.html b/doc/arm/Bv9ARM.ch02.html index c8a87f31..0905f90d 100644 --- a/doc/arm/Bv9ARM.ch02.html +++ b/doc/arm/Bv9ARM.ch02.html @@ -14,7 +14,7 @@ - OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR - PERFORMANCE OF THIS SOFTWARE. --> - + @@ -45,16 +45,16 @@

-Hardware requirements

+Hardware requirements

DNS hardware requirements have traditionally been quite modest. @@ -73,7 +73,7 @@

-CPU Requirements

+CPU Requirements

CPU requirements for BIND 9 range from i486-class machines @@ -84,7 +84,7 @@

-Memory Requirements

+Memory Requirements

The memory of the server has to be large enough to fit the cache and zones loaded off disk. The max-cache-size @@ -107,7 +107,7 @@

-Name Server Intensive Environment Issues

+Name Server Intensive Environment Issues

For name server intensive environments, there are two alternative configurations that may be used. The first is where clients and @@ -124,7 +124,7 @@

-Supported Operating Systems

+Supported Operating Systems

ISC BIND 9 compiles and runs on a large number diff --git a/doc/arm/Bv9ARM.ch03.html b/doc/arm/Bv9ARM.ch03.html index 74c963b5..699f93d6 100644 --- a/doc/arm/Bv9ARM.ch03.html +++ b/doc/arm/Bv9ARM.ch03.html @@ -14,7 +14,7 @@ - OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR - PERFORMANCE OF THIS SOFTWARE. --> - + @@ -47,14 +47,14 @@

Sample Configurations
-
A Caching-only Name Server
-
An Authoritative-only Name Server
+
A Caching-only Name Server
+
An Authoritative-only Name Server
-
Load Balancing
-
Name Server Operations
+
Load Balancing
+
Name Server Operations
-
Tools for Use With the Name Server Daemon
-
Signals
+
Tools for Use With the Name Server Daemon
+
Signals
@@ -68,7 +68,7 @@ Sample Configurations

-A Caching-only Name Server

+A Caching-only Name Server

The following sample configuration is appropriate for a caching-only name server for use by clients internal to a corporation. All @@ -95,7 +95,7 @@ zone "0.0.127.in-addr.arpa" {

-An Authoritative-only Name Server

+An Authoritative-only Name Server

This sample configuration is for an authoritative-only server that is the master server for "example.com" @@ -137,7 +137,7 @@ zone "eng.example.com" {

-Load Balancing

+Load Balancing

A primitive form of load balancing can be achieved in the DNS by using multiple records @@ -280,10 +280,10 @@ zone "eng.example.com" {

-Name Server Operations

+Name Server Operations

-Tools for Use With the Name Server Daemon

+Tools for Use With the Name Server Daemon

This section describes several indispensable diagnostic, administrative and monitoring tools available to the system @@ -739,7 +739,7 @@ controls {

-Signals

+Signals

Certain UNIX signals cause the name server to take specific actions, as described in the following table. These signals can diff --git a/doc/arm/Bv9ARM.ch04.html b/doc/arm/Bv9ARM.ch04.html index 73c4c43e..a5d213ba 100644 --- a/doc/arm/Bv9ARM.ch04.html +++ b/doc/arm/Bv9ARM.ch04.html @@ -14,7 +14,7 @@ - OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR - PERFORMANCE OF THIS SOFTWARE. --> - + @@ -49,29 +49,29 @@

Dynamic Update
The journal file
Incremental Zone Transfers (IXFR)
-
Split DNS
-
Example split DNS setup
+
Split DNS
+
Example split DNS setup
TSIG
-
Generate Shared Keys for Each Pair of Hosts
-
Copying the Shared Secret to Both Machines
-
Informing the Servers of the Key's Existence
-
Instructing the Server to Use the Key
-
TSIG Key Based Access Control
-
Errors
+
Generate Shared Keys for Each Pair of Hosts
+
Copying the Shared Secret to Both Machines
+
Informing the Servers of the Key's Existence
+
Instructing the Server to Use the Key
+
TSIG Key Based Access Control
+
Errors
-
TKEY
-
SIG(0)
+
TKEY
+
SIG(0)
DNSSEC
-
Generating Keys
-
Signing the Zone
-
Configuring Servers
+
Generating Keys
+
Signing the Zone
+
Configuring Servers
-
IPv6 Support in BIND 9
+
IPv6 Support in BIND 9
-
Address Lookups Using AAAA Records
-
Address to Name Lookups Using Nibble Format
+
Address Lookups Using AAAA Records
+
Address to Name Lookups Using Nibble Format
@@ -210,7 +210,7 @@

-Split DNS

+Split DNS

Setting up different views, or visibility, of the DNS space to internal and external resolvers is usually referred to as a @@ -240,7 +240,7 @@

-Example split DNS setup

+Example split DNS setup

Let's say a company named Example, Inc. (example.com) @@ -486,7 +486,7 @@ nameserver 172.16.72.4

-Generate Shared Keys for Each Pair of Hosts

+Generate Shared Keys for Each Pair of Hosts

A shared secret is generated to be shared between host1 and host2. An arbitrary key name is chosen: "host1-host2.". The key name must @@ -494,7 +494,7 @@ nameserver 172.16.72.4

-Automatic Generation

+Automatic Generation

The following command will generate a 128-bit (16 byte) HMAC-MD5 key as described above. Longer keys are better, but shorter keys @@ -519,7 +519,7 @@ nameserver 172.16.72.4

-Manual Generation

+Manual Generation

The shared secret is simply a random sequence of bits, encoded in base-64. Most ASCII strings are valid base-64 strings (assuming @@ -534,7 +534,7 @@ nameserver 172.16.72.4

-Copying the Shared Secret to Both Machines

+Copying the Shared Secret to Both Machines

This is beyond the scope of DNS. A secure transport mechanism should be used. This could be secure FTP, ssh, telephone, etc. @@ -542,7 +542,7 @@ nameserver 172.16.72.4

-Informing the Servers of the Key's Existence

+Informing the Servers of the Key's Existence

Imagine host1 and host 2 are @@ -571,7 +571,7 @@ key host1-host2. {

-Instructing the Server to Use the Key

+Instructing the Server to Use the Key

Since keys are shared between two hosts only, the server must be told when keys are to be used. The following is added to the named.conf file @@ -603,7 +603,7 @@ server 10.1.2.3 {

-TSIG Key Based Access Control

+TSIG Key Based Access Control

BIND allows IP addresses and ranges to be specified in ACL @@ -631,7 +631,7 @@ allow-update { key host1-host2. ;};

-Errors

+Errors

The processing of TSIG signed messages can result in several errors. If a signed message is sent to a non-TSIG aware @@ -657,7 +657,7 @@ allow-update { key host1-host2. ;};

-TKEY

+TKEY

TKEY is a mechanism for automatically generating a shared secret between two hosts. There are several "modes" of @@ -693,7 +693,7 @@ allow-update { key host1-host2. ;};

-SIG(0)

+SIG(0)

BIND 9 partially supports DNSSEC SIG(0) transaction signatures as specified in RFC 2535 and RFC2931. @@ -754,7 +754,7 @@ allow-update { key host1-host2. ;};

-Generating Keys

+Generating Keys

The dnssec-keygen program is used to generate keys. @@ -805,7 +805,7 @@ allow-update { key host1-host2. ;};

-Signing the Zone

+Signing the Zone

The dnssec-signzone program is used to @@ -849,7 +849,7 @@ allow-update { key host1-host2. ;};

-Configuring Servers

+Configuring Servers

To enable named to respond appropriately to DNS requests from DNSSEC aware clients, @@ -937,7 +937,7 @@ options {

-IPv6 Support in BIND 9

+IPv6 Support in BIND 9

BIND 9 fully supports all currently defined forms of IPv6 @@ -976,7 +976,7 @@ options {

-Address Lookups Using AAAA Records

+Address Lookups Using AAAA Records

The IPv6 AAAA record is a parallel to the IPv4 A record, and, unlike the deprecated A6 record, specifies the entire @@ -995,7 +995,7 @@ host 3600 IN AAAA 2001:db8::1

-Address to Name Lookups Using Nibble Format

+Address to Name Lookups Using Nibble Format

When looking up an address in nibble format, the address components are simply reversed, just as in IPv4, and diff --git a/doc/arm/Bv9ARM.ch05.html b/doc/arm/Bv9ARM.ch05.html index 49890d3c..42a64ec0 100644 --- a/doc/arm/Bv9ARM.ch05.html +++ b/doc/arm/Bv9ARM.ch05.html @@ -14,7 +14,7 @@ - OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR - PERFORMANCE OF THIS SOFTWARE. --> - + @@ -45,13 +45,13 @@

-The Lightweight Resolver Library

+The Lightweight Resolver Library

Traditionally applications have been linked with a stub resolver library that sends recursive DNS queries to a local caching name diff --git a/doc/arm/Bv9ARM.ch06.html b/doc/arm/Bv9ARM.ch06.html index ca3e742e..a7f0d1ee 100644 --- a/doc/arm/Bv9ARM.ch06.html +++ b/doc/arm/Bv9ARM.ch06.html @@ -14,7 +14,7 @@ - OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR - PERFORMANCE OF THIS SOFTWARE. --> - + @@ -48,57 +48,59 @@

Configuration File Elements
Address Match Lists
-
Comment Syntax
+
Comment Syntax
Configuration File Grammar
-
acl Statement Grammar
+
acl Statement Grammar
acl Statement Definition and Usage
-
controls Statement Grammar
+
controls Statement Grammar
controls Statement Definition and Usage
-
include Statement Grammar
-
include Statement Definition and +
include Statement Grammar
+
include Statement Definition and Usage
-
key Statement Grammar
-
key Statement Definition and Usage
-
logging Statement Grammar
-
logging Statement Definition and +
key Statement Grammar
+
key Statement Definition and Usage
+
logging Statement Grammar
+
logging Statement Definition and Usage
-
lwres Statement Grammar
-
lwres Statement Definition and Usage
-
masters Statement Grammar
-
masters Statement Definition and +
lwres Statement Grammar
+
lwres Statement Definition and Usage
+
masters Statement Grammar
+
masters Statement Definition and Usage
-
options Statement Grammar
+
options Statement Grammar
options Statement Definition and Usage
-
statistics-channels Statement Grammar
-
statistics-channels Statement Definition and +
statistics-channels Statement Grammar
+
statistics-channels Statement Definition and Usage
server Statement Grammar
server Statement Definition and Usage
-
trusted-keys Statement Grammar
-
trusted-keys Statement Definition +
trusted-keys Statement Grammar
+
trusted-keys Statement Definition and Usage
view Statement Grammar
-
view Statement Definition and Usage
+
view Statement Definition and Usage
zone Statement Grammar
-
zone Statement Definition and Usage
+
zone Statement Definition and Usage
-
Zone File
+
Zone File
Types of Resource Records and When to Use Them
-
Discussion of MX Records
+
Discussion of MX Records
Setting TTLs
-
Inverse Mapping in IPv4
-
Other Zone File Directives
-
BIND Master File Extension: the $GENERATE Directive
+
Inverse Mapping in IPv4
+
Other Zone File Directives
+
BIND Master File Extension: the $GENERATE Directive
Additional File Formats
+
BIND9 Statistics
+
Statistics Counters

@@ -432,7 +434,7 @@ Address Match Lists

-Syntax

+Syntax
address_match_list = address_match_list_element ;
   [ address_match_list_element; ... ]
 address_match_list_element = [ ! ] (ip_address [/length] |
@@ -441,7 +443,7 @@
 
 

-Definition and Usage

+Definition and Usage

Address match lists are primarily used to determine access control for various server operations. They are also used in @@ -525,7 +527,7 @@

-Comment Syntax

+Comment Syntax

The BIND 9 comment syntax allows for comments to appear @@ -535,7 +537,7 @@

-Syntax

+Syntax

/* This is a BIND comment as in C */
@@ -550,7 +552,7 @@

-Definition and Usage

+Definition and Usage

Comments may appear anywhere that whitespace may appear in a BIND configuration file. @@ -795,7 +797,7 @@

-acl Statement Grammar

+acl Statement Grammar
acl acl-name {
     address_match_list
 };
@@ -877,7 +879,7 @@
 
 

-controls Statement Grammar

+controls Statement Grammar
controls {
    [ inet ( ip_addr | * ) [ port ip_port ] allow {  address_match_list  }
                 keys { key_list }; ]
@@ -999,12 +1001,12 @@
 
 

-include Statement Grammar

+include Statement Grammar
include filename;

-include Statement Definition and +include Statement Definition and Usage

The include statement inserts the @@ -1019,7 +1021,7 @@

-key Statement Grammar

+key Statement Grammar
key key_id {
     algorithm string;
     secret string;
@@ -1028,7 +1030,7 @@
 
 

-key Statement Definition and Usage

+key Statement Definition and Usage

The key statement defines a shared secret key for use with TSIG (see the section called “TSIG”) @@ -1075,7 +1077,7 @@

-logging Statement Grammar

+logging Statement Grammar
logging {
    [ channel channel_name {
      ( file path name
@@ -1099,7 +1101,7 @@
 
 

-logging Statement Definition and +logging Statement Definition and Usage

The logging statement configures a @@ -1133,7 +1135,7 @@

-The channel Phrase

+The channel Phrase

All log output goes to one or more channels; you can make as many of them as you want. @@ -1689,7 +1691,7 @@ category notify { null; };

-lwres Statement Grammar

+lwres Statement Grammar

This is the grammar of the lwres statement in the named.conf file: @@ -1704,7 +1706,7 @@ category notify { null; };

-lwres Statement Definition and Usage

+lwres Statement Definition and Usage

The lwres statement configures the name @@ -1755,14 +1757,14 @@ category notify { null; };

-masters Statement Grammar

+masters Statement Grammar
 masters name [port ip_port] { ( masters_list | ip_addr [port ip_port] [key key] ) ; [...] };
 

-masters Statement Definition and +masters Statement Definition and Usage

masters lists allow for a common set of masters to be easily used by @@ -1771,7 +1773,7 @@ category notify { null; };

-options Statement Grammar

+options Statement Grammar

This is the grammar of the options statement in the named.conf file: @@ -2886,7 +2888,7 @@ options {

-Forwarding

+Forwarding

The forwarding facility can be used to create a large site-wide cache on a few servers, reducing traffic over links to external @@ -2930,7 +2932,7 @@ options {

-Dual-stack Servers

+Dual-stack Servers

Dual-stack servers are used as servers of last resort to work around @@ -3126,7 +3128,7 @@ options {

-Interfaces

+Interfaces

The interfaces and ports that the server will answer queries from may be specified using the listen-on option. listen-on takes @@ -3510,7 +3512,7 @@ query-source-v6 address * port *;

-Bad UDP Port Lists

+Bad UDP Port Lists

avoid-v4-udp-ports and avoid-v6-udp-ports specify a list of IPv4 and IPv6 UDP ports that will not be used as system @@ -3524,7 +3526,7 @@ query-source-v6 address * port *;

-Operating System Resource Limits

+Operating System Resource Limits

The server's usage of many system resources can be limited. Scaled values are allowed when specifying resource limits. For @@ -3583,7 +3585,7 @@ query-source-v6 address * port *;

-Server Resource Limits

+Server Resource Limits

The following options set limits on the server's resource consumption that are enforced internally by the @@ -3659,15 +3661,18 @@ query-source-v6 address * port *;

-Periodic Task Intervals

+Periodic Task Intervals
cleaning-interval

- The server will remove expired resource records + This interval is effectively obsolete. Previously, + the server would remove expired resource records from the cache every cleaning-interval minutes. - The default is 60 minutes. The maximum value is 28 days - (40320 minutes). - If set to 0, no periodic cleaning will occur. + BIND 9 now manages cache + memory in a more sophisticated manner and does not + rely on the periodic cleaning any more. + Specifying this option therefore has no effect on + the server's behavior.

heartbeat-interval

@@ -3924,8 +3929,13 @@ query-source-v6 address * port *;

- Records are returned in a round-robin - order. + Records are returned in a cyclic round-robin order. +

+

+ If BIND is configured with the + "--enable-fixed-rrset" option at compile time, then + the initial ordering of the RRset will match the + one specified in the zone file.

@@ -3953,9 +3963,11 @@ query-source-v6 address * port *;

Note

- The rrset-order statement - is not yet fully implemented in BIND 9. - BIND 9 currently does not fully support "fixed" ordering. + In this release of BIND 9, the + rrset-order statement does not support + "fixed" ordering by default. Fixed ordering can be enabled + at compile time by specifying "--enable-fixed-rrset" on + the "configure" command line.

@@ -4178,9 +4190,10 @@ query-source-v6 address * port *;

server-id

- The ID of the server should report via a query of - the name ID.SERVER - with type TXT, class CHAOS. + The ID the server should report when receiving a Name + Server Identifier (NSID) query, or a query of the name + ID.SERVER with type + TXT, class CHAOS. The primary purpose of such queries is to identify which of a group of anycast servers is actually answering your queries. Specifying server-id none; @@ -4300,159 +4313,6 @@ query-source-v6 address * port *;

-The Statistics File

-

- The statistics file generated by BIND 9 - is similar, but not identical, to that - generated by BIND 8. -

-

- The statistics dump begins with a line, like: -

-

- +++ Statistics Dump +++ (973798949) -

-

- The number in parentheses is a standard - Unix-style timestamp, measured as seconds since January 1, 1970. - Following - that line are a series of lines containing a counter type, the - value of the - counter, optionally a zone name, and optionally a view name. - The lines without view and zone listed are global statistics for - the entire server. - Lines with a zone and view name for the given view and zone (the - view name is - omitted for the default view). -

-

- The statistics dump ends with the line where the - number is identical to the number in the beginning line; for example: -

-

- --- Statistics Dump --- (973798949) -

-

- The following statistics counters are maintained: -

-
---- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
-

success

-
-

- The number of - successful queries made to the server or zone. A - successful query - is defined as query which returns a NOERROR response - with at least - one answer RR. -

-
-

referral

-
-

- The number of queries which resulted - in referral responses. -

-
-

nxrrset

-
-

- The number of queries which resulted in - NOERROR responses with no data. -

-
-

nxdomain

-
-

- The number - of queries which resulted in NXDOMAIN responses. -

-
-

failure

-
-

- The number of queries which resulted in a - failure response other than those above. -

-
-

recursion

-
-

- The number of queries which caused the server - to perform recursion in order to find the final answer. -

-
-

duplicate

-
-

- The number of queries which the server attempted to - recurse but discover a existing query with the same - IP address, port, query id, name, type and class - already being processed. -

-
-

dropped

-
-

- The number of queries for which the server - discovered a excessive number of existing - recursive queries for the same name, type and - class and were subsequently dropped. -

-
-

- Each query received by the server will cause exactly one of - success, - referral, - nxrrset, - nxdomain, or - failure - to be incremented, and may additionally cause the - recursion counter to be - incremented. -

-
-
-

Additional Section Caching

The additional section cache, also called acache, @@ -4545,7 +4405,7 @@ query-source-v6 address * port *;

-statistics-channels Statement Grammar

+statistics-channels Statement Grammar
statistics-channels {
    [ inet ( ip_addr | * ) [ port ip_port ] [allow {  address_match_list  } ]; ]
    [ inet ...; ]
@@ -4554,7 +4414,7 @@ query-source-v6 address * port *;
 
 

-statistics-channels Statement Definition and +statistics-channels Statement Definition and Usage

The statistics-channels statement @@ -4799,7 +4659,7 @@ query-source-v6 address * port *;

-trusted-keys Statement Grammar

+trusted-keys Statement Grammar
trusted-keys {
     string number number number string ;
     [ string number number number string ; [...]]
@@ -4808,7 +4668,7 @@ query-source-v6 address * port *;
 
 

-trusted-keys Statement Definition +trusted-keys Statement Definition and Usage

The trusted-keys statement defines @@ -4851,7 +4711,7 @@ query-source-v6 address * port *;

-view Statement Definition and Usage

+view Statement Definition and Usage

The view statement is a powerful feature @@ -5110,10 +4970,10 @@ zone zone_name [

-zone Statement Definition and Usage

+zone Statement Definition and Usage

-Zone Types

+Zone Types
@@ -5322,7 +5182,7 @@ zone zone_name [

-Class

+Class

The zone's name may optionally be followed by a class. If a class is not specified, class IN (for Internet), @@ -5344,7 +5204,7 @@ zone zone_name [

-Zone Options

+Zone Options
allow-notify

@@ -5845,7 +5705,7 @@ zone zone_name [

-Zone File

+Zone File

Types of Resource Records and When to Use Them

@@ -5858,7 +5718,7 @@ zone zone_name [

-Resource Records

+Resource Records

A domain name identifies a node. Each node has a set of resource information, which may be empty. The set of resource @@ -6509,7 +6369,7 @@ zone zone_name [

-Textual expression of RRs

+Textual expression of RRs

RRs are represented in binary form in the packets of the DNS protocol, and are usually represented in highly encoded form @@ -6712,7 +6572,7 @@ zone zone_name [

-Discussion of MX Records

+Discussion of MX Records

As described above, domain servers store information as a series of resource records, each of which contains a particular @@ -6970,7 +6830,7 @@ zone zone_name [

-Inverse Mapping in IPv4

+Inverse Mapping in IPv4

Reverse name resolution (that is, translation from IP address to name) is achieved by means of the in-addr.arpa domain @@ -7031,7 +6891,7 @@ zone zone_name [

-Other Zone File Directives

+Other Zone File Directives

The Master File Format was initially defined in RFC 1035 and has subsequently been extended. While the Master File Format @@ -7046,7 +6906,7 @@ zone zone_name [

-The $ORIGIN Directive

+The $ORIGIN Directive

Syntax: $ORIGIN domain-name @@ -7074,7 +6934,7 @@ WWW.EXAMPLE.COM. CNAME MAIN-SERVER.EXAMPLE.COM.

-The $INCLUDE Directive

+The $INCLUDE Directive

Syntax: $INCLUDE filename @@ -7110,7 +6970,7 @@ WWW.EXAMPLE.COM. CNAME MAIN-SERVER.EXAMPLE.COM.

-The $TTL Directive

+The $TTL Directive

Syntax: $TTL default-ttl @@ -7129,7 +6989,7 @@ WWW.EXAMPLE.COM. CNAME MAIN-SERVER.EXAMPLE.COM.

-BIND Master File Extension: the $GENERATE Directive

+BIND Master File Extension: the $GENERATE Directive

Syntax: $GENERATE range @@ -7154,7 +7014,7 @@ $GENERATE 1-127 $ CNAME $.0

is equivalent to

-
0.0.0.192.IN-ADDR.ARPA NS SERVER1.EXAMPLE.
+
0.0.0.192.IN-ADDR.ARPA. NS SERVER1.EXAMPLE.
 0.0.0.192.IN-ADDR.ARPA. NS SERVER2.EXAMPLE.
 1.0.0.192.IN-ADDR.ARPA. CNAME 1.0.0.0.192.IN-ADDR.ARPA.
 2.0.0.192.IN-ADDR.ARPA. CNAME 2.0.0.0.192.IN-ADDR.ARPA.
@@ -7332,6 +7192,1224 @@ $GENERATE 1-127 $ CNAME $.0

+
+

+BIND9 Statistics

+

+ BIND 9 maintains lots of statistics + information and provides several interfaces for users to + get access to the statistics. + The available statistics include all statistics counters + that were available in BIND 8 and + are meaningful in BIND 9, + and other information that is considered useful. +

+

+ The statistics information is categorized into the following + sections. +

+
++++ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+

Incoming Requests

+
+

+ The number of incoming DNS requests for each OPCODE. +

+
+

Incoming Queries

+
+

+ The number of incoming queries for each RR type. +

+
+

Outgoing Queries

+
+

+ The number of outgoing queries for each RR + type sent from the internal resolver. + Maintained per view. +

+
+

Name Server Statistics

+
+

+ Statistics counters about incoming request processing. +

+
+

Zone Maintenance Statistics

+
+

+ Statistics counters regarding zone maintenance + operations such as zone transfers. +

+
+

Resolver Statistics

+
+

+ Statistics counters about name resolution + performed in the internal resolver. + Maintained per view. +

+
+

Cache DB RRsets

+
+

+ The number of RRsets per RR type (positive + or negative) and nonexistent names stored in the + cache database. + Maintained per view. +

+
+

+ A subset of Name Server Statistics is collected and shown + per zone for which the server has the authority when + zone-statistics is set to + yes. + These statistics counters are shown with their zone and view + names. + In some cases the view names are omitted for the default view. +

+

+ There are currently two user interfaces to get access to the + statistics. + One is in the plain text format dumped to the file specified + by the statistics-file configuration option. + The other is remotely accessible via a statistics channel + when the statistics-channels statement + is specified in the configuration file + (see the section called “statistics-channels Statement Grammar”.) +

+
+

+The Statistics File

+

+ The text format statistics dump begins with a line, like: +

+

+ +++ Statistics Dump +++ (973798949) +

+

+ The number in parentheses is a standard + Unix-style timestamp, measured as seconds since January 1, 1970. + + Following + that line is a set of statistics information, which is categorized + as described above. + Each section begins with a line, like: +

+

+ ++ Name Server Statistics ++ +

+

+ Each section consists of lines, each containing the statistics + counter value followed by its textual description. + See below for available counters. + For brevity, counters that have a value of 0 are not shown + in the statistics file. +

+

+ The statistics dump ends with the line where the + number is identical to the number in the beginning line; for example: +

+

+ --- Statistics Dump --- (973798949) +

+
+
+

+Statistics Counters

+

+ The following tables summarize statistics counters that + BIND 9 provides. + For each row of the tables, the leftmost column is the + abbreviated symbol name of that counter. + These symbols are shown in the statistics information + accessed via an HTTP statistics channel. + The rightmost column gives the description of the counter, + which is also shown in the statistics file + (but, in this document, possibly with slight modification + for better readability). + Additional notes may also be provided in this column. + When a middle column exists between these two columns, + it gives the corresponding counter name of the + BIND 8 statistics, if applicable. +

+
+

+Name Server Statistics Counters

+
+++++ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+

+ Symbol +

+
+

+ BIND8 Symbol +

+
+

+ Description +

+
+

Requestv4

+
+

RQ

+
+

+ IPv4 requests received. + Note: this also counts non query requests. +

+
+

Requestv6

+
+

RQ

+
+

+ IPv6 requests received. + Note: this also counts non query requests. +

+
+

ReqEdns0

+
+

+
+

+ Requests with EDNS(0) received. +

+
+

ReqBadEDNSVer

+
+

+
+

+ Requests with unsupported EDNS version received. +

+
+

ReqTSIG

+
+

+
+

+ Requests with TSIG received. +

+
+

ReqSIG0

+
+

+
+

+ Requests with SIG(0) received. +

+
+

ReqBadSIG

+
+

+
+

+ Requests with invalid (TSIG or SIG(0)) signature. +

+
+

ReqTCP

+
+

RTCP

+
+

+ TCP requests received. +

+
+

AuthQryRej

+
+

RUQ

+
+

+ Authoritative (non recursive) queries rejected. +

+
+

RecQryRej

+
+

RURQ

+
+

+ Recursive queries rejected. +

+
+

XfrRej

+
+

RUXFR

+
+

+ Zone transfer requests rejected. +

+
+

UpdateRej

+
+

RUUpd

+
+

+ Dynamic update requests rejected. +

+
+

Response

+
+

SAns

+
+

+ Responses sent. +

+
+

RespTruncated

+
+

+
+

+ Truncated responses sent. +

+
+

RespEDNS0

+
+

+
+

+ Responses with EDNS(0) sent. +

+
+

RespTSIG

+
+

+
+

+ Responses with TSIG sent. +

+
+

RespSIG0

+
+

+
+

+ Responses with SIG(0) sent. +

+
+

QrySuccess

+
+

+
+

+ Queries resulted in a successful answer. + This means the query which returns a NOERROR response + with at least one answer RR. + This corresponds to the + success counter + of previous versions of + BIND 9. +

+
+

QryAuthAns

+
+

+
+

+ Queries resulted in authoritative answer. +

+
+

QryNoauthAns

+
+

SNaAns

+
+

+ Queries resulted in non authoritative answer. +

+
+

QryReferral

+
+

+
+

+ Queries resulted in referral answer. + This corresponds to the + referral counter + of previous versions of + BIND 9. +

+
+

QryNxrrset

+
+

+
+

+ Queries resulted in NOERROR responses with no data. + This corresponds to the + nxrrset counter + of previous versions of + BIND 9. +

+
+

QrySERVFAIL

+
+

SFail

+
+

+ Queries resulted in SERVFAIL. +

+
+

QryFORMERR

+
+

SFErr

+
+

+ Queries resulted in FORMERR. +

+
+

QryNXDOMAIN

+
+

SNXD

+
+

+ Queries resulted in NXDOMAIN. + This corresponds to the + nxdomain counter + of previous versions of + BIND 9. +

+
+

QryRecursion

+
+

RFwdQ

+
+

+ Queries which caused the server + to perform recursion in order to find the final answer. + This corresponds to the + recursion counter + of previous versions of + BIND 9. +

+
+

QryDuplicate

+
+

RDupQ

+
+

+ Queries which the server attempted to + recurse but discovered an existing query with the same + IP address, port, query ID, name, type and class + already being processed. + This corresponds to the + duplicate counter + of previous versions of + BIND 9. +

+
+

QryDropped

+
+

+
+

+ Queries for which the server + discovered an excessive number of existing + recursive queries for the same name, type and + class and were subsequently dropped. + This corresponds to the + dropped counter + of previous versions of + BIND 9. +

+
+

QryFailure

+
+

+
+

+ Other query failures. + This corresponds to the + failure counter + of previous versions of + BIND 9. +

+
+

XfrReqDone

+
+

+
+

+ Requested zone transfers completed. +

+
+

UpdateReqFwd

+
+

+
+

+ Update requests forwarded. +

+
+

UpdateRespFwd

+
+

+
+

+ Update responses forwarded. +

+
+

UpdateFwdFail

+
+

+
+

+ Dynamic update forward failed. +

+
+

UpdateDone

+
+

+
+

+ Dynamic updates completed. +

+
+

UpdateFail

+
+

+
+

+ Dynamic updates failed. +

+
+

UpdateBadPrereq

+
+

+
+

+ Dynamic updates rejected due to prerequisite failure. +

+
+
+
+

+Zone Maintenance Statistics Counters

+
++++ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+

+ Symbol +

+
+

+ Description +

+
+

NotifyOutv4

+
+

+ IPv4 notifies sent. +

+
+

NotifyOutv6

+
+

+ IPv6 notifies sent. +

+
+

NotifyInv4

+
+

+ IPv4 notifies received. +

+
+

NotifyInv6

+
+

+ IPv6 notifies received. +

+
+

NotifyRej

+
+

+ Incoming notifies rejected. +

+
+

SOAOutv4

+
+

+ IPv4 SOA queries sent. +

+
+

SOAOutv6

+
+

+ IPv6 SOA queries sent. +

+
+

AXFRReqv4

+
+

+ IPv4 AXFR requested. +

+
+

AXFRReqv6

+
+

+ IPv6 AXFR requested. +

+
+

IXFRReqv4

+
+

+ IPv4 IXFR requested. +

+
+

IXFRReqv6

+
+

+ IPv6 IXFR requested. +

+
+

XfrSuccess

+
+

+ Zone transfer requests succeeded. +

+
+

XfrFail

+
+

+ Zone transfer requests failed. +

+
+
+
+

+Resolver Statistics Counters

+
+++++ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+

+ Symbol +

+
+

+ BIND8 Symbol +

+
+

+ Description +

+
+

Queryv4

+
+

SFwdQ

+
+

+ IPv4 queries sent. +

+
+

Queryv6

+
+

SFwdQ

+
+

+ IPv6 queries sent. +

+
+

Responsev4

+
+

RR

+
+

+ IPv4 responses received. +

+
+

Responsev6

+
+

RR

+
+

+ IPv6 responses received. +

+
+

NXDOMAIN

+
+

RNXD

+
+

+ NXDOMAIN received. +

+
+

SERVFAIL

+
+

RFail

+
+

+ SERVFAIL received. +

+
+

FORMERR

+
+

RFErr

+
+

+ FORMERR received. +

+
+

OtherError

+
+

RErr

+
+

+ Other errors received. +

+
+

EDNS0Fail

+
+

+
+

+ EDNS(0) query failures. +

+
+

Mismatch

+
+

RDupR

+
+

+ Mismatch responses received. + When shown via an HTTP statistics channel, + this counter is shown in the + Name Server Statistics section for brevity. +

+
+

Truncated

+
+

+
+

+ Truncated responses received. +

+
+

Lame

+
+

RLame

+
+

+ Lame delegations received. +

+
+

Retry

+
+

SDupQ

+
+

+ Query retries performed. +

+
+

GlueFetchv4

+
+

SSysQ

+
+

+ IPv4 NS address fetches invoked. +

+
+

GlueFetchv6

+
+

SSysQ

+
+

+ IPv6 NS address fetches invoked. +

+
+

GlueFetchv4Fail

+
+

+
+

+ IPv4 NS address fetch failed. +

+
+

GlueFetchv6Fail

+
+

+
+

+ IPv6 NS address fetch failed. +

+
+

ValAttempt

+
+

+
+

+ DNSSEC validation attempted. +

+
+

ValOk

+
+

+
+

+ DNSSEC validation succeeded. +

+
+

ValNegOk

+
+

+
+

+ DNSSEC validation on negative information succeeded. +

+
+

ValFail

+
+

+
+

+ DNSSEC validation failed. +

+
+
+
+

+Compatibility with BIND 8 Counters

+

+ Most statistics counters that were available + in BIND 8 are also supported in + BIND 9 as shown in the above tables. + Here are notes about other counters that do not appear + in these tables. +

+
+
RFwdR,SFwdR
+

+ These counters are not supported + because BIND 9 does not adopt + the notion of forwarding + as BIND 8 did. +

+
RAXFR
+

+ This counter is accessible in the Incoming Queries section. +

+
RIQ
+

+ This counter is accessible in the Incoming Requests section. +

+
ROpts
+

+ This counter is not supported + because BIND 9 does not care + about IP options in the first place. +

+
SErr
+

+ This counter could be implemented, but is not yet + supported. +

+
+
+
+

-Chroot and Setuid +Chroot and Setuid

On UNIX servers, it is possible to run BIND in a chrooted environment @@ -143,7 +143,7 @@ zone "example.com" {

-The chroot Environment

+The chroot Environment

In order for a chroot environment to @@ -171,7 +171,7 @@ zone "example.com" {

-Using the setuid Function

+Using the setuid Function

Prior to running the named daemon, use diff --git a/doc/arm/Bv9ARM.ch08.html b/doc/arm/Bv9ARM.ch08.html index 806f82df..5fd71b22 100644 --- a/doc/arm/Bv9ARM.ch08.html +++ b/doc/arm/Bv9ARM.ch08.html @@ -14,7 +14,7 @@ - OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR - PERFORMANCE OF THIS SOFTWARE. --> - + @@ -45,18 +45,18 @@

-Common Problems

+Common Problems

-It's not working; how can I figure out what's wrong?

+It's not working; how can I figure out what's wrong?

The best solution to solving installation and configuration issues is to take preventative measures by setting @@ -68,7 +68,7 @@

-Incrementing and Changing the Serial Number

+Incrementing and Changing the Serial Number

Zone serial numbers are just numbers — they aren't date related. A lot of people set them to a number that @@ -95,7 +95,7 @@

-Where Can I Get Help?

+Where Can I Get Help?

The Internet Systems Consortium (ISC) offers a wide range diff --git a/doc/arm/Bv9ARM.ch09.html b/doc/arm/Bv9ARM.ch09.html index 4cbc5746..721127f8 100644 --- a/doc/arm/Bv9ARM.ch09.html +++ b/doc/arm/Bv9ARM.ch09.html @@ -14,7 +14,7 @@ - OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR - PERFORMANCE OF THIS SOFTWARE. --> - + @@ -45,21 +45,21 @@

-Acknowledgments

+Acknowledgments

A Brief History of the DNS and BIND @@ -164,7 +164,7 @@

-General DNS Reference Information

+General DNS Reference Information

IPv6 addresses (AAAA)

@@ -252,17 +252,17 @@

-Bibliography

+Bibliography

Standards

-

[RFC974] C. Partridge. Mail Routing and the Domain System. January 1986.

+

[RFC974] C. Partridge. Mail Routing and the Domain System. January 1986.

-

[RFC1034] P.V. Mockapetris. Domain Names — Concepts and Facilities. November 1987.

+

[RFC1034] P.V. Mockapetris. Domain Names — Concepts and Facilities. November 1987.

-

[RFC1035] P. V. Mockapetris. Domain Names — Implementation and +

[RFC1035] P. V. Mockapetris. Domain Names — Implementation and Specification. November 1987.

@@ -270,42 +270,42 @@

Proposed Standards

-

[RFC2181] R., R. Bush Elz. Clarifications to the DNS +

[RFC2181] R., R. Bush Elz. Clarifications to the DNS Specification. July 1997.

-

[RFC2308] M. Andrews. Negative Caching of DNS +

[RFC2308] M. Andrews. Negative Caching of DNS Queries. March 1998.

-

[RFC1995] M. Ohta. Incremental Zone Transfer in DNS. August 1996.

+

[RFC1995] M. Ohta. Incremental Zone Transfer in DNS. August 1996.

-

[RFC1996] P. Vixie. A Mechanism for Prompt Notification of Zone Changes. August 1996.

+

[RFC1996] P. Vixie. A Mechanism for Prompt Notification of Zone Changes. August 1996.

-

[RFC2136] P. Vixie, S. Thomson, Y. Rekhter, and J. Bound. Dynamic Updates in the Domain Name System. April 1997.

+

[RFC2136] P. Vixie, S. Thomson, Y. Rekhter, and J. Bound. Dynamic Updates in the Domain Name System. April 1997.

-

[RFC2671] P. Vixie. Extension Mechanisms for DNS (EDNS0). August 1997.

+

[RFC2671] P. Vixie. Extension Mechanisms for DNS (EDNS0). August 1997.

-

[RFC2672] M. Crawford. Non-Terminal DNS Name Redirection. August 1999.

+

[RFC2672] M. Crawford. Non-Terminal DNS Name Redirection. August 1999.

-

[RFC2845] P. Vixie, O. Gudmundsson, D. Eastlake, 3rd, and B. Wellington. Secret Key Transaction Authentication for DNS (TSIG). May 2000.

+

[RFC2845] P. Vixie, O. Gudmundsson, D. Eastlake, 3rd, and B. Wellington. Secret Key Transaction Authentication for DNS (TSIG). May 2000.

-

[RFC2930] D. Eastlake, 3rd. Secret Key Establishment for DNS (TKEY RR). September 2000.

+

[RFC2930] D. Eastlake, 3rd. Secret Key Establishment for DNS (TKEY RR). September 2000.

-

[RFC2931] D. Eastlake, 3rd. DNS Request and Transaction Signatures (SIG(0)s). September 2000.

+

[RFC2931] D. Eastlake, 3rd. DNS Request and Transaction Signatures (SIG(0)s). September 2000.

-

[RFC3007] B. Wellington. Secure Domain Name System (DNS) Dynamic Update. November 2000.

+

[RFC3007] B. Wellington. Secure Domain Name System (DNS) Dynamic Update. November 2000.

-

[RFC3645] S. Kwan, P. Garg, J. Gilroy, L. Esibov, J. Westhead, and R. Hall. Generic Security Service Algorithm for Secret +

[RFC3645] S. Kwan, P. Garg, J. Gilroy, L. Esibov, J. Westhead, and R. Hall. Generic Security Service Algorithm for Secret Key Transaction Authentication for DNS (GSS-TSIG). October 2003.

@@ -314,19 +314,19 @@

DNS Security Proposed Standards

-

[RFC3225] D. Conrad. Indicating Resolver Support of DNSSEC. December 2001.

+

[RFC3225] D. Conrad. Indicating Resolver Support of DNSSEC. December 2001.

-

[RFC3833] D. Atkins and R. Austein. Threat Analysis of the Domain Name System (DNS). August 2004.

+

[RFC3833] D. Atkins and R. Austein. Threat Analysis of the Domain Name System (DNS). August 2004.

-

[RFC4033] R. Arends, R. Austein, M. Larson, D. Massey, and S. Rose. DNS Security Introduction and Requirements. March 2005.

+

[RFC4033] R. Arends, R. Austein, M. Larson, D. Massey, and S. Rose. DNS Security Introduction and Requirements. March 2005.

-

[RFC4044] R. Arends, R. Austein, M. Larson, D. Massey, and S. Rose. Resource Records for the DNS Security Extensions. March 2005.

+

[RFC4044] R. Arends, R. Austein, M. Larson, D. Massey, and S. Rose. Resource Records for the DNS Security Extensions. March 2005.

-

[RFC4035] R. Arends, R. Austein, M. Larson, D. Massey, and S. Rose. Protocol Modifications for the DNS +

[RFC4035] R. Arends, R. Austein, M. Larson, D. Massey, and S. Rose. Protocol Modifications for the DNS Security Extensions. March 2005.

@@ -334,146 +334,146 @@

Other Important RFCs About DNS Implementation

-

[RFC1535] E. Gavron. A Security Problem and Proposed Correction With Widely +

[RFC1535] E. Gavron. A Security Problem and Proposed Correction With Widely Deployed DNS Software.. October 1993.

-

[RFC1536] A. Kumar, J. Postel, C. Neuman, P. Danzig, and S. Miller. Common DNS Implementation +

[RFC1536] A. Kumar, J. Postel, C. Neuman, P. Danzig, and S. Miller. Common DNS Implementation Errors and Suggested Fixes. October 1993.

-

[RFC1982] R. Elz and R. Bush. Serial Number Arithmetic. August 1996.

+

[RFC1982] R. Elz and R. Bush. Serial Number Arithmetic. August 1996.

-

[RFC4074] Y. Morishita and T. Jinmei. Common Misbehaviour Against DNS +

[RFC4074] Y. Morishita and T. Jinmei. Common Misbehaviour Against DNS Queries for IPv6 Addresses. May 2005.

Resource Record Types

-

[RFC1183] C.F. Everhart, L. A. Mamakos, R. Ullmann, and P. Mockapetris. New DNS RR Definitions. October 1990.

+

[RFC1183] C.F. Everhart, L. A. Mamakos, R. Ullmann, and P. Mockapetris. New DNS RR Definitions. October 1990.

-

[RFC1706] B. Manning and R. Colella. DNS NSAP Resource Records. October 1994.

+

[RFC1706] B. Manning and R. Colella. DNS NSAP Resource Records. October 1994.

-

[RFC2168] R. Daniel and M. Mealling. Resolution of Uniform Resource Identifiers using +

[RFC2168] R. Daniel and M. Mealling. Resolution of Uniform Resource Identifiers using the Domain Name System. June 1997.

-

[RFC1876] C. Davis, P. Vixie, T., and I. Dickinson. A Means for Expressing Location Information in the +

[RFC1876] C. Davis, P. Vixie, T., and I. Dickinson. A Means for Expressing Location Information in the Domain Name System. January 1996.

-

[RFC2052] A. Gulbrandsen and P. Vixie. A DNS RR for Specifying the +

[RFC2052] A. Gulbrandsen and P. Vixie. A DNS RR for Specifying the Location of Services.. October 1996.

-

[RFC2163] A. Allocchio. Using the Internet DNS to +

[RFC2163] A. Allocchio. Using the Internet DNS to Distribute MIXER Conformant Global Address Mapping. January 1998.

-

[RFC2230] R. Atkinson. Key Exchange Delegation Record for the DNS. October 1997.

+

[RFC2230] R. Atkinson. Key Exchange Delegation Record for the DNS. October 1997.

-

[RFC2536] D. Eastlake, 3rd. DSA KEYs and SIGs in the Domain Name System (DNS). March 1999.

+

[RFC2536] D. Eastlake, 3rd. DSA KEYs and SIGs in the Domain Name System (DNS). March 1999.

-

[RFC2537] D. Eastlake, 3rd. RSA/MD5 KEYs and SIGs in the Domain Name System (DNS). March 1999.

+

[RFC2537] D. Eastlake, 3rd. RSA/MD5 KEYs and SIGs in the Domain Name System (DNS). March 1999.

-

[RFC2538] D. Eastlake, 3rd and O. Gudmundsson. Storing Certificates in the Domain Name System (DNS). March 1999.

+

[RFC2538] D. Eastlake, 3rd and O. Gudmundsson. Storing Certificates in the Domain Name System (DNS). March 1999.

-

[RFC2539] D. Eastlake, 3rd. Storage of Diffie-Hellman Keys in the Domain Name System (DNS). March 1999.

+

[RFC2539] D. Eastlake, 3rd. Storage of Diffie-Hellman Keys in the Domain Name System (DNS). March 1999.

-

[RFC2540] D. Eastlake, 3rd. Detached Domain Name System (DNS) Information. March 1999.

+

[RFC2540] D. Eastlake, 3rd. Detached Domain Name System (DNS) Information. March 1999.

-

[RFC2782] A. Gulbrandsen. P. Vixie. L. Esibov. A DNS RR for specifying the location of services (DNS SRV). February 2000.

+

[RFC2782] A. Gulbrandsen. P. Vixie. L. Esibov. A DNS RR for specifying the location of services (DNS SRV). February 2000.

-

[RFC2915] M. Mealling. R. Daniel. The Naming Authority Pointer (NAPTR) DNS Resource Record. September 2000.

+

[RFC2915] M. Mealling. R. Daniel. The Naming Authority Pointer (NAPTR) DNS Resource Record. September 2000.

-

[RFC3110] D. Eastlake, 3rd. RSA/SHA-1 SIGs and RSA KEYs in the Domain Name System (DNS). May 2001.

+

[RFC3110] D. Eastlake, 3rd. RSA/SHA-1 SIGs and RSA KEYs in the Domain Name System (DNS). May 2001.

-

[RFC3123] P. Koch. A DNS RR Type for Lists of Address Prefixes (APL RR). June 2001.

+

[RFC3123] P. Koch. A DNS RR Type for Lists of Address Prefixes (APL RR). June 2001.

-

[RFC3596] S. Thomson, C. Huitema, V. Ksinant, and M. Souissi. DNS Extensions to support IP +

[RFC3596] S. Thomson, C. Huitema, V. Ksinant, and M. Souissi. DNS Extensions to support IP version 6. October 2003.

-

[RFC3597] A. Gustafsson. Handling of Unknown DNS Resource Record (RR) Types. September 2003.

+

[RFC3597] A. Gustafsson. Handling of Unknown DNS Resource Record (RR) Types. September 2003.

DNS and the Internet

-

[RFC1101] P. V. Mockapetris. DNS Encoding of Network Names +

[RFC1101] P. V. Mockapetris. DNS Encoding of Network Names and Other Types. April 1989.

-

[RFC1123] Braden. Requirements for Internet Hosts - Application and +

[RFC1123] Braden. Requirements for Internet Hosts - Application and Support. October 1989.

-

[RFC1591] J. Postel. Domain Name System Structure and Delegation. March 1994.

+

[RFC1591] J. Postel. Domain Name System Structure and Delegation. March 1994.

-

[RFC2317] H. Eidnes, G. de Groot, and P. Vixie. Classless IN-ADDR.ARPA Delegation. March 1998.

+

[RFC2317] H. Eidnes, G. de Groot, and P. Vixie. Classless IN-ADDR.ARPA Delegation. March 1998.

-

[RFC2826] Internet Architecture Board. IAB Technical Comment on the Unique DNS Root. May 2000.

+

[RFC2826] Internet Architecture Board. IAB Technical Comment on the Unique DNS Root. May 2000.

-

[RFC2929] D. Eastlake, 3rd, E. Brunner-Williams, and B. Manning. Domain Name System (DNS) IANA Considerations. September 2000.

+

[RFC2929] D. Eastlake, 3rd, E. Brunner-Williams, and B. Manning. Domain Name System (DNS) IANA Considerations. September 2000.

DNS Operations

-

[RFC1033] M. Lottor. Domain administrators operations guide.. November 1987.

+

[RFC1033] M. Lottor. Domain administrators operations guide.. November 1987.

-

[RFC1537] P. Beertema. Common DNS Data File +

[RFC1537] P. Beertema. Common DNS Data File Configuration Errors. October 1993.

-

[RFC1912] D. Barr. Common DNS Operational and +

[RFC1912] D. Barr. Common DNS Operational and Configuration Errors. February 1996.

-

[RFC2010] B. Manning and P. Vixie. Operational Criteria for Root Name Servers.. October 1996.

+

[RFC2010] B. Manning and P. Vixie. Operational Criteria for Root Name Servers.. October 1996.

-

[RFC2219] M. Hamilton and R. Wright. Use of DNS Aliases for +

[RFC2219] M. Hamilton and R. Wright. Use of DNS Aliases for Network Services.. October 1997.

Internationalized Domain Names

-

[RFC2825] IAB and R. Daigle. A Tangled Web: Issues of I18N, Domain Names, +

[RFC2825] IAB and R. Daigle. A Tangled Web: Issues of I18N, Domain Names, and the Other Internet protocols. May 2000.

-

[RFC3490] P. Faltstrom, P. Hoffman, and A. Costello. Internationalizing Domain Names in Applications (IDNA). March 2003.

+

[RFC3490] P. Faltstrom, P. Hoffman, and A. Costello. Internationalizing Domain Names in Applications (IDNA). March 2003.

-

[RFC3491] P. Hoffman and M. Blanchet. Nameprep: A Stringprep Profile for Internationalized Domain Names. March 2003.

+

[RFC3491] P. Hoffman and M. Blanchet. Nameprep: A Stringprep Profile for Internationalized Domain Names. March 2003.

-

[RFC3492] A. Costello. Punycode: A Bootstring encoding of Unicode +

[RFC3492] A. Costello. Punycode: A Bootstring encoding of Unicode for Internationalized Domain Names in Applications (IDNA). March 2003.

@@ -489,47 +489,47 @@

-

[RFC1464] R. Rosenbaum. Using the Domain Name System To Store Arbitrary String +

[RFC1464] R. Rosenbaum. Using the Domain Name System To Store Arbitrary String Attributes. May 1993.

-

[RFC1713] A. Romao. Tools for DNS Debugging. November 1994.

+

[RFC1713] A. Romao. Tools for DNS Debugging. November 1994.

-

[RFC1794] T. Brisco. DNS Support for Load +

[RFC1794] T. Brisco. DNS Support for Load Balancing. April 1995.

-

[RFC2240] O. Vaughan. A Legal Basis for Domain Name Allocation. November 1997.

+

[RFC2240] O. Vaughan. A Legal Basis for Domain Name Allocation. November 1997.

-

[RFC2345] J. Klensin, T. Wolf, and G. Oglesby. Domain Names and Company Name Retrieval. May 1998.

+

[RFC2345] J. Klensin, T. Wolf, and G. Oglesby. Domain Names and Company Name Retrieval. May 1998.

-

[RFC2352] O. Vaughan. A Convention For Using Legal Names as Domain Names. May 1998.

+

[RFC2352] O. Vaughan. A Convention For Using Legal Names as Domain Names. May 1998.

-

[RFC3071] J. Klensin. Reflections on the DNS, RFC 1591, and Categories of Domains. February 2001.

+

[RFC3071] J. Klensin. Reflections on the DNS, RFC 1591, and Categories of Domains. February 2001.

-

[RFC3258] T. Hardie. Distributing Authoritative Name Servers via +

[RFC3258] T. Hardie. Distributing Authoritative Name Servers via Shared Unicast Addresses. April 2002.

-

[RFC3901] A. Durand and J. Ihren. DNS IPv6 Transport Operational Guidelines. September 2004.

+

[RFC3901] A. Durand and J. Ihren. DNS IPv6 Transport Operational Guidelines. September 2004.

Obsolete and Unimplemented Experimental RFC

-

[RFC1712] C. Farrell, M. Schulze, S. Pleitner, and D. Baldoni. DNS Encoding of Geographical +

[RFC1712] C. Farrell, M. Schulze, S. Pleitner, and D. Baldoni. DNS Encoding of Geographical Location. November 1994.

-

[RFC2673] M. Crawford. Binary Labels in the Domain Name System. August 1999.

+

[RFC2673] M. Crawford. Binary Labels in the Domain Name System. August 1999.

-

[RFC2874] M. Crawford and C. Huitema. DNS Extensions to Support IPv6 Address Aggregation +

[RFC2874] M. Crawford and C. Huitema. DNS Extensions to Support IPv6 Address Aggregation and Renumbering. July 2000.

@@ -543,39 +543,39 @@

-

[RFC2065] D. Eastlake, 3rd and C. Kaufman. Domain Name System Security Extensions. January 1997.

+

[RFC2065] D. Eastlake, 3rd and C. Kaufman. Domain Name System Security Extensions. January 1997.

-

[RFC2137] D. Eastlake, 3rd. Secure Domain Name System Dynamic Update. April 1997.

+

[RFC2137] D. Eastlake, 3rd. Secure Domain Name System Dynamic Update. April 1997.

-

[RFC2535] D. Eastlake, 3rd. Domain Name System Security Extensions. March 1999.

+

[RFC2535] D. Eastlake, 3rd. Domain Name System Security Extensions. March 1999.

-

[RFC3008] B. Wellington. Domain Name System Security (DNSSEC) +

[RFC3008] B. Wellington. Domain Name System Security (DNSSEC) Signing Authority. November 2000.

-

[RFC3090] E. Lewis. DNS Security Extension Clarification on Zone Status. March 2001.

+

[RFC3090] E. Lewis. DNS Security Extension Clarification on Zone Status. March 2001.

-

[RFC3445] D. Massey and S. Rose. Limiting the Scope of the KEY Resource Record (RR). December 2002.

+

[RFC3445] D. Massey and S. Rose. Limiting the Scope of the KEY Resource Record (RR). December 2002.

-

[RFC3655] B. Wellington and O. Gudmundsson. Redefinition of DNS Authenticated Data (AD) bit. November 2003.

+

[RFC3655] B. Wellington and O. Gudmundsson. Redefinition of DNS Authenticated Data (AD) bit. November 2003.

-

[RFC3658] O. Gudmundsson. Delegation Signer (DS) Resource Record (RR). December 2003.

+

[RFC3658] O. Gudmundsson. Delegation Signer (DS) Resource Record (RR). December 2003.

-

[RFC3755] S. Weiler. Legacy Resolver Compatibility for Delegation Signer (DS). May 2004.

+

[RFC3755] S. Weiler. Legacy Resolver Compatibility for Delegation Signer (DS). May 2004.

-

[RFC3757] O. Kolkman, J. Schlyter, and E. Lewis. Domain Name System KEY (DNSKEY) Resource Record +

[RFC3757] O. Kolkman, J. Schlyter, and E. Lewis. Domain Name System KEY (DNSKEY) Resource Record (RR) Secure Entry Point (SEP) Flag. April 2004.

-

[RFC3845] J. Schlyter. DNS Security (DNSSEC) NextSECure (NSEC) RDATA Format. August 2004.

+

[RFC3845] J. Schlyter. DNS Security (DNSSEC) NextSECure (NSEC) RDATA Format. August 2004.

@@ -596,14 +596,14 @@

-Other Documents About BIND +Other Documents About BIND

-Bibliography

+Bibliography
-

Paul Albitz and Cricket Liu. DNS and BIND. Copyright © 1998 Sebastopol, CA: O'Reilly and Associates.

+

Paul Albitz and Cricket Liu. DNS and BIND. Copyright © 1998 Sebastopol, CA: O'Reilly and Associates.

diff --git a/doc/arm/Bv9ARM.html b/doc/arm/Bv9ARM.html index 68d19277..292603cc 100644 --- a/doc/arm/Bv9ARM.html +++ b/doc/arm/Bv9ARM.html @@ -14,7 +14,7 @@ - OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR - PERFORMANCE OF THIS SOFTWARE. --> - + @@ -40,7 +40,7 @@

-BIND 9 Administrator Reference Manual

+BIND 9 Administrator Reference Manual
@@ -51,39 +51,39 @@
1. Introduction
-
Scope of Document
-
Organization of This Document
-
Conventions Used in This Document
-
The Domain Name System (DNS)
+
Scope of Document
+
Organization of This Document
+
Conventions Used in This Document
+
The Domain Name System (DNS)
-
DNS Fundamentals
-
Domains and Domain Names
-
Zones
-
Authoritative Name Servers
-
Caching Name Servers
-
Name Servers in Multiple Roles
+
DNS Fundamentals
+
Domains and Domain Names
+
Zones
+
Authoritative Name Servers
+
Caching Name Servers
+
Name Servers in Multiple Roles
2. BIND Resource Requirements
-
Hardware requirements
-
CPU Requirements
-
Memory Requirements
-
Name Server Intensive Environment Issues
-
Supported Operating Systems
+
Hardware requirements
+
CPU Requirements
+
Memory Requirements
+
Name Server Intensive Environment Issues
+
Supported Operating Systems
3. Name Server Configuration
Sample Configurations
-
A Caching-only Name Server
-
An Authoritative-only Name Server
+
A Caching-only Name Server
+
An Authoritative-only Name Server
-
Load Balancing
-
Name Server Operations
+
Load Balancing
+
Name Server Operations
-
Tools for Use With the Name Server Daemon
-
Signals
+
Tools for Use With the Name Server Daemon
+
Signals
4. Advanced DNS Features
@@ -92,34 +92,34 @@
Dynamic Update
The journal file
Incremental Zone Transfers (IXFR)
-
Split DNS
-
Example split DNS setup
+
Split DNS
+
Example split DNS setup
TSIG
-
Generate Shared Keys for Each Pair of Hosts
-
Copying the Shared Secret to Both Machines
-
Informing the Servers of the Key's Existence
-
Instructing the Server to Use the Key
-
TSIG Key Based Access Control
-
Errors
+
Generate Shared Keys for Each Pair of Hosts
+
Copying the Shared Secret to Both Machines
+
Informing the Servers of the Key's Existence
+
Instructing the Server to Use the Key
+
TSIG Key Based Access Control
+
Errors
-
TKEY
-
SIG(0)
+
TKEY
+
SIG(0)
DNSSEC
-
Generating Keys
-
Signing the Zone
-
Configuring Servers
+
Generating Keys
+
Signing the Zone
+
Configuring Servers
-
IPv6 Support in BIND 9
+
IPv6 Support in BIND 9
-
Address Lookups Using AAAA Records
-
Address to Name Lookups Using Nibble Format
+
Address Lookups Using AAAA Records
+
Address to Name Lookups Using Nibble Format
5. The BIND 9 Lightweight Resolver
-
The Lightweight Resolver Library
+
The Lightweight Resolver Library
Running a Resolver Daemon
6. BIND 9 Configuration Reference
@@ -127,86 +127,88 @@
Configuration File Elements
Address Match Lists
-
Comment Syntax
+
Comment Syntax
Configuration File Grammar
-
acl Statement Grammar
+
acl Statement Grammar
acl Statement Definition and Usage
-
controls Statement Grammar
+
controls Statement Grammar
controls Statement Definition and Usage
-
include Statement Grammar
-
include Statement Definition and +
include Statement Grammar
+
include Statement Definition and Usage
-
key Statement Grammar
-
key Statement Definition and Usage
-
logging Statement Grammar
-
logging Statement Definition and +
key Statement Grammar
+
key Statement Definition and Usage
+
logging Statement Grammar
+
logging Statement Definition and Usage
-
lwres Statement Grammar
-
lwres Statement Definition and Usage
-
masters Statement Grammar
-
masters Statement Definition and +
lwres Statement Grammar
+
lwres Statement Definition and Usage
+
masters Statement Grammar
+
masters Statement Definition and Usage
-
options Statement Grammar
+
options Statement Grammar
options Statement Definition and Usage
-
statistics-channels Statement Grammar
-
statistics-channels Statement Definition and +
statistics-channels Statement Grammar
+
statistics-channels Statement Definition and Usage
server Statement Grammar
server Statement Definition and Usage
-
trusted-keys Statement Grammar
-
trusted-keys Statement Definition +
trusted-keys Statement Grammar
+
trusted-keys Statement Definition and Usage
view Statement Grammar
-
view Statement Definition and Usage
+
view Statement Definition and Usage
zone Statement Grammar
-
zone Statement Definition and Usage
+
zone Statement Definition and Usage
-
Zone File
+
Zone File
Types of Resource Records and When to Use Them
-
Discussion of MX Records
+
Discussion of MX Records
Setting TTLs
-
Inverse Mapping in IPv4
-
Other Zone File Directives
-
BIND Master File Extension: the $GENERATE Directive
+
Inverse Mapping in IPv4
+
Other Zone File Directives
+
BIND Master File Extension: the $GENERATE Directive
Additional File Formats
+
BIND9 Statistics
+
Statistics Counters
7. BIND 9 Security Considerations
Access Control Lists
-
Chroot and Setuid
+
Chroot and Setuid
-
The chroot Environment
-
Using the setuid Function
+
The chroot Environment
+
Using the setuid Function
Dynamic Update Security
8. Troubleshooting
-
Common Problems
-
It's not working; how can I figure out what's wrong?
-
Incrementing and Changing the Serial Number
-
Where Can I Get Help?
+
Common Problems
+
It's not working; how can I figure out what's wrong?
+
Incrementing and Changing the Serial Number
+
Where Can I Get Help?
A. Appendices
-
Acknowledgments
+
Acknowledgments
A Brief History of the DNS and BIND
-
General DNS Reference Information
+
General DNS Reference Information
IPv6 addresses (AAAA)
Bibliography (and Suggested Reading)
Request for Comments (RFCs)
Internet Drafts
-
Other Documents About BIND
+
Other Documents About BIND
I. Manual pages
diff --git a/doc/arm/Bv9ARM.pdf b/doc/arm/Bv9ARM.pdf index f90da559..a443bc36 100755 --- a/doc/arm/Bv9ARM.pdf +++ b/doc/arm/Bv9ARM.pdf @@ -621,389 +621,437 @@ endobj << /S /GoTo /D (subsubsection.6.2.16.18) >> endobj 420 0 obj -(6.2.16.18 The Statistics File) +(6.2.16.18 Additional Section Caching) endobj 421 0 obj -<< /S /GoTo /D (subsubsection.6.2.16.19) >> +<< /S /GoTo /D (subsection.6.2.17) >> endobj 424 0 obj -(6.2.16.19 Additional Section Caching) +(6.2.17 statistics-channels Statement Grammar) endobj 425 0 obj -<< /S /GoTo /D (subsection.6.2.17) >> +<< /S /GoTo /D (subsection.6.2.18) >> endobj 428 0 obj -(6.2.17 server Statement Grammar) +(6.2.18 statistics-channels Statement Definition and Usage) endobj 429 0 obj -<< /S /GoTo /D (subsection.6.2.18) >> +<< /S /GoTo /D (subsection.6.2.19) >> endobj 432 0 obj -(6.2.18 server Statement Definition and Usage) +(6.2.19 server Statement Grammar) endobj 433 0 obj -<< /S /GoTo /D (subsection.6.2.19) >> +<< /S /GoTo /D (subsection.6.2.20) >> endobj 436 0 obj -(6.2.19 trusted-keys Statement Grammar) +(6.2.20 server Statement Definition and Usage) endobj 437 0 obj -<< /S /GoTo /D (subsection.6.2.20) >> +<< /S /GoTo /D (subsection.6.2.21) >> endobj 440 0 obj -(6.2.20 trusted-keys Statement Definition and Usage) +(6.2.21 trusted-keys Statement Grammar) endobj 441 0 obj -<< /S /GoTo /D (subsection.6.2.21) >> +<< /S /GoTo /D (subsection.6.2.22) >> endobj 444 0 obj -(6.2.21 view Statement Grammar) +(6.2.22 trusted-keys Statement Definition and Usage) endobj 445 0 obj -<< /S /GoTo /D (subsection.6.2.22) >> +<< /S /GoTo /D (subsection.6.2.23) >> endobj 448 0 obj -(6.2.22 view Statement Definition and Usage) +(6.2.23 view Statement Grammar) endobj 449 0 obj -<< /S /GoTo /D (subsection.6.2.23) >> +<< /S /GoTo /D (subsection.6.2.24) >> endobj 452 0 obj -(6.2.23 zone Statement Grammar) +(6.2.24 view Statement Definition and Usage) endobj 453 0 obj -<< /S /GoTo /D (subsection.6.2.24) >> +<< /S /GoTo /D (subsection.6.2.25) >> endobj 456 0 obj -(6.2.24 zone Statement Definition and Usage) +(6.2.25 zone Statement Grammar) endobj 457 0 obj -<< /S /GoTo /D (subsubsection.6.2.24.1) >> +<< /S /GoTo /D (subsection.6.2.26) >> endobj 460 0 obj -(6.2.24.1 Zone Types) +(6.2.26 zone Statement Definition and Usage) endobj 461 0 obj -<< /S /GoTo /D (subsubsection.6.2.24.2) >> +<< /S /GoTo /D (subsubsection.6.2.26.1) >> endobj 464 0 obj -(6.2.24.2 Class) +(6.2.26.1 Zone Types) endobj 465 0 obj -<< /S /GoTo /D (subsubsection.6.2.24.3) >> +<< /S /GoTo /D (subsubsection.6.2.26.2) >> endobj 468 0 obj -(6.2.24.3 Zone Options) +(6.2.26.2 Class) endobj 469 0 obj -<< /S /GoTo /D (subsubsection.6.2.24.4) >> +<< /S /GoTo /D (subsubsection.6.2.26.3) >> endobj 472 0 obj -(6.2.24.4 Dynamic Update Policies) +(6.2.26.3 Zone Options) endobj 473 0 obj -<< /S /GoTo /D (section.6.3) >> +<< /S /GoTo /D (subsubsection.6.2.26.4) >> endobj 476 0 obj -(6.3 Zone File) +(6.2.26.4 Dynamic Update Policies) endobj 477 0 obj -<< /S /GoTo /D (subsection.6.3.1) >> +<< /S /GoTo /D (section.6.3) >> endobj 480 0 obj -(6.3.1 Types of Resource Records and When to Use Them) +(6.3 Zone File) endobj 481 0 obj -<< /S /GoTo /D (subsubsection.6.3.1.1) >> +<< /S /GoTo /D (subsection.6.3.1) >> endobj 484 0 obj -(6.3.1.1 Resource Records) +(6.3.1 Types of Resource Records and When to Use Them) endobj 485 0 obj -<< /S /GoTo /D (subsubsection.6.3.1.2) >> +<< /S /GoTo /D (subsubsection.6.3.1.1) >> endobj 488 0 obj -(6.3.1.2 Textual expression of RRs) +(6.3.1.1 Resource Records) endobj 489 0 obj -<< /S /GoTo /D (subsection.6.3.2) >> +<< /S /GoTo /D (subsubsection.6.3.1.2) >> endobj 492 0 obj -(6.3.2 Discussion of MX Records) +(6.3.1.2 Textual expression of RRs) endobj 493 0 obj -<< /S /GoTo /D (subsection.6.3.3) >> +<< /S /GoTo /D (subsection.6.3.2) >> endobj 496 0 obj -(6.3.3 Setting TTLs) +(6.3.2 Discussion of MX Records) endobj 497 0 obj -<< /S /GoTo /D (subsection.6.3.4) >> +<< /S /GoTo /D (subsection.6.3.3) >> endobj 500 0 obj -(6.3.4 Inverse Mapping in IPv4) +(6.3.3 Setting TTLs) endobj 501 0 obj -<< /S /GoTo /D (subsection.6.3.5) >> +<< /S /GoTo /D (subsection.6.3.4) >> endobj 504 0 obj -(6.3.5 Other Zone File Directives) +(6.3.4 Inverse Mapping in IPv4) endobj 505 0 obj -<< /S /GoTo /D (subsubsection.6.3.5.1) >> +<< /S /GoTo /D (subsection.6.3.5) >> endobj 508 0 obj -(6.3.5.1 The \044ORIGIN Directive) +(6.3.5 Other Zone File Directives) endobj 509 0 obj -<< /S /GoTo /D (subsubsection.6.3.5.2) >> +<< /S /GoTo /D (subsubsection.6.3.5.1) >> endobj 512 0 obj -(6.3.5.2 The \044INCLUDE Directive) +(6.3.5.1 The \044ORIGIN Directive) endobj 513 0 obj -<< /S /GoTo /D (subsubsection.6.3.5.3) >> +<< /S /GoTo /D (subsubsection.6.3.5.2) >> endobj 516 0 obj -(6.3.5.3 The \044TTL Directive) +(6.3.5.2 The \044INCLUDE Directive) endobj 517 0 obj -<< /S /GoTo /D (subsection.6.3.6) >> +<< /S /GoTo /D (subsubsection.6.3.5.3) >> endobj 520 0 obj -(6.3.6 BIND Master File Extension: the \044GENERATE Directive) +(6.3.5.3 The \044TTL Directive) endobj 521 0 obj -<< /S /GoTo /D (subsection.6.3.7) >> +<< /S /GoTo /D (subsection.6.3.6) >> endobj 524 0 obj -(6.3.7 Additional File Formats) +(6.3.6 BIND Master File Extension: the \044GENERATE Directive) endobj 525 0 obj -<< /S /GoTo /D (chapter.7) >> +<< /S /GoTo /D (subsection.6.3.7) >> endobj 528 0 obj -(7 BIND 9 Security Considerations) +(6.3.7 Additional File Formats) endobj 529 0 obj -<< /S /GoTo /D (section.7.1) >> +<< /S /GoTo /D (section.6.4) >> endobj 532 0 obj -(7.1 Access Control Lists) +(6.4 BIND9 Statistics) endobj 533 0 obj -<< /S /GoTo /D (section.7.2) >> +<< /S /GoTo /D (subsubsection.6.4.0.1) >> endobj 536 0 obj -(7.2 Chroot and Setuid) +(6.4.0.1 The Statistics File) endobj 537 0 obj -<< /S /GoTo /D (subsection.7.2.1) >> +<< /S /GoTo /D (subsection.6.4.1) >> endobj 540 0 obj -(7.2.1 The chroot Environment) +(6.4.1 Statistics Counters) endobj 541 0 obj -<< /S /GoTo /D (subsection.7.2.2) >> +<< /S /GoTo /D (subsubsection.6.4.1.1) >> endobj 544 0 obj -(7.2.2 Using the setuid Function) +(6.4.1.1 Name Server Statistics Counters) endobj 545 0 obj -<< /S /GoTo /D (section.7.3) >> +<< /S /GoTo /D (subsubsection.6.4.1.2) >> endobj 548 0 obj -(7.3 Dynamic Update Security) +(6.4.1.2 Zone Maintenance Statistics Counters) endobj 549 0 obj -<< /S /GoTo /D (chapter.8) >> +<< /S /GoTo /D (subsubsection.6.4.1.3) >> endobj 552 0 obj -(8 Troubleshooting) +(6.4.1.3 Resolver Statistics Counters) endobj 553 0 obj -<< /S /GoTo /D (section.8.1) >> +<< /S /GoTo /D (subsubsection.6.4.1.4) >> endobj 556 0 obj -(8.1 Common Problems) +(6.4.1.4 Compatibility with BIND 8 Counters) endobj 557 0 obj -<< /S /GoTo /D (subsection.8.1.1) >> +<< /S /GoTo /D (chapter.7) >> endobj 560 0 obj -(8.1.1 It's not working; how can I figure out what's wrong?) +(7 BIND 9 Security Considerations) endobj 561 0 obj -<< /S /GoTo /D (section.8.2) >> +<< /S /GoTo /D (section.7.1) >> endobj 564 0 obj -(8.2 Incrementing and Changing the Serial Number) +(7.1 Access Control Lists) endobj 565 0 obj -<< /S /GoTo /D (section.8.3) >> +<< /S /GoTo /D (section.7.2) >> endobj 568 0 obj -(8.3 Where Can I Get Help?) +(7.2 Chroot and Setuid) endobj 569 0 obj -<< /S /GoTo /D (appendix.A) >> +<< /S /GoTo /D (subsection.7.2.1) >> endobj 572 0 obj -(A Appendices) +(7.2.1 The chroot Environment) endobj 573 0 obj -<< /S /GoTo /D (section.A.1) >> +<< /S /GoTo /D (subsection.7.2.2) >> endobj 576 0 obj -(A.1 Acknowledgments) +(7.2.2 Using the setuid Function) endobj 577 0 obj -<< /S /GoTo /D (subsection.A.1.1) >> +<< /S /GoTo /D (section.7.3) >> endobj 580 0 obj -(A.1.1 A Brief History of the DNS and BIND) +(7.3 Dynamic Update Security) endobj 581 0 obj -<< /S /GoTo /D (section.A.2) >> +<< /S /GoTo /D (chapter.8) >> endobj 584 0 obj -(A.2 General DNS Reference Information) +(8 Troubleshooting) endobj 585 0 obj -<< /S /GoTo /D (subsection.A.2.1) >> +<< /S /GoTo /D (section.8.1) >> endobj 588 0 obj -(A.2.1 IPv6 addresses \(AAAA\)) +(8.1 Common Problems) endobj 589 0 obj -<< /S /GoTo /D (section.A.3) >> +<< /S /GoTo /D (subsection.8.1.1) >> endobj 592 0 obj -(A.3 Bibliography \(and Suggested Reading\)) +(8.1.1 It's not working; how can I figure out what's wrong?) endobj 593 0 obj -<< /S /GoTo /D (subsection.A.3.1) >> +<< /S /GoTo /D (section.8.2) >> endobj 596 0 obj -(A.3.1 Request for Comments \(RFCs\)) +(8.2 Incrementing and Changing the Serial Number) endobj 597 0 obj -<< /S /GoTo /D (subsection.A.3.2) >> +<< /S /GoTo /D (section.8.3) >> endobj 600 0 obj -(A.3.2 Internet Drafts) +(8.3 Where Can I Get Help?) endobj 601 0 obj -<< /S /GoTo /D (subsection.A.3.3) >> +<< /S /GoTo /D (appendix.A) >> endobj 604 0 obj -(A.3.3 Other Documents About BIND) +(A Appendices) endobj 605 0 obj -<< /S /GoTo /D (appendix.B) >> +<< /S /GoTo /D (section.A.1) >> endobj 608 0 obj -(B Manual pages) +(A.1 Acknowledgments) endobj 609 0 obj -<< /S /GoTo /D (section.B.1) >> +<< /S /GoTo /D (subsection.A.1.1) >> endobj 612 0 obj -(B.1 dig) +(A.1.1 A Brief History of the DNS and BIND) endobj 613 0 obj -<< /S /GoTo /D (section.B.2) >> +<< /S /GoTo /D (section.A.2) >> endobj 616 0 obj -(B.2 host) +(A.2 General DNS Reference Information) endobj 617 0 obj -<< /S /GoTo /D (section.B.3) >> +<< /S /GoTo /D (subsection.A.2.1) >> endobj 620 0 obj -(B.3 dnssec-keygen) +(A.2.1 IPv6 addresses \(AAAA\)) endobj 621 0 obj -<< /S /GoTo /D (section.B.4) >> +<< /S /GoTo /D (section.A.3) >> endobj 624 0 obj -(B.4 dnssec-signzone) +(A.3 Bibliography \(and Suggested Reading\)) endobj 625 0 obj -<< /S /GoTo /D (section.B.5) >> +<< /S /GoTo /D (subsection.A.3.1) >> endobj 628 0 obj -(B.5 named-checkconf) +(A.3.1 Request for Comments \(RFCs\)) endobj 629 0 obj -<< /S /GoTo /D (section.B.6) >> +<< /S /GoTo /D (subsection.A.3.2) >> endobj 632 0 obj -(B.6 named-checkzone) +(A.3.2 Internet Drafts) endobj 633 0 obj -<< /S /GoTo /D (section.B.7) >> +<< /S /GoTo /D (subsection.A.3.3) >> endobj 636 0 obj -(B.7 named) +(A.3.3 Other Documents About BIND) endobj 637 0 obj -<< /S /GoTo /D (section.B.8) >> +<< /S /GoTo /D (appendix.B) >> endobj 640 0 obj -(B.8 rndc) +(B Manual pages) endobj 641 0 obj -<< /S /GoTo /D (section.B.9) >> +<< /S /GoTo /D (section.B.1) >> endobj 644 0 obj -(B.9 rndc.conf) +(B.1 dig) endobj 645 0 obj -<< /S /GoTo /D (section.B.10) >> +<< /S /GoTo /D (section.B.2) >> endobj 648 0 obj -(B.10 rndc-confgen) +(B.2 host) endobj 649 0 obj -<< /S /GoTo /D [650 0 R /FitH ] >> +<< /S /GoTo /D (section.B.3) >> +endobj +652 0 obj +(B.3 dnssec-keygen) +endobj +653 0 obj +<< /S /GoTo /D (section.B.4) >> +endobj +656 0 obj +(B.4 dnssec-signzone) +endobj +657 0 obj +<< /S /GoTo /D (section.B.5) >> +endobj +660 0 obj +(B.5 named-checkconf) +endobj +661 0 obj +<< /S /GoTo /D (section.B.6) >> +endobj +664 0 obj +(B.6 named-checkzone) +endobj +665 0 obj +<< /S /GoTo /D (section.B.7) >> +endobj +668 0 obj +(B.7 named) +endobj +669 0 obj +<< /S /GoTo /D (section.B.8) >> +endobj +672 0 obj +(B.8 rndc) +endobj +673 0 obj +<< /S /GoTo /D (section.B.9) >> +endobj +676 0 obj +(B.9 rndc.conf) +endobj +677 0 obj +<< /S /GoTo /D (section.B.10) >> +endobj +680 0 obj +(B.10 rndc-confgen) +endobj +681 0 obj +<< /S /GoTo /D [682 0 R /FitH ] >> endobj -653 0 obj << +685 0 obj << /Length 236 /Filter /FlateDecode >> stream xÚÁJA †ïó9¶‡M'™d2s´T¥‚Beoâai·Rp·t­ïïÔÕ*êArÉÿ‘ü /A}È–ՓºsžŠvíèƒ ¨B)þP+!ÃlQ¡bJÕÂwìNì1úÈP©)&>áóÚÍ®˜€-A½bEM¦pæêÍÃd¾¼[L+V?ÉcºØt»~÷ršã~[÷í¶Ú~ÝNë a¤(±ø˘’å÷9·MÿÚ<ŸwYŸÝQ DËr;yƒ|ê~üÁÁýhÌ–ÁbïVV_§æŒlåP}&ûÿsßC+WDendstream endobj -650 0 obj << +682 0 obj << /Type /Page -/Contents 653 0 R -/Resources 652 0 R +/Contents 685 0 R +/Resources 684 0 R /MediaBox [0 0 595.2756 841.8898] -/Parent 659 0 R +/Parent 691 0 R >> endobj -651 0 obj << +683 0 obj << /Type /XObject /Subtype /Form /FormType 1 /PTEX.FileName (./isc-logo.pdf) /PTEX.PageNumber 1 -/PTEX.InfoDict 660 0 R +/PTEX.InfoDict 692 0 R /Matrix [1.00000000 0.00000000 0.00000000 1.00000000 0.00000000 0.00000000] /BBox [0.00000000 0.00000000 255.00000000 149.00000000] /Resources << /ProcSet [ /PDF /Text ] /ColorSpace << -/R15 661 0 R -/R9 662 0 R -/R11 663 0 R -/R13 664 0 R +/R15 693 0 R +/R9 694 0 R +/R11 695 0 R +/R13 696 0 R >>/ExtGState << -/R17 665 0 R -/R8 666 0 R ->>/Font << /R19 667 0 R >> +/R17 697 0 R +/R8 698 0 R +>>/Font << /R19 699 0 R >> >> -/Length 668 0 R +/Length 700 0 R /Filter /FlateDecode >> stream @@ -1019,7 +1067,7 @@ x FÑÞIca­Ç0Ú) ¹A¿+ÇÀº ¸|-Tuùa>‚s:½¯•~K“ÒÞV׋„OÒAŠI… ɪÁr2Q“°Ø¨Á>.zÎCN’¦{Õ«'^5Mã»Åûæ¡æÔÊý¹U1z6õßvãpF)ÂÏåìÊ›C£i#]bÝLkS#ˆQÁŽv–¨Ô­«•ÇcHŸ$¬Áê³DI­ÌÑptÅ73*_åª'ŽÚ¿¢ÚòQŒ×è Œ‚,É*Ñ+ôÚ™%vŽ&u߉ xœÉ-¾kz˜ Ï‡Ú Q´Pë3ÈZ§q¢Æ0¯ˆwMÍ?©=õ*_Ç£RïѪëƬ¡”’¢g!SeRâÅéz·ÝŠFLÚŸv ÏÆ狼eÇNdæÌdï"gK2cëÉ—GoOá8GëÏϦ:B Àht[~Ðåõ—×SÒÜ£uˆQk·%È´ÔÛ†ëiATÆÌp[OU‡Ç(zßQã³* *Ñûø®á¾FÅÍ„Ï'µV‡¾;1aŠÑüËŒÜr$¿Íâ9Ë8ˆü ý‚TóþÏÍ÷_oôô¢ññCÙõ"ú*~uÊqæþéïÛ{Ç"ß~±Úú"ú…bùz+·£]OZ,SÏ¥._^·§_\^þ†56g‡3^®Ç5Z©®©¹Uý¶õòÇí÷O¿½<Ó#rYëé»Ë^~¹ÁÇ<ц®5%¥Ü~ÿñsõ\êídŽ3¼4ü~èé[iþÂÈg óžµ|¥Ïà5³m“XSô7…ÿúáò¬ä>!»Î“O÷hKYð¿þîÇ Ó3/¡úôÃgë¾4EO=öï¦üì“­‡v5”ùÜþû‚ék”ùôñR”Ì¡ÌlöÅ·ß_DÍη„Rf.{úÏåYӎͧÿ^ž©í5¬?ývýüeûMüó?Ò ƒendstream endobj -660 0 obj +692 0 obj << /Producer (AFPL Ghostscript 8.51) /CreationDate (D:20050606145621) @@ -1029,46 +1077,46 @@ endobj /Author (Douglas E. Appelt) >> endobj -661 0 obj -[/Separation/PANTONE#201805#20C/DeviceCMYK 669 0 R] +693 0 obj +[/Separation/PANTONE#201805#20C/DeviceCMYK 701 0 R] endobj -662 0 obj -[/Separation/PANTONE#207506#20C/DeviceCMYK 670 0 R] +694 0 obj +[/Separation/PANTONE#207506#20C/DeviceCMYK 702 0 R] endobj -663 0 obj -[/Separation/PANTONE#20301#20C/DeviceCMYK 671 0 R] +695 0 obj +[/Separation/PANTONE#20301#20C/DeviceCMYK 703 0 R] endobj -664 0 obj -[/Separation/PANTONE#20871#20C/DeviceCMYK 672 0 R] +696 0 obj +[/Separation/PANTONE#20871#20C/DeviceCMYK 704 0 R] endobj -665 0 obj +697 0 obj << /Type /ExtGState /SA true >> endobj -666 0 obj +698 0 obj << /Type /ExtGState /OPM 1 >> endobj -667 0 obj +699 0 obj << /BaseFont /NVXWCK#2BTrajanPro-Bold -/FontDescriptor 673 0 R +/FontDescriptor 705 0 R /Type /Font /FirstChar 67 /LastChar 136 /Widths [ 800 0 0 0 0 0 452 0 0 0 0 0 0 0 0 0 582 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 841 633 576 686 590 540 923 827 407 760] -/Encoding 674 0 R +/Encoding 706 0 R /Subtype /Type1 >> endobj -668 0 obj +700 0 obj 2362 endobj -669 0 obj +701 0 obj << /Filter /FlateDecode /FunctionType 4 @@ -1079,7 +1127,7 @@ endobj stream xœ«N)-P0PÈ-ÍQH­HÎPsõ, QE¸zFÆ`^-=1°endstream endobj -670 0 obj +702 0 obj << /Filter /FlateDecode /FunctionType 4 @@ -1090,7 +1138,7 @@ endobj stream xœ«N)-P0PÈ-ÍQH­HÎPsõ LÑE ‘D Êk8/«endstream endobj -671 0 obj +703 0 obj << /Filter /FlateDecode /FunctionType 4 @@ -1101,7 +1149,7 @@ endobj stream xœ«N)-P0TÈ-ÍQH­HÎPq ôLLÑD\=C 0¯=D³endstream endobj -672 0 obj +704 0 obj << /Filter /FlateDecode /FunctionType 4 @@ -1112,7 +1160,7 @@ endobj stream xœ«N)-P0Ð365³TÈ-ÍQH­HÎP€Š™X ‹™›#Ä ô -,ŒÀüZ&‹ˆendstream endobj -673 0 obj +705 0 obj << /Type /FontDescriptor /FontName /NVXWCK#2BTrajanPro-Bold @@ -1125,17 +1173,17 @@ endobj /StemV 138 /MissingWidth 500 /CharSet (/Msmall/C/Ysmall/Nsmall/Osmall/Esmall/Rsmall/S/Ssmall/I/Tsmall/Ismall/Usmall) -/FontFile3 675 0 R +/FontFile3 707 0 R >> endobj -674 0 obj +706 0 obj << /Type /Encoding /BaseEncoding /WinAnsiEncoding /Differences [ 127/Nsmall/Tsmall/Esmall/Rsmall/Ysmall/Ssmall/Msmall/Osmall/Ismall/Usmall] >> endobj -675 0 obj +707 0 obj << /Filter /FlateDecode /Subtype /Type1C @@ -1158,42 +1206,44 @@ x ȼLçÇ<;— *X³«¥×ÛGâ_Y1ETïƒ4ˆÒ-U…_>´üØ¢æ}õï÷v¼ §ádù#¹rÛŸå¥@ÔÁ\5l…hð<8Ús·’?h¹†!-¶‚*JŠ»,\G/Wé9OW—×µ.Ÿ—­€&¨[”ÄIÁÚ´Ó½7ýáÐäKý¡«¨ðúš.cxQn<¼À°üÖëgöõÁúhíY8³¶+oî^÷ë°‹>9p¯“°¥!ÑÚÙ®ŠðK´¢†#©óRÄlxŽJ”ب¬Ò–àá•{ϳwÿaû’ožÇ£ëHõÅâH9”ç/.~å÷Ë »O·Øèv61Bá5*È<6ÞÍ,‡bh‘˜¶ž\Î]Çé#¹#ØÔÍ1Oúñ°Ï¤5oÂ]цÆß4}h˜î0$å,6ü¼”A,¯?/å;Rôcy6Ò½UJ¿§Y½X^é¶ÙÉŸ‡‹º–2¸K|o½Ø”/Ȩ/ƒ( Â2Ð#žNMKðrˆ rœÛf9ËyZ¸Ú}$«Ö õ–©)  h`iÎGàAç÷´€H+Šˆ…Õ&*áX$žèìVŽhª”—›¾÷‡A1Ý£¤œÏ0‰÷—Hi éƒw~I(Áö2;à]¸L ™x4[¡OÜ,¾®ÆûÂQQ°”FdQ“ƒ¢¬„%\î¢Åâ:Ó;ÈÑ”ÌEb1ž’¡ˆÿ§=$¸¥?Iš¿CÐõ3¾C=VÐ'>·¯ôÌÒ+Ü~8 ç#;úÁ_£×á*qň+ô 8®‚ãÆpêŒ_YR”¾d%a ç¡H\eÄõãDf£Ñ¨­ŽR[kφG¸ù/WT®ò•A5”H¥ÛVoo8hnû)¼ÞÃDn…ñëqÌzfåhý&þcQbµXÇß‚çLŽúõ;{²Ðñðué¿ÊÛÙ†-©[SÄ-Û¼ÔyubÜñhüm´œ4^Ë™ ääšLÿQ‹¡endstream endobj -654 0 obj << -/D [650 0 R /XYZ 85.0394 794.5015 null] +686 0 obj << +/D [682 0 R /XYZ 85.0394 794.5015 null] >> endobj -655 0 obj << -/D [650 0 R /XYZ 85.0394 769.5949 null] +687 0 obj << +/D [682 0 R /XYZ 85.0394 769.5949 null] >> endobj -652 0 obj << -/Font << /F21 658 0 R >> -/XObject << /Im1 651 0 R >> +684 0 obj << +/Font << /F21 690 0 R >> +/XObject << /Im1 683 0 R >> /ProcSet [ /PDF /Text ] >> endobj -678 0 obj << -/Length 994 +710 0 obj << +/Length 999 /Filter /FlateDecode >> stream -xÚµVË’¢JÝû,5¢­©¯Z҈ʂ83³°»‰hÅ+8ý÷7¡ªDÐÛ›‰.*«ò˜yòd@4 ?¢&29åšÅud`bh›ýk/à› ˆÄ`mŒãvãügðó7Ö¶ú:§ï°ÁˆpNµý@72tÆÔÉÛ |»„ºòª€ýlc3D0‹éÈvר4Á"ÔË282e5ü1|™‚É7©©¥; -Qm]»ÀÒíÏ¡[?NùËk5ú~Õ Œ,Ìr À¦v|™ý*Ô˜"ËäV£ŠÂýí´›•"("6 Š±þ0SצњfkZÂòUv:d•Ø%e•íK±q‹CYœªü¼PØ ÁÀÂÀ¿(ÕýÄ­Ø’šÔÀK/‚F‘aš¦féZÏÏÕUèñ5üŽºÌ‚¾Z¼ú_êÒÿS]ÜêHZ“¶&»«n±«Þק±‡Y_bÔ×ÏĈSÓÖ,Ê€'ŸÉ§Àãkô­z¦8¶I³.g™öyYæÅApª -±žËLÖ³yG„¡Üï‹m¾ëœ¬[aló²:åÏçJX½æršÊ›âwÅIýûCÇóéX”ÒýžW¯ÂR¸ú¤8K1w™ÄA‚ºëpßAÜ0hSÚk&ò=Ëø/§54d+Igñ'ßf[Åv])KF_?²V1eÍöPTù&ëÕßÖ{ìÉÚÙZ•Kÿúí­©ƒpšTß„ëJ wž•ÍÀàbŽ˜Îêb-ĵH:÷ä˜EÓôiÄéЉ剟ˆuGßý‰7»úæ:‰BÔ;a;áDºÂ˜€8þB‚ †Ì;aê{Òùä§saÅÞ̉'âJÂó•‘nIi­~$ é\Q¼C>tƒÕÄg½äþbøª–{L¢©X^ìÎÁ1²ô¡óè~ú£-´fg"®Û–bGvS? ½$AŠƒXCÉ×ûîAÍ:QšDP[¬˜¬‚æô¢þ4Ž²¶(iu®YaÏÅ^W‰§Êá›tùÀP‚ØɃâáÁ Ç]Ùµº©…ÝîBÙiìtd -½YàϼÐõº™¢&ró°Ðµ é¶\ d> endobj -679 0 obj << -/D [677 0 R /XYZ 56.6929 794.5015 null] +711 0 obj << +/D [709 0 R /XYZ 56.6929 794.5015 null] >> endobj -676 0 obj << -/Font << /F23 682 0 R /F14 685 0 R >> +708 0 obj << +/Font << /F23 714 0 R /F14 717 0 R >> /ProcSet [ /PDF /Text ] >> endobj -688 0 obj << +720 0 obj << /Length 2891 /Filter /FlateDecode >> @@ -1213,1307 +1263,1364 @@ W M…­æ:h¾nêãô¨ýèá·oðÐkƒh—#öùlk…lMfR,`5("qP,Þ„b‰Ðø˜Ž~]í»=Ãמ,Åzž%húg°º ÁîGÓäm2ƒÅREŽ7XD‚ ˆ \@pÁ,tûµDÀ'/œÕ½ÊýØø@Á_™'Hûd !E–•B*Åéö®ÒŒ‘@aaëêdz¿µÍ:ê°uõÕ¶HA‰©”!;2¬3ÁX$1Ò5–$LCK¢[ÎÂéÌù›ödŽ÷ÇršgľڀŠL% Ù¤a½ Ò"AP‡…r=|Ê?SRxÐRèWywqqvê:ûñÌ7ƒÊ'*SƒVZâï<Ž`¨ðwæ2ciìÈÛÕ÷ Ε[~©‘&Å3çë™SÿÀóøóp%ðö?ž­®Bendstream endobj -687 0 obj << +719 0 obj << /Type /Page -/Contents 688 0 R -/Resources 686 0 R +/Contents 720 0 R +/Resources 718 0 R /MediaBox [0 0 595.2756 841.8898] -/Parent 659 0 R -/Annots [ 691 0 R 692 0 R 693 0 R 694 0 R 695 0 R 696 0 R 697 0 R 698 0 R 699 0 R 700 0 R 701 0 R 702 0 R 703 0 R 704 0 R 705 0 R 706 0 R 707 0 R 708 0 R 709 0 R 710 0 R 711 0 R 712 0 R 713 0 R 714 0 R 715 0 R 716 0 R 717 0 R 718 0 R 719 0 R 720 0 R 721 0 R 722 0 R 723 0 R 724 0 R 725 0 R 726 0 R 727 0 R 728 0 R 729 0 R 730 0 R 731 0 R 732 0 R 733 0 R 734 0 R 735 0 R 736 0 R 737 0 R 738 0 R 739 0 R 740 0 R ] +/Parent 691 0 R +/Annots [ 723 0 R 724 0 R 725 0 R 726 0 R 727 0 R 728 0 R 729 0 R 730 0 R 731 0 R 732 0 R 733 0 R 734 0 R 735 0 R 736 0 R 737 0 R 738 0 R 739 0 R 740 0 R 741 0 R 742 0 R 743 0 R 744 0 R 745 0 R 746 0 R 747 0 R 748 0 R 749 0 R 750 0 R 751 0 R 752 0 R 753 0 R 754 0 R 755 0 R 756 0 R 757 0 R 758 0 R 759 0 R 760 0 R 761 0 R 762 0 R 763 0 R 764 0 R 765 0 R 766 0 R 767 0 R 768 0 R 769 0 R 770 0 R 771 0 R 772 0 R ] >> endobj -691 0 obj << +723 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [532.6051 688.709 539.579 697.2967] /Subtype /Link /A << /S /GoTo /D (chapter.1) >> >> endobj -692 0 obj << +724 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [532.6051 676.5858 539.579 685.4425] /Subtype /Link /A << /S /GoTo /D (section.1.1) >> >> endobj -693 0 obj << +725 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [532.6051 664.4876 539.579 673.3442] /Subtype /Link /A << /S /GoTo /D (section.1.2) >> >> endobj -694 0 obj << +726 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [532.6051 652.3894 539.579 661.246] /Subtype /Link /A << /S /GoTo /D (section.1.3) >> >> endobj -695 0 obj << +727 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [532.6051 640.1914 539.579 649.1477] /Subtype /Link /A << /S /GoTo /D (section.1.4) >> >> endobj -696 0 obj << +728 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [532.6051 628.0932 539.579 637.0495] /Subtype /Link /A << /S /GoTo /D (subsection.1.4.1) >> >> endobj -697 0 obj << +729 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [532.6051 615.995 539.579 624.9512] /Subtype /Link /A << /S /GoTo /D (subsection.1.4.2) >> >> endobj -698 0 obj << +730 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [532.6051 603.8967 539.579 612.853] /Subtype /Link /A << /S /GoTo /D (subsection.1.4.3) >> >> endobj -699 0 obj << +731 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [532.6051 591.7985 539.579 600.7547] /Subtype /Link /A << /S /GoTo /D (subsection.1.4.4) >> >> endobj -700 0 obj << +732 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [532.6051 579.7002 539.579 588.6565] /Subtype /Link /A << /S /GoTo /D (subsubsection.1.4.4.1) >> >> endobj -701 0 obj << +733 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [532.6051 567.6019 539.579 576.5582] /Subtype /Link /A << /S /GoTo /D (subsubsection.1.4.4.2) >> >> endobj -702 0 obj << +734 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [532.6051 555.5037 539.579 564.46] /Subtype /Link /A << /S /GoTo /D (subsubsection.1.4.4.3) >> >> endobj -703 0 obj << +735 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [527.6238 543.4055 539.579 552.5112] /Subtype /Link /A << /S /GoTo /D (subsection.1.4.5) >> >> endobj -704 0 obj << +736 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [527.6238 531.3072 539.579 540.413] /Subtype /Link /A << /S /GoTo /D (subsubsection.1.4.5.1) >> >> endobj -705 0 obj << +737 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [527.6238 519.209 539.579 528.3147] /Subtype /Link /A << /S /GoTo /D (subsection.1.4.6) >> >> endobj -706 0 obj << +738 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [527.6238 496.7003 539.579 505.4125] /Subtype /Link /A << /S /GoTo /D (chapter.2) >> >> endobj -707 0 obj << +739 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [527.6238 484.5772 539.579 493.5832] /Subtype /Link /A << /S /GoTo /D (section.2.1) >> >> endobj -708 0 obj << +740 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [527.6238 472.4789 539.579 481.485] /Subtype /Link /A << /S /GoTo /D (section.2.2) >> >> endobj -709 0 obj << +741 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [527.6238 460.3806 539.579 469.3867] /Subtype /Link /A << /S /GoTo /D (section.2.3) >> >> endobj -710 0 obj << +742 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [527.6238 448.2824 539.579 457.2885] /Subtype /Link /A << /S /GoTo /D (section.2.4) >> >> endobj -711 0 obj << +743 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [527.6238 436.1841 539.579 445.1902] /Subtype /Link /A << /S /GoTo /D (section.2.5) >> >> endobj -712 0 obj << +744 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [527.6238 413.4314 539.579 422.288] /Subtype /Link /A << /S /GoTo /D (chapter.3) >> >> endobj -713 0 obj << +745 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [527.6238 401.353 539.579 410.4588] /Subtype /Link /A << /S /GoTo /D (section.3.1) >> >> endobj -714 0 obj << +746 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [527.6238 389.2548 539.579 398.3605] /Subtype /Link /A << /S /GoTo /D (subsection.3.1.1) >> >> endobj -715 0 obj << +747 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [527.6238 377.1565 539.579 386.2623] /Subtype /Link /A << /S /GoTo /D (subsection.3.1.2) >> >> endobj -716 0 obj << +748 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [527.6238 365.1579 539.579 374.164] /Subtype /Link /A << /S /GoTo /D (section.3.2) >> >> endobj -717 0 obj << +749 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [527.6238 353.0597 539.579 362.0658] /Subtype /Link /A << /S /GoTo /D (section.3.3) >> >> endobj -718 0 obj << +750 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [527.6238 340.9614 539.579 349.9675] /Subtype /Link /A << /S /GoTo /D (subsection.3.3.1) >> >> endobj -719 0 obj << +751 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [527.6238 328.7635 539.579 337.8693] /Subtype /Link /A << /S /GoTo /D (subsubsection.3.3.1.1) >> >> endobj -720 0 obj << +752 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [527.6238 316.6653 539.579 325.771] /Subtype /Link /A << /S /GoTo /D (subsubsection.3.3.1.2) >> >> endobj -721 0 obj << +753 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [527.6238 304.567 539.579 313.6728] /Subtype /Link /A << /S /GoTo /D (subsection.3.3.2) >> >> endobj -722 0 obj << +754 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [527.6238 281.9139 539.579 290.7706] /Subtype /Link /A << /S /GoTo /D (chapter.4) >> >> endobj -723 0 obj << +755 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [527.6238 269.8356 539.579 278.9413] /Subtype /Link /A << /S /GoTo /D (section.4.1) >> >> endobj -724 0 obj << +756 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [527.6238 257.7373 539.579 266.8431] /Subtype /Link /A << /S /GoTo /D (section.4.2) >> >> endobj -725 0 obj << +757 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [527.6238 245.6391 539.579 254.7448] /Subtype /Link /A << /S /GoTo /D (subsection.4.2.1) >> >> endobj -726 0 obj << +758 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [527.6238 233.5408 539.579 242.4971] /Subtype /Link /A << /S /GoTo /D (section.4.3) >> >> endobj -727 0 obj << +759 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [527.6238 221.4426 539.579 230.3988] /Subtype /Link /A << /S /GoTo /D (section.4.4) >> >> endobj -728 0 obj << +760 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [527.6238 209.3443 539.579 218.3006] /Subtype /Link /A << /S /GoTo /D (subsection.4.4.1) >> >> endobj -729 0 obj << +761 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [527.6238 197.2461 539.579 206.2023] /Subtype /Link /A << /S /GoTo /D (section.4.5) >> >> endobj -730 0 obj << +762 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [527.6238 185.1478 539.579 194.1041] /Subtype /Link /A << /S /GoTo /D (subsection.4.5.1) >> >> endobj -731 0 obj << +763 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [527.6238 173.0496 539.579 182.0058] /Subtype /Link /A << /S /GoTo /D (subsubsection.4.5.1.1) >> >> endobj -732 0 obj << +764 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [527.6238 161.051 539.579 170.0571] /Subtype /Link /A << /S /GoTo /D (subsubsection.4.5.1.2) >> >> endobj -733 0 obj << +765 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [527.6238 148.9527 539.579 157.9588] /Subtype /Link /A << /S /GoTo /D (subsection.4.5.2) >> >> endobj -734 0 obj << +766 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [527.6238 136.8545 539.579 145.8606] /Subtype /Link /A << /S /GoTo /D (subsection.4.5.3) >> >> endobj -735 0 obj << +767 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [527.6238 124.7562 539.579 133.7623] /Subtype /Link /A << /S /GoTo /D (subsection.4.5.4) >> >> endobj -736 0 obj << +768 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [527.6238 112.5583 539.579 121.5146] /Subtype /Link /A << /S /GoTo /D (subsection.4.5.5) >> >> endobj -737 0 obj << +769 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [527.6238 100.4601 539.579 109.4163] /Subtype /Link /A << /S /GoTo /D (subsection.4.5.6) >> >> endobj -738 0 obj << +770 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [527.6238 88.3618 539.579 97.3181] /Subtype /Link /A << /S /GoTo /D (section.4.6) >> >> endobj -739 0 obj << +771 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [527.6238 76.2636 539.579 85.2199] /Subtype /Link /A << /S /GoTo /D (section.4.7) >> >> endobj -740 0 obj << +772 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [527.6238 64.1653 539.579 73.1216] /Subtype /Link /A << /S /GoTo /D (section.4.8) >> >> endobj -689 0 obj << -/D [687 0 R /XYZ 85.0394 794.5015 null] +721 0 obj << +/D [719 0 R /XYZ 85.0394 794.5015 null] >> endobj -690 0 obj << -/D [687 0 R /XYZ 85.0394 711.9273 null] +722 0 obj << +/D [719 0 R /XYZ 85.0394 711.9273 null] >> endobj -686 0 obj << -/Font << /F21 658 0 R /F23 682 0 R >> +718 0 obj << +/Font << /F21 690 0 R /F23 714 0 R >> /ProcSet [ /PDF /Text ] >> endobj -743 0 obj << -/Length 3151 +775 0 obj << +/Length 3169 /Filter /FlateDecode >> stream -xÚí[w·Çßõ)ø(=ÅýòèkNÒÖvlõ¥iÖÔZæ ÉUI*®ûé‹å.€Y;ÚȵD:Çeîì çÿ#ƒ½± õÿ±‰ÒD;î&ÆI¢(S“ÙòŒN®ý{?œ±~›iØh -·z~yö§×ÂLqšëÉ姉TŠpµÛ™%ÔZ6¹¼úåüÅÛ7—¯Þ\~¸øõò§³W—q¯Ð3£¢Ýå?Ï~ù•N®|?Q"œU“/þJ˜s|²<“J%…ÿ²8ûpösÜ!xwgšý$Œ.4Ï|.ÀGißTlb”#ZøwÚ"‰%ìbÊ8¥ç?Ô«z]mç«ë‹)WôüÏõ×ÍÅÔj~N.¦Êoðø~Hçþ°Ý•šú¬¡S>÷´Y_Oºï¡ZÁn - ÷ÕÚß«×{qõsq`¬ Þ+ÒM©Ž¬ðž•óëUeû¹î^ü½YùW†ê1(1!«ÅÄCŒ¨FL&ŒÔ{ F(¢´u‘Ñó¢YýƒR~}»ŽÜ|¨×¿×ëvŒaâXQe$䱘`ˆ1uâfœ‘L#¨wÃü£}y侪 Ã{HœG„z~|÷»îɸ½¹iÖÛî—ùªûùüÇ7/»WÞÀqöx™oPÈq1@ÀjÈí8@™80€PïaaÌÏsT(K.Naž]]­/˜=¯7›Ž”¿4Ío·7ý/ÛÄ¡ç™ÿÓ½z_ÏšÍÕn²c£š‡¼k 1ÍaÞ1Í3q`š£Þ{͵sDá¢æ|LómÓý|S-kœ‚7óý6¯›õ²Ú8î{—9¦¢TfhˆÈW«U[õóƒœTJ÷Û½û¼®6ž-øqÍjBz‹á†

1~q@. Ô{„G8‹íT»ƒxü@rݬs3I‰¶æ<’Ú£ªP1½¥ð@Cž|’ŽÂ“‹÷ÞW(a,aR‚ -uøhÕâ˺Î-ôq_Ÿ",cÓ®ô÷Œé.F b(A9åøi½¹80”Pï%­==”0þ (žéHæžÐèÒZŒ 0IJÉñ3örq`È Þ2JjOÈ>Rµ¬6ÛöúøüüX:}°¿ÒÇU½BŽ‹ù†?PCŒŸL?¨÷Àä„J§?ò¡ø¹OåssYÌ 0Ä8ZaœdâÀ8A½ND;á…ÝÕáCUÍM+õ&ÀÁú½ÚÓU 0Ä`€rÈñE½\ ¨÷w‚8Î-„¡_—yݬ¿TÝVv—KÊO— ÙˆÙ+e"l ÔQã½r.„ Ü{bÃújá`ë£Û»‚µl¼¼­ÓͶšývçŽ`âû»dé[ 1UÅ C (…ŸYäâÀ@@½'´#V¹AÅÏf³x)ô‹ö»v¼hmÑ8]÷œWŒ0Ä°€Â`XdâÀ°@½',”!–›AíP?®|û©òl\L5e§Ëóx„ã 1< @jüŠ¤\¨÷„‡TÄ8Í ºÃãçÛº½yÑî†nð† -˜1oÅTCŒ -¨‹¿ð(Fê=Q!1zØ}˜ŽŠî.´-—Žž¯«ÕæÓnR¡ ;aWŒ0Ä°€Â¨ñ¦4†ê=aÁ1b؇ؾ)­ÂâÂËwÝ‹wñ£ý-W,WÇÅBÈV1 Àcª¡Æ{Ò\ ¨÷ÄuÄP6(®cáíÍàNç¾n¶õ2Ý -ívWJfñzËùŽ©×:eL@±¼À“&“7&/ê=ÊËœ!Z;9X¢¾øÇ>ò †é'Þ8Ä• ¨ñ“rq àÞVíçzXGÀ»z=o®æ³8àçÕ¦_eØu¿W‹ö;ý=¬I>,!IÅC (†@& Ô{BÀ¢é°9`¼C`'zsÓ,škß$aN75ÉrXL0Ä©ñ[[æâÀA½'B4#ÊÈa™=!÷8epã'‰ ?=ÌÝ’„ræön «ŽãÒà˜Übt€!†C'†ê=¡#Q’ë‹ìÐyÿ~S÷ÍÃÛîàFlqº´*e®˜ `ˆq1Pfü<Ò\¨÷Ä…0D û -¦bÍ¡ç·ýý•õÑÞ § –>Ŭ$; (Öø¡¯L(˜ëÄ WDš;Šî@y~;_l§áÑ&ЯÌWŸv"ˆgEü»YµëßƸGy¶LÌB±¾ÀxåñÕé\˜Ä¨÷¤1DÊ;=ˆÉiüjy³ýšž“ÕÑæ8Ž_Å$# 1" dâÀ@½'(#’é6M0»&?9ô“Èùlïæ,?ÆÙ!aÅ4$; (Çøús& Ìu$Á:"¬\G³««Ý‰nÕ"œé0K#ü‹jöy7epZ?™C6JevˆÌƒ\Ëœ ‘u>eˆP|Ýߪ¡/ï™’zFôÁ뤹yÊsÆѧYõ‰.~˜U²ÃžeeDž‘¸ö$+Ìux&€"‚ƒæÁ>>÷¹ÏÝSXƒèóYþ\–`†>•%ieg²Ü`‘øß)w^ÚìÃHü_FœRülpzº±l//³#gfqK‰kŸÈ%ü\WôWe"—µì6‘ÿZ¤J“endstream +xÚí[wÛ¸Çßý)ôh?Åýò˜ûɶM²±ûÒí>02#ëD]INÖýôEZàÈhãlli÷ìÚ‰9œñüÂ`@‚d#êÿe#¥‰vÜŒ“DQ¦F“Å MýÏÞœ°ö˜q8h z~qò—×ÂŒqšëÑÅç‘TŠpµ=™%ÔZ6º¸üíôÅûw¯Þ]œŸý~ñËÉ«‹xVè™QQŸòß'¿ýNG—>€_N(ΪÑ7ÿJ˜s|´8‘J%…3?9?ù5žütkšüM%\hžøU¸¿JýCÅFF9¢…ÿIý‹Hb ;3Néé›rY®ŠÍl9=sEOÿZÞ®ÏÆVóSr6Vþ€Ç÷E:÷ÝNvWjê³n„îò¹£Íj:j¾ùÕ +vch¸«Öîùk½¸Þ‰#¨ŸŠcõX‘†hJud…·¬œÏ¦ËÊæªl¾ùgµôߪĠĄ¬f 1b j1‰80bPÒÖEbDKÌ‹jù/Jùôf¹9/W_ËU=Æ0q¨¨ 2ò˜Í0Ä:q3ÌH"ŒÔ»a~ÈѾûîeó7pœ=ÞAæ‡rœ 0Ä‚r; P" Ô{dóóÊ’‹S˜g——«3fOËõº!åoUõåæºýÃ?Öqèyæÿi¾ûXNª­Íåv²cƒš‡¼dk 1ÍaÞ1Íq`š£Þ[͵sDá¢æ|HóMÕ|}W,Jœ‚w³OŸæí1¯«Õ¢ØŽ8îg—9¦"WfhˆÈÜK5"s*Dæ]ï zo['m a¾Œl«º2ø\\„f¯l¥M¯6ßÊúÿáó¼®æ~Z1œ½àÀ‡q¿¬ƒDÜ;çÝfÍ g œËÖŽ×T%ÕZ&™m²µëJó5œžöÇŸVÅêÖ—S)ŸrÉd!¤/û“ ±O”c"Æê=²¡aŒò– Þ²ññfÙµnEŠŠ—E¹¨ü¤Ëup³ªARB2³I†)P,Œ”D);Þ“c® ÄR×`ªÛ1wg¨í:¸b3«–œÏåª\NÊáÌ…“ß{¼Øx ƒl8càtX¦v¼&?SÌcÚU@ÇÛdj^ÏÂÜâÕ¼\”ËŸ€(fµ_ä#¤4û“ ±O” ã$Æ ê=LZ©&FjpnTþ^l&W¡(¯kT´áÇžö*!Ù¨C (—àè$âÀPA½3®‰LŽ”‡Æ0i;X¶¸ˆz=äv¹)þ8 §ŽK«÷%¦2hˆ€Ò“ +% +î½År¢­`Þ‚ò²¬ëÐrÖU¡byúÞbZ¯Îÿ 3ý±Ê³”Í0Ä€*` $âÀ@½·uEJ´ò(x\e_Ô3vµ5”5ÇQE%¤3`ˆ¡åb•D*¨÷n¸P–hæL˱®ü¯ „Tfƒ 1P T(‰80PPï(Re»æƃr¬+» „,e3 1  +‰80Pï¡¿U¢.0:~¿þöͪX,ŠzõȈc{{—Ñl\€!† TLÈa\q`¸ ÞÃ4„s¢¸ •¥®+ÞýÁˆµTzõQÅdÞÓ‚áŒÛö˜óM±)»iL¤Ëp{ìcγy†OPS¡†yJÄñ„z<ùÃ¥'þ8í/eÖ±§7 µ©Í¦¦³Ã ÂaÌì!ƒ¹n‰‘Ωc#ĉ؋̤ZnVÕ|àF8B™à{†!eÝ“††Ð‰9Îe"ðô4DèIÅàƒ{üX?÷宫`òÁø¹ÇZñÇ€Ë '!—ÙœCŒ¨ÆI"ŒÔ{àÄÈú숉ڋÉl9™ß\–)J41Ží›ìXÆjž2œ Og‡±ôÃwÄ&‚ÀÈÁ\p´¯IZwsýPäì_~ôõüï|³FLe6"ÀcJ…A’ˆ£õ0Q”:)³“/åmjêëK³bÏà"„=®úÆœgó 1ž ¦O‰80žPï'a‰ Ý¨c§ý#Ž¢O¯“ +©Í¦¦³Ã ‰áÛòA`È`®1ÜsbX‡ŒÛ‹Ì¼šNë;É…Êø!Ï©}ë9JÔ݆1ÅÙèCŒ(!O"ŒÔ{À‡I¸ÓÝR }(~î1Ñùsî²ún wÈe6'Àãj…q’ˆãõ¯2IÊ §ÆRê둶½myM}W-ìwrU,—ejÕÏrR)Ý÷ájU¬= ZðÚՄôfà 1x |bxs@* Ô{„G8‹íT}‚ xü@2­V©™Ž¤D[sIíAU¨˜Þ\x !OO>IáIÅÀƒ{o+”0–0)A…ÚµjþmU¦ú¸¯O–¡é Wú€¯{Ætg£ 1” œrø¶ÞTJ¨÷€’ÖžJ”öÏt$sOhô iÍFbÈ@Ùäð{©80dPï% µŒwÈì¿Rµ(Ö›z|z~,ÞÛ_éê^!ÇÙüCŒ¨!ÆO"ŒÔ{àGrB¥S?ò¡ø¹Oåss™Í 0Ä8Zaœ$âÀ8A½ND=á…ÝÕþKUÕu-õ:}ÁÁú³í½TÅkjrœÍ0Äøbü$âÀøA½~˜!ÎjP§ôCñsŸ VòQ×£ËlN€!Æ ÔJ_OÅq‚zïZqªˆST$ÖqžWÕ¼,ZQß·tŒ•p|µ)¦+`ˆÁåËz©80Pïîqœ[C».óºZ}+š'¬l·KÊÛ +úlÄìå² 6zê¨á^9Âî½cÃújá`ë£ë§‚Õl¼¼)æãõ¦˜|¹óD0ñómYúƒDLU6ÀJ¡†g©80PïÚ«\¯bÈ„g“IÜ +ý¢¾Á®/ªy]4Žûž»Äec 1, 0‰80,PïÊËM¯v¨‹·KßÀ~.<gcMÙqûbÀl<€!†H ïHJÅázïðŠ§ÄC7xüzSÖ/Ú>Ð >PAs¤"æ-› +`ˆQuQÃRq`T Þ;*„ F÷»ÓPÑ<…¶†ââÌÑÓU±\ÞN*”aG,bâ²±†P5Ü”¦âÀ°@½wXpFŒè÷!¶mJ‹°¸ðòCó͇øˆÑö‘+–«Ãb!d+›`ˆ±ÕPÃ=i*ŒÔ{ÇuÄPÖ+®aáýuïIçç·ëM¹è…v³-%“ø ½ÅlK‡Tk2& [^`ˆÉ ŒÉ›ˆ“õåeέì­?Q_üc¹OPÃôobŽr €†= ÔðÍ@©8pïVíçz=XCÀ‡r5«.g“8à§Åº]eØv_‹yý™þÖ$¤l€!†C †ê½CÀ¢i¿9`¼A`+zu]Í«©oŒ0LJš¤ 9Ì&b„@Ôð£-Sq`„ Þ;B4#ÊÈ~™-!÷¸epí'‰s?=L]Ý’„ræv¯n «ckpLn6:ÀCŠ‡¡“ˆCõÞ¡#Q’÷ë‹lÐùøq]¶ÍÃûæâF^lqÜZÕe.› `ˆqÑSfø>ÒT¨÷Ž aˆê÷LÅšCOoÚç+ëƒ}N,m:³Yéì0T X×¾A` `®;N¸"ÒÜéPtÊó›Ù|3¯6Yƒ~e¶ü¼}A¼+â?Õ²^ÿ6Æ=Ê»eb²õ†˜À½,¯N§âÀ$F½w3A¤¼Óƒ˜”Ư×›Ûî=Yõ iãúULR6ÀC '‚@" Ô{‡eD2Ý#À6<»¼ÜÞÞTÌÃõíI÷¹~QL®¶…Âiý„´n³‘-ug‡) s=¼¸œÓsÝÞgV‚}Gû7è¯}Cà‡Ùd=n7­¥n‘ó}®TvßÓ@ü¤äCl„$æ²ì6z ³‘au^GeˆP öG°qÝ÷îODaðUm²²_QÕÙao¨‚R o>Ü {?æ:<é_ÁAK°÷|;çK,+P_BôÞÍóÜ<åFbø=,Û<ç¿…%˜¡ï`é4ÔÈXîF°ƒN|kï˜;/yòÕ#þ?FœRüÿIp÷.cYo&³÷aqK‰«ß¿%ü°"Ú=˜È&–íA òÿ¦ºQjendstream endobj -742 0 obj << +774 0 obj << /Type /Page -/Contents 743 0 R -/Resources 741 0 R +/Contents 775 0 R +/Resources 773 0 R /MediaBox [0 0 595.2756 841.8898] -/Parent 659 0 R -/Annots [ 748 0 R 749 0 R 750 0 R 751 0 R 752 0 R 753 0 R 754 0 R 755 0 R 756 0 R 757 0 R 758 0 R 759 0 R 760 0 R 761 0 R 762 0 R 763 0 R 764 0 R 765 0 R 766 0 R 767 0 R 768 0 R 769 0 R 770 0 R 771 0 R 772 0 R 773 0 R 774 0 R 775 0 R 776 0 R 777 0 R 778 0 R 779 0 R 780 0 R 781 0 R 782 0 R 783 0 R 784 0 R 785 0 R 786 0 R 787 0 R 788 0 R 789 0 R 790 0 R 791 0 R 792 0 R 793 0 R 794 0 R 795 0 R 796 0 R 797 0 R 798 0 R 799 0 R 800 0 R 801 0 R 802 0 R 803 0 R 804 0 R ] +/Parent 691 0 R +/Annots [ 780 0 R 781 0 R 782 0 R 783 0 R 784 0 R 785 0 R 786 0 R 787 0 R 788 0 R 789 0 R 790 0 R 791 0 R 792 0 R 793 0 R 794 0 R 795 0 R 796 0 R 797 0 R 798 0 R 799 0 R 800 0 R 801 0 R 802 0 R 803 0 R 804 0 R 805 0 R 806 0 R 807 0 R 808 0 R 809 0 R 810 0 R 811 0 R 812 0 R 813 0 R 814 0 R 815 0 R 816 0 R 817 0 R 818 0 R 819 0 R 820 0 R 821 0 R 822 0 R 823 0 R 824 0 R 825 0 R 826 0 R 827 0 R 828 0 R 829 0 R 830 0 R 831 0 R 832 0 R 833 0 R 834 0 R 835 0 R 836 0 R ] >> endobj -748 0 obj << +780 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [499.2773 758.4766 511.2325 767.4329] /Subtype /Link /A << /S /GoTo /D (subsection.4.8.1) >> >> endobj -749 0 obj << +781 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [499.2773 746.445 511.2325 755.4012] /Subtype /Link /A << /S /GoTo /D (subsection.4.8.2) >> >> endobj -750 0 obj << +782 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [499.2773 734.5129 511.2325 743.3696] /Subtype /Link /A << /S /GoTo /D (subsection.4.8.3) >> >> endobj -751 0 obj << +783 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [499.2773 722.3816 511.2325 731.3379] /Subtype /Link /A << /S /GoTo /D (section.4.9) >> >> endobj -752 0 obj << +784 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [499.2773 710.3499 511.2325 719.3062] /Subtype /Link /A << /S /GoTo /D (subsection.4.9.1) >> >> endobj -753 0 obj << +785 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [499.2773 698.3182 511.2325 707.2745] /Subtype /Link /A << /S /GoTo /D (subsection.4.9.2) >> >> endobj -754 0 obj << +786 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [499.2773 675.998 511.2325 684.7301] /Subtype /Link /A << /S /GoTo /D (chapter.5) >> >> endobj -755 0 obj << +787 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [499.2773 663.9862 511.2325 672.9425] /Subtype /Link /A << /S /GoTo /D (section.5.1) >> >> endobj -756 0 obj << +788 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [499.2773 651.9545 511.2325 660.9108] /Subtype /Link /A << /S /GoTo /D (section.5.2) >> >> endobj -757 0 obj << +789 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [499.2773 629.6343 511.2325 638.4909] /Subtype /Link /A << /S /GoTo /D (chapter.6) >> >> endobj -758 0 obj << +790 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [499.2773 617.6225 511.2325 626.7282] /Subtype /Link /A << /S /GoTo /D (section.6.1) >> >> endobj -759 0 obj << +791 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [499.2773 605.5908 511.2325 614.5471] /Subtype /Link /A << /S /GoTo /D (subsection.6.1.1) >> >> endobj -760 0 obj << +792 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [499.2773 593.5591 511.2325 602.5154] /Subtype /Link /A << /S /GoTo /D (subsubsection.6.1.1.1) >> >> endobj -761 0 obj << +793 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [499.2773 581.5275 511.2325 590.4837] /Subtype /Link /A << /S /GoTo /D (subsubsection.6.1.1.2) >> >> endobj -762 0 obj << +794 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [499.2773 569.4958 511.2325 578.4521] /Subtype /Link /A << /S /GoTo /D (subsection.6.1.2) >> >> endobj -763 0 obj << +795 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [499.2773 557.4641 511.2325 566.4204] /Subtype /Link /A << /S /GoTo /D (subsubsection.6.1.2.1) >> >> endobj -764 0 obj << +796 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [499.2773 545.4324 511.2325 554.3887] /Subtype /Link /A << /S /GoTo /D (subsubsection.6.1.2.2) >> >> endobj -765 0 obj << +797 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [499.2773 533.4007 511.2325 542.5065] /Subtype /Link /A << /S /GoTo /D (section.6.2) >> >> endobj -766 0 obj << +798 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [499.2773 521.3691 511.2325 530.3254] /Subtype /Link /A << /S /GoTo /D (subsection.6.2.1) >> >> endobj -767 0 obj << +799 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [499.2773 509.3374 511.2325 518.2937] /Subtype /Link /A << /S /GoTo /D (subsection.6.2.2) >> >> endobj -768 0 obj << +800 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [499.2773 497.3057 511.2325 506.262] /Subtype /Link /A << /S /GoTo /D (subsection.6.2.3) >> >> endobj -769 0 obj << +801 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [499.2773 485.274 511.2325 494.2303] /Subtype /Link /A << /S /GoTo /D (subsection.6.2.4) >> >> endobj -770 0 obj << +802 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [499.2773 473.2424 511.2325 482.1986] /Subtype /Link /A << /S /GoTo /D (subsection.6.2.5) >> >> endobj -771 0 obj << +803 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [499.2773 461.2107 511.2325 470.167] /Subtype /Link /A << /S /GoTo /D (subsection.6.2.6) >> >> endobj -772 0 obj << +804 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [499.2773 449.179 511.2325 458.1353] /Subtype /Link /A << /S /GoTo /D (subsection.6.2.7) >> >> endobj -773 0 obj << +805 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [499.2773 437.1473 511.2325 446.1036] /Subtype /Link /A << /S /GoTo /D (subsection.6.2.8) >> >> endobj -774 0 obj << +806 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [499.2773 425.1157 511.2325 434.0719] /Subtype /Link /A << /S /GoTo /D (subsection.6.2.9) >> >> endobj -775 0 obj << +807 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [499.2773 413.084 511.2325 422.0403] /Subtype /Link /A << /S /GoTo /D (subsection.6.2.10) >> >> endobj -776 0 obj << +808 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [499.2773 401.0523 511.2325 410.0086] /Subtype /Link /A << /S /GoTo /D (subsubsection.6.2.10.1) >> >> endobj -777 0 obj << +809 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [499.2773 389.0206 511.2325 398.1264] /Subtype /Link /A << /S /GoTo /D (subsubsection.6.2.10.2) >> >> endobj -778 0 obj << +810 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [499.2773 377.0886 511.2325 386.0947] /Subtype /Link /A << /S /GoTo /D (subsection.6.2.11) >> >> endobj -779 0 obj << +811 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [499.2773 365.0569 511.2325 374.063] /Subtype /Link /A << /S /GoTo /D (subsection.6.2.12) >> >> endobj -780 0 obj << +812 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [499.2773 353.0252 511.2325 362.0313] /Subtype /Link /A << /S /GoTo /D (subsection.6.2.13) >> >> endobj -781 0 obj << +813 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [499.2773 340.9936 511.2325 349.9997] /Subtype /Link /A << /S /GoTo /D (subsection.6.2.14) >> >> endobj -782 0 obj << +814 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [499.2773 328.9619 511.2325 337.968] /Subtype /Link /A << /S /GoTo /D (subsection.6.2.15) >> >> endobj -783 0 obj << +815 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [499.2773 316.8305 511.2325 325.9363] /Subtype /Link /A << /S /GoTo /D (subsection.6.2.16) >> >> endobj -784 0 obj << +816 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [499.2773 304.8985 511.2325 313.9046] /Subtype /Link /A << /S /GoTo /D (subsubsection.6.2.16.1) >> >> endobj -785 0 obj << +817 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [499.2773 292.7672 511.2325 301.873] /Subtype /Link /A << /S /GoTo /D (subsubsection.6.2.16.2) >> >> endobj -786 0 obj << +818 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [499.2773 280.7355 511.2325 289.6918] /Subtype /Link /A << /S /GoTo /D (subsubsection.6.2.16.3) >> >> endobj -787 0 obj << +819 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [499.2773 268.7038 511.2325 277.6601] /Subtype /Link /A << /S /GoTo /D (subsubsection.6.2.16.4) >> >> endobj -788 0 obj << +820 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [499.2773 256.6722 511.2325 265.6285] /Subtype /Link /A << /S /GoTo /D (subsubsection.6.2.16.5) >> >> endobj -789 0 obj << +821 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [499.2773 244.6405 511.2325 253.7462] /Subtype /Link /A << /S /GoTo /D (subsubsection.6.2.16.6) >> >> endobj -790 0 obj << +822 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [499.2773 232.6088 511.2325 241.5651] /Subtype /Link /A << /S /GoTo /D (subsubsection.6.2.16.7) >> >> endobj -791 0 obj << +823 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [499.2773 220.5771 511.2325 229.5334] /Subtype /Link /A << /S /GoTo /D (subsubsection.6.2.16.8) >> >> endobj -792 0 obj << +824 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [499.2773 208.5455 511.2325 217.5017] /Subtype /Link /A << /S /GoTo /D (subsubsection.6.2.16.9) >> >> endobj -793 0 obj << +825 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [499.2773 196.5138 511.2325 205.4701] /Subtype /Link /A << /S /GoTo /D (subsubsection.6.2.16.10) >> >> endobj -794 0 obj << +826 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [499.2773 184.4821 511.2325 193.4384] /Subtype /Link /A << /S /GoTo /D (subsubsection.6.2.16.11) >> >> endobj -795 0 obj << +827 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [499.2773 172.4504 511.2325 181.4067] /Subtype /Link /A << /S /GoTo /D (subsubsection.6.2.16.12) >> >> endobj -796 0 obj << +828 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [499.2773 160.4187 511.2325 169.375] /Subtype /Link /A << /S /GoTo /D (subsubsection.6.2.16.13) >> >> endobj -797 0 obj << +829 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [499.2773 148.3871 511.2325 157.3433] /Subtype /Link /A << /S /GoTo /D (subsubsection.6.2.16.14) >> >> endobj -798 0 obj << +830 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [499.2773 136.3554 511.2325 145.4611] /Subtype /Link /A << /S /GoTo /D (subsubsection.6.2.16.15) >> >> endobj -799 0 obj << +831 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [499.2773 124.3237 511.2325 133.28] /Subtype /Link /A << /S /GoTo /D (subsubsection.6.2.16.16) >> >> endobj -800 0 obj << +832 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [499.2773 112.292 511.2325 121.2483] /Subtype /Link /A << /S /GoTo /D (subsubsection.6.2.16.17) >> >> endobj -801 0 obj << +833 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [499.2773 100.2604 511.2325 109.2166] /Subtype /Link /A << /S /GoTo /D (subsubsection.6.2.16.18) >> >> endobj -802 0 obj << +834 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [499.2773 88.2287 511.2325 97.185] /Subtype /Link -/A << /S /GoTo /D (subsubsection.6.2.16.19) >> +/A << /S /GoTo /D (subsection.6.2.17) >> >> endobj -803 0 obj << +835 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [499.2773 76.197 511.2325 85.1533] /Subtype /Link -/A << /S /GoTo /D (subsection.6.2.17) >> +/A << /S /GoTo /D (subsection.6.2.18) >> >> endobj -804 0 obj << +836 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [499.2773 64.1653 511.2325 73.1216] /Subtype /Link -/A << /S /GoTo /D (subsection.6.2.18) >> +/A << /S /GoTo /D (subsection.6.2.19) >> >> endobj -744 0 obj << -/D [742 0 R /XYZ 56.6929 794.5015 null] +776 0 obj << +/D [774 0 R /XYZ 56.6929 794.5015 null] >> endobj -741 0 obj << -/Font << /F37 747 0 R /F23 682 0 R /F21 658 0 R >> +773 0 obj << +/Font << /F37 779 0 R /F23 714 0 R /F21 690 0 R >> /ProcSet [ /PDF /Text ] >> endobj -807 0 obj << -/Length 3351 +839 0 obj << +/Length 3439 /Filter /FlateDecode >> stream -xÚíKs7€ïú<¤j¥ƒ°x€ÝÖ^v”rd¯$W¶6É&ÇËâPáÃŽ÷×/†`š"¦%8~ÈJ‘’¦§›Ýß4ºÌõ¨ûõŒ"TXÙÓVE™ê &;´7r{¾Ãü1ûá }xÔáåÎߟ ݳļè]¾ç2„Ãz—Ã_w^ž]žœ]^ìý~ùÓÎÉe<)T̨¨ÏøÇί¿ÓÞÐéÿi‡aê}p?P¬å½ÉŽT‚()DøÍõÎÅοã Á_W¢©¢„!Êpø$\€OÂ8'Æjg²¤îoõG)wŠëâgàpÁˆ1T:õa‹Ùr¾(‡ûïÊs0<·2ÄrSøƒ/ýE9)«ÅÞ>Wt÷ù¬?™ôg{ûFÒ]²·¯èx‘Ö~ŠÜ­€+nHÁ)k}º¡Ù¨×¼9‡1 rûPp3f›ç_ÅÌlØHÙƒjo‰‘šZ³H §_”˜ãò7Jy5^Œ§Uó›~5lÞ¼ž÷GeýVyyS5:|›FbÜ‚ç²¹‚02Zvs‘°ãÕÞr¡8¡BÈ…l¸8þXõ'㯠n†®ØhÞ¿š^ãzÔ‘J=Ú°Çd‡ba‡Ž×EwØv`aGµ»ÚÃ!z…¤„ú—]ËÏÆ×îRö»At ÂÍăaÖº›±„c¨ö¶ïqf0®Bß#êú•qºV¶Ö¬Mß6¯çå|ºœí1³;(ÃoÓÕ/†ó[ Í/W¥ïqÓÐâ„¢øªœ¸VG‹‡7m=’o ˆÅz‹wÂ,Þ¨öv(aašŠ6Þ«ˆ‹»Ck{’•EpX6@ÃÃ!a†ª½Åº†„)pà—ønùçbÙ¿nh(ÿ¼YÁPÎçqò"¦…óU/S<ÚA ø)› ˆQã`h7 ;0 -PíqPÖ•”ÊÚH÷ƒÀñx>X&Âýó B~Óðë¹öèÃ\B  BÈZŒBRv „àÚ[B %‚J ž‹r±W#?ª_¾Xq ·õe>?ÁÃÙüAŒAúùIØñƒjoù) ÒÆ^¦n_WüœVïËY¨ -îßÜD˜Æ>眾zïæFl[‘èÅlF€ ÆŒÆHÂŒT{ˈr`XÙ¶"Ê3òrqUÎn7¿«%•qS– ã÷u»"${ÊãPðb6#@cFÉtO¨§ìÀAµÇzUII¤°¼e$¶/®¥L¬Ø® f2,ÆýðòüôùéYbÑNj"‰þ¸5¤öö­bu[th6.@à Ã%a† ª½ÅEp"džƒËéÙÑ‹×Ç'©ÍlŠÐBtñÂÅãË+Á•Ù A * ”„(¨öN‰3ÅPD(®òMí(ˆ‘¶ým¦å¿]ñ\œ Ä‚!ÄJØ„jo‹ê´Ð Â/‡§gÇ¡º/BÓV/'.ʪî°ÿá*FwIܘ.¨*lkûáùÉÙÉùA=Cs™ÊN… ” -™¯øJ}z'ÁUÙ A  - „„¨ö‚«sIÁLÛéhÂÁp¸Úõ¦ÓZžMg“þÂU®….¶MNt`.PÁc-@¦{‰?e‚Ǧv–¸§Dj7àPêë½µa›—‹r°œ›ŸŽ¦.? ËY¿Y÷ïô[8µ3à~þ›ožwå/Õí/p:ÌOZSkŸ²àDKåÅV5~½öy0”óytËb•×¦þ‚z1ž/V“Û5Ïü«.8<ûª‚ØUŠQ”°£ ÕiR”hKý’Ií-wéÛ2Éüˆyt5›N‰UHB%‡Õ+‰±Úኰÿ³\,ÇÃÔ© q¨Ø_ÁÿbCP³‰‚±Ó½÷#eF,ª½-#œ€JdÛuùd}¨˜ãÒæø2Â5uáIõ¾© §U³AYâé$ÄN®‚ç³¹‚W0²W ;0®Pí-WuOj(‹\…¥¾×ó8óžnA\b, ©oÞ™ÖÞ46ÆÏ–Õ Ùê.õSl;¡ -nφ -bPÁ°bP%ìÀ BµÇá•Ib¹ô›#ãFµÎ­‰my«UñÄ; >ÍbÀÀ˜aÀ$ìÀ€ÙОꂄ­ç'ü«ÆwA—{Œ±ÝÙtù溜_¹ñ«ÎG]î‰g¸o³fgݲî›àéwljM]?¸Ñ[ù)òØëM'“°ïâU3L;ÏLêi)·­Mö¼œ{A9äzZ‹!Âͦ>˜ê8¤‹Âjý]˜Æoè[­­/þæ{åjêo?û0½s×Õ?›Ÿ®¦š7ƒ~Xlo^ê{ÔFÍ^@Ÿ³§Ëp†«~<í_=ŽþåR93h¼>ÉŽ6Ľæs$Þ ;°€£Úc¾Pš¸^Õ÷Ò« -®N§Õ ‰X]ÌÇb.îÆ=ºêW£µÏƳq˜’<[NÞÔ3ÔÎŒGPÈG7e31Ö€0°cÕŠ0ão|4±æú¥Þ)Ñ^µG·®ë祿Š,¯oÜE+åvì¸JÁÛÙ(A ¥µh"(%ìÀPÚО¬Æ¸ ¼ðâ.“s¾{psSVÃñ ìžoŽb÷.Á€V‚Asl÷&$x:ÌZ“—cD0¡Ô#¨ÖÎ ƒwÕôÃu9Õ)µÞÏí¶òÊ¿z‚s³¯ ˆ]=0x1 ;0rPí±ü⶞ï5" SÃcëK¨É´‡³qéwMÿ8ž/¦³ë[©ã@||vqkÄnÖ… -Ê -ÑY¹(@A…µ` (¤ì@PÀµ‡$Â&’ -æIàMy^Vå,TX1Èçå[?RWán›Óêíj!x5]Vاµþ}— ÄÀ€±±Ý›Rv`` ÚÛ¡‘~ïõA3™_§ˆÓWï ͇áÞšpÇÝo®ž;pÿÜ«;¼z»5 ¸1›‘VC #dÓ LuL… ÒòÀ‡hÇáøÍõx:šõo®>¶HÄÑáb9•õóöBBé]w×Ð"8"i#x. ˆ1#ƒA‘°£ÕÞ¦ ňº\„¼q^þ±t¡oï°!bâËÔÀÊù³£y„üiÔšÑeÙ@A  ˆ„¨öakà~ ©å¬ -Íýñ¬ÿ¶ÆÀZ¾mLîÃLðj63@cFÍv¯µ¤ìÀ˜Aµ·Ìp]?QDfDà ¸«æx:X‚Ôqð&Îö6-ˆbO%{_e“1`,0v`$lhOÍópªˆ¦¶Áð°ÄîÏý*Þß}Ó!Ó=Qú¾Ó=P™îY³ÊvßÿO‡¹bCkªàbV­d‡ÃÕ°*ìîppF»‹Ä”!n¨úˆ[a‰ñ÷g®û:µUóy9¨ŸÌ>ªŸÉ#¥Ú2õ™`òîÎf©•ÃPÁd´û¹s +00Ý‘#¥‰qÿ


à“0ΉuÆG§Ñ¿W}M8á´ú þpŒXK¥÷Q6/f·Å¬9 žUø¸µÖÍaýE1.&‹ƒC®èþIñ¥|R.Êé¤þK2¬_|?Cëè>98TôQ~Hç² îÉ­¸%šSÖftCŸÙ¨W¿¸€Š»Ch¸©ØæùWŠé8©80^Pï-/Ò¥(oya[yYÌ–óE1<ü¥øv:¡ i͆bЬɆ@“ˆƒõ¡ÑÎùV ´Pj+3ÿNŠ43Ô8³­Yûœ+Ï–B¶sQvIkZºNA ¡®[Œ¬!L¶é/BÑöÊc{>ÍU“ÔlX¢ÆJ+˜áݨlD€‘‚øeJcŒëi£UþE‹ +a~ˆã%üOEÄJÌË?þ|SÌ}†äï°€‡å lF¼yÞU¾º÷³ÀÓayÚðš\ ͉º^¾4«^M5¸> Šy¬‡“Åj2lÚÌÂ|ç«åê=¹iç_u!áÙW0Ä®:((FQ"Œ&Ô{¤IQ"• 4¥và‡]ŽIÖ”Ïã«ÙtºH=NÅË}CßVmMLð:"”áVÁb±,‡©SY߀HÛö·}ÿ?ÄQ³‰†±×½Ë&F,ê=ÿ…7†Ë€l»™;¹¨ ˜çÒæøúÑCuÒú°ÓÉm½œ0Ô÷² +-^NAìä*d>›+`ˆq•Å¸JÄq…zo¹ªn[t´å*ìý~·k¥×­Œög`,>pª«¬Qbh\M}½œ 껢¥y m'T!íÙPC *(+U" *Ô{l^™$œÚÀT¸»©ó~¶¶{k”ÞMY¦ 9ÍbÀ@Í0`q`ÀlxO‚¸cD«æy4¶]0ÆögÓåÇëb~åÛ¯ªu¥'žá¡ƒh€ vÖ"sÝK@ðtH:6½¦®nQ¦yÒŠƒãéxv뿯ÛiŸšq5˜—r7¶É¾¤bšs/)hˆ\Rk2bì$âÀB½Ç†ëj’ˆ†bñlñ×fÀ<™6+¹›Î~ñ×?êß®¦wõ‹A?lÓ®TÏ4Õw‘5…{º g¸êÇÓÞ5]ÈÑ?}=gö 5º!%Ùz·v˜Ü á˜Ú›A`bc®c½PŠÄjÁ›jq6ÔRU]ùØ•‹7p_õ'£µ^X*Ã.–óåøc5ù,´{Ýø&IÙÚG3LúVLù0á¿Qw)ˆàÍPlìgýPm©o/Òã{—ñ›¢¹h¿)®oü5*容x@!ÛÙC "¨&†Q" ¤ ïɧÕ&ÄzIóÈnÎ÷nnŠÉ°ÝsÌÑìÁÝ.`€u»`8®{…žËÁ†×äåD½w'šT ¦1> ƒ_&Ó»ëb8ª +iµÚÆÝ®³•õ„äf_=À»z x1‰80rPﱳŜ&š5wpÕ½-W]Bu¥}5+‹æöÚoÊùb:û¼~Ïml~OÎ?Ük§ëµ MÙóA!&+hˆ °&‚B*Ü{("ÌJ¢¸ $𺈼)&Å,ô«¢Èŧ¦¥Ž5Î&ŸV;†WSdÚ½¬5§˜»l0€!ÔÆu/ý§âÀÀ@½·5Âp"esæQ=ƒ_Õˆ³÷·º¹è‡Ãð†ðl–Ÿ|‡îÈÿç²jÑÞìvýÆ·\Ä6âÃr4*ª‡±‡²Òú‘]Œàü…¹l,€!†TÃ"†ê½-Òìms¯åQý,§ªx\¿.½ôµð¾é[!ÆMg5°rñúx^a=Θ²l €!”"ê½Bhâ£hàMkRíïš„!þɬÿ©ÂÀ9¾ž`Ì¢…5mVÊLcw SÌÜ?¥£ÝË,©@0hP÷-4\Æšû(êG½TЀ§0œLKP;Ž>Æ9Þz$¢Øs/Aª«l€!†ÔE!†Â†ûÔ|£Œ(mê9ËWU« ößö'ñ`7ýQjÚ'Ĭ·MûÄœƒÔ´ÏýóÖ9é~¤<–‹ ·©>—uDZÕ¤bÕ° +·?,GϪl~·q59r¯;`‡\vPlŒ°Dh¨ïÀ™1DRÑ`ÆkÌ®¦UçM™g:g¹˜µfe@jF‘ïÛû¢Äq|®°"‚‡J&šJ6™Ï‹Aõ=]£ê™­RªH AM¶s jÍ‚€’ŒZä¡ä÷CØ (~'å!wÄZ›j3ýÿŒ8Ußâþû¾³ý¢Îê¹K¶ë«Åu>r*{Õ‰úRQÈžÚÕA òÿ¼ÔAªendstream endobj -806 0 obj << +838 0 obj << /Type /Page -/Contents 807 0 R -/Resources 805 0 R +/Contents 839 0 R +/Resources 837 0 R /MediaBox [0 0 595.2756 841.8898] -/Parent 659 0 R -/Annots [ 809 0 R 810 0 R 811 0 R 812 0 R 813 0 R 814 0 R 815 0 R 816 0 R 817 0 R 818 0 R 819 0 R 820 0 R 821 0 R 822 0 R 823 0 R 824 0 R 825 0 R 826 0 R 827 0 R 828 0 R 829 0 R 830 0 R 831 0 R 832 0 R 833 0 R 834 0 R 835 0 R 836 0 R 837 0 R 838 0 R 839 0 R 840 0 R 841 0 R 842 0 R 843 0 R 844 0 R 845 0 R 846 0 R 847 0 R 848 0 R 849 0 R 850 0 R 851 0 R 852 0 R 853 0 R 854 0 R 855 0 R 856 0 R 857 0 R 858 0 R 859 0 R 860 0 R 864 0 R 865 0 R ] +/Parent 691 0 R +/Annots [ 841 0 R 842 0 R 843 0 R 844 0 R 845 0 R 846 0 R 847 0 R 848 0 R 849 0 R 850 0 R 851 0 R 852 0 R 853 0 R 854 0 R 855 0 R 856 0 R 857 0 R 858 0 R 859 0 R 860 0 R 861 0 R 862 0 R 863 0 R 864 0 R 865 0 R 866 0 R 867 0 R 868 0 R 869 0 R 870 0 R 874 0 R 875 0 R 876 0 R 877 0 R 878 0 R 879 0 R 880 0 R 881 0 R 882 0 R 883 0 R 884 0 R 885 0 R 886 0 R 887 0 R 888 0 R 889 0 R 890 0 R 891 0 R 892 0 R 893 0 R 894 0 R 895 0 R 896 0 R 897 0 R 898 0 R ] >> endobj -809 0 obj << +841 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [527.6238 758.4766 539.579 767.4329] /Subtype /Link -/A << /S /GoTo /D (subsection.6.2.19) >> ->> endobj -810 0 obj << -/Type /Annot -/Border[0 0 0]/H/I/C[1 0 0] -/Rect [527.6238 746.5215 539.579 755.4777] -/Subtype /Link /A << /S /GoTo /D (subsection.6.2.20) >> >> endobj -811 0 obj << +842 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] -/Rect [527.6238 734.5663 539.579 743.5226] +/Rect [527.6238 746.3946 539.579 755.3509] /Subtype /Link /A << /S /GoTo /D (subsection.6.2.21) >> >> endobj -812 0 obj << +843 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] -/Rect [527.6238 722.6111 539.579 731.5674] +/Rect [527.6238 734.3125 539.579 743.2688] /Subtype /Link /A << /S /GoTo /D (subsection.6.2.22) >> >> endobj -813 0 obj << +844 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] -/Rect [527.6238 710.656 539.579 719.6122] +/Rect [527.6238 722.2305 539.579 731.1868] /Subtype /Link /A << /S /GoTo /D (subsection.6.2.23) >> >> endobj -814 0 obj << +845 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] -/Rect [527.6238 698.8005 539.579 707.6571] +/Rect [527.6238 710.1484 539.579 719.1047] /Subtype /Link /A << /S /GoTo /D (subsection.6.2.24) >> >> endobj -815 0 obj << +846 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] -/Rect [527.6238 686.8453 539.579 695.7019] +/Rect [527.6238 698.0664 539.579 707.0227] /Subtype /Link -/A << /S /GoTo /D (subsubsection.6.2.24.1) >> +/A << /S /GoTo /D (subsection.6.2.25) >> >> endobj -816 0 obj << +847 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] -/Rect [527.6238 674.7905 539.579 683.7467] +/Rect [527.6238 686.084 539.579 694.9406] /Subtype /Link -/A << /S /GoTo /D (subsubsection.6.2.24.2) >> +/A << /S /GoTo /D (subsection.6.2.26) >> >> endobj -817 0 obj << +848 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] -/Rect [527.6238 662.935 539.579 671.941] +/Rect [527.6238 674.002 539.579 682.8586] /Subtype /Link -/A << /S /GoTo /D (subsubsection.6.2.24.3) >> +/A << /S /GoTo /D (subsubsection.6.2.26.1) >> >> endobj -818 0 obj << +849 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] -/Rect [527.6238 650.8801 539.579 659.8364] +/Rect [527.6238 661.8203 539.579 670.7765] /Subtype /Link -/A << /S /GoTo /D (subsubsection.6.2.24.4) >> +/A << /S /GoTo /D (subsubsection.6.2.26.2) >> >> endobj -819 0 obj << +850 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [527.6238 649.7382 539.579 658.6945] +/Subtype /Link +/A << /S /GoTo /D (subsubsection.6.2.26.3) >> +>> endobj +851 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] -/Rect [527.6238 639.0246 539.579 647.8812] +/Rect [527.6238 637.6562 539.579 646.6124] +/Subtype /Link +/A << /S /GoTo /D (subsubsection.6.2.26.4) >> +>> endobj +852 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [527.6238 625.6738 539.579 634.5304] /Subtype /Link /A << /S /GoTo /D (section.6.3) >> >> endobj -820 0 obj << +853 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] -/Rect [527.6238 627.0694 539.579 635.9261] +/Rect [527.6238 613.5917 539.579 622.4483] /Subtype /Link /A << /S /GoTo /D (subsection.6.3.1) >> >> endobj -821 0 obj << +854 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] -/Rect [527.6238 615.1143 539.579 623.9709] +/Rect [527.6238 601.5097 539.579 610.3663] /Subtype /Link /A << /S /GoTo /D (subsubsection.6.3.1.1) >> >> endobj -822 0 obj << +855 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] -/Rect [527.6238 603.0594 539.579 612.0157] +/Rect [527.6238 589.328 539.579 598.2842] /Subtype /Link /A << /S /GoTo /D (subsubsection.6.3.1.2) >> >> endobj -823 0 obj << +856 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] -/Rect [527.6238 591.1043 539.579 600.0606] +/Rect [527.6238 577.2459 539.579 586.2022] /Subtype /Link /A << /S /GoTo /D (subsection.6.3.2) >> >> endobj -824 0 obj << +857 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] -/Rect [527.6238 579.1491 539.579 588.2549] +/Rect [527.6238 565.1639 539.579 574.1201] /Subtype /Link /A << /S /GoTo /D (subsection.6.3.3) >> >> endobj -825 0 obj << +858 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] -/Rect [527.6238 567.1939 539.579 576.2997] +/Rect [527.6238 553.0818 539.579 562.1876] /Subtype /Link /A << /S /GoTo /D (subsection.6.3.4) >> >> endobj -826 0 obj << +859 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] -/Rect [527.6238 555.2388 539.579 564.1951] +/Rect [527.6238 540.9998 539.579 550.1055] /Subtype /Link /A << /S /GoTo /D (subsection.6.3.5) >> >> endobj -827 0 obj << +860 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] -/Rect [527.6238 543.2836 539.579 552.2399] +/Rect [527.6238 528.9177 539.579 538.0235] /Subtype /Link /A << /S /GoTo /D (subsubsection.6.3.5.1) >> >> endobj -828 0 obj << +861 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] -/Rect [527.6238 531.3284 539.579 540.2847] +/Rect [527.6238 516.8357 539.579 525.792] /Subtype /Link /A << /S /GoTo /D (subsubsection.6.3.5.2) >> >> endobj -829 0 obj << +862 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] -/Rect [527.6238 519.3733 539.579 528.3296] +/Rect [527.6238 504.7536 539.579 513.7099] /Subtype /Link /A << /S /GoTo /D (subsubsection.6.3.5.3) >> >> endobj -830 0 obj << +863 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] -/Rect [527.6238 507.4181 539.579 516.3744] +/Rect [527.6238 492.6716 539.579 501.6279] /Subtype /Link /A << /S /GoTo /D (subsection.6.3.6) >> >> endobj -831 0 obj << +864 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] -/Rect [527.6238 495.4629 539.579 504.4192] +/Rect [527.6238 480.5895 539.579 489.5458] /Subtype /Link /A << /S /GoTo /D (subsection.6.3.7) >> >> endobj -832 0 obj << +865 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [527.6238 468.5075 539.579 477.4638] +/Subtype /Link +/A << /S /GoTo /D (section.6.4) >> +>> endobj +866 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [527.6238 456.4254 539.579 465.5312] +/Subtype /Link +/A << /S /GoTo /D (subsubsection.6.4.0.1) >> +>> endobj +867 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [527.6238 444.3434 539.579 453.4491] +/Subtype /Link +/A << /S /GoTo /D (subsection.6.4.1) >> +>> endobj +868 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [527.6238 432.2613 539.579 441.2176] +/Subtype /Link +/A << /S /GoTo /D (subsubsection.6.4.1.1) >> +>> endobj +869 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [527.6238 420.1793 539.579 429.1356] +/Subtype /Link +/A << /S /GoTo /D (subsubsection.6.4.1.2) >> +>> endobj +870 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [527.6238 408.0972 539.579 417.0535] +/Subtype /Link +/A << /S /GoTo /D (subsubsection.6.4.1.3) >> +>> endobj +874 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [527.6238 396.0152 539.579 404.9715] +/Subtype /Link +/A << /S /GoTo /D (subsubsection.6.4.1.4) >> +>> endobj +875 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] -/Rect [527.6238 473.5253 539.579 482.2574] +/Rect [527.6238 373.4431 539.579 382.1752] /Subtype /Link /A << /S /GoTo /D (chapter.7) >> >> endobj -833 0 obj << +876 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] -/Rect [527.6238 461.59 539.579 470.5462] +/Rect [527.6238 361.3809 539.579 370.3372] /Subtype /Link /A << /S /GoTo /D (section.7.1) >> >> endobj -834 0 obj << +877 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] -/Rect [527.6238 449.6348 539.579 458.5911] +/Rect [527.6238 349.2989 539.579 358.2551] /Subtype /Link /A << /S /GoTo /D (section.7.2) >> >> endobj -835 0 obj << +878 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] -/Rect [527.6238 437.6796 539.579 446.6359] +/Rect [527.6238 337.2168 539.579 346.1731] /Subtype /Link /A << /S /GoTo /D (subsection.7.2.1) >> >> endobj -836 0 obj << +879 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] -/Rect [527.6238 425.7245 539.579 434.6807] +/Rect [527.6238 325.1348 539.579 334.091] /Subtype /Link /A << /S /GoTo /D (subsection.7.2.2) >> >> endobj -837 0 obj << +880 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] -/Rect [527.6238 413.7693 539.579 422.7256] +/Rect [527.6238 313.0527 539.579 322.009] /Subtype /Link /A << /S /GoTo /D (section.7.3) >> >> endobj -838 0 obj << +881 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] -/Rect [527.6238 391.8316 539.579 400.5637] +/Rect [527.6238 290.4806 539.579 299.2128] /Subtype /Link /A << /S /GoTo /D (chapter.8) >> >> endobj -839 0 obj << +882 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] -/Rect [527.6238 379.8963 539.579 388.8526] +/Rect [527.6238 278.4184 539.579 287.3747] /Subtype /Link /A << /S /GoTo /D (section.8.1) >> >> endobj -840 0 obj << +883 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] -/Rect [527.6238 367.9411 539.579 376.8974] +/Rect [527.6238 266.3364 539.579 275.2927] /Subtype /Link /A << /S /GoTo /D (subsection.8.1.1) >> >> endobj -841 0 obj << +884 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] -/Rect [527.6238 355.986 539.579 364.9423] +/Rect [527.6238 254.2544 539.579 263.2106] /Subtype /Link /A << /S /GoTo /D (section.8.2) >> >> endobj -842 0 obj << +885 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] -/Rect [527.6238 344.0308 539.579 352.9871] +/Rect [527.6238 242.1723 539.579 251.1286] /Subtype /Link /A << /S /GoTo /D (section.8.3) >> >> endobj -843 0 obj << +886 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] -/Rect [527.6238 322.0931 539.579 330.9498] +/Rect [527.6238 219.6002 539.579 228.3323] /Subtype /Link /A << /S /GoTo /D (appendix.A) >> >> endobj -844 0 obj << +887 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] -/Rect [527.6238 310.1578 539.579 319.2636] +/Rect [527.6238 207.538 539.579 216.4943] /Subtype /Link /A << /S /GoTo /D (section.A.1) >> >> endobj -845 0 obj << +888 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] -/Rect [527.6238 298.2027 539.579 307.3084] +/Rect [527.6238 195.456 539.579 204.4123] /Subtype /Link /A << /S /GoTo /D (subsection.A.1.1) >> >> endobj -846 0 obj << +889 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] -/Rect [527.6238 286.2475 539.579 295.2038] +/Rect [527.6238 183.3739 539.579 192.3302] /Subtype /Link /A << /S /GoTo /D (section.A.2) >> >> endobj -847 0 obj << +890 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] -/Rect [527.6238 274.2923 539.579 283.2486] +/Rect [527.6238 171.2919 539.579 180.2482] /Subtype /Link /A << /S /GoTo /D (subsection.A.2.1) >> >> endobj -848 0 obj << +891 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] -/Rect [527.6238 262.3372 539.579 271.2934] +/Rect [527.6238 159.2098 539.579 168.1661] /Subtype /Link /A << /S /GoTo /D (section.A.3) >> >> endobj -849 0 obj << +892 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] -/Rect [527.6238 250.382 539.579 259.3383] +/Rect [527.6238 147.1278 539.579 156.0841] /Subtype /Link /A << /S /GoTo /D (subsection.A.3.1) >> >> endobj -850 0 obj << +893 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] -/Rect [527.6238 238.4268 539.579 247.3831] +/Rect [522.6425 135.0457 539.579 144.1515] /Subtype /Link /A << /S /GoTo /D (subsection.A.3.2) >> >> endobj -851 0 obj << +894 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] -/Rect [527.6238 226.4717 539.579 235.4279] +/Rect [522.6425 122.9637 539.579 132.0694] /Subtype /Link /A << /S /GoTo /D (subsection.A.3.3) >> >> endobj -852 0 obj << +895 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] -/Rect [527.6238 204.534 539.579 213.2661] +/Rect [522.6425 100.3916 539.579 109.2482] /Subtype /Link /A << /S /GoTo /D (appendix.B) >> >> endobj -853 0 obj << +896 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] -/Rect [527.6238 192.5987 539.579 201.555] +/Rect [522.6425 88.3294 539.579 97.4352] /Subtype /Link /A << /S /GoTo /D (section.B.1) >> >> endobj -854 0 obj << +897 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] -/Rect [522.6425 180.6435 539.579 189.7493] +/Rect [522.6425 76.2474 539.579 85.3531] /Subtype /Link /A << /S /GoTo /D (section.B.2) >> >> endobj -855 0 obj << +898 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] -/Rect [522.6425 168.6883 539.579 177.7941] +/Rect [522.6425 64.1653 539.579 73.2711] /Subtype /Link /A << /S /GoTo /D (section.B.3) >> >> endobj -856 0 obj << +840 0 obj << +/D [838 0 R /XYZ 85.0394 794.5015 null] +>> endobj +837 0 obj << +/Font << /F37 779 0 R /F23 714 0 R /F21 690 0 R /F39 873 0 R >> +/ProcSet [ /PDF /Text ] +>> endobj +901 0 obj << +/Length 618 +/Filter /FlateDecode +>> +stream +xÚí˜MoÓ0Çïù>.?óã÷ç:´!í0ËmÚ¥]AÐL¬$>=v›8FÙ†XUUMëçÕÿŸ\ÛÈDx!3,IbŽ4†µÛJ°M{[aoÃ#žZ5Õé…rŒ€¬´¬¹cÚf̃ðY³º9yóîª9¿j®ëÛæ²:oƨif*†üVÝÜ +¶ +\Vyþ‡/H²m¥£•~ùZ]WïÇ€ÉèÞ5Û +ÊÊL+R%­8«l(ÎPxC±“3Ð5'E'«n·[·|÷yÓý¸ïÖ5×Z@Íÿõ‡&z~”ß0Р¡0ÃãTOt{Ø°ÃÇDÉѧŽS%§ñ£”ˆbÂã€F®HÅô#HÚu{̤îãv½âí§uû¥½ïîjn<ôd‚†9^LPâX"(ÕQÍ”)¤DP1ýH2à$ROÔ/Eæ¸= aŽ”8–J5DÔóe +)TL?$8k}OKª¹'óþÂþ:Z"lÐ`1a‰c‰°TcD;OX¦aÅô#aˆàCÖž0 ì¡[µavÑ¿vÀþnƒ ‹qKK¸¥‚#ÒåüÞ>WHÃrúCÄp´àº_öx„m³îj®P—¸—…j˜öÅP%Ž%¨RYQÊy¨2…L o'â´õ*wAÞdŒ|þuȯ[›p¼PÞË|»Ò §ˆ…-dŒ›ß5ôFIå?Vê‹çendstream +endobj +900 0 obj << +/Type /Page +/Contents 901 0 R +/Resources 899 0 R +/MediaBox [0 0 595.2756 841.8898] +/Parent 691 0 R +/Annots [ 903 0 R 904 0 R 905 0 R 906 0 R 907 0 R 911 0 R 912 0 R ] +>> endobj +903 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] -/Rect [522.6425 156.7332 539.579 165.8389] +/Rect [494.296 758.4766 511.2325 767.5824] /Subtype /Link /A << /S /GoTo /D (section.B.4) >> >> endobj -857 0 obj << +904 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] -/Rect [522.6425 144.778 539.579 153.8838] +/Rect [494.296 746.5215 511.2325 755.6272] /Subtype /Link /A << /S /GoTo /D (section.B.5) >> >> endobj -858 0 obj << +905 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] -/Rect [522.6425 132.8228 539.579 141.9286] +/Rect [494.296 734.666 511.2325 743.672] /Subtype /Link /A << /S /GoTo /D (section.B.6) >> >> endobj -859 0 obj << +906 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] -/Rect [522.6425 120.9673 539.579 129.9734] +/Rect [494.296 722.6111 511.2325 731.7169] /Subtype /Link /A << /S /GoTo /D (section.B.7) >> >> endobj -860 0 obj << +907 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] -/Rect [522.6425 108.9125 539.579 118.0182] +/Rect [494.296 710.656 511.2325 719.7617] /Subtype /Link /A << /S /GoTo /D (section.B.8) >> >> endobj -864 0 obj << +911 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] -/Rect [522.6425 96.9573 539.579 106.0631] +/Rect [494.296 698.7008 511.2325 707.8065] /Subtype /Link /A << /S /GoTo /D (section.B.9) >> >> endobj -865 0 obj << +912 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] -/Rect [522.6425 85.0022 539.579 94.1079] +/Rect [494.296 686.8453 511.2325 695.8514] /Subtype /Link /A << /S /GoTo /D (section.B.10) >> >> endobj -808 0 obj << -/D [806 0 R /XYZ 85.0394 794.5015 null] +902 0 obj << +/D [900 0 R /XYZ 56.6929 794.5015 null] >> endobj -805 0 obj << -/Font << /F37 747 0 R /F23 682 0 R /F21 658 0 R /F39 863 0 R >> +899 0 obj << +/Font << /F37 779 0 R /F23 714 0 R /F41 910 0 R >> /ProcSet [ /PDF /Text ] >> endobj -868 0 obj << -/Length 69 -/Filter /FlateDecode ->> -stream -xÚ3T0BCS3=3K#KsK=SCS…ä\.…t œ;—!T‰©±ž©‰±1ƒEV.­knj©g`fA‚!ÂVŒendstream -endobj -867 0 obj << -/Type /Page -/Contents 868 0 R -/Resources 866 0 R -/MediaBox [0 0 595.2756 841.8898] -/Parent 659 0 R ->> endobj -869 0 obj << -/D [867 0 R /XYZ 56.6929 794.5015 null] ->> endobj -866 0 obj << -/ProcSet [ /PDF ] ->> endobj -872 0 obj << +915 0 obj << /Length 2197 /Filter /FlateDecode >> stream -xÚÝYÝã¶÷_áG-pfù)‘y¼»¦¸ ¸¢Ý òæA+qmádÉÑÇnœ¿¾C)˶|wé-РX`M†äpæ7¿ÚlMá­µ"T¹ÎŒ$Š2µ.ö+ºÞ»¿­XБJ%…€‡…·%4QšgëÍ|‘·«¿|ÏÙšS’¦\­ž¦½ÒL#¤Y?”?'ïvùa°Ý݆+š°»_~Ài’d:cn…-É Õ~‡fèÚr,†ªm‚ºXbRžFí 悹Nûagaiºi¶kì€OïÛ}^58þ˜ïƒÎý±ìÇÿ¦Š¾ÿxÌ ²¤h›¾ê‡_·Oø9Äõûc3ä¿ad[TOÇ Íö»XÅ6C5T(Í’êŽ% Ý$8£;cÄ(Å£Âa§‰;ˆà,ÉñqWÙ.ïî˜NŠ]Uä5J÷yÓ€›3™¼Ðh{ÓÝéd¬Ýæn‘±·%ÊŸÚ¥­í6ªfö‡]ÛU˜yDIûlƒ®?\Ø!oÂJa+Nò>;ó'ªö‡ÚîÁ¹ë†ƒ¡Ã.wáÊT’Ø×õåûüÐã(ºT¼ÏA4‹³›X–Þ¶ïmOÀ-ˆ*ª–ù£ZÕÇ•+° jœ ܳ‡ˆ[·~­v< ¢·›@ÒUãàQKñpR·ùcî­Š˜g’™ò€bI Obž!£”&÷E{°¸‚|¾o‹Ñyn9¸&ifÎ’&om÷ ‚êýiÎRƒÆtù)I¨O‡·>¾ùo§ˆõ¨‘ãG'J2‹&½í /£OüÓãö\•6¼ÏW« ÚGØ lÇ0sÖ+õp®Õ”8(0¶^Q† ÌfNÎ]8òMa|üÒvC5îñÙyüÃý»àp8÷ã\ÙChbð£oŸ†—™)49äŧ|ÐéN/rŒór_5®ùÐvDobô |Ž©ú…M#öÂ1=½ŒÚEÛ…¤;´M¦ûüüÌ)ˆüºDà!þÑmó¦ú}ŠÈɦ“É_Ÿ…RG9n® jBÐœ,³ÙdÍHÊ%¬áƒh±ùùla+°_¥™ê@0ˆF(ažsý®7 °t2ÏRN†, -ôœA)*ìaˆÔqf§†d -D Öñ›Öñ  RyEÃBÛé kÑFdœ(&ø9˜Q÷×±ÂÁÄ S¬4MƒÙ Ï 0Bš1ÉsÞUíæÙæk¿d¹äÄjž°8ùÚ‚§D -}å7A,û+£c”ú…%%”Æ8yÿiU ¢¿^OI¢0SÔƒ©C>”‚e”<÷á!8|V5T•Ëã­Wóø·áÕÓØøú*ÉsUž›vð>¯Jœ‹–D‚A Gcoƒyä¼­ÙŒ6á¹sîqA¢Ú—š…2î5ï’~<¡ÈÔuûUKÑH)´yŠ-X.DdDdYÌZ젉©ŠNƒ¼rÕ?ÀoßNl -OyùœCÖ•“¦Ï@´64* >2óNgÃŒ&ÌõÀçUlN¾.ÝR Ñ#ë›0Hõ§øn*·Ø†¤°ÝàK­{hîôËŒB/-RvÍi¢n0‚b‰ÒHUéŒ -êj»^¬ûh‚*"¸‘K4Ñ·õ3v£®tgihM2îc`ˆŠw.°Ëº >,)…¼â`7!] -> YÉàT&³ëdQ¶®ÂŠ¾QaÁô'ìL,ßN¥ÆØ…òn³%†x¾¶Ù¶˜R~*”» 0QŒåï,cš7¢“²°½Ì»k/™ŒhaÄ•“`j¶ä$¸Ç±)CÎZç°Ÿ-Fèûh†¿•ÐÛz乄Úq\µ”«,ázÉ}Ó’hø,-A?”Ïñ®,»¶õù€x“€sšês¼íl}pœ¶…öW$±­•Éc[ç¬'cŸµ ®9ΉI:bòÒÞš É—1gÔäÔÃÁ6eå*ÿB⥄i¸=£êË.ð’ô€Œ˜¬†;ÚÓXã8€^Ïp‰þ€>NëÌœûcÖî¾qnQI?º}„FÜûÏÅâ§:«Çºj·]~Ø—ªŸ FŸ ä[Xº+ ;ßâø3+äN€€.Û}—Nbª8"ÖBÿÊ â-ÅýÝ%$“!œK}žLØp]£)B£ }ù³£Ý¶ ]å}¼ÙUÍ·uœØAǹ§ŽÓ?¾„΂}Ñk#È&[Ûxð¡Òñ€QÁëkÆ'ó¿sV­þú0}ucRh5¸AiBShèŠýê×ÕÏ¿Ðu¹¢ëV”£Õú(aÆðõ~% ©ÒQR¯îWÿü/gE;fMÂM p…µÂ0‚ú|©M<Ó†¹t¢šM_F]ÀY&$,# I ·ß:…›J¬|Wn\ÐÓëùßfõ´äÌÐ6J—ÓgfÿtÇir.ýp¬¯¡\œ*õŠ‡®²~æþïàÄ ÄàLqÆM8q rcÄé»M±'×fJd›ÜµÂîáÃÎ}âèV -¸×S^ÛIÀ“ÿõ÷7¨¹kûa¦ ¼VÇêvñÍA DŠÑ úþ®ø} °ÝþüUè[o#zvÊosÜ Ñ—žƒ[Ñ¢gžû¾úÍql -ôûR•Ãî6x_ÍÞ?xc _‘ ©!RªôKàe‚PÁ#ĆSYVébÍ;ŒŸÁÏl£WcÄK㡪/ágnü @?yùáÛ¶.oCéÕLÿ¿†Ü)¨aæKH¢ZØâô­†kK"Ãç@4Ûâµ0tiõ -š[}¡[Ày5sÿ,¸áî‹®Œ¥î -ADÆåüg¿«Ÿÿ¸§` Ô ˜¯µ^ü0þô·Š¸_Ñ# §r”\²+·Ç_O+ÅÝþ-Õ«endstream +xÚÝYÝã¶÷_áG-pfù)‘y¼»¦¸ ¸¢Ý òæA+qmádÉÑÇnœ¿¾C)˶|wé-РX`M†äpæ7¿ÚlMá­µ"T¹ÎŒ$Š2µ.ö+ºÞ»¿­XБJ%…€‡…·%4QšgëÍ|‘·«¿|ÏÙšS’¦\­ž¦½ÒL#¤Y?”?'ïvùa°Ý݆+š°»_~Ài’d:cn…-É Õ~‡fèÚr,†ªm‚ºXbRžFí 悹Nûagaiºi¶kì€OïÛ}^58þ˜ïƒÎý±ìÇÿ¦Š¾ÿxÌ ²¤h›¾ê‡_·Oø9Äõûc3ä¿ad[TOÇ Íö»XÅ6C5T(Í’êŽ% Ý$8£;cÄ(Å£Âa§‰;ˆà,ÉñqWÙ.ïî˜NŠ]Uä5J÷yÓ€›3™¼Ðh{ÓÝéd¬Ýæn‘±·%ÊŸÚ¥­í6ªfö‡]ÛU˜yDIûlƒ®?\Ø!oÂJa+Nò>;ó'ªö‡ÚîÁ¹ë†ƒ¡Ã.wáÊT’Ø×õåûüÐã(ºT¼ÏA4‹³›X–Þ¶ïmOÀ-ˆ*ª–ù£ZÕÇ•+° jœ ܳ‡ˆ[·~­v< ¢·›@ÒUãàQKñpR·ùcî­Š˜g’™ò€bI Obž!£”&÷E{°¸‚|¾o‹Ñyn9¸&ifÎ’&om÷ ‚êýiÎRƒÆtù)I¨O‡·>¾ùo§ˆõ¨‘ãG'J2‹&½í /£OüÓãö\•6¼ÏW« ÚGØ lÇ0sÖ+õp®Õ”8(0¶^Q† ÌfNÎ]8òMa|üÒvC5îñÙyüÃý»àp8÷ã\ÙChbð£oŸ†—™)49äŧ|ÐéN/rŒór_5®ùÐvDobô |Ž©ú…M#öÂ1=½ŒÚEÛ…¤;´M¦ûüüÌ)ˆúºDà!þÑmó¦ú}ŠÈɦ“É_Ÿ…RG9n® jBÐœ,Ìl²f$åÖðA´XŠü|¶°دÒLu D#”0Ϲ~W‹›X:™g)'C zΉ ö0Dê8³SC2%³%ëøMëxP‡)€¼¢a!Œíˆô…µh#2Nų̈ûëXá`b†)á Vš¦Áì…ç€!͘ä9ïªv ól󌋵_ ²\ò b5OXœ|íÁS"…¾òƒ› –ýÀ•Ñ1JýÂ’ŒJc‡¼ÿ´*†Ñ_¯§$ѦǨS‡}(#Ê(yîÃCpø¬j¨*—Ç5Z¯æño맱ñôU’1æª<7!íà}^•8-‰‚@ŽÆß óÈy!Z³1lÂsæÜã‚Dµ/5 eþÜkÞ%ý<2xB ©ëö%ª<—¢‘Rhó[ +°\ˆÈˆÈ²˜µÞ=&yÙAS;œy媀߾؞òò9‡¬+'MŸhmhT@|dæΆM˜ëÏ«Øœ|]º¥@¢G4Ö7aêOñÝTn± Ia»Á—Z÷ÐÜé—!…^Z¤ìšÒDÝ`#Ä#¤‘ªÒÔÕv7¼X÷?ÐUDp#—h¢oëgìF]éÎÒКdÜÇÀ6ï\`—u|XR +yÅÁnBº|²,’Á©Lf×É¢k!A\rœ“tÄ䥽4’/cΨɩ‡ƒmÊÊUþ…ÄK Óp{FÕ—]à%é1Y w´§±Æq%¼žáý}œÖ™9÷ǬÝ}ãÜ¢’~tû¸÷Ÿ‹ÅO.&tAÉ·0°0tW@v¾ÅñfVÈ]¶ ú.ÄTqD¬…þ•'"Ä[Šû»KH&C8—ú<™°áþºFS„FúògG»mºÊûx³«šoë8±ƒŽsO§| 5û¢×F †;M¶¶ñàC¥ã£‚×׌Oæç¬ZýõaúêƤÐ*jpƒÒ„¦ÐÐûÕ¯«Ÿ¡ërE×?¬(F«õ > endobj -873 0 obj << -/D [871 0 R /XYZ 85.0394 794.5015 null] +916 0 obj << +/D [914 0 R /XYZ 85.0394 794.5015 null] >> endobj 6 0 obj << -/D [871 0 R /XYZ 85.0394 769.5949 null] +/D [914 0 R /XYZ 85.0394 769.5949 null] >> endobj -874 0 obj << -/D [871 0 R /XYZ 85.0394 582.8476 null] +917 0 obj << +/D [914 0 R /XYZ 85.0394 582.8476 null] >> endobj 10 0 obj << -/D [871 0 R /XYZ 85.0394 512.9824 null] +/D [914 0 R /XYZ 85.0394 512.9824 null] >> endobj -875 0 obj << -/D [871 0 R /XYZ 85.0394 474.7837 null] +918 0 obj << +/D [914 0 R /XYZ 85.0394 474.7837 null] >> endobj 14 0 obj << -/D [871 0 R /XYZ 85.0394 399.5462 null] +/D [914 0 R /XYZ 85.0394 399.5462 null] >> endobj -876 0 obj << -/D [871 0 R /XYZ 85.0394 363.8828 null] +919 0 obj << +/D [914 0 R /XYZ 85.0394 363.8828 null] >> endobj 18 0 obj << -/D [871 0 R /XYZ 85.0394 223.0066 null] +/D [914 0 R /XYZ 85.0394 223.0066 null] >> endobj -880 0 obj << -/D [871 0 R /XYZ 85.0394 190.9009 null] +920 0 obj << +/D [914 0 R /XYZ 85.0394 190.9009 null] >> endobj -881 0 obj << -/D [871 0 R /XYZ 85.0394 170.4169 null] +921 0 obj << +/D [914 0 R /XYZ 85.0394 170.4169 null] >> endobj -882 0 obj << -/D [871 0 R /XYZ 85.0394 158.4617 null] +922 0 obj << +/D [914 0 R /XYZ 85.0394 158.4617 null] >> endobj -870 0 obj << -/Font << /F21 658 0 R /F23 682 0 R /F47 879 0 R /F39 863 0 R /F48 885 0 R >> +913 0 obj << +/Font << /F21 690 0 R /F23 714 0 R /F39 873 0 R /F41 910 0 R /F48 925 0 R >> /ProcSet [ /PDF /Text ] >> endobj -889 0 obj << -/Length 3125 +929 0 obj << +/Length 3126 /Filter /FlateDecode >> stream -xÚÍ]“Û¶ñý~…u3‹~öíÛ3“sb«“iü*0øýt–F‹üÌ2µ8Ü„‘¢Pk7Rݼ¿ùiÜp2k—z%%E t¬<¢RÚ'ª( b S(ªõƒ!övMU5§²ÞÓÏmS?šz(›º§¼»•é’‘½)*kú¦ßve;YÐìè;¸¾ysÿrÜü!ÔþØå¸ÀÉ_¨ÊüõR¤qÄRÕa„@ÿWÉTeA"’ ™þg«bFdQô -h€½t+æ[­O«D« ’ᨯpjÚIdi²Ht ¶$bR×­”rÙLe¾™­dª´^þ|«ÄDEòï‡'|Ã, 2™á9#-ÿw(G wñ"0%‚(‚½½î$¦àö…Qh%öÑ<k»E¼ƒÿÈ&K”JèDa±_—ŸÐ²c!–?—Åðð¼´ˆìO..‡ùYqI» òyWæ›Êü¡²šPñç•Uœ Óèó²èk# -3o­»Ë+ç Ûã71Ö"Z~Xßfji> <Ç>ÑÔÛª¹òýoÇ™wÝtùö£ú_Ÿ•è”Ö?J¢çóÿp¯JdAš€ÈW€¦„J¦¡î*ä©$ ÂTCÈ‹ã$a¢ÏZ“ :„x8‰y1¸„PFczz`·cô{Ùr§ŽûüÀ£ïŸúÁ®Ó{5fæ!,݉ÌÂITMõ²=vmÓóá;µQeñ.eÝyU¹È #y]ÐvÇö£1íåa¼ŽÃ/@ÈÊ7¦ûh*óD#oêÁtµ³i¤C^XYÌB¢IeѲovÃél¹€Ñ‚áæ{óâv¥EÂtÁð‰§7foÙAð‰ö Õ¥áÔ¦ˆbvǺÈQ”Û¼zà -Ë~€Ìá8XWèE>䛼7ãêìa á~ ÐizÚ®¬wMwp¦ð“fy»ò ¿%µbÞìl ~ÉåCÓ4^c=VÔˆú#!åEÁÇ÷…l -€ÇrkëÑt}nS@FYѨ]؇ñü íYŸ÷j@û(ÚÀæ¸3ŽÈ{lØN&ü µm¶ùo0.ƒØŠÔ.û¶*AÿÖÚ¢eÕ4 :¶ôKÖЗӷÈ\[¹|"4ZqÊÊ­eÍrH…î=CÙ,ͦ™yìPk/Z2rUB êžlÆù‚Î;=Ði½© ææ·£éJ« @¡ëWµfº­…À÷À¦ä¡µ¨,‹æ¶S[“×ö°µì!| +xÚÍ]“Û¶ñý~…u3ƒ~öíÛ3“sj«“iòv%eœˆåwßßý´~õŽæ%oùæ~ýîíË¿·~óöþö×õ7¯Ö#ÕSΤÐHòo7~‹üáF:K£Å ~ˆ@f™ZnÂHQ¨µ©nÞßümÜp2k—z%%E t¬<¢RÚ'ª( b S(ªõƒ!övMU5§²ÞÓÏmS?šz(›º§¼»•é’‘½)*kú¦ßve;YÐìè;¸¾}sÿrÜü!ÔþØå¸ÀÉ_¨ÊüåR¤qÄRÕa„@ÿWÉTeA"’ ™þg«bFdQô +h€½t+æ[­O«D« ’áÙ´³‰¾’0ÈÒd‘èlIĤ®[)å²™Ê|2[ÉTi½üùV‰‰Š.äßOù†Yd2ÃsFZþ;îPŽîâÿD`JQ{{-ÜILÁí £ÐJì£y:5Öv‹yÿæu('K”JèDa±_—ŸÐ²c!–?—Åðð¼´ˆìO..‡ùYqI» òyWæ›Êü¡²šPñç•Uœ Óèó²èk# +3o­»Ë+ç Ûã71Ö"Z~Xßfji> <Ç>ÑÔÛª¹òýoÇ™wÝtùö£ú_Ÿ•è”Ö?J¢çóÿp¯JdAš€ÈW€¦„J¦¡î*ä©$ ÂTCÈ‹ã$a¢ÏZ“ :„x8‰y1¸„PFczz`·cô{Ùr§ŽûüÀ£ïŸúÁ®Ó{5fæ!,݉ÌÂITMõ²=vmÓóá;µQeñ.eÝyU¹È #y]ÐvÇö£1íåa¼ŽÃ/@ÈÊ·¦ûh*óD#oêÁtµ³i¤C^XYÌB¢IeѲovÃél¹€Ñ‚áæ{óâv¥EÂtÁð‰§7foÙAð‰ö Õ¥áÔ¦ˆbvǺÈQ”Û¼zà +Ë~€Ìá8XWèE>䛼7ãêìa á~ ÐizÚ®¬wMwp¦ð“fy»ò ¿%µbÞìl ~ÉåCÓ4^c=VÔˆú!åEÁÇ÷…l +€ÇrkëÑt}nS@FYѨ]؇ñü íYŸ÷j@û(ÚÀæ¸3ŽÈ{lØN&ü µm¶ùo0.ƒØŠÔ.û®*AÿÖÚ¢eÕ4 :¶ôKÖЗӷÈ\[¹|"4ZqÊÊ­eÍrH…î=CÙ,ͦ™yìPk/Z2rUB êžlÆù‚Î;=Ði½© ææ·£éJ« @¡ëWµfº­…À÷À¦ä¡µ¨,‹æ¶S[“×ö°µì!| ‘(¶ ÕVx ›–ÎC™k'HX-hÊ€®V±ŠèÊá$yI„2>zæäpd¼ŒõlGH™ % R© IRuV|uêŒOÜ!o‘©‰¼=»ÉEçÝf›²öòaZH·—×µ®T˜‘Føp±Ê¹Xë"û A\†ó¯uºZÆì´LÎÞ¯ Ü¿ƒCµW1ÑëZŒkf¬dÝð×ö.!}ÓQÆœL,¢×ÏË ŽB'«á!ÿl˜@Q»Ïëòww|΄1G¡3ùùvË•‘õ!–µ†¾4NÄ”Bb¶55Q{N>fÀ˜rtœ‡²ÆK³œ}l h€pãB‘-_åÖ“ÀTÝ晜ÅÑ‹†žIëîlÄÂCv/›øª„JÓ£¯mM‡ÅŽ lÛÖZe¶â×cú Å¬ Õ+Ö4a“ XQБä5|ÔíC2:Íñ¢Ü!;­õ–OÞ˜ád°>C$_œ E I¾Ò“”×qHHS9kí=³¡­-¡:½Åø—êw½ypv»ï¸)ü®óк7‹æØWçöhFiBº@:yÑáFBÛ”î­Çµ: -S™ýä-ç깇b뤈;=Ÿµmê®c?Ý*؇ñù »”åþèmÓ+ô‚¥ÿ±%:W€Ï$üE‰.ùȨ¾Ì\Ô>‘Zø!çC°z¬ÌÀÏ9ó.8Ló3.ˆ¬ã2ÜÍÓ©ÏÀ}W¤#›Ù¥ô´¹Ü¹g«"×Z`ä1RãË O:0‘ÓàÖt#£nÁß“zí6§š»Æ¸M9ÝšŸ4‘f„ï~[ÓòF¤¿gþÍHGþoÇ‹‰ÅÈ¿ö_Îÿ‰•‚NSõŒ;L±C¤G¢Péáî_•®)ÿå¹€Hendstream +S™ýä-ç깇b뤈;=Ÿµmê®c?Ý*؇ñù »”åþèmÓ+ô‚¥ÿ±%:W€Ï$üE‰.ùȨ¾Ì\Ô>‘Zø!çC°z¬ÌÀÏ9ó.8Ló3.ˆ¬ã2ÜÍÓ©ÏÀ}W¤#›Ù¥ô´¹Ü¹g«"×Z`ä1RãË O:0‘ÓàÖt#£nÁß“zí6§š»Æ¸M9ÝšŸ4‘f„ï~[ÓòF¤¿gþÍHGþoÇ‹‰ÅÈ¿ö_Îÿ‰•‚NSõŒ;L±C¤G¢Péáî_•®)ÿ!€endstream endobj -888 0 obj << +928 0 obj << /Type /Page -/Contents 889 0 R -/Resources 887 0 R +/Contents 929 0 R +/Resources 927 0 R /MediaBox [0 0 595.2756 841.8898] -/Parent 886 0 R -/Annots [ 896 0 R 897 0 R ] +/Parent 926 0 R +/Annots [ 936 0 R 937 0 R ] >> endobj -896 0 obj << +936 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [272.8897 210.0781 329.1084 222.1378] /Subtype /Link /A << /S /GoTo /D (types_of_resource_records_and_when_to_use_them) >> >> endobj -897 0 obj << +937 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [190.6691 182.1322 249.6573 191.5418] /Subtype /Link /A << /S /GoTo /D (rfcs) >> >> endobj -890 0 obj << -/D [888 0 R /XYZ 56.6929 794.5015 null] +930 0 obj << +/D [928 0 R /XYZ 56.6929 794.5015 null] >> endobj -891 0 obj << -/D [888 0 R /XYZ 56.6929 756.8229 null] +931 0 obj << +/D [928 0 R /XYZ 56.6929 756.8229 null] >> endobj -892 0 obj << -/D [888 0 R /XYZ 56.6929 744.8677 null] +932 0 obj << +/D [928 0 R /XYZ 56.6929 744.8677 null] >> endobj 22 0 obj << -/D [888 0 R /XYZ 56.6929 649.0335 null] +/D [928 0 R /XYZ 56.6929 649.0335 null] >> endobj -893 0 obj << -/D [888 0 R /XYZ 56.6929 609.5205 null] +933 0 obj << +/D [928 0 R /XYZ 56.6929 609.5205 null] >> endobj 26 0 obj << -/D [888 0 R /XYZ 56.6929 551.1302 null] +/D [928 0 R /XYZ 56.6929 551.1302 null] >> endobj -894 0 obj << -/D [888 0 R /XYZ 56.6929 525.7505 null] +934 0 obj << +/D [928 0 R /XYZ 56.6929 525.7505 null] >> endobj 30 0 obj << -/D [888 0 R /XYZ 56.6929 422.4834 null] +/D [928 0 R /XYZ 56.6929 422.4834 null] >> endobj -895 0 obj << -/D [888 0 R /XYZ 56.6929 395.8284 null] +935 0 obj << +/D [928 0 R /XYZ 56.6929 395.8284 null] >> endobj 34 0 obj << -/D [888 0 R /XYZ 56.6929 166.2827 null] +/D [928 0 R /XYZ 56.6929 166.2827 null] >> endobj -898 0 obj << -/D [888 0 R /XYZ 56.6929 138.253 null] +938 0 obj << +/D [928 0 R /XYZ 56.6929 138.253 null] >> endobj -887 0 obj << -/Font << /F37 747 0 R /F23 682 0 R /F47 879 0 R /F39 863 0 R /F21 658 0 R >> +927 0 obj << +/Font << /F37 779 0 R /F23 714 0 R /F39 873 0 R /F41 910 0 R /F21 690 0 R >> /ProcSet [ /PDF /Text ] >> endobj -903 0 obj << -/Length 3414 -/Filter /FlateDecode ->> -stream -xÚ¥ZKsã6¾ûWè¹jÍàAäÑÉÌlf«ÆÉŽ•ÚJ%9Pm±L‰ŠHÙq~ýv£ %Á3›ÚÒ` øÉYa2¡Ë|æÊ<3BšÙj{%fÐ÷Ï+Écn ›é¨ïWß~ÐnVf¥Uv¶x˜ÌUd¢(äl±þuþý·?-Þ¾¾QFÌev}c¬˜¼[|þñÝÏß/>þxw}#¥uØ—sïâ‡÷4üÝŸn?ÞQûîöSï¹_¼ÿDíß„ïîîá!¯_üëêý"r=Ý™Yþãê×ßÅl üוÈtY˜Ù ¼ˆL–¥šm¯r£3“k(íÕýÕ¿ã„“^ÿiJRF™)”KˆJ锨L™Y ](ª—M³Ú\ßh+çÕáZó_Ä|]·õc5Ôkê:zvæ>Ј¿º]݃ôl®ç·'5ÝŽFï»f7PWÓi[žÂ¤ËWžtÇ‹vÔ1+ Þo?äÓó֮Ȥ³%lÙ¿»§/hüª;¬{úèdçy™)ãÓ0w°;»É•ËrÛhEV£ü°=Ëw€ÇŽûý5YhØì7ݱ]S{YÓs[ «Mˆ¯ô¬ÿ86ÏU§CÎñ9Ç'pï‰BÇQ]Çäîá¬{rZÕÌïMÀžÊ,:÷{ú€V*ôCµ[ù i1_u»¾Y×¾ÓÁ€¥•!J©³DÅR¬ÿ¬¶û¶ÎVÝ6!që²²ŠÇ®»m…RÇ•ƒì`f·j뺧Ž]µ¥¦™÷G’Ï«>ʼn…v jN³oº~ȪªÊKtªÚÀaª½§Ç*x¶uÕs¿KÁ¶ÑOuÊ-~Çf ->øDÄ)Ày•ZNŽ/£øLeð~È¿QtœOpÈëj¨¨EçÄ#é˜,¬`ÎÊ9ntáæ‹ëRÍÑO8Xð„òuÇ ‰¢¤tm}¨|Bd®@ *4‚I îêá¥;<õ¡jÚ#GCè‰ c?ÐH¯4nã5ϯôÒQ£ã‰c†é©,é›RM•…#$΃B2Ü?Ô§ù"³Ü'ýsÝïï(áqór·[|+ÎðÊÔÏûRÁ]Cñüâ3ttý =FÜÞúÊ…ï_úxÉÏÏ JÓŠqf–³ç–ºöÕê))ªz@¸4ºW@áüù÷1Ý á•iQ ùÜ È@}!´úº^‚ã'T¯:Ø%F8<ŽŽFû8r躖©móTG˜˜]2ÏTacŽÚ<¦¬©È$˜dô Fœ—| 䎖Urˆ÷J qÜjˇÇ5>O«5aüÍôƒËjÍå¼ÈÁ}½ºá¢…†ôëLU#FêLg2»(OI­2ˆô‹Ynr\È%ëIqÔÍtØ%‡—³±Œd–7¸ÑLùÌRC²ªÁ¿DtF Ÿ¡žñ“@¸rò‰Â‰¯â2ÅÎ]çT°ûeSGp é1löªÛ¿R·tœ Ãl} 1H: -n±=*‚«wzŒÐx¢KìÏñ¸‹¨i{ק¸ïp·o‰üw ‘vHŠ+kz¾­W›jw” {ðÆìጠb3p -ÍÈ)´c‘Â|Fææ¡f63 -O=°& wœWðdcZ*…— ™¤µùiÙȸýd‰ƒ6™Ì]Ь.dJÐæ &õÅYs™©MÔ>²W˜S·ùñMš fHÁWUOA„0›î¥žèº’¬\ÒŒŒÀ'QVžþJDJK%ÅÚ¾¶Ži<(j Ð|1h d^+C§“b•Õç¤Ó‰#OìYßÈ»‡´tU ÙëWˆ›‰÷¸8J‰܇)Ëxhûš]f¤ËŠÜéÒù¤ƒô=ô+d&hVÑ*0àL„·c|¥ó·tVZ™ ‘‡ôÒ‹‚„Xô9äE/ε9`ãi×½ì8PO¤0™*Ý8 Ó:ƒ¹†Ó‰á;¯IÁ–ÿ;_žP*Ýcá1»F8-ÎëÖ ˆZÛ âh_7 2Õ7§Ç`ÈQHáö-À×XL×4@ßÓ„«ºç‚Lpú>Lq)U˜Âœ ªï’ÎÉÀ¹Ø\ŽÎÂØòÜYèPˆÂ¹ØÉ"+ã¥H)Çꫲ§>1,L#}înºá;ªõº“pÛ…P×¹èáü #cI‘³yÃx3³sÇ'Åp‚®ï›¥ÇÇetøAôÕâ!ž"vyFÀ‡4êã. Á¹ˆùK¸9⬤âTe´Ò˜Pù«)ªš¡¯[Τ!‹çF2ǽýf&Ó—¼n³CØycM^ -fD -_tÀ€ÌvØüM„ù¹…S &cÃQðføˆ‘€:úMÏ£ÎÈLÒ,ߣDƒIDOUtèðõ)xúdĸË+¼qPPdSœÜ'VðúTk„ǾŽs&Îûò’P9i74ÃqàL-e¢…ËŒÊcu}¼ŸM£—ŒW/>Ÿf˜({’¬NŒûóµ`ÅѼr_Égí(h?˜¬I"ÓR7!¤™ÓcUMNc«F'mÒu´Ë~Û~!äµN†ŠáÐíip qEò¢À¢Ìò¯Dea‚»ªöõŸéûÇs£‰ìm¡j+¹ÿâk+G¢Ó•–Õ^TD‹ß%&ú†;as7´/ÿê‹2ð> +stream +xÚ¥ZKsã6¾ûWè¹jÍàAäÑÉÌlf«ÆÉŽ•ÚJ%9Pm±L‰ŠHÙq~ýv£ %Á3›ÚÒ` øÉYa2¡Ë|æÊ<3BšÙj{%fÐ÷Ï+Écn ›é¨ïWß~ÐnVf¥Uv¶x˜ÌUd¢(äl±þuþý·?-Þ¾¾QFÌev}c¬˜¼[|þñÝÏß/>þxw}#¥uØ—sïâ‡÷4üÝŸn?ÞQûîöSï¹_¼ÿDíß„ïîîá!¯_üëêý"r=Ý™Yþãê×ßÅl üוÈtY˜Ù ¼ˆL–¥šm¯r£3“k(íÕýÕ¿ã„“^ÿiJRF™)”KˆJ锨L™Y ](ª—M³Ú\ßh+çÕáZó_Ä|]·õc5Ôkê:zvæ>Ј¿º]݃ôl®ç·'5ÝŽFï»f7PWÓi[žÂ¤ËWžtÇ‹vÔ1+ ^8ïr² íŠL:[ÂÖ‘ý»{ú‚ƯºÃº§Nvž—™2Îñ7 s[Á±³›\¹,×¹Vd¥1ÊÛ³$ ÔBƒöŸÐ#.ó“‘㇄ýÙ'À¡9Y{ÉßLa\2ŒËÆ¡‰fG­¾><ׇ~Ž‰¼‡/(Ã(a="…`ï<¨AÏ@¼2±ŸUÏ¥.3a­=EŠ„…–hGAÙüYäÁœ•^jˆK^®¾TY—óC}Ø6»ªM,¦s8YaO6•q±žI›Šw¶ëËY› Œ²?.ioIÿä2zõ5SÇOÙDÄVÊÓò2ÖΫ¯¶#â"i·¦FÍsBsì·`«z?Ž‡£í8»W鸎y¶5ðºß“t»¶{äi + ¢â¥ 486Có\\ž(ÙÓ *'Ø`||$Ý㤣@òkw$)\µ&òçß÷Ô‚(L{Cʱ™ÑK„{ OÙåÑ‹E pàg`6Ž;ð’è:×€4Î"ÈÆÇ8@Yƒ67¿ ¡VÇvHÙ ÆÇåвº}³Júí{ -Äü»wï¨Eë÷®ÚÖ[¸ Òoà<Ãã;[9´ÈʱÅ"µ7ìX×pºÔ܈ÓS¸O‚gÚÓ2´é1Ì1„ÞðÛª<¼ ?çÇJûïÛêÙU­WmuÞH ÇëÙ7ã~]l/¸³5x‡ÝCÊ/ª¬ˆ&ˆçÑò¢ý¾^5¯´žß„WAê‰D¶VÜ›+çÿÙÔ;¢³ÆYMžˆÒw[ž5À*.Ð ]Jpä./‹3{Ej,®º§÷—¦mIµ0HèˆèÑÞ+z  +&‘|ø D`ñ‚ZÈà߆Zm,oyˆY, þóÊ÷Ê]ý³>a&2k<³ÍŠ9ç†ÄGU噕¹:÷¨ Ý+J*¦Á/«ñ/gQ¸¨k¹€\ÇŽ)˜½ ˜·G»ÍP1ì`NÞ SCG׿Øó0aÄí­¯\øþ¥—üüÜ 4­gf9{n©k_­ž’¢ª„K£KpdΟÙ-Á^™Ö’ÏÝ@€ ÔB[ ¯ë%8~Bè𪃠Pb„óÇãè8`ô±#‡®k™Ú6Ou„‰IÐ%óL6æ¨ÍcÊšŠL‚IFbÄyÉÇ@îX`Y%‡x¯”Ç­¶ÜyxœQãó´ZÆßL?¸¬Ö\΋Ü׫.ZhH¿ÎT5b¤Ît&³‹ò”Ô*ƒH¿˜å&Ç…\²žGÝL‡]rx9ËHf qƒÍ”Ï,5$«üKDg`”ðyê?ù„+'Ÿ(œø*.SüáÜpN@»_6uôa—Ãh¯ºý+uûHǹ0ÌЃ¤£àûУ"¸z0¡Ç'ºÄþ»ˆš¶gp}ŠûNwû–XÀ—i‡ÄƒvîrŸÇ”TdS¤{ þ+Ágš§Rg…• –ÎÓ%•ÙX¨À€ kXêâY +p‘æPj¶]åK]¼´ç‡3õBypÀ&؈\û`‹æ€¹‰";$×ë†ê`Ð^²¥±YžËòÔ\6Çmå F“Pà¹'ÕØT{îx¬wࣸ²¦çÛzµ©vqW@™°oÌÎH± 6§ÐŒœB;V)|ÀgdÞh.jf3£ðÔkzÇyO6¦¡RxyÀIZ›Ÿ–|ÛO–8h“ÉÜÍê’A¦1aÎ`R_œ5—™‘ÚDýá#+y…9u›ߤ b†|Uõ@³é^ꉮ+ÉÊ%ÍÈ|eåé¯D¤´TR¬ík á(ƃ¢ÆÍ€Bæå±2t:)VY}N:8òÄžõ ±{HKWå±½~…x°Y‘x{€£”xÁ}˜²Œ‡¶¯Ùe&AÚ¹¬È O@Z1HßS@ÿ·Bf‚f­ÎDx;ÆW:Kg¥•™yHÿ(½H€ 8@ˆEO@C^ôâ\›6žvÝËŽõTÑH +“©Ò3:­Ó8˜k8¾óšlùø¿óå ¥BÐ=&óرk„Óâ¼nÍ€¨µ Žöu“ S=qsz †€\…nß| €ÅtMô=M¸ª{^!ȧï×¢Q%à)Ì €àà¢úþ!éœ œ‹Íåè,Œ-Ï……(œ‹,²2^ +”r¬¾*{êÃÂ4Òçাc¡Z¯; ·]u‹ο0b0–9›7Œ÷13;w|rQ 'èú¾Yzlq\QF‡¤A_ )â)b—×i|H£>î’àœ‹˜¿„›#ÎJ*NUF+ •¿šâ ªúºåL²xnô'sLÑÛof2ýqÉë6;„7Öé¥`F¤ðE|Èl‡ÍßD˜ŸûPˆ0b26o† ¨£ßô<ê €Ì$Íòý1J4˜DôTE‡_Ÿ‚§OFŒ»¼ÂE6ÅÉ}b`¯OµFxìë8gâ¼// •ó—vC3ÎÔR&Z¸Ì¨> endobj -906 0 obj << +946 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [519.8432 463.1122 539.579 475.1718] /Subtype /Link /A << /S /GoTo /D (diagnostic_tools) >> >> endobj -907 0 obj << +947 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [84.0431 451.8246 133.308 463.2167] /Subtype /Link /A << /S /GoTo /D (diagnostic_tools) >> >> endobj -904 0 obj << -/D [902 0 R /XYZ 85.0394 794.5015 null] +944 0 obj << +/D [942 0 R /XYZ 85.0394 794.5015 null] >> endobj 38 0 obj << -/D [902 0 R /XYZ 85.0394 570.5252 null] +/D [942 0 R /XYZ 85.0394 570.5252 null] >> endobj -905 0 obj << -/D [902 0 R /XYZ 85.0394 541.3751 null] +945 0 obj << +/D [942 0 R /XYZ 85.0394 541.3751 null] >> endobj 42 0 obj << -/D [902 0 R /XYZ 85.0394 434.1868 null] +/D [942 0 R /XYZ 85.0394 434.1868 null] >> endobj -908 0 obj << -/D [902 0 R /XYZ 85.0394 406.5769 null] +948 0 obj << +/D [942 0 R /XYZ 85.0394 406.5769 null] >> endobj 46 0 obj << -/D [902 0 R /XYZ 85.0394 301.1559 null] +/D [942 0 R /XYZ 85.0394 301.1559 null] >> endobj -909 0 obj << -/D [902 0 R /XYZ 85.0394 276.6843 null] +949 0 obj << +/D [942 0 R /XYZ 85.0394 276.6843 null] >> endobj 50 0 obj << -/D [902 0 R /XYZ 85.0394 200.1512 null] +/D [942 0 R /XYZ 85.0394 200.1512 null] >> endobj -910 0 obj << -/D [902 0 R /XYZ 85.0394 175.6796 null] +950 0 obj << +/D [942 0 R /XYZ 85.0394 175.6796 null] >> endobj -901 0 obj << -/Font << /F37 747 0 R /F23 682 0 R /F47 879 0 R /F39 863 0 R /F21 658 0 R >> +941 0 obj << +/Font << /F37 779 0 R /F23 714 0 R /F39 873 0 R /F41 910 0 R /F21 690 0 R >> /ProcSet [ /PDF /Text ] >> endobj -914 0 obj << +954 0 obj << /Length 2458 /Filter /FlateDecode >> stream xڥ˒ã¶ñ>_¡[4Ušø¬œÖÞuv\ÞÙdG9¤¼>@$4b-²Ž¢|}ºÑ ’’8Ž«R:h4~7$V!üÄ*N‚$—ù*Í£ E¼*š»põk»Œóà‘æX?lî¾ÿI¥«<È™¬6»­,³L¬6å¯kDÁ=P×›îd®ßþôîñ‰ÆOï>1ôù_Ï›Ÿhü5ŒÃ÷OÏð÷B$i¸þñ㻿o>|¡uÁ$Ÿ6_>¿ÿç›ÇÏO÷¿m~¾û°¹žßL„ -Yþýî×ßÂU üù. TžÅ«LÂ@ä¹\5wQ¬‚8RÊCê»ç»Œg«n뢤DH•ÈQIµ$ª8K(ªwp9®‹®ý†òe8j[u-O{s¼ÙÚÐÔîyp8V>žiÒèÞš÷æøêÇ•íM½ãqO_ÍhÖèÚîö0^·³†y væHƒ’Yé˜ Û <á¯RFûª,a3(¤z ò8–îªÌ6"z]_ô«âhý¹5´<ô<ØuÈ_ƒ‡·[ H‹1Ê!$2M"è(²Ùž­ÙWmI0M <€n}Òu½t#ívÄN5,¨nÔ€‡Vok;‘Ũé¦ڪЖÊŠ¶¶>äT9åÄ^å0èÛW%ONݱ.d,L¬FŽvÈŸŠ!ÂdôÃœ) Á—t7|aÔ Ózvêï™ØÜ\–Œ‚<‘£µq¬d[DßÕd6©«íQ+ÓÓôà0ºWà·$ÈöLߦë-ºƒAÍ9~`ÚŸA#Û¯5‹Ð±̓L³@dRoÈRo‡í-OKw‰ã ’Rð¾ï`S®ÖÑíÈÝkëG†ÙÕ£.aÒvÖ™ÀƒR*HÂH]šB¡¬k0 nG_¸$DC‡Læ=€A¹D<ŒW&ƒfI¦g³ßžGB ¸÷«¹†ëúÛxÚ•aárwŇì¾;V—ÆMAÜ‚~^/)HÜ‹õ±G'i<¶DJ”d&¼ÈR wls÷€¯¦Åº+tM– €cü¨ã/åÆÀ½™ÓžIh<Áݨb"àɺÞ1ŸÏC±_ô\²þñð˜ƒ:(8»a¿Ö F˜É K2ŶÄ"Ž= -ëÖòT„ -‚>a·£ßÑÉå£-}ùÞý©àÓA"U¾x¬Û\wÝ·á°dý)^Üï¤`êðIxåº2­í6ð0 -¢,‚Ì&Ò W2%ÿ¿Ïåô£’l]5ÞÇ rϸn &™òšAÜÕs¨q; -G ·{¦Â -jÛÓ -ú.Xêïè÷/Ž'·Ÿ+`cÚ¸˜‰F¿r¤rrÙ(œóíl –(ÊG¡ã™¼ ¡cp€IÕZÈ/– ?r鼿3ÎA"Á6 wÕ«€½0UohN`K½UnP*yí"¯ Æ“2çâoÒ-ÆAžÇÙ•ãÌó›¯0ÕõÞgúsÛµç¦z†€â U07'*fÒumÚªERRaò*Y+ Nûª`,M%Ü’`>…­™#Y]µ†Qª–¾Ö3À–ˆ»èüñ„IP0a×…ÑT1¥\1e¨pKFå‚Ç‚ÍmÏW)}sÇëªgä^8þeôi¬‰7›_¨&&@(Mí£SßwEfW^× F<òAspƒÂÌ¡^vS)q‘ý!Ï 1«è¡°àZâ§îxÒÇeó?놯d" ÅÜd&U˜ø€˜ÌBqº.;ç–¸ÞYôV¨2¨HJf9&,Ô««Cm,Ïn¢d„ÆT"c¦ù”Ñt‡ñY)Ÿn—ªì|ÒhŠ¯(›¥TRáX¼txs¤Š&Ž_,2 €aOù°€ßCåN¨RÁÑŒ-''÷µûÝ™&;2ɆȺX÷4öáéu|<ÐÀ2–I²’pâ”äRC"!$¤Ée¡Àšƒ,üÝTâv­¯f:ˆY9¬û·3­ˆò@¨\]Jv1ZAš•ùá8‘‰, "%¤<™<>†)02p°e@׺ALzAŒnŽO\8¿d†Ù.“”""“ÓóM¤@ÆÁäp‡#H5J:GC­°Vvø=}Í¿÷zè­'ãÙÓíRõ¦Ûþä”QeƒJßuC[bæìÂþ„7±ŒÆw>TX -iâ;.Pw…°s7¨ì@Va$ê÷´DF…Þ˜óY€GZF£éKõê‰÷•]ÌÝÎ\‰)ZˆÂÒì²ÖEC•(_=H y rZ~DŠ­áefkŠ(Å6Ýá’P£0-$æçÔ —‰µWìDh¢‰‰vh¶d¹×"oèB­#®bê <‰ &dg°¬[Ìx†ÙeÇêÞKÔØá¹}¾#Elr|¨¶uÏ«]|3–ϲ{ŠÃËÞ ¡ýQcLÖÇÂJÍý’<_±Z0F~tmŒ0Öºå’ñ+‹áE%\!¥yNb<[:·;_6I ÁÔ~Lô¥ÊO½U>Nšš÷ÿþÂÁÌ· ®CO8«Þ6åÔp…õ êâêàŸ¾tµùÓ]{®x|zO#ßzͺŸ4dq#°jà Ý*à MïD7ÃE­SzHJgoO0¦J tžþ ”b„[@X¬õ«¹ÚÀiçfG»XGM ƒ»µÙ³–K9*œæÞØ] õõì·FW5ìÇîd¦ÌI蓹õȹäW9œ6´6¬=M»Ã:·Þ¾ËÆ%Ò ŽÛªà 9=lá»~Ý[½µUÌŸR®åXw/c|ÏpÛA¡”Ä‹I¥EÆ©#Í}¥ ]¾êÖê4‚¸@’bÿ–A€aØÞ44êÚË×ëWw/ãbmž»X›…ÎÓ—bgëŸfNÎF“kÏ_’IJF³Y®ìB©ü»ÑÅwöB³i–§¾Ês—`3„£ØÍ’QVäº=MnºOX,«C6¦ˆU¤Ì.ãíÔSѦÈ/1•ÞVueÏ$SBCÅCL ÚC aå.§DãZFÎàK)I]Ù/€œ_Ñ1|žóç«£Ig8ºÐÙ‚v¯Ë÷<šé-W”Iòé] @ì®wz]ª+chft¶ýð[ -ä4 Õ’Bá nUàhjUÔWäÎÜ2÷t!8ŽŸ -e*Ѳ€Ç,EJ¡¼Mq 9jÕäå/œÆGi²5—Žøy©Ö…¯¿«vzOÖSo9¯ÞøoÒþ!²ðOH8&ºÿû—éï§( T–Éå¿TðA8Ê€3åRjxùÿƒæ–õÿ÷Å:êendstream +Yþýî×ßÂU üù. TžÅ«LÂ@ä¹\5wQ¬‚8RÊCê»ç»Œg«n뢤DH•ÈQIµ$ª8K(ªwp9®‹®ý†òe8j[u-O{s¼ÙÚÐÔîyp8V>žiÒèÞš÷æøêÇ•íM½ãqO_ÍhÖèÚîö0^·³†y væHƒ’Yé˜ Û <á¯RFûª,a3(¤z ò8–îªÌ6"z]_ô«âhý¹5´<ô<ØuÈ_ƒ‡·[ H‹1Ê!$2M"è(²Ùž­ÙWmI0M <€n}Òu½t#ívÄN5,¨nÔ€‡Vok;‘Ũé¦ڪЖÊŠ¶¶>äT9åÄ^å0èÛW%ONݱ.d,L¬FŽvÈŸŠ!ÂdôÃœ) Á—t7|aÔ Ózvêï™ØÜ\–Œ‚<‘£µq¬d[DßÕd6©«íQ+ÓÓôà0ºWà·$ÈöLߦë-ºƒAÍ9~`ÚŸA#Û¯5‹Ð±¤òK2Í‘I ¼!K½¶·<-Ý%ŽƒHJÁû¾ƒM¹Z7F·#v¯­fWº„IÛYgJ© #ui +…>°®Á€º}á’` 2™#XôåFñh0^a˜ š%Y˜žÍ~{ 5àÞ¯æ®ëoãiW†…ËÝz°ûîX=\7q úyE¼4¦ q/ÖǤñØb)Q’™ð"Ký-Üy°Íݾšë®Ð5AZ2@Žñ Ž¿t”÷fN{&¡ñw£Š‰€'ëzÇ|>Å~ÑsÉúÇÃc~è àì†ýZ/a&ƒ,ÉÛ‹x8ö(¬[ËSy*ú„ÝŽ~G'ÿ•¶ôå{÷ §‚O‰Tùâ±nsÝu߆Òõ§xq¿“‚©Ã'mà•ëÊ´¶ØÀÃ(ˆ²2›Hƒ\É”üÿ>—kÐJ²uÕx7È=ãº- ˜dÊkqWÏ¡Æí( 1Üî™ ++x¨mO+èG¸`=ª¿£ßw¾8tž@Ü~®€iãb&ýÊyÊÉe£pη³-X¢(…Žgò.„ŽÁ&Uk!¿X2üÈ¥óüÎ8‰Û0,@ÞYT¯öÂT½¡]8-õV¹I@©äµ‹¼.OÈXxœ‹k¼I´ygWŽ3Ïo¾NÀT×{ŸéÏmמ›nèAŠƒ`TÁÜœ¨˜I×µi_¨II @„É«d­08í«‚±4}XH”pK‚5úL¶fŽduÕF©ZúZÏ["î¢óÇ&AÁ„]FSÅ”rÅ”¡Â-•  6·=_¥ôÍ}¯«fœ‘{áø—ѧ±&Þl~¡š˜¡4µN}ߘ]y]7]ðÈÍÁ +3‡zÙM¥ÄEö‡<'Ĭ¢‡Â‚k‰ŸºãIK”Íÿ¬>¼’‰$s“™Taâb2 Åéºìœ[âzgy`Ð[¡Ê ")™å˜°P¬®µ±<»‰’ GS‰Œ™BæSF[ÐÆg¥@|º]ªJ°óI£)¾¢l–RHE„cñÒáÍ‘*š8~±È$†=åÃ~ •W8¡JG3¶œœpÜCÖîwgšìÈ$"èbÝÓ؇_¤×ññ@ËX&ÉJ‰S’K ‰„&—…k²ðwS‰Ûµ¾š]è få°îßδ"Ê¡ru)ÙÅhiVæc„ãD&²,ˆ”>òd>òø¦À\ÈÀÁ–]ë1é1º9>qáü’f»LRŠPdˆLNÏ7‘#ÃŽ< }Ôt(é µÂZÙá÷ô5ÿÞë¡·žŒgO·KÕ›nû“SfD• *}× m‰]tš³ ûkÞÄ2ßùPa)t¦5Šï¸@ÝÂÎÝ@ ²#Ya„‘¨ßÓuzcÎgei¦/Õ«'ÞWv1w;sM$¦\h! +K³ËZ! U¢|õ },ä-T\Èiù)¶†—™M¬)¢Ût‡KBaŒÂ´˜ŸS7`\&Ö^±¡‰&&Ú¡Ù’å^_ˆ¼=¢ µŽ¸Š©/@ð$.˜Á²n 0ãf—«{/Qc‡çöùŽ±Éñ¡ÚÖ=¯tñÍX>Ëî)z /{0„öG1Y C*5÷Hò|ÅjAÀùеa0ÂXë–KƯ,†•p=†”Fä9‰ñléÜî|uÚ$1Sû52Ñ”*?õVù8ijÞC@üû 3ß‚ü¹=á¬zÛ”SsÀÖ'¨‹«ƒNøÒÕæOwíi¸þáñé=|ë5ë~ÒÅÀªƒtk¨€ƒ6¼Ý ]´Né!)½=Á˜*5$ÐyúÿPŠrla±Ö¯æj§›íb5% îÖfÏX.]äü©pšwzc 4vÖ׳Ü]Õ°»“™2_$¡OæÖ#ç’_åpÚÐØ°ö4uîëÜzû.—H38Bn«‚'äô°…ïúýuoõÖV1J¹–cݽŒñ=Ãm}„R/"$•§Ž4÷•>‚tùª[«_Ð@âIŠý[†a{ÓШk/O \¯\iܽŒ‹µyîbm^`8O_Š­j˜=:9M®<uH&)!Íf¹² E ¤òïFÜÙ Ív¤Yžú*Ï]‚ÍŽb7KFY!ëö4¹é>a±¬z Ù\˜"T‘2»Œ·SCNE˜"¿ÄTz[Õ•=L A05h1„u”»œdkM9C€/¥x$ue¿r~EÇðyΟ¯Ž&áèBg Ú½.ßóh¦·\Q&ɧw%±»Üéu©®Œ¡™ÐÙ^ôÃo)Ó$TK +…3¸U£©UPk\‘;cpËÜÓ…à8~*”©DGÊR³)=„ò6MÄU$ä¨U“—¿pf¥ÉÖ\:âç¥Z¾þ®Úé=YO½å¼zxã¿H_ø‡ÈÂ?!á˜èþïÿ]¦¿Ÿ¢4PY&—ÿRÁá("Ì”K©á çþš[Öÿ xK:óendstream endobj -913 0 obj << +953 0 obj << /Type /Page -/Contents 914 0 R -/Resources 912 0 R +/Contents 954 0 R +/Resources 952 0 R /MediaBox [0 0 595.2756 841.8898] -/Parent 886 0 R +/Parent 926 0 R >> endobj -915 0 obj << -/D [913 0 R /XYZ 56.6929 794.5015 null] +955 0 obj << +/D [953 0 R /XYZ 56.6929 794.5015 null] >> endobj 54 0 obj << -/D [913 0 R /XYZ 56.6929 717.7272 null] +/D [953 0 R /XYZ 56.6929 717.7272 null] >> endobj -916 0 obj << -/D [913 0 R /XYZ 56.6929 690.4227 null] +956 0 obj << +/D [953 0 R /XYZ 56.6929 690.4227 null] >> endobj 58 0 obj << -/D [913 0 R /XYZ 56.6929 550.0786 null] +/D [953 0 R /XYZ 56.6929 550.0786 null] >> endobj -917 0 obj << -/D [913 0 R /XYZ 56.6929 525.2967 null] +957 0 obj << +/D [953 0 R /XYZ 56.6929 525.2967 null] >> endobj 62 0 obj << -/D [913 0 R /XYZ 56.6929 393.0502 null] +/D [953 0 R /XYZ 56.6929 393.0502 null] >> endobj -918 0 obj << -/D [913 0 R /XYZ 56.6929 363.1913 null] +958 0 obj << +/D [953 0 R /XYZ 56.6929 363.1913 null] >> endobj -912 0 obj << -/Font << /F37 747 0 R /F23 682 0 R /F21 658 0 R /F47 879 0 R >> +952 0 obj << +/Font << /F37 779 0 R /F23 714 0 R /F21 690 0 R /F39 873 0 R >> /ProcSet [ /PDF /Text ] >> endobj -921 0 obj << +961 0 obj << /Length 2095 /Filter /FlateDecode >> @@ -2722,72 +2822,72 @@ fhW dXõcsý.Û~¸ý¿ Šç•‰×:%<ä7IE”èÚ–Ø’ª2yÑT hZvýxªY/ý‘áÝN6“dy 8xp]Óc~{î0¨”~‚’$¡½„3×|Ó$ý$ÈR¸2Æ/{ë³ý4±òÕc¯ÕW¹aµ¤ôó,ÎXT¦JP¶Ø¶ÖVDÙ6ßFµÊ0«æU¢íÇŽ™¶¿À×¹`-åñöl«U ^AÁ³"rÍçžü‚ÍVN²éÎ|Õ•©^Tãb6+'gäÐqQgä œÀ#Ùu£¦MÀmû¥”Ä”ˆC¬¿Ðé,õÀû¹Z@“0 ±ÙEÐól6ü˜æI4$mVn:ôsxµWï&ì˜:,F9Ü2, -DŽ49œvDü¹„šný~¹ æÒû/å¢õ>ÉÃP©_¬MËZç¹—ù3?,Ÿk&ä2@‘(Å£À9[pxZµ_.{©ãKi¨X)$5”uai `‰fAþ2sò5ÜrNñÝìÈS?/ÃüYvà©6;ðX[$€Aq[€ÃÙ$Õ„|ÎdÚbß©@åœÖôQ‚уrmýG aCˆ¨Vj@Pºµp7ñ>Z`­óBC¬SßWÄ<ˆEíƒeõôöTá€;i‡œWbé"Žp±°Å©M)ÉÃP©_¬MËZç¹—ù3?,žk&ä2@‘(Å£À9[pxZµ_.{©ãKi¨X)$5”uai `‰fAþ2sò5ÜrNñÝìÈS?/ÃüYvà©6;ðX[$€Aq[€ÃÙ$Õ„|ÎdÚbß©@åœÖôQ‚уrmýG aCˆ¨Vj@Pºµp7ñ>Z`­óBC¬SßWÄ<ˆEíƒeõôöTá€;i‡œWbé"Žp±°Å©M)Gy%â*哦tð–RW8WièÈME“Œ"­º³lââ/²Ão,Õ`ú0Ù@ç×’Kà†Ï Ïm~~ÐÁ*µf¸ºzQè¦Á‹ÇÍQh³æÀêÛÆr’.“ƒ‘?,Ñevÿ'€þ0¿]pø®»¨¡ïì{”æµå€ûèŒó‚"¨röZ^¬žH9¢Â !\: Ÿ¤IhsÜ]W‰y-èÚ3·Øé„™„ƾt‡éQ…ë-šÇyzÚñÈ¢°äø[î%•SŸ¬cPwMß92¨6ŠÐ9ÎQ °ÄÂ~ûFbÌ‘œÎ*Î#²­.ø„XbI"èÓ Õmíš™Q‘‚z -â~ó ¯ fÙ"‡èâ9Lt¨ž¹£j¡ mK(ÈÏbµÌ¥X2¼É6õpT!h_¥^ÁO8,uU•a¸‡àk"¿°•6ª ÇsÓ÷Oã_IZ:ä[²ÑiÉ*Np’êZÀu ‰¡‰ñìK—!Gµ&¯!cÖ`þû$8‘ôbGÊ=6ü¡ºJ¬« z¸Äã5Âr‘> endobj -927 0 obj << +967 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [519.8432 268.1131 539.579 280.1727] /Subtype /Link /A << /S /GoTo /D (acache) >> >> endobj -928 0 obj << +968 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [84.0431 256.1579 143.5361 268.2175] /Subtype /Link /A << /S /GoTo /D (acache) >> >> endobj -922 0 obj << -/D [920 0 R /XYZ 85.0394 794.5015 null] +962 0 obj << +/D [960 0 R /XYZ 85.0394 794.5015 null] >> endobj 66 0 obj << -/D [920 0 R /XYZ 85.0394 769.5949 null] +/D [960 0 R /XYZ 85.0394 769.5949 null] >> endobj -923 0 obj << -/D [920 0 R /XYZ 85.0394 574.3444 null] +963 0 obj << +/D [960 0 R /XYZ 85.0394 574.3444 null] >> endobj 70 0 obj << -/D [920 0 R /XYZ 85.0394 574.3444 null] +/D [960 0 R /XYZ 85.0394 574.3444 null] >> endobj -924 0 obj << -/D [920 0 R /XYZ 85.0394 540.5052 null] +964 0 obj << +/D [960 0 R /XYZ 85.0394 540.5052 null] >> endobj 74 0 obj << -/D [920 0 R /XYZ 85.0394 447.7637 null] +/D [960 0 R /XYZ 85.0394 447.7637 null] >> endobj -925 0 obj << -/D [920 0 R /XYZ 85.0394 410.3389 null] +965 0 obj << +/D [960 0 R /XYZ 85.0394 410.3389 null] >> endobj 78 0 obj << -/D [920 0 R /XYZ 85.0394 348.7624 null] +/D [960 0 R /XYZ 85.0394 348.7624 null] >> endobj -926 0 obj << -/D [920 0 R /XYZ 85.0394 311.223 null] +966 0 obj << +/D [960 0 R /XYZ 85.0394 311.223 null] >> endobj 82 0 obj << -/D [920 0 R /XYZ 85.0394 189.9853 null] +/D [960 0 R /XYZ 85.0394 189.9853 null] >> endobj -929 0 obj << -/D [920 0 R /XYZ 85.0394 156.0037 null] +969 0 obj << +/D [960 0 R /XYZ 85.0394 156.0037 null] >> endobj -919 0 obj << -/Font << /F21 658 0 R /F23 682 0 R >> +959 0 obj << +/Font << /F21 690 0 R /F23 714 0 R >> /ProcSet [ /PDF /Text ] >> endobj -933 0 obj << +973 0 obj << /Length 611 /Filter /FlateDecode >> @@ -2795,138 +2895,140 @@ stream xÚ¥TMs›0½ó+t3EÕtÌI;ŽÁÓvÒ£$šbp$Í¿¯@Â&Mzêx<ˆ÷vŸvßzM6x„"AˆEˆ8&lw†»ôˆ‹ Æ `uš{Ÿ/X @þ0ÑJNòâRÄ‘o0ÌÖËåõÊg1ÌÓs? Ãëeº:ñãæ³Å¥…²ïYžÎ3?`"$ðìËÉ2OW–¢Nèt¶pù«4»^¯ÎÒñíf=[¥ót‘gþ]~å¥ù¡‡iŸ³¾_Þí…i÷Êȉ„ƒó‚‚‚r†xÈ؈”^æÝ'ìú¡o#Ê"úq”"rêˆ&1ó‚±ñ¤Ûï릕…sm/›M«ªGçØ«nåN÷]6MP 6β3“A£Ñ@Ê¡°À¶ÞíU)µ7UaáÆO`W9´®,¸±rÓø$Ò²U·»—¥ê‹­+õ;(ÕOéàIÙ†ÕCÙNÓÞx¼d‘ûœÃ z–®šg9Üôö­‚çÖ+­ê¡N,ìíùÚñµ®ZK}íEUUÔ/ÚÆènûd©>„„PùN¢¨™‹ê4Ð[%Ã|[ú„ ˆ,}Q7c‚}vû ­ƒbÓJP*ݾ-Wfü¦=»DÖ+ýÉ\Kií“ù'çs·?0¦¥ÃUõW`[ïí¡”Ï²´ÇB >Ém[7¯ŠšæWN¸ênÈÚÊQD·ºïZ3ô¯åcõóÁª˜¯›æ/æñß*ŒKzܹénÐ8AabD\Q½Í„¾«|Üà÷¥ÿ¦œ@šendstream endobj -932 0 obj << +972 0 obj << /Type /Page -/Contents 933 0 R -/Resources 931 0 R +/Contents 973 0 R +/Resources 971 0 R /MediaBox [0 0 595.2756 841.8898] -/Parent 886 0 R +/Parent 926 0 R >> endobj -934 0 obj << -/D [932 0 R /XYZ 56.6929 794.5015 null] +974 0 obj << +/D [972 0 R /XYZ 56.6929 794.5015 null] >> endobj 86 0 obj << -/D [932 0 R /XYZ 56.6929 769.5949 null] +/D [972 0 R /XYZ 56.6929 769.5949 null] >> endobj -935 0 obj << -/D [932 0 R /XYZ 56.6929 744.7247 null] +975 0 obj << +/D [972 0 R /XYZ 56.6929 744.7247 null] >> endobj -931 0 obj << -/Font << /F37 747 0 R /F21 658 0 R /F23 682 0 R >> +971 0 obj << +/Font << /F37 779 0 R /F21 690 0 R /F23 714 0 R >> /ProcSet [ /PDF /Text ] >> endobj -938 0 obj << +978 0 obj << /Length 1222 /Filter /FlateDecode >> stream xÚÍWIãD¾÷¯ˆúäH¸âZ¼©OÍ°‰Hs`8TìrbSeìrBƒæ¿ójs6sàÊÁµ¼ý}ïsŒW üðªHQBK¶ÊK†Ò§«êø”¬öp÷ýö2,¥(e”Âfá6NiÒ‚ä«øÚÈ×Û§Íw¯H‚²Œ¤«m3ûÊrP  °­Þx¯Å°ŽIšDtýÛöG§ÆP^äب%à"C¸¤Vþ'~Nø1œ‚â;%?$ ÙO×­’Þ ]•¨ÌHæ­d%yά™$(i¤íhV,EeUíñY¸Ã~Xã"R§¶îbTG5Nû½µ¨ÝEuÁGJŽî‚wJî½ÕVœò~‹]+…jŒÆB­_N£€ ´ŽfÑûuI¢Æ´M’&-ŒQ™¦Ä¦e"r± >*Éw¯Ø‰w“õëFùÒUbм•n£z_XBëVîG473DYF|9FYRbë—"¼Žq’@Wø±þîº2^ …­!ŠÉ<ÀÐlêÕ[áÕ∕ìÞÜÉÛMRƒ2W—íh…V]§Î­éˆÙŽ-T¸ó·ÕŒì¡ˆyòÞ£¡Z®ƒ=ß8+àÜÄkN¤×úó˜¥s0‡¦Ëv±óòU× -©Ç¥·†EòS€Š2Of=§&ü¡W.tÀLFXôÚyÉß'1´¦÷fÓ¸<Žn§&=Z|KÁµ½áDnãÖ [;ÑiteL-dçÞ^z@3Š Ñr0¡sSùØò¶Ð°´@EžQ/ëph‘@#†I¨„ƒÜkg+¡Û“€:cŒ£¯&L0À3LDc‚o`Â=æÕÔÕn¹ó"¦iâ$ü©ÏÍZ™Z}!W‰37µu£VDS' Ðò‡4A¤L\û6è @{{VnZ&ÜvœvR˜ò›ÍÙžÛñàVÚkÙRºåÜX³iuD·°qÅâUwñwñð—{à’ œˆ¡dCØËía~}øée ”®[³M#AJTyy+W·´@Aÿ­äóFèjc†£Þ=æ0Tè½>Ú˜ÍEq)·+\]gR½ =^Œl9¯ËσØÚ»Ç`Fvn˜ƒµsm»uð×RýŽW½ºÄè«… Ô~x)³?•ôž­ ȶ26úˆ=þbÁõ[?G¯ªa1˦킗NU¼;¨Q#Hïùe)&©tÛøBKõåš.ð=¤Á¼Î|OßûÏë¤j€©3³ý/iß’7.-Ñ[–‡Ñ}dyp‚…ge8àþ‚/Dcg*}àÚ¶÷fá -ÿ¨2ûù@[ –¤('ðVt„(þ° F —7¯€ÑK‚sTRRx;Ö›#<鹎{žëøIÜý7¸Pé´«Õqþ›ð™˜1t6Ihb–{â^Ž­(áÏ!½Žm‰CÁe -5€B=—âÿëÄæ/n¸GÂä^xÞ`W>¾QAF?°9¯ª™Ù;ë ƒû9âãòíÊwÁ®|»0«ðœIª Ÿ:½äÊ0 £•0ö1¦ÿ˜SM™^ÿ^r0m%©ßÑ1¡¨Ä ûOèøéÛíü•¾]hŠÌ—ÐÒwP‰/2î#èñ4ÉPAÊ<2yazïmþ¤zt÷7¯Ì™øendstream +©Ç¥·†EòS€Š2Of=§&ü¡W.tÀLFXôÚyÉß'1´¦÷fÓ¸<Žn§&=Z|KÁµ½áDnãÖ [;ÑiteL-dçÞ^z@3Š Ñr0¡sSùØò¶Ð°´@EžQ/ëph‘@#†I¨„ƒÜkg+¡Û“€:cŒ£¯&L0À3LDc‚o`Â=æÕÔÕn¹ó"¦iâ$ü©ÏÍZ™Z}!W‰37µu£VDS' 0|‹Cš R&®}› ô ½=+·-n;N;)LùÍæìÏíxp+íµl)Ýrn¬Ù4ƒ:¢[ظbñª»ø»xøË=pIÎ +ÄP²!ìåö0¿>üô²J×­Ù¦‘ %*Š¼¼•«ÛZ  ÿVòy#tµ1ÃQïžs*ô^ mÌ梸”Û®®³ +©Þ†/F¶œWˆåçÁ¿líÝc° £?;7ÌÁÚ¹¶Ý:øëN©~Ç«Þ@]bôÕÂê ?¼”ÙŸJz ÏVd[}ćž?±àú­Ÿ#„WÕ°˜eÓvÁK§*ÞÔ¨¤÷ü²“Tºm|¡¥úrMøžÒ`^g¾'ïý‹çuÒ5ÀÔ™Ùþ—´oÉ—–è-ËÃè>²<8Á³2pÁ¢1‚3•ƒŒ>píNƒ?Û{³p…T™ý| „-KR”x+:BØ#†Ë›‚WÀè%Á9*))¼ëÍžô\Ç=Ïuü$îþ\¨tÚÕê8ÿMøLÌ:›$4 1Ë= +q/ÇV”ðç^Ƕġà2…¿@¡žKñÿ‹ubóÆ7Ü#ar/¼o°+ߨ £ØœWÕL ìõ…Áýñqùvå»`W¾Ý@˜UxÎ$U‹†O^re˜†ÑŽJûÓÌ©¿¦L¯ +/9ƒ¶‹Ôïè˜PTâ„ý'tüôívþÊ ß.4EæKhé;(ˆÄ÷txšd¨ e ™¼0½÷6R=ºû*Š™Üendstream endobj -937 0 obj << +977 0 obj << /Type /Page -/Contents 938 0 R -/Resources 936 0 R +/Contents 978 0 R +/Resources 976 0 R /MediaBox [0 0 595.2756 841.8898] -/Parent 944 0 R +/Parent 984 0 R >> endobj -939 0 obj << -/D [937 0 R /XYZ 85.0394 794.5015 null] +979 0 obj << +/D [977 0 R /XYZ 85.0394 794.5015 null] >> endobj 90 0 obj << -/D [937 0 R /XYZ 85.0394 769.5949 null] +/D [977 0 R /XYZ 85.0394 769.5949 null] >> endobj -940 0 obj << -/D [937 0 R /XYZ 85.0394 575.896 null] +980 0 obj << +/D [977 0 R /XYZ 85.0394 575.896 null] >> endobj 94 0 obj << -/D [937 0 R /XYZ 85.0394 529.2011 null] +/D [977 0 R /XYZ 85.0394 529.2011 null] >> endobj -941 0 obj << -/D [937 0 R /XYZ 85.0394 492.9468 null] +981 0 obj << +/D [977 0 R /XYZ 85.0394 492.9468 null] >> endobj 98 0 obj << -/D [937 0 R /XYZ 85.0394 492.9468 null] +/D [977 0 R /XYZ 85.0394 492.9468 null] >> endobj -942 0 obj << -/D [937 0 R /XYZ 85.0394 466.0581 null] +982 0 obj << +/D [977 0 R /XYZ 85.0394 466.0581 null] >> endobj 102 0 obj << -/D [937 0 R /XYZ 85.0394 237.1121 null] +/D [977 0 R /XYZ 85.0394 237.1121 null] >> endobj -943 0 obj << -/D [937 0 R /XYZ 85.0394 206.4074 null] +983 0 obj << +/D [977 0 R /XYZ 85.0394 206.4074 null] >> endobj -936 0 obj << -/Font << /F21 658 0 R /F23 682 0 R /F39 863 0 R >> +976 0 obj << +/Font << /F21 690 0 R /F23 714 0 R /F41 910 0 R >> /ProcSet [ /PDF /Text ] >> endobj -947 0 obj << -/Length 1859 +987 0 obj << +/Length 1860 /Filter /FlateDecode >> stream -xÚÍËrÛ6ð®¯àøDÍD0^$ÁæäÄvêL⸲RO'Í"!‹>’²êvúï]g¢Ð§¾3[ôh „… Î,ùâ2ÄÐ(`÷òäãÙxB=ì^ŸMÇžçþ ƒžº:›žŒîÎ.>]^'¹ûöÇ“«Y‹ñ4·Ÿ.Ï/Þ}ÞÒ½Í:)ú’Ì”ßG_¾b'ß0b¡ðœ L0"aH|Ä=†<ÎX»’®G?u{»úè æF”ùtHuáê¼ùŒ2­ºßËBŽ'>ÆîFÀ PZL¢$©PT­¢#³÷‡Ô¡!"€'"…žG5æ~e äQÝÈêµFÅ»H‹4koÉÊ8Ê–eÝ JÞía›ç,Ê&]Üü¢4(“ÁËÿ¼íøØœ½±wF•šå«®eu׋Òò·(_eÅe>ÄaOk=Ì—WV8JæÃÚj¥½¸²ÒÂÛɺ–µ™– +fÝɾÄv?ʲr#« ÒŽUTÔ ù”2 ¿šÂd÷È#: !EÄ<„ -Ô"xÈcÏxüçYyÜ2¢JÚ7‹â=¡¾iìbÿóÐŒ ŠÐ·Ž]úhþíèQس]ûØíŸ Ð7Xu+žz¯L_›¥ïEzïu|N‰C8b„,¸È£ˆ’Іy:ž ¤>”QbBò›(‹Š8-níqÖ xpš -ä¡ u'ã ž»ªÒ£p›¥¹Zš››³Þ5Ù¤ÍÒì²Ù”Õ7³¬ŒR6¡Kí— ³ETf‚Üdy°SjωÁ¶ËìÕ`Œ%bŒ4Ðo ãCÅ+,£t€"½Ò>),,JìÌ+Â4—ô Ø,#K;ÎRY4vy“f™].‹BÆGZ5ʨ½*WÆTØkÊh–©aÍðѲ­ø²IsùÃ~M@Ú0u˜Oó9yVQB ìBì%ÿìTËG/ŽäÀœÃ@Ë‚­t»¤&­LÆCÄqØ<;þ/ÂÜgƒ†ž¯ut ?žpÁˆ;›}PøîÛ'×ÊWy@ÝÙ/WPþqB}w*ër­õ[™v¶bæÊG§Ó­‡FM´ÿ\@Àó±çô˜ýwâ+E“êËîõ_P£,@PuŠá²S)'`®UºÙl r(w!Ì+%̽¸„%NuLò1%ÖNïâÿ±z¨‡x(üaõºL¸Ã ÉaaÝ²Õ -ß× -ÞƲƒZéÝ÷²ZyQ7$ºMñžÒ -dŠx¦VØa­ôî{)­l;¬ÿ":RL 8b ¸À¸AÛê=hùh••€¶ à? t8¶-õ€:e¦ºYJU©p¦³" 6ï–™.xÕÊ÷µ¬R•†ÕDW -€¬SËþ‘.oBff¾ï¾¹¸<5û6íµ˜e5²#’ÛÛUæîÝ¿*Û î–Ÿû–²*ÚÝùAJ§A¨k35FfH Ž]Õ®(ä¢Q%”E挄ڦR->‚‹Bá^ØÚؚȒœ—wº<Á6õ« £Ak””yvog†A©KÐÞÂ0ÇÝ¥-s•á• Ö9ô•ý—ñÚŒÝÜŽÄ®›ª©¿aGªd&ØýºYÙÊ+@ëÚ¦Dà΅˜Ví©]™úkͺ*d²ÇF’ÖqÔÇí¨Zãhº*•BÃÑ«RÁrs‘4³D6Qš¸Tzät«>]¼Ñ³ƒŠS‰Ï¡Ä_ªÇ¿ kaº+Ù:%D!â3ÚÞ*¨*'e•˜æhß1ò|Á,n½ž×Êrcrp…~æƒW h_0åöt¹jR`và检ᖣî --”ªzå¡U$äÈ×™ÀìT·Ž¦C¿æ¶Ø‡CÅQ|L§ºÞÖßúÚßã…@ŠczÌ<xΣ<ìSRL ¡¾r©ï¡~ž!_´ýhûKS$ê_€ö7€b%«¨ÿ¤Ë*¦Ûd~÷O’Xr³1!Ä-ˬÞëÃ>·Nt3fk£¾ñóqÉÌz¸á…™g‹Î–©îBB°€Xñm&‰¬ã*ëðŽìá(3{iž¸’EÍuoªÐÓ趀hÆ*ÊSÕ©åi‘ÖÒÅE2±`,mÊÊvH¾ŒÔçœRÓj]Ê=ÑëûºQ™B‡‰í­æ:B[Õ˜“eƵw⊜¯oo»õŽzÑ)¶î)6ÑŠE‡œž—36h Øy²¨zî/ß­»ñ1!¤ö®h¹Ò¿ÎøÞÛŸÃÌÿ¿y¯cendstream +xÚÍËrÛ6ð®¯àøDÍD0^$ÁæäÄvêL⸲RO'Í"!‹>’²êvúï]g¢Ð§¾3[ôh „… Î,ùâ2ÄÐ(`÷òäãÙxB=ì^ŸMÇžçþ ƒžº:›žŒîÎ.>]^'¹ûöÇ“«Y‹ñ4·Ÿ.Ï/Þ}ÞÒ½Í:)ú’Ì”ßG_¾b'ß0b¡ðœ L0"aH|Ä=†<ÎX»’®G?u{»úè æF”ùt@uœ ©Î ‘Ï(Óªû½,äxâcìa,Ð¥Å$J’ +EÕ*:2{(A"!x"BPèyThîW–@Õ¬^kT¼‹´H³ö–¬Œ£lYÖ ªäÝѶy΢lÒŽÁ/Jƒ2¼üÏÁÛŽÍÙ{gTY Yî°jàZVw-¼(- ‹òU&Q\æCö´ÖÃ|yeõˆ£d>¬­VÚ‹++-¼¬kY›i¹°bfÑìKl÷£,+72± +*íXEE½O)Ãð«)Lv<¢RD|ÀCø @-‚‡<öŒÇžeÇ-#: ¤}³(nÑÚè›Æ.öß1ÍÈ }ëØ¥æߎõ‡= Ùµ}ÑùÉ}ƒU·âé¡÷ÊôµY:ð^¤÷^Çç”8„#Æ!œAÈ‚‹<Š( m˜§ã Á@êC%&$¿‰²¨ˆÓâÖg½€§©@~šPw2ž0ṫ*ÍÓ&Uﬦ𶹔&Ô˜iâ +šwÄõ4Ž +»nÏFñ2•wÒb§vWGœª<£ñï͸®;Zù:kÒUf1«1®ŒK=&µYü{¸^ÇK{W=¨úŽŒRƉö¨b6´+@Û¨Š(—¨# Ñ@>ר‚µÎÿ +f!uÓ…Zåî}9&îÚÀKí3 +·Yš«¥Ù¸¹¹1ë]ÀQ“MÚ,Í~!›MY}3ËÊ(õaºÔ~¹0[De&ÈM–;¥ö\‘l»Ì^ Æ(P"æÀHcýÖ0>T¼Â2J(Ò+í“¢TÁμ"Ls AÏ€Í2²´ã,•Ec—7i–Ùå²(dlqT U£ŒÚ«reL…½¦lf™Ö -ÛŠŸ)›4—?ì×$¤ýS‡ù1*‚ç%Ê!ÄnQòÏNµ|ôâØAÌ9 ´,ØJ·KjÒÊ4a0£í­‚ªrRV‰iŽö=#ÏÌâÖëy­\!7&Wèg>x•€öSnO—«&fna> +n9ê®ÐB©ªWúQEBŽ| ÌNuë`:ôkn‹}8ÔXÅÇtªëmý÷­¯ý=^¤8æñ Ç̃€×á<ÊÃ>%Åê+'Йú>êçòE@Û߈¶¿4E¢þhh!V²ŠúO@º¬bºMæ1áwÿ$‰%7BܲÌê½>ìsëD7c¸¦1êÿ0§‘ÌÁ¬‡^˜yö·èl™ê.$ ˆßf’È:®Ò¹ïXÀŽ2³—à‰+YÔÑ\÷¦ +=n ˆi¬¢> endobj -952 0 obj << +992 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [55.6967 190.8043 126.3509 202.8639] /Subtype /Link /A << /S /GoTo /D (rrset_ordering) >> >> endobj -948 0 obj << -/D [946 0 R /XYZ 56.6929 794.5015 null] +988 0 obj << +/D [986 0 R /XYZ 56.6929 794.5015 null] >> endobj 106 0 obj << -/D [946 0 R /XYZ 56.6929 480.2651 null] +/D [986 0 R /XYZ 56.6929 480.2651 null] >> endobj -949 0 obj << -/D [946 0 R /XYZ 56.6929 441.7923 null] +989 0 obj << +/D [986 0 R /XYZ 56.6929 441.7923 null] >> endobj -950 0 obj << -/D [946 0 R /XYZ 56.6929 373.7178 null] +990 0 obj << +/D [986 0 R /XYZ 56.6929 373.7178 null] >> endobj -951 0 obj << -/D [946 0 R /XYZ 56.6929 361.7627 null] +991 0 obj << +/D [986 0 R /XYZ 56.6929 361.7627 null] >> endobj 110 0 obj << -/D [946 0 R /XYZ 56.6929 167.4388 null] +/D [986 0 R /XYZ 56.6929 167.4388 null] >> endobj -953 0 obj << -/D [946 0 R /XYZ 56.6929 126.8733 null] +993 0 obj << +/D [986 0 R /XYZ 56.6929 126.8733 null] >> endobj 114 0 obj << -/D [946 0 R /XYZ 56.6929 126.8733 null] +/D [986 0 R /XYZ 56.6929 126.8733 null] >> endobj -954 0 obj << -/D [946 0 R /XYZ 56.6929 98.4089 null] +994 0 obj << +/D [986 0 R /XYZ 56.6929 98.4089 null] >> endobj -945 0 obj << -/Font << /F37 747 0 R /F39 863 0 R /F21 658 0 R /F23 682 0 R >> +985 0 obj << +/Font << /F37 779 0 R /F41 910 0 R /F21 690 0 R /F23 714 0 R >> /ProcSet [ /PDF /Text ] >> endobj -958 0 obj << -/Length 2706 +998 0 obj << +/Length 2705 /Filter /FlateDecode >> stream @@ -2934,79 +3036,81 @@ x l¦SBE.gY.IJY:[ì®èl Ï~ºbž& DI—ꇛ«¿¾Ù,'¹âjv³ê`iBµf³›å§ùË¿¿øõæÕû넧t.Èu’*:ûâ—W¸ò¥éüŸâå»·¯ßüôñý‹ëLÎoÞ¼{{d4—ðæåwßýúêñ½ןo~¾zu¿¢û¥Œ û \}úLgKøàŸ¯(¹Ng÷0¡„å9Ÿí®d*H*…+Û«Wÿˆ€§îÕ1Í¥B“TólDuœ©.͉\8ÕÙof„]'ŒR:ÿ±,ÖUÝ´å¿öæš16¯ëmc¿ðDήHγÜ!ÝlŒ'ê2e9¡)³²Zše¹b’äRhOóÝŠ$Z$Ø€€c(9*ã%á’Í‹j9Çaw¸–ž´j¶uýûq?‚)SÐ>Ë<áþpÍô¼^Š]ðBÏ ·bì$ŸÛ-®.êÝÎ2v“mYµNŽtUp èŽðÞÎþ8šÃCY­qV;ܘÃ94ÄJ8KÏ@ëvž1’§)êÀM[–++ÕÊp^VøÛ´[ƒC”õ±Ý[ƒP»¢%'6MaÁÑ”ÎÁ¸r6(éRM›`¤êE—g¯hÁÏó D#<{vAÁ¼”LûL­µ&œfóe½+œ†¨M¡ʺ‡kÜñ½S%ÌÿMS:fäR°6ñ VH 1Ë™·A¢µo7²›Ò¸] Ü5XÛoMëéëUhü’7h7vfqçjþÆoŠÆÛR -’S¡ú¶ÔÞ×׉  DYšæo׉d|Þ”–)®—UkÅ¢-ïÌ#!Žœi ˆ%ΰçðš³oRÀ=“øEöÉmÑ.6C¨ûMͳ8¶¦ÁYÑ…³ßAûò£{I›Ât ÀŸmÙx«wÚ³Þa@ÛÅ'ˆì)+cÕ'¿Øž>¯÷Ö\ã,¦iÊÛàt+4¦Îp»að-<·S„TÇ5xƒTD0H‡#ÞÀ  •ÂxÌU¼@Šèbœú'£0–ê‘“ÕæǦX›I™„$"ÕêY2u00ãçc2ªàb‰+ûô=ºZÚu5‘­ÒÔ»FO$ë! E8¸­'û<ŒÊû5†ŠS Ɉ–"}JIžeÊ8ëIÚ‡½Á‚äœe©ŽBáWŽÉY@pÝÃ\l‹¦U)ÉR! Aå‚ä¶r颢‰ÀfŒd¢§¿Y"¤Ëø}‡ü”\Vn¹žf4®”?]”ßú–©Ú‹[öy$^Cl̉¤ ”Š¯Ç¼žzlŽ!Z„Ȉ˦Wœ¥ÚÁ}¢G[ünAÀæ‘ÄB{¼#Ô÷Þ¤‘AH`!.¡euæ«pô×!hîênëçÄní0J‹»¢Ü1îù× K œß…ðÛQÉ©"8ªX~>ÃfD -Üx"âÂ×dU“ -¨€©¾PÕt©¦«šHÕ­R»LmÈ“T©ó\#Õ[1ŒÂ–Å=¾Óe8“ü|ÍÁiŒ‡G(<ÊÖU¦éÜìöP3”×lþÕ4¸ä¬¾\D_ñJHºÎ`ɬ€SØ JÓùžxiVÅqÛÚÍPµ¸º¨+0ë¶Á·nM{oL…6XÁ²-‹}õ"¡gR”‡Xƒ -ˆöÆ)•ñÆY,—hÖMc‚Ñ݆ҷl½u®ŽÕšeá?Ýšo°£[o¡æKkª¥Y·n7g>‰ÞÔ'{J9¡ -vòI´‹1Ø#ÕÅÄ.sP.tIÏ‘©‹1Ø#U4M ïIñr¹­ÍÍý]ˆøÉb,ð{-Cv›Ê<‡&r˜B’·ˇjY·“x±)€íEÀ‰ÄßÏ\ï_—ñÊ>î IÎC¾„¼­‰Ê¹ì'îƒi¥ižŽ½»(îj[¬Ç>‚^¦ùOÆ‘+Ðzˆµ×4‚dyD¿X¡}[ÉØ/xšð¹ÿ¯Éu:;è4ÚûÓ²«ä™=j’ç³k—j:»Fªá™M/Ãr ýlÆÏsŽTX3H¬LÃNò>=/Ò:çE¶ËNx&°Ÿ¶ƒÐO‹4ë÷Ðö!n ªºJ:OmêÔ>ué±Qvon·õ}àµñ‹…˜&UN˜à|Ðã;‘2["BVwÝ,Ìü™Œ¼ @s쩳ìÑfá™3[X+nk—JaxËÅ¡¬þ=kM~è?Pù’Õ¯"®Šíðí¸TàŠwXpNA{?&,„9ºðŒ\÷žÍßöÕŠ„^‰@ëÎa`ô¶Ä‘“ž‰`é·cãG>Û‹ 2˽OÌÑÅA³@ÌæƯœ‡c -Ø¿±C _ñXgîUú“U„È8äAö¬*¢‹1]EDª‹U„P”¤\=ëÈ¢‹1]EDªž‹úÜáÙ„ñ©†Z -"U·FNÚ:Y•á¹ßújÂhpôÿ"ŸÄ³C×ù<ž Œ¦*ï%‡¾gë<%ŒœQ¯±$Ϊ–¸p¿q•qN!Zà -ž=­¶ámºKj ðí1&Ú/L|)ŽoÌ:œ9{fغÂÈÕÀ¹+q—îsÄpÑ\£ˆ*VÆ–1å4ë¾ÀH‡.˜;ï…éæa)ŠüŸäÏþØÔÒ8gë‚7ú‡å%l$·èu$xpŽ¢«Në0b:Ä 3ãO@£A…™œ“ävNâ‘ài8ý„‘Øþb<²#T¨¹\yfvÉ»Âïc×cg=aÙª‡+·Tãï­b](°¶®dù•£Q7˜–† þ¢šað¸åöig[\G¨ý -:ºV_ Ó…ýuͤ ÜÐ?:Ÿ‘‘ÄnÒªXø7ñ«˜9ªÖ^ -!-h¢è¾Þ®ÜšMqWÖN"{ÎõüÞ#-½ UíiÏÁ–(†/‡ßÛíZG®Ì4Éd,Ï•@P2©,ôYþàüccƯá4Ð~Ù ­)–d,a"·­­²IŒ(Édç~“ûûÍË]Y*E¨žzljÝéØûáZÏÖÂÛâ!â¡ÀoÍ:^+ì‹CÛ¿ŽˆgPOCõ~T&8Vk3™ªÕ…Z»K5]kGªàËd±1‹ßÁW'%·J Ôdùy"Õˆýý¦"1ï‹0y¨ÅTìHFÄ`kN2žóÓÛ\ßJÙW›Á¾4U[|îÉi=à¬OÆëg' ™Cq•JãM åÛéK{Û«)Ï© ºÓU]¤ºXÕ1}Ž-•ž#Scºª‹Tc;ì‹»ß=}aŠ0jãÌÁ,Úo‡Ç’(ž²o½|Y•[3qðV¬9U݃1çÕÀ˜ªó®ûH3í¸žf ­¯ueNÝ6J2}Žu¤9áÝ×d.x—ù9‡Õ§:¬„OrØ"„Ѧ #èXñ~åÔŸãiIL° ¼ž¾M‰àìYwáÌí+ÒL»¡ßl‘û¯A# i¼\{ö =þc˜²Ðš  - =Ï‚PVx–%ÿªt*úÿ(_Ñendstream +’S¡ú¶ÔÞ×׉  DYšæo׉d|Þ”–)®—UkÅ¢-ïÌ#!Žœi ˆ%ΰçðš³oRÀ=“øEöÉmÑ.6C¨ûMͳ8¶¦ÁYÑ…³ßAûò£{I›Ât ÀŸmÙx«wÚ³Þa@ÛÅ'ˆì)+cÕ'¿Øž>¯÷Ö\ã,¦iÊÛàt+4¦Îp»að-<·S„TÇ5xƒTD0H‡#ÞÀ  •ÂxÌU¼@Šèbœú'£0–ê‘“ÕæǦX›I™„$"ÕêY2u0œLrT¦@\,Q`eŸ¾GWK»®&R¢UšzWÃè‰d=d¡·õdŸG€‚Qy¿ÆPq +$ÑR O#@)ɳLyg=Iû°7#Xœ³,ÕQ(üÊ1Ù ®{˜‹mÑ4# *%Y*äô/#¨\ÜV.]T4ñØŒ‘Lôô7K„t¿ïŸ’ËÊ-×ӌƕò§‹ò[ß2U{qË>Äkˆ9‘”C‚Ò‚Cñõ˜7ÀSÍ1D‹qÙô㊳T;¸/Côh‹ßÍ ؼ3’Xhw„úÞ›42 ,Ä%´¬Î¼cîƒþ:Í]ÝbýœØ­&CiqW”Û"Æ=àšaéó»~;*9U„çOËÏgØŒH!ƒÛODÜCøš¬jR0Õªš.ÕtU©ºUj—© y’*užk¤a+Qز¸Çwº g’Ÿ¯ 9¸3ñð…GÙºÊ4›Ýj†òšÍ¿š—œÕ—‹Hâ+^ I×ù,9ƒ€p +›Ai:ÿÁ/ͪ8n[»ùJ WufÝ6øÖ­iï©ðÑ‹"X¶e±¯^$ôLŠòkPÑÀÞØ"¥2Þ8‹åͺiL0ºÛPú–­·ÎÕ±ZX³,ü§[ó vtë-Ô|iMµ4ËàÖífàÌ'1À›údbO)'TÁN>#‰v1¦{¤º˜ØeÊ….é92u1¦{¤Š¦‰á=)^.·Õ¡¹¹¿ ?YŒå~¯eÈnS9çÐDSHòöbùP-ëv/6¥°½8‘øû™+âýë2^¹3ÐÇ=!ÉyÈ÷#·5Q9—ýÄ}0í¡4ÍÓ±wÅ]m‹õØçCÐË4âÉ8RcZ¯±¶ãšæ‘B,è+´o+ûeÏA3>÷ÿ5¹NgF{Zv•<³GMò|víRMg×H5<³éeX®¡ŸÍøyΑêk‰•iØÂIÞ§çEZçá¼ÈvÙ ÏöÓvúi‘fýÚ>Ä̓AUWIç©MÚ§³.=6ÊîÍí¶¾¼6~²ÐÓ¤Ê œz|'RfKDÈê®›…™?s‚‘whàqŽ=u–=Ú,ÕPKA¤êÖÈI['«2!÷[_M Žþ_ä“xvè:ŸÇ³„ÑTå½äÐ÷l£„‘3Jø5–ÄYÕî7®2Î)D \Á³§õÑ6¼MwÉC­¾Â¡=ÆDû…‰/ÅqâY‡3gÏ [W¹8w%îÒaŽ.škQÅÊØ2¦ü€fÝéÐsç½0Ý<ì"E‘ÿ“üÙ›Zçl]ðÆ@ÿ°¼„佂ÎQtÕiFBL§‘dfü h4¨0“sÜ®#ÐI<< §Ÿ0²Û_ŒGv„ +µ#÷‚+ÏÌ.¹cWø}ìzì¬'¬#[õBcå–jü½õO¬ ÖÖ•,¿r4êÓ’À°Á_T3 ·Ü>íl‹ëµ?Pgè£îLfq3où§{³(-²²ó» +#¿UÃ¥ìœôý©e0fÆOØGG÷ãÑê‹aº°¿®™´”úGGà32’ØMZ ÿ&ƒÃ`3GÕÚK!¤M4Ý×Û•[³)îÊÚIdÒ¹žß{¤¥—¡ª=-â9ØÅðEàð{»]ëÈ•™&™Œ%â¹J&•…>ËœlÌø5œÚo8Ó¢¡5Å’Œ€%L䶵U6‰%™ìÜor¿ùb¹++På¡ÀSï8±;{?\ëÙZx[<„B<ø­YÇk…}qhû×ñÌêiH£ÞÂOƒÊÀÇjm&3BµºPkw©¦kíHa™,6fñ;Xâê¤äV)š,?/@¤‘ ¿ß”@$æ}&µ˜ŠɈ˜lÍIÆs~z›ë[)ûj3Ø—æ¡j‹/Ã=9­œõÉxýì„!r(N¸Ri¼ ¤|;}éco{5eâ9Tcºª‹T«:Ơϱ¥Òsdê`LWu‘jl‡}q÷ÛÝ׳§/L1F­cœ9˜E[ãÍáð˜@ÅSö­—/«rk&ÀŠ5§ª{`0æ¼SuÞui¦×Ó ´õµ®Ì©ÛÂFI¦Ï±Ž4'¼ûº€,Âï2?ç°úÔaƒ€C‡•°qâI[„0Ú´áb+Þ¯œús<-‰ v·ÓÓ7°)œ=ë®3"œ¹}Eši7ô›-Rbÿ5h„!—kÏþ¤ÇÌSZóq#T¡çYÊ +ÏÒ¡äñ_•NEÿ…6_0endstream endobj -957 0 obj << +997 0 obj << /Type /Page -/Contents 958 0 R -/Resources 956 0 R +/Contents 998 0 R +/Resources 996 0 R /MediaBox [0 0 595.2756 841.8898] -/Parent 944 0 R +/Parent 984 0 R >> endobj -959 0 obj << -/D [957 0 R /XYZ 85.0394 794.5015 null] +999 0 obj << +/D [997 0 R /XYZ 85.0394 794.5015 null] >> endobj 118 0 obj << -/D [957 0 R /XYZ 85.0394 769.5949 null] +/D [997 0 R /XYZ 85.0394 769.5949 null] >> endobj -911 0 obj << -/D [957 0 R /XYZ 85.0394 749.3395 null] +951 0 obj << +/D [997 0 R /XYZ 85.0394 749.3395 null] >> endobj 122 0 obj << -/D [957 0 R /XYZ 85.0394 221.8894 null] +/D [997 0 R /XYZ 85.0394 221.8894 null] >> endobj -963 0 obj << -/D [957 0 R /XYZ 85.0394 197.4323 null] +1003 0 obj << +/D [997 0 R /XYZ 85.0394 197.4323 null] >> endobj -956 0 obj << -/Font << /F37 747 0 R /F21 658 0 R /F23 682 0 R /F39 863 0 R /F53 962 0 R >> +996 0 obj << +/Font << /F37 779 0 R /F21 690 0 R /F23 714 0 R /F41 910 0 R /F53 1002 0 R >> /ProcSet [ /PDF /Text ] >> endobj -966 0 obj << -/Length 3396 -/Filter /FlateDecode ->> -stream -xÚå[Ý“Û¶¿¿BoáÍX>‚lŸœÄN™Ú‰ïÒ´ãø'RwŒ%R©;Ë“?¾»ø"!’’'éL;é܃Àår±X,~Ø]àØ‚Â[È„$Ï*‹‰¤L.VÛ+º¸‡wß^1˳tLË!×W·W_¾j‘‘,áÉâv=•š¦lq[¼‹ä$Ðèõ󿿸^rI£›o¯¥Œþ?úùÍ÷/Þ>¿VqtûêÍë›ë¥¢Y}ý·çßß:ŽË2¾~óúå«oìå\¿¿ýîêÅ­Åp¤Œ -¯WïÞÓEþ¥rñ”°,ã‹íU,‘±Ž²¹º¹úÁ ¼ÕŸNY.–”HËÅRÄ$…þ§¸XB2‘HhO‰P 7K94dFÁEoül`ü”™erá¹Ðøu¾-‹åê¡\}øÔÔåõ2¡4z·,~ùõñ›÷îi…–úò¥iLÁ¼¡F(eµÉÛÖ0]òŒ¤©Ê,——×LÈF/ÀæÐíÝ„ÄÍKì.J,ª}¹êšýqB¨ŒIÂ%;ú4!f 甩Œ1’IɯôUþ™JZÝ×;4¬,°ÆŒ¤±pR™ƉJTlžò}=!… ’¡«¦”u^m@+67Õéé ë?á ÇþüÓ¤£ð”(šÆ¡£ü§‡û™ŠN¬_«”áÐkÿ’˜wb$É”JœåªM‰€2!)V$åT  - —ÅX²PT¥Ôôcy–&rœMm1–irÍv -º¡»gqF“êlÿži¬@`XXï4S,Ðà¦ÚV›|‘Qgñ/Ð;–„RæL}ËÏìÃ~Ò|Á[ôÐR ¯ôo囧üØZqØîZCîJC3h¤USweÝyÝÌçæ±Ý•«êgJyY  -‹%§1á eΫ™õjÊ7¥ÙfÑûã®Zå›ÍѪÚüæ槨Ö×,ÖåL×@^7ûmÞ¡C“9÷HAÒKî1`šwÇ„ÚïëbuÚ£R„%2;Û£ã÷Ì',V"èñVÏBÊ#cmÓÙg½z Å¢"rm¨8Cš³ÙÚx‡ŒŽÆ~Q»q(Ä)A}<ü2#sgz¸ßç[C€ùkžZ£MçnmW:†b[ÕUÛísØù I»Ï”Æ(@;«Qmµ!,6»¤T8`Aã¨Y›ßÜü«*¢¶Ü?‚Û@á^¬8,¬zU®¯^½þÆ´2ŸM™'ƒ,8»`Øß©ß-ÚÃn×ì»Öê³Ù˜†¶6T¶y]´F=§·Ýë”N)”f$¦‰ƒÏi}–1ã„ŠƒºjSu¸¾ÀåÇU¹ë&:H ¶"È×üm—ﻉ®`ÿÉ’ØíÌ0¬I#BÉ“S‘ûrV(„ú™tö|†î@£§‡êšE«óñ“Eó”oZô"%¢ºé¬Âf„4½ªgœR -uÖ˜HËÌïW_´Füê!¯ërc„o›¢çàõ¯ÖÆg1æK™„ wl¸ö×it˜RI(ˆüRyÁß84…Sû©êšƒEļ¶Úìpm´MíÛ§ -½Ñj»ÛäÇdm~oy[¶ýCÞ:´ÕËû/#¨…ä­˜0J(géHG†"ÆHìÒÏ…ÃÿQ+:£’Ĭ1åòûUŠ˜Ï<—Ÿ¶3‰äxÎ:ÿà[W÷S‰KB §¡c{1@¶7)‘ó˜ŸJÜ]”ˆKi*Ø Âd/ïxQÞ‡r*íaþÊ,ùìÔ"éTì˜Î2ö¹QèA:¾¶l„÷Sp+Ò …Ž"Yšõ;ö$²ÄÇÇAÇ!*"8w#­ì46Öæ×ì²~qVõýhy:O–’â^vÁÛ{&íìq:åì–Iûz¹iòbƒ!âPï\§žiÔkÀwqœÄA·oM·zè°€0š¼?¸xÀÄ”}|‰Ö Œ`[2k sX -ÓxÞB®3&r\¡À ålöÖgTÈ M~7!E»òD]%®¿Y1nEk˜oó®+·;=7ÜçÙœžÈ\ƒ}¬ZOÕfr­z8sÑ¿…µOe=‹_°0ˆL“ô<~ ¹æñËsµò§yô -å²ÿ+àåbÔ³í#Ù‘I§#ÙÀ¦/êüN;a’öØÅ“Ìx$sóØÏ»!÷^/-–‰$ÑX†ïë¦e(•ŒXæ L¤$NéÉ©d5À2å±L9,S¡.ðì±M ± kô86làíÙRø-+W°0ÄÆ0a6Ô2;(ªöó)hÓPÉ´¹4ª!4q6Ø€¡ß@à!_k0CfÔÁÖCnàѦìôP%—Ñs÷×[üØ-x++“6²ˆS–S8à¦XÒo5<=Íð»iim\tWº£Ç›Y¬àx¤’ ±Îk+<—V½éªõñÿ*ß=kË%FÆœF‰Àšo˶tŒ×on_½üWP£mçÒ ³¹ÇÒ·˜¹šÓÏý€ëÌÜ;.“ûôõÌ "Ósz¡gÏ5î:¬ ‰˜Äxg(èÛWDâN-“‰êýöm)@£ÿ¸gÐ n†"sç¥IT4–«±„ªà¹üXµ]Uß÷2†½¶ö„€‚›Ç<„ªÒ$3YUˆåYŠã8ÊCþXš‰­4¶ÊÄa+~Óš÷k  ¦6ÔÜÖÀq]’ NâÄŸÒ KVåƒôÕŸ?==8}AOÿ™Ýp€œ›ÇÙô‰PëÃöÎ(˜b%Ó'1Ölyˆ‚n{ÑЦ÷ŽðD#lª¢=ñüº,]}ÈBdùÐÔ…S}>Øz¿[ ê†]µuŽj¬eìTί/Ê^’ µ…!×™õå¸tm¿Ë»v\ne°—+y¾[Ï5î7\\,W:þ óæ}ÕY[ø-Û züª ­î wÊ`¬7k<¼(F»°1 ¹æç¹p ¿ÊýqÓ̃ÓÙž{pu= NA߷ךû{é0etÁ&¬ \`ÁxôÃè…ù`… ©6á’Î’˜¶,Ñ~\~ÜmªUÕmŽ†^Tf®:+2uyÔ œB÷¶«J{'VLyïﮣÇùá~Ëì/‡Le!2 fOT' øúãu}3Ä^K™€1EX*]…ÄÙoB¦°ñ'a-¥±‚ ž8ņwmnt¢N`¥9Ñz[©8+þzÌúØk5Ô^q’òÔ}ª=ÄFëBé}îd»@WÖ êX¶%|Äüù¶»S3k¹8KümJ{|<-‚™‘å `NZNÆ<þËÉ ¢éŒ<x†¦’ 5ü!×xp\úJæa»+îÜ)&¤<¿-Wùê¡üm‰Èÿ~>ý…؎婃IÍL™ˆ*/Ül»JÑ õ\㑆óEìØìd¨ßÀP¯—,³ ‡èóxËIzô¶ˆŠr6¹„Dˆ¾DǶÙû+_"f'•Óm¡ÐJœžÖ#Ùá•2M@·˜ô2j’ÞA6dŒ?,› >f£—BiA–æëٙÌIz¨äÂAá€iÞÿ“ÙÚ›?’yƒŒFd*=Û¹gõîP1ÍXÐýî^ÐÔ•éÒÁÝ)ÌU¹ˆ¶ù¼…£÷šEíÁ ¹õÝlØ}F_ÓÃçA-0µuJÓÉß÷†Ðçâ4õÕ5l7{‹‚€=`Ü_ýó%^×gÃ3Áö¾íÌ›bçÂе2WO‚¯ÑEèú…Žÿ†œ¾FŠT{–¬ãYíƒÀ°Ü™wÚó°[çy`3÷FÀ/,ƒ½A·*Ûvî_ `Fñÿ&f›úëøßúÿÆÀ{i:wT§°fB¬Rh~–Œ¯^RXý ŸPýßz7endstream +1006 0 obj << +/Length 3394 +/Filter /FlateDecode +>> +stream +xÚå[Ý“Û¶¿¿BoáÍX>‚lŸœÄN™Ú‰ïÒ´ãø'RwŒ%R©;Ë“?¾»ø")‚’'éL;é܃Àår±X,~Ø]àØ‚Â[È„$Ï*‹‰¤L.VÛ+º¸‡wß^1˳tLË!×W·W_¾j‘‘,áÉâv=•š¦lq[¼‹ä$Ðèõ󿿸^rI£›o¯¥Œþ?úùÍ÷/Þ>¿VqtûêÍë›ë¥¢Y}ý·çßß:ŽË2¾~óúå«oìå\¿¿ýîêÅ­Åp¤Œ +¯WïÞÓEþ¥rñ”°,ã‹íU,‘±Ž²¹º¹úÁ ¼ÕŸ†,KJ¤Œåb)b’Bÿ!.–L$Ú! +ôf)‡†ÌH"¸ðÆÙÀø)#2ËäÂs¡ñë|[ËÕC¹úð©©ËëeBiônYüòëã7ïÝÓ +-õåK)Ò˜‚yCPÊj“·­auÉ3’¦*³\^^'$Œ^:Í¡Ûº€Ä1›—Ø]”XTûrÕ5ûc@¨ŒIÂ%;ú +³„sÊÔbÉɤä¿Wú‡‹*ÿL%­îëf_VXcFÒX8©¿„q¢[†§|_¤pA2tõÏ”²Î« hÅæ¦:=dý'äÔŸ +: +O‰¢iÃú,cÆ ';tÕ¦êp}-Ê«r×:H ¶"È×üm—ï»@W°ÿdIìvfVЈEòäT侜 +¡~&=Ÿ¡;Ðè顺fÑêÁ|üd‘À<国H‰¨n:«°™!M¯ê燔B5&Ò2óûÕ­¿zÈëºÜáÛ¦(Á¹xý«µñYŒù’D&cÐ;6\ûë4:„T +"¿T^ð7MáÔ~ªº‡æ`1¯-€6;\­ESûö©Bo4€Úî6ùq²‡6¿·ˆ¼-Ûþ!oÚêåý— ÔBr€VL%”³ô¤#CS$véˆçÂáÿ¨QIbÖ˜Àrùý* EÌgHžËOÛ™Dr‡ÑE–²±5‡SïÝÿ¾z,ë~’gç8Î(¼° +†\ósì¹Ì¯! yMò(=7É“´yvzþ˳C’,žµ¦çššód–4„J#{Þ@&[Ü +þäo›W˜{æ:†·9àïõˆuy¦Ä_pñÇe|œº]»=x4 ¤øÒ—AÿîcÏ8¬Î³õ\S‹ŽÝ ”aldÒ·½IÏN¶õ “HnOx·9d¢6œó A‰<¾à®3>á¸t¡k_–Ÿ\±üO‰˜HA ËÎÕsM­:ö ˆš!)äc³ÞÚ]‰Û»qtØyW¶æë +”¥ð§8Öù¶Z™ K™pLØ4©núW¦UYAº µ´¥AbqZŠ0Õ.ÌS3Þ¦k0Ò¤þ<52[Kói+<´Fù²ÀÊ‹!bÔq^ +)¼¶>äVRYT%›º‰ŒîJój›åð)È¥¾l­ËeXbñÐqjjl‡†½;â/C£AÎmíφ µM Õí ³I¾±µÊ­6?¶!A¾7LWóh‹4ú¥9ìë|c\¨†œugÛ#½Õ +€¿±\¶4DÇó`×÷’sóqW‡âƒ>ñÁ‡‡ÐÖöÎ;ûì*lzb°ççû™÷"|0Ö0ßæ]Wnwzn¸Ï³9=‘¹ûXµžªMp­z8sÑ¿…µOe=‹_°0ˆL“ô<~ ¹æñËsµò§yô#Ê +dÿWÀËŨg-ÚG²“†#Ù‘M_ÔùvÂ$í±‹'™ñH æ江wCî½^Z,I¢± ß×MÿÊP*+±ÌA™HIœÒ“SÉj€eÊc™rX¦ÆºÀ³Ç65Ä6¬ÑãØ4²·;dK=Fà¶D¬\ÁÂÃh„ÙPÈìðL ·yø ¨ÚÏBЦ¡’i+riTChâl°/C¿ÀC¾Ö`"† ͨƒ­‡Ü +À3¢MÙé¡J.£çî3®·ø±[ +ðVV4.&md#¦,C8à¦XÒoŒjxzšáwÓÒÚ¸è®tF7³XÁñKßbæjN?÷®3sï¸LîÓ×3G!˜Ö˜Ó ={®i×㚈IŒw†F}ûÊ€HÜ©e¨ÑoÿÐ6‘4úkpÝÐè†`(2w^šDEc¹KA<—«¶«êû^Æ°×ÖžPp󘡪4ÉL–Eby–â8Ž†ò?–†fb+­2qØŠß´æýÚÅA@¨© 57„õðcZ—ä‚“8ñ§4Ã’ÕÈò‚AúêÏŸžœ¾ §‡ÿÌn8@ÎÍãÆì úD¨õa{gL±’iŽ‰“k¶|Œ‚n{ÑЦ÷Žñ‰FþØTE{âùuYºú…Èò# © §ú|°)ô~·Ô »jë:œÔXÊØ©œ__”¼$j C®3ëËqéÚ~—wí´ÜÊ`/Wò|·žkÚïxq±\ xÔñO˜7ï«ÎÚÂoÙØÐãWíØêÞp§ Æz³ÆËbT° ÓkÞxž Çðë¡Ü7Í<8í¹§I×apõ}{ñ¨¹¿×™SFlÂê2ÀŒG?L^˜V¸‘j. é,‰ù`ËíÇåÇݦZUÝæhèEe誳"S—G@Á)4qo»ª´wB`Å”÷þîÚhô8?Üo™ýåÐY6"óÇ`öD59Àׯë›!öZJÆa©tg¿€L`ãOÂZ4Jc@:=p‹ ïÚÜè¢N`¥9Ñz[©8+þzÌúØk5ìEq’òÔ}ª=ÄFëBé}îd»@WÖ êX¶ >bþ|ÛÝ©™µ\œ%þ6¥=>Ë„`fb9˜AËɘǟc9™AÔ#‘çáÏÐTr¡†?ä:ŽK_É£¯éáó ˜Ú:¥éÆäï‡ûCèsqšú궛½EAÀ0î_ýó%^×gÃ3Áö¾íÌ›bçÂе2WO‚¯ÑEèú…Žÿ†œ¾FŠT{–¬ãYíƒÀ°Ü™wÚó°[çy`3÷FÀ/,ƒ½A·*Ûvî_ `Fñÿ³Mýuˆ?üoýcགྷ4;ªSX3!V)4?K¦W/)¬þ„Tÿ7ˆ²endstream endobj -965 0 obj << +1005 0 obj << /Type /Page -/Contents 966 0 R -/Resources 964 0 R +/Contents 1006 0 R +/Resources 1004 0 R /MediaBox [0 0 595.2756 841.8898] -/Parent 944 0 R +/Parent 984 0 R >> endobj -967 0 obj << -/D [965 0 R /XYZ 56.6929 794.5015 null] +1007 0 obj << +/D [1005 0 R /XYZ 56.6929 794.5015 null] >> endobj -964 0 obj << -/Font << /F37 747 0 R /F39 863 0 R /F53 962 0 R /F14 685 0 R /F21 658 0 R /F23 682 0 R /F48 885 0 R /F55 970 0 R >> +1004 0 obj << +/Font << /F37 779 0 R /F41 910 0 R /F53 1002 0 R /F14 717 0 R /F21 690 0 R /F23 714 0 R /F48 925 0 R /F55 1010 0 R >> /ProcSet [ /PDF /Text ] >> endobj -973 0 obj << -/Length 3750 +1013 0 obj << +/Length 3749 /Filter /FlateDecode >> stream @@ -3017,83 +3121,77 @@ V w»«Ëýn@ß~ª9O;2G´ã…Ì‚ø×ûíãÁQ¶ÍàäÔ;™ÿº¯w÷³tÓ ø'ùucû<xؘˢ*R40’å)°n ž”Ê¿Dß̤›³ÃmQ€‰tM¶6žÆ¯ûÆ”(ŠËP,k‚(lK Þ H!nÆ ¨(ïÏpÒ)öðºq©-lÌ®ŒT#UóÐŒXÈ ¶ÞDÛWÖwËÔ:è-† ™RbŠs£yÀÊ+P[A€Ü6m±sË{¤x„3ý}Ì•i°`Åù¬rªN9d£y™à×°×¾ô-P§€>£Þw‘i‹ûSp’§ùa÷ÔKØiv"VAÊ•3¾ðªC„U‰$¡ã”o*ó)tÜ -9dì,Ë^ŠÄ¥:^D×܃a¦±Í„¿šÍ‚0ë*Ž6M¹!}¦É‰7xØÖEçÐ{¤wž|HãÐÑòÜ%?ÙSWÜæWhÓl\0€QVr˜u…J3L›@Š0&ti°ÑÃÓyª/+e–9ð†…«\m¬kÍÃeE]ÓcÙû¡þuèYÂSáµÁ%€ë“Š˜büaçB?Àw"F‰DCñ3sŒÆ•âδmõ±ß1´*ÉŒò,$1éMH<6çY 2N³ÃËš“òÀÖMžúäe,>Ûªê‚~6½-Û`äú6\ЂT•+Düûø°w'Š3¶¦€>:x§Üw1°¾ò—.<Ô0KéŽîøå±()êã-à‘»>âØ×~w Y¬‡©jÎÌBÑ ”Ë;õ¼Ê©è AhŸÃ*[º&††Xàúû‡ 9=øvñ2 ÷ÊŒ88­ô;ðÛQ•Aõ -Í““Ô¡ÄäŽÅE‘&à8ÅäZPß4¾³æ?ƒÁÎ4ùß…JE:séê±Ø 6]S©OÒ`T”eý8ºq÷Lƒ ¶JSF¡|‰¤ÒÔQ¹* -ßxá ¨ìè:@¨²^àsÄþGËØl‹r½­tü<Œ…ƒS=ûŒ×½Î]R`ñf?‹ Zç®5guã,¼î«b¨×©CZwe_ùû ?bíÚY¤ÿøî­ûTR+ãoF°m-^¡ Þ7™KÀ¡Ô{l*¦rTMS˜†çy. ó{w“#Ù‰eo™³\ž·P“˜\Ë8G®ðžxY\˜BUæïØ…h…Í´¤ü…µ8@–†Î² \‚Ï— ®%þbàÌ•[8Ay=ŽlA¦r ?euQ6&1ƒý‹ì‰É¦´uÙ˜UkX·†ƒ³E8¤I,TO'½¨aê| h­@°Y¶ Ñ'²}Î#±‡_ÏD"ñ^*ËÉê¡@HT¬´—)ã ~¢Å½…ºÄÅ6›Ÿ‘ˆR>W܇hûÊún™Z½Å°!SJLqnô/8@y¥@êb+Û¦-vnyO€p¦¿¹2 ¬8ŸUNÕ)‡¬s4/òöáÚ—€¾êÐgÔû#2mq¿sÊ®Qò4?ì~ƒ:cc û¢"ÍNÄ*H¹rÆ^uˆ°*‘Ä"tàòMe>…Ž[!‡ŒeÙK‘¸T' ƒèš{0Ì4"¶™'*ÑÂ"1\ XBù#˜d†‘”j@O’ŸÞ᳚ZÖøò‰’ÃЗØW§³°i#r¹Œ¨LºLiL†‚è͇ð—@³YCf]@ÅѦ)7 Ï49ñÛºèzôΓi:Zž»ä {êŠÛü +mš æB0ÊJ³®Pé`†iHÆ$€. 6zx:Oõe¥Ì!Ã!Þ°p•«u­y¸¬¨kz,Ûb?Ôã=Kx*¼6¸p}RSŒ?ì¼BCèãøNÄ(‘h(~fΒѸrCÜ™¶í±>ö»1†V%™Qž…$æ ½ é€Çæ< TÆivxYsRغÉSŸ¼ŒÅg[U@½SÐϦ·eŒ\߆ º Bªr…ˆ_cöîDqÆÖ0 ÀGï´‘û.ÖWþÒ…‡úf)Ãу¿<%E}x´» 4£[;?&WRPe“¦béóìÊLÏ“G|´™V†wQ͉Ë0N•<‘*;ò1a)ˆ \šÚM–h!=í©¢q» ‘ÁÀ.§©ž~É#GÎ +YÅæ:»PA€Öº›~ß:I²v€ÑƒUÕL;UK•‚«>ÐNÇܬ2ëúDnV5cVãÜΡðµ`TU¡=}AèæiðìËÓÂ` ¹±Šät'â{zI3 ¸U‘è`dРú!5‡Jç(à"†­ êk„ÐT¡Í Ž6ç^ÿÜí(Ÿú7Ô‰224pŽt(K˜&A®¨˜ó<(¯-¢òÕûÑmvx¯÷›/4Pê ÎÀü½UEla«Ý¼>Õô0<ÉÁ¹#Áªœ´d:K­#2SÊŒŸ•é²z€¤O.1qzѹ4¬Dèoœà€'* æå7zßã÷*6×Öä’$ù>Gub앯ju’ž.]œÏÅ„Ym÷6Ô ×™‚~¾­½£‡aÕo kTE¸]ÃËW‘¯ls@»ºv‹(·B|å¸/ZÛŸ›QÙ4PÆZ•<¹?Q/kÜìm ¥çcw¤l°¸m>×±<îg!TDÐ +·.týðzMèÀEÄøK¾o€Õ˜ø×Më€q=Gé^+(JT×ìŒÈ’\†dÏîuÑ*èј¢Cr-§¸WÊÑ _ôJ ÊÇ^ PΊ>ù©§™sÙ* JUˆçEûÐïÀkl#DUÕ[(4OVLR‡ “:Eš€ã“kAiü}ÓøΚÿ ;Óä*éÌ¥«Çb7ØtM¥>IƒQQ–õãèÆÝ3 ‚Ú*M…ò%’JSFåª(|ã…ƒF ²£ë¡ÊzÏû-c³-Êõ¶Òñó0"NõìG0^÷:wIÅ›ý,&h»ÖœÕ³ð^¸¯BŠ¡^§iÝ•}åïC‚üxˆµkg‘þã»·îSI­Œ¿Á¶µxI„6xßd.e‡RGìA²©˜ÈQ4Mažç¹$ÌïÝMŽd'b”½eÎryÞBMbr-ã¹Â{âeqa +U™¿?`¢6 Ð’òÖVàY:Ë6p >\‚º–ø‹K0Wnáåõ8²ýa™Ê-ü”ÕEÙ˜Ä ö/²$v&›ÒÖYdbV­q`ÝÎá&±P=ô¢†©ó- µÁfÙ2DŸÈöñÌ!dL^-5ü„D@aÓ)‹?™çHÐÑfaã $ÖÖnè¾Ð~C˜ùÆ$ Ü1e®g9½r™©éiâέ¡Ìg\>Só«D´û’®-J×´=¦M¼¸ÀW‘‹ôH–E…úë„x!ë’,Ïä1Ý¡Ër.Óž}6dEvÿ|P¬Ì(-3qˆOF_¼zŸsTcÑÅ‘«±f Js›§Â%ƒjQÚvýäß8à¿stÞ¼éšmÑžº¤‚Ép71wêî—ŒÝÍ¢9Á0%ÅBX­´£þžþsê3t©üv<Ò«‡§¿ûõéË}LGŒ9ñ‹d)yÇî‡g‡œ‡oÙYÿ/Uûtendstream endobj -972 0 obj << +1012 0 obj << /Type /Page -/Contents 973 0 R -/Resources 971 0 R +/Contents 1013 0 R +/Resources 1011 0 R /MediaBox [0 0 595.2756 841.8898] -/Parent 944 0 R -/Annots [ 975 0 R ] +/Parent 984 0 R +/Annots [ 1015 0 R ] >> endobj -975 0 obj << +1015 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [120.1376 365.8002 176.3563 375.0156] /Subtype /Link /A << /S /GoTo /D (controls_statement_definition_and_usage) >> >> endobj -974 0 obj << -/D [972 0 R /XYZ 85.0394 794.5015 null] +1014 0 obj << +/D [1012 0 R /XYZ 85.0394 794.5015 null] >> endobj -971 0 obj << -/Font << /F37 747 0 R /F23 682 0 R /F48 885 0 R /F55 970 0 R /F21 658 0 R /F39 863 0 R >> +1011 0 obj << +/Font << /F37 779 0 R /F23 714 0 R /F48 925 0 R /F55 1010 0 R /F21 690 0 R /F41 910 0 R >> /ProcSet [ /PDF /Text ] >> endobj -979 0 obj << +1019 0 obj << /Length 1632 /Filter /FlateDecode >> stream xÚÝXmoÛ6þî_!û`Ãñmý”iêM»ÄÉÖvÅ HŠ-T–2Kn ýï;Š”,ÛLtÁ6 þ`R<ÞŸ{îŽ 0üHÀšê@êqLx,G8˜ÃÚɈ8™° -‡RÏf£ƒçLiAE0»èR+E‚Yú~ÌCЀǧ‡¯Ž'!åx|~|6á|| íüõ›ã³Ã‰ŒÆ³éëÓóI(±ŽÆG/ßÌ:‰¯ë8z}ú|zr±Ñ3ù0{9:žõ§ž”`fŽðûèý¤pà—#Œ˜V<¸… FDk,GgˆGŒuOŠÑùè§^á`µÝêEŽ`D™ >èô:BŠ”ää FY‹]\Ì«UÞ,–“P`<~²XÆI¸Lù“§æp`!„mšsÚJ×Y²Ê'š°³»+ÊËéÉåúŠ]–ñѳå›Îßž?kÞþÍß–—xzBïN.æï–únzrfwèäWešüS¿—dàåÁsr2vª™-òÚRçWŒi‘}o'ùµû/ë&.Š,µÓ¸¶ -·£†1Ò¸„[Y“ïPR•×CB¬¸3x[­‹ÎHQT·vØ,2;Hªå2.Ó<æC¢€SJpI¤•­Þï¬h¤†©‰´”Â6.ZèWYQÅ©ÇÓÐmpŠ-bM.I.•e–4vÒ=ì£h§7ÕÊ hÎìNáöÇë:s»nPÆK7ê¨1T¾š5n}5 )b£dt~iwUî)ª$.|ô…¼Zä¥Cü6³æìl5QãuYæåÜ­B>ÚÑueÂÕ/*M»±*¯€@M¶ÌʦöEo¨k\h··[7)I¤(–Û ~6;‰c§Ž=v{ûמwQÕÍS;ÿlÿ wê-¹MFY1—Y^ó_Ì,wi“Dý_ÄÃK·,¹‰F;µÉ=„¬ƒxåK;E•R2¤óN±§J Fµ -8PvH¹§H›âà-öa¯1ªÜ¯äTiĈËÆGsÀ}غ¬µç@®žQŽ'r;÷ÎzjÙÚj#ÃW€ -‹¨„¦ͳÒcZ0D¥ê„o,qç«xi-Üæ… †—Ÿ²2‡wv-±é²±/Dà bèÌ}Eú²ä½Û¶[C&ú­…»j yÏ°vÌ2F‹º²x1&PD‰ÜÎè4¯oŠØxL¨+„ÁaVÖùú¦*Sƒç>Œ„`2wþôi¹ï8SЩu'8dnk2n¬MpÞ>*³¶™À£¶¬Á“8Ý<ð`†Tv475.½D¤äªgR‹ßaÑd«2nòOÄ®Ðr,dýˆÊh;³­£¦’uYjkŸjrú˜Öî c‹šîãÜB`>s©¾¾qƒ„)DBë!™ü Å!­ a»\j «@eå .«4¿¾óXSPU5å]PD…èDã¦o㨭Gšj„ b€ G„`Ñßé$„ËÜjóy{ÙfJl„tD¢vÓQ¶jâ¼Å›Œ/N§¿ØQíöÄö}ž»ëé:¥í:¥Y®ìŽ&þØ­ÞdInLì‘?šŠæ)Á -q†£>ÛÛËÚm'Pû#%†i‰"ÍÈCº kß3øN?ù¶]ƒk˽Ø}t¹a‡óNCëÎ2ÅÕ·³-5ERIÅNC1Š,cϧ'/.Þì‚D$!ÁY0Pø÷\ì5îû¸CˆIŒ-' ûëÛô†ô¸/A®¥¾LÔ‚H~C-èêÍæêºãJC:Äu¶G¶®7„èǃ‘i†$–ãæMõ_e/}LöB_÷ öúJ¸eH¬;úÎŽÏ^ÝÏßÊG#ðž›~ý|0ƒ“"ëêdßF;þeäÍý{´“þ¿9&0R Úõ—9&"—´ãØôtv?Åb{^ú)6tó Ø£ô¿B1Ç’¸ÁMQnùÛûï©HjÌÌ2¼ÏQ‹Ä®¾ÊÚ‡~–Ü|­…k3SŠúùop;b4€«¨ÑeØ@ÔÞGÓîû¥“¸þ¸¸:‰endstream +‡RÏf£ƒçLiAE0»èR+E‚Yú~ÌCЀǧ‡¯Ž'!åx|~|6á|| íüõ›ã³Ã‰ŒÆ³éëÓóI(±ŽÆG/ßÌ:‰¯ë8z}ú|zr±Ñ3ù0{9:žõ§ž”`fŽðûèý¤pà—#Œ˜V<¸… FDk,GgˆGŒuOŠÑùè§^á`µÝêEŽ`D™ è"2€Ž‚"%y ¹F‚QÖbój•7‹å$Ÿ,–q.Sþä©9Xa›æœ¶Òu–¬²Æ‰&ììîŠòrzr¹¾b—e|ôlyŦó·çÏš·?Gó·å%žžÅ»“‹ù»¥¾›žÏSªÍÚN}H5RJêm+ŸwlÛ(W7M^•µ5þg+áÝf×ñºhÂ:[}ÊVVœP‰0üˆ÷TÝŽÙ:ùU™&¿ÁÔï%xyð€Ü€Œ°jEf‹¼¶ÔùcZdßÛI~íþ˺‰‹"Kí4®­Âí¨aŒ4.áVãAÖ$Æ;”TåµÇÅP@+î ÞVë¢3RÕ­6‹Ì’j¹ŒËôù(à”FiFe«÷;'ª†©‰´”Â6.ZèWYQÅ©ÇÓÐmpŠ-bM.I.•e–4vÒ=ì£h§7ÕÊ hÎìNáöÇë:s»nPÆK7ê¨1T¾š5n}5 )b£dt~iwUî)ª$.|ô…¼Zä¥Cü6³æìl5QãuYæåÜ­B>ÚÑueÂÕ/*M»±*¯€@M¶ÌʦöEo¨k\h··[7)I¤(–Û ~6;‰c§Ž=v{ûמwQÕÍS;ÿlÿ wê-¹MFY1—Y^ó_Ì,wi“Dý_ÄÃK·,¹‰F;µÉ=„¬ƒxåK;E•R2¤óN±§J Fµ +8PvH¹§H›âà-öa¯1ªÜ¯äTiĈËÆGsÀ}غ¬µç@®žQŽ'r;÷ÎzjÙÚjZæ +PaÑ•ÐÔ¡yVzL †¨Tð%î|/­…Û¼0¡ÑÂðòSVæ’âή%6= PV"ö…œ!B ¹¯(B_–¼wÛÖbkÈD¿µpW­!ïÖŽYÆhQW/ÆŠ(‘ÛæõM u€08ÌÊ:_ßTejð܇‘LæΟ>-÷g +:µî‡ÌmMƵ ÎÛGeÖ6xÔ–5x§› #ÀÊŽæ¦Æ¥÷‚¨‘”\õLjñ;,šlUÆMþ)ƒØÁZŽ… ¢Qmg¶uÔT².KmíóQC.PÓÚ}aìqQBóÃ}œ[LÂg.Õ×7®Bx0…Hh=$“?¡8¤5!l—Kmáq¨¬œÁe•æ×wk +ªª¦ü!° Š¨hÜômõ õCS0ALp!ãˆ,ú2„p™€[m>/c/ÛL‰ŽHÔn:ÊVMœ·x“ñÅéô;ªÝ~˜Ð¾ÏÂsw ]§4¢]§4Ë•ÝÑĻ՛,É €‰ÇI{ÁûÞÊŵ}šfu²Ê¯ì% ºr¹cm«EõWE†|·¼Ù"«]¤GPñª[í{úî[¯¿`iÔ'òGSÑ<%X!ÎpÔg{{ÙB»íjD Ä0-Q¤yH7aí{ßé'߶«ócpm¹×»ƒ.7ìpÞihÝ™B¦8` úv¶¢¦H*© Øi(F‘eìùôäÅÅ›]ˆ„"$8  +ÿž‹½Æ}·c(1‰±åä‘a½s›Þ÷%ȵ³ÔW‚ ƒZÉo¨]½Ù\]w\IcH‡¸ÎöÈÁõ†ýx02ÍÄ`ܼ©þ«ì¥É^è+ðľB_ · ‰uGßÙñÙ«ûù;PùhÞsÓÏà¡ŸfpRd]ìÛhÇ¿ì¼¹ŸbvÒÿ7ÇFŠA»þ2ÇDò’v›žÎî§Ø@ã£QlÏK?ņnþ{´“þW(F àX2¸)Êí/{_á=I™yC†÷9j‘ØÃÁWYûÐÏ’›¯µpmfJQ?àínGŒp5º ˆÚûhÚ}¿tR×ÿHê:> endobj -980 0 obj << -/D [978 0 R /XYZ 56.6929 794.5015 null] +1020 0 obj << +/D [1018 0 R /XYZ 56.6929 794.5015 null] >> endobj 126 0 obj << -/D [978 0 R /XYZ 56.6929 466.6686 null] +/D [1018 0 R /XYZ 56.6929 466.6686 null] >> endobj -981 0 obj << -/D [978 0 R /XYZ 56.6929 439.3642 null] +1021 0 obj << +/D [1018 0 R /XYZ 56.6929 439.3642 null] >> endobj -982 0 obj << -/D [978 0 R /XYZ 56.6929 409.8468 null] +1022 0 obj << +/D [1018 0 R /XYZ 56.6929 409.8468 null] >> endobj -983 0 obj << -/D [978 0 R /XYZ 56.6929 397.8916 null] +1023 0 obj << +/D [1018 0 R /XYZ 56.6929 397.8916 null] >> endobj -977 0 obj << -/Font << /F37 747 0 R /F39 863 0 R /F23 682 0 R /F48 885 0 R /F21 658 0 R >> +1017 0 obj << +/Font << /F37 779 0 R /F41 910 0 R /F23 714 0 R /F48 925 0 R /F21 690 0 R >> /ProcSet [ /PDF /Text ] >> endobj -987 0 obj << -/Length 2336 +1027 0 obj << +/Length 2335 /Filter /FlateDecode >> stream @@ -3106,31 +3204,33 @@ xÚ¥XK A/h5þ;“çe¾.àŠœ»ò?‹‡tùsç÷þãص 8!†BgVo„u)Ü*M3_t¤¾èxóújJ »ÿ=Vˆ¿]ÄM¦›\ÛÅ}øZúêñ±w¶À“½SÎUØ,¢N€’­-ÑŽÝ|XWÕm=ÆQZX¶¬ü1.oÌŽ ꇶGí®}ÿD,€…Š¤«ˆ&ôÁVj}]ê²-uÃR«ß_”zÁ¿1­ îÒjÜbLj»Ãb(ÊÜñ3RÀ†zIl‰îçYÔcõ‹|™ -iVQyÔXCröš’>CãXÝÙûébå&»²=“œpØ®0ÀLa@Ô•»ósd$Ëthq y³\äÁ¯‰ÒîØ·M¹댪= °®l)þ ·(éåõ)œIÇâÂÍkâ)ºŒ |‘Š~*-à"i±4™”[  dV)ÀÑEN?ÕO»Ðô±Ù•§º‚Ýhi×|.ñ #ì³!v.åV0cL>§]õÛtkRƒx&D¾Y.ȦàûŒØR¦E.Êa­,˜ D:—ÜjQ M¶6ãÞQ}nITØb™l]ÁZµ~èg%*\4V¿ÁÑB@ã>8”¡ ÷nc@*Ã6õÁëšUû†4Îóˆq¿išélªW \°Ühõ72‚ˆé—yùd†å ¤¥»ìƒš¤¨‘u¨Ës(ıÿ5äB™üÆ5]•œ‡¸¢ÚíÛ×0/hjßûç"œ¤h£’óì{p2%?Þ¾ÿ‰¦)ÈÁô AC×A¦í{{(„|Qp]´V¹—ø@¯‚óØã“B 2ô‹iú¡î꓾a0Pòµe>%$ïoô:úLi:¿4”¡9ÚÙl:ñ>¦;bä±?5_m(T/ï"ø½‚†·÷ bC5ˆQ¾yèðÕÞ¼.G°ëú¯#`ãm8ÞÚÞ2‰Óøì8՘¡lNÓðì˜Æ‡Ç˜³þèϧ.äCãXÝÙûébå&»²=“œpØ®0ÀLa@Ô•»ósd$Ëthq y³\äÁ¯‰ÒîØ·M¹댪= °®l)þ ·(éåõ)œIÇâÂÍkâ)ºŒ |‘Š~*-à"i±4™”[  dV)ÀÑEN?ÕO»Ðô±Ù•§º‚Ýhi×|.ñ #ì³!v.åV0cL>§]õÛtkRƒx&D¾Y.ȦàûŒØR¦E.Êa­,˜ D:—ÜjQ M¶6ãÞQ}nITØb™l]ÁZµ~èg%*\4V¿ÁÑB@ã>8”¡ ÷nc@*Ã6õÁëšUû†4Îóˆq¿išélªW \°Ühõ72‚ˆé—yùd†å ¤¥»ìƒš¤¨‘u¨Ës(ıÿ5äB™üÆ5]•œ‡¸¢ÚíÛ×0/hjßûç"œ¤h£’óì{p2%?Þ¾ÿ‰¦)ÈÁô AC×A¦í{{(„|Qp]´V¹—ø@¯‚óØã“B 2ô‹iú¡î꓾a0Pòµe>%$ïoô:úLi:¿4”¡9ÚÙl:ñ>¦;bä±?5_m(T/ï"ø½‚†·÷ bC5ˆQ¾yèðÕÞ¼.G°ëú¯#`ãm8ÞÚÞ2‰Óøì8՘¡lNÓðì˜Æ‡Ç˜³þèϧ.ä> endobj -984 0 obj << +1024 0 obj << /Type /XObject /Subtype /Form /FormType 1 /PTEX.FileName (/usr/local/share/db2latex/xsl/figures/note.pdf) /PTEX.PageNumber 1 -/PTEX.InfoDict 1002 0 R +/PTEX.InfoDict 1042 0 R /Matrix [1.00000000 0.00000000 0.00000000 1.00000000 0.00000000 0.00000000] /BBox [0.00000000 0.00000000 27.00000000 27.00000000] /Resources << /ProcSet [ /PDF ] /ExtGState << -/R4 1003 0 R +/R4 1043 0 R >>>> -/Length 1004 0 R +/Length 1044 0 R /Filter /FlateDecode >> stream @@ -3143,12 +3243,12 @@ q n*Œ1½÷¨¾x¥Æˆpîâ‹&XîÃœ§³±è\íD¤ßä0}#XŒûž˜‹¸À>#^V°¡|2Îi‰9ÊÎr)`˜¢Xh¡Ò& „hb—H°Œe"Ãêʱ„£~Ï“a³tŒºìZDß!#Z¶ÚÂk! e'jÝ=§ _tsÙ¬ûÍ&­Nå@‚i¬ˆ3t%kÐE„\H–YZxÿ/U¥Ç™åë—Φ@±¯iW H þrÓGçX5¾ûû8‡´ÕªOª«t–Ô³$Ây°‰—BÒ›ÀÄ5©/¨vp÷o`kA“ôr ±ñœÓ4N.4Žæ&F°ÑTÆG%V½ Î'ÌØR5¬BÔ‹`qUžv-UÍ=ëÆåQv2ë_ ”¿­qq‚~èr¯Ú5ÌJ¼ð˜°h»P¡õ‹kÜàéÚýªå>Ò¸D °o»Îi¸CrT]¿MJ¥ ÆÖ¹’°;¿ö‹ûóZ¼¬ å[Ç-œÁ¤ŸBx¿ýpü|üÈÂendstream endobj -1002 0 obj +1042 0 obj << /Producer (AFPL Ghostscript 6.50) >> endobj -1003 0 obj +1043 0 obj << /Type /ExtGState /Name /R4 @@ -3158,127 +3258,132 @@ endobj /SA true >> endobj -1004 0 obj +1044 0 obj 1049 endobj -991 0 obj << +1031 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [470.3398 477.3512 539.579 489.4108] /Subtype /Link /A << /S /GoTo /D (boolean_options) >> >> endobj -992 0 obj << +1032 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [316.7164 465.396 385.3363 477.4557] /Subtype /Link /A << /S /GoTo /D (zone_transfers) >> >> endobj -988 0 obj << -/D [986 0 R /XYZ 85.0394 794.5015 null] +1028 0 obj << +/D [1026 0 R /XYZ 85.0394 794.5015 null] >> endobj 130 0 obj << -/D [986 0 R /XYZ 85.0394 769.5949 null] +/D [1026 0 R /XYZ 85.0394 769.5949 null] >> endobj -989 0 obj << -/D [986 0 R /XYZ 85.0394 580.0302 null] +1029 0 obj << +/D [1026 0 R /XYZ 85.0394 580.0302 null] >> endobj 134 0 obj << -/D [986 0 R /XYZ 85.0394 580.0302 null] +/D [1026 0 R /XYZ 85.0394 580.0302 null] >> endobj -990 0 obj << -/D [986 0 R /XYZ 85.0394 539.9341 null] +1030 0 obj << +/D [1026 0 R /XYZ 85.0394 539.9341 null] >> endobj 138 0 obj << -/D [986 0 R /XYZ 85.0394 315.9171 null] +/D [1026 0 R /XYZ 85.0394 315.9171 null] >> endobj -999 0 obj << -/D [986 0 R /XYZ 85.0394 282.0038 null] +1039 0 obj << +/D [1026 0 R /XYZ 85.0394 282.0038 null] >> endobj 142 0 obj << -/D [986 0 R /XYZ 85.0394 146.7217 null] +/D [1026 0 R /XYZ 85.0394 146.7217 null] >> endobj -1000 0 obj << -/D [986 0 R /XYZ 85.0394 117.3479 null] +1040 0 obj << +/D [1026 0 R /XYZ 85.0394 117.3479 null] >> endobj -985 0 obj << -/Font << /F21 658 0 R /F23 682 0 R /F62 995 0 R /F63 998 0 R /F39 863 0 R >> -/XObject << /Im2 984 0 R >> +1025 0 obj << +/Font << /F21 690 0 R /F23 714 0 R /F62 1035 0 R /F63 1038 0 R /F41 910 0 R >> +/XObject << /Im2 1024 0 R >> /ProcSet [ /PDF /Text ] >> endobj -1009 0 obj << +1049 0 obj << /Length 3348 /Filter /FlateDecode >> stream -xÚ¥ZIwã6¾ûWøú½‡$‚œ›Óížt^âtlÏò²`’²˜¦HE ­Vÿú©B(RbOó| vjùj‘ãëþâk•†ižä×:—¡Šbu]l¯¢ë˜ûÇUÌkV~ÑjºêÛ§«¿½ú:ó4I¯ŸÖ“³²0ʲøú©ü5¡oà„(øpÿöáîÇ»û§-ƒÛnV‰Š‚_~º¿£ÖÓÃíýãû»‡Gêþ©èÃÞ?À7¾Y -“àíw·Ÿîh^ò©·ïþuÇqp{ÿöîM½»ç3ÞßÝâ]Oÿ|¸{¼ùýéû«»§ñQӇǑÀýyõëïÑu ïÿþ* -Ež©ët¢0Îóäz{%••Â4WW?NfÝÖEFÆQ˜ˆ4Yàd"–8©ò00…œ|ÚTð¬T¶Ú¿V{jꦡ–ilG­®(Œ­»Ö4Í‘Wíëž7#_KYÛ~‰¿8Óûó‹n»kª~ìµ}Õö–Ï^Ÿ-v¥é«’:_ºÖ gAÏ´Ô~£›#VqæJ%îU¿EQÒT L)<±ÆåyøoÛõÔ(éhœÚn«²†KÝëò80ëÞ±æ*Slxý±5Ûº ùô(J‚çª0ƒåÃúá ÝДt೟ì:jئ;ðªMÕRË,½¦1û›8 ^ð€$÷ü€–{|Oì‚ÎÚ-®þ€¿ðTãhüÐÚ¾2%PœÉÌN²…6?¯¬sôç=ý%ôuB€o¬è»­Û¡¯¬;U€ÂÀ«êö…æLYÖ½Sšù»ÈŠ‰lKfåŽÅ¯ùTQkטdè7f!˜+)í¿‰_‰~Á'=)/ Ñ#T@l°½Ù3kÒQ¦~£ -ìfèËîÀ§u{ZWìݸE k4Ç6³t0Pw¤f¤ -þè†=>ÕuHi± Hk‹n¿ëö¦¯üM¥î±¬¦=RcÎ5Ò4Ç¿îÓ„o¼‰ìVòXc,o9Ž*°Èé·Ó¾\^Ƽî“Îu[êá3·¤Ô£å[PHÇÙÕýÞ´v]íùRuO>¡´˜µ“¤;”WÐÇÖÛ­ÄuÆkýìAÉï”)HXR–†©©¥óZKã…i =`¸íö[†C•}Ã(À)Ži ¸èGFœ€a ož<[0<ÁèË`€;}EÇ Ô£x@,5Ž!yÊbÎu°íœ˜s¯¯pŸú  3Ýš†ûMG`–NHƒN×>êàâ“öãI#Ëœy>Û}pÆ“³iÀ@ÕÚ/ZxâDͽŸ4h´4h“øF½˜Hqº£¶Þ”æØS’aNVø™ýM -’N5ž8ÕDÉP§q#¡û¶äÛlßíxýÔ Ë$"Êx9©(2 ŒòDÏUõ¾%ÓÁ±¨±1¯H^ÆŽF¶–ÙTŽÐñÓ†VŸ¸ÞÔmn§¾h,o¦Ò„=ëîä°vG^Tå0ªC6 -ØêöŸþn&SÁ»ÚšçfQŽ#%"ÊO@&bb4:°AtâÔ`‘ŒKÖÇ)Ä=Y–ÍX[×ûªúRÑ¥¦ıˆyƒÎ$”ˆ0ÇØÍKh%Càáôd¤‹Ð Çߺ×júˆ˜TîK—ˆ|J;’’ÇÚßòGÛ,‘’†zR¼žã ˆ'Nudœ‡YŽÁߥgEÏ’x÷”€¼-»¿ädŸ"Š‚»’œÜd­1f+ãàaÙ"D®Ó¹ ¸ãÌaA R‡*‹ô_ˆ! ã$öÂ%7™0§›Î”g“þ—çÔîŽWU;ªæ*Ñ2Œ¢(þŠŠN|m8>:±Ià6ª Æœk·9%¹YÅp„YÅ~æì~çÉÙÚÜãÍr’K>Da–fr⿲%·š—Å£[¥ñyÞƒ#lÐ}Wt¼×Aì4Ô%„†ÆºãClÃøq¼Åm¢³+ë¡u ,~š7KÐPSpŠ;0U‘@µtÄà’¶h†’;§±í©„í[ˆñ0ÎC½Ä)Œ-ñ{ò©°È?N8ìÃ.ÎÓy ‰Æ¾ÄEA†Zãr©8èžýÍ8LaäRó=¥NÑ)¨àÞ‰f<çä‚«\Öˆ‰YËG¯ý9lüÂ3:ø¼vWíQ„‚2=^.TÒƒ$LM Æ$o$9GfÀ$DÜÂ*æÃŒr¸`Íg:°Á©SKw)$h~$½[¯?Sö´Zï»íª„s DUmQÙ‡£)pÖ–ÍJ¦¡L¢dÎ[Ù!$³Yì -‘N¢ø¤ãâm±sÀÐy¼*E˜I•,Ú01¼ cÅò}œX¹`™ÍFsZË¡®îûj»ë©ãBC¬·8kulØ8ÔBâÆ7Ô=ÍÖܯ>¨±âú%…¥%h¬99Åñm÷õ¼cfË `€yšt©£Íš±UE Ò\[Ùb_ïNç8Ç+*Àú(˽döX̱ýÊiÊ¥ˆ” -•Ê½ˆŠ†óË¿¼Eé"7Éû¸„ry¼ˆÂ8V^[mø‚!ÇbLÎô%•ùyl$96z™ô§‚ê_†;UϺ(é~O6â‡y-¿ÖÕ±Ú ×Ùú¹†;Ç,G0_]\Ãw±aw®v"¸hƒ_@°Š[á‘ -ƒŠêsãŒö5‘®¡ÈÈmåï` 4ŒvÁS¨á`Pr¸+Â_IeA°Þia<…ä@í‘\x9‚— ™' 1b’ -Ë®0òkïñ¿1Ÿs!Ða<ì…çMà«ŠgA”kÍ~3yf}¬ÿÕÄW³½”ËК¥ßpfõ x6ÿÝeüµÎ—ã'âT‘ç$Fô¯qžÐagÂdžaÌÑáA/Ð^é–¯Di‹ˆâͪþ—€BþkJ@èghPPrЇܙÒɳè*@±Î}M“)C=+|á© •”cµVE …_ŠXûÀž]MX³??N…Z u:/&’7Æ¿ÍgØ™ü²ˆ‹lM¥õÜ[ítš—;ü£(\¢r™ž§=£0õh›Ô9Ôý†Zs“Á¯¦±ç%6MŽøÃG®Ajåm›á®A߉Sј?m1ˆ7ûú‹¿Œ³xºcßýø ¥í àßñï‚èŽY­9 såÊå¯Güð7ç¿~út,è|Å&v䇤)Kÿ$"TˆÿÙ±Pi‹F{ù¿ÿäôo6R‡"Ë’å’]¢³Pfp…|K¢ Êýš\’þ_H'endstream +xÚ¥Z[w£F~÷¯Ð[ð9#4Mþ93öÆ9‰3k{/'—‡6 ‹ …k4¿~«ºªHÌæaè{W×å«‹®ø W2ñ“,ÊV*‹}„r•ï®‚Õ+Ìýý*ä5k·h=]õÝóÕ·wB­2?K¢dõ¼™œ•úAš†«çâW/ö… 'ÞýÃûÇÛŸnž¯UìÝüx½ŽdàýòóÃ-µžožînŸ¨û[ ƒûÿÜ=Â7¼^ GÞûïo>>ß>Ò|̧Þ|ø×u†ÞÍÃûÛ4õáϸ»½Á»žÿùxûtýûóW·Ï㣦/úóê×߃Uïÿá*ðE–ÊÕ:fY´Ú]ÅRø2ÂÔWOWÿœÌÚ­‹Œ ?I´ÀÉH,qRf~"` +9ù¼-áY‰òLÙ½•µU]SKצ¥V›çÚTm£ëúÈ«ºªçÍÈ×ߢ(.†Ý¿Ä_œéÝùy»Û×e?öš¾lzÃgoÎûB÷eA/mc‡S¯gZ*·ÑN €ë0ô3)#ûªß‚ ªKf,$<±ÂåYä¹oÓöÔ(èhœÚíÊ¢‚Kíë²ÐÓ›Þ²æJoyý±Ñ»*§ùô(ˆ¼—2׃áÃú­æ íPtà‹›l[j˜º=ðªmÙPK/½¦ÖÝu˜z¯x@”9~@˾¾'vAgc—À_x ª±O4Þ7¦/uG"ffG©‡B›ŸW”µ>ºó^ŽîúZ!À7”ôÝUÍЗƞ*@aàUUóJsº(ªÞ*Íü]dÅD¶!³²ÇâW*©µ¯u2tSÌ•”ößįH¿à“œ”†èÒ#6˜^wÌšd”©Û(=³ú¢=ðimGëòN›­}PºFsl0KuGšaFJïvèð©¶C*H;ˆe@Z“·Ý¾ít_ºšJì! ,bY7ts¤Æœk¤i–í§ ßx?Ø®ä±ZÞr:U`‘Óï·ºy½¼Œy;ÔÜ'kwÔÃgîH¨GËw –;³«ûN7fSv|©º#ŸÐZÌÚÚJÒÊ+ècª]…Vb;í´~ö h‚wRŒD,)CÊäÔÒy­¡ñ\7„0Ü´ÝŽáPFdß0 +0B +‡cG.º‘'`d›'Ï O0ú:hàN_ÒqõhKµeH–°˜3åíZ+æÌékܧþĈGà @·¢á~Û˜%Ò Ó6„Ê»¸ð¤ýxÒÀqÆ<Ÿí>XãÉØ4` lÌÀ-Ex·9¹ÉZcÌV†Þã²  ˆL%s°ÇéÂbåË4P!†Ä£Ð —ÜdÄœ®[]œLú_œSO¸;n\—ͨšëHÅ~áWTtâkýñÑ!ˆ-n Ú`Ì™‚p›S’ëuçA˜•w3g÷Ë<ÏÖÖæo–“\ò!@xðÓ$'þ+]r«éqi8ºUŸç=8ÂÝ·yË{-äÁNM]BhhlZ>ÄÔŒ?Ç[¼Ð&8»’±Z'ÑÀbà§~· §ÈÉ0ž âq!Š“é5Ò_0 \¨NNTZV ÖFÊù|é! ¨uö|ØOˆá¾Ì+Tzrº ‡Ò{¼{O¦I{râ=•åy +'9™¬â,ò#&ÉMv¯+j²)ôS€§³J€KÍÿg™çg ñJ`Ùyg RSúiŽœ L§e8j R6êÀ.ÕýqÑ|׎™ +%8LVì ” *Œ +& âN‰°Mó|®8Ø‹iK…mØš79K(H~ꊊéØiA-j’~+¬üâ–Œv(9•8ÎV¼Ó´;)Ê +##¸bV¶XÝom|‚—ñ×–¬p5qfz*xŽ°ØžØ_ +AîO†–H6ÉDžÅS0P—ú“¡¦cZDß-“b ËЯ¿Uš:%„$|ÃÒ 0UÄ„Ìň¸â³Æ_*ø'" “ÇÃmI [F¿½¿&p^:ÿ'³€d†UCÜHµ*{œtUhÌ_H3GZßØÚŽQÄ6[æ?ÌïJˆ`PªByß·´V §Êƒ-9ßQCÀJÀ.]ŒVæ<¤gXÇ‘Š öao’õÅ®$ÃN©7ê¢í¸j)l€°˜’BálÑþ°B §ã\YNcʾpAÛ@8ÎF}ûßBÑ#,&Æ,¨’qÔP¡‹V !¨ër) SÔÈ·-…ÅŠÓ\øn@ÓÇ!/4Ù¦Ok÷üª½º=¾Æ€@J4Õž†Ð{1Mú"–õf~àÅÏ,¯¡7„7ŒmW‹¨xÓ°ê` :"£HæÈs„Œ"™ £„Œ.¢NƇ 6V»@Ý⎺.j¶äCßþ:DCÕ‚`V -cÝ«FgÃ/å¶jŠ¯þÞדߠRÅ8hSwD§0 SÆ:vô*²øàä +^0d~œ,Ĉ5ˆF(,Ú|ÀÈ­]¼ÇýÆ|BÎI„@„qHð°ž7o¬*žQ¶A4ûÍä…õa0îWWÍvb6C«—~ÙiÔ àÙüw—ñ×:WŽŸˆSNœ“ѽÆFxBùi˜ +ú!G‡·½\@_x¥ [¾5&~(Š7,ûol +©mø¯(¡Ÿ¡AAÉM@rgJ'Ï¢«PÅ*s5M¦ õ@¬ðù T$±/ãx¬ÖÊ`¡ð+|*س«ñsröçÇI_I!Oç…DòV»·¹à ;“_q‘©¨´ž9k¢Vó2‹T…Kd'çiÏ(L5Ú&uU¿¥ÖÜdpÄ©)AìÇy‰M‘#¾ÿÈ5H% b“ Ü6è;q* +ó§ñº«¾¸Ë8‹W‰=öÃO¿PÚ¾þ-ÿ.ˆî˜ÕšÃ0«QΩ\þzÄwþ맋@Ç‚ÎWlb?@~Hš²ôO"BúøŸ •¶`´—ÿûHNÿf+_¤i´\²‹TêÇ)ÂD!ߢà‚r÷Ÿ&—¤ÿbÈendstream endobj -1008 0 obj << +1048 0 obj << /Type /Page -/Contents 1009 0 R -/Resources 1007 0 R +/Contents 1049 0 R +/Resources 1047 0 R /MediaBox [0 0 595.2756 841.8898] -/Parent 1001 0 R -/Annots [ 1012 0 R 1013 0 R ] +/Parent 1041 0 R +/Annots [ 1052 0 R 1053 0 R ] >> endobj -1012 0 obj << +1052 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [464.1993 488.466 511.2325 500.5257] /Subtype /Link /A << /S /GoTo /D (proposed_standards) >> >> endobj -1013 0 obj << +1053 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [55.6967 477.5271 105.4 488.5705] /Subtype /Link /A << /S /GoTo /D (proposed_standards) >> >> endobj -1010 0 obj << -/D [1008 0 R /XYZ 56.6929 794.5015 null] +1050 0 obj << +/D [1048 0 R /XYZ 56.6929 794.5015 null] >> endobj 146 0 obj << -/D [1008 0 R /XYZ 56.6929 556.0057 null] +/D [1048 0 R /XYZ 56.6929 556.0057 null] >> endobj -1011 0 obj << -/D [1008 0 R /XYZ 56.6929 521.4772 null] +1051 0 obj << +/D [1048 0 R /XYZ 56.6929 521.4772 null] >> endobj 150 0 obj << -/D [1008 0 R /XYZ 56.6929 361.9951 null] +/D [1048 0 R /XYZ 56.6929 361.9951 null] >> endobj -1014 0 obj << -/D [1008 0 R /XYZ 56.6929 325.2573 null] +1054 0 obj << +/D [1048 0 R /XYZ 56.6929 325.2573 null] >> endobj 154 0 obj << -/D [1008 0 R /XYZ 56.6929 133.2872 null] +/D [1048 0 R /XYZ 56.6929 133.2872 null] >> endobj -1015 0 obj << -/D [1008 0 R /XYZ 56.6929 104.8892 null] +1055 0 obj << +/D [1048 0 R /XYZ 56.6929 104.8892 null] >> endobj -1007 0 obj << -/Font << /F37 747 0 R /F23 682 0 R /F21 658 0 R /F55 970 0 R /F39 863 0 R /F48 885 0 R /F47 879 0 R >> +1047 0 obj << +/Font << /F37 779 0 R /F23 714 0 R /F21 690 0 R /F55 1010 0 R /F41 910 0 R /F48 925 0 R /F39 873 0 R >> /ProcSet [ /PDF /Text ] >> endobj -1019 0 obj << -/Length 3002 +1059 0 obj << +/Length 3001 /Filter /FlateDecode >> stream -xÚå]sÛÆñ]¿‚o¡2æå>CòäÆJãLâ&±Úfšd¦ ›¨)€! Ñj§ÿ½»·wÀI©™>u<2îc±··ß» ˜qø'fÖ0®2=K3Í f¶º»â³÷°÷Ç+áahCýáö곯T:ËX–Èdvû.Âe·VÌn×?Ï¿üúå÷·7?^/¤ásÍ®&áó—¯þr-„˜¿|óåÍ+Úzõæ- ¾ºyyêù퟼aµ±ð^xóí÷ß¾¾íßøõö›«›ÛŽÒø6‚+$ó·«Ÿå³5\ê›+ÎTfÍìÎD–ÉÙÝ•6Š­TXÙ^½½ú¡CíºW§¸c”eÆÊt‚=z’=&c‰’ʱçæc~·Û/®JÛùëjÅðNŸ}Ûý›‰`Iª ‡¯òªm^fó’v^Vm±¯ò--¯¶eÑÁ´5=—æËm1ÜÙ_ ;/šzûàAŠ1¶MÝ´U~Wx|yµŽ_GèÕ&¯Þ{¤wy¹Å+Ìê…,3Fñe»À$ïŠzç(q]ѳ݄…û¶)×=Iäü6,¯ê»]^=Ò$ß65G`Xvƒž#0‹®¸÷­y“?xìùjU4n×v»«bßæeånćW ',êjûH*ùϺB6á°Ýä-r:œ&UV€Q$ 7 ËÛ- <üä]@êúÛ9¤E{¨÷XG¥e2áÖQùY+…£b]ìaʽð`î <Ý–ÍƯoÊ•Q/ Xë¹/J¤—›¢¥¥û÷à‘ÂNCKH8® þ„·ö(¬¶ÙüOU1BæñÃhé·j¤gR žO¶cLÒlþ 7$ç6ˆq0ðŠ€D¬ ìõ÷´ÓìòUïš:5ÇýîÕF{‹Ôâ&Q‹KËUÑÎ2oÚ²öÇ£ ![¥eÝ”«?£Ó ˜ü"¥Þ¹…úã#N†—%oêl•W~)ß~𣚞ËÍ GȤf¨Me@åÙö"èÖHÙ^}÷·IÕ"³4[ƒ™—0Nl',/=ðª®~á\¾¿§Ë¯iÕé#<ßÕû±eMòðþo÷ž,œrZN§ØµƒyP•EL™©$ .´)ÛB°ŽìckKl"=ø‹ Œ mãÝ~¬ˆYþ>Ì)©PJ Š ,q¥àài…Í:œ ’#— ?Ëc>È'a!Gqi™ŽhpÐq5(ÚMz Ç"™‚8ähR "‹=Î:´8!]Âùl9ïU´Eo=,ê8¡…¸ËÉqaZ?Àb™6ù=\?ÆŠÙ€’“¼öÜ€œÀhžüÄy)Ë Üž=.³#Åy†"Rø™VÍ”0ç*î¯*…f‰„]Èu&çhú<™{ç׫–¼Ã“@2˜$铯™°Tu¹Óôý …yòõÆÀu OE1“‡˜™Ä.f!ü%‘s„ÉÝ}㯺,<—Lʬæ ÌãØeJŸás]6à$ëÍ(€Aç;XåèCCs¯á4yG¼¿ó80Øã O¥O]S +xÚå]sÛÆñ]¿‚o¡2æå>CòäÆJãLâ&±Úfšd¦ ›¨)€! Ñj§ÿ½»·wÀI©™>u<2îc±··ß» ˜qø'fÖ0®2=K3Í f¶º»â³÷°÷Ç+áahCýáö곯T:ËX–Èdvû.Âe·VÌn×?Ï¿üúå÷·7?^/¤ásÍ®&áó—¯þr-„˜¿|óåÍ+Úzõæ- ¾ºyyêù퟼aµ±ð^xóí÷ß¾¾íßøõö›«›ÛŽÒø6‚+$ó·«Ÿå³5\ê›+ÎTfÍìÎD–ÉÙÝ•6Š­TXÙ^½½ú¡CíºW§¸c”eÆÊtŠ=Ù{LÆ%•cÏÍÇün·-^\/”¶ó×ÕŠá>û +¶û7Á’T8_9äUÛ¼Ìæ% 켬Úb_å[Z^mË¢ƒikz. Í—Ûb¸³¿v^4õöÁƒcl›ºi«ü®ðøòj¿ŽÐ«M^½÷Hïòr‹W˜-Õ !XfŒ$âËv€I:ßõÎQ㺢g» ÷mS® z’ÈùmX^Õw»¼z¤I¾mjŽÀ°ì=G`]qïZÿò&ðØóÕªhÜ®ívWžÍËÊ݈¯NXÔÕö‘TòŸu…lÂa»É[åt8Mª:¬>£Hn–·[xøÉ»€Ô/ô·sH‹öPï?°ŽJËd­£ò5²V +GźØÔ{áÁ2Üxº-›_ß” *£4^°Ös^8”H!.7EKK÷;ÿîÁ#…†–p\Aý oíQ Ym³ùŸªb„Ìã‡ÑÒoÕþHϤ<Ÿlǘ¤Ùün8HÎmã`à‰XØëïi§Ùå«Þ4ujŽûÝ«5Œö©ÅM¢—–ª¢eÞ´eíGB¶J ʺ)WF§0ùEJ½s õÇGœ /KÞÔ!+Ø*¯üR¾ýàG5=—5šŽIÍP›Ê€Ê³íEЭ‘²½úîo“ªEfi¶3/aœØ NX^zàU]ý¹|O—_ÓªÓGx¾«÷bËšäáýßî‹}Y8å´N±k;ò ZDL™©$ .´)ÛB°ŽìckKl"=ø‹ Œ mãÝ~¬ˆYþ>Ì)©PJ Š ,q¥àài…Í:œ ’#— ?Ëc>È'a!Gqi™ŽhpÐq5(ÚMz Ç"™‚8ähR "‹=Î:´8!]Âùl9ïU´Eo=,ê8¡…¸ËÉqaZ?Àb™6ù=\?ÆŠÙ€’“¼öÜ€œÀhžüÄy)Ë Üž=.³#Åy†"Rø™VÍ”0ç*î¯*…f‰„]Èu&çhú<™{ç׫–¼Ã“@2˜$铯™°Tu¹Óôý …yòõÆÀu OE1“‡˜™Ä.f!ü%‘s„ÉÝ}㯺,<—Lʬæ ÌãØeJŸás]6à$ëÍ(€Aç;XåèCCs¯á4yG¼¿ó80Øã O¥O]S î·ÚÞ¯Ëê½ÇïbЇ½ð™Ð1J5màŽË†»Hé’Ö)qâx¶Iw(N•Eñ ÑGÚ.•u绸|¿Ü–+”݉N¤#.¸ZqByÁý Û9S§¼¦$K2¡/él’rñ,G–Wð¯¸\Ó0Åd}H¶þÜo×tq®²ö0Í=%0bž7ýeÝ2Ÿ–ˆ¿+Ÿvú7½óE]g•;t|ÄfR¤ÎPp‚©Ü”+€P)y°ÄÃápž•d—ø*LÜì»vw§9$*Àcþè,Dûˆw‘õ•’TÂ]껟|Æ©øÇNß\ÃR(LÃUØÝGïgµïkŒjåù;$`™Z‹K|ô*¸Ä/0Û°DwJŒ×dAö Ž“v¢N‘ Rëu‰ÆŒ¬:3äA7&ãP¢?Á¦ãVʳw”œñä¹&!WÆ&E×h6dHHº¯0quW¬Jrv|þÝO´x$w\tÙ=…¨£²ê($¸ºÔ©¸¹õªËšÑ=£ÚüýÓO‚ré)åÒó] aŠ|8¼C1B_®#_»Þ—C´2Á]`𘪢X»¸„¯«üÞEˆ"lSÐyOÔ8kW»ÈP*KÏ?Q`‚A¨Å`xÈÚ+kÔ|[×èR°ˆµ©Ãáâ# Z}]lˇ€ÃÓm·p_h\kËž"™ÿõÚ˜yI– @@ -3288,157 +3393,155 @@ x |_æ«]ûôß;N]W—¼hs²½*!DÚŒSº¨0¾‰Wk7ªéé;•0Ú]», …JXÌQ¹;Í–RÅlØ®·ïPS„ ¡wlÂŽ5´ƒ2N<ää+ á`ÊvE±kqOä?³‰ I!ñNDÅ/e¤ó=mEû$…÷ Ĩ ìSgyT©¸¦y32ËÛ>xßUP‡2Çm‹U[>xHäÍÈõÄ&œí®ûøUÀ ‚Ãv -“7 `©gŒN¡wbAÎÇü&ePÁ†¬¶ÿL„N|&‚šÒŒ†¸;ô3½ú ¥G=û/mýù©ÏlJ~59ÿÑ0†r_Å (ˆÊZá¢jA¤ãC1×Î`ÒÙS;¨ãcG™;Œu2<ö[ÈéÒ”6òpò¿õÈ'Je˜I¸º\æ«Ôš'”]ú™5‰À ÊüSä)ãÚÚ Œ ÎH0@]–à¹S# Ž–`|ìÿR‚z‚"Mì3*觴e6l3ž¤´–¥—äcº(ÅsGöBŸ9)Ãø̧‹ðÈS¿vÜ,ÚÓ\J932ØAáS€ºÌ¨s§Fœ;ͪøØ›¾¡4*Ãg¿þà0P~fxœ‰alråCË(ãI2*ëúüø$ÿOelO -*Ri¨âÌ…_¢ÄPgd .ËèÜ©‘ŒÆÇNË(>öÿ/¨@^ å6°ë¼#¨3 P—%xîÔH‚ãc§%{ÙÊ@¢uU+ ÍØd\_ÇáiT»¢)¨%þž‚„ž¯¶Ôì Á°¡é¿|+0Ø„Áÿü3©¿ð‹.Z&âÅt*4èCP¢÷-…E¹kïëŦØ'Ði*ºwÞáˆû™ƒþc§ó{Ãð׋"ƒ?o ¿ûG’½O×P´Z+§…¯x¬ÌÒ@’.Ô­û5å1éÿÜOáÍendstream +“7 `©gŒN¡wbAÎÇü&ePÁ†¬¶ÿL„N|&‚šÒŒ†¸;ô3½ú ¥G=û/mýù©ÏlJ~59ÿÑ0†r_Å (ˆÊZá¢jA¤ãC1×Ξ?µƒ:>v”¹ÃX'Ãc¿…Ì‘.Mi# 'øËQ|¢$Q†™„«Ëe¾J­yBÙ¥ŸY“¼Ñ Ì?%Až2®­½ ÁêŒÔe ž;5’àøØi ÆÇþ/%x¡'(ÒÄ>£‚~J›PfÃ6ãIAJkYzIŽÐi1 ‹R¨ËŒ:wjÄ©ñ±Ó¬Š½éJ£Â1|öë?ãåg†Ç™Æ&÷Q>´ì2ž$£²®ÏOòÿTÆö¤ "•†*Î\ø%J uFF게ÎÉh|ì´Œâcÿÿ‚ +ä•Pn»ÎK0‚:#ÁuY‚çN$8>vZ‚ñ±—­ $ZWÅ“¤h$ƒÜ.}’“gÇ“ÿRŠkáÄŒgÙtÒ ©Ù—jêä¤:êäÀ¤+3°–ñß[qú4´SlýµÎ`xðKÿpÂp´.šÕ¾\Ò3à¨eý€¿‚Rdþ¦n‹€*oÃ(žþÇ81E“¥eG£|$þbT† ¾ÇNo2æP`Žê,Z|¬ï÷ýOƒ¢Š£m¿¦(Æ*­AV+;øyXRð¤Íýû ~Œ”»ƒ_Ä/+÷1^dÄ[¬†Â­GÔ$œ ‰9²¯t‰‚1®è±²ØŒMÆõužFµûñ'š‚Zâï)HèùjK; šþË·S€MüÏ?“ú ¿˜á¢e"^ü÷A§B3p€>Õ!zßRX”»fñ¾^lŠ}q¦¢{‡àŽ¸Ÿ9è_1v:¿7 ½8!2øóÖð»$Ùût E«µrZøŠ'ÌÊ, D!éòHݺ_S“þCHá endstream endobj -1018 0 obj << +1058 0 obj << /Type /Page -/Contents 1019 0 R -/Resources 1017 0 R +/Contents 1059 0 R +/Resources 1057 0 R /MediaBox [0 0 595.2756 841.8898] -/Parent 1001 0 R -/Annots [ 1021 0 R ] +/Parent 1041 0 R +/Annots [ 1061 0 R ] >> endobj -1021 0 obj << +1061 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [417.8476 181.7231 466.5943 193.7827] /Subtype /Link /A << /S /GoTo /D (sample_configuration) >> >> endobj -1020 0 obj << -/D [1018 0 R /XYZ 85.0394 794.5015 null] +1060 0 obj << +/D [1058 0 R /XYZ 85.0394 794.5015 null] >> endobj -1017 0 obj << -/Font << /F37 747 0 R /F47 879 0 R /F23 682 0 R /F39 863 0 R /F14 685 0 R >> +1057 0 obj << +/Font << /F37 779 0 R /F39 873 0 R /F23 714 0 R /F41 910 0 R /F14 717 0 R >> /ProcSet [ /PDF /Text ] >> endobj -1024 0 obj << -/Length 852 +1064 0 obj << +/Length 853 /Filter /FlateDecode >> stream -xÚÕWMsÚ0½ûWxr‚ƒe}ø³9Ñ„´Ít2ip{IrpH˜16±LÚé¯da#BI;Óadyõvõö­X!ò2]x!M?t€ ‘k&3šwüÝ­l¬ÚÈR­ÞG†}F|3¡‡=3š(X€A€Ìh|Ýs€úöF—Ÿ?E} »°wz1ê[(pÜ wòqp ¯ä|m:8ýÖGõ'ÃSe‰œ }ßéE_¯†£þmtn £&Ru7æƒq} Í1ßÔ¹ ×|â 0ÄæÌp\\‡z&5FÆ—Py[-Õ²ƒ ÀÄÃ:zB…žr(ß G0©èˆMp$ !º.®¦'yñã¾åAØ˳ty¼ÅŠLþ䤆˜l[N´`Ê\þÒç’YœÊ'F‹G à1¡ måD&ð{ÌÊižYÓ9³îrëžTc½0—1ýÒF§iþd•Eœ± -šhÅO–g°òµ|•£l€Å³yJåX‡q]˜å5M”?¢¶{¤¸XÐbÙò=Í$ì¸M S"žOAYYL“R>)€q’Pƺ·^ÐdQ0ÎãVÿŸtú[ƒhül( µ¦WÙrº²U'SÌþàTJGlZRès•ä³£µÔîÈÔŒK¦ÎP…%|Ôn[þËå¼µF/ói |4³7:Öm[SÂ5£ã¼–a1«k‚»(ârú(ǾÃk8ÛA)ÊÓEÙdV(rY¶ê°‘§¥Ç<@¦¢×ÖœFwUXÚ½J#x_°4~¤ûI¤Z²K!ÌÞ GK\[ÈÇy€“jñuuÿeV¨1›”¾y)7ö¬ã˜Þû?j@K,ÒëèËå5Ä¢C - ‹W|€úÿFNþYJì3Þs­Û1îŠð®Îá-¬°6]‘h2Å)¾j|äÄ}ÎÊêøn7£²{’ã$Ïn Äw盧Vï÷ÂYœ¤Z6mì¬6È;;>¤NêÅÖÀ7GJ ^ÛÑiáä¡Ï…9Ûyìè@þ¼%ÄÞ[¶„ÛugKÕµ Õ^NâEº­ùÓ]Fˆ Ä Bsu€ _TÖw4Ç$psi‰ûp² -J0ñFäõf3ôß…£«endstream +xÚÕWMsÚ0½ûWxr‚ƒ…¾üÕœhBÚf:™4¸½$9¸F$Ì›X& íô¿W²°‘ƒ€PÒÎt˜Y^½]½}+VȆâƒl×^ˆCÛ)p!rídjAûN¼û`¡¥S9ºÕûÈêßAèaÏŽÆV` ;]w(  +`gxùùSÔu° ;§îƒê“ýËhp¥ækÓþé·.B¨Ó¿8œjKäàlÐïú´}½ »·Ñ¹5ˆšHõÝ Hd˜Öõ-´GbSç$ \ûI<@€ÂÛS‹º¸”z&µ†Ö—P{[-5²ƒ ÀÄÃz(Òè ð €òÝx“Š€Ü„@r¡ëâjzœOq1ê:„)ì¹ÊHòéÑJjoÈÔTH¦ÎP…%}Ôn[þËŬµÆ,óI |4í­tlÚ¶¡4…zFGy-ÃbZׄpQÄåäQŽ}*j8ÛAiÊÓyÙdV*r…Y¶ê°‘§cÆ<@¦Eo¬9ƒîª°Œ9z•Fð¾áiüÈö“Hµd—Bxo=#=Jpmy äñM6P‹w¨kãð_f³Ié›—rãaÏ:>€é½ÿ£ÖŒÄ"#±Ô\.¯!R›xŨÿoä䟥¤w&z®U;&\ÑÕQÑÂJ›AÓÉ&SžâËÆGMÜ缬Žïv3ªº'5NòìB|÷N9kõ~/œÅIjda-°‡érƒ¢³“@ú¤Yl |s¤´àN +ùLšó'ÀŽäÏ[Bì½eK¸]—q¶Ð]»PïØ8ž§Ûš?Óe„¸@Þ WØðxðEeuG£> A€›;HKôØ È2(ÉÆk‘×7šõЫendstream endobj -1023 0 obj << +1063 0 obj << /Type /Page -/Contents 1024 0 R -/Resources 1022 0 R +/Contents 1064 0 R +/Resources 1062 0 R /MediaBox [0 0 595.2756 841.8898] -/Parent 1001 0 R +/Parent 1041 0 R >> endobj -1025 0 obj << -/D [1023 0 R /XYZ 56.6929 794.5015 null] +1065 0 obj << +/D [1063 0 R /XYZ 56.6929 794.5015 null] >> endobj -1022 0 obj << -/Font << /F37 747 0 R /F39 863 0 R /F23 682 0 R >> +1062 0 obj << +/Font << /F37 779 0 R /F41 910 0 R /F23 714 0 R >> /ProcSet [ /PDF /Text ] >> endobj -1028 0 obj << +1068 0 obj << /Length 1946 /Filter /FlateDecode >> stream -xÚ¥ÙrÛÈñ_ÁòYeŒ0ƒ{ý¤µd[›¬ãXL^Ö[®!0$Q‹ƒÆ!™IåßÓ=Ý Ú7¥*ÍLOOß(—.üÉe×Küe”ø"pe°LË…»ÜÃÝÛ…dg@rÆX?nWo¼h™ˆ$Tár³ÑŠ…Çr¹É~Y½~wýasûqí¨À]ùbí¡»º¾ùçZJ¹º~ÿúö†®nÞßÓæÍíõ:òW›|¼EˆT ¾ øåæþîíú×ÍO‹ÛÍY¾±ÒõP¸/‹_~u—¨òÓÂ^ËG8¸B&‰Z– ?ðDà{Þ)÷‹¿Ÿ ŽníÓ9›^,‚XEsFIFFIB‘$~°Œ‚D„žò¬QtQÔΗÞ4''ÕéÁ¬ÐuWÿ¦%¯:ÓTºh_ÑÙ|žÿ«T°¹º"@cÚ®ÉÓŽN#‚:MMÛ¢½@hGJ‘IИ´oÚ¼®¾›¿òŸå!:ÃW1Ë ø œ<†üFy"A#ô_uÅj¾hóÎHa¾êòX‘Ö勳BÒ[ªµ¼/ôo-)d1p°ïNGÆ+u ¦x5§Ø.è¾(¯Hž]][Y^ÍiLè]µ;Ó|¯ýG¶RÂVjÖVÿƒ¬ÍþHÿöŠxü®þdÊv¢¸®êî`šÏ[¸ƒøù|¨Ûîs©O[3Õ|6–ÿœ)ÿÐ’Wo g/é ¬=)ÜÈ-Î]EE Ä&äIù øaF0ªÔ½A—ÈòlnÒÙå›4%“Tº4­i+ËH  -ø¯æ|ü<º÷}Ô}6˜\J_x~¨Ø¨Çä -(Âí®{é3®s…¯áo9DŸ -ÃÕ°jZÚCÝt¸ Vû>Ï A»šoM×åÕžý‘Ö͚ƟNÙ )*ÝõÍZÆ+Ã,Ð+({X€ãLÆ,žRh±’æ݉Ådèwïomïº9;f¦M›|‹<=¬Òƒ®öÃÕ°+Ž½­«O®«ö}£‰1R0‚æ—¦(ž@º›a¡Ic:Ð"˜6AwÛ¸ÉòÂ1mñºbz;s1Ü˹ÈÊ«´è3òÃ8 ŽöQm»%ÊŽÖ”¨éîòfbmüfNüHWmúöyô6ßOÝ °Ç¼;ÐŽœ4Hž)“ÀJŽ€ k^ê&/Ntlûã)E!Å°…[[YN ÜÛhŒB [ËCpfYöUžZWBŒxq0Äy²Ñ¬¬@‚Z‚%6TN»^(V+(Äùîdg´—³%×Z(vÙ¿¶ác3Ekh ùÜj Åwå꣭€¶êãíú1×3X+óhu-âŒký»ƒù`ÓrÐß"/¡íX‚’¬ –±™ g´âL¡™gÝÄöW1ŒS(›J Í´5¶†Ö¾5»¾ [r³Ô±ªm×£DÙÑš5Ý]ÞL¬ €ß̉é*£Mß>Þæû©{ö˜wÚ‘“É!eXÉñP¢dÍKÝäʼnŽm`Föf"^æ-¯UÛÛÇ‚’æß`Š0ð&!@ætìê}£e^òÖ>ÉîP¥3‚lO´’ÿpgeðØé†Õë¦ÉkîVœÈŠ3t˜Qû–žðbü  öÔ²‘¾m-~ b•DŒÈRRå™#§öT´‡\Óf~|@6IbÅdßf8Ë@Dž8cZÎŒ!®}ÿLæ4CÆÑ>gâ'ƒ7Ö“s1,òŠ«l}ì83ñÀcJ^]Ð T?Í´ w³††QD(é,!â9MCºQÈ8â2 ò‚ +ÌKÔÂKàÔUÃd $ÏoMeé(ÎýA7†Õû˹üï•nuÊåüƒÎ›©&ï`Æjç§ ’Æ1:C‰õ¾î¹³S©:nJý5/ûò̃6ðEµ·n憥 R±Ày‡ßˆ*Q$ÔLC-ÈKúüE¦»a´NE\–Ã,Ô ç2,’ðq=c³>å—š–‹c9Èq@ãèôãiP§™¬j¡â8ðâ…>®Më¡Ô©SfC·üé¥b0ú»¿ÝoøÁ(÷žû%Î þ|6ó»™{®×ÿ÷¯t—Ÿ%ýút¬Î?ÀMòËsCjÎ,ÚCyO%?ÿœ÷­èÿcØ… endstream +M>1:C‰õ¾î¹³S©:nJý5/ûò̃6ðEµ·n憥 R±Ày‡ßˆ*Q$ÔLC-ÈKúüE¦»a´NE\–Ã,Ô ç2,’ðq=c³>å—š–‹c9Èq@ãèôãiP§™¬j¡â8ðâ…>®Më¡Ô©SfC·üé¥b0ú»¿ÝoøÁ(÷žû%Î þ|6ó»™{®×ÿ÷¯t—Ÿ%ýút¬Î?ÀMòËsCjÎ,ÚCyO%?ÿœ÷­èÿ¢ „êendstream endobj -1027 0 obj << +1067 0 obj << /Type /Page -/Contents 1028 0 R -/Resources 1026 0 R +/Contents 1068 0 R +/Resources 1066 0 R /MediaBox [0 0 595.2756 841.8898] -/Parent 1001 0 R +/Parent 1041 0 R >> endobj -1029 0 obj << -/D [1027 0 R /XYZ 85.0394 794.5015 null] +1069 0 obj << +/D [1067 0 R /XYZ 85.0394 794.5015 null] >> endobj 158 0 obj << -/D [1027 0 R /XYZ 85.0394 427.2881 null] +/D [1067 0 R /XYZ 85.0394 427.2881 null] >> endobj -1030 0 obj << -/D [1027 0 R /XYZ 85.0394 390.6298 null] +1070 0 obj << +/D [1067 0 R /XYZ 85.0394 390.6298 null] >> endobj 162 0 obj << -/D [1027 0 R /XYZ 85.0394 229.0656 null] +/D [1067 0 R /XYZ 85.0394 229.0656 null] >> endobj -1031 0 obj << -/D [1027 0 R /XYZ 85.0394 200.0179 null] +1071 0 obj << +/D [1067 0 R /XYZ 85.0394 200.0179 null] >> endobj 166 0 obj << -/D [1027 0 R /XYZ 85.0394 151.3455 null] +/D [1067 0 R /XYZ 85.0394 151.3455 null] >> endobj -1032 0 obj << -/D [1027 0 R /XYZ 85.0394 127.291 null] +1072 0 obj << +/D [1067 0 R /XYZ 85.0394 127.291 null] >> endobj -1026 0 obj << -/Font << /F37 747 0 R /F39 863 0 R /F23 682 0 R /F21 658 0 R /F47 879 0 R /F48 885 0 R >> +1066 0 obj << +/Font << /F37 779 0 R /F41 910 0 R /F23 714 0 R /F21 690 0 R /F39 873 0 R /F48 925 0 R >> /ProcSet [ /PDF /Text ] >> endobj -1035 0 obj << -/Length 2293 +1075 0 obj << +/Length 2296 /Filter /FlateDecode >> stream -xÚ¥ÛvÛ6òÝ_¡Ó—P'!Š ÁKsúà8Nª¶I³µº/M(‰’˜ò¢ˆ”]ížþ{"m(vvãsB`0Ì}›Pøc“8ãÙ$É"")““e}A'X{{Á Nh‘Â!Ö«ùÅ·oD2ÉHóx2_h¥„¦)›ÌW¿°L æ7³·Ó3žÑàê‡Ëóë_a*)  ÂåëOcÁåû«ë׸ôúý Þ\_N“(˜ÿöëõÍôù×sÇßPF…bîóÅïÐÉ -Dùñ‚‘¥rrJX–ñI}IAd$„…T7ÿr«z«W'Œ.bîQ ->¥ÈŒÄ–”RæÛÄ=üYqPvêË‚²Áyo1>RÊ«B‰ Ú΄3A8‹?ŠâOÛ¶ëY¨þçä9“Ésªþ‘ݾ¼Í{³ÄK%TZ`ƒH°à}ÛoËfƒg¯Êý”¥A±ì+Ãæ¡+:Ë e9|1 ¥ÁâП€C'!OR"è8dŒdRr}Ü"ïŠ0ŽÐ¸E³lWÅ -']¿G`¼n«ª½sÓœGM00ODlUQ¿óÈËÉ”w ’&¥‰.ó‹ÂpóW¿Ï—½åg­uÐÖ8C»Hg=΃ ê1£¼3_#Ô6GUZ!‹%Îûï<…,IK²”DÜÇ Æ åŸóo¯åÕ§·Ù/ÏÛŽ}úLsþiuùý÷±é˜ÆÜò?Tó½JNx*¬Æ¾âL Ah<ªê‡úrú=¯1bNd#e’$·“PDp4qɇ> ÄBð.oy…äÞM±Ïû²mü:ãREë@e"³$âK¸®BÁËz§`9~öà"Ú…ô¶ÏðxC´]#tQöĆápÏ Qa&ƒw翼¹šÍ amÒÎŒ¬áä6¯Ê•Gz. E:Þÿ‘JšwÝ¡F/åÞê¡*šM¿E`Ù äLƒúPõå®É–†>†‰‚7¨žÔ0¦KЮ -»}g°‡(GŽ˜ÑP׎XJ‡¦ñH92”Ïkíš)˜mÐ7ŠqÄtYu­b#aZè8 þlÚ»‡.ª`Œ§À@Ÿßý4 Öo1­6[;³”g©‰ ºF—ð¸*Äh”¸m÷HÝ0ŽXV¹íðÀÍ>¯ -~­¸†Yç0±žˆ‰"+…1Öí*ïóSDºDj_j¢H…¢ Ä«vwtÉÇEü ØÐFû XÌZKó ßW­v:©y E -*Ñã¡«ý3ÑOS ¶8¶Ú †'°[¶»aÚeá ÁÅK€œGªÍS¦¢ºÛµû!u.Ü”]m6lÛCµ²§"L¹±*´,q¬É`iñb‡78ÌãÎoæ¦ÐE/Lfì¶fÔU±Û¶MaæE¿ü²i„30¦™5ëv_{ŒSìo14a¢•4\…Êôl*A‘8½þ«ìzâ3ЬÎ7`IÄ‹†Í¤H)² »_Q3i°T‚yH‰eDÈD (!—ÜG/&ЉÚÊuJA*W8÷ëP*3zª¨÷š•Òv+×ÚXO.À‡¤¦!´¶Ï:O æ’J¥UC“×à@˶Y{x¡\DZÕö'Þî"⌤´ŽPJ@5©Æרê-†$Bþ«ÐúÏÈójÓîË~[›½u¾ ë•|y. «˜Vˆßœë&¾Á­á½Óð.ñ÷K¿C¡ìT­å'ÖTgÊ"Ç›™*ó(´ÞâcQ”ÁÈ€ºÃN…·2Ÿ‚/Ž~5{ÿš È6,1jÁC¾ÀW] ›‹ö¶ >}Ý”ºIqdšm5²ß\}äàX%Vƃ²âÉÀ4ð­*!Ú‘\nÐ -PøŸÇñtNЂ>Éñ Û£°Q†ç¦m»v_™3‘‘|•/ð® ]­³Eù –¸AJÎï™ÿt)o‹q÷™é¼l¨é‡<*f½`ƒêàh/Ž>U©›\„Ÿ )¸&‰‹f´z(àúBOﵚ‘ØÞ³$ð¶lzÙmãËx”¦ÀÉÄ|Ó”ÿÑÅF@¥0ÅFª"5 1­°°wm!†ªMKjl s³1·¤º.ßØå¦A-%:NƬ+.ÕÍþ…ÏϵËÒû%5€£ËõÇ&~"}@Þ›ª¨j(ô_³õ—„K‡å^ªêx:F¿X锜Èà~(íMwŸŠSXÓû´Ò?µMŠ\-†vòÞ~¦ýý·®xX•-À6ÉÐT±Ùá(?)0ÝzÔâ¢èÁI×â@Õ ³['R´68Ÿ°úIW©q}èz¤¿0«}[™ü–úÖ²‚_ÛVA35ßzMðôÚlÞ-î?10*‹ÅÿZ‡m‡°÷u:Œˆ„eu:ŒÈ$µX¦Á+ï7b³N0ãħ–íáÉ)¤#Á‡=´Ç²ªcTݬ‰ðv"b$–2—fkÕØí_è0˜ žÎ"éO^þíoø“›†w§kk’™#y^š´0K;£Õ3±jíõƒ,™K-ŒÐ°]Ù~ß™u­8øgYlÓ2`Þ/m€·j ³£i{ćësý м1Çzý€ ®í8˜Ë³xÙ=Ž‹gÙŒ*¦®–á¹Bé½Ï|Þ•‘H¤âñ^DÜ6ܠו‹Œ²€+2‰«X‰yjå§ÈìçCÑMéhíD„ÖRt2Ó茻²ªp´0Ë®´éU} HlP·+–¦Ž˜z.H’RùÅ0ROäîùòiWæ~®zûy¶9XÁºq‚;Ujj%¿‡aýbˆi½Ð©r§G#áà~6Íô;Á°Ÿ1Wm÷$¡&=ôÁИö8Åšpº/Ëa¸! l|¼zÕ8z42è3wûn”ñ6ó¨.i뱤ZzÏÁ –_—¹í¹T[ôˆXªdÊOÓsÇh[j}oc.ˆ”2ûå8r|.á lJ€cñUb“s?ÚÀ=CýÒâù‰…º‚ðÿ sú+JˆHSîÿ­FýT©WÔb_ÆGœÛ_~²þªù-endstream +xÚ¥YK“Û6¾Ï¯PåbªlÁx|Ä•Ãx¿Kÿõ¼iÙç/4㟗×?üàQ›טYùûf>cWÉ O„µØ7ìÉBABH‹¦~l/gßó#fÇ¡ÅRIbÈÛÑD„p4v‡#|¸'ÉLåÝCuûb<.äÑ0ýì”{·öüà3•º‰ÁEø –‚;`»lF¯O\_(ãÉI™¡‰ì=K€7EÝé“Ý>0ŒHiNÆÎáëºøSƒ¤0`#Hf!§Uæ®,Ŭj%Õ6 æ`s31³Kµm¶¶3ŠuVŠuž EWRª›ý _œë¥!ÖKª[«¶Mþ„zƒ¬3¨¨0ê¯éêkLHÂD„¡ýb¯öey8n£œŸ/õ‘—Áùíu{ºŠQSµçD×û´Ú?µL +C9¹‡h?ƒÆÃxÿ¥Í£òE¶‡ M”˜-¶²£ÓÁ­G Îóî!Ïkìt 6^˜Ùú EoCð kŸÄE•jWû¶Ãõçf´kJ³ÃÃÆ.F¤®±¢à×–UPLÍ6^<›Í»Åéã`²Hü¯8l+„¯ÒaDÄ,½Té0"ãÄr™¯8-Ħb&ˆ%Ûã8Žï×XübeMǨºYá­0DÈH$e:„fëUØé_©0˜MžÖ2©O^ýí/ø“‹†÷Çkkœš-y Qš47C[cÕObUÚë/2—Zh¡7`ºòý®5ãÚpð5Á*ÒÈËÀy +mÀ·lr3£n:ä‚€ë2ý Ô¬6Ûký€ ®Í0˜;gñ²{‚gQS£åäPzïÄS_t¥$‰¸\À‹Û‚ìºÔJ#È(8‰bÅ橆3좰_öyk,¥³y0£—ÚJáÑMƒ=Š²ÄÖÜ ;hÓ£ú[R»ÍG ž 'T~†â‰Ü=_>íªcÄÔÏ• @g"ý2¬pG¤¦Vó}N£øà…NÁn ”ƒûø4ÕïýzÆ\µÝ“„êtPCaÚa1áx_–ýtCBQû.x1ÔªQxñœ ÏÜí»VÎ[ïÍk &ºC[·%ÕÚ{6f°±ü¶“ÛîÛ‹Gõ°…D?@DR¦ìò12·ö¥¶÷º6^á‚H)£a\3ǞĦ$ߤ69÷£ Ü3Ô/-žŸX¨„ÿûã/XaLD’pÿo5꧊P½Š¡”àø2>ÜþòóXôÿL?øñendstream endobj -1034 0 obj << +1074 0 obj << /Type /Page -/Contents 1035 0 R -/Resources 1033 0 R +/Contents 1075 0 R +/Resources 1073 0 R /MediaBox [0 0 595.2756 841.8898] -/Parent 1001 0 R +/Parent 1041 0 R >> endobj -1036 0 obj << -/D [1034 0 R /XYZ 56.6929 794.5015 null] +1076 0 obj << +/D [1074 0 R /XYZ 56.6929 794.5015 null] >> endobj 170 0 obj << -/D [1034 0 R /XYZ 56.6929 691.7741 null] +/D [1074 0 R /XYZ 56.6929 691.7741 null] >> endobj -1037 0 obj << -/D [1034 0 R /XYZ 56.6929 668.7722 null] +1077 0 obj << +/D [1074 0 R /XYZ 56.6929 668.7722 null] >> endobj 174 0 obj << -/D [1034 0 R /XYZ 56.6929 579.8329 null] +/D [1074 0 R /XYZ 56.6929 579.8329 null] >> endobj -1038 0 obj << -/D [1034 0 R /XYZ 56.6929 549.1878 null] +1078 0 obj << +/D [1074 0 R /XYZ 56.6929 549.1878 null] >> endobj 178 0 obj << -/D [1034 0 R /XYZ 56.6929 502.9124 null] +/D [1074 0 R /XYZ 56.6929 502.9124 null] >> endobj -1039 0 obj << -/D [1034 0 R /XYZ 56.6929 474.9173 null] +1079 0 obj << +/D [1074 0 R /XYZ 56.6929 474.9173 null] >> endobj 182 0 obj << -/D [1034 0 R /XYZ 56.6929 277.7919 null] +/D [1074 0 R /XYZ 56.6929 277.7919 null] >> endobj -1040 0 obj << -/D [1034 0 R /XYZ 56.6929 249.7968 null] +1080 0 obj << +/D [1074 0 R /XYZ 56.6929 249.7968 null] >> endobj -1033 0 obj << -/Font << /F37 747 0 R /F23 682 0 R /F39 863 0 R /F21 658 0 R /F47 879 0 R >> +1073 0 obj << +/Font << /F37 779 0 R /F23 714 0 R /F41 910 0 R /F21 690 0 R /F39 873 0 R >> /ProcSet [ /PDF /Text ] >> endobj -1043 0 obj << -/Length 3184 +1083 0 obj << +/Length 3185 /Filter /FlateDecode >> stream @@ -3446,210 +3549,212 @@ xÚ¥ n^l6®i¸}YWí±Þáùa3`½Z¬Â(È"ú×ïÞ#[S½Ìw»ú—§áòÝÏ+Šã¹N—€×5ª nóêÎÉü¶fØãosp›ò£R!ÑÊŠ..àFáp¸*Û²® bfzõ€^é@Ù$‘^¢rÅóàý¼0 ’Dg2ívS$i$ãžÜñqK˜$ô›ý1ƒn#‘áXÐܺã ¸òPgÑð¬"«€b›-VÀÔÓ¡È[7‡$6‰áÝÌÅ&A¬;ÒŠ’ïmÓ–÷®0Ö,×ÛYÛå6§Fæ*n¹Ï­« º/˜@ -Pb7ƒDøøÉ=6~¸© 9háÖ ì¦¾w¼äI)ÀêÓ®ð;òX᪺uÅ,gtd:ñŒaëðÉKü¶nZ½Âÿa0/ß: 2—ˆË.*^å>çûÃÎq§¾åo.ƒ,TÂz‚ŒøÇ hÞ¸¿óÎ&›hV¤i’ $Õ#A}ÿÃ: 6F'!È«ÿ¾zFeˆå=ÝÒ.«|_n¸Ã»ÊÝ%|›o,êj'ü,…íVÊ' iZ9y.˜šò®òndyΟîz€ +Pb7ƒDøøÉ=6~¸© 9háÖ ì¦¾w¼äI)ÀêÓ®ð;òX᪺uÅ,gtd:ñŒaëðÉKü¶nZ½Âÿa0/ß: 2—ˆË.*^å>çûÃÎq§¾åo.ƒ,TÂz‚ŒøÇ hÞ¸¿óΑžhV¤i’ $Õ#A}ÿÃ: 6F'!È«ÿ¾zFeˆå=ÝÒ.«|_n¸Ã»ÊÝ%|›o,êj'ü,…íVÊ' iZ9y.˜šò®òndyΟîz€ ?åcFs¡FwÊñÂ}Z4™ <QÒ,’T1Žâñ}ÿzž…ËúÄìóG‚ª3ƒ™ ¥ ³§v†}Ís¸w¨Üñö´›9Oˆb¡Y¿:Ô»ró8sž ˆñzÚ´0yïèmȆÀdñ“§]Ëäñp©»wÇ|ÇwäíŽh’Ã,]¾»åüÙ}[û4,*!AîWVuE^‘ìßÀŸÈB°Ëy'ÐÐmÜÃøé+d„àoºþñêúš;•U·õqŸ·Üïè‡Í ‡r·ãÖ`æ]ÚÓŽ"¸·eýê ˜ §À8£#¨…²nt>v b¦YW ôE*ô2´Kÿ͇¤É%˜n¾û²ÙÔF$w§cŽ*€„Õn=áv@8,<5‚êFFÝçh~Ù’y…~—ö.YíqUÅ€Bñ²3÷84½½d šØá.òOÐ_sС%s™Z”?0¸?,-08”ðgƶ°Üad1X=XZ!c}Í«ø{ª>UõCÅ«Ðs`„7QÊlF¸ÜÕâCAÉRBG$ÛÌpì¡l·0ËhA 9žQƒháXswSŽ§5®5__¼Á´é B„oÎ+üzÄAèv„ö„ƒFñj=à túäÏIDÞžº=T EE5*Y5a)‚îó]‰® ùŠŸCø„Ï°Dø c7éøLP!Œ6$rl 8«’gaP8«âìŒ:Ÿ#‹|ŒwˆÅQLLŠ| Š­!‹£^1±=aq¿ºg1tä$‘åQ8P¹—!š²ð[þòyq:F^tHXD™²5Ξš©p`¦:&k噬3Y÷ÑaÚß“î$KeC|Èbè -‹µ^Í&¿ÀÔõ»¯¾âYÖÑrxh¬œˆožÐ™#q |-þ#ȉ8¨ZE„°ÝŒã ÂÎ…¨Mq™OÀ*‰$åà1eI^=rƒl8íèz¼®¢OT¿½\üßš5Ĭ1D¿7!×2kÅña¬æƒb7 -ßÿ´F{{ñËú[‰ƒû5´Ó' ¨jË ¨bØ¡N!YJ¸b xÉ|„ãã_Ô˜„ ݤAœd\3Ì2“äÖF>Ef×±ã1ÀžÍ6¯ÊfÏÐÛúÈp ·ÿôòÀØ«zIŠ—pŠ8ôm>ðq³‘PÀÇí§›0Ø>Ô ÅÀŸT¥1*†(ƒxÅtqÅþþ$#ÄÜ`WÔPÞs2”™ > -”Ò>ýx†WFZuå‘fÀHþõö‘;[ÌòBNƒ AÜ…¯ðŠx‚yAÞ¶ŸkŠY"k)ÄÀœL0`¾Š©AÃK$cC$•o±J±š²2b‡×˜G\!µ½ÉVË7ø{I¹VߺÝnOÚèSÜg”‰;çI¬Ñ(ñÁOVI÷©cÙ q§–Uù½ì3`žœ —òåhC´”´+ßµÛút‡Ô´Á%0¶áÎܺø²Rš9ºq˜è6mà÷ &cpXF1¾¡ø?ÿ†‹a&g·Þº¹ì¯(ëÀçUÕ*íëPƒ$…w’°H85BÜ B§¶ÃÚ±@øÄ…B[ÓG”Ÿ;p7ÒfœØw± Bj2[ug4’G…Ù$²~FóBHÙHö^<{¤;2S’žd#“NŒLæ5Zì\ð@Bâ©ñÇåè›y&%±¨Bñ<Ǥˆ@>[kŠMžž/ËÅÑ‹Ç‹uêïÓ× šÚW—¤ˆÓUv½g)ÜÎù -Õˆä†<#|Ù‡9žJ¾[_îA¾/ëSãË@¡’òŠMÇ w£|a^¦C„ÖÆ/ZÔDÙhN¤eƒI_¬ ³ÁÄ.¥1ÈÐÝìJÒ>l“-…oöùé« -òOƒµ½†LÉO@]”úKô›Q™ð¢N@š¸;ÉŽÂà„5Ѧ㉧Êrüñ¤ê 4y GFÒ{Ãé=~ˆ¦,\®†!/Uúôneµf…ŒP» eÀ,B4ƒžÀDTøÃѲ•/°lÃeCBÀ±˜Löáj‚ m›£åcòfƒ‘QâY5ÐÐv>±Ò*•—È8ÔCÈ”o8ŠÕhª¦ÄË‹Û–¬˜Â4’ ´¼ûŠ+(7ìÄ`á!?BXSrr±8•Ž¹JÜ @ËŠK XóÑ‘þ$sAŸV€†÷¥wÑ]d0ÒWìwúú -2ÓÏtŸóDcÃOØ Ù¸ˆÔÎ+eŠ5cûÂë'aœ@¾>Yþkë$8Ia¬?L:vÜ"éãU5ñ9Þ©?%/ -Šñy©MÍ€<¸Å|ë3‘Câ'LbûÈÁ^ - -AÀÙO"õ(œ>¼ ê< N,mɽ“ÕdoHRE|HL BŽÙ0µ/ÆûRâ‚Dþ¡Ï}¦¬9ü%ˆÔ–‚HvÚX"w€6§Ã¡>¶RL|óþÇ«KíC£ôº•ûz0.½ àØèÁJYtýö’¡5–A¬×‚±03:˜Ë.Çô˜L£;l¸u8ÝìÊÍ×`îÙzL®=“R |‡‰C¼;O òï¥8„FumÇ€Òï厨ýtß¿cÒ&[ÁÙäûÙ„ä±"[„®½éÆyå}qy_î\etîàÚîÙæè#ªì^bú'`_ºï1FÏ2³@QtÃH°ôI0¶a´¯=©®šhXl¡Š/†Ø-O‘Ê.L’üÅH© }n/ènùËÔ›H¨l$eC¢¶ŠàÞÒ¥¯@ öÇË\ÙŒüâ« Ÿºš®õ•bZ—´·­Û&yþ®Þtï…@Í×þn|¡mæ*¸n8s ¦Ë[ÞÁƒåâëÒÂÕ¨¼¾üYÖ´ò¬µoÆ5Šî b|”7y,]{Zû×Á¶®w>à,/h},,&ZÙ4îô!¥1ÆIQ»'|&u2I¦ÚÇiU3|,?*…²]ž<÷3cüíÆÌó•êÞþô¿‰‰’À¤é3ï`1i˜%ž($<´Sʻߒ<%ýOÐ9¹endstream +|-ZaÆAô„¤4X·IO¼^7ë%Bž`CB‚ŽÏÿ¸Š” +²4´‹XÃ4ŠÒÎCÆâ!¯ŽÇúؼìöØZédy K®Ñs–ÕÃÈ<èØ[<€t‚í=LÍÙóAoC6&‹Ÿ<íZ ‡Kݽ;æ;î¸#owD“féòÝ-äÏî#ØÞ¥aQ r¿²ª+òŠdÿþD΂]~È;†nãŽ@ÆO_! #DûÓõW××Üù¨¬º­û¼å~G? h=”»·n3ïÒžŽpÁ ¼ÝÈ(ëWOÀ 8nœÀA=(Üu£ó±[3ͺZ /R¡·¡]úo>$M. ÀtÓðݗͦ®0"¹;sT$ܨžpë ·Âaá©T72ê>@óË–Ì+ô{¼´w!Èj«*Š—¹Ç¡éí%c`ÐÄw‘—x‚þšƒ-™Ë„ТüéÄÕøaiÁ¡´à€?3¶…å#‹ÁêÄÒ +!Ûè+h^ÅßSõ©ª*^…ž#|ฉRf3Âå® +J–Bè<"Ùf†ce»…YF JhÈñŒD;ïÄš»›ºp<­q­ ¨ùûúâ ¦HoÀâ |s^á·Ð#B·ã ´'4ŠWë¡Ó N"òöÔí¡b8(*ªQɲ¨ 3ÀH¡tŸïJtMÈçPüÂ'|†%Âg»HÇg‚ +a´¡ ‘chÀY•Œ8 ƒÂY•ggÔ™øYä3` ¸C,ŽbbRäQl YõŠ‰í ‹ûÕ=‹¡#'‰,Âʽ A@Д…ïÜò—Ï‹Ó1ò¢CÂ"Ê„­qöÔL…3Õ1Y+Ïd­˜Éº®x”Óþžt'Y*²àCCWX¬½ðj6ø¦®ßýxõ÷ȲŽvÃC dåD|ó„ΉyàkñANÀAÕ’@("„ífOx€vžÐð¸(Dmˆ³È|¸PI$)Ï)Kòê‘dÃiG×ã…t-x¢úíåâÿÖ ¨!f͈!ú½ ¹–Y+Žc5»Ihùþ§5ÚÛ‹_ÖßJ Øد¡>EU[n@ Ä6u"ÉâPÂÁKæ#ßø¢Æ$Åè& â$ãšÁ`–™$·6ò)2»Æˆöl¶yU6{†ÞÖG†½5ø —ïÆî\åÐKR¼„SÄ¡oó3À˜„>>h8Ý„Áö¡f(þ” *QÙ0DÄ+¦‹£(ö÷' $æ{¸¢†ò˜“¡lÌdðQ ”öéÇ3¼2*Ъ+ˆ4Fò¯·ÜÙbnl”2€p â.|…WÄ$èÈ ò†´ý\SÌ\K!æd‚óUL ^""©Üðx‹UŠÕ,•;¼>À<â +©}èM¶Z¾ÄØKʵúÖív{ÒFœâ>£LÜ9ObF‰Þx²úK¸OËNˆ;µ¬Êïeïœó$๔/G{¢¥¤]ù®ÝÖ§;¤Î  .± wæ–ÐåÀ—•ÒÌÑÃD·áh¿1 ƒÃ2Šñ Å?øù7\ k49»õÖÍe¿~EY—>¯ªVi_‡$)¼“„@©â:%°ÖŽÂ'.Úš>¢„øÜ»á6ãľ‹RËÙª;£‘<*Ì&‘õ3šBÊž@²÷âÙ#•Ø‘™’ô$›™tbd2¯©Ðbç‚O?.GßÌ31(‰EŠç9&EòÉØZSlòô|X–(Ž^<^¬Sÿ›¾ÕÔ¾º$Eœ®²ë=KávÎW¨FŒ 7äáË>Ì ôTòÝúr‡ò}YŸ_ê •”Wth‚8½å ó2ª ´6~Ñ¢&ÊFs"m,LúbM˜ &v)uˆ9@†îfW’öa›l)|»°ÏO'XU¬í5dJ~ê¢Ô_¢ßŒ +È„uÒÄÝIv'¬‰6 lOˆô'™ ú´4ô¸/½‹î"ƒ‘¾b¿Ó×W˜™~¦ûœo$Ú~Â~Én|ÀE¤v^)S¬Û¿æX? ãòõÉò_['ÑÀI +cýaÒ±ãIׯª‰ÏñNý)yQhTŒ—ÈKmjäÁ-Fà[Ÿ‰ÿ8aÛG&öRPÎ~©GáôáQàYpb)h ÈHî¬&{@’*âCbÚp̆¡¨}1Þ—$ð}î3eÍAà/A¤¶D‚´Óƹ´9õ±•bâ›÷>\]òÈh¥×­Ü׃qñ°à (èeÇF~0Pʢ뷗 ­± b½Œ…™ÑÁ\v9¦ÇdÝaíÃéfWn¾#pÏÖ`rí™”jà;L´âÝ9ˆx/Å!4j¬k;”~/wDí§ûÎø“6Ù +Î&ßÏ&ü Ù"tíM6t¯%Í+ï‹Ëûrçº(£ |p÷ÐvÏ6G Te÷Ó?ûÒ}÷ˆ1z–™­Š¢®@‚¥ŸH‚±}¤£}íÑHuÕDÃb U|1ÄnyŠTva’ä/FJ¥és{AwË_¦ÞDBý`#)µ•P÷–.}±?öXæÊfä_MøÔÕt­¯ÌÓº¤½mÝþ0Éówõ¦{/j¾öwã m3WÁuÙ[˜0]ÞÚØð,÷_—®F%àõåϲ¦•g­}3®QtࣼÉcéÚÓÚ¿¶u½ógy8xAëca19Ðʦq§)…ˆù3NŠÚ=á3©“I‚0Õ>N«šácùøQ) ”íòŒà¹Ÿào7fž¯T÷îôÿD¤ÿML”&MŸyƒŒ1HÃ,ñD!á¡RÞý–ä)éÿ±I9´endstream endobj -1042 0 obj << +1082 0 obj << /Type /Page -/Contents 1043 0 R -/Resources 1041 0 R +/Contents 1083 0 R +/Resources 1081 0 R /MediaBox [0 0 595.2756 841.8898] -/Parent 1050 0 R -/Annots [ 1046 0 R ] +/Parent 1090 0 R +/Annots [ 1086 0 R ] >> endobj -1046 0 obj << +1086 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [418.3461 611.3335 487.0181 623.3932] /Subtype /Link /A << /S /GoTo /D (dynamic_update_policies) >> >> endobj -1044 0 obj << -/D [1042 0 R /XYZ 85.0394 794.5015 null] +1084 0 obj << +/D [1082 0 R /XYZ 85.0394 794.5015 null] >> endobj 186 0 obj << -/D [1042 0 R /XYZ 85.0394 769.5949 null] +/D [1082 0 R /XYZ 85.0394 769.5949 null] >> endobj -1045 0 obj << -/D [1042 0 R /XYZ 85.0394 749.4437 null] +1085 0 obj << +/D [1082 0 R /XYZ 85.0394 749.4437 null] >> endobj 190 0 obj << -/D [1042 0 R /XYZ 85.0394 597.4103 null] +/D [1082 0 R /XYZ 85.0394 597.4103 null] >> endobj -1047 0 obj << -/D [1042 0 R /XYZ 85.0394 573.0707 null] +1087 0 obj << +/D [1082 0 R /XYZ 85.0394 573.0707 null] >> endobj 194 0 obj << -/D [1042 0 R /XYZ 85.0394 410.9267 null] +/D [1082 0 R /XYZ 85.0394 410.9267 null] >> endobj -1048 0 obj << -/D [1042 0 R /XYZ 85.0394 378.8211 null] +1088 0 obj << +/D [1082 0 R /XYZ 85.0394 378.8211 null] >> endobj 198 0 obj << -/D [1042 0 R /XYZ 85.0394 204.765 null] +/D [1082 0 R /XYZ 85.0394 204.765 null] >> endobj -1049 0 obj << -/D [1042 0 R /XYZ 85.0394 171.4256 null] +1089 0 obj << +/D [1082 0 R /XYZ 85.0394 171.4256 null] >> endobj -1041 0 obj << -/Font << /F37 747 0 R /F21 658 0 R /F23 682 0 R /F14 685 0 R /F39 863 0 R >> +1081 0 obj << +/Font << /F37 779 0 R /F21 690 0 R /F23 714 0 R /F14 717 0 R /F41 910 0 R >> /ProcSet [ /PDF /Text ] >> endobj -1054 0 obj << +1094 0 obj << /Length 3094 /Filter /FlateDecode >> stream -xÚ­Ërã6òî¯Ða«F®Œ<Ìžœ±'™d×Ùµ=äq DØbE"‘šÏ×o7º‘Ij·|P£ÑýnÐr&àOÎL–d…*fy‘&FH3[m/Äì æ¾¹L³D‹!Õ×_¾Õù¬HŠLe³‡ÇÁ^6ÖÊÙCõóíËݺ^HŠl^úµkúzUöuÛ®}Ä_ÃrDÝ<¶û퀢îèw×v]½Ü8õ—r¾Þ_J;oOkÆ­y2nvïV‡}Ý?Óèañí@Y¢µÍáÈ8Ýo±„sÏïr¶6—L -J$š-RÂUÆÎR‚ŒòóîcïšnÒ½t6¯Ü/B¨ÆU8TpWú½{û=O…ÖLÊ8…¸”qeSøIƨXÚÚK -véÜŠÅ•ëVûzé:’Œ€hå…çÊ#eÜýÐ1 (o'Æ· -ŽVÞÕOt€?µë’¸¢HR«ÈÞ5È"(ÛŸY¹=ͼo ݹž‡!J†ƒˆ4é9¦9< ¤¢•À+ gÊã îÔ¹}ðL<2®w;F}]v{èzB.y¿Çv³i?¸ -Äœæùüëw·×DPŒ…Cñ£[×q׺_æß»}¹ÁA·n7LѯK>lÄ4È¿"Úº „5/ّͯ\×ñõ#óùx÷q·)놶ÊâVÛvHT¹¾¬™±¥ƒ{^jîojYk°ëf3e«²sÞ®³Â[•w] œ%M•B¬"gY¬'ü ÂŽ)RÍ$펭13pѺé;‚Kúy<'ÚÔ¨%•¥?¼Ü—[×»}‡î`Ìü¶íM‘” bT4aD’>$Éü~¨ƒˆð„¸è7÷ì-atãëÈùMlªÍX<Þ¸•%3R¬Jûíñ¡ÝÿV7O„­øÈUßîŸi¾ÝŸ,8£±ónçV5òâµ 4Ëçã¢s…(k ¢&h¤šÒˆI”´j¤´´4§§°Ý™ VL ì\E²ÑB$y–çc/!×À Aî„P‘¨ä#‰på~Sc¸ðب4mOÀªÝî ˆQb€ñqkR’ö´´á5/ª‡c(Q&ã` ÀšÊM×nÉspîöÐs…£C&ÂuÕ¶nÀX÷%(­£Io²C¢]9dχù/Û=³®7‘aÈã•Ì lÛtÛºŸrO´VtäÊL©_ÿÊ'SMá”c -¡°ì<Ãw¬¿)`ê¦Âkú0ègBs¶Õcöùšyô·TIãèv€Z•»’³¹fÇëÚÍ{Ç+àŠ—ê÷—vÎJóÚǪ²/Ñí¥YgÃ$‹ bX0 -dÇ ¸fŘ6Ýrˆ|dä”oå`G™µ¡Š¸ŸŽvij {3'EÞ¹?á¬r÷m 8m!,’í¢ä’B¦Ù؆ßúÀ‘ªyë#€óH¶#¼Lø…‰$(CÂûHN:€ É–Bè3Ms¦„iW‡“Ô| u™#­ - g³y¦ñªm0T=q¯hÎ’ÈÏè¼WÝ”|ŠÊü ùj*ŠlŠ&(®a¡ŒéÊeû>ÚH°›8[7'Ä¿§›¸„u etàÕ—Ã)…Ejcc!¹„þÆ5Pô>úã>߃¯NÔ*Çh,CpŠç lªHd–lSUÓk/àâO®™Ø2CI‹P¿r1Eúvì3Tø+¶ôûD,Ëtam’É|l‚p 2Öl8fÄAFaøn ihç½N‘®^ÏÁ ’‹—ÊÄ,Aj_1(*T **˜€cWô‹åéÐqÆ°!µ ý¨©ÄŒ' tå•Þž­ŽúÝn]S9>€ëB€X9±0ýaŒ*ÉΠݳ=)òV'M®….jóÔBf]oiíXëÐJ9àQ*ÝÂ]K*æå] ~ëínã€Ñiµ $Øõ:‚ßÝ<¼ý;ƒg(YÛ^rÂxƒÏßÝ_Ý{%_ª‹ˆˆš¡¸P¢±Xcg; %ýä™…¦ºv¦‡±ü<Åjá­*Ô¦¾4JÜÇå5a^Ö?•„Þuüwÿv@µÐ"¨ÈÍøÆã@ºÈ Ò,Jú¼{ä’~ávŒ`joóñ™LÇù‘°/ &&i]@±Òï>ÏŠØtø ’6B¾Ã€_ŽæÕa媯&Ä'3‘б@¾óõ…æ ©tjÔÇDñ’gI®E>ª}¢ -‚Œ—f/Á-ÉAjl…ÇÓ¡ñ{¶3Á0 )™__ćAïvãw@aÞ¬µOù4vâ‘þ % ½"ЗOø¦“ â,YýqèIy÷˜¾p¶Òû«FŽGÁ”¢¨NíàEjlè2‘jÚΧìÇê$³™íËݺ^HŠl^úµkúzUöuÛ®}Ä_ÃrDÝ<¶û퀢îèw×v]½Ü8õ—r¾Þ_J;oOkÆ­y2nvïV‡}Ý?Óèañ­‹ߺÈ­m@Æé~‹%œ{~G³µ¹dRØP"Ñl‘®2v¶D`”Ÿw{×tp“î5p ³yå~B5®Â¡‚»ÒïÝÛ7èy*´fRÆ)Ä¥Œ+›j´ÀO0F-ÀÒÖ^R°KçV,> ¨\·Ú×K×ÑdD+/+DY½0A#Õ”FL¢¤U# ¥¥9<…ívÈ\°jd +\`ç*’"ɳ<{ ¹ r'„ŠD% ¤H€+÷›Ã…ÇF­À i{VívAŒŒ[“âä°§¥ ¯y1P=C‰2ÖTnº–pKžƒs·‡æ˜Ë€(2®«¶uƺ/AiMz“íÊ!{>ÌÙîù˜u½©ˆ C¯d^`Û¦ÛÖý”{¢µ¢#§P¦`úKýúW>™j +§œS…eà¾3`ýMS7^Ó‡yD?š³­³ÏçÐÌ£¿ JG·ԪܕœÍ5;^×nÞ;^Wœ¸T¿¿´sVŠ˜×>>P•}‰n/EÈ‚8&YlhÂah!;fÀ5+Æ´Áè–Cä##§|+;ʬ UÄýt´KSHØ›9)òÎý g•Û¸§hcÀi a‘l%—2ÍÆ6üÖŽTÍ[Ÿ”˜ÿ@²á}dÂß(L$AÞG*ÀpÒLH¶BŸiš3%L»:œ¤æK¨ËhU`8›Í3Wmƒ¡ê‰óxEÛp–D~Fç½ê¦ àSTæoÈÇPSQdS4Aq eLW.Û÷ÑF‚ÝÄÙº99 Öø=ÝÄ%¬k(£¯¾N¡(,R É%ô7®z ÷Ñ÷ù|uº V9Fc‚S–(¯ ó²þ©$ô¨ã¯xS; Zh Täf|ãq ]di%ýFÞ=rI¿p;F0µ·yøL¦ãüHØ—“´. XéwŸgEl:üI!ßaÀ/Góê°rÕWâ“™H +hÈX ßùúBó…T:5 êc¢xɳ$×"HÕ>QAÆK³—Žà–Àä F5¶ÂãéÐø½GÛ™à@Д̎¯/âà÷»ñ; ° +oÖÚ§|;ñHÿÈ’†ÞèË'|ÓIPq–¬þ8ô¤Œ‚¼{L_8ÛéýU#Ç£`JQT§vð"56t™H5mçSöcu’ÙL ¥°XËG±û7KÙ°ÏÂaì³p€ÑHQ¿Èƒ¥ø¯ëÛ¸.Í_Q‘Ðת}óŸD9Gà!À›«&óAšhý “J>×|AG•˜"zh?‡Rðk®‹S¨p!¼«q]\¹Çò°éYQeè&Gïy,oþè… ¿up©ïß—õ¦Œ_Žåá°×}MøÜ{׸rK&ÚH1Ù>Æ|@­a;ÑêOÉôäŒp_ ½bè +EuŽ¿Ÿm A¿&~ÎKŸy§Â 0ÆsT³*Â#ü);! ¼dI4Ö`+槒˜Ló$Íc]‚m×U‹TIL¦OžgÚæñsõnÙ8|ÝxaRyMÜOG†˜‰§þµC›ÿcâ1D,Yþçû8þ§ HF[«ŽÿÑ1®Ô,6a¦ðÚ*;ã<üÈ9ëÿpj,Èendstream endobj -1053 0 obj << +1093 0 obj << /Type /Page -/Contents 1054 0 R -/Resources 1052 0 R +/Contents 1094 0 R +/Resources 1092 0 R /MediaBox [0 0 595.2756 841.8898] -/Parent 1050 0 R +/Parent 1090 0 R >> endobj -1055 0 obj << -/D [1053 0 R /XYZ 56.6929 794.5015 null] +1095 0 obj << +/D [1093 0 R /XYZ 56.6929 794.5015 null] >> endobj 202 0 obj << -/D [1053 0 R /XYZ 56.6929 769.5949 null] +/D [1093 0 R /XYZ 56.6929 769.5949 null] >> endobj -1056 0 obj << -/D [1053 0 R /XYZ 56.6929 747.8139 null] +1096 0 obj << +/D [1093 0 R /XYZ 56.6929 747.8139 null] >> endobj 206 0 obj << -/D [1053 0 R /XYZ 56.6929 540.916 null] +/D [1093 0 R /XYZ 56.6929 540.916 null] >> endobj -1057 0 obj << -/D [1053 0 R /XYZ 56.6929 511.3349 null] +1097 0 obj << +/D [1093 0 R /XYZ 56.6929 511.3349 null] >> endobj 210 0 obj << -/D [1053 0 R /XYZ 56.6929 239.6059 null] +/D [1093 0 R /XYZ 56.6929 239.6059 null] >> endobj -1058 0 obj << -/D [1053 0 R /XYZ 56.6929 207.3747 null] +1098 0 obj << +/D [1093 0 R /XYZ 56.6929 207.3747 null] >> endobj -1052 0 obj << -/Font << /F37 747 0 R /F21 658 0 R /F23 682 0 R /F47 879 0 R /F39 863 0 R /F48 885 0 R >> +1092 0 obj << +/Font << /F37 779 0 R /F21 690 0 R /F23 714 0 R /F39 873 0 R /F41 910 0 R /F48 925 0 R >> /ProcSet [ /PDF /Text ] >> endobj -1061 0 obj << -/Length 2903 +1101 0 obj << +/Length 2902 /Filter /FlateDecode >> stream xÚµYI“«F¾÷¯èx«§Ýˆ¢XÃ1mOûÚl @b‘-hbþûÔ´ÔÛá˜Ð¢2++óË­ -WýÀ«,0,TøWIá«῰¯6¢µ_@Æó‘3}‘­Ôš‹7@¥6j´š”ÔÍéà{«ö&ñU›µÐ P¢ur¶±Í[·ßÕÞKK-4|´°«wzùõwöÕDÆô^X*²ðzE/,…{õ_x2a>ã½Ì_¦…À*YZ†ŠeF9©”Á"(Œ9H`1ƒ8¶ŒØµƒ{XØ ´ >,“$F í…ù¯®ç!|d©¢{qHGÇè È•Ð<VF¢ƒ•ÆV’M&È3.æ~cYγâ'©7 tÏKŸ„™ÞåËBä žÕ±â|_¢ˆE7:Ç–‰ÍA°d|À 7rÄ)+qM Oð•Ä±2J&.H(àC(ºé»'‘ž„QL©W7q( 0BåF² ÏË|†#ŠŸ~k—àÍóŒ"åpÿÆ -lr݈nf„Õ->†évɆ€™òýæ%[çGÎB%"ÑøiÆhko¬'I¨H dåÊOØQÚøð…Õù‘€pŒR:<†.•°‡_–a”™LWðZl³CJ~@¬Dó§"Dyɲl¥8$ìs„¡ bæVt±¢2|‘ÙÍ!Œ±õMá*X "õ­g›?ø2¨˜€ ¨@÷ih}‘ !à g\I&ôÁQx‚«èÇ,掑«'‰sÄGù¹¬ Og+Nb:³£ëü‚— BѯŸN@¯†ç"¸ãŸKL€C.äó8ÌòÿÉòG›> ¬0Päá³Ëýsœ9p[¸û‹GS+&~Ä€‰QT—‡2ø€‹ŒÂóÒÎ3’,€À±Ð‹î¹&¿±¨®ÄW‹$)"}ˆI! -ºˆâ,\ÈüJtâX Â?‰œˆl–Ø<¹py+ɈBW™ÄLTKý!A•ùOûƒV<úeP“”ÎÃ!‰ ËüÀ¥»dwAf®(?nj‰H‚1Û%{XZ $FxñÑÉ ’°+ÛXa$Ô·2V¦ÄŒÔÑÀç`ûc{xæ-R(2åèâÞ0;:G‹6Ïf1ìp}Æ\¸res¤b’Ñ“LÒ’/ŽÕl±Ÿ/ɘ0€QœP>Ï tÚ ¾ðQzLB;ÒŽkÐòœ›ó†£ãµœˆø™Do¸?&¸ƒBX©‘–Žæ Jdä¹6:vƒ¸*‰²,ÿÉ°A%ŠÊCO£A‰„ÿØÉÈ4Á’v üúYÜЋiY~®)6èiÝ\‹˜7¨´\8UfŽ/Úí EË)ŒEã 4ÊN:ÑMÝ÷XãòRc~iby à1 -”¢4’°È8³^øÔ<óúTàì_l”©â×ÈÆ›˜VlDîö3;éÓŸ™ÝÍì÷…Ñ3sâ¸Lfhœ}Ôl˜"ɾOºjç°` VêÝ>i£“µü3~*Å ¬(”`†äPˆ&‚0¡S¨8»»”N⳪žd%&c Êç…º™‰%§SD¢Ç6LÌ|‹æHÎâ~Nœ0rTn/W–Ƙj†t -«‘w²‡Ì -¬¯ñPߣe¸8‘¿‚\DÈg¥¤•žLæçÚ’®YÛQpâCß+¶EÏ"B"AÈ‹98s¨`¼Jzt Ý£ïËÔMfF^è÷äs’ž˜@݉FÔ W2Ï ¯ˆƒ)ƒªK’S¬8zL:}PßàADŸQˆjÜñŒ”GVô5¯Obæ@%ß h愤¦ñ2º¸ùNX¯|œˆŒÏÓVàœÄäð$•jcë{ÏÂ58¤Ô­õl+­+EQ@ª@¨PÛÅ¢  Qvu„ ;÷kãzÆŠFÔPĉn#I6Gʸ˜%Ô=ã£nX_H%ˆ$új½gZæ×(ñ³$•ø˜¨{ O¬øiñùižÔ9ÈsÙÉLb§ïŸƒ/ŒÐÏÎľK³¨°¦h}mWõRç²»®;ÕºÅqí Q^äýÞŒm>½ÞÇÊÒö†i¿Ý-!´µþÅÔNÄ í4W§Ú½¾´øVzR’=;HU­ƒö®µàô7bãôýæ×› Ǻ¶êÞÜ  -Fd¯ªýa«mVKMtÏ—ïü©×Hͳku·óvøÕ°fÌÞo®ÎQƒ®6¹øÕ0]Îäú²ê,Íûø”™8o¨Ž×ÙÁ›»ö¬æ6©†`¬NY¥Æþ3÷O§ýß>½wß<¸é -¹›áþRÙ—Ð]‹“„g39]æ˜îè£ÖlÎ&5fÔRÿ(Χã`Îß‚j×kÇú¤·¡}¿·±9Òo¬@žž6Át:­QuÀpä;ô£Ã‹èÝ8m5µ°.§­{ïG½ÅÞm;…ËëH›P4Ø2‡'ñ}}Ú&ÃñíiCnÜûá~X]Ñ‡íª¥g˜¶5»úØœ³enNÇ]±nOâëûzcÞ½õPïöÚ;~È›iØï:ws“N¹ízíÓi™ü Îz Iñ0]÷;µ5»Ð'·}wºòÍ“=îµOïtŽk³biÃZ¾ƒ›½î9JÔèî´q¤Û·Á¤Í]Vj³: «÷&T¡6(3BêôÖžSÛ4… ,.ûù$Þô:V³¡¥Ëut™l¬xÓìÎ.N³Y¶¿ÀÍû—­cYjOóÅ–s¸§ÉhÄÍGŠ8ä}ÕíÊî¶ûRoþû—\2Mú'ýd_~z\Í0ÌûÇ¢P‡°ìÿ ¶H¦¿ýoÊçHH=(ËÜç%OŸñ—stÎÏ•"$}Õ¼øÛåGÕÿôtúendstream +WýÀ«,0,TøWIá«῰¯6¢µ_@Æó‘3}‘­Ôš‹7@¥6j´š”ÔÍéà{«ö&ñU›µÐ P¢ur¶±Í[·ßÕÞKK-4|´°«wzùõwöÕDÆô^X*²ðzE/,…{õ_x2a>ã½Ì_¦…À*YZ†ŠeF9©”Á"(Œ9H`1ƒ8¶ŒØµƒ{XØ ´ >,“$F í…ù¯®ç!|d©¢{qHGÇè È•Ð<VF¢ƒ•ÆV’M&È3.æ~cYγâ'©7 tÏKŸ„™ÞåËBä žÕ±â|_¢ˆE7:Ç–‰ÍA°d|À 7rÄ)+qM Oð•Ä±2J&.H(àC(ºé»'‘ž„QL©W7q( 0òèsex^æ3Qüô[ë¸ožg)‡û7V`èëFt3#Œ¨nñ1 L7°K6¬Èȼï7/Ù +8?r*‰ÆO3F[ƒ|c=¡HBEb  +ÏP~ÂŽÒ†À‡(¬Î„c”Òá1t1¨„=ü² £Ìdº‚×b›Rò + d%šÏ8!ÊK–e+0À!aŸ# 3·¢‹•á‹äpÈnaŒå¨o +WÁJp©¨o=«ØüÁ'AÅd@ºOCë‹d9ãJ2¡ŽÂ\E?f1wŒ\=±Hœ#>ÊÏe¨Xx:[qÓ™]猸Š~ýtz5<Áÿ\b +r!ŸÇa–ÿO–?Úôe…"Ÿ]îŸãÌÛÂÝ_<šZ1ñ#HŒ¢ ºô8”Áÿ\dž—þpž‘d<Ž…^tÏ5°øEu%¾Z$Ié@L +QÐE”gáBæ·ˆP¢ÇrþIäDd³ÄæÉ…Ë[™HFŠ¸Ê$fú£"Xê 2¨ÈÚ´°â™Ð/ƒš¤tI„Yæ.Ý%» 2£pEÁøqS£HDŒÙÆ(ÙÃÒ%1’À‹Nf„]ÙÆ +#¡¾•±2%f| ŽÆÈ>ÛÛó0÷h‘B@‘)G÷&  €ÙÑ9Z´éx6‹é`‡ë3æ•+›#“Œžd’–Dxq¬f‹ý|IÆ„Œâ„òynp Ónð…ψÒcÚ‘~t\ƒ–çÜœ§Ð0¯å@ìÀÏ$zÃý1ÁÂJ´t4OP"#ÏŰѱ”À PI”eùO† *!PTz J$üÇNF¦ –´á×Ïâ†^LËòsÝH±AOëæ’Xļ¹è0@¥•à±¨2s|Ѷh)ZNa,g QvÒyˆnê¾Ç——óKËQ ¥‘„EÆ™õ§æ™×§²gÿjd£L¿F6ÞÄ´b#r·ŸÙIŸ~øÌ”ènf¿‡,Œž™ÇÍ`2Cãì£fÃ!Hö}ÒU <÷€K°RïŽðI¬åŸñS)f`E¡3$‡B4„ BÅÙÝ¥tŸUõ$+1cP>/ÔÍL,9"=¶abæ[4Grôsâ„‘› r{ɸ²4ÆT3¤SX¼“=dV`}‡¢ø-Ãʼnüä"B>+%­ôd2?×–tÍÚŽú€ú¾X±-z6 jDnìXÈÁ™Cã TÒ£kè}\þ£h2 |4òÂð@G¸w Ÿ“ôÄêN4¢q¸’y^xELT]’œbÅÑc:Ðéƒú"ú|ˆBTãŽg¤<²Ê ¯y}3*ùþh@3'$5—Ñ­ÀÍwÂzåãü0@d|ž¦°ç$&w€'©T[Ü{Ž®Á!¥n­g[i])ŠRB…Ú.²«“  ܤ ÏsøÕ¼¿Ý[U^˜÷ÏFÇ®š°·vÃä$Šv?4§û÷R‰nµ¶°¤³¢,ïê¡sònM綞N9öûT‘æ¦§Æ‰“fRM…Õ…à̦·¹Ñ-³ztºw~¿>mšÜnjÚ·­ÑTžÆ6fuÓu­t0ÝWmøí—âk +uïß rÚ$äH…Ãðœ¢ÏzõS\p¡+®I_ò/U¯Tðw6øWƒ!Ã(=£`Ýtÿˆz¯_¥"dR»¶j5ý63îÆv¶Ó¿´6u1l5Wï;ŠBë¨ûh 6zmæOœÖfCÕ0+~¹»ÁµâîìÖù$]6Õ{{£™­öh™¾÷6÷sÌzÚ1¹ÚûöÕÑæ@äΖïõµí¶,8ƪ1”ו·g[î +†Íï ßóV–¶7œ×°Ã¯†5cö~suŽštµÉů†ér&×—UgiÞÇ— ÌÄyCu¼ÎÞܵg5·I5cuÊ*5öŸy¼:íÿðîý¸ûæÁMÏPÈÝ $ð—ʾ„îZœ$<›É1øë2ÇtGµfs6©1£–úGq>sþT»öX;Ö'=¸ íûո͑~c%0òô´ ¦Óiª«†#ß¡¶XDïîÀi«Á¨}„p9hÝ{?ê-6ðnÛ)\^GªxØ„¢Á–9<‰ïëÓ6¹ŽoOrãÞ÷Ãꈮ8lW-=ô­ÁØÕÇæœ-ss:îŠu{_ß×óî­‡z·×ÞñCÞLÃ~×¹››tÊm×ÓhŸNË”àuÖkHú8ˆ‡éºß鬭مî<¹í»Ó•ožìq¯}z¿ s\›KÖòÜìuÏQ¢Fwø #ݾ &mî²R›ÕY0X½7¡ +µA™R§·îôœÚ¦) eqÙÏ'ñ¦×±š -]®£ËdcÅ›fwvqšÍ²ýnÞ¿lËR{š/¶œÃ=MF#n>RÄéì ï«nWv·EØ—zóß¿ä’i2Ð?è'ûò£Ðãj†aþÛ?&…:„eÿo°E2ýíS>ÿ@BêAYæ>ÿ(yú¬ˆ¿œ£s~®É é«æÅß.?ªþÛúÞendstream endobj -1060 0 obj << +1100 0 obj << /Type /Page -/Contents 1061 0 R -/Resources 1059 0 R +/Contents 1101 0 R +/Resources 1099 0 R /MediaBox [0 0 595.2756 841.8898] -/Parent 1050 0 R +/Parent 1090 0 R >> endobj -1062 0 obj << -/D [1060 0 R /XYZ 85.0394 794.5015 null] +1102 0 obj << +/D [1100 0 R /XYZ 85.0394 794.5015 null] >> endobj 214 0 obj << -/D [1060 0 R /XYZ 85.0394 717.5894 null] +/D [1100 0 R /XYZ 85.0394 717.5894 null] >> endobj -1063 0 obj << -/D [1060 0 R /XYZ 85.0394 690.1986 null] +1103 0 obj << +/D [1100 0 R /XYZ 85.0394 690.1986 null] >> endobj -1059 0 obj << -/Font << /F37 747 0 R /F21 658 0 R /F23 682 0 R /F39 863 0 R >> +1099 0 obj << +/Font << /F37 779 0 R /F21 690 0 R /F23 714 0 R /F41 910 0 R >> /ProcSet [ /PDF /Text ] >> endobj -1066 0 obj << -/Length 2379 +1106 0 obj << +/Length 2380 /Filter /FlateDecode >> stream -xÚ¥YKsã6¾ûWð°ªÊBð"H:'gÆ“8•õxmMöÉ¡1w(RCRÖz«ö¿o7¤(šv¶jì*£4~|hÐ"àð+‚È0“Ê4ˆSÍ".¢`½=ãÁ˜ûùLxžeÏ´sý´:û჊ƒ”¥Fš`µÉJO¬ò?BÍR¶ <¼¾ýÝ,–2âáý§ÛÛw ‡+¸¾¡ö§ë›÷D¥‹¥†«ðÝ/—·««;Õ^ÔåûßBˆðòæÝ•_ðþ枈W—‹X‡«OwW÷‹?W¿ž]­†“ŒO+¸Âc|;ûãOäpè_Ï8Sièp&ÒTÛ3)i¥ú‘òìþìƒÀѬ[:k=Á™TFΙ/™Op˜Êq”2£¤röË«¶µë¥­²‡Ò.–†óðÙ¶?âÉ@<‰¥Q$ǬOYYäYWÔÕ„}©c–HŸ®úï¯Y þ0hñ™IH–¦‘ž7(ƒPÍåë²hYžìWœŠ:£K4˜°·&Xl8Ø&0’©X˜ÀÄ)“*öÏê8S8š³;‹”ÍÇG0šÀ¸42¼šZdòXÆQ"qëà[ ×iªˆiD»³mà~¸ÞÊà} ' -F‡ê/Ç’Ý¡ nŽ!‰\°?xRˆ8¥3Õ†ŒÓ°Þ`›„Ý£øº<´øç¹¥©²h;›ÓlQõìEK#v¡xøïl»+-Me—ô´Qˆ¨t^W4¾ËšÅRó°+ÖûhHÀó‰M]w44RÇk൪€c& G›N¡ 85I“`ßWÁQj °Ž¹ü}QªZߪ"š)mä8£8àŒuœ€œ#p>õÀ¹ßíꦣŽsß4Ñ݇ ˜T& ’€àÄ3ó›Í¾,ÑÜ„-Ioi"+K"Öû¦Yˆ$´UGœq˜ÛÏœËÊʨ›mK2\Âר*ÛZ¢ºÚKÎsØúEY•ÏΗ…”uýu¿kÙ\¼\{Ë -§;PYÙÖDí[ëïšÁš£ÝlKCçÞf_=û·½mŠ~úðh½Ñ›E¨¾P¿öãY5Ýeíº±Ó>CúmÊÇ,U2qʨ!“¤ThÍCæËiÀóJ&½a<¥Æ»m!–êÊù ¨Kø!Šº®In‹YÌEx÷áM+eQ¹Ý$ÏžVÀ0e3dGÜeã÷0³;œŸ:ˆŠr´IÃuY@8-Û"·4Б 3N6´Ù4xÈ<‘­ûp‡;ú°d[?Y¿åÆÔ[Dœ!i`Ëeâð—ú`ŸlƒµƒC0fûî±nŠîÒ';o½+rEÒ‡)P­m@Xë;$eåDý‡`(Ì¥ÒzÞu]uYá údÞd09'&+HÈÎÚg糋"Ô^)°u{° ->1tȺ3¢ç='GžÃ_¯íÎç™?æMÛmÜvУyÊwr:è_š>&áy’ ñ(Aàrö¹eúehhKS£T1jp²+'qz„p0H1 à}^`Á”•4óYJ]¶H‚\ÖÑ<$AN£„QÄ£%ðÕãŠX%‚En ª-ŠaY³Ëf`®ýHJÏ—×[0Ò¹/ÚÀ<âÑÄîæ”áÁºÈŠÕ0âï]Öe> -ç3{œÖ/µZ0)¢t¤mQu3ÊJ,ž†Š‰´Å,Šãð£ÛÔín›¶¤Õ&²÷ P)MxŸPQ2R-ÿPTYóL|eö`Kçgslj:˜Ï`)ù& -¿Võ¡"’°Âx©]Û5ƒØ‚XÈÁç„ -ûŽFGÀÑ! ô‰%d$ªæ7x¤€ÇZ¿÷ºÆ‚ª³MÑš¢pçL‹g’ÑÙÕ]&ü{V9)2Ìv»²X»:¿¥ŠÅÁÄFöaŸ×Ô­\!ľ/µ‡ãÞè@&ÉàDcöíÛÒOm)}í¹7y/Ý]Ç3Ç"înßTx¶ÔÝØZB4Lwìj¿ -c˜,/<+”Ÿ}åI®0zy'øí†È4H¥Ôb#EˆM4nM†·K R„ßs÷ÝîóíÌÛ¾Q -Œª •æ©°ßÛxÐ}´Þ’{ÜÔâX£¬Á¾ÎΧk_©‚ÎýZk§·Š8< ˜x$”{<ÓdóÅ?oîF¯Þ9^пÓÆÀ7•‹¸‡ë¬èkªK&™xñà1¬ƒÂ,þÅÛ{àú -^JC-˜Ç>1~Wº“Å©;"<Âx<|æ¾^¿‹R ÊÿF7u>µÇ›J3 îðÞƒë|¾vÁZЋ`E5XÔ;(!Bªñ¢É%Jcî……¯(jð¹&0u]fÀ+x±ÉÆ OêpVª+.\”yj_•ÅW{"DO¯RÕ¼!¯ÝÙuydÛ¹<"ŠÆbγa|ú<ò5Z¾¯ÂOU@dü˜t–Àçä“O4è”% ¥éß>Þ]ÿŒŸ®ð+‹_ÅìÙÜë24–Àª€¶Òœ>|a·q‘?$╘@üãÿV>Ji—ØJ‘ÿ–Eµ$ËàÌn -tÒ“'--$¤ƒÞ:Û­…k"wŸÜTx½ñ¨¡ãà:wá¹™ŠZŠ œí†ÐEôz82CT¼~1ŒCÜB—×Ñ¡h±óþ½×=ÎxKoö¡N¹¸ØÀÏ…HML´•‰}q7:ñ‹²v‚µ£3ÍÃT’é(–=>˜ä>ô/Îz:¼7® õ9 ñÿ2þ鬊Ó#Ò‰ÂÎ~Gmæ'O’ -?Qù=‘ê#ÏgÙ¥XíÀÕXu¾ŸõùŠ¶€$y&zT¼çNª ÿµwQŵ³»Wdî¡!æÁûî¥ë5”ÓÂ}…×ÝlÆ`DB"zÆ^gÈŒ}Ò]„£Ã™ý÷eç-ª]™¢c$È6É©Å6uYÖ‡Á‡z_ú4ë'|S‘Ë5ƒˆ™¹§¯L!vèý3ÿ -£”òåjÎ$PšÀƒÞd·ÉD,ŽTŸllF¾É Ö~E9;ýMØË¡®'Ù‰'§+ë²/-„Ö¿fŒ¾·«;ô'#±)–Ï}‡äÖóEàà»ÿ½pü‚¨c¦°Jš­^àu‡Õ‹ê•rÎJ^hÞÿâ¥êÿWu˜endstream +xÚ¥YKsã6¾ûWð°ªÊBð"H:'gÆ“8•õxmMöÉ¡1w(RCRÖz«ö¿o7¤(šv¶jì*£4~|hÐ"àð+‚È0“Ê4ˆSÍ".¢`½=ãÁ˜ûùLxžeÏ´sý´:û჊ƒ”¥Fš`µÉJO¬ò?BÍR¶ <¼¾ýÝ,–2âáý§ÛÛw ‡+¸¾¡ö§ë›÷D¥‹¥†«ðÝ/—·««;Õ^ÔåûßBˆðòæÝ•_ðþ枈W—‹X‡«OwW÷‹?W¿ž]­†“ŒO+¸Âc|;ûãOäpè_Ï8Sièp&ÒTÛ3)i¥ú‘òìþìƒÀѬ[:k=Á™TFΘO‹‘ù‡Y¡LG)3J*g¿¼j[»^Ú*{(íbi8Ÿmû#ž ă‘XErÌú”•EžuE]MØ—:f‰äñéªÿþøš•àÓ èøÿ˜IH–¦‘ž7(ƒPÍåë²hYžìWœŠ:£K´Jk‚ņƒm#™Š… Lœ2A âaoð¬Ž3e‘£9»³HIÐÜq|£ ŒK#ë©e@&e1!Ò·¾‚q¦Š˜F´;ëÑnà‡ë­ Þ×p¢`t¨^ðr,Ù +âæ"XÀûƒ'…ˆS:S]A`È8 ë ¶IØ=ú¯ ÉC‹ž[š*‹¶³9ÍUÏ^´4bŠ‡ÿζ»ÒÒTÖxIO …XJGáuE㻬Y,5»b½/†<Ÿ(ÑÔuGC#u¼^« +8fz´éÄÚ€S“4 ÆAð}q…¥ë˜Ëßõ§¡ª5ð ¡*¡™ÒFŽ3ŠcÎX÷À È9çSœûÝ®n:ê8÷M@óÝ}È€Ie N<3a±Ùì˽ÁMØ’ô–&²²$b½oš…HB[uć¹ý̹¬\ ¡ŒºÙ¶$Ã… yª²­%ª«½ä<'­_”UùìÌqÉQHY×_÷»–ÍÅ˵·Ì¡pº••mMÔ¾µþ®¬9ÚͶ4ÔyîmöÕ³ÛÛ¦è§Ö½Y$ᾪŠê õk?žUÓ]ÖÙŽ ;í3¤ßö¨|ÌR%§ü‡2IJ…Ö° OæMsb²‚„ì¬}v®1;±(Bí•[·ÛÐâcC‡¬;#zÞsrä9 ðõÚî|žù#`Þ4°ÝÆm=Ú™§|'§ƒþ¥éÓiž' .gŸ[¦_††¶45J£'»r§GƒÓ0 ÚçLYI3Ÿ¥ÔUñi‹1!ÈeÍCä4ê@EÚoÉ=n‰jq¬QÖ`_gçÓµ¯TAç~­µÓŠ[Eƒ‰L<Ê=ži²ùâŸ7w£WïÀ¿/èßicà›ÊE ÜÃuVô5Õ%“L¼xðÖ~Å¿x{\¡ÅKi¨óØ'ÆïJw²8uG„G‡ÏÂ×ë—`Qª`AùßèF¢Î§öxóQiÔÞ{pÏ×î X z¬¨‹zç2DH5^4¹Di̽°ðE >צ®Ëlp/¶#ÙxáIÎJuÅ…‹2Oí«²øjO„èéUCªš7äµ;».0l;—GC¤CÑXŒÃy6ŒOŸG¾AË÷Uø© +ˆ¬‚“ÎÒøœrò‰’²$¡4ýÛÇ»ëŸñÓ~eñ«€=›;ÂcÝB†ÆXðÃVšÓ‡/ìöá€cÀ".ò‡äâB¼¨‚üÂÊG)í[)òß²¨–dœÙÂMN@zòäÁ¡¢¥…„t0Ð[g»µpMäî“› +¯7^5t\ç.<7SQK„S£Ýš£ˆ^GfˆŠ×/†qˆ€[èò::-vÞ¿÷ºÇo aàÍ>Ô)ø¹) ‰I˜ö 2±/.âF'~QÖN°vt¦yxJ2ŲÇ3àƒœÃ‡þÅyCO‡7ãƤþ#'!þ_BÆ?݃UqzD:QØÙï¨ÍüäIòà@á'*¿'ÒC}¤àùáì1»«¸«Î÷³>_±Ó$ÏDŠ÷ÜI5á¿ö.ª¸vv÷ŠÌ=ô!ļ"xß½t½†rZ¸¯p㺛Í,‚HHDÏØë ƒ±Oº ‹pt8³?ð¾ì¼Eµ«# StìÙ 9µØ¦.Ëú0øâPïK¿fý„¯b*r¹f1“"÷ôÕƒ©1Ľæ_a”²C¾¼@Í™JxèØ[çm`2‹#Õ'›‡o2耵_EQÎNöÀrh…ëIvâÉ)Ä +Æßú…ìK` ¡5¯£ïíê=ÀÉHlŠåsÇ!¹õ|ÑÁ8øî/¿ ê˜)¬’f«xÝaõ¢z¥œ³’š÷ÿ‡x©úÿC|upendstream endobj -1065 0 obj << +1105 0 obj << /Type /Page -/Contents 1066 0 R -/Resources 1064 0 R +/Contents 1106 0 R +/Resources 1104 0 R /MediaBox [0 0 595.2756 841.8898] -/Parent 1050 0 R -/Annots [ 1069 0 R ] +/Parent 1090 0 R +/Annots [ 1109 0 R ] >> endobj -1069 0 obj << +1109 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [349.4919 384.4828 408.4801 395.2672] /Subtype /Link /A << /S /GoTo /D (ipv6addresses) >> >> endobj -1067 0 obj << -/D [1065 0 R /XYZ 56.6929 794.5015 null] +1107 0 obj << +/D [1105 0 R /XYZ 56.6929 794.5015 null] >> endobj 218 0 obj << -/D [1065 0 R /XYZ 56.6929 594.1106 null] +/D [1105 0 R /XYZ 56.6929 594.1106 null] >> endobj -1068 0 obj << -/D [1065 0 R /XYZ 56.6929 562.6395 null] +1108 0 obj << +/D [1105 0 R /XYZ 56.6929 562.6395 null] >> endobj 222 0 obj << -/D [1065 0 R /XYZ 56.6929 370.2937 null] +/D [1105 0 R /XYZ 56.6929 370.2937 null] >> endobj -1070 0 obj << -/D [1065 0 R /XYZ 56.6929 341.714 null] +1110 0 obj << +/D [1105 0 R /XYZ 56.6929 341.714 null] >> endobj 226 0 obj << -/D [1065 0 R /XYZ 56.6929 214.6004 null] +/D [1105 0 R /XYZ 56.6929 214.6004 null] >> endobj -1071 0 obj << -/D [1065 0 R /XYZ 56.6929 186.0207 null] +1111 0 obj << +/D [1105 0 R /XYZ 56.6929 186.0207 null] >> endobj -1064 0 obj << -/Font << /F37 747 0 R /F39 863 0 R /F23 682 0 R /F62 995 0 R /F21 658 0 R /F47 879 0 R >> -/XObject << /Im2 984 0 R >> +1104 0 obj << +/Font << /F37 779 0 R /F41 910 0 R /F23 714 0 R /F62 1035 0 R /F21 690 0 R /F39 873 0 R >> +/XObject << /Im2 1024 0 R >> /ProcSet [ /PDF /Text ] >> endobj -1075 0 obj << +1115 0 obj << /Length 1913 /Filter /FlateDecode >> @@ -3657,239 +3762,257 @@ stream xÚX_Û8ï§È£h\KòßÇöfoÑÅ]±èÎ>]ïA±•‰P[ÊFöäæÛ)JNœqºE€˜¦(Š"©)³M?¶©‹4M¾©š<-2VlÚá]¶y†±_ß± “"-r!àeet[ˆ:-j^m¶×J>=½ûðOÎ6ýFÓò´ª+†Ó2X¢H«&«ý„§ƒ"áOŸ¿<ÕÐã_úù0žþã«r¶åQ+ËS‘—þûØ/¯£_­v¸Üσá*qz˜úQe'Gzk¿OGµ{âWr¢æ‰ä(Ï꺰C§\ veÒÖNϬ—ê¼g¸rÞÊ.ÎèŒÈ¢h¡Á¾¨îý<æBh%ÒËÞ:z³á˜èáhÓ»>HÅôÑhÇ L8[Ú,²j¼œ—D>Õ/…T¿—T„ ¬ñØ€0š&îm´Ù­4DÈÞY¢Bž¼è.ÈÜ&ò0§5¤RP¦†³à÷öÆ'çSʯ†í°ÓF^b ®Æû+ìY‰Óò¸ó†_Ž;oDHàJz+ÞI©!úê`Dñ:™Œ¡£ Q’â™ÞR-ÅãT!pº Û&ƒè¦H,xÀ·Üór>0“³äÏÇß·;é”ßCÍmk{È@ÁD4¤I¾qž_»ÊÏ_î9×*p -M&PÄqíèÙi7jÓŽ4¾§YyŸ"A¦͠ì‚d,"û©ì±‰kkÒ;¥)ÏR^Š:”&JÓ×9*—“²,Jן©IW؃È!6Š‚OÆ¥KaäÆ¥ÀÐU§½l†¤(.sÝ«Õ@BÃäf˜R‹eÞj1-£O.拪‚#/`h~>)×­lS€³†1Œ•ô ´ÅhmsV݈jµ75‹Êš5ß²Œ?OdoÀ7*ƈ·ö2Q¥ z¦k{WÌåU*ê*¹Ž ""!Ú–•ÐMåLÜ žqQ&ÚK¨#¾ºÔ7ÍŽÇ$%£(–qÅ‘`Wm¾œµO^˜9ÈïŠxp:¯çB£àFGBÚ/땱ˆ¡ZkÛµƒ²“íw„¼æº¨ã[½$x(ƒƒFlBLÀ{‰j8K [|ﶪ,}­UP[>é®S‘ÿº–vY•òZ\Âòâm$s–ò*/£ 6*,¬C:‹æZ¯Hy‘çAúƒÛ'†zQCz2.–¾‚Dܯ%‘H–EeACd.r‡ZÛ²¾À?ÐÐ’«Ìˆ­)²¬‰¶&ŽHäǨí=Q»i¼#³ŸÆiîP 2,àÁǯé+´'¥9¾¾z†oÔ’nÅ›9l¶,Š…;Ã1# ?bÍZ=MZ×UÔ„nçËç?j£sƒàç®ܪŒý-nñ´®Êo1<Ø èÐC`¯gFï—N‚šî-Å 9„b±K¡û@6_æúx´á&pé_–Gú¦sj½7Ù,Íó²üq‹R-êrBd:]QL¤T1/­{¨˜Û¼`É'ÕJʼŒ4Á(Õ¹ ÄÒ3îïÄSÒ§P˜ XÀ²zÖ¡ƒ‚N9ýl¨ ñêî¶aM:¦¸à~_VY(>Y2h£l—y©%«a3Ð%šÞŠ¿­6^:ꬕÛÌ[‹|pA˜ªj ?RøÃx½Í¬m­ÄÞtd¨æ.Ú%Ô­¢Z¢¨ù´+¡Ö–bíî ZÓ@BÍ`*ƒnèÜÏኻÂ;Ë züÊAŠy¤Zy”þÚhêûkdv–nwuhg‘¸ið©ø6<­ømRËi´Æpsó‰Ø‡ë®5kw"wT­ÆxªîæžRÿ4xÍË¢Ùªn@C@gçá‰à  vþjÌÖò F©›ñ3VÈj‘æ‚GÃÔèîŮĭçŽæÕûÔÞ$>1‘ÓcJç¼ZO¥=«rþ÷Ðή|u×6è€Eô×#X7±‘B\áMò‘˜¡ŒúÀ’½Rá ò,²Ð³ÈYé¶zy­@ÂÑ€¤×eOÖÜ^_¼…RQï´ Xä$òbÆêpE_I«¿¢ñâ§zRvÛ”Î×ô·A4¨Êù|ÿ0;Š&­ª¢¾îUÞýò4KŒ_E‘â÷Ƶ¯Qd{‘¡O‹“‘änGE¸onW›?\¾]îÿ§endstream +M&PÄqíèÙi7jÓŽ4¾§YyŸ"A¦͠ì‚d,"û©ì±‰kkÒ;¥)ÏR^Š:”&JÓ×9*—“²,Jן©IW؃È!6Š‚OÆ¥KaäÆ¥ÀÐU§½l†¤(.sÝ«Õ@BÃäf˜R‹eÞj1-£O.拪‚#/`h~>)×­lS€³†1Œ•ô ´ÅhmsV݈jµ75‹Êš5ß²Œ?OdoÀ7*ƈ·ö2Q¥ z¦k{WÌåU*ê*¹Ž ""!Ú–•ÐMåLÜ žqQ&ÚK¨#¾ºÔ7ÍŽÇ$%£(–qÅ‘`Wm¾œµO^˜9ÈïŠxp:¯çB£àFGBÚ/땱ˆ¡ZkÛµƒ²“íw„¼æº¨ã[½$x(ƒƒFlBLÀ{‰j8K [|ﶪ,}­UP[>é®S‘ÿº–vY•òZ\Âòâm$s–ò*/£ 6*,¬C:ç ½"åEžéjl?œ|BèE éɸXú +q¿–D"mX• ‘¹ÈjmËúÿ@CH®2#¶¦È²&RØš8"u£´÷Dí¦ñŽÌ~§¹G@ 8È°€¿¦¯Ðžt–æøúê¾QCJºoæ°Ù²(î Ç<Ž,üˆ5kõ46i]WMPº/Ÿÿ¨Î ‚oœ»p7ª2ö·¸ÅÓº*#¼Åð`' C½žu¼?\: jº·3äŠÅ.…îÙ|˜ëãц›À¥Yé›Îe<¨õÞd[°4ÏËòÇ-Jµ¨{È‘!ètE1‘RDPż´î¡bnó‚%ŸT+)wð0Ò£Tç‚KÏXx¸¿_OIŸN@a&`ËêY‡ +:åô³¡&Ä«»Û†ý5é˜âB€û}Ye¡ødÉ °]B楖x¬†Í@”üizT(þ¶Úxe訳vTn3o-òÁa^¨ª1ü8Háã=ô6³¶µ{Ó‘¡š»hW”P·Šj‰v¢æwЮ„Z[Š´»ƒhM 5ƒ© º¡s?‡+ì +ïp,'èñ+)jä‘jåQúk ©ï¯‘ÙYºÝÕ¡Eâ¦Á§âÛð´â·I-§Ñ;ÀÍÍ$b®»Ö¬Ý‰ÜQµ㩺›{JýÐà4;,ÿ‰f`¨º ‡W$‚7€Úù«1[Ë/¥nÆÏX «Eš Q S£»»·ž;šWïP{“øÄDN)ój=u”ö¬ÊùßC;»òÕ]Û Ñ_;Œ`ÝÄF +q…7ÉGb†N0bèKNôJ… $ȳÈBÏ"g¥O Øêåýµ G’^—=Ys{}ñJE½Ó6l`‘“TÈ‹«Ã}%­JüŠÆ‹ŸêIÙmS:_Óß Р*çóýÃì(š´ªŠúºWy÷ËÓü-1~!EŠß×¾6F‘íE†>5.NF¸áb¼¹]mþpùv¹ÿÐÆ}endstream endobj -1074 0 obj << +1114 0 obj << /Type /Page -/Contents 1075 0 R -/Resources 1073 0 R +/Contents 1115 0 R +/Resources 1113 0 R /MediaBox [0 0 595.2756 841.8898] -/Parent 1050 0 R +/Parent 1090 0 R >> endobj -1076 0 obj << -/D [1074 0 R /XYZ 85.0394 794.5015 null] +1116 0 obj << +/D [1114 0 R /XYZ 85.0394 794.5015 null] >> endobj 230 0 obj << -/D [1074 0 R /XYZ 85.0394 769.5949 null] +/D [1114 0 R /XYZ 85.0394 769.5949 null] >> endobj -1077 0 obj << -/D [1074 0 R /XYZ 85.0394 576.7004 null] +1117 0 obj << +/D [1114 0 R /XYZ 85.0394 576.7004 null] >> endobj 234 0 obj << -/D [1074 0 R /XYZ 85.0394 576.7004 null] +/D [1114 0 R /XYZ 85.0394 576.7004 null] >> endobj -1078 0 obj << -/D [1074 0 R /XYZ 85.0394 544.8207 null] +1118 0 obj << +/D [1114 0 R /XYZ 85.0394 544.8207 null] >> endobj 238 0 obj << -/D [1074 0 R /XYZ 85.0394 403.9445 null] +/D [1114 0 R /XYZ 85.0394 403.9445 null] >> endobj -1079 0 obj << -/D [1074 0 R /XYZ 85.0394 368.2811 null] +1119 0 obj << +/D [1114 0 R /XYZ 85.0394 368.2811 null] >> endobj -1073 0 obj << -/Font << /F21 658 0 R /F23 682 0 R /F39 863 0 R >> +1113 0 obj << +/Font << /F21 690 0 R /F23 714 0 R /F41 910 0 R >> /ProcSet [ /PDF /Text ] >> endobj -1082 0 obj << +1122 0 obj << /Length 69 /Filter /FlateDecode >> stream xÚ3T0BCS3=3K#KsK=SCS…ä\.…t œ;—!T‰©±ž©‰±1ƒEV.­knj©g`fA‚!ÂVŒendstream endobj -1081 0 obj << +1121 0 obj << /Type /Page -/Contents 1082 0 R -/Resources 1080 0 R +/Contents 1122 0 R +/Resources 1120 0 R /MediaBox [0 0 595.2756 841.8898] -/Parent 1050 0 R +/Parent 1090 0 R >> endobj -1083 0 obj << -/D [1081 0 R /XYZ 56.6929 794.5015 null] +1123 0 obj << +/D [1121 0 R /XYZ 56.6929 794.5015 null] >> endobj -1080 0 obj << +1120 0 obj << /ProcSet [ /PDF ] >> endobj -1086 0 obj << +1126 0 obj << /Length 3113 /Filter /FlateDecode >> stream -xÚÍË’ã¶ñ>_¡K*šªŒ7ÍiýØd}p{o¶«Â‘8#ÖJ¤,R;ž|}ºÑEI´É(U.Fw£ŸÄ„ÃOLœa\y=)¼f† 3™¯ïøä ¾ýõNDm3Z)ø“ù:3Ê1ãd1™‘|ýñî«÷RL$gÖJ3ùø8¬e ǼÒ~òqñóô›e¹é«íýL>µ÷¿~üž¦iV¸Bà4KVx?üð-A{j¾i›_8—O»mÙ×mCƒ?VÕ¶jæUĨ&žy+mDhªÂÈ1BeBhæïÅ´¡ñº£öa{/Ü´-«èêu½*·ô§o±5#´î/Ðj1]¶ÏÕg`µÐÓ7øÅMûepUXü¡æ±z&| u¨2RÓ>æ¨nÞ ãȪÌ›Èj·›/Ú™i˜ íçºzîØýL ›(†Q‡Í%èÓ:$cøŒßVUDÔ-ÛÝjAýçvû)öê~IÀÄ®¼‚í$Æ™uCí~yâñAëSÄ°n£x2ŒÍÛõfUý€–K—±bO @´mÐ4ýeÝ2ã8- +xÚÍË’ã¶ñ>_¡K*šªŒ7ÍiýØd}p{o¶«Â‘8#ÖJ¤,R;ž|}ºÑEI´É(U.Fw£ŸÄ„ÃOLœa\y=)¼f† 3™¯ïøä ¾ýõNDm3Z)ø“ù:3Ê1ãd1™‘|ýñî«÷RL$gÖJ3ùø8¬e ǼÒ~òqñóô›e¹é«íýL>µ÷¿~üž¦iV¸Bà4KVx?üð-A{j¾i›_8—O»mÙ×mCƒ?VÕ¶jæUĨ&žy+mDhªÂÈ1BeBhæïÅ´¡ñº£öa{/Ü´-«èêu½*·ô§o±5#´î/Ðj1]¶ÏÕg`µÐÓ7øÅMûepUXü¡æ±z&| u¨2RÓ>æ¨nÞ ãȪÌ›Èj·›/Ú™i˜ íçºzîØýL ›(†Q‡Í%èÓ:$cøŒßVUDÔ-ÛÝjAýçvû)öê~IÀÄ®¼‚í$Æ™uCí~yâñAëSÄ°n£x2ŒÍÛõfUý€–K—±bO @´mÐ4ýeÝ2ã8- Waƒš)m%ÂÌ ™æLZEBµL€ap~ƽ¯Wq/¿£ÍïòI:pH^”ïÛÕª}Žòâäv -©YÕ]O½`ùÐV sø·ëª¨ý’XP»ëÓXu¬,óݤÔ_´ó.>¿Eúï¾û8øoAè…žh!™å^¢óÿíîç_ùd±âû;Δwfò 8ÖwZzVðB¥‘ÕÝOwÿüg%:PˆŠyÁÕy -h\±›f¢š%žfÊÁ¾x燈v œ0“)¥ÌDsͤæEؾr¾:–‘‚9 sÀ/’dÞ9—gv6`œQfH„@ê 8€Ñ&rf€â ŠfðuEqOࡇ*§èb“±ÕB2ç´‹³ËÅb[uݱ(”ÕL ºÜJ áA([0aþi¾9µÑŽAW¹äö¢â-.À±B8q”J€;n‡‹Ïar¾ÉØx^ghùŠƒxÿ&n1ÕtöŠ‰+k(®.é¶Ð§Zí_mæ ãlŒ2C¦†=²J’™Õn›.5¬x;"ÆkD:ɤ*ì!‘g´ÛZf©æ»{¨\Œ}ØCGÚ¦Š-µã,ñx}Ð_éxÊ%ê͉ჳNÜpÿŒWD£ -ñŸ‹S5Ë~ÐhÙx“áÔ1·ÏfNùÔP”yÃííø0^áS#íXð¹ÙVõïN• 7Ä£³œªð ôcV¸}ÅéíXM¯±êa¾Gž£^äânô«‰Í™…z¯ÝfØÅ\mM:ãLÊ!!Þ©ÍÜ:èùjÆŒ³1ÊSÆe¨-šy»r@¬ÐƒE¦Dö å]UX¨)˜Ä 7&>nŸ&Ôùqt61ÀŸÒ|¤hÇx‘žŸªù>#†DRýcõ‚]0¢ôœœ PW¨8Å6T#ù; -]· -°Éä¾ešq6ÀBmã%Ħ+Ö€*È·º¾Ú^¯zÃà: ¼Z÷ž‰YP2îC† œÍÇlLé¿p0$ÒØbü --\Š_J@…eÏûuåãd~# ø. -Hy‰¨Uc‹\`e*Y; Þ7hfå*óUÌ8ëÏ;xà ”èÚÞŠçßEž w¨µzÌsÖµƒëðL;s”=—Í⫬ƒWŽi}n‹¥÷ñ<¸u­™†šâõn=aœQf¶™CyÇ´,„îvÛ_MQØ=Ø#ïr s`X¥<ïŒå+ Ñè$nÅõ€ñ -׸6VêC®ÏØ?ð —/P{Ya§u3_íþ)¦m8óÍDváøôFcE9#é1•õ ôq_Ü@ "ÆÙe&º{¨L ·_8É#w°QŹÂÕòl"^uŽ+E}ËJ\²¸È 6F›Àó¢]—usÉ”g…·ÅöÕ±,aœQ梙„”ÁQyî<ˆ[ÆñÌdˆgRÛéo»{jNáo×oé¨R›éó² 0ü\‡³] çÆ0&u¼|ÐtÅÍ·?üDãHÆ{Äxˆê÷r=ËùoÒñä/RêŒAIH×`Ç’1¾°¾êz¶ß#^Áú¬³)6!Î ê:R„?îÁ†t .õu•0Áj-¢ºö¸±çÔu€½ºŽQ^P×C*«y½.W×5öï!»¯‹—J Zí¶4R7}õ„ž5Œ.W»¤Á§ìOÏ FC_ºjSnËžàmëØ 3Ã%dG(‰‡.GO=—áYZèîï§Âß:wwpäÜó~¬‚)!ìDZ•Û¥Â÷K³ž„q6F™Ézäû²‰ì²‚dT#eµMKwgìa¤i·²‡á¾òËqSÎY„àKæk÷ajf'•‰aÏ[D¼¡EŒP^²ˆ1‰_nJt0‹=3¶píÚ%×¾å\;’醈Qr.Þ.ÜÛ·°”΂CÑQ8±¯£€ÇÑúݼÝ`BªÊtå#H2ŸC‹J„â½¾6ßðn{Ëòs…=7-×õÓ®î_è}hUo©V$àãÙ…˜vôo½ë"º‡*uGØ)pjÁCàÔBàe"µ› …ÜͶ.ñ¥IEãa¡Ðûð-Í$¯£ã½Vø´¡—4sp4Ù"KÙóðÐÊMŠÉ -1™0%ÅvQ­êuÝÓ+”7çÓ=}«# d¼ÌæiõB#$Ûy»?· öÂÈ !Cº ý7+pÄ!Žb -ÜÑ ¤X*†aج†F›ÝºÚÖs®Àn~É€*íÃk¤s¤Yv/Â{+ß*ARth‰¯‡°•ø¿|‚d™þ€²½@)º>~”Þ à ùTÑk"7ý[ûœÍÛGO  -³ÆGZP[ññk(ü[wÔ6-µ]_6 zü´ ‘5h Ésª\0Á03 -“ã…õ"GÌX€2Á K!§óÝ–(Š¯x¼‡]Ç^ 2Èíc™¨/Öìªn>EXX'»ÃîÅOÃ;"¢Ùmðx¥Z 5=J·[S­  2³¾ÍAèAøñ¡êŸ«ªÉ²œÈK’dB© ›Êó>”_>u|¶ô&2¶‡œ­Úy¹Š(FiÁ©Ï“Ã[ã’Ï{¬—=+K£z©Â©«Â&±ÂPÙ÷å|qh÷;”ñÄÖBý«ÒaMSñ\ðt¾•‘’‡ˆ¿Û@ö/RõùäÁ$w>ÊáOù• –£Îì¿÷TÝ©8Aç­‚¢‘uŽ–±< vÚÑŸñVáÿÑVUT­ÌÒR‡”«çò%¾(¢øpðzh(ÐËš2=Hkªá RKíCzJ4ŽçÓ¡qšñÊÔe”Eöþ œqƹlÈ…“ÓkçAÊ%nÕ™]! ÓØ«3¡„p6˜!O@þƒWLcòÎæAÐ/†ƒûw¹^X|Ü[ ×ú4yWx´mnÆè€ð2£™àk¡¾„уÛÈìùüa5œIm•VLr-oÆæ€ð2›J[˜þe\ÆÊáZ‘>Rï׌ւIiÁ ÔEÎÙ[Òô<¯ ñµyþ¢–[HÛ¨„¨“kÙáIúUZî?¿Ó5endstream +h\±›f¢š%žfÊÁ¾x燈v œ0“)¥ÌDsͤæEؾr¾:–‘‚9«üð „$™wÎå™ gc”!:à€D´‰œ 8À‚¢|D]QÜxè¡Ê)ºØdlµÌ9íâìr±ØV]w, +e5¨.·’DBxEÊLØcA€š/OHô³ÚÝ’Æ„ñ +‘šC^¢@È º[”ÔsŸÄÝÑ-*4Ý}þ}x¡ C»ONm´cÐU.¹½¨¸GË€ p¬N¥à‚ÛaÇâ3@˜„œo26ž×Ù#Z¾â Þÿ‡‰[L5½bâÊÁŠ«Kº-4ä©…V{àW›yÂ8£Ì©a¬‡dfµ[À¦K +ÞŽÈ„ñ‘N2© +{Häí¶–Y@ªùîjcöÐ…¶©bgKí8K<^ôW:žr‰zsbøàÁ¬7Ü¿ãѨÂ@üçâTÍr†4ZG6Þd8uÌí³™S>5eÞp{;>ŒWøÔH;Ö€|n¶Õcý{†Se È ñè,§*|‚ý˜Unß@qz;VÆk¬z˜¯Å‘稹¸ýjbsf¡Þk·v1—F[Ó‡Î8“rHˆwª@3·:F¾šñãlŒò”qYj‹fžÀ.¤+ô`‘)‘}CygWU'j +&1èI Û§ u~M ð§4)Ú1^¤ç§j¾Ïˆ!чTÿX½`Œ(Ä=''$Ô*N± ÕH>ÀŽB×­l2¹/G™fœ °PÛx ±éJ€5  +2Æ­®¯¶Â+Þ0¸/…Ö=gb”Œ»Á!hgAó1S:Æ/ ‰4¶¿BgK —â—PaÙó~]yÅ8™ßH@¾‹RÞ@"jÕX@ç"X™JÖNgC÷ šY¹Êðl3ÎúóÞp%º¶·âyÀw‘gÃj­óœuíà:<ÓÎeÏe³ø*ëà•cZ€EŸÛbé=D<n]k¦¡¦x½[Ogc”™mæPÞq m ¡»ÝöWSv¶ÅÈ»ÃV)Ï;cù +h4:‰[q=`¼Âµ®•úë3ö¼pÃåÀ Ô^VØiÝÌW»E…ŠiÎ|3‘]8~½ÑXQÎDzLe=HF}Ü7Pƒˆq6F™‰î*ÓÂíNòÈlATq®ðãcµ| …ˆ×EãJQß²R×À…,®2È…Ñ&ð¼h×eÝœD2åYám±‡}u,Kgc”¹h&!e0GTž;â–q<3â™ÔvúÛî^€‡SFøÛõ[:ªÔfú¼¬Ã ?×álù1ŒÄƒI/4]q@óí?Ñ8’ñ†Æ1b§ú½\ÏrGþ›t<ù‹”:cPÒ5رdŒ/¬¯ºží÷ãˆW°>ëlŠMˆó‚ºŽá{°!H€K}E]%L°Z‹¨®=nì9u`o§®c”ÔõÊj^¯ËÕuý{È®Àëâ%…¨V»-ÔM_=¡g ãŸËÕ.$ið…Ç)ûÓs‚‘ÆЗ®Ú”Û²'xØ +”]—»Íùb¿؟¡©°¡k8<Óï2§r<¬3Ék +©rŒjæµò‡•ñÀƒÐx¼sÐÅmJ7RF"OMÐѦPî<ÃSâsøŒuV×þX7ÿÀU¡ðòZå" PRïƒê>{ú?ÞîôŒòÂéÿ‰g’ó£ÓÿwP÷˜~øÇg»af¸„ìâ%ñÐåè©çá²3| K ÝýýTø[ç{ÞU0%„HË¡r»Tø~iÖ“0ÎÆ(3Yƒ|ŸC61€]öC,‚j¤¬¶iéîì‚=Œ4íVö0ÜW~9ÎaÊ9‹\`É|í>LBÍì¤2Ñ"ìy‹H€7´ˆÊK1&ñË-BC‰a±gÆö®]»äÚ÷œkG2=Ð1JÎÅÛŃ{û–Ò¹Sp(: +'öuð8Z¿›· CHU™îá|éAæshQ‰P¼××ãÞÍcoY~®°ç¦åú¡~ÚÕý }À£/­ê-uÊüo<»ÓŽþ­w]D÷På¢à¢î;N-xœZ¼L¤v³¡»ÙÖ%¾4©h<,z¾¥™äut¼× +Ÿ6ô’fŽ&û@d !{A¹I1ùO!&Ó¦¤Ø.ªU½®{z¥ƒòæ|ú¡§ou„Œ7Ù<­^h„d;o×àçÄ^x‘!²`H¤òf®“8ÄQL;„KÅ0 ›ÕÐh³[WÛzNÃõØ­ñÂ2Ð@¥}x ‚€tŽ4ËîExoåâ[%hCŠ-ñõ¶ÿ—O,ÓP¶(E×Ç/ƒÒ›"Ÿ*zMä¦kŸ³yûè ”BaÖøH j+>~ …ëŽÚ¦¥¶ëËfAŸ4²!rNC€ &fFar¼°^äˆ C&d)ät¾ÛEñ÷°ëØ ôA¹},õãÅ:‚]Õͧ ëd·bؽøâixGäA4» ¯T ¤†£GévkªµTfÖ·³ 9=?>TýsU5Y–ÙaI’Lè µaó@yÞ‡òˇ ŽÏ–ÞDÆö³U;/WÅ(-8õyrxk\òy•ãàï²ge ò€`T/U2uUØ$V*û¾œ/C"Žíà~‡2žØZ¨U:¬i*ž žÎ×ãã£2RòñwHÂþE +²>Ÿ2˜ÄáÎG9ü)¿²ÁrÔ™½ã7àã~€ª;'è¼UðB4²nÃÑ2–'ÁN;ú3Þ*ü?ÚªŠª•YZêð€rõ\¾ÄE^í…ºbYS¦iM5> endobj -1092 0 obj << +1132 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [356.2946 363.7923 412.5133 376.6291] /Subtype /Link /A << /S /GoTo /D (address_match_lists) >> >> endobj -1087 0 obj << -/D [1085 0 R /XYZ 85.0394 794.5015 null] +1127 0 obj << +/D [1125 0 R /XYZ 85.0394 794.5015 null] >> endobj 242 0 obj << -/D [1085 0 R /XYZ 85.0394 769.5949 null] +/D [1125 0 R /XYZ 85.0394 769.5949 null] >> endobj -1088 0 obj << -/D [1085 0 R /XYZ 85.0394 576.7004 null] +1128 0 obj << +/D [1125 0 R /XYZ 85.0394 576.7004 null] >> endobj 246 0 obj << -/D [1085 0 R /XYZ 85.0394 479.565 null] +/D [1125 0 R /XYZ 85.0394 479.565 null] >> endobj -1089 0 obj << -/D [1085 0 R /XYZ 85.0394 441.8891 null] +1129 0 obj << +/D [1125 0 R /XYZ 85.0394 441.8891 null] >> endobj -1090 0 obj << -/D [1085 0 R /XYZ 85.0394 424.9629 null] +1130 0 obj << +/D [1125 0 R /XYZ 85.0394 424.9629 null] >> endobj -1091 0 obj << -/D [1085 0 R /XYZ 85.0394 413.0077 null] +1131 0 obj << +/D [1125 0 R /XYZ 85.0394 413.0077 null] >> endobj -1084 0 obj << -/Font << /F21 658 0 R /F23 682 0 R /F39 863 0 R >> +1124 0 obj << +/Font << /F21 690 0 R /F23 714 0 R /F41 910 0 R >> /ProcSet [ /PDF /Text ] >> endobj -1097 0 obj << -/Length 3648 +1137 0 obj << +/Length 3650 /Filter /FlateDecode >> stream xÚÍ[Ýsã¶÷_¡>UÎœpøþH¦—Ä—^š\Ò‹3}H2WZ¢mÎQ¤#Rö9mÿ÷î DR”ìÔÎLç&!‚‹Åb?~»€ÙŒÂ?6SšhÇÝÌ8Iej¶\ŸÐÙ¼ûê„Å1‹nТ?êóó“—¯…™9â4׳óË-K¨µlv¾úi® #§@οøîíë7_ýøîÕ©‘óó7ß½=]pEç¯ß|sZgßœ}{ööüøE…›ñ×WߟŸ½ ït$òù›·_†¨¾;{}öîìíg§¿œ}rvžÓ_0£WòëÉO¿ÐÙ Öýõ %ÂY5»ƒ”0çøl}"• J -Ñõ”'?œü=ì½õŸN PJF4Wb¶°šp£ÕáiæMåˆ1ÊŽf]hK4£¸'ÔÎ{[âz[b$qÖÌ Ñ‚ ¿#ÅÍX&Ö%œÛ {„P8¶vZ$‹Žà¢OqŸ;G‰âcönêM‹ ¾| »±ŒCÛœG½ªPKìüÍ÷ø4½¯3HCŒ°:~Tm×ùf‚¸PÄj¥â0P5îôüü:Ÿ ÈAm¬| !NÀwaXÑfËb]´ù*pÜÖ¡“ƟכSfçõöê:ô?B½@Ú³“ŠΡÁˆSŠ{ªwE‹C™™ßfå6oBû"/ë;lÚ9£\†Îöþ¦Xfey~ú™ò¦ÝËÀ‹ì@÷ö”Í›<´/âø›ÀÚ2o˜9¢CV6§ðaUÕÕéBP=Ï|ª0Q]· Qi`³ªðº©×y°Ì€â hs:Ϫîã6ß͇0âgªè??ù3›¼Ì—í`ì&«Võ:´¯‹«ëEÜw”âjJ¨dleÒR0꾳اù 6!ÀÓÎN-™ø$»/¹Í8Qüû1¿¢#Viù€_IÞͯô)ö+ön6ùeññqžEê=‹àn^åí]½ù:››|YüL)÷Zo½V ¯¼û¾‚ K¬”_Ù0ŒX\ç³I(Q|@DvÐbŒÈ([­¦¼ ¸+Ã2Ð\!Â^ÖeYƒ³¸ó¢ ·ð¢’iʬ¹ŽîË€Â;­‡&ê-ûe´l‰²¬€’ -íu^….h…F´8ÿº¾ }EÛ„VQ¥ãð¼]gÍð;VÚùù©£`ÄE‰jÂ\ ¶\ã^æ©á3›(N8ypG¹¥Ä9 r5Š8©Ù“w4Q\ôIîï(·°KMvlG ÑTw;ºÎîÊkˆO@lÚˆùëzºóÙú¦Ì_DBld<l¤Ä¸yi§æÓDÊzñé¶!ÂÂ¥&–ŠQ€ë,oVx=iš”Pü7ˆ¡)lˆcÈTIA&hk¾–u;Ì•:N»#Ê;!GÀþ£„AèK>%"ÉÁ Í2>Œ$ì7C#: x 9œwj_\ÒN<ô¸xhWO<é?95ƒ6ðÂØ­‚C° +Ñõ”'?œü=ì½õŸN PJF4Wb¶°šp£ÕáiæMåˆ1ÊŽf]hK4£¸'ÔÎw["YoKŒ$Κ™"Zpáw¤¸ËÄ¢„s»a +ÂÖN‹dÑ\ô)îsç(Q|ÌÞM½i‘Á—¯¡c7–qhSà¨Wj‰¿ùŸ¦÷Õ`iˆVǪíú"ßLŠX­TªÆžŸ_ç9¨•4Ä áâ°¢ ̖źhóUอC'?¯7§ÌÎëíÕuè~„z´g &1œCƒ§÷T23¿ÍÊmÞ„öE^ÖwØ´sF¹ íýM±ÌÊò>üô3åM»)–Ùîí)›7yh_Äñ7µeÞ40 rD‡¬lNáê*ª«Ó… zž5øTa¢ºnA¢ÒÀfUáuS¯ó0`™ÅÐætžUÝÇm¾)šaÄÏTÑ~ògx°ðzym2à{ÂgŽ‚Û¹À ”™o\ ¶%"ÉÁ Í2>Œ$ì7C#: x 9œwj_\ÒN<ô¸xhWO<é?95ƒ6ðÂØ­‚C° ä"Ìp¿ÿáÍ`rp³—÷Oàï <âýïÇð¢¨nëòv8N€ë¾Õá‹fYßx„ƒ/Ñ<ðiBG§~#oà¿’ÃÀÆEì؈ Ï`o{µ¡…x¦ë‹ÓÐsW”eG¿]^ÇaÙòÃb Éämöä28©uø•U÷¡áÙ= 6úqüiÐ`‡6B<¿ƒdA¡ e¡e„8Ž6¨$œE±|ÈïÇkvˆ1£vãžêz;‚‹>Å ¸Π逿b5 5@.%¯¦0%ÒðÎcìÌŠj/È€Qõ˜ç[i¢øÀR¹ö¸VõVÙ:ŸvúÕuN(˜A´†&¯Ú`µFDS†§-éC<ödáÑæhÛÿÆÍgŒ!áƅܺ/b81°!Ê°¡Y‡LÀÆ5l´ìÈ%ŠºŠ¶”/·›¢ ÄÛT_[Ÿfc›ÏiSZ£›”p!¨´™T÷l&Õ§xؤü•EÓ>ƨ…Ê0Ø·P—„PóºÊcÇ&<×uPª +Ħ¢‹r‚BCðWîù$“(> °BêP6Óî&ªX…ϳ•%¿ º °]FØŽÝëbY—uÕ„þhÀˆ#"øÀšòj£.íÁ†¬3£Hêˆ í”ó¹,¨+â<žd÷ÅA â¿9s¼¶¦”†¤<^ -ŽbÒõ”Ñ]]-ªü*k‹[ÔMMç‚/ ­ o‹ªÍ¯|y^`¶Tœà&Z*»´G\\ÎAá úºMAštÚp§œÔ0Õ²Ü6ÀfcXjnþ‡à0×r™ß´ÙE‰Œr"-t 8<€³„2Û3mç¿nëàˆ õH_@Ô¦Ûvìh[¾¦ÏXÓƒ–¯¾à3²ç $cÃ\ä×-˜x–6Z)¸˜SŸ^(*ü6ag*W1Á WfT¾Xg‹õÒsI!ðÞfEB¦ÿ¹®·ƒˆÍ“iŸt„RêFû é;ž(ZÁÔ ’Eb¨åO{¢¸è“Ü»”’XŽ" ;&vAX&鎰6é#U„“ø½èl#‹­»¬bƒË`-ËÎxbù¨gOM¾¹Í7£Ï›6Û´:ŒƒÀäÖ€:ò”^>òÃR_Ò°eX}ƒée8{Ãßá`Ê…òy¨co|ëa„ÂeV†Xˆ#!C­7ŸNøÎ$úŸÎ“ým‚+Èì‘štµÞLc‚pªº|˜ æˆ¥É‰ù4ZX9ÿP”õÅ}‹yûD5•é›oÕâ?‚±õ£[´ŽŒ-$s»í؉s•Žt¿z¯ÍáU‘ª»‚¦Uwwì !(bÚ+Hš^uà‰§½~ ÷ÍOÒoVº1Ÿ¤ÿMŸäúò X3æ$e¯2‰Çãþ¶K ¹Þú¤›š æгWõ‰iD:$‡¬ð…–1ó®mÕW•7ªS4‘Q`V„©åáü¼5³Rj#%5ÂP¨™Ïr˜ÚËr`ÜüÇ& -+]Ô `Ò‰íšXFõ®rv2\ÁÌèL#¹¦‹¼I~­Ë„ê蠲˼쪻y;H­ƒ ãQ>zÊP»ÊÇ(æ0"í#½'¢Ç?25Õñãg¾ ôÓxÉÞ‡Ø2U½Jãž­zÕ§x¸z5à/ø>{°L[˜x>‰â 2Æ VŽ VõV¦œ”èBÌYásü}((F™Î¿Å½ƒ@Ë*†ò£Ô™t_§~°¨…G•–Egjß!èf*£gé4¾Ýló'£Bˆñ©Þ0îB¶k]ÇåeV6S”„@Mî$ ØKø½¸—]¢œA -=pXxÉW1]èL"5À:Áô§ÖÍŸthÍ&x…MÖ–]4Êt‚™:êSÄ™´wGüO2ìÿßÊŸE4T¯ü @Ìœ²w¬ -ƒ{×À¸À|(ß}²‰w}’S&.‰„ž“ŒNš¹&TóNY¿ÃR¹Vkçûš 3­ÜQ[gxO"Ñ›†Ðréäù–þmqyÿàí¾GÒYÜd B…)cöúÑ|mòËM®ÂìsPaåÆaÚ3Êp „Æ*à!æÆùÿ‚á9x8ZWZÆⶊؓ…Ö¿¦ÖÂ0uæé®È3H ‘%üÁË–ÓpM/¥Į"´KzwDLèSœ;g¼x¹w;’ºtY³)³ÛŒr"-¤@ Æ,¡Ìö @Ûù¯Û:8"hc=ҵ鶻ZÆ–¯éÁ3Öô å«/ø ” ÎŽJí̼Ùv4²fÂÇ‹š—k_}|¹¾'mÞ´d‡¿Æ«Ñ ­Þôóši=ìíðsy:ôÈÝï ?9|Œ Œ€½¤Çá8 nuˆ'Åoù!MLŸMûhâCH#£‰>ã ž°ç‹‘_º 0!Xˆ·=˜Àˆv)Àn«ÎÁíÏ©1ÎöJhH9áÐGL¥áÂt`z•_fÛr + IF¬LÅL²«¯(øx ð¯&K– • +5»-$fÓ;.8‚rr&­$Z‹g(av}’@ˆK"¤å»™ì9DÉØ0ùu &Þ„¥V +.æÔ§Š +¿MØ™ÊULp••/ÖÙÇb½…ô\R¼·YQ†é®ëm…Ç bódÚ'¡”ºÑþB:F'ÅŽ'ŠV05ƒd‘jù“Åž(.ú$÷Å.¥$–ƒ£HÃŽ‰Ý@–É@ºã#¬Í@úÈGád~/:ÛÈbë.k†Øà2X˲3žX>êÙS“onóÍèó¦Í6m„ã 0¹5 Ž<¥‡ü°Ô—4l™E Vß`zÎÞðw8˜r¡|jçØßzX¡p™•!âHÈPëͧ>3‰þ§ód›à +2{E¤æ#]­7ä˜ œªn&¨9birb>VÎ?e}qßâAÞ>Q DeúæÛDu§ø`lýhÆÖ­#c ÉÜ®F;vâ\¥#ݯžÃ«GsxU¤ê® €)FÕÝûBˆŠ˜ö +’‡¦Wxâi¯È}ó“ô[„ƒ•nÌ'éÓ'¹¾<ÖŒ9IÙ«„ŒGâñ¸?íÒh®·>é¦&¨9ôìU}b‘‰Ã!+|¡eÌ| k[5ÅUåƒê”Md˜aªCy8¿oͬ”ÚHI0j泦ö²7ÿ±‰‡BãJ5˜ôcb»&–Q½«Ü‡… W03:ÓH®é"o’_ë2¡::¨ì2/»ênÞRë Èx”ž2Æ®ò1Š9ŒHûHï‰èñLDDuüøY€oý4^²÷!¶LU¯Ò¸g«^õ)®^ ø ~£Ï,À&žÏÅ_¢øƒŒq‚•£ƒU=…•)'%ºsVøß +ŠQ¦óoq/Æ`вJ‡a‡ü(u&Ýש,jáQ¥eÑÚwº™ +EàèY:o7ÛüÀɨb|ª7Œ»íZ×qy™•Í%!P“;ÉÅvà¾@o…îe€(gBÜ^òUL:“H °N0ý©u3†Á'Z³ ^a“µåG D„2`¦Žúq&íÝÿ“ ûÿ·ò'@ •Ç+3§,ä«ÂàÞu0.0ÊwcŸlâÅEŸä”‰K"!!0À褙kB5ï”õ;,•k%°v¾¯ 8Óʵu†÷$½)`-—Nžaé Ñ—÷Þî{$ÅMÖ T˜20l«Í×&¿Üäá*Ì8VnŒ¦=£ ·@h¬bnœÿ/žƒ‡£u¥e,ža«ˆ=Yx`ýkj- SgžîŠ<ƒtYâÀ ±Üa9 ×ô"\J<àš!B»¤wGÄ„>Å©±sÆ‹—{·#©K—5›2»ÍC—Õ¾¯Ý^„–/!q|=§ò\%éÝ¥ão1Ã7†šÑ-æÿí«t xÃì”DØáõñ½[ÐÜX,Òq-ñ kç^9KÖÞ»H‰#ší.’3PgJéüÕjµ‰×8èüÛx‰šßXÐÙ¿´B±âAÇÉ©Dì‡{ÈJ>Nˆû_eaÒ÷þÒÆûp¾ˆå™¿„Çþë÷y™¯!å ï?óq¾[åÀàzˆÂga!$4~‰u¨!1v€Í!‘Ý8çŸ:‚þá™nÞgxýÀ—e^]µ×qÈ¿Ã2¢{,Iýh¼/VÝø°¶eù>ï÷:ÿuhÝ¡ÿ?‰)6±§‹Ä7¹îi áqk¿ô×nªbw¬?6ÙÕ”cmú«Á¥!lÝ•h–^Û É{úo6Å:Û>EƒŸñâ^tˆ÷Vy›oÖE•Ç—ËDÁÂ=Ÿ2t„Ë +и’õ6Η +[ð¢¾É7®°ÁkIÆ!¾ŸÊØ{LòA±n|¯Â_[3©Ö9’¹µàR(ÀõçÕbPHò 뼧L +iM½iœð I¸°±¦ÍZ¯Ïa½*€d:êy”QwthJµi‹vÛv‹«^ 3Ý…¬tGa’4:ÂìÒv_á ™üèF–¿¼Ò‡æ¡ÖWTWŸúkðóR6õÇ#tÖÍÿä?UÙý!4à®{ÞQ +ýtÇ.\ð=Þd,Bó)æÿ Ô·OÇendstream endobj -1096 0 obj << +1136 0 obj << /Type /Page -/Contents 1097 0 R -/Resources 1095 0 R +/Contents 1137 0 R +/Resources 1135 0 R /MediaBox [0 0 595.2756 841.8898] -/Parent 1093 0 R +/Parent 1133 0 R >> endobj -1098 0 obj << -/D [1096 0 R /XYZ 56.6929 794.5015 null] +1138 0 obj << +/D [1136 0 R /XYZ 56.6929 794.5015 null] >> endobj 250 0 obj << -/D [1096 0 R /XYZ 56.6929 268.7207 null] +/D [1136 0 R /XYZ 56.6929 268.7207 null] >> endobj -1094 0 obj << -/D [1096 0 R /XYZ 56.6929 240.9336 null] +1134 0 obj << +/D [1136 0 R /XYZ 56.6929 240.9336 null] >> endobj 254 0 obj << -/D [1096 0 R /XYZ 56.6929 240.9336 null] +/D [1136 0 R /XYZ 56.6929 240.9336 null] >> endobj -1099 0 obj << -/D [1096 0 R /XYZ 56.6929 212.9194 null] +1139 0 obj << +/D [1136 0 R /XYZ 56.6929 212.9194 null] >> endobj 258 0 obj << -/D [1096 0 R /XYZ 56.6929 133.1778 null] +/D [1136 0 R /XYZ 56.6929 133.1778 null] >> endobj -1100 0 obj << -/D [1096 0 R /XYZ 56.6929 104.9484 null] +1140 0 obj << +/D [1136 0 R /XYZ 56.6929 104.9484 null] >> endobj -1095 0 obj << -/Font << /F37 747 0 R /F39 863 0 R /F23 682 0 R /F21 658 0 R /F48 885 0 R >> +1135 0 obj << +/Font << /F37 779 0 R /F41 910 0 R /F23 714 0 R /F21 690 0 R /F48 925 0 R >> /ProcSet [ /PDF /Text ] >> endobj -1103 0 obj << -/Length 3008 +1143 0 obj << +/Length 3006 /Filter /FlateDecode >> stream -xÚ­]sã6î=¿Â{¨³3¤¨ÏéS›fÛtÚlo7;w3ÝΔ‘™XYòJr²ûï @Yrd§7~ ‚ @YÍ$üÔ,„ÔY8K²PDRE³|}"g÷0÷Ébœ…GZ ±¾»99£“Y&²8ˆg7wZ©iªf7Ëßæ?~ûëÍå»ÓEÉy,NQ,çß]]OŒš‹·×o®~øðîÛÓ$œß\½½&ð»Ë7—ï.¯/.a¤a½b -¼¹úù’z—?_þry}óþô÷›ŸN.oza†+©Q’O'¿ý.gKû§)t–F³'H¡²,˜­OÂH‹(ÔÚCÊ“÷'ÿî fÝÒ)ö8 Š4ÇÕe"Öîլš3è¦$ðX¨æR%û¢*¢0™ é=ãÚc=g Ý[%¡Æc¶¦"m_ýJ­Y.›S•ÎmÛ࣌äÕ¯!êÆ£?Æ0£N(Eš%é j`Q“ÇzYMǸÔ´ÏvZMC¶ûjÚ’>J|Þé©`¬?ο¦NUw¦+êꨪ‚@¨XëT5À:¢*õ²ªŽq¨jŸí´ª†l ‰þ`¿°Ê¾?cÓb‹Z:µUvIÃ[ÆëVw ,Ô…ÊD*ÜGª„4ÚG&$ÈÏ8-èÜ®mÕÔ¸Ô" Òì°ŽhÜc½¬ñc\ßg;­ñ![Ô™›Ys¯¾cWÜzmº|Eݲh»É“y*ºÕ±³ ˆ…I±ÞM^NM$¤ölâ4q†ÇÏfˆuølz¬Ïæ(×ÝÙm‹>ª ­•é|A±‡Ž‚¤ÈÎrë—5غóÅᶂS§®™².§3ö¿AæmÆ…&Ÿ‘U½ÍXÚè]Éyñ-йŸœnT‚Fœ>G$p˜mØ4:WaÊI ­ÁFùóFÈÒnlµl îÑŸVÖmÕ;OŸ• ¢%È­u -@9Q6òñy]ud%Þ&2ðI˜0äe«…Ö›ºéÚ³qmäïjãuÖtÞx‡:ïe9è –ŠO™ùÚÞSs8tX®>DœjGœþ " À ß\¥á^ì2 Û>ÉNÝ“ïɆ^®¨§q`ýÒV…í×/¦tŒD1”*(ðú³ÒÐsUÓØÑ?£~¿©žcŠW½–™¿)%߀íTf*!cùÌe^@1WÜM•Q %J’0òÙ=ÈÔ’(QkðvkÑžL”€{$þ›I§`Ý©HÃ0ëv’ @OáC¢Ÿ¦#~Ÿ¶¶™ÔF$4pýë´Óº"H£ì%zɽÜä}Ý2$™jE±ú;[t$§7š¥"̲ì¯Q…Ø^µw`ÛÏéÅ¡Piÿ5ztô!”I¢¢ñŰݸ”è9'­Dªãœ¤Jƒ'¢¶€ údš%GËgv %“°§¼Ð)&\.ô} ·÷ê.§v¦B…j 6ÞÅ. ¤Î(‰Ð:ì/®DZ~€|_¬‹Ò4pñ+¥üÞèNaLŠóTk ¨ Üó%Ÿ¶CñòD™ôrN«¡ËÅ$Ŷyt¡5µ|áöÈh`aàÉB…Ä€»=’kƒ·¼ýš ¤ö4žVU` ¤}ÔB£N_%Ï “ÝE7yß¼¥lÙ‰£4mLa–B²>'}жÅ}…÷)$í@Ò·”b:L­w¹†ÂÂÑðRÈž©³» }j=Ö·?9qÍåhÕÌ¥T”̪’ÙGLE*¹dVMfB”ù‡£Ô/›´¼ã۩ʹä`sH¢ù-ò£.0wœû*ƒíÍU•õÓù:gÍö&£»)a܇/ÜMÓv^Ţ̻uQíq$BÇ'ÂohÉW”T9¨Pú›©»QŠ R ^OŠƒ•~ ß/þ²½Ôbw–YD¢d¡«ŒJKõÂÁªX!0¸Å²Ù[Zæ2L2ïk(ýWk"ÂÞ”íIÄq¡f˺~Ønèr|ìôv(Î݆ ¼b¦Üå@íÇjþ¡ÝÝmjœ—È ðŠúŠwš?‰G\öÓšL„i4ðáÏÎØãÄ{ô¸@½…ýÀ=•ÇéÝÉxŠe?¸¬»G÷wtœ]—£a•´eFx‰ºƒUa&"™ì%õ®N!n¯h€o#¾ª4þ!bðü zµõê½CeëD€ñÐm‚ƒÓ…’RÎ/êõ®öyoLŸ'4'1â¥25x÷‚ÈŸ$í>I&Îô˜ Z"GO;¾„øÖaìvŸÍfc c€Á= ÊQ¬†»¶³í†ÞÍ•óˆ@xè!‚΀·½¼v7æý¶ñ¯pä)-ÛäÍi¥3M8%t=2œûÆ€L Û•‹>¸ dì‡êkg -®–fÛ¢×5´6š'pÄÎ2°àíô&uqÆíë×lUu3ù˜·²ey¾±Mÿ˜ùÅyîWhØG–îìC(¶¡Q@uvÐ(ÎÝ"(’|I¨éMâ•›ðÆ=˜¸q—[,é¡[C öz{r³»¢ö‚§PüÈHMðäÍ àç|}ÊL* -Ç'ççD÷ïëõë©·™ý¨ãdÍý×Wÿ¥ž;kOs2츣ÿ“ÇíÂ÷ƒÌdïõäCkîíËÑábçÕÃ÷¬Þ+É‘[»æ_¸Fn}ˆÀÞ{Ïî¯ÏÙ}'&Gž8”‹…ó -,@‚A<Âr¤íLÓÑ}µÑþ[ ‚º§š ùÊ4&ïœÏãÄù+‚ã£f[švåÊ"Çoœ:àï'øɇ:C¯Î â(À*ÿú‰D RÁ‚*Jû¤qÂû)¼h™ ¾ÅÈd”àxiK(ÊÜ«y?=ØÖ¯éEÄm <ä=yú#)zaËÏ’‚#3%ƒÆA]yÞ†|У×II!“æ&’À²¨ìøáÏ…_ŒmÿÙu½-»bSZÿˆ­8ôåÜ œþ/ûûóÿ×e÷ 5L„NÓ`úS&è\¤A–øM¡¼Zïï<Ò©ˆÒ ™Øúÿ¬XKendstream +xÚ­]sã6î=¿Â{¨³3¤¨ÏéS›fÛtÚlo7;w3ÝΔ‘™XYòJr²ûï @Yrd§7y ‚â“ŽšIøS³4Rgá,ÉBIÍòõ‰œÝÃÚ'Šqi1ÄúîæäüNf™Èâ žÝÜ h¥B¦©šÝ,›_üøí¯7—ïNA$ç±8]D±œwuý=A2ú\¼½~sõÇwßž&áüæêí5ß]¾¹|wy}q S ûS8°áÍÕÏ—4ºüùò—Ëë›÷§¿ßütryÓ 3XI’|:ùíw9[‚Ü?H¡³4š=ÁD +•eÁl}FZD¡ÖRž¼?ùwOp°ê¶N)°ÇYèP¤1Ð8®æ(±t¯fÔœÁ0Õ ÇB5”*ÙUÉ6…ÉlHï×ë9[îØ* ã0³5iûêWúšå²9Uéܶ->ÊH^ýúÒ¬n<úc +êàå„R¤Y’¾ ¦Ö5y¬—ÕtŒë@Mûl§Õ4d»¯¦ )飔Áçž +ÆúãükTugº¢®Žª*„Šµ~AU¬#ªòX/«êתöÙN«jÈÖèö «ìû36-¶¨¥S[e—4½e¼neñ´ÀB Y¨L„¡Â£!q¤JH£sdB‚üŒÓ‚ÎíÚVÝAK- Í^ÐøëˆÆ=ÖË?Æu ñ}¶Ó²EÍ‘¹™5ê;ÖyuÀ­×¦ËW4,‹¶›¼™§¢[»› €X˜„ëÝäåÔÝD"PAúgï&NCgaxün†X‡ï¦ÇzñnŽrÝÝÍ3¶“w3bËÞPÙ¶ójýswa«¼¬[¿ÇG–ÛÆä¶E9f Ð~&㘊DÃ5 ¿ËÒ©)k=ÏÝýÃàíBpŽ{C ß/Œ }Jk–EuOû9/ÍÚ…/Ú»6Í-a¬û㫯1ª¡oëìŒi’-ÂÀ …dI(¡¶Dí#X©¾àÇÑH¤ª+K Q‚lJdQÐÂBYç¦\ÕmÇÀ™ëLí*Ûµ8!°!uÓ„#woêPŽ$p²_êªû®n¼ì¸Ë;`Í„X:5ãà–×îê­?SÑï´c™¨ºZÚ6oŠ ky๽S£[¹Aï;¢'4¸øÂѼ +O.fr‘'û¸Ïáv·-×fi÷ð|,ñ$bX*Zµ_ªÎä]‘ÓK6ÇkõÚ¦³¢ÁfC¨ë¢­¡Á¢Ï¥…tÞUn§®»µù¶): ’òæ[ s?9)ܬ8}ŽH: à:0!Û°it>®Â’“¾?Êß7B–vc«eKpþ´²î¨Øyú¬D-An­S‚È1ˆ²9Ìëª#;(1›ÈÀAH`Âl—­>Zoê¦kÏƽ‘ÏÕÆë¬é¼ñuÞË2rÐA,_2sÚÞSs8tX®>D\jG\þ " À ?\¥! /v•†m‰€d ·îÉ÷dC/WÔÓ8°i«ÂöûS:F¢J4˜>Âlg 4õÆ\Õ4wôÏhÜj€ç˜bª×2ó™Rrl§*ÛP ëÌW¶(óš¹ânªýˆbhQ’„‘Ï&èA¥–DшZƒÙ­EGxN0QòHü7 ’NÁºS‘†a0Öí$?@€‘>Â/†B?MGü>mm3©Hhàú×i-¦u!EFÙKô’ z¹Éû¾eH2Õ"ŠbõwŽèHN4KE˜eÙ_£ +±½jïÀ¶ŸÓ‹C¡Ò4þkôèêCh ’DEãİݸ’è9'­Dªãœ¤Jƒ'¢¶€ údš%GËgv %“°§¼Ð)&\.ô} ÙûaU—S§ S¡B5s±+i0*"´û¤ÂHËï‹uQš¿RÊŸr +cRœ§^+H@áž/ù²š—'ªÄ`”sY Cn† (¶Í£ õ¬éË ·GF£ÈO:$Üí‘\ÌòökÞ0ÚÓxZÔ%PöÑB úî,yÞ˜ìÝd¾yKÕ²Gi:˜Â* „d}(.úàÛ÷æS(Ú”o)ÅtXZïj …£á­P=Ó`— }úz¬o/~sâžËѪ™K©¨˜U!³XŠT4sŬ›Ì„*¨òG¥-&›´¼ãìTåÜr°9$Ñüùј;Î}—Áö溋Êzˆé|Ÿ³fû‡D4ÌM¡ã>|áiš¶;ð*eÞ­‹j#)¾à¡–:=ÿÎz+Æ£Ýùw`Ì“£ dQ2VZ_ºgP­ÌcQ÷MØUüéàŠÓÌ‹#ß·„eÚno[ÛÈ +`Lšª(˜5P8“q2;–vñKÒ‚æ¨\ªwëO:(€yãD‰}Kõ“!'{1Îh6n+K®F؇a}WùáÖÂ2e€õåž«WÞÔõ³YoJË\Šj"Šê@‹4U>*}„ßЖ¯¨¨rP¡ô7S¹QŠ J ÞOŠƒ~ ç‰Ù^i±»Ë,"Q²ÐuF¥¥þ +á`U¬˜ÜbÛì--ó™÷5´þ«5aoÊv…$â¸Ð«e]?l7t5>ú;çnC^1SîÎr öc5ÿÐîr›×%2¼¢¾"äfÁOâ—ý²&a |ø³3ö8ñ^#nPoá<pOåq:Gwr À‚"FYç®êîÑ}΀³+ðr´ 쒶̓¨»Xf"’É^áPïúâöŠ&ø6â»Jã"Ï¢W[¯Þ;T¶NeüA08]()åü¢^ïzŸ÷øÆôyBs#ŽP*Sƒw/ˆ,ü“d¢ÝO’‰3=&“–ÈÑÓŽoa~çŸu»Çg³ÙXÃ`pOƒ6d«!×v¶ÝЛC¢¹s=DÐðña”×.cÞoÿø +WŽÒ²MÞœfÐ:Ó‚cPòE×#ùo ÈÔ°]¹èƒJÆ~( ¿v¦àzi¶-z]Cëa£yGì, >NoRgü}ýš­ªn&óV¶,Ï7¶é3¿ 8Ïý +í#ûÈÒ}Å24ŠP6Šsw„š¤ßÇEjz“xå¼qn\r‹%=”à×ЇîG½=¹U]Ñ÷‚§ÐüÈHMðäà àçœ>e&…ãÇ“ós¢ûÏõúõÔÛÌ¿þ?Ôq±æñ‡ë«ÿÒÈݵ§‡5ÜÕÿÉëöáûAe²÷zò¡5÷öåèp±óêá{Vï•ŽäÈ­]ó/\#·>D`ï½g÷¯ÏÙýNLŽ…ÄŸlë÷ô"â1jˆž<ý#)zá—Ÿÿ$GfJ“ºò¼ }ðA^'%…LZ›(Ë¢²ã‡?~1¶müÏ®ëmÙ›ÒúG|¨hÅ¡_>Á ÂéßãeŸ?ÿñÿºì~B ¡Ó4˜þ)t.Ò Kü¡P^­÷OéTDiLý‘ÅK{endstream endobj -1102 0 obj << +1142 0 obj << /Type /Page -/Contents 1103 0 R -/Resources 1101 0 R +/Contents 1143 0 R +/Resources 1141 0 R /MediaBox [0 0 595.2756 841.8898] -/Parent 1093 0 R +/Parent 1133 0 R >> endobj -1104 0 obj << -/D [1102 0 R /XYZ 85.0394 794.5015 null] +1144 0 obj << +/D [1142 0 R /XYZ 85.0394 794.5015 null] >> endobj 262 0 obj << -/D [1102 0 R /XYZ 85.0394 337.2197 null] +/D [1142 0 R /XYZ 85.0394 337.2197 null] >> endobj -1105 0 obj << -/D [1102 0 R /XYZ 85.0394 308.7375 null] +1145 0 obj << +/D [1142 0 R /XYZ 85.0394 308.7375 null] >> endobj 266 0 obj << -/D [1102 0 R /XYZ 85.0394 249.3979 null] +/D [1142 0 R /XYZ 85.0394 249.3979 null] >> endobj -1106 0 obj << -/D [1102 0 R /XYZ 85.0394 223.4382 null] +1146 0 obj << +/D [1142 0 R /XYZ 85.0394 223.4382 null] >> endobj 270 0 obj << -/D [1102 0 R /XYZ 85.0394 151.2553 null] +/D [1142 0 R /XYZ 85.0394 151.2553 null] >> endobj -1107 0 obj << -/D [1102 0 R /XYZ 85.0394 124.0503 null] +1147 0 obj << +/D [1142 0 R /XYZ 85.0394 124.0503 null] >> endobj -1101 0 obj << -/Font << /F37 747 0 R /F14 685 0 R /F23 682 0 R /F21 658 0 R /F47 879 0 R /F39 863 0 R >> +1141 0 obj << +/Font << /F37 779 0 R /F14 717 0 R /F23 714 0 R /F21 690 0 R /F39 873 0 R /F41 910 0 R >> /ProcSet [ /PDF /Text ] >> endobj -1111 0 obj << -/Length 2398 +1151 0 obj << +/Length 2400 /Filter /FlateDecode >> stream -xÚÍYYoãF~÷¯ ‡P™Ý7ÙÉ“ãx;“ÄãÅb‘XšjKD(R!);š_¿ÕÙ’écÖÞ 0`öQ]Ý]U_-!øÉDF©d G˜GÅúEK˜;?ÂŽfî‰æ!Õ·WGÇïhÉD -"¢«›€W– ,ÃÑÕâ—X$$™ŸþøáÝÅù?/Of)‹¯.~ü0›Žâwÿ8³­óË“÷ïO.gsœqŸ~òÓÕÙ¥ŽÇ·¾³#Ò~`zyöîìòìÃéÙì·«ŽÎ®†»„÷ňê‹üqôËo(ZÀµ8B •î ƒ,%‰ÖGŒÓ„3JýHuôñèça0k–NÊ£„PA&H蔹L…)-ÀÓy×ï*÷¢$.šõZÕ}§{8.òºnz;sí(jÕõj⢈ÆïšÖŽª?óõ¦RouÇýÊß4UÕÜ•õÒvKÇw`z›WåÂó/òm§,ÁÀÎR¶3œÅûçÓR‡«Ï1N$çÄÜCÕ‹Î*ç®ìW¶eù@ãW„HÛõ¶óÕñךX— „£Ù¥‰¤$3ìŽÍ<‘i*`&Iefâ+3áw&®Vú~¡ØÍöºÑõyÛÛfsc¿¹ý¸ %û7Â0ìú²ªlssã°ÛÏáR{ÂzÛåµë×EÓ¶ªpÇÉû^­7CÇ~µÕ3xèê±$ã"›8Œ;e0nO?§`öelÿj÷Z7ö[5õRµþÐþ»‰ÓDPégœæisBÒ³ Id’e©´X{óf@“!Ú çŒD7CËZ°nÜ5nÑ*oó¢W­[v|l¿¿"Žº*ïVo;݆Al»y½ð›¦ê­gÛì£<6«½™Íj×ͧW9%%"®ÊZiOJ3PƒÚÙAïEt[{3汰ݼ0 oºÎö×Ûª/7•#ÖïïÑ}mÁÌéõØ*¿u´MíU³×x·a:Ý,wnã¦ÚI˜mÞڶʋÕ8j[ë­w'Ök…Þƨ„kŒ‚ó‚¸1¢;p0ÖwjîÖw>ê“RkiÇÖV_æiæ˜ÊCóO·À\nB¿~Ûø~áÝç·¶§nUíÕl—+·¶ßçáÔSíÛð·iÕmÙl»ûà=@"ÚGàÇ•ªªƒ6^Õº9‡¡Òa`×l… F7ª‘õŠËÁ;¡lJHÂ8dNúÅÄe2 €àn ôÉëíúZ»4³s¹¬Ý©8šÀ»õ™%†÷n¼@hÁÖ p+ø½™Œ$¹‹¾Ú³šÌéÍÛðò9@Aúù(Èœ`þZàp׿ _¼S )£ß/©;Uçóծ˖-+n·U 艠哉ð}€£}…îÞm7›¦…-¿>Äg–&¥‘.¹$OŸõæB%` ƒ¬ö°ô¿­ -#¡0ÿØ«Ï=ÿàW€Ù]iN ,F, ¡D šÐŒâˆ`€áÙæE5NŒ2(GSJC°6ŽTHã.!>ÔùÚÔc0rñ“Ê «‚Α®ó¾X}éé -0 6C¥M¶ŽYQXjqÀmaWMÙh>$™Ÿv(¦ºû8… B=âx™|µ&9éx ç³ô+PÖHâìqaˆò"ÍØÖ¶©ºg(®¨(:Ÿ\"¶+HTå¦}b­ñ:™_ïÆÄÞnK¤kŸHµõ¢˜8dcRP¸m_Ve¿›aŒã‡UŠçeÿê0:*Ä:Ì(¤lÔ=‚€ÓÞ.Ô“*ttÝž»´)Ð#B ÎóZB{u_…!³ ÍŸZŠ“T¸ÇûßÕîIuU”Z@Ff™E 5¨Îkð:ë!@Ö éû$#\1 -ß| vup1$5þEÌM6“Y@[~ -² m7Dª«ç¨+Äkù©×W…¢ -?eâ,M2žÚÐõêRKàó4FSH(Lò-÷°ŸA‚ÐÞŸƒÀפÌ¿Z˜%j|÷ÖZË` Q&_BÙwvÀ' jì&³úA[£ ^WYì•fˆ?¥-Í…¥6¨Tw­z:¢„5’‰*÷c“‰¿:Ù,á>[Ê žQGdÞeu2`2F“IèŸÌÐ~ÒQ•ËU?¿Súc'ÜAšÊ؇Yä.GŸgPÆPyðà¿öøÔïÄù ÔÓ -4ŠeòPÜg4x\ØL Ž¿-ÀAXLò§Ü1B ¢ßë¼3?+|Nú˜r«I6¤0♎N-…ÍaÈÄÀΖã¦kç»~{íXÖŽSWé—ý‰ç¸OÍðï73ÙO•?žABùÛ*N HçùãzKE‚‰°zk6:F= ë>WÔâ’Y¼¬škó” üà‘aü~‘~CaµÔŽÜTk0¿P7ù¶š.Goü3oêÕÞÃêEñ2Ñê‡ÃŒ¢ ´Å̱œúEÞÂ^ü«ýø”f™þAž¤àG2`¢g)µ¦MÙ½7\ÿû¾' ÿ_À¶endstream +xÚÍYYoãF~÷¯ ‡P™Ý7ÙÉ“3±;“ÄãÅb‘XšjKD(R!);š_¿ÕÙ’écÖÞ 0`öQ]Ý]U_-!øÉDF©d G˜GÅúEK˜;?ÂŽfî‰æ!Õ·WGÇg4d"ÑÕMÀ+KP–áèjñK,’Ì€ŠßýøáìâüŸ—'³”ÅW?~˜Í GñÙÅ?Nmëüòäýû“ËÙgÇï¾?ùéêôÒN ÇãÛ‹ßÙi?0½<=;½<ýðîtöÛÕG§WÃ]ÂûbDõEþ8úå7-àÚ?¡„ÊŒGwÐA –’Dë#ÆiÂ¥~¤:úxôóÀ0˜5K'å‡QB¨ $tJ€\&‚”à»y×ï*÷¢$.šõZÕ}§{8.òºnz;sí(jÕõj⢈ÆgMkGÕŸùzS©·ºÇã~åˆošªjîÊzi»¥ã;0½Í«ráùù¶S–``g)ÛÎâýói©ÃÕç'’sbî¡êEg•sWö+Û²| ñ+B¤ízÛùêøkÍàøŒá@8š]šHJ2ÃîØìÁ™¦f’”Qf&¾2~ç`âj¥ï'Šý×l¯]Ÿ·½m67ö›Û»P²#üî/«Ê67÷8»íñ.µ'¬×¸]^»~]4m« +wœ¼ïÕz3tìW[1ƒ‡®NK2.²‰Ã¸Sãöôs +fŸQÆö¯vÿ uc¿US/Uëí/±›8 A•~Æi6'$M0Ë’D&Y–J‹µ7o´1¢ zÎHtÓY0´¬ëÆ]ã­ò6/zÕºeÇÇöû+⨫ònõÖ±ÓmĶ›× ¿)`ªÞz¶ÍÁ>ÊÓi³Ú›Ù¬vÝ| +ye‘ƒQR"⪬•ö¤45¨ô^D·µ1cî ÛÍ ò¦ël½­úrS9b½ñþÝ7ÐÌœ^­ò[GÛÔ®Q5Ëqw¦ÓmÀr'à6nª„Ùæ­m«¼X£¶µÞzwb½VèmŒJ¸Æ(8/ˆ#ºc}§æn}ç£>)µ–vlmõežfŽ‰á¡<4ÿt Ìå&ôë·€ïÞíq~k{êVÕþPÍv¹rkû}N=Õî± ñq›VݖͶ»Þ$¢}~\©ª +1¨aã5±Q­›s*vÍÖQØ`t£ÚYO¡x°Œ¼ʦ„$L€SAæ¤_L\&î–@Ÿ¼Þ®¯µK3;—ËÚŠ£ ¼[ŸIQ"ax_àÆ „l½·‚ß›Áèñà@’»è«=«ÉœÞ¼± /Ÿ¤Ÿ‚Ì æ¯wýË0ðÅ 0•2ÊƲg%¤˜$Rr6Â93’¤±‡yÙux¹¦_±ÏjLü)'‰àWƒ¼uÆM$HBS,"AŒÙÄõ_@¸‹BXÃS°‹ ‰/ÍHÜŽ/†6‰ÏE» ì’¦`më³D€$Ö[jš°m.? +Å _¬iô]WŒ‚[z¾ó€±¹$d죕CQD°»ä஄µõÏ0Õƒ÷ahŒ¤ºm¢Žn{ÐN­Ë¢$Çvµ{øÏ7_ZÀRd|Ï ƒéÿc×6n)F·bÇ2r‘ünUú|w¼¤îTÏT».kX¶8¬¸ÝV '‚þ•O&Â÷Žö~¸{·Ýlš¶üúŸYš ”Fºä’<}Ö› •€% ²ÚÃÒÿ¶*Œ„Âüc¯>÷üƒ_qfw¥9²±4„r1hB3Š#‚!B†kd›Õ81Ê M]\\( ÁÚ8R!»„øPçkSÁÈÅOv(_,¬ +:GºÎûbeô¥§+À,Ø •4Ù:fEa©uÄ#´…]5e£ùd|Ú¡˜êî;à.õxˆãeòÕšäX¤ãžÏÒ¯x@eX#‰³Çu†!Ê‹4cXۦꞡ¸¢r è|r=ŠØ¬ IP•›ö‰ýµÄëd~½{»mxL,‘®E|"ÕÖ‹bâpIAýá¶}Y•ýn†1ŽVa(ž— üÿ©Ã è¨Oè0£²Q÷N{»POªÐÑu{îÒ¦@-8Ïk íÕ}†Ì‚@4Bh)NRáïW»'ÖmTQj™ dÔ :¯Á묇4Y'¤gì“ŒpÅ(|ó-Ø9ÔÁÅÔø17ÙLfmù)È‚¶Ý©®>^œ?¢®@¯å§^_]Š*ü”‰³4ÉxjC Ô«K-ÏÓM!¡0É´ÜÃ~ B{k|> _“z0ÿja–¨ñÝXgh-ƒ5D™| eCÜÙŸ,L¨±›Ìêm‚x]e±WT˜!þ”¶4–Ú RݵêéˆÖH&ªÜL&Bÿêd³„ûl)ƒxF‘y—ÕÉ€ÉM&¡0CûIGU.WýüNépi*czd‘»}žACåÁƒÿÚãSW¼ç'PO3(xÐ(–É @qŸÑàq ?b2:þ¶a1ÉŸrÇ%ˆZ|¯óÎü¬ð9écÊ­&Ù>ˆgd::I´6G„!;[Ž›®ïúíµcY;N]¥_ö'žã>5ÃC¼ßÌd?Uþxåo«8 çë- &Âê­Ùèõ,¬û\Q‹Kfñ²j®ÍS.dðƒG†ñûE:øm …uÔR;rS­ÁüBÝäÛjº½ñϼAª?V{«kÅËD«3Š2ÐO0Çrêwty {ñ¯öãk Pšedúy’‚É€‰~œ¥Ôš6e÷Þpýïûž,8üåÙšendstream endobj -1110 0 obj << +1150 0 obj << /Type /Page -/Contents 1111 0 R -/Resources 1109 0 R +/Contents 1151 0 R +/Resources 1149 0 R /MediaBox [0 0 595.2756 841.8898] -/Parent 1093 0 R +/Parent 1133 0 R >> endobj -1108 0 obj << +1148 0 obj << /Type /XObject /Subtype /Form /FormType 1 @@ -3909,1042 +4032,1047 @@ x 6\>RgÈbÏWÖ¹j[†› WŒÏ¢®{6;»²þFÃÇñ÷ø]š¨)Õ/Ô¬Mu;pk;Ì©Ëdh<åE–ñ¬AÏw³ð¬±±Nê¦ó¡Ä½t•‹ùD„™Â²]°Ä(‡;„ ·åŽ°Š­r²ÂÙÄLûˆ T¥Í¡誋ŠŽt’¹w_ =Î]ˆ‹=¦uSä÷—ä"ï±yl±‡µÃ-ËkHsŠöreOÚ³êvg›<7ºt,‡Ýe—;ãÒèЭ/I…B÷&ê(ýê³ö󻉨YÙ¹Ç,çkRÔšÚ'^ m" ^˜h±ÎW9AVªy­Â©/fýÆ"•œãûFy-Sng \Çdª¼˜©Æ¥†Í}B©•µŒÎ$âw1.¶&Øíþ²C¶O–ÃVç X×9g¹E{îÇ< •ãóP)!ÍZÜÅŸLÞª~ÑÔ'¯UâXLµüc“ÅXsЖõÚ¯½˜Ó’~òBL–§èªÆ¹O¦ºNZ_[Èü.øšŠû*]3QôçÇñ!Ö-žendstream endobj -1112 0 obj << -/D [1110 0 R /XYZ 56.6929 794.5015 null] +1152 0 obj << +/D [1150 0 R /XYZ 56.6929 794.5015 null] >> endobj 274 0 obj << -/D [1110 0 R /XYZ 56.6929 330.9243 null] +/D [1150 0 R /XYZ 56.6929 330.9243 null] >> endobj -1113 0 obj << -/D [1110 0 R /XYZ 56.6929 299.0803 null] +1153 0 obj << +/D [1150 0 R /XYZ 56.6929 299.0803 null] >> endobj -1114 0 obj << -/D [1110 0 R /XYZ 56.6929 240.311 null] +1154 0 obj << +/D [1150 0 R /XYZ 56.6929 240.311 null] >> endobj -1115 0 obj << -/D [1110 0 R /XYZ 56.6929 228.3558 null] +1155 0 obj << +/D [1150 0 R /XYZ 56.6929 228.3558 null] >> endobj -1109 0 obj << -/Font << /F37 747 0 R /F23 682 0 R /F39 863 0 R /F62 995 0 R /F21 658 0 R >> -/XObject << /Im3 1108 0 R >> +1149 0 obj << +/Font << /F37 779 0 R /F23 714 0 R /F41 910 0 R /F62 1035 0 R /F21 690 0 R >> +/XObject << /Im3 1148 0 R >> /ProcSet [ /PDF /Text ] >> endobj -1118 0 obj << -/Length 2415 +1158 0 obj << +/Length 2199 /Filter /FlateDecode >> stream -xÚÍZÝS#7ç¯ðÛ™«X§oi²O„e÷Hí’= O›­­Á`níÎ3@È]þ÷ëVKã±óHUŠ‡‘ZR«õëVȈ‡?1ò†q•é‘Ë43\˜Ñt±ÃG0ö~GÄ9“4iÒŸõÃéÎ?Þ)7ÊXf¥ž÷xyƽ£ÓÙçñþ?÷>ïN¤ácËv'Æòñ‡Go‰’Ñgÿ§£w‡ï>ÞÛuz|zøÓ‘ÞíìN„7ÖËÈaË‚w‡¨õþxïãǽãÝ/§?îœvgéŸWp…ùÏÎç/|4ƒcÿ¸Ã™Ê¼ÝB‡3‘er´ØÑF1£•J”ùÎÉο:†½Ñ°t?-“2S£‰òLã·oK[pØ66…`™1›»N„0L…:1–qm\§)z:R0'33r&cVI”ÒË›b‰ØÀtÕŸÎ=Úá64¯mÎi±l󲊺ú…syq½ÌÛ²ŽÄú -Ûqz"æô¹‚Í„Oâ¾v–7eÃ6õc¸cÞq1êëeP©L2#¬CÐhÂk¢¯5ã7¡¯³ÎÑ•h—×M[Ì&ߊ»æqÌ -ĺ*"²ír×Ãzê¿=:99ا62|Ñž¨eD•dš!ª 4D0º)‹Ûg#m3¬ÍäøàH"ýWNÂLÏåcÀ3rÖúÉouUüQàpí õ¤y-ÐV.ö1Ÿk2¼Ö|ö[•™`ÚYðâÒ1îÖ}ý=Ÿ¯¸e^f µ®Ž«ž^Ô½ ©FÖiæ×ðÓˤ•5f `È¢RæõÅEY] hO9¦,hšæåÕl˜—2NÅ9Éwð‚SpáRr ·tóÊU˜Eu†ÆÏM~1tw7NºÝ”„O¦„»8ߪlSõ°»6ã¼iÊ‹í±CŸænqVÏË)õUlµuœVÅ/@‰éÀ‰;˜Ò )žâ~|·º $Zej¬xŸNõbM«e VpGë¦ M)ͤ—~]­õy„uM¦`Ú$4Q¦æ{JðñÞtÚMÙ¯«–¶Êû€©ù 7|oÿC_¬õ"Ë”ta㣺…#(ð\æ-¶l)kÂà@ÇP˜¿E2Á€ÔdD;‹”ä³gD¾-ÛË;γŒwŽ~‹!@&fuògÅyMÒÑFeÜxš¤' ,?#J1oŠÛKÊ‹7@sÙ¸ªãýD-Aæéßs£ÑЪ$Õ"ži¢ÌàÖoÏ!„ZGƒcÖ™Š¾´º0šL1%L -BÑ€;Íã}¹¬á¾ ¤P$ipÿ}a^šB(f!ÿ9˜3Í Ay 3ˆFy²ïj8ïz´ª~f=a^ ³âžÎ2­ØŠ™Ê°ºê1Ì@6ãUÌw¦ùOÿ ÜœïŠ7ÚÉñá§M$ -¡D²‘´ò¸iaˆ 0‰¬UÑÞÖËoÔ)«¶XžçàˆqZPu~§çÉÚäwš;(ÚÛ5ׇäe0¯4醗ü95tZ±]sÚ3)ùcÖ®<¼Ñ÷ÕUÆŸ¬:‘éàX ¡‚Í ³ ¢RjYÒ—tŠc¾|žÆo/K ¥8!¨i¤š!í]æ¨\¡(wr¥wHRdæÇ'uÈD`1ihÚ¬&bU·Ô¸¢DáÌ¥œÅ9}nC ãºYÛ,Jr+¡DϤ¤ŽLC ÿ•(ó¢&íeCý`ÄHG P3=´ÖŒ>$]b|XÑXs²IRaš7ÅwC¾l@.ÙU%ÛU=é殧`]í°è;¼îâ$Ù¡e_Ï׊æ;¢ý;$A”±}Êz%§Ò«¾¬[<ŠæBÛ”=pk{×áeWlukŸSæ¾~b! \åFP—a<ÒË\%¡œk™C¯öIï®ü‚6JtŠÐ“ézÞ¼¬®[qY•s) \3ºÏ4nXK-LØ#íêk°®Ðù±»FGÈœŽyÏßã1í `ÎO«ã.Wõ²íx¯:_b Šùhx"$çCÅ& üNIs2¡5·žü!®ÅÔ¤q×ÀÂ9渷 Â[[Æç_Wå¯ñ¤9”ÔÿE­êzqVD8ëÛ*5ûä‹e}}uŸü¬m8É{¢m%VÎh{ån™“|e·ú)vûg•ï’ãëMªÈ:ݘäê~ ¯l1f:5Ö“.ž%´8ez™WU1ÃXÇ#5xðŒœÝ%Ò@Ëg¿@W˼­— 'ë9röA)–3c7-»cJ¿4XGAÍú!€Ÿ€`pzŒñÌJį‰ck›â²ÕépxUþÁ [x´´Ù}E û“è# áe5›hò4¡:u]·å¼lïˆ}x ‚WqÃi ®®šE©ÚX&+™1¥7CggM${»,‹›"Õ ÕäíÑI¸¹ž§ç‰Þ³ÉêA7ˆ¹jƵZš^®öª¡'%>ɦ< ¸§hz!û†ÛiDvö†?."æÔ=ÝÿDý¦ž~Cÿ„mtEEÅ<ÌÉ#9fHëU1-ñ³ÁÜÅ2ÃSîY^mFyÐÜ3íGð•ÎŠ§„d ô~8´N:†“ÇûY´òÀY+Ûí‹â…¸1`[‚ñ̦WºpEž€ƒÅ<Í6´—ÌH­^ €ŽáÃhHŒ€,¡@Êèt1T*&ù*aÜp½áQÂc•ô>ø2é³qêÇ*(X0DŠ¥V/çÙrÀ‡ Ù½­ßGU|YÍÄȦäËAíøMV ïc*‡ÒÌeiׇ …º’ëtKÁÝÞÏ»L«¸Œ ‘Y%D›?o0oÀ÷fa¢•Ã­]–Í7Ê”ÛpÙõP_ź†~ãDàú’Uì¤%?¾-ç³éê¥5¹ÒÒ›m¿þãó•RC¿ÕóÑ£/DOýÏ€Õ¿M@º¦¼ßòP—AG¡#eîÊ3ã¥ýÿ‡ýÿ’endstream +xÚÍYOwã6¿çSø¶N_Íå‰ÛS:“™MßLÚMÒÓtÞ<ÅVlíØRV’ãfwûÝ HIvä8™äÐçƒIA~ ÄˆÃOŒ’˜qe£‘±‹¹ˆGÓÕÍaìý‘ðs&aÒ¤?맫£¿¿Sfd™ÕR®nz¼Æ“DŒ®fŸÆoþqòëÕéÅñDÆ|¬Ùñ$Ö|üÓÙù[¢Xú{óËù»³÷¿]œ›h|uöË9‘/Nß^œž¿9=žˆ$°^z{¼;ûpJ­÷'?ž\¾úùèôª=Kÿ¼‚+<È¿>}æ£ûç#ΔMâÑ:œ kåhuÅŠÅ‘R²<º<úgË°7ê–é/’ŠIiÕhs ±WÚî¾ +-ʹ½éDˆ˜©X¡I¢ˆqË;“HÑ3‰‚i㑉-ÓJ*g“ºI›¼nòi=™.ҢȖ5ê ÖªþZž0ÜͲé2­ŽE2Îj´OËÕj]äS`Vžع^SÒÿÑœ€ÐÕ"HxÂ2PƒõFY–óy^̬§ S,MóÒb6ÌKÅ&äιxÁ)¸0!@ÒÌVYrÂ*½Ñ~ZÓéº +ÄiÖEÿ¡¼ÁZÉÚÔ|ƒ.-¸¸4d,!8]qÄs°çàÓ%ñ» y W¥«UêÓZÔ?/GÀl$ÈïMœ&ˆ¨÷_\Ùæð-¼Îfà‘/«´™.¾,:¸¹“Éd¿?:Èçè8i$è-ݼ¼K²hN×ø­NçCwwç¤û]I$Á•p÷ Ê×ÊîšvâqZ×ùÜåzìÐ_}¿º.—ù”z¤Ul!´sÓ +ÿª$lèÖë±Ó)¡b¶+žŒÏüVs‚ ÐÊC£ã}ã8•«-An«¼àž:ë:#K©ˆÉ®á–Y˯Ö-™œk“LÐD™ê@(ÁÇ'•ºB¤,ÚÞïN¤æï<æ'o>Ôð/œ—£]„aVIã6>/8‚R žEÚ`K;!eKðÂà +ó7O&5 ux€hמböŒÈ›¼Y ah“0ËÛ@¿Ç48mbÀuvS’t´Qî7žéIŠŸ@~¶YÌ~š±ã¢ô÷Š+kÄŽY`‹ ÞÛiíç%ä¢ Šë,—å&› êï›tSâ,Œœ®‹F`u½Î—Í$/~ØMpBDÌ#GÜ! yéié + mÌsÓÑЪ Uá5‰ [Œ½{A„ˆ¡€…”ʼnò æ~Ài¬bJÄ! }Dnm¶ô÷eQÂ}€ ‹"¡/ËK!„bZÃøkAe +„: 2¸KKCåW1Œ»QZQ>Ig}a^Kg”â¢×x‰huf°¶ãöÎôñ7xYNÓ%ÿŠ3 +Â+^i#Çg¿ÞED¢J$íI]È ]j€Iä®@(²fSV_©“MVݤ€pÄ8,(ÚÀÓ eM<õ=Ôl«GL×ÓÉK_‚éo$’ëg°¤æÓºPþ9ì1Ói¬weÔ™®À<þdÓ ¹È 圞HƒhˆFȨn¤¢²)ŽµöBòMß,rÌ¥8Á™idš!ë-R4®P^„ìì(EÚd|Y:(3ˆIMÓf%‹²¡Æ-!…;p—|æW¤ô·q( úu³ ¶Yå%†]JFž©Ëôe™ÀdÞ,jê;'F:Z€šÞ页åôu‰ñYAcõÚÁIRašÖÙ÷ƒÏppGL¶eÉ~SOÚ¹[h¹+Výˆ×^œ ;4½ìÛ€-«¿'Ú¿ +"ÈöuöJ¬Ne¢ú²î‰( ­0zäÖö®ÃË®XwkŸSç¾>°PóXƮεI$žXçJ3+k/0ôªŸðš.c %¥‰ÚHùhŠpº\ÖßPÙÅL%UU—®  8pë}¢pÅj!d÷´Û/ν\çÄB(›#!3‘"é¿óCÄ´7€¨ŸVû]n˪iywϾEDžÉùP¹Il>´u‘Üsb`ƒ@ðk±U©ßÕ±0†žèZaŒm-ãƒó×Eþ‡?i +…µ €Q«X¯®3¯ÎrS„fŸ<¯ÊõíCò³NÄ·µñ@´Ý£øú`§ôØ_»'ŒHTÁo£§øí7ð=‡.à%Ç÷›P“µ" Æ1ÉÕÃ"^i»ó™F–PÒâ”î# c%TWâÁ¿/ñ`äúž(>“:Z:ƒ¶ªÒ¦¬j¶72íQ4g±æ;—µg +_´¡¬¦Ÿ"€à€ä?0˜hŒ MKÔ_íǶ6ÅeÝép¸+aˆŽ†-> endobj -1119 0 obj << -/D [1117 0 R /XYZ 85.0394 794.5015 null] +1159 0 obj << +/D [1157 0 R /XYZ 85.0394 794.5015 null] >> endobj 278 0 obj << -/D [1117 0 R /XYZ 85.0394 656.7756 null] +/D [1157 0 R /XYZ 85.0394 632.8653 null] >> endobj -1120 0 obj << -/D [1117 0 R /XYZ 85.0394 632.436 null] +1160 0 obj << +/D [1157 0 R /XYZ 85.0394 608.5257 null] >> endobj 282 0 obj << -/D [1117 0 R /XYZ 85.0394 563.6675 null] +/D [1157 0 R /XYZ 85.0394 539.7572 null] >> endobj -1121 0 obj << -/D [1117 0 R /XYZ 85.0394 533.5536 null] +1161 0 obj << +/D [1157 0 R /XYZ 85.0394 509.6433 null] >> endobj -1122 0 obj << -/D [1117 0 R /XYZ 85.0394 456.2156 null] +1162 0 obj << +/D [1157 0 R /XYZ 85.0394 432.3053 null] >> endobj -1123 0 obj << -/D [1117 0 R /XYZ 85.0394 444.2604 null] +1163 0 obj << +/D [1157 0 R /XYZ 85.0394 420.3501 null] >> endobj 286 0 obj << -/D [1117 0 R /XYZ 85.0394 307.3784 null] +/D [1157 0 R /XYZ 85.0394 280.0345 null] >> endobj -1124 0 obj << -/D [1117 0 R /XYZ 85.0394 280.2293 null] +1164 0 obj << +/D [1157 0 R /XYZ 85.0394 252.4421 null] >> endobj 290 0 obj << -/D [1117 0 R /XYZ 85.0394 163.9859 null] +/D [1157 0 R /XYZ 85.0394 134.8432 null] >> endobj -976 0 obj << -/D [1117 0 R /XYZ 85.0394 133.872 null] +1016 0 obj << +/D [1157 0 R /XYZ 85.0394 104.2859 null] >> endobj -1116 0 obj << -/Font << /F37 747 0 R /F21 658 0 R /F23 682 0 R /F39 863 0 R >> +1156 0 obj << +/Font << /F37 779 0 R /F21 690 0 R /F23 714 0 R /F41 910 0 R >> /ProcSet [ /PDF /Text ] >> endobj -1127 0 obj << -/Length 4048 -/Filter /FlateDecode ->> -stream -xÚ­;ÛrÛ8–ïþ -¿­¼eqp%€ä)“NzÝ5“îMÜU»ÕݵEK´ÄŠDjD*Žgjþ}ÎÁx‘ Û³IùA$œûæ— þø¥Î³Ü wiœÊ4ãúr±½`—+˜ûñ‚‡5ó¸h>^õçÛ‹?½—æÒe.ùåíý–͘µüòvùÛ,ÏDvØìíÏÞßüøëÇ7WFÍno~þp5šÍÞßüå=ýøñÍ_ÿúæãÕœ[ÍgoÿëÍ/·ï>ÒT`üùæÃ4âèç ÐïÞ¿ûøîÃÛwWÜþtñî¶?Ëø¼œI<Èß.~ûƒ].áØ?]°L:«/à…eÜ9q¹½PZfZIG6Ÿ.þ»8šõŸ&éÇY&d.2E@í²\ÂpÑÔu¹èª¦n¯æÒèÙCµÙà“šÝ•4R,å®+—ôÖÔ4[Ôaàž~»uXß>¶]¹ý–ÖÝüòE8ËåþŠÛYÙ¶e Ï-ÐôʉYCó› -¾«Ð+>«à¤¼Çq¹(<°%²è0çEc‘”ž© „Ö ÞQo×UúÑ*ËY[mw›Àä›_¢Z2tÔülÈ,XÑ›.4¿´¢èïpîë`^! ; ®4´„þ˜Þ„:Ï!BÍQ„¤5ßLïâ| ò”ÞBˆ,WŽ;{Ë»LÇ"|L8E¹)Áóuø7VuCïËè˜ÀÛÈl¦±È›”ƒª°ž‡ºúš2Þ"3’çÑxOÌ®0#³+rÒP,èç×7ÿCËf[T5¶ÍâsÙÑ3%%¤y°¬ÃdåqíÑŠ]Ñ­i*‚ ksÒãøO’Ђ01{VŒQ%œF13µÞ¹Ø<€‚‡E«éL86AÐÇƯR6‚g"—‘gèƒÒ¡¹e,.ºNÀÑ™1ujê2•›HžåÂ=é§Á|.ãšÕ¾9ìÒß™>=é58i3ûÐt:Þkz*mÃÈnSt`•·-‘ CþO‡úçO40ÂL -Ü„úŸšM!lÉyä(öKøJ¡Á¡ f*ìee§Mp„8ƒL˜` q½ÓÖ/{ql‚Éëëj±&Š¡aˆQЇåŸbÁ`‚À\ª<Ó¹OG -‘ 8 물ÔNdBéo/‘D€ó1ÄSp<˜Àõ«ÎF>ÿ†ÊÛ egï -r¹Ç„G£ÆÜy™ÀŽÃ -Îw;oñ™£Ùv,w/81‡(C«è½;rç¼°™âO( Œ¢è¾ã#Äg, @·<âäÀç”À@ৣõšGŽæÄ›M$AC¿å×rqðN^†|ß(ßô‚sYàde‚(}*Ëså`mY&|þA3ûÕ%=|L•Á‡Õçk¸a ò·å–<Ÿ³…÷xFÎ~(`¸¦Ñ·ÌaÒ;‘…·®œ¤Zg` äë“’s¿æIdÇÜ{„mUŸìÁºæ‚¿ŒJýê§w>‚é½8¥ëD™É ŸӔ€gJª'ÏÞ¯yƒcH#nb‚Œ¨jŒJŠ±â®9t4ò†ÑÜê?˜å‹K4î'r55ÌUªºÍ}Ë=S‚e™2ò¨€Ä1£s‰’!×X2LXªÞd¼Â4›TÁŒ¤ 1°o»¢óÉöj ¿»ÃÄuºvgtq®AòSFB.ûT˜ -×¼-Ãngúß‚~–å}qØ„¹©ÊóQ‰ _ƹ×!lÒ1lÒC5š‚%púFkõDÞ/­UšáUúÐÔW]XÚ äPwåb¾Ž¦^½â`Œ ç³›š–t¾6s‹¢-¯)Pîa›¶¡ukßy±ê\”¤]ÆsýÎ*†e—ü”³þ1Éq¨Ÿìˆ#~c’¤fw‡ð°lJŸ¸¡Ø…¡uñ¥¤§"%ó‚S1ç鲟„ ¨ (›HIäd̾@Ð ±“SACô: À.`í=@Ñ(–adŽ1°ø2$­Ê»cÿÕ=Éâvø’l¤É -«¥“0®Àb†DÖÔt|)SÒËdË r÷˜ÍœÂÏœ^G‰{ðùaGé°a³8A²ŽO¡ß‹cqòîPm:4Ô˜šÃ{lPâÜ‚ä³ gË¢àMðÆD?³¹9J!Ÿ¦2ä ²'rí:¶|ììÈ®ìXÖ`Ù‡k|ŽôYáÁ€Ö³y‘ØÈbNš©ç@³<Ñ$H0x¢™y‘àäC]ú(vèsBk±­tI3Tçp0Ô†µ¡âû¢n«à(­£Æ©Ž¦{áÉ^‡¾åÛ>#‚ÕË*lKFF¼Qñt1ൕ:R©eµª:jEÂÆÚöC#ËLh]Ú`¬™”G‡þ¼lÁâ«øa¿¦[ÂLJjb¢¿ÞÀ±.ôÝýî ýRg²GȯÄï!ÜNÊmw ×^KpÕ•>À¾§_¢~ii¨='Z9™¬ÿÝW˜j‹ Ú‚w]€y!æÃñ©å…GÉhò¤‹q”¤’̬«Õ:¬.WôqI3ÞäJ7ÖØÐC¦{€|>û_ï0aelÉK4ómå¥SR}n¶ÊĦAAÖ>Þ¢'êªÅZHéÃÔýdJá½óÊ5LZAwXpź9l–4ˆ&žR>„¬_Óz©BHß‘²­*ß  ]òÍCMý«û fx½©]Ž]t†å`ÄQW §¢?xÓö îXà’2žñä<4=_¢'=ñIt(µ‰$]{Ž'éÂô¤¬c¶…ï}5Ñ"Œ‘’M8K„kõ(°r@ð—; ÇÉž¾þh¨‰;&š…,s¢÷›O„÷š÷¡nìøR„r@Ø¢ˆ]ì÷{ˆƒÔÞ¡qçÃÃÕ¹.AÛÚj¨œ«ÙªŽB3Î-Á—Æk¸¦ -×¼ -HÈYgGÆǜ˩L¡…žhUÂlD1á«°àìó÷·TáÇBÚ5Ýê(܆MÂõ13«KªÄÙ~ÿIhø$óˆ?Í—'ÔÐ ÷­z©EÀuØ9¨¼ÃŽÁ_€×€Ñ²¸‹ßzŸ‘ƒHb…„œÈÞŠïOáJÒ¨þ®ã•5º¡´cëp k0M,Úglõ{ùE*ÊôY -,[Vm@y¼Í]â ¢×=ñ.ýbºšŠ[V’tþ‚ê/\ŠãÀ«”|a!(wI˜\…ºÿ«dê\‘‘÷¯Sâš)ÇòqäAô\ľ‡™qRâSÆÃ]Y¼l¬¯æœ1ŒS›Ã2îÓ¨~…7÷;•ÕÛ w*ÅÐêûjS¢ñyBˆ ’¿‘Jý:fMžÅA~õqÈ)mz í4<îÕ²!xŽ$ä ÇŒD%ª|Rc¤Wî½ÃѸÃÃ4k—£¦9LÝÑê]SEphób¤s¶ËâæŒÈ¿ó€tY‡ -ÜôvöÕ-?ºdz–Z¾ƒŠgèX3»/è`¬Ü€4q¹­jH¾úX{ã÷4wšvÙHì–VÐõo§‘{ƒ²Ÿ¡+–ÔÊ°NN)𰯺pc7±¯z¡¨…F}ÝCê«É¥ù¦1³÷âhùµÀûUèh‹¸ž&˜Þ˜âL¯,8¾ÛW_¼ÃÁŒ~èÂ"‹¡ >Å^v"@=òšõq #ÒÍo bñnî+^F¥-Ï©¢› è!^üÿX;DÔ9Aú?,.àó?üÑÀ;ü…iiz³j€gë-­Äû›õêuê¾=Ûà/›Á%Âýóõ¹>¶]¥Lu]XO£oþ—Š¡Ñ¦ BÅ™’±™²$ …˜Ëüóø¿§¨ÿ å®jendstream +1167 0 obj << +/Length 4329 +/Filter /FlateDecode +>> +stream +xÚ­[ÝsÛ8’÷_á·“¯,.@|'OÙL2ç­ÛÌ\⩺«™©+Z¢-V$R+RñøöŸßn4À ²<ç”Øhôǯ»a~Éà_*i—»Kãd¦W—‹Í»|€±/x˜3“æãY½½øËGa.]æt®/oïGkÙŒYË/o—¿Ît–gW°›½ÿéÓÇ›ùüîÊÈÙíÍOŸ®æ¹b³7ÿùZ?~~÷÷¿¿û|5çVñÙûÿx÷óí‡Ï4¤Ã½ùôõ8zœXôó‡>øôþÃÕï·»øpÛïe¼_Înä¿þÎ.—°í¿]°L8«.á…eܹürs!•È”"ö¬/¾\üW¿àhÔÿ4É?β\è<ÁÀ\¤¨\¦ !ßÕ¸˜ÉG3¹Êl®-,Sªºì¤ñrš–çaÒ¢©»Ý·³f <ÊÝl±*êºô/vVµÔYÐëíûŸé½m_aqß^WmWÖUý@sŠÐÝ­Jêh·å¢ú±¼\&HÎ¥†­«Hòöðd„tcV »ÁÙä°CkÓ'3ïWœ—$¶)ŠgÎ>åû¶Ù¥˜šóŒ9vÑÔŠ~k¹8É©@(±ßýŠgX •É¸ÖfÊ‚b¹Ü`àa×°q!f«j±Â¹ðMWLÂ79ðU©œÄ¯@^Y;»CVY´ð~óó7I=Í®ïÑÔò€È–m @æê„6hØ}näIÆæ¹}Éa{ÒdÚÀQ¿–±ýŠóñ’ÇŒéÈ,…ï§=ÇX‘9&#g›{š"'[åp< , ÏŒÊOü÷ÄR6³Š™ËѬߘb(ð®j¿B›‡½Þï«F¶Äì„—ØßÒ“Äfų²³Çj½\~þ2œçpVoIrn@„>„¬Î¢«šVFáRklI/ØS,åÖSo¨d8ZÔO¡ãžžž,l´O°¯Í¿µ4ˆôë $•(@Ú‚¸rù¬¡q2hô+úÊhQ’Â@à°WÜ‹;&}´Að|¶oqÆPÈ“f@ZeNJ+6ãà> ȃÑ`å_+¬qÁùxÅcYå’ƒpvøðs²*3Ƶ:#«t6Lyó&墂`ÐÔqRvOÌ{jö ZÎE ®¦^?Q Y|ÌZg2!L\oW/i5“ʪ‘ ÇIÈákëfQ„Ï­š¶ëÔ;¾ƒ™Íö®X| g=ˆA…§¢ !êa‚Y"ÜDšÀ˜e þx‚z  €.R¿K3Þj%{Ƨ–Ýt""@NÞ À“¶²h6›²^zƒ÷ÞDCcSüQmöziËÅ~WuOWœs8C¿wë2É$ª>~GKÿµiÛi´ŒÊ¾X{ïŸ=jW9€Ä‰Ñx?vš¹žƒ`_‚-‚Ž)¼ÇŽÞÃ4ò^aê¶ÜmªŽ¼<¼ÞAjs³¸z’M¹}ñØÑÜS7a ÁŸãæRk@3V¨×‹p\q>^2!Â^C„ÑOC27EGÀtªg.ƒCߑȸâ"%ËÁCzž‰@$¥g2¡uƒwpˆ·«*È=óh•Å¬­6Ûu8䛟£Z2tÔ|*Oc_E¬èMšß5ZQè)rºoƒy –ÀßR@çƒÐáoj­!ÜÖàYnåëñw\q>^2…¿óLKLJ/{Ë»Lc >&ì¢\—àùºÀž&x®´bh8ûÜñ3Š!`B÷ïƃ~Å3<dŽò ­†eÊ,ø~DÆÏiD¦ Ú1‘§‚/݃ϑqpðP7ô¾ŒŽ ¼½‘JLÓ»”ƒª°þ÷uõGÊxç™\§³*fœUÑ!«b(«bf¿|ºùoX6›¢ª©wH±˜iŠE‡‹‰ù3É/øÛ¢[ÑP\.ÌÕ¤Çñw>BB ÂòÙ;¯"F° âÄ:xçbuŒûô@¢U!bÔ¤@úØø«”àY®E<3ôAihnYŸ$ºN¬£2™÷é—ǺLÅ&‚äÜ=ë§Á|.✇]³ß¦=¾3}xÒ;jpÒfö©éw¼×ô\Ú„žíºèÀ*oZbBþ/ûú§/4(ÂL +Ü$œüÒ¬ €°’óx¢ÐðŽ»m +€Ž!–8cØböÏðzøÜ Nø²Ý®+ÂHH3!È‚ôÑܺ£e†®Ù=…Ús›ðìÏè¥ ÚU×–ë{bE&@£çµŸM#Š´›mwÕ¦ð4ÂK±ïVÍ®ú¿umJTäªÅG[²ÿ:&ú àjxéu^¼~„© ¨‰¤»û%|%@hðC`0•eHñ« p\o>,˜0¿0½³&½•`˜0òžWhÁ¸6ôðkùVLL>?˜Öò W”`¸ ¸ Â` ÎO¾>9œWú*@vÅsþRŽõóÏ}ÿh]ïÑ)t'îˆLd…ŽÃžI!Ïð¡Ÿu†ŽãÕF>ÞÄŽ¦ª§yÅ]³ïh äñÝÃ>„‚0—hô9r95ØU²<ã³^îLR–eÒˆƒ”ÇÏ%’ˆ\a1a]r0}ŠÆ+R³N¥`ÀB¡~Û÷hi¯Îð õ®ÓÙ<£t¤¹]HG-\ôÁ1¥²qñ¶ _äéŸ=–å}±_‡±©)ࣤ¾Œ£®RH©!?Mð €€QJ>“ VŽrÏð*JÄâuªÞCCÅ›2ºÚrRû†Æ®¨Û*8Jë($„~J­„G +Cáx¡e¯C%s…… +)Áìe>KFz¼Qñ|1†Iy RËê¡ê¨8 †`·ßYfB1ÓcÍÌ ÔØ;TLàe¿xˆ?ìçt«}èòÔa—§dòüôdÅdZÊóµæ;îM[ð7-¾)¾Y¸`¯ øZ0ÚSvl›¶­î|ŽK°- ß±Ãß0ˆ¾ÁO’—„áp(Ðoé1Àœƒ„’g0¡ +ëÄ_ù :ö5rôj•Âq>ç­/L'zToÕ3yAD’›(ðÍîkØj´¼À2.íA©%X.AÞŠT¾ÞÇÚ<žAúÓ kÌèñ§½ŽHGì€g`‡ ÒÕ[¬?QĺÞð;©àCEãÎ —qDÄ\Nf-ôq©ÉÙHbÂWaÀÙó7ºdðc‚íšîu·á#áB™™Õ%eèlÿý ´Fz’q àO3¡å54à ¬^jqá:|9¨¼Ãõ߀×@Ѳ¸‹¿õ>5H0„D]œ(åx_±.Â%¥Q^^ÅKltgiúWábÖ`šX´ÏXü÷gtàÃ5Ÿ¥À´eÕ’ÇŸ¢K|! zÝSoÐÃÕnÉ1“¤ô ²;^¸ÈsoRò…‰ í’kryrÍpà!úéˆxöoSâšIÇô8òKôzõ•gÆ ­Œ‡ûØø¿êjÎCœ²Xï—q_Fù+üGŠ]ÌNEµplÀ w;ûEVÝWëÏÛAìˆýB~(Qôë5ù#"ð‹Ç!Ǽ9 ð6]L†³Às¤ !#™Èò …H¯Üy‡!¢q‡Æ4j£2: ÝÁìmSÅåÑæE¤s²úâæL®_Iy º¬Cnzß+í–Ú“ŒTâ%äT<“ ÇšÙ}±@—}íäÞ„‰ËMUCðÕcE¬–ßÓØqØe#³[šA +L¼¯Fîe¼|´ý]º¤‡u…âÇ]Õ…;¼:`_jöØC¨…z}Þ;Cè«È¥ùbž1³±·ü£ÀWèhr¸š$˜Þ˜âH¯,Ø¿ÝUß¼ÃÁD?t…‘Eh‚­XÝN\;?ðŠõ8†ëÆæ7‚X¼­»ÃŒ—‘iËs¬è&(zÀ‹ÿkãD­i¥ÿÅä¶ÿé·†ÿù€ÿŽ5½W¿~hàÌVš‰7:뇷)¬Ž`ÞÁ´T‰ +®B¤Š+¬gëÿ)l¨°Iƒ¹ÎüDµÈØLZX$…[úˆòøßcǤÿ d@Ééendstream endobj -1126 0 obj << +1166 0 obj << /Type /Page -/Contents 1127 0 R -/Resources 1125 0 R +/Contents 1167 0 R +/Resources 1165 0 R /MediaBox [0 0 595.2756 841.8898] -/Parent 1093 0 R -/Annots [ 1129 0 R 1130 0 R ] +/Parent 1133 0 R +/Annots [ 1169 0 R 1170 0 R ] >> endobj -1129 0 obj << +1169 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] -/Rect [55.6967 576.4843 256.3816 588.5439] +/Rect [55.6967 552.574 256.3816 564.6336] /Subtype /Link /A << /S /GoTo /D (rndc) >> >> endobj -1130 0 obj << +1170 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] -/Rect [268.5158 576.4843 332.4306 588.5439] +/Rect [268.5158 552.574 332.4306 564.6336] /Subtype /Link /A << /S /GoTo /D (admin_tools) >> >> endobj -1128 0 obj << -/D [1126 0 R /XYZ 56.6929 794.5015 null] +1168 0 obj << +/D [1166 0 R /XYZ 56.6929 794.5015 null] >> endobj 294 0 obj << -/D [1126 0 R /XYZ 56.6929 311.2132 null] +/D [1166 0 R /XYZ 56.6929 287.3028 null] >> endobj -1131 0 obj << -/D [1126 0 R /XYZ 56.6929 286.8682 null] +1171 0 obj << +/D [1166 0 R /XYZ 56.6929 262.9578 null] >> endobj 298 0 obj << -/D [1126 0 R /XYZ 56.6929 252.8569 null] +/D [1166 0 R /XYZ 56.6929 228.9466 null] >> endobj -1132 0 obj << -/D [1126 0 R /XYZ 56.6929 223.8335 null] +1172 0 obj << +/D [1166 0 R /XYZ 56.6929 199.9231 null] >> endobj 302 0 obj << -/D [1126 0 R /XYZ 56.6929 155.208 null] +/D [1166 0 R /XYZ 56.6929 131.2977 null] >> endobj -1133 0 obj << -/D [1126 0 R /XYZ 56.6929 127.8981 null] +1173 0 obj << +/D [1166 0 R /XYZ 56.6929 103.9878 null] >> endobj -1125 0 obj << -/Font << /F37 747 0 R /F23 682 0 R /F21 658 0 R /F39 863 0 R /F48 885 0 R /F14 685 0 R >> +1165 0 obj << +/Font << /F37 779 0 R /F23 714 0 R /F21 690 0 R /F41 910 0 R /F48 925 0 R /F14 717 0 R >> /ProcSet [ /PDF /Text ] >> endobj -1137 0 obj << -/Length 2663 +1177 0 obj << +/Length 2511 /Filter /FlateDecode >> stream -xÚ¥]sÜ6îÝ¿b噈å‡(Š—§4urî]“«ãÎ=¤™Œ¼K{5ÕJÛ•6;¾öþ{A‚ÔJ+ú£ãñ  ‚Ù‚Â[’P¡³…Ò‘”ÉÅrsFw0÷þŒyš4¥cªï¯Ï¾{'ÔBó|q};âUZlq½úœ¼ýç›ÿ\_\§\Ò$'ç©Ìiòý凣ñçíÇï.ßÿrõæ\eÉõåLj¾ºxwquñáíÅyÊ -É`=÷Xðîòß½¿zóÓOo®Î¿\ÿxvq=è2Ö—QaùýìóºXÚ?žQ"t!P´æ‹ÍY&‘™SŸ}:ûy`8šuKcö“¢ ²à*b@ÎŒ-%ŸXPj’ .œ­Ò€RšüfîQ½O}Ù›izþ`~¥”7U_µ bÊf…À/]yg¬`31:-ºHyFtÆ2·Ëõ:±§$ϸbKcwŸ3©¬Mw 쑬P0Óá°ÄŸn]îÎY‘˜•›%Žý*§¦nÛûÎ p¨ú5Bן.ß#ô+•´3æô¬3ªHÎAH%2’kª­Õqrw·@àjtL}:^€Ç4VxÎ×*þÉ,ÑúV"8å™4Rða=‘fæ*ÕS2̸YÀ vë×ÞnËv³±>R-R¡()—‹tp>X½\—Mcjt›lÊ2§«…âœ(!Õ6èÓñ‚¹>s¾›bòà$›É£Á-(aÓÆCYAžú¸ûÔG'€Ô#iž/òœÃéiýœ(‹¢ˆW(éÀ1³tÆšŠÆ%É´ÌŽ;[«U,Š¼c¡¯¬K3ˆŒ®ˆ«ä·¦=4–þ¢íœ+axž4åƸ•<©—ÇQHÊ¢Îì¾™],J)¡ŒG’»Ëc˜!–å°;LG8Ÿ’÷ëÒcü®ˆmÇY ÖUwCâÄ‚ ×V>I9óc±0Iq«ÊÒyúMÙ/×>¹€ê¹½IǶª+¹P(JQ$ œŽÇ¡ÐU Ô!xd@s¢0̯ËoçnŒi7(°W¦p•¤E 7àD8{U 5x™ïªïÚ0Ø„±/‡hP†ùã Å(¦]X„µ-”•a=ì4 îB'§š°œå/mÏ0sŒ„v.Õj´ñá-Á@€šX3f”YsÛŸ®ß9[O5ƒë¶fY3wa›qaÒ¥êï¿+÷ ±K_8¦ÁLªPU%à¬V~Ý~»mw½¿û„ ˜ÂŠ2ʦ.¸Þ”Ët³’2E -NÕ¬æ,%Qr¨'x¡°+xìÁëV<Ū8aÅya–[Z‘ý]¹¸Ìd&ÿ.3QD%ƒ[3ÊR''ì€*“'ü$ãò ™Ð?Ü8É> % Ü BÓH{ŒÍæœ&×çšBÞ€ax¼¥3HÝÚ:—"ñ/Kœðn„t"¹¹Gt¹ÝB‘†ÙÐþr ¤¦j³ß Q³ßܸ ®¢–Ç] ÏWǶrù æ·ˆO§yÅ?¯ –… €“C»¨²ÃˆÿÊÞV,1äŽDŒ­¡>f‚ŸzhZЈµƒ·K¨ ÁnÜÍd­î±|¸¡ ñ™þ4e –“ -fxã®sö┦cŽó”%ÀÁ¤fÅqc¼E]ŠVÄJr”¶¬eñd5›tÜDëOÂÏû:t6~)_ÎW9È#\ΟîÐoq[ÛB÷ NJ±²¿¾à,;“æ Ü‹«@ˆ:’¡î5ˆÀ¥à½¯T¦†Öö­¡º½»ó=k½ß•ðúßEë¤ 40ÉãNßPÒN"ó3R ƒÑà+Vl#^üÙk‰n«Ú“oK{¹[ȱ°k¹ Ú¶é&kýæPat:†¸µðŸø³oêjS¹“ð´ ¡/±Àóïªÿ™7ÝxeUÎïÚÝw`Ï1üõ¶\V5\‡±üVõ+³ÛÅäú3èW×G=^å`QCuÆc°é`¨% !¯Ö#Á®íÔl‡r× Þvoa¥ (»·O7'Åóm;Y¶27{ÏÈKåûhË é=µ«8¶øt»É‰m!núÔÞ ±^Ý{ã$èÖ´¯£gÏ眦†{ §¾ -1ñ—SBÿÿŒ¦z‡ÑóÂq»¯'‡õà®ï)þ¶å®s,©B͘ š±<)¬f¶“ÚãÌÁñƒ‰©´€À ™t­“c„‰'4n½WϺÜ(}†-a‰ÿEÃÁ|ùÚÙàc;5öá^Hb¿¶G> -СBxñGýãìw¥÷'-¥ö ­_5]µò´2b“ Š(®ƒQ•yŠUpž¦êØ*(ï¼PÉ?Ìs‡;¬Lêã1ÓâMNã+‡-cÂj†¿`oŠ¦ÎµÓš ¥ø„Ç IgïP:ºw¡îLPIY×H°Æw`“K¼MŽ­7Í +)¬_^ÎÔŽ˜w¹†‚Ì´ôÊÁ©õ»¶î"VÀ¥“+Åfqã¼)!H¡> ÙÍBGšJ’1‰'8¡LªS øÓñ‚H*Íä~cB+0MÚÂ6?OèÀuJ‹™´C™´*lö¿AÝÃo¸°üíYúiL%;pù„¾,haËÆKUAÇ„û4F'à`D· DëoA1œyžÇ1L:ÈK£¦j…’aW«\µŠåOPÔÿ• f9ѵ0â:ù½iŸ–þ¢ëìœ/> endobj -1140 0 obj << +1180 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] -/Rect [406.6264 730.8852 456.8481 742.9449] +/Rect [406.6264 682.3188 456.8481 694.3784] /Subtype /Link /A << /S /GoTo /D (tsig) >> >> endobj -1141 0 obj << +1181 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] -/Rect [140.5805 719.5976 196.7992 730.9897] +/Rect [140.5805 671.0311 196.7992 682.4232] /Subtype /Link /A << /S /GoTo /D (controls_statement_definition_and_usage) >> >> endobj -1142 0 obj << +1182 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] -/Rect [103.6195 677.087 159.8382 689.1466] +/Rect [103.6195 628.2088 159.8382 640.2684] /Subtype /Link /A << /S /GoTo /D (controls_statement_definition_and_usage) >> >> endobj -1138 0 obj << -/D [1136 0 R /XYZ 85.0394 794.5015 null] +1178 0 obj << +/D [1176 0 R /XYZ 85.0394 794.5015 null] >> endobj 306 0 obj << -/D [1136 0 R /XYZ 85.0394 769.5949 null] +/D [1176 0 R /XYZ 85.0394 731.7607 null] >> endobj -1139 0 obj << -/D [1136 0 R /XYZ 85.0394 749.4437 null] +1179 0 obj << +/D [1176 0 R /XYZ 85.0394 701.1889 null] >> endobj 310 0 obj << -/D [1136 0 R /XYZ 85.0394 543.6821 null] +/D [1176 0 R /XYZ 85.0394 493.1135 null] >> endobj -1143 0 obj << -/D [1136 0 R /XYZ 85.0394 516.3776 null] +1183 0 obj << +/D [1176 0 R /XYZ 85.0394 465.3511 null] >> endobj 314 0 obj << -/D [1136 0 R /XYZ 85.0394 259.6272 null] +/D [1176 0 R /XYZ 85.0394 207.2221 null] >> endobj -1144 0 obj << -/D [1136 0 R /XYZ 85.0394 229.5133 null] +1184 0 obj << +/D [1176 0 R /XYZ 85.0394 176.6503 null] >> endobj -1135 0 obj << -/Font << /F37 747 0 R /F21 658 0 R /F23 682 0 R /F53 962 0 R /F39 863 0 R >> +1175 0 obj << +/Font << /F37 779 0 R /F41 910 0 R /F21 690 0 R /F23 714 0 R /F53 1002 0 R >> /ProcSet [ /PDF /Text ] >> endobj -1148 0 obj << -/Length 4006 -/Filter /FlateDecode ->> -stream -xÚ­Û’ã:ñ}¾bŠ2U£«/ìÓr˜=ì³À2Á‹HdQ¨ëý•±:±FkÙ]ýéêá¤×}埉ҩŠ0Pém‘¤ºuw³ÔÚ,º¾<öu³¡·áð -Ö.ÊÝ!z±k7›Ð½¯º®ÜTüéñFæ‹jSºç: ꛾üLíêè:Û#R7ôì·¡_µÍOB¨Íp,ûºå^„ì*joZþ¢}iëê¡v=î°c)eRX«ÜÚVÛ²iª]÷Šv­=ÒQà–ܬ™j‚2éµ~àp.lü¤”Á‰@2‹ ceª€³9l’›v¹¡13æ{ºhˆCDDh½Ø>•Sv¨V5®¾Z'ŒKNp-ef’Ôj{½Ô&)t®ƒ.€(Hp!ÄâÎSÍl —?leWEÞ)›dFäٛϔýa詽i«nÎ̶©æ\Þ·$4•™j²´¨B23ü6EˆÒ66çq¯ ñc;ðºJæÛ¾üÈ“{îËæ‘É÷p?ðœÊ¦wlÆæE"-Øh%&K 7ñí§êˆèÒlÂË4ÑÃ=jjÞAèÞ]O}u³Ú ëŠÀ¥ߊ•ãðÕ®ºŠ:ûmÙ´+;‚¶Ð}dÜAéÜ jW­úêF:ÙÀCËãPZ/+ŒÉ­Ó&|öüDó”Õ¥0ó>»8 }X »òHïÝcG¢í‡rUïêþñFJ¹8ûœ”?˜«L7U77€$¦Ü3 -ßQ²$¹—uÝ­ jÇÒH»x×B”ˆÙÒÉIŽ)ÃMÔ°»‰ÓùbWï란D'À˜Ïí*Ø{\ ‡·î¶ €§zÇ°{þ¨\­ªC_­©ÿþñl‚q'ú“°"ôx[æzê.¢úFåI!mÁ*Q7mÌØäI.‹`l„•¯H¾É’L[9 Ø°¥2å _œ¥…gd|)#4Ii“ÜXž­)÷°òˆ*‹¤(tldÕT`ë+ž¹¯÷<ˆÉÞyŸ`丂‘›•ßp -&§Yÿ¢ezÇ­Â7Þ*lz“†›4ÉužÎ902Í>ˆ¦íç6nÔi4#Í#26 71wÛ*Æ't»Âo]3€ØŒœpÝ£¢@,¡—Ù™D_¦3ŹígŠã+lp¥®…ûPê³lñÖjWŸÁ»0Xí‚l„ÒAcµm[R;Åú¤«êà硹y@»[Sc²4?ª°¡g6`»‹sÝÙ¢÷óé6@Þ”e!Å5m,XÈ|ñüaë¾zðѯ{¯î’-x’ÀÆ2 Øé4Æ‹U ¢ú§ô@P™—A<ìó­èÛÈL)dŠYd›|’–aÙO‘Y` ÔsdÞÀ·Àû¹ÂâD"&ç -š!Fp ÅÙ‚ÄåAJ¡^ȹùŠ€MÚº§h!'J‘lñ¼x@˜[ù©ÏQ!0ø”¿Ü öÍIŽJÄòG f§áËþÄšƒŸ爢ö²$c -¯>¶ x >ª.|ôÃþÞe2ÐvŽž~B\hÒ;GcÌ\ºÈý”]ý¯˜C¿ŸÚ =!µœµ”º®]Õw"}§}ë$2J9á-Ælˆìa!+ÎÂÒ}!Î ¢²–£HôÙ.í€ÖšsdË&a¥£—ƒîûŠ±¤ÞR8põyUUëîìúY×+^ BÎ$(ÐÙâ}K#¼ÀöÔ£»ÑYàõ2jÝs&Í1òëþrÍäsÝõLï¤Z0®g ¨»ì>V`eë ^ûbüœ'xYòÔžKf”'äLYÇÉ ?!,XS·O{Xˆ]Óyw ©(_=õ[,JEá…Ì|¢’þ€˜pËÀ'5¸„1щE:…(#ËÒçÃiâ]x@ÆW§‰…àc.´]ߢ0hCH—hç4—|Î…€°ƒÐc8µ)a† ´d@T_Ñ¥^H^©ô\eíTUuPU¬ö(áÂ’Å€® áОX1=-À Êô«1'½:Ñi®æ<šÈˆqh)IÑÛÝŽÄE¹j>!{Xëû¾o?ñœ]+—À£©NÔ€…JB«@å7Cƒv°°,T.xgV,ªð}“Ìe²Ü¾(pU…’3†¿"ƒÑ´4þλ.û’³ €L&Ò¹ÙàpTPdO”«ÞEE‚’ -÷Ür/i4†¦¯ùË®Ýso;ôËöayO\À¾Â «îöôJ”í»pdüÇ›P¢)ì.Íèi!a¦1ç%£`Ù}%ñs½öÞ€‘q•“êê¬tp_mËOu¨_*$x9ÍA;/YNmiÔRÞR,Mã®[áˆdi’AŽõ¬)•…ñƒBttn’µÍô‹´ Ù\êº_F¡¥ÌRØ“ÏײìT ïù;çŸÁÿí8¤tRàÙËl?jdúŠÑÕÏ4š |Óô ýÀ–û×19ë¦_RÆŠã«îu̯Ҹ±„5»Œ’ûŸ×ñ -½†(H+ùe'ióPúà"mÄe€c)ä…:“šÔ™Ô¼ôŽ”Ô´†¤8 -œôÂܽ«¹C#ÙôG‹w )†=רÇhÎNò÷Ši.0ƒ¹t•X”Á€NT–ËójÞh‹!¿uÙñÅŒ?ƒßæY†©â'ŸkíKÆyÃüV¤‹ß6퉡\¯+δËéQÈ|» äN:hÐÇêØÄ‹‚â<›—-%¥'vî«v®¦™z)–}YïâVÁr/"ñò·.ÁTÇVä"•¿”˜r߉˜/éâæª<!Ê^ŠgwˆòW'_\ÐÒ€° -ŒufÖ˜Á³âK$ÙDJãåvV‡•¤¹ÉŸÃâÆÕ1ºY 9…²/%÷ -Lާخ{˜—bzè—ø,äK‘ìÚU¹‹eÑ -D0ê«ðÈÿâQ߈ýð˜o´.ûèIcxðh6”¬.Æ#& å[‡*{IK•j¬o»ŒR'µ>sæ–¹Â!ýy‹œYz×ò xé†Ã¡=r­A.ȹ†±@ŒG`”ápç0]5DëÅo¨Æ~²îÊcèö%ÿž‡rñæ½Þ1yÓ³"ΊøŸ[.·CØ‘›MÏÉpê ‘¦æ`×L¯7ôŒ;_<:”™Õ³å$«¶yˆ•_Á$*9sÁˆ™]0žQ¹|hà£}ØÓòSE ’!(öi[»cèå“4ò8>ñ‡.WafPÇW54Æ×±{ižäE67ð_Ú#•kÈçjî*…/’x² Ž?µÓÓ1 -›Î®`\`qŠ·ƒ‚ßÇ‚ƒg¢x| ÕÑ×…#ÈH©8Eä9ßòéMg¥žè×QoN)¹Þƒ98l¦-^X÷QR{;Žy# Í+í’@•]œÚãGÏ]ý1"!+~a ðóŽÐãmðxíÑ|{5V쨌fÃþº -Ë#Áø‹ñ7\ížTÂ>º…d½P›in¬áÐávj’"ËõyÁçXÖ›-ή -’x¢ ëI@`Œè¶ Û:Ú 5tŒÿIèš'2Ͼ2¸r•½øq´=0…×DUL 6>qF(?wUÙqÓe¸Úgɘ\Õp#éª47õ§Š×2ÖÆ\š™&fà]"ÏrL×lÖÏœ\¿ö§ÕaU“| ̯Ž_ ëH$f=™Û_#¹x°i$lb#0_H•.lHºëþµ!ñÒÐÉnCÄm HDžŽšúekn5ªá'n¸u9Õ0î.B_÷uÃk<9…Âp±éºßƒï‡²CÃI†¶WˆRÎÊ;TÇ6[w&/ý餙NÚpÅ‹Ž95ì›é¡¿™øA|£Â ÜGApì62‘"WÏeKF`òùåÐr![ˆ1£¿.¤±V„+÷COÔ‘ËAªaÇ–ìô Á”°so¶‰K$Y^³…$§òØŒÃgH° eBݨŽ—«´y™0™i~æ+’šîÈ`SMï¬ -MÄ=ó&sû&!3Ù—¯ZAjžë ò£R¼¯,¼‰©WUü‚„lzr¨†„Þ3ùkØÃ!¸Pgx÷3ŸK¶+ ?EਃÀëi¬) l…‘Mµ~EÇ®ÌYƒ-ðâ™}þ(B耇œyº–7À’äÅC“dÖxA½,IXÎV¡.CÅ`ëM.H¶[Uqé€â5òçղزÐþ$ifÎÜÅ©vì\‘í¶7äswà+¾\M«êOÁ­ÐÞîã¾åëNÈ ¦ -Ëé×xÃ2žI•E‹¶˜DNÅYñ/ ÔÓ;[TØbìíª£;ý‚ø9y~ݺ˜_·.&÷?1HÐ9,’ÂÉbžMïN 9I†uf ÈGçŠnú(0í|ÚšûÚd®yØv¸s> +stream +xÚ­]sã¶ñݿ“—Ê3'†øâGïé’ú§Í%½ºÓé$™ %Q{©ŠÔéÜNÿ{w± ”!Ûioô€‹ýÞÄu ?qm’(Ée~æ:2±0×ËÝU|½¹o®¯™»Eóñª¯î¯¾|«Òë<Ê™\߯G°²(Î2q}¿úi–D2ºñìëÞ½½ûæ¯ïßܤzv÷û›¹4ñìíÝŸn©÷Íû7ßÿæýÍ\dF̾þöÍ÷·ïi*a_ݽûäÔ\úþöííûÛw_ßÞürÿÝÕí½?Ëø¼"Vx^ýôK|½‚cwG*ÏÌõ >âHä¹¼Þ]i£"£•r#õÕ_®þìŽfí_ƒôq$U"Ô"D@“G‰’Êð?¯ñ _¾…Ïae|=W"ŽÈwÍÍ\%9“{ù+hólÖoK¨Ûͦj6ô±l›ŸãXnŽ‡¢¯ZþsÕQÛ6õõÊ®/uÕmË œ¶%/öp˦¯7"›•O€Æ‘šl ÞgQ08Fˆ(7FÚÃì‹CW®áqJ'ÆL$³ O¦ä¬êiædáÁÄ[  3ëZ‹Çh±'¢ŽÉ/UJ<Œ-Žb©¯@¾a€–Á®}¹2Ð'·Çä#ÂÁ|#f–vÐïÊÃÇò`i0—©‰´É`Zc-O”ÆM=±¾Ž{¤1³¢®qD¸ Ó»²ëŠMÉ%æl +Û®ü¢î¡é‹OÔ/v²=ð_ª†Zb2€ÌT˜õL…þ¦å´“êÙª\Ǻñy¹-š¦¬»W¤²íZ-¹Y1Ö4âѤÏjÍÀ½°ó³”š¸5Ñ*‘HP«Ìñkâ¨Ã‹–X@„Ԟ΋}ËY‹Ù¾\Vxzdïc1š‹TG‰QÀJ(¤ƒ!; À¼Åq<»wX3èãÇí¡èÊ°ÂË$»HFáMÍÆ3¦Ç~ì©¿iËnJ̶)§TÞµ¬´v+•iaÐ4Æ‚‰áØÒÅ&ãu¯ ðC{äsL·]ñ7wÜÍ£3ðp7]ãᜊ¦HGD–G€͛‹ *XJÜøtÁ%鈖I¢‡ˆ¦í§6nÐi4#Í6ò72÷Aï/0æŠëš#ˆÍc2I¥‰ó$Sƒ‘'ƒÁÈ‘&Ðíhܺi‰Ý? 8n',„ùØáhKƒV€á{¢c`v•Œ­Ë&EïèÐV¨TØŠ ‰˜€Ìý„¾¤L×µwÄA5h;ò²h ¢¨áX¿Ò2Ž´H2/ÿ6Œª‰& [¥Æ[¥HÂjÙw4I¢‰«î¸ÌêLjm&6@Ç4A8€¹JÀL¡¹²-šT F­M*˜^8°êÒ:‡Ù¶=±!N4Z꩹«‰‚Ö„%‚© NaßÊ8´ 8íÉZ*\ÙR»(—íκD“qÀQÜÔvعB®c¾Â—uµ—6d+i¡SÛÝÆe±Üò­‰¼ˆvÀµµ{0&« |ÜNJçäìqTç"ô$‰t¬œäøó=–ó$IÒ!’'¨>dõ¡jHjMYØ/‡È±çl§Žtªœå Rân$“}aÃi«P¨›8C<ÂÞ¢X~8îi~àδëvzPˆ!ô’qzf'Ñ—©TòÆ€.Eû©äø +{œÂAù PêÓtöÖj.?…·aÚÙ8J‚ÎrÛ¶¤v’õIÎ>”åÞíC{ó‚¶^Qgt4^{¬°£&6`»Ç纳@òó1 iNSŽ"cuJŒ ™Íþaƒ?ì-ÊuëSVø®xÜ&[Ð’À†2 àt’ÆÚ‰•Ç¢úÇø@ç©“AÜóÆúVèÛÀN‰ŽLØG†öŸ¤„?öc`(Ô˜óð_ ýTŒp£8$çº>F°Šó³Å—)…|!å¦'2)k胕2-# …,ҧό}üöƒOùûMb¤=ɱ@R‰Pþ¨Àìä ¼S®Œ¬9øùccQÐA–¤uîÁÅ/AÇEÕ¹‹þqò¸[ØLúÖQ@ë6Ä#€&Ýñp0ÆÌÀ¥Ç™Û²«þrèà÷ãµÇ§Ö³rR׵ˊâNÄïT¡oEF '¼ù ‘=ÌãÈÄùÔZîCqf¥1E&\ìÂÞŠsdÃ&Ç8J/Ó‹’¡$ÎRØáòÓ²,WÝÙ«fU-ù@°)¡@§³w-­pûcvîF'×È`¨·àLšcä×>üåšÉ§ªëßQµ`8ÏPwØ}þ[±‡“­.xí‹ñsæàe Ès.˜¬)OȳŽ“n!,XÑ´K{Xˆm×zw ©(_=õ[¬º Iá…H]¢’ þ1ážãœÝÀ%5x„!Ñ E*(#M“çÃaü¡mx@ÆW%‘àcÊæ®oQˆ!¤KÄ9Å¥—sá€ç ôÁ@N}J˜ •Y±ÔW4†ZÊR W29WY;VUåU«‡=JxlÈbÀ”—p謘—àeúÕŒ“^Ç*RI&§Š=’9ÀPB¢·uMâ"¹à+1{Xª…^´ùœ]K›@Ó”'êÀA• ò›cƒv07,T6xv–,ªðÿ6$)˜Ë¤¾²ütà*s)&E£ii‡];ÞwUôgé4>‹ 9)²Ç媷QQLI…m·¸HpàXrq¡Î$Gu&9-}àGJr\C’ŽfaïÞÖÜ¡‘ì ú£ÙƒÂEŠãŽkT’c4k'ùÿŠ).0ƒ¹´•X((‚'É4SÆŒm1ä·6;¾˜ñ§àë\?K0Aüär­]Á0÷ q˜ßÆÉìM{âQ®‡W%gÚÅø*dÊ. ¹“òô¡<4á¢`|ž€MË‘Â!œ;„ª] «I*_ +eWTuØ*hîE NþV˜êЉld"³—"SÁ÷_BæÅGºÈ\™E DéKáÔû }Uôäæ„5ÆXg¢ê„ &˜…4ŸBÉDBh'·Çãr‚"£$ÓÙsP\Ø°<™’“KóRTW`ò>†¸žcì¡_ +iÝï/Ñ9/R·Ë¢eÑD0‰åo‚#þw8f G~&|Ôg‚£?Ó¹ÌgÂ' ÁÁ«Y_²ºèÄ—o-¨ô(Íe¢°¾]úÇ:ÆZŸ>sË\áî¾EL,½ðù|tÇý¾=p­AÌȹú?c¯À(ÃåÖaÚjˆR³o©Æ~³îÊäCèö”Ïü ¹ø{€Ç^ÕŒÞø®Hø»"¾ÀvËåvˆ”Sp³ÉÙ=ƒ¿õ…HSq°«ÇÎ×7Ô†/^ŠÔ¨Éq¢eÛ¬CåW0‰RL\0BfŒwT6øjxZ|,i¨ ”@ÿ´­ìµÌòM ò:¾ñ‡)[aæ¡ŽŸj(Œ¯Cï2’,Êò³²ÚS<’©·†|¯fŸR¸"‰C âøS;¾£°éì Æ'ø4Ìû},(:x'Š×—¡P}¿‚\CJÅ)"ïѸžKo|°8)õÔ€ ;Gµi8¥äzæàÀL“¿°î#…rvÆ_ó_Má_•x¬ÌìÔ>°xÖÕ‡`˜A$á³â +¿ë<¾æ׬!À¯WCÅŽÊhÆó×VXhŒ_°h÷"ÁÖþ¨¥‚ÎÑ+$ã„ZëtC ‡.·åi¦Î >‡¢Úlqw™“´@‹‚®Fu:cD¯MpÙÖâ½c7¼Q›†®$#éo ®låF;l̽&Ê|\°q‰3Žr[—EÇ]›á*—%ÃÀ詆]IO5 »©>–|–¡6fÓÌ$?3i>S_¸¬œžÙ¬ž¹¹~ín«ý©F9øˆ_<$ÖI^Í6z´·{FrñbS ¾ØÄŽ'~!UºÀ6t€!~kH<×t³ÛÐa[‘%ƒ¦>mÍM¤Rï¡õ!øD {.«Ú¾EèËîjøŒ'«PØ*6ý‘Þ÷à÷¾èÐp’¡ö*­Íyy‡êxÇÍÖÞÉ w;©'·“Æ?ñ¢kNEûz|é¯G~¿¨pKGïQp8ôšGÅÏÇ™|.[Ò1&ŸO‡> ™<2úÅñBkbÿäaqì ;~‘›Úwžsvú¹†`*>£Ü&,Uh¤YžOŠC~ßšÁ¤öu£*\BŽŒTúe¤Çù™«H*z#ƒ]9~³+º †Ñ3o2µoR0>ýÔ +RóLy‘¿•bÑ&v&¦Z–áR²©Ñ¥"º`ôW$°û=ۃГse"|'x û÷§ÿ÷sôá­¾N#•eÒ¿4ŸÒ=*PÆ!…gRÙ#ÌÝ»õǨÿ‰§z-endstream endobj -1147 0 obj << +1187 0 obj << /Type /Page -/Contents 1148 0 R -/Resources 1146 0 R +/Contents 1188 0 R +/Resources 1186 0 R /MediaBox [0 0 595.2756 841.8898] -/Parent 1145 0 R +/Parent 1185 0 R >> endobj -1149 0 obj << -/D [1147 0 R /XYZ 56.6929 794.5015 null] +1189 0 obj << +/D [1187 0 R /XYZ 56.6929 794.5015 null] >> endobj 318 0 obj << -/D [1147 0 R /XYZ 56.6929 728.4063 null] +/D [1187 0 R /XYZ 56.6929 671.5351 null] >> endobj -1150 0 obj << -/D [1147 0 R /XYZ 56.6929 705.2957 null] +1190 0 obj << +/D [1187 0 R /XYZ 56.6929 647.314 null] >> endobj -1146 0 obj << -/Font << /F37 747 0 R /F23 682 0 R /F39 863 0 R /F21 658 0 R /F47 879 0 R >> +1186 0 obj << +/Font << /F37 779 0 R /F41 910 0 R /F23 714 0 R /F21 690 0 R /F39 873 0 R >> /ProcSet [ /PDF /Text ] >> endobj -1153 0 obj << -/Length 2604 -/Filter /FlateDecode ->> -stream -xÚÅ]sÛ6òÝ¿B“—Ð3Bü“§4g'î´îë{j;š„$ÎQ¤KRQu7ýï·‹(R‚ítîáF‹Å~a?¾áÇ*f¡Ì¢EšE,y¼(¶áb sŸ.¸ÅY:¤åë»û‹·×2]d,KD²¸_Mh)*Å÷å/ÁÇÏþ~uw¹q$ìr'aðÝÍíß’ÑßÇŸn¯o>ýóîÃe÷7?ÝøîêúêîêöãÕå’«˜Ãza)<±àúæ‡+}ºûðãî.»ÿþâê~”e*/% -òûÅ/¿…‹Äþþ"d2Sñb!ãY&Û‹(–,Ž¤túâç‹Œ'³f©O±T,V"õ(PHŸãŒ%¦P÷ e<èu÷Uw8ƒ"o,p÷øX¨ÿtÓW_-~©vëuÕ¬é³jVm·Í‡ªm}¿Ñ–H5ØÿžfªÆC! ¶m©Aý‘ÁÍŠ0†SæÀ¯{T:H¾äœeq,Œëº}Èk@V ÑÅaÔú«¶P³;ü¯»K®FXÀ6FZ˜ú·6síÜ4ÆÝB™r -xÈ)Mì«ú’5}âǵ®)z)Ô#…’ÙÉ0¹ÔC^Õ¤â0hwÃãn@ËsH2¢ -S@õº¨VúÈ'0ðxQÐ÷è 0¬uÕp¸äœ£?#l…ýG¾}¬õ;ÏÃ90JRÃhAÜ\.“бP_Ì>_¬âÌŒ¬B²ŒŸZwrÒ«UÛ¾z?CÜFˬÁ³RàPúÒKùÏ÷—Ê2daÈ•Á -,B Ö&ÖÅ³Ô GåÓøºù·’áPÚ™Ž°kp2‚äÍCµÕv´±ƒ1ÂÁŠÊâ£CžmÏÍ¡Ãp“&yÍ:7ÿåq'àÊ»i3%Ç!U4#SFð«|àèW8câîùÉ!ê.uÁ¨<@D¯ -_Ð’Œs9tg>$½ë513r8Ï°fîÈ´töF°S<@!x‘éq+Œï§HwÛªÑäÐûñ˜L¢Ÿ–þ;ðlTãÄÁoV5d¥¤K:fíÒXÙ£ÅT*#‹ºÉq߈C(6é= -¡ mƒ1’.ûã´ O0WBÑ@# -:8g AäÅD˜þëv½Ö%ó™0Féâø¯s¿ÍÓM&áÅ €„‚Z1•ÄÑÜ(¹‡JÌÄ1Óz`Üè9¤Î$³h6è¼±im7Pº2UVœ‚ƒíòÚTŽ1¦qÎ -ÎõUSx •R’EýFFòºo‰®QcO[’Íhm»D T´IáÒïY< -TâéÌ:ÐY·ÝÁÃO’°4‘.“Ú*nE HŠ“RÃÄßwºt‰ÊSÜyDâ:ƒq7ó…!ÿÇi{€h‘u<?Øir<o‡ÿ½®1ÊH(9¯«ÆØÆe%‚ʧ ¦0¢Oõ0Æ"–r5Ñ1ßØ=Œ˜¤š<Êz_°äbªàË…šÐÏùsÔ~Ø4£ qpeT­yN¢Ì˜I4“Ñ#›È Ÿ ÀöûœÞ2‘æÛBp-idò wyE»}íãê76t¢ÓË8;9¥ÆW¡¼µÆ…j3¯÷ù¡'¨14À »Ú¢šjJ:/Y*­©ö¢Js–îÞ/¡4ÇM#ÕÑÝœKH5/NÐsÂ$ø¬mÕDZnLm ûÙŠÅ2¾™à"÷µ¯¨6„ä5 „/™Ä/Zô—‰ìÔ2¦9À¢ñ•RÐ<ƒýñòašp„Z^ë‡%dÚj¿ ãwÐ<¨Dd­Ýå5è_ˆõqUh÷ÕÍÊnùtév?ÑR"' 'Ì·ëüHàRcœ§LÐâX„&¡s"Òú"Žl^8óh³0{©9Ĉ8¶¯{"YêU¾«bùòлMÑ{tŸHŸÛ=ÁE´*Ÿ–á0Å„ŠNÊ+‚-Ó¨„î‹®zÁÍé5 O±_Ñ"‚Ø̯ØÚÉn½ ÁÝäeÄ_Nœß œÓEÖ…½ö0wP"§,Ajf+ÞégW9#Ö ŒœS£æËãà<–=Ó3X;~±÷¥naŠVæzÛ6ïÁï%:þÛ·¶ ÑÀp„Õ˜Eè9Çe´Þ d'¹£³Ê‹ª¶Ù´3Gž¾¯¡Î¸i›úpÊÄ“v¾Ìǘq“»Å¶Õ´m¦y"ÀŸcE*ŒžÖú¤•ò*Ÿ¶hæ2ˆ1¯PR¨VŽ’îA$=Wüˆí$}YN“A ¹¶û—9ӆߪG·%Ði§ã–Þ¶FA£ërMgwµv§³L|@”—¾¤0šmu&ðs[W«î]K3eÀ\˜éò9:tÝ5£ôz¹zmy2ù…yýÑÛ'Swvf¨ñaÔöpmo9Ÿ5S±ë:Ý g 9UL^ç^ç”Ï„„‰Ÿ  ¥LÏܱ? DñņÿÿIþfe5»zvÇÂS–I¼ŸÝ Ê“MåÚ¾w†ÍxÖúÑ®¶Å‚3ž†‰ÿ¤ÀJKÆñ5(ú+W2Ùø*à»y€ŽÆ.ùŸ¦^©  €x—ÅPX õ-O ‚e -ûßÈr$¸œP¤Œ8oÚ8Kp¹Ã"ñPxÊÁb9Þ}Ž¶Ä s= ÓÔ61vn§©kugúÓ³áÆÕ@rÒ v¹+toçÜMàÓ ‰t}ŸÙëìc©À†ÙÑðb"˜)8Æ[æc}Ô´»N¶–7ƒ›é¶®/?Ïé-Œ½µÄJ³¶•s+\U8«-`’A×N‹G“iÎ5ŽEˆR®Ì¬wsªÝMèìöÉ0çr©ø*ª)ÿPGB—!tÙišÌ«›ks‰šE@‚¤‰ øe_~zhÞPCã©"÷Ô¿B}ç‘•G’©Œ¯;ß+‡µ}å@B†$t}[êèࣦ ±,¶¹„ ô6™ix‹Ÿxláæñnl‹^Ðy*²äøèBìVŒoa¥e ]÷‰7M3|ˆô”­á(ùÿüÞy| ŽR&•þúÍ®D–:¦P@™r>>Œž³þ_ÎŽÙÙendstream +1193 0 obj << +/Length 2561 +/Filter /FlateDecode +>> +stream +xÚÍYÝsÛ6÷_¡ÉK¤™!~€É“›³wZ·çúžz MRç(R%©¸º›þïÝÅ)ANnîåÆã!¾±Ÿ¿Ý…ø,€?>S dÎ’4dQÀ£Y¾½ +fk˜ûxÅÍš¥]´¯úîñêí­Lf)KcÏW£³ ”â³Çâ×ù‡O×??Þ<,–" +æ1[,£8˜wwÿ7Iéóá§ûÛ»ÿx¸^$áüñî§{~¸¹½y¸¹ÿp³XrqØ/Ì 6ÜÞýpC­×?þxý°øíñû«›GǢ_Hdä÷«_ f°ýýUÀdª¢Ù3tÆÓT̶Wa$YJiGê«_®þîÍê­>ùER±H‰Ä#@!}ŒRK˜BÞ­KDóaSR£¯†}6TmCÝç²[p5דñœÚ_Ê®/‹70½çjØ à2>ºŒÃ%)" ¯i²mY˜ecšd4IeV=wÕP5kºy[ö}¶.{굆ζ©¾ëxÈ’(ŒíAY×àA熜 'f]ÛÑ©›j½FAÙš«ÅÑx®‰KBGnèëvíckrÅâ$£æœ¥Q$ˆ¬v_d@»®jjfuM#ÇØ«Ì4ÉÏëlß—Ô.*Cî€\ÄŽºÔRG¡5_;Û—XÕb xmvöCÖ™>® EH2Þ™=Ý•mÁkÁˆ€Éª§)÷m†²)Èò@)Š…ˆ¦:Yé㔘ŠÏŸQ÷zˆÈƒ†%ÛúlXÖ-Ô|ßh3ÓãYo¾ôÁs‘º5Ѽo +Ú¶£~º[ip¤ ü#Ûîê3*Šòi¿^ï¡OÞ6ÿ ±ÞwÙÒi\óEȈú¹h +p/?24äYc÷»x˜,ÿéõ`w45¦ºU„o­ÀrC1N æÛÓLÕxN{o‹TJ¡aW §Ä‘ALø#½­ëö)CsR1‹Íd^:™QRT<_3Hƒ \¢¹…©ºµZy½^2‘y¬)¥‰çjÁçÚa¡óTÒt– %d ƒä ³^ +ã#… Rèá¬/‚Ö i–®:ÐxEg0zƒß­¹`BÊøëØ (mßÈÛAº¾ÕŽÏO¦$K;—¾³yĸ,úƒ¡Ê̼jëº}F(³•Ñg×Bøч=ô^öúˆÌ2"ȆI»sä†ç’X +)˜ •œúF×¹ .ËK_˜Y aè×øÍÂ.§YD<£ÙH9Í"Úeµ‰ÀœVêúƦóy¦ñŽ-–ËÃû®) B4DQ¾!¤DQàè‹¢ +Ð/ ,Øk*JÉ‚$S#lÚK¢å YqM(¢ù5¹D:u5iJ( ûJp5o²/f4£ó™”$«TIÁ¼ ÚÞµæÂ5—B9š¹×}¡¡Fç¶pß±^EÂ7£µ±~ÔðHZäU À—Œ£¯jä—ŠôT3:s`ÑøR©e$AÿøÚ88B-o˧%DÚ€r½ ¢wP<¨XÒȺlÊ.«A–øÌ«¼´½n’vËË©ÛãHJ±ã‹Á¾£az#(‹qž"ŒæÇ$46 "-bËÄ…3û‡Ú0 Ò¯Õ†ˆˆ®‚¤'L +VÙ¾ˆt6²5¤¡·—¢ öh>¡šjŸiLô@»²qSL¨ð$0,˜4Rè>ïª'7Üœ¾»òë5Îd2Äà|kæºõŒ£S·|9Zþ`zv*R÷K™Û§¯@¿ó€‰Sz .3‰éîèü³w[·èe*Î΢²ËcÚ<zb¾P- ~6±ör Æ!™¶få¶mÞƒÅK4ù·oMýQ"ta ó:=¢7¡Í·Ñø*ž”"öœU–Wµ‰3 ›éR_E‚ïOgÔèçáºIÚé65bBMf7›"Ó<ä ºê‰D^–ú¨ˆú¶âL»'ty…œBžräßÊË©àÝjËé×ùÔ±C×vÿÒÞ¬é­:°r“üœB¸Ýz߈ZÖôrL·½“ûd…ï‘Ò©muÆðKWW«êm13&@¿”•ÅKçÐC×ä¤×ËÕkCÓîø„ºôšîI…LuÙ™¢œ!^{¨6Ï›/ª)ßw]Ù g¥8åJ^ã^ã”/@ÂH‰/A‚^†\&gæØŸûAáTïÿožüÍÂjöõäu…',•øÓÛäí !?队¡í{KÑaØ8_ë^Mq-g< b¿§ kß–® ?AʈáÀÿ†ØÿùçÉão·a¤RB¤’L‰4±D!C2=¥ÜýŽyNú_¯™ÓÍendstream endobj -1152 0 obj << +1192 0 obj << /Type /Page -/Contents 1153 0 R -/Resources 1151 0 R +/Contents 1193 0 R +/Resources 1191 0 R /MediaBox [0 0 595.2756 841.8898] -/Parent 1145 0 R -/Annots [ 1155 0 R ] +/Parent 1185 0 R +/Annots [ 1195 0 R ] >> endobj -1155 0 obj << +1195 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] -/Rect [173.6261 465.0053 242.2981 474.4149] +/Rect [173.6261 393.0464 242.2981 402.456] /Subtype /Link /A << /S /GoTo /D (the_category_phrase) >> >> endobj -1154 0 obj << -/D [1152 0 R /XYZ 85.0394 794.5015 null] +1194 0 obj << +/D [1192 0 R /XYZ 85.0394 794.5015 null] >> endobj -1151 0 obj << -/Font << /F37 747 0 R /F23 682 0 R /F21 658 0 R /F39 863 0 R >> +1191 0 obj << +/Font << /F37 779 0 R /F23 714 0 R /F21 690 0 R /F41 910 0 R >> /ProcSet [ /PDF /Text ] >> endobj -1159 0 obj << -/Length 2725 +1199 0 obj << +/Length 2653 /Filter /FlateDecode >> stream -xÚÍZKsÛF¾ëW°r1TebçÁc}Rl9«ÔZö:Ê!›M¹ r(¢  Há¦òß·{ºHÚk¹Ê¥ƒ€ž™žž¯ßʉ€?91¡&*™DIà!Íd¶:“;ûáLòœi;iÚŸõýÍÙß^ëh’øI¨ÂÉÍ¢Ç+öEËÉÍüW/ô•„÷òíõë«~~qÞÍÕÛëó©2Â{}õÏKzúáýÅ›7ïϧ26Ò{ù‹w7—ïi(dß_]¿"JBÿ0}ùúòýåõËËóßn~<»¼éÎÒ?¯òûÙ¯¿‰ÉŽýã™ðu›É¼_&‰š¬Î£}hÝRò³ŸÎþÕ1캥£øIá+ª•Ð$~¨aLµÝà1`²ìMVÊe¬`œU¤+;çY}–¤3±äYË´B|"o¶L‹;X/±W—D¬—–…} ÊÏW¯žÓSZðä´Øeno›;¢•M½nj"ßÙÂnÒšxGÞÃ2ËíˆôZ?ˆ“è³ÄÏXúªN7uVðîÍN¦:–*¼¥ôcÁçã¨ê,Ïéqs«Š‚8À»CÅÑ%¦Ä“Dšvê<«f©šÛ9Ø¡Ž•wµ ±mÙÐCa-ïãЄÿ³t]7n™%~õ²åHx!²±Ø±X5UÝ—Ù9¥ üvs†àž²zé-†‡e -ï?J§Nú6#}' Ã9½A¼eGSDZ\×YYÐ3ƒ Àì<£ÿ³š¨ žbΈÅnÚ ½’ÁV•[Ÿµ¨}Tbä'ZENŒ·Å –·$ ý6'šƒþÏ-r*ìÕ"ò²šè3˜[òó­%,y»Ô¡w³l˜ie°8ôÒ¼¶çÒÛÐ<›,¯§YÁ H´Š&í°É·çRJïù˜Þn†Ž¶…Ø–Vå<[l·V½s»H›œ×äåÝ;ƒðnyêºÌŠº£ÎÀ!ïÊMf+ž—ödío¾Lï»:€û°pÚ’²é1ÐAüB–v°9 ön¹I+;bxÀM~ÈÀqƒå­óèâÏî%öV.!yw0Ðy W•4à΂sH©,Z-’ŒHä*"ñtˆWiQÓS]ÒPeyöC+‘sÃG«XtMðï1-'ÒØm­ZI©”ųšhÈÏ™dB‘FyZ´›zÕÚÎÈ8!fœṲ\ |… ráœp7¿Ó'8Ž¨ I &M[ÙªJï,Ë ¶>8Ÿäèƒv¥UÜS¹V @‚éè}H]ðL‡2PP'-LÆ£9µf?’'ŒŸ´1«¿y ¢VµMÑÁ 88¢‰TÒìËh"­Cé)Ñ:GCÚ#¨‚¸•€ˆ%äcu òE™çåCç‡N¾Ë/»0›±/6•ÿ}$‚‹a`Ü5½°€/hªmÊ|1$ºδ¿^pÊÄãØívÞ¢ £K©Ð³¤«un—ÛúYEUº¥™ŒsØúHã†LËM¶³f“Õ¼¼«¨™M;5¥Wʼ› ™ƒ-Ò¼âùíf¡÷ÑÚ5oëœH=#Ú7àa$µ3ðÈ·˜õ¥ð~9O$ïgœÕvî×ÍʪíÒ*`µýÐBña0ð§“Ui?‘"J¼ÀêÊMú®¿Éß½A½ظ(+%M›î±§Ù½ƒiht;õ”•˜œoTÄ}‹‘`Ï~Oà±Q÷•pã´Êþ¸«õ8Sºšóð.¢›ƒ -f?2ŒZÇH /é¸+‚Ø챸P´µa³,8ä dv$@ü±°›)f§~„Àm1`_!CP ¹cãp ŠD‰ã÷ºE°KíøBn„Ôû4ËÓÛê-¦ ŠœáªPx¸Ú‚続m2Wªò¬r1` eøvm÷Æ(ËÁúÃf•r¥K«¶¼{YÔiVøc½)»#Œ[«tÛF6šùÜ·v´hz½‚é÷¹DÍ-M•¿ßÍJ‘@ý%è“4X’RŸÒÏBÚò#íõ³ÿߪV,!U‡Æ–€Ö àÅíŠ!«iw(,5`FíºåAq ±…Œ&Ý}êðD‰wd‚Ö×\uèh—3Ý+†xˆŠßŠ^kZîÒRËÖØð‹«Ñ¶¬¬pm(Æï»27ѹˆì‚î>ãeeow͆‰ØÍÇ[k‹±ê½o8‰ü@Bû݇øËÔ†ÅcÜFbý,Û‡-!‚& Ž[ô¶~p;Bù§Y‚L\|™-§ð},r¥÷Æu8{å:>ó5>ràr¤c§Uå´†îèÁÊŽùtLY»îeÐXsÜé' ÛŽ5kîÒØrŽ(·‡Ú—ib_¹Á“*×_á ݆Æ7qD){žÖéíx9Tî›.kkcÚX -.Y‰®È4mh‚Ž9/ÂJœ@›vS€B¶4½ö±;¼ÓâR ½ºéÝ}Tõ iü·,ìž ÌÒY×ïƒHGÔ¼Ã充ܚ觳l!8¬eû"§ãj¤F‘áb•KËSj¾X¯é‚é>Í÷PœÛ"k‰.ßw9õ÷ÆVuuÖžÀ_Â>®êIqU¡/µ9‘$`‘â+å6›œÄõå~ÚÙ]×ñ5Sº©ºŽ©Ãœ•1çƒÁ#÷D*„¿FòÊWÊœJ>PvGaDa}c«2¿ïîí#üêú§ó©²”lV5ˆôsüÜyU3[â0]Qã4]À׊ àoi,/Ëͺ¢ñ5e‡Ñ¤ƒEn[¶ZÅv7_ ýd–gÔŒ÷oÓ]tê4ÿ(Ô¹žù Ú{x>mÀzRÇ’‰ðU$ÔqµËDû± )/aåP§ ²£šÿwñëMZT°²Ú»Iè§ö^ˆÕn³û£žÕ—ýŽ]2æý¯a£ÇÀFÈpˆ0ß±~ˆñ¢ø8¸$µüÖÁ C_›äD•!Ђ.÷öŸT2#T×oo®^ÿ2úu9+ó#Øõ„ú–±3ˆàDR•pª$‘œT]°<‰Ý»An‹·ŸS£ôå|*8 T -‘‰?ƒe»â œAÍÙ 4ƒÐ:¤Õ+lÇF? -*ñebøv\ôIÙRnÞš"½Í-ÏäÎln¡ª_eEK^òƒëæƲ'jKljûš©A_Tð°Ì0]#­î}½Â‘´":ö÷Hp‡Cý|óˆ±ùt÷™}»TP8…í‡\hX#{´=ºš$þn£ßŸäî¨JC kV«Ô}—Óý´à[t¥¥»æpU‚æ®EºÇ”ÄÆ»½¥<ä -*$ µýÞw¼4Åv(anð9}O‰Ü¡>t©5}¡×:€Ú¿y!…?,iú ””^Û¢IN_[ù9~˜†Zå95x·[Ø}õÁM˜a6j Uç°mc7x—€Rásoz{~Ï¥¾ÌK¿jز>FãÐW¡ (ZØú¡Ü|<éõ×<›`©A9){’|Ãy'~$ãQ€lÍz.qºÍØB8Ìfí®9‚UOŠ/;X €“‚âo‡UlF%&'üÔcí~©D¾Žc5þ;+\ -y!BxôS±öW[<«'úÿ.n‰endstream +xÚÍZÝsÛ6÷_¡éK¤™@€—§4±{î4NÎuzm'CKÅ Eª"iWíô¿],@‘2%9—d&“‹ÅbñÛO #ÿÄH‡,Ld2ŠÅ4z4[ñÑÌ}&ÏÔ3M»\ßÝœ}{D£„%¡ G7‹Ž¬˜ñ8£›ù¯ãI6 |üêíÕÅå÷?_¿œDj|sùöj2•š/.<§Ñ÷×/ß¼yy=™ŠX‹ñ«¿|ws~MS¡“ñÝåÕk¢$ôs@èõùÅùõùÕ«óÉï7?œß´géžWðòÇÙ¯¿óÑŽýÃgAëÑ|p&’DŽVgJL« ð”ü짳ÿ´;³vé ~‚3„r@%†Ô Xÿygøö>wœ|4• ‹ãزÜ,ãéJ“œ)qË27‹´Éë}8h„j´H©'á!Y‚¢1õ§]‰ö¤=Ý„X e¼Û˜”¼mîNH¦¹£Ì–iQ˜|2 ¢p¼L+Dã0°”jmfYê¦×›‰ˆÇåÚlê-QêeZÓŠ¬&JYäÛ÷¼™™ÊÍ5õºqüKSx~/³¹7›É|ïY…Š¦q¸ð‘`‰Ö¢s0뙹¹GÝq˜Uô[”Å_†¶7_Ö~f³JsT¿6YmÜšº¤ß”~~ã\æ†Æ3XaæcϽ`’‰8ö8éÊÌÙ¦)O”qœ8άp›.Ýýs“råæCV¸CÎ3{3«ËÍv"„3B'à!SQ„ðD, $ùïE ²d¢@î¬Cné‹d¤UYTÏ'¸Ô™çHü&¥8«P‹!Ü ¦ÍÀ!ÉBÒ±XAVä¬\­ÒbNyVØ4xQ•n{k:øm*3·ºi«Ñ€6”Cý4Ì!|À¶íì6sˆÔfîTB×%`#ɤÊû´BÒE fH ’Å"–]¥†Â2›Ž=„6Ò¤ŽlüÝY tìü0ò® ó@”Ÿ/_?§a si±%JqaH¾3…Ù¸Ói ¸,Jl€6Sq}”ú™Ó¾ªÓMí57k_"¥ý°%ÅÁÉ«:Ësn&°ª(H|[T"ç¬e‰'‰Ú ¨ó¬š¥vjvG‰åørAsÛ²¡AaŒÛÇ¢ ¿³t]7dl’W/½D ‘ùNĪ©ê®~Nœ5 +êïâÇY½´‡æ}_iƒû@DI)!ñ)az÷Ô€‰mä`Â"gà.ºw™Âe–bD1‚vs$ñùì0©´ðÉ%²j¼-f.€qIîêÒ(´4˜%.š©8 }¼¥ßà4÷+À¬J…P„'‹¬Ò[ŽÓ¼61ÞЗK_ ³Éòzj,. Õ*bÚa“S}>d·ÛÆAGÛÚà°^•ól±ÝËݾ jTÞݵYûÖ±®Ë¬¨[ê ò®Üd¾ò¤niG×îæËô¾Ý¨èq sk-!:]"6IÐûqÎmCÓÝÜ)ön¹I+s R,QBù~ÈO@þÙ}Äã•MBHÞ l®=®Jš°gA^ $R*ƒ^‹$*ý@ä*"9vÈWiQÓ¨.iª2ŽûÁkdÃðÑ*§†&Ä÷•AYü‚¶–^Së*eñ¬&ʳ.™P¦YÇíØ\›dr‚³Ê )½Xq¹ :Ýò·Ö!ç„À±ÄjÛÊTUzgœÎYÑ?ŸpÙǶe2î˜< @‚‰é}H[8N‹2PêÁöW( €7ÀûuB³Äç¬îæ1¨ZÕ&Å×àˆ&RÉr°¯Ci-šHO‰ÖÒA¥b¯7 ¨Ç jÏä‹2Ïˇ61öb×}ìÒ¬ï'±)ù×@çý®kwÖwÒ~üÝ£½¯¶óEŸhk¸£½£D‰Ýî%†‹„,Œ1%ñù3]­sc±€6ËÔÏ*š¨Ò-q: CX@"“kò-ËÜvŒH†ð*j'Ƴ¦ôI…Âífsfo‹4¯¿ß,0fí¶µQ¤ŽíGh?•ȃ„ \×Óÿ2I$Tïg®¬í⯛œ[›µ_Ô¿¡VÛ÷Š÷½‰¿­®2`‰à{ÝáÛ+ËôMw9’¿y1¤¦/ 6.ÊŠEIlÓAñÿ¼‚©ïu;óÔ•¶8ß ø}—=ÂâxèâèÍ»D7ÖªþÖÓ6{®Tæî¦×É€§E¯…ÙO ƒÞ1Ðà ͢`w›k`³ÇêB×ôïÍCžçGa}ëÙêÏ…ÙL±Öl{ª‚hW4UÐé†Üu¿}Ö´$Ü• ¤–ÞÙð»«ÁΨ¬pm(zÎß»>W…\D¶ÉwŸ¹ee_wÍÆ9'ñ:?t›0¦jß»Ž£tÄ”€ûwâO3:t±ÏÄÁGˆô+{—LJ­Nxd¾(Œtz‰ÈŸæ "±ùe¶œBÂgØåŠñ{Íö¥ +Ì]Ñؽ#àÐ%.ÛAZyZUÖjÞHKXÙ +Ÿkw}éݬ]Þé ãçšµ»¦9Ï9bÜjŸf‰}ãªÏi\ð΃ú mE°X‡T²çiÞß#ûÆ}ÓVí@kŸK!„ ª`#Ñ6™Ú7ˆZµÂÝ"lÅi¬i6=æâÌíöè# >jõßZ»UÝ+•…ÙóY:k/ü Òa3;üÄç4³?ÑÓEú‡Í†,ÐIrÂÎ!ÐT¨]·êzËSv~¹vÿ÷i¾ãÜ™'Ú‚ßÕ?SÕÕ\; +_W­˜âêD•pª$ô¿4¾œœÄõÕ~ÝÙÿŸŠuº©Ú+S‹¹3Æ ¢& ÜQýs!üª8S‰:Q}„ +¡©úlLUæ÷íËýa„__ý4™jèKÉ'aUƒH?Çÿ,ÆU3[â4=R#›M/Hp‹ àoh./Ëͺ¢ù5•‡éPC‚]®oA½Uñ¾›/úq2Ë3ºwßÓ]zj-ÿ(×ÙKóA³wðüš–ˆ™yÂìR2!5&¼`YÔ³â¤åÿÛ¦üz“¬¬ü]÷eÈ™Ýd÷Ç#«£ûל»xÈt|*°ˆ‹xØGؽ²~ˆñ©ø8¸;­?/¶âsb P„2>Qn“˜I¡©Úº›ý“fÄéêíÍåÅ/½Œ_—³2? \G¥¯Ø)cÉÂ(8QOãÉ»rjÓäIàÞõªâP¦ý˜î¤£å§\qÎ" õTEL* ý ú©n³û[$Ø/ˆãN~í={AW«b÷M”…*þèüßå8®Žêÿ“Æ!Úendstream endobj -1158 0 obj << +1198 0 obj << /Type /Page -/Contents 1159 0 R -/Resources 1157 0 R +/Contents 1199 0 R +/Resources 1197 0 R /MediaBox [0 0 595.2756 841.8898] -/Parent 1145 0 R +/Parent 1185 0 R >> endobj -1160 0 obj << -/D [1158 0 R /XYZ 56.6929 794.5015 null] +1200 0 obj << +/D [1198 0 R /XYZ 56.6929 794.5015 null] >> endobj 322 0 obj << -/D [1158 0 R /XYZ 56.6929 687.8392 null] +/D [1198 0 R /XYZ 56.6929 616.1082 null] >> endobj -1156 0 obj << -/D [1158 0 R /XYZ 56.6929 663.0573 null] +1196 0 obj << +/D [1198 0 R /XYZ 56.6929 591.3263 null] >> endobj -1161 0 obj << -/D [1158 0 R /XYZ 56.6929 346.0859 null] +1201 0 obj << +/D [1198 0 R /XYZ 56.6929 274.3549 null] >> endobj -1162 0 obj << -/D [1158 0 R /XYZ 56.6929 334.1307 null] +1202 0 obj << +/D [1198 0 R /XYZ 56.6929 262.3997 null] >> endobj -1157 0 obj << -/Font << /F37 747 0 R /F23 682 0 R /F21 658 0 R /F39 863 0 R >> +1197 0 obj << +/Font << /F37 779 0 R /F41 910 0 R /F23 714 0 R /F21 690 0 R >> /ProcSet [ /PDF /Text ] >> endobj -1165 0 obj << -/Length 2627 +1205 0 obj << +/Length 2877 /Filter /FlateDecode >> stream -xÚ­]oã6ò=¿ÂÀ=TA+–)¥OÙÄÙK±›ô’P`»(›±…•%×’“æ÷ßo†CÙ’#Ç»Mí?f†œÎ%Fþb”ÄŒ«4™4b1ñh²8â£̽?~MØ. -»«ÞÝýx¡Ì(e©–zt÷С•0ž$bt7ýœýóô—»ñÍq(chvÆšï.¯Îi$¥æìúêâòý¿oNMÜ]^_ÑðÍøb|3¾:‡"‰àKOaÂÅå‡1AïoN?~<½9þ|÷óÑøns–îyWx?Ž>}æ£)ûç#ÎTšÄ£'èp&ÒTŽGQ¬X)ÕŽG·GÿÚìÌ:Ô!ùE\0!c5 -U¢8Nö³%ØzP–Æñ.×P(” ê$ÖŒ¸Ñ‰ˆH±D©xdâ”i%•SÊz9ÍÖv²^åÍ3 - ðTÄcâÈ3\º\®ŽETYAâÍÊ)S[æí`õ@-‘'ØáÙ?Ö¶nj¶«Ôa´–£î!Þ&%Lõˆ´aÊÈè[h¶({¥' ÓF©CÒŽ ,3tàð«ÜÖ¥|»´“üá™äö4·$:ê¶4\§žWëÂËÿÞ/(ªÙÌú±¦r’²a+%§Åæ8K ê&[5ëåÐK€qÍËÍ6sKÀt8«V­uôΩ#&µP~ãûöÎ~ÝS^D;+êÊm1”\2¥dÜn•DfËì¾À“™©‹`õL=<§Û+vÖeaëzhƒÒ0ɤ³ÁgÀØ!hÌD¯«–M^•D{ž¡´M¶%íUÎÒD%}±:þƹ´ÓA±ßÍ-r» ÷â[6í©{Y­ϸi'Eë¾ó׿гé”Pj?w²ÇŸd‰C¥MP®÷`Uà1A÷*Õt‹qƱBÀïQi”ÙÂúu“"C&¸`‹ò¼´àŒµÁe3tn§ãPŠxçd0ÆÝ }»€tG5)ºç¶Î sJ c•Í<…Ì“ªí óßxÌ¿‡:rôJpXùBiÒMÄAY5›€'üªvšöÓ­þtËQòYéö§cÇóvC@ãó«Û!…8dÁÎJj×5J?Š…±§à9!¦æ5¦òÓÒ6û˜†Ät0ÂuÇ£Ñ6ÄIÅÒW³˜4[Œý\»Ñ‡â[œ%N:Ó¼^fÍd~0Àû…dYJRÂm^‚*ý¨–Ùä‹u®¦šÊ·îPÛÕ£s/ªéº ÀóBeýø è>°f½áªE}š3Ÿê½ù°2·Bz›Ü;ÙŠßûߘÂ$K¸Iér/H‰#Òe 'ŸÖ¤wB½Tðîöò}OŒM5©Š‚=¿"ÙΞÿ®DPÅ,Ñqü $[Œý¢š¥‘ÚÂÎœ>ê,Wjç›õ JHô’"ûI|¨f5Íl* -ì4ó¬!hž=Ú]h“ïèð¡rš DÒ8¥c{õëùõÇSŒhM˜+¸YWXàÕº.êcÀ6£¦sä!Su' -•ÒÁªÒä2…—¥€†’›«¶8,O3™Fízw}€CF „®†XKH›õ}g;T'€*ušè¾´¦Òhº›ûM¹k#o³»N– bXùMÑÊcì5eH›X*“C¦iÆ©|M±%œú\ò°t×Ê:d§’ÇÞ:qÌY§ƒºöèVW´Öå×8°,²Ü¯ÅÜÜÓµôO.3Hƒ&_ØjoNíwó¼¦ j!¦=4Ž? !)7¶AvIKßûº——ºúc`÷Ö×¹P]œ)D„”dd£y†æˆ˜S¬xÊžk‚‰s³^•žš.®ooÖÇñ ¾ÓIåŒ[ʪ›E6KƒîP08&ÑÁÈV50Li"ûÒÆìŸ ›Ú£="VFøâGXÞÆš{&hî ãŽŠ+×åäØTÕ”ŠrìàÒ#ÓN†’C2”)ñx½ÌuZ•ßùAlùà“ÃÚ >ïh/\åŸX@–Íüè$+  j¡{?å¬Y)°âc%”š·ëzû;ë/"{ª:å?™`u„óÎÜ`´¯L¦£ÞÔa¸5õÉ`êâåc:ÏbP¼»„Þ´)DØØši|Îoðå²±+¨:,aøהܖvûÆ¿j§ˆ¡Ó⦷;D7Ѷu€œ}B#zw”ÛGWº×Ó-òi×z2ì—æ>kò9½‡×Т —U7ùcïÖ=¾°!ùy[I´ Í¬³l,c÷4%žîbçäxq ‰-\¿%Í5Ä,s'Ø|½†*ѽ´n•zík -9Pí=7´d xkÀg)÷>¤u×,ˆÈîó—牯˜Œòþö\zšƒi7ºçXäc„[k‡i²öÐ(\ ” Ÿ»§±üáyУ’â£í½A)”ù–Ž €;6´tlü±QÝx K‚{'‡Uù":90u†´Ïa&b[·ÁØcVäSŸ*bÿiž;í$bóhïßß<ïøÂûšmvËC"1i=îpݽR¯•Ýݬãm™Ì69Ú~¶9ôq 7;ßþV»éž2¿ qH„TÒý~ôâ;’âR½Ô@þ%%‹uÿ™f£‰í—8‘(È&•vÚÁgB‡‚sO«6ÔÜ6Yc7ô~•-Ùj AmKØ@¤ÿ®Ýú¸¯kõ?ó4zÎÉûÏÝ\Qà'±(öiíë%oi˜JÚÜ°îï8/wôbÜ´äGcP)? ðÐ’i—b-]Ø“ŠxEˆŒ?eRš´³s÷ø_w9Ú'ŸžGøD+Šâ– -‚kòåïîQßu>Ñ»½ÇÎgêýäçÿcŒ?ü¿ŸÚîÀmö sû´…~G ~Vm³z“Îé¦Õ<«#0t}Ó_¹çžxËiÕx]P˜ìá„;š¡Ý=ߊUÌ"z¸Ý½‘|tðÙîk¿#o?²Ghê‰Ü^íÞµÖøMáÎ#±»óX%,N¤ØúÿúÃå8endstream +xÚµ]Sã8ò_‘ª{XS»öéÖlÞslÍÀpUWµ»&‰k;;d¹_Ýj)q‚CvÔn}´ÔÝê/…üóQšDLfñHgq”0žŒ&ó6šBßçîÆ„~PØõéáäïWR²(SBžzk¥KS>z(~ .þqþËÃøî4 Tt&ŠŸ®o. “Qsq{suýù_wç§:®oo}7¾ßo.Ƨ!Oó…[áÀ„«ë/c‚>ßýz~wúûÃÏ'ã‡ÍYúçåLâAþ8ùõw6*àØ?Ÿ°Hfi2ZËx–‰Ñü$Nd”ÄRzLuròÏÍ‚½^;uˆ1ã‰N ´J“% È:0É"­“tjÈ¥ŽâD£LX ±‰à=‘ðXF©”ÉHÃ:J +ie²ªçy7™™¹3doðE'±*8ò«iÛ|jZà–Ý,:ŸÃl‹\ç-áVuþX7²!\a:³œ—µGÏ0©ò¶Eê@'ä<Ê’DX‚ÍÓi(Ó,h–Ðf,x² Ö³r2#¬²<åi`\nñuC{¸²žºÓíð#å‘ÒÊî¹4ëq©27N‹48' · +œå"ÛÝ~e*$ ÚÕ|ž/_è£l©Í«¶AˆU3"Û5®™¡-'°8KÝv&Uiênh×:ÒR'~XÞ™iô9çxÉdð0+‰ç!×Y”¦ZúÍóÝ9¡”ÒîYÊ8x4mG˜ [î19}þƘ@É#ÊÊ pmW˜åoçO€H`ê(ÌS¾ªÜ’¥[°T"ˆ·Ù²(9Ä¢ì Ϥ;z½ªª!þðȘÌòº6U´ob°Z)1êÝ©÷]S [“` ·çúëKúo¾ÊÀš(ÐŒ·¯¾Ê@؉Š‰9¦[7ËoG/þg¹Þ,Ì2ïʦn³¬¿™÷pŸgüCy–Æ‘äpÌ#–_«cZD2ÉŽ¹¥“(‹ïñ+lÍdµ,»—£Œ;_,¬=ožóŠ¸—×…©KD×°e-ÁäþXz‹×½C|¯•Ž¤ñ÷¬é§ävÂâ(K5?Æm%£,c™å~Yšö(—ïfR>½ßÖ[ŠŸ~ ûÑΚUåøÿèlÜ•µÅѱ>S£—èòe·Z€ÕSXŒ¨¢7¶½6@`ãl<žŠÁ”po­P‚Ý×\¸qëì¾]ÛºYç¥Aò,ùŽ£3.R:ÃÕOy`5|á9í^ñcUW¦m‡6¾VÄ"ímðfì$¦cîÆ5 ´¡´ö ƒ¡Sà°©½Sf |™îù@d :XS ²ýafh!» q/ÿéq$îE³ìáÎO¤ˆâ‡¾þ…6˜Mi]ÞÉúÄK\|¸Òàwçfãñ3E·{,)Ü¥R6‚tã(´¶S^Â¥xpÝ Û…R<Ù; @¹mˆh?è˜Ü¡9jIðyiÚ’f„Ë|êVÈÝR­$þKØ0B%A‰V Î#B( BBPGQi·ó¸å»iÐíå§é³3"ªß"*^­MwˆhHD=œsâ¼ÑÖÅ ð2œ}‡£ò°ƒ‹!ÿbZ Yc&O•eOQ¶ ÌèŽ`n ©–1@[Ö K‡åÁ"Ÿ|3ÖV@å^Â]CZ³|¶¶àyS¬*3˜šì9P˜î> endobj -1166 0 obj << -/D [1164 0 R /XYZ 85.0394 794.5015 null] +1206 0 obj << +/D [1204 0 R /XYZ 85.0394 794.5015 null] >> endobj 326 0 obj << -/D [1164 0 R /XYZ 85.0394 204.344 null] +/D [1204 0 R /XYZ 85.0394 115.6831 null] >> endobj -1167 0 obj << -/D [1164 0 R /XYZ 85.0394 175.2926 null] +1207 0 obj << +/D [1204 0 R /XYZ 85.0394 85.2644 null] >> endobj -1163 0 obj << -/Font << /F37 747 0 R /F21 658 0 R /F23 682 0 R /F39 863 0 R >> +1203 0 obj << +/Font << /F37 779 0 R /F21 690 0 R /F23 714 0 R /F41 910 0 R >> /ProcSet [ /PDF /Text ] >> endobj -1170 0 obj << -/Length 2010 +1210 0 obj << +/Length 2005 /Filter /FlateDecode >> stream -xÚ¥ÙrÛ8òÝ_¡Gºj…¯§Lâd=µãÙµ=Ož”‹&! ’²ã=þ}»Ñ EJ´WN*Ua£Ñè» ™/|øÇAÈÂD$‹(Q,ðy°ÈÊ3±†½ÏgÜÑ,{¢å˜êçÛ³wŸd´HXŠpq»ñŠ™Ç|q›ßy!ì8øއ߮>]~þýúýy¤¼ÛË߮Η"ð½O—¿ èóõû_}}¾äqÀ½{ÿÛ‹kÚ -Ÿ/¯>&¡Ï L¯/>]\_\}¸8ÿrûËÙÅí`ËØ^îK4äϳ»/þ"³9ó™Lâ`ñ Ÿñ$‹òL’JÊSœÝœýs`8ÚµGgýÇ}&d(f(ø‚s–˜x0HX(…<ÈxÅ÷}¯xjtK6Þti§K]u´ü¨ÿð}Q™ÎÔaÒ*'à÷6]kôÈ“£€ù Øf"Q‘t»é‰øˆˆ',ŽÚ‚4$ÿ˜•€'èKÕîU“‚{Y]¡në]sÎcõGlâ,P¥¥…|¯ÕÍ£nÜvMß´h{(süRÇ!¥OaÖ›îIãÿ„pbêÂ1CŽ`" éýáþÖ‡é¡ÁT"‘TLÊ(Ä8Ñ^³^p= -lO¾ÓS\ÇÎ9âŠ>ºÑÙÅ°Ø÷ß -°Oqä‰ò D‡zÆ1S¡/"!˜Œ…šM»žh9¦:ÖîˆJgà Ù“pL r(iS¦Ï²­.M×YQØZ§š#æÉAX ¶[KµkÆ}wæ"b&Œ;N¤´½ÚC®AVIèrèÑ觹S¨tœh"–Þƒ©ò–@rBû„À&~Súæœ{£œ@Ü´ÓÞ2®' ¬šNN/Ù‰úxuCÞ -mß!S?¬Î4Óè;{xC›Ð˜ÚÂ&¹&Àéµ­«VÔ/hñàÈ É´]s{»Œ"e‹¢çêˆZ{Q!T¦Ueíĺl —Ò§ª›2uÜÉ@B‚4ÏýÑ.ÛØN&úœÉ2ë¡DØëÊç.WÕ«jš«ÒëÑûì”ÒwW,lçz•B›&ò>Bý)¬ -[; vo9´ÿ± ªGuÀëw¤íè†zi3žM³bטõÚIËJ@¾^\%Czë´É63U 9J©™*P±µ ¿PËæ1-¼Í\•XWÎHža(ù‰v7ƒL¦Ãôp3¼Ó]ö®±ÅÅ QW3’€…Š÷ k¤Ÿx—éîî±G“kgeJºKªWTi2F‘8èçy]¦Ð\ƒÛ°‘:[Ÿv±Ýê*ïÛœõÛÐ ‹´3ŽÎ6ÆõB,·Ý°rÁ…3·Êënv®ˆX'|Æë徂iÀOŠ¯<‰Tx’dñ‚äâßïŠ8Œµ6ⶮÜd ´u6ÙødsÏuU‰¯ ; ŽcmÊ] ÌTèU»òÁÞâ*¢‘pÖ^‹ÁØ!&¥å4ÎDŠIC»nÄW}‹Fh†Ó-5ØëÏ¥NˆþFÃ? lÿ$lQ×_w[B?èUí²q¦baâfŸ¸Û´s.úYóÅ„fCŒžj>ú%Ü °4éie -_3ÿLûܤe bŽ39FÐ&’Ør˜„¾ïü‡ÐÍ ší=.¾ÐêßôÁÉ ÇàžŠ1ÿÎÙ‘ñu~w_õ3A|˜s‚~rDŒ1·÷ߟ^p“Šà髽›Ô n:ñ5Ë_~ÍöÜgš1Ìúû‘ ÝÓG¿(ê'1™GŸ¬.Ë^“V;%íXÒ7¾~úÓikŠg‚ñžu»3<žˆs·{8°¶-Ò¾qþ«®\<ôò²7é8'çìz‹®BB|9mAwDR›Ó£Å=Œž0ºšú27¹Ó›ºíö½ _½z~"^ÅK“—÷&?Cnuuãz6Ò{Ôáå¡,ßv|"Ùqù Ÿîo>Û¡ìuÛ¦[³ÌCÒ-°<3Û´8Á˧¿Ø¬;,ü-ò͸±Þ«.=%Yšmôre -ýö ä»r{úщØR—XƒÐ/MæòýY·÷us_Õo=þÚoMþÊCÚí ØªõwžÿaÕ±{/Äé®Û,«oãì{Ëñ\ãõ†Cá²®–ú›éNâ1M(¸öð=µ¿ä¯Ò¯ziÜCøEÁs¿ÕÆ?°ÏüÄé—àÿŽ¿ÿ#Ì+2ŽÅü¥"‚»+&N)4Pý<;üà¬úÿÙ¤endstream +xÚ¥Ùrã6òÝ_¡Gºj…ÁÅkó4™ñÌ:µq²¶óäL¹h’Pá¡”ïfÿ}Ñh€"%jVž”«ÌF£Ñw7±5lF$JyºˆSIBÊÂE^]ÐÅÚÌ}¾`Žf鉖cªïï/Þ}ñ"%iÄ£ÅýjÄ+!4IØâ¾x"ÂÉ¥á@ƒ?Ý|ºþüËíûËX÷×?Ý\.yHƒO×ÿ¼Bèóíû|{¹dIÈ‚ÿxÿóýÕ-NEŽÇ÷×7“âçÓÛ«OW·W7®.¿Üÿpqu?Ø2¶—Q†ü~ñð…. +cö”ˆ4 /f@ KS¾¨.d(H(…ð˜òâîâ_ÃѬ]:ë?F Ÿq ds S .¬Ë—Vu—ˈÒà?`Í‚ ’2*KÆH†ÜR= E©»^Õ˦ö ìGo³¢hqð°mÚ~ÀÃà Ž¾sóß°†‚€Cÿ÷;?…鬪ÏZ½ì¡Ç:«Ôü*6^Õ©¬Í7늦ÊtmÌrjú[t®‹¦w±¨wÕ“j'k–³‘1|Íä»Oœ-ô +ø˘$‘‡*aÜd>… bÄ!ïú¬W•ª{~T¿RÊkÝkˆ0`²º@à—.[+'IŒrÊâ!á)‹­ ûÔÙ±”$±„|ÝgÜ1+nÊ:…L·TÝ^5ÁY75è¶Þµ—, @ÀöFœÐý‚CÛgÕºé¿YÙy(wü2Ç!ÃO©×›þEÁD81Mé˜ ŒM€fÁEð+ éR‡-@¦œÈT,ŒU$¦ŒC-â\»^ p;*^O¾ÓÛÚ8çˆ+øèNåKL )B’Pʦ¹qd© LˆõL"#š,"&I,£ÙÎâi–#¢cÝ9hb¼ÃLê¤ r½‰ªTÙ+O!‚jWöz[Î&M G.ÿ_æD$á‘<ÌœåìSG×k9 7ÐLà  w‡ô/ºß ºÐ+ ]9“LzZÿ³(&BDñ´©l-Q³Um¯UG†ÊO‹]ç †SBYê­šî±åRx®bDt[•k0Ü‹ˆlª<°CD³BŒmÄÖþiC›Û¶ör‡ñ„¹~“9ýF;z]éu®{‰ãâ2ó(Í¥ndLé4q‡ºc,(2UAÜmš]Y œå¹ÚCFÃßwªƒ ÃlS›*5\¯Q7øÅ­ íH÷Ž*þ¥hRÎP‚'Þuª8à켜F@3½¾©tß[QÐW§šæE—%BP ¶ [K•ëľ53“&„9N¨´=»pö†\3ÍY¦‘Ë!»kΘýããD㉞t]t¢+Ú'Œ !à›á§Ô—,åà¦x˸™0ÀÍåxÉNÔÇ›;`Kè|{”D†,žb›å +|'’¶nR›Û$W8½¶MÝ)$22ê—8xrd¦Ét}{™»#e‹ÂsuDÝ¥ª²º¶vB]vˆËðS7m•9îhŒAši_ýÒ>ßØNÆ} Îœg¬‡Rn÷*Ê\®Ê!Wå4WEàÑû삺ýÕLj•™64è}€ü*¨ +[;)žìÜ rhÿcAXò€³q¬SÜiÕ8£Zì¥í x¦´úV¯×NZñ¶`2ÒÏ€ÇU áRÊ™*‰µ ¾¦–õsVx›¹2µ®œ‘lxF‘`M´ÛûÃÎðNõù»Ö1‰ºš†$’Ì/0Y#h\÷¨»ÛÇžu¡œ•~p/¨Ya¥‰È0ŠùA?ÇC²op GlÛÙ|fØÁv«ê·9ë·¡A–Y¯Ÿ-lµë…PoÛaMȹ!@sñÜ=Óöb’&)›ñzˆ¹ÏÃppƒGÅï<…CÒ9’ù É'â„ßoŠ¸9ÓÚˆ‡Ðº +¡³Év0ƒ¯Œl¸®*ài‡ãXëjWf2rw€c<Þp±L†Ãiœ‘’gÝù^ú ÐpVwØHÌœ_—9!ê<ù”퟈-›æ·ÝÑOjÕ¸lœé,P˜0éw›õR¥?kžLhrâ†fÎì)MÄþ†&Ü ­Ể¯¿£}n³ª2bŽ38ƦMD©å80±×Éázzò®í®»pòCÈ1xÄ"ÌŸo¹»?ü¦^2À—9›^¢Í5yA>ó"+ÏpÓ™WYvú*ë¹Ï4csÖß™À=>úeÙ¼ É„8üäMUyM:å”´Ç¢ðÀßøüéOe._†}ÖÍ:ÌpyBÎýîéÀÚ®Ì|ãüwS»yèå¥7é8'Cçìf ®<#'¿þ< }çöÖnœrkÇcâ˜=Ô´wÊÐÀk6(Ó)›;¶ŽöŽAƤ˜bA(\K\›6åSœj¤'<Š¼6v¥úû Ks¦$Lãhº? Ž=|‚óïZ&Q´€sƒGsô4'Â3^˜6M×ï{}uýÁûÜŠ—ºuq¾…nUÞ7­ë ÐH¿ò87YjúÈòmË'ºÛ .ÿ€«û›E÷ {ÝuÙV/óV&‹4Ò-cy®·Yy.¿±íŸÏ´WoÆuôð£>;'y–oÔr¥KõvO»j{þÒ‰ú•ª M¿Ô¹Ë÷WÕ=6ícÝŒ—Ï=¨›¾¯à3Tthdù±}ÿK„ÙsD’œx‹ã±é?‰aâ”åÑûÚð*¬úÿð!|Ìendstream endobj -1169 0 obj << +1209 0 obj << /Type /Page -/Contents 1170 0 R -/Resources 1168 0 R +/Contents 1210 0 R +/Resources 1208 0 R /MediaBox [0 0 595.2756 841.8898] -/Parent 1145 0 R -/Annots [ 1173 0 R 1174 0 R ] +/Parent 1185 0 R +/Annots [ 1213 0 R 1214 0 R ] >> endobj -1173 0 obj << +1213 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] -/Rect [491.4967 730.5319 511.2325 742.5915] +/Rect [491.4967 622.8956 511.2325 634.9552] /Subtype /Link /A << /S /GoTo /D (lwresd) >> >> endobj -1174 0 obj << +1214 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] -/Rect [55.6967 718.5767 89.457 730.6364] +/Rect [55.6967 610.9404 89.457 623] /Subtype /Link /A << /S /GoTo /D (lwresd) >> >> endobj -1171 0 obj << -/D [1169 0 R /XYZ 56.6929 794.5015 null] +1211 0 obj << +/D [1209 0 R /XYZ 56.6929 794.5015 null] >> endobj 330 0 obj << -/D [1169 0 R /XYZ 56.6929 769.5949 null] +/D [1209 0 R /XYZ 56.6929 672.1567 null] >> endobj -1172 0 obj << -/D [1169 0 R /XYZ 56.6929 749.3309 null] +1212 0 obj << +/D [1209 0 R /XYZ 56.6929 641.6925 null] >> endobj 334 0 obj << -/D [1169 0 R /XYZ 56.6929 523.534 null] +/D [1209 0 R /XYZ 56.6929 415.9107 null] >> endobj -1175 0 obj << -/D [1169 0 R /XYZ 56.6929 498.8411 null] +1215 0 obj << +/D [1209 0 R /XYZ 56.6929 391.2207 null] >> endobj 338 0 obj << -/D [1169 0 R /XYZ 56.6929 441.2232 null] +/D [1209 0 R /XYZ 56.6929 333.6097 null] >> endobj -1176 0 obj << -/D [1169 0 R /XYZ 56.6929 410.756 null] +1216 0 obj << +/D [1209 0 R /XYZ 56.6929 303.1455 null] >> endobj 342 0 obj << -/D [1169 0 R /XYZ 56.6929 377.2039 null] +/D [1209 0 R /XYZ 56.6929 269.6003 null] >> endobj -1177 0 obj << -/D [1169 0 R /XYZ 56.6929 349.6417 null] +1217 0 obj << +/D [1209 0 R /XYZ 56.6929 242.0411 null] >> endobj -1168 0 obj << -/Font << /F37 747 0 R /F21 658 0 R /F23 682 0 R /F39 863 0 R >> +1208 0 obj << +/Font << /F37 779 0 R /F41 910 0 R /F21 690 0 R /F23 714 0 R >> /ProcSet [ /PDF /Text ] >> endobj -1180 0 obj << -/Length 1176 +1220 0 obj << +/Length 1122 /Filter /FlateDecode >> stream -xÚÕX]s£6}÷¯à1îŒT@|NŸ²©“f§›m]÷)Íx0ȱ&±Øq7ûß+,Àààgg:HBçÞstuuG†¦ËŸ¡y6Ô‘oi®oA[7l-ŒGºö(ÇnFFù ¨>ͯ>ÌF?^#Wó¡ï˜Ž6[6°<¨{ž¡Í¢û‹«_.›M¦c`Úú…ÇÀvô‹·w?«_=®>ß]ßÞü9½»ÖÅìöóêžN®'ÓÉÝÕd Ï6ä|³D82áúö׉z»™^~út9?Ì>Ž&³šK“¯¡£‚È—Ñýƒ®E’öÇ‘‘ïÙÚF6thø¾©Å#ËFжªzèèÑï5`ct7µK?yÐöL·K@¿! ¡{з|Wsm:ÈD;ïÇÀÑõ‹%ÎÂx¤9Ví-sÆç ûIµ -ªÒ0 èÛ¶ÙšKs±³ À Vy±M2hHœd¢€Ñ`"" 2"2ŠEÂ2²ÜÌSÍõÀÏ)%!ÉZq 2ÌåÒm#‡9„%à òeh"ÝÙ6ÅÆpz¹À€D eŒŸ$Éäç%‹@àáþG‰88 ô„ýRN_”D2ÒXr2eì)$*ˆXÁN½g<—¡$áŠñæhzq°À@ Ýaáƒ0ÄidôŽ£2 㛀—ÿÒm]½ÛŠä%á"«¿2zp.‘1/·ÛWõ(GI:¢¨Ôñ>e<«û‹Æƒj•f „•½Ýã[}r™2dÞ Ÿ¤Ü|]»qÔÖט‰ _œ3-Ƚ.jµæEù¸—\…Ò¨÷BæJ… -`)×jiÚš€N¥4á -KU™pÏO%¬ÖÊ ¬q«§JÄ ?;¤3¤“Á´C* ´ÕAÆñ‘ ëÁ(~>¤óF›ú¿Û…õÎ’ëÔ|™3ñ#'Ùvøž­ØªÓì;r|ý¾6;tdAIò8\¥€R¶̓»Ì@ÅÞÃBÌã@hsJª¼ö­7è—ó7aG0Aur×URÌ÷C~£ÛjdÄâk¼íû=P«ni•hg¦6+ɼ»åa•ÚËyøê¨Û¿‘ÔjÔqe½çú™®-a¡k!{‡úC«l Ô¥0"×´:ÝÙSlo0¯jMm×2JÛÖ1ÛÖÞvS·—ÒÓ†¶é£îhU¢öR¹Ðò,k€ÍjÏ°|h!ß9£ \xU€÷v­:uÜvGóZ3ß…¦£›VPyäÙÉVçš}±ŽDÙ+zœÿAô ÝN}£Ç8¼‡ÙEPá̉×1íùÍàõ[×M+²aq=Úq/ª×Äß| »¿¢¶dâó<³¾`5Qã‚éôLß­œ*hZèÐóúºöµëÿ³Í Òendstream +xÚ½X]s£6}÷¯à1îŒ(ŸfŸ²©“f§›m]ïSšñÈ ‚&±’pìîƒ×i8Ü£{Žî½º#S3äÏÔ|W7ìÀѼÀÑ]Ãtµ0Ú£|w31«o@ýhõ~9ùùÚö´@fÖL[Æ-,_7|ßÔ–ÑýÅÕ¯—¿/ç‹)°\ãb¦O;3.ÞßÞý¢Fu¹útw}{óyq9õœ‹åí§;5¼˜_Ïó»«ù˜¾kJ{«BxÁàúö·¹º»Y\~üx¹˜>,?LæˆK›¯iØ%‘/“ûC‹$íC·ß՞僡›A`iéÄqmÝul»!“?'4€­·{ÓSú¹¶¯»¾åÐ1[š†¯Nàižè3Û²÷ +ÞOÁÌ0.R”ræ‡Ę 5žC‘¬2˜¢wêù¡¤,禩®kµ1r´d(,ÇÙc{³mÿj×ÿ¦5¸C|EÙ*£=`!m#šBœõ2ïˆ$„†P @3€¶X w!Âyû~EsiÖÃ6†Oà/b»áÎÇH„ x$îtL +ž€R~^2çI!"úœ J   F™àÃY$”‹W…ÀHáV½ÈŠtX„g8…0Äsšq4‚EZs‚@XFþ8>õøM]Ð6'8¬#´L!ˆÉ%$»þùNGd +‹CË6| v92‡Ó+¸Œóä”’áÆen ùx3°†ÈôŒs”Á5‘/•ùAÑWÁS„Ò'ÈqT9Ñ®\‚2”a&”µßö§—–kYRË…>1Ãa¢\ÈÚ˜c†¢•†²gÈ*ÿ ×PweÄv"9ÆŒ‹æ+³OýSȈUéöU]ª·8_Á(ªt¼Ï)Íxù𠞪it]¯çÛ_¾÷ѧ%CÖðIÊÍ6/ÎõufÙzPö(ȃ.jµöûçÀ}ÛÃÕ(úq/e®U(¡À–r­‘¦« 8É£’<¥U üTÁê¬<'pƒ:#u!nùyB:óH: Y7¤ &ü˜Q†^²ŒÒí1WÎiüËdϘDa“9Cj²—5=2,vÃs¶f«v³ÿ‘3g›·ó„N¯‰lGôž²u|í»ª@eî!ÎW)” ڊຮ}ï ÚêÇaš/`‚zç:¯« „RÌ·C~¥Û'Ô f<®+ÑÙ|>ê°Î{~%Š\v4ç^; +ª-ºI¯3àWÈ*wŸøÓðò(dT‰0—šÆÒ‹dlâof€ï2‘ ŽùÙØ­‰ì'JÐùyCeã½q@å Üý»Î–#CWX!ηX~¡}êô-í Ò4ÓJ2o>s‡°*mœ,üa«;ÜáÜiõqU¿çºmy®„Õ=Çv÷¨?uZÁÖ‹ºu:uXf»zyÂuâhËh ^}v8et<Ýö}«9#³ìÖ™mÌtß +¼Ú©ÒwÇ>ö¼9qûÑõÞ…›> endobj -1181 0 obj << -/D [1179 0 R /XYZ 85.0394 794.5015 null] +1221 0 obj << +/D [1219 0 R /XYZ 85.0394 794.5015 null] >> endobj -1178 0 obj << -/Font << /F37 747 0 R /F39 863 0 R /F23 682 0 R >> +1218 0 obj << +/Font << /F37 779 0 R /F41 910 0 R /F23 714 0 R >> /ProcSet [ /PDF /Text ] >> endobj -1185 0 obj << -/Length 1117 +1225 0 obj << +/Length 1126 /Filter /FlateDecode >> stream -xÚµX]sâ6}çWø:#Õ’¿gŸØ”¤Ùé’.¥O4ÃhmÔË+‰ì²Ýþ÷Ê6 l3I&[ò=:÷è^éJÈ0õ/2º /°¡c"ÇW=ÓxÑ}=´ý”ïÞO{?ß[žÀÀÅ®1]`ùÐô}dL£Yß…4‚Ù¿{ß?>ü9<»?}|vÌþýão£âéa2üøq8ä;¨÷ëð÷éhRt¹[Œ÷ã_Š– øwt2ºMFã»Ñàyú¡7šî|9ô™VæÈ—ÞìÙ4"íö‡ž ­ÀwŒ¯úÅ„(°±êÙŽ۲ʖ¸÷GïÓð 77­Õ™[.®08Ð7¡kj(Ï  ka+p6®iö¿¬©Ø¤\(r–(*^I\t&ëÕg*Þ/Ï™Ïz`€ ¢¬È7 Iä‚ - ØŠj ›!øZ]Ç@g1XßJ#‡hD£‚¡Â„1£‰’-4\ É^isûÊÈ’ -FbO*DÑîöŒ¶%Ÿ¹3©h’¬ÛŽ½S}ÁÅŠl5ÿËtÌâ‰'è¾RQ¼ÿ(ç+ÙlÛåεNæ1‚p+Ow¶‚cg›j_ÙU%É×"¤{•XjÏIíÔÉ @ {ŽF‚žmÙ9ÐOy—ÏsƒöL·Âx–­Å#KçÙËsñVá—-§ÐÒF%Úò¯î!U÷”jàA¬W©-Uç U§UlZz¥ô‚ZII¬@+YÐÞ„k1rœ¦\¯J‹1‚È3Ý·‰Œ=ˆl×FÁZê¤='ï†Ê9ó„7û„+¶Ø€ˆÆdS.U!O"YCé"B£´q=hyØ>'˜s[Úx´ì ¨¬ÂòzÒì3ð b{—äT\s%GóÙxNH,9(Š†w¬ö®^c;ë`!,ÙåÿþkX\°o bþ$ûN;TëyMô»7Ïžæ2¥a„ ZcyIîŠQ¤¥}eü‹Ë¢ ½±T$üçöaLIÂ’—®5ê’¡>S¢ºäf ÒèH¥ë#Ê®O¹¿j¶daO¥œë¢)\γ -lÔÏï.͇NŠý·m¡ªU«T.¢²6Û¢å-§“<»Ø{œšû =ïKLôqA©.§–$$ᲡñÉrжª={zòYÄÔ¦6gÕŠ%@pÞú ‘mÌÙbÖuåNeQ-FkAõAªæÖG¥e–Ä¡D™’“r¢xt¡#~™Ÿ8»Í€Žƒ. 蔉҇¶yÜq²i6`®W ¦Ï6µ…à+@ÖjÙ¹8ÂÊÓ«+˜®8#ÑWVFHJÔržRVI~˾™¯¦`EÒ”F`»Ä–i›´IuœQ!4ÈK¼¦Çäaå\<Ô?•†ñÓxtí€\ñF‰ë(íZë\3­»>³˜ÝyÕ\vé¿í07_­íïm]çû>ÞÝšaëàÖ {>´} ²%•¹gÛ'ÌË;¸SêÿÍÀƒ endstream +xÚ½X]s£6}÷¯àÑîŒTôhö)›:ivºÙÖuŸÜŒ‡9¡ÅÈ+äìºíþ÷°‰ ¸ÙÉCdI÷pîÑÕÕ•e›?d1:sËå21+XlëÑŒÝP1ì&ꬷÓÁ7ĵ8äv¬é¢‚åAÛó5 gCb82öðúÃýÍÝí“«‘K‡Ó»÷#€™=¼¹ûeœ·n'Wïß_MFy ¯¾úu:žäCNñöîþ§¼‡çÿ^ŒoÆ“ñýõxô0}7O÷¾TýE6Éù4˜=ØVhÜ~7°!á³>›6Dœck9 Œ@F Ùõăß¿í+£[ÓFý 1qpƒ€UD¶Eı\Æ¡C0Ù*8Ƕ‡+©tÞúÓfvÞŠVó²û¿ÌW !ÃÇ5°A—¶…ø¡‚œ1lU Ê­ª aæÄ´ +£ +? •HÓc2tž ÕØRÒîlr”CJ¸ÓH£Ÿ ô% +´Y²ãÍIj¨JíÓZ¨ HåZ<;‡,«|c͸ ±cãšåŒ<‰ùõ?Šõ]£Ç9=–îü}AÚFOM¡u*À6‚22`%eœ÷oD:—jžÈ–݈Q·Y«]ÉgnÇQªE’¬»~{¯úBª¥´me"€™ðYì“G±^ɦè/³ êð¹t#wòtoÛ#8ö¶+ãk’öU)?wJ•f—C‚]ÖZä®ë4gÖY™‹dùИÞŽ"t‚gí|> endobj -1186 0 obj << -/D [1184 0 R /XYZ 56.6929 794.5015 null] +1226 0 obj << +/D [1224 0 R /XYZ 56.6929 794.5015 null] >> endobj -1183 0 obj << -/Font << /F37 747 0 R /F39 863 0 R /F23 682 0 R >> +1223 0 obj << +/Font << /F37 779 0 R /F41 910 0 R /F23 714 0 R >> /ProcSet [ /PDF /Text ] >> endobj -1189 0 obj << -/Length 3019 -/Filter /FlateDecode ->> -stream -xÚ­Z_“Û6ßOá·zç"…DIœ<¥é&ÝöšÞ%Û¹¹I;9Y¦mMdÉ‘äìnïúÝ HYòÊÞmîfA ‚À ½|ÆàÏR2©£Y¢£P1®fùö‚ÍÖðíÍw2 -†RßÞ\<-“™u,âÙÍj0W²4å³›å‡ù«ï_þíæêÝe ›Çáe b6ÿöúíwÄÑôxõóÛ××o~y÷ò2‰æ7×?¿%ö»«×Wï®Þ¾ºº xª8Œn†^_ÿõŠ¨7ï^þôÓËw—¿ÝüpquÓ¯e¸^Î$.äóŇßØl Ëþá‚…R§jv /,äZ‹Ùö"R2T‘”žS^¼¿ø{?áà«:å?%ÓP¥"™r 8³4Ô‘Nf‰Òa,…´üpČ͛ºî‚¥)Í:늺 -ꪼ§/NÀÜåå~ièåßô¨²­)‹¶£·?èñ=^ø7pØpj¥ÄPçç½iîËzMo÷¦ýX7«úÉã—E›-JdåºnŠn³m¿ÞfE5²´y1ZÔ1ÛÙþÇ´r>TžåY¾1©Ð„¯]›$/MVÕ:(ªÎ4_²Ò¹w¿]˜æ Ól³»ÀMÕ¿;kúØîL~Κђò²0U×;Óvo†fGË,·^ѳócJCû…-ÄýËʉVÐd‹¶.÷“ÝeÝQ7YD¥Ã¹Æ)0)NÝŽrð‹ÇJ{(#J9A -fŸLE¬¬¥'­¥„y¿âØe9Òf!R‡EãŠ9çvUš;¡„TQê-…OPûˆØÖmG”¯a(\ï»ÝÞñiQ­QÌ„ëRgÔ -•tÞ2löÕD–A -·tYFõVÀ¶X€Iü"‘š\¤L…EȦäF“UuGö-®Æ,!ŸEÊh7ñSM“sA€ØëÌ–9Aö_Ž± ¡y §¡xœÿæEL•KbÄB†".âÇfÉHÌW–SoIàvSXÐÒ ƒM…ï`a­é:•*. -øÐen¾M½/—ôqáÆYT„o}MÔtL§“P%U"ÏCÕPê4TõR¨õ“¹NÃU» Xt^}/5¡WØH0žŽ øÇÆ&7gsèZ±ß$Èbz¾¼‡)rú¸ß-3 <@[ÔÖäû¾¾qêÃÚg„F´½œ=Ø2`ÝÊ"LÓ‹îö‹ÒëÃn…BŽáU]S|!s„Fq€‘Â>,œäªÞW˜X2ÒóbErK À–•3 ;í66f„7XìXfðé ¬‹_ô‘ÄD›; -e¬žÛ}Ûëi曹¾àÛùÐå‹(}$tRgB×KõðÜ¡çŽãzâœÕÝK=T o@x$BÁδS¯'ezh_¤k±‡þ1™B6­C‘ÀbÚ®;AÐSP‡‰,[QáI+ø-%†íài7luï˜vŸAÈ×å±l7ÙN È]è@=ÎŽ]zdwÈÆ\ˆã\°»n²-è®m¤ý…P:×XMbŽ§}oÍ.k²n²Á‡^wþ‹T*­´BZlyƒgeÌÒ,_  Âö“–»ÚW9n\VÝýpäë¾ –÷ s6;b# -«?îÑÉᘠÃêDJÀt0ƒx¤ñJN‰^ÊVB„óuÛf»"ÈXuÕp¬9N›D˜á…&̺fa"€5²Ãb|"ˆ¶þÅ·œÈ›eyt °g$»Ãx*ΖvˆŠt¶˜%·(ŒXyK)ù¼7-TpÚ2ð)4G^{€ã`Œyóþ}póþú ±]8uu^—x¾Ózþê€À¥ìqÀüÑ4 ñº¥oŠ[é0Ì]¤á·/YQÒ²éŒ|°I»l¢o(ÜÛ<¨+Gf :7E•;{¼çfüBZ"Ý»™yñùç}á %Jušw¿>?:…µ÷àø-}°µ™TŸÑK…×Jey®E¦Å=7]þüS³P!ÌÔe‹)8…#sÄ£¾• b‘Ìßz T±?5ð¾z¶í(¬ ¢¦RØüo‰õ«iàÞC¤a”D¾A_Víó‰Õø‹wV¶^Ý=éÕ$pŠc©ÇbTlW“Îo.µ´§°ÊÅ´Ä•Q<jÃÏ& 5JÃX%Y-Vœ´%fР où¡Èʶ·pb? tÜ€Rgn(uèz© ãÇM« ¹zD·šÐ=B7p‡vr¬œ:*( þÆél·ƒ©–¶z+Wx•¯ËX†ÜYHŠ·¼Y£Ýd.ÑéÐ ©µ© –Ê%°pùpkxC©™›¯þ9±©" 9´‡TA®Ç%øÀÂ8Œô8én6"¬Å\EClJx)–>b’Y{!s—Cß»¶8Áðî‡ôÙë3$ê†Ôõ {rE¢o…ð³+1àR[ô~µò¶L£ÌŠæŠˆU®ošÛã3²©˜ÖÞqYqÆB%’©S¨ˆ¼¤p›ñÙn3¾|eÐIKzw!5í$@/ɄφÊ*Þ W6æÎ_æ¯ÝÕⱃX´Vg¤CÈ‘¯ôŠµmÑxw³+˳–Ž®âÓ:Yq˜j|ÿi[N(xÞ_‚»þI¤t"©'døÚÖoZbytC9TðŒš ÌdÙ6Äj¿ÝôŠ÷„殀À^~ƒ`»_¦Òó²øä*˜7o´ _oGÎ$bº`¡H¥zÊ/¼Â:ÎîÒЖªt\ðñöÁ^ÝAm½¯÷®ìö}˜½Ô¦‹8üA¼/÷®!óÝà—¬)\_9y_Òï3gnÇS8¦Â‰÷|é®Ü^è-tàä¡=:«×Ë<Ô+ØåH±-ÚB'óïèÂÅÞsß›²ÜÚHÖ©CcíàÈZ8NçG÷²¦ -<_¢‰;Âx¸RŽuPÆýPëµÑvêÁS -´–ãÔ8ayÊH–6ýbèÄ™šAÇQú„î = NL^K·¤VEp FøÜEPÖ'𥬳¥ãø)üõš`:Èô7iÈu®ª¿¶¥‚+¡Ç×"Wþº 㹨†Gü-¨¿¯VìÄ9&šFHLÇBâÑd`Øà€ïqtN½ä1ŽkÓÏs„§þyÖˆÿq2ö¬ÿAöþÇ–Ãýà5Kšž8ÕKü­ bÓ…îŽÔ±åýÀ<4ý¿‚BÄendstream +1229 0 obj << +/Length 2511 +/Filter /FlateDecode +>> +stream +xÚ­YQsÛ8~ϯðÛ93•*Š¢$NŸ²Ý´—ÝÛô.õÎÍMÛéÉmk*K®D%uo÷¿@P²äÈi’»äA |e6óàŸÍbáz\³H®ð˜˜¥Û3o¶†±·gÌÊ83”úiqöò fÒ•¡Î«ÁZ±ëÅ1›-²ó×½øûâòæÜñ…7ÝsG„Þü§«ëŸ‰#éñúÝõ›«·¿ß\œGÁ|qõîšØ7—o.o.¯__ž;, æûv…Þ\ýí’¨·7¿ývqsþiñËÙå¢ßËp¿Ì㸑¯g>y³ ¶ýË™çr‹Ù¼x.“ÒŸmÏÁ]pÞqŠ³÷gÿ茚©SþáAØ+…ð‡s’,Ëu^•Iá¬êjë$­ÞÐÈ^5Ÿ«úsYÑë3ÖJ“t£ž°.V'ekdê6Oí"»Do>—ÉV=Ú¢mò¬pšü»†Ôçf§Ò'¬¢Ó³Mv;•9°ÉZ5jŽ6öˆ-íjµRu ‹¬‹ÖZóÑQôøþÁ߈qýîú²ŸÂaµÊÊÆi³Ý`ëe»]ªú‘~{üÔñ¹U•†S+Ô:ÁXpª²ØÓHg×·´h3»ììêp¨EÞØèý³ÓòØúÚªz_Tëçn–7ɲPNR¬«:×›­=\À$/G–ö"¯F›:f[Ûÿ|„à +PU¢ ÏN=Z$-TRæåÚÉK­êÛ¤xƹ'ÏJ˜Ñ–Ò"W¥nœªs6C3ž–¼ÿ§•pÇ*‡#^U5¤ó!÷´ú¦ÿ¨“;LªGïOmwzï4àáΈ'¡MO«R'©~öüïU©š§‡ › +üÊÄGêiHû]Õ•SVNS%ŽÖÅsãøh™Ç–Çç®Äb=Ú$d ¾|ã³Y¯j…Šér&c#„  ¡{ð`µj‡˜ÕPð^'Zm!üèõgõÑóüÒT8â@…"â÷&Y+«‹ª5¨ò…+9£=.6ª7hPÒ¡¢K‚0ÊtÜ_Œ‡Pð¹°rÍÀ8ÎçÒ Q펞ë¢Zbþ#}ؼè +ŸÁ|©ì„FeD-÷ôÄÞË%r±Éí´#…ÛÄ +cULj«Ç`=Q©¢“ÍfãÓFPåa8OðÍ!зë¶NÈ»8†œB¡ó«1õ2ŽÅsEÑ8dCPL86ŒÝXJöcÏF@zѱg_ÀÚRÀ)“®Þ‰¨pYTé"ïrì˜PBA°d‰†£¡at<2rÝØ õB7‡#ßdj•´… º»¼(ˆ2ÇO<.÷^Ï깞€vš¾ -&›îÑ­3”2-æÈm]ÿÛK£òZ¥ºü=ÒÌ0À¥à«î¥&tO‚qÏ•QŽ•cÞ8Üó»ªþÕ^À$ ¡lŽ–nµ¢§îæX”†;Þ î/J+ZBw’,›ªhµ•ÅQÙ(J‡kÝS`RœÚeà;/Ã!(åx)˜|Q%±’†ž´—Ö½UÄ1Û²¤ÉB¤›Æ3ÆÌ®$³>B‰.|PDig) Aí#b[5š¨®†¡pÕê]kù´©¦{žr×.¥Îè>r„âè¼Ì­Ûr"Ëà×>n³Œê­Çb&ê6‰Ôä&yì@dJn´XYi"°oÉq7*ƒ|öcN‡úhš\ LÁ g6Ä0È ²ÿžp¹ õ¨wÊÚQ‡óyA@åâñ#?RÄìØ,H‹ùÊpª- Ümr:@ÚIþàPaœŒ!¬Õ¡Ã±èÂeBºÌ®·©Ú"£Á¥gPÆúšh20NB•à0¸ñ>UC©ÓPÕK¡Ö/j«NÁ÷‚‡Õ÷RúGp%®< øçÆ$7ƒ 4Ðodyrží!Aò”Û]–àÚ 4*mûúƨk^Ññ2ïÞ‘ënPa™^t×.‹Nv+rÑQÕÙÕù-™ãKt!ðãCÀÀÒJ®ª¶ÄÄâœç+’Ë€[VÖ$ìPToLÌøy@ÀfÇ2€O`]uõ@ILDà(”±znÛFëiÒ5s}%À·‡C—y.C˜8tR„n'Õçó =w·Ð£x!—ëî¥î+æ n¡ºzœüH;õzœÇ‡ö…Û yè¥Õ²Iéúl† íJÓ ‚X‚:Ld™Š +Oúº‡c11LoOs`«½ešs¡®.eõd;íCîBÚáìØ¥Gv;€¼nÈ|ÿ·a×u²ÅÂ=Õ ’¸ÿ*Ï%V“açiÞµKêDO6øAäBãÎc‘\!…´¢CH‹)oð,•ÊTö +MðM?i¸«¶Léû[®÷à ¯mN-%ž¶6[b#Êð–r¿–S2 [¨)Á°Í'>nö)1”:½”©„çë¦Iv¹“Ö°ëRçp­9N˜?0£š0cêÒs#X#; æÀA´ñ/¾¥@Y†GCQqFRæSq6´ET¤ñÃ+®’Fì¼!Š”|mUœŽ | +ÍÄÑ…×\à˜Xæ¼}ÿÞY¼¿zKlNºJ«ïwRÎ_¸°“í%˜¿ªzI ^54&è1°•.ÃÌFŽÝ&yAß$MwäƒMòØeßr{Ç6êÊ‘ˆÎu^¦ùÎ\oAÀºGHK {7#3í1>ýÚæ]¡D)½¡uÛõñüÑ-¬Ùƒã·4`j#2©6¾ —?+ÅþÇ-òK¥Ó—_ê¥pa%,§àâ.`AßJ:¡ͯ; aw#jà |íئ£0‚ˆšB`ó¿%ÖG߬ñè;DìQÐ5èYÙ¼œØM÷¡ÅÞ•—]ûôþN¢È¼¸ÃbTlvÏç’›Û Øåbšc‚òàèúÔÅð‹ h bÈШCVƒ'm =lÑ:Ë@R4Õ¸%€ûI ƒùQøƒ ö@è4ÌuB–;Vî2ñ°âNæ¾â°·t’#ÍÔKA1è¾u#ìvpõQef궰%Wt ½%I‘ b4›Ä¦8½Ž!µV¥Â"™Ñ ”÷•û¾Ë¥×EÍâ×ËM§¹ šŽC’ ÛzãºÂ ä8é«2bk8ÄVƒ¶‚¦Ù17^ü“¤ëEa'¤¾¥Ðñ® BxøÕ‡ô™gHT5©ëæΊDßá°-! R“÷~5ò¦@£ÌŠÖ +ˆR¶cö%3gdSPùºuâwO.\ü±r"μþ3êÿü›èáclŽâØŸYŽ_È|uF¡_qlyÿãé}Óÿ !:ؼendstream endobj -1188 0 obj << +1228 0 obj << /Type /Page -/Contents 1189 0 R -/Resources 1187 0 R +/Contents 1229 0 R +/Resources 1227 0 R /MediaBox [0 0 595.2756 841.8898] -/Parent 1182 0 R +/Parent 1222 0 R >> endobj -1190 0 obj << -/D [1188 0 R /XYZ 85.0394 794.5015 null] +1230 0 obj << +/D [1228 0 R /XYZ 85.0394 794.5015 null] >> endobj 346 0 obj << -/D [1188 0 R /XYZ 85.0394 550.434 null] +/D [1228 0 R /XYZ 85.0394 443.9876 null] >> endobj -1191 0 obj << -/D [1188 0 R /XYZ 85.0394 518.6098 null] +1231 0 obj << +/D [1228 0 R /XYZ 85.0394 412.8839 null] >> endobj -1187 0 obj << -/Font << /F37 747 0 R /F39 863 0 R /F21 658 0 R /F23 682 0 R /F47 879 0 R /F48 885 0 R >> +1227 0 obj << +/Font << /F37 779 0 R /F41 910 0 R /F21 690 0 R /F23 714 0 R /F39 873 0 R /F48 925 0 R >> /ProcSet [ /PDF /Text ] >> endobj -1194 0 obj << -/Length 3480 -/Filter /FlateDecode ->> -stream -xÚ½Z_sÛ6÷§ðôå䙊!§OiìôÒkœ\¢ÜÍMÛJ¤mN%R)»¾›ûî·‹]P EÉéÌ5S–Àb±~»”¸ŒáŸ¸Lu¤3™]š,‰ÒX¤—«ÍE|ys?\¦™{¢yHõýââÕ[e.³(ÓR_.l[+.ÅÏ3Éè -Vˆgo>ܾ}÷×O¯¯L2[¼ûp{5—i<{ûî§êýðéõû÷¯?]Í…MÅìÍ__\Ü|¢)Ík|ÿîöšF2jN,úéæíͧ›Û77W¿.~¼¸Yôg Ï+b…ùzñó¯ñeÇþñ"ŽTfÓË'xˆ#‘eòrs‘¤*J¥üÈúâóÅßûƒY÷ê”ü’ÔF©L4HRFV1-e!€È$"Ò*Iz)K1%eO…R^嫇rþKËu9>r–ErðÂÔæžhbsl.â$’&QÃÝUKr÷í]³£NW¶]UßÓCS¯Ÿ¯„3¸M%âÙuCãuÓQgß–ÑѱXàO¤­H^]@uFvž -¹/ö›í щXD©H^ؼ§šØ}(<%Y:Ú~ñP‚4”žmóî¡Î7üÔÜQÛùiæúfÖ]‰Ù÷Ûr÷XîˆÒŽÞ+ò._æ-?u µOeM½ªn»Ý•íW]Y ‰Š†·ð/UÝŠh$Õ¹L"›é$!¢,M¥;×®.Vt«ÈU±äChÉTK"¾ÀJñîn¤í¶\Uxú²ø–• -ÏæV.ïòýºëuÏm¡²Pæ*´È ïò-Æ·¬b¤âRƒ ý¯ £ÌZ;íæýŠópIò˜!wJÀ2I–vö -M - ŒÎ&Jô;a*ZÃjFÉó¦R6•ž -wÜ”›¶Ë» -lzÕž²¥#•ªä<=Õ›#+•˜!Îf¤›Á'´l;?ím&½ÁààÓ®E}8\³{¦þ¾Íïù½Ãy†7«©-¯:PÝ$¤º–T¤²žØÃÀ0þœ>Ç -l- Õ9â[i'Æ*p4…Ri .¥/èË茺0n·­Š:b³ŒGÝ×Óï¸ՙì»ð®1ô¨–=ªñžÑÕîÔôÚU×ò¢»+‹­Ê–Þ]3E ÅH§8á<˜[spãJLJíúLJÉOÀ—(›y£Eš•Hé4CÕzÌw¯vûúéÈB%0Zia³Àëʘ-*U᥹gŠè †æ‚F–ÏLI‚¸ßå¦éòŽæžòš{Î\ m˺ ª¶º¯óu;œfHf.Õ5bwОÝÁA½Í÷÷èNò…}÷Ì ŒÔT€0µ}‰Çê«›ºœŠSÀBœú—ŠªÍ—kòÆ»ƒÂŽf/df95Q?°nô‹”ÆoIo…³OÕzM½¥MìÊš® –‘´ÿBˆ;¯á‚Tœ gbð…Ox4è(^‡–%µî"Áû=‚Ò€˜Ý6Ϲ;=¤ŒctÇÊ;¢iÁÉ¢šðD¨J¸dNÍoåóSã¶vV!¼Áx -Å2Á»vÖÜÍ€Ô‰é;Z™%@"i!"(Ge½Z7¬Ïàgkv¾Í~¹fGüuhOúË4£8ê¼Ã ©N{̞ʦrµßµpg§‚«0QƒC?ËAO5ÁÂÀHŽ5évi\áÉ©5´ÅŒÇŽ"õœâ+ôæ¿îKXaW•ýyt–û»Ä=ÖÝú™†è™%DCÇ’G”fÍÈOŒÀ­ ¶¿n†—Üž·"6`{ï.¨¶¿ª)‡‘F©pó¶Ñ9ž žj­ìKP m$¬z!E ©Î¨¶§r°çEà(¬¤Öœg¡§šàa ÛÂF@Ù ‚à)h€¾#vÌ:Š=4p;=4Ê|»…€Æ-„ˆî†ZN²€|œdD·.ÉÒ};ºæ -Œ:‰Ó©,Kibb -&I”¦YîuJH_"‹o!J&ùØ0u€(ZÐÅDG§‡¨ô?€ã•1’¢óÅMx7Õ ú_Zš <sT±'è°sA…×K@ƒCS#g±b“³M5w#‹;¸²C£(ÛÕ®Zb¤²R*nš^&ë"Ò .Òäîþ’:Ÿåíéçá ÇÊ{¼.òÿ\5µ¯ˆÉH€ØíOYIÎ?ÜâÈŒzª—89Zí¬÷HÒ$Rè•Îzê´÷è©RkvÝxS^BØùM=ÑĦï`=Ø”½…}¹þøjñæ#=8V xe¿Y’Cð t^Â"&l‰ÔÄpˆ5·¬™õ¨Æ:ŒÜ^ß~¦WgwͪYó^»üÇPgWˆØlÒ«¾KÔ£´ ˆ&†•ÛÎR…qIɾzgfÍÖë—ù±M^Õ1à Z9_ã3AÀ·¾Þ÷V«ãØ(“È`áøìö=ÕÄþCÜ—E”fÈ€Óv‘!"Ú;•[ñ3úJlÁÿ’*nŸiå‹í’ )Gt#ž¢_3LÓ$ ÜŒC…Ãv»«6ù®Zóp]–…_Õivà‚>ß¼aÜá=9䇤ͶÜå¨Ì­Ëä¬Ý¯Ðx@=Zj»ùõÀœê6w¾•>˼EBx†`V­èa¿-rJ‹bF ±KfK&þ7$A-šcš±Q9Ê-/ìÈ1Ì· -M6êb/R  †^§ ÐÇd(žÀˆ ç;冞ž*wXAé5‘×É z -/’£gÊå+Ú¾bF|›{p[”¨Š‡[|ÝW;ra£}&ŽÌ6làbóŠ{™$¤ d™&ˆÌÐÀÛÃÙ%&!ž´üý!ß·Ë^•á:œñ®Á!mã³ =øF {Ì×{Þiè¨Ä@˜°©¯ÅÀý¼"»:6J_4àÛ#i”%I:TYì2£{•Iæ¥= -%Dˆî[q:Š—{»žóŸO~DÁ´ ãÔ]ÚÈ*é9;ò;£c˜ ˆOeú»uùo.…ƒnéÂÑàz.ö¤Ž¬Çd²´ghUWyÇ»jj¼¥û=i ®›œ˜o‡xâʳ»n¿eo^m|¨‹!–;åRAá?Fñûe ²/k^œˆpÓÓù?¤s`¡ -¦!Õé ÐS9˜³+ïÊÝ®,æ÷¨‰GQ@",Tç÷ï©&F¥Jë!TÖc“ɼAZ5[W-eÓ@Ö=oKꡆ¿& `è5üÇÊlU_Õ’\ÕR³rƒU­Âj9n0uOV ƒ®Vcå—¼(ØŸ‚Û2eFÐÕÈkWâgŸä¾àSºÚ¯í<[É©ûâT^>D o°±Þyu9G@ÒréFß~¸½AñœT3 .ÄŠì¬RV³žÊÙ|Ót`ñëòÞÙÙÜ}˜+[G¼þy.zª 6Ê–b!õÅ¢†æ€üEEY,.‰YÍÊ°*7”öÁ¸‹¹/aȸ¬x‘ÅO×-‘£ˆ»fKÃëò±\óë bÚ–£§e_oP°òoŒŠ´P#}r1~ "s¯SÛPÝÊßWë}Á÷6õAÐDYf2· UZ©åÁ­|¨ˆzv@ð]½W«2ºgµýEÊäúÿr} »?]ArÿÑà—Ïøwä:qèý—Ï7_Þc¯×ÔQLŒÑ³ƒ€T €{ hç?îÀ3­ŒÍ¨n1¥î¥^l´‚k¾)Êo¾ãîú±ïîÛ¾»ì¹ßøÇÿ~Ç.a¸5Zšœ²7‘¨(Î’²×ê´½õTÁ'ƒy¾¾ov 6›öÈÚ%:NÏóÐSM01üj -8%vÈÅ5q©cL‰—ƒ£§×n2`Ø͹Œ­Ó XB¤|ziE,¡J¦bö¼§wØ:l|c»žÂ,XéH29ü3ç8£·¤þ¬F9W2eXùAè¬æCoM}r¸iÚqÍvå€ÏCûôs»]W¸Ø)%‹!EñckHuFÉ<•“JÝB„›¯›æ·¼­Š‰óÆ™=ÏAO5ÁÂ@ÅT<1äáŸX5Ö2¨_d¢!áTýEN°|\˜ÑÖW­¹ò¤-mÃJgºWž9è융%çŒ-¤Ž³5„–®ÜÕT ÐÙlSvMÁk5ýR¬¡ÂBÔRÒŽ «O Ú -§‘ÚWvø“×}r.qy:."ÅüŸØз.ã‹+åÄ,Ä`.Ü¥-Lu%í 1x‹âõC“œÈÄÜ'ÝÄ›p¢ ”۲úð§u£†þá 4^è¿Ÿ¸ä%õÉK°cÅÙ5 ÒªÔç{å¬Cqëò®£!^Ã}Q¤Î¾¦j;âTÞ±OCD’D±´£ìËÓÏózõ@25ý—RÍ_J —ýýM®VÓö®.ÈŒ/$ðèÙ5E_*Ì©-Q¶%Ïî·áÖŒŒ‰*V¦Šµb•×§~ù¨Ò®8aûð?ëÄŸþUäá'£‰”µ'~Ý#A9 ‹0Sx‰>öœˆ1µœ`ýÛŠŒlendstream +1234 0 obj << +/Length 3618 +/Filter /FlateDecode +>> +stream +xÚ½Z_sÛ¸÷§Ðô¥ô4¢ €$€¹§\ìä|½8i¬t¦sw”H[œH¤"’vÒN¿{w±DR”ÜéÍÔ› °À‹ýó[€lÁ/›%i˜j®gRÇa±d¶Ú^D³Gh{wÁ,ÍÜÍûT?..®Þ +9Ó¡Ny:[<ôÆRa¤›-ò_ƒ4äá%Œo>ܽ½}÷ùÓëK‹Ûw—sžDÁÛÛ_n¨ôîÓë÷ï_ºœ3•°àÍO¯?.n>QSjÇøñöîšj4=N úéæíͧ›»77—¿/~¾¸Yøµô×Ë" ùzñëïÑ,‡eÿ|…B«dö /QÈ´æ³íEœˆ0‰…p5›‹û‹¿ù{­¦ë¤üXr‘ò rÑ ba¢u2“‰SM(Àv]Àšâ4¨²­-ÕôôMÍ:Û_29½)¾Sá¹Ül°$}) – +åêmÌz¬™äa’* F¦«MYTíå<¢ Ù«ò¡Ä±ñu—í[`0wÆe¨³ýÿ2ÁB…±¿…Îóz›•ÕÄXiÊDÄ–¶^D:ø«Ý?—Mñ +{ÌæBÆ¡Ô„ÊX¨“„¤%„“–ÒH k|S_ZH`¤… $#,MË(…=Ž LóÚg¬€„².¾Q!/˶™’OC6÷´€t(”ü%”¤:¸­hòÛºiie«¬)šWPN¤Y> Ôç9qÆ †ˆ‘N0çaš0·’f]wÔ;¥QlðTV1¡¢)öOÅþrÆùç†ªìš 2€éq­ƒzOUYEdµÛnz­êj^|+›Ö¨%6Ýò0”6å—‚ÃMÏ.ˆÜÐoœÇc_ dȤJg’‹P¦©úoœ%WjÚÌÝ€óþˆÇf®¡w*ã_·ß—Œ1ØÌcÍà°GŠ;Õ8»9à:¤L”%Åe£ý°(¸} ×ø½î¨`€^º¦¬­¾¿Ÿ/îoß½¢×v]6TzÊöe¶ÜØÛµ KK[“¿E¯Š<<òº,”Œ¥³T‹P ˜ö’D4ïS‘ôØD”ñTkY£ G¬Y¤`XùoO5Á|`ÅLw5â¾0ê®ep]> LQ Åü§b³ÙuÖÊzd é㤡jikZ×Û 6¶5Õ=U±ÏÚ‚j~^ÏÕPé¹l×DC®»qÜh[µröÏÃHk14ø3W ¼Inl£#=v (¹$Â-þzó ­„àÀ¸:¸+˜¤ãúu#7Ò*¨%_«qP22–Må¶Æ ±ë–›re;T¹­Ü—O$:¨µ¢‚Òƒ!xn# &Ô'5r ‡MaõÞ¸c VÑŸëýo.yI[²jë½³`28ÛÜ1–œ; ³‘^¼3확§;S¨Zû±qŒÓv'tñH¾`w=ª3vç¨ NÈVëbNÒ3×:äƒSÌÑóqôä2Cî ïšÜóÁ„ZÑ´~‹êj3Ø™ëÚʬn÷;#;Pð4â/ù¬ÕÙ9*ãÆ»íî„èXHÅ/0÷T܇ÂKÃX'#ö ‡vY»vh)=FKv†O´—,XÛ²ÓF¤Á¥4£~yÖfˬ±oh»b­ ‹Rʪi÷—*èV-±Q^[®:· ì±Mét]öU¾²– ³Ê—Ó†'Çø²½RÜkb>¶Ù¼xȺMëuo+¢[aZZ(ß|¼Ë€jžªiÐXÊ? @üˆóþF#³ †‰µ>pv +N +,f¡Šó;a*I +ÙÄšó¦Ò§:m*ž +9n‹mÓf-À¿rÕœ²‘†1ñÙYxª‰i l–,D,‡ó°!+êÙ ¾™|L9ý€‚³™^%ë…9ˆ û²5áÊ°8Œ¦Ü5Ù£íwX°§¶Ì*znAu㈑ê*R]ÔŠ„cÚÓçH€­é¾:‡vW¦²0Iõ,ì”ÂVIú’Âô¨Î(Œ£BŽ»2?¡&J‡`?â#È +¥cI½ú­ö¤JKWšØ•¸Ê­l$ ¹JF0Y…‡)Q˜lÝ@0|Ã¥AA¸3¨Zô$ø¼­Ÿ0qœÇ’wukÛÌž ’Gd¹xèFû1-8ž„’3G„ª„CfôØ 0Y«`Î`…°2±G‚)J,°&̤j—Cc?2 €%ñâ²¾`<®(ªÕ¦¶ú|H.òºó©õ×ÐœôšqŒØB‰ó^³OuÚkz*ŠU·ÇŒñTˆe2Œ"pëggà©&¦0<1é(™ ç`]AÒ±ðfÔžY`ëŽ"qœ¢,”-,´í +a_¾¼FÒ?I½Víæ;UÙ4$DUÍ’GŒèðn°å#ˆkBní¶Û‚Lû<qY‰sœ:wyÀ¶~«¦98>ý¿ÀÛðÜœ ¢¦©P/‚`“—T»GuFµ•?/ÂG<ÙI”M¯b'ò¸Ø{Q4·Ë†¦DIÅ ]ŒÓâô›žšO +pFJLÑù"ËMŒX°­ç 쌦|pY wÂÆÓ(ŒÄÈ@¬Øf֦ꇑÅ\Ùá,#/šÕ¾\öÅHe9ÀÎ~fBjLVLúOûÇ>õ”×ÓÏûŽ•÷x\œÿ=,¸¬+w‡‚ÍH%Y‹t0£##òT/Íãh´³¾CÄ*ÔJÎûŽ>Õißá© N«éÆ«ÏT‚…vž©#š`:ðÀðצÖW¨àóõÇ«Å›ôb¦%@+ÝvIîÀ¥P8ø…ˆ°!Rs(†UVo‹òÉâ2i”AȾöúZ”ÝÖ«zcyí3R¼B¼¦b¯ø ì0%½X"­j« •÷'x2¨wN»Tàê𚃢/æ7€@s2éÎùzgæ@bÏü~€·”<"ð—Òµ’<±ÍÜ7Q%@‚ÊÍÓ¬+ ûÁÔÕ®G\ _ÕÛmW•+:ˆv‘~hý›z™Ù!Aô'5œãí±zéú¤OuZÃ=Õá*sžOåê82ò8”)¨åYöžj‚ÿõéP‚Ò '`´iÄCQ¹•}GO‰O𾤊»ïTòÅçÒR†hj…³Ÿ¤q¨¸† +‡ÏݾÜfûrc««¢ÈݨFã°tóÆ¢>èL}½ÃPfsóÊxÐt«5¨GCOsKbJ`NU“ÏÚÐE¨µHðÿx/€—øÒíòŒ’¢Èâ…Ȥ²…%þ'¤@ šc¢­QÊX¸{üù”B›È‹TÌ…B†×(”1J"ãD˜'PÃèÝ_§˜·çuiË(¹Æ*ò:xeƒoý´±3±GXľ´qÏÌMÙ¢DEÔqŸÅ׮ܓ ñ,™÷mXÂÆf¥-`âÒÝ+É^\†òw[—˜‚8ÒâÛ:ëšÖä®BÚ³8é\ƒ<ÂÙÒå"@{ðoW7å4 sD,!L(wí~ûse?A˜€9*Œcwd`w4–%¡†„k( ð™Ñ¾òX;i@‰‚@¢}E5tÅkʼMÉß×ÛÏ5“Ÿp®B%FŸPôüÎh2 â!€[›}1  ŽÐ{Þ‘2È4c¥éPï˪lKçxWu…»ôØ‘fQ¥½jDÏÞ/áL¹Íöm·³Þ¼t—x$’;­÷¶‰=Ãźe²§o0«3DÈôtöÏ£86î|èQ ŽÊÀœ}ñPì÷E>DM<ŠA¡8ÏßSML`üµ »t8:Çæc“Ñþ¢WüÄÞï¶ßwöú5ü5Ðw$BdH9]øÑ9+C9çEk8ú>ÈëÙA½»u¯VEøhÕ¿<º¾Áÿöt ‹¿\Bjÿ÷Qåç{óqÖÐubÕûÏ÷7ŸßcÉkê(&FxåÆLª^„hèK¼™CÐTø¹ÀðØbJM'/7Á<þ”úÁ7O¾Ø5¾¸ðÙmÝë¿°>aŠ55N}‘*’?#Ptø³#üá¯UŸòÂì„R',†KüX±“™Ç鱫°ŸµOý?rbî´endstream endobj -1193 0 obj << +1233 0 obj << /Type /Page -/Contents 1194 0 R -/Resources 1192 0 R +/Contents 1234 0 R +/Resources 1232 0 R /MediaBox [0 0 595.2756 841.8898] -/Parent 1182 0 R -/Annots [ 1196 0 R ] +/Parent 1222 0 R +/Annots [ 1236 0 R ] >> endobj -1196 0 obj << +1236 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] -/Rect [222.5592 483.1171 296.2125 492.5267] +/Rect [222.5592 378.1793 286.2499 387.5889] /Subtype /Link /A << /S /GoTo /D (statsfile) >> >> endobj -1195 0 obj << -/D [1193 0 R /XYZ 56.6929 794.5015 null] +1235 0 obj << +/D [1233 0 R /XYZ 56.6929 794.5015 null] >> endobj -1192 0 obj << -/Font << /F37 747 0 R /F21 658 0 R /F23 682 0 R /F39 863 0 R >> +1232 0 obj << +/Font << /F37 779 0 R /F23 714 0 R /F41 910 0 R /F21 690 0 R >> /ProcSet [ /PDF /Text ] >> endobj -1200 0 obj << -/Length 3419 -/Filter /FlateDecode ->> -stream -xÚÍZÝsã6Ï_á·*3+UüHÍ=¥m¶—^7{ͦw×iû Ør¬[[r-;iî¯?€õaËvÚÛ™Ûñƒ $Aø %&1üÄÄ&Q¬2=1™Ž’X$“éê"ž/—Bˆô¡­næÔÌý&øæûËLÿ —Í¥°A1­ÝsFœ~Þ†Xrvûáo×?ýKœÄM¹*—ùfùÂÓ×1LðœsÿáØŠ&˜ÕEs -<PL(D”%‰t»tâ¹yÜñß5ŖȲ¡ç¬(VÅŒhŸ/Êé‚H”–(§BxÂyQOÎSTõ‡Û™;\z'#y¬Ü¡À{^1áík†Gî4 ;—Ë%Qu…†ŒT>ë-ÓUó\lz)çô„™+X¶ß.6wÛÇ“™_(d,YU Ï -8&|½Yå,3YѬӲ®HŸL@Ç©ò%ÈÍ×ë¥;n°Ò _.ëç²zÄ7Ìñ€±¹¬úé½Ïù94>øN§.t¬ÐhÜ;÷¾Íí—8–¨kdœÕ«¼¬ˆ&óB6?Í®š,@ÎZé{Ö>&lœ3‡u‡*LI[¾çƒÉlšx3b]ÖõǼ)gÅÈœ€IlÀîÑC˜|º-ŸŠhd©P^¨Ák•Š„àè‡K¤‘€ã‹cˆ{u½,òŠ&{¿ÆƒlŽAUŠªˆ³ÓHÕc:TžÉÙÆn»«ßù˜öñ tjRØÿ©µ[¦ÃÅ1Ìhk«: ð©ä¹º’‚½EÅÖÅŽÃÑI$µ<èêjl^Ë ³<”[ŠS¥‰KˆnL»@„‹Õ5Üþë›÷ï®nnûá®YÃy X<Ì[ÎQÓÂl›'ç´šóe¡E$5C üµšÞ|ù…ßàë ,‚œL2„ˆA~‰ý³bžï–n¨åö´.‹MÒ×£Ô_¼¶],†Eü3§Çt‘W-9w -©WÔÃéPÖ šºtß_êÏÑÆxÙ5°p"PÓ ëR'£c;ĺz9kó"šz¾}æéÞP­…5 ªb?‰è2mÛ1¢5Ì߬U¯0WË”a…Ž´N|®¸«–EÃfóE¸"bXJ}1¬‡ XßÞ;««W«ÖJ—eU ½Î—È™7ÅG·A R:– dµym`ÿJÞ“6ßç:nó-—ÃÀ2_îÖÆêÎ ÕÉu[®‘…‡á1‹,Öüƒ•Õ3H½>j`äq[d|žqÜ殑l#ß6Ô—S¡“ÿ©«Â·5Ô„I¾û¦s¡yV;Hõƒ™wUÁœk#ÌA(¬7~jjF]c¤™ÎвªœÐdCàC U’ %~ÄDÉJo‚Ø:Åä W1$ið@+î[êðã^è "Α}`Jc 1z,+ðyWõO—¸.0!Ūp'‡cà˜…]‹¼¡Éf¥›”à”UmÇn/ -æ™nÆ ^b%!zÈFÚu-/k¦œ*û¯«)¬±á{™>vã0ußBDVÑ4=p•ütĊ¢â9]«åýPFÕ@béÜ_¸ÌjÎ7ôZ»‘*|ZvPp¡#´n¿(òÍöÌ3ô3!¯Šl¢½o0RÉ`Q¯‹ùŽ^xí6ò¥‡6ˆ‰)ìÓwÈ,YvXK8ÅàK³[¯9–7…Ï·3 ù¶Ùé¦^ù(?ßR_”#Í.âRÊÞaÐ-TÏ P1çåîúÊçåÇÐU¦*2ÆžOËE['¡4 ÔQ -á‹¡—’°±Òp+ÕÖ*÷Ö(fuæi›õd–óhD„¥S14¹žÃ€ .Ð0€ˆ)£NÛhýTÏ#’È$‚´2éÙÈ覬j3sw@#AúžÆÞ>11(Vào®dq+«Š >EÜÈ–žõaAÈŠ‡0¥S¼ïÛѦœäËú¡u¾è?C1¯8•Úáyðé‹ÏJIúÖ‡"Ø„1Æ ÎÙÄ]ÛÂc•7[W2èC‹Ì×Øý)ÚÒÕú‹5juT½Ûf¾}óö'¢ÉÛ ó8LD^?O·Ì2bOÝÃ'¼pd7¢›Å0Õq‹Üâ׋B•¢/–NÚ”Ï ÖBêbi‰.tµ[=xV—©Ót+û£dD¢(„+õSÉHŸRöä8uK›±ˆAjq·á\>økºÉðbýB´O¼:ëø:<Óõ…R/¬*ˆMmÑâ“G5Ĩ¶öHGÞôËâýíô²Hàƒ,ã&ç˜ÕðJ d£,¦^.};š×‹LDÊ´igUoQ #^G"MÏb…JŒ¿D Χ³H&Úì¡m«àíÖmÝ­Fê|,@9MÀïJRÑž+´¸úžÍv÷Л&쀃9½"Mè&ìE¸½Ôü¸[æ<ê)u'&TŽ¿¦'ÞÙ#ó‚‰ÓáعÏyÍ[rjpï ýÙú€ ›w¤¸8¦’©gÞ©9(¤‘†—?”Zè(Ž½%¿¯Ë®ž‡uJ^/ŸÍJö \½¦'"ú#wŠÛÉ!õ-½mTá;Mõ°ø-T^ˆ.2ë›<7¸¬—õ*tÌE 9ÖŒ[_èI×b#—RÆ@­­Ï{F6«}já³n˜˜)ÜuCd Ü@¯ÀªòG¼Ù[=Ž”Õé`uŽÊ¦‘ÉT:4šuÞ4€;c¾–DRµ™—PÇ­\Ztr鸕‹z(‹Öñ~ºç: ¿u—Æa#1µFL lÀc{…1Q’´!xCqØáFv.ú;Ù¡ŒØÖý튆l¦0†«5¾r3’ŽŽn_ž¹°Œ¸›Òø—u›ü½ÊÝÂvа8êïMwiv¨Ü$‰¬Í|VzÂHt¤”2C#ÁiÿÝþ_3+¼/l÷͸ûºZ.+„Ä0 µ– ¡^õÕ€2 -¼Ùé5ðçFyAzà{TÃ\LúéÂvS¡”À‰÷,ã—Ë$˜GJ(L´6ƒJÞU@õÌ%m:9­i E†¢%áF™®Òúçˆ) ßßÁÿ¦Ô¿Fwnû)ƒ*雓Ã[¬NÏÿHÌÒ“w†BxûßK‡ñïHŸñŠ)´1”¾0CˆuO5®¿N°O«¾Oj§‚°ÔÆžÑL… Ö'®ÚðŸ¤.¥k5Ô)‡*«/Æç¬-H~d&ÓsÚ²&²&“§3‡¡ÂFŒë¤Âz’|ÆÞ) ”×Ê$çfüêFœIÎšØ wìKò9[XŠ‰Ÿ<‡g"UÐh³3QýˆÂ^_}A>g}Av¤¥çô•È"¥égÓ^m'³'ЧÒ[÷äÿ#A™‰€#‰ ˆ¦jðÿÎÁÿþSX,62Ý~¯’t7ØÐK̨£)W»%ÿ_$ý-$rÕM½,ÜYC3}bmÏqÐ8ØxóÃ×w—¼þä¿ËíË“Ù±O‘œ)Õûêˆ'ga赟)wßpkpk|Sªâ4²ôÏB¡jµ9@ÿ=ó¡èÿbÃL¹endstream +1240 0 obj << +/Length 3599 +/Filter /FlateDecode +>> +stream +xÚÍZ_sã¶÷§Ð[ä™# € NŸ.w¾ôÒœ/½s›f’<Ðm±'‘ŠHÙq?}w± ˆ¤(ù®ig2~Ð\‹ÅîoÿÐr&àOÎl‹$׳,×q*d:[l.ÄìÞ}s!™'òLQŸë뛋?½I²YçF™ÙÍ]o- kåìfùÓüÕ_^~sõá2R©˜›ø2J˜ýöú5äôóêýõ›·ßüýÃËËLÏoÞ¾¿¦áWo®>\]¿ººŒ¤M%ÌW¼Â‰ oÞ~wEÔ7^¾{÷òÃå/7ß^\Ý„³ôÏ+E‚ùõâ§_Äl ÇþöBÄInÓÙ#<ˆX湚m.tšÄ©N?²¾øxñ·°`ï­›:¥?Ú8UÚÌ¢TÅV¨i%‹X¤ ´(Ó26y~P²’SJö\¨äeÕ·ë2*Ö÷Í®êV›v|n™ Ø9›õ?Á3MˆôDYgÖ&C^“  }£çÝÊɼݖ‹êg!T¹¤7¯¯?~¼zE/{âºwEÇ¿õ’nËuóøÜŠu±)Á*°wûuWExöYdÒØj;’2ÎÓT9!· ¼éTšXêÕpZ™#X«T@SÚ®èÊMYw-_±»”v^òÃQ.QD)æïëõÓ‰€Ø4mGT8Û‚ž«õš¨[¿Øv»®p±±]³õÀuÄ65ú¼‰õ¹N›XàrZ©Û¶\Dë¦ùT´Õ²<20“Àâ&9/Aàša`b $ÉÌP†VewnçmÙ½˜¸HmbðÇp‘"¯QÄ‘Š&lݵ5ÀÛÒ>luvþP¬«eÑ5;z|» ª`‰ŠuWîj0|Ì盲[5K^¤ k°m˜Å*Qvhœ¸LOD†^ò׫‘6s²¥Eã~—-1 «à¯ÐÍ–Ø›;æ Ÿ75z‡¶‚Õ×{×ߥ-Œ'ÅqvÁÞ¬e³)*^¨ïŒx2áODà‹¦®½óêd¾,Ëm Ö~|uÆÄBJóùW—…H“ó„¸~ÊÈÑß±nv›bMƒ´*Ñ|¡USߪhéź¼ëhˆ×ÐóO%Ÿc_w»K;ß·]¹ä‘‰îTëX(ˆƒ;õüQQ/V¤ÓŒÝš´ËªÝnKnrpµ†¶ÇD:æ÷̱¼þî2WóÐØÐ`Nm‰º-ùí~ÛßÚ€{1SÅÆT±U,ÀÜ÷L§de–‚K)çÎþäüí ›}FjÖmO˜m6ÿY¤¢­6պحŸxùfä¿ñó?žÖÓ²)[XSNYsl/€KQ>Y1úƒ‘o\pBo†ø}°ŸÓ.1ÑPÙ3Þã:áž«çT4ÇÛ2z¿;Æq›Å¹†gÅ\r p×i7\îJ„þD਩£ò·ª;.+¡ŒWi~^†À5!Äð¼®Á¡†Rܬ|æÖl¹ ÀÚÛ©„;ö7Pñ«CûÊ ZwCdYsÞ.Våâ<¹¸æî¶Ü4»'b¨ýä7çÕQ ®Y i#êf€àFª¡Iqó 2›†ÝzÔY蟇’× °@z[î@¬Íxž¼=mrŸL>g=®3öà¹\4+7ØJ©Ú®Z·° ºÏs£Ïo¸&öÂ>(2˲¡?`;Ð +ÑOêpSH÷sÏ.ý\i")ÆÚÑ”s„”ÞÝ>MྶC(ï>âÕ&â?¢ahY¸r6`£I…âÄÆ´¢D“Ð +y€Š“$c(ŸÂ +kúŒq_¯Ë–Íæ«hCÄ° újX ûv={?X]³Ù+]Wu9ô:_ gÑ–C œ<8ÑB}AÈ>ió‰11@œµù>×i›\Ôn,ÖPÔK@ª³û®‰‡á1-v§;Ÿªjúü¨‘KŠPä|ŸB„ÜÁ ’m®C*\S”^`ʵ4„I>ûò¦saxÙ8Hõ“™wµÁWH˜ƒPXoýÒ4ŒºÆH³,¡9dM 8a–=€/%JÒ-ñ&JVyÄQì„8ÂÕ ©™ßÒŽûûUG/ü|l‚á/ˆx‡,ÜßÅ9ÝW5ø¼«}€ç¸.0!Ūp'‡kà˜…¯\ã +[VnyP‚SVÝMujJæYt cP5±¿’=d#íº‘§-SÔx’pþ¦^À;îÎôð0³÷""°2ˆÐôÀUñ¯3$V®Ækº2 v+¦ú1-$–ÎýÕ·ÙAåù‚·!R¥OËŽÊ.€3Ü~U»îÌ3ò+M!oÛT{ß`¤RóU³-ïö”ðÂãr¿ã¯<´¡@L,àœ.¸CfɲÃ^Ò)Úýv˱¼-}¾[È·³H·ÍÆGù»†ž'Ðì".¥ì]õ¢zÉŸ'nü‡¼üº*“ÄYfŸOËe[g‘ÂÏGIâ¾7P6ùe&¶yø2ã¡r´D1«sHCÖ“[ΣÖNÅ0ä +eø$p†lB”ÔÆÚ„hýP•’¨4–¦=™<”MBfî.hb!HßÈŽ>0½ {ò²ú âsPătôÛ<ðWaJüŽÛ÷¢íèÐýº¹ .Ðògéì3î#1vx|ûRà]%jxû®5lSÆ C€r8gS×¼…ŸMÑv® e&Ї–¹¯±ûK„ÒÕúö:ªÙwƒ•¯ßß¼}ó#Ñä‚¿îË–y&"¯_ç°Íºx`Oá¶Ù¨¿-rçˆ_{, +ƒ¾XÝß;i ߬ãbi….t½ßÜzV—©Ór+û³dD¢(‡¯[„ô†²'Ç ¨XÚNE R‹ë‰>g†¢&˜ oÖ/TAûÔæÕùï€G`º¾Pꥀu ±)->yôM­!F…JØ# ]yÛ/‹ÇÇée‘þÂY*ÆMÎ1ëac d£,¦Y¯};™×Ë\ÆIÒκéP ^"bi̳X‘¤™o"ˆE'×Óy¬RÐ6‡]°½ùD×û›2>@Á×”Óüb¯ÄÈp¯0B?!FuûÛÃ, ¹&e¬éiþ’ ö"Üh ßï×ÏúY)} *ÇßÐ/vyÁÄihêÞïxÏ[²ÉæàÞ;úä`ü7 ¨ÿŽÇôB2õÈ'ÍN +%U¬áá‹R  á-¡üm[êyاâýŠå²bß0«!sˆ†þÈ×mð?tÔ”÷‹4mTá;Mõlã T^ˆ.*ï›<¸¬—õ&蘫 +r¬%>Ñ/µÅ&šRY+£Ÿ÷ŒlVûÔÂgÝ°0]Rxê–ÈÜ +¿»·mqÍ©ÝEœXm»slL¬‰³<1£)ÚpgÊ×ð~Èl¼„Z¹´<È¥E‹ÞP­Å8Ýs/ ¿õ!ÃAb +FL lÀSg…9qš†¼ƒ©8íø G'—ýÉüXF;|üÇ¢á ›Ìáj;PnEÒÑÉÉÁ1ñá‘ KqÂÝmãÔ†äï³Ü- +“†ÅÑÁñ^šfÇÊMÓØÚÜg¥gŒDÇI’dC#Áeÿ¾Úð?µÇ‰û‘f\¿n Ö£f…Tp‘ é£4ösþ¿-É •ØÙéÿÛ7Ë Òß“Ð<k1ég —ŠÂ¡`I…ŸẢ&‡Â2É­ƒÿÏe‡•<ý£ÕÒ%m:=¯éDÈ„ )BK:Á%³$;â:@Zÿ^‘ãDÀ÷Oðû´‚ú×2ÓÿE qêÿÊLÎö ¥ôö?J‡ñó +¤ÏØbŠ¬€ÒVˆ°.⥦õG‚¥pýY›T&Ϩ/WC²üL§ ?$2º  ƒÎxÚ¤®zBüU•™ØäF>£*¨\•åüädÖ0ÔÖ„aÓVOŽ?°¶Œû²˜?£-cáLYúLäÖ¸Îø¡“ã , P­¬”˜¸Æ‰Èò©6·}¤ßýßÚ‡e×ä‚öÄÇ¡D`›<ÏfIklU¡†tv¤Ž³u`ë ÿq¿Qendstream endobj -1199 0 obj << +1239 0 obj << /Type /Page -/Contents 1200 0 R -/Resources 1198 0 R +/Contents 1240 0 R +/Resources 1238 0 R /MediaBox [0 0 595.2756 841.8898] -/Parent 1182 0 R +/Parent 1222 0 R >> endobj -1201 0 obj << -/D [1199 0 R /XYZ 85.0394 794.5015 null] +1241 0 obj << +/D [1239 0 R /XYZ 85.0394 794.5015 null] >> endobj 350 0 obj << -/D [1199 0 R /XYZ 85.0394 664.0883 null] +/D [1239 0 R /XYZ 85.0394 556.4918 null] >> endobj -1005 0 obj << -/D [1199 0 R /XYZ 85.0394 639.2266 null] +1045 0 obj << +/D [1239 0 R /XYZ 85.0394 531.6301 null] >> endobj -1202 0 obj << -/D [1199 0 R /XYZ 85.0394 244.467 null] +1242 0 obj << +/D [1239 0 R /XYZ 85.0394 136.8705 null] >> endobj -1203 0 obj << -/D [1199 0 R /XYZ 85.0394 232.5118 null] +1243 0 obj << +/D [1239 0 R /XYZ 85.0394 124.9153 null] >> endobj -1198 0 obj << -/Font << /F37 747 0 R /F23 682 0 R /F21 658 0 R /F48 885 0 R >> +1238 0 obj << +/Font << /F37 779 0 R /F21 690 0 R /F23 714 0 R /F48 925 0 R >> /ProcSet [ /PDF /Text ] >> endobj -1206 0 obj << -/Length 3647 -/Filter /FlateDecode ->> -stream -xÚ­ZÝsÛ6÷_¡·Ð3‹‚çžÒÔɹsq®Ž;7½¶4IYœP¤"RQ|ýíbˆ¤(ù2×ñx´–ÀØß.É þøBÅaœŠt‘¤Q¨W‹|sÅO0öþŠ[ž¥cZ¹~|¸úáLi˜Æ"^<¬séiÍÅïAŠðf`ÁÛwïnßÿzÿæ:‰‚‡Ûw×K¡Xðîö7D½¿óáÛûë%׊oÿþæŸ7÷4Û9~¼½û‰zRú93éýÍ»›û›»·7×>ü|uóà÷2Ü/g7òåê÷?Ù¢€mÿ|ÅB™jµ8@ƒ…<Î`” w‚«?¬+<“Xí÷tø¾Ç®­Ë¾õ‘± nê¶j”~Bÿð.ÒÕ” -# ºÍ¦\ÆŒÏp æ¡ñåÅ¡T¨æ™<ÛweAkôë’¤êÊÝ%v¶ô›õ}¹ÙöÄà:ÍŠ¸Æ»C-Áö8S¥È¨H‘ê`wÍuPvíÞù¨7oÍoÑQgÕÓoQÍ+K¯³¯ö‘úlˆÊÛ¦ëw×:Øç}Õ™ŠˆQ}©À¬°mò]à<Ê_HK7Ù³6æÙö«31Ô¶åÜÎ&krg©« ‡½ëg^ÌVFŠ#4 %Sò¯0;‡R«ä³p]0;Çe̶PA,^æ&‡<1:)C½°¾cšY´U©F `ï+UÇH4Ň4v‘ -º*;d=PšXŒ¦C3«kS€@’~,ú5\¿@¯ãw•å8ßÞ½ùpC¦GAv;Ö°Ss’¤"øZµTÕ£n£OÐMú?Ý}¢dM‘Ù9Œxˆ£àsìÍ!-”Õ‡ì¹ssì*ÊÁp¤lV­­)u“U[šD0S4òÈñ±í×c8¶ÉxÛ dÛ³ú¢Mñ '[å6VmÁC`bFeÌBÅÓËZ<`:¯ÄŽ‰ «Çj²¦ŽB 9ãÅ5Ïéš#L…¹ ã£5g#U’^ ‚ÃJû -†bTʼn½GA׆õ¶H•wnßýFl`¦]ö„#ÞÍâPˆ‚(òȆ:` EëÁˆ¯ÅTÃ3Ü{ŠäwÈ4T"š8ƒÖ$“A¾Îæ³Ná²R¡ˆ£h!1äÆÒ$?4¸{Zq?ô&Ž9|`Ɯ̋r}r%M”- -ùTȸ©ø?œüD/<× 2œÎfQwkŠ(ÆàÂØ .â½0Fx‡ûµÂÛé¨QCîfÊ#ÀQÙÝyN¼ÚWvv£0Lž8)Ââɧ‘œø3…¿åˆK¹ªbäécu1ÂÒmÓWèŒH’²ˆÑ£Ÿ>¾!âƒñ<†4Ô…So„$}Þl~MÝð¸\G ¿ùÉJ§¨xâݲºk—Gï0¹‹éË4ó"m5*‹öi>X î7ŠyL„•—‘Äøïû?Þß¾¿½ÃMíÌN^õãźývÛ’¾âü-­—· V)éÒÙî4G·¹˜Œ)?’±P&fbóº»mŒsU>|j7%0”T!Hƒu{(m~n{2zÒX‘Fd˜ºÆ—W6¸@Óìì¸tlÏw6’^c!óº*ôÌeP>CJÌ{xô§Oû]æÜPb_xá°™,Ñ®ºCäü°J‰@Z’\¶2s•‰S£dtBÐ=\ÞÜpt=U‹|Ãï·ê3sGx:,`fu=)…ŒMaª]Âè¹Yàw=hg}—IÈÔ •üÓyå˜LV[æû]‡žv²l -™ÉÅeÏé²ãO[",©Ž–=•fêûª‡&M0— -ªep[8€ö—=½°I…¯ª•]ß—…ý´û×>£hˆß~"Ž¥ExÄ–q%ÿaKÊm•D—ÄAââÇIíî³…ËøÕ|™dTòc„ôä'YÓŒ,r2²[㜣¹‹Ô`Y30ÚM`¬†Ž‘–EöÐ\n„=~§X`¤oH`غ|x ¦©³â™F>ÓG,C©¬¨ÖÅpnžš‘=Gá>±`ÚÙ°{à&1ºolÌeQyÆŽåEhÌ–áÈñ+ÿŽWÎ!%‡wmoW±®Hà—N}?¶5 ×/í× ôÎ’ÃQ/E9eŒ' ªcô›‘Tôr×Öþ±<[RX³¶ÛÛÞ¦[³ÑÁã &EauÝ…Ž¶ý¼ßº/€>•¥ :];›z.Ò":ýºo&ÝÓaÄ/Í!™Ï}Q*Uˆµ›™ À|¢÷mzü2k©õ™x!?`”N(”>Ò§aÓ~–z*ú¹—£endstream +1246 0 obj << +/Length 3489 +/Filter /FlateDecode +>> +stream +xÚ­]sÛ6òÝ¿Bo•gJ>Ið1Mœ:çê¸sÓkûÀH”Å)Eª"eÅ÷ëo @¤HÉýšŒÃ%°û½Kñƒ|¦“8ÉD6K3kÆõl¹½a³'˜{ÃNä‘¢>Ö77ÿx'ÓYg‰HfëÞ^&fÆðÙãê§y‹øv`ó·ïß-Þÿððæ6UóÇÅÇûÛHh6·ø×AïÞ|øðæá6âFóùÛ¾ù÷ãÝM%no÷ßÒHF ›>ܽ»{¸»{wûËãw7wá.ýûr&ñ"¿Ýüô ›­àÚßÝ°XfFÏŽðÂbžeb¶½QZÆZIéGª›O7߇ {³véÿ‡SÓ,™EÒÄJksùX:‚Á±ä<δ>?5ÊàTÀŽ)܈)‘ÞI é,ÕYœH!­HvyۖϲÐe]Å©V)xusiä8ã§JEœ¥jÖ'ã¯ÝL¦Y¬8ly„¿‘YJÅ,cúf©Ä•rÇ„®\¿Džg/E{‘i=rþ.¦Ôð5½Æ5†ël¨×n•'„gi, ÐÃcÍ…è[ÃÈ*DÆ€ßV,\ļÆI,}Ø+Ëô ì6Ná?Ëçû¦+ÈÔ»MÞT7ûm^|ÿñqñîG‚wû[næͲÖO4V¶~[œ¯i],»bE#Ÿ_œ´û:"”ŽU–xq¯Ê¼:ì&´B—ÒÔ8´xä†xœržÌ’„ÇŠI5ívRÔÇ«­wi O\ç¿QùÛ¡Ø¿œŸÍÐ&Àc]=<`MœÞ¿(ç*6L%Ãã5ðÐhﯚ›¯á™)—e=Ì5»®ljš-êüsem¹=TyG²‚÷nSVó¹mªÂ +†¿½ÿDÝÒbt/;7»øþ2ÿxË9 èÑ?€- ¨2`€Á×X.ž‹=éÀª)œ¢ôö³ïžÈ¦¾,\ŽqP¼&ÜÖáz,+Ü¢[n¢§êPŒe+âD@\»zvÀš8| [Žõo‚§?’s’`’ÎØ“0\&’†ãE°æ¢Lÿ$ fe¤7«Þ£„1ïCÏCK‘×®Yæ‡ÖjœATµÅžd‰ƒ =ó®+¶»Žü =‘T†c#³¡N-"3sëLŠ¶9X`9]6ö¹ji°ìè¹*WõWÞäÏnÉqSÔ-›ºíö·f~X:­ÏüÈW«ùl]î–w9A-x+¼4k|fó|@æ¶.¬†›Üx_Œ_x$é)Wmá¼aîœbîÞaÞ åµ%g“†Tv F'|I"¯Lë²Á,¼ëÏŒÉC»‰þ×ÔE5uÔnݪ9Ö#ûÈl²D]'%`MÐ2°Ÿ4¥(0 æ?VîRJ±”b^çÛ«*N_@uø¼¥·Õ¡ À)YQ>[-Á•Ÿï!Iþð5!¸{ÒTã6[5î u},«í$è©CmÏë:‹zb&r ã¾ìŠMœ3P$7º*Öù¡ê‚R£'2Dð`²WÅrî!À%™§¹R§`“§:f"§5±NYBX$Ÿ/:ZoÝ8.ÓÅ-ÝÖžïPhÑ6±…ל³ß–¹& {zÉéÑíóº%€ØH­š'R ®R$ÏtÂR¢8(«Í¤"`Q/) ~ؤÿK¹ƒbØO\©²w„°â.¨=¼0ÝA9=<­D( ¡ÀtÚå›ð¶k Ø›r»/ÖØnñÒ|¢êõ˜Ø¹LÙ¢IÒKsèžšSë`t¿AnÔ¹»µ_Óû¡-¦ú ”׉ò ‚ݾy†Œšwìo5¤Mjì¿žûÈDcÖpÝôzH—-Ï#YÃ+ër›WÑÞcG«d¬Ș¯Æ C ؈JÓ‹õÛ2H6Mò;Bºé…t¢Ó´f }Ðh×Þ7%t2¨¯ZBq¾V÷<,ìPV­hêê…Æ ¢#`\5©`o»ü¹\Û…™ÆünÓ@6Ž;CŽOµ˜äâ&\Ñ(¹/[w”6RøMˆ,&ø·Cyªåg¦Y?YëBSO¶b•^j0(|·•.`xKyÖe5X§ï+çÇK(¯ë‘&Ž¤TXÚ0>XÿcA» ZyõÆĤvëíåáiû†§ãZz —?;iœŸù¸¼j›èä ΄‡^Gií,‘bP켿›Š°5ÆYr-E4iê;:Ä°È&jãó ÛLuh£ØŽkfÝ—e ÞUôµê6ÊøpØé‰peéÀ m€âO„ºà™ðç +†ù„¤ø²«ÊeÙMP©ÒØ–þ*=m"ÐËQ ä; ?NäYw8‡'¥r)›6•>˜.O4›$V¦¡#uUÌ +"ªV¦WC.7Í$Rÿ#UÒ×þ»Gø¸d#eȃ5¹f§]‚%ïÄP»' 6½NÙ…;JŽßãø@•á¢ÒØTdAŸ zÚÆc°b—gáÄ´mqÐ_‘Zl<™o:ÖRza×É–¹Øû•"œpÜ”Ë Kì°X¿vá’õý|L{ë˜Áážõ}4&»Ì®$ƒòÑk‹„z%°øت®ð2ƲÎî\àrújœQ^ ÓÝa_»%ÔcvÓî“uÖûdm楛-Ýáû#̵d¨mØÜj =ÂË}Þn.¦\œCLR<¹žrõ±.§\«÷“–®‰Ú&·Dí÷|yýø€5qþÐÞ²85:0i½Ø“ñ빋K|~†ßµ3î',7ÅòW3—?ãdø²ÖҀ͙9aØ´žmÑÑêü ûNÝ¢‰ؘ»Õö7'/ð§ŸÅYS>§”>ü"}?eôRºœŸî‚fÿV1Oå€p4àâ2‚ÿÃøLJÅûÅ=ÆhzÏÝæe7<¬=ìv é+îßÐy˦Æ. •^BzÛ=Ë®"“ UI2qÊtŽõØÖ~îÀaã|—OÏ?5Û +êdóMs,\•îFrZi-ˆ@K2l]áÇ+\àÕÞìttâx€ç¤ÏXˆ¼)WôLÝ%ÔI©ýþôé°Ï½JÝ/œ¶›¥Æw×aŠœŽQ+€cT’ëÁ·ÜŠ2õj”8Ãýã­£í¨g”â~¸SŸ‰ù§ô´ßÀÌ«ê¬!24…³PíËÆ€mÍI‰f_ú¥Ô1¦Ï.‚Í^ýùÞïý‰åé÷§ +]f.ôKøé‰BÞ(3ö®PäÉDLþÂAºendstream endobj -1205 0 obj << +1245 0 obj << /Type /Page -/Contents 1206 0 R -/Resources 1204 0 R +/Contents 1246 0 R +/Resources 1244 0 R /MediaBox [0 0 595.2756 841.8898] -/Parent 1182 0 R -/Annots [ 1208 0 R ] +/Parent 1222 0 R +/Annots [ 1248 0 R ] >> endobj -1208 0 obj << +1248 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] -/Rect [154.2681 344.7581 203.5396 356.8178] +/Rect [154.2681 239.2989 203.5396 251.3585] /Subtype /Link /A << /S /GoTo /D (notify) >> >> endobj -1207 0 obj << -/D [1205 0 R /XYZ 56.6929 794.5015 null] +1247 0 obj << +/D [1245 0 R /XYZ 56.6929 794.5015 null] >> endobj -1204 0 obj << -/Font << /F37 747 0 R /F23 682 0 R /F21 658 0 R /F48 885 0 R /F47 879 0 R >> +1244 0 obj << +/Font << /F37 779 0 R /F21 690 0 R /F23 714 0 R /F48 925 0 R /F39 873 0 R >> /ProcSet [ /PDF /Text ] >> endobj -1211 0 obj << -/Length 3744 -/Filter /FlateDecode ->> -stream -xÚ­]sÛ6òÝ¿BòLÄà‹ øè&N΋s—¸siû@KÍ Eª"eÅ÷ëo @¤HË™kã™\,w‹ýÄg þø̤ “¹še¹JRÆÓÙrsÁf0÷ñ‚{œE@Zô±~º»xûAf³<ɵг»u–I˜1|v·úmþîWÿº»þr¹)›ëär‘j6ÿéæö=Arz¼û|ûáæã/_®.35¿»ù|Kà/×®¿\ß¾»¾\p“rø^x -/|ðáæŸ×4úøåêÓ§«/—Üý|q}×Ò_/gòçÅo°Ù -–ýóKdnÒÙ^XÂó\Ì6*•Iª¤ êâëÅ¿#ÁÞ¬ûtJ*5I*”ž-¤JŒ“Zf KAk‹,Í-…ŒZ|JË µ¼[/…dfÑ=o-?]3Wi"µÈf}Â#ök‚¿ìñç)¬Tðÿj»®¬.’eóî±lý¨AYÞ~P¦G@«$Ó,®øå³m gÀD°$7°HÂ9”UE—žµ‹èykwOvºgkën¿ÒswÉÍÜ.÷\µôiQ5AèCÙ=g󯟯mø-Š ê:á*ËaÄ“eõ^Þ•€„ËùoSÛEÛAŒl»rÙŽSVžfÄYîiÌ~˜° Õ›<ð¿YOD[Hh\ȳ‰‰gI.!üÎÊ.cˆ<©Ç”´D®æ˦ªì²ó(aÍEE€UÑ4r¶Ï¢òS¨¤–hüÎR¶¯+Û¶žÌÖ.Ëß@§z&X·ßÕ.: ­5îóšr¸rfÀ)© -¹I&Ñð±µÎ2È“ ÷EKy†Ïôt\×ϘéI5ü$˜)¨ ¼nNwؘL`†'FòãJ/*uÌD@%•F\'ìDõ 0tå ep‘tÈÁ”Î1·~™§"nŠgÒš0:Q"•AmTÏÞ»ÜÍ‹å6é;Õc¦uy ˜Ë®^-ékd:e^¦U³×D6óÃc¹|¤ï¼QÇÕ~³%(jãG Í‘= ¤²¬`‘$nF¹Ã#Nè˜eàW¼¯?RÐÂÓËj¦ýX%…žuQµÍKe ˜#ÔQÔRÐÜîÁ§×/' -…>þ„¯ŸR¥âty ¼ØBp(ÝÌH ãžH4Ž9ë5AFÔ&‹³d‡¼)^i úXgÂlÀŠÉï;DýQíI77ò<çˆ5f=Ì|àq&Ëõ7e>™å1óá8Â^Î|9Ôx\gGkÒy†Š6nöD ¶hÎ8rU?T"GE9ylVÎ)#àœgJélˆQ™I y¥ëc½b"Ö”Õ l ºÎ³Ü#ÖûAPU`~<`À?î{wì«Ûå®ìùG³žð=è˜Pæÿñ½±¿BÌ‚œÙ_Á9 ø¯,yL÷G]NCOÌû{5étë51FÔÎÛšÂ2Ù¨Wl­‡uÆÖ–« ,45m÷‚­A«B:Ë=bM°ښļ=dÿ÷˜Úé"NM-…6„å/›ÃbK ×yÎÔþ++ÓýaSƒz*¯l{ÄzMŒµó¦twüSëa1µ€…»-ºÅ’º¢¢]´ÛbiG6q:+}^Œˆ5!ÇÀæ´HŒ†Æe ˆ?@Pü˜òa|(O –›SÅÃ>2Äù²¦3¾àì*œSàšÞœÌô-ÂÕªÄÑ}³T¬Ãqܺce€‡3G†gŸÓ^ÅÑ*:xΩÉ?u pÂmú·¡Ãrsâ,n6~áÖÿÞ„c÷|îbžì¦)e0€µÍÆ϶e·/¼ÁÑg.&湿r=5õ} E}¹Ã“¤7þˆxïÎ_sA5Äò$„¸5ø8 DZàö-íÎã4þR@‘q~ço•»ÚêKÚ ¢é±pa^ˆÆ“(=Q>åñRLlP[¹ !ôQ©Ú¸sn»÷s`.nuP8À6ÍÊÝ2Xÿ~ÿL{Œ‰¸É]˜­úëq‡àÙ¬»ñÖz~Uµ Z'TOÅSSúúH‡-Ôh‘œ¢á/Ò'–â÷Έ¡qŒ f¼½¬Ýº#Bî·ôŒõ®Á0„“7 $ÙÑ“„„mÓ¶¥;PD°ý¾µuë§ÜVÄ1NOUnMß½Ú¦ -¿8PI‡£f_ùdîœãP¶6º]Õ‘àQÅ*žý ³ÿ©Û{g? ؤÏhU\Á~/ð‚7‰c¬j0,⤋8,Úo-Ö ›zhMÏO¿ÒóäŽÖ:°zlÚŽâ¶Ìûq[Ê$3y8õ]7Mâ…J–ÍfêÚ(O´–¦wWÂr²\äâÔ|Dz ìû€çcÀBBE¦RyrIv,-²Ú\´flÎ=7EYEÑkÛMÝ"Jž¤,Þí"'¿˜×xzìnôxÎÂ"Üžz³i 0ú9 1‘\ùh}l~ÿ(áá›w«SÕ È«YH«ù½rRdi.†=½6 ÅŽÛâ‘+²`xžX0@\P…çÁVªª4@}«›CíaöÉÅ\€B®Ø?` à.¢>{21ÃKí~Dƒ2~ãgúFåJ ágLtÿçr€\#´8V1BËX¯ jáL$ÒÄ åéï¨Dàí¡ø Œ–ø`Ô•&Â}t–®Ÿ¸–`1À¡„µËáÚ¯ÂÿN &Á&|ÕÒ> +stream +xÚ­]sÛ¸ñÝ¿Bo¥g"ߧO¾ÄI}Ó8mâ›^çîh‰²9¡HE¤¢s}w±EŠ””ö.ž  Årw±Ø/|ðƒ?>³:f2U³$U±f\Ïë+6{‚±÷WÜãÌÒ¼õÃÃÕëw2™¥qj„™=¬z´l̬峇å/Ñ›¿ÝüãáöÓõ\h™øz® ‹~¸»K”š7ïßݽÿéÓÍu¢¢‡»÷þtûîöÓíý›Ûë9·šÃ÷ÂS8ñÁ»»¿ßRïý§›n>]ÿöðãÕíC7—þ|9“8‘¯W¿üÆfK˜öW,–©Õ³=ü`1OS1[_)-c­¤ òêóÕ?;‚½Q÷é”þ”¶±ÊÌæ€,@g“Jf1Ó ´y¢x,Œ:(Yð)%,Tò6_ì¶MQWÇÓå"‰Jù¬OtĺÚà-{¼¹±‘ìˆùÝ +¹¾~§l5µeÈ#ÆKÞÊZ§RXóêz.™ˆ²j ë—B½½ÿL¿¿îòí u·×ÜF9š¶!,‚xxJís^>ô¨ÓäÛoù–>Ùeé9µm¾Þ´nk.}›?Ù×Û/8XL4ˆÄ‚þxœj-h)¼pup6LY&azÍÞI€0G:45Îy# …uƒi¢¡¡z…c”£Én¦Ð_ÖyCÃUÝúJ"-_häKUï¤ò¢‚{BÖ­›6 ó%ÿözÖKÛî¶ýÎúàU¾ÝfÄfSWMÓb=8®0¶ÌWÙ®léGÑLX¨<–:ùLËñÑ}Ýz&ísæ8$ §¶-ª'ObàgÝQzÛÞ*ªž` +Nž$ ÷_x­;d? Mü[^‘&çRë˜ 0œ-Ê0ðãDG+÷M½¦_O^\øa¢eÖfSH´‚Ð FKø—†¾Yd‹çü¯Ð·×Ó¡ÕUùB½ž€ž}•ïÏ3{̽<šh/ =k†¶B3ËP}Rƒ58ãÍ(4hÌN3'Ø×Ý5òm‘7nùLôÈ/À\g/ÔiZ²?¤²€5"hÖø¶¢¡!à"8VŒU›o+g«ð«ÞäÛ¬¥¨"d5»Åó”8Žvî?>ܽû7õ³åÒ›º,ëúËnã&ÄYô9Ï=^ÙÔȉS+”7¨UÞ.žçOå.Ÿ°=ecŃ½gõ7p¬ãÌçó‹Ñ<æF_HB}¬ÓI¨Ãr>²ZÉì¼}Ùä|”ˆ”Ž¥ÉyöÖÿCè•êˆÿçà’%°Â)]¯ž"Fʼnaúl ÔŸõSœC‚‹l×äKNÆìÈ3tm“cXÆæ0l}<¯]»lèÓ¬¬ƒÐû¢}N¢Ïomø-Å.LÌU’½lUoÉ®ªü L÷[°2σñQÀð!àÂ逫Ó8áil“±/ð÷xõ BýcX«ów”]Òº*ÒN—]à~ 3ú4-úŽ-ß _ I̓tPéØZ#ûF×i'©c#T2ÓP< +#¨ü¹ï©CÅ&‹µì<÷ãõÜðèþÑíH5@T +mgË Aäìë ÒJSIX½¾›íA ðún-fok˜Ó¬?­@yÞ'íæeÄ`}aŠ–¡IÌAÞtï²Vb£—kÁ ­Ób½)ó5i +ô¨¨õ=ôÒÑê+ÈØF‚ZûúýcK&-L¡~ŸÊî?fPPxÅ88 +B‹VgÂ#(¬‚+¡ÎGÇ õ 1c^,盺.G&  +ÓYŸì86¬1wö–S `;`ÿàâ!úx½i©Ž!'ØcS—y;•Y@iJ›~)Å'öoY¹Ï^šÐ/ëEÖæþg(Ü¡{÷ÖÃz5~@ ªædÖRб<Õç³VëôºtX8£ÿÔU>oZ”PJ,šqÞJcÁ¬8/@‡5!Á0oÁ®ÓÂè@„(Ã…üŽ*7éo LاèÞfGw›-겤2Q´]µ_å¥XRë÷?Úé©!¿2ÍvUIe ’Ùä‹âWÆÐq¥$ÀpàbÒò{—³À¡ ®9HYÈ KôŒ¨¹ð‹9ò$ÈcÖP>‡î µŽëêeºzǘ¦ ’ðº9^dG`2‘AÙo%¹®ðr¡RÇLìêu‡ë„¨"°Ô#¡ .~‚98“2)¦âÆOóXD,sÖ„5±Z‹ÎG—Ó([,`1œºµHsbGÃ0sÙVË}L§ÌKIÌÕê`^K¢ýs°ûÎp\îÖ‚¢Ö¾WÓÙ#Ð@Êœ€%L’ÄM(ƒxÄ CÅ ïë4÷ô&öaP6ÝX²+¶MWlO•'J)P®‹«4´}òIöÓû‰r¡‡>áêG4©B]b/,h ™h$ f<¥D_˜q¼ Hd8¦5Yœu!–ƒ©J~!ÂÎXÔå½ß!àêÈ·)l°Ï±íF|‡)œÌ&©0¦Œ'“´ËxØï`§3^*bÉMr°“&îHFZ½Ô;"PåhÀØsõ>´Ë¢ÉÑÂñÇÝÏï> ‡3j6ÙÌwWf["®Ï#¿y€ŸX»#Eï¼Nq¿:˽Ú`?´5 û8>dÿç˜Úñ$ŽMMÃ&„¥§Ma©¥†ó¯ýô)1ˤ۽^”b;5´BõçÎÙ­P´i =°Û*ß—Eï²nyù‹|+ý*\.,ÒÑÔ1cñTÕþZüdeB~·úúX§ãh‡ånÅ–ËEÊÊùj[¯çÙ®}~Õ]Ô †ÜMæhOc1u2q^ÂkBÄáNR +ãf(c8 +J•×_C?uE±Æ;¨Ô_ôãÈcþœ}+Ü®1u¯\‹çZ˜c½ÅÀ€×@´q´ÀXcè{tÁJ°hïN(Áý•‘ $8€'¹Za¹ƒ 삹ÿ S$ày"natNߧ΢U]–õ¾£þæþæÃmໜº>~K¸b ‹ª‰;,K“жã_Žä‡ ì9½p÷Äé—óž~Þ™9þhð²ÃaOÝò„ÅB2~þꣷÇ4E Dý}¥ÇÛÝr÷âóçå)¼xþ’°›sýg‡³t7¾óI‰§<Æ‹ÔANêØgÎ{A¡(cF@Ÿ'PËu…©âiwxËãEEg{ÁÙU8­À9½:é[„«R‰£ûf1¨U° Äq㎓ΞyNd$—ÑJ:pN©I­? u p²mûw¡Cr{ä,n´;ô¶áaR:øÞ†ãö”^?à‰®Ö”ÁÖÔk?Úí.óGŸ¹˜˜¦þÊõØÔw”óÅÏ“^ù£á;wÅ'IîKé=É?pêâtêß–o‘o=Ní/äá%Ó¢Þú[å¶ò‡ù’V¢ÿhÊMÌ Q{EÕPuÇK11¡¦tAB˜ƒRõÏ8öèÇÀ\Ü"š p€­ë¥»]ÈýïÇBØaLÄEnÃhÕ_;wÔFïGŒ‰nʦFë„ê)ûV¾>2a Z$ŧhøé“ÕS°Cã¶<Œx{X³q…Üm¨íê]ËïKÉ–Z +6uÓîXÁùjü[ª‘¢‹ÓË<׿K©Ëð:`O%öê]铹sŽ}ÑäëÑEyR,»Àaö?v{ïì“ûZWÈÏðz‰c¬êž‘á ‹ØÍš/ õV5žzhE퇟©=z0áh­«çºi}pÜ6H'6 g¿«ºŽ½Pñ¢^O]¥±1²÷†%w–‹\œ:ïX”}ð| ˜K¨È”–ú(¶u¥¥:¹}ÁIÆ"Ψ]gEÙ‰^åíÔí¡ä±fÝÍ.rqò‹¨Â3dw“ÇS&qôœ £ç,ÄDrã? ù±èþQÂÃ_Þ­ŽU/ ¯v¯çò‡Çr&Nt*ŽËÕvúé;,‹wF®È‚¡=²`€¸  +í>/KTT!h€·‘•‡áÛ8‚B®Ø==ÓËHPÑ‹'ÓÅaøAÿ Stßø‘¾Q9ÆĘRÃçÓD("ýDŽÒ¸«b„‡*FÙÕ+ƒZOÉlw‘<ýxGÅ°§ ¡ü5FC |°ê‡Já>:K·Ÿïps‚u%¤×…گ¿S‚A°€FôGNP÷›ØˆƒBöÁæP°íà­Óð±A|ê-¸Ô1>àž(çY÷üç¿?<¢W ¬ˆ§¾¬€ä…‰ªôXr-m¬­H&Dÿ/©«endstream endobj -1210 0 obj << +1250 0 obj << /Type /Page -/Contents 1211 0 R -/Resources 1209 0 R +/Contents 1251 0 R +/Resources 1249 0 R /MediaBox [0 0 595.2756 841.8898] -/Parent 1218 0 R -/Annots [ 1213 0 R 1214 0 R 1215 0 R 1216 0 R 1217 0 R ] +/Parent 1258 0 R +/Annots [ 1253 0 R 1254 0 R 1255 0 R 1256 0 R 1257 0 R ] >> endobj -1213 0 obj << +1253 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] -/Rect [108.9497 550.9859 182.6031 560.2012] +/Rect [108.9497 443.7983 172.6404 453.0137] /Subtype /Link /A << /S /GoTo /D (statsfile) >> >> endobj -1214 0 obj << +1254 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] -/Rect [293.8042 505.6313 355.0043 517.691] +/Rect [293.8042 398.8702 355.0043 410.9298] /Subtype /Link /A << /S /GoTo /D (server_statement_definition_and_usage) >> >> endobj -1215 0 obj << +1255 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] -/Rect [395.8905 505.6313 444.6373 517.691] +/Rect [395.8905 398.8702 444.6373 410.9298] /Subtype /Link /A << /S /GoTo /D (incremental_zone_transfers) >> >> endobj -1216 0 obj << +1256 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] -/Rect [309.3157 474.882 370.5157 486.9417] +/Rect [309.3157 368.5472 370.5157 380.6069] /Subtype /Link /A << /S /GoTo /D (server_statement_definition_and_usage) >> >> endobj -1217 0 obj << +1257 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] -/Rect [305.9683 444.1328 367.1684 456.1924] +/Rect [305.9683 338.2243 367.1684 350.2839] /Subtype /Link /A << /S /GoTo /D (server_statement_definition_and_usage) >> >> endobj -1212 0 obj << -/D [1210 0 R /XYZ 85.0394 794.5015 null] +1252 0 obj << +/D [1250 0 R /XYZ 85.0394 794.5015 null] >> endobj -1209 0 obj << -/Font << /F37 747 0 R /F21 658 0 R /F23 682 0 R /F48 885 0 R /F62 995 0 R /F47 879 0 R /F14 685 0 R /F39 863 0 R >> -/XObject << /Im2 984 0 R >> +1249 0 obj << +/Font << /F37 779 0 R /F21 690 0 R /F23 714 0 R /F48 925 0 R /F62 1035 0 R /F39 873 0 R /F14 717 0 R /F41 910 0 R >> +/XObject << /Im2 1024 0 R >> /ProcSet [ /PDF /Text ] >> endobj -1222 0 obj << -/Length 3749 -/Filter /FlateDecode ->> -stream -xÚ­]sÛ6òÝ¿ÂoGÏT($ñè&NÏÖÍÙÎÜÍ´} )Êâ…"U‘²ãþúÛÅ.(’¢ìäîâ™h¹X‹Å~ƒò<„?ynb[eÏ JsžoÎÂóGûñL2ÍÂ-†T?ÜŸ}ÿA'çVØXÅç÷«Á\©ÓTžß/ b¡ÄÌï~½ùpýã§ÛË‹$ -¹X(®¾"èÇÛË_~¹¼½XÈÔÈàÝß/?Þ_ÝÒPÌsüp}óž0–~NLz{õáêöêæÝÕÅ÷?]Ý÷{îW†7òçÙo„çKØöOg¡Ð65çÏð -i­:ßœEF ií1ÕÙÝÙ?ú £îÕYùÉP(«*=`*…±Öœ'ÆŠXà -ð¯¦.¾»Xhe¿* êf·Éªê…ž²º}.v-=<—ÝÚ£é÷w¥¢ýö9Û]È4X2™{(VÅn—UH€Xt vëb@Ö4¼l[ìžú…šÝ„v<º¢ÛfSà€R -kŒr›jà5œ VÁçºy® Ü“EÝѳ›~i þÜ;Üu¬ƒ:ƒ™ezGIpWÖy1!^f]FPÉógü; †â LŒ·´Ò -–‚$hØ™ÙVžåkwX±a>"Å‚!ø¹¬*‚j'ÕHL–=T ¹c€ß-‰ÿ©\òÀ˜ïhÌ7£ž×E¬jÉji©Dj£ÙrYveSgÕbµk6 ǸgŒ_j梟÷KƽÎZ´·6«dƒv[äåïa¨Š¥@­5ÁuÝvE¶±¨X:Æ7Høm¢Ý6õ’†pÿnª}¾& ž{Y´þÍnM`åŸî®Þ Â߯˖_\7ûŠ'srFdžíÛÙCËêr,o8‡MK˜–Ô -Á‘ì1‘=¢X}éö„îK–„]¡!àôä@×6ÕOfÄR^´­8reR$RÆçq -p˜Ñ ×CD‹!y9ãº{*Ì&ëòõb“m·År³.à&lÈD pNæu>zªF†Š&“DhiÓ1'×+ÒÉ(’:§Ê -ýBŒÍ&¬V)Ó a¦ -ýè†ó& ®?>E¼ODLC¸m:—–lÁ@äÄÃT¨BnÆ)9¡Ö-¤Ò"MíØ‚ª²E?Jôz¤ã:D'–1Ú¯ y”Ón`4eýH㸠"°ÆÅQpUƒé);g*HÙlÁ©‘¾á#¡ÉowåƳ–³ÚW³Ž5qkÇ‹q -˜ŸËzÿ…Àö<À¦EÄdÞ€}nvŸ "»iö5¿šÑÏçbWÁh>LM²AÈ™tÛ3tÿî#7u]丹vŽuï^`½–~1ÔÔí ª®\8SF±G"_í^ÈóbÛ‘)K’bù—´ßk›üsÑvß:ñ#èUͽt8ªÂIÈо˜xt–ã]ȃ‘bÄIœ.µ.‹¶|¬:Óó5°†äb e¥‹xqqbXg}O±4A €Brâ51[VŸáBd8ê}l÷»mãç)gdY¶y³ßeyõ¾²fvCo ùC¥§cYsÙWtb¦†öVÙ¯Ë&1Ù¦êë>(W-òiN&Û™F_â°QO¬µÐ6ŽÑþx*`LÚPZ«S‘¨HŽ#ÐÔ½ ç)øª,_ƒ»ÅÌá"± Êáäí«•Ó–»¢ë¸5<¬kú"îâ½.()]ï"¢*ØŸŽƒïÓ¾ª‹¾><¼O{ÜV™¯¸º.Ë?Ÿ¾‡R àøÞˆ˜CªWTÊSáÖÝ­/¦.“…!ïMj__ØÍ,<v¨D…j¼ò^f®^¨úAÍlixì€Ñ‘`“Éç¬}—Jm—íúg^ù#À·Âå;aÚ'„“û[#B)½6 E2ÙI„Õ`äCTÉ­3Jq©-60òç­ ŽQOb%ßß~×_PÖ“«J¿{vo8t® 2Äï)„®í:š€{#í¡æ¦fÀd41VúXáÏH&†$G÷.×_Ï–É &CoxF™& éD¾®ÆCªÓjÜS¹ÖEþy§Þž¨«ÞX¼§šY}¦®š,Ou•ŽìáƆO qÔ_ÔlþˆáêveÞñ}"`±)»Ërnÿ‡>xr[ö¥î²/4êÚ„øR±ë²’—]6‚#J1[榖SÑX+û‡¾§ßr3¿^~ïo ÀW¯ð‚´õtƒ…%a×ðÄýw¼aèðrÒ}s”zï½{ é ßÖ"yÞз3b_Nz’û6{DõNúo24úDf; -I(LÖùvRƒdÒRH¼1%ƒÀ„Ør®“BÅõyƒ»œ IFDV&ƒsϳ®ÀÚl’¼Ý ±:Nÿœ?g»zn!¨ "5Ã9]8ó'T¤|1${ÖLšRcåq_p Ú¾¿ÅÊÃ184á\§H)È'SŸ¢îXOç¼¹û¬Ì;-˜NN–›ÍÇ .#ÌÁ?BþÒìf -­m2t4MÎ5Ô£û ÊXÝgSi°¯¨5¢}gEAžñè €[7mÇö­ÜXKÂoܵ3¢Èð‡hp9 Û6aÝí‡w„†câ7}ó†‡t*É‹òä›fYÎÞxP´G*š‰Ÿm¼Ý ž8÷iE¢„Æz+’í¶"ߑЕNüÝ šçÚy¹D÷ž1áËø½üŽ†.áaÈéê—‚5•=fq*ƒëŽ¨¸Âlhf#ê?l[x–Ç÷ó축íÝ6‚„J}£Ø·ïé{Lüï’P.¾ÃïÍWúw¿ò÷’­Ûþo 2±Û€#çƹ=lÀ­ÍȯááãýíœLÖZ龧ë•RúÞ |LºOTÖËSÜÔþ>ü/ÏšÑßëá ª¦ù¼ßò -«­7%zBǼhÇ‹»•rOŽh&øµÿt­ä|îúfqùþý­¸¼ýxa•Ó-‡þOQþc5º¾¹G?$N}Z«!HèÙ¾BØ×4ÿóg·‡o’£Dè4Uó©”"‚ìÐ3…r > +stream +xÚ­MwÛ6òî_áÛÒïU($qLS§›¾6Í&Îë¡í¦h‹ŠTIÊŽûëw3€H™’›Ý}: €Á`¾AyÃO^šT¤VÙËÌ&ÂÄÒ\–Û‹øòÆ~¸Œ³òH«)Öw7ß¾ÑÙ¥6UéåÍÝd­\Äy./oÖ¿E©Pâ +Vˆ£×¿¼{óö‡O^]eItóö—wW+eâèÍÛŸ®©õÇW?ÿüêÃÕJæFF¯ÿùêýÍõJyïÞ¾ûž –þN,úáúÍõ‡ëw¯¯¯þ¸ùñâú&œez^k<ÈŸ¿ý_®áØ?^ÄBÛÜ\>B'ÒZu¹½HŒ&ÑÚCš‹ÿ + NFÝÔEþÉX(ª*=a`.…±Ö\fÆŠTÃ2ðfS ÕÕJku»±îÚ:E%óˆGêv¬Úuµ¦Þ]×Sc?„qüO¢b?nº¾‹±~¨®d´êÚ扆†ª¨úáèت'(MÔó‰a–ŽêêqÈe8êJJaQŽîWãXmw#P«”‰ÆÿSØedÀ¦Ú†!˜¬VÈ8™F¶ºÅZ3e—Ô"ÏdÂ(5P¸çÕ‹fð¾{ªÛû»@3ç%úªÜ÷°˜YÜÔä"Sp•~Ó¦!ä²pÌÆ-áh#–ÎPß·¿9æƒãÞJåȼ,›s1\9JuÑ®©Ñt÷ ¡¿Ç¢oñ„®³­†¡¸¯—Úç™[îã9n$¹ÈeÆ'+Öë·.šÕ]ßmWeQºc%êÄeÈLÈTúÙå¸/œ°®‡â¶©ê~b4º»£‘Ùf##µ~9'Þ*ÑD#H±#“¸(S#l–Ï™¸.F`”N‘qÝçý5ÈØ襡$-ØzÜT- "¦c)‚÷;:ÝŒvx„››†)Õ´´h¨æÕ÷saâºjºþ5QmŠ‡Ú©Nnýús•"[º¤„xãAÎŒ;A/Ãc£ìz‚—c B@Çø2ž…Œ¸†­:ÈŸïûeùúÕñOÉÄI¦ÔQ[l+"êXÛµ+¦ +ï¡r'„?÷U_;B‹î Ïâ55Ð]Œ£5‹ n«¦{ôXLB±«¾PËWlŸ&Ô­—ìØ_][¡QÔyT£¼¨6é·|·ÊËÂ@´BLÿ¿+•ìwd®×ŒF‡¾«ú¾h¡ÒÙ%iñh]ÇÛ²…¦Ž“˜)î|ôŽVºmµt¨nD1QSÑç¶{l©¹cŸÒŽÔw«¤ÊK¯r×òDM¼”ý$‹>ÖmYaz•S,ÒŠøÿs^`Ê ‚”@5Þ ¶ØÓÁXé…“Z¼£Ô0`%¼¼a›Ì´öæD'äƒh˜¨å¸ÿ;Úò¡^óÀœâdN1ƒœáxnRµT"·Ð>kTõ)£º +óg··)œBæp§n`Fœ›û=ŽUµ(¬&zÛcU¬-*•Ntq;,˜A‡v9•œ<.µ/7!-üÌqC\}úxý½ 8Y>7üoË‘üâ‚’ê5a~Ã=lÙÎ $PØœñG¼wfijðxcøçþ`nJ¶djò˜]³ÉóH*ÁPŠg¤™”)©ˆM’œˆøi5Å¢€O.DÌ ³-Ær³Ú»]µ^Äô@\Â2Sl’9OGÀZ dæ½³Lhió9%oïH&“|3a,ËýD„=[MX­|T…Š™'ÈpçZs²&‹Þ¾Høœ4€”†ðØt/Xƒɱ‡±P„ÜŠÇè„D‚01·s‹ÑÔÚX¢±#×±b‚`¿ 4É¢ÄêàBÒPpãx B˜Ê‘¤ItÝ‚} ˜# €Ùí l!yÃ.É\õÖ“šs·oí7 +jæöNWnâ ?Õíþ 5‡'°[ŒèU–’zô±ë?S‹ô¦Û·<µ ¿ÏUßV µQ}›}-´œJ€„Z7¯ßóp׶e¸°uto^`¿þÑÃRkìÁ™Þ9/¦Œb‹D¶ÚM(Ëj7’*KâBùŸ¤ç ]ùÙåÝã’¨¹I‡«ª‡ ‹‘gw¹är¼|¤™“¥šÝÝ·Nœ¡GiXšy –ó18TÔÎ×¥âD‡ +Æú†¼hÆù4Èg^‚²cñ™nD +£Þ¿gÑnßï:¿N½x%Ÿ—ݾ‡¤a}ÒÜ%6 ‘dçÍÝë´¹ X¸yý…|³{Ê¢'Vg Ÿ’"±>!uÙ#2 `¦BHÀ¦+\8Ö‹ mõH} ãèn ßüi[€Nó¤788‰’^¼°C`#˜Š<êg÷Žñ‚‹~ \ „?ewXVŒ4RБýyuäy$Èx›â¡¢‘éâ·Oc, ûÁÅÓV[°À.ðƒq> xK€)Ö7þX4Ä®Ð!Nô!ë’Žß!ngÒí”tŠwÐÈëWíbrr¾KáLSî›bôp‚ºªö‰6:ˆ1Ô ÊXÁÊ ëö2 +¯y(ìXòš *Ût÷÷Ζ%T£ÁNŸcã?þ³c×ñw‚m¶Ã‰ñ–ý°B•›¢½¯x‰²à ny}w9Ûz=ÎPÃÿR‰a$ú‹-ïƒ"1ÐÄbXŽ9­< zçÏDb1ùüJ”ÅR?2äÐ{¾j45´»ýßò0Xà5µ(rDEé]?AþS—4‚‹9‚BEÑ0*hl̘} ¢´ZâÂc½v©c YéHÿyè¨ú²«ZgÃcÊ]V8ôúý'^¡eȶÚv.eƒ68æa¿õ~ãù>‰·.TÖHR Ia€š5 +~PH +ywRëЃ:­ÃFÐ:ìPÉAQåJ…ëU\dpÉß®©F*}Ј˜é)Ž¬ž ü¾s5v{º ~†DuÈ@^VGDpæfá¾((±¼€¥)¨ÿª("ëDù%ŽøüŠi°ˆp[·‘&VdD8bÃ8\´ž·6ð/Ø6Î÷fØíP$²'ÏÔV>O"bá¿Úèk_kBå*ý£Z#‰×tʆɽ2¸ê]*W–žñÚ×±F±D©ù‹ÑS¶¹€;xeª ÛŒ£ÉaaCc„QÆç8¬ÏÖZh›¦w¿Pa†¨Ae>"÷¸7¤BÅÚc9kl9nÀÙ±Å~A‡º0tšê¡j¸ý¸©]‡&ÇéωC¤…²éQ8ðÕŒÍDžù€Èß>ÄØÍ‘@$lGD¤ZÛ™¬„=ÔÛ»~‰ÇRä©I^â±™>(8›=+ì0gqH)et2ÖJÁ:©=O±NÇÁËq`ߌõêÀ‡YØ+ ÉðÙÝÖÂö³°WÅB+Í÷ç:ØŽPÇIY9„9{ ªcë©ÛÎÆÅ|rgØ5¾çÎ2¹Ï”²Ì4$}ÁTù⡃L“3…²£v×j|Iäq:37/Hy¶ª(7`n1ÓÖ.7ÀV¨X꯫n¨0…Üò#yX!cRÑ,ï{Ï#¯´›Â1HÆ©:s]Ýp±á-`¡&”k‘åy~öµŽoˆPNê—JsÐfõBž9Å:­_ËIE ÒTr±ä™‚Jä™´ç·X ûÏ̈Üh5'àºåX Ï£ïß}üxýÛXoÝ‹iÀÅòt—„A˜2ѧÖ_sÎz˜Ûðj:ÏQ!”C~³‰ü‚c ò›Ó‹”Ó;ئà}ë;ê×Lçºó(äü€ NEgæ¸ÜãOÂCÇÔùùJ‘äé×TO 8[›èô›`05°‡¢©×… ²…L¶’æ< k†Ùqàr çá… Ÿ8¼a{B•ë×üïåÌä:z×Õ‚{Uq,ÒÔzÆ>Ó£#ºÒL˜,µ³pËí±å@ͱ›¾Á°sáç—Þ,æH¬NÔ_b‘(…$·,g»ççÿ #§¬ˆóD¾lääK2(s#b•¼ ƒS¬Ó2°&—C¡í +Òƺ§WÍy ÂM0×çÉX tÌŽœJ¡ÒXÎ yå(À†ŒáÍ[ãûÎ}[Œ{öñ„Ä/ï0 +Y +¢à‚C{>ÅÖøj)Œ†+ÄÎâ®2 ¢=§ý-wå¤åc5Žá;‹CvRýIЋ¯º ¤ô¸ë¾Ù¨ØªÎ]ðþi«%æÓwMáó®q,ÊϧŸ£d¢…ŒyA¤&XgDÊcáÑÝ›/0GCôŸšÜžßØ#-l(±‡‡¾1„Q•Q³ú#„ohìëräúRÀbm¶/J~ˆ½óäâ6†§v,¾Ð¨+⤪‹š·]w[j'hLM;Mª’¹T†‡‡PÚ¸¦ß®¿õ`«§¯øN:x¼ÉÚ “W ú2<>4ŒøFé¾ø̽uO§Ö=…p†m‘€²¤/êøIV§>=<ªníñ³8LªÂ'*}¦¢7‹u…,&†û{¹ ¡AvTXȼ2eÇ„Ðz©"“CÞ™„¸Á½.¸$#>Ðs¤Ë¤+Ð6›e/—D¬_?þ?(Ç—6‚Ì Q ”Ó»3@EÂ)“±Fͳ׹ð¸9&Å߉Ýbáa›x©^¤Ä“¹ _}’œ.Ys÷Q¯7Z°œ<Ún1jœ—¹Œ0ûè¾þ\¼ ++´¶ÙIóè+F Z/Ù§8D,ÿó'͇sLè> endobj -1223 0 obj << -/D [1221 0 R /XYZ 56.6929 794.5015 null] +1263 0 obj << +/D [1261 0 R /XYZ 56.6929 794.5015 null] >> endobj -1220 0 obj << -/Font << /F37 747 0 R /F23 682 0 R /F21 658 0 R /F48 885 0 R >> +1260 0 obj << +/Font << /F37 779 0 R /F23 714 0 R /F21 690 0 R /F48 925 0 R >> /ProcSet [ /PDF /Text ] >> endobj -1226 0 obj << -/Length 3109 -/Filter /FlateDecode ->> -stream -xÚÅZÝsÛ8Ï_á·sfjø%JÙ4íew›ö÷>fwKŽ5u¤¬%×›ýë @}زsëÌ53Bü‚¤Å$„?1‰MªDOl¢ -3Y>]„“Gè{!˜gæ™f}®}§ì$ ’HF“Ū7V„q,&‹ì—éõß®>-næ—3iÂi\ÎLN¸½{K”„×ïÞݾÿ<¿º´zº¸ýxGäùÍ»›ùÍÝõÍåLÄFÀ÷’G8ñÁ»ÛŸo¨õ~~õáÃÕüò·Å7‹v.ýùŠPáD~¿øå·p’Á´¼•Äf²‡—0I"'OÚ¨Àh¥ü‹žÛKOóeåžÑÒçç<ÝÖüEÕg\µ19¥Çí'~Í2b¬k…Étá%fù*Ýmz)ºÑÁ:ÖT& ’¼º¹ìÓmÉ\ý‰KH--3±´nªÀ<™©Ä‚_µSŠ 1† ó\Õuñ°É _ÓÍ.¯©’â#ú€wµ‘¤UZlFÔ6Hb©™)-³‘D(cóeµÍÇfl };³ÃpaLFID ðnŸë4p[®¸ûb“-Ómv_ˆ«­9/¿åQ``6“VÆñPƒÅÚDéiõÜUImOÛÕù¥p`…Dx.ñÐ\U[j”U9kòíSQ¦¢ð¤ØBCÍåqIèêÜ÷3—Åc{xQfmÇvÉ0‡gºyªj„¾ÔÐå÷éKͯž…=(ðîTñÝÚoÇ@ut7}xîÊ,ßÖ âŽèkfèϘ(Oi³\å£Wí±ÚÍú‰üšpþîÚM1†¤f ÝÌÉ“}¤Â|3"7ákºBa«|ÙàÔ’Ö æ ìü³*óº!'†.5À j0;RÙ ²>'¼@ÔŽÄ ­bæA]iH¯¨3¼{¬@Óaû| ]¬Ï¥‘A$L<4 RHQ×;Î,)=0w©OÇ0Æz¿ÂÓ™f¦.€‹²ÉÁµ/Ǭ‚È@ÅpNzËt,~¿q)ƒ¾üOùìêbÆuXÓM•fDCP«SÒ±8ÍkêraOì÷ðAq’Žî+Àá:mˆê–8xrLˆéýüÒ˜é?8|Aï8:ðäp5DÔ(Ñ_ù”’ÓÀ^Q³·Ú+b÷ŠšW𼂄DübT€S¤;¶7¤Q£Cä5Jˆ†/³|“?¦Mžs‡` w._ÆY,¶l1 x‹9ê‘`ä¨ÊÍ uåŒÝ -ä58½LŸÜÚŠ¶) úœ·òŒzÐb+/¿Ú5³jÕc{à ¦@¹–Ò5Œ‹ÙÌ ‹ŸrŽÂ¦™A]pwO¬Çs€'ÏGbâC¾©öÔl Á㊞¬ ´º‰Á£›˜HzÃ{q†kÂ.—°µ¬Ê¼›—Ë&x¸C›Œq#(ú -,ìW`˜«Æ*/iktò Yödj3PÅ…ð<›ÚzL§S›gêÕ³%Nø(³Eak(êÏ o™Ž¥¦™ –&ˆ¿]X-D±=FrïÁÀVÚXo¿‚©ÎÑ1±Á•»$.öoÈšj`ŠŽW=¶Qe8v£ñ(å¤lý2;*"_ß]}¸¹(5 -±‰Õ0ÜNÂÈ=G y«µ5ñYÇŸ‚Sõ¡I¢WðÔã:(ÏÕ9¬Þ~= )s^–kDƒPÅCN Ji›| ªÀ‘¢ª(fTE‰G<ª¬ò¨¢C<¨‚Ϻ Kž@dhµÝ-”XùZFȃe÷ÿ -ŸŠåyhõ¹NC«åêA ö›XnKG¸­ŒÎ‹o¹Fäë0È*°ä ø'y]GÓg*ɨì×vPwi^“ë7Ô—nêŠZ¾PÖm -¢Ÿ#ó2dW‚PmæK{ væñ5'‚”ˆÕ÷Xs´µ"yÅ“=®3žô\®\Ê·Õ¬¬fu•Îšfs\QCø'">¯@Ë5¢ÁЗ$¬CØ—ÂW€Í¶P‹:O5Ý5kÜÉ¥MñÕ$P`ýÇoþ³úÊ *rÅ(0Þ¼"Âï»|[PoÈÉÙÖ<àbñ3Q¨ -}p#P]m‚DZq¦®Î¹Âé¦á)EÉïóŸ>5ì)é4Àðfžà¨úöjGÚ\Šï<Ç2¡9¼>×iäµ\#È›-SÊ#üÁLˆ8¯FË5¢Ç`ʱ†‚ÇŠ¡"„?Ūà€HÜÁÒ:¨á[jĆÞÂfw€C:î…hnØpîÇN7Gá¯{¾–‰ _#ÝûÚ!Ðê@hq€ÀQ$°™o][VcÞ´Ô«Þ×€ùJÚé1ñ=3¹ ÎsÛ7ªég_ê/Ç¥ ä ß2Ë_†MìPN92a‡>æe¾7»”£|œB÷|~û¾&âªÚÀΉϗwÔÏŸÞÒµÀM@ð¾;PÎ?„zïœ+q[®7ý“>çj¬ºŒÐÃB•´JÌô§ûŸ¨zþ5 UúHD—>Óq½½»ÿéæßÄ8ŸsgEÏ,§#¡œº‹•ÿÖÕ&Ðú’¿PW½®v›Œˆ<2ìÍ2êõã±óœù‚±¡?5ÝT4õ´®Z˸cEÝ.xʪ!j;q Îç<äCÕ¬©µ/¨ñž”I°•e*ÑÀȵø5êe^Ôq,ð <Jù=2¯Œaÿe <|}®ÓÑ×r9m_fÍòy¶ÍWÛ¼^­ùJ){^–kDƒÃ5_ 3Ô`q™À2 S†ÖjÕ.›+N±kîDÛcƒŽ&”;p1ˆÄÅõ'j >°ïó[&´ë=¾àÎ| I'H£[Aü&&²zz†ðPlpY°ôCX*9|5Ýǯ/ÆZZDÑ·"â`”Y Õodq… Tbi{…7”þƒµ" Ýqì2.ÉD@üIÀ¶?év&*ŒðTmÏgÁdÖЀ½–dDZLK"?ð'þHq®CršKøžR÷†~dj]@ÒßYN½´à»žŠ%¤¬S¾ç/òí×|‹å;ÞqFØ-YQpÍ–Îä!‡ÈåXš©¾ºÓMN¡²Ç£%l:­U…=$Aw*ŽT·Gv-–Š—¿6™Þ6D%3@ƒvØzàÚ{›vtÇæÎÙ°Ù?z!é,…?¢Rheü¹ËfØX§_GÏÖ²‚‹Oä“°¹Y.é(ÚNsôá¶Ä©æ Zö+»†ö… ´ö;ÝTÕj힉Ǚ©pqT>ÒsË—}J¡‚¶Ò’ØpUKXðø :ÄA«rìä²°?öë -vòÅ^;¬‹åú –&C·Ö´ô -m¿]èŸDfU~ÈîŒ}Pª—õ¾žKô¢á†Ofp%GÚWʧ>×é Þr¹«ZŠôã xÜVÜrH$%AÆVj(šoÇÙÞ`*(X[9(OyŠD«Ý†z\†N|BB/ñPmC‡ý½) €?=7-Ö,¬¿WDw7Ý,œO›T2Ø…ãlýqÓªØÖÍøÍt·\oðúÀö¡Õr4õcñáÞaG»ÏÈo+¡ÑB3â-i$üÆ`Àwh ¤aNÛº"_¤´Ô"ôF´äÑ )3!žË¿4žaÛ—ãÊRpÚ›ñàã×VëØÝ o†Ç·†Söò‡é¾mÅB/DI¾Yá]ŒÐíQàÀ9R˜ÀÊÖî=#Ή«#=8W-ŸóeFÊ3w–¬^›€¿Ñ1hÈ×Û—NwºÕ2ÐV«¡›‡¾9ëW½r+Ðc:ó[fê:‚â0Ö•†-‚<+×óËþÐÀ¥Ü@ð}kÝš¶¤\ÓKúE z÷w-OE,´Oí>ïî¸Ñ[!ÊÿP!‘ýûrJÉ”¶ð:ªd¹+Ú4ðï(¦û{Âé&éÄO¶” ðwV#V 'ÿóϹºßºiüIÏ©#P¨t‚X&Ö+…ó0âPs•¡‰¥Qý?ôÕ¾Fendstream +1266 0 obj << +/Length 3275 +/Filter /FlateDecode +>> +stream +xÚÅZÝsÛ8Ï_á·sfbHŠõ˜MÓ^v·iÎqïc¶û Xr¬©-y-9Þì_¿êÖí\g® )$AàG$-F>ü#£=_ÅÁ(ŠOûBæë ô m.óLÓ¤ËõÃìâïïU4Š½8”áh¶èŒe<ß1š¥¿Œoþqý0»^N¤öÇ¡w9Ñ¡?þáîþQb*n>Ý¿¿ûðyz}ãÙݧ{"OoßßNoïon/'Âhý%p¢Ãû»Ÿo©öazýñãõôò×Ù·³f-Ýõ +_áB~»øåW”²¼ð==ÚÇï‰8–£õE •§¥euñxñÏfÀN«í:¤?­Œ§Œ(UG‡zŽ"{¡‚&Tàl™ÁŠB9Þ^šñn•Uø¥Æ‹rKäUöœ¬ˆ¶,«ºHÖÄ"ÇI‘}ä+"¥%Ô "Ù^ +3æÑÓl›¿d)},lK¹&¾éû"ÇZrÏ‚¹I<)¾.Ó|‚ÚL„ðb­¥]Ïß—v0ÒÓ+ÛÙ!¤ò°hFt4ƒcÏø>j¾Ìæ_'´Tbîª1”žŠD 7ÙlV9ªDRêK5®Q©H(÷E¶%kÎRT^_QÓ5ü#Š]9’>þ‡¤ÃyiË´x†FŒïjâJVUÉ[1‹X1PE'rOSd,PL;á°J$Ck@ÂôíüsM$\–÷WÄüø‰[ÈtPÁ`y¼€@‡v–Ý.ÀÖÜìÜLü+2<̦} æ^!ÇûeÖ€>ix¨°™°Šš Z^¤ù<©-˜Ú4©¹Á•6èHªaÇÍL“.ù1ฮv­?œXH~0’çgn¸¦î¹<¥<™°?÷ Î:Pˆˆzim¯yÛbÅ‚Ê>ˆˆ@Í’mÅ=Ê.ã¢ˆÉ wü™¦ÄXá>P"fï Mi¶Hv«š>òvôc_¥´ïÅ> +ò?ûd[ 8)ðs2€@L<Û'»TëTyʺªMYUùÓ*#|¼$«]Æ(sÎüX°n@d¢™ ŽÅ‘8Ÿ Nâx {JGŠyòç¢ÜfC+6¾YÙ)àÂp:ÐñÀíp®ãj»ÏWé<Ù¦GðÕ‘>?Ã5 @Om©#iL_‚ÙÒDA ÙÔyYPÝÑvº”>,¡œ3â¡J‘*EYLêl»Î à‹j<µòF(K“.Îõ§ < @p#M^ÍØÀ.æ£ØÜ!Ö!Ž­@ø}òZñ§c¡‚wmø¶¢¸æÀ‚o×8xÉûÊ]ùGUSp’n£C¥»b¢¬“z¾Ì‹g'Ús¹Íëåš&@GÉÄ@¼l/ O +ΰ”Þv+"3ág²ÀÉÙ¼æx»NªÚæÐøGYdU3ǾÖ5ÀJ0°w¤Š¼0r>áu0odÊ0ÊÊŸuA×aª+Øv`khêa…l.µôB¡ŒNJÇ@UU;ö, è»@Õ'÷0 áÅ|vw¹NïᆫÝÃyQgÏ`Ý×ãM¬¼PC}V€†k@‚þ&6˜n›¾Ù´kqå£ßµˆ3$)Ñ Tkå´,VøŠšìæ‡ÒÛˆÐnì*€£í%\*Tè ä!ÆÓK­ÇÿâM ‚›Ð¼‘X)%ºñO)H¬ò%U;1XÁ×Tµè‚ó_Â#öœ€cådÇÚó +á48ÇàÙïyÅ] × +%x¾Áo Çjv#(è½õš&$™ˆ5§1K=Î:£,V¯Ôœ6+»Ç)°q\Ðf­e3OhA-Üü实”‹f˜¨3ÌÀÈiøȑNì°Ø•=ndZ™ÀdžX2gãÖÀ#1ñ)[•{ªÖå†T²€PkE»0w†; ð¯nZí·…€µyYT`ݬ˜ó‘¯;ÔI PV‚¾ËÃün†k(ÿ’Ú‹tƒ¯=éà‚(ðT¹ÜY×å:íà®nv=™»DÏ¿…¾g‚ Û+ðeMÔfá@œNyȧ²^RmŸS-äó)“àXËT¢’=ªñÍjØñ¿(ãÐöƒMêI_Êïáᬠ>+|Ãÿv¹Îì@Çeq´}ÔóÍd›-¶YµŠüJ©è¼ ×€‡‘œn_‚Ùe Á¦4ElÕÏ;Ú%7ÚZ-øšBÙ[»‘8»y  +âÛ>¿cBõñÏø +$]¢ ~z€} æåz.à)_apØGß°}œ…<2»ƒ·Ù7Cr ¼@„á·"â`”‰Ä?mÃiÇ@bñgþ@Äð}{õ§†”óƒ)`ÿI`:hÏ'Êñ†mϷäV_ƒ¾æ¤Ë1O +"?qÚþH±¦C2šuøPóŠ~fj•ƒßßçiF­ömKÉ3$,S¶çÙŸi¯èUŒ=Ân΂‚i¶tK¿%˜¹™òÅÞtþò{¼fª•ZÅÞƒ´÷äH¥W^¬ñ¬ø “(¦'| ’ ÂoùP{âÍKN3ºe³wnXmÁÐopvž…;Ñe)ÔRîn½V–ÉËàÃršs +Š|Ž8ó9]«BÝÊ ù§H¸+p©Yš„SËÓ®&†}n7ZÓ%²oáTÃqä±jÊí¾ªûuÎX¼îÚ*¨«@2;`®r{Ðå$ZCw‡à…Ý`›¶kŸŸÂð!b™Ï—5)²À¦XÐI·Ý¡¡{+™–Ù!»UöAÂ^TûfxNÔóš;Z ŸôàQäÉ(|ãU¤ÃtÚ;&ûrKÛüø=^x;rnÖ†éxÚž?W¡µR½yù¥,–Ík¦‚„µ¡‘i²Î|,ZìVÔb}sì\9:.‡6ÐVtåß6²õ¦nPAä½&º}õæÉù¶)èŸÂq­îºi‘o«zø•Ú˜†ë +¢ŽË÷!jEìÔ>¦m!žvtú ݱ* (C>’†Â z|‡º@z³­MñCʈjüc+ +v4HÂLˆäâoµãcÀvç± )íêÔᜋÔào8ü‘s;ÿóäÚ_ø«sâ¶\»gd9¡PçZJÞüšîXô?·endstream endobj -1225 0 obj << +1265 0 obj << /Type /Page -/Contents 1226 0 R -/Resources 1224 0 R +/Contents 1266 0 R +/Resources 1264 0 R /MediaBox [0 0 595.2756 841.8898] -/Parent 1218 0 R +/Parent 1258 0 R >> endobj -1227 0 obj << -/D [1225 0 R /XYZ 85.0394 794.5015 null] +1267 0 obj << +/D [1265 0 R /XYZ 85.0394 794.5015 null] >> endobj 354 0 obj << -/D [1225 0 R /XYZ 85.0394 256.0608 null] +/D [1265 0 R /XYZ 85.0394 186.2624 null] >> endobj -1228 0 obj << -/D [1225 0 R /XYZ 85.0394 228.8008 null] +1268 0 obj << +/D [1265 0 R /XYZ 85.0394 160.047 null] >> endobj -1224 0 obj << -/Font << /F37 747 0 R /F21 658 0 R /F23 682 0 R /F39 863 0 R >> +1264 0 obj << +/Font << /F37 779 0 R /F23 714 0 R /F21 690 0 R /F41 910 0 R >> /ProcSet [ /PDF /Text ] >> endobj -1231 0 obj << -/Length 2638 +1271 0 obj << +/Length 2793 /Filter /FlateDecode >> stream -xÚÍZÝsÛ¸÷_¡·Ê3‚/‚Äc.qRßôœÔv:w÷@I”Í E:$eŸû×w Pü’}Ó¤ÎÍ„ÐX,¿Ýß>±àðŸXD†+í"¶šE\D‹ÍþŒ/î ïÓ™ðcVaЪ?ê§Û³·U¼°Ìi·»ž®„ñ$‹Ûí¯KÃ$; |ùþóÕÇËOÿ¸~wëåíåç«ó•Œøòãåß.¨õéúÝ/¿¼»>_‰$Ë÷}÷åö⚺Œ×ñÓåÕ’XúœPz}ññâúâêýÅùï·?Ÿ]Üv{éïWp…ùvöëï|±…mÿ|Æ™²I´x‚œ kåb¦#Å"­Tg7gïözÝÔYÿ Τ2rÆRÍ90²Ì(èB~¬ê§´>Ér›—w°=-7iI´h*j­3ßU•¿q.ïnJ¶%iÆÓç!s½«mµOsßµN›¼ymÅAmQ=u«íªší½_䮨ÖiÑõNì«Ú¼*?«ÂCO¬„`6Š¤Û–³×¨eõ˜Õu¾Ýfh†ÑKgÈSú<¦užµÏÔWíHø”>7ýÏs+—ÕääØd-IÒºÍ7‡"­é7m¸¡QmEÂCãmÙæ;ÜÇŽ¼“•-ëí0«‹ŒY:Ÿ@ç}ú˜Íí/% NUÂX8vÑ;v³8âhÀ‰´Ú–¦WeñüϳnÂÌ>`ÉŒ¶ÂÏ\g`L†A(¼ñókú–UKÞ^Hú8r?§É²qÔ(Ø7É"V‹¥°ˆ_ê¬ïԸêO˜~ª÷q“m>!ò%ÄÎÄ k™æZ šÄ]7ê53&ÚÐ 6sT°3Éb!Ôb¦Ë$‰»$' Sº8硴X5mºùJ{¸Éj@y3s€ ÉÒríôô'*eà(`â¹XÂ\÷›N.£Û-¶ ª›Þp¹`Aa‘tœ„&7UÝRâåOUýµ¯¿:”[úý€k;ѺÈö~ŒPü’ºtsŸ®ó"ÇEeÛƒ7“ÅL\W\4#ÞÎ&Ojd9(ðíË/zˆg˜!ô¥Üûªñºö`[^flÂÐ,ŒTLEæDʦ1«Þ Ž˜IØanpÛáª9ž{}¡,À/­ÆL×ïÃGh`1øg`ÀÍC¶É1gdx`:òQÚ,Ët„èIü¦Û­ÇEC]†]Þ~Âõ§› Œ&©ÃÈÖõFþ°œj#èt§…X€Ý°Hè$@‚J„¶NË!€IÝXÄ æP[g?ZN¼!)Â2–‚ÎûÈáÔ¿?¸]ƒt‘$“ÄY ’Åcè¸÷cÃz¸NQ€Ì†¿0!S뾻͹Ìý÷>ÅÍi»Í¡„ ïf?¾¡/¢[jé ä¶*­ƒyyœ?MP€{fU"=%̃qÌ"“‘S¡¹ÊŠ¾™§°ßË¡,ðüÝB¤3‘X="?˜•'ÿ³çŒÖÔ[gY(³Á“ÚžˆïMµß;dá‚­ßxÄ3v7—´eåTÌß ­Ÿ¾Ò3îÐú‰ -î½bž ø•Úžcí™à]Ï﫲­«âuè&iIÞÓâ(Ç6Õ;лöÏmoZ·GA]GMA¾Ôò¨ìò uô’u¸Ü|éY ûvåTå¡)ÏM›í±XßL« â˜#É òÔ+UC7~ÕŸ0ÍzS½ÃªLP21Íû¾ ï«¡XÙŠû#3Š7â¬Mó¢bø¾zÆDƒ©z÷8ÍÊà0ÈL'XLÇR¿BcýQ§y¬å‚/+¨ÑÂ1… Åd³—WïFÍ,? 1‘@¯.? 1)Åòé>ßÜcS:FðÒ®$B¹3™î<‚œ _¿7 ½Ïý<G¾T–1]Ôä?/rQcÿU•~(vÊ»`Ýœ$Xî GÑ°HÊQBt„“~©ÄÖê3ÈËs9îÑ6¶>cäC÷O¡Â%bŸ>“vº bkí×k:¿nIàê9oÛÔ¡$ãZÅÎîéê2b:Ò±„‰.;ÈÏà °‚?Aln +yAºŒ­ˆ‡5Aî¸[†ë¡+Bàg T^z‡ôfÄÛl— -OŸùˆd¨Z?’N~¬‡AšzýÕÒ×Ü4i?ài´ù/M(¤¢+§³dA™è•,ÔõB -£Ž°â©g’@Siûòâݨ™Õ‡I(f\5\~˜…Ž†š¢ËBf]ù1 %Tj:aó•Ux+IëgêúpuC]D¯ÜÙ*ÆB™fºÊnä—19%L -#úÙ@†l@Q—@náBÌ<ÊÀ1r -\ªƒï|ŽH$èÒö•¡!A%3B&¼Ó¼ M—!hq{¬ú¹à´-"áp…×jœ pÆË>ÿÛ‹i"ðSŒG‰¦©ËÝè}å? \g5Ѿÿ íË$e'¤ØräôdC"Äf—ñÞ¡ð›—Xfu™«]ºq—Q/Ïj„ñëCK |N8ê¬ï‡ -³?ZÒ6|Í¡üV ‚)k|NÇ·°êàSy™aH¥uꩯeøãI?ý;Ë´“Z|v ÖàÀæØŸ8㱉N q¨‡µˆü/tøs´Ó‹1Ó ÏôBbW Á Õî+T¯€‚¹˜ãúpmG®× Ïõðís½8Éõ1ܵ"1®ú‰¯-Ô2ŠGSÂoql̉" ôú³Ðÿ› <tì?EË\ ´dJÃYý¸*@ýÀ*î=1§å…"@H|ƒ1É,Íl"“_ô¿PXØeËYü—I¿wTÿœ>ç’J³({Žtù"äôïþsÿñÿ…Ð1Óä<{c™¤ñYE t™Dòä‹dÖ3þßêJ?äendstream +xÚµZÝsÜ6÷_¡·“g"Fü%>¦‰sçêäßÃMÛí®ÖÖX+mWÚ¸¾¿þ‚ÔêkíÎe®‰(AÀàš1üσD3m„ R£Xó$Xï.âàæ>_pÇy¦hÈõÓýÅûk™†-tp¿ÈÊXœe<¸ßüj&Ø%HˆÃ_n¯o>ÿëîÃeªÂû›/·—‘HâðúæW4ú|÷á—_>Ü]Fç/ ‘„øïK0xs$:™Û¢#Ê>?tåúXåz§ ·Äeýˆàn¶Üâ>¶d¢îˆo‚h"­Ck˜|Ì¿ãý‘çæ” ç")Á ãN¥,…q Æ}ŽIã=žç¡íRS&˜V†»/W(S‚bïÜ÷zÖMGƒÁ^ˆ» 8r÷M[ÓP— +‚SCÆVI–b Óäá! ÁÝ è{þhøÁ<èçrmÐktˆ‚‰d¦þX‰‘B³ÜÓs½¥ÆLªÁŽ +v&0—B8ƒêÚ ÀŸk&Òã8?ó*j»|ýD{øf¡]8@p‘1‘Æ„Ã¥Ô„$ˆ-½ÓÉôBiMJˆêvÀN¼‰ $V9æ(¤¸<Ù:šAÿGússxÊoŽõ†Þ÷¸¶%­ªbçVÁÅ'‰Ë×ùª¬JŒQ¶9:õ<®Mâ¢ê­b£ýí¸ß[œÒ (A€ß|ý®Æþ í#„ž”›`ðØ´NÖt+ëâ,f& +Ž,ãâuÌrÇÌž ÷¸é1jOG?ÂNi‡bêU<Ó‚ +#äTPâÁ?cFÈ)Uâì"•ë|ç‰hO|NP¹¬ÿÀ”³¢ûàŽ…æóõ¸‰j= h«†fwdV´u&˜´gfqN –p•¡;@ñ†Ž€©]%[$Ó 3©LÕ5'"¢2R1Þa‰çç|ý…ó»£Ý5PWQrpe¢X­âã¢úî'¯_×)!ßðj9ñò~3Xã (Eéù˜ãæTœÚÍ!Å›Ùñ·ôDG‘ ­7¹R3î‹aáןx%x?32–ýqŠ% äYî?±°fW°U < dk·—c]áùÛ…xg<3j|¢ÞClx6fÜëÀ>³¹c[Eí³Å“Úœ‰òu³ÛYÏ—Š #,à +ö°”ºEÍFk·AÌÂgŠº rKÌùÂÕ ó(G Á¦:x.çˆL€,eÞH +T¶!D÷ò½uah3-ŽÎžÊa.8¯ Ïb– +%§™¿xÝf`_ÿÍ3˜dq’ÉqšºÙNnYþ×ÀµªÑõ+}”NbÓ^)»Vw^øÛu‘¢Š&ù+wÿèq–eËwÿ1^Þ2—àgeÑw1ÈrCÿÅXT䵋Dl±jT ô^Þ”B) ~.À‰SaÈ3o–hÅíQÇ,‘Â_ÏËÃ{øW„³E2HªÁ(‘Ø¥ƒ?ÐfŒ$¦ÁØîõdKx³Á§v 7åGCÉvSz”\„dZ‚WBÝ@Vð1|É¡µ¶>‰-Cø­óõ% ¼s2 Íà/1bøƒ4­5 ¡wåíš\|žŠLl©}o1` M”×0Y3ÏRÚ0HUY0<»s ç¬ ´<Ñéw¥sVwá™^@ýŸ’Ïž#žJ–b«ü*õ\“¤Q½7Â#ÎÚ %ÏñÈs-(0r !¡c>Ö`ŒGò„G0¬šµ½4éì·™¹fQ’ ì;OÀ(F bFÐàéðžJg‰ë“Z:9û¦u?z$1vÅzRΔÐпÃÊÇýt'Öc뵧ÓM’ñ™‡}&Äl¢ðYÖX‡:¯¢m¾¶Ý¨£ xþÕ±£Þ'œd‚³ïÆ‹?;’¶ôc…_*¦¢uI/Ú£Ëåu1•J_P=Õþ7”aþ· +Öyå?êðöÕ—X£[‚ÿxüÛÐÜ'î±âé¨àÊÿj# õ| +õÜA=—çàò—†r÷ ¬1_{ß7ñØóì¹{xÁžŸûš­„OË~l‡HÒÉÍÔ_°[šj}¦ +ð³£³ø¿þþ ‡ÿ¹·,ý€„¦L.^rÄ=Þþð_œþtB¥ òó™lðÂTBœRh·Dœ½¡™«þ_”Ýeíendstream endobj -1230 0 obj << +1270 0 obj << /Type /Page -/Contents 1231 0 R -/Resources 1229 0 R +/Contents 1271 0 R +/Resources 1269 0 R /MediaBox [0 0 595.2756 841.8898] -/Parent 1218 0 R -/Annots [ 1233 0 R 1236 0 R ] +/Parent 1258 0 R +/Annots [ 1273 0 R 1276 0 R ] >> endobj -1233 0 obj << +1273 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] -/Rect [339.2005 732.0757 400.4005 743.9759] +/Rect [339.2005 655.8125 400.4005 667.7127] /Subtype /Link /A << /S /GoTo /D (zone_statement_grammar) >> >> endobj -1236 0 obj << +1276 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] -/Rect [455.0966 515.3057 511.2325 527.3654] +/Rect [455.0966 437.7416 511.2325 449.8013] /Subtype /Link /A << /S /GoTo /D (address_match_lists) >> >> endobj -1232 0 obj << -/D [1230 0 R /XYZ 56.6929 794.5015 null] +1272 0 obj << +/D [1270 0 R /XYZ 56.6929 794.5015 null] >> endobj 358 0 obj << -/D [1230 0 R /XYZ 56.6929 712.8597 null] +/D [1270 0 R /XYZ 56.6929 636.3095 null] >> endobj -1234 0 obj << -/D [1230 0 R /XYZ 56.6929 687.24 null] +1274 0 obj << +/D [1270 0 R /XYZ 56.6929 610.51 null] >> endobj 362 0 obj << -/D [1230 0 R /XYZ 56.6929 564.4689 null] +/D [1270 0 R /XYZ 56.6929 487.207 null] >> endobj -1235 0 obj << -/D [1230 0 R /XYZ 56.6929 539.0086 null] +1275 0 obj << +/D [1270 0 R /XYZ 56.6929 461.5669 null] >> endobj -1229 0 obj << -/Font << /F37 747 0 R /F23 682 0 R /F21 658 0 R /F63 998 0 R /F62 995 0 R >> -/XObject << /Im2 984 0 R >> +1269 0 obj << +/Font << /F37 779 0 R /F23 714 0 R /F41 910 0 R /F21 690 0 R /F63 1038 0 R /F62 1035 0 R >> +/XObject << /Im2 1024 0 R >> /ProcSet [ /PDF /Text ] >> endobj -1240 0 obj << -/Length 3289 -/Filter /FlateDecode ->> -stream -xÚ­ZKsã6¾ûWhO+WâE•Ó$ñ$Nm&‰ã=%9Ðm±"‘ŽHÙñníßn4%M²;®)Í&Ðh|ý$ù,ƒ?>+4ˤU3cÓ׳åö*›=Á½¯¯¸çY¦EÊõÅýÕg¤™Yfs‘Ï -–ŸÝ¯~žùÍûîoî®Bgóœ]/tžÍ¿¸ýøQ,ý|ùýÇ·_ÿóîýµQóûÛï?ùîæÃÍÝÍÇ/o®¼Ðž~†|¸ýÇ ¾¾{ÿÝwï﮽ÿöêæ>î%Ý/Ï$nä÷«ŸÍf+Øö·W“¶Ð³W¸È·V̶WJK¦•”²¹úéêÇ8ar×=:¥?¥ ¦…Êg -˜UÜLk9c™­-ŒâLk[D- >¥åÀ…Z.7›öuñû¾Ú½-–år]÷ÍsÁêä±)"ׄ 2‘Ø´ÉÍPˆŸž«eýK–‰ª»^HÉç¯ëz¹¦áºízO-w×¼˜Wþ¯Vx‘Íû–ˆOUïï6ÝkµóÏ=ºçÚ-]õk?ƒÛ.¢BËùí#î{¤0™åLª\ÃǪBîÙBæÀlŒ€ýsfµ&àF5Žö. V~¶„ŠÏ›¶§AW¹A†6Òä’e¹6avÕr¿ë궙X4mŠÌŽ–Ûw¨3Õ´¬ûGrÞÂʻ׺«&Vç™ÂƒãǺ˜XZç+ÿêÒ X‘3…èðŠn"wrh¢«ê±Üozºø%ÓÙ„À`]Jaû›vYnšªï>§‡Ü5Bëó ñ‹‚Yćù9=ä6¿¸vä¼æ…a¹àö¼¥¦\§-5rMZê‚Ž}`¬˜—´ò¼‘kBŒ±è}²|(ÇÀXEf‚±#©•¨åjEæÚuĘƒa4tï©~©ˆíÉ;Å[tÚ@v*lŽvên’ÕÀÍ.J³zGØ1 ´A—y:á@Ñ}à¯S1 ɈÝU^Wžµm5šŒ$9U6›£¨‚Òž‚ƒ²ÌðB]€CÂuë‡ýóªì p²R {~õÈ5±üÊ©ÄpýQŽQr |7R£ïvÁw#“; vû‡mÝÓø«·¦ÜÖKbøêãOD¥M† ¤Ýu[v}åÇÿj‡Ì?î ¼‚‡eþ8äÖ»&¸^U.eÊaI 'I ²Û%ÃØaçÛ¾"j¿.ûÈؾÖÍÑ3­‡’œ!ЮLðn@ …öº· -áèïþ©ÛÜƲ!ÀA^7âÙÝón¯«Ž°"8&£ôL n¯pœnîžf4¸KPùéǨ9ž×¡¦Zöu0%Ãä‘4yÆ -Q˜4GÈ\—d€‚Lr´œTB‹#}YoNÛ®²ë3}ÞvS®Ó¶¹Æ¶»q^ËÝ -2VF–Abšç‰\’ ”‘iÆEº­c3Îe4c3†áÁŒñ"š1\íȃÃø`Æxá̉M%mÊo¯ /ÄÈ};ËÆãòh1¨èš‡r­œ0p‹XdHdp”ÓInœwpw’¸ Ñd\Q1QT¸W!“ÿ7$…Y¨AkÂá¦r(émr‡w4}Ð) -TA=å…%OÄÆ‹í½¹»‹(…­ù6†0–\è¡3 Û''£ ×Î9©‚””çj3m1aYÈÌÎﯭ˜·ÄS5åÃÆóÅ¥•I 3¿#fwߦôù×BrÃIpÃ>ïà½j¡` šýü¤je,— Âïã›Ó¶™^ÊÍžZT>ôݧuÙLˆÎ¥'%ÌŸ;bƒÐ Óļ‚å¹M›lojVP dÙIÒŒrï»=èó.–í¾4?S8Zí—¡ÇÅA3ò¨ž†<3¤ Œ¬n–x¶6X`ÀÇŒç¶éê‡zS÷oÄ@Þ""€ˆ)› /0^‚û†2…„Ø­[·ûÍŠÆ~âžfy­ûõhå¸ñÁXsyQ© òìƒhGwþ‚\¶»Uàù‘+£,Uá-Kˆ8ØÔWTEÜŽ‡h÷´ªì÷±ê†,ü-i"òZŽâwàÆÛòÍ/ûÇsÛUHÛ=0wS£Õ6„ä4áLÃ8Q g DiÞ '†’¶IŽ+Mû¾\þÖN¤µ`®…ž)Ö˜KÉAä_¤Ç¢ãy?%9P°ZÖšN~Ü\dPª€rAÊ¡ 19ض©Ê/¥ -ÒÀXϧ -)×éT!r¼éK¾èÞ€oG‘jXõeL({A†È5!Ä°êÓLHHRܯ)UÖóöÙŒ_KGÌ¢}ôITäk¯HÝà۶­sHÜA¬ÃTù ÅÖó÷ðÏ󵞒Ó/¶Ü†PåBJà/B¨¦~ lʇjÓ!•®in3¨›r÷–ò`¬,ìüÈrÞIG -œ~/¹—-²MMHã×*BÊäÔèqü«êÙWŸà”|47GCVÆt®(íÚÔt.—ô€Ã•¿M(zë§ÆÃÜ» ï®Ñ´Û*¬²k¢WÚ‚W)ŸÎ¼RÈšø%KH¸ÎXBà:X‚Îcµ;.y-¢8¿|`šX~Xð*&2+‡ë2e%tÈêpè3e%òC¦Œô˜)ãâ ýùT®Ï€Ìq=‹ßŸë`îæÚs¥Ê‰WbZ³ßã¦é˜OÀí®õ3ÀV¢Ò±Ÿ6˜r…~· oBÚ7¹4~“® ê†~ûõd;QH¨YdH“&ÞÆIðË<ô»½­zÅã -!¹†á²t½BÀî‰Ò‚¢võÊ•§¥1|Fç,¬ [MÔå$7Ü ÷yõY¨ÇVù¬Ñ›ç°µuºåy¦‹•hÄAß³8a»"ÇtJæçm7å:m»‘ ·þ°~ïçü~@HDãC•6F±PX…(Ñ·~½ûSø<.‰$ƒ2Y¨‰šÓ&Ÿn$¯ÄÆï_$¾Ù( T;R2°ZéXñëlù_/xÖ-J%äÀ‹@l{&¹On\a‚%>ä - -èpã¹Ý¹Fˆå¡h·"Ô3<"Ç^îa|mJÔC#Ù¦Ÿ:P1ôFä_ =©Å÷&|-?á¾”\Ç÷-ì*¼í|y8"7LrVdñƒˆsS+Éò"¸º¾ü-|'âºþðKk¸÷PÊ¢F±âÓœ´ì9Ý´ÒŒº9cC¡‹u͸NQ9³ Í8¸%¹ú”o³EQLù³ˆ3.Ò)黨T> )…… pX™"e1i,$xP•Aaòÿ2ÌxIÈBÂÔ< -é<àe\JÈFð¢û“ì8"`øƒnèˆ1æø/E¹eçc A,8˜‡·Qü;*uIÃô.…Ô’~eãÌ÷d¬=0k9vŠÁÆ7‡Þéò;p~õófÒ<3#û)&4øº ¦ AAi=êµå·ý!­Õå¤x7aH ü¢My ÷Aטò*H ™aÅ 7®HFO’öp¹Ìö7¾Y2姃«Ïx~®Ñ+IH6 H¢.'¤»±aiB; ˆM¹õ¤èˆJ…¥ § -wª&4¸€gpý¸3>BzpïÇm¨ï¦æ¦=#­}$JÙœ˜“VÇý-á=Çr]7UhýxÔV™ »`å)d{mOÂôrN}ð³êOã4p&{30ªà4Òf×±½w=8vêP‰^NNå’ðß+ûþ8ôðå¬2ô¢qºÕ•AÖ¡Peú¨µ¥!ÌA”3¢ÿc–éNendstream +1280 0 obj << +/Length 3338 +/Filter /FlateDecode +>> +stream +xÚ­ZKsã6¾ûWè¶rÕˆÁ›Då4Éx§vœÄñž’h‰¶X‘HG¤ìx·ö¿o7€@Š’'ÉŽ«F ЯŸ$Ÿ1øã³BgLZ5Ë­Ê4ãz¶Ü^°Ù#Œ}sÁ=Í"-Rª¯î.¾ø(ó™Í¬fv÷¬Ud¬(øìnõóüëoßÿpwu{¹šÍMv¹Ð†Í¿º¾ù@=–~¾þþæãõ7ÿº}™«ùÝõ÷7Ô}{õñêöêæë«Ë/4‡ù¯pbÂÇë^Që›Û÷Ÿ>½¿½üõ«»x–ô¼œI<Èï?ÿÊf+8öw,“¶Ð³x`·V̶JËL+)CÏæ⧋ã‚ɨ›:%?%ŠÌH“Ï€³L2Í?g[Y8)ÓÛ2¸ žeÔéµhƒµ|3Ì.µà îP™ÙÂØ<Ó‡ËrÆyfµx»œëÌ•Ïr­áÊ ]ï +Ø‘ÚLÅ%Ë´ +GŠï/†Ïïà1¿_.*….€5žRàÞ³ßg´p Yz¦°ð"YÙÊȲ\à †û@e´c¹ÜlÚK®ç/‹ß÷Õ°Ç毋e¹¼„ƺ¢‘"ß"„?qÝób¾ïªµú–~»§jY?¼ÒC¹\V]7$èay׀ݠ 3ÜàÆùE…FJuFSÕ¤¦.èÚÊZ€zI°ðg¹ˆTl ”¡3C>Ê*X”I¬Ô[®V¤®]G„£¡±Çú¹¢®¨§Ø}ÐS¢Û†î §ÂÔS7HZƒ]äfõŽ°“Ó9ºà·¡.Ô¹ øu"¦&)±k¢ÈëÊ“¶'m^}ãpÎw0’g\±bŒÃ Ø)‘yDlÙ¬¦ÔÐfRç2] Q<µÃ@$èëI¸ÂbËO[®)Õi¸Fªj€Tzcÿ@4±ÿ§†gŠA×€¡S1Et*Ð Nš§‚Ñ© +$ðw[þ應ÔèÙwEp¸kBðþq:j?ÔU»gˆ Â$£§=Îb(¥Áô ÊgØz!„ÊASp-¹ð®%ç']‹ÊD1aÚ§\YÙƒ¶|´_ÒøœŸçoø“qÉÄçùˆ–”>»5¹gÅÚÏ*rdˆLÀŸñ-ì¡V\ýuç"þšsÑD5†ÒyPchÔœC#Ñ©dÚ¦|öúj¿BŒ ·Ól¼.?E‹ù}EÏ$8äkå˜!"‘!HÁHP4'yI<‚D•qøÃD`Û2®B ÿÔ 6aó¿SQ$ó¶QÃ;Z>Ȫ “òÌ’¥€ÎƳíM¹E”ÂÑ|Cä6+¸Ðà )ŸŒŒ7\;㤠+ôàš&Ö™1j´lr¼©UA0_'á2ò½ïö ÏWzX¶ûÐüDîhµ_†ê—X¢3C¡öÁ`lÄ@Éêf‰wkƒf¼Ïxj›®¾¯7uÿJd ":cÙÚK0ß êëÖí~³¢¶_¸§U^ê~=Ú9:nœ³-Ï*¥Bž|àí|^€ö‚L¶²™’ÖRYÞù`© +¯Y2@œÀÀ¦Š¢*âÙ°=D»ï«Ê~óMè@—…¿%-DVËõø¸ö¶|õÛþñÔvUè¤ãˆ»)7N»mÉi¨™ºqê8`{RG+p,Ü–HÚ&¹®4ðíûrù[w:8Ñ‚ºBž17V)ò7‚ƒH¿H'û¢ãu?'8P®ZÚš.~üâ)P½ÁƒR$ +RyˆÁÁ¶MEþV¨g}£˜˜R"ÕÁš>›E÷Ú|;òTÃ|eBÙ7xˆTL ó= Éô‹»5…ÊzÞ>ù+‚öKé: @´6‰Ò{í ÿzGÏ»mÛ:c€;pƒuXÊ Bl=ÿ<]ë{ ýb±m8r>`ºPz¨Q¿¡šúž\LÙ”÷Õ¦Ã^z¦µóù}Ý”»×”}eaçßB”s°N¢8R ¼÷g1ž7x›ZÚ/U„Tn¨ÄãèWÕ“Ï;Á(ùê(—ECT/Út.íÚÔt-ô€Á%¾MHwëÇÆÃÜ› o®Ñ´Û*ì²k¢UÚ‚U)ϤºBqšy#×M©ÎhB :h‚ÎCµ;Îwm&Dq~û@4±ý0ßU™`V÷DÊJèÕaÓGÊJ˜C¤Œý1RÆÄþúû©\…;0Æõ$þt~­ƒV¸Áµ§JK”/ôΠ~¯†c>P³[¸¢Ï[‰HÇv:Ç+Tº{Ò¸AË…™ð›Ôc¨£nè·_O…„œ%¾môê9,j.vž©_%QPÃ×,Nè.ų'^GÕMˆNkn Âsßo ÈX·›ã¾27ç· 4ÇÛ4Vª¬Pb¸ï¨H)\ð?›ºë©Õ>øq2$gÔª¨#=!|¢…-_’IAS$/à!y«{úö.>”Öb‡ç Ýgñ6"ï«´Š)Â*ø‡¾õûÝBæq2$A TÎB6ÔœVvü8)y 6~ç"ñmF‘lAøhÉ.ã÷QXæÇOV ·ºÆé¡„èwb†™4LÕÒ‡5.%A['¹…\9 <µ;W±<¤ëV„L†GD`ÛËÑMÆW¥Ô{(ÛôóJƒ^©ûÞçECjñ] ¹]ËO.‰×ñ » +¯F'_DÚŽÈÖMº“,~qni%3S#×—¿…oC\¥~i÷N’X”(æzš“”=%Áf`•á’­Ž¥„.f4ã E™ÌBh6ƒp5çæs¾ã™=ýO\oqXÐÙ›o ® ìJÞ±?4f̦bŒü¿Ø ëg¯°0Œ&ì9«÷¶Ú-¤x1ÑäÉplüå6t­èaü!"FŒbñ‚—ŒÊýëÈÛ%¶$[zg›hI?ˆ¬qœ{Ò³ˆµÂ`ÿâ¾C¥¡p§ù¯~ÚLª$Ë e?Gm_Äà (Í>½´ü±?†µú£ÜïN}ï)u†iN¸U?rüÛß‚>”U9½o™ÎøØaóÀžYeøtT>Ÿ`ý1ºÊendstream endobj -1239 0 obj << +1279 0 obj << /Type /Page -/Contents 1240 0 R -/Resources 1238 0 R +/Contents 1280 0 R +/Resources 1278 0 R /MediaBox [0 0 595.2756 841.8898] -/Parent 1218 0 R -/Annots [ 1242 0 R 1243 0 R ] +/Parent 1258 0 R +/Annots [ 1282 0 R 1283 0 R ] >> endobj -1242 0 obj << +1282 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] -/Rect [213.0783 523.2777 261.825 534.0621] +/Rect [213.0783 447.9822 261.825 458.7666] /Subtype /Link /A << /S /GoTo /D (dynamic_update_security) >> >> endobj -1243 0 obj << +1283 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] -/Rect [398.1622 402.1714 446.9089 414.231] +/Rect [398.1622 324.1411 446.9089 336.2007] /Subtype /Link /A << /S /GoTo /D (dynamic_update_security) >> >> endobj -1241 0 obj << -/D [1239 0 R /XYZ 85.0394 794.5015 null] +1281 0 obj << +/D [1279 0 R /XYZ 85.0394 794.5015 null] >> endobj 366 0 obj << -/D [1239 0 R /XYZ 85.0394 237.7961 null] +/D [1279 0 R /XYZ 85.0394 152.4569 null] >> endobj -1244 0 obj << -/D [1239 0 R /XYZ 85.0394 215.2797 null] +1284 0 obj << +/D [1279 0 R /XYZ 85.0394 127.9318 null] >> endobj -1238 0 obj << -/Font << /F37 747 0 R /F21 658 0 R /F23 682 0 R /F48 885 0 R /F39 863 0 R >> +1278 0 obj << +/Font << /F37 779 0 R /F23 714 0 R /F63 1038 0 R /F62 1035 0 R /F21 690 0 R /F48 925 0 R /F41 910 0 R >> +/XObject << /Im2 1024 0 R >> /ProcSet [ /PDF /Text ] >> endobj -1248 0 obj << -/Length 2570 -/Filter /FlateDecode ->> -stream -xÚ­]sÛ6òÝ¿B÷Tù&DñIÉ““89u7u|ssÓö–(‹‰TEÊ®çæþ{w±ER”í^nôh±Xì.ö?111‹­´“Äjf¸0“ùæŒOî`íã™ð8Q@ŠºXooξÿ ’‰e6–ñäfÙ¡•2ž¦br³øe3ÉΟ¾ûéêÃìã?¯/Î=½™ýtuIçf?^ÒìãõŧO×ç‘H˜¾ûÇÅç›ËkZŠ=·³«÷±4œ z}ùáòúòêÝåùo7?œ]Þ´²tå\¡ ¿ŸýòŸ,@ìÎ8S65“øÙ°VN6gÚ(f´R²>ûrösK°³ê¶ŽêOp&U,G(Õ˜e±‚%TàÍ*G!UtP…e<Öè#ꨛ¼Œª2º=ò®P¹Ú6EU‚ž4Ÿ5ŒÊN÷u¾ HS¤ÞæóbùèÀá—M¾[fóÜïËÊE Ûj×Ô ‡<¬Šs1¯´ê|wŸïh×C±^”D!è²Ú¡4 6Ãâ$I'‘Ì#E9¯6EyG7þû>ߎ-ƒ¤Ë†fûºÅ˜}¾3Bz|IÁTª¬#ô¯è´€ƒÖXÿ9bÎAâÇ74ûÃM";2ÓÑ—õh\¾É…$§…œº$SÌ÷kP ûOzEŒŽÞÐJqqž•4ÉÖuEX·9A:q$UîÑãBÊBO¡ýuNÛœnŸ÷ØÀ»qÇ`8*àuÜ”ŸpÏ®*¼bë¥ t${Eú{ç­hM pÔŽ«8ö”é‚`²Èë‚vzÂdÆß%MÖoÈðFoìÓ~Ý`t#aSCØ„@õâ°™ˆ™Â¦çÎ]§ã+>_ (%[=þ‘¡í¿I®‘M˜Ò*í3ÞãÇe÷ãtÿfì7’sáLH¥{Äþ&9¯·éë×ß+ùfü„ãŠB)¦”¥ØG…’â¢fv»FƒäÚ[&Kç~jm Î,F¬!Ä(‚8ËCpAïK°6ô%XÄ0ûP4+@@¬°#½¸F«ÎÎ1p¢‹ÜEVÏÕHp'…5^}ÂjgÑ!Þp6à ‘(²àbá!.…:@I£S®li3ú×´Ô»„Å-­/»5’ʟ㔈Pr_œ¹j(6´£ZÆüèæÜÊiE¶¼É¾æC Ì©N0ÂÙøÌc8Ýj¨}OÅp ç«ß“RVeþìw¶ lÄ)Yjõÿ"q¬ÝO*зߦJ6" 4{Ðvqh›µfq,eÛ èÇÀN8èìgh[<á‹C¡?¢Cθª Žêˆ£ mÆò¬ü®¡…¯eõ0ÀÍÊúp©×Ã=ý…ªöªJŒ«iT« €Ìâ–ŠR B}ÌiùU†‚ÆWÁ”®ËŠêj¿›ç#òF»Ÿ1ÛûÄhû -ZŦ_³â -Řøˆ8Ôá"ŒbLê½Ëñ°è›GH#±I( BÛS:l×S"vEʘ¯šÅâpŠÀIØ|¨šÄ¿®jÆ-?4Ã]Ëgt`#™W3žªãnr@V%L§"x_QP‚¾Oã1þ>ÆãÚÎ0~fàH»¢þê4*Š*G—ÆÛ7EÓ‡’ºp±ŸFmö™Vúí ð”±PÂcèMgvuñþýõ°=y™T`^J–pØù­íiK1ê’¤—žÞ¤šI©ÅádWð^ý{¬;•,¶:>h•RF¤ ´ÂÒ ^E|8³ H0úIŸ²„3Ëu0Ðt ™,Iâø)ë€Îœ§üióP)o wGì9C€ñ`Ê7ºÜV•—ÆUµ0îÀ·«—¬ÜîŠûbßAKâêU·… `ú¤.¾äv¢Í—š+·°1òjWš%Jx-ž9ŽE‡]¤6¤«W#f0GðzÉtLÕ¦`<­‘cÔ})LOÑÝo”Ü À}6ƶПÔQ%îtºÆì"­©[¤U*&4p>°RºWe,J“bgŽ±ýnÅ*>õú ¶fMÜ -~_‹è^GûÅö´®dP?©+É´¶O6þ d[¡hÔy‚l®ß4á•!”ym(Dï1·º„…KÓW¦Xߎ-Ýç.ã®óyÓ>qÎó]“¾bqûÎèæÐþ-3hÒ|‰D!6ý|ý×ËØÔ·2ÉDH°^ip )B™C˜1: í»ŽÓL;² ä’¸»‰º¯H$PL´3L™ÇìiP*>¿;zúwú)îô îô»ÞwXpRˤNãß)êb'‹ðY Å -é8êô^ˆ±ì´@éIZ¬&ú‘ªÙTßãâÒ7¡RËð°/]Cá&.fÃèëFÈw¾ C ²ìÌ¢ý[¿ê­s°KwÑ4 õþ¡nxá(×áê£8e;i—àP©g첃õ„]¬§2WÏ2 dÝÝ9j™k„že¨\áÚû||i¿_ÁUQZrÍthã|eâ¤o«¶%>8û“žÖ/d¨$xF¿¬'ô°^”Á{Š¶P¨VŸd§Åá§WrÁ„æ¢ÏÐAÑRyEäZBE½LÝó Â6E¹or÷ì mx 8˜´²Ñ_E0«WÕ~½ ù­G&žÓàk3ÅŽÑ|Ð8fí[&6 eþptï”FóExßöâ…ñöD"±SŸ™¡øÁoÃ#ZçmîùæOЇïó+ìôÔõ%)tx@Ä3…ª1úØ€ý·êcÖÿ¨æendstream +1288 0 obj << +/Length 2741 +/Filter /FlateDecode +>> +stream +xÚ­]sÛ¸ñÝ¿B}ªÜ |’Dòä$öÕ7_Îq§Ó¹»Z¢-NdR'Jöe:ýïÝÅIQ²Ótô@p±Xì.ö”˜pø‰‰IYj¥dV3Ã…™ÌNøäæ~8' HIëÝÍÉë •M,³©L'7wZ9ãy.&7ó_§)“ì(ðéûŸ¯..øÇõÙi¦§7—?_&ÒðéÅåOç4úáúìãdzëÓDäFLßÿýìÓÍù5M¥žÆ»Ë«±ô8@ôúüâüúüêýùéï7?žœßDYºò +®P?N~ýOæ ö'œ)››É¼p&¬•“‡m3Z©Yž|>ù%ì̺¥£úœI•Êj1¦@cYª¤r +\Ví¦¬“¦>MRΧÿ¦‡a)ËXþ–Þþóå„Í!˜5FŽ­\5ë „TºGí/NI1íÉÁÛk‘öh¿¾vvœÂN +dÊ¥v;=UË%(Ž ¬‹Ûe‰c5Ý,JÖѵåú±\ùBñ…£r×x”HáòÍóùúTäÓ²mýÒÃ+|³Ó¢ž¢M2#¬¹#HQ I‹i÷µ>³EU—dhUMϺÜÐtGƒÍ¢ð ªõ8͵Í"õœ)™õË»€ìÕÞ5)Yn5,éïþùh@Ìrë1íªœU¿q.Ëù«À¤—# Œýiˆ¶ qãŸ^¥0rÇÕ™)²ªÞ”ë»bV¶$b’–e@HR2ìRï@DaOõžŒÉc:"&:ŒP¹Ym*Ç‹ö:WvºmË9A6 Aœî¾z “_wY&,²¤ˆ”»%XØäiQŠél1 u «¼.uG—EwŠÉÀ~³,F!³ªgÍCUß“2ÿØ–ëª 'XÖ^ùÛ6b\~zL¶Dþç¢ôÆÑ 3‹ó1 ¨¿wø.e§^žu- +ù´ð›p¸½³Œ¥\³DÇC§„h‘K«<¤\°\CyA–Ìæy>¢“H1é’Ü¿"³,ÏßíLþ¾#0)1¤ %þLFŠÏ0 8LraûL¢u›4ÌfiîNqµ{:=׃ˆžj%^ìzÒʬçzTDê­#8Ƽ)½iPÐ-8OUà KVźØPàMdj™’ýÜ6³/.ܪÜ{5ï¹!ŒÐh}š^ûq^y[UÙ´ò´<‹0"E1í‰Ýù ž\³*QrBxm¿‚ºh¼(<²n¶÷ž¯³O—s»r1´—ZDç€ ‘y!r>ý½l!ö+a8~ð¹!¼YSÃꇖ N-½¾xO¥­êæÈޜѶPcÍN/k¤p"÷Ê$2‡––R†´!?wù…€7ŸNÑó±ìÙ9·Ÿ¥Œ‰‰¨J6µ ¤T”ÃãjYn<:)&‚b´§J/Ë¢y*Ñ !·{HÜó¶\ÍݲÜ'œïDl©ˆPÑŽ ¶Ë÷´5æñ$’ IN #áj„€ñoªÙv +tï¤WÄèè ­'gXÁà X¶ aÝ–égzØ×*89 =…Ö·%-sBºuÞcwîăa«€×qS~À=»ªðþÙ/B|Ù°“ÌW%ôzï­hI‹…†¯ž%p¼”0ó²­h¥'L†Ñ)À¼„ùÛ¯Ã"ÈÞè‰}Ü.7ÝHØÔ6!P½8lf""SØôܹãt|•!Å—sôMRÔãŸÚþ«‘äšØŒ)­ò~¦îñÓ­ù;ùþíX,Ú_x¬œ‹7óÛüÍ›×J¾ßá%=„â&öŠûÔC (Ú(@YŒXC¥q–‡à‚Þ—`nèK0‰aö©Ú,<±Ä +ŒôâÍ:;ÇÀ‰.pY=W#~A< +k¼ú„Õ΢B¼áhÀ"QdÁÉÊC\ +u€šžNM8³¢Åè_ÒTïd´—D_vs$•ßÇ)¡ä¾8rÕPùlhGµŒùÑÍ©•Ó†lù¡øRiCb»4Ö…¸S Åï¡8t¬ü}ÆAê¦.¿Á~ÿ‡Æíå!bǾµûU²i¨“SÁ¡ŸSši•eñ¦G@CvÂAg¿@ßâ Ÿí +ý}B‰j$Ð +:TAÕGáʳú¯šøR7OÜ¢nŸ—š=\SÐ+ôP­/PUf\M£¢‚<2‹KJ-õ1'ò1ª e5SêËJÚf»ž•#ò&»Ÿ1ãyb4J}­RÓ¯Yq†b |ÄjqF1íÖåx˜ôÝ#¤‘Ôd”F!6•Û5•ˆÝ²æ«&E±…x œ*pï*f ¥«šqËÝp×òXÆHæÕŒçj¿›Uƒ6Iï.Cö)Aߧñcqmg? p¤uÕ~qE•#<—¦ÛªÍ†<”Ô…“ý4‚hîj+^Cw %<…þÑq.¯Î>|¸¶§ /“ +ÌKfÐm*è¿·=“.IמöÏ$×LJ¸Í¼WÿëN%K­NwZ¥”‘hqUš¼ï%>œÙŒ +$xúI²àÀr $4]C&˲4=fЙóœ7•óh¸kbϬò—S,J“cgŽ±ý~뛌Å*=tý ¶fMlªyò¨“í|uXW‚q𴣺’u¼ödÓo „¢Qç ²¹~Ó„kV„P浡}ÄÜBê +.M_]˜b};vçV8pwYÎ6ñŽsV®7EÕ¹‚n}gt³kÿî +hÒ|‰D!¶|óüõg/cSß²Ë$áÊ«` ¤ev`ÄèLÄ{ ¦™gvd^Èeiwu_‰ÈSí Sæ>{”Š–=}ˆ;}Œ;}€;½ã®÷ &… IÓ¦âÀ/BJºXûÉ"|ðŠX! íGÞ 1$~X'Žó±F˜èG¨f3P}‹óð!KËp³/]Cá.fÃÓ×ïÂw"ËÎ> endobj -1249 0 obj << -/D [1247 0 R /XYZ 56.6929 794.5015 null] +1289 0 obj << +/D [1287 0 R /XYZ 56.6929 794.5015 null] >> endobj 370 0 obj << -/D [1247 0 R /XYZ 56.6929 388.1985 null] +/D [1287 0 R /XYZ 56.6929 335.0859 null] >> endobj -1250 0 obj << -/D [1247 0 R /XYZ 56.6929 358.3469 null] +1290 0 obj << +/D [1287 0 R /XYZ 56.6929 309.7244 null] >> endobj -1246 0 obj << -/Font << /F37 747 0 R /F23 682 0 R /F21 658 0 R /F39 863 0 R >> +1286 0 obj << +/Font << /F37 779 0 R /F41 910 0 R /F23 714 0 R /F21 690 0 R >> /ProcSet [ /PDF /Text ] >> endobj -1253 0 obj << -/Length 2610 +1293 0 obj << +/Length 2523 /Filter /FlateDecode >> stream -xÚÝZÝsÛ6÷_¡·R3%Š/‚Äcš89w®NÎQ§Ókû@K´Å E*"e×ýëo P¤BɹKn™p.€ÝÅo¿(‹‡b–%Œ+«g©Õ,á"™-7|vïÞ\ϦxÈõýââ»×*Yf4³ÅÝ`¯Œñ,³Åê×èåß^¼[\ÞÌc™ðÈ°yœ}uýŠf,=^¾½~}õ槛óTG‹«·×4}sùúòæòúåå<Y"`½ô;œXðúêï—D½¹yñã/næ¿/~¸¸\ôº õ\¡"/~ýÏV öœ)›%³Gp&¬•³Í…NK´Ra¦ºxñ~ÃÁ[·tÊ~=HÆOÄg+$³6ÑÓÇr¸ÅŒVöô^´ŽÃ^ž +Æ[®×•$òp½RÍ„`æð~-g©€kM“îÜÐý^£…§e‰Ñg‰’ ¹ãx;ˆð¿Œ.ïöÔDKáœLIg™ÙÇ™`\[«ˆi@;]6pß]mäìUÍJ…ãáÎN)#˜2e<Õ €âÀ¦Ä‹u1µÔQ¾Z튶ŊÚm±,ã\+z[Öôì€ÝÁ¨áÎJ3f÷Vø¸/v€b=Åm³ßÍ%–aÙP “2©t°]³íÊÆSz9ömàn®xÔìhpÛtk¢~zõŽ8óz…'ì8Ø8‹ûëD5_ŸÌt-‰Ê¢Ãã[œ6Ñ- -¹ïp8%óÖÈ#?Ÿo·.szòì Í8Ypâø ðceÔ hçêsTòɺ;xЄ@˜ÃÛ4‹vs°/(Ýlh¼¯·~χ²*îÑl8ÝkÀŽÑ¨mÊ ˆ5z—9ºqbŇñÅ®/ ÓÜ~½RÃL -Øû|MÊSa$É$ø”°Ï„£ÁÆBÕ0bè*ãÿ…02ÜùL1B1¥ëD~ßT¹ àVG€&ˆDçtDáyÀv4³j -Ï_7í~;p<7St]Yßà µänbËÒÓ}ôÂA+p€^7r# -m³D—ÿ€ÿwÓS.2¼å/Îÿ¿‹éNÿ;šú§\Dc´àÏfÚDƒ•2_ÓEð3K–ùº.2ÜùŒ‹$\c2"¿_”óªm&²¨  €ìvyÝÞa”/\=ŸJS(¶´ k}2<ÎÒ¼:õ,àmåÝsù°ÂUâWœvá h¾¾{Œq(¹>ÀPLÔóµ‚. KpaXŠµ çÑ?›º ‚{1–È]P±kX Û‘S&z܈zeL´Î["6År×e»ñc,°ð¹­rӀĺB™4ºË—å\@Ììò® ©?(Ž©— )Ò!“ˆªÜ”ÛøC(„"û¦Ùמ±¹ó š|E§të¼›Šƒ3Ñ^d$ñ|RDûÔvÅ ò"ÌÞ5UÕ<ºˆîV¹ÊÏï†E֓ߥ¡çŸ½áû“?cÆO Œ(ðc­nîîËåç0ny¦…ï ¿IMkAż¦ '½ú^Ô«»É6£öaMŒ ‰D„,3öˆ#'І©N§ë€×DZ©[°Lè^“g é:M’1ä`÷à-Î`þÒ «M;¾…ÛµÈV@…è†tÝ|Û…\—w‡Á„ms^”žkB–1¶,Ó08æí¾óàŠÄgr,M- ‡¡Jº"@BÑÊq»hET¨§SŽê¯wPôJn¸d(ËÎí¸ôûËD+PÂYñ ¤\g ¸NG«IHA‰ùà¼(=ׄ,cHáGÅôH˜¤Rœâ‡x´‹WðœˆW°ÐÅ+°Ek]¼âb¯x€R.^q/g0ÃRˆbc€Á&‘˜ ‘Ð⹘5à:°Àå*öbWæUŒ?=Å;üìs ,ÙĖç¬=ׄ #`™„ɪª‘ï«ü­¦ä¡a–ª)0½1›U¹Ì+×Â;'1½ÜämçLÖKjƒáé>h¬ˆ¡q¿½ÁdyG>4ÒÙeî¬÷›[ÿÅmC“£Ô¡Ô"l­IæÌFø}íÞ¡LK]æË5Í·û@aÜSoTNº~?å¿’ÉŒ>œàœÿ¶«úIËyœêè¿[]tÍî nózõX®º5›ú°˜[èL’¾ûh‡dø1æz)€vR`‘v$^ü¹›^)ŸlÙíé E»ûã×ø­qé7D Ñ dé¿YÀ u-4U™÷9à&7›P͉ËOuÚø¥Ôúå)èá5M4öbÔš£ÞBD.1rü¦Ð˜/á.üçùÜB–CˆàYÄÄ=hÏEè ¹C}˜Z6õŠQ/» Ý@q®Xæêƒ,'c›äìÔßl¨„áQL85ï<ùâ¿ç|O™Ê²U²â†eÒ¦A(Ô'IŽ%OTÆ’L¦¢ÿ ®…”ãendstream +xÚÝZÝsÛ6÷_¡·R3%Š/‚Äcš89w®NÎQçæ®í-Ñ'©ˆ”}î_»X€"eJn/¹¹›Nf¸À~à· ,fþ‰Y–0®¬ž¥V³„‹d¶Ü\ðÙ=¼{w![Ù?\p¦l–ÌaÀ™°VÎ6:Q,ÑJ…™êâãÅßú oÝÒ)ÿõ<±Î˜°Çï+$³6ÑÓb9œŠbF+{z/ZÇa/O†ã­ÇkŒdFeº?^©fB0›$Ï×r– +8ÖT)Æq +Ž÷ì-KŒÈ'8K”ÅÇûylD´€ÿety|°¥F˜,cVd(xöy&×Ö*âÐÎÒƒÜÄwW9{Ó€=³Iaßx°±³ÈÈ`…LOµœ¥<.k‹u1µÔQ¾Z튶ŊÚm±,á\+z[Öôì€ÝùÀ¨áÖJ3ƒ;’>ï‹`˜GOqÛìwsÉ£eX6ÔȤL*\×l»²ñbJ¯Ç¾ +ÜÍš n›nMÔOo>g^¯PÂ,–\° ð7‹é0)0¯Of:è–DeÑÎáñ-N›è•Üw8Hœ‘ŽyëòÈÏçÛm…ËÜ»¦®ž<{C3Nœ8–Q¬Œ:¡í\="cŽF>y`»³ˆKƒ9¼M³h7ÿ‚Ñ͆Æûzë÷|(«â݆ӽìŒÚ¦8Æa|Yha'ÖØY|H_øÒ0¥ê«ì•fR™üKi…9™D’ÄBöçâ…$b$xF»¯˜E’4c*ËÔ×O#ÃÏ䑨DS€}lªÜð«2ÅL‰ÁéˆÂó@íhfÕž¿n:"Úývxn¦èº²¾‡Aj):Ý,ä–¥§ûì…ƒ>Wà£n"ŒÚf‰!ÿ ÿ+:¦§BdxÊ_œÿÿÌ¡þˆ¥n…>"Ú ¶Õ ’(]FÍÑ©fÿð8ì{&8t&XšiCÁQ”Žóªm&ê§è!ãëvyÝÞa~/\í<_DÓ„)mÂZ_ë³…xN= ÄYy÷Re”p•ø§cp¶_†–¯cB‡rè㥘è㵄¾!ƒn-ÆÖ[–bÃyôϦ.¨Ñ^Ì…‘; b×p¶£p4iJíõþʘh·DlŠå:¯ËvãÇØZás[å.›‰…2it—/˹€lÙå]AS¿9US¯…RŽ’%U¹);ÿ¶ñB(y"û¦Ùמ±¹ó š|ERºuÞMeÍLô†WI€Oê€hŸÚ®Ø`ë@^„Ù»¦ªšG—ËÝ*×óùÝ°½zò»4ôü­w|/ù3ý9d•À™¥˜Ï/už)rCÏåb +‚6¦¨9–¯´úá=ׄôqm™L“#ño +lÄkW&e†ýŸ’it_5·yESUÙvD¹“„·W<3”ŹÈ"(a}`©óMA3m±{ Iò´–Vú&.Çеg¸~¿¸zû¢7 !¿/Z߃C¾‘zCì<®‹ºxpu®´h¤ð;¯Þšf—Íö‰(¤€å=ð95ð +áZ¬¾Å2Ÿù(r@I÷Q v9Ø +ô[±"Ž°~$ï/éúã8¨å!Õ—{®˜±VP”Ö¨Ÿ´4ÝÜèch!SQ‰@¢k&df’e2Q}»0! *°`ràª\öq³ÓÀÙ:àõylê,º·äÈa¾L’1ä`÷-ÎaþàrøtË·¡j‘¯€ +Ù é>»ù¶ µ.ïuê¸Ô­Š»|_y†²=*ÅfÛùbçÕêžðÚ—¾à‘F»±,sJmað‹“õ€Ï¶Ìgëáët=ì¹ÐW›ü_q(Çx¼qWnŠ¸¬ŸGð´•FŸ×¤çšPe9ˆËÓl¬ËU} }Œ»]êP"€öF™‚LHjºBÂ목ïéŠHÌë@ÑÕUƒ…õ­Ü”õ¾+ü4¡ ©Û §Ømʘ€•‚~Fdãè®!þV¿ Br¶ 2 B¹††½¥oçQnö<äÕ¾ï,3/6쪹:’xMp?S</ iÀuMkM媚F“T7„³šô\ªŒÑ$àN¹x¤ËM¢G“£I :>’€ÆhÅçÖéÞ܇|G³®©=²D,‘8§CoOà‚±—ðàGàu­”ÿ)¸Ì)l‰¶þgЂÌÍdFŸ­OCkÈuZ=×éDÕì»gØÊ4Ó&1çUé¹&tcË2­ƒ#eÞï;.ìH|%ÇÖtp¥‚á0UI×äH([9n—­ˆ +ýaÊQýñšAÅ — eY¹ý“f+¡$“ 4ç!5à:©Àu:[MB +Z$¨çUé¹&tCÊ}S8Ræ)Ťç£|ÅÅ!_íò<'ò,tùŠlÑZ—¯¸ç+à…”ËWÜÁ˹ÄÌ°²Ø`°ÉŸ#gAˆK%^øÖ0`: ¯ÀäÚõbWæUŒ¿=Å;üæsŒ*ÙÄûÎ9ù=ÓsF˜2Rh¨†|¬òô—’‡«2¼ ɦ· c³*—yåîžðΩK/7yÛ¹TÓƒõ’.ÀðtŸ2VÄиßÛ`²¼£ ŸIv™{õ~s뿵áï-Ðû7YkÒ9³~Y»wøÒÒD—ùrMóí>PAY ÷t+*§¼ŸòßÇdFŸLpÎÿ.ÛU½D²r§:úÆïVÝc³ûDƒÛ¼^=–«nͦ>!,æî¤À åÞ}®C2ü s½@;-°=;/þDŠ×])ÂlÙíépE»{qküʸô¢‡èS²ô_+`к»,\§2mÀMvâïT´š)ïøâ¿I|èMñg+9 wÅ \km”B÷'ɱæ‰Ê\ÑÓ Õÿ BAqendstream endobj -1252 0 obj << +1292 0 obj << /Type /Page -/Contents 1253 0 R -/Resources 1251 0 R +/Contents 1293 0 R +/Resources 1291 0 R /MediaBox [0 0 595.2756 841.8898] -/Parent 1255 0 R +/Parent 1295 0 R >> endobj -1254 0 obj << -/D [1252 0 R /XYZ 85.0394 794.5015 null] +1294 0 obj << +/D [1292 0 R /XYZ 85.0394 794.5015 null] >> endobj 374 0 obj << -/D [1252 0 R /XYZ 85.0394 460.4475 null] +/D [1292 0 R /XYZ 85.0394 437.1956 null] >> endobj -1006 0 obj << -/D [1252 0 R /XYZ 85.0394 437.5053 null] +1046 0 obj << +/D [1292 0 R /XYZ 85.0394 414.1392 null] >> endobj -1251 0 obj << -/Font << /F37 747 0 R /F23 682 0 R /F62 995 0 R /F63 998 0 R /F21 658 0 R >> -/XObject << /Im2 984 0 R >> +1291 0 obj << +/Font << /F37 779 0 R /F23 714 0 R /F62 1035 0 R /F63 1038 0 R /F21 690 0 R >> +/XObject << /Im2 1024 0 R >> /ProcSet [ /PDF /Text ] >> endobj -1258 0 obj << -/Length 3287 -/Filter /FlateDecode ->> -stream -xÚ­ÙnãFòÝ_¡·•Q§ïãq2Gv‚Ídvâ`Mò@KÔ˜ˆD:¢dÇùú­êê¦HŠ’=ÈB€ØG±»ºîª¦˜qø‰™±Ìf.hf¸0³åöŠÏ¾ÀÜwW"Á,2ТõíÍÕ7ï•›¬´³›uo-ϸ÷bv³úen™d×°Ÿ¿ùñãûßýüùõµÓó›?~¼^HÃçï?üëµ¾ûüú‡^¾^oÄüÍ?_ºy÷™¦lZãÛßÒH Ç™E?¿{ÿîó»oÞ]ÿvóýÕ»›î,ýó -®ð \ýòŸ­àØß_q¦‚7³Gèp&B³í•6Š­TÙ\ýtõïnÁÞl|uŠ~Úxf¤¶@IÇLg¨,˜€œ²,pÙYŠ)"' ¤q[îªb³øãϲYϬõV=Ù:œî¬z; ©˜ÕB ¶þPÁeÈŒ‘~î_ÁS©ùþ®DLFè[ø¶F|´§ÕLj­xs¿¯š´a[îi?Ü'Žl‹?«íaK£õa{[îh¢YÓز©—‡ÝîZøyYïó2ˆA÷Îqz8ÁK ÆÐQãzJùyF:a^l6Íc¹¢™}CÏÛ’žÍaßî‹zUÕ_ôž&Šú‰_ª‡²¦¹}µ-QÌIÔÄù@UCû’ÍžÀ7Õ¶J«EÄÉtjœ‡SãYx>©ã#)ô‘†DêKÝÑZ›æ,(-ãÁ¨¯`­àÐ쳎/ƒ¡j÷e±BA’rŽ§D<ârÄtÀeWìË„o{¼«–wÄF©¨¬ C>Ò»`$ŽÇ…NAG¤NKòÃizUþʹ¬‘ÑØ=´D@hž¡†•’œRãiq>%ˆsÌiçGÛ¯d$¬µL!.[’>ÔySÒAEê슺]—‘‹u³Û]ÇExLÞE$:¨ ,fEqf¶C4þÛÔÀ L‡PKÝeQSã6ͯ°•˜_zl¨±ªÖx’t ”Ö¾šàœTŽù EæC].GXà”eÜ¡05fJ/˜çà6f šŸÖ›T -ü锂‘ki™@ïÑ—â›i± `/;„Îðr,w‚ëOl¬ñó* -¿’܃AK3I‡<œTuG` äÔ&KˆÏU ÓÛªNज:áC¥'ðrÕ²‰s)Lñ=ž$Òp¢n†Fî,¿ÀqIôú´  j<P@êíÇŸhd[¶mñ%ÞG› -£É 6‡ØX–ýÑ%ɽ’IOs«©3IÐ?À_¿P2ÓÂd{r_,O¸-íˆïQ”•àdµ -Ì)îR¸î- éyß´mu»I U™ŠóôH4b“r(D€/•zˆ… - ¸J»o›Î$C¯ŒzŒFxYGß æ·‡}B.½ÔÔ›'jµ‡ûûf·/WÉXdÄȧ£<‘aSìÁ㊇y]>Òd»)ÊÔŒ"vc¡$øÎ -3ŽG&ðáHˆ0+‡9ÏþLÀèY±qœÓ,0CƒMýX$n€;Ô>œQuØ -íû$Nü§™0¥SäWÂõN´:½ä’¨ -ÏbÓ"ë¹êQ5N ýð™ÄˆÜ&ô¨–q¨i›uúϵ1 C«æ±¥¥êˆèý¾Ž°«r]6G$&Nìt6èçO/Ÿ;½cÜq×7¹c?ÉŒ _mSu¢Ãî‰b…Û_4pè]µZ•uê§gAû´üѠ«E[¥Xäöé…AˆTèQy8!Óf2k»XeñÉXy6ø0ÞUÚ]>úP烪OÜvQÕ'Q߆켸{5±ý êY(8ó`ÿ(€¨Ù]..ª†6æø¬êÛæõ:‘ÿ€V/X‰Ý»ðC+†-ظM»k??Ô5e0HNÀ !æ˜(™ ȶdRîdwº¢¸™?›CIͬ6`Wréñ°ÄiÁ'„!¯õa¡!³þP“>—E”¹ À…+;R’ÌÇqØd0 –}í@ŒÛû2&RÐ<Üã3Åù8äy ­øRÖË4™/& MdE4ÏC$Å>¥uÁ@> GLÆ ´¨ÓÓêxÜò¨`±±iŠÕPi{S˘IañaÑö¼qÈ/•Ï(Pê‚e¨!á!Ñ;-hædÓ·ï &öÊI`Î7D j½l;Yƒ´ä‘i8&©¶z*„à¤B8U· ²¯BzF…Hs<ÎŽ¼?%‘‡ÙªÇ-ÉZ»o³@гüs AOâÿzÌÊȱùXm6C“Ok®1”fäèoò{Go¤ÁqÓ) VFAšÝEV/Rá3R¨!}±Á«ËR؇:/…ÔP -³'«O«RÒ3­•¸ŒE5Æ0‰TLCæ3ă(,x¯4®4ÄSiHð£9ÇÉ"¶z²»w%YÄ¡Ûy"{ƒ÷wÉhF²z9NÖ+!~‚x¤Ê6iÙmKÐÇȉZÉ¥ƒ…FC-C:rè U8 -U8#TRƒÎ[‘Í·œ²Ù,8g{^Añy V8ñ -C±ÇNÀAåý v£Fï”™3ãÝ(À>4ž|†>f£Ï€É.¨GŸ!]ò0kk"‡¾8B~ -††Þ¡·¥HÞÐ; °é3'ˆ‰•OiÈGÕ«\¬é…Ljº—}x5@q¼IÏ‚¦Çh|•ÐØ|"°€âЙTCZ£¬ À‹Ë!CÞß툸ˆÛšv›Þ²]Ïœ6C*ýßB]å$† ò²ìC·‘ÔIYù²<5‘2÷ Ô3XP$^„ÅX˜€hÎ稱+é U+k:ê)1/V«TqÈ`äU²™øL& ce-ʧM­›7Ÿ¨Z\—K,Jµ)ŠàËA0FÚßÕ¨réi]î©ÖäIÃÓì°0“êOù7!¥W½×ÀÈ*Ñp*WåÈÑi2x·_o~: lÓ#Ыa¥^vÕD´©"Wl¢S~ZÛÍ~û‰F0#5,ÕÅúÚÞæ$ízGƒ½"¸=î /ç*D^oõ«ZÒüá~šƒy»’p¨5àÝÄÄIÚ’Ê5©Î'»ü¾¥^d˜ŒÆ;S˜¿'ç¸ÙDD`,;3hfÑÃ&‰´í!K’Á‹{Ü¥ÆP.¥L·Ch^®E,6A»ªëb™ÞùUJ½Ü4íbêF‚D¤,Ð ¶Óv88°ú0QÖþ ÅÍ]4§3@ ¶‡¼fq_;­ê´Ï]Zk¸¶Âµÿ1Y+–a³Ž7V‹Nó'ÊqŽi.ÇaÜe*y`Å‚s=q³¢TŽ ÒŸjx!ô*_¼)´ójMÝK±Ðàò—–ü(fæ:-ÎeÓM¯€Œµ—î‡ÔYš©"Î%³'yi“>ÁÙ1™ã"XU/í¨æš¢‰tk|  Œý4_P7;à‡ŠŠ°#€<“j0“36Ÿ"”Í!Ý:Âp1)à6ä×RD0.­{Ï,sh?ŠÊ«ý]U_ªRiÇœá™Ìñħ;ƒ“³Òel›ÝTÍBkk2r‘>“ëpr{ ë÷a†×es`zPô¾vE¾á±þ¼)O¢/èZ_ iˆ /ù¬B\üJÂOVFÆAØàë³kÑ{ÖJÍüÆp©EÆn! *tF r¨N\×3ï˜tàW¥ÂkSc"‰>öˆh¬‘Ò~«Î@üx½°b~ÿr~ò½…·7@Š¥néË‘Ù3#b´ÇíxÖ# âÀ7¶rö¶Íú‡J /ú+ÇCŽ>ZPZÍ$w »Žßš ZU«dA†¹d† jRye‚ÙT1†‘t -º†‡Ä!ÑI#å~Oª2Ö8J:E;€Á'cõ59É®Ž'Å@£ˆåµäóßñ  u"ƒÚ&ñŽ¬Ïå¿'8 -$ÂVþøqËßkÈ䘙$öŽ;9®{®‚œÎ˜±Åƒ= ¬•ÇË4;ë­Wg S,•H\Tp,ºÊNK‰:}G0‘[QùWY`ðÍÞwÜWǪÔ}ªýuRÓšúÀ¼Þ]L|Ϊ=› ”N¬\æZêÛ2Å$ûÅK2"°L¯{/"ÒAM`2df:H?Då5zbç¥rWÇÏK”³½ -!N®€¡! >IÝœ¼3Œlª6Þ–E¨z*G d¶ûîãŎتüʺ¨6mBzò ±Oè¾¢‚aôÎ×ešù ôt•áÙI¹î‹Ÿ|=öûìN¦Õd©wžèo’wü^B °Gg¾gÃÊ´‡ERxcOEŸãE‘œ@ýÆ=Wendstream +1298 0 obj << +/Length 3384 +/Filter /FlateDecode +>> +stream +xÚ­ZÝoã6Ï_á·s€5+~Iâãv7ÛÛÃu»·MqÀµ}Pl9jK©e'Mÿúû ‡”%YN²haÀâÇÎ÷Œ$g ~rfS‘:åf™3Â&ÒΖۋdv‹¹ï.d€YD EêÛë‹o>èlæ„KU:»^÷öÊE’çrv½úyž +%.±C2÷ç¿ûéËÛËÌ̯?þðér¡l2ÿðñßWÜúîËÛï¿ûår!s+çïþùöóõÕžJÃß~üôžG?ÎlúåêÃÕ—«Oï®.½þ×ÅÕuw—þ}e¢é"¿_üük2[áÚÿºH„v¹=¢“霚m/ŒÕ­ãÈæâÇ‹ÿtöfýÒIúÉD(ª *Ý#`.…uÎÎ2ëDª1ElÖ¸R¢æû»’.ƒ%²·D¥XBh[îªb³øýPîž»bôÏÈ2¡R4÷ûª©ßà)çEÍUõ¾¼-wDÐ0Sµ4#= +d[üQm[îÔ‡í À=DD–P¨Ê°¬-ë=ßG¸¶\6õ +LUlã›Í`ˆÈ­… I)œµÊ#¹*×Åa³gÆzTðT‰8a­™”é,“Vè\egXÁ@‹>sBN‰r„‘—î6:^Ê\¤/œ`&ï³H*-R#õðôÄå¢ +¨|ž{´>#©‰–ù©hÜG‡¦F(cÌ@0øÀ¶ÜóyÌ~ŒÙÑŽý˜ðìǘ»<ìv—2Ÿ3ïý6„A·fXžIAX8î÷Ó:?Š‘Ön^l6Íc¹â™}ÃÏ›’ŸÍaßî‹zUÕ·zÏEýÄÛꡬyn_mK2(™ Ô¤yÇUÃçÉfÏà›j[…Ý< üd¸5ÍãÖt—$^‚ ß#%Í‘ÒöôâFu[7L´–Á¦9 ó(gõW°V&höYëU/‡Pµû²X‘ )hþžñðÈ1Ó‹·'Œo{¼«–wÌFeŒc6Ò\^ m=^‚¯È`h8L¯Ê_’DÕÄhêZ& šg¨‘å‚$_g3“å#‚œ1'©Å„Ð>oNúPçÍI婳+êv]zj,ÖÍn ºŽmŠ²Xçò,Ô»¢‘f&¢ñ¿¦/¤³B-w—ä¨qæ™WÔ +Lñ‹n¬ª5Ý$\¨勵o¦|—ÎDîLô^Àc±Á)Ë,ü¦´”4fJ/DžÀA3Ìšö›T + WÓ)…`16p§(òõ´Ø9ØË¡3¼Ëü{šŸØX›·–°,÷0ha&èPŽû@Uw !à6[Bz®JLo«:€³rz耞àåª÷Ò’˜’÷xH“ä$êv¨ágù¥÷Q|ÅÛàZdTýµÈ€©÷Ÿ~ä‘mÙ¶Åmõ3Ø|cYöG—l$W¼$’žçVSwRÐ?ào^)Ni£=¹/–¿Ü‹–O¤õLÄtp²F ‰rŠ»’Ù÷–‹ð¼oÚ¶ºÙPD`M˜çG ‘˜”C%k¿Vê™KípNß6IF¯ôzLFxYA½oÐó›Ã> 5õæ‰[íáþ¾ÙíËUði ²r¨E7ä†eÈ°)öpÇ´Nܼ.y²Ýehz‡ÝXhßy a¦qÏ„$†A4â‰ÿyÆM)ÅùµCbÔ‰V§—t·ü,6-±>Ñ=ªú ¢=ƒu!õ÷ÕÒ5m³Cÿ½´2´j[Þª. @LÏ^ÈíaÁ5#1q{°3KùnŸ‰$K²¾ÉûIa3÷Õ6Õ8);ìž8V¸ ñEƒKïªÕª¬C?< ~܇íK‹6f7O¯ BÝ mw B¦Í"rÈ´K¿îË-Xy6ø@fIq•y>øèC>:¨>qÛEUŸD |±óÙÓ;¨‰ãQ‡4”üÚáù^I³»\‚:]T6åô¬ê›æàõ?Ù Õ V|÷Îühù°…7rw™ÏuÍ™ ’Ø ‰—Ò­Ž©¨VÈÀ³¡ ëtE'vþPl%7£Ú9”Ë\›(ì2™†¨5Q)÷Çšõ¹,¼ÌMè—D§#%‰|‡M–* +ª¯„q{_úD +ÍÃ==CœO ÏkÅmY/àg- Mb…7Ï€ôÎÁ“bÒ:gÁk•L7hQ§§ÕñºåQÁ|cÓ«¡Òö¦–>“¢â aÑö¬™<νT èCW jHx$z§µ#2‡lúÙã;¨‰ó‡râD–Ùlˆ€× #{Ù8u¢•x¦Ñ *D=V!jõTˆÀY…h«5nd_…ôŒ +±æäBf©rž“ ÏÃhÕ}·@²ÖîÛ(ü,ÿX"è ü_ùÏ95«ÍfhòyÏ5…Ò‚ýu\7(% U¥S ÖV#Íî"«W©ð9)4 +§V/Haê)ŒPC)Œž¬>-L©\£åóXtPh “H- 2Ÿ!La™ôJCè+ƒ¡4$“£9§Ë"µz²è»wY¤¡›y"{ƒõ»`4=Ys5NÖ+~ŽƒsZ\—K*Jµ!Š“ð匑öw5ªXzZ—{®5å¬áavX˜ õ§Îü[Ò«^k`dµF4ÊU1ṙ4¬í×[ÐÄ1=½™ªÔsýݦ¡"Wl¼SA?ìÍzÿ™G(#3,ÕùúÚ>!H8õŽ{Eðôx&Ç*DÜoõ‹U-yþp¿‚æPÞ®.µfz71¸ITF.ׄ:Ÿêòû–{žaÊzpìÌm0ÏÎq³ñˆ`,:34£èQ“Å ­C{ÄRlðüw¡1”K¥ÂÛ!2/—қЦ—»u± k~QÊ,7M»˜º‚D¢6hŽÚá8X}L”þý¢-®ï¼9Ì%ÚâžÅý}Yìx´ªÃ9wa¯áÞšöþÇd­D¦ÂÊ4ºaÿÆjÑiþD9.&Qã‚0@2<°NÂ\}“'²Ö1‚ÒD®QÐ AÐw¨|þMa:¯Ö Ð-ò… Àå/+*ùqÌœ˜@4?M7/ŒµÏ½wÔ Y=;UÄyÎ쩤‹´YŸp@ÁvLŸ ’)véÈ(…h"¼µØc`à€©æ îFüPq;ˆ3¡æ€™è˜©ùÄ@ˆP6‡ðÖÃŤPÀm¨¯¥ˆ‰JÍØ{F™@ÌaòQTöXíïªú¹*•ÉDf“HfãÓ“áäR•u_ì¦jέS‘óô™Ü'É\Œcoà°~fx]6ÓC¢w{ØñHâëÏ›ò$ZˆŸH Êò›®—>à@ˆKߣäÓpÀÈd2`}v/^—`¯ÐŒ+†[-"v ‰PÉæÉ ‡êxµžå™Pü*dlV\ûÔ#¢M‘5¥~ëÎ@üp¹Håüÿj~òe Õ2Ä¡›ã²¾7û}92ÎG{É íïz¤øæãVÍÞ7¸Ñ¬©°ñ¢¿³¿”pôÕ‚6¸'—…Y(l6dU¥¯’!nrs%¬Üäò<e€ÙT>ÆHx ¿†Gƒ âȇ :a¤ÜïYõÐacM£¬S| >{tÖ—r‚]¹Ž2Š"–—*™ÿFdè€Ô‰ šÔ EïÈú\þk‚£AÚÔ%°òÇψþšX#“³(sS©€¥záýµ4¤ÓH—Ÿ«;¨3†lñž„Ö:§×ié¬Âih¡&T¼h— éÊ;-gëü1ÁDŽœ +„æ_e†S’ø®ŠûæXšºE¤?O +[S_9À•Ð Œ‰o¥¦gS"*±Û,±/°®õ ë"&ûÅkÒ"5ôÎ÷YD:¨ L†¼3Â8˜ì*oÉg¡Tîjÿ‰ÎÒ^™&ïѧ8†ž¬óg‘MÕúWfªžJ”%4-í>þxµ7Nu\².ªMžüÁ rݧTÈDïøÎ̈Üi3úPæµQ’κÏ~â;*Aqî+Gm}š8Áµ¤sGù Èã硈/`”Îa]…ɱI@Šî`ÓSÑŸJž¢þ¥<´Uendstream endobj -1257 0 obj << +1297 0 obj << /Type /Page -/Contents 1258 0 R -/Resources 1256 0 R +/Contents 1298 0 R +/Resources 1296 0 R /MediaBox [0 0 595.2756 841.8898] -/Parent 1255 0 R +/Parent 1295 0 R >> endobj -1259 0 obj << -/D [1257 0 R /XYZ 56.6929 794.5015 null] +1299 0 obj << +/D [1297 0 R /XYZ 56.6929 794.5015 null] >> endobj -1256 0 obj << -/Font << /F37 747 0 R /F21 658 0 R /F23 682 0 R /F39 863 0 R /F62 995 0 R >> -/XObject << /Im2 984 0 R >> +1296 0 obj << +/Font << /F37 779 0 R /F23 714 0 R /F21 690 0 R /F41 910 0 R /F62 1035 0 R >> +/XObject << /Im2 1024 0 R >> /ProcSet [ /PDF /Text ] >> endobj -1262 0 obj << +1302 0 obj << /Length 3264 /Filter /FlateDecode >> @@ -4962,2670 +5090,2883 @@ Y$ Ú^!ì<Óä3rô#þ]Ëïà™YŒé;—¡={|áâ…¾*ª÷ÜÀÜ…&›ýòq´p¬¸â a·»4êåCÁÅß^þø¾Rã¡àÆÝóQ2ÞHà¶:¢Âà Òþ#I¾.Þÿn÷Àï!/«©‹/&/|Æþ#¤œ9?B—ÏÁ9ñg‰"„9ºý›ròÁÂoG×.~h`FMU%KõÌôA4´ÊF0Œ¸oÜ1—5*U¬Ð5„Ž>CÉè½ fžòõ>,ëŸ)°ƒÅ QePpœC‡Ám1áÇ*¡HE øKè\ô¾æ7ïâÏ|³]ßOAÔÒv —ü0õèg”&¡Xó›FYw,“ Sh•˜,çXtê‘CÅ:ÉÂk‰‰NŒL•™ªËTœ*‘…§ÀšØvŠ|°kÚj}ÏÒ+Öî¡|ÈïžÛb2AÕ …—Pc<ÙW|ŽJ™$Nd÷rH‡^O§í`-u›ƒ¬æ’ -FèzAc“ÿYnöêäOy¹ÎïÖ<—oê}ÕN©¬Ö"Ý ¿+MUØRÓÔöOœÍ‘|6åÜ:äLV†ÚÒÈÍõQAøï°J Û×8#ÈÈCÂÐæ;¾îvQ-ZÍrWnû¢hÒ‡`r¢®ÒjÊ¿Nž–´Õqš¤j¦”Æκ¯I.ì\jÙqœYžfŽÚBòâ’^pH¦*FÌEùµ¸:Ù$Ɖd´ šÜ=p s;H.;ú G®qÂ×—-Ų7¼ƒzå¸À¢Zšl¤Íé®êN¹¡1;\}™X‹Î±–#$×¼1“bté‘Íû­˜ £} n‡æÐ>…N\IÐ$ì¨Ñ™ ½öl¥„¦†€ÐÄô†÷¹t½èMê`‘–*(üªï¾0‹ò_Kãç…-äðõÁ é<Ì¥Š+Àtü‰°ÑÇŠø$÷H`‘‘ÆÃ& ò]Eµ$vè2•„ë0R6ÍÞ#;¶ò&2°}ÅŠœpÁç¾ü&ξ@K-ñÅî•ŸA†T狶ŽÊG«Šá „P6Y§^‘ÜQMˆEHåðÏŽd/®õP ˆÚt£T)< uybá~³e \ôøHhìê!ªÃ!¤H,Ý«áÁ@1]!xþ\„„BÔÙWÎe@õ¹*¯YÞæÓçW²„—%wT¢Çç’Ä"“v,›ì ¥R.X{ù˜;®ÌPK&-6õŽ ¹6¬ï ÀóâYz=6ZõrúsËäô¹á.¤Eÿý¹ ðÆß3ÇP â$uêè‡L$²·{G[Q/\Uhzô‡o¿/3ظ¥|e®{²OŒAþÒÚl!•¥ŠÕR€kü!¥å%CÞ%Ë.þ\ú×+¯O'£l¦PÔ«îÿ`# z¸ ‚BôC‰ìüÏž: ¿ìà(œc \ÔîwÜZTáà``ßoÓìqʆ5}õ!zl¨óîæs¿ª\Rz žà&tñ9«ÂŒQû*ŸÞG8j‡±Wþ§%ç³ðû="¸Ó¾^Ʊœ>‡œi|Ôp,ø1Ä$ç0$ GÄ"V$àŽö™š¦þÚKÛÿDkâ‹îqø›ÿ¬ÿ39HÍušª39€¼LAáÁJ¡ámr¬¹ÅߥR•L¨þúìendstream +FèzAc“ÿYnöêäOy¹ÎïÖ<—oê}ÕN©¬Ö"Ý ¿+MUØRÓÔöOœÍ‘|6åÜ:äLV†ÚÒÈÍõQAøï°J Û×8#ÈÈCÂÐæ;¾îvQ-ZÍrWnû¢hÒ‡`r¢®ÒjÊ¿Nž–´Õqš¤j¦”Æκ¯I.ì\jÙqœYžfŽÚBòâ’^pH¦*FÌEùµ¸:Ù$Ɖd´ šÜ=p s;H.;ú G®qÂ×—-Ų7¼ƒzå¸À¢Zšl¤Íé®êN¹¡1;\}™X‹Î±–#$×¼1“bté‘Íû­˜ £} n‡æÐ>…N\IÐ$ì¨Ñ™ ½öl¥„¦†€ÐÄô†÷¹t½èMê`‘–*(üªï¾0‹ò_Kãç…-äðõÁ é<Ì¥Š+Àtü‰°ÑÇŠø$÷H`‘‘ÆÃ& ò]Eµ$vè2•„ë0R6ÍÞ#;¶ò&2°}ÅŠœpÁç¾ü&ξ@K-ñÅî•ŸA†T狶ŽÊG«Šá „P6Y§^‘ÜQMˆEHåðÏŽd/®õP ˆÚt£T)< uybá~³e \ôøHhìê!ÅŒ°†Ù½ „Ó‚çÏEH(D}å\T/œK òšåm>}.põ!KxYrG5!z|.I,2iDzɞP*õ炵—¹ãÊ µdÒbSï¸kÃú +áBZôߟ +oü=s *NR§Ž~ÈD" y»w´õÂU…¦Gøöû2ƒ[Ê—Q¦áº' ùÄhä/- ÍRYªX-8±ÆRZ^2ä]²ìâÏ¥½òút2Êf +E½êþ6’ ‡ "(”A?”ÈÎÿ,ì©ÓðËŽòÁ9ÖÀEí~Ç­uAöý6À§lHPÓP¢Ç†:ïn>÷«Ê%%¡Çà nBŸ³*̵¯òéýPq„£vÛqáZr> ¿ß#‚;íëeËésÈ™ÆG ÇÁ‚_C Ar¾CÒpD,bEîàhŸ©Éa꯽´ñO´&.°è‡¿ù/Áú?“ƒÔ\§©:“óÈˬÞ&Çš[ü]*UÉ„êÿºŽÃžendstream endobj -1261 0 obj << +1301 0 obj << /Type /Page -/Contents 1262 0 R -/Resources 1260 0 R +/Contents 1302 0 R +/Resources 1300 0 R /MediaBox [0 0 595.2756 841.8898] -/Parent 1255 0 R -/Annots [ 1266 0 R ] +/Parent 1295 0 R +/Annots [ 1306 0 R ] >> endobj -1266 0 obj << +1306 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [389.4645 200.1599 438.2112 212.2196] /Subtype /Link /A << /S /GoTo /D (configuration_file_elements) >> >> endobj -1263 0 obj << -/D [1261 0 R /XYZ 85.0394 794.5015 null] +1303 0 obj << +/D [1301 0 R /XYZ 85.0394 794.5015 null] >> endobj 378 0 obj << -/D [1261 0 R /XYZ 85.0394 376.6374 null] +/D [1301 0 R /XYZ 85.0394 376.6374 null] >> endobj -1264 0 obj << -/D [1261 0 R /XYZ 85.0394 353.7581 null] +1304 0 obj << +/D [1301 0 R /XYZ 85.0394 353.7581 null] >> endobj 382 0 obj << -/D [1261 0 R /XYZ 85.0394 280.8507 null] +/D [1301 0 R /XYZ 85.0394 280.8507 null] >> endobj -1265 0 obj << -/D [1261 0 R /XYZ 85.0394 255.5006 null] +1305 0 obj << +/D [1301 0 R /XYZ 85.0394 255.5006 null] >> endobj -1260 0 obj << -/Font << /F37 747 0 R /F23 682 0 R /F62 995 0 R /F63 998 0 R /F21 658 0 R /F39 863 0 R >> -/XObject << /Im2 984 0 R >> +1300 0 obj << +/Font << /F37 779 0 R /F23 714 0 R /F62 1035 0 R /F63 1038 0 R /F21 690 0 R /F41 910 0 R >> +/XObject << /Im2 1024 0 R >> /ProcSet [ /PDF /Text ] >> endobj -1269 0 obj << -/Length 3076 -/Filter /FlateDecode ->> -stream -xÚ­ZQ“㶠~ß_á·zgbUEŠš>]®{éf’KºÙ¶ih›{VO–K޽ͯ/@€2eËÞ¦íÜÜ!$ð ¼b–Â?1S:ÑeVΊ2OT*Ôlµ½IgŸ`ì›Á2‹ ´ˆ¥¾~¼ùãYÌʤԙž=>Es™$5FÌ×?Ïu’%·0C:ÿÃÇ÷ßüíáÝm‘Ïïøx»ÈT:ÿpÿÝQß<¼ûþûw· a”˜¿ÿË»ïhHó_ßü3qJz\˜ôáîÃÝÃÝÇ÷w·¿<~{s÷8ì%Þ¯H%nä×›ŸIgkØö·7i"K£f/ð’&¢,³Ùö&W2Q¹”Sßütó×aÂhÔ:y~"M2©³‰Ìdt€F$ª,Õ¬Pe¢% ávnÿìö¸½¯`o²œ/=j^ù§ž¯lCÄòVÌ‘‡Î­‰ê[’ÞÛªãÁ ßîÜÞöUó‰$º×®w[ZÛÞÕU¿9¯«mX²ßX¦ªŽû¶eù­­kÖç•ÆÖîÉêl(S=¿B£ÀÉ,„HJ¥2¿Í×öÂi9©º R†4NXYG<»m 3Û'âmݶݿ÷ÜåëɧãÊE@5°Šˆ¬’Í -Y¢5QÑ­ý²XÙÕÆ-üÉ|lÅüDŠ’Åm³ž˜S˜¤ÌsÉ2{·:ì»êÙ-üÉ,¤‘‰JŽOhUW®é»‰e–Herž­ÝõUÛt„ª›Úur†‘BhPV%ZdÅ¿%¡E,En+¦p¤P‹¦iV»îtÝBÿƒòW× BëŽà’&¹‘z¼î£7³,ÐNÕö°¥—æ°]‚Í=íÝžACÿÒ‡ÏØ;x -ïÀf¾±Ï< iˆZµ Xm+ÌÌR¿Þ -!æÞÅÕQ ö|z©Øv²ŒmWÈ$×GÉx‡Æ{»[O˜" „Öà4MªýñÉüºIc©Ë&¤|$êíêspúxå²Ht¹ºršX9Þ¤H30fªÆKÓ‚?­ -/CÚ[ž^I– ñè>L0Ø×OÆ£Ðr"=.t´¢hÒr2MLª Û#|pn·\$&—"¶ÛÉq/rJkØè#–Cîò¤Ä4Mç?Eº?¸®=ìW¬íwè4S¡¢l¦’ §ÎQfåü©­ëöŇ~™™cÌÀ±ÎõDÔ4+I4Äëà á !Žþ?$0€^‡<½bYÀJwØú5Â,–×°ô-⚧–?\ÓpÕônß@Fy¥wˆæÉcÒºÚ6†õšGˆ“~é“ßEP©"O¤xS‘ÐeH¡Kª/O~Ë‹ºý´˜B——Èež_Õa:Wb„.i’\€ÏÆZ”ª7B -œúP -ik¬ÁOÎGŠÜ>†H/TD"E~„ƒŠ(Vœ^(+Z¥;ÛŒÌM"28”XOÜšñíkccçóÒÆØبQŽùTŸ<• ®ÔõÓ¤ÞÐâ|6*§À=àdÒù?6Žµ¡X|á©’ÌD¢sUŽÃ¥Ýí<6[,cÑÑ‹PÑíܪÂ9| °VÊFλvËR>ÝÆŸµõÚu=3÷¶éì*”¡Àñ ‰Åñ奪™Zò°=ôí‚ÂÊGþQÄ'ôSlÙ¶Ïnýû3·H Œ‚åÿ¯æÊ!†dò:¬2—AÍ2¸Ö¦íúT3}ÕÁ9t ÀÓªó4) -m®-?Èœ­?Ât®’BÁ•=Ràm¦Mlº˜tƒ"‹\¤#2+ÇòLGE·æ;ëN\î@”PY9ê@ÐRþŽ…kÑYnä,ù}íVt®Ö7mü¦ø(àâ—©ÆGA¤ >ÖoØ9†ÇW?*&/ ]b£¦LËëh¥.£}ò–Zí.â’{‘B){uñAjbõñ]Ù$Új¼<¤ÔÎáeÀ9ÐÞK}Šsà Î ôãû™Ù6²y9tÿ<å׊Ú&ÀdÜE—ƒ„mY`WxlÉß‘´u–À½X±<ᆢHJ¸G¾•­A -=­Þ°|$uÅòAjº782~/‡ÂùêúƒÔ„£½feRdF5  ~nâòûØ-Å}àîŽ{Dæ†:¡Hp•®ûÀ9½îËï£L!}šEž<Cuª†Bµ qòªŠM Q9Ú8:ã:! ýg |‡'×-K$‡ ®bµ!߆!0°juütðR ÙKý„é‡ Wby**F²¹û²«B·ßw\„Úþ@T=ÙœèZ*P¹ç‘†Cièl#éïÓ0Ö´Ìp_Vέ}y››ÒWcȶ$v‚,ŠH!œ«¿>Ìså^|ÈÔù’ØCßíj_q!¿s;»·½óÔ¶*»‡îI0BT5p– -¾… þQ™k¨C±YE–Ù÷Q^¼…r0ˆâÖv,uåƒTˆï5”®®Yüzp‡‰Ëvš¸Â]×`šPa\Ì)j3Žt`œc!š´YHÔ»~ãqhŽ²Ãùû˜à[5@l«†#…b7¦äoïŸFq „J|߸šèî°Ûµ{ïç0vYzl×0È}*IÃ÷Þ»/¾eYŽpg0¯_‘ACg¤líad|ß½§ÛkÍc›ö…ˆ­m^‰ò¹‹¥¹‹¦´¬¤|!˜?¿5ñªfÊÿÃî3(,ºõíW _lÅDxñ±Ó Ðm(Žf"ƒ¥¸ÃÉ#K7|·³ýh´9ð ÔçØ¿#¦°ˆëh°vSÜÞJ²BÜü‚¬LUÓÏÊÿ4¸žlLC2*S]„¾´õ¥÷¥tûª]W+ö£/»lÇ]ø{ìàBíÙ]©P -ýå:L#¡Ë( Bôk™³ œí¢âõÏQ -÷G Uöµõ¡säÉEC`‹?ÖÀÃ.Ç_Da}üevO¯d¤ŽM |WQ‚YÇØèÝt;KR(JMävK"}X›ã´ŸÆëT¿ -‰4¡a:\ø-RcÝUœ\³£C=í¢•øÃzˆà\\œ  X"QÁ1ž:¥ç…oŽ ¼„ËLôyfxnûê9Â÷áʘç¥VmŽu¡á>Ü‚g*Fx¦_ѳi‡[mäöáÜNï¾í -®OøkóÅD%R‘óV9K]@ò÷$g÷ýÒÙþ -¸—{U‡AjB‰qI&poÕc-鱄ÌÓ|‘;ôý[Û°ðÖ¢Îm¼×ÃP¥£1a‘gÃ$ø]G¼­Ýöø¶í¦ü]‰”åð»]®´›pdðƒM±“æé TµŽj¯Â„ U”GHxþÊÞKüØľoæákò}û>|óWⶱ˚?}æèôñ‡3ø6@ê´ôÄ(LÅ{Ä…Èó»yj ÊžÔ¥UÑ ²ÐrÈ÷E6°røNCN¹©¹5¡«ÐŒ®Bº€áÑe2BðÉp$v…‰œLù– -Ž+Mö‡ÿ‰á2§üSž À>Àÿù/†ŽN•ƒ#“Mƒ)+ þyƒ JáV•9!ü§EçªÿG)i±endstream +1309 0 obj << +/Length 3094 +/Filter /FlateDecode +>> +stream +xÚ­]“Û¸í}…ßê©U‘”(jú”¤›ëÞ\réfÛ>\ï¶éX,ù,y7¾__€õ±–½“¶“É!$¾¡³þ‰Yª#Ë|–åI”Æ"­v7ñì ¬ýp#˜fˆCª·7z¯²YåZêÙãf°—‰bcÄìqýË\G2º…âù»Ÿ?¾¿ÿáïon³dþxÿóÇÛ…LãùûûŸîúáá͇on¤bþî¯o>=Þ=Ð’æ=ÞÞü arú¹°éÃÝû»‡»ïîn}üñæî±;Ëð¼"Vxßn~ù5ž­áØ?ÞÄ‘ÊM:{†‡8y.g»›$UQš(0åÍ盿uVý«“÷'âH*-'.PªÁ¥yžÎ²4´‚%¼ÀÆžÜ÷G8›ÊçËc‹@:/ü¯ž¯lEÀòVÌÇÆ­ jk¢>Ø¢áÅ@_ïÝÁ¶Eõ…(šSÓº-­mk jŠß­—Å.°l·–¡¢¡Å¶®™~gË’å9ÑÚÚmì±lA‡*Öóû *nf!D”§©ôÇ<ÕG ŽóùsÑl2$9`_Dmáì®>VŒ¬7„Û¹]}8ŽÏØåéÅ«ã Òö$ hE ´"Ag™ÊQ›(èÎ~[¬ìjëþfˆ~¨Å ìD‰œÉmµžØS˜(OÅ4·:šâÉ-üÍ,”Q‘©ßЪ,\Õ6•ŒTjÞ­Þ·E]5äE:µëèÌD” ¡AØ4Šc¥/Ø--†Td¶bÊïJñ¯8–¥k^òÍR°þ*ß@4Áwä.q”¥Ç|½šU†z*vÇ=TÇÝtîao.ð$ômx­ƒ·ðlæ[ûÄËà2A«º­n…™ƒZÊÓ­bîM<í…`˧‡‚u— /Oe*J4ÄQRÞ±òÖîÖj†H¡5ÍE•ê,‰¤IÕu•©.«´£ò‘¨µ«¯Á臜ó,Òä*ç@4ÁyxHËH‹8³¦ {îµ +]Øk~½LâÀmؠӯߌW! æDÜ3ê5‡^4©9G&N ë#¼p®·DD&Qb¨·×½H ¤Z§àûidò4ïr§Ð§ %Æq<ÿ<ýÁ5õñ°biB£™ + e%ì …ìïQÉ|¾©Ë²~ö¡_IÓÇ \k\K@I»EE¸6ì.âèøEr ò‡WL ¾ÒwžGØÅ2K/Wmj~qMËEÕºCåDÏÍ'’Ǥv!µm üª†0L~ø¦O~*Õy”¦É+qrHuÙ©:ªNŠoêEYYL9˜P$T’\££šcäbÊD‰Ã ò¸ÅT®rÅÆ€°œw¸eS—®u¾]$:ñ¥ÇpÙ®Vnßz¥áSµæå/é3¬ z=@…ÒB¬êÝÔ±,Ê¢íbi±÷‘’²¯BÀ"Š4/ÉnÂ¥”ˆT,‡Iûßà/`IÓ¶‰ Ú„8 Ʋî8‹Z¶ð‡Ò²ImŽÕŠî‰ò,ý +Ô˶ å±xÅ–TWl)P]:åK3ŠÓWD¼4¢’×X‚ÏÎÇ‹Ä_þtñ¨”Dˆì•A,8=Pnp7îì0*1‘p)C9iñðeFÀÃà\ý+;ß—ÆÊF‰ŒË/åIbÉ$M¯ßnGõŠç»QQæ‰çÿÜ:–†"ò…¤zRŠH'TFAÓî÷Þ7k,fÑгPÐìݪÀ=|ÐÖËFÍ›zÇT>é_«ËµkZFlÕØU(FãdHÞIŒÏEÉÐ’—í±­wV>þâ>ÝÅ–]ýäÖߟ¿EœaÌÿ•W’ÉH¦2½îØCªËŽÝQ!ÇmÝ´ ¨lÚ¢ÛhàUg¾ÄQ–is]ˆŽjBŠ‘w'i”¥ÐÂĸGýi‚œÎæM"“siˆ„T @_°éA®¹kƒ_<­ö¤(«m˜Q3È%ïûò ê\«ùǺ%;×ÐӧЃ̼ØíK·ƒ½¼%g¨N$dÈ,E¡=Ñ}2Ѹßôtã@ ÙËÀ>×øwD猵Žà–’‘Sõ´èÕ3¬§a¹lmåêcCTät|"*ëúëqߌ*,1*ÆعâÌJ$”ºá.¡ÅÖÊŒ5·t[[¢F8öøÂ@ó!ùfèí@;íí*‡ÂZ„&ëé G—*ÊEœtŽ\äü­[YšÀæ”°܃/";éhÞh²´¸±ÅË¢žJ„N«cMw1B+h2„™¨wÆn/ÄoY ŠÇˆ–1=-Êzyj]»*ÒÐ{ÙüɖǰņPÓÃa°VŒõÙ¤âò4"Ë ’ùhA¬|¿…¼¨ŸFº5b–ü¼v+ºWë8þP|RC?¤U:N>š`cí–í‘#ù° ¤’ò‚Ÿ+-£ð¤×½G&†¦¢p­ZÀ¼lýåOŠQ&S>Á"ÎGˆ¡:N»r5q²ÖÙ8¥a¤£%W2Ì¢ò©~¹ºÄ–@\ËjD~6 K>``Õiÿjg¥³•ú )Òw®8ÄòVT†È¹û¶/ÂäŸ÷\ŠÚöHÐtÁÚÔT¦òü#—*â0åFÐwÕ°VÕŒpßVέ}‘›˜Ü×aˆ¶DN‚(Š¡;{ßDÍSáž}é9Kœ§ï÷¥¯µ߸½=ØÖù¡ J[_º% ªÎ’!ã[hóÿ‹ú\C Š31ò`%?\ôòì5/—XÁ«Ì\÷ò!Õe/ï¨B|/¡huÕâ·£;N´Üqd ‘».AG5!¸–Kiä8’ýçu(Á$ÍBù«Þ·[§íîßÇ?°`WT)R6C@*~÷~3Š9Ôà‡Ê•7Çý¾>øîŸkÀPØɸÚ°“ûT”†§ð­7_|’2Awgg^ŸAKäÎÙÒ»‘ñ3ø–zؒ׶õ3;[ò¹‹©ûÜE[Z–‚B¾ÌßßšpE5eÿáô +‹foý(Àg[ðT|ìôÔ3ÄÑLH`ÅÓN^Yºî½½mèÀ>äÀoH >Çþ} +‹¸†K×0Ä£N€ DÁÍ3daŠ’>YLµÔø™p=9¤†d”Ç:›žQ žQr‡¢^+rìG_vÙ†'ò÷8Í…Ú³¹ä§"r÷•\ÜÓ\öQ¦¡ÏfÎVp±‹‚™Ÿ»h‚rsyGsÆ]½è1Núìy¬jä¼ãOOŒu´€ Úå\@ò´?çâ4ÖóOd(O”ge×)$"DsÓ'4„Ÿëc¹&°Ÿ‘0Ã.s­ÙE3ü€­ÇÆÝòû9~šŸ§DDÒìºÞщgÈušj.²4’IZ…IM"Ýu‹êÈ5†ÊÂLæôSù`ûÅ5CÁ¨ {9+Aºbh PAE å­:—U)TBõ~ëG–†ßÄ«òj€eŠ«€\×ÄÝpNïîÒk<åÏ+ýõl“Ù¼Ì|5aÛÓX˜hÊ“?ãLfsê¾pp=ä?}ôƒkÿ÷Ä"@o-ÓV5gôÎNyê‡5. +… > endobj -1272 0 obj << +1312 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] -/Rect [347.1258 528.4439 404.2417 540.5036] +/Rect [347.1258 523.0755 404.2417 535.1351] /Subtype /Link /A << /S /GoTo /D (journal) >> >> endobj -1270 0 obj << -/D [1268 0 R /XYZ 56.6929 794.5015 null] +1310 0 obj << +/D [1308 0 R /XYZ 56.6929 794.5015 null] >> endobj 386 0 obj << -/D [1268 0 R /XYZ 56.6929 656.9897 null] +/D [1308 0 R /XYZ 56.6929 654.3432 null] >> endobj -1271 0 obj << -/D [1268 0 R /XYZ 56.6929 634.3533 null] +1311 0 obj << +/D [1308 0 R /XYZ 56.6929 630.8121 null] >> endobj 390 0 obj << -/D [1268 0 R /XYZ 56.6929 210.4224 null] +/D [1308 0 R /XYZ 56.6929 200.5802 null] >> endobj -1273 0 obj << -/D [1268 0 R /XYZ 56.6929 185.1361 null] +1313 0 obj << +/D [1308 0 R /XYZ 56.6929 174.3991 null] >> endobj -1267 0 obj << -/Font << /F37 747 0 R /F23 682 0 R /F21 658 0 R /F39 863 0 R >> +1307 0 obj << +/Font << /F37 779 0 R /F23 714 0 R /F21 690 0 R /F41 910 0 R >> /ProcSet [ /PDF /Text ] >> endobj -1276 0 obj << -/Length 2555 -/Filter /FlateDecode ->> -stream -xÚ­Y_sÛ8ϧð½)3•Âÿ’¦OÙ6íeç6½KsO»û Ø´£©,¥’Ü4³sßý‚”%[N»ÓN'‚ @þ4_0øÇ™N˜ÌÕ"ÍU¢׋åöŒ-6Ð÷þŒ{™8Åc©_îÎ.ÞÉt‘'¹fq·éÊ–e|q·ú=zóÏËß]ÝžÇB³È$ç±6,úåúæ-qrú¼ùpóîúýo/ÏSÝ]¸!öíÕ»«Û«›7Wç1Ï4‡ñÂk81àÝõ¿®ˆz{ùÛo—·çÞýzvu7ø2ö—3‰Ž|>ûýO¶XÛ¿ž±Dæ™^,²às‹ì…p˺·íºXÚØQ_ŠêÐmndbø~ÔÜüAæx~9šŸð%×rbÀ݃ÅUÏ£f·-аEOeUy‰êƒ`mû§¦ýD’ƒýÔW•]O”eÏèËÁ"É`Ñs†ŸöÿÀðŒ'\g~Ķ¬w½íLRfÎ|°ˆe -»¨M‹Á“\ká„Wv]ì*0‰ç&*;úFß½&‘ ZÇ.¾–ÛÝiíìt¸Èè»*ž=禙bRLõ—{Ý×kêé¬7¥oH={,ÊsíW{páë²Þ8ïXðŠ¦ßž,šºzÆ)XÔ,—»–˜O¶&Šö ˆeSÿÁ˜ØìÚ¢/›š† §òè~«¦XÙ˜­D]®{ÛhB»ÀhÉ؈ ƒ“¶ÝÛMégBXØ:žú"<6¸“:Z7-Ÿw¶-m‡ ¡­È,êg"jûTyrUvË'æYdWÄðÔQ·æÑI4_ÊI)´Üë(h´oTUó4Ý{‰žvc™e‰P4”ÞA°ö½ñ ;qü`K-¯(þõŠˆp YÔõÍ#Q4“[5lº½Ôlâ7¶û‡¢'ê¡øb‰Ú4µ§Š§âùœs%GAÖG2cD’f'ÂÍîÆR§ãÝ …nw=¸Ûõå²{1â1i¾aÄ 5cÅaÔc<=0ã¦Ø⦳l¯£ã°ú Àž{/]5›CЧBÏ5\("¬Ç8f¤> -r*“špÆÎ(âI¸ÑEšœ'Ã0Br<ÛÇ5lø¸æ ãG`\Ã/Å5¤FqÍ)˜Ä5ÔqÍÁÓz°a\Ã/óP®›€ßýÂN‘}ï­ …=Â#g°Dpýž”¾|ëÖÇóIL6ëCüIyb˜yAc Ë“aÄTU¬‹µJ©ôæ ¸NŒPéÂ0¤‚ÓNÝŒP âN.G)”GÁ‡óØðèþÑÕÑÊ€R)àZÔ†':KN¾ø¼©<—$5¢³ûEpŒ‹ë­X¼mÀ¥ÅØ« 9«v~1Æ9à ÏZ%FBþáÜj i=Ÿ Yß(·•ÝZÀÿÊ3júú|¨ühóUž‚^#£åý± “hÌ!yŒ÷9ßÁiŒƒ„~9jØbÑÁ­&ÅÜ$\ÀÏàF½sA¹ylà4<Ï À®ÐI&¤qÃ/ñ)—T‹¤€ÀwCGì{ëî dÛÏ»¢‚C© §ü€„-I† ˆÌåCÓtÖ«(èS»p‰½{IîN;òðÆ~&ÖšîÚíh´ðY¡3tM§o& í&9J%ûtÛ5ô C’ÝØãn4â^¸ 2´ŒånõgêZVèXú½|ßÙj ͨ!<¼ì FÃÍADz?½AJÁ.⾃¼ŸR¼â“õÖõÌ<NeÒpú‹%L±’9ä¿©œ&«ÖvÝ\¸Tx'(ˆÿ9ÓßU% 8Å/ÂÛiŒÇ*ñ͹Hôbî+úåÑ‘ -Ž@ÆÄO42hü–‘ -ê$“ó©‘žÇ{ÉÓ$•‚‡Ý¨]^˜R¦åÙwž×‡>üÄ=6»G»,‹Šû”+Ö)® -X×pŠ+È%*K‡;làƒªýTEו›ÚzcüD ÷E½´ &5 $FÙôhÝ4u\ÛMá"0øÔ£^ÔŒÔÈ.¨Tó¾èÂ0—‘ —ý—-±›®¤²;Ü"—© ”O´t¥Ép D8Ìö€IàqdÙÍÕAîCH#@=˜ÜöÄÃHƒ,ß— V6’hZWâL´Œ\6->¦Š6ZG—Äß/=HÏ€ïSL‰õÒ\Dí·¦%sÈïU> -Á“Sà Öaòæ%ö{’{)uö³NeÀ,V+Óyiïty å„Ífœ{z(qÆYèz×Òe櫘:ÔDÏ!£Á8DDy@VQ[§Ž•y>½}×øaökùË+Š2Ÿ^Éšj)Åônˆ Üç9§…Lr|°š¸ÎÙEöznMþÁ!)B½žƒü_¤d.¸yM ‰šõ?ÏÎHÇ™/'/ |tçRÛßÌØTusÿ ÎèëŸD´m܉÷€uJk”ÀÒ¿ ð¢FX (5©Åôn‹î Z'øX’Ì­a@©‘Z%#‰F) ÎöÔM&a¿.í£!I "Ȇ*zÀ®‘Få •DNÍÁ`¦35Tù8»Ç>Œ)½îýš‡7|T¶€o|ùN2ˆŽvs(ý†g0ªÑDý¹;õ?/@Û}ªò+\ž×£6øßM9÷Œ+`™ ñ]ï¸\ä¹V/Vt‚ÿÝGdÃ{97©a鉒.gIÊ3¾΃hö3*:Щ8˜ÆÁ‹ì§tAq<Ö4ÝŽnƒp¼—>~µ=ЈV|´K>À†p,Ô¡)’+|lÛrôt<ȼh¡&¿Þô›Žñ°S–U9,M@hEðÁÞfåå ØØU«±\ѶE½mš#?'îL©%å¬Slpñÿ‹îã>»e™8±>Ì@PÉÓÁ*\ Ú®%ä™HçŒÿ?SâŠíendstream +1316 0 obj << +/Length 2512 +/Filter /FlateDecode +>> +stream +xÚ­YÝsÛ6÷_¡{£gBß$&Onâ¤î\;Ç}jû@KÍ E:"ÇíÜÿ~»X€"%ÊI'™ŒC`±Xì?ìÄ þñE¡3&­ZäVešq½XnNØâÆÞðÀ“F¦tÌõÓõÉË·2_ØÌa×둬"cEÁ׫ߓ×?Ÿýçúüê4š%&;MµaÉO—oˆbéóúýåÛ‹w¿]æ*¹¾xIä«ó·çWç—¯ÏOS^hóEpdÂÛ‹ŸSëÝÕÙ¯¿ž]þyýËÉùõ`ËØ^Î$òéä÷?ÙbfÿrÂ2i ½x„˸µb±9QZfZI)õɇ“ÿG£~êÜþiYdºùÌ +9Ú@Π­Ì"×63†pÿ`0A)få:ÙTÍCï: rØ YäÉõ Cå—jó°ÁŽI>—õC W‘DAýUù((Z1)ŽÈ6ÉÅš;×Kß½€o!’¦%ú_mãhdSVMïš²Y:Ü{Ø€”óÌj-¼5ëvKçÓß¹ÎQ'wÔ|¬êšZírù°ÅÃÍŽeLºržgy2 ÙÀ”Ž¹hÇùd#êˆl×åÒ¥¾[¹¯723\=¯BdšQarèÀaµœê@§ª-lýö³Ã=3»Ýê²l¨ÕGÆÆõíö#q&ÐX]u=µ{Bsö6BH0¶T?¾{š<ãº3x8²ðêãé§2‡{¡¢`åÖåC *qk<>ñk}w’„´žáÍmá=žŽðÆ/Á[#xäx£l„7Žxxcáâ=¼YžT§<Ùí$ŽàÆ7Us;Å6¹ºp<…MÚ¦~Â%"Œ=ññÎ5Ô¢3ƒÆ²mþ`LÜ>l˾jš‚”:0ø» ߺ-Wnj+Q$gëÞm÷$¡^ ´dlD‹ÐÁÅÝnÜmVBX¸&»§h"œ¤¦ ‹On[á=•R%¨+Ëæ‰{¬CsUuËæEâVDðÔQæÞs´Ÿ«q)Ô<È(ivèÔuû%ÝŽž¶cY™Pà† ”Á@Ðö½éÀ;1|ïH-/È#•ÍjßIu}{O-ZÉïš÷^ }Çv“×+{jÝ•Ÿƒû»%߉+<–O§œóã>Ï(hÌ<ïóÆ\Ç}ÞÀ…fw=˜ÛõÕ²{Öé1i¾¢ÄÀ5£Å¾Ûc<ßSã²Üࡳb¯oÊa?€#7»noo=B }ÌÅq«!D‹è°ŽX|è㘑úÀÉ©B’k£;#'!Ä‹<ß»O†¡‡ä,:x6 +ÛЉa¡fø° ߶5›„m0 Û Û‡m„§ `óa¾,@¹i#~w;EöMЂ6ö1SÑÖd…‚Ìæò(¼oóyÃ8™fôqY4¬ÐŒ3¦¢Ò¨]ª…΄4“È;œ + ‚ëÌ•/t¡Z(ÂàÚ(N™Y¦%Œ ÞŸ¦†'×ð¿Hζ„JqQK›©¼P¸øâÓ€¤¬•Ä5j{kw»à //6bñ¦›c³¢ät,ÚÛ&Ž€@° ”(Âéx³ZŸÃÉÓ©`‰ js_»ƒ ° +„†¾!E‡–=8}esÈO\Œ÷÷ûŽ 2ÙÌXHÈÓ]ý}€£@e…ÌóçÝ¡²<BÒfa¡ÁMÆD}1õÚ»åö¾…ûð4ã&½°ˆUœ t†×Há S[l +pý:"ß8)ì>=”5\Kå eÄìˆ3ºA$.ïÚ¶sADIŸÆ;LÝqrß‘†1û‰HkŠ¶›ÑlòB¯èš(^ÞLnCÒ;L1,O*˜ÇžPwkA‚$½qÄÇ4¢”¹Š<´Õâú -k4¬ã¿ï\½—fÔPî‡{¨ÑÖ†{Ù? ¥à”Gžßc>¬I^ùÑíÊff§2y¼þåŠR¦TÁ5ä:—{ÉíÖuÝœÃT”™ÌÅ·à[À-~Ý^`:’xˆnÎE¦8Ü·ÈåÃXÙ/ï4„8l +&~œ†QàW4Tà{å =0O+$)x<‡Æç„9eY‹}h}ïAÄc·»w˪¬©³K·Ró伄]ñ¤´†<¢¦¹tMpÀÕ8(:,Uv]uÛ¸ LX²à‹àŒ ’› ’¢bŠ”˶Iw[zç vEñ(|ô-:i$—Ô"‰xSvqšÏÆ…Ïü«-‘îÛ®¢’ü&•®§ tï²ôeÉl Y8ÝÉí‘ã›U7ç'üå…f€xPyÛ } ’ÂX1ha؈ÿ®Ýúòf"ed:iã1ûëkˆ¥ +«TŒ– žÑ¿%ÀAëäŒè»­îhÐCz)±Vš«Fç-†eF‰RÇgeGÎw2cªx9LÜÇîLl°—Ò6ì{]qãTÄrµ¢9]àfÀP’%lŽ€4cÜã]…û0Î@×[ +c¡‚ib=ô³ÉŒc1D­èý +*bë˜À±° "¤¶oãû‘ûRbêò‚¼„âÓ` ŽÂÊø Q!5ÉÿöF ™Y|þ›˜ÎÙËâÕ¨ÿ™A&_ +õjnÇþ&ÁÀó’›WÔ‘(É·þGsÒÙið0—«+w>Š¶Ô1™^â|Å ÄÝ3t8£oxɦõ7ßÖm,«‘ËjüÞóa' ^£"0º)»4EhÈá8°™½<JÄ*™HTJi0¶¿£aRîËÒ݇×àD'‚䨨¢ÇIT^QIÍ©šÀÕôªÆ +W؇9U½Ûóøž1cSíÊø6”^Ûdëè4‡²ox£ú,B4Ü»CPïð㥳ÐöŸº…Ì +·çÕ¨öwDÎ=Š H§ +Í¿)ù†d1³V«g«9Áÿi5‡3öòˆá×.!-—Gj9˲œÆX…Rø(å@¦â ×Ð(rþÃ*¹(8Kž)äDž±\¡yÅœ äÍ2“ÔšÃ;Å4žÈTX ñÈØÆ›•áw‹í© w§õ}Ç@Ó_¿½2|œcDiÚg+CÎD&x®'•¡Œ•a¼Ðä-»À÷a¨1¾Z,’©’¾ïÛÆÿ2"©‘’ºo.?P?ÔuØÜ”O4¸„i´<¾Ï®‰¸SÝ×ÓÚßXN¨ËÖWMDŸyu啈kÝn7ô¼ £å?‘7ã0éaʪ¸ŒëÃë•RáY ©¶ÅÖð’ íqT¢{!ýØ6Ô§buòãL¬Á'£*ñ«S3Žù|&ú×ÿ•ƒl,‡ã$j° Ô9âESø{àÌã(Öwÿì¸Ã°Ê3YG~\’Ìd…°yT +7_Û}͇ß'Uÿ?_aiÃendstream endobj -1275 0 obj << +1315 0 obj << /Type /Page -/Contents 1276 0 R -/Resources 1274 0 R +/Contents 1316 0 R +/Resources 1314 0 R /MediaBox [0 0 595.2756 841.8898] -/Parent 1255 0 R -/Annots [ 1280 0 R ] +/Parent 1295 0 R >> endobj -1280 0 obj << -/Type /Annot -/Border[0 0 0]/H/I/C[1 0 0] -/Rect [242.0197 61.5153 315.2448 73.5749] -/Subtype /Link -/A << /S /GoTo /D (rrset_ordering) >> ->> endobj -1277 0 obj << -/D [1275 0 R /XYZ 85.0394 794.5015 null] +1317 0 obj << +/D [1315 0 R /XYZ 85.0394 794.5015 null] >> endobj 394 0 obj << -/D [1275 0 R /XYZ 85.0394 525.3716 null] +/D [1315 0 R /XYZ 85.0394 505.3557 null] >> endobj -1278 0 obj << -/D [1275 0 R /XYZ 85.0394 500.6989 null] +1318 0 obj << +/D [1315 0 R /XYZ 85.0394 481.5651 null] >> endobj 398 0 obj << -/D [1275 0 R /XYZ 85.0394 129.7873 null] +/D [1315 0 R /XYZ 85.0394 116.3495 null] >> endobj -1279 0 obj << -/D [1275 0 R /XYZ 85.0394 107.5853 null] +1319 0 obj << +/D [1315 0 R /XYZ 85.0394 95.0296 null] >> endobj -1274 0 obj << -/Font << /F37 747 0 R /F21 658 0 R /F23 682 0 R /F62 995 0 R /F39 863 0 R /F63 998 0 R >> -/XObject << /Im2 984 0 R >> +1314 0 obj << +/Font << /F37 779 0 R /F23 714 0 R /F21 690 0 R /F62 1035 0 R /F41 910 0 R /F63 1038 0 R >> +/XObject << /Im2 1024 0 R >> /ProcSet [ /PDF /Text ] >> endobj -1283 0 obj << -/Length 3046 +1322 0 obj << +/Length 3061 /Filter /FlateDecode >> stream -xÚµ]sÛ6òÝ¿BoGÏD ñIpú”æœÖkÒº¾¹‡¶´DÛœJ¤+Rq2ûï·‹]P EÙžK: Àb±XûŠE?±06µ…,y¡S“ ³XmϲÅô}w&g–1Ö·×g¯ß©|Q¤…•vq}ÑriæœX\¯Ml*Ós %o?¼wùÝ¿¯Þœç:¹¾üðþ|)M–¼»ü×Aß]½ùñÇ7WçKáŒHÞ~ÿæ§ë‹+ê²LãÛË÷ÿ¤–‚ŠD¯.Þ]\]¼{qþûõg×ÃZâõŠLáBþ<ûõ÷l±†eÿp–¥ªpfñ•,E!Û3mTj´R¡esöËÙÏÁ¨×•ŸÈR©¬œ Ts4Ejt¡Ë–”‹¤|xØ —´»ºì«WØj“þ¾ì©¿î|Sžì»º¹ã1ÍgÖk?¸êºŠéµ •ý}EÀ¦]•›*e$šºº­¨lV<¦o™PÙÍLÛ¦`c¾o«€à+ÜËRˆ´0Fú56-Χ]Rn60‰vÃ:jZ• kœTÀyÍ]펇Ó0ÆowT]õ›Ï¡©ù-ËäÝž:ÖÈ^V$ÿ¹¯˜tI”W›ºj˜¥0GkÀrƒÀìªÝ°>æ¹èÚ]gVM ryrSQùPínÛݶZSÕ ßY¦ ãY -›Ü”]@n™Ö€LkøGGµhW`ÑZfÉ5IÏõòˆPþÜ׌˔©‘âYšr[×FמXõG®#í/´¿ˆM`*q©ÈóD®ï=m¸%"º%.‡ÕýD ßMÝõŒ_'wM8{¸5[¿­*Ë’ß2“uUE•›jÓ>B‹@±Âæ•àÚ±¶h†åRW†)£lA®SU#[/å"ÏLj -ñ]#ÓÂ97¯i–ÁeD‘´HÌt.•ÐÅmÙ¯î§ *aSí´ûj ŸfPÁê\Ù‡'öP䩲JI7kÚ–ºé«+¥ž·ªîi÷@Ó4Ô²mƒ>ÀZ÷P­j<ÈpkáÀãy‘ÂJ´rã‹ Jo“%åx¼ÿ¸ýºÈ™©¾}h7íÝçîµJ3)äñ DÚëÖ_0+ýY<:=`3láä -ŒÜ%uîî\E6fÀ_ÆŽmÌ1]díP’uË‹F“ ;)äñ‰–°q`½â)Ž¬Ý€õ'GÔ¼…¨–µN.J8³´ íØÜ m"ÍúÉÎQ!Ì‹”†P: n÷] ßwÕæ–N΀Z¦íXå¡W¹D•¥HªO›zU÷3ìXj@}ZpŒ³ÅÂ:‘Z—å_|?ŠË˜äñà˜Ü䇙OêáòÔ)P…_É@ñ9&‹,uÒ©1“§Ôx¤ù` -ëþžöªm*Ú,ô °¡l ¨6þp¡µ´¹ñ¦È#¢ÙᡈBÉïë“Þ–Ÿ ¸á‘t.drù"ad*…«žÈNƒíT`ýý0Sà0_²ÖC>>MPÞ¼ýÞ*{ȯ Ê Ž]׃Çp|"¥ÌR£Ì3&M ¢V­-Ò\óLS\Æ$çl†Im®Ÿ¶j t •»¯Èc øÚ¦…´vÌä©©S~>Ë›|¿a·TV^ù!䕬ü]Ø>–Pšbv”–cvÁË(Áì ò}ÉH7•wòüTk¼,V'õx°dùêÁ¸x"gªà÷(8žÞûË8ÕÇŒcÏj'”ì¾+âYõ{ ”À€ªÞÖ}ý±¢êA‘ˆŒc:lfΩ2ÐÉGˆ‰|„ ˆûnÛR 6 ,}˜æäøfnU´ù²±ÙCÛtÜâÃ@(·íÇIË0覺«›†IÇ|Ôõa™J.§8±É—tî±,©ðmLü‘¹ÊÃ¥‘`s =½ÀŽ{ѹxkKÖ%=±[ö$à<â=R½•wÞ#/=×™z.†#¡ÆÂf -TÊW "˜â2&9E¨Ôå@f@{"ŽQKóõ˜(>Ã$Z¡„3y:”0Z:8ú‹~—æŒa–fBªù÷"©É*üW:¼ŠÙHÅ‚Vèd9=«:Ðçdí ¾gÙuõ]ã#}KZŠ5¬²¤D 66ëƒÿK-#%ŽÔ*CLï1t‘c4BÚÖM½Ýoç欙0Þú0{{Zs˜l¤æÌÊX ÌX‹KÜ5çøºpÛn t÷•ËÁç.·LŽi©(ý…XhjÒIŽUU{®=J¬m©6Œòf&žl’ECbG8÷­7ËqÄàáÇÝUýœˆâ•£X åÜ8ïRè£< ù¨ »|®n©$©BÏSm¸[&Àoô5(ÉÝ>)!×ûêSOx[¿D‰ø ¬!rmXY/çV5f6sÄlòGÐ -Œ5a‡_KM]̪jaù\byÛû cæBÎp«šóŽ™ $ó¤d’œŒzÔÐÓQÅŸþkРñTóIPlïîÛdžÀ G~‡’ÈQÇ(V(ËÛ•ü<LÀŸLÀŽ&ÔJ*ø„)Jázêþð…‘4çò¬a¹ÊäáL-Ì×9›‹àôÈÚCìb7Åäc²ÞÕ0Á"šé~x¢Þ¶šé†P€ä3ÃþAZ¦˜JËŒ®ñ!âai¡gÝP 3V ³kž=DK3(fÊ uºàâ3fÁÂœ9VÓ»Œ -±b½#p]’ؘ1n0æVc‰½~§ŠÈ>Mò©CÚÌj–üå™’ÛàCÈHІW(Àoð2fÐòú5õ\¾ÃWšŒU÷€K ù¶/;¦ ¼wß %Ѿþþâ=A·õ.0{[3€"²<ñIþã{€ôM ïyŽl¶#s§ï7ã&uhúïqI©¢;Tø¤Vìwyr÷ -šh&h¡lMDã l¼‡Ð9Ö†åp>´^ó¿{ß ™Ö]_­ŸtÕò“®š5in”~ÖU›ºW‘žËN>F^N&c%#ÆÜk“:gåðѾ ‚ÊónãÕUW±$>ìÖÕŽ?ˆ8ÖTÒ¤²pÚá¯2,Ä¢ûM_ʉ½í®;B9D£F¿ßqÎÄpîƒ^JÖKþÁn˜ ˜§Ûý†ÚüݵfúÉHß™„yªXzbÍANYŸ¹ó›rå¹Ö -_¹ý§.:|N¢ŽÓ¤îÔWJ¤ lBºk·ƒX¶(üÉ›,5¹,fÞ©aʇj·­ýeFë/ùÁ0ü:¡¸äÀŸÌèc”9QÀ `†‹||Jëfü¼p8 CÊ(ЙK#ùd÷/UxÛØtí!ë4——Å4¡~ÙKq&Þö_eG¥MÁ,¼¾JŠgžñìåýøé|Jsü„ï¿—£ ¨Ž¸)ò´p…Š¸9zÀpžæaB yHO}n§LŠßÈÍÌÞê/þïð"¾ö;'O|wƒç€3åÖÑ÷Ã7{Ǭÿv!<Éendstream +xÚµ]sÛ6òÝ¿BoGÏT ñE‚Ó§4ç4î´IëúæÚ>Ðms*‘ +IÅÉtúßo» @ŠŠ<—t<,€Åb±Xì% ü‰…Iã4—ù"Ëula«íE²x€¹ï/ã,=Ò2ÄúîöâÅk•-ò8Oeº¸½hÙ8±V,n׿Ei,ãK D¯Þ½}}ýýn^^f:º½~÷ör)M½¾þñŠ ïo^þôÓ˛˥°FD¯Þ¼üùöꆦR¦ñÝõÛÓHNÍ ¢7W¯¯n®Þ¾ººüãö‡‹«Ûá,áyE¢ð ï/~û#Y¬áØ?\$±Ê­Y™§Ñí# µ©Iµ—ÂFe×l>€”i¶Y3^÷Øì7ë¯hÛ¢~îÐ77 X•y,б¥qnŒt, e"*v;G¥ÙµÜÖ78š•¢§ùªsCY´ïªú×ÔŸX¯™Õ®dzN¾ÐlšU±!°.=QF¢­Ëû’ÚzÅkú†‰•vf+‚§ù¦y*QB~ãΚŒÏX7¸Ÿ¶Q±Ù +¶£¡UQ°ÆMuœW<Õ´¼œ–1~ÓRwÕo>ù¡ú÷$‘{šX#{Iý÷±dÒQ®†ü^¬Ë°+Ûá|ÌsÑ5m G§&ãH²YtWR»+Ûû¦Ý–kê:áÛ”iÙl² èä]Ñyä†i Èt†uÔ n­eú\u~©“õjú~_1.S¤Fw©‹m9w£ÄªSI0Èt¿Ðý@ 6)OÄÆ"3Ö¹5sÞgª½™Cùnª®Ÿ±q +¬­°é±SIâ «³§Ø¹+7;u+\^ñ'žgŠzŽec›ƒÕ"Ê([ëœ}’JÊEš+°(p¦g¸çÖÚyg³(.C’dËÄÈ–ÙXÂÈ€…\n‹~õ8åQeÕVÛ¯Çã@ñ +®Qg*3yâ&E«T /ïzM—SÕ}Ù²iêùªžîìMM#ÛÆ[ìu»rU¡:ÃÛµ'Ãká,ZÙñóÓŠo*'Ü-*Î3fªovͦyø4ýV18–9_ ´×{f©tyìw +,èqj“ì¬ßeüe¸`ÎïNéŽý.0æý®<Ök 7QL¸ÅŒße¬sœQ ü®Ò:º*@méš¸Ü m"Íê³7&4èQ.̳L‡PÚ#n÷§ßwåæž´F'@-ÑéØð¡-W™DíˆÊ»MµªúvRk@ý¼›æ “âLóÅ/t ¸ I¿PÉLvØù¤6‹­ƒøõ˜ôÏ1™'±•V™3Í Å€ˆˆ¤E¥üŒIž«“ÞŸ¸ã•¤2ºþ™´H ‘¸žÄ|o TA à–™—¹–­òñq‚òòÕ8ßì w.h l,„w]qñFJ™ÄF™3ŽM /XMMgÙóò¨3Nƒ).C’sNÃÄi¦Ÿvl`ts•Ù¯È£§xŽGƹLÓ1“§4RÇ +–7E îÂî©-ñCÈ?Øø9°º‘ÓBè`4‡íê±\ýI· L'_%ùÄFEUwý$ë +‹WÜ”©ÑŠ÷û²ýDà¾î+í +jèZX1ûf_¯'‘Ùûw.£PšÓBv”–cvÁÉ(\Áì òcÁHw¥ rü”k|,©ŽªñbÉòÕƒsq,!#t!îQp¼½‹šq)š™˜Ín(9ˆWijê÷˜6(iUµ­úêCI݃! gv8ÌœSg 3’ùA +ˆûnXÛP > <½ßæäúz.i¡Ë—¹ÏÐvMÝñˆK¡Ý6&#â»ò¡ªkJ#$©ùh>$ê’3]OqB—/Iï±-¨qmLü‰¹ðÆ“¥‘`} =›ÃÀ;ÑÙðj,KÖF=§õ= 8ó„¬L/@…ÇH RÏ4؈3™89H8&`RTþ2 ¦¸ IÎe*¶Ð>“J@¼¨¥ùzLÏ0‰^A(¡ÆLžN%Œ––Žñ¢»¥9g˜Ä‰êYñ½L`ßcÑRøøÕi‡31°™2Ð +ƒ,«gMÆœl=!ö,º®z¨]¾Ÿ’•…f §,¨ƒƒõúÿÒÈȈ#µšZÆÓw S¶U]m÷Û¹=+&Œ¯ÞïÞœ¶&9·263uk¼5kù¹pßl w•Í æ.¶» –È´TTC,ô•Kì‡RǪ¬׎•×¶ÔV97n6©¥!±#œÇƹe€8cpðS…å„Ê~Îâ„'G±æ&¨¼qõ%×GÕ<@sYN¹ŠÜSKR…W­Úð,¶\€»0˜«K0’ퟮ4)×ÛòcOx[wD ø Ú!*nØY/ç.~Ìlb#_Úå¨DŽ¹&Üð ©iŠ9BS-RÖk@,î{*´Z_ùܲâêcbUUOR2I.3j˜áͨã´¶F W§æK¡8Þ=6O5w@â%‘£ŽQ(­P"”·1*úePLÀŸ(&`Š ½‚Ö0E…\GÝ)PIsî$þ¸Êd^' +æú\ÓEpªò†î§8L1Ù˜¬ 5Œ÷ˆfzŽ¨ó­fz!” xų̀ÓAZ&ŸJËŒžñ!ãaiad]Ó3–»kÞÝgK3(fÊ M{Zò3fÎÂœ¹Œé[FƒX±j \W£R6ÖMƒŒÖPb/^ëБM¬çPöX¦Iý嘒Û౑ ÿ" g8P€ßâcL`äÅ š¹~_ë6Ý.NäÚÒÞ»o‘Rо}sõ– ûªõÌÞW  ˆRÞx†Ú#|HßxúŽçÀgà821§mÌh¨¾ßŽ‡Ôaèïã–JEYlÁôÌŠ`Êe.ç$ì¼ÚèÉ|5YVØÓR;+ï}Ç—‹oXÚ-ÈI_Už^nò å&Ÿ-7ù\¹É©ÜÄÿ-7ñÉM}¡ÜԳ妞+7uNnòKä&¿Ln“ ôñf¼Aë îzr$ÃgÞµä,Ȫý`•æœ†çwV49ÉQf¾¬A¨ž†V»9S‡üB®Dg¼]Swï®|,>T.¼rèýþ;)€ä‡âT…†:éÓC:õv0rðv§ã÷±YÚèÚ¶R®:eQWm«MÑÒ «HÏœ1=ÊE‚éI,uÞ“èºL +Fü¯RÒHÇyü‘¹¸ Âx\Fé\ÀÁ ­!h9•7Ažè删þ†àCAàS|p‘ Rò¢¸Ž¨ò±hq$$°†¦YgéŽbCí!©‚N©3×å+`Õp÷Vò÷kåòZh&*aÀ‡˜:¬©€Æ]ŽÜ$¼‚!ÚIúF¨ZPÅ<(ß!LNÓÚñq¸Zù(Žy +¿~ß •Ö¶/ן Õ²“¡Zją̂τSªMëÀÎ%gc±Ð(N6œ™ ÷ÚÄÖ¦røñýrgéÂÆ››®dI¼ÃŸ%ñÏ"Ž-•4±Ì-Îù·)ä¢ûM_ ƉՃ¾í®;B9d£F¿o¹fb¸öA_JzÝ=¹»Ã9¶Kîƒ Ü1pO÷û ¹·›šéïHFöÎDÌSÉvÐÙ”Ôìá”õ™+ÙmŠ•ãZ+üÊí~ð¢ýJÔq™Ôžú­„1ûÜß„™Læ3ß©aË]Ùn+÷X‘Ãù þ` îœÐ\ràÎèc”QÌý^O™d7óþYl_ü[¾Ãñ3±µòÄë œ¿"Ì”Óô£÷ÃþŽYÿó~NJendstream endobj -1282 0 obj << +1321 0 obj << /Type /Page -/Contents 1283 0 R -/Resources 1281 0 R +/Contents 1322 0 R +/Resources 1320 0 R /MediaBox [0 0 595.2756 841.8898] -/Parent 1255 0 R -/Annots [ 1285 0 R 1286 0 R ] +/Parent 1295 0 R +/Annots [ 1324 0 R 1325 0 R ] >> endobj -1285 0 obj << +1324 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] -/Rect [209.702 689.8302 283.4678 701.8898] +/Rect [213.6732 755.8266 286.8984 767.8862] /Subtype /Link -/A << /S /GoTo /D (topology) >> +/A << /S /GoTo /D (rrset_ordering) >> >> endobj -1286 0 obj << +1325 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] -/Rect [325.3322 61.5153 398.9856 73.5749] +/Rect [209.702 677.875 283.4678 689.9346] /Subtype /Link -/A << /S /GoTo /D (the_sortlist_statement) >> +/A << /S /GoTo /D (topology) >> >> endobj -1284 0 obj << -/D [1282 0 R /XYZ 56.6929 794.5015 null] +1323 0 obj << +/D [1321 0 R /XYZ 56.6929 794.5015 null] >> endobj 402 0 obj << -/D [1282 0 R /XYZ 56.6929 132.7054 null] +/D [1321 0 R /XYZ 56.6929 120.7503 null] >> endobj -955 0 obj << -/D [1282 0 R /XYZ 56.6929 104.7571 null] +995 0 obj << +/D [1321 0 R /XYZ 56.6929 92.8019 null] >> endobj -1281 0 obj << -/Font << /F37 747 0 R /F23 682 0 R /F21 658 0 R /F39 863 0 R >> +1320 0 obj << +/Font << /F37 779 0 R /F23 714 0 R /F21 690 0 R /F41 910 0 R >> /ProcSet [ /PDF /Text ] >> endobj -1289 0 obj << -/Length 2668 +1328 0 obj << +/Length 3002 /Filter /FlateDecode >> stream -xÚÅZÝsÛ¸÷_¡ÉÕ)qø&pyòåœÔ7=§õ©\h‰¶9‘HE¤â¸þï]|‘ EÉö%NfB\,vûñ[Ðd†á™)0Ó|–iŽ&b¶ÜœáÙ¼{wF$oþrþ·ÅÅõ<¥'ÍS!qòÓåÕÏnF»Ç›÷Wo/ßýãú|žñdqùþÊM__¼½¸¾¸zs1O‰ÖSÏáÈ‚·—½p£w×ç¿þz~=ÿ¸øåìbÑéëK03Š|>ûðÏV ö/g1­Äì~`D´¦³Í ÎX˜YŸývö÷ŽaôÖ.²Ÿ` - E³ R6e@¡‘dðÊð¼2:%‰(‰4”°7$õnUìÆšjhí¹=CWŠ´RjZÓ´ã˜Æ,á¨F˜ŽÔh¶ÅÒ+«L)âX(¯HÙ¸Ã[¿cL«bå~æ~ú¶^¯ë‡æGÃg–J -`ðJ’!ͨ²>,×yÓ¸Ä`#‰Àoˆß¨£XŒSð[c1NÔZ|»ÅÇ4fi-6Žp8ùŒ÷«|SLYŒ!m<×)òÑYæCû¸-&´fIƒŸ¢XiJ9’Bï§tÇñ ¥)ÍäLƒÖ=ñPkC®=ñ«U½ÉËj¬8/ÕBëï§xÇñ Å6Ø(þjJs”ÊôPóz7'*ñQ?fOUJƹ¡¬î&8§Œ`ãž:„PfW\ÞÎS&tRÕæ©|¬Ø©rN?4ñ\š(-V†%“ö¾p VÅm¾_·~I3™¾ !Ê,„ýùÕ?§SƒÔ<ø.rìœpÊ §Á¥A¤mÑíe_•MDz©#²e qÊÅ3d“§e³ÞmWbŠH08WÄRc/®9^+®K„^\ó#dÇß!¦Ç -<¥‹‘?MˆÍA3Æ=eãbó¦?i>Á˜ '-! 1 %~aA¶uq—¯ÝðK¾Þ]’ÞM§pìi§„È4 îž[?/~pØ(“’ÎbÓ|›¹ÍÁ2À©aò–Aâã'•_ Ìž:A.gR[Õwy¥ê…(b»ÃÑ -€ðlêM q* éfôù6ÍN¿«ÙFJ»£…ýÁ’Ûýzýè Mž1ëŒ7Ú‰Ê=Ý=¦is/‰³xÆ=–û]êòIÆ“L Óɸšmh¡ZÛ›)0ðB˜a³ßnMê5 Ú͘¤fלØ+Ÿãà…/`è±!ÔO ’Ìbwû66±"4ÀØ@ŠÓñÀ0–é…ÃÐÉŒQÍ51‘ˆ°†J¹˜ª“}å;ÎAf€t( ¦¨äÐ$H5}ÿí‰Ò˜ê¸,•‘e …?mÛõáõ,x3OîÜQMl=¸@¤ZûL÷þ­°Ù—ÓÐv±¤Úon\çF“úÖ=(6•ë™©~vr™/ÝjK%¼Y[ãì¾&eµ*—y[Ö•)iX%ØͯÊ&¿Yž«áAC’;Oe®÷¥oò"†)“.]½_LÝaq,õ“ATùº ]+d.5\Á]»Y9Ä€H‘VÝþ¹¦.‚ðàJ´"ØWÕ²Ú·E㶶ũZ*Ø&ÿZnö›èå”8{0žßŠ¨iy Ÿìn¹8ìPt4@’§ƒ ¢:ÊŠ¦•õ¨ÉP‘8ÕúôþÕ„ƒP`Èo Áb®ÁáÁTxïXí—ÆÜ”'UÑ>Ô»Oîe»Ë;D¸tïÝÁQ“M—nmn2Ìl‹àáM^- k ˸å¢àдµGÒî]UÜAÈ|ñ”yÕ<;‡ZFÖLÍý€lèÞ‡æw® -IÒy¥2Ê€÷+7²AÏÆ;3Èœ½CÂœG™P  ¸ýºÒ¦¹.ÀLÝŸóz¸eÕ½{{„—ÜeÈ -«Æ_9ÁmŒÙ¬‹ÙC;A™'}ªxŽ}´ ´·Ïa¸QÝå3ÁÓÑÆ(dg®Šû< -²ÚØsÃûz¿ëo/P1§/“¼ûŒ•W/gÐÚ. ‡–³$óöòJf]Ø55æË¡ý8;”o£–¦)×™˜Œµ›+¨Ÿç·OÊW]OTú¦Â¹VDéïAî|µ¡Ý±yïhJ"æd>žNI1Õñ”ÔQKÏH€9§êôöÕÄþÃŒø‡r2Àg!C=q=!Ö`ÚÅ îËåý`M”fÌ{Œ²«Þ0ôm`Yå»G7c\s[7ek>ç|)B…’}"JU„› ½·¹Ìä—‰®{(ŠOý·…ÈINÖ‚58Àž8ìˆêÄa*{Øe•îêº=üäK5bÄô©­;ª‰½Ù1PÍÉpsŸ¾”‘"¯î¼°@ žîfдö'Û¸Wþ®Ä}K²¯]}Þ—¾œ¹·ÞW” ·žªhÚ÷ =ØUv­É÷hŸï=Á¥ç|¹,¶Ðs´oñ+‰”è¾mÒ©K¤³¬ÿÎv¤¯g€~ÙäÙáÙ“·ÌÏýK¾%áæ+ž:rÙ]Tz¡,v$cÉ»? 9ý¿àP]endstream +xÚÅZÝsã¶÷_¡¹'©!Ä'äÉIìÔ™Ä×úÔ‡Î%<‰¶9¡HE¤Îq:ýß»À$(R²¯—N's!D,€ÝÅîo?h:Kà?:Ó’$܈Yj‘ •³õö"™=ÀÜ÷ÔÓ,Ñ2¦úfuñå5Og†ÅÔluí¥I¢5­6ïçßþõòo««»Å’Éd®Èb)U2ÿææö;|cðñíÛÛë›ïÿqw¹HÅ|uóö_ß]]_Ý]Ý~{µXR-)¬g~‡ ®o~¼ÂÑ÷w—?ýty·øeõÃÅÕª“%–—&Ü +òÛÅû_’ÙÄþá"!Üh9{‚ ¡Æ°ÙöBHN¤à<¼)/Þ]ü½Û0šuK§ô'¹&R³tBŒO)P¢8LY +”ác{(ÛbWæøk¿ zž¯k÷ÜÄïš]]59h‹Ódþ.÷ôYÙÔ8js«à€FP‚4Bßöì¦Þ·eÑ´ž2æ• ’0èڬͷyÕ~q¬o.Q©ìEÁqnÿ0ÃÁ]¤©@¾ŒéÇŠíj™x—¯Û¢®‚¥1B¡ü˜!Áá\êG£ë¨^`d¼›å„ØCAA 3 +ü†¦Äp¦Ýäe5¥weo>õê¬÷›|Ì8e–F²Y +Û*cäkl—£µž¶Üe·ã2Þ…0Ç ÜµèvW¾Ë×fÁ è)¼Mþs’°*÷šù×÷uYÖOÍW¨.ª4I§­Ôíð~]fMƒÉÁAŠPPG5И`€CVcŒ“T)ýù ;.ã-ÆÌQžœŠþ`Ëc•mó)qb,¡ ¿ fÞ·Ï»|BjNÁªY°“@ ͸†”ôϺÛñ¡K‰Ü|†Ô=ñPj Ca<ñ›M½ÍŠj„4`¥Fóç Þíø‚àœÃ6¶ þfJrC´NÍPràèõÇÛ3´V16ÕÃÄÎê­yš!àÜÜCf^Õö©½¯¸WÅ‚ÎýÐúsa½4ß|o´rÂ-Øä÷D¿¤™„/p* nyûÏihPFÛ%¸2§=sLXÚåÝYnò$o&æMŸà-åD°.¤ãMçÍYgt(Â%×TÂ)˜Š¤4öì†`ëгktüò— ¶HÆ…'pÛà†‰L²¦;i~…1õñˆRNx)ÛÀ écˆ?ä‘‘;$ûsãœY(ÞE(’b¯«\&DYß;ê¯ v»1±#&%„éÄjØÙJH”éŒxKÐ,é;¾¤]wÕugÌxÞ¦Î=cÎZí 9ìvmo\’cqe D¾ È.h`o ‹GvXˆ‰2ó–½gCn÷±•¸Å¨g® ¿3L¬_g•ß(ǧͷìžeX„l¢D +~´Å63ಙûg_1j¦(£Ã–‘ìƒÌ.…t³Â'º2 ìTŸ=æ=%0¶ Å%À½»qšdR€¸ôØ>Ï'­÷KFó iÒyĺyܧ ƒÔª2´ðe@Âý&úW +©è¡ò—1@:°u©)v6Sa¦?Žy¢eLu†—@ey)!“Y¶m9îõƒÃ ¸ƒ³'wTG|–I"ä(ƒ³ßå­/5ºR¢:l?`€aÏ¢g…½nÃ9'Ù×0ûa¦t9.Ø ›Õ¦Xg¶ò°~–èy‚ï7Ec‹¿«Ý ‚.?x*Û¿Z=†Jh²«Ç5ŒiË·oWS Q‘Hâ¬$v¯lƒ6ù†Øf«SmºqE9к;rÈ©®b2èÏT4ñYBQÚ¼Á£]°­6Gy›ý^lÛ¨!wŽ(i$­þ(ª§ùQÇÓˆ>f‡œr +,)£ç ¦:í•e]V΢&]X̘óçwT \A‚ +(¤²V okRé­csX»ÂUÌ«¼}ª÷¿âd»ÏºwóxqÌFŠ5®u±Õ¾Ùå{Hðr×®f&”òwØ¡ik_à\•?€Ë|ô”YÕ<å{ÌÂŽ´¹ Œ’|ûÆê<îƒ@ÍG;«t^Æøê• Žœ“à vdÈgoðΧÍű­`×a¨ƒ–5Ì5)ÿÎË?Šª›g}„IȨ°i|ÿ:0>ðfï³iç³c=INh¯Ñ‘ݧíIw3DéîKM¦½3@gÓ}Jïpxu¾‡ÃÇú°ïïØ_ BrúiœwßD³Êçÿ)ëë³ÿtžz}ùÒ+u&ŒUšý í¾ôÅå«Ú¨Fk ½©ÚÒWí~¡!~·ú¢õcà‹ŒMWä¾HBÓŠ(}WíÁ{Pê7‡{§!‰⋆3ˆÔ$OÔ|Ž ³æ‚é³gwDãÇ`‰tpºËR…H âH ƒ—Ákô2<=ëÇÁš`켿@ÕÅmúŠ¶¨²ý3¾±F¹«›Âõþ>æ!6©‚ üÐÎ᜵@%ÀS}d,“¸º’ò)Ïí?QEæq6òØØ–ªODtúš‘»æ¢ZîëºÿÙ3„S¸½sçvDãƒùQšÀŒ ƒ“=diËB¸XÓ'_0á’/xb?Øø;mpÊ7|ðc¤›FßùíPôc˜õV¢ÑÅzª¼i¼í˜Á©úèÔI>x` ½·”/[¯ó€yUV¥Ÿ<Ѳû8Φ#Ĥiÿ¡öTo2^>ù§=ÉìÅÏC¯ýÓ¯¾ö3°f'þX)´[=S._¤Çœw#6fý?…«d‚endstream endobj -1288 0 obj << +1327 0 obj << /Type /Page -/Contents 1289 0 R -/Resources 1287 0 R +/Contents 1328 0 R +/Resources 1326 0 R /MediaBox [0 0 595.2756 841.8898] -/Parent 1294 0 R +/Parent 1334 0 R +/Annots [ 1330 0 R ] >> endobj -1290 0 obj << -/D [1288 0 R /XYZ 85.0394 794.5015 null] +1330 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [353.6787 755.8266 427.332 767.8862] +/Subtype /Link +/A << /S /GoTo /D (the_sortlist_statement) >> >> endobj -1291 0 obj << -/D [1288 0 R /XYZ 85.0394 691.0694 null] +1329 0 obj << +/D [1327 0 R /XYZ 85.0394 794.5015 null] >> endobj -1292 0 obj << -/D [1288 0 R /XYZ 85.0394 679.1143 null] +1331 0 obj << +/D [1327 0 R /XYZ 85.0394 673.1367 null] +>> endobj +1332 0 obj << +/D [1327 0 R /XYZ 85.0394 661.1815 null] >> endobj 406 0 obj << -/D [1288 0 R /XYZ 85.0394 320.8972 null] +/D [1327 0 R /XYZ 85.0394 279.3135 null] >> endobj -1293 0 obj << -/D [1288 0 R /XYZ 85.0394 294.233 null] +1333 0 obj << +/D [1327 0 R /XYZ 85.0394 255.2326 null] >> endobj -1287 0 obj << -/Font << /F37 747 0 R /F23 682 0 R /F21 658 0 R /F53 962 0 R /F39 863 0 R /F62 995 0 R /F63 998 0 R /F48 885 0 R >> -/XObject << /Im2 984 0 R >> +1326 0 obj << +/Font << /F37 779 0 R /F23 714 0 R /F21 690 0 R /F53 1002 0 R /F41 910 0 R /F62 1035 0 R /F63 1038 0 R /F48 925 0 R >> +/XObject << /Im2 1024 0 R >> /ProcSet [ /PDF /Text ] >> endobj -1297 0 obj << -/Length 3863 -/Filter /FlateDecode ->> -stream -xÚ¥ZÝsÛ6÷_¡·“g"_üš¹¹™4qzé\“^âÞKÛJ¤e^$RI;î_»ØDR”}ŽgL`±X‹Ý ©…„?µˆbg:[$™‘TÑb³¿’‹-´ýp¥˜gå™VC®ïo¯¾{g’E&²XÇ‹Û»¬TÈ4U‹Ûâ×e,´¸ rùæã‡wïøåÓëëÄ.oßüp½Ò‘\¾{ÿ¯*ýðéõO?½þt½Ri¤–oþùúçÛ›OÔ³ŒïßxK”Œ>„~ºywóéæÛ›ëßo¼º¹ k®WIƒ ùzõëïrQÀ²¼’Âdi´x„Š*Ëôbe##"kŒ§ì®>_ý;´º®sú³:±‰“ÌM©ÿgX“:-¦óÃJØ %¢.Ê¢~dqÑ÷‹Z¥@βh±Š³DÄ*Ña{µY(%²(Ò¸¿i"t’‚˜(‚=i? †g&¢Ø*dTRDF[Ž¯W±ZÞ½<Û4ìLM‰Ô¸‘_JH›e†xe·Ô“ -á»÷{½xÛÀ‚Ã5±ÜÕ@°[R¬«´±†OEjÓŒ–Ôt`EIº¬ö‡]¹/ë®,˜PÓ—ÍJ™˜®ÈÆ™Ði–.†Úükd@óqÖº:Ù_3Ÿ•ÎDš&àÒÚ -c¢ ~¯¨/ÃH4°´¨ÕŒß3—qJl«íê!ßUEÕ=­*PájS])›kUrê:7Àµ²yìf¤…ÊhŸå¦úMJ]¶×+#Ͳ»/©P÷ûuy¤rsGß"rl¶ºk&îú®?^«tÉõÇû²¦ÒÛŸ?ß¼¡2,¼Î=#™÷]³Ï»®LRŠTð·à[0Ïj“ïvOÀ®är[Öå1wVg”Zæ-‘sª²ä~×ÙÍèÅSï« ûCZjùMFrªz f -Ì4–"Ó©Ã$jý04æ_ ;œo¹\· 妫ššæf…žÎÆX8'lfsfë…9œKÃ9€Mà±ÚíH3å·CEú„ÆfSn³Q›å]T\µ„r&Gþ ¨N0gä O& è®I,h]‚lÀJ8  ÏÈht)—ûü[µï÷TÇé™^µôU’¾Oe~dn².e™ -ŒË‚s3Y'ˬ7åwª]µŸ Ö×›¦?¶QTvn%Ò¯€”ŒNƒpS—T¸o`0WZ—wëί°°éD¯;nqSp%ã6TD!D£Ï®ÚWÐHÛ7½—‚~áÄïšÍ*¶_ÊÇëL/Ï@Û#],c‘H›¼‡®gàÐs¡^öU½:–wDz½_áò^Ñ„`ŸgÉŽ»;>ózâ™ÅJÀˆöù%®™5Œ<(ŽE”&Éx`E-lŒÊ@¹ÎbZª€ytn›ÜÖb¡ØGŒ…àìo-Y¾N­È0:Yþº¼Ï*·µฦ/™Å#Þ}Uo‰žÓç²2c áÔòk_Ÿ˜Ë²¥ß篩°¹ÏëmÙ¸ŽÃºÐÀ>¯vΪ Üóº½+à¼`ûÑò—¶‡ÁÈp \îŒ/аàŒÎ[*Ó¤²”Í(¼ -(åÁ= Ò·eñŠ°hÝwDëh¦2ýR瘎º~ -¨°Ï[8†1Pf¹ÛêÖ í.`>¿iNt±/M{s®ZPK× üvÝÎ;ôÐœ+’çi¡yëN¨“Ëà Ê®C`œñ€±u¬t̪‰w(AµnêÕibq&óÄB—}æ¡mD!uûX'l‡¼m©¹»'\í·÷Ô´¦ú¼‰`=ˆÖõzåÝJ­O‘ÑÝ1߆›.Ôùæ Û¡óçï|Ô5èö7avƒQ·a´·emw§“ ¯©ÄF&½…^òx£…L2ó‚ǸžñxÏå3¬.:<JJ×>;zàšÞLò 23ñx|rx“Z>Ò p:‘ BÞŽ%§q×^¶m¾ef2E,ÁÐ]¡Èwl.k¦!à×#A¢ô °iäÑJXL¡ Mf°§Æoœet0ì\Ë €È"?a$®™2 N@ó­9Oþ™ào@÷Ãx ÐtÁ›ñk póÁÔ  àaÁUFFã(N ðÍé3Æ øyar¡w!€¹ - 8،Ǥ p`α¨`ttŽ -H$GÅû4‡8€õàÚXñ80éCV9e>‰6ƒ•0_=·†)*¸‹ø-[Ž\†o]”°ðrzí ‘ÅøðôAɦ¬˜a|tÊ.™`‡N0‹ #çㄉ¯ÇV(8ÑeÈ=\6‘Ù(~؆\—-p°aÀ›¿+W`Æ{:Føf"¡“Ä>?‰À53‹¾Y A@šŒ§1NÁ)¾ú`¦FežŸ+SJ+å«Ñ‰³õ•H¶åùÂ)ÐA2ZË3)­ÀÿªÎåNRZé2F$góI! 4Æ<¯ÛÀõÒ,Τ ¬ÄúÔU:L]¥!yÅù,–„#Ij¶Ó®üÖÍØ2[¾–Ó+>t,”Ç^ûx_mðÎd¥àK»ín 7Ápw±B~yà«øsŽúÅÅÁ¹ô®¢ÝG¹5}ºba‘l§¥a< Ljt&L¢ãVš£˜å„[8Õ§CHÑZLr2× ç¥:'`ñühÀ‡cѱõAvבŸ˜í¾œeŒ°&ño)î€_mšýôá¼ã| Y$T”øœc×4;ÏÔà»FIcrŒ£Ri98‘DÁ9‘Z™Š* &çí(µ£Se6›„wl˜K{Y‘e2yak@ÑƤÌäð$îš¼ÀDɹêl$ Ü®†š›‘ -úMTâ·|Ÿ?‘Øf_±†ÚÆ%#z$ E°V6÷åæ σ ßé´éw×jÉÛ¿æÞpçGMx«À¨Â)MÅR€YN”†Š¶ê´VÓ°?ͨÐÂÐUhÐeå`cÜ)Y¾gé‡ÎÊM¿Ë9Qt®×Ì -sB §ƒj·;•‘Ɇ¼-S4´ªÚ=¶!?\¨GîLóKUZ‰H‡÷Åcþ8·T)ŒIæVêbòÝ¿²lì»û2¯9nt)fí}a? L÷jsi’îö±Í^š¤d4š% ÝC¬Kƒ¯y¸!l@õ±êló=—œ¢©¸+Ê1æ­Ÿ°e˜t!ctM‚~²äº¦.ç » -óà+¿áîcðè3Û~öžk2aÓX=?ÍÀ53ϱ&­°1„£‰ú´Œù•AF¬R‰iƪ«è Ö9íÎï.Ò§š¡5$:°Â/ò|,jØñdr,Òå.òw¸þØVpÔ–DmAÔ‚̪é[J°ê¨™_qô'jÞ°&)5ä.ȺÔÈ ¨Â†Páï3˜ˆÄ¦E¾"¾ú -#üßìðî~.4¼CòK2ÓÁ=’æëAÜz£ŽNï6>›B [žÊl_lðÑÓƒzü0 õ‚²‡Á -PòÂ?ÿb]yµ"TÛØg‘“8إĠ'21ƒ²»£R××<'ƒâS‚{×,_ìæR6>a$ùˆ” n·eRL$‡ä Ó=ÉOâ‹úèíBIyáeÊÍW»Plï!æ+¨LRL \ˆtﯚ»3=(¡½Un&*8Ú³ ‡Tð%[…BNo©ŠÔ=f& ÀBšxä.ÿRòtÝ&„ùµÍîaöéêdX8gÚÞßlíôã$’SšÁ’€X~Û”>Vñù>N/¾:‰/¦¹?ð’~Ò„>N©ºa>ó}ùŽŒs Y:ý¦ëÁ</ùÐÔ-e}L¼<¸´å@âiÉ»ÑGæoÂÞ¹H%&ÝV9ôÝR€bhïLP8ŽîG¼£484Nœ Yú«9›Ç1 `å™Z)!°¬ÜC©èEZÙ‚!À‰)Þ(%OÒ§2:€PwÄÊš›wÍ#_ï -jp÷nhÐ’êê=ýĈp!$&žà=›n~NÄ>¯jŽ1'ÛÓ×äâŬ³ng. BKíñâáxИSá ‰Ž±Èp®¿$¦yåQ–ÎgùÃÔ·Ps?÷+Nu×#_±³¾28˜è9ØÂ!äßji‡ã)þ¾2Õcí \NÎb0®?£^¡¨*„‹Ï ÓôŸ´lz c«ù ßÿ" tlÍ:ƆŽ±êÔ õïNQHZ7=ê‹œ¢þyM¬Õþи„¯c~š‹P•Š„JôägxG*J¿è¹ÂÌ4óñ´¸ôc ;ÿ‹F~Uû—~|úm¶…kXš^Šç’â>—­@endstream +1337 0 obj << +/Length 3765 +/Filter /FlateDecode +>> +stream +xÚ¥Z_Û8ŸO‘·ËWÿ,ÛÀá€n;íõpÛîµ³÷²»NìÉøšØilÏtöÓ)RŠí83wXh$Š¦(Šü‰¢F.ü“‹ØF6SÙ"ÉL /6û+±ØÂØû+É<+Ï´rýx{õÃ;,²(³Ê.nï²ÒH¤©\Ü¿.m¤¢k –o>}|÷áý/Ÿ__'fyûáÓÇë•ŠÅò݇ÞPëýç×?ýôúóõJ¦±\¾ùûëŸoo>Óe?~øø–(ý\úùæÝÍç›on®¿ýÇÕÍmXËp½Rh\È·«_‹–ý+é,БÌ2µØ_™XG±ÑÚSvW_®þFݧsö3*¬¶ ´ÒHIñ?L«SgÅt~Z›!£8ÉäeYôYܤ/¦¢V)³,^¬lb¢Dh¶Wé…”QÇ +÷7M"•¤ FëH ¶÷#Ø1fQlD>)¢X+‘ãÓõÊÊå-ü¯–gÛ‘Ú(ƒ­XXXl&Sœxñm!#a²LÏ íVz²€#üða¯oXÏb¸$–»v+²jà°RiØ£6‹£L›Œ–ÔtàDIº¬ö‡]¹/ë®,˜PÓ/{!´²hº"c³H¥YºóÏíÃÛ œuuò±?ç=+•Eiš@D«8’qbçÃ^F‰”Œh²HšDžüB΄}àB#¶Õvõ甆êžV˜ð½©­€;2F&‹ágj®=ôp7c Œôør(7ÕoB¨²½^i¡—Ý}Iºß¯Ë#µ›;ú-ò'Ǧ`«»fòÁ]ßõÇk™.¹ÿx_ÖÔzûñË—›7Ô†…×¹gä9ó¾köy·ÂõCÜŠ(UÂ-„èYmòÝî Ø¥Xn˺<æÎ봔˼%rN]–Üï:";Ý^<Õù¾Ú±?  ¥‘ßD,¦¦W€Ñ)†Õ xˆÌЦ4xÜrt}~?tæ_ ?8ß„s¹nÊMW55éf"5ÕF8&LjGÚœ9BàzA‡si¨XA’ÕnG–)¿*²'œ/&˜r›Ö,ïò`âª%”3rqd%€:Áœ$<¹$ „&± wEäFÄ‘–€<#' Ù…XîóïÕ¾ßS§gzÕÒ¯ôûTæG&á&kka@e™› +ŒË‚c3y'ˬ7åwº]µŸLÖ×›¦†8öQTvn%¯€Â ƒÏߦ.©qßÀd®µ.ï?/ö]\acÓ‰^w<âTp-ó6ÔD!D£Ÿ]µ¯ ‘¶oz/ã‰ß5›¯Ôl¿–×™Zž¶Gº8UÖ<‡C®Ëp¸Ð.ûª^Ë»cÙÞ¯py¯H!ØçY²ãîŽO缞xAVFVÀlÏ.!pͬaAÖFqš$ãE€µ°12ã:i©îѹlvDp[‹`1r³¿´äù*5Q†ÉáÈó×å}þP¹­ÕÇ5ý’[Ü1âÝWõ–è9ýüA^¦ !œ\~ëËãsöàûòé556÷y½-[B7Ñq8Q>°Ï«ó*hwǼnïÊ#/ø~¼ü¥ía2Šœ—; 4-£ à–Ú¤T–²û…W­<„tú¶,^­ûŽhmÀTæà»Ô¦£®ŸÂGÔØç-Ø'³Ümõ@ë…Áv—?0Ÿß4'ºX—¦¼;W-˜¥k~( »nçzè.I}u… jPvÂâ\`¼c¥,›Æ&îH‚nÝÔ«“bÖÅ,+>±æ3m# +©ÛÇò8a;ämKÃÝ=¡j¿½§¡5õ¿â=ûA´®G@ðU>›ª­OyÑÝ1߆{.ôùæ+û¡‹ç|Î5ø†}oÂì&£Ï†¹Þ–­Ýμ¦;™ðz)â!a±I^ˆø×3ï¹ÜQiÕÅ€—i$%Dí³³®™éõ¤Ú 2mÇóSÀëÔð‘Ó‰Švl9‹»ñ²mó-3“+b ®îÊM¾áàpY3 ‘=$R ‘‡F-#ƒ”¡ÿöTû3Œ: ƒ¢ƒ9²ÙAìFâš) êßióo±ñt?E×»™Pð°÷þ,@Ÿ`\gä4ŽâŒ¿9ýŒq^/,-´ãO A!…B6íq)˜A©!*hŸ£)P±Å1Í!`?„6v<L¾!¯œ2ŸÄŸÁΘ¯ž[ÃÜ5ü–=G,Ão]”ððrzé ™ÅøðôIɦ¬˜a|tŠP,™`‡J°„ #æó„I¬[É$cfrÚ À¦•THÓçmÈuئû¸ù»rn¼§c`„o:ŽT’˜ç•\3ZŒðÍHÒd¬Æ¸'ù⃠RÚ¬ŸkSA+å‹Ñ‰³õX´åùÒ)°A2ZË3­ÀÿªÎåN +ZéÒF:JÎôI! ÔZ?oÛÀõ’gÒNŽ^b|á*®ÒP:‚æ| KÀ‘$ûiW~ïf|Ž­ ŸJˆé ‡4vŒ£÷ÕïLFRñ~i·Ý­„À à!˜Îá.v(.|•€xÎѾ¸88—ÞU´û(·¦ß†®XØ$ßii(“…j•E:Qö…•&‘–ÌrÂ-Tõé +´ˆ\ÊÕy©²cðç'>“˜Ž5èj»ŽüÄl÷å èH­#£ÿ’âøÕ¦ÙÀ.:Η¹z¾¯8vM³CðL5¾j”4'çh0+U°‘–kI‚©Õ˜©¨brÕŽ +;*âÌdc[øÀV‰¾´7±‰²L$/l Zë”™þƒÄ]“X&97‰# ·«¡åf¤‚}™ø-ßçO$¶ÙWl¡¶q¥È„žhl•Í}¹ùÊz°ã;›6ýîZ.yû×ü5ÜùÑÞ+0«pF“VDà–Ù8ŽÐÐFžöÀ(ÚŽ§:@ú¢ 5†¬lŒ» %Ë,ýÃY¹éw9—‰Îíš™HŸÃÙ`…ÖmçA i®Î†¼-ÍS4´ªÚ=µ!?\ªGáLƒóK•JF± +¯‹Çüqn©"Ò:™[©Ë!(vXŠÎ&þº/óšóFW`V>&€öÚt¯Ö—”„ ?µ&{II‹x¤% ÝC®K“¯yº!l@÷±êló=·œ¡©¹+Ê1æ­WØÏ2,º3:‰'I?yž¾Q™qf_Ž3#ãà MÓnûcN‡(Š'ã†zWÅ.86:÷Ë]ºi^TG¦ü3àÄ…h¢] +~*ìÀ]¸`æ®$“2Õb±L–³âë’ý ‘NND¬|«¢p8«®l§TÁNGÕAf8ŽG\‘ЬóÖÝ©¤ªÞìú‚kÖ(tfâò«þ?ƒXðÛ5Ü8ß«xó›° Ž¾ÀŽ鉥L$’àAŒÓ]•M±yg’Y9V…“oP©¨êéƒÓ™ÿ¹¼ŸüïBš.3H ”ÒϧéC®ËizàrÁ°«° +¾òîÞ0O>³ãg¯¹:‹Ljåój®=Ç–4‘±vŒõ5haùAÄlReƪ«èŸîºÖ%ë\vçWáKÍ0 +Øá÷x>ìx29érû;\l«8jK¢¶ jIfÕô-Øt4Ìï†8û oáXŒjä]rG:‰2R…¿Î8`%&õ(ò ¡ðÕ7HáÿÍïîçBSÀ[’”¿]’™¯qã:>½Úøj +ly*¦‡\¾Á'_,ªñ³,ô ª+@É ÿø‹}éÍŠPm¬¯:!#qð“ƒf\ÈÄ +ÊîŽZ]_ól\ ²§ ~]³@~¯›+ø‚‘à#R@.¸Ý–E(0uPƒJ÷¤>‰ï飷 )Äì»”ÓVžÊºÐlï!ã+¨M2J4\ˆtï®%:»sSñÕ>..¾:‰/¦•?ˆ‘~Š„>K©ºa5«}ùŽ\s:û¦u=¬Âñ’MÝRÍGÛå鸥 «$D9¿{çòK¶ÑlrøvK鉦½ÓÁà8»ŸñŽŠà08 5dé¯æ6ç€t•55B@ZY¹gRÿÈ‹´²G€ó ¼qJq0¤Oet îˆ5ïšG¾Ü4ànÝ0 õÒ{úó" Âu˜XÁ{L5~NÄ>¯jÎ0'+êk +ðb&ÔÀ²3—H åÑðâÁxžÌèSòà݈Ž°Xsõ®¾$¦yå–Îç÷ò·PówîïO¸Ì]"ÅÌFÊàP¢§`ק¥†§ø—•©»ö àÄ ×bãÎý ¬Ž#ü»Õ™LA„¿úüÓ{úÛa7…4URŽ$…Ôë[¤”ûËaužŒ‰Gͨþ_…PDendstream endobj -1296 0 obj << +1336 0 obj << /Type /Page -/Contents 1297 0 R -/Resources 1295 0 R +/Contents 1337 0 R +/Resources 1335 0 R /MediaBox [0 0 595.2756 841.8898] -/Parent 1294 0 R -/Annots [ 1299 0 R 1300 0 R ] +/Parent 1334 0 R +/Annots [ 1339 0 R 1340 0 R ] >> endobj -1299 0 obj << +1339 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] -/Rect [297.8955 657.1224 347.2449 669.1821] +/Rect [297.8955 633.3862 347.2449 645.4459] /Subtype /Link /A << /S /GoTo /D (dynamic_update) >> >> endobj -1300 0 obj << +1340 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] -/Rect [324.9335 350.1399 381.8296 362.1996] +/Rect [324.9335 322.2932 381.8296 334.3528] /Subtype /Link /A << /S /GoTo /D (zonefile_format) >> >> endobj -1298 0 obj << -/D [1296 0 R /XYZ 56.6929 794.5015 null] +1338 0 obj << +/D [1336 0 R /XYZ 56.6929 794.5015 null] >> endobj -1295 0 obj << -/Font << /F37 747 0 R /F23 682 0 R /F62 995 0 R /F21 658 0 R /F39 863 0 R /F11 1303 0 R >> -/XObject << /Im2 984 0 R >> +1335 0 obj << +/Font << /F37 779 0 R /F23 714 0 R /F62 1035 0 R /F21 690 0 R /F41 910 0 R /F11 1343 0 R >> +/XObject << /Im2 1024 0 R >> /ProcSet [ /PDF /Text ] >> endobj -1307 0 obj << -/Length 3025 -/Filter /FlateDecode ->> -stream -xÚ­ZÝsã¶÷_¡·Ò3‹’›'çΗ:Óó¥¶ÛÉ4É-Ò'4©ˆÔ9Ê_ß],@EÙÓÎÝ ñ±Ø/`»€Ž/üá ‡L¦ÑB¥Q3/V/lñ sß_pK³tDKŸê»‡‹¿~’j‘†i"’ÅÓÇK‡Lk¾xÈ>üýêLJë»Ë¥ˆY„—Ë8aÁw7·i$¥Ï‡/·Ÿn¾ÿ×ÝÕ¥Š‚‡›/·4|wýéúîúöÃõå’ë˜Ãza9œXðéæ×Ôúþîêóç«»Ë_~¸¸~èmñíåL¢!¿_üü+[ä`ö,”©Ž¯Ða!OS±x¹ˆbÆ‘”n¤º¸¿øgÏЛ5K§üÅ:ŒE”,–@,çÓ^f!‹ÁkKñPhõ^|ÊËŽ -½\7]ù´_æE•íÇ&óˆ…©LåÂç{$½§š/=ñ<ŠÃT°d(ÿa]€Û• -HÎyð h”5N$A[¬š:oÍh<ÝkQôSu^ÖÏÄ -º–ZÍM“m4öR´mö\´4óÔli8£ÏŸM]Àù:õzÊvUG²Eç,–lP¸œ‡i cßÅö’ë  ‘fäô¥ˆÂ”%°BB=FžÀ_8œŒÁ¡Þ•U·4öÂùk‹í×bKí²M_²®lì$*ÚZ1¾sŠÃ8VüàU©̤æÁ†´üZæè3Û¼XºuQmžvæeö\7mW®hr tkbµ{^ÓŠŒÆëÝË£“†›€c½qØ#ý Á®Î½Êœ;IùÎ(/U°i‹]Þ,»f³¬Š¯EµÌ›— 8óeêŸ-)Â$VX!‡Ç²Î'œ$T(–ȨRPÜñ¾‰4RqK Xôå~‚#}­•¥ZUYÛ"Ì(;ÐZ3œÍR™ñ›3/ÛvÔ2¾Âiêz.ƒÞײx¥é_XÌÚ¢8…L ,Ð~4·}^Pãn -“}úãp=âŠÞ+{yjŽ±àÇ !Ã4bb ÎhXª3ZsC5Àœt0¡_ãú‰m”i‹’3ÛTš‹ÈR½®Ë՚ؖ-}Û6+ë žèô¿Ðœ9®Ø8th×zaÕ)Óa‡×J¿¹P`¨ÈÜo{ÁtœÍð‹)’ «÷Dð\5Yå€K‡Jr5D®kR°gƒ[ÛR§Ý¤€S:sÆC-´‹·¬ªš×åï»b»ŸP$KÖÓæ Ip¦F¶ÙT{’E®„±Ž¢›&z ¨ ]7O4¶ovÔx*Šª_A<ê¢Èí•”—möX 8—ðò²TÉ}Œ<ð¤Lt°3!E’ Ñ;IF1ä"0û2!‡0ÞÒøv´®é‰ý‡ ;£ÏA ‡$¯Ü)± €œ÷$4/~aLÔ&âxVÓ·øcS•«²£ž[æÀÈ©c¹I*ÆÃ3ƒ„œCÀ,„g%,H«µI»ÐsBUUu׆GPf+™X¥c9_îøT§ËžÊø­Ø¶`cÐâ:ÔLDó‚{ª ÉÃh•à9¨p¢ma¡{L§s£}(b{Ý쪜ÚÚ›fÛÙÕeF û¡¨3Mª{<žuöRLdK¡D˜º³Dú„'²¦ÂÊÅËnm¥ì7S‰ÓàtêçÃOSpMé8~CÑ ¨ˆÆ•ÕIÌŒ0Ý‹s°®ÂDôÙë»TØÒ=\c¿›%·gõú-ÃN_å@ÛD‘Yç8Ø}„ËT2 î7Å -ÊP ̉üÄ  Ôj´V Ñ„UˆLPÇÈnY”³‘fk½T½T Ø91³ÇxtÊb& -±vTz& -=ª™(tT¨ëŠKw6aU—är^°#š<8cPo‹4I¦ L’ƒ -¦×¹á> -±í¢ }…0GQ ûqQMãfŸç©(Ô<ŒT’Ú­w - -Cð·L†AˆB¦ƒ -lˆ& È3§7E#¬O×S ïpòÝ,(Dtâ"¯¥qLÓæKwkp˜îýt eµ.k–RžOâV'Þý'¶• œ\¨·t4Œž§®#àÒH™„*"‡¢0ð\tN%¬Àmñ O»Ú”Ãh s7GX°Ù–/™9ØÙm7)f"‹Ð0hË«H»¤áÒ~Må“PGÔö - £®.%>ƒ‹m/žEÐãÙ^Î6Ô52á eá*k;ê_PÓ$)VÝRôÞÑ·¯ ›AèB͵¥VPPƒ78[B‹xtƉâÛ·S ²'" ╱© YÄFiâÿ‚vQ”@M WY´ó©N£]OåÙ á²Ì!/E¬Å¼øžjBþô\[¡f(`AO7}ˆRS°§<ØKF°§F°§ŽaO‡=¨ºÓ(qró1¼¿¾û÷õÝÔÅ! ¡êÞ -zPypÎ’÷TFã“0Ü;¡2‡›Ë›*à#ЮÚ)÷0F˜`Küº+÷0ÁV&ø¥ÛŒ L¸äÁ 8XðXeÄǶ‚¾\qÑeM@£QÜä¡ö¸y%vš¸¡óδûb÷È“7uWlë¢û‹åC!ïXLÃG#¨•è}w\,$p|RebUâ5OHéUE2êu†ñUCÙQÊþe -š'í&[vù¡Ûmkš¿ýéã—ÏW7·Ô£ÙvÓÔ--d–Œ|žz²Ì$|).WË)3vUf.›æçѳRq¯´r~ƒ)6ÚÞ†Áï"°syn&maÈ{õ„Þݧ´„§\Û5f·sq rB*Äaö–¬jZZÖ«j—'RŒ4(ó5†yÒÆo~üšÐ9‚4è™AsX‡#j@³-Ÿë"ÇÐAÂ…ÝqâAUÖ¿Íñ4…¸²ÓØW¤ÙLnÚc¶ú;ˆ ÄãD¿nµü µ««›×úh¥Mc(D‡2æÚG!!R›a°•u"êÇèü |¸†hz1w*ì–O––>¯hDBì°4•}(É÷4PüQ¶æw8hÓÖ0ª „¹_”_íBÜ:¡£OqHÖôØ:Ãl”{넪ªm…ÿꀻ-I¨í’ªl»á}e$Ë‹²ýÛ©Ÿ}þ8 ãtþxŸÊÜ zò’+4µôxѯ,Ç×Á¢HÍKí©ŽÅ«q–â]`(–³ðævyõñã]xu÷#>¯_2§øÐÍ[î6ܵ{NäÁì±ÌI«}™\¨·[­â0’‚Ÿ1Û£š±ÛQ7|NªgùXì´é¾XGP~¥o·?V!ÓLž±ß£š±ßQ·NªgÿXì´ý¾XSzŠ·›/u¨ÄÙSïQ͘ï¨Î›?'Õ3,vÚ|_,Wï3_°Pª$9c¾G5c¾£:oþœTÏü±Øió}±'Þe>! kÞ|jÆ|GuÞü9©žùc±Óæûbyú.ó5^X…ž·Þ#:m¼#:kûœÈƒéc™“–û2á ¼Çð$ÏBþæ´Ù–æ¬Õ3òFNÚì ü]&KÌ“x ÿl ø?ÿ/¼ƒ÷"J­O<¬J†ï©©rJ™g9Ö<\‹µPªÿÔ˜ Qendstream -endobj -1306 0 obj << +1347 0 obj << +/Length 3187 +/Filter /FlateDecode +>> +stream +xÚ­Z_sã¶÷§Ð[噈Å‚›'çì»*Óó¥¶ÚÉ4ÉMÑç(R);ʧï. @‰¢|ÓN.C`±À]@æÿñ‰V“I8‰“0PŒ«I¶¾b“ûtÅ-ÏÌ1Í|®Wý(ãI$‘ˆ&‹go-0­ùd±üeúáï7?-î®gB±i\ÏTĦ?Ìïo‰’Ðç×ûóOÿz¸¹ŽÃébþåžÈwïîî?Ü]ϸVæ »Â™ çÿ¸£Ö§‡›ÏŸo®[üxu·èlñíåL¢!¿_ýò›,Áì¯X ­&oÐaO1Y_…J*”ÒQÊ«Ç«v z£fêÐþ)©¥E<°BzÈ´Ãh«$ˆ$ áΟÑàä=Î ‘‘‚å‘eþ1ËÊ"¯Úf¶É·×\Og¿ïòíÞÎìË!#;³h®g¡ÐÓ&o±OÛšÒ2õwÐÅ´]å @ËŒäÔu T5ÍßmPCzªwÕ’šµ™e秱ëMÝä–ãi?`åŒsðX(l‰RÂ(½Í³Ý¶)^sgô€™qD‹Ì NÜ€L‡Æ<"¦ä°Û[¦™ÏE§Æ‡ÜÞq¡Äªn‹çýl™—éþX8ñô9.½ãß;ÐP‰`Q_þb$âxJpΧp”BËiQá@GžÕÕ²1Ôpú”·oyÞ UË¢z¡À5jÕÏ4L¶m7Mú’74ò\o‰œÒçϺÊ!`¥N|…žÓ]ÙR§0g7™I°!Ïï³óÁ`È5D$,‚R±”6ˆ<‚€ŒÎ슲‹š|ûŠnˆí¢]×i[ÔvUr$¢T Àû*õa1©ùtCz¾KÜ3Z¯-ß*/7Ï»’—EúRÕM[d4ØÓ 튖ڽ¬hFJôj·~rÒðöÔ‡=Òß0@Ø/î+ëohk”—ñtÓä»e=këͬÌ_ór¶¬×)¬dÌ{@#E©XÛ@z* ¤O7IĈ¹‹6£HAq§''ÀŸ˜[^H_VDç×:¶\Y™6 "?@œ@cÍp6K=M(óÒmK-³W8L]oË ÷Zäo4ü+S¬ÉósÉ""ˆØD@Û¾L¨ñ0”&}þÓ€=Y-|Ì3ë‹<1n,ä)lHÈLôÔ€ ËuA‹ÓÕP ØN:˜`‡¯Ùúc”I c]8FàÒ\„–ëmUd+Zó~›+m›>“÷¯i̸+6:µNE˜uNEÁt‚óZéóû¡t€‡Îs¿ï“;!žáARDÓ´ÚÃKY?¥¥ƒ. Äã~¨uX“€=<Ú†:ÍÎlAÙ &vh¡]¼¥eY¿Íå Y²ŽwY“€gj¤›M¹'Y´•‰Ißmšè ‚ +‹ CÛ×;j<çyÙÍ 5ª“µ!YIË¢IŸÊÞÊfKx¥’Œ;8'p6ò`'e¤§;Âah! Ý&ÉPA6³¯15ìÆ[¢¯aæu!=pþ#àdô%¨áæcç%på= ]æ¿2&*“‘Žõ ~ó?6e‘-õÜIb®“Á}¸ŽŠ äááçƒÓ±ˆÔ.ÄΔÚB „Úž?.´B…÷rüÑdè…7|á½[oÚ=5ÿó¾÷Ü{:©ät…/Uèoä½B/§Õ‘Ž<÷ÿñË ÑÓÊ.vÿH_‹êôŽ´´êªÜã‘Á!E‚u/šÀ~xÆ„ŽyM?’F÷£%e•j¥Â7eª6 ŒxÊéKn–_¥¬3ǦHs¤ºb(‰¼*ñŠö$rOL‡ÅÀ,jÑÛrÏFÑt^µù¶ÊÛ¿Øu(ªÝ¡e úZЋñ1 @Ôs|¤e"+ðâ(¤ôê,v:=«)CJÙ½uA¥Ù¤Yn'Ð>´»mEã÷?ß~ù|3¿§6›ºjh‚$³dè¯y€ÉB0“ðí¹ÈfCç²+Ss}5?¹ˆn©XuJÇnß AJ –ÐÙÐû­Nn¹´ +“¶@òÞQ¡÷ðñMܤísÚ‡15•**íáö–­ljšZTY¹[ægURi,yOc'>ÿé5"’qA"zfÐÖÁE‘ÁK•/1tpeԭħeQ}[Ó<=â«n_‹z3r¼§4ûjØzÚ!Áì _Ûõ µ«¾Võ[u2“Jd#DœG‘AB$6±`+m[„ÔÏe|‡PZ›+v‹gËKV4Áà!8,Oiß]–{"äùaÚt.Œ®+Â\WŠW;OÜÓ!ŠÚ$KÌTÛ7B®å ±mÈK<žî&±Ì¡NÛšŸ¿ló7Ön´nüFf­iíÞ§ôÉøoMWv3ÌA¹§S(òÁ£X¸³Ìv[’PÙ)eÑ´ýëÏ‘,ëEó·s¿"ñD૸ÿ ŸË\C Ùz¹5¡ËGÇE?Ú@:<¾ý0¸¦Da<.µã:;ø‡ =±œóûÙÍííCpóð¾Ößœ5ë<üzÜtkÄtÇuÙô1©žéÇb‡M÷År¸G¼Ûv¸ò$,¼`úiÄrËtÙð‘žÝG2‡Íöd +B핼ßr¸GÅ:¾dºÇ5b»ãºlü˜TÏúc±ÃæûbMÝ)Þo>\L£˜é æ{\#æ;®ËæIõÌ?;l¾/–Çßf>ãR¡¸`¾Ç5b¾ãºlþ˜TÏüc±Ãæûb1O|ƒùp ñ'ÐQë=¦óÆ;¦‹¶‰<˜~,sÐr_&øÀ·©@ÂMnÔîÏy³-ÏE«GäŒ>8h³'P°o2Yªÿp@øßÖ@ÿóv/Œ©õß•, +´Hb§”¹4Ÿü-I÷‰§ªÿ-T™endstream +endobj +1346 0 obj << /Type /Page -/Contents 1307 0 R -/Resources 1305 0 R +/Contents 1347 0 R +/Resources 1345 0 R /MediaBox [0 0 595.2756 841.8898] -/Parent 1294 0 R -/Annots [ 1310 0 R ] +/Parent 1334 0 R +/Annots [ 1350 0 R ] >> endobj -1310 0 obj << +1350 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] -/Rect [84.0431 641.5322 144.9365 653.5918] +/Rect [84.0431 618.9895 144.9365 631.0492] /Subtype /Link /A << /S /GoTo /D (view_statement_grammar) >> >> endobj -1308 0 obj << -/D [1306 0 R /XYZ 85.0394 794.5015 null] +1348 0 obj << +/D [1346 0 R /XYZ 85.0394 794.5015 null] >> endobj 410 0 obj << -/D [1306 0 R /XYZ 85.0394 712.9977 null] +/D [1346 0 R /XYZ 85.0394 689.8743 null] >> endobj -1309 0 obj << -/D [1306 0 R /XYZ 85.0394 687.4208 null] +1349 0 obj << +/D [1346 0 R /XYZ 85.0394 664.6429 null] >> endobj 414 0 obj << -/D [1306 0 R /XYZ 85.0394 380.6895 null] +/D [1346 0 R /XYZ 85.0394 358.7368 null] >> endobj -1311 0 obj << -/D [1306 0 R /XYZ 85.0394 354.6244 null] +1351 0 obj << +/D [1346 0 R /XYZ 85.0394 333.6847 null] >> endobj -1305 0 obj << -/Font << /F37 747 0 R /F21 658 0 R /F23 682 0 R /F39 863 0 R /F14 685 0 R >> +1345 0 obj << +/Font << /F37 779 0 R /F23 714 0 R /F21 690 0 R /F41 910 0 R /F14 717 0 R >> /ProcSet [ /PDF /Text ] >> endobj -1315 0 obj << -/Length 2268 +1355 0 obj << +/Length 2204 /Filter /FlateDecode >> stream -xÚ½Z[sÛ¶~÷¯àôåP3‚+ ô<9±œ£Nëä8êSÓF¢bÎȤ¢‹]÷×wq#AŠ"«z¦“™h |Øßb-‘Ã?‰%Šª(U LD´|¼ÂÑ7èûpEfêAÓõnqõö–¥‘B*¡I´X¾$ÂR’h±ú-NEð€ã÷ïnç~½¿ž¤<^Ì?ÞM¦TàøvþóÌZî¯ùåú~2%Røýÿ®?-f÷¶+q>ÞÍïnl‹²gœÞÏng÷³»÷³Éï‹Ÿ®f‹ZK¨—`¦…|¿úíw­@öOW1%Eô ¥hôxÅC‚3æ[6WŸ¯þ_; zÍоøÕ˜)ãHÿH”…B £¬Ž2áA”S (ð(å/˜¤]©)ø#’F¡»R:%³!• ¥D›”RDRŠæwÓë››{t}ÿi¢h|}6äœ *( Ä{Ô¨ø!ÒF|—´_|HJÙeâ!X2%jD|€ïQ£â‡Hñ]Ò~ñ!)å—‰ÇqEäˆø5 Þ£FÅ‘6⻤ýâCR*.ŸÈB’añ!ê¼ø5&~´BÚ+¾EJ“ËÄ')Jh Ä{Ô¨ø!ÒF|—´_|HJÓËÄs…˜ #§}ˆïQ£â‡Hñ]Ò~ñ!)•—‰g©”Œœö!j@¼GŠ"mÄwIûҤT]&žPp‚GNû5 Þ£FÅ‘6⻤ýâCRÄ%â\­(Áé°øu^|?HZ‹?!íß"eä2ñ©@’á‘Ó>D ˆ÷¨QñC¤ø.i¿ø”$°éÕêEŠ¸À#Ç}ˆPïQ£ê‡Hõ]Ò~õ!)Eø2õL!œâ‘ó>D ¨÷¨QõC¤ú.i¿ú£×ý›JÆ#F1x¤H„¨ˆyÔhĆH›ˆuIû#’’#b˜"†ÕHe Qó¨Ñˆ ‘6ë’öG,$½A·ZíßRÎ%Cð9RVBÔyå5jLù i­ü„´Wy‹T¢Ù%ÚW#U%D h÷¨QíC¤ö.i¿öT]¦Ã­;Q#5%D h÷¨QíC¤ö.i¿öôú2ípéNåØß‹BÔ€vÕ>DÚhï’ökIßÕM)G -'I4%1éJÐìq{x™L)ñŸU™ïµÉãl7!2Îmû>?²¯÷”,äðàžŠüÙZ›ü)ß8åʶUåƹ϶[kÂتºw¸µíZn²½kšß!kÜ{Í¿²ˆ¼gÆ¢ž±VŠA"AJ+ÑM‰¸(ò]q0žX¯Í˜êÑvVÛCQ•{ÛU¬m#¨¬CÍM\ ¯¬l㪙´úéA‡Ÿ´î·ù²ø‚1õÜ&Œ–À6¸02FΰˆzýOõ”ïvŪ£ÑÖEëFà@Y³ZY”IKhØeå·ÜÙK½&¦we|º¼ÑË—6Lû‡ê¸q˜lc1ÙJç‰ñCöäÈløÜ»ŸBž«5¿ž\f«ÇAôì´qÜçU eñ¼´-Û]¶<ËÜ> -7¶jží܃ެú³Ôk®¯ïRW7,³½³ž‹Ãƒµ³òÅZß0m?™¯¹Q`«ª¾ûêvË*ßnª¿1Í©÷âCV–æL w–Žè‹ÛZUæ†dÏ™k ŽµpÔ¹0B—S€ÎÕH*$¢Œò¿õU¡Êïÿ*ÔÃM¤œž÷eÇaðåL?¢íª)Î$å(²U'믣nÃ)I"Ê‚…³Iu"áD FB«Äñö -vL|òøÄ)M#Š1’‰4¯0Ñ÷^O¸RÌ‚Ûhmb`ÞÎitS¢(åOCÏFTBƒóMAͧ)ð…$Æö|[˜¥Ne¼Ëmnªx›íòò`[a•õ©?M(”)›°2^O ÉîÕlÿ91Õ;w°ú”9‹'Tì¶3Ûl¬á‹€üxÛq,WùΚgN®z¦R†cejÙ‹ík«Ð@·ok!Rº¬—u(ÀÍÎ-Ùp¢Ë“Âî Ô û™:mÐ`‹sb ÙHh23«‘ ë¢ð\Ô1+ÛÁ„©?:«òË©·+ìÔ¸ô fÕà:0!°ó7û6~•ç[í¢l¢n]ž×ó Sš' -Q©dn§×íPnþÄ ãióÍíëÎ)Üa%aæ2ËDzæMj¿þ2eJ8ì˜ð/2¤ç«tÒëcoö8ìÆ<"ž@X¯'Ô5è”;¼žJçpyÉ?ë;âZWM¦âgSq´åfcl]Ù\¿ÉmÙbmm½ÚúÓ–f0ì)éSêÒ¢[>¼»–•ùt¦„jÃeµ6ÍDÿ6’nPæU‚Á©‡[;¹Ëú.X¸ûgpë}SW£²S—´ÿÿ¸VŸ¶ÜþËWH¸¾¬N+”[j‚Sxi:÷ÛŠ:Ô@BxT“˪<èË@7%(œÑ’¤Ãô5ª‡¿N|Ö毓‚Jî’‚Jû ™f5hvQ“¼Î -mۣʿk@C;+t—ÉŠ¦«É -ݹ®àÆ´³v}Üñ:18¼”ùÄàÑ„ñ×$Æ -{[ÿ÷!ˆûýƒOƒs> ¦I£vªëM~’\"!R5Ä^cNè[9 ÆÂàØ øgeóæßžZïf™_ÿj§+#ˆw/þŽ¹ÎŽ›æ=Í5gáUÐ -\½ -2ô¯lzâúÎõêüwI“òÌ) -å q NܤÌo¡øif`¸¼Âíétꎘs’endstream +xÚ½Z[oÛ8~ϯæee fy•Èݧ´Iºì¤ÝÔû4Õ–Žäú’læ×ïáM¢eY#À"@|D~<ßù/¾ÃID†2EU’+Ž&"Y<]áäô}º"3õ iˆú0¿zÇòD!•Ñ,™¯_a)I2_þžfˆ¢ xÀéÇÏ÷w³Oÿy¸žä<Ï>ßO¦Tàônö¯[k}z¸þí·ë‡É”HAÒÿ¼þ2¿}°]™óñavc[”}9ãôáöîöáöþãíäù¯W·óVK¨—`¦…ü¼úýœ,Aö¯W1%Eò¥hòtÅC‚3æ[ÖW_¯þÝ: zÍСüµ˜)ãH$ËB¡ŒQÖf™ð Ë9Î x”Îò7Lò¾ÔüI“ÐÝ ©’‚Ù‘J‚„R☔DrŠf÷Óë››týðe¢hz}6å£@ˆ÷¨¨ø1ÒN|ŸtX|HJéeâ!YŠˆØú +P#â=**~Œ´ß'’Rv™xÌ9‰ˆP#â=**~Œ´ß'’R~‘øL^I9.>DߢbâGI[ñ'¤ƒâH©¸L|&ã˜GĨñ?FډIiv™xž!.#›}‘î@Qå#Œðã°î€‘æ—É|FYÑ F„{TTùi'½O:¬=$¥ò2ñX¢<,">@ˆ÷¨¨ø1ÒN|ŸtX|HJÕEâ…8‹œð!ê¼ø?JÚŠ?!DÊðeâ!rÌeä„Q#â=**~Œ´ß'’²ËîvBÀuHáÈ ¢FÄ{TTüi'¾O:,>$%,zuzÆc$¨P#ê=*ª~Œ´Sß'V’R„/SO8â9‹œñ!jD½GEÕ‘vêû¤ÃêCRŒÞö7û’E3Æ•€#;E:Ÿ/Š¥kŒ±ÍVŸq0Y!#ùä +ÂËE¹M„¨‘lyT4]c¤]¾ú¤Ã IoÐVû×”‹I»?†¨åU>FÚ)ï“+I%º½D;S3¹I„¨íÕ>FÚiï“kIÕeÚ)ì¿2º=¨íÕ>FÚiï“kI¯/ÓŽ b”Eî!jD»GEµ‘vÚû¤ÃÚCÒgµ'SÊõM3K¦D")¤=|nŸ6û×É”‘þÙÔåN›<-¶"ÓÒ¶ïÊý¾ø¾vOÅÞBö®á¹*_¬µ.ŸËµsP/m[S¯ûb³±&Œmº¡;‡[ٮźع¦Ù=²ÆMµÓüK‹("mÄZ)‰)¸`‰.&Òª~,·ÕÞxbYº2cš'ÛÙlöUSïlWµ² ²M4wy¾º±Ë.´6g;ó`­bß:A: -ÈѬš­5ÊÿO›uùw­æý'ÇË)‡z† IÜ›bÌÔ¤wji3ŒÓ_Ð/ÿ°.ŽÇô؇Ýf: *sRU8ðp˜tWÕ?ì“•¡1Ë¥E™²„†mQÿ(½Ðsbz—¶Á—Ë;=}yÇ´{lk‡)ÖS,u(‘>ÏŽÌv€Ïkð%乎â¨õ Z=Ž ncÐÆaWBUe”¥³Ú¶l¶Åb_-Jû´¬ÜXªe±uz±ê×ZϹ6¾¼+]Ý°(vÎz©öÖz*êWký<@Ø>˜ï¥Q`Ë2d§šlmWõj[ìöÛ‰L‹ý¡³æ«ÜêdÙ[Z`ÔÅSéÚªÚ¾‚볉.åN/±œ¥_Ûn#­ ;~xá¬]±Øš…¼¨Šõ@/e_]–KSÚG34aßÝjY–›uóê¦Ù õZ|,êÚì©áÊÒ}uK«)Üâ¥pmÁ¶Ž:—Fèr +й3’R}b0ñ—¾»"Á±Ä‡¿»õ’!‘szÞ—‡Á—3ýˆcWÝáL¸@4WG3µ9^%E,'YÇ„þÍÕ}°iˆ ¶Œ£¹A|†µB`†“ž|©>qNó„À>Ã¥2Gtò3Ñg(Ä€Ûhír`ÞÏžhrÓ€¢$åOCÏFTFƒýMI(àWqJìggs3Õ¹L·¥­M•nŠmYïm+̲ޕÒç …cʬLWh²+GuËD¦NÌé]:X»ÊìŪ7vÛY¬×Öð‡€üxÛq¨—åÖšgVy©”áX™›@öjûŽUh [Çw­)]ÕË6àfk-9p¢'…ݨAö5wÚ Á(>TkçÄl²“ Ð.e&ªÕ>·î! /U›³ú8™ú“³?z¹ÂJMkß`f ®+½;Æ/Ërã³]Õ]Ö­±-Ë6¾°¤y¦…7OI¸œÞ¶Bõ^ \Œ§ÝWÕoÛ?¦p‡…óÜ\få¹üáè'Dßsá]æ<ø²‰ üv Eé ²× »ö>Ïàbú=aoQôá …PXßîïGü_õ=q¥ON¦ÒsêhËdl}º¹~SCÚ²¶µõŒëW{<ƒawz(¡Z/ºåëçë°kјW×iŽQm¸ÊÖ¦¹†èD@Á-ʼ€·›6¸ãU\·÷ÁÊÝAƒ›ï»öDª{g“öÿ77ÀêÓ–[#`ùS®0ËÓSÊÍwžCÙfd¼&Ðù’ð ®"M½×·~IÀÜIIòQîtJ~\ÉŒ‘·å@%wå@¥H}4¦Ùå š]¾$oëAÛv£òï4 á¸t—©‡®««ݹjྴµv»Ùñ¶$8¼%ó%Á9¢ão)‰oV¶þwY ¸‰cé½ ÌnooþýMø bòÜgR°ÙÂN\Pæ§Iü´x1‚7wt ôÿMŒQqendstream endobj -1314 0 obj << +1354 0 obj << /Type /Page -/Contents 1315 0 R -/Resources 1313 0 R +/Contents 1355 0 R +/Resources 1353 0 R /MediaBox [0 0 595.2756 841.8898] -/Parent 1294 0 R +/Parent 1334 0 R >> endobj -1316 0 obj << -/D [1314 0 R /XYZ 56.6929 794.5015 null] +1356 0 obj << +/D [1354 0 R /XYZ 56.6929 794.5015 null] >> endobj -1313 0 obj << -/Font << /F37 747 0 R /F14 685 0 R /F23 682 0 R /F39 863 0 R /F62 995 0 R /F21 658 0 R >> -/XObject << /Im2 984 0 R >> +1353 0 obj << +/Font << /F37 779 0 R /F14 717 0 R /F23 714 0 R /F41 910 0 R /F62 1035 0 R /F21 690 0 R >> +/XObject << /Im2 1024 0 R >> /ProcSet [ /PDF /Text ] >> endobj -1319 0 obj << -/Length 2683 +1359 0 obj << +/Length 3055 /Filter /FlateDecode >> stream -xÚÍ]oÛ8ò=¿Â -ZëH‘©½§´M{)¶é^šÅ°ÝÅRádÉkÉù¸_3’’91¶-nÉáp¾8šÏüñ™Q1™œéLÆŠq5[,Øìú>q7fîÍÇ£Þ\ýí½Ð³,ÎÒ$]^h™˜Ãg—ÅoÑÛœüryzqo?Ÿ¿?ûðëÅɱ–ÑåÙçsB_œ¾?½8={z<çFq˜Ÿ8 -{&¼?ûù” 'Ÿ>\ÿ~ùñèô2ìe¼_Înä£ß~g³¶ýñˆÅ"3jv ó,KfË#©D¬¤S}9úg 8êµS§ä'•‰U"ÓÙ\%±aÉ´YÌm®%Ó,„œð)!ûQ(ä¢êò«ºœ—ËUÿ8ÿoÛ”»ûæZʼndélLý aÔbÄf“„gÛ\¼#.Pþ"ªš¢º«ŠM^SÛ²† Œ¿ô(x½q¸¢¼Î7uOcÜ€…òõ17‘k¸]85aÑåmÕQG»ê«¶!x‘7DñÊÊv¬j•Áæxœ)•XV»U¹¨¾2–”™Ë¯VÄ<‹új‰ÂüéÏg, sîlÍ’§17`¦Œ!gŽÎ—>ï«®¯3Ϫ.Õ±8Ñ•\Zraz·3ö,Þ”M¹Î{ÏÿÕ#}ŸxVåævÕ²ªAœà.¯Ý”MO@Ó: *ÊVËk7¢oÝ÷6ï\ÕX©áŽ¸Ž3‘èçwTl–+Gª¼©‡½¯ú[‚rúÔUS¾öàÊŸ&4V4vÅW¯^M«à]X1 ùÊË´€°•É |ZEO6$ŒŽšÍòª\\5ô]9«múÛ²+;×é¾9}@MAã -ÂüÚTó®¬ekƒ}¾\ÁÆe£e™w"\R@Ô¨‰’_“D¿&‡16Ns!²LÎ]käp2CèÀðQ?=Ij„Ž¥Òr&Ms YÑéœ&ÖLï¤sn–gv-ul¦÷s@óÐr Ÿ±Mj65—\¦ôt"È¥ˆ -6Ïbmi´Û,e×Mh^­¤†EW@¿öÖ°²à§ŽÈõ¦&üà¡±Ì 7ÕZ²vœ©pŒ¦i2 b<ÏLtB˜ñZØƵ ´þߢÄħ±šy·=2ƒ„á¶ZÜN¹R¿YÛÔBØ3?çŸO/.>ã­D¤nP·j›®¤nq|OßN_R8þ¦»ŸÞîÅE¼k«w¦ ö‘V¿ÍRÐ&\´ {qöìmæ I?c¿ñKnäKÆ'@2Úöº¼.×k:¾^¶>É“`}£õI.kC$iÖ‚NMêу ×ÐãÖ¶43ŸÒ é¹{FA£›4¨‚DO7IJ˜ÉŒ¢Có°^we`t0£³ `œßQ40ÆëÁmý †â,xÛ^u:ÙÍþwÿ(ò>߯¯± ¾¯¾äwÕWšÅ*Ó/EsÛâÂݨ›‡¢Åóï0…%J…!Œ -ÃoP6œÂÜVX¢RŸ~ xþïwŸ?œO¹Ð–ÒžQÌhÇeG’*N~)Ò‰”ÇI’‘®óªÞ¬Ë ¯ ®õ%¬X\Ówð%bâw|IQ¬t'Á&1àSPu@Äs¹t[†šJ%µ¾?¿jïÊgT:’Õ_Y¥ µÖ/ÅF7Æ^‹ÍºÃ:ÒaΖòÁÙR:½784¼³¸È7u3Û{.a²°-¶@çŠn“š„Iz"u{Žéºä¾-U‚šÛ¡xÔ;w'‹¤óùŒ½/î5€‘d¿—ü€Ô9Ñ°¨J_ôi.bÉŒ+¢nV5\ÓúC½ZŒ’gá’g1N–¡á]Zø,Y„k¹…s¸Ø.WääÂfÔ{Ã-êµf”«Ü™+¢‹–,ÈØj ~ʼYÙ›–QC>úƒÕ¸ ]¶¡óì—©ã9/ -Š:¬Îè,ZµëÞ‚Æ“ÆèS®ÛÞÞyäZXÕqa«)XÔy×9\M´ób²>uU†ëâÊlñ¢€åß}Æ9Öú÷J­„q&)ñê¥L IU¬Œ¦èT¬ÛÕ -Ìä°Ø$‡JD"©&‡¸!6AƒÊø %]y q!0ŒŒJšÓ -:PAÕæö*r{E¹#â¬m‚}XÍ"bÇhžåÿÐ\NØ%1šIoÀ™ô=Á”3;DR -gv#¤B¡†c)m®ºÖnúzÒɬž±À‘j¿—KÿÒ‡$Nh°8,Ü[ÙÖÃÑ“$ÁRØM¦At™‚[Tª§ü+×)`!¬„Os+Ó!²¤Á@J0‚:¯éëjÁÙPy_Õ5AöÀ¥åC¾@­Z|K•lk“O d6„$ΙöSðõÇ(áƽž ûRaÀ3c ¤Ó I7`ÿNðXáÒ=s³€/ZJpÓ4¹áîk˜„˜¦¹H¶srŒÅÈqiŸ™\ùzo³ m/Á ËâµÏJü]î^›àPªÆ…zæuíS› µ&2NÞžKõ`÷œ1/ÇðF1Τöð;ù^(XÎÅñÁ0µH²­ÃÌ=ž„¹jl¹èC^÷ÜÂU'Þ ÓX%f\Þ–j$ lcÆáÈaçÈÙ@ .×]KC Ìp¼lGFÆ<1^ ¹>ÁK’ÅFÃa5XMêJàÈPC«T(LÇ–ã„:l)PÕÒõwn+½±]¤Ã.H”¯ÛQ®`2.8 ‚6ć3N¶Gv–}›F£5z¼}(.á@·kDæŽæ »Ü-¤XóŦŸ:…¬ ú×ƺNði#0 øò¶I :ð(mœÅÁ.ã·X¬YZà¼íK¿HÞOÆH8íT¦^2 ðv.¹7 [ÍE†o£M'f$VèZ– ¸›VÝ’ô*˜Ž3ÆÅv”¡êÆÖ‹÷nÄðHᛌ¨°‡nçÓïοøâÂç -ŸáKƦ±Ž÷ý´DÀÁ'ÄÔï+àß©ò›v2ü&òaL2}ΆóØ1eƒÚå\ ™f¢'Xÿ¿íÎendstream +xÚ¥ZYsä¶~ׯÐ[F© 姵­µåò®­\~°].ŠÃÑ°Âc<$¥•ÿ÷t£¼DI›Jé@ãjôù5Fê\Ÿ:­:1çQb„•ÊžgÕ™<¿ƒ±oÎÏÙúIÛé¬/oÎþñNGç‰H <¿ÙOöŠ…Œcu~³ûyóÕ·oÿysy}± ¬Ü„âbkC¹ùòêÃ×DIèóÕÞ]}óãõÛ‹Èln®~ø@äëËw—×—¾º¼ØªØ*XðÏ,xwõý%µ¾¹~ûþýÛë‹_o¾;»¼î2½¯’/òûÙÏ¿Êó\û»3)tÛóèH¡’$8¯ÎŒÕ­=¥<ûxö¯aÃɨ[º&?ccažo-œjÖe,…´ ³md`§p"ã@­ÉØÏBçÕ±{ÜþÑÔy»Íëô¶Ì—×VQ(i&ëÖxf­0¡'L¨X‰8¶Ñœ‹K:ÙI¿9ÑwW´#1-Kj8~©é˜jVÁ´]¾Oû²£NwÈ™œž.T¼á½èš;ñD¿,ÆH&Bi¾"ëɬdígá-ùFÛQæOemE`dø2ì&æ²–"T2çâëQ®zSÔ»â¾ØõiIýA¼f"Þ„Åk¦âÕ›/àZñjË. äææP´4л¢©©¥5íxëd€7Ad¸œ‰µcµ=æYñ‹”A¾#ÕUpxqôFÑrëÒߌ1éHØDÓÅ1¨P¨"‚”róv·+£”Mëcžy!H¤Ù¡¨ïxó©T%l¶&n×›p£Ý¤“í´1›Öo‡ƒl—¿vƒ-· MÉÀ¬ájO/ bpö †ÈàÎHÝò^‚DÄQ”ð4Þåíªé”¢îò³ÅœÐ@ש¨ŽNÍ=_¥ó3H¯í±©[:æ§}ãÈ[R\ Œ2 æš«Ò:C-EɦÙÃ77P4$ÞütÈkCÙ]¨Í  âÃkÃàÌ–šìÊo°MO ÏCQòn|k$¦¼ç(wÜ¡9uÛ¬ïÜ­¤¿ %"TD$lLuñ„YÌعwá 9p@“Óº}È™z}-¨ñ¡érHÚ­˜x‡±¯™„#7*æiÎ÷aæmriàd+ UyvH뢭H¯ZF`äJÏõê”igYø ‡Øš}”Ü]Bxà0LFT¦÷b'NŠÏÔøúÃGjŒ Y´€Ó}ÎÉ`ß×NÂbPOñBÆŽ©©#kÐìèySÓÑ å]“·Dvܹq¸ô]Nm²{h,ì öuzÅþ/ÒÊüS–»ÅÒëë6ïør”]~"ØpyGº[ÚÌ®ôCPÄ­,'òm^6ÀrÑæ¶ïh€Âª^¸4Ž¬õÒ¥‘B.í=·èawµ‹¼°cW>^(¥6èµÒn®ø,§g˜}LO]‘õez‚y³;‘Éä{U_Qg¦$LôY‘ qO$^3Ë?‘%ÛE’#Xï`2Fâh×ùMÍóÛô¶ã¶Ûý©©¶ÏÅ%ö¹ÖªÄǦºYÛÆ +kãiøÒ‰e£Íš +.¿sñÞhHÉ'ñb„™Y¢ÉNH‰ó„ÒÉ,嘳Á W¬€&Ñ«V‹á?MãˆaDq‘Ó@F e`ç®=&B¹HÓi§ ¤¨Œ„QãÏÇO¦íÒ.]–?8¿Ð!˜á}Ñô-uµíîÁÙÓ;?¼&$¥¥HL ?# ZÓ,[²'B«à/éê÷¾à°DÔªw¹[Í-5¦(è?Òù»Û”žä6è9Îv|¹A[j¡¢Q9ƒ¸¾Eô ¢À²pµ}’ `hîáV¬O+@­uÎïCN8êùG"$”¶¯#¡à-èònáònľã›U„2ha¦­Я +>CY¡Uœ(@ö±IæLLJÍ/a(Œ4úÅ(¢„ ¥}1Š(-¿‹ u‰+"|쀠ÃáH96m[PM=OðNX}ì™È R`"l¼4 þxôP¥,ªbáäƒÝÚ…ÞOû‚7xï-ÏîÛu©V «¡°a¥¥Ÿ¶,Ù¶øcM®‘†‚ÔFƒDè.P'Ù0Ñóìõv„P¶Œ°µÏ¬š²/ô«¢&ÿ4“üOC´Ó€H,!&¢Í“C|î€_æÉzîœüta!äw‡íZânúnÕ@EéøóJ­x(µžnø\…>ÿeYYdkûà{Ž6£‚iÐÇ +g®UD5ŽÂÄìÌ(€}úrGÔ[^E‚ŒEk½9ÌÌ)Þ)*_qk›@«È›óÜÚ°?ºÎz<²û»Ì®yµt&ì×¾……<õ–z)}Ú*%Š6u_Ý’ñ¥%ô< Döªˆ˜…/Õnï´Íy&šòç +-s +WÓÍ ‡KƳˆqéZÃÌ +waèå-;¬ÂÉ¿å¾)¡*öóÏ)ãÚ¾ªRŸ}^¤Áöùg‚•ÄáZ*ýoáúÙ·^-!¬…Á+ïêÓYÏ¿õ³VqÎ왌0ŒÂ¼xü0kåüyɤ¿Ås®Ö¼>*´4<‚ÂW “€¯Ç<÷z•2{´ñjÙ]ªŒdö>Ÿ•tÑ®é:„û(“¼ŽôÌkzs¡íËzžÎz^Ï쉞³2Ð\ßm]{¢òàÀö"'ìVfÖ-aPõœ’rŒï"ÁðøB¦¢'!œÕ¥òê±n*TʧÂeœbð-„Ž Ðó&¿ŸÂ÷ûëiñdNZÞ!x8TT¤l)Z-@†ùÇUu‹Xšùçº`ŸØ@ â@ù•YúÎýt$œ¦È£éA>pf +ÄPR¾æjO£0}4D(–À )º>€þ¢ÙÎs³<¯\iêMs~wÖƾ,ë]¶{Þfñ-àÍ+6;™õ‚ÍúYÏT 3Sµ±‘}…aÖ +3å@Á-m¸`ÀƒÔ“g/è¤UÓ»whSBÕcÍ,5g:°ÊÇŽ’§¦75øö-oÈ8Y{œ¬oYÿWÑíAÛ&Løg¿Äé"ªRÒ,^˜;„”ÁŒ{Y VQÏ€¥™”sÌaÀ¸·\¹ø†°è°v|úð#´œ}Qsò.‚GÝÝ1\l¡^(ùÇ:W›Ùáý“y[ÁCŪ8|¨ ¾qç;äƽl"9¥ÏÈgàN:ý•Nmî‹üÁ…˜ÃTÓ#Óã±,H.¸á1= ;üSŽR Ø>yo¦Z0¿ÀÉI°y1 ùÌcæO Jè`x9Qáûµ°‰D3ˆá¼o`f^b åâOµŸ Â`ü%2âŸ![|™l»"k·øòRç%§Ð0À¯½î¿N)B¨n¿H®nÂI:qÛÑ\h?ÓŒ¢Æˆ‡-„¯L;þéÿDÿÐJ Œ"2šÇßyˆ6 T¥Õ|ʱ9uÃÞcçWž”"Žôoä:Ä'0îß‘f‡ßÊ >7ð/ýÂoA¡7€P$znæOî(„X¬[Í__<÷ Ú +üï•è(9üßÿ$2þ‰„Žãg¬–=ƒ$òL93³KέŽññ*Zaý¿{Ò>ñendstream endobj -1318 0 obj << +1358 0 obj << /Type /Page -/Contents 1319 0 R -/Resources 1317 0 R +/Contents 1359 0 R +/Resources 1357 0 R /MediaBox [0 0 595.2756 841.8898] -/Parent 1294 0 R +/Parent 1334 0 R >> endobj -1320 0 obj << -/D [1318 0 R /XYZ 85.0394 794.5015 null] +1360 0 obj << +/D [1358 0 R /XYZ 85.0394 794.5015 null] >> endobj 418 0 obj << -/D [1318 0 R /XYZ 85.0394 711.7496 null] ->> endobj -1197 0 obj << -/D [1318 0 R /XYZ 85.0394 689.4384 null] +/D [1358 0 R /XYZ 85.0394 676.0481 null] >> endobj -1321 0 obj << -/D [1318 0 R /XYZ 85.0394 501.5031 null] ->> endobj -1322 0 obj << -/D [1318 0 R /XYZ 85.0394 489.5479 null] +970 0 obj << +/D [1358 0 R /XYZ 85.0394 649.3007 null] >> endobj 422 0 obj << -/D [1318 0 R /XYZ 85.0394 143.9193 null] +/D [1358 0 R /XYZ 85.0394 161.1524 null] >> endobj -930 0 obj << -/D [1318 0 R /XYZ 85.0394 117.5499 null] +1361 0 obj << +/D [1358 0 R /XYZ 85.0394 132.1973 null] >> endobj -1317 0 obj << -/Font << /F37 747 0 R /F21 658 0 R /F23 682 0 R >> +1357 0 obj << +/Font << /F37 779 0 R /F21 690 0 R /F23 714 0 R /F41 910 0 R >> /ProcSet [ /PDF /Text ] >> endobj -1325 0 obj << -/Length 2874 +1364 0 obj << +/Length 2948 /Filter /FlateDecode >> stream -xÚµZKsã6¾ûWè¶òÖ!‚$*§Iâ™8•™ì:Nå0q¥h -’X¡D ¶•lþûv£Š”)?vjËF£ÑèÇX|Ÿ©˜ÅZèY¢#¦B®fùæ,œ­`ìýw~{q~sýÃÙÅu¿—á~y(q#ŸÏ>Ý„³lû‡³IªÙ=tBƵ³ÍY¤$S‘”žRžý|öï^à`ÔN´™±˜0 STšÅ†Ð€o‹¢-ªmVž2ÑóÆäØ¥Nžåëb»‚NΕiˆ¼­Z7¾Î¶+Cívíõ9Oç¦ÙUÛÆÐÌäñyk¶-õ Uhr³k¦^]5¦u‹TVÎÂÔ¤R–4ÙÁî°ù€s¦•v'Ù`'BF~'o°—BÏùÖ”Õ=hÀí@2¿íZȳ-6Ô¼ØììÚÕ›bõÃÆxkHÙ™zYÕ›l›šÜ°ÕÕ¶ø- HlËý9ç|&C5¿tk qﲺ-ò®Ìjà›Ø“YâŠK܉U&æ÷kƒz¦Ê{+Ð4²‡„¬q”­ëwíºª‹6ór@QSß™š†a ŽÆþ¬¶nµvµD[gN6lvO¤…)Í*C#»¡û¢]ÓemˆâuUvÆÅÐUÃzŽ”EZ(Ëqi}/:œ?uÛÊ‘oÛ¬p,ÎoP¥‡bÓm¨3:$ ÎsC>Ä%‘ÜœlŠ|’Aù@—‰Bm[ôJÐBŒBì¤K˺Ú(ƸiÃÈäaÄâHj˜Ó`¯EsÁb®SDz­¦Ä(¦TêYÐǤVÎiój›_˜îArðS²öf쫉ÙIÛH(­Í2—€¢ð±r"J ­·tvj£R²ó"±¹Œ aFA_"–ÁFvlÀyÛ ·‘ -®ƒ‰¿£ˆ‡~Ÿ»°Sl­‡ÇÅ44¾ûø35HgÛ\dm6éœ?Ù¸1¸á]Qu uE“-î س•ž2—!Ó‘ÏI@:ÅàQ¤‹DhîKgõ¹+\Z"ê¦Ë×®E!d(Ïm ô÷4Bñn…:…‹mkj—:c2ÅÂm®·EÀcÉxr|8×ë®yƒ™9™˜¡cg\©ÕGgÜ—åË -àÔZ÷Ðζ õú# -JÓmvÎ)P8´y+£ß¼¹¯È³òÍTNjûSVÌ”æâ‡+î¸6+bÑ %©«(P¹n ÐQnKkYèÝîiôt:áIÈRp¾‘Ù¢ ]â˜Ea$ŸÌ"œEq¨žÌ"œAËKa ¶pÎÖAç¬l*¢ìª¦)PÛk+·§É‹åÞ]Á†¨™J¨Ûíl!‚À+‹Mqä½ßª£s·1]¹‰Ù zow×L[U(Δ”±?´ì!p–mŠ?§ìšHJ•ô¡½ÀZ±–ãñv„PµïáŽ8 J_Y%U_èoŠ-Åg4¨ÿ4D’zD¢1m ˜,Êpëöøe ‘”×Γ_ϤüvL!‘ªk'”%‰LŸ ¡Yš$žíÍ„ Åûú—ïó²È§ä¤LÁ>Û!„šr|0’¬›`ƒ4F?Â^t’îMYŽ)4ŸcZjîý”¢°áPÖ¾—I¦ RÎRÍõQÚAÜ„¦rþ}uoAXªâ£Ú6t$5t$A¤ù`³¿òŽ,GÞ zàhÏø0³nÚƒL§¡®M]Àã H.Ø‹ ’“ÞÒk®‡8ÌKxÔ!´œ7ÙÆéHg€²tRnÏöÖ€-ëÝ(¿Ësc×ü´aÙiÜÂD[e´FišÆ-ºéõéØ>‹òê¦UžøØg£”ñ¨exÑ׸&?ŠG.yBwŽ…Ùº3Pût储·ner)å|=r¤xxð$q’;IlZ C­WcÐ?„ríwÎý^F~Œuµ´.êo} R5õ†z}šMF•Ì·Ýæ–Èm¾ !5ð‚è¢*!eáK÷+;kŒãDW~ÉÂp ¥ñ«¸ÛßPøýºä0áɸÖb<-a°e1Œ-[ÃØ6 ’I8yíE.«n¥½¼ÂIË®í6›Ì×@_«¿xA‡œ»ÌZ‹-PÙ©â/ ]‡\&¯K×ìÑ#‡dÍcðìЉ'%ˆ)rÑ›Ÿx“è¹&qÎpu.Bµ—?½|Ï5±þìÅ ;Dc.§¢^3+öpàÐ)€/uîù[Ê “Ž6¾`Tjz'Y˜e֕οî²þ&]4SgCÍá‘~ Ò;uÎ*apóSÏœó€ë‰sö\ƒsÎK y» -ì%6öèÈc˜¤ñ´&=ׄ*£]'‚I™ª±.de¡ï"ÐvåGø‹Ì†ž„«Í,䕇{#Pá¦\¶âÈÁ·:4`[hªªðýñêš<àÉÊ‚‡õ†.)@+}ô ºí'›¥a¤Æ…IÃ>òÁRÁýL¨,]k–íÊ”€zpp=¨ÖM‡ÔϹ\Ò(Á,B4‹ˆÐm@Q-çY.¯«»iJ®9.4î40÷åyg«ÝiŸ ³ÇÏùì€ë Ÿõ\'n ãì¤Y"Ògè¹&4ŽŒXê#<„rðìlSuöÝÚTPåáÎ mªtà•û–Š§¤75øvèp²ô8YöѶþ‡›E»‡ÓŽb=ÿÕ‚J?Åž’Œó0:z sÚ!|¤ -Ù—jÛ°Œ×9æ°ßcܵìuñ aÑ~nÀªÇвþEÍÁ».µZ9¸ØÀ}¡Ü;!•_+kºM<ô7VîÒ·ð€ÏñÛ,\"ìË&’3úôþᨳbgs ôî -soÓ ð¸ òá’ÙnWd¸Ëj€´Aô~âÁªÂÛGïÍ™}<Âú+Ÿk1²ùÊ#õ(£p(½ýË ?L¥„i)FÃF_¯ÌS”Ü¢DÆL§²ÿ‡OΆáÀ„áüç¶Nï»ö¿=u† iB?Ø2ý$dߌä»ß¡Zן¾ÚÕfY<”f{CYc É4¾^ŽLö‰8n«>b°ÁïUý;æ9ì~MŸ›)ïq“wuuW,LP<,ëWÈ)P›ÏiÚ/’aÛÿy87è;J‹–ä1þ WÇÔúEÚ®åKS7/ͧfônLD¼‰P«ÚšÀßú±ÿ¯ôvïèM?…}Jç?̾ñ>f?MK÷Š€O§Gc7ÎGÿ~µ‚¦êêÜvZì"~‡(‚'Â9ÁZÌ’HFVÐ?íb:IÔl@?ìýÓ®ªÛ>ª°s3¡þ/ñ7úDHÏà.ª?VU'LÄ6@Q%u¬j<Ð_­ª€,d¢'M -9¿Xî_fPÄ©‰ˆN4þ2ƒ&Pðó:>oÌÃÉü?ÔÔœ‰T$“牬ÛÒ  Žöáfš.mµ‚C™ã Wð–™ô…›Ñz‡½Œ;©d¢4Š^½ØØ&2LÅ*š<¼¡Mú³{½YWC›ò=“§ú%fQ¯^ll–( Y¤S>i€®5 .쪪<ª_/Hüãù¶FäõHDß:%%˜„}ê÷$R1üÈÄ]"ì]ì‹krø!N*MO<™ˆ$…c!N)‹ÊâÇ1÷£”ǪÿQ4endstream +xÚµZ[wÛ6~÷¯ÐÛÊ{B”¸š§4uR÷l“¬ë>9>9´DÙ<¡H•¤{wûßw€x‘ _’ôè¸q0˜Ì|3Åð£³$%©fz&µ IL“Ùb}Ï®aîíuk"¿(¯úéüè‡7\Î4Ñ)Kgç«-Eb¥èì|y1O #Ç@!ž¿~ÿîÍéÛ?Î^K1??}ÿî8bI<sú¯l½={õÛo¯ÎŽ#ª:ýË«ç'g8•:?¾ûG4>=;ysrvòîõÉñåù¯G'çýYÆç¥17ùóèâ2ž-áØ¿Å„k•Ì¾@'&Tk6[‰„“DpîGÊ£ßþÝÍÚWƒò£1aŸyƒv¸(²WUÈ÷À½e©rÂ**¸Ÿû"ZQæ-êªÃ­ «L{]˜ŽB)Á`†Ýó×°ßÖ‹ÏöòC»çUQ]ãšÌ £a Ýä‹ÂøZPÊ>ËL¤àï½½›ÝpÄ…&q ¾(……Léô)‰Á • +‡£¨§IúX3pÆЖtØÙph]žP%±öNßúŠ§‹@»Šòƒ" Db)Õ÷AOñˆDš¦r*‚l¹lˆ€û‹jn +çó/7ÅâÆ>Ì'±P;7ß<¸ë|”žûþé‡[#püHŠ-Ë€õi-ø<Á’·!…Ó3) +–A4WŒÁñ¸ œ ñÍ‚í)Fc’û‚ë ŠÊé—=$XNt,¼d!lÚ%brT +h(øD‰©ý34 ®Çr6Zõ1Nâ .pS´Ÿ¡MQÂèµ ¨ †¼Ü9U;D»ÊëJ·\ XY:}ºz‰†q §;†Pƒ×Y˜8k0Œ;ÆyrpÅ¸à‡®Ûðˆ³ÖÛ>-[¦ç-®C&-¥ÜPªk6¯q¾…»Œˆ¢:‡³Nâ9´‰Û¼@§0¬÷òûæš‚IHyØRžRöM!† +úÿVkí)Fc’ûÖJ¹&IJå°óÃÖšzÄZ™>Lýøc(H9Aââp)ÜšDs> „§FVw:,g§Cž#ïûbwŠ§k)›ÖÊúh¸Ø-S Т±Åÿ¨Nw°÷‘184§œˆ4ÖÞÑ„h)ÓÉ5‘` v¬_å!–÷íJSHŽ$=^¤$ÞHÌBÓøæèâFcŠà¢€r¬Õ°ññ•‚碚MíAFOéÄP+{²nÿ¦ÃŽM68\ñ‡*f>&™ +ô/nÐ]å®)èaÌ$S扎ÐR7,+Zƒ!JsíN•eý%t{$‘²‡Ïøv¹Åbþzì!í¶õ°½•çŠ@´æS?49žVîxÇt^bßå–ØÙäͺèð„r§ f,¨¡0îgqL$냔ñ ï\ÍÀÇqP9¤ï +kßo=ÁhD1n5cÓö« ‹"6™ÀMȈ¥â»qØ|˜CŠ<À&š@º d¢û»pŽ£õ€ Øž`ì1ÛSDP¥'¶‡º·—ˆ;$ÐBö"d GÀ¤óËÀ6ØI å Àèn7¢#4€}w—Ýì +–µ›³I˜iŒ¡V9Šj‘ã$ÞQhL¯3¸ï÷ì²ÂmGl‹®¸µ/1ÄAæbÛI[Ê8˜ÇcÃEšb'Ý×76­‡62kj yµô>Ü—OÆþf§NÒÖXEXäÓBÊDh=‰?·@Åížm\ùbÓH—˜Õk,£°¸ípë´x^‰+!"Q*Ǥóˆ}Áe—œÒGì‹CœU§S.·'q»™àqؽÝ´Ð3 öž‘Qü®H¤q6JD …Hí ‘XÄ +Õß6Ùz5”°Sbô4R Wl> ¿øaÓä«â®Ì«Kœø¯ÕŸÉ(\¾‰ï¿ÀWõõ¶Åæ}Þ~ª›O-™îK|\† Ù½¼iêÛb™GÅݪùZ šásiL‘/«¯>ƒy7Ú.7Q[ü'Ç¡j»¾ò¢}…uv÷lö»&«ÚUÞ´_µ½;Â"*šÜ [u•G°à‹§ø?ÏtuïÆÛþ:Ýô¡]?ç÷­·1û0þÈ §‹Ã3„Kg£=[N‘qs‹|8i±öøTj€š2q :@õF'>Õug¿ÀÀÝ*Ó¹ ðg¾²BMèÃA>#“¬¦û¬jIXÚçèß™Us¸ÔAVÁó«û§ 4ì@n?K å%Ϩäd¨ýÒƒ<>.ÌA3‡Þ!!aŠÉ 0Á‘5SYº yw®¦sÛcGÆi€{¿aýËÉ~ÃY&› ÃNT\šx(ž½ÙT&\hKñ¨LzÝ=_,JiÌC¶ç &h|ß"–äÙ›MÅ" ïZÑ M~Ž¬hÌæѦ6%öIüz‚㟾™Ö$‚<Ÿ„Ų·YyJ„Pb'üëeÅæÛ-I)=bñãèoûø + °ê¿&8™`6ÙWÆ`4¦ó%òf?˜ÅöËj“-lÇ% 0hQ:Ø®ëξÀü·Î˜N¾uBvá2¹áM‡‰ Owøni’÷êºó…u>uȦP·„6ä$e‘»=þµ«ª–ø%ÍVV!ûî3"ÌÆ–ÞØŠ*€¬0j™êqò@ cZ…*pšÈq‚Ar"¦öŠMÁ¿p­ÄcVÈM1A†>mJî>Œ@£^˜Æ¶™¹9<7XLWop¤ÌomÁJºJ×°ˆ›´Ð¨ázÛøìÍHéÔŽ|)ïÒQ΂%¬„Єûî¶ÈƒUaþ;°w*c2R£q 1FËsx3J(¥ÏåmZiJW9cIW•ºšW@w"&J&OQto{,õkÿñ>1_IêÖmoLÝÖ8äLXá)qzBå³SiÔ¡†> endobj -1326 0 obj << -/D [1324 0 R /XYZ 56.6929 794.5015 null] +1365 0 obj << +/D [1363 0 R /XYZ 56.6929 794.5015 null] >> endobj 426 0 obj << -/D [1324 0 R /XYZ 56.6929 350.5137 null] +/D [1363 0 R /XYZ 56.6929 769.5949 null] >> endobj -1327 0 obj << -/D [1324 0 R /XYZ 56.6929 322.7017 null] +1366 0 obj << +/D [1363 0 R /XYZ 56.6929 748.8062 null] >> endobj -1323 0 obj << -/Font << /F37 747 0 R /F23 682 0 R /F21 658 0 R /F39 863 0 R >> +430 0 obj << +/D [1363 0 R /XYZ 56.6929 495.5006 null] +>> endobj +1367 0 obj << +/D [1363 0 R /XYZ 56.6929 469.1643 null] +>> endobj +434 0 obj << +/D [1363 0 R /XYZ 56.6929 192.6113 null] +>> endobj +1259 0 obj << +/D [1363 0 R /XYZ 56.6929 160.5008 null] +>> endobj +1362 0 obj << +/Font << /F37 779 0 R /F21 690 0 R /F23 714 0 R /F41 910 0 R >> /ProcSet [ /PDF /Text ] >> endobj -1330 0 obj << -/Length 4168 -/Filter /FlateDecode ->> -stream -xÚ¥Ërã¸ñî¯ÐQ®1Ä‹*§ÉîÌÆ©dv3ãÍ£vs EJf†"‘²Çùút£|™{6åƒÀÐh4ú X¬bø+k¢X9½JŽL,Ìj{¸ŠW{èûáJð˜M´úÃíÕïÞ«tå"—Èdu»á²Ql­XÝ濬¿ûãÛŸnß}¼ÞH¯“èzc’xý‡›ßÄÑÏw?~xóÃÏß^§z}{óã|÷þÝÇw¾{w½Ö˜/Ã… ïoþüŽZ?||û—¿¼ýxý¯Û?]½»í÷2Þ¯ˆnä?W¿ü+^å°í?]Å‘rÖ¬á#Ž„sru¸ÒFEF+ ÕÕ§«¿öG½~êÿŒ²‘±2]` +!"gŒœpи(QRy⦅Äq¼n‹ÓCq¢-~ê²®8uGŸß¿Æ±¬Ë®lj‚duNŸÛl_ +`A5:±xµ‘I”jçüJ·÷a 6Jll`0Žažã’@r -ìáa#Úb±Î‰¶¢¥Ïí}vʶ]q*Û®Ü2°kè÷® ß¬m›m hrú~,»{î¡ŸÓµ°ëâÐt~‚\×Ù§2‘  .Ò©õÍn2óHS‘¦/4·*®ÅºÞà -°³ÕFÛHÖì©DB`?Ûçù„˜uw_ Ë•ô ÀSVï j6;žåijiX@µmN¤%JU¬×?ÖÕõRjš¶›­¼%4½4 ª*;·<#;«²à5ÿ>ó¿yU´L†{§›¤UAf„­¬éÌ•9ȾKÇgŽüÏ£mSïÄ$:±æ¡±Y¥FZh¹H$ê«bèPÁôKb¨PS± †©Zo³šÍv{>Q3ã>Ú8ˆL× REÅãw“A€©©ñöçSÆú@„T< aôeÝ–9c楄‰&ø¡,—”KGÖØg»B™II÷üe]dãT‡c/¬“ÆyÎ=“âž» öƒ_vÝÔýNp ‰Y<;G65¯9<©Å³å[T3ã`I¯°Vwß´¼<Êz€6b¶´KE¦ÐBã‰5Ç 0‰¢3‘nª ·X*)á½y-÷u3h­Nc~ x(ÁšàÒø1° GÔÍÒŒ§5¯àOâ¬\â)í ™ìm¾–Б´ZþÖµøv'gpKÜT`À€Š);ób—«®zÃãµÞúNÏBmÖOÍ™yÙ’yô_Ý=*ªÒ‰ç1ÆÖ¿ƒ-Ä6šWüÝ—e½§vsæùwYÎ d]†œKÜú>÷#ËŽ~3Ær×ìÏÜ|,«ŠZìB¼v ÚÝùrwZ²©ÿ9ƒ§óæ ) )T¯½"öæÎC˜=ôñUç`‰w‹*…1Eœòù‹§(’$Œ*ÛLà·EozñT‘‰ ¥f¶ÛÁPê×ØnGZ÷â}<5`7å—Ý’àØXbÂjÁ­¡Ë‹½åúP’^èñ¾ð\÷^ïUj×U³Í*‚ ¡µvCÜA' þ„aü!k»Ñ ΆÐ1·GX¶Aâõ‘ˆGP3RÅÈÄi¼PoYHAH<=q²þ¯·›Øê HhwžöØàFj†ßóÞ›;|Ov¥„#Ãð*{($cž²×’Ò&$r:MÙ\!šŽ×\²JÊÆೃË~*–ä Œ‰Ó*Œá•ç'“6•ÒMýÐÀt–Äv™J -Bjæå%ç1À¨â!Ì86m[ÞUEDyÃ~Úo ñ,nLª¢ðX¿^æÑú¬âx Ýòg3 ä44õôœæ›T¼I\›zCL’tI&éW Q -Ú«MavG Ø4ÒéX„¬4Þ-GW©‰Œèã³—TÜ•QAŸ›#‡@€½¬‡UˆrÁ–ãøÝWÍjƒ‡ù©-}ÜÚ~f4 òž…8£X§§œÉبf ºè_.F•ÚªàåN¤.·m"7ÈDp[I–‰Í’´b0KØɼÁ,!l¢ÀÒ f Çù]YJ&p,+µ´.•cõ¦Y‹ZǪcg¦\#$Ód*Çf½#m;p'I³ †aSÁ6³}0Í0n°¨¨™6aÍLXZýÌî͘?Фz›Ý@ÂeÔ²wZ/›MÌ3iì%›oˆ9!&rêB*ÂȘcÝxa„õ2 A†ÑÁ3ˆ¢#/¥¯‘Vò£7ÿx5¥gfÔ€¬ ôŒ2JÍñvçÜMœÆqçã±9qE `Ù¹kÇ€tRò©×;2uкËü†Fë¾5oï9}Ýq@ìb¯þC20„Cb”G;´»ðk×uáZñúho^Rþ‹Þ¾ÜÞSs´y;Þ¡ëwè8è‡þÑ< -鱕‡å›î÷ÐÒÁ|CW¼ÊŽ¢2œ½Ši,ï8g¾ê(7ý¨‰Œµ÷͹B*!ͪÇì©¥öcsúŒš“$ìx>)íI)Hâ.™s+#­”yµ9ש A"rmÑPÝ+ÑË—:7±“¼¯’ýIûÀû³ßõQ·ß%{ô~E&ƒÎÌ#¤ µáô Ñ[ery½ÌC« CfÇ[8ê®ñu%€±Ñòm’hxëK#a'åk¸·—<ø(ÉÿŠõ®a,ŗ쀡c ±dŠÈ[Õ“ÈÇ8W•AÊGåî¼ß?Í*|ÛSÖÞ‡#X©ms:]ÛõùØqf<ÔâíC‹™33X‹Fé¢ µZ[\äu{¡° {yìƒz_a\'&±CD/,Ç =ÀúDÚ§cîÛA~zìxZC¿¼Hº~÷ý‡O<ƒâlåŒÃá\ƒÑóŽ—ü€†œÊÌÜ×1u aâM<­7^ÎéÓ/‘¤Q,…þ†0;d`¨L<¹¯ÊÀ’¾,†‡´9çÇM[þw©. $¹Äº™Ç„|½6ž“åò$‚˜·ÐúùûŸ¨Ï£õ NÛ-Iöe9°ª+©dð»'‚ûê!øŒ …™ó¥k¼¤ß¹µ`Ý’©ªLR$á¦gbð·káIUæÔ–¡šFH‚’¹5P Aîž:S·þ56ñEsî¨Ð‡Ý}É`.#eÑË -B5tsžˆüßg°?9`ÑRá–°êx8åÖ²¾;Wc”«)ÀÓ²½§N¿-Ñ<#p6 -˜±cNå ˆÀŠQx†_o´÷Çš1q$$º/g’vד3Ž°€7Òñ7ÛÃæÍjU¼™Û²!ì˜4¶yXž¥îGŠn°«{IµËÐâklˆ1Ø£¨¾*’¢ý‘¯Ã[>’‚¦³æ²/_US0WªÏGz¡*¨©PÁ‚¢sûRÎü½=T¬³Ø_´þ–ˆæ“C+¨¥P½±Åì¥ö•O7Ó*´Š´TGJÅÉì˜û’’TMJ¾û©BXÕ8V5ìêU ;Iî\È¡­äË$€ ª†Ð©ªmT,X¹<ú H¾§ß \ØÏâÐ ’ü¹nç"óí’ùÛÅ•eÈåà‹îf.9u°®CB a7Ù[<6æâ•UãâNಛä|“ç‡`¿­‚¢”Æ Û$Èn]láãb%ÚÈÈ¤Ò ¥-|e,Ø“Å®h,Íðqä²,˜Y‰Tˆ%ÏÑ6gßØúÈ3\›mù aq¿ë¾ø¿ ÀÒDª¿-…Dæ‰7¶äÖðc}ŒyVKKû<–;ÐeEOÌ×IœMÇÑX ˆ›®@71hi x-7ËT^ÞŠìo½ÄBBÕ_ Á—„$?üõe ʈÖ[C~‰uyL“d¸å*RM@O½æ’|Ÿëèèš&gøÁùe@ã 6úÂ0 -›aø1ë¶÷¡ÄÄ[˜ì£oÊî±¼ˆÑ:þNlA\ûÄéõ?Ñz þªþÎv÷Dœˆúš³×j{wš†xÞÓa#c$A7WŸí¥âØ]£e8‹^S÷À ‰þRzÚÏš¨ÙB4õÖW’_¬‰Å߶X*£Øö·Œ>‚ˆÕ+0xžÞ¯+©/lÔ:ŒÖÿ•G  >ñ…õRš­õÄÝ.Þ¹¤‘r=ÿG—¨¸„wM\#•¤³Kƒ»b–„͈˜Yï¡€÷œ vSI;ÖÉ´/G¥ìtR•Ÿ|§! ‚F}>ÜQÁš_0¤˜NÖÛói VÖwÍÙk|„º¢˜Ö'¾h¼È„ÿ8mšGѽ*%f¼•‰p._¥‚é’ý3Øá‰WsGwöÐc&žG ȶÁ$÷Î:\ú- –„ìl¨—ô4oŽ,΋R–êHêxš£EáöUD±ó·¯¯I …‘_Ÿ‹§ Ù»‰9ÏÞ5d9ˆñ¨%ÈÒ#«"=Ð -‹ÌŸeI|¶¡µ\ Êh^ó0KFÎZ»ü,kÓcÜŒQ†7Wã» Ðj¥Ä°²W–|) —‘Ž) И“¾‚˜Šõ_¢XÃÉYãëÛO7?¼™ŸŠIä\’øÛ!•ºYH§ýŠGïÜúñ›ñâùônmŽÉøTÒm -~Õ<£&1‘jB̳§vaÐKÌq1­ -ɺË*~€—Z ÿR€›Nk6™Ú¯rú¿3¢Ô;ò~ßÚ(¾é¢©u÷ÕUðÞ›J'×.”kÁÁ¦ó’®iÜlMƒu‡}uç¾èaúBšaƒß}Q'z}‡Ÿç–Ø`BR“PŽ áÄ‘`Èvðˇ[¾q‰Àn”‰ÑPj ×¢^æ/¶K® ˆDGé³wV£°¢b.rú,i}¡x" /_Š1uÚ.ÕP UÒÙ—î>جËx7Éjˆ¨Æwók|¬’©Ã=+@o~zÐâŃž2NþpHžsVÈ8)EJ8E2£»sáÀU*1»;'¿ëþIŠ™æ8'ÑýŸ„ӥψI pJ”ó,êÇ|„¦þZiéŸ%”ÁËä¥Õâþ¿þï¤þËDC n­\&\ÅId%DlL”ÿ‰gŒêÿãâ9éÿ¯‚?sendstream +1370 0 obj << +/Length 3951 +/Filter /FlateDecode +>> +stream +xÚÅÉrãºñî¯ðQ®1ÄVN“÷f^&•L^fœ­’(‰’™‘HE¤ìq¾>Ýè7S^’CÊ  nôX\§ð'®½IR•ék—éĤÂ\¯Wéõú~º|üðåÃç>Ü,…7æKÆpaÂÇO¿ý@­Ÿ¾¼ÿÝïÞ¹ùÇío®>Üv´ é©BBþuõ·¤× û7Wi¢2o®à#MD–ÉëÕ6*1Z©Ù_}½úC‡pЦÎñÏ(Ÿ/Ý ¥šc É«  øi{³TÚ,ë356e³®ï‹}µwy‹-»È pº~Q궠ï¦8uƒË†~wå}Yí¨]Ÿyþ*ßðy›¿ƒ¦Í‡üô­Y¶ô›3–U½;só¡Üï©u¤õï‹ŠÑnϧö6ÜX +‘dÆÈ@Ú¿ÎÅ©,:°¶¦ß²…#V"]ÜÞÙÛü¼oéã>ߟ^o)ðP x(4ò:u°.A{¤aCV+8Lk㨲™Ág ”çU=ƒh–â!I q 2’dޙ륔‰Ð‚HEbž.!ÓDkBp<Õ÷å¦X–ß·§™Õ fM\m½ÏÏ ±Ë€A-0X,e…ÜDÐÃ]¸>Ú»0Ð/öõ:ߌŴŽZ»óuK' á„aü!oÚÁ φÐ17GX¶®6¼hÙÞ1‚Š˜á²$E&ŽŽ½¬Ö,¤ $a?©]ü»® +jµ§¼j¶aï©AB*†ßñÞ ;|¨R" Jð}~_ H¦<d¯iê "§#] hZ^³ž95åÓĹŒⱘ“/¡“L«8†WžX¤2“8)³È#2›=¤SÌvéäbU„Ô,ȈǣŠû8ãX7M¹Ú $†à@â™%L*Ö)Õ¯—ùwˆÍ/rÚžê¶ÝðgÍ¿A•aÙáyÑ~N÷S")aÕ’˜$u– úúœ á!JA´z³[jѸόEAÑŠ@³æáí¬† +g#LöJu hhÔçúØ–uEØ˪_…vP¼ýîöõ +µ!ÀÂÔ†>V ¶ß ƒ@õ7Ì¥À’¡sr&g£š,hðË–Id‰öJ2%'R—‹d›$ëe"Z&é%Y&6KÒ‹Þ,a'óBD³„°‘ˬ7K8.PƒrËJ-}…ÇË¡zÓ¬Y­ƒcÕifÆJG6H:;–c³Ø’¶¸“¤ÙDC„°±`› ¼g×[TÔLoY3-Kk˜Ù¾òú¢´Bo½í÷0c™@µìœÖËÇæ­y"­€½dó­…J€»j,\mtÌ,ÃèŠOôÛÉ0Â:†(Ãèàd˜¤ôõÒúé/1–TzbÆA ÈÚ@ñ¾¡Š°{ÃÝÄiw>ë÷öˆY”–ŸÛú·%Hçþ‘:·dê µÊAƒuߊ„š·(丿mM¿x¤*¨?}Ï…C1*C» ¿~QA¡0«Îq/àÍË â +½}¹¾£æ€x?¤0ë(DAþÁ¼štZ›¸|ÝþZ:šoèꎺû¨ gÏ…bÃÞ,3Ï:Êe7j¤ŠÍ]}Þã.!Í÷ùcCí‡úô 5ÇZŽv<ŸÀÝñGP›]2ç^&¬›W›síd ‘k³†ÒèN‰^Ö8—e#;Ét•üN:ÞßA>DÝJöèÝ8Š„I@g&ŽR„œ†úxzÐè¬2¹¼Næ¡U!óŠã-µª1šC­Ð&ÙF°¾4()¼XͽäÁGIþW,¶5c)¾ç ãKÞ`llûÍϨJ/僲:ïvlI*6-ëSÞÜÅ#Z©u}:ÝøÅùØrf<Ôbò¡ÅÌ™¬·¹P¯E´ÅŦš©§;yì‚záG®S 7ˆè¡“ba€Æˆ`]¢mŽÓa@Þ¶ÅáØò´š~y·øðãç¯<ƒâl€­ëÃá\Ñ Ž—üd­Þ¨±ŠR´R·èF^¾{/ølN7›~ ë’T +ý†0;f`v‰™Ò+30ëÄà–çÍqÙ”ÿ.f–ƒ-eÖg ùzm<'7èhļ…Öü™úÚâ´Ý“ta_¾VµepŠ_=¼ÊÄg-Ìœ)]ã%åÞƒu³cU¥H"Ÿ‰ÀŸn2Oöå†úC°ÑPÂ’³³ +FH‚’e  ,AV-‰i¶ø{jÒ!ŠúÜ6`b©³½+ ñÕŽ,«ˆ&n±ÜC¨†n.lbóÏ3ØŸ `Éœ1¸%¬:íODe‹Yßž÷c”«)ÀÓ²¹£Î@–Nûƒhžx6 +˜±eNå ˆÀŠQx†_ÚùãÍys$$º+gÄ-¨#5ë¶3Œ°€7ÒñwÛFÃÌê¾x7µe}Ø12hlóþž¦’º(ºÁ®ö%Õ.c‹#¬¡!Æ`¢vøÚ“íFˆŽû²hÞfLh:kÞ!ÿþ¬š‚¹R]>Ò …PQM…ŠÛ÷òp>à‡ìì¡bÅþ¢iòf†VTK¡:c‹ÙKµÁ,4›h•ŠZEZª¥Ò‰švª&¥$U“Ëw +R5„°ª!p¨jØÕ©v’"˜U Ú"†ôª†Ð±ª-U*X¹ú˜ À´’·• ûYÜzA’¿UõÃTdÞ.™ÿ½¸±²ô¹|…c¼(‡`]û…êÚ`²!·x¨ ÌÅ+¯†Å+ œÀe×ó¥‹ÎÁ¬‚¢äRˆ†½²[K@øPÌF“21Nš¾£E¨ €Eâ vÛbW4”fø8rY̬J„bÎs4õ94Ö!ò ]S^"ô´£šúˆŸS–&Q©é¸zdÂæܺ?ÖÅèg5´tÈa9œ=ÜÌó[œLÆÑX ˆ[‘CÜÄ 9–"S‰3fÌ¥—Ix½¯3‡„êPwB¯%$‰øB±.AÑzkÈ/±.ƒiDíUPS€ "U »×\2ƒïsµ}´u½aø#ÁùÆ ãï!>ùÎ0 +›aø1o×w±ÄÄ$Œt£oÊî±¼ˆÑ:þNlA\–{›éÅ_Ñ ëà¡Ñ‹u¹}¤NDCÍ9è µƒ;u1^…FðtØÈIÔMÄÁÕg©8v×hÏ¢ÓTàýðB¢?—žv³F‡N¶M½ÅÕ™äkbéÛs2I½TaQiFõ + žÇPLŠM((ë „ú £õÿaåÁB´…‹ŠôÂzNfk=r·³w..QYÇÿ¦ÍÛP’£%‚kâ‚xš(ë&—«b’„M61±Þ}ïé>4ØM%ýP']WŽrìt²/!ùv1 ‚Fu>¬¨`-¸‡édµ>Ÿú°aeµªÏA›à#ÖŸ®8òEÃEFüÇiã< +FÈAbƤŒt³š«í 0]Òë‰T\`„'~ZÍ8ܱ ŽÂÄȳáè‚ù:šäÎYÇK¿yÁ’õõ’nÏË#‹ó¬”9HŽs4N D5i–‰W&†ÂÈȯoÅã…ìݤVN³w ÙÇDxÔ$ŸÓT•è~¯°ÈôºZ*Эåµô•Ç¾æÂZ&™÷~þºzÙa\QÒ]ôø.´Z)ѯ”e3—„ËÄ÷Ç´)ê*˜ͦC_ªÇkñÊL0erŠ¶ÉOÍš@¾b +ë0ãI±E¾—FÁÁ{„hÌÉ@_ALÅâ‘/Q ¬‘ÉIãëÛ¯Ÿ~z7=!l’eÖB´¨œFRçiwM/ƒûÿnür8áéýÿS¼¸¯EܺwàWÍ“ÝX“¡F›yò!ziS\ÌA«Ç„]´ùžà¥VÍ¿àºqÍÁÛ±ýrÓÿ™¹àÈ»|k£ø¦‹¦Ví³«à½7/äF×.”kÁÁº¾$Â)5 6ÙdMƒu‡]•·ç®èaºBšaƒß]Q'Á }žbƒ‰I=LB9&„#G +€>ÛÁ¯n…Æñ™c„‚YPf}Xº´Ê-ÞÏ•AÆ_¡ÜYîÊ*o;k;N}^ªÚŒ8]š˜þö¼äXlÇW]u`WžÕc\/"Cþ`ùb6ïz¿‡ø#PN§¼IlìNùá©]ø@Ï{ç\]–8kì ¶Û$©xri‰X!Õ¬j#‚Ãyß–Ç=Aœ˜p)`g…uìG„‡$»Q&C©^‹z™¿Ø.¹& ¬Nœ“0sV왋œ¾µ- /Ÿ‹1uZÏÕP U2ó/Ý}(°Y—ñ.ïí jˆ¨ÆwÓk|¬“©ã=+@?ý|¯ Ä JYž2LþpÈfÃY!ã¤ÉrŠdwç"W©„[ò©îž¤˜Ñ“ „Ó“=y‡b¦ïP|÷\mù}±ò¿ÔàÂ>ÖüÖ%¤F€èEȯ~Š7$…s¹ŽI¬ñöMG¾ìf…0ef ü¬Z(ÉÅWˆúöùiP•Tñ²GÚÍwñÌää¶\NžíàÜ dIy¥‘æͧ’ÌEf¼‚ž´u×'ê?*IŸ6E›—ûæ]4žÅļnŠf}*cñìâ»5|‘†/ߪ¤Îè•Ô8õ_(©*¢¦èŒW"½r×"¼9x)ê†/ãŸÆO°Ž zB +æÎ&îÉ~,ÄNVÉá~žDAÝ v1Å5¸\Rx¹„O,^kw…êžSµ`Ú.¦•àµœ|Ùâ¦~ãü1:›ØÔÈ·ÛZm­½hkÍ+mmh¡5 £ë\âSm¦9kK{q]²‰OÄ(§ÖÝk²ùGdA§–Ÿ%’^;M& ¦2µ‘F“䲋–Ö™DfÝ€Y%iWÚ\Çg’øBéÔÌ—<&öI¤3övx ”Çl:·gïeyî%{ ‘ðͼMÞŒp#S;Œ ‡¤ð›¤JÈWæäÊvÏÃè³ê”¥©}V¡Ñ]æ:Dx‘:§:¯Úi“Š5›Pδ݃Û4zrÇ/°N%LhS2Ô&ÅA°cÅ‘‹;Ÿ E.Êö«•r1ƒR–ð©É«Ye +„ÙË%2–§ÐE¦*wi UÌåPņsW¯>UcÇ®[±atê'Åêÿ£I´¿Î¼^ œ«¯ÕŸ¹mPŸ8Íù¿ô:JËÿüoýÿ„h—(ïå¼'U©M¼Ì\ÜeŸøîîÿ#žný?Nr(9endstream endobj -1329 0 obj << +1369 0 obj << /Type /Page -/Contents 1330 0 R -/Resources 1328 0 R +/Contents 1370 0 R +/Resources 1368 0 R /MediaBox [0 0 595.2756 841.8898] -/Parent 1334 0 R -/Annots [ 1332 0 R 1333 0 R ] +/Parent 1374 0 R +/Annots [ 1372 0 R 1373 0 R ] >> endobj -1332 0 obj << +1372 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] -/Rect [116.0003 171.5741 166.1092 183.6337] +/Rect [116.0003 269.6318 166.1092 281.6914] /Subtype /Link /A << /S /GoTo /D (tsig) >> >> endobj -1333 0 obj << +1373 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] -/Rect [399.2874 61.5153 467.9594 73.5749] +/Rect [399.2874 153.6184 467.9594 165.678] /Subtype /Link /A << /S /GoTo /D (zone_transfers) >> >> endobj -1331 0 obj << -/D [1329 0 R /XYZ 85.0394 794.5015 null] ->> endobj -430 0 obj << -/D [1329 0 R /XYZ 85.0394 769.5949 null] ->> endobj -1219 0 obj << -/D [1329 0 R /XYZ 85.0394 748.8663 null] +1371 0 obj << +/D [1369 0 R /XYZ 85.0394 794.5015 null] >> endobj -1328 0 obj << -/Font << /F37 747 0 R /F21 658 0 R /F23 682 0 R /F39 863 0 R >> +1368 0 obj << +/Font << /F37 779 0 R /F23 714 0 R /F21 690 0 R >> /ProcSet [ /PDF /Text ] >> endobj -1337 0 obj << -/Length 2814 +1377 0 obj << +/Length 2923 /Filter /FlateDecode >> stream -xÚÅ]sÛ¸ñÝ¿BoGÏX(@1yr'õõÎImßC'—ñPeq"‘:‘²ëvî¿w P¤DÙ¾k:=p.»‹ý%F~b¤4Ó6¶#c¦¸P£éê„îáÝÇáqÆiÜÅz{{ò—ÒŒ,³:Ö£Ûy‡VÊxšŠÑíìK¤YÌNÞ}ºúpùñ—ëóS“D·—Ÿ®NDZâч˟.úx}þóÏçקc‘*½ûëùçÛ‹kz¥=·—WïiÆÒãÑë‹×Wï.N¿ÞþxrqÛÊÒ•Wp‰‚üvòå+Í@ìO8“6U£Gp&¬G«“DI¦)ÃÌòäæäï-ÁÎ[·tP‚³Xêx@±R ²LKx… -¼]ä( Šª°LÄvu8eÕó§q]m7Ó€Ý%¬cf´‰=vVΆ)JÁÓ!Šã=@Ô·\¢Óe¶­óÔŸ¨¨^çSXŽ5 €›½üü„¸w0¥ýØéT¤ÑÔ#g³™絧ÙT´dâ`·AójƒìÆ–òD$˜UÀÛN@52Z¹ìÞ± £:/„"3´åªjò€±yÈ7õŽ¬‹Â5ÅC¾|:BD`™Þ}&©¬¤¥^Ú£DÑ`=ݪZ‡'"b1ˆñÚC– e÷Çl8$2e2á{:qJ?qõ+çq>C9nŠU±Ì6^¸3B›;ápÂÁÓŸ@=ábO8˜8"\,ÁÞŒUÌÞ”H;:úƒ¢8ѥЌKp( ô žñ§Ü¬Ùÿm›ožw'˹~Ö€ J¬ xT:#S½ïMÒð7ImÉ›p–ì !çMøŽNÅ-éx“Céz“#SÑ‹‰GpÞDN”:Î÷ ÆY€”ÚIR8Τñ„ÓŽ<»æ€ãI•u ¥½áU¥îÚn6ɽ#Å 3<µA/”Þþcü5êõ¦à\õkÝÇíÖZÀ¼‰ƒ2•»¢l¬Úô.  ÎyÔl¶u“ÏÆßò§š¨Þ4Y“¯(Ìb†ßd«U¶!úÒv˜ã#@`:M(éõ)i ýow -±dÓvÏ6ëfS”÷„VnWÐÞ³pÿ#Ëû‡úåïÓu/Œ±¯_É€yÿýͲŸ$eF5%ÇüµJ~Ÿã1–ESTe0º¿`ò0=í-9mBüí±qH*˜8NƒqÖS͈C—†aøþêææâÁu>ÝnŠæ‰FÎ7ªª©Á·.z˜EˆÕÓM1qÅN—û%g,MR9R“ x0_ôrs?"àºS­µøãî‚Ãjí.Šzƒ±Í)˜IXzÀ „W‹ÞÓ%~P1¶X/ñp@ ypÚâÑyPéxÁbnuß[}KÑê›FNÃð Ç…–9@˜BX°ÈfŸSK"zȖŬ³¸ôHkÒæC^I½;nŸjoy7‡ÖÕ3'…¼κñ²û½ÛàØÉå²E&°2‚ -So'³j6åéVs¿6¤îÖ™Ô.xíN°S…ž»Ý ¶ña _¹â©a0­6¡XªÊ™K+8vR¢ á² C˜ßAÌVÌض¨y)hCαքº– ê³â·ßÉ5KðÌÿ ÛH¨÷´d¶¤¦ æ‚àù¸ÈP ºäÚÝÉG8쿬‚þ‹,/óõž…&6h†5ÃÆÙ_šF`íäÃ0À¢ß¹öÞe9Œ/?ûŽKsXÙ#ÝÏíE~p&b™„ªbè~Û*Äe Á‘@™¾æËI̬s÷¡ï&ã–â¸K’¾*uù“x•èÝÆmì>à1µÌ@ïôy _âÑÆÌÄ<é3éЀMkfŒ†_Íw‡ã´ßê=Ý~ ¡ìû˜AE–™ØPQ&%ãR«Þ]3pê;1|§Šñ«M¶4¶æP{WÊ¢ck88bkÀhªÚÚ(1Ö’Äû[ýlÍSwIÙ4BéÝÎÏ[Š_òâïÈd ø“V°ÄöYS[Êût¿$̤\¾V{Ò9ñr’´_+_¥½—ĪÿM˜_Ö^¸&û6TmB‘–îÕÓâ‘ËN•ó{\Ø:J´×MÅ BKúô/Vùt‘•E½¢!}ü‚÷ä90Ò7Âîœ5~Ö]æÓ0]5bc¼½ÐJà•,¢ú …-If„&ž™Ž'x”¡ƒé^îm¬Rp[»Ñ:è'6Ô¹›.#BMmx¸ù0þ¶8lÑ‚š¹nüÂ9éxå)_p¤Ú†_ù Š€ÔÙöÈ_8 UÂÿ] \Ÿó¶Mú¯ÿÞ±ûïKbDèxøji–¤@Ä3岃»ÿö ‡¬ÿ9-"ûendstream +xÚ­]sÛ6òÝ¿Bo¥g,ILž’Ôé¹wI{Ž;7wI&CI°Å‰Dª"e×wÓÿ~»X"%:r'?`.‹Å~ËbÂáOLtÆ2#Í$7)Ó\èÉ|}Æ'wðíÇ3áq¦iÚÇzusöý•O 3™Ì&7·=ZãE!&7‹IÆ$; +¶tÕ÷]ÙÙµ­;/Äm¹^—[¼÷÷oRÑ{>™ÊŒ •fŽìR´ÿ‡›&R1#x:™F¾¹í¶U}Ghõn=³Û¯Ã}üŽ,I->ãýyºnøÀûôÉ1åý$Œ¡¨ŸÔ°¼Å^Èò¹BþÁ~ä\ÖUW55­”õ‚€_ÛòÎúÕ˜ôµ;ïfi#W{$aXšå ½Ð1EÐ)A㸡=‡OÄ¡miúû÷ï/_ÜÚùn[u4Ûž‹"iš® K¹`Vm ÖηÕÌ.ür}hU ÿ¬H 5ɤ`¹H ê7}ÜÞM¸îDÄŸö7Aô¯xL¯úÞÎ½à™”GÜœ.õ€›#£ŒX§x8¢†<8iñäeé”0•)“ÜdC ŒòV"Ê›fNÂ0†çB +ž<,mM:Ðlv³U5'‚€ÛfK@ICÝÔÓr×-8¯ìª{¿÷¿Mm‰p8ïKÝ<Ôëd¶óÌÌ˺ŒÍüV§,Ȳ]=ŽÙq3ëÊÊñ­DÜÒõvwKZmº ÈVp•-Á3;/w­¥IÕá¨kDÃƽìE†3º BÍ89OgSßõѾpÒ®n«;à /Foös=Gt4m¼Ðq¾,[Z™Y|%\š75¾ßÕÂoôx%M»íy‘8‹¦9B$( ÜËAÓᮎh•Ý ÜBØ°,Ÿs‘K"¹/WÕ¢·¹öH’æ½­Çn½n†2âÎO9¿F«m³ºÇWt.¯‡³é¼‡Œ~`vtŽÑI®V™À* ªTA½É‹0óû‘¿1}2 àZ›ç MdÙH  zt +tPè§iu½[uÕfei惉ÁÛm+ÛbTHÁ”óeÜÛÂ;{ 1^ãLMŽ‚ à’éÒr]®í‰:ÏY‘c¨íK<¦*ïÜy(b²å®™7«‹à.î0-×9VÞåU ‘7KûjãnÓ÷@·;éÖÞ±'DlË\ïDåÄûÊ>|[öM2Oë3ÊʉJiVdú@R櫲m?õ³ôƒ0¼.»ùr:_UÀIÌæÝP.[pŸÆç•ó'¸þÇ‹1ÿOt ߃çvâûvb[ôØ-ä"S²hÄ´íçfû¹nNWN<Íyñ ?æûcÇù èØ>G;8Ü3ð‰!ßk@zJ¾¥4Ⱦî¤4ÂÛ¹;þ˜dŸ¸Ðg )íÁ±¤aÓ<Øííι¬<¹…D²‡]ôªÚ‡À EwFE7ºÓÒÓ\ÙnHÕ)²ÛÝÚ­OàcÝ>D˜ŸdÉo;»}$p© k!¥Æš.?ðÒp)rp9vcCü†©“:ŒˆwmËö ¡g7*¹ê†ÁÁwÕ|Â^Ž‰š%áL!Ñ×à6Q¢ñ¸v³ª<-º®Ùn·ñ„À5»nLÁ—å=‘A¿Ô'{½é¹i—ø 8Û±(r‰®úXc@”Ñ'FƒJ s¬0JÈ~ ©¥±°Jšê~ð» »pZÐnʹ_'}Aˆb$¢Ìü·–’h€fƒs t¡µ’wpX| Å)öJÃ8abu–“¢J8wêWÉ=(;™0L0£Æo®v@ mÈð8¿úÅoÿGᥥÒ]0Üã[`Bª4ä|äBkV¥Á½è\L¤”LáÖgt¦$3ÎÚÇúRÓHqÚ'éêÛ +ûàz"VtÝG<à ¡pú y Oñh$Ë%O‡Lºø3¢ÓËs¿¹Ý?ŽP¿kGìäg<8O +^¡ª— ²bh¿!Ús ã* @ðöÕiáË0|™Šî+ÆZZ@]s¨}]Ã…¨k8yB×€ÑBÇ“ŸÔ5 Iy–O¤à,å¹þ tÍSœöIŽé”Bgû“¿¢lvJå_Èd xŠI#Xj†,>¥j9ãy Ê䥊à‹§U-ã§Uö U#o6HÈF;Âé@ß°a®Mr…<)E% íÆÎ+ôëv&³¦ B L&Āɧu>KÔR±²=‰Hð0…Rhjà˜ÇÁç½çéµöC ß—Ìýß\É> endobj -1341 0 obj << +1381 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] -/Rect [432.8521 516.7732 481.8988 528.8329] +/Rect [432.8521 617.9092 481.8988 629.9689] /Subtype /Link /A << /S /GoTo /D (DNSSEC) >> >> endobj -1338 0 obj << -/D [1336 0 R /XYZ 56.6929 794.5015 null] ->> endobj -434 0 obj << -/D [1336 0 R /XYZ 56.6929 674.1923 null] ->> endobj -1339 0 obj << -/D [1336 0 R /XYZ 56.6929 646.1449 null] +1378 0 obj << +/D [1376 0 R /XYZ 56.6929 794.5015 null] >> endobj 438 0 obj << -/D [1336 0 R /XYZ 56.6929 566.6943 null] +/D [1376 0 R /XYZ 56.6929 769.5949 null] >> endobj -1340 0 obj << -/D [1336 0 R /XYZ 56.6929 535.8374 null] +1379 0 obj << +/D [1376 0 R /XYZ 56.6929 749.0627 null] >> endobj 442 0 obj << -/D [1336 0 R /XYZ 56.6929 380.8349 null] +/D [1376 0 R /XYZ 56.6929 668.587 null] >> endobj -1312 0 obj << -/D [1336 0 R /XYZ 56.6929 355.7523 null] +1380 0 obj << +/D [1376 0 R /XYZ 56.6929 637.2799 null] >> endobj 446 0 obj << -/D [1336 0 R /XYZ 56.6929 225.5162 null] +/D [1376 0 R /XYZ 56.6929 480.6393 null] >> endobj -1342 0 obj << -/D [1336 0 R /XYZ 56.6929 194.6594 null] +1352 0 obj << +/D [1376 0 R /XYZ 56.6929 455.1065 null] >> endobj -1335 0 obj << -/Font << /F37 747 0 R /F23 682 0 R /F21 658 0 R /F39 863 0 R >> +450 0 obj << +/D [1376 0 R /XYZ 56.6929 323.8452 null] +>> endobj +1382 0 obj << +/D [1376 0 R /XYZ 56.6929 292.5382 null] +>> endobj +1375 0 obj << +/Font << /F37 779 0 R /F21 690 0 R /F41 910 0 R /F23 714 0 R >> /ProcSet [ /PDF /Text ] >> endobj -1345 0 obj << -/Length 2081 +1385 0 obj << +/Length 1719 /Filter /FlateDecode >> stream -xÚ­YYsÛ8~÷¯PåI®Šà¬ŸœŒ“ñÔÄ3ãxw«6“JÑ"d³†"5$%Ç»5ÿ}º‰)Ë›”Ø8ØèãëT0ãð f*b\êp–èE<ˆfËõ ŸÝÁÚ»“€ö,ü¦Åp×뛓Woe2ÓLÇ"žÝ¬¼ãJ³›ìãüÍç¿Þ\\Ÿ.DÄç1;]D1Ÿ¿¾¼úÁÍh÷xóËÕÛËwÿ¼>?MÂùÍå/WnúúâíÅõÅÕ›‹ÓE ¢ÞÄá+/¼½üùÂQï®Ïß¿?¿>ýtóÓÉÅM§ËP߀KTäÏ“Ÿø,µ:áLjÍ`ÀY µ˜­OÂH²(”ÒÏ'N~ëVí«Sö‹¤b‘É„…œ2`¤Y,a ¸ËÍésP\òh~so@AÍ«ú4PóÌÔ4\¹g ë 3pœÁ# -VAœŽ¥Û4<^„,LÚÓ´ikÖ¦lÇ7§g“ß•ùeZ¶nêw!¤Âyê&–Enü¢•Òü¹5 M<äEá¨[3ÜÒTÅÎdtXÙ+c/«²5_ÚNU~¶„d’ó¨€é(Vp÷ …¬áÔCkHÀ‘”ñ“ÖˆEâMÖÞ§­c›Ós¶Ë{Ó0'KÌ™Šðu0­ÁÁøÒªÒ€Ù$ 73(N‰ -âð!oïQI¤Ó ®˜ yø„ˆÀDŠ}ù#ÐÎH¡ñY•Åãx&].MÓä·Û -ŸœH¢;Õ‘²*ûÉ)˜‰$a"àOáL°@ÆŠ6®ã@Î_?:CB(1)¸;•Ì——w`|¡,Єžÿ ì&,üáé¼KMº¦¥²£,¬`m½-Ú|SÐ,JÙ¼DhÉy–¯Œ+ã0iA [ü9zž¥mêæÿŽ¸¥¥»|gh -íˆÏIvÚ›÷¥Õ˜{M]¾\UµÃ—ù’®AÆ—f!Âb .Ói7›–Y¿ ñ±·Ü¹ÑⶤwÜ£ÙÉ?\} 9Ón7¬“j€ä÷iùˆ{¤34<)Ì`bÓæUÙ¸·yÙoœx³ -} z&‡`XURL`y;‘Må¨[kÛØd”5»oJ”H±D%âét©`_ëžÐ;Âj[: Ë8f¡ÁÈéfƒA(´¦pDêáÞ ¨>:¨Ã¤Î:Ç4bw‚.H)Ÿ`nP Â(™ÿ»cVVý†E³1K—·i2-¶Æ‘91·Î…d{÷ö•cÀöùv¨1KÂX?í^Há„suHb…Þ“@¥4“ºGfV)D2êŠù9@५‘®°¥' Z€¸OwfÄ ¬ª´·3—?;§w§Õ…Ï´Šõ8–ª,Ög.ဆ*Ø¡ã`’D¦¨nÓ?hóÆagi2S.i®Ú™Ús­w;KJIJZoòÂd ï¾tX3™½­ù"‡tÇêßšö ±ó#2cꩾø:Q}B °ºöΤ"'œÕÄP+á%)ÍQëE/¹Êô]'žê·m»ó%x• ¥XF{iyéL¢C¸Ú‰èÀ»§.¯˜#ÎËÇÉ–-dP¼±lš0–d¡VjÂXÈy”uðøªt Öz–¨6n¥0;S¸9,ɃMAgâmbôºUgiGwž§ÝMž22ßZ',یҙíjw%ž›´ne›…(¶†WCd&}…B7+EÅR}-‰€ ¤ª\k5Q=€7]3€ò%¬úƒbž¸ÜxXK9wƒ,Jb`¾@۴̧.4øV'cd=¯P "³Kìï6¸MQvƒš WùCÆå`Jn˜š–Ëmí âcêDÉYéà9©þD_) à„ö7ÈX?š¡ro–rÔ“ «Q_Û>n0ÚŸhr‰/rAY µÑÛÛ®‰{ ÜŸ¡·úÿôü‡Û+õ,p»g\…{j»dò^øfÿ…ÿÏKFpËŒö.¼¯^¹-76øjî«m‘9šîlHVèP$àö…ò§AÙ/¶™íëíyYVÃåÛ4cþcµ¡kk÷#úðvPHò4Z >ŒGFGM^BóbùÂËŲÛg¹Süÿ:b±s‡ÜG½¿Ãú÷=¾mçv–²j‘`(,n÷ܹ©Í.¯¶Mï÷gÆÔˆ£áÚ¬¶Í3âÀ›d¤Ú1è/«gƒÙÖù²õVúžð§n¹Ã¿ë}­é··PTýhøMê›C@h¦T¢¿OxO B`’ÿ!`ëK7½ÂÃC¸ ÇôÍ¿s í÷†µåéÃð럿«ÓõZ…Ãò‚.I²g(¤>»b8ühÛÛO#‹Q`>ßb»(¬øÕâq.ß}¶ô¹È›¶‹ûü4åâCž ïïƶ­Ó²ÁOtßÀvÂÛM–ú2ò¦SÿV’ð/†‰ÿx‡¢oþ'£ÿ› (•ÓRHm. eñª÷%ïþò8ýoYàòendstream +xÚ­X[sÓ8~ϯÈð”Ì`U¾ÛÛ§Â,-Ù})Œj+Ç6¾¤Í.ü÷=Ò‘;54…N|$ŸËwnŠÍ1…Ÿ9\BíÐû¡C\jºãh3¢ã8{32¡™Œ.׋ÅèäµíCz–7^¬:²BƒÀ/âËÉË·gçSÃréÄ#SÃõèäÅlþ +wB|¼ü0={ó÷ÅÙÔw&‹Ù‡9n_œ¿>¿8Ÿ¿<Ÿfàšð¾¥$üà…׳?Ï‘zsqöþýÙÅôjñnt¾h}éúkR[8òutyEÇ1¸ýnD‰îø”˜ah7#ǵ‰ëضÞIGŸFµ;§òÕ!ü\; n`ùZö€nH<Ž€õš '€Õì°šñ/ù‚'/ê$Ï*Å×iûÄrWU³šoxVB¡3I*|6‘bj‡á#æ+Ö¤5 î8Öä,­òçSæîäß<ãÈ¢ËEÄ2$ÖlË{"p±eiÃoUð(ùL©¥u'êÝawBà¯aš$t]K:´Møí€Ï–C<Ëw½>ÅÄGR¼o´–D¸©L®7û¢˜‹rjñ˜g‘ÚË·¼ÔRs-Uz‚Š<±-‘(Žõpä<PÓ?ô‚Ö±a& ,jÒ„b£N ¹þ™ºîœÆCœšŒ‹(e•Úß»Lèîd¶Âƒ,¿Ç›¨çM²åÄß2îñlÞgƒƒfÃc%wž×J{½f" ¨7aiª•e†~}»7zÓTµ²"Ïjh +‡i?ò !^'2™)ùÉ*ÙÇ'Kwû`Hb¦:…öAHaŠˆòM‘¤<6t÷é«”U¤µ¦»„ϵ„’qèV{øá  ½Ÿ ž 1¦:~’ÎŽ&B…rÑTS;h ÔDhop%È‘±5«ë•…J•¦ö6¬ŽÖ\)`ÙÏ£4ÁÞ!´êæÎ;‰ ª;ÌÌ ŽãšýxE˜ån†h¶š: bk6'Hœe»¡ŽGb¹¶Kö °lâ„A0–Üë:B}žáDOy')ßò÷òUÉl!nJ&ªOi¤ÛÈ+î*‰UfÄ’iùÄlz Õ¢ú:¹æø,XY#%,Ïz-º™é‡CP+±X³Žß‚5;hÓdß&²ŽbE!«L(Ì÷Š;fN!¹p­-3…R,!"Sø]‘&QR‹†ÛÐ× ™¿0T¡w*³mì«"ZÔn0s=Ó´H@‡P?ô~ X57Ñš¢¨)õÀù1¤Ñ¦ÄqCóáþ0䪞0pêêŽJ®·¼‹@¢aQmß±M‘êºR‡ª‘î +QíªÕB´”?¯æŸÔ¯›BÉR„-rÈÃF½ùfÀQ nŒŽëÿšŸ ¯ÓK¸=ÁÔqû›™÷ š9/3–>Ãõ,Û%çºý²<9A–…,>AUë¼Ic¤e¯D2„–«Œ×·yù¥3::é+_7°µVÚù0)‘¿“à7¾Ÿjà[í°gÝÇ2ߊ,’‹’CrUÉV-+^n“H-DÞ7²g›ƒÖ*¹¢å ¾¯Ž·‰)E¹HŠZmî"ÒLš·VG* ¼€ºàÒÚ`ì§M, õÅqÉ«ŠW}ù}·áÖVÆÚ—7¦JÇ’‡³êƒę̈@ÕéÉ«$=nh»H|ýìTUîüïG¶á°³žß=6ëßïó[ÞÜî%K–×Jàª,®wá,J¾Mò¦ÚÇý‘õ3â¨B¸à«¦zDhHz®“ýYþè䇄¬Ë$ª5JO™þê¶Üæ?Þ}%ôÍ5 U½bQe‘\ë ü­°B~ø4% #Ñ)AùG”€œ/íöJ(w|bSÇŸøŽ`¹p=£X9ž>u®8âBÉ6¸*Ü/"äð_Ýñí µÌØF-/åõöª‡˜*ÌÇ#vÙVa~k|mx¹ë×ö»¥¬ ešTu[-òy5âû2 ÞO&¶.YV­xù;bhŠ˜é1ò¶¢8£È¡TúÀâÉO–e£óö’rõ0ªÜ€f™¬úâ“b)ìV2‹¼¬Û}±P”‚Ë_xÌÔÖ 14òè‹!Y5áÏÔ¥·¬Ì¾­X’~Kn²¼ä°gö4ýÌ}”¸¹{Rqð'$ŽX·×‘e^.E_>ÒA1toʤÞ8ÚŒ8a©¸íîé%þŸ:Z¾ŠÑ ›w÷Å¡Ï—ÐúÄ7Ç´m{¿ýisÿÝWôÎ °†¿ZBW%ÿË”Q²Á†‡–·ß@ï›þ?Àéíendstream endobj -1344 0 obj << +1384 0 obj << /Type /Page -/Contents 1345 0 R -/Resources 1343 0 R +/Contents 1385 0 R +/Resources 1383 0 R /MediaBox [0 0 595.2756 841.8898] -/Parent 1334 0 R +/Parent 1374 0 R >> endobj -1346 0 obj << -/D [1344 0 R /XYZ 85.0394 794.5015 null] +1386 0 obj << +/D [1384 0 R /XYZ 85.0394 794.5015 null] >> endobj -450 0 obj << -/D [1344 0 R /XYZ 85.0394 170.1085 null] +454 0 obj << +/D [1384 0 R /XYZ 85.0394 265.7828 null] >> endobj -1237 0 obj << -/D [1344 0 R /XYZ 85.0394 142.8732 null] +1277 0 obj << +/D [1384 0 R /XYZ 85.0394 238.5279 null] >> endobj -1343 0 obj << -/Font << /F37 747 0 R /F23 682 0 R /F21 658 0 R /F39 863 0 R >> +1383 0 obj << +/Font << /F37 779 0 R /F23 714 0 R /F21 690 0 R /F41 910 0 R >> /ProcSet [ /PDF /Text ] >> endobj -1349 0 obj << -/Length 1067 +1389 0 obj << +/Length 1057 /Filter /FlateDecode >> stream -xÚÍXmsÚ8þίðG¸é,¿{ú)Í‘\:×´Gé'Ža[]lË•D€”ûï'¿Hƒ»tÆòÊzôìjWÚÒtõCší@Ç7|Íõ-hëÈÖ‚¸£k3ÕwÝAå7 úÔ¿z?ìüzeºš}Çp´á´†åAÝó6 G]°§ôîå§Û«›ë¯ƒ‹žku‡7Ÿn{À°õîÕÍý¢u=¸øøñbÐȳQ÷ò÷‹ÏÃþ èrJŒ÷7·¿¿x¼:è_õýÛË~o<üÐé7ºÔõEº™)ò­3ëZ¨ÔþÐÑ¡é{¶¶P/:D¾ohqDzMh[¦YI¢Î—ΟÀZo>t¯ý Ó1öЯÐÓ¡£+(×ö¡cfnÀQ8ºÞ§!–¤,¢Áª}¯÷LŠž ŸG¤ „ã¢ùÏ»â9ÎÌ¡8„ oÛF} &é´ OÓ C^b¦ŒË<{)g('1FѬØL6¸'ÁHpLD!øK·õæÉzŠi´¦³„q¢d¨1Ó3D´‹/‡ÛCpA£0À<,d+"&ŒOvðxšH2ãT®ž¬UHq4Oëí K%eÉÁŠLiåOBršÌc! φƒ)ã1–[ËJ²”kŽ­èo6ç ŽŽâ¢,6Ë1`I´ZO)²Õª–8„‹Fˆü‡^ß0]N9¸Ãâ¸ÉGË8',©rHõψ´÷Ë/ ˆÍ€ O%P2ïoÁg $lj˜h¨<ÍåéH’Æ­šÕwÐgvY²LÕNMeCXD Èüò`ÒÅT $. °$m$‚áƒ6©†®éüî¬vÍôR»¥»•ì„ -ü€lc—¦V-ÎÖ9r\hºêĺ–iç0¿ä]6ô]×ÑjòmÈ¿¤;€\š–ï¿Î<:u¢Î.Qφ¦š¿$j½@Ô:’¨ áîÞÕzb BbI…¤hº }GÑPKùÅ«]¹eЩ´·ÙÍš;ˆÚ†8™r"îó€=:ìOÉ™H¾jvy´…h°PBÊI /C2Åò~’åH "<Ëþ²}H½îÀ0¡t«©:ÅÊ9ªîLšyÞÖsJ¥[b\¦Ùн°r•V^áGòî‡ilÄûòØ,‰•‰÷“HA›Ü8ý6'ü$Lô&¨ò±³Q­Î²3ÖEH™mÂõ Ö(‘‹´÷A<´Ï˜óè Ò*žÛüì:{d¼]©€Î\*?A©€Þ¶T0Þ¸T@g+öÔ‘âS}ß.XcXmZ·1ýh“تÆxÞ\ÿ–7,G=èÇEMþ¯êißMšiÃìúkϽ—ú—³ž|˶½‚´T¢ïyÆæMåüÛ 4Ãõ å)’T¦­«ï0¯®ãv©ÿ UƒEendstream +xÚÕXmsâ6þίðGèŒTK~Ÿû”KIš›^îÊqŸ(Ã(¶HÔÛ'‰$äè¯ü&˜`é¤Ã0–%ëѳ«ÝÕ®¦«Ò,Úö4Ç3¡¥#Kóg]»Uc—T|Ê@õ«Ãί†£yг±­ §,ꮋ´a0êÚÞBлç_®/®.¿ÎzŽÙ^}¹îléÝ‹«?úyërpöùóÙ k¡îùïg_‡ýA>d¯®Ë{¼ü±tпèú×çýÞxø©Ó®d©Ê‹t#äGg4Öµ@‰ý©£CÃs-íQ½èyÖfÓ2 eFÙv¾uþ\VF³©µúC:Ćkh¢Š]Úº‚r,Ú62ŽzÀÖõîŒIù”…Lc>#2ïþK·tIŸä’“GÕFyï‡ü1N¥WBг,\Åû;žóˆ„ù‹œE·ç*„kq.–SÆ…ÜÇÕàP.ò÷Ÿù£eÉ„/ú’˜ËUú2ÞXBX®—=þi {šrpC=H Ùl9K@º'MÐæ–²Hª?xAdAÅ$æ“(nÌeFžr0¾‚=@Ñ|vCy+ÉI$¦”(K‹ç²)Ú‰$Ù¬Ò§(–lº¨ÕË2Ч$d>“¹·€Ô.[.’b’ ~¢±Ø‚ŒˆÉ Î $ó›{ºØVÓ®vKƒ-Ø åø>]û.KÌŠŸ-3d;ÐpT:¦af0¿dCôÇÖ*ýk—ßç¤9;€¦ç½¦Ãœ%x°«Dím¢® µ~AÔÚAÔ:¨‡ v±S«Îç8¢@H"™Ì‡º®`·à„,`rT< ü¡ŒÊ-. ’Íf* q:åTÜe{p9m3‘|q,£ ”#‚€qê˘.™y7‰ÈŒ6â™òDYR†û`zH77ɨS¬X#Î3‚ÔòÖ6˜Q*ÌÚ‰ãò0M§ÖÂÊERZIHè‡Wô@Â0~Õ(\Ò©'R!&*ñï&¡r‚W^´ úcNùQ˜x¦ +û'†-ϲk`ž(ŸÍò¹4 Z¹ë hÈþõïÁ½¸oeÞã'¥?7x!¢ˆë §UZ÷_¥‚¹¢ROëGmJ´œ.ÙmsÚ*¿ çIµ=‰ÉJÓl’·È+ñ;*ЉJü.ÐÑ¥~«R!5±GU?׶1­†–mT?Z%¶ª1^oîÿHí̸y }«¢‡Eï®z:¥w\†¡£Ë0ü®Ë0´y°Ò¨sMU».^]Ü©âx}q‡š®)H¥":úóòp›ú¿ßô Êendstream endobj -1348 0 obj << +1388 0 obj << /Type /Page -/Contents 1349 0 R -/Resources 1347 0 R +/Contents 1389 0 R +/Resources 1387 0 R /MediaBox [0 0 595.2756 841.8898] -/Parent 1334 0 R +/Parent 1374 0 R >> endobj -1350 0 obj << -/D [1348 0 R /XYZ 56.6929 794.5015 null] +1390 0 obj << +/D [1388 0 R /XYZ 56.6929 794.5015 null] >> endobj -1347 0 obj << -/Font << /F37 747 0 R /F39 863 0 R /F23 682 0 R >> +1387 0 obj << +/Font << /F37 779 0 R /F41 910 0 R /F23 714 0 R >> /ProcSet [ /PDF /Text ] >> endobj -1353 0 obj << -/Length 1046 +1393 0 obj << +/Length 997 /Filter /FlateDecode >> stream -xÚíX]sÚ8}çWø1ìŒK²,kò”fI–ΖîRö‰e‹ÄSPK4¡¥ÿ½22`‚Íì>dƲd{î½úB–­Èò(´ w,ÆHmD­QÜ°­Ýv×@Å7`ù(õ®×¸¼%Ìâ»Øµzã–mÏCV/è_ÜüqýW¯ÕmLí 6uí‹wíÎ閭›ÇÍÇÎmûîŸîu“9½öÇŽ©î¶n[ÝVç¦ÕÈ£H÷ÇÂŽ·í?[¦t×½þðáºÛôÞ7Z½•-e{‘MrC¾4úÛ -´Ùï6$Ü£Ö“~±!â[qáR‡eMÔøÔø{Xj]t­ÒR³*yI@d{;œYŒrèL -ö›Àµí‹Ø*ó9Pa,@˜˜–dß‹Ì”¯ÌcÛ­AN)Þ”NÕIHIªÂñÌ”gBÓl˜¤æunây…£PmTƾTzè4‰fû†BÛC@D~ÑIŠQšòH²@¥@¦þ Î5ºO¦÷ŸÅl[¦]e©²0y¨mßÊ!2f#a*ÿµ©Nœ¡ÙRÁ1 fT#AæºúmÑD!g̵Jõ™ÎýIšž'ÃüePÁ/Ï4Ht§J^ð_Ý2Uw›*g»:Ñ^…*¶ Ä„ñJª~¤ÀQ²–ÐrNήΩ\9ĈÒJ÷Wp=(-Æ"f»¯$-f9®”v*Ø)ï1YU$e­ w$ ;»¼CÏòb‡ó}“OÝ_çÏkd'G/Ö’ -9¿¥‰Rù*”*ÉÊ™¹†W_ù÷¾'Ídq˜€LŒ3!«ËÉkÔù &*›¶y ±Éb©˜5ïT‡|Y -’ÅÊ”ŠÃL G‹i·dÔ«å¦ÙäJ4ëð&þÒÐþ(ò¥,¢ð»™sª`ÕlRôx uUeÇ8Œ*£iO ŠH<è@N“ÒF¡–r=ŠÑgÛ$×YûägÉ|ì‡Ñ<|HÒL¬“°@¼¼4ÏNZdd;žD"‰ܧ3®Ô™œ«3~¡³TÓû}âùQ”>/S‘Í–¨¦^OUBÊaì«Ñã0Ò³„©ÿQCɦöÈ9°ø|í½B?šNÊåa:É©vÐœ{Dv}Ù/Ÿ,òî`œfZÕµ2J<«yæ?Rdà ¢ Ö(¹Uóq˜Iu”²ŽÈä†ûû«Uk½ZÍ \åQíP1²È|_›¹Ñ­—óc÷WÛ~]¬À7Uëk{õsiãÑ/<Ëôv¼y;Þ¼o~õñæôý8:g?Žÿ7ûqtþ~ÿ§ûñ}éª{EBa~Xq ¨ÿ™³ïײŽ>{^]'bRºN$¶ =ÌÙ’TÎœ¡—ÌW—“ÛÔ×ã· endstream +xÚíX[sÚ8~çWø1ìŒ],Ëš<¥Y’¥³¥»”>± ã€H<56•Ä¦´ô¿¯Œ1¹‡IvƲäóù;s,ì ûÃŽÏ ¢Âu¸p!C˜9ƒq 9ví®†ógÀò!P~ê]§vyK¹# ðˆçtF%,"ßÇNgؽ¸ùãú¯N£]„¡ ÖóÐÅ»fë÷lFd—›­ÛæÝçöu»æÇV6ÝnÜ6ÚÖM£°Ï°•'9ÂÛæŸlt×¾þðáº]ïuÞ×B—²¾ÑT‘¯µn9C«öû‚TøÌy²7b!ˆ3®¹ŒBæRºœ‰jŸj€¥Õ…h•ýõ!ó ¯0 ‹KÄȇÂÜáL@º°`·<„.‚È£‚X¤:™ªÌþA …· ‡*›™§Z;QH(À»”-À~[,1(8÷œÒ¼Á™pw’(“ ÃI?½éewWÙ¥·@ H0cCÁÙÁüë•ézÏé 1GÞ™è±ë“JºS-ÁFóΤî'ª'k€h „Ë@qbÂÑl/ï`Cʉ»I]v’º˜SH]!*Õ]c¹Ó/vãAjß¿`!Yl +¢ß“Xmjô/þ¨€«öÊ00Á} s‡h£Âøa›ð‡q%GJêG`ÂqOÇ÷Rí|; +?gbÔìT§AL#‚q ÍRèp‡|—*qb#0ÆD»a¡P¤ézÑÏ«å;–Ëél4«ðéÇÁRÑî +´Î£ðG–sª`Íl’K<†±¹ª²Å(Œ*£iK ÊH>Ø@NbÄÑìË­Yð(_@ª“^íÚ§@ÅóQFóð!N”\mÂñò2»¶’|G6Ç“HŽelä¾;k3½ßf¼ Š’'ðu*Õl‰šÍÛT%µî3xìG6Kdó?÷°d ÓzäÅ`sÐÖìÑtR÷“IH{Í ÅÞ¦ ß¸É"£DY«®,cä73WÁÓ.‹¬I”µèp…’j5…J›cp¤ÒkîïUkU +wU3‹}´-T*Ì¢w¼àÇJÍ5±R\Î!Üý"ó°ƒ^¾nµ®Õ§·Чe¥è¡õs]Ÿ + ´D´fÛÉô¾Ð³,ºi|`SpPŽ¹€”pv¦jÕžíä¹»×o‘¨SJîªî±Ÿ ÅIUŽÿÿóæ­Þß“WïÇñKôãäMôãøø~ü•¼¼Ò^§¨ã×-ê§õZgòHÕ™e0=¨ª8¡²ÿüå'Ÿ‡­ ]©ï“⨋ÐÒQEô‰àKR©zÿʼ88{Ný?ŠXßendstream endobj -1352 0 obj << +1392 0 obj << /Type /Page -/Contents 1353 0 R -/Resources 1351 0 R +/Contents 1393 0 R +/Resources 1391 0 R /MediaBox [0 0 595.2756 841.8898] -/Parent 1334 0 R +/Parent 1374 0 R >> endobj -1354 0 obj << -/D [1352 0 R /XYZ 85.0394 794.5015 null] +1394 0 obj << +/D [1392 0 R /XYZ 85.0394 794.5015 null] >> endobj -1351 0 obj << -/Font << /F37 747 0 R /F39 863 0 R /F23 682 0 R >> +1391 0 obj << +/Font << /F37 779 0 R /F41 910 0 R /F23 714 0 R >> /ProcSet [ /PDF /Text ] >> endobj -1357 0 obj << -/Length 1863 -/Filter /FlateDecode ->> -stream -xÚ­XÝ“Û6÷_áGy&fø¥¯ÉÓ&ÝM·Ól{çå’ mQkµ²äšt\·×ÿý@‚”íöæîÒñA@à2›Rø±iš‘¬äå4/%I)K§«Í„Naíí„™yšŸK½^L^Þˆ|Z’2ãÙtQŸé*- -6]T“Œp2 4yóÓÝÍíÛ÷W³\&‹ÛŸîfsžÒäæöÇk¤ÞÞ_½{wu?›³"eÉ›ï¯~^\ßãRt¼¾½û9%Ï(½¿¾¹¾¿¾{s={Xü0¹^ g9?/£Âä·ÉÇ:­àØ?L(e‘N0¡„•%Ÿn&2$•BDN;y?ùÇ ðlÕo£„‹Œ° `Z’LpáøGßéÙ<£ÔSŸ;µ Ó«Vó€“?ÝA§\’Q93FÊ4å^=nÃŽºßÔ®zåeé¥ÔÇ œ|¢)í»öø¯ºÙ 3†üW8<\êa#zôÎDÿÐgšígUU»ÀÛö;;ðÝäá !$ÚóÃ_ãæ/ŽQéV?*ÛôÝÜ™Gm>÷»Ï]?rŠùhèþB…Ë{FžøùjÔvæËËΦƒ®Ú¹`¡üTl\BÑàVÃ{«¬ÞèÎâô;ý‰RÞ5Î,rTW!ñÁ¨G=Ø9!ÓE@’R2yf‡°`韃¥Å¬„8oµyZw#Y–CýɌЌ±ÿªð(”V™^ÖÝÿµ)zq–Ègíã> -ªw\ªšÇÍSÎ Ki1^ÓŒ¹¸A-§"wÕún”±z-ÎÄsIrV`‰-Ö.®R£w_@ÞÓk5Å‹2Q8º<½ê·G¤ú…lTQ)6@m"1¬¨8 À:4m‹ÔRÕ¹Z¶!ç¶Çq»›±"é¿4UXP{»îw €¯ùY9øžà&è%Oñ" IŠLdÓóè~[Â2X™¥€–õ?a ìx‚fšüY ä¤ú” ’»€iÕ=FrÁ®\Zò ëɘ«"i r>üzÛ6+…ëa}ÀIP]Urî1öuÁsZ’\æ2¸{͈·€êœGoÛÆØàðV¯šyhg2'2+ž4A׃´GBž„þ.ï±éñ48»ýWýáØÆ ;ë°!Ä°X‚€]+©`$x+h¼cè¶je£ï,Ùo¡‚¶³Xoƒ#Y´2„Xš¼ Ñó!F ½ß5å¨JuÈV­éÇ®6¨Ã¹€ÐºûÆ éŒú¬îY ™ò|gË€¡äõy•®Õ¾µ/0ûv%YT »ð€©ô˜#5úÜÍY‚·7Ïy’ -äø[F !!¯4ÀäÚøxdع ‚«µêu…l@(߉@ì”Xà.c‰ó¸«M÷gÒa_È48éÝ~³ô±îR×ÎÜšwØ-`ŽËG8‚^ß9!†"CÐzÙeÕXжÚï›<•ÉR - Um#7 HØ_Øt€‚\^Agä@¥Ç;\œžm?Ý1O}ñq,C¨yʃ‹:|):Ρ±k¤žºîx‹÷·o‘úU[)-“Û:¨E]®ÂÛ ÍÓ>?¾ô«£…çÉxG\ô5‘Šp5¹¥e9À-c‡}Tà58â6ƒÇ87‚]ÕQ "Óeœ¥xK -ʃom•8§âp³àPƒ@{ À¨pâ:(4Ví¬ëÏYO²¸«Ž»Fü‹ê9ex/ ºVýºLå}ç Š±éVQÐâØ×>xnäGWÙTí<ÚoQ ÀÕm³iFh½2\óîú‘eÒ⠌̃'’¾s‚ÀԚʮÈMîú({x|2€p‹ê1H`U›ñȤ´qIä QwY¾x³Þw¡Êª¸RÙu¿7à›Á Óó¨1(µõšûu-Ö}ÔX\ÖRãu Bódo42Îí¡Ÿ·Ù¹Ðþ}wsKfµÖ› ^S|x÷‹ -_,ɉþ}4mj³mõ‹ÓóÚõðô8°Ñ\»|ìúÂåã'e¤€/‡ðDп{`9òšÈ -’¦¯ŽæqmÑʶU+ïÞœ™Âþ‹€†J†¾ —»ÅûÕÍšÎ7 CE:Q¸c ‚G¼—œÐ^íÑû—ÿùEN ËdAü°Öá~ùZ³` XÊ“âmÞ—àe rA ðÝ•_žû—½t'Ìî„»{è‘hgP¸6> +stream +xÚ¥]sÛ6òÝ¿BôLÄ ’Ó§$µsî\Üžã¾\ÛX¢,^)R'RQÔ™ûï·_€(™î\/ãñp±X,€ý^HÏüéYfc[&å,/Ó8S:›-6Wjö s¯´ÐÌ=Ñ|Lõþñêí­Ége\ÚÄÎW#^E¬ŠBÏ—¿D6Nâkà ¢?ÞßÞ}üùáÝužFw?Þ_Ï“LE·w¿aèãûOŸÞ=\Ïu‘éèÃßÞýôxóÀSVx¼¿»ÿž1%^aúps{ópsÿáæú·Ç®nÃ]Æ÷ÕÊàEþ}õËoj¶„kÿp¥bSÙìë²Lf›«43q–ã1ÍÕ竆£YZ:)?­âÄØdB€© °P±UÀ*ÏÊؚć㶺ž[¥¢eÕTÏn¨»vÞµÍñ;¼Ûlž˜¸Ô*͵ŽË,KhÑhòím¢g½‚Ã̳JNšI,H[ï?º¶bÑ}ÜPmªvàá÷Õ¯J%mÛ2ƵK~îÝsö9]¶IÒ¸Lu:Ú'Ö²Ó?ÃN×¥Šàvý¥’ +[›ë™Muœ«$ûŸ´¤@ev®¤ÿk‘?…:ÉöÕýyVò +sÁjîo4·:óÄ5iZ£Ü@ñÖ˜ØS’7®ªÚŒÈó4ÎuYÀHö¸F¹‚Hûj÷è ^»€¢Œ…Á‹n{d¨[1ÑàY,Ý VP‡91äI–¨CÝ4 =‘A ìÆæèžÑùÐñw»»ÖEÔ}©—2áöúÛÕ`|õjûCµëyÀç âK{I‹4.¬±³±t¿Mahº´Ø€Î2…¥¬xÍR•€Õ•¯Ú@—Fƒõ«2[°$Á¾q_ª)1Z,àª%Z½®Š¨îãøC⯶M½p<Ï&惈¿i’½tøNš§y*ÇàµýÄi ¨'ñ§mê~o«E=—p–æqj‹‹x†1¨"KÈ#‰pä#6߆Gw?ñ¬[.Ý÷aåJøË;‹ k7xH6ñÂÜï”un1xdÞ6ÚoÁƒdYÍ“Öû[8ˆõ»£¢O"="Ä~ Êž•kíš¾;?wðùѶnƒ·G7¥/ìºC°š"<îÕÃ!@CÑû#ã–ÕÊí›á kØK®ÂçÅnÈ`–“®¿bGßÀqsm»Þ'O¢Ì0†² +|YˆB¾CÓ€-×d¸€ç+ÃÊ'!\¬]û\-yÀáG‘ÈNŠìÓqêldw«cÝ>ÃÒmߤ™í~óD²ìSµ +v†st`œ`!Š$ 4Aâ76A¡±l´DÛ2­›ÒÞ¶¢uóɳ4zr=‰@·±LÔ¸Î8K•ÈÙš†û’ˆŽTÏBÁ^=©¹_U¦j¸H&ŽUÛ3Šœ0ë}+^¶ô3+¡]wûÎÖ'=žÒd5=SmIƒ!Øaï‚!V)’2N\V"QÓN¢}_1Âñx8tóL¶a,„Šn8Õ/ÖB/ÕTê~#FAù"f—¼e"U_'Õæ6Û¦zs*/!\‡Òcd€æí +å Ù— +„óâ'Óqƒ”ÕWÚ#³œ¨&lgY‘øª£~^¼Ë¶q‹ÊçJêŠDÅiëÏô-ž q’ûÀùGuK ÇŸà‘H +9AÔs³6¬éôBÓS + ü®s.<-J•–àƒ¢ÿE­ €ê붂xØö2&sÐØû@tn$N5-»"<Ó÷ÙMÚ¬<«œÉaq5H›»â/ÆW?åÛ‚‰6“×Tn²6. ÙFfKHKíjÂ×3hçó¬RêK ´þµðßÓ»÷¶>Ë$’Oj/ê:4icòËâ’‘¬DÚêÀMñy¿#£¢–)“g&œgëC¨äO¿ßb³6YÊQ%UXŽ‘â ÖN}Û¦è0€;8‰ûÐÿÂYï„Tv(}[`‰¦K¯KÀõÃVlá k²tâçUëMb1Ð,š= ñìq ]ãô‹†“£æH$c…²®1‹–1dD¶ôqÕúP5q6V4–©›Ê‘Wä\US‰ªYŒ€ê»È Çý-°àÎ;Y¾èöÍ’ÁçJêZ‡‚&”´ŒDwù®¢C›¶À…CnùVftÕž±¬_„ê–'å)ÁžÞyp…÷ÀËcÙqÀ‰W…ÃI“~€À°Íý!b6õWtA‡n¼æ~È¿˜"^ÞU1ÕꮪÓ1r…¢Ëçõtk02`£Ð[…•´ ›pýÄ9?Ï*ùD–p˜aៜ *$J„ø¥9ã›Ò§Ø§JO÷ÊF>Ïý5žFžq”W&¬ñ5ƒÊFO;€geŽ)ÏΨB‰ +3/_Ë$PQf¿OK:Î}½Ä_ ‘|§L…;eêÅþ,;ª"dGUHv@[¢<© +Ÿ'qNˆØ£T!=‰ÊœŽ”/W”/ƒú®ÙóS¬šÐ•ÃX—GÏõŒ )=ö`šC¸ )!ŽºÏ”s)~°B©{*ûpL9 àшîü•ŸiH™“2ºå> endobj -1358 0 obj << -/D [1356 0 R /XYZ 56.6929 794.5015 null] +/Parent 1374 0 R >> endobj -454 0 obj << -/D [1356 0 R /XYZ 56.6929 612.9401 null] ->> endobj -1359 0 obj << -/D [1356 0 R /XYZ 56.6929 582.8262 null] +1398 0 obj << +/D [1396 0 R /XYZ 56.6929 794.5015 null] >> endobj 458 0 obj << -/D [1356 0 R /XYZ 56.6929 582.8262 null] ->> endobj -1360 0 obj << -/D [1356 0 R /XYZ 56.6929 558.4148 null] ->> endobj -1361 0 obj << -/D [1356 0 R /XYZ 56.6929 558.4148 null] +/D [1396 0 R /XYZ 56.6929 708.5814 null] >> endobj -1362 0 obj << -/D [1356 0 R /XYZ 56.6929 546.4596 null] ->> endobj -1355 0 obj << -/Font << /F37 747 0 R /F39 863 0 R /F21 658 0 R /F23 682 0 R >> -/ProcSet [ /PDF /Text ] +1399 0 obj << +/D [1396 0 R /XYZ 56.6929 678.4675 null] >> endobj -1365 0 obj << -/Length 3410 -/Filter /FlateDecode ->> -stream -xÚ¥ÙnãFòÝ_¡·Ð€Åé“öÉ™x&vT¬óÜLÖÎÛØ;kfuñéâ_ý‚ƒ^š:F?g²Ø'9@&Ëc¯{}_ÞCÁ¾šÄÆJ¡÷j­ŸL¦^¹8ÏR}àJ>àŠvyl’®ìó8±Æ[Ún÷ˆ´yó‡ÁI§Îàþ8èHiS PýÑÔ%ãªVúªuµ*¶ÜÝ5Œ,¤oU<—‡‰WæQùyVn:Ñ- ªŽn/u•›U5+ºRöhêÕÏ -§‚[ǹ÷†Ž×-aukòèLž5ÔÎ[îlÜYðçºh»rË(¾b«°ÅüxF¿~Yw¯}˜‡rè’è“Ðñôl8¯tT„©F©¨n:ÁòwÛõœG̹cSl;îÃs †Îˆïî>ý£Gí7X½_tQÝnˆo7å¬úY)3;>+«(± T†÷ñCõ¬Ö›U¹†û]ÕÔñØM‰@îlfE͸ǒ»¶œ3wCL¹Ñ©Ë‚^ -P—<ÒG‹f˨§ÕN–aN»N«Âh’E«¤*M©;F 롧 €òó¦¼ÔQÝÊ7‰´ë¢:TuU?ÉLƳz ",šâ>Ûý­ÛHYGãarÙñ71ÚºX—¡kûŒ’J£çs>Û’X -.Hú{¬ìIg&KEq±y³`ع ¯fÍCÄ~¶¬V"5cHˆ`ŒØÕ$˜ªÂ1£mª¢uYV¤ŠæáýÁdÕ6(Í -=êU¨Î[™>kv«9ƒO%­v M¨—ª[†qõtì " ¤U&MøVzºjËXæ/Bx0ìdÚ"Xtštð$yÈHd°c„8Ì8p¿Ÿ Ù.iYĬ«Ï¨‚v ÜxIûÁf2âçE,qÏ:ÂW üYêèÞW(º­¼¬FÅ} ÀV¡¶ÊR –ö±&ªPØça#ö œ›žd†Í ÿ0áˆP½£DhY´ 0›FŽ(ò©Üá^~ ó´îÏ©mT¬VÜ/.Îõ1ƒ -¼lÏÌŽ<:#tÈ¡§XµÍWÙ³§·ä͆¾¯û«zAD$ßÉ«þN^Ýéϼ£Êzï {G褑ŸTYð“Ø'ƒ nX£ë8¶Âò»# ¶Yíоö³FNW ­K£§ê-‚óÝÂQ q;ô„Ž})6¡T³…}øM> 'àÑhÜ®[6Û -ƒ†ç2Œ!fŽjÛ;öó xÞã t·ˆF¬ [ÂöõòtOÃV¦l¶Õ³„0¥ì^šíoü±k§ãᮟ$Ñý»·:× Ü® À0`ÏÄ2hO倱bø’>>H’^6NçîûäPáWõÛM1âÃsƒ×ÖâÃ)´J2f˜?Pð71ÈŠÀ™r[+%$¥¤‰ 9“’ÝØì8 9æ5iK¯¸ðÁŠëUðI±ŒÅ§©™×66Ð ²™¯L‘œ²0RŸ©¶×$û‹öS^Í»ljc—q9–wÁâ—CȤ³„h´x)¶ó>¦iœ*Õç]ÎåÑÏÆ8ž"é"Q†°ƒ¿Ð‡c‹šéÄHà7©.´'²ÉÈÁš$ÕˆCýéÊ£M9Õ°Ta´‹¶¥žðY×r/=¼ˆŒ ×" }~wcãô0¢Ž2Þ€"­»ý¦[?Åp×ÊÜ×ék³8I³×’ýÅÕ<ÜMÇùú#›_ÄäN%NMœæ>=õУÀÈ9Ë2YbÝ7Áíg}œ—ßui$|mñÙÙ®$îZV3´?-zY„ŠÍ†¢d4® £~ß•Ûª”ø^kd‚ôÿHÃÑ’T¼ovÕ»÷Ü-ãÒÞ+§deHR’èv!¨f„Ä©ùWh ã,íÙO4ÌI|ì¬õÇÌYKþgIq°Ýˆ}—‘/ÂФæ¶\oº=ƒ«ª•A‹QæéD“ý_:¸‰s“…Ü+†yÕäL%¸’v`JÀÆ]éT™­K'åЭS6ã$*F»W'.Þ+ÞA;fœ‡Ådxg ^g]Ë=§1EÈp÷’¶NÆÞ€ÒŸCâsNÀ<‹Mæš©Òl(=Óæ$Î{:÷’1qâ!&ޅͼپÙ1ðRpBÆöш§dÑÍ3©v§¦JÜÙŸ©q¹$ê!ÜF“³eQ?Å“0ü±„ ³ -N0LîÃͧP¾yW<¢ p&çOjŒy¬ŒÊ{ºõÊÅ.ÍOïD1¡q2/¯Ä+;Hø0·3λìE/²m;ö<8¹kh¸A¥õÆ&b↲8ÐÏÕ¬äY*Wc’ô¸ë¸®Â|CˆÌ–N$ÂÑI¨Ú$·Ô1hÔÛ€”žVHm8“òš1$Håi° ‡Q/H%µÅþŒÄËù äÿµpgD|edrwR .õïDP2áõPGÁ—Û/”˜AÿbHOS¢8î‹%梜ÆzCÕUD:øàªìþ 3¢i+52BM\BÚ¾ÚIé v½ãBcP"é|ôbªÑ î?,ß:.ÐWî -,M¼Û ”ÏÕlDpµn8wx“œhF4ÜâÁ©H¨s>íéºýˆºô§ÂÄ…V€J2à C©)‰ÖMÛ1$Å&©R%âßâ:’nœ„Ô ¡>››ZŸ²;Çþ†ÛÀø±š8Ò‡½/¶Çœ2F²è™­ŠVÝÞ]1ÀWÀiᦠ‰ ³g6ëMµ*çSò5€˜—‹b·=‘$FZ#=¸0~ Ò!Ŭ‚'`óÞâé8•ƒ¹\B¬iÍÐíÌ¢ -bê†ÛÇ]µê¦\½=e¡U|ŽìøŠÝhäW)ùÁjd—ÄüÃŒWí†ÑY¬ûÚÓ”Nb›åÉÄ`j™©Tˆ°*Ÿ¨4< /?'&DÃÝ÷&„´‰BËE„Ø5›¨¬C¹„ u%è9ÝSìd1vÙ°x½Øm·½„¨aÖ?¯üùÓzX|KˆŸ(òuÑÛ®¸ëîæŸ.¯¸î÷ñþ=:¤˜û®ëð¸S·/\^Ô!Æ"¡¬ô·z†-Jy>Âh½Ùuã‘Çmåg|_£Ê9äŒ!ħžö@é­¢Á¬Ïû÷Œo!,”ÁY¦Ž=ÜñÉ ªËëÜ—Ö¹îþûÝÇ×·w1£™³Í›R†ÐkÍádAä2öÑáJ±8ªüL´×¼Ú˜XrUŽŸçx‡Ž»T§eÃUY ‚@VÑ×*9ú/Ê4h€ö6¸E*³Z:·‡à¿5×»|| -dü°þŒ“Žó×°ãiúú¥ˆe¨Ó_g'¦çðxþÅ×x˜ãsüÿM -Ç€Äänå IåÊSxÃ?{Ë· -_ØrÌú3ç:=üâ(x?4Ð.ÓTs¿a†ÙT ÈäFFdAaìk´î}Œ¤s–¶oZ†Ù#DI8aÂà–¿eÀ¢Y­šÖ5E):¶7ähIC9òÓ.«°+kŸzn2aFFŸk¤”ëêP¨Ç8bÐmœ¹4$:h5Çë£:seÂëæ-U1˱ Óa]H¥‡5gSFÖåæ¤.²<¸Á_L1úW½cQ}ÿ¬ÙŠŽugÕM1ÏE+}ëâW1ÃÌ^Ñf;볞Í#WPù@šeÙVÍk)`nƒKÎáKy%-=3Ø¿«‡Gú -½ã:X{@ЛÐLä6¾>Ü>|#KþÈ¿²QÄ5æ‚þ2šè¶;>Àù/Úe1ð¢SŸÅy~š­ e´xDïFý¹ØV ¹iÈ}Û•ë–{ðîQž+-þþa‡Å0š.#è“z!iã{ì6aøfKrY™ci˜ƒo5Øâ!¦ÎjI^ó[¹üáÏ}Á÷ŸÆ4RuÈõ!’G)¨ïë¦Þ¯ODŽe!~íN– -`c¿G‚¡ðWÿúéðÓ0Ð8›eæ` ¤3M9Þ1µgþÅf±ÏL:rôÿ¶Ü‹endstream -endobj -1364 0 obj << -/Type /Page -/Contents 1365 0 R -/Resources 1363 0 R -/MediaBox [0 0 595.2756 841.8898] -/Parent 1368 0 R +462 0 obj << +/D [1396 0 R /XYZ 56.6929 678.4675 null] >> endobj -1366 0 obj << -/D [1364 0 R /XYZ 85.0394 794.5015 null] +1400 0 obj << +/D [1396 0 R /XYZ 56.6929 654.0561 null] >> endobj -462 0 obj << -/D [1364 0 R /XYZ 85.0394 167.2075 null] +1401 0 obj << +/D [1396 0 R /XYZ 56.6929 654.0561 null] >> endobj -1367 0 obj << -/D [1364 0 R /XYZ 85.0394 139.8789 null] +1402 0 obj << +/D [1396 0 R /XYZ 56.6929 642.101 null] >> endobj -1363 0 obj << -/Font << /F37 747 0 R /F39 863 0 R /F23 682 0 R /F21 658 0 R >> +1395 0 obj << +/Font << /F37 779 0 R /F41 910 0 R /F21 690 0 R /F23 714 0 R >> /ProcSet [ /PDF /Text ] >> endobj -1371 0 obj << -/Length 2964 +1405 0 obj << +/Length 3184 /Filter /FlateDecode >> stream -xÚµ[[sÛ6~÷¯Ð£*ãêjD¿O73]2߀î@W›øgæÏ'JùÇbwØZÂ͉Ó|þ½5\£Ìgë!¢ën‰<CXÓaéçžC±$Öá'\ åŽÒ -Ò*UˆCæÇØ¡¦ ¤EiÅG@À4N«>ê<­j8ýpÆΪu±ÿ Ž. -c7Ä¡F,ñ&…¾[ÿŸ|6phä˜"Ru>·qL@…çt„„?á~(÷Õ¹ Àp¨%i|jÊ@Zœ„‚éRÊ {¨ ;”³º›l  çÍñÑ´4Íj»GZžÖDkµþÐIu+f¾;4/¦©gËÙTÎ$ìp°¹9ŸÊû¨ó©Ü¡ÚŠüS¾ú²Ð³³7©'”;Ôˆv“ŠIl ~iR ‡4b· ̆I÷ëvâ逕¦Ç²¯©ŠUcŸ˜Iž‚'Yéº%–¼1ýYËLhÔ/û&ûËã$úìï™ð6ŒqdÈ9ÇJF"9ŽÃ| Âó5šã,~ÂëPîwä8ŒdBÒxøjÊ@Zœs0I$‰ ÎõPÎu¨ÞE–É_ê/éœw’t‡1Á#§ˆ <°ámÖ1Oê˹¬g ¥ÀʾÑk.Ÿp:újÊqŒQB`¿ ¾CMØJ‹SN¹S§%N¹*B¹¥56ÕË¢YU¾©òú)Lsíõ:àP#øi.¶J|Þ&Í82Ls¾;–å(@aŸÙ÷!šå,~ÂéPîw¬¬° äBÅ£ïPS†Òâ”ðõUÉÄ7{û¨å:”Ö¨¿8ý˜ÕÁÅvš ÁàLUÜFûõ]®çÒ×ÜÞÓ·…rÞU3YÚ–âL—)Uâ“…æyiz-Ê–J¹-LkHÝ”•)ý9Áww!ð\ l¯pWMÔïœ^Ù”újÖ“0öÅmhAý’b?šÃÃ`»‹» ò%y¶UJÐB¥)ýê¿pü©Ìwãss‰DÕ<³3óGWÌM«žŸŠ&¯Ù*_¬óm±+ì«rÞiÑõyÁ©õè¢mÕÉزÎ÷M±°×lÖnÏO÷õŠTÚDÓ@µÝ0?˜»Š¶­ûÚ»'ݨuþõh~3ö¬´8÷½ øpÈêvŒÛàóQÿê 3£Œ›c?æ~)˜Ø4ˆ:5õïþ÷Gž³—Á/V6S–ÃŒyÒìŠËg~ýÁÒ?Ù™\ðßüÿ2äô³®cpöÔ¡Ë -„X£t`$3’ý Ihúÿ›ë‰endstream +xÚµZYsã6~÷¯Ð[誂›ä£3ñLœÊx²§v+Ç-Q³©ˆ”í¯ßn4Hñ5ÙÉVjh}|貘qøOÌ"øŠõ,Œ53\˜Ùb{ÅgÏ0÷þJxšyM4oS}óxõõ;Îb[ig«Ö^ãQ$fË_‚·ßÝüøxûp=—†–]ÏåÁ7w÷ßÒHLÍÛ÷ïîÞÿôpsêàñîã= ?ܾ»}¸½{{=‘°^úÎ,xw÷Ã-õÞ?Ü|øpópýÛã÷W·,myW(ÈW¿üÆgKûû+ÎT™Ù+|p&âXζWÚ(f´RõÈæêÓÕ?š [³né˜þ´Œ˜±1ô„ÕðÐœ?—Îàp®ï +%@ç6ê;‚3.”Í­²LƒLµQ´hEhØ{š˜Y%•3ɪؿ&û%ªæëw0v"CòÈÂHws=×:~•RÓ’kKüO‘§8A_YIm‚M¼&Gú® +jEþ+çòùà¶Hi°µg–?ÓX‘·6Šƒ]êæçÈ*02³Øé¸[Û$r)Lð””Y Èq \“\m%„Š)]‹…¬È. ODe•Té6Í+: Xakƒê¸KÇöY$#åמׯŠ˜ #éé‰gÔSyY,ˆ>ܬ'OvýOZ™ËP²06aW;g–Ù(ŠüFI¾üöž§ ¥Žºò¤ûrdG€¿4Ñ@mo®ç*äÁë:[¬¡«mðšm6ÔKv»Í»Æ‡þ8¤û,-I"! ¨IÊZ"r$¯Yµv:âaP­SìD'Ààsö’úîÓ‘¦=]H6w½<Ù¦)6¸[ù¡bDRÀ½Fm~Ž‹ÂÆüNµq¬aàL×8„+%”»8Øîèb”~B`7Á6Ýîª#u7Yé‰V£ÆV€‘Íg1.Y,£Ø“ÖÌ8E¢¥Ó ç€´" ͬPqW¤þeV:lYü)¥‘¥3Ž¬œ€Ú›’æÀ”×"p'‡oÇ"Ý4›y:¤+lE‡‹u^çV,ùG9”©‡>Ü< +ÝU.¿¤¨æüÏ\¢§\шG6ÎÔ.ÖIþ\­=ùSºN^2T:׋i:ÏÐ|ñ”lÆnð¤MPcúˆ—šã)Yºìfy›4ie€tC{ÐÜëK˜ŽáUGŵKZCÔž2oü®XÇqBˆ'>Âe1˜€?ÛÒ¢nñZŸØ¯]/¥+í;ýe~âäzN8_„`‰M÷AèZT³° +7È–¡¡l¿# Þ“jCɯ äæVˆÆ·u2÷ú± 2Ü=rÚÅ74 ÿlr¸È.ŠŒ`À¹H¬…>¥H"&´}URŸb1ö¶É‘:T-afKßOž`Ul6Å+Ý5îêslj\œu7„»8ÞŸ¢nVŸJ···saÒSoÔ“PèŠú•ââˆCW,Òa]å ×lÊënÀYÌeXo•Wé>OÇrLB<Ž@I¦Âæ-Õ{ÅáƒÌª[Er[XaµVmÇ®¼cÿ¹yúxzÁêü 2XKj {œùåÂÓÌÛDçãLCå2=tøs°>>OôŽ<`Šéê‘㻸µ£ÞùŸÒ´ç—i¹Øg;ÉŽ¼þ…ŒK]{±¾ýTð*ªŸ +©žj ª ª@•`;‚ÒäþyF‡vd¯é/ˆ<Ü—D^œ„C8@m£,Me_Ð}Cu‰‘ÁnÈÇP ,¹› 'æšjm5ÕÉNø3ÂØ ‹„ž>¼¡9½ 6Ô…øß9þï[#DkO¨&ñÃ\ÞSò$Ö<ý‰‡û~>ÖBü%8´Óªo¨.12Ømk"Ò, +嬵©Îc­¡ê™ *©Ü %‡ÌBNŸßP0ЛXrpõ¾ nÑn^ŽþÏÁ’…¡5çZÆÚ2L!®¦¿ ôpßÏFœæ{„FMk¿¡ºÀÈp·iĨ˜ ˆ¸€¸Õâjª“¥ª=TÚ«t?tp1“nM_ßÁÌJÈâ»çÿxkKÑ•·Ì†±:73Á…êH:…·šþ‚ÐÃ}?ßÃņ…¿ ü†ê#ƒÝ¦ñy édo-ª ¼ÕT'Kv §C´ç22ž>½¡9¾‹7ðoJËîù'ÞNRôÑ&Yĵœ@›DWÍ“hóôDîûr7ˆ€¦ußP]bd°Û$Ú›’Gñ4ØZDç±Váqdžù®Ød‹‘Ô Ê“zòì†hxxi +ÿâ+ìœþ©©ãºÕ.þ÷ _£=üÀ:Íß.á÷OŽkÿ34|{ö…¸A÷­±\(ÈöZ|Ná©&Ÿ–k°ë(šäX¬”øèÕã”v¢i.{MBÉbò#¦‘t¢9$OÓ¿ìsÿ7 +øƒkÉA[P,N±ÐÐ xèü)7»“0ÿ¿Õ¥i2Gâ¬ÓŠc·Ä@\C=)xÏÏÏÍ@L ™Ô”îšiz;ƒÍƒD¹?Á; þù7±/þ3ÐÓßÈêêÈHž¹¬õ˽g +ÕàG1Ép„õÿuNuiendstream endobj -1370 0 obj << +1404 0 obj << /Type /Page -/Contents 1371 0 R -/Resources 1369 0 R +/Contents 1405 0 R +/Resources 1403 0 R /MediaBox [0 0 595.2756 841.8898] -/Parent 1368 0 R -/Annots [ 1374 0 R 1375 0 R 1376 0 R 1377 0 R 1378 0 R 1379 0 R 1380 0 R 1381 0 R 1382 0 R 1383 0 R 1384 0 R 1385 0 R 1386 0 R 1387 0 R ] +/Parent 1416 0 R +/Annots [ 1409 0 R 1410 0 R 1411 0 R 1412 0 R 1413 0 R 1414 0 R 1415 0 R ] >> endobj -1374 0 obj << +1409 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] -/Rect [284.2769 667.7189 352.9489 679.7785] +/Rect [312.6233 240.8428 381.2953 252.9024] /Subtype /Link /A << /S /GoTo /D (access_control) >> >> endobj -1375 0 obj << +1410 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] -/Rect [282.0654 636.5559 350.7374 648.6156] +/Rect [310.4119 210.9549 379.0839 223.0145] /Subtype /Link /A << /S /GoTo /D (access_control) >> >> endobj -1376 0 obj << +1411 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] -/Rect [311.9531 605.393 380.6251 617.4526] +/Rect [340.2996 181.067 408.9716 193.1266] /Subtype /Link /A << /S /GoTo /D (access_control) >> >> endobj -1377 0 obj << +1412 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] -/Rect [299.7586 574.23 368.4306 586.2897] +/Rect [328.1051 151.1791 396.7771 163.2387] /Subtype /Link /A << /S /GoTo /D (access_control) >> >> endobj -1378 0 obj << +1413 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] -/Rect [292.0084 543.0671 360.6804 555.1267] +/Rect [320.3548 121.2911 389.0268 133.3508] /Subtype /Link /A << /S /GoTo /D (access_control) >> >> endobj -1379 0 obj << +1414 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] -/Rect [330.7921 511.9042 399.4641 523.9638] +/Rect [359.1386 91.4032 427.8106 103.4628] /Subtype /Link /A << /S /GoTo /D (dynamic_update_policies) >> >> endobj -1380 0 obj << +1415 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] -/Rect [401.5962 480.7412 470.2682 492.8008] +/Rect [429.9426 61.5153 498.6146 73.5749] /Subtype /Link /A << /S /GoTo /D (access_control) >> >> endobj -1381 0 obj << +1406 0 obj << +/D [1404 0 R /XYZ 85.0394 794.5015 null] +>> endobj +466 0 obj << +/D [1404 0 R /XYZ 85.0394 440.7496 null] +>> endobj +1407 0 obj << +/D [1404 0 R /XYZ 85.0394 415.629 null] +>> endobj +470 0 obj << +/D [1404 0 R /XYZ 85.0394 296.6684 null] +>> endobj +1408 0 obj << +/D [1404 0 R /XYZ 85.0394 271.9661 null] +>> endobj +1403 0 obj << +/Font << /F37 779 0 R /F41 910 0 R /F23 714 0 R /F21 690 0 R >> +/ProcSet [ /PDF /Text ] +>> endobj +1419 0 obj << +/Length 3323 +/Filter /FlateDecode +>> +stream +xÚ­[msä4þž_‘âËMªa½ÙòÇ.Ô±ËeCÝ]œObâ±Û³!üúëVK¿½)j+鱺[zÔ-µ¿ à?~©CÆ"¾ŒbÅtÀõåf\>BÛwÜaִ¾¿øêFF—1‹C^Þï:}Ã/ï·?¯B&Øô¬¾ùðþæö»ŸîÞ]EjuûáýÕZè`usû¯k*}w÷î‡ÞÝ]­¹Ñ|õÍ?ßýx}GM¡ëãëÛ÷ßRMLÎtzw}s}wýþ›ë«_ï¿¿¸¾oméÚˉ†ü~ñó¯ÁåÌþþ"`26úò~ŒÇ±¸Ü_(-™VRúšüâãÅ¿Û;­öÓ©ñSÚ0-T#)Ỹ3£ÌYÄ9€"0óvŸdÂ1Nòº\e“í^‡ö‚0«(ºìt:’Ü‚Æ¢eG4çŠþPä¯0ä"^íӤȊÇÝ1§ßÙuho@4 +ÄâÇ'•’u;XVSɦÉ>¥TÞ•š'ßügY¤@ÈÕý“ƒÕiC…rç´L6OY‘Öþãĵ¿d¹Ó»ºâf•nÒVTB +ª®"ÔLEF8 ¿}ÿA0Ó0DQ `H9X …m}ÿáþöæfJÃ3NìÓºNS´ÀÙ‡²OÆÚGuTƒÆl]Íñ@ÑLÄ&h }îyV7é–ÊE²wµuZ}J+'à—@%|ÐJNŠA'‡*Û'Õ+Ùêµw¶ö ˆ© '_(áì€õ¡¤7ªù±¦RR¼RáöGW±ÝÒ<ÔuZÓwõ!Ýd¿°Væ%kž&(&BÁ„ÕÁÚÌ€Š«"‡E'c¢Õ;§^Y5TÚ'N½‡t Ë_:40 šƒoìͽUÒŽn +Ì›PW…LFB–¶Z0)B¯mgŒHBSúI-¶®†&Îø•F¬!žõ>Ƹ&£¡¢e‚3Á¬¶é.9溣Vðn®!„è8{³`)øB¥U×€W8z¾~“7€Bݨ„4«ÑðÀ¹¨lµÆ¾×Æ·¦ûCóJE\-l;œƒC(D2ž÷â]Ôy7Þ¢ÐÎÍSºy^ãê¬G~œk \Þ¢&¤÷<¹€h%ä@ü=¹näÐd%N¹&¬;ÖváပTãØ×TÙ¦q-´Èc°$©À][á´¤ Õ'–™P¨_‹&ùƒZ-}ð£´j’̉ݖ{*+òWµÓ¦hO$”šr>”á +Wgn¿‚ ö«Ò5 ¯¶§þ¡,jëøþ-ÕìlU¹§_dŠ´y)«g»+1Ä/¬>­ +øñ)©²Vͦ´=m¶®¯ÒZô—yGKË×Cêø{ߎ×U²€sï œíAF@Ð}¤²ËbÀû᪘ÛSàß\»$Ë'÷TÌ;¾ô¼êt2Ò¾:O ÖNì4‹$î¬ÞLó—¤*¦I&”8i~nÝ!3a$Ö}5³î=ê´î÷ Ç13:0ó‚=hBpovÅŒ]z’?¦éhHëM•¹õ/huŽ‡5ŽX ”±]ý‡V³P?Ó´z»& +ÁAªžÔX=^Rá®cm‹_0wÜ/™»9†'2>TIï $/ {‹ZPdÜÛ,Çt¤™‰`:g9ÖEçX‹:Íls·›¤ÚŽÂ‹™ +ø¼xšßcšäL¨êÉÿ{L‹{LëZ1ÁœÆ&:Ë7Ü¥EpéY:÷¿`ô¸ßÏç[dà,!åüà·¨%EF½ÍóM[ˆ Î󭃚á›Gf*+šô±Êšñ¹—„gå{Єü>á&L(û +¼%ázf ÇÄ ã‚˜…7=Sççñ Vûý ŒƒÃåüè·¨%EF½Í3ŽK@-9¸h†otš§:{Èqƒ5Ú<œ#1+»…÷·Î’Fêžô· £¢CÇñùXkp~!ïš9J=|ÞàQ¯ŸO38\˜HÏOy š×bÔ×,Ç”Ì(Ì’¬‹:ϲe7¡i…§Öu]&ë¦ÉÇ^M0­´œW EMhЧZÄ4ž÷{*¼ ×& ²ÍÀQRò¿¦`!ݳuÖ¯9ü‚Õã~ÿ‚_ Xòx~ø[Ô’"£Þæ9côÂé ‹šáœG¡Äãa›4éš¼Ãsý<"„3N/hТ&Tè‘N ¦t0Ðám‚é”%ñŽba$ϳNJKÞ³uŽt¾`ô¨×Ϧœ +bFvð[Ô‚ãÞæ)'@™…XÚEÍPΣPbS½®›Ía]¥»*­ŸÆnŽÃùŽ2³ +´¨ ún.„² û*¼››0dèæ"=ãå@aoÙµaÖË9ü‚Ñã~ÿBX…ŸÒf~ô[Ô’"£Þf)'M ›!ç)×E§\‹B‰à’‡¤NG9i çøYÁ4!¸ŸÁ½Šú’?b2ß&Ç•Ï`ÊئߨŠÒ“ÁICj/©öÁ¡\zT¹d4Bꦬ(Ý×v¬ÿíØ¡½r|¿9}²+ó¼|éõ0‘]çPæZô3¡ÝÑú ÛÜÀ/çôõÅe&AŠˆ(Ý‹áÈS(!JG¬טÐÌ’SÉŽ^ž²&­É&]oÓ<ÛgîÓhå¥`N^+á,†LÔV¾Ÿ.Û´h²µ»Zsz÷Ò¥ö>³‚qäNe«a"¿¤û ›}Æ:{ß„…úøP§¿A ýnµt8²Ÿ~’Úαmè{èÁ«QΫãšÒ©ôïhÔå¼íß„þ¼$î’¢½…Ú8OY=æIr›PöBc(.\ÞŠwÒ©ðçSÁ—v¼¥`’þ°ûEõÐ|1}}kL{}û%ö'ýÕ=ôÿ㊯j*‰»ÓE‰ÅzŸîËê•~Ò(l×yÛ…†~zMeö¾7r7¢·H-¬L½œ²!Å6Aö‡½IžÝ õ&tr´>¸{1©VŸ’üH~y¢ +6Êq)5e;ªM¶Û Ý{’S}ס¨Õ¶ÊÜU,4=aFÜV?¤iAup*|¦k …<)©Ö9,å®rñ„½•à«å~’cu²?äž!^èÉöÔ“n“·ž‚tÙ'W†¾êáx +XPö÷tE:Ñ¥7 Ëé‡×^&ÿlÜpþ d´p¢ë¢ÎÇe=e“xŠ5P"àù¬XšÛ] 1 ŠôľÍöæ¤üøÒG†3ÛŽw+]Õçr¿`ë¸ßÏÞÖˆØ0Ã…™óµ¤È¨·Ùm­ðyzuP3ôò(;Ciž>&hýºÄ§2£´Ý—XP EMhÐO„JâµnOrï±½•É#–õª¤w;P›yF14tÑ)\=eµ™¡¿Z‡’¿ZW*ZÝî\kêðt­9 㧗.¯i=uÁL˜SÔ@ÏË£pªy3Ü)ÈrvЈ¼vš»¸jÓ¨AlûE’6¶&Î÷¡¶\ǧè;œÐ6´žžœe7°zM¼àĺ¨ó,kQöF¶¬^&nub8L ­çåzЄܞ3L¡éË¥×_RêÞ‹  vTï“n·½ +b[MU ý!åí¶ËÅ?åÞ_@S–¾7ÈZµoaüÚ_ìù– ×$s“Ý¥¿:©˜—å³}H%5mï¡Ñßu£çáàÚ8MlïÀËcîä'x¾p:QMQV{Üž`•k[Iu~u‰H ÂÁû ؤÛóìÇØ`ij™.j†ýÕa?Žïèõ#„èWÀœì5!¼ÿþ‘3ep t¥ÿD‡î¶öøZ¶TU†Oólí“+Ði Kö1"n3óòÁŽ6Ôõ‰ÂЙÅä]¡1sZ¯Ä{½GqQ"¡ŸÎW¶2é84A&©cž‰tÊ(_Gm¶^šÎfºlª‹²}œå-#²wÜë¶Ý)¶O¸Ú Ñé) -˜n[;r¸O²{¦©=lû^ çgyib&$_Èht@çYéAvÏõ=ZŸIjH-ãYÑ3=Li€¿=Ùÿ¹Š…l‚$%&x¬,7°†NbX2Ô€ÄÅŸµÏ„à;ÖØJ¯E± +9Ôi‚BÞ*q›;Äæå#µà[ÒßÊc‡z J•ø&‹v¾±rû +²SÖfˆ‰Tp芤ŽþÖRN7·ÿ½¹cTt'Ë…CEöX”îuUo }؆•mW`l Ìê¸i†ñXeЩ‰¯œy„ó¦aƒ=Ó €Ã!-çáç/B¨‰§ÄJêXt_áŠrµ=û[‘/nœ¬˜é|€3Æ=¹;³ØÈvîá¼Ô _»O0þ¹‰úÛêOÿÇŠ˜4æÜ#|ë` §š©ñ:`i€k«þ` +©ìendstream +endobj +1418 0 obj << +/Type /Page +/Contents 1419 0 R +/Resources 1417 0 R +/MediaBox [0 0 595.2756 841.8898] +/Parent 1416 0 R +/Annots [ 1421 0 R 1422 0 R 1423 0 R 1424 0 R 1425 0 R 1426 0 R 1427 0 R 1428 0 R ] +>> endobj +1421 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] -/Rect [257.6971 315.5214 326.3691 327.581] +/Rect [257.6971 603.0615 326.3691 615.1212] /Subtype /Link /A << /S /GoTo /D (boolean_options) >> >> endobj -1382 0 obj << +1422 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] -/Rect [310.7975 284.3584 379.4695 296.4181] +/Rect [310.7975 572.0651 379.4695 584.1248] /Subtype /Link /A << /S /GoTo /D (boolean_options) >> >> endobj -1383 0 obj << +1423 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] -/Rect [308.6055 253.1955 377.2775 265.2551] +/Rect [308.6055 541.0687 377.2775 553.1283] /Subtype /Link /A << /S /GoTo /D (boolean_options) >> >> endobj -1384 0 obj << +1424 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] -/Rect [294.1999 222.0326 362.8719 234.0922] +/Rect [294.1999 510.0723 362.8719 522.1319] /Subtype /Link /A << /S /GoTo /D (boolean_options) >> >> endobj -1385 0 obj << +1425 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] -/Rect [303.0862 190.8696 371.7582 202.9292] +/Rect [303.0862 479.0759 371.7582 491.1355] /Subtype /Link /A << /S /GoTo /D (boolean_options) >> >> endobj -1386 0 obj << +1426 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] -/Rect [332.9347 159.7067 401.6067 171.7663] +/Rect [332.9347 448.0795 401.6067 460.1391] /Subtype /Link /A << /S /GoTo /D (boolean_options) >> >> endobj -1387 0 obj << +1427 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] -/Rect [301.97 128.5437 370.642 140.6034] +/Rect [301.97 417.0831 370.642 429.1427] /Subtype /Link /A << /S /GoTo /D (boolean_options) >> >> endobj -1372 0 obj << -/D [1370 0 R /XYZ 56.6929 794.5015 null] ->> endobj -466 0 obj << -/D [1370 0 R /XYZ 56.6929 726.6924 null] +1428 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [231.137 257.2319 299.809 269.2916] +/Subtype /Link +/A << /S /GoTo /D (boolean_options) >> >> endobj -1373 0 obj << -/D [1370 0 R /XYZ 56.6929 700.1172 null] +1420 0 obj << +/D [1418 0 R /XYZ 56.6929 794.5015 null] >> endobj -1369 0 obj << -/Font << /F37 747 0 R /F23 682 0 R /F39 863 0 R /F21 658 0 R >> +1417 0 obj << +/Font << /F37 779 0 R /F21 690 0 R /F23 714 0 R /F41 910 0 R /F48 925 0 R >> /ProcSet [ /PDF /Text ] >> endobj -1390 0 obj << -/Length 3056 -/Filter /FlateDecode ->> -stream -xÚµZ[sÛ6~÷¯Ðô¥òL… q{L'ëÎ6é:îìÎ4} EÊfM‘Z‘²ëüú=¸ŠW0ݦ“É>â\ðƒ+^Eð¯EQ,“— ¢¦«íþ"ZÝCÛ» l1ÚtQ?Ü^|ÿ6æ+‰$#lu»ëô%P$^Ýf¿®_ÿãÕÏ·W7—B£5C—Ê¢õ×ïߘiþ¼þðþíõ»_n^]òd}{ýὩ¾¹z{usõþõÕå Šá{b{˜ùàíõ?¯LéÝÍ«Ÿ~zusùÛíW·Þ–®½8Š•!ÿ½øõ·h•Ù?^D(–‚®žáG„°”dµ¿HhŒhÇ®¦¼øxñ/ßa§U:å? Dá$qÇ8‚rÂVœJÄbhR¼}ÈÁ¢¯³|—žÊÖü(eÙ÷oÑùž㈃Põá7Ç»öƒêI! Á¥E}§ú‹Ýˆ@ÏòÛK¼nL¹JÛâÉŠ/ªÍ>ß×Çóóx‰Å:Ï6weº}Ü´æ§Ó4mÓ»´Éa¬âˆƒ…î/ò VçNNÝ*EWIÀÇ‚­6#I)Ñ*¶écn5ÕbîOû¼j¤?‰+Ál,4öCûAlœ¬ŸÒò¤Äql?ÌMánšâ®ÌMS±3µi–mQWiiêϺªÖìŽ8ÚÞÒ'[}—ç•©+‹ê1ÏLmQµµ©m,°Éð½"«&0^¬÷¹7@kâ¥I÷‡Òšë…žm·-Eµ-O™’§~=íƒ)iyúÓ¢iÅÝIYdj l -U]å]:L÷ö›Û›¡ES„" -Î ¬° -‚ÉìaA›.ÊOdRÞÈ -ÄÃP,Æ ’˜“°\šÜ‹:àP¡Û“ü1χ.Í›í±8œ=ZïltuÍE$qÑuÖ 4†Pyþ˜HX„.yÏDÓx¼_™ÂMÇX_0vܯ1v{6K%Y̪Ž0• ^÷¨Eƽ)EæiVp–,0¬ƒ -0Ì¡ôåe~Ÿ*ë7uU¾Œ¨F’B†å;ЄüÑÄ9 -˜ü.ÙúSÅé½*ÓµVEצ‡CYè< ?TZQ Ã`Ze¦ªiOw¦ôâ’ã&Iøúzg[s‹‡Æó‰% f–/y3ÁXÌ‘Œ‰8O*µCpTV5gÆg“^@ÖsQ–Öˆ²±šß™¤KI!™Þ$¤´u‰(µÉO%iý×æ°Â%EÓ±*¹ í§ á—ƒa¥Ü<Çp„Ìå ë s(eÖ®>>§ÇlÄ-‚åX†{Ô„äÞø†(…8ê‰þ Çt½ÏÓª¨îw§ÒNR;So§(jN5=¤©JÍ£¿šÌÎ LM«§²D3xœÁ݈GÌ­F\p óDæØ‚ô”mdnÓS“[Y^Ų®!½kÓ¸K‹ÒpŠHŒ0¬úœJw­Z<8¾€T[¾BåÐ8Õh¢ -ïó¶õŸTµ©L«æÙÌåjñÄÙúù¡(§]€"¶ÖA€“cÓNyA/žëSiå§eY?[LMU÷j‰¢ªœ;´mµ©sF8E8ä˜A€y6”R˜x˜ÿÐ<ý¨Ã~åÜaÄ  YH®ÃŒåöÈLÀ‚«'ø—F§Ìs`„kXN‹,·µ¶ ¸lJõÎïËúN{êúA*I“X¡±°ê„µ’ÕÍ!ßjÄzMˆÔü´iÒËä&KIÃf€F,9:¹d8£BüÇ„ù­i@VÀ ÃýEfe“fÇ4ÃòNjÍü2Pƒ¥Ðçó²ÊmÞuj…¤WKS Xã'(@”‰ "VSaFvPJ:”^pý±ÓÚlô -”—È\°9 Š÷¨ ùý¼ ›9Èq}þ})‰žÝ0L”'MT,MUc¶cª$Lƒb°ú©iµ{1?´ÏUk•îsS¥ÈÔi‚ÂÒUj—w -[Ö÷¦åSD£ßëÓvmÛáÆ~U¥ƒéÜ„×ÖBƒsÖ©½·Q‡¼²ô‡ŸŸILpŲ3Š !0©J—¢‘‹.[ÛK²¿WåâúI‹1SÈc6sqg,™ œ„Â6„/¥ò.j>p<ª8íþ°±î†O¢JÈ‚5¡EÏm lx{ê|GëkOÄl*ç=M(¬`"±àé*ài‡Ò,²Äí}"I‚=jBr?9ň*û¢_ÙU‡pq$HçôIø ú¶1? ,o«)-ôZDÿµÓn–Wj[Q»ç¸ß«žyÔç®UÑ}N†>ó0ILàRöcp.ŒaŸ†Ýz M*¸DbØ¥ Õ$ -5[iÖØS­îfDmÕ¶é;¾q{­ÞXã„#Æ×ý>mÔòtò€@žg}•'ú’²¯3§)Õ±Ô„=’tìPvw8ÃæXD…XÈ]Ô<›=ÊØùÇFOE»ÜæbŸoÆç˜ ewÖÄ£&TéÑ[ÀXF\ôuùkG;ÂܼE5$C±Ê\s‡=±(‘‚ôŒöxü‚ùã~ç{øP¥„ª´ :ÇÁ£÷<ì‰aßÃZy…T€…59fEVN³V͔ɰ&5¡JŸ…j_ª†¡«Ë×9` Y4daŒX$H€…rÔ‰\ך -~Áüq¿_ÎÂD]„ZPdÜ[˜…D–6]T€…5Ÿ9êS;¢¡HPÂ( «âQºôi(, d_™¿‰†]“F·\0Oc&ç‰(%¢œÑžÙ!":ü‚Æý~9´, „-¨1ê+ÈB9œ‹…TØÍsÐæÓÆ$1b’…õð ±"}2Ä8ïkò7MÆ]{†yPvó$@¿Æi×ä û,ÜWàë¬ÛFf dÄÁ"‚„cêÅ’ìY$œÅ/Ø<î÷Ësìù™::ߣ–õæ‹'ÑÂrà›C)‰‡ÓÝc>1oÂg‘ a¹5!¸˜ !¤èK¾Vþæ‰; …’øÎ ê“/¨ñç¬P~NmeQµú¼Lý¢ö ªí †½UM̽f¢ ,Õƒ*ÛcnøJÙ¬«üçOùQ_«mÓ³H}N覸¯Ò=„áJâáû‚Óù˜Ûõ÷Íû¯^›²êCëLŒúl:}ýbJç -¢®UÒÌ}gŽÈë½ù•Í£~ ‡¡RÚ¶Ú 0bĸ{9+“ž•žx.æ¢A‰ÜÈõïWº™Â ×<‰#¡ž4.ÌÑ]T€ÄåÎ7M #×´Åv| ûs¢N(‚ -xÔ„=6S5SHÚWáz7ñþEBˆÇâÿzýâž×è×}º|~õò˜ç÷8Çڜڦ¢Ú©{|Ka¨0üÖïhŠæüF êÁöÁÔnÓÊ¿¤Ñ³Óþg†ô#Eƒë¨îÓÄŽÁÜ’â<8Ëá"D¢„ú/²\«áÕ‰çšwÍù:8ðÈKË,=ñr˜Ð/Ñ÷›§´,²¢}Ù¨Œt|š¸SáTí‡HHiÐßâ‹é:*|•á¬!ãS>K<å#6g3Îø4:hõ°Ï/_ª×ÓàTò¼Çuö4=MûCa4ó~þÛÐùË/ÃÏÏæŽbEiçE "¹SJ)ÎGŽòOÈǪÿÁ¡(ûendstream +1431 0 obj << +/Length 2730 +/Filter /FlateDecode +>> +stream +xÚµ[Ûr7}×Wðm¥ªÁýòè8²W©³+kk’<ÐäÈš˜"µ$eGûõÛà @`0Ó+r¹\œË™îÓ3¸4FlFá›YE¨prfœ$Š25[ÞŸÑÙG¸÷öŒõ˜yÍSÔ7gß¿fæˆÓ\Ïnn[–PkÙìfõëùë¿¿úçÍåõÅœ+z®ÉÅ\izþÃÕ»»+®ûyýË»7Woÿ}ýêÂÈó›«_Þu—¯/ß\^_¾{}y1gV1xž÷&xsõËîèíõ«Ÿ~u}ñûÍOg—71–4^F…ä¿g¿þNg+û§3J„³jöN(aÎñÙý™T‚()D¸²>{ö¯h0¹{|t,RY¢¸Ô³¹âÄJ!dzL Uµ¹‘Œh²ÌÙX–Êg¹ýóvwÁìùüpÿ0ÿR¾n†‘3éùƒ©Ô|A"¢FXˆ„“Š0#4þsáøùbßµÀbÓý>nVÛåã}³94«îÊöáÐnû»mÿ{’„…&Œž_}ÜlA…ÇJ¨#EûöI4Œí©d:A!™(âÛÇÝf±.²Ë,ášuQ#ž³ìrA8W.wýj½Þ~À-;?Ü5þ€Ÿ¯šÛÅãúÐ]í¹ýmßv:Ø,î{ìaÛ]ÿÐt¿ÛÏÍn×®VÍ2.©:¿¹ëïdVÛ}ÿx¸û¿í¦™òñ¥=ÜùÜ@¬‚qÎMœR@~ã\úÛß¿‘i¦%q–Á+tÄ?6ë“åRâ•=èh¨“ÙÃC³Y5«^57wm¯¿ð €u»\|X7Ý9¤¡³Î2=¢µ æïûC³a!8q\ó¶Ø¬Æl9"” áì׋ÏÍX<Š!Êçt?©f­ô’ãjNQÓjŽ¨.Î?ç‡Ýb³¿múþ£½oæð¢ åm¬[âL"j„J&o mI͹¼oBÝõ«f¿ÜµIg±½I·3„ricËMG4 á4ƘþÁ2ha-‘Îò,èîæîã¬;¸NÂøJø¥Ý.üå)P?Ð1MÌ’T¾ÛÎh;DT…HiíøþMªPÀ£ 2«0A!* ¨Ñ6kWëqj”v8“ˆ¡’«&|3¤\þš +Ý” +“ˆ†*DSËB—£Ï‚FUØã+á—vŸ¯BéˆVãíQ"¥5\…PV©Š +¢Â€šî9¶‡B†V©•Æ©DÔ—\†ŽÀ”Àåd¾‘ Ó†<(ŒÓL»i!:G”Ñ* bÀWPÚ}¾5Ü©5DUh¶Pªãf¸ +SÔ´ +#jºçU!L¼®P‰¨.¹ +5ÑÆ È|£!9 iØ:S1‰ˆPBҌʢFEØã+ñ—v¿B„”fðv  +Â.B‹5®+rŠBDPÞãf{hoŸÊ5rJà~#jÄq¦8f¼2uîùewâ?lfp¥Á甼  Ô(›…ˆÈ+â+Á–v§äÅ +Åsȧªe=¢*DJk¸Â¸/˜JÁ"E! + ¨S ÍWÍzñ4V©p Ü{D¸V*§:÷ÿ’:;E1p­,ŽªéÎ ^Å…ÍÅ:³€¯„\ÚT›*§›’ÀÔEãɨ“Â*7é(MVFÕ5-·ˆJê°ï·‹RoA-î>¢Füçz³°¬à,'ð2ó¹"Œo=4å œ&ÎÏ5ÓPÁõøJÌ¥ÝçwoÖ?¾f€&?¢jD +k¸Þ aBÔª„) +Ñ[@y>5#(vç‹î\·ËîØ×®º§|ÌÇKññÏÍ®õ5Âåâä„~Dïۛż¯JïÙÒjáᱫÿz†\võ_øýñÝû÷—¯»coãÈ™wß7;h°îøK»^wGŸšæ¡¿^ô·Ú Hù>ˆ.tʆƒþu‚#Ÿª£# ºk—wÝÕå¢âCï{õxÿЬ:¹F,¥l ÷í©áË‘€"­“‰SË$Û=Ãé‡#RÅ'Vn†›)Qe15QqÓõh¡%Ñ0±Â5—¢¦EQÇ°ÚóÏ‹u»jOsß#í>ìµEŒY¡4"j„G¾ò…%—õeD^f~8NYäÂ)´È9¬ ÓP*5À#¾{i÷ùE¿ñ éUx+DT…Ii ¸…”U• ‘…0 Žï`Z§ØowËr#Uù= Y!Q#,òÎ:,ª4^F~Á ˜=…”\„ï•…ÊâÅÄð•ÈK»Ï/¹PáwŸñ  +Â.<*ýú¹RrIQˆðj¢­æŸu¡= ÙмÂ#¢Fˆäc%#ÆŽ1ùfÚëã€"g‘tìØ?'±`ò øJð¥ÝçËOPbaQ†6BUh¶PùÁô™X¿¾Aå—¢¦åQÇìõaþœ¾Ob$Ê#€FxäêãÄúNFäeÔ‡„3”Ÿ"‚:ÈO¡™ÈBFå×ã+Ñ—v¿B~‚PI Þ +U!RZÃ(åL¥D“¢Òdc`·§S  *#û"çòME8Þ v¢¶ñ!²¨ë¢–€ÒîWn|hƒ7DDUˆ”ÖpúŠ´\E‡ +Ña@yûfþÜÞЋGûÜad"j„M&EŠ…%^Nçe +‡• Š­`ö¤ýœÉù»Òˆ1F|%¥Ý狦±Z¥9*Æ€ª)¬¡bdG%ÙÊ°œ¢¦ÅQIÁwB~Æ. k&Ô}DøÏ"°ð%¸ŒÀ‹î“L +NÃL€ÅÂÎHçǬQ¨È"Å:¿€¯Ä\Ú}¶ÞüG\T:‹'?¢jD +k¸Þü‡[´RòK@ˆÚzPÑJcã®òå<ªP÷TúÏÔægß–ÙŒÀ7Ûø`k GV Ñ›tÐZ¤‘br p<æÂêó;7¦ˆáÊ¢™ œEa W÷ŸºÊ0›¢­Ôñ£v3ß5·»fwü*é».þ[‘±ËGôa÷TbÃÅòŠ[<„ˆ‰a8MrBò<ˆ£`™ëë2Áú #ƒ'¸T¾*žzÄÏ€¯P,ífúòd&‹y +&_ÊÀjMVDU˜”ÖP9E 9.±4­°Êþ$âv·½Ÿ¯Ú[SŸf³lÊí ð#9,‚0.T’É—ŠHÊ32/3‹«†4\SÀ:Ü _–„æ›6 ]Qôp<üÂê³·‚ýŸÉ0­9Ú„³(láߔ‰W–´' ò=i‡ñ¾>5OÐB;ˆ{»{›¹9N%æ8b +ÏÃY›£0”%®_f-ÎÙLòõ<ç^<‰±õh4Ú¡Í i•C¯ƒ¥;bpK㪠+õ]èĨŠá¿)ü—ÿþìôÇyÒá÷»Æ‰SM,‡ž¸'剛r–(ËÍõÿ‘¬–endstream endobj -1389 0 obj << +1430 0 obj << /Type /Page -/Contents 1390 0 R -/Resources 1388 0 R +/Contents 1431 0 R +/Resources 1429 0 R /MediaBox [0 0 595.2756 841.8898] -/Parent 1368 0 R -/Annots [ 1392 0 R 1393 0 R 1394 0 R 1395 0 R 1396 0 R 1397 0 R 1398 0 R 1399 0 R 1400 0 R ] +/Parent 1416 0 R +/Annots [ 1433 0 R 1434 0 R 1435 0 R 1436 0 R 1437 0 R 1438 0 R 1439 0 R 1440 0 R 1441 0 R 1442 0 R 1443 0 R 1444 0 R 1445 0 R 1446 0 R 1447 0 R 1448 0 R 1449 0 R 1450 0 R ] >> endobj -1392 0 obj << +1433 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] -/Rect [259.4835 681.3376 328.1555 693.3972] -/Subtype /Link -/A << /S /GoTo /D (boolean_options) >> ->> endobj -1393 0 obj << -/Type /Annot -/Border[0 0 0]/H/I/C[1 0 0] -/Rect [387.5019 378.783 456.1739 390.8427] +/Rect [387.5019 666.0385 456.1739 678.0982] /Subtype /Link /A << /S /GoTo /D (zone_transfers) >> >> endobj -1394 0 obj << +1434 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] -/Rect [381.9629 347.5161 450.6349 359.5757] +/Rect [381.9629 636.1092 450.6349 648.1688] /Subtype /Link /A << /S /GoTo /D (zone_transfers) >> >> endobj -1395 0 obj << +1435 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] -/Rect [398.5803 316.2492 467.2523 328.3088] +/Rect [398.5803 606.1798 467.2523 618.2395] /Subtype /Link /A << /S /GoTo /D (zone_transfers) >> >> endobj -1396 0 obj << +1436 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] -/Rect [393.0412 284.9823 461.7132 297.0419] +/Rect [393.0412 576.2505 461.7132 588.3101] /Subtype /Link /A << /S /GoTo /D (zone_transfers) >> >> endobj -1397 0 obj << +1437 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] -/Rect [255.0796 253.7154 323.7516 265.775] +/Rect [255.0796 546.3211 323.7516 558.3808] /Subtype /Link /A << /S /GoTo /D (boolean_options) >> >> endobj -1398 0 obj << +1438 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] -/Rect [311.5276 222.4485 385.1809 234.5081] +/Rect [311.5276 516.3918 385.1809 528.4514] /Subtype /Link /A << /S /GoTo /D (tuning) >> >> endobj -1399 0 obj << +1439 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] -/Rect [315.9507 191.1815 384.6227 203.2412] +/Rect [315.9507 486.4624 384.6227 498.522] /Subtype /Link /A << /S /GoTo /D (boolean_options) >> >> endobj -1400 0 obj << +1440 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] -/Rect [381.2254 61.5153 454.8788 73.5749] +/Rect [381.2254 360.8088 454.8788 372.8685] /Subtype /Link /A << /S /GoTo /D (tuning) >> >> endobj -1391 0 obj << -/D [1389 0 R /XYZ 85.0394 794.5015 null] ->> endobj -1388 0 obj << -/Font << /F37 747 0 R /F23 682 0 R /F48 885 0 R /F21 658 0 R /F39 863 0 R >> -/ProcSet [ /PDF /Text ] ->> endobj -1403 0 obj << -/Length 2816 -/Filter /FlateDecode ->> -stream -xÚµZÝsÛ6÷_¡Gy¦Âá“ïžÒÔɹsMzŽ;÷æ‘(›‰tEÊŽ:÷Çß‚ @¤Hºi2” øãbûÛPf3 -ÿ±™JH’òt¦SIej¶Ü^ÑÙ<{{ÅfáA‹.êÇû«¿½z–’4áÉì~Ý‘e5†ÍîWç áä$Ðùë÷ïÞܾýíîÕµ–óûÛ÷ï®\Ñù›ÛÝàèíÝ«_~yuw½`F±ùë¾úõþæ%NÆ·ï~™/g„Þݼ¹¹»y÷úæúÓýÏW7÷Á–®½Œ -kÈW?ÑÙ -ÌþùŠ‘5{JXšòÙöJ*A”ÂÏl®>\ý;ì%‘)7}UþSÇ¥ˆA§TDP(Iç9•˜IÓ³9ÊA‡Ÿ°~(÷ÿà JwC@M(2”ç ÔDðZœƒT„ƒqÙX"„@ÈTÅu ¨ez4„ÎB@Iêkó]i8ž ÓÔVÅÛÖUt‚‰?±C¹—3Qph! Œz" &J‹34q&vP&z”]q_ç‹K3¢%·{S& F´éQ1ÊRÎûê|›¢ &J‹³MAÛ ÊO°­ƒŠ°Í£Ž=€Pbà¼UÀƒFèζàB‰¾ßpãµVƒýŠçdkØ Ôôl¥7Ÿ0{(÷rÎ(Š:ñí¨)EÒâœã‚0m&Ž¾]T„seWÜåb—¯wyý¸hŠmþnÂ6û::Ý¢›Ýaˆõ“„&2nB@ØÐï•¢ŒÖ}#ZÚ²ÔÑÖz´µCŠIX’%Ìô‹P,à'TÊíQÌ*ã(ÆÔÀÝÐqÛ3ÄýíQš ¥E9gA¸ŽS¬:Ï0jcûë{õ®Ú.VÅÚÞ@ÿ“—˼¶sœP g¡˜.4T¦®€¤¤TÒÓæÛôr“6ž,41у¸GÒžÕÑs…ƒÇíH=—éØ 2x -$ɘ(®Å@Vœ‚;T«‰Ãm!¡GÙ¿äðÓ¬¯v‡±FNi_݃FVï7rœ(uµ·ü·¡ÝÀˆÓFN/š™H#‡ -a}Ñ1!ÚÈ9ü„ÍC¹g¨6lãì'-â;Pj ¥Å¹µ¿hĹÖAE¸æQmIÝošb±ÍêNyª)БËøê5²|Ÿlεк÷Öÿ6d;µâ”kÌ&vžk&%‰NTÏÐ×<~Âä¡Ü‹Óšo 5áxšPc +J5ˆ ‡;§ZužjÕ:©uÏï”òM¾XW»mÖ  p¦Ñ¸¢JÔˆýoÆ”phÀúj|#Æsú½¸m99¤DI H×èÉÁá',Ê=K<5ü`̧™¢>¨ M†ÒùNöw!¤$ŠIëVØjû™ÝÿžÍ%‘ÐŒRJç?Êl[,цߞVYãœøkµ)–ÅhGC!b펢D÷›¶LÚß´áRª]SÛ;5o^*œÎ6àá2kŠç'¶yóX­j¼Ž´×‡]V6Å5›—8±ÜyÙ8r »âá±qs.ô”ï,qprì‚›}kWÝ…ƒ:Ö2k c$Uîן?«ÒŸl–Uiéø°o»½|…³ŸG²÷œQ`@BMø½©^¸ú™o/Tz6gåjLb -©Fû_éPÔâÉúf´ PЦ„¯9U‚δ¢~²œ}Î7‡kÆò¼ ÅÓ¤…`5šb>»70%–s—™×v$—›l_ƒóÕó—j÷¥ÆaëP;¨³­šp9 Ä9\“ùÚð\T{÷ä9ßÕ`¢»³²WKH‚ÃÛ¯-«ìì/qè¹Õî‚–™&ÂÉ’°k[Ôuˆ÷–FpÝwb&+ÝÍ^Víu’`T¶ÛQQždPKCø9éc?òË9")OOÜÂ…˜5^ËüÅMX½÷3)^,Wq`)à^Û¢¹N˜2_ÀÆeîÐRM‹©6(¸⣗ǬÁÑ1X­|'i‹RÖwP«A¾²þæbþÊ׹¦¤Ût 1óý¦• -[CaÖFCaÍWm”$ dž<ØØ<[>öd¸éœµÃž\í‚;|¾ÊË"wsG급µG›û¯…=ÉM–/V€QH>#çŸs¼Ç=[¹ÉN¢p;Ø჎ƒ`¶›¢-aï$“óÛ5Â…€8æа"PÌû¼nð!(Vgîiᔬ‹ô<Œ§Š6XÓv¡‹Ú¥¨¢ñá°ÜìW¸{´³Ó;x¹ÿpûÖ•{v -ÿcc!hç8 2·‡~x†Ç­úNü2sú9´8uji‰7 Ó;GµD·7¾Ù‰,Ñçª „&Ç‘¦[KæËÉŸè~~,š¹Èí+Å·Üpz›geQ>¬÷¼GªÚxháV¶eHØü?y‰áÉ´z¦Òa1 úMÕå–¥BytÝx ¾³ÔJÝ´¯5<°¶¦ -ùÔAdx{,ì™kß`2ßabÚá-šmÎy†C'Î?Óe%ɸîÇÚÒªÝBaÀ‡†÷ã¾c˜Ýs­Ï”e 3 õö¶¤:ÑKsÏ-æù×ÌÒ¼Æy ˜ÁaÁkœËðÖå‚t“‰}£ÂFj™#,[­œ]5 -·FY5ŽO\@]KyŸOøÒ&ÎìvŒ•ÈÂ%}¬^zÙ£“Çm ·…ª86ò›ªúRÿwL¤ý¶WÀùC1TÄæ›ëE=t›ÿqø_¼@f9à’Ó½³É¼9<åÇ;}Ä‹}TãðÓxŽª Cn°FAdmK’c]²îÂ8Ô¥ÄöSÅs±É0–•™¿/—îÕ /Ǽ¯>fî½z¿\ÂȘ5—5ËGŸÔ²ž*mÞñiÕ*ÕÐÇ-êÑ’°Ýæ«(Ù.`R4‹‰ÒmYáó Ê -¯ëýÎÕ x£Sþ-öXSOpÛ@Hž´ Ì÷n0˜Ž•0ùbó^;rõ2õA1b¾Ù@´?Øn‚é¶.lÚFžë¥î - Ïuxn¼œn+ LfK_3t.<{Š:"éØ‘äTq“Óv$J÷^ûc×°[H—ÛšÚ+€cïQ˜S‚œû h¡ìL¦áŸÛû¿ü×ÑÇ?oÿ*Æð3¦ì_o┲û£“á!J¸HøˆêÿA¿endstream -endobj -1402 0 obj << -/Type /Page -/Contents 1403 0 R -/Resources 1401 0 R -/MediaBox [0 0 595.2756 841.8898] -/Parent 1368 0 R -/Annots [ 1405 0 R 1406 0 R 1407 0 R 1408 0 R 1409 0 R 1410 0 R 1411 0 R 1412 0 R 1413 0 R 1414 0 R 1415 0 R 1416 0 R ] ->> endobj -1405 0 obj << +1441 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] -/Rect [307.1508 736.7306 375.8228 748.7902] +/Rect [335.4973 330.8795 404.1693 342.9391] /Subtype /Link /A << /S /GoTo /D (zone_transfers) >> >> endobj -1406 0 obj << +1442 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] -/Rect [334.8268 705.6794 403.4988 717.7391] +/Rect [363.1733 300.9501 431.8453 313.0098] /Subtype /Link /A << /S /GoTo /D (zone_transfers) >> >> endobj -1407 0 obj << +1443 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] -/Rect [337.0185 674.6283 405.6905 686.6879] +/Rect [365.365 271.0208 434.037 283.0804] /Subtype /Link /A << /S /GoTo /D (zone_transfers) >> >> endobj -1408 0 obj << +1444 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] -/Rect [364.6945 643.5771 433.3665 655.6367] +/Rect [393.041 241.0914 461.713 253.1511] /Subtype /Link /A << /S /GoTo /D (zone_transfers) >> >> endobj -1409 0 obj << +1445 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] -/Rect [374.6372 612.5259 443.3092 624.5856] +/Rect [402.9837 211.1621 471.6557 223.2217] /Subtype /Link /A << /S /GoTo /D (zone_transfers) >> >> endobj -1410 0 obj << +1446 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] -/Rect [292.0276 581.4748 360.6996 593.5344] +/Rect [320.374 181.2327 389.046 193.2924] /Subtype /Link /A << /S /GoTo /D (zone_transfers) >> >> endobj -1411 0 obj << +1447 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] -/Rect [319.7036 550.4236 388.3756 562.4832] +/Rect [348.05 151.3034 416.722 163.363] /Subtype /Link /A << /S /GoTo /D (zone_transfers) >> >> endobj -1412 0 obj << +1448 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] -/Rect [460.1655 519.3724 533.2211 531.4321] +/Rect [488.512 121.374 561.5676 133.4336] /Subtype /Link /A << /S /GoTo /D (tuning) >> >> endobj -1413 0 obj << +1449 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] -/Rect [362.144 488.3213 430.816 500.3809] +/Rect [390.4905 91.4446 459.1625 103.5043] /Subtype /Link /A << /S /GoTo /D (boolean_options) >> >> endobj -1414 0 obj << +1450 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] -/Rect [293.1435 457.2701 354.3435 469.3297] +/Rect [321.49 61.5153 382.69 73.5749] /Subtype /Link /A << /S /GoTo /D (options) >> >> endobj -1415 0 obj << +1432 0 obj << +/D [1430 0 R /XYZ 85.0394 794.5015 null] +>> endobj +1429 0 obj << +/Font << /F37 779 0 R /F21 690 0 R /F23 714 0 R /F41 910 0 R /F48 925 0 R >> +/ProcSet [ /PDF /Text ] +>> endobj +1453 0 obj << +/Length 3430 +/Filter /FlateDecode +>> +stream +xÚµZÝsã¶÷_áé“ܱP⃠ؾô’ø®NšKês¦ÓIò@K´ÅE*"u>gúÇw € DY¾\27g€øX`¿ýÄÏøÇÏSÍt.òó,W,Mxz¾XŸ%çÐ÷挻1s?húâöì/¯evž³\ }~{Ñ2,1†Ÿß.œi&ØPHf_~÷öõõ›n^]djv{ýÝÛ‹¹H“Ùëë^QíÍÍ«o¿}us1ç&å³/ÿñêûÛ«êÒŽÆ×o¿¢–œŠ#Do®^_Ý\½ýòêâçۯϮn/1¿<‘ÈÈ/g?þœœ/í¯Ï&s“ž?ÂGÂxž‹óõ™J%K•”¾¥>{wö¯@0êµS§ä§RÃR¡4HR0“ˆi!s–qc2Åaù dÁ§„ìG¡×»º¯æë¢ëËí>Çœ§L*¡Îcº«‡QËËhy.€OÇ>Zÿ]Y’Üû•«,Ën±­6}Õ6ÔÐÞãÆö˜É3–e` S\ì-­9ã*ánpÕì3*LÎt¦Ó£Ô¹}8§ÊMÄr‚åCºÄòb`AÎ5ãû[’pZðÿyÑûA'¶q@ wÁðíP˜ÁÊóP‹F=5?Ê’=žŸ’DÔåü¾Ý®‹þq2e"ËÔó›£&v1BœJ˜HM6ÞÆiföv`8K²ô8ð¤ÈÁ @"Fž^‚óCºG—îï …‰$“ÏŸAub'‡Ôøöä;— +\Wp¬R2Î#/ 4S`Û“$™}õÔëjA<ü°Y½;ÄïÛºZTe7q + h¬b¹âÊRtž@ië  èv›M»í;üJgýcKÍE 'Ü}õ¡¤†uÙ¯ÚeG€[>l‹¦¯.ø¬y †E]•MïFÆ ²­V½kki¡M¹EàPã2ð;ËW‡í gÈ 2OSayùµmÊKÀ¢mŽ»í7³rI­wOØeÎ@€N<¨‹ºnç´ú”E¤<š‹f9E1SªIcˆÔ|ƒgó4E1ei.F·V;ÄE·AÌ~(ë§ Î9áN<§ÉÁ +ñŒåRdvöí4‡9ËdúBþ$“—nð¢.vœžL²Ùc»}ßQÕž(Vºbí{‹'ªn (:”z¶!&>TíÎõ|(·ðè¾CX""U¯{*-¬Ü°@CU.+j’h9FD°j¯uÕuAá-Ž ÜEJS4O±´­-—Á +Ž5–c¬UÍž E²ÐÓ§bXžgâå(Q x“ñ¹)gUGeS>ºܘ^Ç¡%§ÑJÄ€›¶&~1Ôž¦œƒä«¦t£A©z;¦­‰p 'H]«¢§Ú ®Hß‘¤R°ó„OÈî \â 9{…Lg]‰ÄR央àDÌlW[ªÐm…VÔ‡ +7Z.­žhØØž2ðcËb±Ñp֖͜:<ºì‚[ê_–MUº¶;®áÞ‚sO 2œ°N$`RBŸQ³»’¾IfK×øDD+[êˆZ+Øb_õ°KXóÙõ= #ˆÁŠ†%h‘ùeWv=uÂƺâÁõVn“]õ@'õŸ’4éWäÕ¾È'U3RUïõaQï–$½$’4(·ï®ß8­rЀK$ð‡Oé ¶_îi™ÀÓX?C·Ý¾#¿(œŠÞ… §ÇCmx#=5–¥‡5ÛpØ IÃtvÌ¡pÉ¢¤h6¥Þ£üJçÄOq§ºãÿmê'j^—ES5÷»š¾ «ØAù€Ž´6RóÙ¿WeCúÉ3.-ÍMèkÓfIúrÎr™úÑ]ƒ×pxˆ-íð–yÿÐAòš§¨hDAŸƒo/\å–,Ó–>‰msìdÃ!:í¹ÖÓ{'EÎWV„ÒÀ1Vˆ1”y–ñÝŠ$xÜ— %Ïò‰}eÂã!“³òc8勤šƒvàà{j+èÓƒ¿ÅÖg´K-JV,—Ž¯ŽTn¦íž„Ç–‹1žhR]~(P“N²r¦Ã—«öqd?"KŽªl]U5óuÛ¾ïþJ"S|/ôÍ™1¤ähp.æÂhë¨ú?*À´¢Ý³5ç0s¯>ŽfÚ$óiŒ‰=4[¿PÛHú 'ª,&ú³Ðo<j¶ž‹…÷.ô=‚K BpŒ(¹­¸ÜdÿŒ‚§tó 6ì0ö¤ËÖ©ŽàTì;s›8ˆ0%`¢µœÈ +4ÌâZ +ú|¬êå¢A»“=ªOfoñV¢v™Ó%ÍëÉÒà6Ƨ2Zä~¯ËE/Ñú£èeBÒïK›å3Õ—TCÇÛBȹJ¥ò©a=ŠÔ߀aë®m_AÅí7Wÿ¡Zùq±*š7Õj;.¾ bâ†>övå‚ÖK:²Ýª©³Ýhé‚s>&©b+‰_6§SÉÐ="«b²nzç&ÀžÃÊ-¡Vt{äN¬F‚WmE‰Ÿ%µƒQ0wAŒÇ³¬D'Œ€—¯E”v‚©p~ +³©®¥§à ˇ¶¯¼½L…»6¡:í +kt1!foÞ½›#¾.éóqUQö"ÀÍöÅ]]uN=Áÿ:‚q,In6KåÛl÷Æ!¼ú¦ÜÞQ®ÔvÔ¥YT›¢¦O”'–a%ܸ¹Äz‘5îž "Ý8«Í˜ÎÃmÊŸ€ÙíßW-yÙ®!©üÓ„[äIÆÒ\û@‘a(äýFì¬tt«–3ûp@žÇ‹ã:ŒË´ò·1ÁÖ áØÖP —C²jT¶—¬RÔ·gh ™ßÉ Åt÷ßrÑ»h´¥Æ¯Þ¾›&ìÇMÑt.àÏa¾›â¼T"tuMÍÅfCÎV‡UìCÀÆÆ tßNÊ–çü†(óᦠ“<¯ƒ!G¯²ëúp+×Þe¸`ÎF!ó_vE=r,’áªÅ]vi8ë̆”Qºö’­ùI[§ /ˆ©øPÔ`‹§bKÙ”JD«M¬„1¾–Ñ Ë 2Šå†{ˆtœ&6-!ü7â)¿–ÃÙrJ-2fD’½”RWÖ÷GYSŸBØ›ÚgFI¹[·åE¡@æFG$‘Í“,<öð ÎÀKXãÏ™R–á]þè9ó·ÍòÁ´ÀAäèh^´\ÕÏ“š¦ðz.Mx“PãKŠ,]¼'̤©~¿YÂr!=è®>‹~ncFLk!E,×xý¿ÀtD›ÄerØl~„(?( —™Ë4±É/¾ï¸îÊÊ>+„kÛå8M$ë´@ï_ñ†Ð­{ŒØ»0:4ÃÕÍ1}ÖlxIãÝÑRš1ÅsptŸw¶ˆ"™@û‡ÀEpàJ¦'à"5Ë•;™ç Õ3>¹çqÏãăûÌ jîèx¸lçx >ód *ìŽæS(ÜJ{9¾…<Ðåg ˆÃ%ÒßAÑÑü^’)3:ý’~ÆQq“²ô¤½ÁËQ©òSîi?“Ú +»Uü”²Bl™©|ßÍKMé–!V“šb5l´±VƱ¶Ä±šÌ³iÏÁáä|ìޔ݈ȪØ*áÍ¡>û8ÒaöãÂ¥Orÿy”"<^*g2ÃÆ\žÇ¬‡ctΟF2m´ø’~Æq4&Q¤üy–A¸˜«çbœ)SrŽ“çz8Nìyt©Kæs(í ›Üqbc8NlQpÆeߊ –H +z&ÃrÚaPÃyö‚žƒÅÊå¾5š§RQ<À9dIò¤âqy¨w‚žšlùи·­å¥»;†üË å‚ïvV7!_[µ;RÞÔ¾éHíãì$uÐ)Ýècy#þ"&MMú"Á(”ü¾`tªÁŒƒ]@_2ÜÎOã "3θÀ_í?Ò5µ™·ë¶ë©2iû¼Û N¯Î>à˜`*ì;¶¹ÛšÇ(a^ú£é3þ-÷ß-–ý½«ôX!²0šnœâ.wFF´ãAFÊyz©íUFKÕ;×´Û@›ÕF¿)8’ùqÁ®žÏZÑL»‰0eÄ+3ªŽ¯> endobj +1455 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] -/Rect [288.6803 426.2189 357.3523 438.2786] +/Rect [288.6803 737.8938 357.3523 749.9535] /Subtype /Link /A << /S /GoTo /D (boolean_options) >> >> endobj -1416 0 obj << +1456 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] -/Rect [328.5503 395.1678 402.2036 407.2274] +/Rect [328.5503 708.0059 402.2036 720.0656] /Subtype /Link /A << /S /GoTo /D (tuning) >> >> endobj -1404 0 obj << -/D [1402 0 R /XYZ 56.6929 794.5015 null] +1454 0 obj << +/D [1452 0 R /XYZ 56.6929 794.5015 null] >> endobj -470 0 obj << -/D [1402 0 R /XYZ 56.6929 378.2509 null] +474 0 obj << +/D [1452 0 R /XYZ 56.6929 693.8168 null] >> endobj -1051 0 obj << -/D [1402 0 R /XYZ 56.6929 351.7602 null] +1091 0 obj << +/D [1452 0 R /XYZ 56.6929 669.0349 null] >> endobj -1401 0 obj << -/Font << /F37 747 0 R /F21 658 0 R /F23 682 0 R /F39 863 0 R >> +1457 0 obj << +/D [1452 0 R /XYZ 56.6929 281.5778 null] +>> endobj +1458 0 obj << +/D [1452 0 R /XYZ 56.6929 269.6226 null] +>> endobj +1451 0 obj << +/Font << /F37 779 0 R /F21 690 0 R /F23 714 0 R /F41 910 0 R /F48 925 0 R /F53 1002 0 R >> /ProcSet [ /PDF /Text ] >> endobj -1419 0 obj << -/Length 3262 +1461 0 obj << +/Length 2933 /Filter /FlateDecode >> stream -xÚÅZÝsÛ6÷_¡é“|c±ÄI°O—¦Nšöƹ³Ýéôë’`‹WJTD*Žï¯¿]ì"%ÊrßÜxÆÀXü°_€Åð'F&‰b•ëQ–ë(‰E2š-ÏâÑ=Ô½=ÜfâMº­¾½=ûúÊFy”§2ÝÞux™(6FŒnç¿_ÿꟷ—×ç™Äã4:Ÿ$i<þöÝÕwDÉéçõû«7ïÞþtýê<ÓãÛw﯈|}ùæòúòêõåùD(H` ˜Å¯ï¯.©Ñ›wÿ¸<ÿãö‡³ËÛ0åî²D¬p¾Î~û#Íau?œÅ‘ÊM2z€8y.GË3¨(ÑJyJuvsö¯À°S뺉)Q&JŒÌä$Õœ’ -ú¹Û‚bž|Øíw"œP™4¹Ûš¶;“5Y”+iž=uäÑ>®íçMÝéQgÎéçcQ:þ†˜¨¼kéD¤”–ÑF’*ÊE¬¹ÑÅå&LÐÃb˜´ŠÀù§Xù±jó¡“‘EŽô³'e«»Xpå MGDF+VVóŽRƒÌMÖa‰Ë<¹Ähß…*‹t’éQš¤Øró'Jieq¶çDýµ^~"p$½΀úÅÀ‹‹ÔCí±š„EMÀñŠ„&žäÊv…(´ŠŒRÉ()¥FʧœÅQ.•GÝå§bÖN–E‹¶@e -¶`Y Y 3I SçcaMPZøázX®y Ÿœa²Á@òƒï¯©-W÷ò“ø”–|HI=ÍЂá§SƒIìí1©hÁ­oÇÕ‡ÚCÂÀ2ÕæÄN#‹¾æ8€—/8KS9ênÄ—m.ÂHAàáñ¢^/±‰¤‚eÀ 0Ê2aNªª>h2CøA˜Àïð>9” -DbìÙôãf4²t;ÃRß±~qÎü‚.¾BÂ@p¨¥~Quöæ¥ ¤’ȤIò,}£J2©T§' ”ä90‚àñ„‰ÚGÐà…ùj‘6¸˜Y²oéUJA þM¥ä±!ÑylXè{lH±wMå™·T£ hÓü}÷›bÙQˆº«µô -QK”H?¶dð#1€¿ÛBrñÈôÁ)Yi†‰BÙºK=ŽÇîFxvx4 -ìð~>Kßã(!xŽÒÌœ2I -g%OŸòs†”™€}û)Àgû‰5Ád>”Jy·Äû‰Ä°ŸHïq`õ²owºHIMñ¯ÔGtøÍ`ѲgøñtV®öõÑ$QòÈÁ C°¤N<¡òƒƒó-yþåýªæì%`é:2ȹáéÖNÛõ–No‚iøõ.VÒyHJ¤ÇÂG0ÇQ’˜äY‚Ñ(ù}Á¤‰Þ ¦ïðB‡äž&^!EÚßÛ®À¹c¯4–uÓjœú -L_UÕ¬ °MÐõŠ9qRDŽ×ü`ŠõˆÑ¤ûŒbX‚våŠCÑq›ˆ-´¦ÄS·Šw¨ïn£-Ŷ^¥.£QSqʤíhî¤`*&NEBF± ˆ§#WÔÓ'¦Ü€˜9£â.CàêvIÞ~çidâ72Ê´"£ö·Á-Or34è%Ó±$H%qác㦵›²ùÓ%É3Yyýì½ÝYÑØ㊹«ñ¾L‹þO}Mj˜¯9åkjƒÄ¹9;zšiÜõ4ó±'6岬Š íšD¹ -1ö±Àü·]ÖÊ~šÙuK´œ‹ËwÞ1]ß Œ&„Aù®¾ #3 Èá4dLf*=•Î¼lXò¢a¬Um’,;ˆáUž'§rCXQq×1‹Ù™‚߀üÆ -øúI¢Ob%‡ÅîaÅñtXÁR½ªyÐj\Íj&Bê(ÏÕ×ãO€53ÏGJg ^ -)»[¦ÿGÆE€c¤2ÑD„¤2Ý뮃k/07‘‘98õÌ‹P‰~úÚ É2–äP¾ '´Ú)ðæâ©25€i!??€ÜO¼:v÷ø‰WÐ…pZBâ•LÖ»;²+g£ÁQ¥!Ráý¤C¬Q•³²u ê¾=Åõ«p§:Ž46Üe †‡^&Ûé[ __óå Яn.ˆxóþ“02s¤«›Ë×ÑnÏóxì¸ øBËâÑg8¥Ðsðà<î’œ…XͪíÝèRDtÍwU·Ö_†:S…÷¨”zÁ×_°¶­]®Ûþ]鲘ó©Ë²A³¹­lË4Z -3rìç 3lšzVrâÆ]ݶ‹Î%¯ âÔ¹¿x5ž£k(*ZØÙŸ~ƒî|bÇ$0Œ{˦ yÄþù,‚ü#>h !t¤4è>8i0(@™*òCÀÎ@|ÇñøWç_»ú²²»®~Z®«ŠÁ!¡k$¸óƒ½@üÚ6õv3³þ æ8ovÙpWø™ód»\çO w¯x9 ,0à öB Ý5{è¢àÕÓ¬åD†IÇÉøÞ:s-¦õ†î \Ò!1ã;ú^Rýõ›×Du¯™ÉÜ6³M9u©„¯Ñ±-„®lûºdGbAŸ´pä<ãÖ× Âx†®¯É7v9粇Ô:l=Eˆ’„b, ­ä:¼‹Å+vˆµoà[¢Òl¡Ãz;­ð®Ø%K°ÆÍ~iÉPðK– çˆH_Ùbq}ÍC-ŠÌ~jý„(8aÅ2°°ßår]Ù%4™ïÕ^Ö滫›(Àca§‹{"©*¶÷°=œ(€¨à§-¯±ÃÐ< ¶W¨uL00Xæ0κ2h¨®à&õܺçj|IÇD*QÀ¹kÞ¸ÇÀÐíQìUPR@-Wwø&Äã]†ëv¬tŠ Snú½:uÑ5 zŒ †LJ »Á9nïhDü&èjèg]lÚr¶%T‹îáÍĬ^®ëÆ3ðã7zò# ÄLHòv8£Ä§ÌnÈ>s/ÊÎë÷,¤e:ׯj&àË·™`ž˜ä@ìYÿ -%4Ÿòó“5ËËn>ú§'S~=ã‘‚š -j7Í¥¼„«­öóoÃY'êÒ˜_øø8Hà¤ïAÓ¡MÍ´»†Ù¸©7l::=;·ì@u²’,$¬ífY¶tbá“,NnÝBPñÿ:[n7¸… ZÚOžû‹!èy½ßsð|à\½.|œ_g‹Í”“8û@»)½†ÁMܸH¸7ÖîJƒ'œŠ ¬„‘ -âWp‰©rs?¢Âuׇöí'݇>ô!_\ïµ!gFØüðƒ€E@0.WoNÞ|hub&Æ5-ú3a£ÓV%`âãä¹¢íOMà€ïQQèý9%q)Œ!žEhub&‡ÜÂ…:,GÊHæàá<Îà«3ÐP«Ã˳¢ëïx5 KÇ/c3öÍÑë{#¢T‹¿JîÄ!#ëÐ ÖØ I,ÎÝ¿·Ü½9Õ \cä‘óàcOòBÙfÙÁvû‡™Üª3õÿ20šúendstream +xÚÝ]sÛÆñ]¿‚ÔŒy¹/|\ß[J”ÉÈ)ÅL§Mò‘G S` вûë»{»‚)&µ=éÔ‡½½»½ýÞÕHÂ_5Ê!³£ÌY‘H•Œæ« 9z„¹ï.ãL"Òdˆõíì⛓œp©NG³å`¯\È—Õ™óÍ w 2)œ6H"ΞÊörb¤o.óñ¶òôm¹*«bC/]CÛíOËÛá¹GÎÔ)ÜÑ9Fòç~ÝñžOšºúćnͪ(k&¢Y9w¢´.C–+%\’è3€ˆøüyQ“úÀà8„4eC´4W0J³ð(›ÜŒ¯Ip ¤ÑS±ÞúŽ6 2’Ñí©@Ë\êˆú®uô©8?ýߧK¥ÔX“Ï,(ŠU|8 Âáð +/ Hld©JF^;N“ˆ…mùXaBxbPPâ€äýâøìÆkæ—ß|8ŠBlÀeMAO³›6ˆÍö®°&Òf±9&0d'úRIÎGËhÀ ïÁÓaL…z £‘ÊÆm³áÐ1X¹ÚV]¹®xyà•fž `í7«²#‹…WŠHHܺƒ¢â߬s»A¶|Xé?h÷oŽÝ$úý½£ù.ÕªOÈë|±y`dbç~!ÐmÊèaPˆ›¶${ï‹cµP©ÊF3ÃÔ¥˜ÓäæqDƒé0‡Žø“á‚—9ôË}ñ¾÷~Î µ4¢e^, +ŠAH¹öhzY¬F¬3”X8Ü´Ú§„ƒÎÞ±&åÑïdEŽ€ûžd…=¤)‘™0XC¼ÊŠë %/wCJ¸D°Z íT¾_#Ìbh +ª/èÃ|'ºÉ>° ò2c9¼bß"0¹yF5ÜŸQLló÷ÈqÅɾ”§PBç'$Ò÷=L–ŠD²[hžëhÓä8u¹M/ŠÃFÏè-w‰BŸSL¹uU¶1©ÞÖ¯4 †ô~vM‚ØEø‚í$c27çØšZ‘$’â#V—“Ô¦Éø +ÙçÒ±¯ç‹ †ºd¬ÒÉCÙÑć¢Úz²?„]ÙÆ©ˆ¶Fœ`Ã)Ê$Yn(Zï7{ g¿¨yER|©vŽÍÀ§ÊìlWœ–6óì¬@m–Ç^gö#*q’•>~–+?x©Æ“ªüÀÀÀì,2;K@ÙA¨4BЮ§à,èÕh–8€JÈ˃Ù!^}Z^ۺ츷g âª!ôÛXà86EÖ›rUlJêŸd¡^¡ÑçØ5¤A +Ï‘$®Š‹RìÌõӘBÌe~(°ƒ"_ŸšgÈqÕ„T( Y*m÷­ip¼Ž¿l†N§Œ «§f[-ö³’EÙÎ ÎP_Óêº|ž +~Uÿ£³LÀ¿sþG;-rîÌ+(@­µìÜÐÿäÿãvþ'ïý;¨²p®  ʼ›®™7A–Å +õíˆ÷µW‘mWÔÑõõᶧ%6dÅ—òC_Cb‰&ÍÎ ,Í…“9¹¡é;úœƒÿ]aƒ!µ\-æúXqÐEÑ`Šîí0©\¤q(ÊrÅÝ ^@£P†Á“b Ž°S»#'BÇÊ£cäÐ4Œ+}UʸW„·ãÊÿÝ'LÈlÿK×+Ÿ´NDî^ÿ NxŸéýÌxÙTUóÜ÷$ÍÍonŒnƒC¼–}6r¬íüM´J+Z$øƒrºöt­ÀádΪ?1‰þ +¶«ðSJN¥Á+Æ« ‚°:Ib¿*ÍlúVÚ@Üï)8* ¶ÝÐOÑ.|ÛÁ2JÜÞÑ3Ôj¿Ð7„ÒÓ†> +¼Æ$",üéÈh¾™=â„ßqh>h†¾$€'ÉiÓ2åKÙîW(€T’ +§Ï@*•"Qì×®àø[«4pôCʆµ'7ìgœå_ž§¯ðo@Ø—ªt@^yšü‘/¬qÅiþi%djÔ9þ ôWÀ°TƒêŸæŠ rø¹÷!YíµŠêÅ»/aŒØn—8…‘æã.úpÛ[á—¨#@‚.ëEÉõ÷S“ð…žžô½AÇîa¢‡E®IÔƒiëè>I 6Ø£H}w¼‹Ê]Ìám€•Ä$&Á“ËèЩ¼þ¸öâCrVT ª¦MI5áIª ?N«æ@柧G_5¥r™‹=ë••©³ì•oîß} ¦­s9þ±‰_e áHgƒ˜=ôÄƾ1²W«ÐŽã¯hÛ¡ƒPV”ÂàzÿÃþ¨UîlyCÐÎ-{ן 4L£ÆWûV-÷”Ÿ UÙ·™¾óÀP•ŸtÂFéWx< þKùà¯ÀãÌmµ=Ãã,ä’ô£±ëéeø rü}Sõ_c5üXvѹÎý¦ãï-?Û€Õ‘³`$ù+¿öÙÑüyl°RŠ ê"ìeŠ\:{¬-GgÙþ{©¶ûµö&?õ+>uχ{!Û³ìEX”äºÇþë¾z^endstream endobj -1418 0 obj << +1460 0 obj << /Type /Page -/Contents 1419 0 R -/Resources 1417 0 R +/Contents 1461 0 R +/Resources 1459 0 R /MediaBox [0 0 595.2756 841.8898] -/Parent 1368 0 R -/Annots [ 1425 0 R 1426 0 R ] +/Parent 1416 0 R +/Annots [ 1465 0 R 1466 0 R ] >> endobj -1425 0 obj << +1465 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] -/Rect [341.1654 110.9312 414.8187 122.9908] +/Rect [341.1654 414.164 414.8187 426.2236] /Subtype /Link /A << /S /GoTo /D (the_sortlist_statement) >> >> endobj -1426 0 obj << +1466 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] -/Rect [434.6742 110.9312 508.3275 122.9908] +/Rect [434.6742 414.164 508.3275 426.2236] /Subtype /Link /A << /S /GoTo /D (rrset_ordering) >> >> endobj -1420 0 obj << -/D [1418 0 R /XYZ 85.0394 794.5015 null] +1462 0 obj << +/D [1460 0 R /XYZ 85.0394 794.5015 null] >> endobj -1421 0 obj << -/D [1418 0 R /XYZ 85.0394 668.4044 null] +478 0 obj << +/D [1460 0 R /XYZ 85.0394 624.4743 null] >> endobj -1422 0 obj << -/D [1418 0 R /XYZ 85.0394 656.4493 null] +1463 0 obj << +/D [1460 0 R /XYZ 85.0394 592.3687 null] >> endobj -474 0 obj << -/D [1418 0 R /XYZ 85.0394 321.2415 null] +482 0 obj << +/D [1460 0 R /XYZ 85.0394 592.3687 null] >> endobj -1423 0 obj << -/D [1418 0 R /XYZ 85.0394 289.1359 null] +939 0 obj << +/D [1460 0 R /XYZ 85.0394 562.5129 null] >> endobj -478 0 obj << -/D [1418 0 R /XYZ 85.0394 289.1359 null] +486 0 obj << +/D [1460 0 R /XYZ 85.0394 505.855 null] >> endobj -899 0 obj << -/D [1418 0 R /XYZ 85.0394 259.2801 null] +1464 0 obj << +/D [1460 0 R /XYZ 85.0394 483.5438 null] >> endobj -482 0 obj << -/D [1418 0 R /XYZ 85.0394 202.6222 null] +1467 0 obj << +/D [1460 0 R /XYZ 85.0394 397.2275 null] >> endobj -1424 0 obj << -/D [1418 0 R /XYZ 85.0394 180.311 null] +1468 0 obj << +/D [1460 0 R /XYZ 85.0394 385.2723 null] >> endobj -1427 0 obj << -/D [1418 0 R /XYZ 85.0394 93.9947 null] +1469 0 obj << +/D [1460 0 R /XYZ 85.0394 205.1478 null] >> endobj -1428 0 obj << -/D [1418 0 R /XYZ 85.0394 82.0395 null] +1470 0 obj << +/D [1460 0 R /XYZ 85.0394 193.1926 null] >> endobj -1417 0 obj << -/Font << /F37 747 0 R /F23 682 0 R /F48 885 0 R /F53 962 0 R /F39 863 0 R /F21 658 0 R >> +1459 0 obj << +/Font << /F37 779 0 R /F41 910 0 R /F23 714 0 R /F53 1002 0 R /F21 690 0 R /F39 873 0 R >> /ProcSet [ /PDF /Text ] >> endobj -1431 0 obj << -/Length 3073 +1473 0 obj << +/Length 2887 /Filter /FlateDecode >> stream -xÚÍ]sÛ6òÝ¿BôL„âàÝ“ëØ©ÛÔñÉÊÌݵ} %:æT}"e'ýõ·‹)ʱÈä,ϹËå÷{°qøWŒŒe6•éÈ¥š.Ìhv{ÀGŸàÝ»iÆ Ñ¸Kõãôà‡SåF)K­´£éug-ϸ÷b4ÿ–X¦Ø!¬À“8?9KÓӳ÷ ¥LŽ:º˜žLè…¤?ž¿%LJÃñ‡óÓ³w'G‡N'ӳ焞œœžLNÎOÿ˜þ|p2m·Üý,Áî÷?¿ýÁGsøºŸ8S©7£xàL¤©Ýh£˜ÑJ5˜ÅÁåÁ?Ú;oÃԧؤ¹`B5+Í<üþ·ü¬Òž9îvü,…`©1=kÑ<kE°™±½ÔXð” øˆQ;f­¥êˆQôw#g“$Œb,–ùŠ˜¾Ìns€|ê’éMN¸yy›Ë­÷=ÜÀá“øX7Ô“(ñº\/çì± µqL‹6ÒÙîóX€ÌV š£±T,íUŒ¯–lfìæ*P8kýWUŠ[0«õ—;`‰ÕÖ$GȽÔ&ùrVÎó9>˜DØñUQÓ‹ûl±Î ¬o²šª»|Vüι̫æUC–FšòúÑ+’Éù=òŠÕªn«*×fåEfeûÕáÀó¸ºÈÞKî¾cÉfÆNAYgXªíúÿA™N߃œLÊ£Ê;`gq›ëòP$ãEq‘×®áµ3 êŒ0Ó› í€ -âZÌ Ý 3zT2 -PŲÎ?£Cºånq­—EË(G¿cÒZΫ7ð¤y’-ç„."Ùݪ¸ÍVÅâ =®«<\E I¼*÷ù*Îc¦=´>‰<|*N²"™e³ðÙN&|·Ò2ò P…Ìój¶*®‚ÆÂãMù€Oåò¡²f‘fÝ%WùöèóÃÏÎIS¯òë²ër/a¬nÊõ¢¥‰>«¨f©tÞ£Ô]myž¾¨÷±F2®Ì€÷±Ö1ãyŸÙ"«@ViÝOÚu?¾ã~Òûñ­ûI“bž/ëŽÿñAtðâ.ðµ¬ËY¹ Ìuv‹ú¶S‰Ë]ŠeUgËÆó}†1£¡»lÄ:¬Ø—"½W‰I邘V ¤FLš¼¥ÿwt8Ö©Õd`ÊËÖf7¾±ó¬ÎÀ7J°‘[!ÂÈaåy¬fAè-p¤P‚ÐïÜpt&=‘ã6GÇ{Ð0˜$¢6ÑjÖ#¼Wö%¼MÎö¿ecÏËá„…ˆ¡”È1ǯ’Hé<È]_-çÌj¿C?š ×xÉ TY -SM†u].åC*šOô‰ÀôNu7g÷¸e;o󑊨¶~ 8l¤°‘ª1Jp żÉ調=i«éŽ•þOà/b¾ SKÙo¾Æ=Èùk¶8*© ðU5AÙ|£¦‘ir¶¤7d•œÓ,ê †V4Ù`¡€¥Q£›ÄÇ&‹/žø ´_§Ÿ°ß·16ÏgÅ{zLpÄì¶Ý.Köe»Mª±ÇòÇ(Á¬* |©t±ü9‚Àßj!¡÷6ZÕ–Ø”àÃìóÞö°¯³¯}Õ9ðÞóK63v²O§@Þ Ÿ} Y%bs³T7óD“!cØÈ–ÝTM´á?[ÕE¶øj" -Á)šõ5¾ÂPóy~( Æå–»- X΋XïÔE‰fh –q æÕ¸uj\eĆ"î­¦§e» lí¸{|ûD†MYOÞý`%1 €À$c=VßåãCv–-"ª«›Ú’nÂHº €ôÀºÙúóéEs*í€oB 8eøi£H5O/ßþ¦-=OÞ—³Œ„.ŠaN#!03ºÊªœÐU¾Ââ¹+ÅW Ô†á=ÊöØAH«v ¡óu¯Ø¿jˆy©ª¯µÅŽšŒþõŠC09Ú6k¾¥ý„YUîc¶o|0Ôå;Ý°²ËíïË ¿@OÃâœÔÏe#˜ñ±à;>™B%? •O~*ój«¾šŸŠºq°³|EµE>à€Û sÁR|s;»~Ž<-5ã)ˆqZ¥ÌBrEÌ=?úõ¸d5¤oÛu1TkmCÜv¹,fÉ€ÍRÛt€ n;B‹" ÞÅë-¶IIP¡wú–þT­û¯¸U§œeÒ¦CJ£“1ƒb0À¶I~·ÈfÔšpI JJ-P·éWEЦ›:'ÄCQßR«oB3nk$;€qY¥2Y”埸 JU²¾{bM’‡å“ŒûûpHDŠ¶ð´¤9¨JmŠøj}UÓsN!¹H)¹x"}h¿•«fçÂ×]š,€\eñÓ8êiI³HûY4„[}`zŸUôŽ~¡Qt@Ì0R>Ñ®kªÇö4 •‘Œ€¡DZZ'w+wWk^qËÒ>¦L:àdTÏ)*j÷å/'ÿq«”'—uìu¢Àëd4Ü­¯ÅŒà?Co|U•³ùœ^DÍÞ̪ŠOˆÝð+„ü«\n<ÿx·ª÷ KsÕ“Yv¹ðŠ»uJz¦u:Y*¨€Ó”ìîí%=ÒlÉI¤ÑDDj’›¬º!ÇŒ("*ˆ0¼ëˆ‰H„í,ÓŠaáNqm‰õY²ë0e¿ é^S%%,Óé@£UIθçÔH{wñ¤§=ÔE—[Gl]ÇõiQ^5ÉÒ]YX:D¶^®ïr7«*Ÿ·GÑß8îa(íôŽ:÷j 2•U*7ÀQZ¹”{þtv~úX*¼|œ y -ÀñÅG¨X«AA "R‰xH%謱Æè¡«Íð&h3>#Oê~é~½Ó^C‰´žY§T\zͤˆiÁÙåÛs¨¹¸q˜'E……UÀFR×Â`‘HåVÛ"ÇäŠQÿ¸ ¸áB|C¸è¯»_º/¼@“L*É£^Ô6æžÑDºp;¡É$N5@}'ßñŠ·–MôÐþp3ˆÉhÀ3¡Œp²¥áªêê+Bf\¥¬ È?Uýx½'‚ö¥°uo)[G ómðô@ßÞ Å‘n,èÚKNß)h ”––¦1ljüT‡º½6Õ$·Ïî“u4ãyʦ!‰tPƒ&siÍ“ˆÀGƒü[ÿìaó§°!åý/­) ظrÑù¯þ(Cp&•• UgëÿŸ?€pendstream -endobj -1430 0 obj << -/Type /Page -/Contents 1431 0 R -/Resources 1429 0 R -/MediaBox [0 0 595.2756 841.8898] -/Parent 1368 0 R ->> endobj -1432 0 obj << -/D [1430 0 R /XYZ 56.6929 794.5015 null] ->> endobj -1433 0 obj << -/D [1430 0 R /XYZ 56.6929 579.9063 null] ->> endobj -1434 0 obj << -/D [1430 0 R /XYZ 56.6929 567.9511 null] ->> endobj -1429 0 obj << -/Font << /F37 747 0 R /F23 682 0 R /F47 879 0 R >> -/ProcSet [ /PDF /Text ] ->> endobj -1437 0 obj << -/Length 3183 -/Filter /FlateDecode ->> -stream -xÚÍZ[wÛ6~÷¯Ð[és,”¸äöÉuìÆÝÔÉÊê6g›>Pmq#‰ª@Ùq~ýÎ`ŠRtIçlŽÏ1C—¹á›x/†?ÞK5‹e¦z&SLÇ\÷ŠÙIÜ»‡w?pߧ:õ»½~ž|%M/cY"’Þð®3VÊâ4å½áø÷èâåù›áåà´/t%ì´¯“8úñúæq2z\¼¾¹ºþé×Áù©QÑðúõ ±—W—ƒË›‹ËÓ>—J @ú!þóúæ’:]]¿º<ýcøóÉå°]rw[<–¸Þ?O~ÿ#îaw?ŸÄLf©î=B#f<ËDov¢´dZI8Ó“Û“µvÞºOw‰IÅœq¡%,aÂ$zÿ´4E ÓzRgÌnÍ -»6Liƒ¢S&ÄZòBv$Ï•d©”ºg`œDÂ;ýÍÛ!ÈJqýjËñi_¥YTÍñ™F/nno//ˆ×Ôô´e±Zžò4*§O¡÷¸*ò¦ôý&yCÔ``‰x¬š QùuÐ3ŠeZãÊ9Â-¤~œ—Kè&x4Ïg8š´àäô(Êe“O´½8ôjÊåC>%þ¸ö£Ô å‡Ê6Ûãá:âÍ|¬ç0 Ô ¬sLÄzoØzt{Cj0 gó´(-’&ÊI*Ä_PÖsÿÁ]½ CÓÓ-ª¿¹ r†j~6›)·A0d¥„× 2q"“Q½¬î«9©¨As/¦y>=ÑóÆ©Ó³C4̨²0­äqô¢´Å²¹aÀ‰ÜÜèqWD€k¶íV -üÊ$‰èu¬ñË \ª”I½¾,;誟 ¾Øë3Iª˜äÊqš$ËXªåäôf8À#³è¥T´¨ R]Ÿ9Xà$0ù²!ª¾óÝ&%ãzæŒi2j¤ìô‡q ”ý¢ìïr²—Ã*‚½PQwó_&Ðm©gÕQ3+yLGF³L%$–7oOû hôÆùCýPÑUEj¢Y¾X€—ùÖ¨lËrN ’©D¸X€Ä[XBìyã±wp[Z¶?¦õžÈÊéìúy•ó¼$¦2uL7ZÀi ¾r¼qºÑõã,oªEcDž‹rië¹¥†—õÕhZÓETa$ùrÈ0t]~€!ð»þ~õT3ˆÏùô3ƒçé!e­¥ð-ëŠ ¦Sy4؉A -»Áàöú'8† ÞEõ`w°óõqMÙê~ž7«p"kœ79ˆ—DZîÊ_ÈN¾{5¤b©ȼ³›ç:DË4ÑåÐ -_ìº6 3<Ç„+&¸êƒSi¢!zI -&X¯š²ßL(­îM ©£¢¤HLjÛX" ‹!…˜Ÿ¹^ùC:••ÿ Ø~UŒ+RlPJ"ª—DyäƒMÅÑÂi½|ï_mÊ~\ Ë`µqâ Ú’G£UClSM§Ôg…+Úad× nõ]¬ãþñ£Û®ñ)QtŠ#+“ü€ÕtÔñ\Vóðæ q i)˜J òöõ9&z7®Çà{Õ»8¾>Bmã`ª;‰ïè™SJŽ6^¬š XMótÊ9ܱ»ä±OåóƒAþ0Díîõ>YU&ß‹ñR"màÄrœjý3‰DmB!™ÈÕÎO’4z,›õ~ŽAÚ‘m Å†…¸*\. --t”Ž‡ÚýÉÃoÿ¼õ…Îq¯šTì×TGÏ¥¨`&Ÿ?døb¿¢RÎb“¤G4~Ã’Dº"I¡kxš ÈÝ’‡?k÷nÖ|ØÞ»ëû²=]{׆ñ$9VkRF0§"ˆ1û†±k¡ƒ±#ù8©Š ’‰·{dz»G²µ{ììþì@~¼ÂáÜ!à…Û_†oN¹È¢3j{œ„=è2r¤íj±¨—MPîËÊ6õ -Ä.{UØ‘Í·²¤dB'Çb–‚5˜ÌdN˜o…Fì¡!S.;E®¶RIå x¾eØ©u ‚Æ6"4q¶…ÿv6}vwû\JY×yŽñ›­Âñßû*,„'“”G,„ŒÍ‚ó'…g',™Á4ˆÄd{ôªâ25,U¾à5td|WO§õ#f çï¯T·´Ÿ(Xeª`:ü¤˜æ¨bê·1ƒÈ˜°êçàDKmM˜µ(wFXï¥Öb£X-©9o°"¬‡|ZmI6XôÛ6ÒºH“%`ôÿ/v°ï3žx2‰™GóO™øZ jåúrO¬S·š¿Æ'¸ò~ëÎó\'×WH¹¤PÐãhÊ%µ`Rû”ëâ%b!|]LòÚ‚ÎÖà Ú«s¼‹àE!±nꢞ§ðÉq㺆^ür=$†3Q`‰1«Æ}ž™øPeq¯/a—”>êbÀª\ˆI{dQ{±Z.j[â tɲiÀáEÜwvWr6ZUӦߞ”p—ËàwÝÂ00°þ¼-Ù=;£À ³®ì è8`, Ÿ3,sìˆ"†3#¹ï{À(;Úþ†ë"MY–™£>Ê]•‘¤ÿÐTÂÁ‚^– ¨1 -7Uî‚ pú–L›"Pc\>”ÓzAyZJDÆåw–H_6ÿ/|öšá9í« -Z¤Ñ5f+xɆYˆ6‰w#;Yß’¹Û¸nÊïCÊïòeU¯üHöÉî,5åÌ XÜå¶5±OA¬fÞÞûJÚ"0Kwc·Š¶¦'Xá^ëjî¹ ì[Á²ÕXòÏÄ )gZÆBÀ.µÒk\!! -ùÛ_$ýÖ¦¬y×”sÏš-¦UQ5®’”FËÜß° ‡â}'´*WÅF`¢‚ï—±å¯ãÜàás?ë`Àˆ¸ªýÈ処-ýœ³|þ´ËiÝè‚Ýõ’¦Ëéy>u‘^ââˆjÈJêç¢-p'¹ÇB‡4Z¡ŒgÛü÷ÿigf¼4<£bq¥¢bBÉLªéNy°kòŽózì°¸âÊidÇÍ0­³"ª8+îîÀ…N”–Xk`¦BQ ¬4}p‘zOÊ|ì ÷BÇxƒŽ V’£§‡ÃWX— ~>#ÄÏ+?SwA¶q÷ëØ&¡@‡3FZ^‹¡Ü¯° †–ï‘vì“ì}7xA¿5Áç~=ù"n­±[s^–©pÛ¾ÛrG%IYHrXXž€ƒNÅYÇ_`5³2'M`ÑÍ™° 7ÊÀéÇù¦cj8w‚·¹ï]Í|÷i5«bºH ÏIýèßÕ4 ,Èq¿}€v‘û¾#?ÌûráG©æ3y1Á«l€Ö°ƒ° šu‡Ƶ«cÿiÀ‰ ôä¹³Y¾üÇÇCI¯ð ŠàQÇx¼Æ¿óƒçSë‡BIŒ‰ çXŠC‘ÞŽÂÄ$Ý Ã;¯Ê‰W5†¦°v´È›£Q2å–†ù/Øå0ðHo™Wú°ÅB¾[œÿ>Û1ò1Ä9pƒ.Ve>:à§õ8)Ûãw=Œ r–¿h(5_ùmRm;Š¯ª€ðÑ RŽ«¶D9“@bTÒӣɔԆO\ð¬úX† -”Ÿƒ.YˆXä¨ðøHË­Ûiˆð {Râ~2ŽŒÜk -²Á¦*}Oç‘ð éÌÎ P.0™¨ØÕý}i=2!ï'ª´¾šõ'õjêÏÈ¿&€#Â!#"ŸÐÒÙ%ü!„÷¥O~Òc÷ˆ”„á±·|ŒJ`×þÛœíç÷;c9¬ÈüªPÞ ìs<ÛT&˼%ñÉG$ÓñŠ.~€؉֚yœ×Æ/¦ó2ëX¶ªyÊ‹'bWKz“*wX{¶×Œ†ô#ä]6”‹FyñÞwó¨® -‘•—‡|ºú¤Ö±ÃiòÍøÌ;e’$ö…ewá4ÆÆ™B, ›`zâ ìçŽê„â2Š|¹¬(‹ô¨6¡‚%¾«g#ô[? -oGAîòÉOÓ,ý¯^’ ´¤SëLè‡w–í²¶ Ð-ºî;J2>4þ¹êÔdV­" '„ò¿›²Ho*Çÿt*`ûýÕ¶ïg€²•r¶1kÜ;z¯ð¹?ù\ÿìU&Ó}E–$ûE¡HM¶½rx;fÇÒÿEkøendstream +xÚÍ[YsÛ8~÷¯Ð#]cqµOÇÎxÛ+)»Ù™Z¢mVQ#Rñdýv£A™ÒX’§$o¹Re6€&ôù5Àˆ‡¢g,³A†ž š.Loôåˆ÷îaìÑH<'-ÓI—ë»áÑß.”무½á]g.ϸ÷¢7ÿ’Y¦Ø1ÌÀ³ÿ\_ŸHó‹ËŸ€J™}z3<ïÓ€M¬ß]^½§ž@³ë«‹Ëû§ÇNgÃËë+êîŸ_œ÷ϯÎÎþpt>\.¹»-Á®÷÷£_~ã½1ìî‡#ÎTð¦÷ ÎD²÷åHÅŒVªí™ Žþ±œ°3_}NLš &¤Q 0δ›•~ï&R*p«?z"x`þ€äµf<ð'ÉKÕ‘¼†iïzÎf ¡äÏ®N1+«Cv9.¦Mù+粨At Äæ¡@Âd£|ZMËQ>¡þiþ% TwÔ“O©Oʼ)¯³÷E=š—·Å˜XÊÄÒ¿8CMôœfÁ Dàz`†­+J¢ +°ôÎ÷šÒž)°?Pˆc^r÷¦lßب,“6øz€:)BÜ÷û¤rë³I>Š:.kŽEÕô¸ú’G1tT=+F¤¶1u<–ÍQ 6Ðá|ý¦Ú¬[àQAf“ªúŒª ²ÅìÝñ‰–>+ÏîŠQS~-&߈3꼜ާ֔ÞA[š#wš¯^Ü6Ô.ˆMÐÈp5¼]Å„å^¹jWÎ5ì$Có<ñ j¯ó¸­™¹»÷7|}#!by¶k¼‚)Ï©†¼Áó0Ïì&zCõµÇÒ;(™f3ð±Ô‚í±(¦Ô ©á¥$‚ž€øÄ4ç©oõu£bvz°[ŽJ;{~ÃG× b¤ß‘q$T9ÚqºKèßDÕÈìr +QñK:±–NfísVÌëjZS#‰zåm¼Ë†N‚°®-ôì@XçèßÛâ6OGÞ/‰tÛµ»RxËn¤8ã°‘ÊÒ†‚·ýþàòd uÙY5ÅÜsºèb[íe¼»Ì›E›±kœ79Þ'ðÕ’‡_ÈM7;c·²îVÞðE‚ÀoªŒÜqú%¥`VŠ\ýc(Ȇè"ì¯Z4ÅIó@AlqÿŽë—D˜ l[ÎÙx|TI( )DCøŒh(råT"SQ¦W|mö”qú€e„ J!žD%̃èLwêû8´v×ä[·|ò;ïžnšÖ Ø>ÎØ•ù¡ª^Ã4ŒgMv8£€ÂÃyMŠˆÎh|gt’/q:Òkžˆ]­'"M@)”ª(¼’›óX .•X¿;R‚À%Ž¤`]͈ի#¥D¼:Š é²yâeÑ3&î-þO7G]m¼á›#1Ü›ÑÐ'<…“Áõ)Öw4Ö¿kOɳn":9øŽž9±PM´2°<BijP·zfädúÆQîsußÙé†?ð—ikwÀ!-ãÜüôÉþ‰õƒÕ«HY—·Utë³Ç"úPŸ§ #¹ ²ØH‡¨5µÐK:îYoý¿~$ozÑçzÎoù\¯+‚7|Í<3BìøˆHpÉx  ýa<±µ†ÇAB½Þ4V?£|i¥¼ÝØ;‹{Ãß )Y.vR˜MËК~x0}ÅÌ4­™#ùøPŽ´Éâ±3Y<’K‹GŽÖâßm©‡£‡ö³É”A~Þ ²wí'`yRfNå-!^L,f³jÞ´Šý¾ŒW»£mW±Áì'k(1™“ÝzñÜ·ó¼·Ó=^ú¥þÓÿVÐjg¿áûH [˜Dá)(}ËêüŸþÀ’²åê,ýqÒO endstream endobj -1436 0 obj << +1472 0 obj << /Type /Page -/Contents 1437 0 R -/Resources 1435 0 R +/Contents 1473 0 R +/Resources 1471 0 R /MediaBox [0 0 595.2756 841.8898] -/Parent 1441 0 R ->> endobj -1438 0 obj << -/D [1436 0 R /XYZ 85.0394 794.5015 null] ->> endobj -1439 0 obj << -/D [1436 0 R /XYZ 85.0394 385.037 null] +/Parent 1416 0 R >> endobj -1440 0 obj << -/D [1436 0 R /XYZ 85.0394 373.0818 null] +1474 0 obj << +/D [1472 0 R /XYZ 56.6929 794.5015 null] >> endobj -1435 0 obj << -/Font << /F37 747 0 R /F23 682 0 R /F47 879 0 R /F39 863 0 R >> +1471 0 obj << +/Font << /F37 779 0 R /F23 714 0 R >> /ProcSet [ /PDF /Text ] >> endobj -1444 0 obj << -/Length 3130 +1477 0 obj << +/Length 3214 /Filter /FlateDecode >> stream -xÚÍ]sÛ8î=¿ÂÊL£?ôÁ{˦ɮwºéžë½éÜvd›¶u•%Ÿ%'õ¿?€eÙ‘ÛÞng®ÍL ‘ €£þÄ(NÂÄH3JãHÄ£ùæ*­`ìÇ+Á87é¦õÃôêo*™Ð$2M—½µ²0Ê21š.~’P…×°BüëíãýõŒ£àaü ¡t,ƒ»ŸnÞOh aÔƯ©ÇPs÷öñaüão“ÛëTÓñÛGêžÜ?ÜOîïî¯ÿ˜þ|u?íHî³%"…ôþçê÷?¢Ñ¸ûù* -•ÉâÑ3|D¡0FŽ6W:Va¬•ò=åÕ»«t öFÝÔA1‰(”*‘r’bHN± %U''JKEÁôZØOí>/‰Uûi»³MSÔ}×KÁ¤Aæa ÕÛ"ÝH-´[‘n¤‘A¾»Y`éƒà-5­Z»À!ÌŠ*ß^Ö» A4*‚vÍëlóùGÛòŽ.h»Ñ×ïŸ6ªÛz^—¯®oT¤‚¼âOèÚ7Àuyø,‘Ž à9"4q,§ëbµvSØj^/:|0ýi<¯mE}M[ÓºŒSpNM•o,MiìîÉæ–)ªK­ÕUIŒ+šBü#ŸòͶ´ }±žŠÅù¦“‡;š úª_òF¦”£Ð$P}(-ƒÅ¦(Av¹]ç-B‰›`n‚í&oZËø¢H:ºðã9gÀ±õá|ÉiaO¶A³®Ÿý¦LÒ¼†#ªZ^ µ[P@N'šP4Cˆç”· RÆÁ¦n€ [“ ÓÓhpÿŠ@g‚ÎGŠjUZê*‹Êºu—íºÞ¯Ö4€´Õ>oɪ`¢6ö6‚c«Áôf%o»ÇÕy€Ñ*@cIÏR%3ÇÒ”TAÁÉå»–@g&ж~ wFH«â‰´¥7 -l’þ ÌœLBÆ<’Ó:~EÌ쪨xÉç¢]÷Ð`°Ì«(8œ–Mcxç‚—È›f¿ PQT ôJ3K--@C¶* ¡šö]Y‡ÌÖþTÔûÆ{¹€ZýYášÝY¹åZËN²¨æåž, ¾–Ît ì|‘ÏŠ²hÎמÜC]–õ³;l´mRrH(`ôèÇL=LL/‘pÜèDðaš%ÆÊøÝ8¼ýØa¢²(øåýõMªR ñô@ þÏûÇûÉmØ¡IT' -NA¢½½ÿ?(9ÐÁ£š}K É,”š¤þRBRFaf`F‰0S‚Ôö¥Hnßw¹,ÞNß±ãÛnóùúüñL4ùP”0 -z83ñŽòG.av!µöE,i²0'>‚È Œ”ø:û2ʾÌ×D’ßÀÉy–œïˆÒ8»äúÁè"x- Œ®¿÷ïÃ7wïÂ_ÆSŽ'¥Ié=‡1ØX w àŸÖ/=` -Ž3yööþ«Ð|ã[à( …BFÉ¥Kîw;«X„i”’AßýÔ…Ž’Â^©etY&½í¾‘Lþ—[áÛk­H! ¤[!u’d_y+()CÇêó·‚ÂøJbŸóCEóyïÓ9˜žK³G?I……S › -vŠT ‘d‰dôW—¼ûÜE±D*–Ö'U»t»ZWIéîŠ% -13að|u˜zŒÅ_Jy]4óý@á¯Jç[í¼Þ-¾¢ˆrërp2XØf¾+fî†Ã¬gД9z]짚Ïé* 4VTt Ñ¥ ã9ãåÝÜÂråÕ@&G©wÎ)µÆÑ!XÀýÙt«\¶|õ¹Ä”pç \¢­-æ{WZpß…u©ø”8eÁMÕ{o=b¿˜Ÿ´fÒþÐå¸'°'Äm7oḷ­] N§Â«i|€‘ 0â_ ˜mGî8žPK¾—`˜yrο{)ùÌ§Þ —ÈWhöaÙ±f OŸƒO —”;v½)}»·^†ö>ÜíÝrKMçÝÌQòCΨ£8ë|ø¶®\Çè*å™Hèˆ×q€åŠ…ð™¯è*ÌÐrKÆYæÁ+Ÿäy5·~ÉÊ~â5J"dåuD3ÿZDÁ¯ -á:§†ÐõàQ:w NÞ™RPâu峦.÷­¥¯Í+ÊÈÎ)SêJ=z'(iÎýšÄúnɈ^ˆøhõ›:Æ ÖÛèî÷n©ž“ÀAÊÝ»ýݱ›×“llR²±ÅúhŒ±öÞ;îê:K‰¹Ê€Àîdç]oM­·¹SDg{±?l„f~[²FòåLÓ¸¥ØE÷‹£Œ#úÀk³oÚÂxÎ$ŒÄ¹Ø&'9€NdaCŒzªÒMSÏ‹¼«*½xbŸ;>ìûþ–#0.†ÜÂ?¼ tìóxûËýé•@z†ÁëÞEˆè6æ…}q?d½rKB¦šM@:7´¼.ò%u:¥ñU¤Œ«žY0«©Tžúu³‚Æ)//Ëż¬—#I|-Õ’çþŠOŒýÇü磺dl-x|6B!ÏkÏüå[ˆP ôezZ¢n33ÍQßivb  uJŸU¡³,ŠªÙzSCwþH_ðÉÏ5¿%Oþ©X´ç òKðÙ:Gð¤²é5ø‘VjZ:ü—DJÛÅ­ûÄí'EÄñ|ÞtÌä!ß•Mǜܣ›»A[l¸ ,ó6Ÿç®÷0×-Ö\*xH³ £+:[· „í®ÄäªK͵Ã5ô'<ë_CËýYöÿ‰*âT ›gPEa”L¨BCjö5flÖù†‰äH0xß5“6Ûª\”˜~µÎ¦»×µëœ'¡W!@ñ@D¯v˜±·Íwm`–ó®··‚oæ\|ÈaÛ‚÷Üäõã˜3’Ü‚”Ñ™²ØﻫóÊ'jDá¨ÕR,4Ï'[ ®s·&Šƒ Ù´[´#£ž¯_óÒÁÎÛ|áóºÕìÅ@\¬sŸ¡aæí-3SË{êÔÍÒ#q#·ÈH¢' 6ÀÈ+V ¼ð«¼*‘° :$4~ˆ"õÁg˜½.ò¥¯~ ŽÚÇ­Øh‹ܾ»û +F%ÍÛ¯K͆r ’Mí ªä£>)&€¢ƒx)Å£)˜Zòy5zNò Œyîö5]ñ¿—,‡’y?)R­;˜uQœ m?6ŽqçiY¸âˆ^¼TX­†ñÒlŠœ,¡Ó˜\8e‡@h((_Q-©ãà Fsž]nxzUnÊ–ˆ>ÃwÝìy¬¡]¨° íŽýEÎsçÌæ}±e.e}´Ó"_¬ ð/×p‚ í:bƒeSø)Ó3„ Þn1~æk ’ºv  /ž a  À ãoàÙh-1ó¼rÌ +5±$"Ôð¸s,ÂÑyؘ´lxϦ\³ätÛ`j +²£GŽŽ¸XãEÃÛ/øå] ‘Ý,› +cعrU{á€ê%±æÀ#_Bžƒ0€4ès•åì€K6¢Ös%—ßô$P説«ú‹9ÄÊ¿Öåi P¶s | ‚L¢ÔŽZÞ%°1/èË`2#³áÞ”¿aÁõç¡‹ ‹>¿¸M¿ 5c¯Ë9!Ü'|81J¶ÜÛ²à™>"á.3£I Øy`R/¨¸nµ*#Š~jŽg  9ž¼nºŠÏœ‡ à¨PdÔ”¯³T»!–xd.dÇáȔᱳn\ëaW2½æµ9} Û׫ÑÜF«,K…únÁa·x5ÁÚf²°™eO„Æ“E¤Óe· pg;‘¬–qÞ€ 3´À^Y÷©|ñH¤e·ãêM¦ñ>âûâ®! ·pírá±hž/Þó4FueÈÜhìpoyÈ«îÉKÇq§ÍOòóð•$‰8¤°E·»PpTTˆädNO¸fà<_«JXHXä»]I·H†µøå±f3ÇÀe.²ç‚ÔÝ#oÓ¢bÚ9-›M„D$áĘÆûW€~zLPmìE†sãÏÝàI¦ë-ùJ™mCÀÛÇÖiÙpþ1GðÝpx‘á5ÜÞ%?ã¯êr&£(ÍK)Ôµ¿ã}ôÃvW8×ßUCÙF<½xs—!@Kt÷v²j èP{ð@êOo©4á„Þ0VLho±ˆ®ï‹–wðrYu…ãÓüá»Ær`•Çru®c,z^H/ÆHY—«µ_šØ)„+ Æ%uX~¨{ +A á“¥ +ê—LÏéØ5¼µáo€IŽ@œ "‡‹îuMK8–l@æŽz¬„‡ryº)½ÃJióbìl˜=#HÞícUp²T•ï¨ã“WÔ'ÿ(”6¤y°ßMYŒç#ðòragŸs£a›ÇÓuÃZÐo%±Žìæ,¤J„¼ÌÍ ø‚"xO¯ZPº± ¦ë¶÷‰§›Æù‡ŸŒ=XÚ§À÷¯©éãB’íp²HU©*kzH4R"ëVk@Y˺ ) –áTGÍÁF`¶Bo^ñ¶£Œ‹yx×ÅBë~-ãj°A÷DsîÓÁM´ß[jº°èNFùî9ºÒ_±qÍ#9ñ 5ÔE@LÌr_¶ëÁ4¬òú=ªŒÃÕéÌÎ%³Ä×!{íhÂmá$ :Š¥Aj=ÜPžÜ@8Úèu…²œ Æç(-5ƒ­N3;_ŹÆVÝ2$uº€õ7œ|™ÏKÀ]>׎ZîÍ¡¼bl““Cƒ”AyÌ&Ó=Ó«Ò#°áT@)/˜D×HœïóÒü}’yÞŸ¬¤K>4^&õ ‘µ:Wœ,ÜÔŦ©ËÅèsè²À¸¯û=o|p$!'Æ&Q_Ös®½þ‚Üm|ßôz¢’ [|·ÃsI©ëþ!™øé ‘ó‡¦ RRXuhš#|ÁæB£‹â6#>HÇÐ&(›•øîÁ_ ³,ÝOXâ‘­ÎÂUátÝ_ØuzØ„N :õ`3ìŤCäVí=rÆ6†ÐXG†“ÌÃ3R¥ÿ€!É<> Ü`Û>¨úl¤è+Ónñ¨‡Š\{òV2îÎN:Lyfì1¨z®¦æ)â4CÄi8ëuã‚[úÎ L¼ ähh¾¯›}U,WÅVý­å ð“_Gìѧ“^cx¬3ydw¤r¾ìyÝ@ çBª¨G\©ôÅCp=0£N¹._õ)vä×C)Lj³‰Œ3a"›ü¦—Û$ þVöû^nGW}œ_ùP3iabcúwÝãßlt*²8¶pøHD†<|{-®^‡o>:‹¦_¿»œ¥:U¿€üŸW7W·/E?íôqÝJ‘ +¥­ÿŒAqà‚GAÚc­W2V(Î*5þKL?(>UÉËw½BÎëc°Ó'¬¥ø‹|ÎaT"¤Ž(©{„ÿ *Âd•ZÔ‘Ê„ ’:¯™ÁžŸ°fd$â,³ÏyŠ4B¦qL¿±%À& ƒøWtà¹ÛO[øG%„}Æ7"%”Šè†}€ñ†ž‚‚RTzV)ƒý>]¥d‰HÒ,yÆ-, +~y= }Væ’~Çï“¡ÊÍ°(˜Èø¿ˆËL*Çþn.š> endobj -1445 0 obj << -/D [1443 0 R /XYZ 56.6929 794.5015 null] ->> endobj -486 0 obj << -/D [1443 0 R /XYZ 56.6929 769.5949 null] ->> endobj -1446 0 obj << -/D [1443 0 R /XYZ 56.6929 750.0533 null] +1478 0 obj << +/D [1476 0 R /XYZ 85.0394 794.5015 null] >> endobj -1447 0 obj << -/D [1443 0 R /XYZ 56.6929 564.5091 null] +1479 0 obj << +/D [1476 0 R /XYZ 85.0394 695.8713 null] >> endobj -1448 0 obj << -/D [1443 0 R /XYZ 56.6929 552.554 null] +1480 0 obj << +/D [1476 0 R /XYZ 85.0394 683.9162 null] >> endobj -1449 0 obj << -/D [1443 0 R /XYZ 56.6929 384.3846 null] +490 0 obj << +/D [1476 0 R /XYZ 85.0394 381.0098 null] >> endobj -1450 0 obj << -/D [1443 0 R /XYZ 56.6929 372.4294 null] +1481 0 obj << +/D [1476 0 R /XYZ 85.0394 356.3075 null] >> endobj -490 0 obj << -/D [1443 0 R /XYZ 56.6929 286.7057 null] +1482 0 obj << +/D [1476 0 R /XYZ 85.0394 170.7633 null] >> endobj -1451 0 obj << -/D [1443 0 R /XYZ 56.6929 262.3661 null] +1483 0 obj << +/D [1476 0 R /XYZ 85.0394 158.8081 null] >> endobj -1442 0 obj << -/Font << /F37 747 0 R /F21 658 0 R /F23 682 0 R /F39 863 0 R /F47 879 0 R >> +1475 0 obj << +/Font << /F37 779 0 R /F23 714 0 R /F39 873 0 R /F41 910 0 R /F21 690 0 R >> /ProcSet [ /PDF /Text ] >> endobj -1454 0 obj << -/Length 2777 +1487 0 obj << +/Length 2891 /Filter /FlateDecode >> stream -xÚÍZÝoÛ8Ï_á‡}P€—ߢö­Û¦½,¶IÏÍÅuû ØJ,œ-y-¹iﯿ)ÉŽ¤×[ˆ¨!9ä óEYL8ü‰‰3Œ«\O²\3Ã…™ÌV'|r }¯ND“ÆAéxÔoW'¿¼TÙ$g¹•vru3âåwNL®æï“çÿxöæêlzšJÃËNScyòÛùÅ ¢äôx~yñòüÕ¿¦ÏN3\_^yzöòlzvñüì4J T`ñïË‹3ôòü³ÓW¿Ÿœ]õ[‹%¸ÂýþuòþŸÌAºßO8S¹3“;xáL乜¬N´QÌh¥"eyòöäŸ=ÃQ¯ŸzHMF9fœÌèIªCz29³ -ºPO/› ‰S~*Vëeùë¾HyƸ4r’iÍ´… >E&™3“‰lW¦ÿoVÜŸ¤B°Ü˜v@ó8ð -Í8c—UeJ3%™zÀU>Ò Ó\¨I¦,œ&·^aAOlÖ¬Viœl”ä.y xIÞ…ÁOÓŒ¬ŠjÉv¦í©ØHàŸ;8™a;_' ªR·ï¢3É™1ÎVš0*%òI&Á´Ñ^iACyòú]hí(¯ùDõÐÊù®î˜åà¡ÑÀ«#ú‘cý°ëböŸíš5›Û´3Z÷ÇÕŽÍ-³Ú™ÇLŽs&•!_~߀RµcwÏàé<¨þ‰£:¯þëÈifs¥Ñ‘uŽÉ,Ï{í™Q*³”$+‰–ÿ¦nh_GìƒbŽk3•0žíÆÑ{ñTqËœÌ!žZ“1)¬~8žZ•3é…‡×p y)“y¹¬>–›Ïø&’»jè×%=‹®+W뮜Ók×à쟵y`ü !ÐŒMˆœPEŠz~ˆkJ0ùˆ©|„+bÎI'Ô?¹áUĨƒ„HRo WüŒ4×f‚9+Ä`.ȧº¡Ü£.«nQ†D¤ ÄnÑ´%5ÛílV–óŸém¤XvPoà€^v¤·Á‡R8c££žÃa÷ë°ƒþ°X˜,zÌÃìTZÁ¬³ -5Lˆ*`Ö¨ %àœ'oË®«ê[âvuõG{`â@Ð̵  yµð‹Û¤«VeÚ5)ŠMÒQ: -„锞r.Ëåœ^ª–Fôªdz]u¡«îÊ[Ò¸MüÁ•kz´eM˜ô£ˆÁ¶®ºv¼²MÚrÖÔóÖ óhI›¬7ÕªØTËÏA[ø.®±ßª°ƒ¶Y¹¶Dº[”5µ@È0lV̼ÀÐœN[ Ú5 ´JyÙÎ6Õu8-š;j,Ð*"“È7,u]ŽšGÚ A;ôy³]4Ûe?fW:Š[óªÁ*æ¸[Áã¡òä¦Y.›»Ý‚Ö½ÝçµßþÈH<Äb¿x™m7ôZwË`^Ù¾EçÇ <ùoS‡Y0öý ÀÏdb„–§Õ/*W,ã™ú2}xÖ(××àÇ$ÿ’d&ÎØ‹A½L©v0ÛIuØ› ) 1SfbÀ=:H/ü¾½„° E˜ˆ§“eÑz#RccSA×:š¤¢©H!›P±Gƒ»»-º`Ë„µaFƒ®qZçϸY¶Ô‡ˆF¼YC`Û±©€rc’&:Uæº ¦ÆÝ›é -šu“‚›]¤ó¼eM4ôóï^\¾~v~^¨ÁX×MÝ–í!ÜßÐnW„µÏÍ–²ýÞVŧjµ £Ñ×EÙÄè0¨‹ÕŃjy¢è¹i# W ÜôýŒei- fˆ¯ÂYq¨‰R©Xþ`åeœq·Æ2ÉG` #d…™×íOÞYhÈJHÍ -b1Ñ”ÌÀ/ÑÎH«ØYtôìh4D–fMt?žùÁyêF}=å30‚RoaÑ6¬zÅÁw–7ÅvÙí¹¾åLÃ%ÏäͶÛñxíºœU¸ÍÙ£¶ìÀÅ ð¯;Ã}Xèo - ¼,°Â>† íð*ŠÜYÔ•O@ ÎTrö„Éš¡NiB4„Æ¢ðF­‚¤>|oéI.MšP{p‹ðRÕ{#§SŸ‚ZTq嘛±¯;îá( ƒÑÕñÁÕñ±«ãA–à6blê! Œ´û­@ðô"è{U‘C -žH¾°Òê§íÃErdЂŠÑgxœ*äêÇK‡iø¨âg!U¹|H³·]ÕÔÔ‹Ž»[xÿ#*Ò1Ø릨ÛeÆAÏÔqÖù¢óy`ÚR‡?DèÀEƒÏÏ)Nûá»aks¢böÔU k‰œlÔK©³ãGQÕ©_?Ó +6ëâ€^ŒS0±n¹ €•JålòæjJC‹åE&yr©ò &Ñd"›'ìmÁwï¬ÓGDèXór—Ó²„t‹»Ui¥¯•ãžwâa[ÝÖÉŠcœ“CÁ«£SÈÓbÅœF,Ë?VùcAʦº]€×£Îb† TzÆ Y¯×M[u%‘‡…|gäFC©V|& -¢Ÿ#T”õP´@ÿ¶ÝK_®àìMÕ¥‡Ä®¬™Ob`§[Ä¥âØ2> Dv9E~"{oà)÷á)¾°C€‹d«sÏ TrÐb^Þ¯xÞ9Ù#"úÞÁË€ú~¡")XotØþt¥)û¤ßENP;÷u&PÃîbMï¼øM{ë³’ºw!M#ïâ½ -PŠ® ⨔qý½A”ãÍP1ê¢}îgþ£cñø$`*ŽˆBWâO]AT•¬ÀùWëe˜@Â@cωè/‹ò;høÅ „ÄõE¹êu?žP{ˆ#Q„–²áû×8øyBdÌÞ®Ë>„[)oó¿-©%–Ôx3÷÷ÕÔßì¦zHB¥°LææØ´˜„J¬©)ñ§Ëéù+¼•6Bñd×z7~0'/öu 9Ù÷Ð ×Li.Ó ÏX.­#Çpšº Ôz±àæ¼)`ã¦iþ8Ö+g´ê·RΔ°:NŸž&¬ôšá÷´T f¤}ÚÇw!YŽˆ:f2N1gø¥Æ{JíË`9ËqŒÙô(EÌ¡W@¯!ÞÑ#8.F‰±ZÐ<3JÆ ëK ¤Öð_&÷~”<µÀeLBWžü5ŒëVõ>úFy -FE憛Ðuƒ]”ÿód½iN…I>Vá‘„¥(MïF©íQæ>uÃr•ËÝ ÑÔ¾þjK™Q Y@nèó†žuÓ…F9ƒŒR¦öTÅéP”HS?½ "î;gäTÔÞ¶Åm‰â`ŒÓtç<¬F -€Æ°±c×óPScÀËå|𬠚]¤úºZ4ÒI˜ÑÒsSb5ññj‹=žýÜeÕÒ§h7AøÛª¾çótž1«9#[ú:ëD?`r›чÊÇ|dÜÚC¿Ùá“GãÎS!4x1…Aö`Þ×óPz"/<^wÿCyü)Q5ÚúÿUJÌ÷endstream +xÚÍ]sÛFîÝ¿BòLµ·ß$ïÍMœÖÆé9îLæÚ>ÐmqJ‘:‘ŠãþúX’’iǹ6sg²Ë],€ÅX+5“ð§fÎ Ÿél–dV8©Ül¹9‘³;˜ûîD1Ì"-ÆPß^ŸüãIf™È¼ö³ëÛ®TÈ4U³ëÕ/s/Œ8 rþïw—ç§ íäüÍÅÐSÆ:=õýÙO×çW4áôÛ‹Ë×4’QóêÝ囋ï~¾:;MìüúâÝ% _¿9¿:¿|u~úÛõ'ç×=Ëãm)ißÿœüò›œ­`w?œHa²ÔÍîáC +•ez¶9±Îg‰#ÕÉû“õG³a锘´Q"qf¶0V¤@~ ô8I…M¡ºLx£M/TèNÕ*èd.õz]œ.`Éüílíüꪥuþ‘§òš§^“Ðð¿3šj‹eW65}ܯËåš@—MÝ–mǨš[FD“Ê/nÊŽ†êýæ¦ØQÿ¶©ªæ¾XÔÍÃh‘™¯šM^2#u¾)`¡”ÈœÓÃnð8óÕjwªÒyѶ|¾WÜÙ·„š¶ËëU€W4rñÓ8n›Ý&ï¨ß5ÔÂF»ÀץѴ?ì—uWìê¢{„rà?™ÑÉÿ7ÍGîŸòͶâvÝÜ37mù©ßÚ7Ô»/»5³wßí;2^äK†ÁS °kâ‰IDAc}Ìi8}_nÊ*ßUL™oÊ»5j‹âŸÇÆæì ¨¾•M”K_bMƃR{í­é[ù©Í“Ð: ¸¸W¢ZÄ=-¼÷"ñÒ÷ÖgÕÈú”tBÊÌÂÞ†MHa?|?¾z/Þ^\‹ó×?ƒÏÒYâæà”¼”hdÞ)=WRàŸµÇò´>i–€@G´ÿÜvPpÚÛ¯" ÞL:;- ­­0 +({— ’Ï«ïÇ’PóAP8ª­–O‹dDí/Éà±ÿJ«’L¤6ËÐã ™^ÏÜ +ÀÁlíó·‚—pä¢*Ûç½Oï`F.­ü$žÊ±$Z(”ä„æüc©>õšÁ¿yÊ{±Ï]•·ÈÅmAÌÔì„–Uή°«þ€=L;‘ª Ï× ¥dÒ" + êõºl—û¶ ÷Û˜$^•Á·Ëf·j'xÿÚœYeÒ3¼½ž¯Šv¹+o ç 9yؘɯ‹ãm±ûXìxMÛ5´%š+kº…èÒ…ùœáò~mYðP¸vaŒÏ§Ù‡Î² Y]öUøP,àñjºÕ.[ŠÇøêÃC7*œ4Û|וË=\ ü]H»A|Ðl!,½iöx^FF,wåÇ‚'ûëúxQïWé$‡%3±o÷yw’WcÜü†PÃâ†;yuŸ?À~'⢂Чi;  ÀÍØ,á ÆÛm¡Åм2`¡aŒp [—õï4„§tDxuEŸÈ'~ç±å…Û 0²ÍË  +|ò.ÇÃÑiïufI$؉.Q5gL •‰­ÒñWÅÇ<ØŠµHh¿A©Y!ߊ{õão1p¦ ‡=p%žf^á· Û¡™Ã£†6A».ª-£yh»bÓ2 DK›²æå÷ë"®ƒM¨àGûÑ[75¶„(tàHùi0ï -¨R8è…ã5ꈦ¢‰UQžîè+œ´N…Ù‡3¬9 +‡H½v GT,Ë_¥Ô‘B8L¤ÁÙc È%5Û]ÙìÊŽ‰‡ó¢Ù 1õ +cŽÃõIÜÁØ—õã}¶4ßE@f(ìðI8}øÃPØ=uGâAØ–`óŽ{Û+ÔéDE5SÁ$ŒlBic¶ M:GîZ8æ…‘~~œKÆ÷Lóž‚3Äïþpñ#Bð͇|…e–²ÿ%€’—/Á'KJç;v³a7s@?/È£´;n©é½[6H~Êõ§½ß6õª¬ïßLó6R;'¡#\ÌÔ®£ÏüŽ®Â-·b˜ÛœzcåËßy]ÃmDYŸGEŒÜLJS=Ó¼«äü§^…p SKà«fJ'ɃS£=Ré¶m–eÞ«'RìcLJcxןq¶£ö þáͤXܹ<{{~x%žaðº"ºeY<º(ü{(x2U?˜*téÜÐò¸Èoi0( +|¢ÐÞ4á–ôIÄóéã-"µºïPTð0'}jÌ +ùhü.väÓwX½ ˆL ;¡µì) *EåÁ¶¼«›Au,èüE ×vœ¸”ÑkdÑerÉÒyŒ×grp½Øߎ®ÉÀEÍ«"µ°ÿlBk`lÛ`ée 3±Ï›‡X)FêóŒ^ ùУʆ‡$7I“™1^dú…uB —¨äË’ÄéU_£²÷„570|pÜ“‰{âÀÒm:ƒK€w'±œÄ²Ù ³1ÃaUÃh™q©Q¦s%O‰dÇ%–gõdõNe³1+nw(G•`‚ü¦ ºÇì‰J¤Ú€ÙÎŒòÂÁn‚ÄŽÅ“Eñ˜ ýBù å¿»t¤"ùŒt¤>¦Ð¥£ÇÒÉì·¢ÙÝ=#›Ý¿¯tÀ± Pÿ¼±AøGå‘pG?2È‹KCµ>  +‰êI‰ÿE”$BYk?#¢TŠÄ¨^BGXž‘~ZDDÜý•"zyañkÜhq©„}aaQ[,W&îùÂbxË‚´ŽòoŠ´e‡Z«-Àxˆ íóDú¤ü¸¤è”PÒÛª™ÁDØQÆ°•ãŸc¬`‰áÔŸAª¤©NcÄŒñjUp5o°Ïœ1lý†ó¿0©Wú0<)¹ÜX%ç&6M|Èj÷ËeòéPäêäbó  Fec± þsJjZ(ú!Çá¡ãÈ.¼-ñY=Qiõ +}••VßWZ WZß]G)`»¾þñ5U~*óó®Ü‹®YT”ÒÁÉ(‰qç2‘±Q­èƒŠÐásx´óáÑîŽ$î9¸ÜržRpP Á¾.»vLÙã³($êô,£ûž¤Çz“ïJzþòÃëwoÏ..c!Štø6¡ó·Äí†ôì¡Ù?ÿ+†Mþ©ÜìýÜð¾Æ7à .9×Pþ0Ô€5îÚ¡œbÖô¼qã$pæ*Kf#møsúeµZcÈ$ÂJi§~î"gŸ _úãšáFÀIS=­Ð} âB©§ž’Ä‚ÚøjÄúOýðXendstream endobj -1453 0 obj << +1486 0 obj << /Type /Page -/Contents 1454 0 R -/Resources 1452 0 R +/Contents 1487 0 R +/Resources 1485 0 R /MediaBox [0 0 595.2756 841.8898] -/Parent 1441 0 R +/Parent 1484 0 R >> endobj -1455 0 obj << -/D [1453 0 R /XYZ 85.0394 794.5015 null] +1488 0 obj << +/D [1486 0 R /XYZ 56.6929 794.5015 null] >> endobj -1456 0 obj << -/D [1453 0 R /XYZ 85.0394 756.8229 null] +1489 0 obj << +/D [1486 0 R /XYZ 56.6929 691.0694 null] >> endobj -1457 0 obj << -/D [1453 0 R /XYZ 85.0394 744.8677 null] +1490 0 obj << +/D [1486 0 R /XYZ 56.6929 679.1143 null] >> endobj 494 0 obj << -/D [1453 0 R /XYZ 85.0394 609.3337 null] +/D [1486 0 R /XYZ 56.6929 591.4009 null] >> endobj -1458 0 obj << -/D [1453 0 R /XYZ 85.0394 582.0292 null] +1491 0 obj << +/D [1486 0 R /XYZ 56.6929 567.0613 null] >> endobj -1459 0 obj << -/D [1453 0 R /XYZ 85.0394 540.5567 null] +1492 0 obj << +/D [1486 0 R /XYZ 56.6929 349.274 null] >> endobj -1460 0 obj << -/D [1453 0 R /XYZ 85.0394 528.6015 null] +1493 0 obj << +/D [1486 0 R /XYZ 56.6929 337.3188 null] >> endobj 498 0 obj << -/D [1453 0 R /XYZ 85.0394 359.8869 null] +/D [1486 0 R /XYZ 56.6929 201.7848 null] >> endobj -1461 0 obj << -/D [1453 0 R /XYZ 85.0394 329.8975 null] +1494 0 obj << +/D [1486 0 R /XYZ 56.6929 174.4803 null] >> endobj -1462 0 obj << -/D [1453 0 R /XYZ 85.0394 240.6043 null] +1495 0 obj << +/D [1486 0 R /XYZ 56.6929 133.0078 null] >> endobj -1463 0 obj << -/D [1453 0 R /XYZ 85.0394 228.6491 null] +1496 0 obj << +/D [1486 0 R /XYZ 56.6929 121.0526 null] >> endobj -1452 0 obj << -/Font << /F37 747 0 R /F23 682 0 R /F39 863 0 R /F21 658 0 R /F47 879 0 R /F62 995 0 R /F63 998 0 R >> -/XObject << /Im2 984 0 R >> +1485 0 obj << +/Font << /F37 779 0 R /F23 714 0 R /F41 910 0 R /F21 690 0 R /F39 873 0 R >> /ProcSet [ /PDF /Text ] >> endobj -1466 0 obj << -/Length 2187 -/Filter /FlateDecode ->> -stream -xÚ½Y_sÛ6÷§àCè™ -Å_èÜtÆuäœ:¶ÜsÔ¦Ó4´Gœ‘HG¤âø>ý-¸Zt’^.7ž1—¸Ø]ìþvb …?–¨Œd†›$7’(ÊT²ÜžÐä̽—›¢ñd ÛÝ»=+¿”DbwÊ@ eÝ=Wýr¿êSÛo÷gvëGj/@/wSlm$ é•ÔD*Ç?ÎNÃÓöR-7û•õGÏ¢£gBgÎ!Ëï®of/gó‘’hî‰ë¾a%‰ÑLF³ùùåo/¦#œ'*ç²ç„ö78fÉ%Bççbq‰†˜ðŒe(DNþ(ó±¶ J áóqðê±j‹?ŽÈ%Q,ScFS£åD0ÎýºU½-ÊjR¹£=Þ<Ó„KâÍ7Ìò°é²ÞnOŽœ#ZŠÀèíˆøf2€€&ïOòs‡zpΡ±mçW,¸+óª9š§•w]7AÆÒ‡£†yçiqßEÕʯ¬ñYTHì«÷ûbS:Á5üi¼&¬ß·À/ÿíÑùhf©c²kZôœ Š‡ Ì8Ⱥp1‰1 ÏQÝ„vì`ÇÂO—ÛûM¹,Û±¨bŠˆ\›1aƒ˜É@ˆàÿÀÂD r’K­ý§Zä>Nl ‰V?5`EÆ\Á¿Áè5—ûZ¡Ó‚Yç‡}ÞƒbEÑ’2ögîº7;Ú;UwlBr˜oîí2ò‘ü:ÇÂf†°ÜdŸv¶E§þ»ý¶OeHí0mTuÈ·M½Ù·–Œœ((i˜¥(‘lzʺìÇœËr2–Þ^¿~ Þï@î|~vå -# ôÕÙl>y5½ùj£Qp‹÷ 2C¦-?›^78…c™Ÿ| Û“égW¿^NÉùõA¡½(ÙP’áÂã3ÖàZ0A8?‚ðNþ×>ž¯°«¡Prù…whŸAp…câK¼Þ•ïнŸðÉt¦TàÎcìÀ¹Êÿ›„FŒPÉóa -¸A¡.yzß¹½´]E3Ÿ@¸ÀÛØwaà«JJýE&cº‡ÂïÐÅlÝż?pØÍb1ãÅ+«7Fäꦋ6L–žù} Ÿ¸äA³tv7Vt0½Ÿ=& -&Æ4`C& -Š2ù3j/l„#‘É°=”íz4ÑÀ)Šª¾Ò ƒ÷Ñîñ2”À{닲ÚeÀ‡²±OŠÓO§–ÃéçòïÊ”ß7®¼GÐÏs(S¨–½ -R‡“éhtW¼@šÝL_£ík pÍ»ó«:‹øh4Hƒ~Å8u·° àÉî&* ¿{9OoÎœIÓoƒ]Ž9ƒúŠâ£³Ù¬›ñûHMù—Çx„±œÁõßmÙºkæ‘7š"3¼Áö¤ rÙÓ>Þ{w£ -ºþâÿ›„ÿh% åŠc¿wÐÞ¿úוŽ»6Bk†‘)sˆ/ L¼PNpÍ$?ËþÎsŒqendstream +1499 0 obj << +/Length 2598 +/Filter /FlateDecode +>> +stream +xÚÍ]oÛ8ò=¿Â÷ 5ËI‡²©Óó¢Mz®÷ +l·Š-Çdɵä¤Ù_¿3R–%í^{¸Cj2g†óI‹‡b”DŒ+Ž´ YÄE4ZnÏøèÖ^Ÿ G3ñD“.ÕÏ‹³——J 3±ŒG‹u‡WÂx’ˆÑbõ1¸øçù»Åt>žÈˆ1O¢˜?Ï®^ÆÐçâúêröú×ùùX‡Ábv}Eèùôr:Ÿ^]LÇ¡ÂHåXüv}5%¢ËÙ›éøÓ◳颹«–à +åý|öñ­@»_Î8S&‰F÷ðgÂ9Úž…‘bQ¨”ÇgïÏþÕ2ì¬Ú­Cf +¥b±ŒÔhq +ñô©t‡S; ÊÙ?t"DÈL¤ÑòaȸáGËKÕ±¼‚)¥¢‘Ž ‹¬¡éÿ¶X¼ƒT‰ +›lÊð L·%& ì\WÅ¡É«’V1s7[€"'C¼îÓ².RG+k +Ë-íš½#lºZ9¦5-ØK„<Ô%}Àæµ#_nrmEØ›Ân38‹Ptá£VKež¾Š¼œØó¡s`é~—ØŠ·0‘t·²ª¶inõÑAŠéJ%qðn1'ÀUEªa«Ú HÁRn+l¢Í±+mq"‚]îÓ–DXئ«¬Ï©ÈÒº™4Õd[ÕMy/s¯ ÖùmI¥,-±È%$hfOǤ +.O‡¥+¢(²µ¥UöZ³Ïo7õ&!×Ðൠ–¾ÊeFd½ÛUuÞd„>d=/G­‚ûô0èøíxEæX·fÀõC}H‹âÁíÞçÍÄjÎû*7YÉl’Ð/§ÊŽ.ƒž„ˆ4Tú m³½sOyêžÒù.H‘L2åT[¯`ÁÕ<ÓžþàXì Q<¢G?ºxé¼¾=¨§y¬‚3ô¥ìt;(ª”ôW%žS¤ƒz㤬“°)!¬óâß>´Xf´Üwi¢¼ßTµ[^¥MJÈcÍ4É }¡ì +cí%>>O¯¬s-Ö?É1GÂTbo]AXl!ùç»Âm e8‰DBækú’TØà„øó6©£Ü¶m(Ñ“W€ žõA×Rqpi[Ên°‚Axy¤ï>:j¶¬¶ŸE1ÿÓiCÑök‘ˆXµôUþ;ª|{Kãw<Ù„F›ž°í z•³íA#®azä1 '×óÙëÌy‘P<èÇC›Æ{²Îaß'ÿ±%û/˜$4HÌŸ·Ih"˜+#ª×‡ Ö@³Äål$ °®*Öñµ§ûÕî©?Ê8ÿ/ýªâ0Á¨øÙ~U‚]µáH-Yh´þ¦É_Hf ÜÁS“(ˆÙä¯Ìó~ljQÛ‡Ãe¨¹évÓÑ€ª¶‡-O¨C¼ê46Q î„~ÄY¤dè›kðh­á¾nüFM ¾~æ…ƒ^å{zÌ«Ÿ˜ cÈŸ±lÃZÕ¦K0õž`Ç +Xh‡¶öF{oû©¯ ˆ^3 -¦÷'ýµË=dèï¡ÎëW»«h_3d$ÛIPøÌ{½ˆ<^Ú:…‘ì(+ú¦å‡ò3T*÷G;¿½(¡ dîÜ”vþᲟpÑ,ìàº÷/'^•^ºè<‰ˆb¾6£º!ÑÈNLÝr¾¥§Ã¡¨‚ÖLéÄ 9ˆèÅLÌŽOOxYÔL‡ÐgªÖqŸ§úd“xVÿªÇŠ & #ãý†¢Ô\ÜãF9¤)s¢ú´u%K†]@sW­ÙÉÐΩìµ) D¼x_kûé·}ì ƒ³k]Ø^ØÒ³ÔíaÛ–€Ü—‹¦_6lkf³Ù}@ÍØÀ‚1L†'…s­4ý‘GºÓqî´¼}øðÁ>uñàâêü-þšüö|v5y?ÿ{:NnÝó¼ÌPió»´huƒ[xâçRHzøçÀ›|ôÕù[J=6Dx IòÄO +íON(Ô(&_•°(‘z@ô?ÕcÕendstream endobj -1465 0 obj << +1498 0 obj << /Type /Page -/Contents 1466 0 R -/Resources 1464 0 R +/Contents 1499 0 R +/Resources 1497 0 R /MediaBox [0 0 595.2756 841.8898] -/Parent 1441 0 R +/Parent 1484 0 R >> endobj -1467 0 obj << -/D [1465 0 R /XYZ 56.6929 794.5015 null] +1500 0 obj << +/D [1498 0 R /XYZ 85.0394 794.5015 null] >> endobj 502 0 obj << -/D [1465 0 R /XYZ 56.6929 769.5949 null] ->> endobj -1468 0 obj << -/D [1465 0 R /XYZ 56.6929 752.162 null] +/D [1498 0 R /XYZ 85.0394 647.5054 null] >> endobj -506 0 obj << -/D [1465 0 R /XYZ 56.6929 685.5532 null] ->> endobj -1469 0 obj << -/D [1465 0 R /XYZ 56.6929 660.2382 null] +1501 0 obj << +/D [1498 0 R /XYZ 85.0394 617.516 null] >> endobj -510 0 obj << -/D [1465 0 R /XYZ 56.6929 468.978 null] +1502 0 obj << +/D [1498 0 R /XYZ 85.0394 528.2228 null] >> endobj -1470 0 obj << -/D [1465 0 R /XYZ 56.6929 442.1289 null] +1503 0 obj << +/D [1498 0 R /XYZ 85.0394 516.2676 null] >> endobj -514 0 obj << -/D [1465 0 R /XYZ 56.6929 217.1462 null] +506 0 obj << +/D [1498 0 R /XYZ 85.0394 321.0565 null] >> endobj -1471 0 obj << -/D [1465 0 R /XYZ 56.6929 194.0979 null] +1504 0 obj << +/D [1498 0 R /XYZ 85.0394 296.4844 null] >> endobj -518 0 obj << -/D [1465 0 R /XYZ 56.6929 110.3497 null] +510 0 obj << +/D [1498 0 R /XYZ 85.0394 226.88 null] >> endobj -1472 0 obj << -/D [1465 0 R /XYZ 56.6929 82.4166 null] +1505 0 obj << +/D [1498 0 R /XYZ 85.0394 200.5523 null] >> endobj -1464 0 obj << -/Font << /F37 747 0 R /F21 658 0 R /F23 682 0 R /F53 962 0 R /F11 1303 0 R /F39 863 0 R /F62 995 0 R /F63 998 0 R >> -/XObject << /Im2 984 0 R >> +1497 0 obj << +/Font << /F37 779 0 R /F23 714 0 R /F41 910 0 R /F21 690 0 R /F39 873 0 R /F62 1035 0 R /F63 1038 0 R /F53 1002 0 R /F11 1343 0 R >> +/XObject << /Im2 1024 0 R >> /ProcSet [ /PDF /Text ] >> endobj -1475 0 obj << -/Length 3204 -/Filter /FlateDecode ->> -stream -xÚåÛrÛ¸õÝ_¡‡ÌTž±°¸Ù7mb§îdÔv;;Íæa‹³”¨);Î×÷€¤$Èö6»Ó‡Ú€p9À¹_@1âð/Fi̸ʢ‘Î"sæË>º‡¹÷'­™øE“áªoO~¸Pz”±,‘Éèön+e*»¿Ÿp¦²4=ÂÎD–ÉÑò$Š‹#¥üHursòà`Ön ‘)V)‹S©t’"D§8c‰’ÊÒéÍûó«sÀ?“ã[‹lRƒM‰d:Nà|»ºlw·)¨×ÖØ&ãùæT¤c“·†Æsj³)ÛTßQK+›zk;sCht^Û¶p[ÚE޺ͫê‰zEy‡Kî̆~ßÙõ’À˜|¾p;Ú…_2s[óµek6y G×™CzH©‰Çz"ËâX¾ŽTÀóDGª9¦’d<3ØjG3Ašakò¦D¬°oVx'·®NÃiê!õpê€N8Iƒ¿mKê윣ÇÍv½®7­ƒ¸Qç 7?˜Mc+ÀÞ!²ƒ}a*sŸ·e½jHþ ÓÌ7åÌ -ü,WNw.ÞRG*¡ÿ -'P³*ošÊ4nçåÕdúîÝ5›^BbN=<€c‰ÊÄåpÍ2bnyññúòý%¨kÂù˜3ÔÉp§†ÝuÈAàžÝ'&Ò æê†Ú›óë_¿aç?Oúôáüu „ÔÔ}CÍÛ«éOnò ãqÙètÄA.>ä•Yµô˜ø 5R» pH‚RâRâ8,H>Kñ ehÝ+¹'_ T¾(¡ÌX©_‹‚[y伡w"‚t4Šµb™LõküƒÊÓ\ïù‡ÿn—¿ «b–&q|ü´,×õ;vAM:¤¬âàXÂÞGHÁ”Rñ(Nbž”È¿ÉW÷& :"‘-½]XíHR²ªØA«Šm½²MÞÚÇš:wõfÙ ŠÀèµù¦4m½v»6Ôöã?4­Y34ˆj|éA-Ü!¿p.7M<e)0´hçÏÐî €×Íð ³Þ]–:ÖƒB+àô(NÆÓª¢‹®ÄK:ˆ€˜¯ -?íA/·ƒ93!Y_×MÙ–æ@0cž2™$r4dá÷‰ - ‚h nh¦´Œ~ÌnËQYSš³$ãéK²&!ÔɢĢ_-šWJú,ïÞšŽ•4^?®0¬À±U¾ôƒw{«cœ>ôÝ‚“—†væõ‘T4MÓF310¾\ÝW&¾Ä@Ú4ÍJoBHƒÆ~Á/<æE]UùÆý_Á˜@Ùçãæi9««†¦Ëva=L ®‡g‹H±$áÚÁÓ\$,Ð¥5MYŸêŸúë*ŸSˆ‘agã)@Jeº ¸˜IõÑý¾tkÐlGÙøÚÆïMKœš7nóŠÚZ½m×[«~°÷©ÞÒèÊP¥\¥€Ùó|mú͇¤ÙÓÆ_P yäè²E@™Ù;B3Ëç¿6K-h«ˆ†[èa"ÝÞU8z*|$E »g`2aZ@p± Lì‹ž±Ó0yŠ4hWˆ.à@3ΟƒµC–eþDÔ¨×,æUå~[‚öd¹~´ü‘½Ð MÉ¢hOh–uQ¢u‡à—ò¸(1PhíÂ:';LâY£ŒÉ‡µÞø»Ï>pK·l˜a ©µ²NÄT…;¦,ÚuÑÔ|–7(¶BÀŸà’§bÜß3Ó½ª¨,¡méÅÖ* .Àœçò{XOž/,wA’gJ$ Q™»– Î6 ’d ð r¹4E æªr'ý'ŽæÀ@ ³+øÀ+Ø2’G4%ÊX,âèY¦0Ó§y2D‚†jÆv$ôû=ã?ŸYî}>C}ù€œÁÙIìmàý+´Cq=¾°Q Å|Í—ëÊœ®±“Pàm_À*z-VÉÏÔY2Sê v8I¥c¹LP3¡÷l3ˆ &²’˱äتaÞÎ¥‹µ`x¾ÝhÛf¬’BŽ×õfo‡óµÛÊmÈÝ‚œ¦ 3/—yEcÖyõsß ]bÒÀu^>»í”ØÀ Z§Ä2c,¡·Õ‡¼¬òYeÜjë@¨ocRêö¾¶÷w´gÅX °VYÉx<¯—ë¼-geU¶6âˆl8L“&ßT¥ ÆRÖÉB\hÍÒ,ë|[ȹ iÐ+<¡iKL ¾O#îWå7 -sbkô°-WEé½/¸!žíW1瀃õ¾hƒ¨©l´â¬Ï›Ýr^G 2cÇSÇaFöi^Ÿ;þ U -¥"–ÊX½9ªD2%¥“–¶z1s¼Yƒ³†Å0r¹ í”K3iëI©7X‚3ÕùU¾\ÐϽTÑ…—n#)tšîÔŸJiß™=ZéAFÎŒçðÂlÊÖ{8—mì*¸+/Hƒá¾|5w«6§éx[™†½œó̱ ¥Œ3nºˆxŸ5ÄÚ›š0KÀD‘’Ãüe07¦«¥Ü”î±Hnú×°¼äè*•ü â.3Áãì¥B‰’hÈý,—žøØd±rûí…Jƒ¹¡˜Ãx@Ì…öõ>XîJZ°r™·öe'V˜Ãê_@Ø» ‡]¬VºÌ—ÙŠóÿ%·Cø£äV*–=ûÜyÒï8.·:f<ÊâäVfœÅ™pfúiýr-yÚ’Œ­]Ú`ó %|î3ôÔˆCîáÌúX˜@ø Íôé7Œº½>£aû.pF£ïº~:žž+yðçñÊ1öêæÎ Hò}dgÝu~‡Óv;Žs.QvD/9X@‰%)Ïè‚Kˆ¹Sn{‡,„H&š½>|)êeî‚Â8›Š]îi<1¼ž›¦ñjÔ”KÈÔ6öe™žÚ(Z4Ïpa€Þ÷‘¬çBÿ¸ÿ¿x Â81Õ@ï º4‘?28øØ@ñÜD§)!’ÕzàYTàc tS\hW]7a ‘`W®~é•ÈÏ•Ÿ ÷â=o)¸ðÛIGÿ͇ùÚšæ{:GÁJH¾iw3ü.j Þ)HéÝ®oôòäj>ÙÇ?§(y4I%Z`ü±X'äJúû¤^|M³w‘îÁ~7wõNúu{ûa·¦77;åŠAHÖÙëÛ"ˆÕ¹¦gü¶EŸNç|<-ŠrxÈEé»°ˆ5áwlÇ‘w‰t×r è—­’+‡ vv j§€?[['PžŽh=;âpæ6}š=˜y—› Nt¯)î›ÌA[l—ëÝuÄOì?ƒQ´}è¿-Á.Ý#—XŽ„ï<×mÁrwÅùMþŠ%JK_œXâ§/6¥s©Ý i¦’7d}}©i˜æîšù€ý]ÝU/÷ÀçÔÌÊU¾y®wÙ$ÜO --w âiz_Ú%ƒo­þâc1 c:Ù*ò6÷ÊeSˆy»íkb| Ú€­b|ÖéMÌž|þ¿–ùæW „+—ÎÜ?f5Uýh9ÌûzJÕØŒJ…™-=.-ad&ð³¦Ó÷y·ÈèuF!sEÇlPìÞ­ øëœÛáàà»@ÓK‡ÞPk¾Bð#Æs -­ñ´šÚ™»Å0ò†Ÿƒò+ äîßé`WUˆ˜LÅ^UÁa®$a-9êªÖ裋 –SÀºø~ßáG œ­·ò°v æ‚­‰32ê¿1›×hKžºOÎü‡_µÿFloKñ—(çô¯€²¥\–àtÂ.߶\´åܾ2ùØÂcüB/ði½_½öCÀþcÈÈVÞeØívîÙ] -©—ªƒ`Æ1xxõÿ”Áendstream +1508 0 obj << +/Length 2207 +/Filter /FlateDecode +>> +stream +xÚµYOs¹¿ûSÌ!¨ +²þŽF{cmœÇ–ó»ÙÚlcfª€!̯¿ýk©%ÌÄK^*•ª¨iõ´º[­îŸd–PøÇ•’Ôp“h#‰¢L%ÓÕMaîÝ 2½(ÔkJý:¹¸¼:1Ĥ; ’`„J®“ÓÄ ÜäØæ3XOd|í ÝÙl»,ë”S[U8SûMâoJù2â(ic€2;+d,Ë¢ yX¡˜ãÒE¿Ÿ¬·!,[¬§ËÝÌóŠu]¶Ûå§ó:NAù¦„O eM;ÃyKbp& $€™ÿ¶M(L‹ê«Î0ÐZRI2e\ 1Jq/^ÇÌÞ ´×c#äÞM`=õ¢ÅVi*8Y|?¾ŽÚr@Cêíå*[£Z;7.òÀùš/wö-Ò%X¹}**…1ÝmqCöévd“†Ý×ò{mŠÎïÀg‚¡ZC‘¢ÙqŽbQYÜOcºÊ˜Òégfå*â>=…2_í6Hùˆôd +uó¹‹<¬·ÙåöôÓ–z“2¢u{½á/ë”1¯ÊõÔ©…Œb)É îgT3‘y惵k¤ÐÏCÛÖ~T…|>§ÿ0NŒQ²½ÿ@ 6‚pž¾¢ ¿£ +ñ‹cU‡v.Aòaߥ d{ïçIÊa’¥‰ÒNJ¤>"ÍœS)T(—œ”(Ác¾‡vÅ:øŸwNú2è¤rNqEdy +K'_W6(Ô ½«‡xÆåpÅ“ëJ>EŽ¦fïôãFuÏHÁúÒ@?€í ôÍU·'µéRP@e´Qq*œÂÃŒ”EwüAp\—¯Luðð8Fµ(wËJ>XämmU—[¸ù¼†ì'òP Ó£Z(8IÕáÌCûG8Nåj#õ\ÒuШª”ªóÐåPœí2õ-Á1]µpcåzKà•k”yZXW¸‰!âøkÇZà•Å8/«2¬Ž]4.x‚P(†Éa ¡Z90(ÿ…ù +™PQ‘*ç8‚y«ðíÄ·(Çœ¢þ YëªÆ}ÛÙê΃xŽÃÌvÔï"ÇÐÓ §páá:ëÌ·å +)ŸLŽpÉôÉ<9]6¯w[Û…5ä¯t0:?N +‰L á™É’ÆQý±ÃïÊŒ2Àï앦f=9`/oƒ½Re{¡Ô°©8Á¦“ÉíÏÃ¥Nù)òãФ‰nfçùnY÷êzÙ²rš.%;–~'Ž„¡­Áµ%ôè ÝóÃDÌD°Lº +ŽðÊÆ_†wJ¤o]ô<õ7Uœ‡!cj÷PÙ/;lì&¶¶iéÇY…L˜<µ[Ϭ+k¥Üz“Û +Îœ„ ÿÃ-/‹ÆŒ£X'ß#N`»Ã9:Z¡äëÇ ´Ç™Ô2©ÔÈ©À°õ¬úÆÕ§³ÃVóoouDIM—r ]O46ÖltÊ^Ô׃DcŒ¦ûÔNCb.´wyå˾¿\ þ©íº‚rò ÔÖ€…oÞ F¸öBH'?ñ¦v´Êi2§€Þ©ˆ¾±7ËEÕ†¶8É(?÷p´Ÿ°¸‹ßya[æU›EÚ}¦M󘽼‘‚ÉY´¹~Þ·­JØo8ÿ?åø¿Ø(¸S¨ü毷lØq}âD«T4œ+ @ÊÃjžv¦ÂÖù9•Ý6|ä*Œ(Y•;Ox +Në„ÓŽ7÷ñzùŒÔ .  2÷¹¿çx[¡›Oá „Ž|Ÿæk 889t~÷Ôvö{Ñë£&ý¯¡’„¥,nÁÔ-&ÒABªCÌÇÅÌ6€ôŒô£];›‚¬?µŽ wÁ +)I`ê$Nn™_vGëh(É›Mé®P^ãî‰K.›Ã%« +X*:räýÌ.ícî€Ê¾ÈUÓmñðJ‘c:¡+w˜–øF3€?û××cÒ¿wÁìG}qÒòjA_¤m¸·ú-¸êœà¤¡·OÚ`VØÁIxc=à0ú€#¾½Ù?Ž¥Šq䛓·7„¶WئG±w¸]„[-öO|x%Øœ\ÚBÐâû†Wì{ñWÃÃ^SÔ ʹ}üL¥ü<¥è2!íp}® Aòë5A¸»Ä3jÆ9@j#ÏÌà·¦úÅkòÿ÷Uã >cž ˆ_¼ÀìÑ'Gˆ_(N!»Ãó™¨#@ ÍÝÿô`h‰Û@Ã’?i†Õ®¢º±\{BcgFýT"htU¹â7Ȫηu.z›ðÕÇÿ€ÔÆ=:¦Â=:¢ªEXÄ!¹mU·¥Ž[ÅaOƒ‡FWãߺšÇœg®q Ùͱ¾ðá»'ŒÌ!^•vúË%2Ô42h .˜øžæ§£êÕ® +:l[>oʪpPïôb¨!òÌ褱?–’û c÷9 +5Šš¶¿qÐ=ìýῨ4®šˆ,ãÍg¨rÓìïÍ–á?yp‹z R Óÿ»„m‹endstream endobj -1474 0 obj << +1507 0 obj << /Type /Page -/Contents 1475 0 R -/Resources 1473 0 R +/Contents 1508 0 R +/Resources 1506 0 R /MediaBox [0 0 595.2756 841.8898] -/Parent 1441 0 R +/Parent 1484 0 R >> endobj -1476 0 obj << -/D [1474 0 R /XYZ 85.0394 794.5015 null] +1509 0 obj << +/D [1507 0 R /XYZ 56.6929 794.5015 null] >> endobj -1477 0 obj << -/D [1474 0 R /XYZ 85.0394 586.2823 null] +514 0 obj << +/D [1507 0 R /XYZ 56.6929 720.5366 null] >> endobj -1478 0 obj << -/D [1474 0 R /XYZ 85.0394 574.3272 null] +1510 0 obj << +/D [1507 0 R /XYZ 56.6929 694.4596 null] +>> endobj +518 0 obj << +/D [1507 0 R /XYZ 56.6929 472.8118 null] +>> endobj +1511 0 obj << +/D [1507 0 R /XYZ 56.6929 450.5356 null] >> endobj 522 0 obj << -/D [1474 0 R /XYZ 85.0394 166.8772 null] +/D [1507 0 R /XYZ 56.6929 369.5968 null] >> endobj -1304 0 obj << -/D [1474 0 R /XYZ 85.0394 140.1236 null] +1512 0 obj << +/D [1507 0 R /XYZ 56.6929 342.4358 null] >> endobj -1473 0 obj << -/Font << /F37 747 0 R /F21 658 0 R /F23 682 0 R /F39 863 0 R /F14 685 0 R >> +1513 0 obj << +/D [1507 0 R /XYZ 56.6929 134.5831 null] +>> endobj +1514 0 obj << +/D [1507 0 R /XYZ 56.6929 122.628 null] +>> endobj +1506 0 obj << +/Font << /F37 779 0 R /F41 910 0 R /F21 690 0 R /F23 714 0 R /F53 1002 0 R /F62 1035 0 R /F63 1038 0 R >> +/XObject << /Im2 1024 0 R >> /ProcSet [ /PDF /Text ] >> endobj -1481 0 obj << -/Length 1085 +1517 0 obj << +/Length 3616 /Filter /FlateDecode >> stream -xÚ¥VKoã6¾ûWè(ˇ(QÇlêl½(²mê^º»Ú¢m!zU”7ëþú9”‰EQg†Ãy~3‹(ü±Hf$+xåEJ$e2Ú43íàîýŒdRJ.µÞ­f?>ˆ<*H‘ñ,Zm/l)B•bѪügD9X ñŸó„K?,Š‰Tòøþç»_W‹'¼È‚ê»åãO()ð¸ÿøø°|ÿÇÓÝÜŸÚ t(«“Ïj·S"¥ü?V’ y]É€è®Z„m•"J¶ðͽú]=B滽+<;Ç$ŠËæD‚ƒ~¹g°÷èÔÎÓ†›kìÙº'Z3¾tÃ32ëãÄ0nLÅ¥PÇú,<ñµ«Ê`C{;Íf:à?´ûâœ?óÒ~c¿ýõÂsERFBP®z*}ùô-ô6ô0Å«Æendstream +xÚåZÝoÛ8Ï_á‡ç1_¥Çl7íe±›Ýk|ÀÝ>È– •%Ÿ%'uÿú›áúŠœ´×»§kPˆ¢È!9Ÿ¿ZÌ8ü‰Y0®b=3±fÁl½»à³øöþB¸1 ?hÑõÓòâ¯ï”™Å,e8[nz´"Æ£HÌ–éÇùÛ¿]ÿ±¼ùp¹Ÿ‡ìr„|þÓíÝÏÔÓãíïwïnßÿãÃõ¥ÑóåíïwÔýáæÝ͇›»·7—‹8Ž$Ì×= +nîý'¹™÷ËÛ·÷—Ÿ–¿\Ü,Ûô)¸ÂÝÿëâã'>Kᬿ\p¦â(˜=Á g"Žålw¡Å­”ï).î/þÞì}µS§˜¦¥b¡ Ôl!bÅ"ó²´‡e]S„†)#õhÙ…šÅI„œõ¨“„=I)˜R*˜™ f¡’ÊŠ¢ØÖÈ«zc ’ p ³ÜæõåB >O³z}ÈW™}óf›QõTfê+“ïÜŒF.E4ÏêêhëŒ>SﺲÏÔ-ÔTô\¹Ak•4YÊp¿°388nRÚ-^—'|<¯óò¡ÈÜ‘úÇ€µQ»#½™:4 ÂÀø“<­Š"9xº%ô xM«O»UUÔôé)o¶yIð¬Ï×ÄrãhOó\€" hÒ˜:O3"ŸÐщ>µ÷E²ÎRú¼:Y~,¤“‘ò…xªyÞd‡¤©ôö˜Ç ¬&Ôñ|yËyEýYC„oÜä’ž-µêØìͼÀÜSu¤Þ2ÃMÙŽ¨K²ÏºÉÏYÓÊQœ•KÄàäÚñ刂2¶{„Ç*Y®‹¤ÞÒT¡ûS‹ÂPº¹åqPôH(7ÉØ› &Cf„ŒFÄĘ˜~AÅ«¡×Ò¬kŠ/Ò°˜ó—h زKNÄjßäU™…{·Ï èrõdå#;¥AŸk=Rš]•ær.³CM yÚæë-6Áj·IùQ7©4ÀÒA-7µÕxßX5­v4¥Öê xedµQs»L‘ºeò´ÙR3)Ó)3_%5ª­ÿlòRÌ»}Ʀ3‡ ´ m#=ZcÁ«}K&Ä+ g<^Y6“,•{¢È6 Q\À$ÉAàBùn—¥9¸«Â­ü_8ž ƒ „c[jyÆRtÌè˜ÂK’zÊ 'TC. 4tsNÇý€Nð¯¬ô>^¡ˆ>}š ÃÚaà}àÃ7X‡âfþ]2%û’ìöEv5±¥0`BÁk§Òßzª…äWê*r1Sê… $PWNä2 +ÁÌ„ùfP™c—sÉñ©z–ƒ½Ör°{} æ0ÔFý¸âW|ÚZ@üV7ÎzÝó8œß¢"‡úŒV‚€‰¯"¹ ö»CìŒôʪ¡F²ª«âØXó ]xÄþ¾‘OI%cš7¿¸}{7u&«K3Z=y–h¹¤ð OcºäRE–A;‚bùÜ&Ó°^YÉ`¾®vû¤ÉWy‘7qh ‡éc–ŠÜªt?B”dRO9pa ‹â¸mSÁM(Hƒú§Âê&/ +¢ïÓˆ‡2ÿJ0'°NŸy™æ>úBâq¨†'_ÃlôED¢ç}ÞÐÃ:Ê>ƒÈ±qnpg€;ûÙ¦y +F4´µÁ÷Ðô3ÎfŽA¨™ Õ+‰cK)GLÊÒ¯&Ž÷{psÖ/ j— +ÚF¾ËMµ(òG×cã~PçG=d%"Foô³LÑ!„[7‘ì u»jêW%4ŽeOVyPŽ«Ì x›òÆ8—l m¢•W äA^R®Ý¨Ãe4?YÍ^OyÖ»Ly©b6 ‹ðH`¼§™ „­•G뤼 9zh¯äØqvpzN,Ï,t?¯î=5ú1Íüß*»ŒÀÛ˜×Ê$AÂ"Z¿(¤—ô=ðp,Pn¾í# ÔûÖ×rèŸÐra\ ‡ïŽuC#wI³ÞR§#&ç_«2›Òõv `‡Ôr‡¿r×ß³›ÿ3µí)ÄKo¥bñ‹eÅg$ýŒózË®ùšÞP€9/}Úg¯ªíuC:¶wIƒÍ2”ð™;|©J›ÇBW À°:XeÅH¿¦/]ò ý,?\Q÷Û»ëßn®¨÷ç¶ͯ¯&ëxðÏ…áÒ öîþÉõXòclî$ç·ó!ÛÍ8+9 ĹzMp:!;Bˈ KÜ·­çKû(¯Ã.iµK¼=†³yØíÈàIÞÕ:«koEu¾ƒ4íPœ\€sˆpîy!ôN÷c ëdЕÐ_«ÉãÃͨ&ÿŸÍòAŒJ–(2q¿–ÿ¬¦¯xÈ" Ðt¡CÉŒÂNÎjâ&DkÍ"¬#Ri=›öÛZõû›»›6‰^ÞL%¸À~®¢ólEˆÝ±›Lü©G4“61ë­è®RÜ"6“ƒgzÜí‡ãHžØ"yÖS™ ½€«¢¨‹MÚ)—@†ë†CbÄu[™?$OSPB ¶t•  êò9—×õ2fªwCÊ×Õ™ú`⶙ôÄÙíÕmõvD>¡Ç*/“é?Þ¥’°?)ŒF0wCÓ…Ò6…è]pþÅC1D1­n¥I“x㲠ĺ9v1Þ3m8­b~ÕÚ}X|öo»äð8áúòs÷Ïsš¢JÒ®7ï'ý=;¥RlLuÂØÖw–12†¤+;5F@óXÛtWù_µ@£Ìš§êð™^V§ÆuwµûJ·?Øx¬òÔÑ ´·ÞæMÖ†úEšÙJ}éV$P`GùCéÊØ‘fBæuG׃ZÎëÊß$'®'÷O[‰UtﻣUh!~ttZ¶ß÷U]ç+R2­Gd<È-ÈÐr]¼Õ.Þjoáy¬ý—¼t¿oѾ[ªí/‡ìöÛñŒ ¶>oßá]T°£«ÃØýø$ÂÍØ”ûêr:¼CÃ^úyK|FaÀ·°@ˆW5&äú™ÆQúÉM>ðs6ØKÇoìÄ_±÷î<›n?¶£µsÈd­ð««iCT6ºz +†¢ýеÏÀ¨­,¼Ÿµ=3ÿçé^çh[ÄÙC½Ö©õ’- x'ôÉ–æL†*rÉ–v©Vÿç{8¿”q.½ŠäǪŸ>†Âþn0IJ(Àjø_SoQÙ8ºÊ+ôÔuÛŸ—$0rá3VüÒBæ4sÔêìÑ] Ù‰˜7ÉÚ$PZM?¸>ËÉPÒO«,ñ5†êlªsQ ÀWÜÛ¨z!ݾJõÓœá@zÏËuqLýX€&F­«c ñ³¡½ªØ» h=emâñ|5 àé8"ê ¾©î7k ã.KJ0ïͱÖm{ÙÑÕ(¯ºŠîPTVA“QU ”Ë 8 ò€'!ϲ§áw¦–jøôPèšÑeqcs¡Ÿ[µð«Ær ì‹Mü +5¢Yh°d}ÛP3<œ®\-8DÏ(X)GÂ?Bå³W+œßú“×îGÀÚþòENW¾Ú +™ +ÒB¶GêY=QE,ˆd;ª·õR+§endstream endobj -1480 0 obj << +1516 0 obj << /Type /Page -/Contents 1481 0 R -/Resources 1479 0 R +/Contents 1517 0 R +/Resources 1515 0 R /MediaBox [0 0 595.2756 841.8898] -/Parent 1441 0 R +/Parent 1484 0 R >> endobj -1482 0 obj << -/D [1480 0 R /XYZ 56.6929 794.5015 null] ->> endobj -1479 0 obj << -/Font << /F37 747 0 R /F23 682 0 R /F21 658 0 R /F39 863 0 R >> -/ProcSet [ /PDF /Text ] ->> endobj -1485 0 obj << -/Length 1324 -/Filter /FlateDecode ->> -stream -xÚ•WKoã6¾çW99@Ĉ¤HIÍi7ÛmS,Š¢›žº=Ð2m ‘EUdÝbÿ{9R¶b!ÛÀ08¿΋]ÄöG™ 1Ï“Eš'DÄT,ŠýE¼ØÚµŸ.¨—I'"áÜNfV#Á3"2–.¢S÷7]°˜HÉÄâa3ê’iJ(gÙâaýçòn§š^·Wñ2½úëáÜ–4K)l‹­Š”ˆœånÃûû_? tŽÃg] mÙpvgê®\ëVõ¥¥F<šžHæñ¤ BrgM¹ŠhÇËwE¡»nDé[SáäSÙõ‰/r’K&=§„3)RØÏ™ßE³%`1ù%ñ»»Oéµeñl©œ¬Æuµ^ã4€íU_쬎0ýNõHÌ€D¡j$:í—†ÆcÖk$ê²x¬ÕÞ«Ú˜ºÜ ýpjÃÐi80‘R’ ÁÜËztèÑ V æ”YYQUež£Úôåæ0ã3!I’¤©¾žKH&äìïA·³XÂÆ”½*2õ Z–‰ü;p£âµ{]9hs#£òMöxó6fÒ¦›Hþ'äªRÅãÎTz)±‚Œ¾-.#¢J3µEî3ƒ:‰¾Uu·±u|®Š ’PyTåjJ÷A¼°Ñœ¤<Á"ÿ£+ë­•”¶,m© å¬ð´Ëy zƒãN=i¤¾Ä1«]G‘tYX?Òå±gžp5^>ïünW9NGh¨ÃËaÅÕév§‰;ˆäËç²ß™¡÷0ÕÐÛf¶ÏT#œÝãZÊZÖnqd¥}\¤vÃV#å«H³Áñþ7Oš†îȨݹí=´Á—e‡£ÂP%éI¨XNØ©­1k¿e­Õ\Q’å)õâ†Öáô·4÷íG$£P1é`Mhž–F¡Äû 8G¯“«HÒܶÓ}Ù»ÁóÍü|³£WL:[›T&tF¸:Сjû2Ób¡+ÄÝý¤ë]cŒK=Mwf Öº.U5 ØT:Ä]ÄÌg¸üÖ¾·•ëu«­*ë®™:§.™D ègÚ9—ËCUû¦ÒS›væ WRãM£ÛÊ_®ªi Ñý“‚çg—¢D+nnl¸b¸¢{$ `C`´(H@…­‘¼\™íÐÕºï.‘7PÏeU!µªLñˆäïïhN3œt*f¯®`Š ‹“4PÓ@µÚ9s}‚píõíJ¸yÂX˜ýÞÔàwž.l+ë°Ý˜ËL§ #I¦aËTE8K8/NÿuÂIjtœN÷»ÉnQ”¾˜³—ë9pìÿ†%AĶoâ·s~¢g:Rfkű(;Á¥2C¦¼õÃÔb<ä·Q ã$§qòƼ(lÓ.¶¹›ˆ»n*¶Ï‘ lœÈ¬¼«¡]ºtö+Ý~'.A_‹¾÷;:tdPÏø6ëWÓàƒô$Äay"GȬQglvö@:µ2˜þªI/Ÿ0oxÕ¨ã»ãqÌòWm -Ñ ç¼–Mÿ˜Ú«ºôØ*½|ÅÕþÍrhü¾½êìµ=kЦ ç¸ÜßœÂß¾%ª>LýÚùf?3d£ÌƒËtNùø»½‹$¼ƒ€V¸ &Ðä9M°&€1ÞŠ–Þ`£ßãlïC˜ u…wìT¤ °vʯ­´®QU¸!KûT£ËZ&°×eÍ–Ýʺ þÅã×eøf„W¢ýûþ "ÑQ?>'ÐXÚ4f⥶ñSö\Ý°Úáhendstream -endobj -1484 0 obj << -/Type /Page -/Contents 1485 0 R -/Resources 1483 0 R -/MediaBox [0 0 595.2756 841.8898] -/Parent 1489 0 R ->> endobj -1486 0 obj << -/D [1484 0 R /XYZ 85.0394 794.5015 null] +1518 0 obj << +/D [1516 0 R /XYZ 85.0394 794.5015 null] >> endobj 526 0 obj << -/D [1484 0 R /XYZ 85.0394 769.5949 null] +/D [1516 0 R /XYZ 85.0394 408.8853 null] >> endobj -1487 0 obj << -/D [1484 0 R /XYZ 85.0394 573.0962 null] +1344 0 obj << +/D [1516 0 R /XYZ 85.0394 384.5457 null] >> endobj 530 0 obj << -/D [1484 0 R /XYZ 85.0394 573.0962 null] +/D [1516 0 R /XYZ 85.0394 174.3152 null] >> endobj -1488 0 obj << -/D [1484 0 R /XYZ 85.0394 542.127 null] +1519 0 obj << +/D [1516 0 R /XYZ 85.0394 142.2096 null] >> endobj -1483 0 obj << -/Font << /F21 658 0 R /F23 682 0 R /F47 879 0 R /F39 863 0 R >> +1520 0 obj << +/D [1516 0 R /XYZ 85.0394 79.8825 null] +>> endobj +1521 0 obj << +/D [1516 0 R /XYZ 85.0394 67.9273 null] +>> endobj +1515 0 obj << +/Font << /F37 779 0 R /F21 690 0 R /F23 714 0 R /F14 717 0 R /F41 910 0 R >> /ProcSet [ /PDF /Text ] >> endobj -1492 0 obj << -/Length 3437 +1524 0 obj << +/Length 2855 /Filter /FlateDecode >> stream -xÚ¥Zm£Fþ>¿ÂßÎ#1ý4Ñé¤É¾\&íæv=º‹’|ÀÀØÜbpãüú«êªÆ`3™•¢ÕMÑTWw½=UXÌ|ø'fAè…±ŒgQ¬½ÀÁ,ÝÝø³ <ûçà9 7i1œõíêfù^E³Ø‹CÎVO^Æó³Uöó<ò¤wûëêûåûp8Wú^ °Ç9o¾ûôñãŠf8jãia$O»ÿðvŠSèI%4Ïùünõøðv‚• ”Va¿äý«wŸn2ðAÆ[Ø£?ÿöV°”˜.Ÿß½yüô°ú‰îÞ|üðùáí»O÷·‘ž¯à×¹y·êOjxšÂWxL¿Ýüü«?ËàP¿¿ñ=›`v„ßq,g»(/ÐJ9Jyóùæß=ÃÁSûê¤v„'Ê õÀ O¨'ˆ½PÁ#<‡÷uC›ÛÁ@˜yNwEõT7»¤+êŠ4èjºZ~åþÍíøÑÞr¬»<íˆpª¼Z›7Ïyƒçxç̦Ûæ¤==Ôž’‹Lì´wÿøù (/æl5£êÈ3±/xn’=mÝœˆ}Ò}Co1xc¡B8“(Žf 0D}õï—ú µ§µˆf‘žŽ@B«zúeæFÿ:ëƽ°¾AžÖ¿â‹«?uûo–Køë%‡6͛Ϋ› Œ—ûÃzɤ¥ÛÝòþ‡±?#Š=ß×^Vµ—âkFùr$ÿk*½Ø3mž‹žã+†cÇÌêk áùñÕ _X|?ëzÕ‘Z¯¹á²ÿ`“3¡=¥Áq¬€ïÀæ p‡—Dºèu»¾οmêší8©2Žyw(² ôg ‰jˆÉ>¢÷˜`þøáá¿8 -ÙZ´þXÏ‹Ž¨EKóöuÛë2'ªõ' 6·f~¨ˆÆ¡ -¨óN&ÜFŠÈCí'¤[rHðÈ)™Uèqä&çÕsAÓ«]^u´Æ/~àÚ¢Ú°`ÎWåðÔ…zF÷Á=µ‡oÂ1µ®ñdèÇ<ýéP¥vìd»èú„/¡†bOûRƒ -/Ê/í>O‹§“•I)ee‚œÿ"¥æ<0´ÄÈ÷ŒŒ\ Yt9ö4Åò±¬ë= -†¹"0óÕ•… ¥IEÏ·y¹§Q±ãØ÷œ¡=µ]¾£ùmžš¢;Ñ“5_÷e’ò&$k×rbÞÉyS-˜ßºþ‡wt2FBp”‘;iå>n‹tKfz,Ê’Fe±+ºs µƒ,Ù%7®+—žØÖG›qœOk·Í]Ñæ™MóhùÃz_Õ°¾¨m®x: $ZÌŸò¤;ô)GûdÇð€ä; pe1o)Á}ýD3Ø €bEÒnS@HÖEiÏØRkºö4\&Kòcœ0›„ïÕ¾)ž‹2ßÇØÝ Î6Äg‚ö=amˆ‚£`k;Д`dmûgþ–ãµIÈÑ}FC×+TŸÿç6–.g·‡Í&oY»´ÕŠ\ÕغÐÅi{¸3—Èy/Çmîfµ=ƒi_—QéA˜‘¯Où¸ðd$HèÞcß>J™pl<ßåÎ@”ˆ­ŽñjÝ ®ùïÉn_òC°Å ËxS“Qó–R'üŒ] ØÌ'™Ú—<kõûŠƒØé—=ón‚¡Vž/}Çoùœ4Ë*ÙMÆaP®4‘›z‡ŽÎû½¹±-_¯0/0ƽÞ/yMJÀ’ñE˜h_JaÙ#² ñÀ=¶éK†RÚŒ ¿7ÒäòÐ6˲N“r¹.*Þú"„¼ ->a¯ÀŽ ]¯ÎHÌz¹m‚UgB°)WeÎÔ+ØÒAÊ~‡éŒSÙtºÀBeý° -£9Aâ w¬e8ª¢OYL S -ñªÁ€¨>7^%YäŽGËëæ Q8Êîó¦<ѳ¢r’Є¤éŠôP&,iF\x[à‹S0@õ`×¹›ˆX -¬ÄôÁ*Á™ò ¸H¿/1 c¢x±Ð#‰5 ´á¤„£*GcÀ‘5n¸‚QÒà€ UGäópu`ö­m£¢JËC–·<òÆ©ÛRV…{v}`‡+¶ã%ÉŸ<´==Ïivîö2òdö7 ªq p­°²€ñÙÔ¤ç"?blž:bÀ1Pˈ¯‰!dö rq³àõãøå ÏÙ­M© ¿ø¾,s°3 °å' -U€ÏYÀˆT`_®éšdÿ;´ÝÅzÏIyÈÛ~5{:"Ä°ãã!¬Ô:Ôñ%Œ®'‚mÊÐX/[îDm§ [†.àbTœ ±§Î‡¶/²Ä”;^h‹—¤i}¨8p<¹ ©ål%"Ñâ"Y=V¼MÀ Ç¢Û’È“¦,ÿXÓò©h6 ¢%ÝÑÐ:‡E,§}Á²<9~ ¨ x¯AüX8ù«Éˆ#`NÔ§V4 EˆâŠò­20—™ä:¢©¸‡ïm—tCÉ«ºqðÑ.°Ü†€m‚ð"m -[(a„i|Ý$Ma Î d±‘Ÿ…´Û#Qœ' .ŠÍü»ú˜ &‚(¾Ï«Œà Ì·ˆÏô- ¤@xÙ©¶ñ±ßQ¡Czê.9Ñl>GcÁå -—V9aî{ó©6í¥ŒKH!Â%Üe–?/ÿÈ›z -!(/Šû¶ØTˆÑˆÊôU¾Bí2Äb”~™2+ëÍ }éGgàâjå \¬ î1ϼK tÅnÊMB7uö¦Ø”òD ‚¸þqŒf¹®±ðÇŽßséùg¸þØu3t#9Ü\_\»Tì{ -ïq©Ø9(6B(n·ÁzÓü#(&¤<´”€Éú.ˆº¾T&¸-¥Û¤ÚäŽn#¨¥C|ÌÛ–+&Û -â®Î -œ”º¦!žh³uU?œ a¤ôe¦hþ´À€Û‡òt[§´£¤ËP]í‡ë2×{ŸìµF³Î`?K'ц‚Šóà"ãžÄ ÊvÜ÷TÞ8–¸„rn2÷󛢣Bhª—¬àÔt,ƒ¯j& 8‰0Úd·ŒBL‡á˼è=xñнqÑøë? HÛm…úuÐs¸%€…°Zd2”¤ò¡Ô5òÕWˆ‡‰ù -þÊù»«.¬ôüHFPƒqHˆƒ°ôì·™ð|ÇŠ& Æv¯ç3°„åÃNÎÞÖ°£Ù`SŽñbÈÙn -bÏÀ‰  •Ö7°Œ‘†öTw$iGa„=¢°i‡£Àkèd¯bÁh1fÒå(0÷–®`­"ècRûDj†{,öí¤sÅoÉhý`wÔK(Xj‡ -µv°Îøøy”RcNÖ·’úTD€¯Pçec -å0ïH7MÞv,TÚå7¢F]å0¸uh¬ÍþÑÓ€pþ2ó×¼sìRP§ë³KZÕnžôÑHcÅyNq–{{S*R --û,ér׬æ¾ã«íê{ðJ(î7¸¾ªóÌñGêùãø)I9ðâ]»­eFã5¿ -e—<Ãö"Q[ pU[s#µÌøÂ0ã#ÌxeÀ< -žUåiªCw´€-V\×èyVóý–ª)°wÛÒ:i© -RßcíJ)5ø‘I–Fmù%*º”›©çÛšÊ&E˜4ÿ *&†•Ãitrwì_,dYôS5µê^XzqRÖB/ë¨s ¨LoŠÿ-åð߉n›­y±ƒÅol¯ VõdjLÇþà²9·Ë• -¸]Žä]ÞmëŒÅ`hœýHpt(åó³Œvv[Ó÷`¬ \Ñ•¤¸_•ËȘéÇoñtl¡¤_˜^¬Q›Ã2¶‘d;&tCÂÂ`|²@°VŽèÒ–É3Oí? `ÇŠv¤ÀÞò?"·D€á‘Ê;.Â\û‚7´ûeL‰³H»ê±fÊðSêiS˜‘8-v¶¹rÒu¨ÛŒ®™ÚöÕ`àÜûÇ•2ƒ4HµÔƒñ½×W„I"ãÙïCDÁ9ôß¼þždïÆç&¾ÃÿÆïÆ/îÎGišÈáÅÏï>/oYK{ Yb›_Ü\_}üé·[ÛÁÍ5‹o/¯.o/¯/.Ïÿÿrv9î&àOR„ +­ÿ|öûŸá`sýå, TšÄƒGx ‘¦r°8‹bÄ‘RNRžÝýÚuèÕRÓ>§E± ´Œô`¤¢ ñ_7¬L¨ûG #©‚T„Ñó]q»º²En¡öºÅ&ÐB€qFÅ‘"í–T*oI5´NŒ°KjXm\ÒÕ´^Õƒõzþy7m³ïtš Öq4ðGø>£»._°Z hLwÌÏs°Ø¤Ãj½˜ä+,'ÃúžeÅvNðöáúŽ«Wç"º RÕ}½Â™âb¤q,©ó<›ÎÙ7Ÿ.n>\ ˜S*Nè ¸$Œ¶0üK; *Õ)Q ¾„/ RjX(íAå¯ë|UäG@é p2P5z Jßj¥2ª%–”øÜ‚ß>Û)Ñ Â +¼@ÞÚ$Ú>-ó#`<™~0Bx%:Ž¿aF®Ås`Ô&D”¾Æò=¤{tþͺ}¨_E¿ÿï3y‹Åã6o±èMPŒBÑAËEzv3ŠB¹…"V±p Š±ÔE.5yÕbÉ ï)ÃÖ «1ÏY\Tm¾ª²’Åœ…›ºÜ€Y°å»£0Ñøwà/Ÿ±×—”â¡°)òÇóTŸ‚Ó-Àß8%ë8 ’ˆ»|> +´ÖJxݯ³Enù^¾Ú¸å¸k³¶hÚbz$ ¼¡N•œ›ß„o¿géH)=œÖk„¥}Ë&\ôò´Ò>g苆%#~š7 49Ê“9áå)Ù+,_+½ÊH¡QìÿÿÖ•E%eŒ¼Êªiþzhzž šG'±…¦?‹lêljÁ‡Œž3F¦6ï4uTXÐÔG}øôüQC…aêªá÷fíHnf%_;g¶«¬jîÁ‚#ˆ>™ïþÆd#NC8²˜—-L`t¤xu[ãkAìq*ÂqÜî-ˆ}Ã}G:ò@éØ%X¬¨h'AaGÖˆË>˜F²@ Œ€ÜŒOÉÔ‚ŽZàÛ!µêQj莿È0Nçñú‘ šo˜‘kñ,ô1ÁE‰<ý8A†Œ   œ6}xoï#n›üÈm„?È÷Ùíaÿ¨áöw,g¶ àëض0̶Afç@å%W&D£Q‰i4JþãpY7½@-Úbƒjq<$~CÁŽ€Rh&¸&«f¶ +òøEâåXƒ×ô…WÓÖ3_IÄñOŽ/(LyI°8ËÚl’5pþ„³±ôz/ú†h:ÙþÑ$%P=# 0¤(ÐR%þ…âÁÅ¢4I%Jî ™†²^عKÏ(Mƒ0UŒºwàb8¿5ë ŒËt§7ËÖAÒ±u,{)ß ûœÖe™O[J…И€D=ÏëÇŠ‹Kׇ% P¢£"çQ hJÀ¡¦Þ°óÌŽÓÕfëv^¯Šö©;óœöpð\ M Lƒ6*¡£fgwÜO1à2­­:Í4Cv2œš›D‰ÜqG®ÉSÞ×+,Rªdbu Ä„“Û|Ã8Û]k™Ã9Uë]Ðz,Ú9 ÁEÅj—Ž¹EURHóÑy$ ”HÕ®?Ú¾›Úܦ½Ö¬Ö%Ú½-!Üš ¼qQ´­Û%yÍýfù}¶.Ûžh§u%wuW¶®_¥=_àËt½âת-ŸP#<Ö\·nè*MÛÝþ>›Ò½¼·5«>àªRŸS<‰ù•’XØ. ò‚Ho*[S4®;´k²,3–A7ù;’¬÷48[/–ä)ÐðR§ÖQó{(K[n–ù´@k§ÃÉ“mÚ‡ÐþFh‡ýíDF¶ÓCœÆi UêZLë +5Ö|à±ê%–Â@Åø>,©Û9Å-(PÐhwo¾¨Û¼|b%ös1á¡!‹ 8hÇz×›"íVr74@ÌùúG¶§EäÒ7›FŸÚ$¤Ê}k„ F;æìGÖ VöFùØÈáêÁ"´3+ )VÆÝ×DØBÏG" C‹ÀÝ3½_½iƒ.y„03Q Úd…ÊYp¯S U.Mò‡Â‰] ³ð(à¼uÅÿåÿì™[—å²ãÍ›7ýÓøÐØ© nR£Lš¤Qê¹Nõuï}÷’³ýÄÎ[!°ËÌ%QÜ[iŸ?ÀÕÌÞ%p«ßªâ l¥O¥í¹-`#h³Å&®¤.ò¬Yoi"´Èl—M¡1s/]5`ñ—¬Zg«'VoûR¥HMˆ©'ÔÃ+`õ#_°G˜|iÍTJÎçÅ*<3Vá]Þ‰îÀsguA¡¨p£Ó)`q£-Mñú›BFx"ò•b?²W!P1˛骘ÇÔ›<àÉ]\Œ[.í‡àÉAÅê/^ÂZ|½Œ£KþÄ)Œg·À›§ª)øó¨=Áà nÐb©Ü·Q‚.xáð(C(Ìîjˆî:‹+7Y¹¶z÷´ðäcТ-¤…yG{|áYöãÝ6†n¡m zË¡k,ËY@–m²¢Ì&¥UqÔÌ6½rjÆúé©bˆ7ÂgrÚ8”‚ú<Ûä,ËXàf¨­AZ…ŽW¬ª[–:¨5o=Ú¸=p¢ûIŒ÷ çÈFo²Ó*mâÚœCdŒP”1ó‘ÆÆŠ=Úækt H2S@Y1ƒÜSLé>F2BqëŒÙiñYíô™pØ¢zf&ýk†æ_ O•ÇCˆò‡”æ¥Ä¼Õy.3ã6j-¢TÄ*Þþ8Æmfûc\8ð¼nS +W%xÈeF”´ˆ]ú`dv½Xd˜¸¸jg••Øùº!-XQο¾AYÊûc+‡Ç1ªp¨£+=²˜>h+G¬;»Þö%EÖèòûvQ7h†@óÊõ¢âÂŽp¤*³IžÁ3–7O‹I]²2ß!b‰¬ÂÍQtG.{¥ÂÏ°’;iìH°±†ÃLª\Ÿ¯Ôw›EǬCKùÌ”Z …ÌVÿ<bÉNOPc¹,f$•8J“WÅÃÜz´ä@|}(6¹µÄ6ÂÓ%§4þ½ŒcºÛ‡®£¬gºMÓX ÚYÙÔ,q™ËÞÌîtµ35#¶|ÙHŠ®Éº¥!´×´°º³zºF¢nmXÖtÖxâJ»Bƒ¦D¿ôÁnQψÒOí¢¨ØýÈ +“¼¥ÝË €l–MŠò=F:E:|7›ؘrhBº¦Øƒâ"{â{‚ûä§N3–vxž–ü8Œ ‡ÿ¡suÖ·V‹b6#¯IÓ –é~¯á2Ìç1§Óto¬> · i‡h-Z–:ظ/õ¬iá͈ïì$v8æ}æ Òîn.½c²KÏ,’}nÙOqoyÑrY®1){~ÜbO;*"Å?mÙ?³„]NþîŸzg0§šç.»K;¶Šç˜.Â@*-–gúÿ)%¦endstream endobj -1491 0 obj << +1523 0 obj << /Type /Page -/Contents 1492 0 R -/Resources 1490 0 R +/Contents 1524 0 R +/Resources 1522 0 R /MediaBox [0 0 595.2756 841.8898] -/Parent 1489 0 R -/Annots [ 1497 0 R ] +/Parent 1484 0 R +/Annots [ 1526 0 R ] >> endobj -1497 0 obj << +1526 0 obj << /Type /Annot -/Border[0 0 0]/H/I/C[0 1 1] -/Rect [63.4454 738.9144 452.088 749.0762] -/Subtype/Link/A<> +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [55.6967 418.2465 116.8967 429.6386] +/Subtype /Link +/A << /S /GoTo /D (statschannels) >> >> endobj -1493 0 obj << -/D [1491 0 R /XYZ 56.6929 794.5015 null] +1525 0 obj << +/D [1523 0 R /XYZ 56.6929 794.5015 null] >> endobj 534 0 obj << -/D [1491 0 R /XYZ 56.6929 723.0302 null] +/D [1523 0 R /XYZ 56.6929 404.633 null] >> endobj -1498 0 obj << -/D [1491 0 R /XYZ 56.6929 689.3491 null] +1237 0 obj << +/D [1523 0 R /XYZ 56.6929 381.6542 null] >> endobj 538 0 obj << -/D [1491 0 R /XYZ 56.6929 552.677 null] ->> endobj -1499 0 obj << -/D [1491 0 R /XYZ 56.6929 525.9649 null] ->> endobj -542 0 obj << -/D [1491 0 R /XYZ 56.6929 411.5673 null] ->> endobj -1500 0 obj << -/D [1491 0 R /XYZ 56.6929 383.9327 null] ->> endobj -546 0 obj << -/D [1491 0 R /XYZ 56.6929 225.6356 null] +/D [1523 0 R /XYZ 56.6929 179.3483 null] >> endobj -1245 0 obj << -/D [1491 0 R /XYZ 56.6929 193.4614 null] +1527 0 obj << +/D [1523 0 R /XYZ 56.6929 154.7696 null] >> endobj -1490 0 obj << -/Font << /F37 747 0 R /F67 1496 0 R /F23 682 0 R /F47 879 0 R /F11 1303 0 R /F39 863 0 R /F21 658 0 R /F53 962 0 R /F48 885 0 R /F62 995 0 R /F63 998 0 R >> -/XObject << /Im2 984 0 R >> +1522 0 obj << +/Font << /F37 779 0 R /F23 714 0 R /F21 690 0 R /F48 925 0 R >> /ProcSet [ /PDF /Text ] >> endobj -1503 0 obj << -/Length 533 -/Filter /FlateDecode ->> -stream -xÚ¥TM›0½ó+|©¸6Æ`³IÚ²RÓ4a«ÕxT‚Ó@6Úýõµ3·¶ôTEóÆoÞ|x€"b~ Ž “1JeŒ9¡•[ µ9ûêQÇ Ï¤ð–u—{Ÿ¿°I,“(AùË–ÀDŠòêÉÍóé"#Nü!Oˆ—Í&à‘ðXNÇ‹,4þ1[f“éb¤±Ÿga,ˆ0ñÌ)Lg£ïÙøó P§Ôžó{oš_¹m–f»øí==T™žï=‚™ ˜J¡­s†yÌØÙÓxKïçEðæô:4<Îæ"J¦±¡éq‰fŽìô–z«lO‰ßÕ½êÀ,7ZwÎÝkûäþ/¥và)šŒê­-¶uið[xØUE¯*8˜ØyžE_€U· ã`wXUz[€×H¶.²RZ!—{Sô7üÐŽÛôRŠ%çÑ©'ÂTÊä)…Ú{2è]·ÊÜ,#‰Ÿoê˜Çâ- ”úŸ Œ‰I§Àßë]بWÕ\cÁ*uÛ›|u»vx_÷v溵¹å¬Â¥rÚÂÏæî ªö¾ê:å8úe¨ÁÝaÕÔ%ìÝQ­Àp#¶ý¬Ní_Õ¾Ð*å­î]HÓè#˜îâÀÍ9Ε‹ÿµÛŒc»›hþ®îÿÞûë!6¯¤ÑðJ›ëÄ"’é¹(;/‘~¬üò‚ü]úÑqÏendstream +1530 0 obj << +/Length 2809 +/Filter /FlateDecode +>> +stream +xÚÍ[[oÛ8~ϯ𣠌¹¼_ö­m’n3I㸃bgæAµ•ÖGr%9iö×ï¡HÉ´-[vâF’¦HêðãwnCzþ‘ž3Ã{Êp$0½ñÃî}gïψï3¨; Â^oGgÿºdªg‘TöF÷Á\a­Io4ù3z÷Ÿ7FÃþ€ +IÔ‰£·W×ç®Å¸âÝÍõåÕûÃ7}Å£ÑÕ͵k^\^ /®ß]ôÆh +ãy0ƒ{7²ƒüÈ»ÑÕ»»þߣ_Ï.FÍÂE̬ôßÎþü÷&°Ö_Ï0bF‹ÞüÀˆC{g\0$8cuËììî춙0xZ mM0„¦ª5JÚPIFY…š](A¤? ãè:~HüZ“ü1É}½ŒËiQNÇ…Ç0[¤e’ë«7v£§8«½Ïâ’®®ýEƒjpo@2BÐíïwã0Lå«õˆÕ©n=E5"L\4ª’ô#HQê¸x÷üð9›õ’Z1H{$};£œFçI1Χórš¥ëH +ÆáLöü»åëcQæP† Áü€)ݶ Ì¥ðMÖ5øƒ”T<ÃäÛ")ÊGÞpÅx4¼µÀ@ $Ú™¯¸sõÁuçQÞ':r3Õ¾eœL“ ¨­Ñ$ºÎÊäßý:*¿N}¿xVdnŽ±¥páê©Ã?¤Ž}!¼ vÛ¾mß«‡×»¾Wìh{%5 %ÜìÞ+iÒBÊ•Í’‡m–üI›E^¶Y!ÇÚ¬c)5b¨ŽÍR0 —¬Þ¬‹IZàî-6›bA{š–_]íâüúî/,0†ÿHˆh½c[ ¤=–©::¢@Ã\t +ÒBjœÞÆ‹Ê}BHNñÅØ.Òb1Ÿgy™L–`»8ÛÂ:‚Cw‹‘' 8çˆsÃ;çDZÆÜŒî®Þ¿äjô!0"ž,ŒŒ"±ÃÅ«¡7ô÷ð¯00úev õdñ¤ Öå)„ÆTÈÀ ¼Š˜Óô1žM½æ[h—LÍòMÌ—¸Ó/i\.ü;€w‹"' <¶¹J'ò„"¢°h »6S:ö…ˆìÏÎ]¨Æ¬Çñ8õTဘ¤º+BÀQ"\„ðfQ~½ÍŸ‡É?†h.¢áÇ=:;*˧6|L– N×<ÖœØc²d® Ë¦É +ìÿ$ãrìá’NvÍ‘T¬#ŒZ#*qFŒkÔ¹ Pß'ŽÖ¾Î@ÔãÂIŽ§¢HÝ$%ó6áÓ}^A)Ddß.‡ÝXþ7K=Œe§Å}}º±Í>t"H}²D•’nÖ7ÉãÆÅ 瓸LQ%e€.´t£{þœÆÓ±s«9^ o úÉ q«·v£+(ÌÏë0¢˜giØ€`ÑÝ›´ØÇ +¸A¿"I˸-e:Y}‡8U ÚŽgF4Œªü+_¤ãØ&PÝ@ßX²é¨°ï@iO–ˆªj£:âA5âš³Q›~âƒù·ó¬ Ë@ΓÅ‚OH_ºœ;‘HA–ìÜ37Øå2è@0îdõâM£U—?Ç èTòo¶ºÀÍtµÈ@ÈcÉÒÂîzD;ö둲C­¹¡HíÜ7™w‹ñ8)öð+·u8ÉŒ©íâbVYJŽm¾êžÄ®(Ü´÷‹™oN‹'ˆ¡;º¹£[ùÄί­Ÿ©—_«¨€-ÏkYôôu:®öz ÓM ÷,vÅõÍÅpx3t?Bîgð$€þeÛáð,‰‹„*ªb@[ñÒC]FÃ!rn¶6Îòå{&¾±Ì| «pà†ÛA!_ÄDPn±uMÏlÆî«š?¸wåÜIñ8ÍÅÊAa±Ú/øιò!^ÇÏg}9'«’ëË9GÊø¿@y›žîJÝnfP5åÝ+ãÍt7¤ûV€áOÕ½qj’uÌ(Òеø:‹=Ä +¢»ëø˜x7ç/>XÔq?“ïÓDz,Ù;ÅHkÕØòayjÏ1术!m[*cÞ<ñ“V-+v\V[AÎ7¬`›EÏ|NÝnœRxóí‹ì·ô‚)\nƱ¾þ1`©‡è~=¢/LwXB¨y£¨ßó¼HÊC4“ªuÍ„–J3¡\ºÞe·&ƒ&ï{¡–f®„Ô?FmTq¼"f“WU£eRU¶2  GL4Þ5ݺLØa®Yg’Ù2Ä–«L²-öª 4 *±Äf| öz%Šx)ÕÂ}|1~œS€¨²Ñá˜$RðÆ)Ü] ­ÙøãÒÊ¿¹ú  Ð|Ãe<Í5Ø—Àôð{÷êê·@‹8ÕÔˆqIî8cÜ "dã.o†¿ƒZ@¤|/òühøú¹wÀˆ|ªW%H +ÓqǘBÙØÊOç7¿¿¹ºPá +¿ñ³„­ûYâý,<©çFî§÷©PÛÌ,Heû¶dK-–ЃkÙÂIöOÓÁ¹FœjúÓ|j¸ §êT©8ð.CG¢†°eV}†Éª½µgâ—O“Û©âÓÜŠñ¢p|a.#¶•Â_¸¬3WΓü>ËB®Õ‚´Ð¥¢3öc2ôœT“qì&ƒæ¿0¦éÄ·Uo­]$ˆ×"AUgô¶ß&kÝÌ/dm®c¶ŒùO£mH‰cùgaRâM¨Gl¡-•Ý Rá6Û8_ÌgÓqõ%†Q&¢!4B[*Ms:Uwx•šª¶—eò0w^ÅöÉ\¹$«óyQºÊdZ Úh3Î|掟$°Ñ•Éw{÷8ýâ~Ùƒ£>‰žÝ/}ÚZ%œ­Õf[»úà'šLÙØäRÈ“ÅVRvœXÏ€ã+@ó"¹ò{_(9OKû7ˆ„t|ç°¸i4  ÷;7ÜzÓ,ÀÐ7À|»Ðt’žôeM‘²#ïÓÒ®‡`îg,[Üß<’*x +#‰IGÔ¡8"Z™‰/¥a±í±^‹œF¦ÑꘌHÍÚþ<÷:aÝ÷‘—žÍbZ~gå ) ™=&±sY´´Ø„ÃÿÕ²ïˆþr[NRendstream endobj -1502 0 obj << +1529 0 obj << /Type /Page -/Contents 1503 0 R -/Resources 1501 0 R +/Contents 1530 0 R +/Resources 1528 0 R /MediaBox [0 0 595.2756 841.8898] -/Parent 1489 0 R +/Parent 1535 0 R >> endobj -1504 0 obj << -/D [1502 0 R /XYZ 85.0394 794.5015 null] +1531 0 obj << +/D [1529 0 R /XYZ 85.0394 794.5015 null] >> endobj -1501 0 obj << -/Font << /F37 747 0 R /F23 682 0 R >> -/ProcSet [ /PDF /Text ] +542 0 obj << +/D [1529 0 R /XYZ 85.0394 769.5949 null] >> endobj -1507 0 obj << -/Length 69 -/Filter /FlateDecode ->> -stream -xÚ3T0BCS3=3K#KsK=SCS…ä\.…t œ;—!T‰©±ž©‰±1ƒEV.­knj©g`fA‚!ÂVŒendstream -endobj -1506 0 obj << -/Type /Page -/Contents 1507 0 R -/Resources 1505 0 R -/MediaBox [0 0 595.2756 841.8898] -/Parent 1489 0 R +1532 0 obj << +/D [1529 0 R /XYZ 85.0394 752.4444 null] >> endobj -1508 0 obj << -/D [1506 0 R /XYZ 56.6929 794.5015 null] +1533 0 obj << +/D [1529 0 R /XYZ 85.0394 752.4444 null] >> endobj -1505 0 obj << -/ProcSet [ /PDF ] +1534 0 obj << +/D [1529 0 R /XYZ 85.0394 740.4892 null] >> endobj -1511 0 obj << -/Length 1964 +1528 0 obj << +/Font << /F37 779 0 R /F21 690 0 R /F39 873 0 R /F23 714 0 R >> +/ProcSet [ /PDF /Text ] +>> endobj +1538 0 obj << +/Length 2152 /Filter /FlateDecode >> stream -xÚ¥X[ë¶~?¿ÂoѱV”D]Ò¢i³§I¶EÒ g¢íé-imõH¢#Rv7¿¾3œ¡,ÛJS »&çÎá7äˆbÁ¿Ø2Œ’2ÝäeÊHÈMÕ¿‹6{à}óN°L*“P¦I“îV&E(‹8ßl—F¾zy÷øu,6qfY,7/¯³¯,/Â2IËÍKýàé Ž¶¶±Œ‚âáŸ/"µ4Ì‹\ Z.d˜—Qá^„Á¨§]טƒÖ¶ö³šHÃ$ÍbVË’0Ï"òS„âa+¢( -žtßëþ0j0Ó›‹–Rz Ÿ‹Â˜M<ÛϤ ´¥ÁYŸ šßÐì Ï4¨{{¦ŸQ隣¡™ž¼öA]™=zØÉ‘%›2,³8ãÀ =e*RJÈ,%©v±42º›l‹‹Ä™Õ3õ„Ér“va¨®SI5Ô4¨ôÀQ.¸­1ScüøÚ¶UŸ8Šãø Š 95ƒÝSûF™‰8¬¹{Ã¥ábæœÃbLc݆nã<¦#þfA§÷û™ˆquh9»æU“ÕÄ‚å2¢„°ÞNÎêS[³˜"ºÑ`ÅdýJôC;Xvçòƒ´v¿=ç96X´Û0Ø5× n“ijÚ_LÝn+à¤ÓÃÂ…ïÒS -i ·¥Ý3éÀ–yíˆùðŠ&Â8K<æcø¡›‚hïCû™<»úÐŒ­êhüýÔï Æס\@•‰ó÷w= vVXƃÓÆ-ÈÊ@͉ο&DüL|Œãœ¤!š7¢±Þð+Ôʲb@4@™ þ@ŒN³¬CX;6úØÍ2\ô<Ò스‡yÑ· g°È”}sɘ†€G€"6ù93À͵úFtür²e€h$Òßàï»ïÞ¿ÿñÇ©*e§^[ú¤ïÜvzW¿ ×}kì…{½^¬0‘p‘ÒyE?°)e™í0‹Óàu² |d ‡Æ‹o<ÐĪôHÒÕßO'2ŸëaÍžÑ_5±¹Á’FŠ ÈœŒðiÍZ W -ŠØmT¹,(¾ÊÞñ‰}q´€¨\Â&|&d¾vKÈTÝVŒÐhÆKI›S?s@Õ+6¸k0mHšŽµÇrRϯÄ'¨›CZÙN,HÉÀk™ôjY`:ujˆN^®5ôÛé³'A´é°²\¤A®xYöÊ`3§Áçs³‰uÿŒ`°¡¬mú£]­7>)34n-_³•>¾ñ±ûzs„ašÃÙ`M t9hðÃ|K>xÌ«,«DM¿Š~|ª`x‘â\,Íq.¼éÓlŽò{½$çF.ÝÁÌJö¢´VËlo>ͱýãÓh®o›ÿ+Ÿtc‹lѸÄ"'ÛCv0 -ýf3GÕ51b‘æi‘diNŒ‘Œâ±ˆ±0·"ð0àâÄßZÕ7’\sÂw"ó‡&0ÍåþF—?$cRÍZº”í(õåŠ:éH^04g¢°û(½À ÙWáÓ7˜¿S,[>°úŒ¹…;î3`ô¦'bÕÀ¤Ö^ ïöEy˜]¹œ­Þv‹íçÞa¯Úák@n@þzh|ÇütÓOÓ0J¿mºã—¿ÞeÚâš(°ÁiÇEðá êÍâÀz҃ѣm§žæˆ§çOŒ$ ¸aѯt ÇtéùL]%ŒFèŠâ¹Bˆ%Ç#¥ e/v­Î©­XKí)™®×âX°Åu’_=ÿ~-ÃÔ¶GYðþÛ§päÏH—@ -­è×ØÚ:‰óÎÐÃBYn?z·XdÌqâd¾©Üä¤ÚNí:ørðï»QÕaáƒL·CÕMucVìâªV.Wª4 Û8Hü»Uoy)”@»Zìo+B)ˆ×­©ôD9ƒ©;B.ÊõTyåvÂ)Î6™îZds§¡ÁÓÏMí­µ°r=¶öä&vÓž®é^/yr€¡¶¯ÓP;«y Â1{9B€FãŸà{ËוÂM>p\×-ž‘7>å èWˆÌ¨WKÐÆ 5m"û¿À¥–€ã6WUŸÔž9ZØוå,¶VHbžþ‹'¯´=Í\¦pÀŸ'8TÃ[WyÌ#‰6Éyè5µÒÇî:4 ßál 3,•ßbÏ[œ+ªë/WF".ƒ›ËÊ?@”€/jŒu“1Ô¢+l',{_¼2ãâ•sä®ÏñÛªÊ ¿&–Bú–åç !G˜ -¥Ìrcø-Š¼ûãËü -“¤%œ¡i±Iæ² —â~ÚøÑŸ/¯6³Âv¡ám’rá÷Î.zïá°ú‹EØûÛxà8KQ”×ñܼÍBw1\­ýÎÆð»•s^ÀÍQŠ’säjMkç/Ú,ÜÚmR¡ÈEzís³ã¾‡êÁaWvEÊPæâ—öD¤p}ÉqQüë›2kl—*÷»roÙõÖ¿x|<ŸÏ!ïÊ£/ËGFßãn²pÇ71ÞlÔ,u×U>î­ý·­Â·ÀèªA§jW\†=?í„·Aû‡ÄD†ø,¹±Ù^dèEr\Ca—¹7ä:ŽòÖÛü¾yïî?ÃŒûendstream +xÚÝ›[sÚÈ€ßùz„ªÃœ¹_²l%8vOêìîƒäX»XØH8å¿=Œ„ÆHÕ‰+ †éQ뛞 †? ‰¤¡&R†#‰ˆæw}…ïÞwHÙ§_uêû½ÞÍ:ÿ2d$•ÑìÆK#¬5‰f‹ßºqÔƒp÷Ýh|ez}*pw:ë)Þ½°/³Ñt6ºœöúÆhÚ½üéâÓl0q½¤'èZJñËëñpôþ—I9ÀõØ5OÃÁd0¾ôþ˜ýÜÌvà_$ÁÌjÿÐùí-àZî`ÄŒÑ7ø€1†Fw.œ±ªeÙ™v>ïô¾ÝŠ¾s ¬€LŸiÄ…ÐûOëNá´å!!Èñò¬}Ib FTpE˜ µ›J¼y®Ò¨H ƒ$£l;¿Ü/â"y/>­“uò`óĈ6 °áp.+põ”ÅwéÜ¡Ýl¥s÷aÝ#º›ü•Ì‹dáZ›Ä+÷~ïú¸×‡Mš§EÙã&N—׎^ÍæHE"ÿúNCÆ9CX2õë© +Î=ÈpIŸOýw UjP"‘â0%}jÂZùóÊr¨ƒÑ`]}E2L‹·ç¹2kxAšb¾[oÑ^Ÿ`Œ»ÿ]e%÷qšIgó²aZÄEš鼜ÕËÕ:¬ó—“¦„¼DR1ª™c20~…kÆðm©Jõ«I>Ù,vÕ—°¨`ÔK‰MS¡")92ÖuXÄÓ§»?WË^_rC»WI>_§÷EºÊ^’Fœ+]Ÿã4½-!¾õÇ à1¹ÏÚv(µã8ï>^éÍÓõ¦xäoxp·JpU:”Ñ'è´5µ ¤~ǘV%O²í§ç©ÕfzÌêËX€ÇÈÀ¿ôä1ôäwÑóÔ:/=rVzàé¸Ð4@Ü'†ÀêÑe'™ž‹Dó$}L zÚµÙ ¤%8dDAvfäs†§à‘ kåÚŒÈì”0ÄƹÇp’üF˜ÍWwiöõF—VÀè)Øâõ,l2i¨:ÌQ†ˆ2eX½¾hH@ÄOò<ȯ.)ë8Ëo’õ+†U±#&‹ƒD=UÛlï,CÁúsÃHEt§Ë3â´•³ƒ,=%ÏÅòø¢Ù¨øÎL¼&e3õ¹H×Í8§ˆ õÊf¬,›M’|µ|¬¦âØJYUžå²ZfÔÿ¦ÖxÎ2Ù®àÌ¡Ñ\¼]%« +Îœ€i+B^WÉl _—4ËvFùÁêÙ®ìŸû\ÅàóbIºÏæv„0…"\ºùrî'Ê…²;~[|—åëàNÙw}å΋œ¡Vˆ*N#dCÈÀÊC(#”Íz浯 +Áó1bÁQ,\Ú ®î~•å‰µ*Ž¥êN&MŒÐ…)7Ä1å šg­i‹qJ†à¿ð”†)ï¿ìxÊf<å©<=U[ T@Ò‰aÇs¨àÈá"óøËÕõÇ‹Ñ"ã¢;Ïa µP‚N7Õr‚ ’LÁD€ Õ€ã2&öFù¯ÃžÝ‹Ñ0L¡yw²'?}ÒJƒHÛ[öVºROÙ#¥AÝŒ„5w¡{x=ù8€•Ýç[›Öë0ÉP€žj- Á $°¢Æîëâ6YµÕÚZ#!ÝÉQ·b`²Þ"\­›¹I§jÛÃ8fHèPØÁ +Å]\§ø¸m»þŽÆðBê<èéÕóùŒµ‚ç¢È¤u¢‰«¨$öQ¤R!EiÀUR#%ÆEïi~ó[0J# v_mîßž”V/CxÝTÙ&ì1)îþç6ÉÜ·ùíê[yø˜Æî Þî‡üÍœ=ÑO³Ù'ˆƒZvsoOj?Ïoã,K–ÿi»¸M«v·WuªÆò„Û¦òÖÕó–÷÷ã»êq‘d½wCœ'óíÎЪìõ§»êÇ´xêXáû­ÉŸ¨ÓæþG.J*RRÂ1Á\˜˜m/|½Éæ±}V*hH³ž±ŽLw+‰ÓrB_ãö:; +ckBуreOá¢Ç‡­Y*lãÆö8HöÃÎÉ2ù[{mÆÒÓ²½[h +IŠ=Hañ€Õþ¯°®Ër +îîˆýóç:Z8vE½‰¾OÖàî’¬ul±QB²b0 „`JâZ»Øñ~¹I† „»7fŠñîtú”7*錧î=^,ÊE_Õ~í¸ã4{\ý}°§|‹Cþb¸ ì) #£/Ëƈåy{Ê·×ÈmŒ! †BB•Ïk{V|\:y¬õ¼‰±ãêkÜ^Ó%š#Ìd  Z!I©yiºGs•gäêiÜb®ŠÂ›R¢’R¹Tà×mŠ//Š"¹»/Žx®}<.µÇx™.â:wÝ Az*¶xáKèH®•H†”íås¼þû4„ûoúÖkåÎEâ°!˜7ÒI°ý™„m¡!Ð_(þ á8ùÚ„¢âæE·ïОmSÕÇĵ¦™Í­¼n»ÿÖ>18ÞÅÆë‡1åˆJŠ^T!Íy6ǹØCvt¨žrÿ_?Q Nßj§0GÖ›½1¯µ2oý +GÁqìï­ê_ Ù] öKµþôî~8c78¬|CËWsH0¢LÒ]7OùâÐ ¾endstream endobj -1510 0 obj << +1537 0 obj << /Type /Page -/Contents 1511 0 R -/Resources 1509 0 R +/Contents 1538 0 R +/Resources 1536 0 R /MediaBox [0 0 595.2756 841.8898] -/Parent 1489 0 R -/Annots [ 1518 0 R 1519 0 R ] +/Parent 1535 0 R >> endobj -1518 0 obj << -/Type /Annot -/Border[0 0 0]/H/I/C[0 1 1] -/Rect [348.3486 128.9523 463.9152 141.0119] -/Subtype/Link/A<> +1539 0 obj << +/D [1537 0 R /XYZ 56.6929 794.5015 null] >> endobj -1519 0 obj << -/Type /Annot -/Border[0 0 0]/H/I/C[0 1 1] -/Rect [147.3629 116.9971 364.5484 129.0567] -/Subtype/Link/A<> +546 0 obj << +/D [1537 0 R /XYZ 56.6929 710.7531 null] >> endobj -1512 0 obj << -/D [1510 0 R /XYZ 85.0394 794.5015 null] +1540 0 obj << +/D [1537 0 R /XYZ 56.6929 685.6325 null] >> endobj -550 0 obj << -/D [1510 0 R /XYZ 85.0394 769.5949 null] +1541 0 obj << +/D [1537 0 R /XYZ 56.6929 685.6325 null] >> endobj -1513 0 obj << -/D [1510 0 R /XYZ 85.0394 576.7004 null] +1542 0 obj << +/D [1537 0 R /XYZ 56.6929 673.6774 null] >> endobj -554 0 obj << -/D [1510 0 R /XYZ 85.0394 576.7004 null] +550 0 obj << +/D [1537 0 R /XYZ 56.6929 460.614 null] >> endobj -1514 0 obj << -/D [1510 0 R /XYZ 85.0394 548.3785 null] +1543 0 obj << +/D [1537 0 R /XYZ 56.6929 435.4933 null] >> endobj -558 0 obj << -/D [1510 0 R /XYZ 85.0394 548.3785 null] +1544 0 obj << +/D [1537 0 R /XYZ 56.6929 435.4933 null] >> endobj -1515 0 obj << -/D [1510 0 R /XYZ 85.0394 518.5228 null] +1545 0 obj << +/D [1537 0 R /XYZ 56.6929 423.5382 null] >> endobj -562 0 obj << -/D [1510 0 R /XYZ 85.0394 460.6968 null] +1536 0 obj << +/Font << /F37 779 0 R /F21 690 0 R /F23 714 0 R /F39 873 0 R >> +/ProcSet [ /PDF /Text ] >> endobj -1516 0 obj << -/D [1510 0 R /XYZ 85.0394 425.0333 null] +1548 0 obj << +/Length 1029 +/Filter /FlateDecode +>> +stream +xÚ­WMoÛ8½ûWèhËo‰Ç4k·.°IckÚd‰iØ–jÊ5úï;”(Y²e¥Å.$¤ø8oæÍ ÉÃñB0SÜ Gá%» ö¾ÁÚû q¿ù]Ô»hòvÁO!%©ô¢çŽ­á0$^”~žÞ¸ûÍW3Ÿ +<•hæ ‰§ï–Õ_Týçþña±|ÿÏênði´||¨?¯æ‹ùjþp?ŸùJ…öóŽ·wÙMnç:ZÞ¯g_£“yÔÐ ’`f½ÿ>ùü{)Äúq‚S¡ðN0Áˆ(E½Ý„ †g¬ù²¬'O­ÁÎjµuH4ÁB$B ¨FÉjB!É(«T³Äg>ÁÔÉwE\f›l›•?ë OYùbÃ|»¢cŒÐ a}°V*™+P‘‚c†5(tÈûRŒÃ³Þ'B",™ô|Ê‘â„WÿÎM9ó¥SS‚w¦Ìcçdš4¶ªÕò%v¸“>ÌH8Õ5*þgÛx³Õõb¶rˆIñ* ®ƒ Ò@é9k.îQmMî\=E~(u:BJ0ÈÏýRåHæ%?í[§‚¶F<ŸAý„ +AJZˆ7ù]g¢´š¨sFðôC+™]Š»“}^jã¾oòcYs :ÔÃs*³Uì(Í[n{QèØm²þÖpm.ºì*Œ°€.—Š¢áðÑá@~u» Z”Õdµ8¥«7kûû’›ØÀ¡.FÉ[Ô{7•D‚—V{ôQ­ã²[Ð0;—µˆök·²`ºÑI|4z¨¼€Dȶÿn—€:å6Ó\;«˜Æi^8l…5‹Y¾¯Çùsm›©®œ€.¼éªçüà×µ ­ ãª_›§øfûoCNJ€ÃPÛ‰ÍP´I%Éx°Ž>ý)ÍÒÛ5' ̃Wj®ƒ©¹UÕÜÝ¿‹ëj# +N!ÌÇi[Ôo¯Úàeœ}âè%3½¶uíØtx’hc²ê´¼hÓz°Ü'ùÎf©š=õ!kN£[·Å¤"_kàjDÌU‰¹|º’Ã釥'mQ¬=)1HªOûÿJ¹ÒßÚ”¿©¥PQªq-»¨ÛZ¶¨JËÇ¢4×… ¥$ày2JÛ¢x{jÚÙûį¨Ù^"óÏNGÎ?©àaD‚?9TsséKÚ¤w'v.Âå'w!6aæF®¿`LÆm)¶q¢o§VÛ·¯dö I¬ÙÈÖóÃa¨I”ä|”²]s^¶ˆâ"è‘ÞÈ)L¶múœ`»b«w0é·Ò|U?õe) [/q&}>Ä…½æêùϯôóÿ-^‘aH‡bðÜ © +§ª+(¸ô¼}Î_»þ ·Q|endstream +endobj +1547 0 obj << +/Type /Page +/Contents 1548 0 R +/Resources 1546 0 R +/MediaBox [0 0 595.2756 841.8898] +/Parent 1535 0 R >> endobj -566 0 obj << -/D [1510 0 R /XYZ 85.0394 260.2468 null] +1549 0 obj << +/D [1547 0 R /XYZ 85.0394 794.5015 null] >> endobj -1517 0 obj << -/D [1510 0 R /XYZ 85.0394 224.698 null] +554 0 obj << +/D [1547 0 R /XYZ 85.0394 769.5949 null] >> endobj -1509 0 obj << -/Font << /F21 658 0 R /F23 682 0 R /F11 1303 0 R /F39 863 0 R >> +1553 0 obj << +/D [1547 0 R /XYZ 85.0394 749.9737 null] +>> endobj +1546 0 obj << +/Font << /F37 779 0 R /F21 690 0 R /F65 1552 0 R /F23 714 0 R /F39 873 0 R >> /ProcSet [ /PDF /Text ] >> endobj -1522 0 obj << +1556 0 obj << /Length 69 /Filter /FlateDecode >> stream xÚ3T0BCS3=3K#KsK=SCS…ä\.…t œ;—!T‰©±ž©‰±1ƒEV.­knj©g`fA‚!ÂVŒendstream endobj -1521 0 obj << +1555 0 obj << /Type /Page -/Contents 1522 0 R -/Resources 1520 0 R +/Contents 1556 0 R +/Resources 1554 0 R /MediaBox [0 0 595.2756 841.8898] -/Parent 1489 0 R +/Parent 1535 0 R >> endobj -1523 0 obj << -/D [1521 0 R /XYZ 56.6929 794.5015 null] +1557 0 obj << +/D [1555 0 R /XYZ 56.6929 794.5015 null] >> endobj -1520 0 obj << +1554 0 obj << /ProcSet [ /PDF ] >> endobj -1526 0 obj << -/Length 2543 +1560 0 obj << +/Length 1324 /Filter /FlateDecode >> stream -xÚuYYsÛ8~ϯð[誑ÂûØ7[ÎádìrYÎNÕnö"! k’`ÒŠæ×O7ºyØéTJ@£hôñuƒö.\øç]¤ÑÚ ²ð"ÉÂuäzÑE^½s/°öùÇ•²8T²îf²Þ:‹¢A6Ö^yƒì$Mú]·JîiøE™N·gšh&vGIƒ›û- D]°èíý \dë,öc>Ӈ˹!ë[vGÝŽ d¼ ~ø~gx©óÃuý\‰)´¶»ôyPu­êQ¬6sñ] UÓø^TLÝžM'+Éó¾mñ‰ú©3ð{YÊT÷V¯¦ß•*Òõx4ÜoEv%K>~Ú B'óÝßhÄ– -\Ó±8 ØãràÔòD3h Ä“0D,¤É[µ³:Ýê dÐ9 QÔ€EÒÔ'{)Áúrø®óɪ¢«q—µÑ$”ÄêY_ÝÔ'ÿ=>\f¾sUË"' Á_‘k/ƒ“†® -¦6pkK­é·ç÷'‘s[w²…-@Ø£åÌ­ßp,XBšÎÞ'h7ü•¿Ù*Œpv -÷Ãa…|‘¥nl Ø-H±ÈZyá6µ¨€÷ƒ( -RÜŠ1ÏuL~”6`l ¿‚~ZѨ¢<ÓCƒÚ̓ý¬j¢$¸æI·ÏÌ]¿(òAw·øYìÜÛ€eö¢ç9'ÉQ³m§Vu´:Åìe/¡P5G*@'ëR¢tGÑ­Ò…Â<x)aA· -’ r”OœBç=Á 1j"«¢ºÑpQɧUäzý"GöÄÙ G,ØÝfS6ä ÐBdz˜€z²Ó„Q™DÏ B0q¶Ah3>£Œ7«®sÙØ£FfÁ'‘«RuJãÆÕùö‘]ôçÛ/¨N‡ÝVM)gQø|$¶Ì­} 8Épat*ÌÒ¹Ã^‰©€ck ˜Ö…/ ‘úf8ùtTù‘w)Ë¥áZ½RÜ0†Oå:»^•˜Ã&Ù:v3*LO„Y‰ÅèÖt4™\a¼°[`\ÃÈÈö®ž„Ž—ÌÉAM´Ěû«„Ä„ €É,Ö£ÄvFø[vAé÷Aô´QêÜéüY4²³Álˆ†±ˆC¶ýB=ù¸!‚nÌÊw‰P‰ü¨jiˆ¯ÔàbºHêØ슆 Â÷ZÁµêμûž¶ºž–Ï܈RvµïY×ÛæÕ¨äjµ¤½¬s«I˜ŒéT×wìDDåïÛÍêv{K‹<õ0Ø>Þá0(î9±Þs@ܘe·ž«„D±é Ønu»ÁƒÖÄqE?cÔq,¦…îÀ³ÆúE£ÁĘŽAÄ)ôkÙ>ËRži6”šQÑÇÑ í%"Û2R¡q¼µ2$Q†£5ÄÞÞ3Xßñ±bɾ¾Ûºù~­(z‚Hׇ î †FX³Á¿,0x,ã&þ,<^ NÖÀY_Ö# ÆÃkfÝOUÿÕ‰[¸‘{Y›åj_¼ˆ1î𥑈6Hy ÿ/óŽ#窀Š -ã”U#7Cã@Q²€.ÿ¾ô™Ñ„K ÷yIJ­¥¥tG6µí a)\§ë€Ö&tÅŒ‚þ[år Òéú@Øèªé)ŽL½"Ÿûæ¢@ù<ópBµÙ>~æÜpËBtG‰ãÉYxEìÅbè á¥…9`°8#Û–8Ϲ6aù/3!(¬ÝˆUÐâ£:J¼TœpŠq«ëÄLM³ÿ@ÏM •($Ñì]€B‰±c€2i ?P‡nþmD4“Ç v;)*¼Q¾Ý3,$¶×`(‡æJý× éz`ê„Þw§Y1J†|%\‹B¡kùüEÙi¸U³“eÉJ}“/Ë…ü¦¯KÑX%=›4øªQÕ‘¢®óñg¯,•Ä²áŽg k ¥TŸ%#.Q=( ‚ש©ö¦7F ŸgàÑ[¦Ã–è@±¸ˆ$ŸægH@Ä%²ZI(Ž":ž( 6SaUŸiQc¢õFêƆEiX*×5ÔÏ]OÕ-ãÖXXE p³Í‚¥¢o¹‡›MÔºõÁùˆ4òK®øbðج–S€¼V(Ø&ˆ0ð[P£ ÄNg[iÝÑÒF´åêNuЧ—%KÞ©gI«w}o }U¯K­yHÝ2Ž"ÛüÁ×ý ÆŠýô3À‹¬ÉC–Påú‘?{°GÉÏæ#Sð¹c"ˆ£oë¥yó–þ®‚¸åé·žøqsˆ™Ìy™Àfá:ã¤m,ßû¶¿š°f¬…´íº¥®ÙÀoçÁâgþe5ñÐ7þùçìÀשŸ%ÃF¨gæ½=mü‹Áßû i5¢Rendstream +xÚ•WKoã6¾çW99@D‹¤DIÍi7ÛmS,Š¢ëžº=Ð2m ‘EUdÝbÿ{9R¶lÁÛÀ08¿΋…æGgiLBžE³$‹HÒx–ïoÂÙÖ¬ýtCLsGœ›ÉÄjó”Ä)KfÁ)ÈûåÍâ#£3!X<[n]"Iå,-×Îw²îTs°8œ'w-ÁmI҄¶ШHHœ±Ìnxÿôë”Îpø¬ò¾)ºÎuÕkÕÈ®0Ô€G#Â#ÁžˆI,¸…3¦Ü4 Ãù»&Œpu CkÙt…¦ÄB•.ˆ5ºûEU2ÚZk›z.šöÌ@¬UUÈr6°©È•{~Пá>p[»ÎT®Ó-·²¨ÚîA¸wúvܼ@‚ aÌõ~¯+ð‚=Oë·•ß®õÆf¦Õ†‘$c‹°eÊÜŸÅŸ§ÿZá(1 :LƇ‰ý-Ò¥gsv¾žÇü,ò"¦}£˜ò½Ð‘0S+–EÙ .)2Ń»Æã!¿ J' £7æEnš¾w±ÉýÜD\ÜU]B°]ŽøaãDÞ`é\ íÒ¦[¿_©æ;qñú|Xìð•ØßÑ¡ƒ:Æ·I¿ê¤'!öË#9B&º`³‹Ò©•Þô«&?aÞpÕ¨ã»ãqÈò«6yÈàÌ9ײé]9U·®±S¥·W\íÞ,‡ÚíÛËÖ\Û“m +ŽÛýâþá-ñÕa|ìkç›üÌYˆ2K›éœòá=4v{Ix ¬°7L ÉsaMc¸ ½ÁF¿ÇÙ 2܇0é«ïر2H`í¤[[)U¡*Cæ©Fç-´L`¯‹6˜,»•)tü›—Ã×¥ÿf„W¢ùúþô"ÁQ?>GÐP˜î”%4¦Ù¹¶áSöRÝŠuáfendstream endobj -1525 0 obj << +1559 0 obj << /Type /Page -/Contents 1526 0 R -/Resources 1524 0 R +/Contents 1560 0 R +/Resources 1558 0 R /MediaBox [0 0 595.2756 841.8898] -/Parent 1531 0 R ->> endobj -1527 0 obj << -/D [1525 0 R /XYZ 85.0394 794.5015 null] +/Parent 1535 0 R >> endobj -570 0 obj << -/D [1525 0 R /XYZ 85.0394 769.5949 null] ->> endobj -1528 0 obj << -/D [1525 0 R /XYZ 85.0394 573.5449 null] +1561 0 obj << +/D [1559 0 R /XYZ 85.0394 794.5015 null] >> endobj -574 0 obj << -/D [1525 0 R /XYZ 85.0394 573.5449 null] +558 0 obj << +/D [1559 0 R /XYZ 85.0394 769.5949 null] >> endobj -1529 0 obj << -/D [1525 0 R /XYZ 85.0394 539.0037 null] +1562 0 obj << +/D [1559 0 R /XYZ 85.0394 573.0962 null] >> endobj -578 0 obj << -/D [1525 0 R /XYZ 85.0394 539.0037 null] +562 0 obj << +/D [1559 0 R /XYZ 85.0394 573.0962 null] >> endobj -1530 0 obj << -/D [1525 0 R /XYZ 85.0394 510.2426 null] +1563 0 obj << +/D [1559 0 R /XYZ 85.0394 542.127 null] >> endobj -1524 0 obj << -/Font << /F21 658 0 R /F23 682 0 R >> +1558 0 obj << +/Font << /F21 690 0 R /F23 714 0 R /F39 873 0 R /F41 910 0 R >> /ProcSet [ /PDF /Text ] >> endobj -1534 0 obj << -/Length 2893 +1566 0 obj << +/Length 3437 /Filter /FlateDecode >> stream -xÚ­ksã¸í{~…¿Õ™‰IÔ3ÛéL.›ls×Ë¥‰;íÌíÍ”–h[]Yò‰r²¹__€õ°•½›i“&Ê›¹ðïÍÂȉR?Åià„®βݙ;ÛîÓ™Ç4 K´R}·<»¼ñ,uÒÈfËõ€Wâ¸IâÍ–ùÏókÇw΃;ÿtûpûtý·ó…ºóÏ4xº½»}º}¸¹¥éýÃÝOO?^ŸÇÁ|yÿÓÃù"‰Óp~ýøxûðñþ_Ds ]×BonŸÏY~v»ì$žÊsŠûëÙÏ¿¸³÷ý™ëˆ4 g¯0q/MýÙî,…BXHyö|ö÷Žák–NjÉs_Dþ„š|1¥¦0u"(TÓw÷át~2Q.ê -'é<%Ø«Ô4hνd®J%µÊ‰¢¨ó¬ö­Ú­TCSßu]"UN ‚yH‚ïäêfÈõµ)ZE¸zMˆJɦ|ãeeÉ õ^e-3³”í–—ª\~ 4 -hfáyN†¾9fùVT²"ŸFÒÐg[Ø>k$ŒÓ­%ya4P’~¯$œø#Ìùp -"‡Ï®ëgýFÐ\í‰s&[ÔÂŒjp`‹1ãÄ.}Qe½ß©ª%€Ý)«+]ðq‰§µU«*YejRueêd9ø]ËcmzÂê ½7À$Ç÷ÓdþPÓ\æyÑV–4 j¶ÐŒ¨+Eœ-«wvXŽæ=ª‰%dÅ\ ¡a»•Ö5ƒ´Êà_o ö`2bö²Í¶JÃà>¨u|4Ì_ëæ ¡Ì!æsE¸}­u±*ÁÛ:—o4\½y+ôLX7z[ì c,€د1z…IV7ûº‘¨j} ˜oÕË‘r(üµ…½²ZÓyYp)㨠¢–Qfsø­;rªúÀ˜¢Ê‹—"?È’!Å›y#ˆ7S`× t’Tؘ{¾ð Ì?©Š1Š¹j­Ê1·væx=ok`Ã[Ç DÚtÙß?¾D|‡ó¼#*–÷³º×ð¿ó†@`éÇNà‰Ð°d6IlØ}1«$áè ïùÉbU´„«WµÅ¹gî:ø'AÉå€ïa³–YÇȘ Z…ÃÈ(9Hãùë¶È¶¬(z`ÖúÏéQè„žðŽv¨r;˜ -±AiÏK:·úCÛÅÂñCa×R¾_~à‰-³¤üœö -É‘9R P)0¦†Œi‚4`(M§6ó'óÃ^S(Wr7dg51™hïŸÏ=¨m/̹?5YŽ¥ÚlË7“ìÌ(Ø… ¾È5o]÷"L¸6xc0¡q²m -©—´¦5õÃD œ$ŒlH„r«å&Âçݳ5º?¾·hdµÁk+ §/-UçI0> -è¾ÏÝG$”uf,Õ­DC¡Æüx¾;˜t -(–"—ÜYi4¹B™º¦qfèY'ÉíŽÑ–\z ¬nÌ\³&ÊKŸ ‰•v(Äð1“‘㣓Æ|ÒØŠž«Ëˆp}µ6eè£[SWöj›ŸMñ¢Âú`K@®Ö j]¼©VP%Ûc4ºãê#‘œ*Õ-õNB'V½S“ÖÂxl˜gr/WXÖà= #’qcYaç 8êò®• õ•Ëö0î$3£–F®ÁØÑ‚𪕲€¦)¨Ùˆ1|L7eX¥s*-qPC+a©÷Ö> XúØö±°ž  WÓgÀÀ´ëð{SJ­¹ô‡©©í>ÖØ"à© g0Áhrsÿñ ÃÈó1‘¦ß,°Õd0\>M„4Ê‘Qƒ+KŽ\”c.¬ŠhÙdEÛ¤Ašäèe<à‹uÝ«²ä~É°?Òì¿A{É ”Ôøø¾ÿˆ8"UÐ%1t\éÁî`ªŒ˜ ‰HÒ¿˜Þtè£}VÕÐ_àrÉhÓ±#}à'nLsD¯€“‡¶Æº$ë) kL蘌‘¦Ö¹aTìö¥ÚYu›ºÊ£²Ýbf`’–5ýv¢àdб¦œ)à·7En¡vÛ\­%””4é-„¼×ô[)¸ìZ6oçÈõX˜Ì¯'ûÓ·}‘ÙeÜÎJ©]±ÙrUQÖ57°eñE]u-ã "‰„“aë_ßu½«|•\ùð›^I×…õ¾Wk•xWþJø)mÑñ™*ÛÒã@ ;L/ʨY'²zÝššbb™Û—¢ÏÞ’9” Cfb‚ ã\sÂ]¨ ÏvHÆïV¼×V¾("+ª¬ÛÀ8«KsÕaˆWýßWW¢K =ÉIøô¥;^4@%(SÚÂdà†¸¿ÑʸSî”bÙH^šÉÉÇ!4F{\Zf6ç¬8€´} âç13êêʪ«Hó›!¾}°ü\ñœ­¨7Üoßú؉õ|Ø *¬(OJæpþÁÆä³H`7é^EžÄ)Û-t/`7õÄàÚýÇHžÇ~ , KÌëì`9B»EœLçsyÛÖà&Ñð\´Md½•ÌÙ|4o.hÔ¿4~^Wè­QâX†½lx7ã/Ñ»ÏbŠ„rS ƒ^E8©È@´ÂŒLcÓ’Ã/ܽmE! §UÝš&7!'\×JÌæ(ÎËñ.iU¾XvÝép’›ž¢2‰¦Ø;ðšÉ½W3ÜðÛjÕ“jº˜¼ÒÙ¿Ñy‘7Vĉ#EhîQÿ¾YúÅ`Á©s5eBÛûj×NÝl.›uvâ:¾;©+ŽD:òœŽèDŽ‘Nx½ç7±I<|à9NÍࢠDš4§è~ïK®üü:q -·KÊÿóWÞþCw;"Iüé¸~œ8Ô¥V(¿ÂßÎ#1ý4Ñé¤É¾\&íæv=º‹’|ÀÀØÜbpãüú«êªÆ`3™•¢ÕMÑTWw½=UXÌ|ø'fAè…±ŒgQ¬½ÀÁ,ÝÝø³ <ûçà9 7i1œõíêfù^E³Ø‹CÎVO^Æó³Uöó<ò¤wûëêûåû0Ì•¾HìqΛï>}ü¸¢Y#ŽÚxZÉÓî?¼âzR Ís>¿[=>¼`%¥UØ/yÿãêݧۅ |ñöèÏ¿}€,%¦Ëçwo?=¬~¢»7?|~xûîÓým¤ç«¸ÃunÞ­ú“ž¦ðÓo7?ÿêÏ28Ôïo|OÅ&˜áÆ÷DËÙîFÊ ´RŽRÞ|¾ùwÏpðÔ¾:©áà „rB=pÂê b/TðÏá}ÝÐæv0fžÓ]Q=ÕÍ.銺"‚»në# ºš®‡–_¹óC;~´·ë.O;"œê¯ÖæÍsÞà9Þ9³é¶9ko¨d%…™ØiïþñóP^ÌÙjFÕ‘gb_ðÜ${.Úº9û¤û†ÞbðÆB…p&QÍ`&"ˆûêß/õjOkÍ"-<éˆôAO¿ÌÜè_gݸÃ7¬jôpý+¾¸úS·ÿf¹„¿^rhӼ鼺ÙÀx¹?¬—LZºÝ-ïX€ûs0¢Øó}íeU{)¾V`d‘/Gò¿f Ò‹1Óæ¹è9¾²A0a8Öx¼Á¬¾–0ž_ð…Å÷³®W©õš.û61ÚSÇZølÞwxI¡‹^· áûàüÛ¦®ÙŽ“*ãøw‡"›0A¶¨†˜ é#z æþ‹£ Eëõ¼èˆZ´4o_·m±.s¢Zjsk懊hª€Z0ïdÂm¤ˆ<ÔyBº%‡œ’Y…^Gnr^=4½ÚåUGküâþ¡-ª æ|UO]ø¡gtÜS{pø&üSëO†~ÌÓŸUŠaÇN¶‹®Oøj(ö´/5ø¨ðâ  üÒîó´x:Y™”RV&Èù/RjZmd‰‘ï¹@²è&rìiŠåcY×{ sE`æ«-* J“ŠžoórO£bDZï9'B{j»|GóÛ<=4Ew¢'k¾îË$åMHÖ®åļ“ó¦Z0¿uý;ïèdŒ„à(#w0ÒÊ}Üé–ÌôX”%ÊbWtç@kY²K6n\W.<±­6=â8ŸÖn›»¢Í3›æÑò‡!ô¾ªa!|QÛ\ñt@I´˜?åIwèSŽöÉŽáÉv áÊbÞR2‚ûú‰f°ÅŠ¤Ý¦€¬‹Òž±¥Ötíh¸L–ä;Ç8a6 ߪ}S<e¾!±»œ1lˆÏí{ÂÚ$GÁÖv )ÁÈÚ0öÎü-Çk“£ûŒ†®V¨„?ÿÏm,]În›MÞ²vi«¹*ª±u¡‹Óöpg.‘ó^ŽÛÜÍj{Ó¾.£Òƒ0#_ŸòqáÉH:6нǾ |”2áØx¾Ë([ãÕº\óߓݾä‡`‹;–ñ¦,*&£æ-¥Nø»°-˜O2µ/x Öê+ö±Ó/{æÝC­<_úŽßò9i–U²›ŒÃ \i"7õ?œ÷{s;b[¾^ `^`Œ{½_òš”€%ã‹0Ѿ” ³G>¤Lâ3€{l%Ò— ¥´A)~o¤Éå¡m–e&år]T¼õEy|Â^:º^‘˜õrÛ«Ï„`S®Êœ©W.°¥ƒ”ýÓ§²ét€… +Êú`ZFs‚ÄîXËpþT7DŸ²˜@§âUƒ;P}n¼J²È—;ÖÍ¢p”ÝçMy¢gEå$¡ IÓé¡LXÒŒ¸ð¶À§`€ê7À®s7±X‰é!ƒU‚3å…Ap‘~_2b@?ÆDñ b¡!GkhÃI GUŽÆ€#kÜp£¤ÁªŽÈçáþêÀì[Û„GE•–‡,oy2äS·¥¬ +÷ìúÀWlÇK’?yh{zþžÓíÜíeä7ÈìoTãàZae㳩 HÏE~ÄØ];OÛ”¡;°^¶Ü‰ÚNA¶ ]ÀŨ8@cOm_d :ˆ)w ¼Ð„1.IÓúPqàxr2RËÙJD¢ÅE²z¬x›€ŽE·%$‘'MYþ±8¦åSÑl*@EKº£¡u‹XNû‚eyrü@Qð^ƒø±pòW“GÀœ¨O'¬h@ ŠÅå Z d`.3ÉuDSqßÛ.醒Wuãà<¢]`¹ ÛáE*Ú&¶PÂÓøºIšÂœAÈb#1>! 7h·G¢8O@\›ùwõ14LQ|ŸWÁ˜oŸé[Hð +²Smã3b¿£B‡ôÔ]r¢Ù|ŽÆ‚Ë2.­rÂÜ÷æSmÚK/—&B„K¸Ë,^þ‘7õBP^÷m±©£•é!«|…Úeˆ Ä(ý35dVÖ›ú.ÒÎÀÅÕʸXÜcžy—:èŠÝ”›…nê6ìM°)å‰(4=0p%üãÍr]cá¿çÒóÏqý±)êfèFr ¸¹¾¸v©Ø÷ †_ãR±s<*Pl„PÜnƒõ¦ùGPLHyh('’3(*ô]=t}©$,Lp[J·IµÉÝFPK‡ø˜·-WL¶Ä]8)uMC<Ðfëª~8A8ÂHéËLÑüi¶åé¶>NiGI/–¡ºÚ×e.®÷>ÙkÿŒf À~–N¢ çÁEÆ=‰A;”3ì¸ï9¨¼)p -q åÜdîç7EG…ÐT/YÁ©éX_ÕLp1`´Én1„˜ ×yÑ{>ðâ¡{ã¢ñ×¶Û +õë çŽýÁdsn—+p»É»¼ÛÖ‹Á4(Ð8ûàèPÊçgí춦)îÁX¸¢+I#p¿*—‘)0Ó-ŽßâéØBI¿>0½XyÒ¶ñ5ƒ6Ö`±#_¶5ŸxÝõ¢&ŽÅÓHøˆ´8:çeìùRÖ)¼¨+Oʾ¢™E?}¢6‡el#ÉvL膄…Áød`­Ð¥-“gžÚÀŽìH½å ~Dn‰Ã#•w\„ ¸ö!oh7ö˘g‘v ÔcÍ”á§ÔÓ¦0#pZìls +ä¤ëP·=\3µí«ÁÀ¹y ¦¡ž9—‚Ýõ{Œ§ú¯+z¸GzDßZ&Xñnø}Û,ð3`;Ãô€9€Ï6å_:ÔôÉa¢Ö9/zÆžÉ~ð¥Ê¢ÜÎ}37=ð Å0tæ‰O<ö'Ê·æÓZ qèKZˆÝâ0íç4 ³¾íßmlèçb?·Mnˉ To t³fîisÚwõ¦Iö[×kÀÇÉ$¨°ýÐåÌhÍkìò¤š>[4A™ÔÇm’²c„øµiSõ_)Zš„ÅÄêóÃ?ù N[‘ÇÃÚl¨_Š©qèiÝ—f¯ÇÔXônÞ;,,ãò*.Žé‚¨6ý‘@ Ѿä'Tà‹à¸b¾C§$1×-ÂÂ6†hyù]u¶\ãê£A¦q?öÈmŽÉ[þ> endobj -1538 0 obj << -/Type /Annot -/Border[0 0 0]/H/I/C[0 1 1] -/Rect [253.7995 146.8976 417.685 158.9572] -/Subtype/Link/A<> ->> endobj -1539 0 obj << +1571 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[0 1 1] -/Rect [63.4454 108.9117 208.8999 119.0735] -/Subtype/Link/A<> ->> endobj -1535 0 obj << -/D [1533 0 R /XYZ 56.6929 794.5015 null] ->> endobj -582 0 obj << -/D [1533 0 R /XYZ 56.6929 652.1213 null] +/Rect [63.4454 738.9144 452.088 749.0762] +/Subtype/Link/A<> >> endobj -1536 0 obj << -/D [1533 0 R /XYZ 56.6929 614.8935 null] +1567 0 obj << +/D [1565 0 R /XYZ 56.6929 794.5015 null] >> endobj -586 0 obj << -/D [1533 0 R /XYZ 56.6929 614.8935 null] +566 0 obj << +/D [1565 0 R /XYZ 56.6929 723.0302 null] >> endobj -1072 0 obj << -/D [1533 0 R /XYZ 56.6929 584.5024 null] +1572 0 obj << +/D [1565 0 R /XYZ 56.6929 689.3491 null] >> endobj -590 0 obj << -/D [1533 0 R /XYZ 56.6929 289.5256 null] +570 0 obj << +/D [1565 0 R /XYZ 56.6929 552.677 null] >> endobj -1537 0 obj << -/D [1533 0 R /XYZ 56.6929 251.3901 null] +1573 0 obj << +/D [1565 0 R /XYZ 56.6929 525.9649 null] >> endobj -594 0 obj << -/D [1533 0 R /XYZ 56.6929 251.3901 null] +574 0 obj << +/D [1565 0 R /XYZ 56.6929 411.5673 null] >> endobj -900 0 obj << -/D [1533 0 R /XYZ 56.6929 222.7156 null] +1574 0 obj << +/D [1565 0 R /XYZ 56.6929 383.9327 null] >> endobj -1540 0 obj << -/D [1533 0 R /XYZ 56.6929 53.7852 null] +578 0 obj << +/D [1565 0 R /XYZ 56.6929 225.6356 null] >> endobj -1541 0 obj << -/D [1533 0 R /XYZ 56.6929 53.7852 null] +1285 0 obj << +/D [1565 0 R /XYZ 56.6929 193.4614 null] >> endobj -1532 0 obj << -/Font << /F37 747 0 R /F23 682 0 R /F21 658 0 R /F47 879 0 R /F53 962 0 R /F11 1303 0 R /F39 863 0 R >> +1564 0 obj << +/Font << /F37 779 0 R /F69 1570 0 R /F23 714 0 R /F39 873 0 R /F11 1343 0 R /F41 910 0 R /F21 690 0 R /F53 1002 0 R /F48 925 0 R /F62 1035 0 R /F63 1038 0 R >> +/XObject << /Im2 1024 0 R >> /ProcSet [ /PDF /Text ] >> endobj -1544 0 obj << -/Length 2824 +1577 0 obj << +/Length 533 /Filter /FlateDecode >> stream -xÚµZ]{£6¾Ï¯ð¥ý<-’ KÇö¤É4™4v·Ûα›g0¸g&ýõ{„>äζûä" ôâóžO <òà"†<ÊýQÈ}Ä<ÌFëý•7ÚÂÜíV2×ZèÚ–ºY]ýó Gñ€£Õgk­yQ„G«ÍÇñôéiñ8¿û÷äš0oŠ(½@‘-5L‘‘ÒñÐá3N䆡3è~†ZØqš©Xœª4ßv8¨v‰¼°©\¾•U²ïs1Òç¼ÍÇLiÿ)>‚æ7ÛDßÇù)>¾ÕH-ÙŠpׄøˆG Z*~€O꥟ŽÅ¡(m)—^@Eäw–”ƒ;-eÜ‹s‡{9¡-òºØäÙàwùú8ÁÑXzâñ?E®([M0Æãcœ—ŸµkçË>ú|ŒpªnÑ÷ èû°«b54=mOe¥‰ãÁ°Ïà…äR=`K9ô®¥,½½» -½w±ônƒO•b’õ.ÎÓr/o?JÉO5)ÅþPéSÙa¬+>wÙšÁZÛÞDAAHœAŽ±qú-M¾›Od7ï?–”ƒ-¥ù!˜ºøqA[üt±ø±Áçoy¼Oדk„㟛¸™‡Qmÿb°kâB‡5q-2”p;CŒƒ† ÊÆ ±ŠÍ…˜\ªñծؗE®F­}SM='_v¸hèëëø+¦îkê@!øÚ„FÀ¿)NùFs~8êP”§1ïûÔM¹-5L¹‘j(ð0åNè†ò3ì~Ê[à³,>ZN¦ -ªèf1ˆ{²¶À,@^C-·{FæBþ¿9•;yµÈþЉ픽ý&A$¢ä–”ƒ -e˜ ^ä`Âm1ÑÅ`ÂL¶ ÒWÕâõÎT:è~:%Dz›r„I@úSÑ4ßÈÄ÷U×qq=°Þ½GÃz‡¦CP½ wKÊ¡w-eô„.pA[zïbèÝ_|«’¼4 Æ$§²“ŒòE?¼€;Ow½gF¡€ùŸóŽÃô1|‰KÊA–²(  -\Ð]ì -lðÇ"¿–EWrܧ¹®ÈŒÆe‚©£G²I¥¯ÃC$d´ßfÇø«`VØôëžêÞ^"ˆ|nÝÛRú7RF÷‘洞ÐîÏ°ûuß_&ª* lü>y“M¯UýEÐ䄼JMM’ÒEàBÂEVË»Û!„"/bØâj<nÀCüq:Ácå$”?¨©ÛÓfé»”E¡Ñx®fqY]˼o Zy?‹¿h—£-#0}Û2”_&œŒ“,ƒ\Iœ:XªôD<(›í$QQ~ÁN,)‡h)c'œz;qA[vÒÅ°¼e' i'"}—Uü’¥åN4S®˜¹z¿P;ŠÏÏC¡3âÈçAgÓh®8ô2¸L•µ#áfÈçˆr‰!KÊÁ–²r$2'´ÅP{€!Ü(û9ùý”èf,»ÇŸ…ÚÒmW'ImÙ%׫s\9äÆÔ”ðÿ7[#àKlYR¶´”f‹z^è`Ëm±ÕÅ`ËRZ?ß'jòj¨ -ÀqM†|D·kâF¶k½Á#ƃ6IÎ0×ÞÛssƒ)è7–”ƒ-e¸ œ9ÑmqÓÅàÆ¿Mr¨¯…bÃP•V"Ú…Ü_Óu"§¦Ù¶€©Ý^ÎÉ°'ib%ÜËX =>(–éæT{-éÕp!è¿].e~ót^“§<®\ËÏüN9´Tô¿ÿç}õé­ì -¶º/ÓÃi&·hÞêß¡fÔ_¦/Å«=sß²²~e|–pu?øCœejîú*ló£ýû›<€æ©»¿Ù4ª mõÖÒwm{RßCKqšµ-5lÖFʘ5!³vB7f}†ÝoÖ-ð»|SÛ˜n+Ÿ“²È^µ¢—§Ã¡8Vgçr1ëËԃرþØ?+ò£¡zž¬Ûᆠ-±ŠSzIï–”CïZÊè=¢Ô¡w´¥÷.ö€ÞmðÕNFƒ” /]xœ½•i)Źµfk ®ÕÖ\éL ®íLÐð©p’f¯M¬Šxõ%Í´Ü-ƒ‹g= P’Šàã@wFªžV‹¶êi Ó$“pŒ"^Ø#µ¥†É4RšLßs‘é„nÈ<Ãî'³^Ìí¼€y¾UÉ|\lN*²‹ÑZÁBX”disæлsùбØÅ”ÕĈç§òYèzº†11ú FŒª;òdw$^æ!.ËDGn¹9ª [œ6LjHp•IÿnÐφé0 -=|a¿Ô–rЯ¥,ú1Ô mÑßÅ ßWgU±.Ä.øÌC±él FD¥oíÕbD&&áÈMb‚;¹û}nýlŸ3C¯îs;s,“&,Ú6 3a;²}PâÚ,”G«•[ìëÞ2–Îñò_´ ¨‚™èÌÝvaI9ìBK5vá;΃Ж]t±ì¹TÖó¢8„È#ëB”õMm”F*ÊSU׉‹ÆÄÙì5,>}ñ­}ʸ Þ´#š‰È21ú ÄMŒƒsu\bZFñ÷ÃY‚©À² ¸ ¡£ùÈ -’Xï*½ªA¾§ª³ÃÐù"bÀø0‹^h%-¡aÓÓBæP•¹"’ ·1¼.p¿ÝÙÈÓÉ5#¾eCâNŨ—LÔ b fËšQ¥°™G{?µûeB¼1´5öÝ&ÉÔêóäoúùZÿõ+Ÿ«¯’ùõØ.…‚1¤•ß‡ð§ìÎ̶ìî6~•/œ÷u˜s:e0‰ ×&S[ÊAµ–²¸vÐ:¡-²»ØlÛà³b¿—»®Xo¶ö| “ Éjq,¥ŒôW˜Xž¶[èÄêNÆߥßúÎiˆBŽíc$êןŠEÞŸö±>uû®uŸ«=°r¦gjð1i“tôº-ž[½ç<ÎÿH·Cqæ!Í2sâû}&Á#Dü p[„%4lZ¨ù "rœ¸psè÷[ƒ¼LŽ©>*y<5Ö´Þ’HªtÝWeB0fþùé¬9ŠhÏÅqí÷~$yb þBýo +\ 5iÞõÙ— ·Qx¸_á6²ñ>¨óÒò%Ùů©Èú0Yv ][­˜–Î ú¤¶‘U!ŒÞ=½òjºQ'²a{1 (€æÃâ‹°æ+ˆúUŠcZîÒ*– ’:_ /Q2÷i¾ORí„zÍÖ’}¸1\½AªŸàö¨Ö3¹ý/ék톈FÑÀaõê—¿‚Óî››O‚Ï_ý¿:¸bŽendstream +xÚ¥TM›0½ó+|©¸6Æ`³IÚ²RÓ4a«ÕxT‚Ó@6Úýõµ3·¶ôTEóÆoÞ|x€"b~ Ž “1JeŒ9¡•[ µ9ûêQÇ Ï¤ð–u—{Ÿ¿°I,“(AùË–ÀDŠòêÉÍóé"#Nü!Oˆ—Í&à‘ðXNÇ‹,4þ1[f“éb¤±Ÿga,ˆ0ñÌ)Lg£ïÙøó P§Ôžó{oš_¹m–f»øí==T™žï=‚™ ˜J¡­s†yÌØÙÓxKïçEðæô:4<Îæ"J¦±¡éq‰fŽìô–z«lO‰ßÕ½êÀ,7ZwÎÝkûäþ/¥và)šŒê­-¶uið[xØUE¯*8˜ØyžE_€U· ã`wXUz[€×H¶.²RZ!—{Sô7üÐŽÛôRŠ%çÑ©'ÂTÊä)…Ú{2è]·ÊÜ,#‰Ÿoê˜Çâ- ”úŸ Œ‰I§Àßë]بWÕ\cÁ*uÛ›|u»vx_÷v溵¹å¬Â¥rÚÂÏæî ªö¾ê:å8úe¨ÁÝaÕÔ%ìÝQ­Àp#¶ý¬Ní_Õ¾Ð*å­î]HÓè#˜îâÀÍ9Ε‹ÿµÛŒc»›hþ®îÿÞûë!6¯¤ÑðJ›ëÄ"’é¹(;/I?V~yAþ.ýЖÊendstream endobj -1543 0 obj << +1576 0 obj << /Type /Page -/Contents 1544 0 R -/Resources 1542 0 R +/Contents 1577 0 R +/Resources 1575 0 R /MediaBox [0 0 595.2756 841.8898] -/Parent 1531 0 R ->> endobj -1545 0 obj << -/D [1543 0 R /XYZ 85.0394 794.5015 null] ->> endobj -1546 0 obj << -/D [1543 0 R /XYZ 85.0394 752.3015 null] ->> endobj -1547 0 obj << -/D [1543 0 R /XYZ 85.0394 752.3015 null] ->> endobj -1548 0 obj << -/D [1543 0 R /XYZ 85.0394 752.3015 null] ->> endobj -1549 0 obj << -/D [1543 0 R /XYZ 85.0394 746.3107 null] +/Parent 1579 0 R >> endobj -1550 0 obj << -/D [1543 0 R /XYZ 85.0394 731.5461 null] ->> endobj -1551 0 obj << -/D [1543 0 R /XYZ 85.0394 728.1497 null] ->> endobj -1552 0 obj << -/D [1543 0 R /XYZ 85.0394 713.3851 null] ->> endobj -1553 0 obj << -/D [1543 0 R /XYZ 85.0394 709.9887 null] ->> endobj -1554 0 obj << -/D [1543 0 R /XYZ 85.0394 651.9592 null] ->> endobj -1016 0 obj << -/D [1543 0 R /XYZ 85.0394 651.9592 null] ->> endobj -1555 0 obj << -/D [1543 0 R /XYZ 85.0394 651.9592 null] ->> endobj -1556 0 obj << -/D [1543 0 R /XYZ 85.0394 648.8377 null] ->> endobj -1557 0 obj << -/D [1543 0 R /XYZ 85.0394 634.0731 null] ->> endobj -1558 0 obj << -/D [1543 0 R /XYZ 85.0394 630.6767 null] ->> endobj -1559 0 obj << -/D [1543 0 R /XYZ 85.0394 615.9121 null] ->> endobj -1560 0 obj << -/D [1543 0 R /XYZ 85.0394 612.5156 null] ->> endobj -1561 0 obj << -/D [1543 0 R /XYZ 85.0394 585.7959 null] ->> endobj -1562 0 obj << -/D [1543 0 R /XYZ 85.0394 582.3994 null] ->> endobj -1563 0 obj << -/D [1543 0 R /XYZ 85.0394 567.6349 null] ->> endobj -1564 0 obj << -/D [1543 0 R /XYZ 85.0394 564.2384 null] ->> endobj -1565 0 obj << -/D [1543 0 R /XYZ 85.0394 549.5337 null] +1578 0 obj << +/D [1576 0 R /XYZ 85.0394 794.5015 null] >> endobj -1566 0 obj << -/D [1543 0 R /XYZ 85.0394 546.0774 null] +1575 0 obj << +/Font << /F37 779 0 R /F23 714 0 R >> +/ProcSet [ /PDF /Text ] >> endobj -1567 0 obj << -/D [1543 0 R /XYZ 85.0394 531.3128 null] +1582 0 obj << +/Length 69 +/Filter /FlateDecode +>> +stream +xÚ3T0BCS3=3K#KsK=SCS…ä\.…t œ;—!T‰©±ž©‰±1ƒEV.­knj©g`fA‚!ÂVŒendstream +endobj +1581 0 obj << +/Type /Page +/Contents 1582 0 R +/Resources 1580 0 R +/MediaBox [0 0 595.2756 841.8898] +/Parent 1579 0 R >> endobj -1568 0 obj << -/D [1543 0 R /XYZ 85.0394 527.9163 null] +1583 0 obj << +/D [1581 0 R /XYZ 56.6929 794.5015 null] >> endobj -1569 0 obj << -/D [1543 0 R /XYZ 85.0394 513.1518 null] +1580 0 obj << +/ProcSet [ /PDF ] >> endobj -1570 0 obj << -/D [1543 0 R /XYZ 85.0394 509.7553 null] +1586 0 obj << +/Length 1964 +/Filter /FlateDecode +>> +stream +xÚ¥X[ë¶~?¿ÂoѱV”D]Ò¢i³§I¶EÒ g¢íé-imõH¢#Rv7¿¾3œ¡,ÛJS »&çÎá7äˆbÁ¿Ø2Œ’2ÝäeÊHÈMÕ¿‹6{à}óN°L*“P¦I“îV&E(‹8ßl—F¾zy÷øu,6qfY,7/¯³¯,/Â2IËÍKýàé Ž¶¶±Œ‚âáŸ/"µ4Ì‹\ Z.d˜—Qá^„Á¨§]טƒÖ¶ö³šHÃ$ÍbVË’0Ï"òS„âa+¢( +žtßëþ0j0Ó›‹–Rz Ÿ‹Â˜M<ÛϤ ´¥ÁYŸ šßÐì Ï4¨{{¦ŸQ隣¡™ž¼öA]™=zØÉ‘%›2,³8ãÀ =e*RJÈ,%©v±42º›l‹‹Ä™Õ3õ„Ér“va¨®SI5Ô4¨ôÀQ.¸­1ScüøÚ¶UŸ8Šãø Š 95ƒÝSûF™‰8¬¹{Ã¥ábæœÃbLc݆nã<¦#þfA§÷û™ˆquh9»æU“ÕÄ‚å2¢„°ÞNÎêS[³˜"ºÑ`ÅdýJôC;Xvçòƒ´v¿=ç96X´Û0Ø5× n“ijÚ_LÝn+à¤ÓÃÂ…ïÒS +i ·¥Ý3éÀ–yíˆùðŠ&Â8K<æcø¡›‚hïCû™<»úÐŒ­êhüýÔï Æס\@•‰ó÷w= vVXƃÓÆ-ÈÊ@͉ο&DüL|Œãœ¤!š7¢±Þð+Ôʲb@4@™ þ@ŒN³¬CX;6úØÍ2\ô<Ò스‡yÑ· g°È”}sɘ†€G€"6ù93À͵úFtür²e€h$Òßàï»ïÞ¿ÿñÇ©*e§^[ú¤ïÜvzW¿ ×}kì…{½^¬0‘p‘ÒyE?°)e™í0‹Óàu² |d ‡Æ‹o<ÐĪôHÒÕßO'2ŸëaÍžÑ_5±¹Á’FŠ ÈœŒðiÍZ W +ŠØmT¹,(¾ÊÞñ‰}q´€¨\Â&|&d¾vKÈTÝVŒÐhÆKI›S?s@Õ+6¸k0mHšŽµÇrRϯÄ'¨›CZÙN,HÉÀk™ôjY`:ujˆN^®5ôÛé³'A´é°²\¤A®xYöÊ`3§Áçs³‰uÿŒ`°¡¬mú£]­7>)34n-_³•>¾ñ±ûzs„ašÃÙ`M t9hðÃ|K>xÌ«,«DM¿Š~|ª`x‘â\,Íq.¼éÓlŽò{½$çF.ÝÁÌJö¢´VËlo>ͱýãÓh®o›ÿ+Ÿtc‹lѸÄ"'ÛCv0 +ýf3GÕ51b‘æi‘diNŒ‘Œâ±ˆ±0·"ð0àâÄßZÕ7’\sÂw"ó‡&0ÍåþF—?$cRÍZº”í(õåŠ:éH^04g¢°û(½À ÙWáÓ7˜¿S,[>°úŒ¹…;î3`ô¦'bÕÀ¤Ö^ ïöEy˜]¹œ­Þv‹íçÞa¯Úák@n@þzh|ÇütÓOÓ0J¿mºã—¿ÞeÚâš(°ÁiÇEðá êÍâÀz҃ѣm§žæˆ§çOŒ$ ¸aѯt ÇtéùL]%ŒFèŠâ¹Bˆ%Ç#¥ e/v­Î©­XKí)™®×âX°Åu’_=ÿ~-ÃÔ¶GYðþÛ§päÏH—@ +­è×ØÚ:‰óÎÐÃBYn?z·XdÌqâd¾©Üä¤ÚNí:ørðï»QÕaáƒL·CÕMucVìâªV.Wª4 Û8Hü»Uoy)”@»Zìo+B)ˆ×­©ôD9ƒ©;B.ÊõTyåvÂ)Î6™îZds§¡ÁÓÏMí­µ°r=¶öä&vÓž®é^/yr€¡¶¯ÓP;«y Â1{9B€FãŸà{ËוÂM>p\×-ž‘7>å èWˆÌ¨WKÐÆ 5m"û¿À¥–€ã6WUŸÔž9ZØוå,¶VHbžþ‹'¯´=Í\¦pÀŸ'8TÃ[WyÌ#‰6Éyè5µÒÇî:4 ßál 3,•ßbÏ[œ+ªë/WF".ƒ›ËÊ?@”€/jŒu“1Ô¢+l',{_¼2ãâ•sä®ÏñÛªÊ ¿&–Bú–åç !G˜ +¥Ìrcø-Š¼ûãËü +“¤%œ¡i±Iæ² —â~ÚøÑŸ/¯6³Âv¡ámÒ¥ß;»è½‡CÀê/aïoãã<,EQ^Çsór4 ÝÅpµö;[ÃïVÎy7G)JΑOü©5­¿|hW°hpk·IQ„"é5¶ÏÍŽûª‡]Ù)C™‹_Ú‘Âõ%KÄQXDñ¯oʬ±]ªÜïʽe×SX{üâññ|>‡¼+¾,}w¸ÉÀUßÄx³Q³Ô}\Wù¸·ö߶ +ߣ«ª]qöü´Þíâ³äZÄ^d{‘¡Éep …E\æÞ†R&·Þæ÷Í{wÿ¡’Œèendstream +endobj +1585 0 obj << +/Type /Page +/Contents 1586 0 R +/Resources 1584 0 R +/MediaBox [0 0 595.2756 841.8898] +/Parent 1579 0 R +/Annots [ 1593 0 R 1594 0 R ] >> endobj -1571 0 obj << -/D [1543 0 R /XYZ 85.0394 483.0356 null] +1593 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[0 1 1] +/Rect [348.3486 128.9523 463.9152 141.0119] +/Subtype/Link/A<> >> endobj -1572 0 obj << -/D [1543 0 R /XYZ 85.0394 479.6391 null] +1594 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[0 1 1] +/Rect [147.3629 116.9971 364.5484 129.0567] +/Subtype/Link/A<> >> endobj -1573 0 obj << -/D [1543 0 R /XYZ 85.0394 464.8745 null] +1587 0 obj << +/D [1585 0 R /XYZ 85.0394 794.5015 null] >> endobj -1574 0 obj << -/D [1543 0 R /XYZ 85.0394 461.4781 null] +582 0 obj << +/D [1585 0 R /XYZ 85.0394 769.5949 null] >> endobj -1575 0 obj << -/D [1543 0 R /XYZ 85.0394 446.7135 null] +1588 0 obj << +/D [1585 0 R /XYZ 85.0394 576.7004 null] >> endobj -1576 0 obj << -/D [1543 0 R /XYZ 85.0394 443.3171 null] +586 0 obj << +/D [1585 0 R /XYZ 85.0394 576.7004 null] >> endobj -1577 0 obj << -/D [1543 0 R /XYZ 85.0394 428.5525 null] +1589 0 obj << +/D [1585 0 R /XYZ 85.0394 548.3785 null] >> endobj -1578 0 obj << -/D [1543 0 R /XYZ 85.0394 425.156 null] +590 0 obj << +/D [1585 0 R /XYZ 85.0394 548.3785 null] >> endobj -1579 0 obj << -/D [1543 0 R /XYZ 85.0394 355.0758 null] +1590 0 obj << +/D [1585 0 R /XYZ 85.0394 518.5228 null] >> endobj -1580 0 obj << -/D [1543 0 R /XYZ 85.0394 355.0758 null] +594 0 obj << +/D [1585 0 R /XYZ 85.0394 460.6968 null] >> endobj -1581 0 obj << -/D [1543 0 R /XYZ 85.0394 355.0758 null] +1591 0 obj << +/D [1585 0 R /XYZ 85.0394 425.0333 null] >> endobj -1582 0 obj << -/D [1543 0 R /XYZ 85.0394 352.0499 null] +598 0 obj << +/D [1585 0 R /XYZ 85.0394 260.2468 null] >> endobj -1583 0 obj << -/D [1543 0 R /XYZ 85.0394 337.3452 null] +1592 0 obj << +/D [1585 0 R /XYZ 85.0394 224.698 null] >> endobj 1584 0 obj << -/D [1543 0 R /XYZ 85.0394 333.8889 null] ->> endobj -1585 0 obj << -/D [1543 0 R /XYZ 85.0394 309.8192 null] ->> endobj -1586 0 obj << -/D [1543 0 R /XYZ 85.0394 303.7727 null] ->> endobj -1587 0 obj << -/D [1543 0 R /XYZ 85.0394 278.3282 null] ->> endobj -1588 0 obj << -/D [1543 0 R /XYZ 85.0394 273.6565 null] ->> endobj -1589 0 obj << -/D [1543 0 R /XYZ 85.0394 246.9367 null] +/Font << /F21 690 0 R /F23 714 0 R /F11 1343 0 R /F41 910 0 R >> +/ProcSet [ /PDF /Text ] >> endobj -1590 0 obj << -/D [1543 0 R /XYZ 85.0394 243.5403 null] +1597 0 obj << +/Length 69 +/Filter /FlateDecode +>> +stream +xÚ3T0BCS3=3K#KsK=SCS…ä\.…t œ;—!T‰©±ž©‰±1ƒEV.­knj©g`fA‚!ÂVŒendstream +endobj +1596 0 obj << +/Type /Page +/Contents 1597 0 R +/Resources 1595 0 R +/MediaBox [0 0 595.2756 841.8898] +/Parent 1579 0 R >> endobj -1591 0 obj << -/D [1543 0 R /XYZ 85.0394 173.5556 null] +1598 0 obj << +/D [1596 0 R /XYZ 56.6929 794.5015 null] >> endobj -1592 0 obj << -/D [1543 0 R /XYZ 85.0394 173.5556 null] +1595 0 obj << +/ProcSet [ /PDF ] >> endobj -1593 0 obj << -/D [1543 0 R /XYZ 85.0394 173.5556 null] +1601 0 obj << +/Length 2543 +/Filter /FlateDecode +>> +stream +xÚuYYsÛ8~ϯð[誑ÂûØ7[ÎádìrYÎNÕnö"! k’`ÒŠæ×O7ºyØéTJ@£hôñuƒö.\øç]¤ÑÚ ²ð"ÉÂuäzÑE^½s/°öùÇ•²8T²îf²Þ:‹¢A6Ö^yƒì$Mú]·JîiøE™N·gšh&vGIƒ›û- D]°èíý \dë,öc>Ӈ˹!ë[vGÝŽ d¼ ~ø~gx©óÃuý\‰)´¶»ôyPu­êQ¬6sñ] UÓø^TLÝžM'+Éó¾mñ‰ú©3ð{YÊT÷V¯¦ß•*Òõx4ÜoEv%K>~Ú B'óÝßhÄ– +\Ó±8 ØãràÔòD3h Ä“0D,¤É[µ³:Ýê dÐ9 QÔ€EÒÔ'{)Áúrø®óɪ¢«q—µÑ$”ÄêY_ÝÔ'ÿ=>\f¾sUË"' Á_‘k/ƒ“†® +¦6pkK­é·ç÷'‘s[w²…-@Ø£åÌ­ßp,XBšÎÞ'h7ü•¿Ù*Œpv +÷Ãa…|‘¥nl Ø-H±ÈZyá6µ¨€÷ƒ( +RÜŠ1ÏuL~”6`l ¿‚~ZѨ¢<ÓCƒÚ̓ý¬j¢$¸æI·ÏÌ]¿(òAw·øYìÜÛ€eö¢ç9'ÉQ³m§Vu´:Åìe/¡P5G*@'ëR¢tGÑ­Ò…Â<x)aA· +’ r”OœBç=Á 1j"«¢ºÑpQɧUäzý"GöÄÙ G,ØÝfS6ä ÐBdz˜€z²Ó„Q™DÏ B0q¶Ah3>£Œ7«®sÙØ£FfÁ'‘«RuJãÆÕùö‘]ôçÛ/¨N‡ÝVM)gQø|$¶Ì­} 8Épat*ÌÒ¹Ã^‰©€ck ˜Ö…/ ‘úf8ùtTù‘w)Ë¥áZ½RÜ0†Oå:»^•˜Ã&Ù:v3*LO„Y‰ÅèÖt4™\a¼°[`\ÃÈÈö®ž„Ž—ÌÉAM´Ěû«„Ä„ €É,Ö£ÄvFø[vAé÷Aô´QêÜéüY4²³Álˆ†±ˆC¶ýB=ù¸!‚nÌÊw‰P‰ü¨jiˆ¯ÔàbºHêØ슆 Â÷ZÁµêμûž¶ºž–Ï܈RvµïY×ÛæÕ¨äjµ¤½¬s«I˜ŒéT×wìDDåïÛÍêv{K‹<õ0Ø>Þá0(î9±Þs@ܘe·ž«„D±é Ønu»ÁƒÖÄqE?cÔq,¦…îÀ³ÆúE£ÁĘŽAÄ)ôkÙ>ËRži6”šQÑÇÑ í%"Û2R¡q¼µ2$Q†£5ÄÞÞ3Xßñ±bɾ¾Ûºù~­(z‚Hׇ î †FX³Á¿,0x,ã&þ,<^ NÖÀY_Ö# ÆÃkfÝOUÿÕ‰[¸‘{Y›åj_¼ˆ1î𥑈6Hy ÿ/óŽ#窀Š +ã”U#7Cã@Q²€.ÿ¾ô™Ñ„K ÷yIJ­¥¥tG6µí a)\§ë€Ö&tÅŒ‚þ[år Òéú@Øèªé)ŽL½"Ÿûæ¢@ù<ópBµÙ>~æÜpËBtG‰ãÉYxEìÅbè á¥…9`°8#Û–8Ϲ6aù/3!(¬ÝˆUÐâ£:J¼TœpŠq«ëÄLM³ÿ@ÏM •($Ñì]€B‰±c€2i ?P‡nþmD4“Ç v;)*¼Q¾Ý3,$¶×`(‡æJý× éz`ê„Þw§Y1J†|%\‹B¡kùüEÙi¸U³“eÉJ}“/Ë…ü¦¯KÑX%=›4øªQÕ‘¢®óñg¯,•Ä²áŽg k ¥TŸ%#.Q=( ‚ש©ö¦7F ŸgàÑ[¦Ã–è@±¸ˆ$ŸægH@Ä%²ZI(Ž":ž( 6SaUŸiQc¢õFêƆEiX*×5ÔÏ]OÕ-ãÖXXE p³Í‚¥¢o¹‡›MÔºõÁùˆ4òK®øbðج–S€¼V(Ø&ˆ0ð[P£ ÄNg[iÝÑÒF´åêNuЧ—%KÞ©gI«w}o }U¯K­yHÝ2Ž"ÛüÁ×ý ÆŠýô3À‹¬ÉC–Påú‘?{°GÉÏæ#Sð¹c"ˆ£oë¥yó–þ®‚¸åé·žøqsˆ™Ìy™Àfá:ã¤m,ßû¶¿š°f¬…´íº¥®ÙÀoçÁâgþe5ñÐ7þùçìÀשŸ%ÃF¨g½=mü‹Áßû iå¢Vendstream +endobj +1600 0 obj << +/Type /Page +/Contents 1601 0 R +/Resources 1599 0 R +/MediaBox [0 0 595.2756 841.8898] +/Parent 1579 0 R >> endobj -1594 0 obj << -/D [1543 0 R /XYZ 85.0394 170.4341 null] +1602 0 obj << +/D [1600 0 R /XYZ 85.0394 794.5015 null] >> endobj -1595 0 obj << -/D [1543 0 R /XYZ 85.0394 144.9896 null] +602 0 obj << +/D [1600 0 R /XYZ 85.0394 769.5949 null] >> endobj -1596 0 obj << -/D [1543 0 R /XYZ 85.0394 140.3179 null] +1603 0 obj << +/D [1600 0 R /XYZ 85.0394 573.5449 null] >> endobj -1597 0 obj << -/D [1543 0 R /XYZ 85.0394 113.5982 null] +606 0 obj << +/D [1600 0 R /XYZ 85.0394 573.5449 null] >> endobj -1598 0 obj << -/D [1543 0 R /XYZ 85.0394 110.2017 null] +1604 0 obj << +/D [1600 0 R /XYZ 85.0394 539.0037 null] >> endobj -1599 0 obj << -/D [1543 0 R /XYZ 85.0394 95.4372 null] +610 0 obj << +/D [1600 0 R /XYZ 85.0394 539.0037 null] >> endobj -1600 0 obj << -/D [1543 0 R /XYZ 85.0394 92.0407 null] +1605 0 obj << +/D [1600 0 R /XYZ 85.0394 510.2426 null] >> endobj -1542 0 obj << -/Font << /F37 747 0 R /F21 658 0 R /F23 682 0 R /F47 879 0 R >> +1599 0 obj << +/Font << /F21 690 0 R /F23 714 0 R >> /ProcSet [ /PDF /Text ] >> endobj -1603 0 obj << -/Length 2889 +1608 0 obj << +/Length 2893 /Filter /FlateDecode >> stream -xÚµš[w›º€ßó+üh¯Õh£ ·G»‰ÛÄͱ“ž½WwˆMV0¤·Í¿?#tA`Ý笳ò ֧͌ÀþðÄõ’p⇠¹v'Ûý™3ù}WgXÊœ+¡sSêâþì÷ÔŸ„(ôˆ7¹2Æ -xr¿û2E3Á™^,/n–Ÿ®ÖÑÝõ_³sâ:Ó¿׉Vsq³y¸ºZlîòv½ˆæËÕˆàÙ¹ï…Î4º»[¬æË?EÄGutëåb3ûzÿálq¯_ÛüiØ¡ü¿Ÿ}ùêLvð ?œ9ˆ†;ù 7ÂaH&û3æRä2JUKv¶9û—Ðè­í*ì B=Ò3WO0F¡ë’Öd¹!ò(¡õd­“²8¶‰œ‚d[vâú~3ðöš”ƒ¿’bä»ÂÐ/Eû*)þN_Öï/1è×®fLL‡ëÛUk©SÝÌ\<˜øÈ%~[÷*ù ?Óé|µëµlHþv’§UZäõœt~ -vL+õà%ø@ïà)âL/ÑûYH¦HŒ±ø‘f8˜>LJªÀÓÙÕÿÉô6ÞÇ/E){ײ÷!ËöqžËAã|'šïf˜„jðÛbû¿&Õ!…§áý`&Ô+‹e ìãÓ¶*á=jÊ°è4DØ Cxl„°)5LXKi¾ã ¶ªnŸèî%ÜÒ-ÀÂO_m¢;µì¹p0mCèÅ ºýÐ Ì Äÿ[€”æßÄÀÄG“½—E–dY,Ÿér`Ã|ÐO±?ÂÁ²pPRšCàÛ8ØTººû9˜º#¾–ýémƒ9Á¥7}*¢mñ뵦‘”¥˜Lè¼)¶17=!±ÌAx¯¼i*;ªçD\Ì‹}œÊÎU¼—­›·²Jö=X©ƒ‘˽hƒ•b°^9Xü#-e[csÐñyæºÓôWšH‹ÓÃœkÇ £ÝÏ|6Eï:«b)WÅ<ݾ¤yYäRàCœãÛ^Þðº`°í1:fŸ†”e]()µ.ˆã˺°©6ÖEWwÿº0uú ØfJ1«ý/o¨W¿Ø¼&Ûôé­^ü¾FÎ%›%›‹')ž~¤Û¤D=Ô‰"L‰AaîŠù“WÇìñ¸Ê$ -jt¼G¯~c¬úqe×õ‚ÐZ ÂN{»îH`dJY¨*)M{–}ÕªÚ ÚÕÝOÕÔý ,fBò‚‹e^%‡<©ÄÎû Ù–°—=+)~»üs±——…°ÿ\>{•q&®£ÝN9ù\üúÊ•÷= ÃŒø™ˆóê²siÔJ¬Å0+¶Ûç´0Ú`¯0D<ŸÙñšRÃxµ”7ÆkUÝà=ÑÝ‹·¥›ï ÙQºcêÕÆG¨?}ÈSJ4v¶YhYî’¼Jy\•JÑt”.Ÿ*_mÚ—SíË©Õ—Sä.5}y(6a>Xœ§I&†¾o‘òßòÑjØ£² ^K±>æ‰íƒv ¢~HG@RÐJJƒ&Ô±€¶©6@wu÷ƒ6uLä_üÚ>Çù79ó$K¾©í¸“Hˆm.O.½ÚôEV ‰ mV*tŠªÖÙ,(AŒyc ) %¥)À^o¡`SmPèêî§`êžo"ñÓ?.þ*;aÅfy%›Ò¼;ïÊŽxô+ìˆ? ìHçÇ@§Î{¶KÊPè{mBsIh—U¿$²™Ö†¾{§âba÷ÏšX8L ÃÌ`:æ ) 1%eó-Älª b]ÝýÄLÝëMôÇíÜ…ÅWÔ¨eDá+jüŠâÿÅ6 2ŠoÔê$5~=BÍ ‘ÏœÀØå|n`cŽ‰ß5ØD0£Fjå“V˜,p“n‡iJ ÃÔRLËngUÝÀ<ÑÝ ³¥{S‡z—Â!^&±…Að™”¼Õ y_Í7(†¼Q0äWŠ!—aH(Âv6 ùóœ!Ö4=ÇU …L½ÂøÅ')|uÜíÔÊàFÜbÚxÚb¹ âxŸúd¶!e­¤ Ø¡¶Mµ»«»¶©›ÃŽÅ>ˆ¸Æ !6}ª£–ó뤮̈^ØKÑŸÊézÃõ†Úõ†ë ǀϱ´ázézïåz=|bÃr `ÂÇ,£jHY¨*©†*³Ä1VÕÕ®î~ª¦îyRÅÛçd÷ßlŒ"{7*=¸`v)eîÿy«¤F†ØAcJ £ÑRX -VÕ šݽhZºëÐÆWuº@`¡AÆ‘Á´4 -¼C™ÏS2ƒ*[õ§¥,ˆV RtmÖ¼2óyÈæ˜$ð&D_ja £:Д„\£$t#eª|­°•]<?fcµHÞ'‡Y0m²Iâ8Ã%Zê¹È!Y†”e()½BìZV€Mµ±ººûW€©ûžeŒq[¬)3F§Ñ±z†m·z]wEÊË¢C]Ew÷kaŸ¼¿fÌûÚY'ï’ÉI¿“õ\ÖðoÁSÃú)•®‘Wä‘ï¯ÊŸlyÕMò -þC§)vŽ¶á‘·‘±02Š ÅØâ^-J ~m­ýô­<ÐÝ\GçX`Èl„ÈP—Â%D‹L^àJj±ªÞ£z‹uõ7®G¶Ëx8›‡1Xø_ÒŠyy×𿼠¿I¦jŒT ˆ‡)BqÇÜq#dá(…ÄR·³é5Hv÷£4GMº.’ñµ>$üh°“ßߤe%SOá{v1Ž7܉[<ýJJãPöîFé ] ààö–j¸^È«ŠíóIÆ - <¢8´3„†)! Ì -¥›ÞXWq/0S±¨¡þª’¼¬O*a vDMþ—Ç××âP ¡åhü‘JQ6‡F¯¯2ãcäx¡±2âN7H8`ù,ä8Έ6¥†™k©æË3·ªn˜ŸèîeÞÒ­çc‘o‹Ý üURý,/MÓ­ ~‚é;üd'@Äñ‹›ýlÞ´¾: âõf*y †“ì†(ÀcÕSÊBII5”lû¥UµA©«»Ÿ’©{|?¦bÛ'¹ÚõÙyñ»ëBo˜çjî^³tkÒ›²®ôÜ}féCòÄ:…ó‹C¼KÊå6(~LÀFêu¦”Š’ÒPÜÐf:6Õ”®î~(¦îñô~SŽÛJ¸É¤3óÆÙFÏÖºÈó)kOþiw˜ç‰ýðƒ -w,!0¥,””Në(¶ìZVÕ†®î~ ¦îË,.ËL‡‚ËÕy4Ÿ¯Q´Þ%úé†åw&ûZUUÒ]ž('t%w’æU=÷EQu¿Âèx¶æ(¿Ùð¹.†ìÎÁÁȱ½)eA¦¤4²€X¢I«jYWw?2S÷2ºP[/Q$ÛçÜS¦>gÚs'÷¡îaÓCž~?&Ý`ôn:®ç·Á¶e$Q@XÙ±Ô‹"îTÐ~§rÀÏ Æ¾²0„†i)¡¦lB,•j›Þ†UWq/*S±öq,P>Ž…ÜÇÍ ­®Ý ;UL\F«H\]B®î’C<ô}#/iz¤uú#Ö)5k$ŒÓ­%ya4P’~¯$œø#Ìùp +"‡Ï®ëgýFÐ\í‰s&[ÔÂŒjp`‹1ãÄ.}Qe½ß©ª%€Ý)«+]ðq‰§µU«*YejRueêd9ø]ËcmzÂê ½7À$Ç÷ÓdþPÓ\æyÑV–4 j¶ÐŒ¨+Eœ-«wvXŽæ=ª‰%dÅ\ ¡a»•Ö5ƒ´Êà_o ö`2bö²Í¶JÃà>¨u|4Ì_ëæ ¡Ì!æsE¸}­u±*ÁÛ:—o4\½y+ôLX7z[ì c,€د1z…IV7ûº‘¨j} ˜oÕË‘r(üµ…½²ZÓyYp)㨠¢–Qfsø­;rªúÀ˜¢Ê‹—"?È’!Å›y#ˆ7S`× t’Tؘ{¾ð Ì?©Š1Š¹j­Ê1·væx=ok`Ã[Ç DÚtÙß?¾D|‡ó¼#*–÷³º×ð¿ó†@`éÇNà‰Ð°d6IlØ}1«$áè ïùÉbU´„«WµÅ¹gî:ø'AÉå€ïa³–YÇȘ Z…ÃÈ(9Hãùë¶È¶o~]½½'¤º` ¤ˆ„w ‰ã:¸¹•Í€TßH(ýæÀù„x^:bÞ÷ÇCÙ¾«ÆÔ bOü?$$õ®Æ^<öÁ^nð¢ +æíœH¸>ø8þzduÖ+ž™ ‰èMY¯0† Ð:„™ ¼‰(5Dòâ=@¶«‡›}´ÁãBnÑŠw|º»!&ñÅÔeúìûÁ'ãL'Ž© ‡â àÎläࢩìÒG¯ÃÍq Iôo£´œ²<Ô‰PÓlÏÍ@ÔÁUæÄG» y¿Nxø¸ë=ãÝ=}ÊSK¨+Š˜5†þsºC:¡'¼£ªÜ¦ÂCìDPÚó’έþÐv±püPص”ï8AâÇcË,)?§½Er¤@@Žh T +$Œ©!cš JÓ©ÍüÉü°×Ê•Ü Ù™E AL&ÚûçÇsjÛ sîOM–c©6ÛòÍ$;³ +v!¨/rÍ[×½® ÞLh܇l›„´¦5õÃD œ$ŒlH„r«å&Âçݳ5º?¾·hdµÁk+ §/-UçI0> +è¾ÏÝG$”uf,Õ­DC¡Æüx¾;˜t +(–"—ÜYi4¹B™º¦qfèY'ÉíŽÑ–\z ¬nÌ\³&ÊKŸ ‰•v(Äð1“‘㣓Æ|ÒØŠž«Ëˆp}µ6eè£[SWöj›ŸMñ¢Âú`K@®Ö j]¼©VP%Ûc4ºãê#‘œ*Õ-õNB'V½S“ÖÂxl˜gr/WXÖà= #’qcYaç 8êò®• õ•Ëö0î$3£–F®ÁØÑ‚𪕲€¦)¨Ùˆ1|L7eX¥s*-qPC+a©÷Ö> XúØö±°ž  WÓgÀÀ´ëð{SJ­¹ô‡©©í>ÖØ"à© g0Áhrsÿñ ÃÈó1‘¦ß,°Õd0\>M„4Ê‘Qƒ+KŽ\”c.¬ŠhÙdEÛ¤Ašäèe<à‹uÝ«²ä~É°?Òì¿A{É ”Ôøø¾ÿˆ8"UÐ%1t\éÁî`ªŒ˜ ‰HÒ¿˜Þtè£}VÕÐ_àrÉhÓ±#}à'nLsD¯€“‡¶Æº$ë) kL蘌‘¦Ö¹aTìö¥ÚYu›ºÊ£²Ýbf`’–5ýv¢àdб¦œ)à·7En¡vÛ\­%””4é-„¼×ô[)¸ìZ6oçÈõX˜Ì¯'ûÓ·}‘ÙeÜÎJ©]±ÙrUQÖ57°eñE]u-ã "‰„“aë_ßu½«|•\ùð›^I×…õ¾Wk•xWþJø)mÑñ™*ÛÒã@ ;L/ʨY'²zÝššbb™Û—¢ÏÞ’9” Cfb‚ ã\sÂ]¨ ÏvHÆïV¼×V¾("+ª¬ÛÀ8«KsÕaˆWýßWW¢K =ÉIøô¥;^4@%(SÚÂdà†¸¿ÑʸSî”bÙH^šÉÉÇ!4F{\Zf6ç¬8€´} âç13êêʪ«Hó›!¾}°ü\ñœ­¨7Üoßú؉õ|Ø *¬(OJæpþÁÆä³H`7é^EžÄ)Û-t/`7õÄàÚýÇHžÇ~ , KÌëì`9B»EœLçsyÛÖà&Ñð\´Md½•ÌÙ|4o.hÔ¿4~^Wè­QâX†½lx7ã/Ñ»ÏbŠ„rS ƒ^E8©È@´ÂŒLcÓ’Ã/ܽmE! §UÝš&7!'\×JÌæ(ÎËñ.iU¾XvÝép’›ž¢2‰¦Ø;ðšÉ½W3ÜðÛjÕ“jº˜¼ý¿É2‚endstream endobj -1602 0 obj << +1607 0 obj << /Type /Page -/Contents 1603 0 R -/Resources 1601 0 R +/Contents 1608 0 R +/Resources 1606 0 R /MediaBox [0 0 595.2756 841.8898] -/Parent 1531 0 R +/Parent 1579 0 R +/Annots [ 1612 0 R 1613 0 R ] >> endobj -1604 0 obj << -/D [1602 0 R /XYZ 56.6929 794.5015 null] +1612 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[0 1 1] +/Rect [253.7995 146.8976 417.685 158.9572] +/Subtype/Link/A<> >> endobj -1605 0 obj << -/D [1602 0 R /XYZ 56.6929 748.5056 null] +1613 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[0 1 1] +/Rect [63.4454 108.9117 208.8999 119.0735] +/Subtype/Link/A<> >> endobj -1606 0 obj << -/D [1602 0 R /XYZ 56.6929 748.5056 null] +1609 0 obj << +/D [1607 0 R /XYZ 56.6929 794.5015 null] >> endobj -1607 0 obj << -/D [1602 0 R /XYZ 56.6929 748.5056 null] +614 0 obj << +/D [1607 0 R /XYZ 56.6929 652.1213 null] >> endobj -1608 0 obj << -/D [1602 0 R /XYZ 56.6929 743.7078 null] +1610 0 obj << +/D [1607 0 R /XYZ 56.6929 614.8935 null] >> endobj -1609 0 obj << -/D [1602 0 R /XYZ 56.6929 719.6381 null] +618 0 obj << +/D [1607 0 R /XYZ 56.6929 614.8935 null] >> endobj -1610 0 obj << -/D [1602 0 R /XYZ 56.6929 711.8197 null] +1112 0 obj << +/D [1607 0 R /XYZ 56.6929 584.5024 null] +>> endobj +622 0 obj << +/D [1607 0 R /XYZ 56.6929 289.5256 null] >> endobj 1611 0 obj << -/D [1602 0 R /XYZ 56.6929 697.0552 null] +/D [1607 0 R /XYZ 56.6929 251.3901 null] >> endobj -1612 0 obj << -/D [1602 0 R /XYZ 56.6929 691.8868 null] +626 0 obj << +/D [1607 0 R /XYZ 56.6929 251.3901 null] >> endobj -1613 0 obj << -/D [1602 0 R /XYZ 56.6929 665.1671 null] +940 0 obj << +/D [1607 0 R /XYZ 56.6929 222.7156 null] >> endobj 1614 0 obj << -/D [1602 0 R /XYZ 56.6929 659.9987 null] +/D [1607 0 R /XYZ 56.6929 53.7852 null] >> endobj 1615 0 obj << -/D [1602 0 R /XYZ 56.6929 635.929 null] +/D [1607 0 R /XYZ 56.6929 53.7852 null] >> endobj -1616 0 obj << -/D [1602 0 R /XYZ 56.6929 628.1106 null] ->> endobj -1617 0 obj << -/D [1602 0 R /XYZ 56.6929 601.3909 null] +1606 0 obj << +/Font << /F37 779 0 R /F23 714 0 R /F21 690 0 R /F39 873 0 R /F53 1002 0 R /F11 1343 0 R /F41 910 0 R >> +/ProcSet [ /PDF /Text ] >> endobj 1618 0 obj << -/D [1602 0 R /XYZ 56.6929 596.2225 null] +/Length 2824 +/Filter /FlateDecode +>> +stream +xÚµZ]{£6¾Ï¯ð¥ý<-’ KÇö¤É4™4v·Ûα›g0¸g&ýõ{„>äζûä" ôâóžO <òà"†<ÊýQÈ}Ä<ÌFëý•7ÚÂÜíV2×ZèÚ–ºY]ýó Gñ€£Õgk­yQ„G«ÍÇñôéiñ8¿û÷äš0oŠ(½@‘-5L‘‘ÒñÐá3N䆡3è~†ZØqš©Xœª4ßv8¨v‰¼°©\¾•U²ïs1Òç¼ÍÇLiÿ)>‚æ7ÛDßÇù)>¾ÕH-ÙŠpׄøˆG Z*~€O꥟ŽÅ¡(m)—^@Eäw–”ƒ;-eÜ‹s‡{9¡-òºØäÙàwùú8ÁÑXzâñ?E®([M0Æãcœ—ŸµkçË>ú|ŒpªnÑ÷ èû°«b54=mOe¥‰ãÁ°Ïà…äR=`K9ô®¥,½½» -½w±ônƒO•b’õ.ÎÓr/o?JÉO5)ÅþPéSÙa¬+>wÙšÁZÛÞDAAHœAŽ±qú-M¾›Od7ï?–”ƒ-¥ù!˜ºøqA[üt±ø±Áçoy¼Oדk„㟛¸™‡Qmÿb°kâB‡5q-2”p;CŒƒ† ÊÆ ±ŠÍ…˜\ªñծؗE®F­}SM='_v¸hèëëø+¦îkê@!øÚ„FÀ¿)NùFs~8êP”§1ïûÔM¹-5L¹‘j(ð0åNè†ò3ì~Ê[à³,>ZN¦ +ªèf1ˆ{²¶À,@^C-·{FæBþ¿9•;yµÈþЉ픽ý&A$¢ä–”ƒ -e˜ ^ä`Âm1ÑÅ`ÂL¶ ÒWÕâõÎT:è~:%Dz›r„I@úSÑ4ßÈÄ÷U×qq=°Þ½GÃz‡¦CP½ wKÊ¡w-eô„.pA[zïbèÝ_|«’¼4 Æ$§²“ŒòE?¼€;Ow½gF¡€ùŸóŽÃô1|‰KÊA–²(  +\Ð]ì +lðÇ"¿–EWrܧ¹®ÈŒÆe‚©£G²I¥¯ÃC$d´ßfÇø«`VØôëžêÞ^"ˆ|nÝÛRú7RF÷‘洞ÐîÏ°ûuß_&ª* lü>y“M¯UýEÐ䄼JMM’ÒEàBÂEVË»Û!„"/bØâj<nÀCüq:Ácå$”?¨©ÛÓfé»”E¡Ñx®fqY]˼o Zy?‹¿h—£-#0}Û2”_&œŒ“,ƒ\Iœ:XªôD<(›í$QêÝvbI9ìDK;áÔs؉ Ú²“.ö€Øà-;H;黬â—,-w¢™rÅÌÕû…ÚQ|~ +G>:›Fsʼn wÁer¨¬ 7C>GŒK YR†´”Å#‘9¡-†ºØ ÙàFÙÏÉï§D‡4cÙ=þ,Ô–nó¸:Ijˆ,é¼^ãÊ!7ö Ö „ÿ¿Ù¢Ñ_bË’r°¥¥4[ÔóB[.h‹­.ö[68ø“Òúù>Q“ïTCehŽk2ä#º]7²]ë ¶1´Ir†¹öÞž›LD¸±¤Üh)ÃMà̉.h‹›.ö76øm’C}-†’¨´Ñ. àîøš®95ͶLíörN†=ùH+á^ÆJèñA±L7§ÚkI¯† Aÿír)ó›§óš<åqåZ†|æwÊ¡¥¢ÿý×8ï«OoeW°Õ}™N3¹EóVÿ5û£vø2})^í™û–••ð+㳄«ûÁâ,SsÖUa›íßßä4OÝýͦQmh«·–¾kÛ“úò¸ºÍÚ–6k#eÌš‡Y;¡³>Ãî7ëø]¾©mL·•ÏIYd¯ZÑËÓáP«³Žs¹˜õeê€AìXìŸùÑP=OÖíp‚à …XÅ)½¤wKÊ¡w-eôQêл ÚÒ{{@ï6øj'£A Ê…—€.<ÎÞÊ´”wBÕâ¿ÜZƒ ³µ×jk ®t&×v&èøT8I³×&VE +¼ú’æ +Zî–Áųž„N(IEHðq ;#UO«E[õ4é’I8F/ì‘ÚRÃd)M¦ï¹ÈtB7dža÷“Ù¯ æv^À<ߪ€d>.6'ÙÅh­`!,J²´9sèݹ‰|èXìbÊ‹jbÄóSù,t=Ý Ã˜}P£?ÆGÕy²;/ó—e¢#·ÜU-N›cD¤¸Ê¤·ègÃô…¾°_jK9è×RýŽꄶèïbÐoƒ«3ŠªXb—|æ¡Øt6P#¢Ò·öj1"“pä&1ÁÜ}‚>·~¶Ï™¡W÷¹¿9–Im›…™°YŒ>(qmÊ£ÕÊ-öuoKçxù/ÚTÁLtæn»°¤v¡¥»ðçÁNhË.ºØvaƒ‹\*ëyQB䇑u!JŒú¦¶J#婪ëÄEcâÎìFöŸ¾øÖ¾ e\oÚ‰ÍDdƒ}Pâ&FˆÁ¹:.1-£ø{Œá¬€ AáT`ÙÜÐÐÑ|äI¬w€^Õ N_ŠSÕÙaè|1`|˜EÈ/´’–аéi!s¨Ê\É…Û^¸ßîläéäšß²!q§bÔK&ê1P³eͨRXŒÌŠ£½ŸZý2!ÞÚûn“djõyrÈŠ7ý|­ÿúŠÏÕWÉ|‚zl—BÁÒÀÊoŒCøSvgf[vw¿ÊÎû:Ì9Œ2˜DÐk“ ©-å ZKY\;hÐÙ]ì¶mðY±ßË]W¬7[{¾‚É…dµ8–RFú+L,OÛ-tbu'ãïÒoýGç4D!Çö1õëÏÅ"ïOûXŸºŠ}׺σ՞ +X9Sƒ35ø˜€´I:zÝÏ­Þsç¤Û¡8óf™9ñý>“à"~¸-Â6-Ô|P9N\¸9tû­ÁF^&ÇT•<žškZoI$Uºî«2!3ÿütÖÅ´çâ¸ö{?’ˆ<±¡þ·„†®…š4ïúìË…Û(¼ ܯpÙxÔùiù’ìâ×Td},»…®­Ö LKç„ }R[‹ÈªFïž^y5ݨYÈ°½Ž@óañEXóDý*Å1-wiKIŒ¯„—(™û4ß'©vB½fkÉ>Ü®Þ U‹Op{Të™Üþ—¿ôµvCD£hà0zŠõK‰_ÁÃî››O‚Ï_ý¿m1bªendstream +endobj +1617 0 obj << +/Type /Page +/Contents 1618 0 R +/Resources 1616 0 R +/MediaBox [0 0 595.2756 841.8898] +/Parent 1675 0 R >> endobj 1619 0 obj << -/D [1602 0 R /XYZ 56.6929 569.5028 null] +/D [1617 0 R /XYZ 85.0394 794.5015 null] >> endobj 1620 0 obj << -/D [1602 0 R /XYZ 56.6929 564.3344 null] +/D [1617 0 R /XYZ 85.0394 752.3015 null] >> endobj 1621 0 obj << -/D [1602 0 R /XYZ 56.6929 549.6297 null] +/D [1617 0 R /XYZ 85.0394 752.3015 null] >> endobj 1622 0 obj << -/D [1602 0 R /XYZ 56.6929 544.4015 null] +/D [1617 0 R /XYZ 85.0394 752.3015 null] >> endobj 1623 0 obj << -/D [1602 0 R /XYZ 56.6929 529.6968 null] +/D [1617 0 R /XYZ 85.0394 746.3107 null] >> endobj 1624 0 obj << -/D [1602 0 R /XYZ 56.6929 524.4686 null] +/D [1617 0 R /XYZ 85.0394 731.5461 null] >> endobj 1625 0 obj << -/D [1602 0 R /XYZ 56.6929 500.3989 null] +/D [1617 0 R /XYZ 85.0394 728.1497 null] >> endobj 1626 0 obj << -/D [1602 0 R /XYZ 56.6929 492.5805 null] +/D [1617 0 R /XYZ 85.0394 713.3851 null] >> endobj 1627 0 obj << -/D [1602 0 R /XYZ 56.6929 467.136 null] +/D [1617 0 R /XYZ 85.0394 709.9887 null] >> endobj 1628 0 obj << -/D [1602 0 R /XYZ 56.6929 460.6924 null] +/D [1617 0 R /XYZ 85.0394 651.9592 null] +>> endobj +1056 0 obj << +/D [1617 0 R /XYZ 85.0394 651.9592 null] >> endobj 1629 0 obj << -/D [1602 0 R /XYZ 56.6929 436.6227 null] +/D [1617 0 R /XYZ 85.0394 651.9592 null] >> endobj 1630 0 obj << -/D [1602 0 R /XYZ 56.6929 428.8043 null] +/D [1617 0 R /XYZ 85.0394 648.8377 null] >> endobj 1631 0 obj << -/D [1602 0 R /XYZ 56.6929 414.0996 null] +/D [1617 0 R /XYZ 85.0394 634.0731 null] >> endobj 1632 0 obj << -/D [1602 0 R /XYZ 56.6929 408.8714 null] +/D [1617 0 R /XYZ 85.0394 630.6767 null] >> endobj 1633 0 obj << -/D [1602 0 R /XYZ 56.6929 382.1516 null] +/D [1617 0 R /XYZ 85.0394 615.9121 null] >> endobj 1634 0 obj << -/D [1602 0 R /XYZ 56.6929 376.9833 null] +/D [1617 0 R /XYZ 85.0394 612.5156 null] >> endobj 1635 0 obj << -/D [1602 0 R /XYZ 56.6929 350.2636 null] +/D [1617 0 R /XYZ 85.0394 585.7959 null] >> endobj 1636 0 obj << -/D [1602 0 R /XYZ 56.6929 345.0952 null] +/D [1617 0 R /XYZ 85.0394 582.3994 null] >> endobj 1637 0 obj << -/D [1602 0 R /XYZ 56.6929 321.0255 null] +/D [1617 0 R /XYZ 85.0394 567.6349 null] >> endobj 1638 0 obj << -/D [1602 0 R /XYZ 56.6929 313.2071 null] +/D [1617 0 R /XYZ 85.0394 564.2384 null] >> endobj 1639 0 obj << -/D [1602 0 R /XYZ 56.6929 298.5024 null] +/D [1617 0 R /XYZ 85.0394 549.5337 null] >> endobj 1640 0 obj << -/D [1602 0 R /XYZ 56.6929 293.2742 null] +/D [1617 0 R /XYZ 85.0394 546.0774 null] >> endobj 1641 0 obj << -/D [1602 0 R /XYZ 56.6929 267.8297 null] +/D [1617 0 R /XYZ 85.0394 531.3128 null] >> endobj 1642 0 obj << -/D [1602 0 R /XYZ 56.6929 261.3861 null] +/D [1617 0 R /XYZ 85.0394 527.9163 null] >> endobj 1643 0 obj << -/D [1602 0 R /XYZ 56.6929 199.468 null] +/D [1617 0 R /XYZ 85.0394 513.1518 null] >> endobj 1644 0 obj << -/D [1602 0 R /XYZ 56.6929 199.468 null] +/D [1617 0 R /XYZ 85.0394 509.7553 null] >> endobj 1645 0 obj << -/D [1602 0 R /XYZ 56.6929 199.468 null] +/D [1617 0 R /XYZ 85.0394 483.0356 null] >> endobj 1646 0 obj << -/D [1602 0 R /XYZ 56.6929 191.7053 null] +/D [1617 0 R /XYZ 85.0394 479.6391 null] >> endobj 1647 0 obj << -/D [1602 0 R /XYZ 56.6929 176.9408 null] +/D [1617 0 R /XYZ 85.0394 464.8745 null] >> endobj 1648 0 obj << -/D [1602 0 R /XYZ 56.6929 171.7724 null] +/D [1617 0 R /XYZ 85.0394 461.4781 null] >> endobj 1649 0 obj << -/D [1602 0 R /XYZ 56.6929 157.0677 null] +/D [1617 0 R /XYZ 85.0394 446.7135 null] >> endobj 1650 0 obj << -/D [1602 0 R /XYZ 56.6929 151.8395 null] +/D [1617 0 R /XYZ 85.0394 443.3171 null] >> endobj 1651 0 obj << -/D [1602 0 R /XYZ 56.6929 137.1348 null] +/D [1617 0 R /XYZ 85.0394 428.5525 null] >> endobj 1652 0 obj << -/D [1602 0 R /XYZ 56.6929 131.9066 null] +/D [1617 0 R /XYZ 85.0394 425.156 null] >> endobj 1653 0 obj << -/D [1602 0 R /XYZ 56.6929 117.2018 null] +/D [1617 0 R /XYZ 85.0394 355.0758 null] >> endobj 1654 0 obj << -/D [1602 0 R /XYZ 56.6929 111.9736 null] +/D [1617 0 R /XYZ 85.0394 355.0758 null] >> endobj 1655 0 obj << -/D [1602 0 R /XYZ 56.6929 97.2091 null] +/D [1617 0 R /XYZ 85.0394 355.0758 null] >> endobj 1656 0 obj << -/D [1602 0 R /XYZ 56.6929 92.0407 null] +/D [1617 0 R /XYZ 85.0394 352.0499 null] >> endobj -1601 0 obj << -/Font << /F37 747 0 R /F21 658 0 R /F23 682 0 R /F47 879 0 R >> -/ProcSet [ /PDF /Text ] +1657 0 obj << +/D [1617 0 R /XYZ 85.0394 337.3452 null] >> endobj -1659 0 obj << -/Length 2544 -/Filter /FlateDecode ->> -stream -xÚ¥ZKs㸾ûWè(U€ øÈM¶l&3¶#y²IÍî–`™ŠTHʳ³¿> âA" É¦|0 4ñýu7º›ÂxS‘$˜DIàQ„éd{¸B“=ÌÝ_a)3WBsSêúùê/w$š$^úáäùÕX+öPãÉóîÛtñôtû°\ýs6÷)š.¼Ùœ"¤Fon7³y&|‚ð©M¯WןW÷ëÅÓlj‡~E-–âfóõþþvó|+o×·‹åêáDðì·çOW·ÏúµÍ­aDø;ÿçêÛoh²ƒ~ºBIb:ù7ÈÃIâOW% Q#ùÕæêïzAc¶}tLU”ÄýhDW>ž`ì%”ú=eÑÄ ‰OZe-6b[GV¥MVµuWÃ[\ Kˈ cd Žþm}wŠ"¿ 11E^œÀû;@µÌ50MSêÅ¡&ì²<¤Y!öîY‘Õ l¾¬j1Vvºhï÷§lÇ<þŽƒ-ázAÆðB|ÝBü‹'þ.Xsjâ¡|g‡V‰;œÄ‘gU6çKr¨Ûr(\Ii•S9Tî‚6”>Ķ¨Ý¿)‡R*^[Þ2mRqu—åL\ݔůùû“àA ÞVÕ ÇSNÓ Ì HŸŠ§ö“©äãš±ªa‡TÎ=n›Ò #!V2ÂúªL);ZJ“‘`ßN†º#ã {œŒø(: ¤¹ôb÷g)ñ1õÂ8öû”,ieúÆ{©fñô”V?4#¡‘vNQ|CÊÁˆ’RŒø##.hƒ‘!¶…üLù7UÖ°*“îñZJc]—e##Jz³aÕ;«êÑ(Åà‚qØçáZòð%-Š¬ØØî9Î?f”N³ß3fñO 0Âhê„,I!M’I\ƒ£°…"ùk-Õ]¾g‘giÍêS¬ù^Vÿî(ʶlœ£0ö"?ÆO’é!Ëåtš¤µœþ…ûQ•íß A‘‚ì%sŸ$¥WÌ߃V¸*Àæ -i‡ÙL‚™‡&7;kž@£Ä‹¾)˜RvÖµ”¦=ö©v'tÇûö8ñ=ðì< §Ï3Œ10°Ï[½„(ßGSöò×ÙœþtU×§Ö -`¦µxf…ã‡âR+¦[%òñHQ -ͳpUÉç[BX#îŽ"â6å¶ÌÇ¢.ñ¡Ä<`µ¸ëj¤uk“¹–Ÿ Ó†¾L3Ø¢2ÃTÆd!dõuD^FhK!E: G@vᜀ-”È?1’ÐŽCHGh‡Å.ŽÇ<ÛêôFx5±Z>,TÉ0<& `&„ÁC]†›»4o Em‰?´Q_à#ØL¾Ò¢Ž%Ïü}$Ïf®C@›Ô ËóR3Ý‚lß4ßö¬ˆÂñN‰!¸›RÆ•”A9vPî‚68b[H7Á9£ÂÅØ|šÒ„»>»i*°5ÇÇ€%Á OŒxêÊÅÚØÏçFâ(ŸWæÃEtšDœÀ‰múp€ÂŽq¾ŒÁ¸X«%œÏ|Q„«Ez„_çi±}cÍŸ <ˆ TP—NsSÊN¸–2w¤ÁNèŽð3ìqÂ{àO§âǶÜ1ÀiÔÆùˆL¯!Ū[Âù}0eÈÈ;"";Œ~-2þ¨‡>ŒŽ 0¯ãFÔÅ VC2nÌ[òP?µè…`[D¡õÓˆ…§RøŸrö³<û ¸Ò™'ˆQP" šW,O•,¡Öü €3„Fþ…üÀ”r˜‘’ÒÕÔ€3rAf4Ķ˜‘ þµn­ƒ @œáPeu®Ž™©óÑÍ`á FE:QÊ Þ-àÁEÌ-ª—¬©ÚzHÌVaÑÀÍË©±ÈCfÕE`Mž*òUÖeÍŠ—ôtãüh—ÑB<Õ Ϊ˜@Ê %˜!dgQ i#ìh ¹p;‡ÀãšÈ’ žUõ“ø®SÁ^Nû=ga$G°™x˜À+Ï[ƒ%”–.PØU@åF·Ž )‡’•T§åÄá*NhCÍCl‹žMp­ÏÍéx,«f îÏeºS-~XYôM/ŒÉ ßóÌ+!Õ`¨²z«”¾8VY®5Ní÷cEñ…V)åи’êjÖÀ‘Ç:¡ ±-7ÁR³l¯: ×iÙù ÂS…m^Štv´µ@àšöIxÔmƒÄŸ¦§ý›HJÇLßÞ%(‚ ÇÊ SÊA„’ÒDÀQE:¡ "†Ø"Lp}"„:à—"wƒ‹›òpL‹€¸Z3ˆ÷ìÈ¡ ñ½ 6»;$!ÓOžxòo9+àdjG}í|æÎN™¿Êô+ÜËùG¨ÿê—mP”ëÃBcO‹ØʧQ/ -/¦”O-ÕñIÉ£ºãó {œÏøB÷FßYѵEï”Kɬ`à|*û㽜ÚÑ]9+áU}ŒÖÛtÙî&6Fãà/ƒ)¤Sz9j8®AÊ؉¼fP¶5rfE‹h®ˆýƒNT¥Žh‚? [ÞÐîKð¼zÐôkÉ¥ˆ/ƒAþýIRÔ9ãhÇpl§‰P/@Á…TÀ”r¥¤4Sp6;˜rAT ±-\™àKþåg²­›$œ.Nͨ¼ç‰!ù•lró›húÎûâíè›(dxñÁïyU–Ö\o·“u=êTt„GT‡:Pò>ŠÕwmû›OŠ\B4ÏÔÓ½@Dúv"¡Ê‚ê—=SÊA¤’ÒD&Èår.hƒÈ!¶…H\çt«§÷Påbüè¨Ò¢î’¼³/÷üÓjžlü›ò~tŽæÔËS¥=U_(W[½ Ö•³mر1R`(°ôÄ)öbHžú=ñÇ—ºÌYÃh`i‡cÎûUå{û;l1ã#j‹<ÄXl8GÁXܶ`JÙmAKU”ãPtBw¶p†=n =pa ~8½íš&p×FOøÏÊ}•ßÀIs1òÙ‘`†¾Sš˜ÍQ<½ñăw©øþÈò\δ_L|¨–·o§ü&G7Rþ)gYS0ýÝ‘`É%Ì-¥ »²È>ÈLGá÷ú1ÿC ‡/¡ÜÝ”rP¬¤tÞFŽBÙ mP<ĶPl‚_g…>¶>§/LÕÌÙÙI;ZSȈ¥žH‚dü3ØM•~=’ -§ý©n4‰•%ˆtÓ`ÙYPBÝ'©ÈQG»p;†Àã˜ÈÂÉb §áY…Hvà¾)ù³¸†A•áÊ8åÀ~/öê»~¬¼VY³âÄ-}¼'`(ŠÌ¦Gœºâ>]ݲòÜ”öÜêF}îòŸùüÄÓ -2jëHøÿûYF2òHlë¹B¦žDê¥øæ:|sýË­óWÿ/ÿ÷Ãendstream -endobj 1658 0 obj << -/Type /Page -/Contents 1659 0 R -/Resources 1657 0 R -/MediaBox [0 0 595.2756 841.8898] -/Parent 1531 0 R +/D [1617 0 R /XYZ 85.0394 333.8889 null] +>> endobj +1659 0 obj << +/D [1617 0 R /XYZ 85.0394 309.8192 null] >> endobj 1660 0 obj << -/D [1658 0 R /XYZ 85.0394 794.5015 null] +/D [1617 0 R /XYZ 85.0394 303.7727 null] >> endobj 1661 0 obj << -/D [1658 0 R /XYZ 85.0394 748.4854 null] +/D [1617 0 R /XYZ 85.0394 278.3282 null] >> endobj 1662 0 obj << -/D [1658 0 R /XYZ 85.0394 748.4854 null] +/D [1617 0 R /XYZ 85.0394 273.6565 null] >> endobj 1663 0 obj << -/D [1658 0 R /XYZ 85.0394 748.4854 null] +/D [1617 0 R /XYZ 85.0394 246.9367 null] >> endobj 1664 0 obj << -/D [1658 0 R /XYZ 85.0394 743.3452 null] +/D [1617 0 R /XYZ 85.0394 243.5403 null] >> endobj 1665 0 obj << -/D [1658 0 R /XYZ 85.0394 728.6405 null] +/D [1617 0 R /XYZ 85.0394 173.5556 null] >> endobj 1666 0 obj << -/D [1658 0 R /XYZ 85.0394 723.1655 null] +/D [1617 0 R /XYZ 85.0394 173.5556 null] >> endobj 1667 0 obj << -/D [1658 0 R /XYZ 85.0394 708.4607 null] +/D [1617 0 R /XYZ 85.0394 173.5556 null] >> endobj 1668 0 obj << -/D [1658 0 R /XYZ 85.0394 702.9857 null] +/D [1617 0 R /XYZ 85.0394 170.4341 null] >> endobj 1669 0 obj << -/D [1658 0 R /XYZ 85.0394 688.2211 null] +/D [1617 0 R /XYZ 85.0394 144.9896 null] >> endobj 1670 0 obj << -/D [1658 0 R /XYZ 85.0394 682.8059 null] +/D [1617 0 R /XYZ 85.0394 140.3179 null] >> endobj 1671 0 obj << -/D [1658 0 R /XYZ 85.0394 668.0414 null] +/D [1617 0 R /XYZ 85.0394 113.5982 null] >> endobj 1672 0 obj << -/D [1658 0 R /XYZ 85.0394 662.6262 null] +/D [1617 0 R /XYZ 85.0394 110.2017 null] >> endobj 1673 0 obj << -/D [1658 0 R /XYZ 85.0394 599.7666 null] +/D [1617 0 R /XYZ 85.0394 95.4372 null] >> endobj 1674 0 obj << -/D [1658 0 R /XYZ 85.0394 599.7666 null] ->> endobj -1675 0 obj << -/D [1658 0 R /XYZ 85.0394 599.7666 null] +/D [1617 0 R /XYZ 85.0394 92.0407 null] >> endobj -1676 0 obj << -/D [1658 0 R /XYZ 85.0394 591.7571 null] ->> endobj -1677 0 obj << -/D [1658 0 R /XYZ 85.0394 565.0374 null] +1616 0 obj << +/Font << /F37 779 0 R /F21 690 0 R /F23 714 0 R /F39 873 0 R >> +/ProcSet [ /PDF /Text ] >> endobj 1678 0 obj << -/D [1658 0 R /XYZ 85.0394 559.6222 null] +/Length 2889 +/Filter /FlateDecode +>> +stream +xÚµšMsÛ8†ïþ:JU1†øy¤-ÅVb+^ÉÎÎT&Z‚c–)Ò©$þ÷Û >R$˜Ù­-LM¼tÝ$ž8ð‡'žüˆD“ r‘ç`o²ÝŸ9“oÐwu†¥Í¹2:7­.îÏþxOƒI„"Ÿø“û'c¬9aˆ'÷»/ÓQ4ƒœéÅòâfùéjß]ÿ5;'ž3ýÛñœx56WW‹ÍýB~\/âùru&xvø‘3ïî«ùòOÑóQÝz¹Ø̾Þ8[Üë¯mþ4ìPþ¿Ÿ}ùêLvð ?œ9ˆF¡7ù „£ˆLög®G‘çRªZ²³ÍÙ¿ô€Fo}kïTaê“ž¹"x‚1Š<´&Ë‹O ­'kÍÊâxØ29l[vâú~3ðöÊÊÁ_I1 +<ahX‰/Eû*+þ¾¬ß_bÒ¯]eLL‡Ø¥µÕ©6 mLä‘ ­½b?áçc:¯6âb½– ìoÇ!yZ¥E^ÏIç§`Ç…i¥>| >Ð;¸‹8ÓKô~‘)c,~°Ã ‡ÓçäPÕxz#»âú?™Þ&ûä¥(eïZö>dÙ>És9h’ïDóÝ “H ~[l_’WVR¸¾Ì„úJçbÿø´­ŠGø5eXt"ìG +}w„°i5LX[iÂã¶J7„O´{ ·´Xøé«M|§–=w¦í½˜A;ˆ‚ÈÀ öHü¿HiþM|˜øh²÷²ÈX–%òž.w˜Cú# + e¥9„ƒMÚàÐÕîç`jÇ|-Ó[–€;Á¥?}*¢mñ뵦ÁÊRL&tÞÛ„»ž°Xæ`¼× þ4•Õ3óbŸ¤²s•ìeë歬ؾ+u0òxm°R Þ+K~¤¥lk|:>ÏX’§,CˆX ·HÅoyk 5ìQY_K±>æLƒ†A{Ñ ¢#  + he¥AêX@Û¤ Ð]í~ЦöG&×øâ×ö9ɿɉ˜³Œ}SÛq'‘Û:\žÜzµé;Y…$2´}°RG§¸jí‘ݳ“…%Èuý1 +†•…‚²Ò`¯·P°IºÚýLíù&?ýã⯲s¬Ø,¯dSšwç]ù?ý +?â7?Òù1Щsàží’º( +ü6¡¹$´HÊ*K^˜l¦µ£ïÞ©s±ðûgM,&†af0 †•…˜²2ˆb6iƒXW»Ÿ˜©½ÞÄÜÎ=ØYEXž(E_q@ü¿Ø&ÁFQã‚Z}ƒ¤Æ¯G¨ù +\'4v¹@`ã£Ø\ÇÄÆ?5ØÄaFÔÊ'­0ÝÐA>Lº¦i5 S[0-»Uºy¢Ý ³¥½©ŠC½KáˆN/ÙAlapød%osk†¼¯fÈCÞ(ò+Å[Œ0$aH;†ü~Îßkºžã)†Â¦^aüâ“4¾:îöG8ÔÊùŴ‰´ÿÄs]8Ç4 #° + leeÀŽ,°mÒì®v?lS›ÃNÄ>ŠsÁÙô©>µœ_³º2#zas,E*[dè ÐéС7[‹8K¡7”¡7jñ÷[¡×Ç'>,ú. çøÐƨVªÊª¡êZÎ1ViƒjW»Ÿª©=gU²}f»ÿfcÙ»QèÁ³K©ëýŸ·J +id„ý4¦Õ0m¥Ñ¡¥`•nÐœh÷¢ii×G›@ÕéBQ€…yŽ §¥QàÒÉž’é3¨òÕ`ZÊ€h• E×fÍ+3Ÿ‡|Î ¼ 1…ZȨ4%!Ï( ÝHÃE™ªX«leÅÆX-’÷ìñ0 §M6Ig¸DK}9$Ä#+À°²¬e¥W@„=Ë +°I+ «Ý¿Lí{Ôu]î‹5e×¥ÓøX=ö[½‰®»"ååÑÇ¡®â»ûµðOÞ_3æ}í¬“wÉä¤?ÈúžÛð†hÁSÃú.•®‘Wä‘ÊïlEÕ {…ø¡Ó;G +ÛðÈ‘·±±06Š ÅØ^-¢¿¶j?½F•t7×ñ90d6BäQ—Â-D‹L^àJj±ªÞ£z‹uõ7®G¶Ëx8›c°ˆ¿¤uæåE\#þò‚tò&™ª1ZP"¦}Ä Ç‘…£4j@KÝΦkì÷£4„ã&]ÉøZ?$üÑ`'¿¿IËJ¦ž"ö:íbo¸ùáé+‡²w7Jcðì··T#ôB^UlŸOj4V`qÅ‘˜a4 Li`^d) Øt`]á^`¦°¨¡†p"üU±¼¬ŸTÂ숚*ü/¯¯Å¡FË;ÑøƒJQ6‡F¿¯2`äø‘±ºÄ›n¸ãþ¹Ø‹|·^ÊÖëc +¾šÈÖϺ`]Ë4OòJv‰šU N«µƒiqLË2í«ÿa:L˜o©3†Ø°²0VVdK5Á*mPîj÷c6µ¯aÒ2ýœQ9ÛCþ’?ó®Ó<Ül|Oº\˵ËÞòFnu<0–Îwu,«ä©l2ÇÓíªg0­÷ .XÁ”ðƒ< +ŒÛÏiueK×±ôƒƒæÏBŽãŒÄaÓj˜¹¶jÞLpð0s«tÃüD»—yK[ÏÇ"ß»ø+Vý,/MÓ­ ~‚é;üd'DÄñCK˜ýl~h½u Äë!ÍTò'/Ø‹PˆÇª¦•…’²j(ÙöK«´A©«ÝOÉÔ^³ïÇTìq{–«íPo‘Í#/þéºÐ湚»×,Ý…ô¦¬+#wŸ[<¹ÂùÅ!Ù±r¹ +…º#õ:ÓÊEYi(^ds›´¥«ÝÅÔOï7ÕḭD˜d™7žmôl‘‡ü€ºíÉÿ ãóa ±~ãcðÆÓÊ‚AYé´ŽbË®e•60tµû1˜Ú—YR–™> +.Wçñ|¾FñZD—øw¦~TЙìkUUIw9SAèJ6î$Í«z꾅щlÍ£ü~dÃÏu1dwGÛ›VdÊJ# ‰å4i•6uµû‘™ÚËøBm¼DÁ¶Ï9„§L½Î´ç1NîC݇MyúýȺ‡ лéz~ÐÛ–±DÇÊŽ§^I§‚ö;•“~f8ö–…a4LK5eb©TÛtV]á^T¦°Žqn¨bœñ7ƒ´ºsnÔ©b‚å2^Åâêr…tÇÉÐû¼¤é“ÖÓ?±N©áv3¥†f#¥æÒè¢.lå¹x òüßµ·eYšìÕ‹Z¤uö×ÎÚyÍnð i©³xˆ¿OÛ3ùŽ>“þϯíUñÑ08¼ DnƒÈ/Åjž|sõ~ïéWÿICO4endstream +endobj +1677 0 obj << +/Type /Page +/Contents 1678 0 R +/Resources 1676 0 R +/MediaBox [0 0 595.2756 841.8898] +/Parent 1675 0 R >> endobj 1679 0 obj << -/D [1658 0 R /XYZ 85.0394 534.1777 null] +/D [1677 0 R /XYZ 56.6929 794.5015 null] >> endobj 1680 0 obj << -/D [1658 0 R /XYZ 85.0394 527.4872 null] +/D [1677 0 R /XYZ 56.6929 748.5056 null] >> endobj 1681 0 obj << -/D [1658 0 R /XYZ 85.0394 502.0427 null] +/D [1677 0 R /XYZ 56.6929 748.5056 null] >> endobj 1682 0 obj << -/D [1658 0 R /XYZ 85.0394 495.3523 null] +/D [1677 0 R /XYZ 56.6929 748.5056 null] >> endobj 1683 0 obj << -/D [1658 0 R /XYZ 85.0394 420.5376 null] +/D [1677 0 R /XYZ 56.6929 743.7078 null] >> endobj 1684 0 obj << -/D [1658 0 R /XYZ 85.0394 420.5376 null] +/D [1677 0 R /XYZ 56.6929 719.6381 null] >> endobj 1685 0 obj << -/D [1658 0 R /XYZ 85.0394 420.5376 null] +/D [1677 0 R /XYZ 56.6929 711.8197 null] >> endobj 1686 0 obj << -/D [1658 0 R /XYZ 85.0394 412.5281 null] +/D [1677 0 R /XYZ 56.6929 697.0552 null] >> endobj 1687 0 obj << -/D [1658 0 R /XYZ 85.0394 388.4584 null] +/D [1677 0 R /XYZ 56.6929 691.8868 null] >> endobj 1688 0 obj << -/D [1658 0 R /XYZ 85.0394 380.3932 null] +/D [1677 0 R /XYZ 56.6929 665.1671 null] >> endobj 1689 0 obj << -/D [1658 0 R /XYZ 85.0394 365.6884 null] +/D [1677 0 R /XYZ 56.6929 659.9987 null] >> endobj 1690 0 obj << -/D [1658 0 R /XYZ 85.0394 360.2134 null] +/D [1677 0 R /XYZ 56.6929 635.929 null] >> endobj 1691 0 obj << -/D [1658 0 R /XYZ 85.0394 345.4488 null] +/D [1677 0 R /XYZ 56.6929 628.1106 null] >> endobj 1692 0 obj << -/D [1658 0 R /XYZ 85.0394 340.0336 null] +/D [1677 0 R /XYZ 56.6929 601.3909 null] >> endobj 1693 0 obj << -/D [1658 0 R /XYZ 85.0394 325.269 null] +/D [1677 0 R /XYZ 56.6929 596.2225 null] >> endobj 1694 0 obj << -/D [1658 0 R /XYZ 85.0394 319.8539 null] +/D [1677 0 R /XYZ 56.6929 569.5028 null] >> endobj 1695 0 obj << -/D [1658 0 R /XYZ 85.0394 295.7842 null] +/D [1677 0 R /XYZ 56.6929 564.3344 null] >> endobj 1696 0 obj << -/D [1658 0 R /XYZ 85.0394 287.7189 null] +/D [1677 0 R /XYZ 56.6929 549.6297 null] >> endobj 1697 0 obj << -/D [1658 0 R /XYZ 85.0394 272.9543 null] +/D [1677 0 R /XYZ 56.6929 544.4015 null] >> endobj 1698 0 obj << -/D [1658 0 R /XYZ 85.0394 267.5392 null] +/D [1677 0 R /XYZ 56.6929 529.6968 null] >> endobj 1699 0 obj << -/D [1658 0 R /XYZ 85.0394 252.7746 null] +/D [1677 0 R /XYZ 56.6929 524.4686 null] >> endobj 1700 0 obj << -/D [1658 0 R /XYZ 85.0394 247.3594 null] +/D [1677 0 R /XYZ 56.6929 500.3989 null] >> endobj 1701 0 obj << -/D [1658 0 R /XYZ 85.0394 223.2897 null] +/D [1677 0 R /XYZ 56.6929 492.5805 null] >> endobj 1702 0 obj << -/D [1658 0 R /XYZ 85.0394 215.2245 null] +/D [1677 0 R /XYZ 56.6929 467.136 null] >> endobj 1703 0 obj << -/D [1658 0 R /XYZ 85.0394 149.4956 null] +/D [1677 0 R /XYZ 56.6929 460.6924 null] >> endobj 1704 0 obj << -/D [1658 0 R /XYZ 85.0394 149.4956 null] +/D [1677 0 R /XYZ 56.6929 436.6227 null] >> endobj 1705 0 obj << -/D [1658 0 R /XYZ 85.0394 149.4956 null] +/D [1677 0 R /XYZ 56.6929 428.8043 null] +>> endobj +1706 0 obj << +/D [1677 0 R /XYZ 56.6929 414.0996 null] +>> endobj +1707 0 obj << +/D [1677 0 R /XYZ 56.6929 408.8714 null] +>> endobj +1708 0 obj << +/D [1677 0 R /XYZ 56.6929 382.1516 null] +>> endobj +1709 0 obj << +/D [1677 0 R /XYZ 56.6929 376.9833 null] +>> endobj +1710 0 obj << +/D [1677 0 R /XYZ 56.6929 350.2636 null] +>> endobj +1711 0 obj << +/D [1677 0 R /XYZ 56.6929 345.0952 null] +>> endobj +1712 0 obj << +/D [1677 0 R /XYZ 56.6929 321.0255 null] +>> endobj +1713 0 obj << +/D [1677 0 R /XYZ 56.6929 313.2071 null] +>> endobj +1714 0 obj << +/D [1677 0 R /XYZ 56.6929 298.5024 null] +>> endobj +1715 0 obj << +/D [1677 0 R /XYZ 56.6929 293.2742 null] +>> endobj +1716 0 obj << +/D [1677 0 R /XYZ 56.6929 267.8297 null] +>> endobj +1717 0 obj << +/D [1677 0 R /XYZ 56.6929 261.3861 null] +>> endobj +1718 0 obj << +/D [1677 0 R /XYZ 56.6929 199.468 null] +>> endobj +1719 0 obj << +/D [1677 0 R /XYZ 56.6929 199.468 null] +>> endobj +1720 0 obj << +/D [1677 0 R /XYZ 56.6929 199.468 null] +>> endobj +1721 0 obj << +/D [1677 0 R /XYZ 56.6929 191.7053 null] +>> endobj +1722 0 obj << +/D [1677 0 R /XYZ 56.6929 176.9408 null] +>> endobj +1723 0 obj << +/D [1677 0 R /XYZ 56.6929 171.7724 null] +>> endobj +1724 0 obj << +/D [1677 0 R /XYZ 56.6929 157.0677 null] +>> endobj +1725 0 obj << +/D [1677 0 R /XYZ 56.6929 151.8395 null] +>> endobj +1726 0 obj << +/D [1677 0 R /XYZ 56.6929 137.1348 null] +>> endobj +1727 0 obj << +/D [1677 0 R /XYZ 56.6929 131.9066 null] +>> endobj +1728 0 obj << +/D [1677 0 R /XYZ 56.6929 117.2018 null] +>> endobj +1729 0 obj << +/D [1677 0 R /XYZ 56.6929 111.9736 null] +>> endobj +1730 0 obj << +/D [1677 0 R /XYZ 56.6929 97.2091 null] +>> endobj +1731 0 obj << +/D [1677 0 R /XYZ 56.6929 92.0407 null] +>> endobj +1676 0 obj << +/Font << /F37 779 0 R /F21 690 0 R /F23 714 0 R /F39 873 0 R >> +/ProcSet [ /PDF /Text ] +>> endobj +1734 0 obj << +/Length 2545 +/Filter /FlateDecode +>> +stream +xÚ¥ZKs㸾ûWè(U€ øÈM¶l&3¶#y²IÍî–`™ŠTHʳ³¿> âA" É¦|0 4ñýu7º›ÂxS‘$˜DIàQ„éd{¸B“=ÌÝ_a)3WBsSêúùê/w$š$^úáäùÕX+öPãÉóîÛtñôtû°\ýs6÷)š.¼Ùœ"¤Fon7³y&|‚ð©M¯WןW÷ëÅÓlj‡~E-–âfóõþþvó|+o×·‹åêáDðì·çOW·ÏúµÍ­aDø;ÿçêÛoh²ƒ~ºBIb:ù7ÈÃIâOW% Q#ùÕæêïzAc¶}tLU”ÄýhDW>ž`ì%”ú=eÑÄ ‰OZe-6b[GV¥MVµuWÃ[\ Kˈ cd Žþm}wŠ"¿ 11E^œÀû;@µÌ.;TL©G„š°Ëòf…Øwº;dEV7°ù²ªÅXÙ颽ߟ²óø;¶„Cêqà ñu?ñ/žøÿ¹l`ÍY¨‰‡ò^X%îpGžUÙ@œ/mÈ¡nCÊ¡p%¥UNIäP¹ ÚPúÛ¢vü¦<J©xmyË´IÅÕ]–3quS¿"äïO‚1x[U3O9M#T€2ƒ0 }*žfØO¦’kƪ†R9÷¸mJƒŒ„XÉ èB¨2¥ìdh)MF‚};N莌3ìq2zà£dè0æÒ?ŠÝŸ¥ÄÇÔ ãØïS²Tl¤•éw쥚ÅÓSZýÐŒ„vF"Ø9EñF )#JJ1â#ŒŒ¸  F†ØFLð3åßTYêLºÇk)u]–Œ(éAz̆UשׁG£Tƒ ÆaŸ‡kÉ×´(²b?`»ç8ÿ˜Q:Í~ϘÅs<>Â_ ©r°$…4I>N$9p ŽÀŠ 䯵Twù:pœEž¥5«L=°æ{Yý»£(Û²qŽÂØ‹ü ?I>¦‡,o”Ói’ÖrúîGU¶k,E +²—Ì}’x”B^1|^DX᪛+¤f0 fšÜì¬y/FøB¦`JÙY×RšöاvÚÐïgØãÄ÷À°ó0œ>Ï0ÆÀÀ>oõF |MÙË_gsøÓU]ŸZ+€™ÖFà™Ž>ˆK­D˜n•ÈÇ#E)4oLÌ>ÂU%Ÿo a¸;ŠˆÛ”Û2‹ºÄO<„ó €ÕâZ¬«‘Ö­MLæZ~.LCú2Í`‹Ê S“}„Õ×iya] ½r°.…é$HÙ…kp>¶Pn ü@ÄHB;I ¡Ctº8ól«ÓGáÕÄjù°P%Ãð˜$€™PlunîÒ¼µ%þÐ +D}`k0ùzH‹v:–<ó÷‘óE®é~§Åö5‚ð &PA]:ÍM);áZÊ Ü‘;¡;ÂÏ°Ç ï?ŠÛrÇx§Qç#2½†«n ç÷Á” #ì0úµÈø£bPú0:v€Â¼ŽQ7`X ɸ1oÉCýhlÔ¢‚ l…~ÔO#žJáÊÙÏòìƒâHdž NDuB‰,h^±7§ã±¬šº?—éNµøaeÑ7 ¼0&ƒ~Ï3¯„Tƒ¡Êê­RúâXe¹Ö8µkÜ=ÅZ=¦”CãJª«YGë„64>ĶhÜ_HͲ½ê,\§uvfçƒ +O¶y)ÒÙÑÖkÚ'áQ· šžöo")3}{” 6_('L)JJAGé„6ˆb[ˆ0Áõ‰ê€_ŠÜ .nÊÃ1-~tâjÍ Þ³w o„‚Ä÷‚Øìî„L?yâɿ嬀“©õµ{ð™_8;eþ*Яp/ç¡þ«_~´AQ>® 9<-b+Ÿ~D½(¼t\˜Rv>µTÇ'u$NèŽÏ3ìq>{à Ý}gE×½S.%³‚ó©ì÷rjGwå¬P„Wõ1þYoÓe»›Øƒ ¼tBZ¤NéQä¨á\¸)` 'òšA5FØÖÈ™-¢¹"Nô:Q•:¢ þ0lyCB»/ÁóêAÓ¯%k”"J¼8 ù÷'IQ猣oHÀ±&B½RSÊA”’ÒLÁÙì`ÊmP5Ķpe‚/ù—7žÉ¶npº85o òNœw&†DäW²ÉÍo¢é;ï‹·£o¢áÅ¿çUYZ7r½ÝNLÖõ¨SÐ9faPê@ÉWø(Vßµío>)r ÑØs«õ¹ó”¿ÓøtÊæóO+Ȩ­#àÿïdýÉÈ#±­çBP™z©—â›K’á›ë_n¿ú %÷Üendstream +endobj +1733 0 obj << +/Type /Page +/Contents 1734 0 R +/Resources 1732 0 R +/MediaBox [0 0 595.2756 841.8898] +/Parent 1675 0 R +>> endobj +1735 0 obj << +/D [1733 0 R /XYZ 85.0394 794.5015 null] +>> endobj +1736 0 obj << +/D [1733 0 R /XYZ 85.0394 748.4854 null] +>> endobj +1737 0 obj << +/D [1733 0 R /XYZ 85.0394 748.4854 null] +>> endobj +1738 0 obj << +/D [1733 0 R /XYZ 85.0394 748.4854 null] +>> endobj +1739 0 obj << +/D [1733 0 R /XYZ 85.0394 743.3452 null] +>> endobj +1740 0 obj << +/D [1733 0 R /XYZ 85.0394 728.6405 null] +>> endobj +1741 0 obj << +/D [1733 0 R /XYZ 85.0394 723.1655 null] +>> endobj +1742 0 obj << +/D [1733 0 R /XYZ 85.0394 708.4607 null] +>> endobj +1743 0 obj << +/D [1733 0 R /XYZ 85.0394 702.9857 null] +>> endobj +1744 0 obj << +/D [1733 0 R /XYZ 85.0394 688.2211 null] +>> endobj +1745 0 obj << +/D [1733 0 R /XYZ 85.0394 682.8059 null] +>> endobj +1746 0 obj << +/D [1733 0 R /XYZ 85.0394 668.0414 null] +>> endobj +1747 0 obj << +/D [1733 0 R /XYZ 85.0394 662.6262 null] +>> endobj +1748 0 obj << +/D [1733 0 R /XYZ 85.0394 599.7666 null] +>> endobj +1749 0 obj << +/D [1733 0 R /XYZ 85.0394 599.7666 null] +>> endobj +1750 0 obj << +/D [1733 0 R /XYZ 85.0394 599.7666 null] +>> endobj +1751 0 obj << +/D [1733 0 R /XYZ 85.0394 591.7571 null] +>> endobj +1752 0 obj << +/D [1733 0 R /XYZ 85.0394 565.0374 null] +>> endobj +1753 0 obj << +/D [1733 0 R /XYZ 85.0394 559.6222 null] +>> endobj +1754 0 obj << +/D [1733 0 R /XYZ 85.0394 534.1777 null] +>> endobj +1755 0 obj << +/D [1733 0 R /XYZ 85.0394 527.4872 null] +>> endobj +1756 0 obj << +/D [1733 0 R /XYZ 85.0394 502.0427 null] +>> endobj +1757 0 obj << +/D [1733 0 R /XYZ 85.0394 495.3523 null] +>> endobj +1758 0 obj << +/D [1733 0 R /XYZ 85.0394 420.5376 null] +>> endobj +1759 0 obj << +/D [1733 0 R /XYZ 85.0394 420.5376 null] +>> endobj +1760 0 obj << +/D [1733 0 R /XYZ 85.0394 420.5376 null] +>> endobj +1761 0 obj << +/D [1733 0 R /XYZ 85.0394 412.5281 null] +>> endobj +1762 0 obj << +/D [1733 0 R /XYZ 85.0394 388.4584 null] +>> endobj +1763 0 obj << +/D [1733 0 R /XYZ 85.0394 380.3932 null] +>> endobj +1764 0 obj << +/D [1733 0 R /XYZ 85.0394 365.6884 null] +>> endobj +1765 0 obj << +/D [1733 0 R /XYZ 85.0394 360.2134 null] +>> endobj +1766 0 obj << +/D [1733 0 R /XYZ 85.0394 345.4488 null] +>> endobj +1767 0 obj << +/D [1733 0 R /XYZ 85.0394 340.0336 null] +>> endobj +1768 0 obj << +/D [1733 0 R /XYZ 85.0394 325.269 null] +>> endobj +1769 0 obj << +/D [1733 0 R /XYZ 85.0394 319.8539 null] +>> endobj +1770 0 obj << +/D [1733 0 R /XYZ 85.0394 295.7842 null] +>> endobj +1771 0 obj << +/D [1733 0 R /XYZ 85.0394 287.7189 null] +>> endobj +1772 0 obj << +/D [1733 0 R /XYZ 85.0394 272.9543 null] +>> endobj +1773 0 obj << +/D [1733 0 R /XYZ 85.0394 267.5392 null] +>> endobj +1774 0 obj << +/D [1733 0 R /XYZ 85.0394 252.7746 null] +>> endobj +1775 0 obj << +/D [1733 0 R /XYZ 85.0394 247.3594 null] +>> endobj +1776 0 obj << +/D [1733 0 R /XYZ 85.0394 223.2897 null] +>> endobj +1777 0 obj << +/D [1733 0 R /XYZ 85.0394 215.2245 null] +>> endobj +1778 0 obj << +/D [1733 0 R /XYZ 85.0394 149.4956 null] +>> endobj +1779 0 obj << +/D [1733 0 R /XYZ 85.0394 149.4956 null] +>> endobj +1780 0 obj << +/D [1733 0 R /XYZ 85.0394 149.4956 null] >> endobj -1706 0 obj << -/D [1658 0 R /XYZ 85.0394 144.3554 null] +1781 0 obj << +/D [1733 0 R /XYZ 85.0394 144.3554 null] >> endobj -1707 0 obj << -/D [1658 0 R /XYZ 85.0394 120.2857 null] +1782 0 obj << +/D [1733 0 R /XYZ 85.0394 120.2857 null] >> endobj -1708 0 obj << -/D [1658 0 R /XYZ 85.0394 112.2205 null] +1783 0 obj << +/D [1733 0 R /XYZ 85.0394 112.2205 null] >> endobj -1709 0 obj << -/D [1658 0 R /XYZ 85.0394 97.4559 null] +1784 0 obj << +/D [1733 0 R /XYZ 85.0394 97.4559 null] >> endobj -1710 0 obj << -/D [1658 0 R /XYZ 85.0394 92.0407 null] +1785 0 obj << +/D [1733 0 R /XYZ 85.0394 92.0407 null] >> endobj -1657 0 obj << -/Font << /F37 747 0 R /F21 658 0 R /F23 682 0 R /F47 879 0 R >> +1732 0 obj << +/Font << /F37 779 0 R /F21 690 0 R /F23 714 0 R /F39 873 0 R >> /ProcSet [ /PDF /Text ] >> endobj -1713 0 obj << -/Length 2122 +1788 0 obj << +/Length 2121 /Filter /FlateDecode >> stream -xÚ¥YKs㸾ûWèª*Bðà37ÙÒ8žñÚŽå­d33š‚%–)R+RžÑþú4Ð J$µ•”n ?ôQø±‘ç?âÑ(ˆ\âQæ’Í­`ìöŠžIÍ4±¹®_®þöI£ˆD>÷G/o–¬Ð0d£—åWgJƒê\ß]ßß=Þ>OŸþñÛxÂ=ê|£>Ì°³øõöv¾x™›îó|:»{¸6ž~DéÓÓüav÷oŸ*©´¡ÞÌãï/Ÿ¯æ/Ͳí­1*Ôš¿úúŽ–°ÃÏW”ˆ(ôF? C ‹">Ú\¹ž ž+DMÉ®WÿlZ£zj§©%\ø¼ÃVœ#‘çñ–±¼ˆø‚ m¬ÇײÈd%—¸ÇÙÃÂØF&û]ZŒi>Ý”½›.4htG‹ ×&ºp¬¹ÔÒ¾‚VN}ïû©fÆ9XÅ †U7\çº]û 1mݳb§ùxârê<Ä©ZÌYÊJnz4™ÿ¬d^¦E®Ít²;R„ëR²ÿ -S|á̈™—U¿Ë1Ã×»1 %ê‰sÓ¸1ü_âýÛ&ΔÏq¾w¥¶\+š4°ƒ>8WéEº$Ä£:Þ‘i;ÃÔ@ÇD0Ý€^ ¹ÅÝÀYŠ5*ÊzÒœgƒ£j#Žúp5Ç!7i‚_·Ë¸’]FŒ¸<² Ôs ~k ÙàgzÓí.Í°9ˆ„ú$ (†ÂæêÇ¢ájÀðÄ€ ª>¢q¦»Ž–îËöoša? -‰"ïÀà—Xw“uƒCÔƒ’Hò’Í5€CÍUã ( pRmápª»[wƒCƒƒjÕ8èvƒƒ'!,æ7˜5GºÊÓ|…é¾Zšÿ'î3HW‘î8w® Nü×8âŽÌ2T:Šqá<ró*wÆêù­(Æ)¥ý˜‰ˆP7º„™Å5€YÍuÄ,¢˜ ©¶0;ÕÝ™­»'7.‚Ý›,Þ¥ß(åI\5ÄúûŸ"¯]®Š«}—Sqð°íUsãU÷òGZv;ÂúáŒ0懱¸©¹@\w(˜ ©¶9ÕÝ ˆ­û>ݤzdéj­¼Rð")¶iÅ’̘ë|™ÿ†”gY˜™3ô,“b·Ä¶r·çgíjÁ¢€[qOMQqO þ%.Ky@š®ô’ˆÑQ”* -p¹™Ll«ežúï…ÔƒÈyx¡Î³¹ú!m¸H}oÒAÕGHÏtwBÚÒý,—R9Ož¢óˆ€!ˆðÕþ'ªcÌ«ù³BëB®øZ\ϳéØóœå™S$}*v›¸3ú°ò»mçÀqº_íËê«Ó‡±‰€á2ª!áA¹Gýæ‘' .Î]rsi$Ívñ[ÕULSHÊ.Dæj ֬ЫgA ¾»Yi¬ƒqc$èèv±_­'K5‰?ŠÝ».>Õüe‘ì7P“”8¦JõÕu§okžç«4—rg¦cÇå;2ƒ¹Ñ…Õ ƒÑµÄ%Úö"³F]¼„Ž¾N#¡þ̤FøRt¿ÇZ[œžA«'+M,«x%Klcáå;Kù!³b«ö+ò#æÜm¶™Týbg¤7öR“x¯g“•Q]´·eÎ\Åõ+‡ãX`#Ö_áÔwô#ÎÔY -ë˜èÊÿ€\åºØg†ªµªÆ«ÄïïûßUQg5 %©!¹Ú>Zcn„½©SŸ!Ñƺû<3þ$)6“.|¶qžjéŒ:¯ü≀Æ2-“,N7:‡ê¸jX óñBçç®:s%võrá‹(+d-K¢øpuüa„ÄøÉÒ7YÂò°§O+|Ëô'66E^­Í\8ïõ¬S¸lvlԬسW ¥´^²“©¶~Ö3¯f*IM=ëÇŒ²38Ðó  LPxuµbá¥ÂÎk±7±âúîav”ëB±ê7r)‰X}y“;åF½Ïì<„RïÂõËæ:O&° lâ(LgÖŸGµóÈ™ÚÎ<ÒÒŠy„zÆ­¨o[Ê^´5Vć9Oñ>ÃIÓ .\œHºSá¤É»ŽпO÷j"s¡âÜvéj­“ˈ!lÀ Õß+Ô¼ '¸ˆàÇ%L8 üöiñ}£ÌëºpØbXWŸ,ŠB\ÛB¾ÆeUl M ÈÞLÿŽ#y†‚43OøÜSºN®tM52…kE’ÂY.{‹8¬ê£¼hs¬ÿïÿ¥¬ê% "컊p°¯‚³(µ—È?[yýÖùÒÿ š¸¥endstream +xÚ¥YIs㸾ûWèª*B°pÍM¶ÔŽ»=¶cy*™t÷¦`‰eŠÔˆ”»5¿>x J$5•”Äòà}x 6¢ðc#Ï'~Ä£Q¹Ä£Ì%›+:ZÁÜí34“šhbS]¿\ýí“F‰|î^Þ,Y!¡aÈF/˯Δ2 Ô¹¾»¾¿{¼}ž>ýã·ñ„{ÔùF=:}˜agñëíí|ñ27Ýçùtv÷p $l< üˆ:Ó§§ùÃìîß8?URi3z3_Œ¿¿|¾š¿4˶·Æ¨Pkþýêëw:ZÂ?_Q"¢Ðý€%,Šøhsåz‚x®õHvµ¸úg#Кլ¦b”páó[q6bŒDžÇ[Æò"â .´±_Ë"“•\âg c™ìwiu0¦ùtSönV¸Ð Ñ-*\›è±¦RKû +Z9õ½ï§šç`/VÝPë‘¥›ñ€xÇù>Þ”VØr­hÒÀúà\¤=ê’êxG¢ì QÁtz-äNwg)Ö¨(ëIsž Žª8êÃmpÔ‡<Þ¤ v~Ý.ãJvA1âòÈ‚PóüÖšaƒŸéM·»4Ãæ ~è“0 | +›ª‹†ªÃ~4¨úˆÆ™îN8Zº/Û¿h†ý($Š¼ÿƒ_bÝMÖ Q?~H"\ÈK6Õ5Uƒ 4ÀaHµ…éînlÝ5" ªUã Û " tž„\°˜ß`:Ôé*Oóv¦ûj]húsœ¸Ï ]EV¸ãܹ&Èø¯qÄ™e ©*tãÂy(>äæUî0ŒÕü­(Æ)¥ý˜‰ˆP7º„™E5€YMuÄ,¢˜ ©¶0;ÕÝ™­»'7.‚Ý›,Þ¥ß(åI\5ƒõ÷?E^»\Wû.§â, 4àaÛ«æÆ«îå´ìv"„õÂaÌ/bQ RS5€¸îP0Rmrª»[÷}ºI+ôÈÒÕZy¤àERl%Žo8dæ\çËü7y–e™)1SÏ2)vKl+w{~Ö®Ö¬! +¸÷‹Š{Jð/qYÊŽéZA/‰E©¢—›ÉÄv±Zæ©ñ^H=Hœ‡ê<›ªÒ†ªÔ÷ T}„ôLw'¤-ÝÏr)•óä):‚_í" :ÖɼJÁÃT¬çâ*Æ–¾QÌL”„þkZuaHC°ÈcL¤ c"ð´c"Ž!–Ðx4D·ûåfŸ/ËREM±Ú±‰¥µ—Š~HU uÙDD€" Ï<7¤×‚óDq7š–â™ÌäÊŠ‚*aÕvÐ m0éMËqý±¦îõGŽë†¬1MÄlÁ„JíyW—†j@›j’šªÁ$ô±!Õ(§º»Q±uß(Éáhö죶ÅM±Ù^¯iÖd··bW[íOÙájªD7j£³0è §¥H +\§Il‡·îLx‹j›šÊÂfà²4¨ÚÂæTw76¶î¦>wëºPµšúÚ:ƒ©†) ¡o¼ÆN¼H/2Æ‹P¬}9ƒþ<¯vl>i^¹ó§#Û§,^uà,à²ËÁ uLlF[1±vÎ/EöŽwgÕûlFÉ:;T­#¡£o_!dÝèO rÄ /Ý$lªþÓP5'&*‚UOÌ™îÎÓÒÝS•ž^ô…Oþ¬` u!Wt-ªçÙtìy΋òÌ)}*v›¸3ú°ò»mçÀqº_íËê«Ó‡±‰€á2ª!áA¹Gýæ‘' .Î]rsi$Ívñ[ÕULSHÊ.Dæj WèÕ\ÐÆ‚ïnV+ÀdÜ :º]ìWëÉRñààb÷®‹OÅ¿,’ýj’çTÉ¢¾ºîTómÍó|•æRî »1v\¾#1˜]X½01˜]K|P¢m/2kÔÅKèèëd8êÏ<ÁÑ_ +aÜo汆ÆÙ3¨¢sõd¥Ë*^ÉÛXxùÎR~ȬتýÁŠüˆ9w›m&U¿Øé½cïU¢Àâ,pò¢2ª‹ö6°L@ÎU\¿²q8.€6býN}×I?âL¥°Ž ®üHU®‹}fFµVÕx•øý}_à»*ê¬cIj†\m­17ÂÞÔ©ÏpÐƺû<3ú$)6“.|¶qžjéŒ:¯ü≀Æ2-“,N7:‡ê‰¸jH ññBçç®:s%võrá‹(+$-K¢èp +uüa„ÄøÉÒ7YÂò°§O+|Ëô'66E^­ /œ÷z‰?Ö)\6;6jVìÙ+†ÎRZ/ÙÉT[?뙉Wà +BRSOÄú1£ì ô<(AD]­Xx©°óZìM¬¸¾{˜åºP¬ú\J"VßCÞäN¹Qï3;¡Ô»pý²©Î“ ì‚™8 +ÓÙ„õç‘A­Ç> endobj -1714 0 obj << -/D [1712 0 R /XYZ 56.6929 794.5015 null] +1789 0 obj << +/D [1787 0 R /XYZ 56.6929 794.5015 null] >> endobj -1715 0 obj << -/D [1712 0 R /XYZ 56.6929 749.4437 null] +1790 0 obj << +/D [1787 0 R /XYZ 56.6929 749.4437 null] >> endobj -1716 0 obj << -/D [1712 0 R /XYZ 56.6929 749.4437 null] +1791 0 obj << +/D [1787 0 R /XYZ 56.6929 749.4437 null] >> endobj -1717 0 obj << -/D [1712 0 R /XYZ 56.6929 749.4437 null] +1792 0 obj << +/D [1787 0 R /XYZ 56.6929 749.4437 null] >> endobj -1718 0 obj << -/D [1712 0 R /XYZ 56.6929 746.6461 null] +1793 0 obj << +/D [1787 0 R /XYZ 56.6929 746.6461 null] >> endobj -1719 0 obj << -/D [1712 0 R /XYZ 56.6929 722.5763 null] +1794 0 obj << +/D [1787 0 R /XYZ 56.6929 722.5763 null] >> endobj -1720 0 obj << -/D [1712 0 R /XYZ 56.6929 716.7581 null] +1795 0 obj << +/D [1787 0 R /XYZ 56.6929 716.7581 null] >> endobj -1721 0 obj << -/D [1712 0 R /XYZ 56.6929 701.9936 null] +1796 0 obj << +/D [1787 0 R /XYZ 56.6929 701.9936 null] >> endobj -1722 0 obj << -/D [1712 0 R /XYZ 56.6929 698.8254 null] +1797 0 obj << +/D [1787 0 R /XYZ 56.6929 698.8254 null] >> endobj -1723 0 obj << -/D [1712 0 R /XYZ 56.6929 684.1207 null] +1798 0 obj << +/D [1787 0 R /XYZ 56.6929 684.1207 null] >> endobj -1724 0 obj << -/D [1712 0 R /XYZ 56.6929 680.8926 null] +1799 0 obj << +/D [1787 0 R /XYZ 56.6929 680.8926 null] >> endobj -1725 0 obj << -/D [1712 0 R /XYZ 56.6929 656.8229 null] +1800 0 obj << +/D [1787 0 R /XYZ 56.6929 656.8229 null] >> endobj -1726 0 obj << -/D [1712 0 R /XYZ 56.6929 651.0047 null] +1801 0 obj << +/D [1787 0 R /XYZ 56.6929 651.0047 null] >> endobj -1727 0 obj << -/D [1712 0 R /XYZ 56.6929 636.3 null] +1802 0 obj << +/D [1787 0 R /XYZ 56.6929 636.3 null] >> endobj -1728 0 obj << -/D [1712 0 R /XYZ 56.6929 633.072 null] +1803 0 obj << +/D [1787 0 R /XYZ 56.6929 633.072 null] >> endobj -1729 0 obj << -/D [1712 0 R /XYZ 56.6929 609.0023 null] +1804 0 obj << +/D [1787 0 R /XYZ 56.6929 609.0023 null] >> endobj -1730 0 obj << -/D [1712 0 R /XYZ 56.6929 603.184 null] +1805 0 obj << +/D [1787 0 R /XYZ 56.6929 603.184 null] >> endobj -1731 0 obj << -/D [1712 0 R /XYZ 56.6929 579.1143 null] +1806 0 obj << +/D [1787 0 R /XYZ 56.6929 579.1143 null] >> endobj -1732 0 obj << -/D [1712 0 R /XYZ 56.6929 573.2961 null] +1807 0 obj << +/D [1787 0 R /XYZ 56.6929 573.2961 null] >> endobj -1733 0 obj << -/D [1712 0 R /XYZ 56.6929 558.5914 null] +1808 0 obj << +/D [1787 0 R /XYZ 56.6929 558.5914 null] >> endobj -1734 0 obj << -/D [1712 0 R /XYZ 56.6929 555.3634 null] +1809 0 obj << +/D [1787 0 R /XYZ 56.6929 555.3634 null] >> endobj -1735 0 obj << -/D [1712 0 R /XYZ 56.6929 540.5988 null] +1810 0 obj << +/D [1787 0 R /XYZ 56.6929 540.5988 null] >> endobj -1736 0 obj << -/D [1712 0 R /XYZ 56.6929 537.4306 null] +1811 0 obj << +/D [1787 0 R /XYZ 56.6929 537.4306 null] >> endobj -1737 0 obj << -/D [1712 0 R /XYZ 56.6929 510.7109 null] +1812 0 obj << +/D [1787 0 R /XYZ 56.6929 510.7109 null] >> endobj -1738 0 obj << -/D [1712 0 R /XYZ 56.6929 507.5427 null] +1813 0 obj << +/D [1787 0 R /XYZ 56.6929 507.5427 null] >> endobj -598 0 obj << -/D [1712 0 R /XYZ 56.6929 477.5928 null] +630 0 obj << +/D [1787 0 R /XYZ 56.6929 477.5928 null] >> endobj -1739 0 obj << -/D [1712 0 R /XYZ 56.6929 453.2532 null] +1814 0 obj << +/D [1787 0 R /XYZ 56.6929 453.2532 null] >> endobj -602 0 obj << -/D [1712 0 R /XYZ 56.6929 369.7201 null] +634 0 obj << +/D [1787 0 R /XYZ 56.6929 369.7201 null] >> endobj -1740 0 obj << -/D [1712 0 R /XYZ 56.6929 345.3805 null] +1815 0 obj << +/D [1787 0 R /XYZ 56.6929 345.3805 null] >> endobj -1741 0 obj << -/D [1712 0 R /XYZ 56.6929 310.6805 null] +1816 0 obj << +/D [1787 0 R /XYZ 56.6929 310.6805 null] >> endobj -1742 0 obj << -/D [1712 0 R /XYZ 56.6929 310.6805 null] +1817 0 obj << +/D [1787 0 R /XYZ 56.6929 310.6805 null] >> endobj -1743 0 obj << -/D [1712 0 R /XYZ 56.6929 310.6805 null] +1818 0 obj << +/D [1787 0 R /XYZ 56.6929 310.6805 null] >> endobj -1744 0 obj << -/D [1712 0 R /XYZ 56.6929 310.6805 null] +1819 0 obj << +/D [1787 0 R /XYZ 56.6929 310.6805 null] >> endobj -1711 0 obj << -/Font << /F37 747 0 R /F21 658 0 R /F23 682 0 R /F47 879 0 R /F14 685 0 R >> +1786 0 obj << +/Font << /F37 779 0 R /F21 690 0 R /F23 714 0 R /F39 873 0 R /F14 717 0 R >> /ProcSet [ /PDF /Text ] >> endobj -1747 0 obj << -/Length 1917 +1822 0 obj << +/Length 1916 /Filter /FlateDecode >> stream -xÚµX[Ûº~ϯ0Ð>hˆáE¤¤óÔÜÚì²)š-úìƒÖ¦m!²¤#É»1Šþ÷ÎpHÙòÊÇ(ŠÖäpøq8wJ,8ü‰E¦Wy²Hó„i.ôb¹{ÅXûÛ+áy­˜N”‚ÉÌj¬UÆt&ÓE| -òîþÕ›¿J±œ#õâ~=žeÒ”ñ|q¿ú½m[[¯ÊŸ7±ÔÌÐJ»‚+k˜}nú!”ùÓk9])# ¿ìʺ¼Q?tÅÐ8á¼ïíŒK€0ùXg.¸ô@Ê„?48Ð%÷`×~Û4(ºáG1ZZ†Õ]OKvY n¹YÓo9øÕà%Ô^€\ÑkXÈ@ ÅùÂõÈЊ3 RP‰µµC0׸àf÷»Úý€þ#xôlÓ½lrÐC{?´è!D¤ßmñdýìÜh½¯—E5žÖ¬g®0›hþ¾Â–'*Ô>²s²<×pÇœ¥iJÿ¶¶Í~³9*ÑÐg*uÍ´2¥çÁÀUJF5ÆxUpæÔ½"ús9l‰¶lv;Ð~\•µ¥5 -‰Í~gë¡GÓi Æ%î¢êâÚ½'Ñü±–r׬<”³3þBXSªq -0 ¤PžLÝ~L!1ÅŠ’GrbPÈ´Ô>GCgÇL%+ër‹‰ÞíboMÃ~—î4i<Ñ90ž1U‰C=U‰'9oÂí-^¬æLD·¦Eä7Iô¼µ50¼,òi΄0‰7d¼÷*™Ðé6ünÊ'[ãõµŠþYWåKt[tUé&˜~Qô×8M)»I££w·wˆ#÷¨»‚î^OjÖ³1o01vÏë’NuðfðÎæ™´'ø ÊE2 þݾʶ²§ÑÝO#ùÑ/–}¿·>ÊOü±gñÆõ``a6Zì$Ag”ù¾TÊC ‡V+¢¸ãâ -;‘ -¢ô­]–è„Kš‡²§|Á¸IÈŠ/(yÎàõ!¯)PÂ[Æó<—Uå BØCQút’ºë£`Tu‰Z•=¹%Þ²žñE¡5R„õ–oàÝÔTO!•eð\ ÝÄß—M½ž‘{Úh{„@œ¨ÿ_#`¡º¹`6&–_Žq9òùM.8^ÓØkŸéÔyx~|x8 ëÐêÐû:aøÏO¡½Œ|¯°'˜u0×ï˜Ìl -o§¾÷Pcµ·ž­¥>"† ÞÑÒÊ® ŒžÖQ¨™ž 5P~DrÍ› ÏC‰z*‹9?€ww¼àÏÿþôåóÇÿ¼a€×-g3ÅLfähg¨ð*ºß†«Rn>½~6æ|â C¹¨D97ù2"ó„%BžÕ®ç&/ÚòÞ*d T×qñrn˜q²YkÞ»ÆJÍíýR7 -ƒ÷Ÿè—¾¸VsAOÔb±*Zšøš £á*ÜдVÙ'[º{ìÕ'i},©9B:u\þŒ™ðw}HàáQ=1oì™Î^—¾…;÷¨fFóÕLBјT3— |~‡ŽÂ¥ÓõÁ)— zÏ; »R3Ò\˜*ßc†}3¯uï99>ÂÃg‰ ƒCûóù©TâHY@ iFL·w!`Z`é–<›VAd|ÿé$ß<9K"5KøY¯ºþÝ´¡Íu΂Cï,ìü}|Ý2ü–:ûNö,ñ‘‡>£N>mpÃ2™§¯§ç§e_÷__Œ¨endstream +xÚµÛŽÛºñ=_a }ÐËHI穹µÙdS4[ô!Ù­MÛBdIG’wcý÷ÎpHÙòÊÇ(ŠÖäp8œûEbÁáO,2͸ʓEš'Ls¡ËÝ+¾ØÀÙß^ “hÅt¢lfNc­2¦3™.âS"ïî_½ù« É™1R/î×ã[&MÏ÷«oÑÛ¶µõªüyKÍ£w7÷¿Ò­„¥Y*ð‡Rf”6îÆç¢Þá·ÅÆöã‘0•éïÍ ×™»óŽ‰›XpΣU¹A|DP)SÆwÅÎz:j‘³ÜHãÉ(ÁT<#^vï~—2¥Õ‡»¯´¨šæǾ¥õ~(«r8,×:0–&3AÂ|=ÔMÛ—N†WïG΄&Â0¡s5§w|J\0JÆH/ð¹# g“DœHL2brÐÖ·¿ô¶{²ÝƒßÆ$“>U’à)Ó¹Ñð.^.V«ÎöÞ*“·@ð,QÂã4—34•f™Ñä²*f ÊœeYšŸ\_%¸.+[&Ÿ2™²LòôœæÿÍv†f¬Ð×u–-âÑkàNÛtß.i ;'üÛUf/0*ËWçô†«ô†Cû?Ðûy•:ѽ„IóÂÞ‡«ä¾mwÅò—”ú—ö0C9ç,ɹ9'Œ+óàòF¬€r®¸œÚç’¸¨Œ°v®6¿ímwhÚ1öp)âU*Y’Š?ñ§$.Güˆ5øx{™5-™ÉUúGX;!ñ;¬¬)k›ªy,ªx¢ÅXÈQ³A­Wrî‡_ßÿãöï÷·_îFìIÊ—â˜ò_Ö¥Cñàˆß¹æ«fW”5¤ÿ„Ge½nº]1” Tmº‘EMk;@©§³‚¶ß9WögùXYMSÑ Ð +dÛ¥ ¯7„IÎ]L;%ížÝÄŠ§Ñí@Pxùê ¯9‡²Lü™ª *,Ö+XH,ž}[¶–ÀEÝ?ÃsZ þšãÕãÐzØwµ]ÑñšDÙ#)DR r{RÉÓ>ìÐJ»‘5ì>7ýÊü©XNWÊÈ/»².oDÔ]14Žyï{;ãH˜|¬3\z eBŽ"8{°k¿mdÝð#-Ã鮧£G», wܬé·üiðj/€¯è5d …âüŽ'ÂõÈЊ3 RP‰µµCb®qÁËîw?´ûýGðè ئ{Ùä ‡ö~iÑCH¿ÛâÉú+Ø ¸Õz_/1&Šj|¬YÏ(\a6Ñ:ý}…',OT¨},dç„ey®AÆœ¥iJÿ¶¶Í~³y*ÑÐg*uÍ´2¥ÇÁÀUJF5ÆxUpçÔ½"øs9l ¶lv;Ð~\•µ¥3 +‰Í~gë¡GÓi Æ%ì¢êÂÚ½Ñþ±–žä®YyRÎÎø aM©Æ)À$By2uû1…PÄ+JɉA!?Ð!R?øq QÜ3•¬¬Ë-&zK°Gˆ½5-û=ÝhÓx s`|cªGõT%ä¼ ¯·(X?&Ì™ˆn;L‹ˆo’èykkZa:yYäÓœ aoÈx;ïU:3¡ ˆ¤KØð»)Ÿlâký³®Ê–à¶èªÒ +l0ý"ë¯q›Rv“FGïnï>Fî©îZ~½8¾Ô¬gcf01vÏë’NuðfðÎæ™´'8På"™ÿn_ e[ÙÓèüè˾ß[å'~á‚Ø£xãzb`a6Zì$Ag”ù¾TÊC V+‚¸çâ +; +‚ô­]–è„KÚ‡²§|Á¸IÈŠ/(yÎ`ú×(a–ñ8ÏeUyƶÀP”>§N|dŒª.A«²'·D)ë_Z3!EèPßØaù榦z +©,ƒqIw_6õz†ïi£í)àDýÿ¢ ÕͳÑê<0±,ø2pŒËÏ_rÁñšÖ^{8¦SçáñýóapÖ¡Õ¡ù:aøÏo¡½Œ|¯°'˜u0×ï˜Ìl +³SßûÆ + Î±Ú[ÖRCïèhe×FOçÈÔLO(?"¹æM†ç¡D=•ÅœÀÜ/øó¿?}ùüñ?oÐë–33ÅLfähg¨ð*ºßQ)7ŸŠŸ9Ÿ0ÈÐ.êAŽÆÄK¾ŒÈ$ð0TOÌ{¤³éÒ·pçžÕÌÈà]ñr¾šI(“jæ”ÏïÐQ¸tº>x å2Aó¼‘Ñ°›!5#Ì…©ò=f¸73­s˜çä8„‡Ï3‡öïóS®Ä:Y i†L·w!`Z`éKžM« "¾ÿt’ožÇ‰%‘š%ü¬×ŽNÝÿnÚÐæ:gÁ¥wv>F§[†ßRgçdqè3êäÓO`bËE „".Ο¿Ê¾|ï¿ôpŒ@endstream endobj -1746 0 obj << +1821 0 obj << /Type /Page -/Contents 1747 0 R -/Resources 1745 0 R +/Contents 1822 0 R +/Resources 1820 0 R /MediaBox [0 0 595.2756 841.8898] -/Parent 1754 0 R +/Parent 1675 0 R >> endobj -1748 0 obj << -/D [1746 0 R /XYZ 85.0394 794.5015 null] +1823 0 obj << +/D [1821 0 R /XYZ 85.0394 794.5015 null] >> endobj -606 0 obj << -/D [1746 0 R /XYZ 85.0394 769.5949 null] +638 0 obj << +/D [1821 0 R /XYZ 85.0394 769.5949 null] >> endobj -1749 0 obj << -/D [1746 0 R /XYZ 85.0394 573.0107 null] +1824 0 obj << +/D [1821 0 R /XYZ 85.0394 573.0107 null] >> endobj -610 0 obj << -/D [1746 0 R /XYZ 85.0394 573.0107 null] +642 0 obj << +/D [1821 0 R /XYZ 85.0394 573.0107 null] >> endobj -1750 0 obj << -/D [1746 0 R /XYZ 85.0394 538.4209 null] +1825 0 obj << +/D [1821 0 R /XYZ 85.0394 538.4209 null] >> endobj -1751 0 obj << -/D [1746 0 R /XYZ 85.0394 504.6118 null] +1826 0 obj << +/D [1821 0 R /XYZ 85.0394 504.6118 null] >> endobj -1752 0 obj << -/D [1746 0 R /XYZ 85.0394 432.7569 null] +1827 0 obj << +/D [1821 0 R /XYZ 85.0394 432.7569 null] >> endobj -1753 0 obj << -/D [1746 0 R /XYZ 85.0394 303.3232 null] +1828 0 obj << +/D [1821 0 R /XYZ 85.0394 303.3232 null] >> endobj -1745 0 obj << -/Font << /F21 658 0 R /F23 682 0 R /F39 863 0 R /F53 962 0 R >> +1820 0 obj << +/Font << /F21 690 0 R /F23 714 0 R /F41 910 0 R /F53 1002 0 R >> /ProcSet [ /PDF /Text ] >> endobj -1757 0 obj << -/Length 3971 -/Filter /FlateDecode ->> -stream -xÚÍZÝsÛ6÷_á™>T™‰X€  ÷1ç|4q§qs±;×NÛZ¢-N$R)»î_»ØDJTÔ̽\<B X,öã· Êsò<Ë“Ü¥îÜ8dBfç³Õ™8¿‡¾7g’ÇLàiÔ‹›³o¾SæÜ%.Oóó›»Þ\6ÖÊó›ù¯“‰LžÁ bòêòͳišg"\¼ÿúêÕåÏð;01ywqõÓÅD{ÿÌÁ°7¯¯Ÿý~óýÙë›ÈLŸa)ròéì×ßÅùøþþL$ÊÙìü~ˆD:—ž¯Ît¦’L+(˳ë³Ç {½þÕQH‘¤*OG$Ês)—eé@™Kr•*/‚ëËwïxMûúé6…{‚7UOv⺕çÆ¿rA£»§u5+–ô£ªšYÑUMM¿›;žGöæ‘$BÀÔÂÏ3¯îG“&ÑJg4o\꯸a Ø[:u’A-äÀE¬8G]¬M¬¶ò pæcµd$».7‹Vƒ°ˆÚ¾]³ËjØ u/Æì(‰\õø4’ ÒSy"Œu~íßß\þxuý9àG/z¤ø/ odz;¶WÌ \'Í:àôükçåi‚›ÒÀAÂy@" ƒé½”šÝh–*±yXÅ q²C~5„HQjVa!,¸Ú¶-sË+Ôtö[3 ;nê’#øQ éÒP•qSJe´)¥r‰¾n‰X—Ýc³ùHUݪ³’;Q/­Eâÿ°ÙïÌ|ç·ßâÿ>ñ4“‹šøCA4Šs¬›MGôUñD[æ§]lý Ò(ô ¾ã‰:ŠõºU{eGÕéo WüŠ$-–‚­p 9 -“mÃÏÖá$*V`øÏS³x©¦Ò`ÃT‹‚H^Þz0+wQ³€>[þH¡ù›ÈÄåµÉ,a¨?8(è”ÔUñðĦšÏ=‡ß(8|£5+‘8™†]Mgãv•ëthWcžYéÄY`%í`|B¾f²à™×äÍ ÜA L~p¶`ßœ)ðÿÒ O¾`ùözϽ-Ûª™9/~# |ùvïÍ—‹¢iAÄ£ï&QýöNuÔs9£C8˜ŽÁUp˜iq{ð\a€a|,Ûߟ+@î„ïÖt<\>Duš¶âéo‹äJ+5sî$S ¡¼ðÆæ >„ÆD 7"cäؽªÜv-QUá“S†™wVHˆ¸˜²WˆUÒæj/è’¥è :ƒe9¦v)¨]ÐλjYˆºïn!ÏL…é¹[«ƒ!Æé½²ARѤkuK„‚õv峸 ýô‘ž°W$BbÊj¥w¾¾gMU "«K^ñuG"{2÷ŒÒk ñn³;zÒ.šírNô[vëð¬ÈÍ0å%å¼/êêO¼Ò”&†'M –sª&ès¹[¼4oyüšã 0æô¶ì²)œ¤ÑÒÔ" S'³@™™à¶-%Ä}žgÍj9Ü¥¶ÅQ‰ó1%™ˆ-ªú!JSŸÀZ=m;˜¨YvrÂ~<Þ QÑ/áÓë.ôù¸$2Þ3À1€ö˜OU2É” †7]ûTç"þ‹WÖ ˆr>æeÁa+ÑU_;Y—¦¶çdýf|´‡¹Ãž³Þž5åC‡‡8UÚ%&³{Êvô0S»7!|ƒþÌ©Uy(¦²žú µ†d»à!Þ°:IXÀàÔ°ëÕÕ55h+Ø -[Á6ÄÚé=¨ôœ>QܼjÃOð`ì™xSÈó×’øEˆL·eÉPÜ š÷ýv—"õrO_v¨÷bÑNV±êl?TkðI.ØOrñ5¤/ ZÆÅsœêñ %Lší«°T¡Ê5\8Lô×G#—Èe°oƒ0mScA[pXÔ  -)¶;) ~cSÔ-î둾Ò:ºC“b<ˆÈ'ÿÿÝbÎN¾rv¨‡1ýÉA+#¯Óîþ;Ì«Œy•‘!p‰†õ#Æó$@ À‰S‰<8v¼dÚEm˜ù²£¸rÎòz D)û¨zÇÑ㢢0,#ÅTdWòkOýâòê» ~ ßGžÎód’H{Þ¨Ýâi\<å•O.ð?ríd[/)‘3é‘Ð"]ùüNiÿ8r\¹=<®Ýº±O+5ÜËuS‘\E™w‚z¼ç ûç.Û”:·ç*½^Þù0ƒÑM~ð15MûˆÑg{ØõD]> ¼£9Ò "“(‘à(P.~þîCB$º~@bX¨ªg´ÖW|ò žiß=dϧ[0eVþõv˜kÊ^ÕWèz>V RIžŠì„†ƒVíÊcã¶ì"z)ˆ`$^RTÜmþq52¬Dd=ã o1 Ø Y,*í‹èʱE蘈.L6[õ}Ù†¬%ä„ý£:ƒ5z³§!´ª¢ÀU¹WÒ…ÈZ…+Øå3¾ëÄi¾æ(yýãÅñÒïcѹ?d8ŘDùÞ4””>1;‘þEw °=ø¼é§qûU:Û‡†Éw«ÃŽõÎݪÝ5Æ1w ˜Q@ŽG’¤Cw+LQ0óöjæÝvI?ç ?³€n«v±ãoŒ YkÆÇXÈÏÈBïîæmüEŒoök¦mH2¯\zx‚ÿÂpJþ õTj.K#yU¬×äeäàöÓk4(@kÏ3“v/áRG´Õ -œk,]IvfRqé`%ýK»q—Ž8$ÏNW`rªi¿ò8îoÄ®’Zñn¼¯ö=¢¢²•p‰–j¯r8¬8¾†'ßDï®›!X„‹áçt‹íÑ, zãð.ÙÄ;h38nl¸X6(ÊËÆâby^2^Ü• )5ÀÄŸ%åŠsÝ¿å$Âņ°gµü"Û‰Íâ‡#Ÿ) ¥Ò¨ÞÝæC.‘.—'¯ Rü$âð¢MFPm–‚m¾n€º\l»f -0+–þ*J÷,ø‚¤/€D)ïãúµI$‚éAðe_'œÿ^fĪ0ÊĪ&¼)ÓDªŽ©ª§¨XI±Y£Î7K2mÌàæ–a×+ƒë»j-4ÚI±{!p}ïo>!òe]¹»é-g]õP.Ãw"0ä{¨ó®lm›þÊÌÄ8̾ áÑKa¼Ù„/z …Ò êêövÉCñ¼|6‹Cë¹÷¿6\Ÿ[\4O.>Ð×bÌœzå¿šñV#Nú+ãý íÁúS©X¥v<°ÒîN"-fáó%ë¹/:®¢ðx”öÍõåõsÞdÔ46ª\%jïz_ÃAù䣯‡‚jÇ*,#'ù±ÜLpsYÌÍ>Ž+’Q×¢"ié&¿øsÙÒ -”Ø¢/Û†H½m„ËH Ž0]um¹¼#"‰*ß+—R‰ÊõÔ¸9.Ã;ÈGtzX†«¡à ±Jôtäj£ ;þ۱ˣ,DŽÅª˜C¹—)‰‚ˆ˜:¾—èuÝÐgØŒé9|ûîâåôÝ«l,§ÌÒw"¨#KñÐx¢@u”'jáÑñwÞFÔÐ ñ`ìA<Å>s"Q2ïC=LbòÆ´õ>ˆ8Aø:Qä\Í€1ñ{ÍÒ"NPÐã¶hËi®©¯¬gÍœàSð…hZ†/h—<É}YãEN;'Ê-'0ó‚Õl -œÀ4d‹V ½K²Üì]½„Á…s¯I°Måz°“âcÉÝ‹ÐbKöýãjmÁL­8¥×BªÃ>]ÁãsZVM!äm˜¿§ürK?ŠvÇ€oxóEÉSy¤·‡‡ª­|0ÆØ8È9÷]Wáo»õ¶£ë£^=ë%+ý1 -ê­yŽvQ.—_3¤¼Ý5TÉ -weþ>Kô@yðÐd·cá„`bÀ€ÓÕä±ê#QD¹4ÑÊž¸-?ŸïP>Í<öuZø²JaéL}.%âç+ÿó§ì»õµI”µéø‡W©±‰¶0 3å ‰öðû2þæýõÿ„F5æendstream +1831 0 obj << +/Length 3970 +/Filter /FlateDecode +>> +stream +xÚÍZÝsÛ6÷_á™>T™‰X€ ¢÷1ç|4q§qs±;×NÛZ¢-N$R)»î_»ØDJPÔ̽\<B X,öã· Êsò<˓ܦöÜXdBfç³Õ™8¿‡¾7g’ÇLý épÔ‹›³o¾SæÜ&6Oóó›»Á\E"ŠBžß̼Hdò f“W—ožMÓ<éäâýû×W¯.†ß™€!0@ˆÉ»‹«Ÿ.~ Úûg†½y}ýì÷›ïÏ^ßf† K¡“Og¿þ.ÎçÀ÷÷g"Q¶ÈÎá‡H¤µéùêLg*É´Rž²<»>ûw˜pÐë^ +@Š$Uy‘@*Ï¥Ll–¥#d6ÉUªœ®/ß½ÿá5íë§kØî ÞTÙ‰sèNTž÷ÊîŸÖõ¬\Òºyhge_· ýnïx9˜D’S 7ϼ¾,&M¢•Îx̲m?v4å²þX}K/èá¬S)u¢3ÝTI +ÿÂìÓNî_]µy¨6ô£)Wµ€ý*²ü4K¬1ùx®Ç¼/‹ ­?:q™)ósM’kU9!4Žr¤‹ˆŠ†Q¸43¿·¬M“,+ôç—õƒ—íØš$SÖŒ—­QèHiâJeÁ!©ÝÐóò=õ”ó9 §ãwàì½ë©}K´OÛjóôLJ9SSÖNn~õYÙÐØ[~ßývk?è#«×6»^>ÑÏ;’ÕÊŸsuä˜÷Ô€õjÝ6ón¬Çóº[/˧jžóÔYÑOgæóžz8긧£pŽé½E ‘äÂ÷gõƒ\‘þé|¼hÝ]{·×å­që³uFæ7ß—t˜¿ ¶JÁârÅ£·ëã»ÓàœN{0ê3Âö£pß>zG…ý¹EwÂÞ_4.ìá¢u3ÄÓ;3±P“´7®å„O +j®Yópô§mM9QKSƒ-”W¿¸(øœ:.øùîgn\_¾áXysrLO +ï Žœ4O +)´w-.ÂÁœ·¼²a¶Êe=nÆ™·‚×­Èò±yãRÅ kÀÞÒª“ j!G.8±|àŒºØ")t!¿g>ÖKF²ëj±h5 +‹¨íÛ5»¬–ÝQÉP÷"fGIàjÀ§)à\XžÊa +ëÖþñýÍåWןÞyð¢‡!@Z€ÿÒðF¦·±½b^`}8iקçà_{'OãÝFÂÎúùÌàM¯ôÐì£QXª¤È3Ï*Nˆ“ò«!Dê€"P³Ò aÁÕ¶ëi™[^¹¤¯³‡Üš‰ßqÛT©ÀjH—ƪŒ›R*£M)•;HôuGĦêÛÍGꨛT¥œU܉zt°h-÷‡Íagæ:¿ýÿw‰§™\4<À +¢QœcÝnz¢¯Ê'jÜ2?Ý`ëoF¡qOÔQ®×8¨Æ);ªÎp[¸âW$i9²lùù{ä(Lbtá8¶'T ´ÚÞšÅI…0•+§Z„ Dòê®ЃY¹ šôÙ²tG +ÍßD&.¯¨Mf CݱÀAA§¤®š‡·€$6õ|î08üFÁá}Ô¬`Dbeêw5Åí*×éØ®bžYéÄÂÃJÚA|B¾f2ï™=×äM¯Ü^ L~p¶`ßœ)ðÿÒŒO¾dùözϽ­ººÇœ¿á¾|»÷æËEÙv âè»IP¿½Sz.k´Ó\‡™f·{ÏÆǪ‹øþ\ª°'|?°¦Ãy´àò!ªÓ´5O[ö WZ©s'™šå¥36G(ñ!0&¹"Çî-På®ïˆ‚¨ +Ÿœ2Ìœ³BBÀÅ”½B¬’E®ö‚.YŠž 3XV1µKAí¼vÞÕËÊCÔ}w yf*ÌÀÝÚb˜Þ)$}YCºÖtD(éÑlW.‹ÛÐOà {E"$¨¬…tÎ×õ¬© + AdMÅ+¾.QâH„`OæžQz $Þm6`GOºE»]Ή~Ën^!r3NyI9ï˦þÓ¯4¥‰áIC£#䜪É#ú\îãÖ#/Í[¿æøÌú9­Á»l +'i#ZšÃÔÉ,PfÆ;„mG ñçY»ZA7E)úmqTâ|L F&BA‹ª~ˆÒ”pǧ„°ÖL»&*}€„°wCTôKøtº }..‰Œ÷ p ``q̧*™dªð†7]Ç}ªµÿ‹+kD5yYpØJ CÕWq'kÓ´8Y·ían¿çl°gMùÐá!N•¶‰ÉŠ=e;z˜i±7!|ƒþÌ©U;(¦²ú µd»ä!ΰ<:IXÀèÔ°ëÕÕ55h+Øò[Á6ÄÚé=¨íõœ>QܼjËOð`ì™xSãˆó×’ø…L·UÅPÜ š÷ýv—" rOWvhöbÑNV±šl?TkðI.ØOrq5¤/ ZƆsœêxÐ&ÍöUX*_åšÅ#üõÑÈ%ré­ÃÙ LÛ6XPÁ5¨BŠ-ÆNJ‚ßØ”M‡ûÇz¤«´FwhRŒùäÿ¿[ÌÙÉ¡ÓW¶ëaHGÄpã_rÐÊHÏë´?†ÿó*#|^e¤\b‡aC½Àˆxž¨38q*‘ÇŽ—L»¨ 3_ö´Wι`c|^„#åUï8z\Ô†e€ ˜jƒì*~­æ©_\^½b7P€È÷‘§u<$Ò¤7j·xOyEåR„ üÏÜb²m–”È™ôHh‘6ƒ|~§´9®¼8<®Ýº¡O+µÜËuS‘\E™w‚z¼ç ûç.Û”Z»ç*^Þ¹0ƒÑM~p15M‡ˆÑe{ØõD]. ¼£9ÒK"“(‘à(P.~þîCB$º~@¢_¨nf´ÖW\ò Ži×=fÏ¥[0eVîõnœkÊAÕWèz«©$OEvBÃA«ve‹š±qWõ=G +â —õw›\Å`@†•ˆl`<0áÍ"$ûb"‹E¥C±B9¶sÑûÉf‹²¹¯:Ÿµø\‚°Pg¡Fobö4„VuQ¸ªöJºYk¢|Æ—`Ã8Í×%¯¼8^ú},»#÷' û£ˆI”ïM½@Iés³é_t·Û½Ï›~ŠÛ¯ÒÙ>4„Lλ[íw¬wîVí®1Ž¹[À„€ˆÆB|w'0oë.b\sX3í|9åÒã“øàý†Sò_¨§RsYÉ«r½&/#G·ŸN£DZ;ž™´{¹ô—z8¢«Wà\CéJ²3“êˆK+^ÚÅ]:â<;]ɨ¦ÃÊcÜ߈]%µæÝ8_ ì;DEe+a-Õ^åp\q4|3 O¾‰Þ]7C°ðÃÏéÛ¡Y —ôÆá]² wÐft +.ÜþbÙ (},‹Å7Äò¼d¸¸‹• )5ÀÄŸåŠs=¼å$Âņ°WhùE¶I‘…G>S@K¥Qƒ»ÍC6‘6—'¯ Rü$âð¢K"¨6KÁ¶N_7Àx].·}»˜•KwŠ¥{|IÒ@¢”ÇõqýÚ$Áô(ø²¯Ö}/±*Œ2¡ª oÊ4‘*cª›)*VRnÖeÔùfI¦ÝÃ2ìz¥w½bW­…&C;)v/ø®àO@ ïýÍ"„A®¬+w7½Õ¬¯ª¥ÿN„¦ €|u¾À•‹ÂƒMwefÂfß…áÐ॰?ÜlB‡=Ð|éHM}{»ä¡x^.›Å¡ÍÜùßÂ_Ÿ¸hž\| ¯Å˜)8õÚ} xê;Z~Ý¡È"Nö ²]Òô™|øî%DŠœ~¬ª~AE\¸Ì¬ûÖ±pyuC?huj3~Ü UÀ]µ&Ôgë#7K*Ô¬½ÿ`c&/êž—ê7±ey[-;j#ž„Í€¤4ëXœÒ«d¨½úJÓ>V©þ£©=F£;9†1åðkp¶LG¼Z÷\>:HÃyÏõ}3:MË…•ÂJ~á.&|ûûhÆY8é +îOh…;•šUj÷Á+íî´q âÑræ?_*÷eÏUÒ¾¹¾|ƒ¢~Λ :€FÀF•«Dí]ïâk8(Ÿ|tõPPíP…bà$?–› n6 ¹ÙǸ""èZP$-íäw.[Z[´ãe×i°  ÔÓußUË;"’¨ò±r)•¨\O ›ã2¼…|D§‡eøX ? U¢§#WÃKÜñߎ]e>r,Vå,]ä^¦$| +"BVhù^bÐuCŸ`3¤ç8ðí»‹—Ów¯²X0N˜¥5öDPG–¡ðDê(OÔ£ã±'8âÁؽ0xŠ}æD¢d>„z˜(„äŒië| +qÿu¢È¹šc>âwš¥E˜ ¤ÇmÙUÓ\S_ÕÌÚ9Á'ï Ñþ´ô_Ð.y’ûªÁ‹(œvN”[N`æ «Ù81hÈZ±‡ö6Ér³w9ôÎM¸&Á6•ëÁNÊw?.|‹-ÙõÇÕº3-Ä)½Rðé +Ÿ+вz +!oÃü=uà—;úQv;\Ù/JžÊ#ƒ=<Ô]í‚1þ€ÀƨÀBιï¸ +¨xÛ¯·=] 2(èYw(Yéïù#PVhÍst‹j¹üš!5àí¾¥J–¿+s÷Ybʽ‡„&»% 'zœ®&u¿ˆDeÓD«âÄmø ü|׃hòiæØ×iþË*…¥3û\J„ÏWþçOÙwêk“¨¢Hã^¥&KàåÜ3åPªH?0ãÞyÿ/D25endstream endobj -1756 0 obj << +1830 0 obj << /Type /Page -/Contents 1757 0 R -/Resources 1755 0 R +/Contents 1831 0 R +/Resources 1829 0 R /MediaBox [0 0 595.2756 841.8898] -/Parent 1754 0 R +/Parent 1675 0 R >> endobj -1758 0 obj << -/D [1756 0 R /XYZ 56.6929 794.5015 null] +1832 0 obj << +/D [1830 0 R /XYZ 56.6929 794.5015 null] >> endobj -1759 0 obj << -/D [1756 0 R /XYZ 56.6929 752.2728 null] +1833 0 obj << +/D [1830 0 R /XYZ 56.6929 752.2728 null] >> endobj -1760 0 obj << -/D [1756 0 R /XYZ 56.6929 504.0748 null] +1834 0 obj << +/D [1830 0 R /XYZ 56.6929 504.0748 null] >> endobj -1755 0 obj << -/Font << /F37 747 0 R /F21 658 0 R /F23 682 0 R /F39 863 0 R /F48 885 0 R /F53 962 0 R /F11 1303 0 R >> +1829 0 obj << +/Font << /F37 779 0 R /F21 690 0 R /F23 714 0 R /F41 910 0 R /F48 925 0 R /F53 1002 0 R /F11 1343 0 R >> /ProcSet [ /PDF /Text ] >> endobj -1763 0 obj << +1837 0 obj << /Length 2761 /Filter /FlateDecode >> @@ -7633,33 +7974,38 @@ stream xÚ­ZßoÛ8~Ï_áG»QI‘”Äö!m²EÝ6»I=´yP,9jKYKNÎÿý 9Cê‡%åpw(PKÃ!gøñãÌ _0ølj ˜Ðrk(ÆÕbµ;c‹'hûxÆIçÂ)]tµÞߟ½ûUÄ è(Œ÷ëÎXIÀ’„/î³oËËÛÛëÏW7_„Š-ß犱åï—Ÿ¿^~BÙí¹——¯ïà5R,%nÔ"¶¼ºùxþpÿÛÙõ½w¦ë0gÂxò÷Ù·¶ÈÀïßÎX t¢¯ð®u¸ØI%%…p’íÙÝÙ~ÀN«í:€I ’0A c(Dš u¾É÷f®zÙlÒÆ<%Ë¢FÉ߇|_ä¾”yžÕØÞT(úQV¯®oŽM?ò#JÒ’ú¥Û§j_4›õ%+Ú[yÌ‹ò už¼BDË›[ßß|¾úÙ)꾃YUæ4ÈÑ, rÁy • -íôž÷çݸŶ×M^¢ÈBkÙiû¤;K`Ó´ åër -ê<æ@ˆÂìcóf¢–Q±”C³øðõê–¨ Žk5Øчr›×nåJü½üë×?)&Sì¾ñ3Éb~¡¡n£zAC¹Ä«´¦(žâ…öTe‰Y¥?0ÖzS4 -EÀB½A£ŽÖ œ–§ÑËê„E!,wªyÃ^ëÔò€EØ&’¾id‘ô,bÄ"éY$=‹˜c‘ä=1Ç"Ùe‘J ã9 °…SÚPiÕŽe“þ ŸŠ¶ªWÊ$‰/@»m˜’x2ÍI±  )C(.T?jt*ðVB -™+î`…†€TãøÅ}«Ÿó•¯¼my•Ž./„Ђ’§O†®¯ýÓtÈH»`–Tª6…­®">~ VB pGõwy³z·Ïëjû2u¬Ö°*¦Nh'šÐIÑLàyÜ’½þÊðÎÊPˆ\AŠÆð­}¬¸;z „ë$€³€ó÷'cÆ?uÜ‚ZQ‹h¬Ò§$žw÷ÕàTNî)±%†0¿§ºZÓ{Êkù0ÙÎb4LÎoÃä‰õñ0Ù3oS³ I65ƒS³‘`j6Otæн5 ¸¢¦%Ë ­K<2:Žö¤>œª0ø%Fã8}ÚšæQÚBN‡g¥ˆDY:ã®ü¡°‘Œ·‡Mfø‡Uã‘Ξ½l܃@y:åHuåý£;ÿÛ,0Í2uZÄñ,ëhÍ°Ìiµ,ÛT¯L‹e3ñ†^ëÔƒÁ…—†/Uß…[Ì[²­ ¥µ‡^)=ÛÌÀßgÚó$äÁÏƾb··SÓ3sC­ß‚¸£5±ÓòÃ&FŒŒ™œ·îµNÍ÷ñx+÷í_åîr"mÏ+ ŠŒ„€­û˪<îÚbr$âšó`ên‘<Î"‡^‡Ô0o@ÜÕš†ØkyÛiZ•Ûãd¬œ5ÞÆÊëã±²gjzpqgJë4mksYÙ9+zeCiï9Í‹%‚ýJfIïÌfªQ By%üœ‡Íñòñ@Í81xHéøÒ --Ø»ãžή3®o¡ë#ëXÝÿbð楀¹ØæM^B5<Éa®Â Iâ7Ît]­i{-ÏáÕ<‡g·>±>ÎážyËa`Uð€A‰Ãæ #(<|¸Â_ÃáÕ&_ýÀb$YQ›ƒG†46»XæÁÆáî(=K&èÉ4uîü¬$l{ùÆf¨j”Âœ.öû% ¾\}¾»»þ€Ï/é¶ÈÒö R­{õ ryš -LCÖ ç©ÐÑš¡‚Ój©°¼!œ5ÜÞžX¿!왾Â/†SÅ!}P|$ÔŸ.ïîÜ…l^v>Ãù"ÑëRmä?‰L€ÇAGo`ÛQš†Ö)µ7‹ ¬ú ¸R ìˆYÃ^éÄrZ ;8õLÿwÈÞßú?áêJe˜¿æ™óäÿç?iÿ$FÆ6Žãd?A†P6“S&­‡žû¿.9uýßüû®wendstream +íôž÷çßÌ@ã Ö\Ú~Yñ4XðÇäG»0¹™'š˜ŸdYv– ªÖ(34<’è¹)ª’º¼nŠs¾\mh€µr¯|GJ‚è5¥ÎEI‚Má:m«êÇáÙ¹`¢^»4ËIl™Ì7¢^¢^}ØÂ"Ö]¸Éù8áP?oÓ#2šEË»jgú‹'&b3`M¢:o¨mmdÉ¿3&Ò'|~,,9@ÉÎH8ÏD ´mr˜Áþ<–K³}$[ÖÞ~–7ù~W”ôêð€N5ÀG{?qø‘Ý•–õ+¶|²ŽÂl«²É³Ÿi·a`Ë +ÆØ¥»æá•b<»¼:4ƒžDc§¯u³‡ òTäuà}ÒA‡‰õé:Å¥[Ö$ÄÛÐ2`^Ùkh´<’vŠ¯°ï_+kœ–9›¯òl¢Çóö@ƒ×Å™ûÎÙÀÀ‡ ‰’„¶ÃOc7Ðqì¢ còN¨µ£OºÖh é‰E¼Ï"ãh‰|< Éþz"LÖŒZÞ7™„­`æÉDj 0-GlÁµ,“ ¹§3礴H\ («±X! ¼….¼Ùlc—ù“ Øvx²¾åi‰±¤–¯Ö ›c@ÒˆæõÅÕzøY\B–€sœx^ãzjË—t{0!Kpa32”Œp[üÈQl}´Ž×¦ÝìŽ=ŒîH˜Ø°I_†×Õ~7FqÅ‘ç‘ýb}3A”D¡OÎ0ÚÅ}b§/!óÉXÉ~kc®Ù–¸ôÿ8)}XÀ”U*bC5^«‘ÒEWËV*2©T¼–å·²zhVÏCÃ\•#ö†e¯ujzÀ¼6Øþjv‚€ÙËÌ’K(†ª%P±<àÓý‡[l{Ýä%Š,´–¶Oº£a°€v1M+ +Y¾N!§ Îc„(Ì>6o&jK94‹_¯n‰ºà¸Vƒ}(·yíV®ÄßË¿~ý“b2Åî/q1“,¶áê6ª4”Kð¸JkŠâ)þX8lKU–˜Uúc­7E£P,TÑ4êhÍÐÈiy½¬NXÂr'¡š7ìµN-XÄm"é›FIÏ"F,’žEÒ³ˆ9IÞcs,’]©:n#°[ˆ0¥ •VíX6é¿ð¹¡h«zõ§L‘ø´»Ñ†)‰!Óœ +š2äâBõ£F§Â£D¾v|{LW?^Ó6qY’ìžÓ¦x,¶Es<眛0%8ÃÍa4¾‡¡|Y™ÿ]B=Ù*ûæniÜšYŠÆ´MòMÆ:e¨æùÖÕšæ›×òhBö¨öù 烢ê–Yã^ëÔzŸsJA¡/yßü±ìªZ8Û6ûs8e•«÷#9q33Œ$V@5Ã3Ä|[œ3³áa÷§¶c–íf”³pÌCCcj³Š¦áýÅáLá.DtF‚¢Ž(¥‚$L†iØOÄ”™ùÞdÇ™"… +¤Òâ%íhÍ,©Ó²KšU»´(1õ´ÝÃu…Á£„Åóx­Súë +>D¼{.Ü™‚ND®T€‡:GxL<‘)Cj§Rá/Äá&5‹Ýï‹·¥gœ×H„9£ZºCdwâo%d¡¹âÖYhH5Ž_¬Ñ·ú9_ùÊÛ6WéÈáòB((yúdèúÚ?M'Œ´ fYA¥jSØê*âãj%! +wT—7«wû¼®¶/SÇj «bê„v¢ ÍDžÇ-Ùë¯ ï¬ …Ȥh ïÐÚÇŠ»£×`A¸N8 826`üS7Á-¨µˆÆ*}Jâyw_=Nåäž[bHó{ª«5½§¼–“í,FÃä¬ñ6LžX“=ó65›dS3H15 ¦fóDgÝ[QÓ€+jZ²ÜкÄó!£óáhOêé +ƒ_b4ŽÓ§­i¥-ätxVŠx@”¥3ÞèÊOÐ +Éx{Ød†X5éìÙËÆ=”‡ SÞ!€TçQÞ?ºó¿ÍÓ,ƒP§E¿Á²ŽÖ ËœV˲Mõ:Á´X1o8àµN=\xiðRõ]¸Å¼…@ Ûº`QZ{è•ÒC°Í ü}¦=OB,ðlì+v{;5 137Ôú-ˆ;Z3;-1,ðhbTÀȘÉyë^ëÔ|߈±âqßþUî.'Òö¼Ò ÈHغð±¬Êã®-&G"®9†¡îÉã,rè…q@ óÄ]­iˆ½–·¦U¹=NÆÊYãm¬<±>+{æ¡ö¨w¦´NÓ¶6÷—•³¢WÆ3&–øSÐAX“J¼]Gk:§Õn½MŸ¦¡›3Þnh}º®ùËÿ˜n‘†Iú þÁŠlE`J Õ½á•%Aª·@íhÍ€ê´Zï²yPçŒw@ZŸµkka¥èX­¤»œQæ:ôEXï‚èò +&Ç¥—M±Â¦,mR“ëPá± Alqª”Bö|…’.p W®¯„sçCOÙlض±<¤3G{¸MÝå3$öžÓ¼X"دdÖ9ôÎl¦UÁ ”WÂÏyØ/ÔŒƒ‡”Žß(­Ð‚½;î©áì:ãúº>²ŽÕý/o^ +˜€mÞä%TÓæ* ’$~ãL×Õšæ°×ò^ÍsxÖxËáëãî™·PEX$œ8lž0‚ÂÇ+ü5^mòÕ,@’µ9xdHc#±‹elîŽÒ£±d‚nLSçÎÏJ¶—ÿ`l†ªF)Ìéb¿_ÒàËÕç»»ëøü’n‹,m"ÕºW¿ —§©À4d}rž +­*8­– +ÛÉÂYÃí á‰åñžé+üb8UÒŇABýðéòîÎ]Èæeç3œ/½.ÕFþ“ȸq„qô¶¥ihR{³ØÀªŸ€+eÀŽ˜5ì•N,÷¡•p°ƒCQÏô‡ìýý§ÿ®®TVùkŽ‘Ù1ÿAþþ£‘öObd`ã8N¦lBs甉31tÝÿyÉ©ïÿœ‡®cendstream endobj -1762 0 obj << +1836 0 obj << /Type /Page -/Contents 1763 0 R -/Resources 1761 0 R +/Contents 1837 0 R +/Resources 1835 0 R /MediaBox [0 0 595.2756 841.8898] -/Parent 1754 0 R +/Parent 1840 0 R >> endobj -1764 0 obj << -/D [1762 0 R /XYZ 85.0394 794.5015 null] +1838 0 obj << +/D [1836 0 R /XYZ 85.0394 794.5015 null] >> endobj -1765 0 obj << -/D [1762 0 R /XYZ 85.0394 695.9587 null] +1839 0 obj << +/D [1836 0 R /XYZ 85.0394 695.9587 null] >> endobj -1761 0 obj << -/Font << /F37 747 0 R /F23 682 0 R /F21 658 0 R /F39 863 0 R /F48 885 0 R /F53 962 0 R >> +1835 0 obj << +/Font << /F37 779 0 R /F23 714 0 R /F21 690 0 R /F41 910 0 R /F48 925 0 R /F53 1002 0 R >> /ProcSet [ /PDF /Text ] >> endobj -1768 0 obj << +1843 0 obj << /Length 2838 /Filter /FlateDecode >> @@ -7672,206 +8018,221 @@ xÚ¥Z[oܺ~ Y·G†R„Ø…­xHµaKås l6‡Õ³ÉÛç˜óåq7é˜.¹CÓ:¹l®î‘/J­ÐêIÿ ŸrÍ06ûáÏò‡ÊÕO7ù8à¤KPhªZ¼–ÛPìé†æ§p Ö÷4Ú‰íËÄ‹cî¾ÛDǽ€ê¥±Ü?’2ƒzÈ/}A$ócˆ¤› ©Ö䨂¾Ÿ¦|Ë"eä[C3ç:©Š TÏ9‰ÙÞx|©–TLvêº[×—Ýz4×À •ÞÅÕßëõÉìÇ1÷s5¹çøBÁRm˜ÂRySÈ$&h-¸n²÷ÁuÆ9¸FX£È:EÅÖ'n·"Â3¿ŸpÒª·Aìý‹ÞÏUjJ¥qhšÃW˜§2´®|„¶²·›àñ|êtùOKåzë%Ë]´Â+ðìý‹EXøuH ¹ñÉéHT°T¾X‹ï:2H‹œl3wTsî“Ÿ§4ƒÍ[Äþ}˜Tç~jrîÝÆf ÒªMËÕ4äš[Œ?ž|£l߬&ËQ ;¢ a3¤Z7Œ£ò†1g½ó=Ò¼ÄÛüÕ\€Ø6ࣄ#KàmC­m¨µ lCÝI1J¼ÈêÕ›‡”Ú ©ÜvGæáÖ<Üš‡GæÉ­yxˆ¬Þ½}(7öáÚ>|É>¥µíÃ}¸±Oî죂)/Óœ“ºhÃh¸„½¢æCªu£9*o´¶]=¥ÛäìOéf¬—Oé"ÞŸ„‰4¶„Û·¢2M)Ò<ê|EˆTëæ4EüÂaF@´¡$C¤o›ƒøËíJ¹¶ÅÓVkS–ËÅZÈt£ðcó¾l€Pœ÷êÄÞõÕ4*ý°Ù^’öKW¢P§ä,·Ç÷· G(î6ü ïê!BYr-“Äg Óøû·V_ë99 é¸ 0¨BpŸn. ;*{6jVëÎ`oÒ!6'éÅ—9HðY/>I ŠV¿Ö ­b—r{»{ ®ÝIê^agÇstaRm ÖR™ ïF sÌz·Þâ¸õ”õŠ[‡¼ tí}—l¸Ãsé¦A–®7O¥jh|~£ö–("s§7ºoœŒ‘´Ä˜m"½ÌXašnEUOä³ÂÑùßZÈS³ƒ-{Á.òµ·c¹þ¢ð™Ñwxõ·_)Å÷sÕÆåÙO¡¯¦Û®Åƒ0£Ôp×´PmÛ­¸žêܹ“0u™pÃëÈÓ,窿€hã†Hú$€Þbëñ<å» ç±A3qÇØkÚú$;4Ëf¯Ÿf3¥ON°Á44<¦b‡iÝ·„i -.FËMley9ƒt(¤]A°C',ÉR}øóYý´Í·¥³gð”´$q,ÖqféšÉÿßXOp˜´h«{1=hº}{®§GŒêBÎB=üûÕÊï€/]þÚYçú¿ÿ”çÿrHsȘkw“YÎRø˜[¡¤&0BsÇAiF íÎeÿ/Nýýendstream +.FËMley9ƒt(¤]A°C',ÉR}øóYý´Í·¥³gð”´$q,ÖqféšÉÿßXOp˜´h«{1=hº}{®§GŒêBÎB=üûÕÊï€/]þÚYçú¿ÿ”çÿrHsȘkw“YÎRø˜[¡¤&ŠsÇAiF íÎeÿ/þþendstream endobj -1767 0 obj << +1842 0 obj << /Type /Page -/Contents 1768 0 R -/Resources 1766 0 R +/Contents 1843 0 R +/Resources 1841 0 R /MediaBox [0 0 595.2756 841.8898] -/Parent 1754 0 R +/Parent 1840 0 R >> endobj -1769 0 obj << -/D [1767 0 R /XYZ 56.6929 794.5015 null] +1844 0 obj << +/D [1842 0 R /XYZ 56.6929 794.5015 null] >> endobj -1766 0 obj << -/Font << /F37 747 0 R /F48 885 0 R /F23 682 0 R /F21 658 0 R /F53 962 0 R >> +1841 0 obj << +/Font << /F37 779 0 R /F48 925 0 R /F23 714 0 R /F21 690 0 R /F53 1002 0 R >> /ProcSet [ /PDF /Text ] >> endobj -1772 0 obj << +1847 0 obj << /Length 3317 /Filter /FlateDecode >> stream -xÚ­]sÛFîÝ¿B3}¡§Õ†ûśɃS;9·iâÖNïnÚ>P"ms*‘ªH9qý ,EŠ”|Ó^2 w—Øß%g!ü•³ÄŠP§f§FØPÚÙr}ÎàÝ»3É0s4ïC½¹;{õVdzT¤‘Šfw÷½³&‰œÝå¿77W.¯ÿ}>W6 Þˆó¹ Ãà‡‹Ÿ.ÞÓÚÍyª‚‹wW·0l¨H"X—×ïλûîìê®#¦O° 5RòÇÙ/¿…³èþî,:Mìì3LB!ÓTÍÖgÆjaÖ~euv{öcw`ï­Û:Åca•‰fs‹X£hšM¡-\{<ˤ›L2Å&…lúºÊë¶y}yx]©•H¢PÎúgŽ0wPcÔJ÷PK‹ÄÈÜ·E{>×:ÚÇ‚Õn½(¶8Ž‚úžÖ>–ñ†Çì‰w´5=³Í¦8—A¶¥iYá…^½µ}*T˜Š(1 -hGôU¶.j@«Š…Š"É@pþø ©Dh4C\Nœ‘ -­•a€ûÚÕöiŽ‚ßaYWM™Ã½e9ßgÑÔ«][<}6WI$”’Èr)Rk•;ùÎñÍŠûl·jiò”­v¼^6ôdÎ9È_ÃPU LwM \«<齃é0lÚ¬-ÖEÅû=cuÚgYb„Ýâ ¿*Úå«mxp·û)YéYø œ˜Àñ pHF… -`£ ª‰:NA‰àê0©*µŽT¸ S‹+%¿ÙÀ2°7PGx vnŒ >€ -0Èç²}Ä‘ î‹Ï¨ƒ¸èÏ6¨X(>¶j‹í†VZd¥ƒàƒhy•µåSAoª=–¬bèÏåjEK §„À ¾¹¯¦ ŒËGw>¸+§F8¸§“òz•UC“UÙ´~Kr,5'"‘±WSĸ|œ•NˆÁ[ P1q”7`ýIDÏÑ“¼iå%±jÉœ"‚LJ[%d¤£¿ª\bäÉÙ]F±3’Ó>µuܧvPΧ.v÷MùgñúÍÈ«,Í=‰»ƒ#zU“Š8ì»óªÊ[3>]ÞÐÔ°ÉxˆDöß;]GCŠqYþTlÛ²!5rN=¯.?܆|ü”gTQŒ!Ø+Ë› é@DÓ±X<·E#ÐåIòfŽÌìK¹Þ­i‚Cæ/­0±M‡æ¿.+†Sw…††=ðÙ>–¼2¸/Ì÷ “ÈZmyÝ™( BzX³!=]=ŸK)$9ƒŸ1…@wë±îZôäÔIl3àŸt¸`6@ìÆõ®Ê‹|Ê ì6dÞöóú3Û4<Ú»Ù–à¡{tÉpHn]Øz_ñ RÄ©iÆ FËl×°=fô@©Óè]±}æƒxã‚aÉ­³5™¥uú‚­õ NØš‡r¶VäUóú«‘¡©H€ÚÓˆ;¨1æƒôý›N†¨oA%Ê{ÇÄ[Òñ* Àˆš²®ø}MÏŽ‰‹8Nõ—W™óÎNtIO[`SÖò`ô-éIZ(™ç?4¤ÿŸücƒM…µ©O¾®jÙ„c¯§50™à–+ˆGÍA¤#^¬ —%r¶4$/zTm Z”@ :©ˆ}¨ãŠØA¹{ýRÕ¿­! +WeUŒô1JD ¾õ4þjLÀPÁßÇa”)¸Ù–˜÷•0Ÿ–µ{æ -®Êß 9~âàöãâé ˜>à3£°vQ7¼ÓÝtî®êæ¬3ÆN©Žw묚“ÖE@s¦CÿFx³<[¬ð PB2¼Æü ƒBY - -¸Þ¥¸8AÇj bCÄù†¯KE¶|¤Åáh Í¡2šb`#Ä*À»@"jtÚ{Ÿ-Aš˜ÈÎfáî5™Ï”• 0¤àÓÏ»”ìIa$Ô²> z˜° £‡°²Ùw®VÂÆD«tºuB§=T§Ó÷Y¹W‡:ê8:ºƒã>Èc4ä;é÷%IJ‘º¥A‹ŽGÖ^÷ªøÂïšbûäêFÃe<ŸëÁ³.ËÄ7=n¯~:·6øùíyl‚‹ë÷‚–ïüñû¢ -q•”áÚm‚,_<¨#‹R¸W¬‡ŠâIu1÷±Deu™ï´«CwV •ªBKcWÝ´»E³bø¢€*¹í‡ÛUCÔÖžV>ÔqÕé :ÕYP‹ÜƒkhG -ð`ú:¨1Öâ -{;$ᢅÂuƒÉpDžBEàFÊf³ÊžyÑ1PH´ètÆqV9]nhæ…É^LF¨l…ίÈþ°ÇÂþà¤lØ BÊ®;Ô JR¹4¯£&ŽÉUõis\¤ uQÇ/ˆ´uB¤ª)„î¦XŽÄiC¨DTry5Æ>'¤5qläýO$ ÊHBÕ ÿöê[‚—¤²Ú=× p+Ï~…s%œ88<ðã÷¼£ä­¿†6¼üÿKšcd”i´ßýñænŠ’¹±"Q‰F¾QŸåyÙBêÒÙ6u5Ž(½DŒRþ#Š ÓP@M~R ö0Ç•€a:hʇåcÖLä8JÄp ¼äïPüPCÆ*Õ}Äß:„s9…”RX³>TY»ëÌQaÃ{!h‹°Qg¸ËÐÐk ·nàÒV…Í·õ¦\9ãêRÍ/'šÀ&Q¤ÚôîøRXAHK’éð¼;ï$C H UŸ!·×ï¾ýçÅíÕqéCÚ aé%ù÷ Nh€‡r:ÐnwØbšÿ^<¿þ -þŒô ‰Dd}š„jLÃPR)"FC"\í…Ì™»«TðK«‚ÆèÔAØÔÁv¶çI°£îÎ~ÞŒþŸ Þ¹k<ŒÓ‡‰†§6¦]ëìë¾IÐo!í…¤¦kFÍ{å’TDÚüýÕ|ƒÄ’¤ ÃaëB\cX}yGQ¶¾ä÷ÌkE—²¦P¿2¯Ñ§¤œÊ(ðfMÇÔ|*mM±­_J[}çœq°ªëß ÁýdóÐÆP„wuŸëïõTLÀ¿)LJ Æ~øÅÉÆ4ÅÊÓüò©©‘ìJUç¢SßHú—äi¸ Ñ`¼1„„©Š¦ê¹ïqÖ}w}(Š?å6> ÜóS6ô~ -F“~JÅèBM:ªñrúo{ªîÄyÿȱ¹*p-±Ôñóÿä­T!?J_HZúPǽUÕE¬¶Þ¸ÆÙ(k‰ ÏÍiìÔýAØ’"¶2âÿ*æ\¹N~Æ¢L÷A ^1éƒ7ÅÓ?šd´.4çV tí¢2ÏZ×öñ¤‡êØ\±Ihã¡‹ùk:&±¯ƒ’¶X¾û÷uÌŸ8ï9¡chÖFÙ=æ‘Ž9ßÕ]ñkÑü…v)€(BÒùáÓ{,î®oÞ_ÑUütõÓõÕí„oQDbãtÿíMA¹÷æúÃ%ŽÒ ¥…r½Y¹oPçoƵ£Çëc)ùb'@¦¾_Þì6(§ÂÔP’´ -°¸¦ÌfÅ„aŠX:@*Z$_ Øg¡V·Iêãà3Ý’‰ÆŒ”}¦äi"õÐ×Ñýt¨©,§ÏQäÖ§¿<…,:ôás>õG‘Æ©çÍ"k1b" - Pç2À[â´Þ ˜šã7½XrlEäî 2€´®m…KOp}™1õ‹bOýªtßFa•ô×]Pu'~®Ò}º&Ä ‰P¥…Ъ³‡æÉŽÔÆ—qù¨¥ÊÓÑ…¢µÿª£%$x²Ž¨é5þ[ÐyÿáŒðL|”SB…‰g4•¶;þ† -hÈð×Φ[Θž²Ê˧2ß¹²E«î:î•'¹`ŠIç¸mˆ+Í3˜ÉçE³Ü– þ2—!Di>yg‹ú©À_i€ScI«¾ »ÚgNî¿ä<÷WO8hZ #óÂv²Á×N68ØËoÿ3Xv¿ kÚ¾à9æ:oÞmxŸS3åÅ›­¦>ôôëÏ›â@G–«¬9Ôw»iê¾ôpÒ<Ö»U>Ì'2¯êý^þ~ËA}y¨¤w«zA‚É$ÿpŸ&Dž.§­i×IÁMž2þ9>÷”ño%Ü¢Ë&ùT°`>jIjˆï›švøc¼1»Rеe\ LõD—IÖØ)î¿.ßÖ®ÓÌÝļ W¤ðýÒ–À`u·Yñ:y!å”B'QÚnh{\Â=݃©d¨Ž’×O6¦™—Æp °>˜~ °\'ÀYIpáT :ùÂ{/Nczjf¨7R|Y®ÓfÌ—¯’T„²ûMŒKË–ë|ª` -…²‘Ü»w&9ãK,øà¶Û2Ï‹Ê÷\AM£$š×âyðAËÝeÞÕ;Kßqi‡Ý–)×쾯¾õßc‹/Fûûµ˜†Ê]멼2ìÒ“¿ýK²ýïäL,4~}ŸL› n àŽôD!_ ’n1+IT·aüpñáÓÅ{»9OUpñî꺑 I$‹ÂàòúÝùowß]ÝuÂô–¡FIþ8ûå·p–ƒÜß…B§‰}†N(dšªÙúÌX-¬ÑÚ¬ÎnÏ~ìì½uS§ÀØDXe¢ÙÜ"×(š>¦P„¶= ®eÒî˜L2uLž +éë*¯Ûæõåáv¥V"‰B9ë¯9âÜQY+Ýc-u,#xßíù\ë8h jT»õ¢Øb; +ê{Cù#qЯmXx;¼lÕÛ ´x”Ž‚¢áUÖ–O½©ö\²Š©?—« -á$x[d¾š‚8.Ýú`®Œ°Wàžî¶°‘×묬ê¬Ê¦õSú”ã[“q"{˜"ÇåãÄ]éDÀ5x­)&–’`¬_‰ä9º’W­¼¤£ZòI‘ÀãÅ­2ÒÑ_—Yr6—Q¬AM£ä´MíS·©•³©‹Ý}SþY¼~3²ªÆÀ‘rOòî¨Æ̇VÕ¤"N#;äòÚŒO—7Ô6Ù‚xü÷ë¨è 1¶¢ ËŸŠm[6#g$ÐB`óêòÃmÈËOYFÅè‚=XÞLÜx4{‚Ås[4Mž$kæÄ̾”ëÝš:¨1¤þÒ +Ût¨þë²bÚ8u[h¨‰ÞŸícÉ#ƒýB¯ÑЉ¬Õ–ÇŠB#¤‘5Âéêù\J ÈiüŒ!š[Ïu×¢%°NÂ`›ÁùIÇ zÆ®]謁ȧÌÀnCŠáu?¯?³NƒÃ£¹›m º'— ‡rátÀÂÖÛ‚ŒWø“3zÀÑ.ê†gºÎÝV]¢“uÆÜ)”ÂÖãnUsB]2Ga:´oÄ7˳Š+ +%ÃkŒßÐ)Ä‘%§€ã]ˆ‹4¬26Ä ö7¼u*²å# ÷Dc¨ŽH•Q1VîQ£ÓnÙûl ·‰0‘¬am¾Ü½¡&õÙXYCr>ý¸KõÂHÈe}ô0¡ 2FOne³;n\­„‰‰V/`ºGuÓžªÃô}V®ÆÙ!„Ž:ŽN³î¨Æ¼â ñN:ä}‰I’T¤n©Ñ¢áцÑë^_ø]SlŸ\Þh8m€çs½#zÆAá¢L|“Ñãöê§skƒŸßžÇ&¸¸~/høÎ/¿Oª`—IÎÝ&ÄòÉ:±(d}Åz/ªó¹%‚ÕE¾Ó¦ÍY1U…šÆ¦ºiw‹>9FÅ~ñEYr è‡Ý…Ž‰ÁjkOC§Ou:UE¹È=˜†v Ø€Ó/ÐQ%8ЗØÛ¡-$® †#²*3R6›Uö̃‰D‹F‡hÜIÃ(‡Ë õüeE²ç“‘*[¡ñ+r‡¶Xø¢Ãvʆ­ „ì:±CLxWê@å¼NJèt Ø'W ä§Íñ+ÔEI¿p¥=ªWꩺ+×ÝËÑuÚ2•œfÞQ¹¯š86rÈþ§‚ïHBÖ ÿöê[jœ—¤´Ú=W p#Ï~„c%ì8.øñ{žQòÔ_C^~„ÿ%õÑ3Ê4ÚÏþxs7% ݹ±"Q‰z¾QŸåyÙBèÒé6&u5ö(½@ŒBþ#@Ði( '? ƒ=Íq0M¦|X>fÍDŒ£D +œàëIù¯rÈX¥ºÏø[Çp® ¦ð¥æ¬UÖî:uTX0ÁZê"8lÄ WzîÖ5\ت°ø¶Þ”+§\]è‚­ùåDØ$J˜T›Þ_*+piI2]žwë<7”ª ·×ï¾ýçÅíÕñÛ‡°ÜÒK÷ߣ:Oå0ÐnwXbšÿ^<¿þ +þŒpD"²‰>-BG5–aˆ†TŠH§ÑP—{a%³pêî2|àЪ 6uÀ«:èÎö< vTÃ>ÈÏ“ÑþâsÁ3w§qx˜(xj#lڕξî«ÄüÂ^jºbÔ\Á²W.HE€æï¯þã œp-Iz0†±Î%À6†Ù—7eëS~_(À¸Vt!k +ù+Ÿá5Ú””CÖ¬é5Ÿ +[S¬@ë—ÂVŸçùg¬êúwbp?Y<´1$á]Þçê{=ˆ ø7ÅI)aÃØÏ»8Y˜¢Xy™_^5U"’]ªêLtê i ÿ’, '4”7—0•ÑT#÷5κo®¯âÀN¹‰à îÙ)z;­I;¥b4¡&Ô¸9ý·-U·â¼¿äX]˜–XêxÏù²V*—¥/-}ªãÖª£ê½ÇôèîúæýmõÇOW?]_ÝN؆ §ûoo +Ò½7×.±•) ”ëÍÊ}ƒÊ8~3®=¶¨˜ÛHÉ+2õõòf·Ù@:Õ§†*„*àâŠ2› †!bé€T4H¶ °ÎB¥n“TÇÁFº% )Û: ÉÓDê¡­£ýéPSZ/Ÿ“ÈOy +%htèÝç|ê#Ž4"S6‹¬E‰,ÐAËw‰ÝzƒR`hŽßôbɾ™»/È@Ò>º²ug‚ãËŒ¥_{éW¥û6 +£„wNÕ­ø¹bJ÷éšxÐÉH„*=Hì@V=4ß°Kv¢6>ËG%U&˜öÖx)Zû¯ +ÐZBÀ+눊^ã¯1±ÌûgÄg⣜*LüASjû°ão¨À†ìílºáŒå)«¼|*óK[´ê¶ã^y‘ –˜0ÇeCižAM¾P;/šå¶\ð‡¹ ÁãHsðÉ;[ÔOþJŒß´ +é ºË ±çî]â—œçÞ€âì M bd>¢BÚînðµ»lìïoÿ3v¿ kš¾à>Æ:OÞmxžƒ™ò×›­¦>ôô ëÏ›â#ËUÖâÆín@Ý—ŽBšÇz·Ê‡ñDæ¡Þ¯åï§ä—‡h¼ Ü=¬ê]|L*¡ø‡øìy¹ZÓ®’‚“¼düs|î%ãßJ¸AMòª Á¼Ô’`ˆï›šføe¼2»TЕe\ ,õD—EÖX)î…_okWiæjb^Ð+¼A»´%2ÝmVh¹½Ì»|gé+.í°Ú2ešÝ÷Õ·þ{lñ%Coÿc¿Ó¹k=W†]xò·I¶ÿœ‰…Ưï“aø-§#½Px.2´‡¢[ŒJOÈþ_'_Òòendstream endobj -1771 0 obj << +1846 0 obj << /Type /Page -/Contents 1772 0 R -/Resources 1770 0 R +/Contents 1847 0 R +/Resources 1845 0 R /MediaBox [0 0 595.2756 841.8898] -/Parent 1754 0 R +/Parent 1840 0 R >> endobj -1773 0 obj << -/D [1771 0 R /XYZ 85.0394 794.5015 null] +1848 0 obj << +/D [1846 0 R /XYZ 85.0394 794.5015 null] >> endobj -1774 0 obj << -/D [1771 0 R /XYZ 85.0394 204.5196 null] +1849 0 obj << +/D [1846 0 R /XYZ 85.0394 204.5196 null] >> endobj -1770 0 obj << -/Font << /F37 747 0 R /F48 885 0 R /F23 682 0 R /F53 962 0 R /F39 863 0 R /F21 658 0 R >> +1845 0 obj << +/Font << /F37 779 0 R /F48 925 0 R /F23 714 0 R /F53 1002 0 R /F41 910 0 R /F21 690 0 R >> /ProcSet [ /PDF /Text ] >> endobj -1777 0 obj << +1852 0 obj << /Length 2180 /Filter /FlateDecode >> stream -xÚ¥ÛrÛÊíÝ_¡‡Î”š­÷Æ[ßœØÉљ۔9í$y IÊâ„E¤ì£vúï»4%Ñ£t:| ‹Åb,.+&>1ñÄ2ž„±f>þ$­.øäæ>\K3sD³!ÕÛåÅå{Nb2˜,W^ãQ$&Ëì‹÷–I6Üûõn±œÎ¤Hî]ÝßßÜ^Ïÿc4@Á¹÷ûÕíç«„»ŸÆÒ»úp³˜~[þvq³ì¥J,¸BQ~\|ùÆ'þÛg*ŽüÉ3 8q,'Õ…öóµRS^,.þÞ3Ìš¥£œIÈ1Äc*Ð! ÂTÓYçûåÇ–€ççgV´)k¶v&©÷Ìþ¤¿!ãð ×­eW7ÀÔsù^ª|2S°RÆ¡Ù¾]7Ï°B†ÚÈÒ‹¡ÐŠqÎ#Xç¤=å)ð<Ê·4i³+3bùÓ×æ³ÚNEä5ºµ%H›ªJjKSµEw ý«ä»Ã¬ ƒÜ˦ù¾Û´›Î”¢{uûO~ìòíÞnÜXm˜V±ØB+:ª©&3-c€ÙgB/Í´Sô©´`‘V²yâ¡—ÀO+~Ê·mNaí5+ LŠC£ œ·<ìAă˜)£<ÄÜ.†¥ùgm¿Áé±e¬X±•÷gÏ…71†ûIÛ=–ÍCRÒ.$ŸÑœ -C¦#Xs ºfÓ ˜Gñ¨É?Ø $âÎ…~u])ÀE/31K6›²È3T¹”^Û¶['݈3G’ùQœWœâ“ŽÆÞâ™PÔEW˜“ÃÀYñý«$³”d+ò$]DÆMêH{Kbz_9—õ!K£LøL8N™3Ö ^Ye¼e“âZÇèTnà1• sTåtþJÀP’IñrCÖžyVyR[9^S7x4†s±®gàØ¥=HÝtl¶Eݹmrz ùy›+c RMóÝ - WÎèTBøõC:(ñ†Ü‚· ÿ'· ‘ãQÜJk.ÿçÛä4Ö˱™¤f2ÂÈ£|‹XÚùõ- °ø|÷iêûÞr<¸KŸÉ8hÕjÄ(1ÿóñ\E±39y›¼‡©€À[ÛÁ®(QÇÚ£ukB’˜€úÊ}fË·u‚N˜”Å¿Lš¬©’¢&²:©r 4Óî6›fÛ½¡‘± üÓÄ'išo,’r ³¢Ý”Éž°uSϬYÙ?4ñÕâÝ|ŽWLõB(.-Ñ”à.ÀsÎé*¸óqˆF”àÀk“./÷´]ÚÔÿ»–6L×É6IA94™×i“õ#LB‘°ùŠÒŽÛ¼6K)XHŽ‘7< #‚غ3Ü•¶#„É­Aä]‡D›oŸP&„û·êA„÷H¨~?46…^) %åAr ‘“¶©1[(8]nânÞ%ò?½ÜP*1J—špSr¸²±OüP²@ƒ?QvJGQ4^tÎzŽ³!ËÓŠRrˆž‘_vF¯ç‹«·oÆϸÖ.PåõSAf««c,*á)Ï}(sÌõÒe(PžÑ¹Ñ§Õ¹˜, ³à'¸(³Øa­BÁ0±ÕÔQÄu;Q`+l„móŽËGr -ÔeBž_Zig±í4òvuûJ¸ r…Û÷óÔ[éû(¾^æ]z¹ÍÛ¦|bpÅW½FL„°?Òüåß¿Þý~óŸK¢nÓ1¸Û›,nnHWwçcüºi;Œ¶ãèZ‰ñ"Cd4@fuÛæéì{¾ÌëÁ¤ÙA[5@-¦{ý}zÿZ)¬4ˆXè÷tã -–Duê÷íç‹óGßs± 6Ì>€í Ó5 •é—r•€T @3¥gÈÌpÇ×”NÁ/ ‡BÝ:›‚ø¦,DŠ[ŒÇãâC¬PÖòfµÙü«”!A×®ºp=»®(‹nÿ3¾±¯›M Wå()ÁÂ(PCÆ‚›7Ö¦ -Tú˜¨Æ{X -7tÀâõ¶§z9(6_fÉ»¬¬·íòùé›C¥c¥§Â&A»Ôš–IÛŽö)ÌICÔ3¼aZŠß¹b5Ý«üÂø˜á§ó wÕC>Ú@LJ-Ž9vg9vûÍX¶‘ -¬Íõ1¿?Îò{NŠîU~ªçG-Z zŽË£/³jd—CVeò8¶‹f:ŒN´ {(°U2G¥Á·Ñ *Lâ0h\ß,Þ}šß/çw·#ya$,Ž·JGÃÒ/–4øk‹jƒéHÄQ'Í„©%Øä[€+S¬áØ\gì;$MC®ìëø×°&)KËCÂzÿ¶<¤M9z8?¿·rfÅ@ˆä­-tí,IÕ1”OOEj 1|~HL ¦¼?¨Klmk@ -­;,Z[ymíŸçΰ ½Çâ)¯ßŒ˜BB”àÚw>óš)$„Jß]nÓå¹]lí¸6e†wU•˜Pû6¶„,½{<"…„ø¾xÜ1Û'¥>‹¼QF]'IÂ?Ší”Õɽêñ mï1LE#¸-[è;!ìE é¤#¨_Ð̓¥@ç2ÝÀæé@Æ¡ñ1DP{@R¶Gë·m×åÙ,ËÓ¢2=3àæ÷Ošˆ>ESÆð/«Ó¦vUü%jØ÷˼,ª¢3¥Ÿq€?dlÊmèÉkš±oHž&m>ÖyA9«e|Ö|!_çÞ¶ÉòU²Ã‘öæÒ !‚Ç9À÷sSÿÙçèD쵇gXøZ<’byáþïGé—7wzô’¬BôŒ¶B¡š §=Ý=_ŸÊþ_'PûÔendstream +xÚ¥]sÛÈíÝ¿B)5­÷‹_}sb'§›œíFÊ\;Ih’²8¡HE¤ìS;ýï»4)Ñ£t:| ‹Åb,>VL8|bâ,ˆe< cÍ|.üIº¹à“G˜ûp!,ÍÌÍúTo——ïU8‰YÈ`²\õxEŒG‘˜,³/Þ[&Ù8pï×»År:“~ ¹wus{=ÿŽ9ÐçÞïW·Ÿ¯>î~KïêÃÍbúmùÛÅͲ“¦/±à +EùqñåŸd øoœ©8ò'Ï0àLıœl.´¯˜¯•r˜òbqñ÷ŽaoÖ,Õ€àLª@Ž¨@‹1èaH*ÈŠÇé,€óýòcGÀóó3+š”Õ;;“TfÒ_Èqø ÄUcÙU50õ\¾—ª'ŸÌ¬”qh¶oÖõ3¬¡ö²ô¡ãœG°ÎI{ÊSày”oiÒz_fÄò!§ÿ¾É-fµ›ŠÈ«74j×– ­7›¤²4eQYt[Ó“|w˜µaÛaY×ß÷ÛæoÓ™ò#Pa¯nÿIÀ}¾;Øk«I`‹ý(´¢£ê‘j2Ó2f˜}&øÒL;EŸj@ i%,›7 Nz ü´òHà§|×ä„ ¡Ö^½"\Ϥ84ºÀyËÃA<ˆ™2ÊCÌí¢¿QZ›Ötœ[ÆŠ…q[yö\xc¸Ÿ´ÝcY?$%íBòÍ©0d:‚5ÕÕÛ¶¨Á<ŠGHþ`'ˆ;úeÔu¥WÌÄ,ÙnË"ÏPåRzMMØv´#ÎIæGÝq^qfˆOB:{?ˆgN@QmaNgÄ·ôß$™¥$['éš 2>hRGÚ[ËÐûʹ¬†,2Eà3â8eRÌX'xe•ñü•uŠkt S¹ÇT.ÌQ•Óù+CI&ÅË Yxä¹É“ÊÊñšºÁ£!0œ‹p=Ǿ(íAªº%`»+ªÖm“ÐYàèÈÏëÜX[jêïVH¸rF§¯ª`è Är Þ&üŸÜ&DŽGp+­¹üŸo“ÓX'Ç +d’šÉ#òY,bmhç×·$Àâóýýݧ©ï{Ëñà.}&ã  U«£ÄüÏÇsÅÎääm:ð¦oeû¢DkŒÖ® Ibê+÷9˜-ßU :aRÿ2h²z“‘UÉ&RA3Í~»­wí Â?M,q’¦ùÖ")W2+šm™[ÕÕÌÚ8`•ý¡‰¯ïæs¼bªBqi„h؈¦‡pžsNWqÀC4¢^›´yy íÒº‚øß6´aºNvI +ʡɼJ묨idˆ„„}ÈWävÜä•YJÁBrŒ¼á0X`ŒbëÎpWš–&·‘wmM¾{B™®íߪÞ#¡ü¶xBöò:ò6— ˜[žåDpI3q¨÷͈¸,LrïD‚ÿ~WhØ®\cëf(2yŒ9>›B¯Œò 9ÈISW˜-œ.7q7oˆùŸ^n(•¥KM¸÷QÑ)9\ÙØ'~(Y A€Ÿ(;%‹£(/:gÇYŸåiE)9DÏH‡/;£ˆ×óÅÕÛ7cÈg\k¨òê© ³U›c,*á)Ï}(sÌõÒe(PžÑ¹Ñ§Õ¹˜, ³à'¸(³Øa­BÁ0±ÕÔQÄu;Q`+l„mò–ËGr +ÔeBž_Zig±Ý4òöUóJ¸ r…Û÷óÔ[éû(¾^æmz¹Ë›º|bpÅWFL„°?Òüåß¿Þý~óŸK¢îÒ1¸Û›,nnHWwçcüºnZŒ¶ãèZ‰ñ"CdÔCfUÓäéì{~xÌ«Þ¤ÙAÅ}õP‹éNŸÞ¿ƒVÊ+ "úݸ‚%QÇCý¾ýüaqþhà{.Öá’þÀ†Ùp aÚº&`cú%„\e C}'ÐLéÀ23ÜñÀ5¥Sð è¡P·Î¦ ¾) ‘âãñ¸ø+”µ¼Ym6ÿ*eHе«.\€ð¾-Ê¢=üŒoªzÛÀU9Š@J°0 +ÔDıà浩•>&ªñ–…Bà í±x½…í¨^ŠMç—Yò.+«]³|~úæPéXé©°IÐ.µ¦eÒ4£} +3AÒu oG‚–¢Àw®Xeuû*¿0>føé<Ãýæ!m &¥ÇÛ³ÛÃv,ÛHÖæú˜ßgù='Eû*?Õñ£-=ÇåÑ—Ùfd—¡@«2yÛE3F'ZÐXˆ*ƒ£ÒàÛhЦ?1 ×7‹wŸæ÷ËùÝíH^ ‹ã-¤ÒQ¿‡„ô‹% þšb³Åt$⨻“fÂÔlóÀS¬áØ\gì;$MC®l ëøW°&)KËCÂzÿ¶<¤M9:œŸß[9³Œb Dòƺö@KRu åÓS‘ÚB ŸSƒ)ïê’[ÙBëãË€ÆV^;û§ÀÙ§3,Cï±xÊ«7#¦%¸öϼf + ¡Òw—Ûtyn[;®M™aÀýf“˜PûÖ¶„,½{<"…„ø¾xÜ1Û'¥.‹¼QF]'IÂ?Ší”Õɽªñ mï1LE#¸-[è:!ìE é¤%¨[P̓¥@ç2ÝÀæé@Æ¡ñ1DP{@R6Gë·mÛæÙ,ËÓbczfÀÍïŸ4÷|Š¦Œá_V§uÙïªøKÔ°ï—yYlŠÖ”~"@ÆB~Ÿ±)·¡'¯hƾ! yš4ùXç嬖ñYò…¾ χm“å«d=*"íÍ¥ABÇ9ÀwsSÿÙçèD쵇gXøZ<’byáþïGé—7wzô’¬‡ + +!zÆ[¡PM‚'¢»çëSÙÿ ¨‡ûwendstream endobj -1776 0 obj << +1851 0 obj << /Type /Page -/Contents 1777 0 R -/Resources 1775 0 R +/Contents 1852 0 R +/Resources 1850 0 R /MediaBox [0 0 595.2756 841.8898] -/Parent 1754 0 R +/Parent 1840 0 R >> endobj -1778 0 obj << -/D [1776 0 R /XYZ 56.6929 794.5015 null] +1853 0 obj << +/D [1851 0 R /XYZ 56.6929 794.5015 null] >> endobj -1779 0 obj << -/D [1776 0 R /XYZ 56.6929 626.4701 null] +1854 0 obj << +/D [1851 0 R /XYZ 56.6929 626.4701 null] >> endobj -1780 0 obj << -/D [1776 0 R /XYZ 56.6929 517.4334 null] +1855 0 obj << +/D [1851 0 R /XYZ 56.6929 517.4334 null] >> endobj -1781 0 obj << -/D [1776 0 R /XYZ 56.6929 438.0429 null] +1856 0 obj << +/D [1851 0 R /XYZ 56.6929 438.0429 null] >> endobj -1782 0 obj << -/D [1776 0 R /XYZ 56.6929 376.8269 null] +1857 0 obj << +/D [1851 0 R /XYZ 56.6929 376.8269 null] >> endobj -614 0 obj << -/D [1776 0 R /XYZ 56.6929 339.1376 null] +646 0 obj << +/D [1851 0 R /XYZ 56.6929 339.1376 null] >> endobj -1783 0 obj << -/D [1776 0 R /XYZ 56.6929 306.6767 null] +1858 0 obj << +/D [1851 0 R /XYZ 56.6929 306.6767 null] >> endobj -1784 0 obj << -/D [1776 0 R /XYZ 56.6929 271.6646 null] +1859 0 obj << +/D [1851 0 R /XYZ 56.6929 271.6646 null] >> endobj -1785 0 obj << -/D [1776 0 R /XYZ 56.6929 207.5268 null] +1860 0 obj << +/D [1851 0 R /XYZ 56.6929 207.5268 null] >> endobj -1786 0 obj << -/D [1776 0 R /XYZ 56.6929 137.3205 null] +1861 0 obj << +/D [1851 0 R /XYZ 56.6929 137.3205 null] >> endobj -1775 0 obj << -/Font << /F37 747 0 R /F39 863 0 R /F23 682 0 R /F21 658 0 R /F53 962 0 R /F47 879 0 R >> +1850 0 obj << +/Font << /F37 779 0 R /F41 910 0 R /F23 714 0 R /F21 690 0 R /F53 1002 0 R /F39 873 0 R >> /ProcSet [ /PDF /Text ] >> endobj -1789 0 obj << -/Length 4062 -/Filter /FlateDecode ->> -stream -xÚÍ[[wã¶~÷¯ð[åsV\\ì9}pö’ºMœíÚIÛ“ô’h‹'©);ίï fŠµÚm^ºû@hƒÁ\¾ÀòRÀyéL"tž^Ú¼»}{󯫩2bòMr55BL¾¿¾ýñú;¢}¸ÊÕäúÛwwø3SØIa·LLþúÃÝýÕîÿvñî>r³Ï±YùtñóÄåÿÛ…HtîÌå3ü‰Ìsu¹¾HNLªu ¬.î.þÜ{ë?“€Ñ.1NÙ=&“'™VÚ‹ -·Oå×ñú½Úï­óDJ«` -ìVµWS­²IQãÓNšMW5u±bêöJºÉãn]ÖQž—Õ|I]çeÕ-a&OƒëbÍ­†_Ý|à1 ?jÙò÷ÍÃÉoyüºèx9r°X½q9¯gÙ´ÝÈ¢§©†³HUÊ$7F‘–Ínµ ø´+·/Ô¬ê¶+ ¦#{øôìa#0å_n÷i-ýXUðù" EÜè|¥³Äê<ìÁë²›¿Þ–m³zJæMý0Â?,2K¥æìq9ÕZ%Ú s9Uа–tÿø<žR®g6HiZŒÌ!Ó$Mã.¿#ŠÕ -’—ê5ƒWÅ+-?íª§båµÃ˨ â躪~ì7ÂPÊ*â’¦Og9Úg ¨Y¾Eû+Nt¬N%RKõyµP2qƆ ÷ëâWÞêâH5¢6¼l¸Ïõí¿¯¤”qS`Ì,ÍÝpSþ¹,ÑÀ¤>!4ƒT‘é›1a€ž[™‡ô†Ï][.^ˆ$-”–gD¡’Ô¥¡ÓsµZÑ EוëMÇÌ7øT“EÕnVÅK¿"߸ûášdßóÆ?Ì݃wÐø½©YfÈ€L@Å-sàÀ›Ö½×ƒŸ¡Y3«g–1X½€1aíÁêi3‚}j•NŠ]·l¶UWtÕSI¤à~LoÕH&þ¡á‘oáJ0hhí­ÎÓppúšüZ?^:ܧ™,Ê_„Pu`höfánï¨ß¡PqbèΈ3¯¸Ô›~<4»`.ÁaEoFkàÁ¾Èä6hÉt>®§*ÍÕTKïU·Wn²›w¸tMîßÁ!¥ Â[¿hh å]ÉÉ ýò…ç|U´í˜ -I‘XÜnš|¯ÛP‡òĹè q‚åVÌÕ¼`†g%=Ñ®† ¯šæ×݆h-ÛªY0ƒ[Ò;eMâ¤PÃíy³,š¶.y‹ˆ;ßäxØì|c^îSã†'¨Û‚ _/ʇb·:,øæ›[z¢#¿©»r 3£7?ØlÏÙOÞƒ•ÛYÓúÑìºÍ®£6h'e]n m5õØ×H€ÆXyÖïæÊEgã#yÂ9ê$ƒp”n1)ŒÌ‚ÒmǦÔ&;n`ynz  &$´Õ¼ÀósÃ"ópÏ=´{a’ƒ„/2 ûúCb”IídY 3R©ô²Ú†|ÝSµð2fìTÌ}.¢·Åwóf½Ÿ6«VU÷ÂñiªE>¹ W>UÍ®¥QÐ5U`l°†WDßmRV™>³©Œ'ŠæmŸ«n¾¤%ÀrjŽš™Kɘ¡@ål÷ø؉m1/Û³–[Е9¦(ëb¶ -Xí©7ÁÀû%¥Bi‡ò;ïê`Óu³(©å5žm¹*çd*Ê›Šž€B8¨Çl¯ÆÙV2B!¿£Ásy6À¶cX(웧gm2SGoÊ-¨×šÆ-èá7­c[ÔíƒÁ*èaèpì–%°ٙȮ“\Š´÷Ê~mW98BžŒB:(ˆË²lÒ)œY2ÐÚl«šA(zfïÌ {ÞÞ¡–ƒÿpÿ‘(*±±Ÿ¢ áÐ ëõëkøGnÕoè ö7«|PÇ_ óË1K²¨Œ*;ƒÊ•1a[<Ä9É‘GmdOÎ%æ•{š±n{Ñ 'ûò°Ùްª1Faÿ´8ë2w“vSÎ+9h¼ 3NÁWì„Àó”D ÈÚÒŒ÷ØÿæÃSF”½)¹SÈá°ã. ãw7²äæöž~,šuQÕÔµàÏ{øÅðRn¡íª8ëøøþt`LŸ‹Ä!ü†db -rrý‘ê_!y%‘G³œÞŽ#.mÍäJ5æajÒ'TïÖ3ŸRÑã) -š¾›Ç¶@£äi¨9ãABV{àM’ju¿ë؇ 5Ž×ñT ýžñÔ ·ïhËô®˜A¢¼ë<ðÎeˆT^Þ†°7 wˆÁ;Ü øÌo2Ck‡c‡]K¾Ã÷)©Q“ °ÙBÆPRYÄ7šæ›¤V™ÿ5ÍE>Ð{W˜RÒ£z )ëfœ©)+²Ñ‰46ÔdæX9T.à€Öƒ˜OOnaçø¥÷[¾õP>“»w¬-ØêAˆ“GãÀGV†/‰¼â, )u? ù]?woÊ‘§‚g[ÒŒ‘fæ£)B²w ‘­Wdë9aŽaM'x ß®ØáòNVvÀœöVv0NÕ± PhÂW˜lé'Y±šüø+liˆ ݶ*["°)Ÿ^Ác…Í ü¤„dv¼–EýHö¦X<Ž^Tˆ_ö…œ'<”9B/Ç.DÛDªˆÀÙU–0UÓ‡ª^TsP|^ì²yf!æºõÉ?韨ŒåzÒUëQ´ðÖ9§Ï–K”ÓÙ \‚ƒ’ì7eð*‘C §eƒn·dí&=–ÜÈóüØeªÇünߧŽ/|q*2Á -€„àí$uó0"ü©é[yà1No‚Ã=•{ud´Šº|,z ¦ô;-¥yu`z‘ù½ÊÚy °pm°2Ø ó3°™Û¦ž²åî »yâøõiw…é.ˆ-YpקŠævϳÄZ+wÛÚ Ýs“»P'¥ *f§á`œ+pOLï‚øø–¿ê&ÊÞ"CN¥ i‘ivÛ*ÆS%$¡„˜Ì0 #É{=öIȨ¾Ð¤€‘Ä@¾uçë­:‹É—OW7çiHb`ÒX“‡ÉÖeY)˜9fJp] I±"/"0.«'ŠßÇË Œ.3 ë†ÊÎeOaÉ"±Ñ×?á‡Ç'ð ›ÕÓh¾ËT©N¿$ßéÿ4uò´‰Ñ#Ò1ÑO£¯”âŽ9ºÌ‚£KÓóua2{%rt]­«9ËÄ+%4f%`Æʇø壒𹣗'A…Ý;˜Â: ¤Ü¨¨/ÚõƒŒÚõˆ!w”¬~x¡˜”¿m0R‡o=ÓðìU£  “m‡½º¥¯ÎÐØíW‘¼kw”½ŒAê™ë¶Xd ™yHjÜ"&ß L„‹.ðx7Ó<Yv~3µ >{çs(• l•âüáÃk–ƒ×Q}*C´EÄDåþ”’ºtDI©rá'ó¹<}â5Âßæ€TÛKß:â™ÔÉdƒféШ½ÕÓZ¤êš”ñ@Ϧd…y˜*Ç ‚PŠ]°°À›ÎŸ‡Rvàc±§<2¸/|OJñiWE%‚×U÷ŠOvþtU -œñj*Gµþ¾ÃEÞë½ÿØ×…yʶk¿®¾¯mLЦéxE"3ò¨¶g gúö¨·‰ÔÙùS(‘Åé½µX¬H¢¬• Ù4n><¥D -± ˆ^&›fë3«N-ÑŸ‡ÅrØ4û?^c°ÂkÙˆbÇÒhXù×lµI]ðìÓn\ NeG°ŽÓGçølD9òŸH!s 6E^ç"«H{Ù”cØ_Ú,6VAýëˆðn9¼ŒÇm8èŒç!poëêwâðˆ‰?£7·“7·×ß¿{Ed¬ ’'LpQ>´¹»®}G5¹»ù–[GÇ¿þ§œ òÈýПç¿HóI;<#+*œ$;®I¥¯—ç‚j@îáλziӀܖŸÅïSKSÌ_±ác†Í¶‚”Š…‘ë$ÍT>®}yÆ[:MSëã”ÊÍ~Ž’y—ŽD,îµD¢4×ôê žùŠ!Å.ŒðÀ3ã£Ôby2ýìñyšäBîÀ˜Ï¾H<<0¨yæè½}Nï2Ò3èJùAXI)S (Š9RªâŒ,P†,ÂWuŽMX!RsGBÌëÁ¡O!eúðX4_Ó(ÔÚ_ê¹Nßip‡KMZ`õzxkQ®æqdS\…=ønTA!'R:7gT[3¸p@~%FÛt(ÇèåCT¸·nì¤R -_Š‡·=öF`“³TaÆç ˜-µ¼Z¬ ¬¹ÿ’»·]±å3ü*‚BÅvÌdñÓ‚¿›…Ïzƒæx‘, -Œ¯¬ñ¸«¨ã%›bŽïW«æ9T²f/‡•¬ž=‚“Uøp?ÑF¬P&\Åžr:ø‹T:5™u#çÄ{5(èä‹'Üjèù\x3×|S=¸&âü$ñhª&{BSwäuVt§1Õ%ÊîqÉÓŒ[¾Q‰Íb3ýç‰ן Œâõ¨Üƃ˜çSÃdÿá5 üûx|561Y´‚/`-:%Xî©£¼LBü‹ùën»Ñi­ƒÓ:¬¾9eo‘Ø{´€¯Tt7-X]í-Θ|¼¬d4 ­xÆõE£ÒM =Y‘còê@—24à¤}§ G@ê×åkÐOÞÑi‡iK~M×7üá ²ÏÜó-­O:M¢Sí>§$ebðêÀ²{ä”q”·§ok¹Df™=_~T+q|‚ÁË´šªSS¤·Á2]ÀkIÕ°£#^øÝ›*_HeÎFØ衽á}£ 7 6`%üMàÒ2ZËüÆxŸŸ‹ ØÁu™+¶ZÈ -H?|?á—|?‚ïI”jÃe¿ßªõnÍ7ø€hÿ¦Tpè[azpÉu×߬øšÓ<•ÆÛQÓv> +stream +xÚÍ[Ísã6²¿û¯ðíÉU#>ܪ=8“™¬wgÞØÙÍÖf”DY¬H¤F$í8ýëF7@R¢¢™ÝË›9j‚@£Ñ¿nÀòZÀymM$t_§Y!Íõrw%®ŸàÝwW’ûÌ}§ù°×7Wo?èô:‹²D%×ëÁX6ÖÊëÇÕ¿f·?¾¿ÿöî盹2böMt37BÌ~¸½ÿéö{¢}¼ÉÔìö»÷ø3QØIa·DÌþòãÃãÍ¿ÿzõþ1p3äX +¬|¾ú׿Åõ +ÿ땈tfÍõ ü‘Ì2u½»ŠŽL¬µ§l¯®þ7 8xë>’€Ñ62V¥"0zJ&‹­´ASž‹®ãí5ì­³HÊTÁØ­lnæZ%³¼Âg:«÷mYWù–©‡igOÝ®¨Z¢¼lÊ冺úO‹²ÝÀLŽ-"VùŽ[5¿ºûÈc®VnÔ¢áïëõÙoyü:oy9r´X½±¯gS7íĢ籆Kª”QfŒ"!mên»"ø܇Wj–UÓ9Ó‘=|:ö°á™r/CZC?¶%|¾òC7ñg¥“(ՙ߃·E»|{(šzû-ëj=Á?,2‰¥æ"ìq=×ZEÚ +s=WÐHSÒýGàótJ »ž¤^Jó|bGql,wùE‘o·ð¼T§¼*^iñ¹+Ÿó­Ó'£Ú‹£mËê©ÜC («Kš?_ähÈ@^±|óæWœèT/¬Š¤–êÕBÉÈšÔOà¹ßå¿òVç'ª´áuÏ}nïÿy#¥ ›c&qfÇ›òM&õiÄ ì¤òŒÌßM ô<•ñ‘0pHgˆðìšbõfB i¡´¼ +Å6ö^Êí–ÍÛ¶Øí[f¾Æ§š­Êf¿Í_û¹ÆÃ·Ô û^Öî¹bîÖÎ@ã÷ºb˜12O™ç&ØLa-Á{­Ý õŽYõ<³ŒÁêŒ k÷VO›áíS«x–wí¦>”mÞ–Ï‘¼û1½U#™ø‡†sD®…+Á ¡µ³:GÃÁékòkýxñx͵Èfw£áŠç²î]S ÆkxC”éíÐ&†`•è ûËp‚(aÞæ¥l—Z,§â¨™ØŒ dU,º§§HòeÑôà”µ,MQÙ—cŠ¢Ê[Õž{l¼_R*™éØC~ï\½lº«Wµœ¦À³)¶Å’LE9SqÏ3P•€ã˜íí4ÛJ&c(ävÔ{.ÇøÑf + %€}³ø¢M&*àè}qõÚѸ9=\à¦uòªY;¬¼ú§nY¢+‘\ˆì:ʤˆ{¯ìÖv“#äÉ(¤ƒ‚Ø$IÆ!˜%ó­ý¡¬„¢gvÎ ¡çýj98ðŸˆB Ã '€‰èXoßÞÂ?r«Žx·¦'ØߢtAÎo¦,)EeTÉT®ŒñÛâ ÎYŽj#{²6J0¯ÙÓ‚uÛ‰=Ù—‡}Îô†UN1 +û§Å1X—™5ûbY"ÈAã…\˜q +¾b'ž§ EÖ†~`¼ÇþwŸ¢ v¦àN>‡ÃŽÆí26î>&ÑÝý#ýXÕ»¼¬¨kΟ÷ð‹á;¤ÜBGÚUrÖñéÃ;iÁ˜þ(ûð듉Î;ääöÕ¾BòJD" f9¿ŸF\:5'+Ö˜‡!¨‰=œRÕí.¥¢ÃS@[Õ}7‡mF!ÈÑ0&PsÁƒø¬öÀ›(Öê"~סAj¯å©jú½à©!n ÞÑ–¯è]¾€D¹kðΤ—ˆT^Þ‡¿7 wˆÁî|æ¶ H ™¡5ÀáØ¡kÈw¸>5*6È +*‹¸á&Ó|“FqªÌšæ¿!è¼+L)éQ®iʪžfjΊlt$5™9V–•õ8 qàæÓ³{Ø9~éü–k­‹r÷–µ[=ÈÁcòhøÈÊð%‘·œe!¥êg!¿ë¦sîMYòTðl +šƒ2Rü|4…OöŽr!²õéŠÌq=ÇÏ1®éxoáÚ%;\^ÀÙÊØ€"ýo+;˜ ÇêÔ?€(4áÌNô“¬XÍ~ú+l± í¡,"°)—^Ác‹Í ü¤„dv¼6yõDö¦X<^Tˆ_ö…œOg<”9A/§.D§‘T³«š,aª$¤eµ*— ø¼ØMýÂBÌ$të“Ò‹]^!Ëô¬-w“h à­µV_,—(«“Q¹%Ùï ïUr"û +NËÝnÁ†[ÕLz*¸çÅû=°ËX[Ž7øÝЧyŽ/\q*0Á +€ïí$u·žþ<é§òÈcœß‹{*ud´ŠªxÊ{ñ¦ô;-¥~sdzùAemÌ<X¸ÇÖXém†ùÙÌ}]ÍÙr;Ènž9~}în0ÝeÑÞ|àQ %+îú\²ÑœÁîY¥© •»Ãí?…îÆÚÙƒ¯“Ò%³Ó‡p0Î-¸'¦·Þ|ú–¿ê&Ê`‘>§R´È89 ˆMâ©’ÇPB̆‘伞ðû$dP_hÒÀDâ ?µ—ë­: É—KW7g±Ob`ÒP“‡ÉvEXÉ™9fJp] I¡"/0.ÊgŠß§Ë Œ.1 œÔŽ•Ëž"%‹ÄF_ÿ„ŸÀÓl¶Ï“ù,SÅ:þ’|§wüóØÊs0„ 霎‰¾xx¥wÊÑ%)8º8¾\ 3(‘ã »rW.Y&N)¡±(3–.ÔÀ/•„Ë<©*ÒÁÁÖÉ!eæHE] 4ÍP?È8 ]M2qGÉŠá‡ÃÚŠYñÛ#µÿÖ1 Ï^5 +ÿ:ÙfܫݸÀÉè í ¸Šä®é ){‚ Ô 2×C¾=Ê +j:2s>Ô¸?DšL¾A™\àénÆY$’äòfjé}vçr(• l•âÜ{áÃk–ƒÓQ}.CL(Š‰Êã9%µñ„’RåÂMærxºÄ)h„¿wÌ#© +·—¾µÄ3©“I Mâ±Q;«§µHáÕ5ó)Ã^“f~ª,ƒ + @É»`a €7?÷¥ìÀÇb <Ò»/|OJñ¹+ƒÁë²}Ã';]•Â!g|úšÊI­¿/Áp‘÷öçŸúã:?OÑ´Í×Õ÷u´y<]‘HŒ<©í¥„3]{ÒÛˆHêäò)”HÂôÎZR¬H¢¬Uê³i Ý}|Ž‰äcLöõÁe2©:·DwÊaóäÿñm^;H&;”FýÊ¿f«Ml½gŸ·Ób°*99€µœ>ZËg#Ê’ÿD +™µ)òZXEÚ뾘Âþ2M"‘†*¨;`À-+½—q¸ ]ð<îmðõõSUþNž0ñ'ôæéìÝýíïßk‚äI \”mîáÇ[×QÍî¾ãÖßÞÓñ¯û)gh„ür?ô'Âðé/Ò\ÒÏÀŠò'É–k@éëe“ǹ {ØË®^¦±Ç GnËÍâö©¡©sæ/ßó1ÃþPBJÅÂÈt'*›Ö>Üz·¥ó²òo˜4ÈQ„séHÄâ^CMJãáI4›a•›T€Æ?SŸ£b'v˲٢ãa]EÄfçŽ+TiÙ›û»3z~žpÈWÀž4T<±÷ì| #‹¤écŽIð!bâ3 +hQ„€—k3±>m¸,‚ýÊõ¤¹<È0ËmªO¼é„3¡SÖ 9¶æ+ж]Îì’_uF÷t€KÏö²Þ[[À€öè;öU2Kév$Áho&oñDi–^/Á=x¤n¼b“$ WÒÇÆéj aþnMoó“ȱUsŸ;0hj9éÁs‰Ña_VbÓæFœÂ](sæ¯O ¯ç‰ŠT*,>̈P˜?¿`'ÆYT«p濃 Ÿoýñþv[¿×Wº“ 7Kÿá0G,QDO\åžsºrø³T:6Ij'Α5*èäŠ+ܪéù’;7 ù&6rzpÍÄ9&øIÑTmv„ºjÉ+mé¬Nc*L”îiÃÓLgNFEirœù?Îœ°Øþ„eò`¯Oei8¨y97L2ò!îÌT`:þš42If¾œµà˜`¹çŽú ñ1ü×݆£ÒšîêLTç,ÈÒ„S{ì=íqTÈU°½ÊÙ1ÙtÙÉh@cá ì‹F%?¦g[öM®¨VQ à²óŸÞ6Ô¯ËÕ¨ŸÉ×é0LSðkºÞáÆðo}æžïpi}¶j"kûGJ2c¼¦:ò}ÈI¤çosÙH&Ée_©Ô‘³ÄÁ‹5ZÍšêØ„Ro™6ñචj +\Ÿœ~÷¦ÊW +b™±ÑC'6zèG`ðxh×Èé Gƒ=X ã¹LÍ%ncœßÌDPíè:Ï¥ÿ°šÈ +H?\?ã7|‚ïQÿÓøË€¿•»nÇ7øix“Ê»aÔ­'?=¸äªío^|ÍiŸŠÃí©y3D¥Ž19†¶Øn' Ú:ʦð¢ÎÆ“é؋寉©“ÈÆé¨dð; bîcÃGT¤Õ£ww¿µDrG@þ†/üFGÀçÕÜ¿ìõÅ](4þpÊ}ÀÈCAFsrøðþÓ1³¿ÀÿöîûÑ•+§~\•æ«Í£CÜÍè.ŸSõ«ª;D›¶[Œ/tmÃEáPsU†ÓX_tkwwñ>Ë ˜àül|7÷hq»bWûD²kò§p¬=º}ˆDçO“×î Y2*¸¤â­©KAÚD6 ˆõÍÄH1(j8I"V&†A©uñzŒŽ³H›Ôä.»h‡GoSwþ5kë©úâÚ+Úý÷ýŸ;Ä)ø:«ÂUÿñÚ$3:“ž)d\Šô˜õ𗧼ÿÜl¹2endstream endobj -1788 0 obj << +1863 0 obj << /Type /Page -/Contents 1789 0 R -/Resources 1787 0 R +/Contents 1864 0 R +/Resources 1862 0 R /MediaBox [0 0 595.2756 841.8898] -/Parent 1791 0 R +/Parent 1840 0 R >> endobj -1790 0 obj << -/D [1788 0 R /XYZ 85.0394 794.5015 null] +1865 0 obj << +/D [1863 0 R /XYZ 85.0394 794.5015 null] >> endobj -1787 0 obj << -/Font << /F37 747 0 R /F53 962 0 R /F23 682 0 R /F21 658 0 R /F39 863 0 R /F47 879 0 R >> +1862 0 obj << +/Font << /F37 779 0 R /F53 1002 0 R /F23 714 0 R /F21 690 0 R /F41 910 0 R /F39 873 0 R >> /ProcSet [ /PDF /Text ] >> endobj -1794 0 obj << -/Length 2137 +1868 0 obj << +/Length 2134 /Filter /FlateDecode >> stream -xÚ¥X_sÛ8ϧðÛ)3Ë?¢$î›Û¸­÷Ú4Wygî&ÛE¦MeÉkÉîæ>ý¥H“tæÆ) àÀlFáÇf2&±âj–¨ˆHÊä¬Ø]ÐÙÞ}¼`Ž'ì™Â1×»ÕÅÛ"™)¢bÏV›‘¬”Ð4e³Õú6xG¹ 4¸ºÎ²ÅûðŸ‹ÿ|\\_†L¥Ró››ÅõÕòß—!—˜•ÒàËüúùgÜ»¹T<˜\d—ßW¿_,VƒZcÕF§¿.n¿ÓÙ,øý‚7Ì~‚¦Ÿí.")ˆŒ„èwª‹ìâ_ƒÀÑ[{Ôë -F 1÷ø‚³cDIÉ'ΊĂ ëŒåÕ5•ýqsóõÛ¥”Áʘ‡ÅÈ‘tò˜¤Œ)<µq~mã§PppQcœ'8w*çmSCŒ ÖAôQ^ë9|û!rFaÀ¡ —î ›»Ïà„Óˆp%Õ,V1(©_NTš¦~8 ‰áX$âæX7NÂÓ(y¼Ù¨xµÌæï>/<ÁIB£ˆ;St}*ñ³Õ;]wè„S‘{Wiƒ§†«{ç<ësëOçs»([| qb­ÝîwCáÃ( PO¿Pâš‘dž­îøyXãA/EÆ_‡¯T&Ê1.ÓàXr|¶ #QB ED¬R{äÃò3–3‡Ÿáë[Ýoºmªßøn SÉÙböÍ?g__Gðu¹5`Ê L¾Áƒ Öf35›#«""¢¸¿3‚ãjR(šªãºn[]„?ôÃkµ‹3‰,ëµA¯R©_hÃTŒUêOΤ°X# HŸ>ØZ€ë®iª…Ögu³o!4Î2N0’¤±˜‰$‚ _Áe >—P’Ÿ©Æ$a "r,âi‚õµxàò˜ƒcí‘bR@ÄjÚ‡a^m›ÔÊ'®¤U¶OÌðÎ'-!J —·PT=¢¢„¤œÆ½¨úUQ&žº‡½O´5Ð’õj݆…GÅhäxŠ*o[$Ñ42ò;zí6ÔµñˆŽ%I¤èEoª|ë“Aþ:~GÀ‰XJ˜déqnÃí«¸H…êáq´‹2~bÄý@ý¨½ç"‚îøþÐtMѧç&ç÷<2…$i,ûât€Æ¨Ù­õɯ|L%?Ú¾*´íºÞB÷ËŠv™×`~³iwòLàá7ç‚O¯*[é“®~5þêG´;/ -€ž ÄÄ®ÙûoË›Õò뵧0÷9ÔžAj¬u•˜F¶E0µÙ”mc ñ«©m¯3]‡Nß5šew¼ïpÖ¸´ %<¿}p’ ¥;Q¯ÏÞETD¦k2Xv¸ešq›_½öÓN³j› Üë¡ -¸âÁ±uïÜðÔ*[~tµÌ[]*j¹…Fy¨Y¹…™ݎJbîäOÌ¥Î\Ú›Dè•$ù…ºóÕ~ä§s£+ ¸8¡üåÊ2æêǼ§•eà²hÝ—9)#Pì”ôU‘±r šžB2¾¨ÝÀåQoR" –94õ2]éÂN1Qäºq ŠÃþk¶‡|_¸5(i⇦ØEòHBÏWÁ$qt«fãËT€n%b毚%Á‡\ £ìîhG¸þÎiÖÔ=±Á ¿eó/WÒ͈Р¤£FMì—›JiŒ“¤8,Š¼g)küÚ²+Oš Ã"ð -3ñº±¹—¨€ýfæ.3;åî`ˆbÔJio¾±½x‚£<À€µ©ˆÈj§4õÛWËÜ(+±ŸÑÍ=Ù|$ ME³ §ƒê×zm‡ÑàC\²÷ž›Î JBG¼äƒ¿¡ø©(¿©Ù8v0…we‘WÕÃÙx‚áDø£G-*ò-y3 dP¨^ÁŒ× ˜ÑsMšÅ fÀ¤¤xÚ,N%м¨ÛÀåQn‚L’ˆñdª]¶×Ei¢E—[¿¢>îîÌß †6ùižweçØ t øÀž`všÀFPV½¤â¾) =•d'CXÃ-µÖ{-'¿éå÷B&8è  ” 6¨Z&0#A{$Ü¥Á[|<¦jP–€²°dŸÝOü# ’q$0ú€€á?uŒàwß´ÀK-Þë<ÿ‡ &ªÑå°€AÚ}õ‡ˆªØ1âåÆ7˜Á°ç®=Ø*¿`´ -'8 åÑ£àÉKCàSÿ åÉݱêJDX8‡”‹#âËãÇ~Ãi)ïåØ÷°`gyZËÞñÏük §ù«×“+th)þï”ÿ9‡[¤é3eš'’Àá¸WÊxf™§ äþ{~ªûÿSÆÏýendstream +xÚ¥X_sÛ8ϧðÛ)3Ë¿’¸onã¶ÞkÓ\å¹›l™v4•%¯%»›ûô”"9JÒ™?¤@€€³…›©ˆDšëY¬%Q”©Y¾» ³-¼ûxÁÛ]H%ˆ’Bt;åEzñ¯^àà­;:é +F Ÿðg3ƈVŠœ¡4‰ÎË«k4*ýãææë·K¥‚•5 ‹#é,äIÓxjãyØ€'!‰¤ °ZŽûºi'äpF”¬cʸœÅÁ1•¥’àîX”-nþ,Ú{ÜD%aëOªhQµæPemQWYYü׬ñÕºÞe…Re;¬ ß4Çý¾>´o`ÅePxéy晳<7{¿™U´¢Ù—ÙƒWW¡µe +ø±€°ëÝ +VÌÓ÷Ë%pÆìQ  ­ ™ð£”h)^ó'4ŠcÏ”í÷‡KP¥ÞŠ¬5åÞ‘×ÕÉÚƯî³C–ƒwpiª¼^ÕWõfZE¤î̦vøuc*wÔY͸ ”A\y³12àŒt€§þ:š¦Å¶¶ÏÄ&n4æpr:]û§÷/(‚-näí…°Ü Ù;/ûÞ p/3–䧈b‘îÅC}üÇ™Ë⇪Ïã¡B6ðˆÝŒ¤jgVe g>më§PppQm'8÷*gM]AŒ ÖAôQ^™9­|÷å( ¸&4æÊa{÷œp* ×JÏ"Rÿ + p¢“$™†“°—E:¬éÆiLx"ãÇ›­ŠWËtþîób"X¥"TJîM1Õ©ÀÏVíLÕ¢NDî]i,žB®î½óœÏ?½ÏÝ¢hð-ĉ=´ö»Üõ…£@Y4þBÝMˆkV’}6¦Eâç=`Íz(2þ:|%*Öžép™Çjã°‘144‘NÜ‘ËÏX6Î~†¯oM›¿=˜¦.Or|3uKN ´oþ9ýú:‚¯‹­Sfaò ´h°¶›‰ÝX%‰Qw§„ãkR(šªãºj“‡?ÌÃë´‹€3–ŽõÚ"ͤR©_hÃXŒSêOÎc¤°X# HŸ9¸Z€ë¶®Ë…Ö§U½o 4Î2N0'‘˜‰X‡–bªà2PŸ+(ÉÏTc39ñ4ÁºZÜsM˜cà ­QbT@ÄjÒ…aVnëÔÊÝD\)§l—˜áÝ”´˜hÑ>\Þ@Q%c’pu¢ªWEÙxjöS² ­–¬Së6Ì'„AÑÑŒJÏ“—YÓLHM’>#¿£×nCÓS› Ñ‘"±èM™m§$KÈß^Çï8’%„)–Œç6ܾj€T¨î€vQEOŒ¸ï©=µŸ¸È‚ dÂßê¶Î»4˜ø„ñù=‡ ™B‘$R]q:@cTïÖæ4­|D?Ú¼*´i¦ÚB÷ËŠ¶2!¯Áü$bãîä™ÀÃo"Ο^U¶4'SþjüUhw^=cˆ‰]-Ò÷ß–7«å×ë‰ÂtÜçP{©‘ÔÕbuÆÁÄe7R®±Ä#¬&®½NM~ì;A|ß×h–ýñ®ÃYãÒ5”ðüöÁK€TþDµ>{'©¶k*X¶¸e›q—_öãN³lêÜ›¾ +øâî­¡Á±ñïüðÔ*]~ôµÌ[]jjùF¹¯i±…Â›Ý JbæåÌ¥Þ\Ú™Dè•ù…ºóÕ}ä§s£/ ¸(¦üåÊ2äêƼ§•¥çrhÝ•5*#Pì´šª"Cå4=> endobj -1795 0 obj << -/D [1793 0 R /XYZ 56.6929 794.5015 null] +1869 0 obj << +/D [1867 0 R /XYZ 56.6929 794.5015 null] >> endobj -1796 0 obj << -/D [1793 0 R /XYZ 56.6929 751.8114 null] +1870 0 obj << +/D [1867 0 R /XYZ 56.6929 751.8114 null] >> endobj -1797 0 obj << -/D [1793 0 R /XYZ 56.6929 637.809 null] +1871 0 obj << +/D [1867 0 R /XYZ 56.6929 637.809 null] >> endobj -1798 0 obj << -/D [1793 0 R /XYZ 56.6929 571.6272 null] +1872 0 obj << +/D [1867 0 R /XYZ 56.6929 571.6272 null] >> endobj -618 0 obj << -/D [1793 0 R /XYZ 56.6929 530.4875 null] +650 0 obj << +/D [1867 0 R /XYZ 56.6929 530.4875 null] >> endobj -1799 0 obj << -/D [1793 0 R /XYZ 56.6929 492.9536 null] +1873 0 obj << +/D [1867 0 R /XYZ 56.6929 492.9536 null] >> endobj -1800 0 obj << -/D [1793 0 R /XYZ 56.6929 459.984 null] +1874 0 obj << +/D [1867 0 R /XYZ 56.6929 459.984 null] >> endobj -1801 0 obj << -/D [1793 0 R /XYZ 56.6929 390.8804 null] +1875 0 obj << +/D [1867 0 R /XYZ 56.6929 390.8804 null] >> endobj -1802 0 obj << -/D [1793 0 R /XYZ 56.6929 303.7532 null] +1876 0 obj << +/D [1867 0 R /XYZ 56.6929 303.7532 null] >> endobj -1803 0 obj << -/D [1793 0 R /XYZ 56.6929 225.6163 null] +1877 0 obj << +/D [1867 0 R /XYZ 56.6929 225.6163 null] >> endobj -1792 0 obj << -/Font << /F37 747 0 R /F21 658 0 R /F23 682 0 R /F39 863 0 R /F53 962 0 R /F55 970 0 R >> +1866 0 obj << +/Font << /F37 779 0 R /F21 690 0 R /F23 714 0 R /F41 910 0 R /F53 1002 0 R /F55 1010 0 R >> /ProcSet [ /PDF /Text ] >> endobj -1806 0 obj << -/Length 2941 +1880 0 obj << +/Length 2940 /Filter /FlateDecode >> stream @@ -7879,91 +8240,86 @@ xÚ¥Zms “bHa… ›U¸Ð×ïŒ B°$5 ™…TÙ&o¿oóc­YlL0àpj@:ΩS«(î‹7ßæËâwÎeÞÀöEÉ´}Ê©R¿Tù«éÔ Gë#Ô·üûµb -;¬"3]P{:}ÎÊýá«•ÒH31 ‚#¹ g:UÚ7û¦¥aó„ØQýÁÍúŸû»[jù¾®]w†ÃNfŠÇLàÉ ôŸ#íˆDJmÿª+)v]¶ ¾ð$ðÿ+B}¸Ÿ/f§‚òönñqñ+õd€Žìhܬiêe‘µùŠž_`9ɨ᩶+=ˆp˜WÃý*È.¿Îo¿àbe¸rš -š5:š5êf„Gî›|w4uøï™jaÔ hrªZ4nâݵ€=£‡eæ!EÕäÕ¬¿ Ú–¦h‹çi%Àqäël_¶ y˜¶¦Òí6Ôh½Æz‡ê98k‹ºb'¾Ætk´ uÞêCÔ¸Õw(kõË!«çL*ð¶Ääe ›qbòÒ0a’ä¼dj@´žÉ+pŒš‹¾l«U± - 6µSÎZ_Ë©ZÄŠœÒ¦-k[®¨sYWmVTEõxô‘ *ÍS½/ú){Î{89m:—ãGDMàNódúqMmU턲hbÈL¢Ÿ×¢Oéí9)ÕV?ÞQY¸g`öjœJ2™$—ˆ ÎÁ£,N¼zª˜R‰Í?ÑÞÛÃÁZ:<̋Ǫã´ºãâàˆ)4a‰1)S:¾À’5Î’eYò8sÀÇ\Î8@iÇ\xC@´xV8®Ç~:·Û“íSIݳO|Ψx[¬q£,¨åC^–´^|,UiI–Šíí:º`\XZ¬1.3 -âñ²¬_pÓàÏe;©?—ñAº¶Ê{û㚘¡ “Bó3*8•âÁ´ö‘¤IC+@‘ɧ à[&U·»b“Sumå©7ôò—wo¨Y•Rí¥(Kª=¸Wб¼X»ñê¦)Êüh |Zc øR4†4p¬(Æèrœ¼\³Të 'Fˆ:C^²ä}:914ÓZ_˜Òƒ¦ì)ÓÒMùyWT>¸rÎðÓE³ßl²³øÚ.ä°a‹–™c+t^ì7yDm܇”H)cg•«ªiòå 8lÈ¢ö+ñ®~to4„;Úˆ Ž%DïM‡²{ómloÎNÙíÍé”C{Ó›ò=™•ÓvÜö¾S1à(%²äÏû0&>zm\ƒZ¡¦£  Pg4èQVƒÛ‹éðvW·õ².GÓá³ÂÒáSéÓážxpŠ£ß)\ItNÖ#‘H¶Ëå¶ØiܹAë’ =È ³•&¹Gx¬ö›ÜKlzÈÛ—<¯¨ƒ;˜eµ°Ž”Ç}g&±5w€ƒëß TXpŸÉAì39è»wd‚ªw¨ôÔåu^ØHçÖBÛ[rz£,J?QŒŠJëç±~Þ¸wÜúŽòÜ»“f¿\æÍîÆI¬’”s) - Qã$îP–Ä»KQèį7«üù”Äxá$äyá:Ô€týC1Ã¥é‹×»ÓQÜ…ŽŠCêUïíV,sê@oŽ%‰[å6 Ó‘¡åð& ·‡Xú›¸¡®Uíç±Iv;v?+÷z6p¤0:J¥7û× ­×žÒ ‹5æ·!§IÈS,€«ØŸ!d‘@·?÷0Õ’í†/–9Æ Ê¸uÙVgøJO=‚n»tPµMgÜuæ“cÛSm÷”/V–pž ñãh9³h–( /{"ý]Õ~o”½<£&ÚO -%¡X>e»lÙZ78Ò€Cî¨ÄK×föˆw -·}«¬uƒâí –nv~AKQ)²U_”“hK„Ñ–»ßYøhÂ.2+éüì©.…0 ŽGétéva5|w¨„ð +‚‹:!Û.û öÑƸ]$D·†B΋w -òC‘Æâ‚Û PgÜŽGY·Ó\¼TjÚ]^=¶O§nG1žŠè¼pj@ºþÙ™0Ë´/Þ‘Ûáž ¥²€•Ì¶ø#”sG”™:rÜ¥peTtG&Lxàfó¨ƒn@¨àM˜QÚ·¸å~çflKþ>eŽ<•»ƒ\å¸â*wÙîwpVæžD]'ë(_$Tb^àKˆçK‡²|i)!÷•ƒ_n®ÑçåêP‚_–paVO²ð -Rúd}ºw’.Í8ô„¤ðR2•èähQG’Ȉ núŸ¤3i‰÷$GSß|]|xs÷?g½¢¦»û“Fá‚î@=‘`ç¦ïôîîý»6ÄŠ|p…ÁY䂳¨';4a͸H~ïØ^Šcé‡ÌŠ²h¿÷{³=ôW­U¾›; -¯„ËÞ ÍN:"wIßaìà:>¯–»ï[ç5qØqÆÃ^(}!¹@gøî@–îÏo}Êü9?Í+` à çÄê@§rõoÜ“&êÉE9E/i^åûÇÇîæ̊źô¸S9Ħzä˜ ¥‰Gïoïn¿Ü -·o»Äp>@zØ@ ¥ùÿzê’ê^.A€Ì3‡tC{}.ëͶÌÉŽãÔÇäë}Y®““‚v,í=]6£&pê¤h²–—x5A$›¡o‡ŠC=õß?UðÇ~Ȳì‡ÿ„†x2ëÔ;ˆš†÷¡ÉLËvME}kmZ0ˆ^TPï[Þ¹˜Å_Mÿ‚¢^01<–öó“‹#üJÃïU#¾ù+Õ¢=:iº„’}1J²$;@üÇþe‰+tÿî!MT0}Zñ‰µàÅQ¤ãó³v¨Óiû®›Cì¤7-îç°ÇoY.–kƈÑ𸪄fÊ\ú]Dˆ:£*º¬ªs³ª:žvXUá´@ú!Mq {÷ÉüDU'å»bÞQ–7@Ü€²'—}YùXïŠöi3ªà¼PÉyý qõzÐEíž›ò Üã9uÎ9æK€©*N¢‹<i€¸¼ þïŸAÌNÇ&'r8r\)šqBá"!^>Ý@¦dPéìÿåP: endstream +;¬"3]P{:}ÎÊýá«êJŠ˜‰ØˆÉm8Ó©Ò¸Ù7- › ÄŽênÖÿÜßÝRËïÜðuíº3v2SÏc<¸Êp3bt|GèC§ J—î-{ä†ÈÃiDCõí(Vî Æ׫ò;Õ<î±*þ©!+°¼(‰úVöiþ‰öÞÖÒáa^ærÆJ;æ +ĢųÂyЀp=¦ðӸݞthŸJêž}âsFÅÛbe9@-ò²Ü õâC`©JK²TloŸÐÑãÂÒbq™Q—eý‚›Ž.ÛIý¹ŒÒµUhÜÛ×Ä m˜”š÷˜QÁi¬¦µ$MZŠL>ß*ˆ0©ºÝ›œªk+O½¡—¿¼{CÍÒ¨”j/EYRíÁ½‚ŽàÅÚW7MñPæÿ@[àÓÅ—¢qx4¤€cE1FÿÐãä嚥Z_81BÔòz”%ïÓɉ¡™Öú”40eïÄH™–æhÊÏ»¢òÁ•óøp†ïœ.šýf“íœÅ×îp!o„ [Œ°üËÈ[¡ób¿É« j£à¾—@R"¥ŒU®ª¦É—3à8°i ˆ"دĻúѽÑîh#.8–5¾7ÊîÍ·±½9;e·7§SíMoÊ÷dVNÛ]pÛwúNÅ€£”Èn?ïØøèµq j…šŽ.h0@Ñ GY n/¦ÃÛ]ÝÖ˺M‡Ï +wH‡O¥L‡{âÁ)Ž~K¤Dp%Ñ9YD"Ù.—Ûb§M¸Ù]ø-E¤ÈV}QN¢-F[î~gᣠ»È¬¤ò³§ºÂ08¥Ó¥Û…ÕðÝ¡Â3¬.>è„l»ì7ØGÿá>v‘Ýf +9/Þ%(ÈE‹ n'@q;eÝNsñR©iwyõØ>ºÅx*¢óÂu¨éúggÂx,Ó¾xGn‡{‚r”ÊV2ÛâPÎQtpdêÈqcx”ÂM”QÑ™<<2á;˜Ík " º¡‚C4aBFißâ–û›±-]øû”9òTîr•ãŠ«Üd»ßÁY™{uœ¬£|‘P‰uz/!jœ/Êò¥<¦„4ÞW~u¸¹FŸ—«C v|Y „Y=ÉÂ+Hé“ 8ôéÞIº4ãÐ’bÀHÉT¢“£EI"#&¸éFΤ%Þ“M}óuñáÍýÝ;üœõŠšîîO…ktºOõD‚Eœ›¾Ó»»÷ïÚ+òÁYg‘ ΢žìЄ5ã"ùu¾s`{)Ž¥2{(Ê¢ýÞïÍöÐ_µVùnfpì(¼.{ƒ6;é@ŠÜ%}‡±ƒëø¼Zî¾o×ÄaÇ{¡ô…ä"á»Yº?_¼õ)óçü4¯€1d ƒœ«ÊÕ¿qLš¨'彤y•?ì»›3+ëÒãNå h˜VDè‘c&”&½¿½»ýrƒ´XܾíÃùéa%”æÿë©Kª{98¸2ÿÍÒ íõ¹¬7Û2';ŽS“¯÷ey¸NNbÚ±´÷bºàþ$XFŒ öŒ¡Ñ©XB¦»©ǽߓgÔX”aøû¤âò.ø¿u0;C˜œÈáÈru¦hÆ …‹³8Ý@¦dPéìÿŠÏ9Àendstream endobj -1805 0 obj << +1879 0 obj << /Type /Page -/Contents 1806 0 R -/Resources 1804 0 R +/Contents 1880 0 R +/Resources 1878 0 R /MediaBox [0 0 595.2756 841.8898] -/Parent 1791 0 R +/Parent 1883 0 R >> endobj -1807 0 obj << -/D [1805 0 R /XYZ 85.0394 794.5015 null] +1881 0 obj << +/D [1879 0 R /XYZ 85.0394 794.5015 null] >> endobj -1808 0 obj << -/D [1805 0 R /XYZ 85.0394 181.7045 null] +1882 0 obj << +/D [1879 0 R /XYZ 85.0394 181.7045 null] >> endobj -1804 0 obj << -/Font << /F37 747 0 R /F21 658 0 R /F55 970 0 R /F23 682 0 R /F39 863 0 R /F14 685 0 R >> +1878 0 obj << +/Font << /F37 779 0 R /F21 690 0 R /F55 1010 0 R /F23 714 0 R /F41 910 0 R /F14 717 0 R >> /ProcSet [ /PDF /Text ] >> endobj -1811 0 obj << -/Length 1931 +1886 0 obj << +/Length 1932 /Filter /FlateDecode >> stream -xÚ¥XKsã6¾ëWè°¹2DâAbo[3Q2–½–¦*Ùh’˜ð¡ˆ”g•_¿  E²&•ÒA@£Ùh|ÝèÈà ¹@B†rI†8&|¸,x¸†µbyÇs½_ ~ü@£¡DR„b¸XÉŠŽc2\¤_FïCW nfóùä:˜O?Îþ{7›\$ŽH4ßßOf7Ó_¯‚c`fŒG·ãÙçñ'C»¿’áhüq2¿z\ü<˜,:ÅŽ•'˜j­þ|yÄÃÎðó#*c>üŒˆ”á°0Ng”:J>˜þÓ ÇÌN|ÅU 4Òå’l™gI¡üª³†4ò:QêkFfdº3~Y×Ü]¬kª*ÿŽ<8?”Õ¶ÎêÓn”‰bA!!qÄb¸Bžê^ßo0Œý¥?Š*àX„郤§ò︼Ç×™âK<ºÑÒ÷®“ˆÑ®ZæIí {¡DP;»¨ÔIL=)x—à.BB©ezµ;x„r†DØ9k'T]ªÊ4h²ÂW³².ŽNe®<2ƈËè¤%¨öÍvß«,÷Éï—üu7Út£?<{ÂÕ¬»Í]šèg€¶è,Ò‰Ë/c}T õ$öÙ:‰ÙE‰™¾ìÏ.®~ÐS/Ð •G¤+n‰Þâ ÕDÒø3mD_9Çïuþ=k@i -…! O%Î.J¬«$€N5KòóÚ¨A‰_Ýê¢thÖÇjw^„9E˜ž6kΕÏB¡ǯ«´“ŸC7•”ûëÑV_±„l&edkÛ`a¸áN#„½™Z<‰¡é%“›Éüúaz¿˜ÞÍ<õíÛu•''‚MiÈܽԌ:; Ö–öÐþëÏT¹œŒ¦!¹öÖ2ÎL–„Ó,éáa>ýhhý7'Û0Rh%4¹J÷KÕßV+¢¬´gµ«Û&Y/T+ûÚ`õîakz;­¶‘Ò=t@cy°„&iô+ˆþ íZ€–ª\­Ý“Û…•Ñ°0ËÝ~@´ÅPuÝj°4=kŸPt‚î OãôYn²¶£²êÖ†êÚm÷rÛ5㮼-«ö ÊL2[\¥ªÑ¯*FI˜?NŸŒ¨ú¥&vò’§câÊuzÿ‡%„Üó’žjÕx|ŒÆˆrž¼dÙÞÐ>,$KûFá`±U:÷Ä -!@¿‹zª"Ü]¢üüúòÐ ù‹ÆqèYL£h•ÒÇ$X¼RÝ=Ô¾ÖýÿÖ·endstream +xÚ¥XKsã6¾ëWè°¹2DâAbo[3Q2–½–¦*»3>Ð"$1áC)O”_¿  E²&•ÒA@£Ùh|ÝèÈà ¹@B†rI†8&|¸,x¸†µbyÇs½_ ~ü@£¡DR„b¸XÉŠŽc2\¤_FïCW nfóùä:˜O?Îþw7›\$ŽH4ßßOf7Ó_¯‚c`fŒG·ãÙçñ'C»¿’áhüq2¿z\ü<˜,:ÅŽ•'˜j­þ|yÄÃÎðó#*c>üŒˆ”á°0Ng”:J>˜þÓ ê0`€VGÀ$9ÛC^ú|31>P7I£ +U6°Aí7˜Úˆ‘7  1¡Úí.{AxAjHX| +/#Çð2…jvÙÒLU¹Ü¶ Û|ÖÒʬ÷Ë•n)?ÝŽ¯­{8>µzhßÞðwRõ¬J3j6Õ~½qckŒíþ)×jè±ÅíÁÛ‰†Ó,»“µbÿØO^,>dØ)°Ò†cIÊY«Îä×ñíý§‰I`Ë0) ãBÇS¸Í!%¼+Òî „ÄüE"ž²FO rÏdžjÔJ ²¦˜3%­ +¸$ÖÞqÏÞD_Afí¨þLŠm®Ð²*<š +Ž"N¯F—2·]ó¼ú–•k³%ˆ( œ°ö­Úç©¡?Yvpò½JÿíÑ)…@q´žë§e ÷3€S®µ=ä¡ 1ÿ--áÉü@–`9MNÓ£·è [­±_Nwã'ecÃÅÂÁÆÕêÄ×À2…ïÈ'Ûþr¤$úcúC(ˆÀ—õ¶i‚»@…™;î»ÎE_¾b˜†Öœ}x=Ƈ¡ Ý…_Ú¨Õ´—¾ÝQ™ ](x[ (b"]:sÆ3±‹P6Œå›Á ¸KÂÝ&HP yœñ“˜|²ùùxG(<,º2Àw僎©wõç›&ÇŸæw—€5D­KÆuÒŽu^µ&¤òèÓ8F±äN©÷ÓÙÙIÚ Ó"+3ðȤiCÔJÛ•Kë”·I¹‡dä=FpEwá_+ÀŒ»þðáÚH 9åy ²¢¶Àß³ Žy´“Åù L%G1#QßÀãÏ‹Ÿî.[vZ6jW*/懊¦ÚL®¡È¨vM¶/^ö…œÎD—K„®Ú…«Ú¡>ÇÌN|ÅU 4Òå’l™gI¡üª³†4ò:QêkFfdº3~Y×Ü]¬kª*ÿŽ<8?”Õ¶ÎêÓn”‰bA!!qÄb¸Bžê^ßo0Œý¥?Š*àXD[ù÷‚„«ü;.ïñu¦ø$n´4Gã½ëÁ$b´«–yRûÂ^(ÔÎ.*uSD +Þ%¸‹PªC™^í¡œ!vÎÚ U…ª2 š¬ðUã,‚¬‹£S™+Ì€†1â2:i ª}³Ý7Á*Ë}òûåC'Ý6ÝèwÏžpõëns—&ú †-:‹tâòËXHä,['1»(1Ó—ýÙÅÕïzê¤òˆtÅ-±Â[œ¡šH¦è+çøí¢Î¿e (íCA 0dá©ÄÙE‰u•ЩfI~^[5¨ ñ«R]”-ÂúïXí΋0§ÓÓf͹òYˆ#áø•§m»ÑγWÿì Š©ŠT=Ÿ¹ß˜¿¼¾ x“ìšs7œC uåB'µéFÏg•vòsè¦òïr=Úê+–ͤ샬cm, 7Üi„У7óB‹'1”"½dr3™_?LïÓ»™§¾}»®òäD°) ™»—šQggÁÚÒÚý‚*—“Ñ´1$×ÞZƙɒ°`š =<̧ ­ÿÆãdF +­„&Wé~©úÛjE”•ö¬vuÛ$ë…je_¬Þ=lMÏ!c§5ã¶3Rº‡h,–Ð$~Ñ´] ÐR•«u¢{r»°2f¹Û Óˆ¶8ª®[Í–¦gí +Np£àÃáiœ>ËMÖvTVÝÚP]»íÞAŽ`{€£fÜ•·eÕ¾A™If‹«T5úUÅ( ó§Ãé€U¿ÔÄN^òtL\¹NÏãÿР„{^ÒS­ÑQ.“—,ÛÚ‡…diß(,¶êBçžX!èwQOU„»KôŸ__š!Ñ8ý/«‚i­Rú˜„àWª»‡Ú׺ÿ¼¶cendstream endobj -1810 0 obj << +1885 0 obj << /Type /Page -/Contents 1811 0 R -/Resources 1809 0 R +/Contents 1886 0 R +/Resources 1884 0 R /MediaBox [0 0 595.2756 841.8898] -/Parent 1791 0 R +/Parent 1883 0 R >> endobj -1812 0 obj << -/D [1810 0 R /XYZ 56.6929 794.5015 null] +1887 0 obj << +/D [1885 0 R /XYZ 56.6929 794.5015 null] >> endobj -1813 0 obj << -/D [1810 0 R /XYZ 56.6929 635.5323 null] +1888 0 obj << +/D [1885 0 R /XYZ 56.6929 635.5323 null] >> endobj -1814 0 obj << -/D [1810 0 R /XYZ 56.6929 476.3563 null] +1889 0 obj << +/D [1885 0 R /XYZ 56.6929 476.3563 null] >> endobj -1815 0 obj << -/D [1810 0 R /XYZ 56.6929 407.9215 null] +1890 0 obj << +/D [1885 0 R /XYZ 56.6929 407.9215 null] >> endobj -622 0 obj << -/D [1810 0 R /XYZ 56.6929 365.2162 null] +654 0 obj << +/D [1885 0 R /XYZ 56.6929 365.2162 null] >> endobj -1816 0 obj << -/D [1810 0 R /XYZ 56.6929 326.9947 null] +1891 0 obj << +/D [1885 0 R /XYZ 56.6929 326.9947 null] >> endobj -1817 0 obj << -/D [1810 0 R /XYZ 56.6929 293.3376 null] +1892 0 obj << +/D [1885 0 R /XYZ 56.6929 293.3376 null] >> endobj -1818 0 obj << -/D [1810 0 R /XYZ 56.6929 221.9809 null] +1893 0 obj << +/D [1885 0 R /XYZ 56.6929 221.9809 null] >> endobj -1819 0 obj << -/D [1810 0 R /XYZ 56.6929 108.6903 null] +1894 0 obj << +/D [1885 0 R /XYZ 56.6929 108.6903 null] >> endobj -1809 0 obj << -/Font << /F37 747 0 R /F23 682 0 R /F39 863 0 R /F21 658 0 R /F48 885 0 R /F47 879 0 R /F53 962 0 R >> +1884 0 obj << +/Font << /F37 779 0 R /F23 714 0 R /F41 910 0 R /F21 690 0 R /F48 925 0 R /F39 873 0 R /F53 1002 0 R >> /ProcSet [ /PDF /Text ] >> endobj -1822 0 obj << +1897 0 obj << /Length 3191 /Filter /FlateDecode >> @@ -7971,170 +8327,171 @@ stream xÚ¥Z[wÛ6~÷¯ð#}Z±¸’D÷)mÜ4mâdk·»Ý¦´DÛl$Ò©8Þ_¿3˜o¢¤œ³öƒÀÁÌåà Hy.à_žg6Ú™ó絛 iÏ—›3q~}¯Î$ó,ÓbÈõÝÍÙ7?èôÜÅ.QÉùÍÝ`®,Y&ÏoVD/Þ¿¿¼zùúß eEô]|±°BDo_\ýúâ ÑÞ_8½xuy}±Y*S`2È–ˆèåÕõõå÷‹ëׯ®þóîêòâÏ›ŸÎ.o:Á†ÂK¡Qª¿ÏþøSœ¯`?‰X»Ìž?Áƒˆ¥sê|sf¬Ž­Ñ:PÖg×gÿì&ôú¡sÊ°:‹m¦Òm(y.eì¬U#uX'Zi¯Žwïo^¿»ºÞÛ‰ˆ…¥JÄN¥jÞ Ì´r……g̸pÝE>]ÒéXëL_20Í,©K‚Áµtv¼äoRʨؖwÏdè|½¦Æ}QÛ¼-VôØ”÷UÞî¶2‹Š&>¤›$sq& qT7C®Ãºé¸¼n–¸ä7?X;à”"Vl+<Ër7ÍT0©l,m–—¬ãšm¨C©Á%cÙ®‹eùAU4¤¬ö¡ Ä5H6߬ï&Lÿ­«â°BmÃb§:à:¢ÐÀåúqN¡2ΜլÐÅóž:¥‰³$µÇåê¸f©S‚ g(ÙÍ…9ZÞ^,´’QÓixEÍ7ò†Gtåýµ¬î'Ü@¬·9¯ž'ý°„ÎïD6¥£›‡’g¯Û²®¨½Éy‰Ûb_8Pdì„ÊP Œ3°©ÍnÝ–k6y[nŽ‘´q";aó×›.oóõŒÍ] ÞŸ²ÉWõ&/«=«ƒÛ -’ã’u\3¢ƒdÓe{Åx J šS%6zùÏ߈Ö-QA@bZ­J² RÛš¨WÐðVÅž -ˆÄŸ/‡–ä±ÕŠ—¸îfG»k‹v/¨µáûÑ–?>Õ*˜pC$Ömí%Fx•oŠÁO~¾¬ýïê°OØTÁ©'Òã>1ä:ì—÷‰ÕIX•ÛbÙÖÛ}4°"Ná$>*\`šnäÖÆ©4z,Ý›ºþHŠºyAµŒ2€Ç©ëñ -}Äsæ†l@ÛD2†ê:@59ûdV-ã=Õˆ_I ÿò T -ÔÜ7o°á¡Ÿòu †Y(gù0FŽe^Va‘)@˜²ˆ¢ ÐÂ=ÿÞ6õzçÅW6ª¹—ÄXçmù© -îÝKÈèEEÌá†ìÒóRË˧ðxZ•Ĥ=åö™×§Ÿj·¹ ¢•<ÿïð÷öíË…ß‘Ÿ'/üñíÛëkô÷4ªê6ÇCïxVÉH ø³ ©1P³! ¨²&Œ#ä—æ[c¿ ]¿‚`7ßSÛ'4ÀñÖ'4@Т}øšÚøi1 ’Põ×XKÈNJ˜‘7¨$c•d^%>2ÖG}uõ56¸M¹|¹¢ŸÜ¡Z1m€ ðDånKÒU-÷ûéèõ‘ªzç-‡|£m"‰‚HÊBž¤ä~_“3ê4­M“±7v'ÂXVN©µ)«#•¤Ÿ‡z· ˜gEH+ D«Ÿ¦º®—|P6‹'Îsð|ãw͈3pàéRÖ£7ä: q—‡¸bâRÈ.X“LÍœÑqb€í¨p׌t#€3P`háÆâu'ÚØ €Ã–8ßç„-¸ÿàð‘Nº™S‰ÅçGÎ -<²‰èw<bÍ9©†-&&ù'µ.NS›1+{¤Ñ -S|=R‰ `³ªóFÉŽ#G¡ %c¼ê  išüÉl8ÚO9Z\®fžf ÀD¡‹ìCÏ™‘`N“ö|¡ -’Uc3®è±G  PÅ…s ÈA×Æ¿)ס¾œ€¬´/ì®'“Ã>L0ƒ¾â4j¸;m$ï;ªúé««˜ÚnØ; n*n&Φ^#c8ŠìÚpò´-4”@ZPÏ*fž^u(†ß­Jªó4¯(¿#ƒHD}9SròSéLl2kÆ -Yw9ÔαK[é§>qA2ä:Œ]—Ç®»Ùb9ÉtÐT½kwíâ®\ï£$T&Môqñ:®ùÆé™MÓ±€¾LÕ2‰ª ÿ!£ 4˜†…&þ’M IX"ú ºç…Xh¡Î¥{`mÃÄx‰âDº¥‚\+ífÛƒ·/®XÓ3Ês€–¤±4P9cF)¥b¨¤åØú,Á¡’Nñ{wYùÍöå–à‡}H¸X›ìÄ…Ëëˆ.ïC{ø¸1'– L3KŽ*0Î`'K¾ß–Uˇ~ÎÁC½ee4»Í&ß>¸Œ k®0¸â¢,÷A~¿ÛÝÄ-ÎHÊ8ÀÕ]%U Àì-ˆ¾3cÃÔĉs#?˜³ŽJ3˜×ÈN†\‡­Óqy딧®Ã@•Åªýä|4¶£²u\3““Ú©K÷¯.ÓÈéç‘NOe½kÖÏ‹œØåì[%'yÓ„Þœi>(ðlj>5ñW›Ø¸-† ­ÄÙ -ÿLLƒí2fFo“Í.t»5 óQ ‡ÖqRÝL3ýçå:”a ÿ”3gÎS€kƒäwtg0©\„g5Méæ‹jaÒ]V£:k_Y¨®²ÈižP×e¬Û¹¦ÏQî àû®õar!h„Íf²Û,/ƒ½·LæÑ4b¸7“ºçV¿OeS»iÊUA#W¼rM¿·¼ª—’®Và©©ëÊOæ<4Ìå.íñ{–Çu¾ä*Ä…PK´ëÏ2 ‰Rw¤H§‚Þ›Û?5ÄÀn¯£¿wq ñq {ÛnÒ’Ü·[-™~[´OEÙ€{ôª‹H*T]vˆÍþ2ªk% âÞÑrÅ—ûñc- …Ô_« <B†?{'Š¸/.jCÈæa¿(ð´¬ ©O[Œür Oc­º´)ÔK ¯5z³îðó–Ëi …›R“rºV§tK„Í„ëa aªŠLUÑisâ ñ”˜@‡? -…<põ :*¯-ýjØäJæ_+á°¢¿šrÎ\|1ìiÆV»¢;wýoÝ-¶ÿ]Mw3v—Ѭ :ñ9xªwáòõ`°ÎÊo¾¥=‘2 ¹Ê—?”_ŸJ»ý1¶åoÈIÆyw™2„ÃQù:®Gs*c9÷X›R³Ð6œoÛ>ßæ ûètF"å¢>6ÑûºiÊÛuAL4Yùsï {IV§‰‰ï(ÜÚâs‹¿3§@qÎö/>¬`|¥ "¿TÈÑÇ.c‘i3Xe›?ZÒy™©i:Ÿ@’ŸLÒy¾Äu¶?ïíq[BrZ®Ÿ™ Aéß´ù'*©òRx¦2[ôÐX=C–_.é!¤Gد\ótˆ0ÜâW»Í#H¢dÓH$b¼§t†àÄàÅlµ@SÐSð lë+°{\1üa§ShÜò´àÀÙ¿?¥à—…¿¡fÐ5Šò  [}öF籃üû×å]G8Âw>Òz8S`Ôþ™ýeÓì´ÞÆïÇ“è&Þy¿Íî·’ºiâŠßá— yUø¢¤óQ—Q~œ…êÆòþ3¾”JY-ù dß°©g"Sø\¶û«|ç¼® ÷@„óîGme¨U_õŽt7Øô7*Üc)úè Ü(5‘-’‘Ⱨ×O7Íbé!ÿTŒg¾ågb\{‰XŒü¶î$zߘäû7äý­UŒŸÃÍ8³è>uû¿¿ºë¿/4ÌeÙÌ´0±ÖN¡PûR¤SÑ»ïóöeÿí£endstream +ˆÄŸ/‡–ä±ÕŠ—¸îfG»k‹v/¨µáûÑ–?>Õ*˜pC$Ömí%Fx•oŠÁO~¾¬ýïê°OØTÁ©'Òã>1ä:ì—÷‰ÕIX•ÛbÙÖÛ}4°"Ná$>*\`šnäÖÆ©4z,Ý›ºþHŠºyAÍpKð8u=^¡x®ÑÜ h›HfÃP]¨&gŸÌªeœ€‡Îm2³Mb•eA€|Šÿ0”ì;§½Î´FÆFÉä„i\GL¸¼iïgò‰Ì%'– L3KNò‰,M'K¢¿ëY'ï JgãC¹^õGaèöÌõ†žØ´¾ÍöÃ`•"ºü\6­‡ô“+>•!¹¹EߦþT¬GdZ({Â<®#æ \Þ<ÍÉ”¦ióm»ÀÓb?ô`J“¤ÇÅë¸fä_ûPÃÍvyO E€Uh¬È¼B3†b_¹áΧ‡¢ñëQ" ô_~JšûFâ-6<ôS¾.Á0 å,Æȱ̫ÀJ #2%SQ” z˜B°çßÛ¦^ï¼øÊF5÷’ë¼-?DÁý { ½¨ˆy8Ô]z^jyùO«òB‚˜´g Ü>óúôSí6·A´’çÿþÞ¾}¹ð;ãóäå?¾}{}þžFUÝæxèýÏ*)$5j6dUÀ„q„üÒ|kì·¡ëWìæ{jû„8Þú„Z´_CS?-fAª>âk ÙI 3ò•d¬’Ì«¤ÓGÆúÈ¢¯®¾Æ†·)—ã!WôÓ€;T+¦ 0žÈà±ÜmIºªåž`?½¾#RUÏâ¼…â°ƒïq´MB$QIYÈ“‚”ƒÜïkrF¦±µi2öÆîDËÊ© µ6eµc¤’ôóPï¶ó¬i”hõÓC×õ’ÊæcñÄyžo<ã®9q<@Êzâ†\‡!®ãòWÌC\ +Ùk’©y€3:N °®ãš‘np + -ÜX¼à¤ãCpØòçû¼‘°E7â>2ÀI7s +!±øüÈYG6½àŽ'@¬9'Õ°ÅÄ$_â¤ÖÅij3fe4ZaŠ¯ÇAê1dlVuÞ(Ùqä(t¡äaŒW4!-@“?™-Rû)'@‹ËÕÌóÀ,Xƒ(#t‘}è93ÌiÒžï TA£ŠclÒ=ö¨´ª¸pn9ˆâºóÀá7å:ÔwƒÓ•ö…Ýõd²q؇ f°ÓWœF w§äÝaGU?}uSÁ {gÁ CC%ÂÍÄÙÔkd G‘@N>‚¶…†H êYåÏÌÓ«Åð»õCIužæåwÄc‰¨/gJN~*‰MfÍX!«â.‡Úù vi« ýÔ'.H†\‡±«ãòØu7[,'™šªwíã®]Ü•ë}ô‚„ʤ‰>.^Ç5#ß8=³±±i:З©Z&Quáï?d´Ó°ÐÄ_² D# KDŸA÷¼ -Ô¹t/¬m˜/Q¼±€H·Tk¥ýÂlbðöÅkz¦ByÐ’4–*ÒbÌ(¥T •´[Ÿ%8TÒ)žc¯â.+¿Ù¾\Àü° k“¸prñ¡Àå}èa¯7æÄ’ifÉQæÀìdÉ÷Û²jùÐÏ9#x¨·¬Œf·ÙäÛç—tÍW\”å>Èïw›¢›¸eÀi@8¢º«¤ª˜] Ñwfl˜š8qnäsÖQióºÙÉë°u:.oòÔu¨²ØB²Ÿœ€fÀvT¶ŽkF¸qr’@;•céþÕe9ý<Ò ò©¬wÍúy‚»¼‚}«ädâ1ošÐ›3ÍžBͧ&þj·Å0¡•8[ÁàŸ‰i°½SÆÌèm²Ù…Î`·t> +ôpÃ:Nª›i¦ÿ¼\‡Ò",áŸræÌy +pmüŽî &•ƒ‹ð¬¦)Ý|ñ@-LºËjT‡`bí+ ÕU9ÍêZ Œu;—Ãô9 Ê|ßµ¾"ÌB.°ÙLv›Eãe°÷–É<š¦B ÷f2P÷¼Ãê÷©lŠC`7M¹*häŠW®é÷–WõRÒÕ +<5u]ùÉœ‡†¹Ü¥=~Ïò¸Î—\…ø¡j‰výY&!QêŽéTÐÒ{sû§†Øíuô÷2Ô > ®aoÛMZ’;ðv«%Óo‹ö© (p^u© B@…Š Ë±Ù_æOrí¯¤AÜ;ºC®øRb?~¬¤ú r5GCÈðgïDQ÷ÅEmÙ<ìž–µ4õi‹‘_ôi¬U—6…z©áµFoÃ~Þr9-¡pSjRN÷Âê”n‰°™p= 4LU‘€©*:­¡@bNAGåµ¥_ ›¼@ÉÃük%VôW“@¡Ó™‹/ †=ÍøÑjWtç®ÿíñ£»Åö¿ë¢é® s¦Ñ.ð2šuA'>çOõ.\¾ Ö¹CYâÍ·´'R¦!×áC¹ãò‡òëSi·?Æ ü 9É8ïN SP9*_Ç5#àè`Nel çKxRjÚ†ómÛçÛœbÎH¤\Ô§Ñ&z_7My».ˆ‰&k8wî}a/ÉJâ4!ñý…[[|nñw&ð(ÎÙþŇŒ¯tAä— +9ú8Âe,2m«ló§C‹@:/35MçHò“I:Ï—¸Îöç½³Q =nKHNËõ3“!(ý›6ÿD%uB^ +ÏTFb‹‚«gÈòË%=„ôÛáµ’kž†[<ãj·y¤I€l‰d@Œ÷”‚Îœ¼˜­h +z +¾ía}…v+†?ìôq +[ž¶8û÷G üRãã7”À Z †Ç,ƒõ^Éw†öªËUu;—lòárçïL°V(ª¦˜Ü3â&{5‡76Q"sø6C‰ÓaŒL"þ:•·ÿU¶-³³¯±‰Õ¿ÅÞ“kö%öP0JÙU’ôŸ¨$¥—ÙìSžÀGQB¾t«ÏÞèê2ʳP]ÂXÞÆ—Ò@)«%¿ƒì6õLdŠŸkÂb•ïœ×ô(ƒpÞý¨í¯ µê‹¢þÑþæB…{,E=¥&ò¯E2R<öôzàé¦Y 2=䟊ñÌ·üLlƒ‹c/‹‘ßÖDá“|ÿ†¼¿µŠñs¸gݧnÿ÷Wwý÷…’¹,;ð‘™&ÖÚÉ j|b*z÷}Þ¾ìÿôÅ_endstream endobj -1821 0 obj << +1896 0 obj << /Type /Page -/Contents 1822 0 R -/Resources 1820 0 R +/Contents 1897 0 R +/Resources 1895 0 R /MediaBox [0 0 595.2756 841.8898] -/Parent 1791 0 R +/Parent 1883 0 R >> endobj -1823 0 obj << -/D [1821 0 R /XYZ 85.0394 794.5015 null] +1898 0 obj << +/D [1896 0 R /XYZ 85.0394 794.5015 null] >> endobj -1824 0 obj << -/D [1821 0 R /XYZ 85.0394 751.8312 null] +1899 0 obj << +/D [1896 0 R /XYZ 85.0394 751.8312 null] >> endobj -1820 0 obj << -/Font << /F37 747 0 R /F21 658 0 R /F23 682 0 R /F55 970 0 R /F39 863 0 R >> +1895 0 obj << +/Font << /F37 779 0 R /F21 690 0 R /F23 714 0 R /F55 1010 0 R /F41 910 0 R >> /ProcSet [ /PDF /Text ] >> endobj -1827 0 obj << -/Length 2975 -/Filter /FlateDecode ->> -stream -xÚ¥ZÝsÛ6÷_¡·ÊÓÁINãvÒ´I.vfz×ö)›W‰TEÊŽó×ß. HŠ¤§sãBÀÀbw±_°Xpø‹8a‰•v¡mÄb.âÅzwÁ÷0öÓ…ð˜U­º¨7·¯Tza™Md²¸ÝtÖ2Œ#·ÙïË7,b—°_¾ýpssýÃêæÝOþóñÃõåJ-ôòêÓ§ëoßýv¹’18€9_þzõáËÕ/Ô÷éÒÊåÕO×7—Þþ|q}ÛÖ%^p…Tý}ñûŸ|‘Á~¾àLY/žàgÂZ¹Ø]D±bq¤TèÙ^Ü\ü«]°3ꦎ2Cp&U"G¸!U‡F°ØÚx¡cËCȦØåpÂÈÆËÛ‡Ï<´YQ¬T¶Bø‹¦Éë-® ³ZDV훢*/WJÈe½Ï×Ŝ˼ƱL©ß/åÚOE™UOÔnÒ†€OÅvK}w9}užyTE˜C -3wÅ·I´Ù·è´<ìÇû̇ßeŽÊí&U]塯ü܆¾»ªn¶ÏaOD8jG©z¶I0-D²Ht̤6É„-!Ъ‹"S"F k‹Bf¬J² qÜA·àÒ)oÊõîÔ€00Αó5KXÖ5C`tYë¸OÙMÏE±7Qäu:QÕh0¨yM gk`¬:-ß<ÓH–oÒã¶ÍV \†Ò¯zZ&~ÛºI³`ÚT~ßÅ$0jÞQuQÓŽªE9GU‡ *Òmjr(î‹òL7X›yÒZÔmý(Ä0¹dŸ¸ÛÀÈo.Ppltĸp˜/ßm¶ã”9e¯†²hc½ ‰æ|uœºõíÂË(­ëãng†0¶]#Ð5!?¸»Œ+#çå×EM˯E9ù}|)Ѐ„cl¦‚ŒÈà‰ç lQ#ö¤¹7Ü$Ó'ÑIQiîÝ?¶…ŽÚ3D&µƒ·¥I‹²€èÍvµsBÐmt$0~ -:N»Ö4u&èÐwsut4N8oiDã1‡×žÑ(!¶LÛÓDXü>Mí¡™@C: ´8“ˆè ë f4, œ†í‡[& ãV¿°elÙ=pk3ØòK²ƒ¬a_çǬZQÉ» âO›”Ÿò’úPœ3ÃnÒè ah¤@]Ba}b¨MZ7;€¡ˆ”XÞ9åe¦ˆSí« C©)yç‰xŸ¸P¶+8‹å0r äK-ùh½´öDI­Úâvé35œ‰AÈ¡6GÐþ-ý¤S# =5þèV…g¯i“&ü†‰!Õ‡.ˆ(±ßû=늼öËõX¿-vä\“ª¨´bZÚT±‹šVÅåTñ0bì,•*ñ׃Xåg†Nr&t¤ç‰kQ#Ôõ Œ™ˆ“>uýœ™;ÅûlÅgüx(Ťj,(&±sh™€Ü»*˜Ó5\è´vGCYöqÚT=™ŸžŽ”'U ´[R”×À¬×”>+k˜Ž ÓÞ‘Œ Œèq%P‰*ÿûX<¦[*a!C,Öx” -U×ëì$Mé±°!Љ=¾úUSÿ_ùó]Eúžù‘|;¬r©¤SÁq@ä3 -½\÷øýb,ö…+Q`É3ruZø¬ÒCº¦R-àˆy oëáî= YµæǼµã¾¤ß;¿»/ìBOQ‚R¤YŸ”fX[¤«ëùîã§6¾r‡LOU¶ãX][ˆ˜Å"žÈK!Ïid…X”Y±N›¼në{>ZëË‘jÄ.p$=TÇmÖ¶ðÌÓV‡k–Dò…«‹š±:å¬ÎYÔ”(¦¤¶ó[ÐÈ–]^%†)nUËO‡"$tu÷¿Æ<¬_Ð\W»ý6G¿1ɉ5ÉãyŽtQÓiQŽ#/& Ûü1ßžÕ-5–\äÆájíƒdxý@º -¿öˆÖšÑX9ø*øåfCbDk7•ùGÅuSž/…ËSæ4¹öÓ=[®ZÄ?G€NÖæÏ-Ï7hÁú'¨'LJM_ÿvõë§_®G"8„ìÃ%kœà“Òv[=7 þ§º#&Âî_S³ ý‘”;$oŸP À%³õh´Œ~Þ$4 ²Ø¢y Í›@ÔÛ›+jQ†† §ãóòÈËú -c­ß!+kÈ_W°L wáŽÆ&¼–aã}ç$ì{pß ž‹˜OCN%C7å; Œj!K}ö?vǺ!ȇ¢áHæî(wí6’0ÊkfâÉgwlžßFA^˜tÞƒN´û¬vIÁâ(}åcµöÿy€OŒÛªúË¿F¢jžfñA-¶§°¸Î›ñt ®³n Â×þ´({¯¬qÿ~©(¿_8µ®ÂTWZƒÖÛúžÙ·pê·rb…;ªåŽ^ú‡°„a)±g€Ê]ð‚AT=U”"2Ê[«û1ñ€,Ý“ÎÄ)¼·jÌ+ñÖ"üßÿ5túÿ(ˆ ”™*pJC<mO/¸9wãþÿ‹Îiÿvï*×endstream +1902 0 obj << +/Length 2976 +/Filter /FlateDecode +>> +stream +xÚ¥ZÝsÛ6÷_¡·ÊÓÁINâvÒ´i®vfz×ô)›W‰TEÊŽó×ß. HŠ¤§sãBÀÀbw±_°Xpø‹8a‰•v¡mÄb.âÅzwÁ÷0öã…ð˜U­º¨7·¯Pza™Md²¸ÝtÖ2Œ#·ÙË7,b—°_¾ûxssývuóþÇÿùõãõåJ-ôòêÓ§ëïÞÿ~¹’18€9_þrõñóÕÏÔ÷éÒÊåÕ×7—Þþtq}ÛÖ%^p…Tý}ñÇŸ|‘Á~ºàLY/žàgÂZ¹Ø]D±bq¤TèÙ^Ü\ü«]°3ꦎ2Cp&U"G¸!U‡F°ØÚx¡cËCȦØåpÂÈÆËÛ‡Ïóú‡HtfE ³RØ +áÿ-š&?¬·¸2ÌjyXµoŠª¼\)!—õ>__8—yb™R¿_ʵŸŠ2«ž¨Ý<¤ ŸŠí–úîrúë<ó¨Š0‡fîŠoy˜ìuq_¦Íñp)ÌÒk±21366 Ál ¤4ÿº/<ȉùñÊ7Ž5µê=AÒ¬(ï©«(×Ô·ËË&Ýz\oS×Eíû¼Ì)ñ{«Gü.sTn7©ê*}ýàç6ôÝUu³};x"ÂQ;JÕ³M‚i!’E¢c&µI&l V]™1bX[2cU’]ˆã¸—Ny»P®÷p§„qŽ4˜¯YÂh„°®£Ë¢XÇ}Ênz&(Š½™ˆ"¯kÔ‰ªFƒAÍk9[`}ÐØhùæ™F²|“· h¶Jà2”~ÕÓ +4±ðÛÖMzhœЦòûæ)Š[YÞäk8{%u±¶ýëôöÓçiÉ*^G˜$ÛAÍH6 œd?ŽI]œö‚­«t6£H·+8×ôt@£Ð’EÂØy"[Ô•=1kÍ"gŸLt`«ˆëåͯWØH–DuQcy/–H¦û‰’Ço@CŽrÂ5¾XAìڀ߯꺸Ûæí"°BM?Ò“§pteÁïpžôåøEÊè¯<ßãwÌ‚#·p>âîs¯jЯFv‰$¸ix»:z(ç&¶ˆ S¦ ZþóU…e*Öª³ê±,¾¢y™Z”3 ‘–Ÿp¦©´K¹€³¹‘U‚ZuQçš™5ÆÖž + +ºmÅüî-jdûž +‚³N ìÿÎ[î²j-uVl†–Úé§3Ù^?ÝÒOÍ°-áLs%_`[5ö€šÔ—ï\8c“yZÔ =Þ¶FšÛ>ï»!Õ?à˜kë64û퇷ÔÖHï7Eó°ƒài]O3Wq ^$/0·ƒšan@M]›>o%Dí&š§ EÐã-É@÷i¸Éÿ1GCÒÎèV›0ž,„É B›ï«õ䣂|ŠI`Ô¼£ê¢¦U‹rŽªAT¤ÛÔäPÜå™ n°<6󤵨ÚúQˆarÉ>q·‘ß\ àØèˆqá0_¾ß lÇ)sÊ^ eÑÆzAÍùê8uëÛ…—QZ×ÇÝ0Î al»F kB~pwWFÎ˯‹š–_‹ròûõ¥@Žý±™ +2"ƒw$ž'°EPØ“"äÞp“LŸD'E¥¹wÿØ:jÏ@l™Ôb@ Ü–&-Ê¢4WØÕÎ A¶}БÀø)è8íZÓÔ™ CcÜÍÕyÐÑ@>8á¼¥e]ŒÇ^{F£„Ø2mOañCú4µ‡f éD€ÐjàL"¢4¬ƒšÑ°€r¶n™$Œ[ý–4²e÷tÀu®Í`ËÏ5ʲ†}³jE% 삈?mR|zÈKêC=pÎ »I; 7„¡‘t …õ‰ 6iÝPì†"Rbyç””™"Lµ¯&x ¥¦8ä'â}âBÙ®à,–ÃÈ5/µtä£õÒÚ%µj‹?Ø¥ÏÔp&!‡ÚAû·ô“N€öÔø£[ž½¦Lšð&†Tº j Ä~ï÷¬+:ðÚ/SÔc9ü¶ØsMª¢ÒŠii_PÅ.jZ[”SÅȱ³TªÄ_bu–?ž:əБž'®EP×3t2f"NúÔõsfìﳜñã¡’ª± ˜ÄΡufrïª`N×p¡gÐÚ eUØǹ?¦jSõXd~z:RžT1ÐneHQ^³^Sú¬¬a:‚\dL{G2.0~ Çm”@%ªüïcñ˜n]@ª„… ý±XãR*T\¯³“4¥Ç<À†@'öøêWMýåÏwé{æGJðlì°Ê¥’fL=Ç‘GÌ(ôrÝã÷‹±<Ø®|D]$ÏÈÕiá³~HéšJµ€#xä¾­‡C¸÷p$dÕš óÖŽû’ +|ïüî¾° =E J‘f}Ršam‘®®ç»ŸÚøÊ2=UÙŽcum!b‹8x"/…l<§Uz`QfÅ:mòº­ïùh­/Gª»À‘ôP·Y?ÚÂ3O[®YÉB¬.jÆꔳ:gQS¢˜’ÚÎo@#[vy•¦¸Uý-?ŠÐÕ Üÿó°~As]íöÛýÆ$G$Ö|$ç9ÒEMs¤E9Ž<¾˜4lóÇ|{V·ÔXr‘ó„ÐaýŒABf™c2ÈÚêAdžåwÇûû6×u„M³,‚hËš +‚]Ô ËʱìÛ™EÌZaæ·  ‘-{JM­DË÷÷eÕ}Xùpó¡ÍrTêÙªîp©áÃÇ80a;o˜h((_Hƒ0™æ¥H€*ýÂ…ì¢fxPx0 n¼*˜dI¢íüÖ4²u—§ý­[‹ÙÍ»|"±改L²N˜„é8~áævQÓ¬kQÞhŸUsÀNa±uvÏÙ³Í&ìéâ"WÑKСÂ=Í@h©©ÕÚzh;Á—ü¶ï<ó=äC|ª@WY WOÛK€‹ô+”ºeuYO®{Põt¡?>ˆyv)\G®âôJ!¥ÅÇò×ÿ¦N"aM÷ÑUàn“ +ú¢Z}Á¡}þ•‘'wƒ.@Õw:ôoªcé·NC£û‡«µ?` ’áõé*üÚ ZkFcäà«à—š ‰­ÜTæ×Mux¾B,O˜ÓäÚO÷l¸vjÿü:Y›?·<ß =ëŸ` ž0)5Q|ýûÕ/Ÿ~¾‰Hàh²C—t®q‚OJÛmõDÜ€øœêŽ˜c¸Mͦ}è7ƒr‡äíª¸d¶–ÑÏ›$`ƒ†A[4´yˆzwsE 2ÊÐð¯át#b|^yy@_a¬õ;de ùë +–€É£á.ÜÑØDƒ×2,b|蜄}Îâ{¡Á³`QóiˆÀ©¤cè¦|‡±Ñ@-d©ÏþÇîX7¹óPÔ!iÂÜ¥à®ÝÆÃ@FCyÍL"ùìŽÍóÛ(È “Î{ЉvŸÕ®")XE¢Ï¢|¬Öþ?ð‰q[Uù×HTÍsÂ,>¨Åö×y3ž.ÁuÖ-AxàÚ¿ƒeï•5îß/%ã÷ §ÖU˜êJkÐzwCß3›ãNýVN,°pGµÜÃK¿ã–Ð#,%ö P¹ ^0ˆª§ŠÒ@D¦Byku?&e¢{Ò™øÏ …÷Vy%ÞZ„ÿû¿†Nÿ”2SN©cˆÇ í‰Bâ…çnÜÿÑ9íÿ%H*¨endstream endobj -1826 0 obj << +1901 0 obj << /Type /Page -/Contents 1827 0 R -/Resources 1825 0 R +/Contents 1902 0 R +/Resources 1900 0 R /MediaBox [0 0 595.2756 841.8898] -/Parent 1791 0 R +/Parent 1883 0 R >> endobj -1828 0 obj << -/D [1826 0 R /XYZ 56.6929 794.5015 null] +1903 0 obj << +/D [1901 0 R /XYZ 56.6929 794.5015 null] >> endobj -1829 0 obj << -/D [1826 0 R /XYZ 56.6929 119.3275 null] +1904 0 obj << +/D [1901 0 R /XYZ 56.6929 119.3275 null] >> endobj -1825 0 obj << -/Font << /F37 747 0 R /F23 682 0 R /F39 863 0 R /F21 658 0 R /F55 970 0 R /F48 885 0 R >> +1900 0 obj << +/Font << /F37 779 0 R /F23 714 0 R /F41 910 0 R /F21 690 0 R /F55 1010 0 R /F48 925 0 R >> /ProcSet [ /PDF /Text ] >> endobj -1832 0 obj << +1907 0 obj << /Length 1522 /Filter /FlateDecode >> stream -xÚ¥X[oÚH~çWð²¨ëéÜm?Ò„´é…d•Vjóà€o}ÉÚ†–þú=öÌÛ 4Õ*R?Ÿsæ;W› 1ü‘¡'f>º>G1\&<ÜÀ½·¢1Ž9mÔ›Åàõ s‡>ò%•Ãź%ËCØóÈp±ú2šÜßOg×·*ðè ;ãѧÉìóä£Ú»ût4y;âJÆ$*˜Ä£ÙäÓôÚ¹z7½úpu7»?.Þ¦‹Æ°¶ñ³Êª_ñpgx?Àˆùž~‡ ŒˆïÓa2à‚!Á3;ñ`>ø«غ[?j#C0 º66|ÂG’QV³ñÇØ‘püUZáÒ)¢Mú3KCµélôo¦~ÃAò‡h™%ú©'t²÷•0^Ѷ9„ _Z+úÐB¢W³WĥܵA»bQeT¸ê‰66_ßÀQŽ§¬ ’ž+jÈmª|ZnÃjAFÁS¶“‘¾ÒzþÔ‚HKï#B<k›z*v]p xAá—ù˜x£0(âc„1µ€Ž¤@@‰p–„žZBÔgú1ˆSFÈh±ŠŽºz]l³]¼R'ªM:LºFº.PÖ¯Cõ›.Õ’i:õ£b¥]ÂQ“0-û¸ÓsèKO[œI¸‚3¦kËé$ETJ¡¡ê,HN‰‹˜„ÔèøÛ¼qmuAõyj÷éÛºñ¬îì£lWÄuKs]¯Í éè{TnÕÞ*\»¸Ô‚P†yQSÏÁ[Ïy´Rì[x0Š•FµÅ.é·rA™) -ŸÂ.¥M -w¹v&}©ëe™å‡10@ú{ ¢ ÀòÙ–Ò&ìlÙn1ùb1ya±¤ù êíÔ2lvëó2 -žPo>*¶&çwöúA%ÂPFÛyîÛ„éWØöàÑõ‚wš A›rñævv­ÔøZÛ*‰Ò¨(󜣶Úù¥¶>é.ˆmY.½*¤oÓÏ‘ïSn®”D*˜°ÈãQ.HS4,¼9ÔÈóÝ.}“Ï‹ww¿æí6…”HC™óCÕAW¤«,-²¼ŒvÉQ-GŒKã.N‘ëAå­‰Dº0†8©ë„³Ü†Ëo¦XÔ¾ȕ­Á3€œ1ͯDëMKŽª’”ºjUßÖ –¥UÅÙìÀiQ–Zêé!-ƒ\ ŒÒNÒ,‹_Œ‡4{. bõæ ÃVÀ0´v”Zú>RQœuBÂà ˜xœ¶ˆó3Aƒ²2T¥égûhVûfõO³*ÕqE›xŠ}D‰hzh”ëÚtZ•G’6©¥®£8¬Œ1:~>ÚU2äq,ºÜ^OçW·÷‹Û»™¥»÷ÂÕ\½ ò ()Ìgº½WÈ~gWáð§.Û;ûiVöqa¤e´,44[wšêË"О³ÆÊw5 ó“aU‡‘à%Ìéå8j£ê8êÐiâ¨AUzm_%̧œó_¨4 ‹JÖÏxÿ•÷y”öéÞÁÆ0¿K’ ?hºSÍrø#*ÑYvªéZž{iØi¡.°cP5;&cDûPæ9×–/mÛwá }.× ,Öuz‹ Èç\vÍ»ÚÖ½)«¢—a¿GN³–ÃìéIמß%B"˜8 ²È´Ðm ÅGé2Þ­Buqd¢}5?×ÚSó”ƤGµi -tµnf­êBzÙ2„Ž®Æ H .{³o ó:Òi™½ÑNçÞÓ¡“ªE”DqÇÓ g&Õp{.¶ Á‚ƒäåÐjÎG–Õµ?I;¨¾¼¬Ï`Nõu’Î7º]}¶œÛÃ<Ü,Sߪ»§•Þ“!ß±l¿üF%Ö^ÝÀþ;i /[Œ’ËÌ1ç‰×˜š÷ŸÞóè%er¢¬Ç:#¾h+»óu–'h„wMí‡8 V½ÞÇj‘0ŠåÇ×7ìël—ßñN3B†`!ÙK^Ú [®ðÛÃ¥í# LnÕ— +¸éiÿûÊñSTCæygš Ã02Ÿ£*à öû¦7ŸZNmÿãÜ’rendstream +xÚ¥X[oÚH~çWð²¨ëéÜm?Ò„´é…d•Vjóà€o}ÉÚ†–þú=öÌÛ 4Õ*R?ŸËw.sl2ÄðG†ž@˜ù|èú LÄp™ ðp÷ÞˆÆ8ä´Qoƒ×7ÌúÈ—Të–,aÏ#ÃÅêËhr?]ßþ=v¨À£7hìŒGŸ&³Ï“jï~ìÓÑäít>vˆ+¨`f“OÓkçêÝôêÃÕÝìfü¸x?˜.ÃÚÆÌ*«þ|yÄÃøð~€ó=1üߧÃdÀC‚3fvâÁ|ðW#°u·~ÔF†`u-lpbcCøH2Êj6þ;Ü_¥E."Ú¤?³4T›ÎFÿfê7ü$Ïqˆ–Y¢ŸzB'{_ ã-`›Cò… µ¢-$z…1{E\Ê]´+UF…«.hãaóõ ¸rô²‚xHz®¨!·©Ši¹ «OÙ~LFúJëùS jÓåûˆƒÀÚ¦A§Š]QPøe>&Þ( Ê°èaLc- )Pbœ%¡§–Põ™~ ò”2Zl£¢£®^Ûl¯”çOµ C‡IaÂH7Êúu¨~Óe¸R"Mg ~T®Ô¢Kp5 Ó²;õ“HD_zÚâ4HÂø˜®-ÞIŠ¨”BC•/HN‰‹˜„ÒèÄÛ8Þ„¶º ÚŸ:|úv n<«;û(ÛñAÝÒ\×kã!}Ê­Ú[…ë`—Z@ƒe˜5õ,йõœG{ EÁ¾…£XiTÛAQì’~r«”™¢ð)ìRÚ$Òr—ëðhÒW‘º^–Y~Hd¡¿W º,Ÿm%mÒÎVí“/6“6K™¿ ÐN? Ãf·ö—¹Ðð„jxóéT±5ù8¿³÷*†6Ú®{ß&L¿Â¶ÿˆîÌo·W‚86íâÍíìZ©ñµ¶U¥QQæGm=´ëKm} +Ò]Ûª\zU!H-Þ¦Ÿ#ß#¦ <Ü\)‰T0a‘Ç ¢\¦iXxs¨/ç»]ú&Ÿïî~ÍÛm +%‘†:3燺ƒîHWYZdyí’£ZŽ—&\œ"׃Î[‰œÂò¤îÎr.¿™fQÇV W +·ÏrÆ4¿yì7-9ªKRêªU}[X–Vg³ƒ EYj駇´ ~hp%0J7ºH³,~I2Òì¹€ŽÕ›#$  Ž†áhg@©åÜ'à UÂY'$ ±€‰Çi‹8?4(+CU™~q¶fµoVÿ4«R¹+ÚÄSì#JDs†F¹îM§]Ip$i“Zê:ŠÃÊ£ãç£=Q%CÇ¢Ëíõt~õp{¿¸½›YN÷^ºZ’«—D$%…ùLï²²«tøS·íÎý4+û¸0 Ò2Zš­;‡êË2Ð^³ÆÊw5 ó“aU§‘%Ìéåƒ9Õ×):ÂèvõÙjnópÓ°L«îžvbxO†zDzý:ðXGuSøï”5¼l1J.3Äœ'^cjÞZxgÌ£—”ȉ²ëŒø¢­ì>Ì×Yžt²Þ5uâ,XõΖ8V‹$€Q,?¾¾éd_g»ôøŽwZé* É^òÒ&`Ør…ß.mI`r«¾lXXÁÍ™ö¿? ?A7džwæ0a&PæcTe8!¬ozó©åÔöÿ¡_’7endstream endobj -1831 0 obj << +1906 0 obj << /Type /Page -/Contents 1832 0 R -/Resources 1830 0 R +/Contents 1907 0 R +/Resources 1905 0 R /MediaBox [0 0 595.2756 841.8898] -/Parent 1841 0 R +/Parent 1883 0 R >> endobj -1833 0 obj << -/D [1831 0 R /XYZ 85.0394 794.5015 null] +1908 0 obj << +/D [1906 0 R /XYZ 85.0394 794.5015 null] >> endobj -1834 0 obj << -/D [1831 0 R /XYZ 85.0394 562.7154 null] +1909 0 obj << +/D [1906 0 R /XYZ 85.0394 562.7154 null] >> endobj -1835 0 obj << -/D [1831 0 R /XYZ 85.0394 499.03 null] +1910 0 obj << +/D [1906 0 R /XYZ 85.0394 499.03 null] >> endobj -626 0 obj << -/D [1831 0 R /XYZ 85.0394 459.6249 null] +658 0 obj << +/D [1906 0 R /XYZ 85.0394 459.6249 null] >> endobj -1836 0 obj << -/D [1831 0 R /XYZ 85.0394 426.4105 null] +1911 0 obj << +/D [1906 0 R /XYZ 85.0394 426.4105 null] >> endobj -1837 0 obj << -/D [1831 0 R /XYZ 85.0394 390.6449 null] +1912 0 obj << +/D [1906 0 R /XYZ 85.0394 390.6449 null] >> endobj -1838 0 obj << -/D [1831 0 R /XYZ 85.0394 324.0377 null] +1913 0 obj << +/D [1906 0 R /XYZ 85.0394 324.0377 null] >> endobj -1839 0 obj << -/D [1831 0 R /XYZ 85.0394 263.3171 null] +1914 0 obj << +/D [1906 0 R /XYZ 85.0394 263.3171 null] >> endobj -1840 0 obj << -/D [1831 0 R /XYZ 85.0394 199.6317 null] +1915 0 obj << +/D [1906 0 R /XYZ 85.0394 199.6317 null] >> endobj -1830 0 obj << -/Font << /F37 747 0 R /F39 863 0 R /F23 682 0 R /F21 658 0 R /F47 879 0 R /F53 962 0 R /F55 970 0 R >> +1905 0 obj << +/Font << /F37 779 0 R /F41 910 0 R /F23 714 0 R /F21 690 0 R /F39 873 0 R /F53 1002 0 R /F55 1010 0 R >> /ProcSet [ /PDF /Text ] >> endobj -1844 0 obj << -/Length 1852 +1918 0 obj << +/Length 1850 /Filter /FlateDecode >> stream -xÚíYKsÛ6¾ëWèHÍ„^$Á£b+‰ÓXvm¹éÔÉ!› Eª$eGýõ]·¡Ë|Š„ÿp A¡çQM*, ³&”¡`ny!KA†ÍÒ8“@‚𥀚ð5åÅdvu15VóÛˆÐп¿2οsàxèRˆš…ZRWãó ‘E¯7"3®ÀhKkîYc«ÖjË*ªÖv6·Mº. Í'/,Ùƒ4|M/–•œW2®7° lY‚I)ûÑ©ÅíÀs9™˜Åã÷—g=:öòƒ§Ã?òÂ,m!e|»™Öüx;ª° ÆH}Ž¯N¦Ç†Ihň—I¾ ö›fèB.,ÙÜâpek ûâˆGÔ÷ýGÍ„AÇ EˆñÕìíÙÅaN²J™´'z¹)+¹´gu”ge^TÉz¹Ý–#Æ}jùðöµ7ÜYïÁ§}ˆY€Dàןڀ³/#H„·k±ŠQ÷tòå*I¥Þ@¤4ØÆc;ÖŠÊ÷QšÄIµ1=Í´ äõÉ€_ÜKP¸¯ò<íCïØÜ&ËWeRî†PÐ%>R“ zï%ÚS®ÔÇC{›…yZ„=¡½¡êAoäúp6×nü©nÝ5­ÏMëϦuߴ毽À.Ã0k—ó4*ËžˆICˆp骆㢇#óð=Ï’.òbU}1¸CÖp|ý|u(çD]TêÓå×nÒ‡E'’/óXö!¡‰Ø®Ü_Êý}ü–?Çïò;}fù²g–/?|îÉö}³Ã— ØßåYöð„è…‘O0­ Âı²Ú¤òévùÌÚWùÅIl^lz˜ÂݧÙeúðO0=nZzØû¶<ÆÙêÓU0ÈLÔ£½ãµm è ÏðÔ¨ø©ðÜbñHx®©Zá¹}íèË ö„÷”°,vÏèè™}ý߉ò.ð -á\tý;Y'ÏìšÿõÀž=³|ψƒ§bO Åôgâðÿq³‰›º×=šÝì‚zð‚l¡óæ=ž\]œœÏNΦߕzÖÁnêɧAóœT”: auý„;å&«¢¯fÐfŠÜI {¹-쳞Ù$”™Ê o2f3U Ä9©ÌàJ*LìmdÊ0´•ƒ;QÙ£'c %¥5¸ZÏí9 -1*܉Qq.sÁS`‚Ö¶À$Œ¨¢sBÙ]Rš¹eôEö‰D•ÑéôF×>².åbš}:/‚F+[‚-ª0nPµ:ÜHEos{µÈ–n\s7S¸›9'A×q×Å6Ùº“K[;ÈtUg[a³"Uqdh£€·Rá®Ùa8æ}ãŠÝ×2&º-épa›d™¤‘Öž4µ n5CÈâáÓQ¥1­#Je…pnÖ•ÙOT`«(}ˆ6V†x½\Ù¦1M˜¯¡×©j%³ª&Èíz+þJÎkØá•ræu-Ï–ÀL‘¬Î’öz3™n«\fÆ͵ªŒ1œq u’gQšnF„¥#¡ÖF3Y­ÒD™‡fUɼ‚³ÓS*3‘Ê{™–føfc¾¶§øQuºP¢&4j•B§®,´5Ë×ÕJ¡ÊxU’¦¦¥ªƒê Ö›VTÚof¿óJU`tÛ ¬Z 4Äxf½úfÓc`v"…w 0 ™3ÛVt\S[aV¬—º”nL¯{0ÐÔÄ6̘†õ/Q.H׿,κtmqVí庴Ÿ¨ªg£zèÆúZTÖU>urݱê./k—l‹hÜw[ùîAÉ&%†¸àÍ…°Wnª;è[?{0um±¾w;nî·ŸþIdûã¼a˜´¿N!(Ãb¿JéDÞ/÷cD™O{dÿ‚CÊendstream +xÚíYKsÛ6¾ëWèHÍD0^$Á£b+‰ÓøQ[n:ur EÈfB‘*IÙQ}R$ÍXN¬vzèxÆÄc±Øý°»À®Èúò ý€#w8_ððæÞˆ¥WDã&ÕëÙàà ó‡ +<ê g‹/°d8‹®×ÈC#à€ÓÉÉôh|ønzøËg§Óјø%Îäü|zztüûhL] ä@Œ±s29½š|0c磀:“·ÓËÑçÙûÁtV Öž`¦¤úspý#Ðáý#wøŒHÐárÀ]†\ÎX5’ .¿Ö ³ziÜÈ¥ÜX8~?dù„‘Ï€Lˆ2Jú «¨dã/]E=†õd}[VD=[²Æ–ž@ ¬½åÇ;™°“,ŒâôÖtBóù+Kå'Œi"M?áÈ02½òÎÉÖy&¦/ì·4_ù-.Ê=:B‹“}Ä&;ÀlP=fE¥43r§áRv·\gÌŸÞº"êÙº *ÁÚžßÞ{¦‘a¾£·‡–p²…1 ÁÀ|) &\çï8Ž©@Ä ÌB-éXãó‘E>¯7"3.Áh kîim«Öj‹2,×v6³MÚ.sÍ'Ë-Ùƒ4|M/’¥œ—2ª6° lY‚äq!ûÑ©ÄmÁs9šÅ“—g=:öò ƒ§Ã?òÊ,m e|»žÖüXÐ4m° ÆHuŽ¯O “ÀŠ-ã|ì7ËÍÐ…\XÒ¹Åá$L׋K QÏóž47m &W³wg»8NK™§Òžèå¦(åÒžÕa–Y^Æëåv[Ž÷¨åÃ}Ø ÔÞdpgaü>í@Ì|$|׸þ© 8Ec‰Àw»«µO'[®âDê ôð'Jým<¶c¨|&q—ÓÓLë@^ øŽ…«ñ2Ë’>ÄqÇæ6i¶*â¢BA_xlH!LúÄï½—hO]¸RŸíM:¾ò¾Ð^Sõ 7{p6×ãèsÕº«[_êÖŸuë¾nÍ n+z]aÖ.çIX=“áÒ5T5ÇEGæ"á¹®%]dù2,ûbp‹¬æøfu(çD]TêÓ å×㸋V$_f‘ìCB±®Ü_wÊýcü–/ãÇ»üNö,_ºgù²Ýçoß7ž¾Å^—gÑâFÁ´2ÇŠr“ÈçÛýåžµ/wò‹â.Ø,ßô0…ºG]ÒeúðO0=ª[{Ø{¶\ÆÙªÓU0ÈLÔ£½åµM è ÏðÔ÷©xQxn°x"',‹îîÙ×ÿ(?f^!’‹ö¡ÿ ëxÏ®ù_ìéžåÛC öŸˆ]Ó—Äáÿãf7u¯}4Ý삺ð‚l¡õæ=š^^ŸÏŽÏN(õ¬2‚nêɧ~ýœT”: aUý„;Å&-ÃofÐfŠÜ‰!{¹Íí³žÙ$”™Ê ¯3f3U Ä9.ÍàJæ*L<ÚÈ”#`h+w¢GOÆ@KJ+pµž=ÚrbTЉQQ&sÁS`‚Ö¶À$Œ¨¢sBÙ]\˜¹eøUö‰D|•ÑiôFW>².äb˜}:/‚F#[‚-ª0nPµ:ÜHEos{µÈ–nÆæn¦p7sNü¶ã®óm²u'—¶vêªÎ¶Âf Dªâ sÈÐF>o¤Âm³Ãp ÌýÎûX{Ș趤cÀ…mâeœ„Z{RׂhÇ_åÁóQ¥1­"Je…pnÖ¥ÙOT`«0y7V†h½\Ù¦1M˜¯ ×©j)Ó²"Èìz+þJÎ+Øá•pæ¶-Ï–ÀL‘¬Ê’öz3šn£\fÆ͵ªŒÑ÷I uœ¥a’lF„¥#ÖF3Y­’X™‡fUæñ¼„³ÓS*3‘È{™føfc¾¶§øQuºP¢&4j•B§ª,45ËÖåJ¡ÊxUœ$¦¥ªƒê Ö™VXØoj¿óRU`tÛ ¬Z54ÄxfµúfÓc`v"…»#0 ™3ÛVtÆ.¦¶Â¬X/u)(Ù˜^û` ®‰)l˜1 ë_¢\¶YœuéÚâ¬ÚËua >aY͆ÕÐõµ°¨ª|êäÚcå]VT.ÙѸï¶ò݃’ L|oJ qÁë áQ¸®î ïýìÁÔµÅúÞí¸¾ß^ü“ÈöÇxÃ0!hœBP†Å^%”Ò‰þ¸Üeí‘ýoØ €ýendstream endobj -1843 0 obj << +1917 0 obj << /Type /Page -/Contents 1844 0 R -/Resources 1842 0 R +/Contents 1918 0 R +/Resources 1916 0 R /MediaBox [0 0 595.2756 841.8898] -/Parent 1841 0 R +/Parent 1883 0 R >> endobj -1845 0 obj << -/D [1843 0 R /XYZ 56.6929 794.5015 null] +1919 0 obj << +/D [1917 0 R /XYZ 56.6929 794.5015 null] >> endobj -1846 0 obj << -/D [1843 0 R /XYZ 56.6929 644.7852 null] +1920 0 obj << +/D [1917 0 R /XYZ 56.6929 644.7852 null] >> endobj -1847 0 obj << -/D [1843 0 R /XYZ 56.6929 574.187 null] +1921 0 obj << +/D [1917 0 R /XYZ 56.6929 574.187 null] >> endobj -1848 0 obj << -/D [1843 0 R /XYZ 56.6929 503.5888 null] +1922 0 obj << +/D [1917 0 R /XYZ 56.6929 503.5888 null] >> endobj -630 0 obj << -/D [1843 0 R /XYZ 56.6929 459.3803 null] +662 0 obj << +/D [1917 0 R /XYZ 56.6929 459.3803 null] >> endobj -1849 0 obj << -/D [1843 0 R /XYZ 56.6929 424.0565 null] +1923 0 obj << +/D [1917 0 R /XYZ 56.6929 424.0565 null] >> endobj -1850 0 obj << -/D [1843 0 R /XYZ 56.6929 386.1814 null] +1924 0 obj << +/D [1917 0 R /XYZ 56.6929 386.1814 null] >> endobj -1851 0 obj << -/D [1843 0 R /XYZ 56.6929 312.6614 null] +1925 0 obj << +/D [1917 0 R /XYZ 56.6929 312.6614 null] >> endobj -1852 0 obj << -/D [1843 0 R /XYZ 56.6929 165.1287 null] +1926 0 obj << +/D [1917 0 R /XYZ 56.6929 165.1287 null] >> endobj -1842 0 obj << -/Font << /F37 747 0 R /F21 658 0 R /F23 682 0 R /F39 863 0 R /F47 879 0 R /F53 962 0 R >> +1916 0 obj << +/Font << /F37 779 0 R /F21 690 0 R /F23 714 0 R /F41 910 0 R /F39 873 0 R /F53 1002 0 R >> /ProcSet [ /PDF /Text ] >> endobj -1855 0 obj << +1929 0 obj << /Length 2702 /Filter /FlateDecode >> @@ -8148,28 +8505,28 @@ D ‡ ± ‹.`d€ ®ÙüMãžå›ºrW1àÚÇ\=l~–|µrÊÖ^h0Xî ögt~Tc›7îiUÇi¡èhʺ°‡8¢³ûM{,7«ø(ãy¾É$¾Ç¿2´=× ²n@(«mP¯Q–iLâè«[äã¡tžu:?)ÿ7ýi˨n¨=¢M­:ÅþSÐ;ˆ–^0o™¾Mˆƒ¿lLª1‰9Î^HŠ SäüË Š“—Ó*#û]•µï16÷?474•±#`ôþиÁÀ1í(Äk±.kÿg\3!×IäuŠ× öP›ë®“O§-Èê…ìü4ïJ›¦üT´»"PŠPS÷ósýNɹj:®H×)õ üù©¡”'k¨¶Ôx ¥l µNÖPR±À­M!±Ö¯¢ …B•Ok¥ªuëY„ÔYW·t=ëõ/hÛ ŸPÕÔq†P½Ž×SPñpÜ î¦ø³™D®N×SÇNÐp`¾P‡µ þ>[$CÀH»œH¡…j(;F_E´´¥ÆÑ¥,Z^§º1ž±p¡ˆ ÃIÕ¢TB·.\2)Ht•‹paŠûcZ±3hàbÆüC[†<7:Rf¼Õû Ûõxœ´vÂ㚀#ú<A¬0EFd—J"h4 aܯžÎP²qòNíD P(¥Ù ¢ ¦<Öæ>DÃ黪Bö‹½¦e~¨‹$>à‹µ1ë2µ—>ì6Eèd…6àê°}ªGsÀ²Ú5Ån¢MH¹F‚Éiµ-5(AÊÊé@QZ°©ÞÅHq1­WJèÕíL (§dO±Ð™JôK`»„¶Ï4ëã…#Øiepd’A»A‘ùsik?EC¬‘n?Ñ ¬órsLà ‹˜pün$¶¿`º©öG*Sö¬0¢ù‚c ‹²=9F]<+R9âXE7"ªíS¹)Fb§ÇÚt¤Ç¬B«v…÷œïwã´Bj9Ì/Öûd$·š„“'™i^KÑv@ù°«ö£¼x¦ìäa†%‚ªçTŒ¶¤&b4HÙݦb”#)¹šŒQ†$árZ±(•Ð¬¥ -tWµãQ†‰)l 77ÔuïpªF…Áú±:˜JÆ\ßîÖ½…´½#Xø§æµŠ}ðXøÕ"÷·7ÇÒØ´,\vB&p¡éª:…$׺{Ç+¦[­Ï W€œŸj÷²/ ó¨yÀù)€É€gJ6 ð¶Ô8À£”øÛÀTexàܼjÓŠE©„f]€ƒÑ0КŽj¯ *Ý AóbÃüñ‡Ûag™Ûþ]ˆkOûŸ²ù+ó± rӴߟ°3ߟ˜)ùD² DJ> endobj -1856 0 obj << -/D [1854 0 R /XYZ 85.0394 794.5015 null] +1930 0 obj << +/D [1928 0 R /XYZ 85.0394 794.5015 null] >> endobj -1857 0 obj << -/D [1854 0 R /XYZ 85.0394 751.8354 null] +1931 0 obj << +/D [1928 0 R /XYZ 85.0394 751.8354 null] >> endobj -1853 0 obj << -/Font << /F37 747 0 R /F21 658 0 R /F23 682 0 R /F55 970 0 R /F39 863 0 R >> +1927 0 obj << +/Font << /F37 779 0 R /F21 690 0 R /F23 714 0 R /F55 1010 0 R /F41 910 0 R >> /ProcSet [ /PDF /Text ] >> endobj -1860 0 obj << -/Length 2311 +1935 0 obj << +/Length 2310 /Filter /FlateDecode >> stream @@ -8178,310 +8535,315 @@ xÚ­YYo ÆGÒ^’¦:"Eàè¡`”f£x°4/Y }šp1Í\½Mñ\Õͱ Íb˜²q…F'¡<g¢sÄu":=—‰Î. *¼²¢ºP7¯ûº¢PD"uZ¹+ Ý¤ÉSqJÒ©zWkÛOt -3¬t¤u™w9„Œ¢¾{›€ d,¤.µºNœø¢JË>Ëí ²±¯›Gë ÎWþ)Ç•Ocˆç:XQ»-ª°t2t¸5È<³õ¢ñˆLëaÒNË]³P•-ýäêbb/m±)ʤ)Ýj:ØÌ€]uÿ8[Bb„YŸŽ­1×ñظLl½„*Ÿ†ÇçcËGÃI宀vÓØR8MÔK×ÚÇø‘°”+é[¢ - Êé(ªŒLUšš‚½b£C»¥Õ Ïþ±IÚ.oÆL–þûÇÛ«O×7ön/2]A“ÖŸ—ºùSWb‚áù†è¯.n\s¬÷Úên}jY¥ÃZH0Åà]ê-aÃÒc2šBñ.'“ 1>3ØŒ¹N§ç2Áy½¿e$¡+vzKÏØr|º˜!˜¢é–× ¬ñlÊ;Ù™Ôš9©êJ£å1¦9êŤ|I^ !½6ž Ž*pÆØØGË´Þl‹2?.5Ê ô¼«0œ5†¹æ´«F\'\幌«þª#âËS*B &ÆÓzy¦€^û#(‚OFPx_Ö¹™LÌADpMÈR± ` œ»„$ß•ö°y´(³Ôv‰Lè˜Ëùíi.»´ë,°ARšéÌVÈ.Ù5m)>R8uiÎ=¾kâØ{35sƒåôE#¯Þïb¬íµ¯2ÀŠ&ÇjÚˆÞtmñ»\>×MÑ­7öVc¬»Wö†`Æ5ÒÒÁŽå<¦=%M…’ýt%S‚Œ6ù >µÀ'ÏdÓ˜ëx6 \zGä:ëZ.fˆHÉOïw]ä? 7¥CMéúvzD2ÅÂycnãØ^ò¡BéØÊ;-¾ Úv"u‘~)Ú#ÖñꎭsscŸ½ütÿ%pÄÁ&|g]?¤®ïFÜJ¢ÑßF'š ‘ÊÙÌVGmÌDè%A”õ'$Cà_qÞ¼½¶ò”;UM¦h;_jïôpoLZ¥ÎªŸ“ª‡Nt¸=HD£aü -›z'Tb¢&v½||øÇ—»SµAö±‚FXå.>î_"oœç¯êª­›®è7»mÁƒ<¢N€x.ãá¥ÿ -vÞð]…qÝ+ Ç­Ëí€>àFåÃhrêž ¹ÊÎ`å1× Ëy.¾k””„êprkÏØzj9 tO÷,÷&kùwZ>X‡ÄAž‚ÒñΘïnïní³¿/.Í/?=Þ܇ßLÀÄ…™o3ÁÔð²Ëfj×7•Ï]ùÏÂMéPSº¾‘L±pÞX„Û8¶—|¨P:¶ò@‹ï‚¶@H]¤_Šöˆu¼ºcëÜßÜØg/?Ý q° ßÙDש+Ç»·†Ò€hô·‘ÇÔ"C³!R9›Ùꨭ€™½ä#ˆò¡þ„r<â+Îû·×Vžr§Ê ÉmãKíÀàîI«ÔYõsRõЉ·'‰h4Œ_a³Bï„JLÔÄ®—ÿørwÊ 6È>VЫÜÅÇý+@äóüU]µuÓýf·-xGÔÉÏe<¼ô_@Ãξ«0®{¥á¸u¹ÐG܈Gv‰Fil©©’áúÖæͼ ;ÀÛLĽVõ¶-Úý:àzɈÍÃIŽi¨Ì@çWÔ¼Y:ý)`'Á” üà˜F‡ŽÀzß–ü»§¢JH›ÄhèÃ{:ò‹çåª(óÀð¢Û½¨äf¹`+ ÿ"<ËŸúçe™ÿÈË·‹] Ôó@m[AÕŽ8ñ¯Êä94÷pÄcIö÷¨ò–LRD˜~!2†3K·}’¬”±Ú—¼=k”-¤EHCj‡ˆyí@uÉSîÂÓÈá(¢âÀýYua®l†¥ÑÁé Ôϳڦ Ýc!7B¿û¦ªêq„ÂCÿÏßûvß3µ2)iÐ`„Ú)¥‡Œ>Cú”ÁCÝÿ ù'.endstream endobj -1859 0 obj << +1934 0 obj << /Type /Page -/Contents 1860 0 R -/Resources 1858 0 R +/Contents 1935 0 R +/Resources 1933 0 R /MediaBox [0 0 595.2756 841.8898] -/Parent 1841 0 R +/Parent 1932 0 R >> endobj -1861 0 obj << -/D [1859 0 R /XYZ 56.6929 794.5015 null] +1936 0 obj << +/D [1934 0 R /XYZ 56.6929 794.5015 null] >> endobj -1862 0 obj << -/D [1859 0 R /XYZ 56.6929 381.7644 null] +1937 0 obj << +/D [1934 0 R /XYZ 56.6929 381.7644 null] >> endobj -1863 0 obj << -/D [1859 0 R /XYZ 56.6929 321.391 null] +1938 0 obj << +/D [1934 0 R /XYZ 56.6929 321.391 null] >> endobj -1864 0 obj << -/D [1859 0 R /XYZ 56.6929 261.0176 null] +1939 0 obj << +/D [1934 0 R /XYZ 56.6929 261.0176 null] >> endobj -634 0 obj << -/D [1859 0 R /XYZ 56.6929 223.9137 null] +666 0 obj << +/D [1934 0 R /XYZ 56.6929 223.9137 null] >> endobj -1865 0 obj << -/D [1859 0 R /XYZ 56.6929 191.71 null] +1940 0 obj << +/D [1934 0 R /XYZ 56.6929 191.71 null] >> endobj -1866 0 obj << -/D [1859 0 R /XYZ 56.6929 156.955 null] +1941 0 obj << +/D [1934 0 R /XYZ 56.6929 156.955 null] >> endobj -1867 0 obj << -/D [1859 0 R /XYZ 56.6929 93.6598 null] +1942 0 obj << +/D [1934 0 R /XYZ 56.6929 93.6598 null] >> endobj -1858 0 obj << -/Font << /F37 747 0 R /F21 658 0 R /F55 970 0 R /F23 682 0 R /F39 863 0 R /F47 879 0 R /F53 962 0 R >> +1933 0 obj << +/Font << /F37 779 0 R /F21 690 0 R /F55 1010 0 R /F23 714 0 R /F41 910 0 R /F39 873 0 R /F53 1002 0 R >> /ProcSet [ /PDF /Text ] >> endobj -1870 0 obj << +1945 0 obj << /Length 2748 /Filter /FlateDecode >> stream xÚÝZKoÛH¾ûWØÃJ€Ùé'» ,Hl'ð`âxc3ÀÌ(‰’ˆH¢F$d~ýVõƒ")J -ÙËÚ6›Åêêêz|UQøg#£‰éDE™Í6Wt´„gﮘ§‰QÔ¦zó|õê­Ð£„$1GÏ‹/C¨1lô<ÿmüúññîáöþ×IÄ¿!“HQ:~ÿúáÓëŸÝÜã$áã×ïîžàVJ‘F²˜Ž^¿¿»üñüÓÕÝs#N[dFÊòçÕoÐÑ$ÿ銑5ú7”°$á£Í•T‚()D˜Y_=]ý§aØzj_R†(Ãõ€81F¥xG *!±àÂ*áöîéæãýãóý‡Ü}ç 7:Š¸&TIm‰·é&›{2Ñ"’HI5#U^N"!ãqê.·Å&Í·nü Üèé[Ye7þ*zûðæ&Êlÿ’í'ZŽ¯aBÓñ.ÝWîQ±p×jå½¹¸u£Ä]æyYíói]å…_u±Ÿ03.üj÷O7ÄÞ{7Ø–"í¢°›¨Ñnj»(ö›Ô1EÛW+`×nTf~êãÛ›ÒÀÄu3”~˜nçÍœ"vuÐ8KˆÐLÚeYevx)>g–ÞŒ¿äÕª¨+÷$µÂ/ëM¶­ÊëSdJatìÏçä)‚­išxª/ùzíø;ݤ~i¿ßd<Ïi½ö2ÌŠíï”òe½oTdÆ8³ÎÜJ"i ¤)‘‚J¿Ô«¬š½²Rà³Í€ÅÆÂxúkwNR10MÞ;¨¶´¨áonoó*O×îfžViÿÖ`6™?Óþ¬³}ž•¤QjËà¤Hȹ±ë~°>ôt(È'fà±`ÃQÌEmªàÁÇQ¬¡Âu#Ù_2DÃÏ/ˆ–l+â¥`‰ê.ù©ôö}ÿø"ƒ7¬½¢³— Å|ÑóUQVn´Ig«|ë§sï#³t—N×~²X4KÄdÀ„¸R$1šy“pZè ÏБU°<éSgS:Xb_fãC…ÛG]ÕéºÙú×Ùº.󗌜²¥8ÂX·‚6Õi+h¨‚YÁÙ%+8^rÈ -:K¶­ þß[ü?²© Úä‚´¨ÎXA ²‚ÏœàJµ§„ Np °ù2Zä.0·Åc1ÄS.Åyùª;úŠcB©Ò] ÑhœˆmZNI¬±Ç7†T` ûs@¬‘(yœˆð©ODvœo!Îcz@j‹&Ú¯û¤v=dk,&R%ú8iyØsb `5ŸŽX³™]pADˆŽàËñ3ÂÍbI¡ÆÙ¶¬ƒá}µJ+IŸàÖE:Ï·ËðÐSí'Ãîñe ¨òm•þE¿Ú—bÿÙ¤‹ -W—«‡cv¼Ûí†t’ïl•n—R„ÄR•n€Ü­¬x3ÏÝfU±ÿæ§êÌ Pœö5u—]Q–ùtIpAIBi€6ÀÜ3>V9€ ¦UðƒbçÍõWgbÍà¤Sãõ€ùFÜ@Y¡cÖSÆy;6jŠ¹J€skD¦Y€&þ:-‹u]ùÙ]Z­ÐìNF Åô…èÒ¦:]*]æCÑ…“¨`ÈólZ/£5Dÿõqtáทäk¨ìF ˆRRG§ 3KâOó4ÛÛ–þÅsC'c$ âk;>S&”\lx_ý£TD+!Î,•ßâ+KköV¢}:C¯Ã›zdª3u`Ì/CõD7xxšE3<7PFÏ7!Qí´>=-BOË^šºBhìtå`ôÌìÒÃâArìâ¼ ¶¨Î˜` ²&¸8‚9ž‚nÎ.ˆ–ìÀxÈDÜ]òcÝ/ôB8túè=\x/Ýס¼À7'Vž ”[¸ÙmQ…Ší4ÿ+Ã"ø´^)ÀšÄôÚ¢:£×@eõº€&‰/,ˆ–ìÁG£uoÉ¿I¯Mýæ fÁž×Þb×EðBupõˆD7™¡¬æÙ~?ätŠ˜ÙÉCZeÄù3j>¢@dOh3|%AÂÀb#ƒ43Ÿ•ª!:«¹!*QIG.À,t\ïm§EŒ]ÇEŽ7`Í6»Ã\]¦ËÌ ç‡˜ˆTQEº,±£LC–·¤þ™»Ií™>r8¨Ðg -ÜZp+h¦“vÿ Ç(&L6ll°>ÅÆ|/€"Å~~Ñ.ò)!,œ„²×áøj‰4EO7ÅuŠžÍ¬úú=@Ã×ó* y¶è§ÜÁ«¢ç¼÷O7}ÃäF*9f|îòü¥f)‡bõ?Ô*ŽQ›å±s…‰ü°2îìýÝû¾ˆT¨bó7ŠØp¼ ¢ÇVJ÷D¼½{óéݯð2Š÷—­ËÙ>Ÿfó&|¹R pÁ¬þ•—³Wà¨dõïïÀ4§‚`DPv)Úµ¨Î„»@eãÝö"ØüÇlW—Ç/&†ùYɪÑ:.O í‰vãP5€P3©û"ã7Êh@yXaâL€Ï„&Æ>&]-„ÒÏ™›Iç/é¶rAØ®¨[óÝÚÝ<~*ý{O`Á>+wÙ,Çr&›µ‹ÑJiL/aP¨—ƒKÑ‹5¾o Q»Â `…ý~F -µåÆu|pzåÛz3µ‰_ºÝ -Êïfv>¾dÛÊM¸”ƒÙá ì;Ås« Œ,wàJíýÂÍäžiîW«·¾û$¥G ¶%ߪèÛ»h¹f­¾î"4š=Èìº[áÜ›nã:´ßåàa·ó“îÈ5ĶXÊóîئ:íŽ •uÇÝEwÜûêØ)1R—+ ÈÕ…6yÜìç3mû _? B¬å_½Œqìa¢Uc•Vp¬ù¬<ƒÚ±@%?€vü6i €œ8ÔñÁ²¯yu¤pFá5@ÁjpÊ\/üRºÆ~P>‘ð!rhìSÄg>»÷(ðòÃðF;é"&$l‰vjØÖg)Æ@/2ƒ²K_Å>´T£bÉ|cX Rü‡I3€óQÌÇwGª¦‚+3b -JÅíâ£?G(d’GÕÛÝ´`'^Ýoø趀=ÚÛ -œ£6k»/½ý ¶h¨qí¿A<¯œ+馟‡c7ñ»³ëÊk‘áÙ¢wæ¾@hTµÿˆŒï$nbžM¿L¸ÂV+ä¿Œ/75ðF‚oî%¢5 þM1aÊ¿7Ê6Disè”â­vᚺˢ®ê}æÆûl½äzd°°Si›ÄY™00Ÿ`[÷ð‹ƒóÈM  "ä¹®$Ú¸!<ôù ÖPÙ V $¦„@²ÐC=áŽQK o1j/{œÕ€t<¢úKpÐŽx7.­6Cðx¸×ˆ¸\ˆïiaCâ“Mê[õÈÖa¤b–•¥ëupÿ ÌŠÍÆÙ-ܬpûìýl ₧µ—sš-½B¸à¹ÛB“I¬twÀ_“î~@}œúÕ ”ÅøS—C M€ûá_Ô~1$ñGæD+PPð(ìÿz¡psŒ‰¾èÍooŽeÿ/…À©ºendstream +ÙËÚ6›Åêêêz|UQøg#£‰éDE™Í6Wt´„gﮘ§‰QÔ¦zó|õê­Ð£„$1GÏ‹/C¨1lô<ÿmüúññîáöþ×IÄ¿!“HQ:~ÿúáÓëŸÝÜã$áã×ïîžàVJ‘F²˜Ž^¿¿»üñüÓÕÝs#N[dFÊòçÕoÐÑ$ÿ銑5ú7”°$á£Í•T‚()D˜Y_=]ý§aØzj_R†(Ãõ€81F¥xG *!±àÂ*áöîéæãýãóý‡Ü}ç 7:Š¸&TIm‰·é&›{2Ñ"’HI5#U^N"!ãqê.·Å&Í·nü Üèé[Ye7þ*zûðæ&Êlÿ’í'ZŽ¯aBÓñ.ÝWîQ±p×jå½¹¸u£Ä]æyYíói]å…_u±Ÿ03.üj÷O7ÄÞ{7Ø–"í¢°›¨Ñnj»(ö›Ô1EÛW+`×nTf~êãÛ›ÒÀÄu3”~˜nçÍœ"vuÐ8KˆÐLÚeYevx)>g–ÞŒ¿äÕª¨+÷$µÂ/ëM¶­ÊëSdJatìÏçä)‚­išxª/ùzíø;ݤ~i¿ßd<Ïi½ö2ÌŠíï”òe½oTdÆ8³ÎÜJ²#¦D +*ýR¯²jöÊJE€Ïb@4 ãé¯Ý9IÅÀ4yï ÚÒ¢†¿¹A¾Í«<]»›yZ¥ý#XƒÙdþLh8ø³ÎöyV’F©-w‚“ !çÆ®ûÁúÐÓQH  #œ˜ Ç‚ G1Oµ©‚G±† +×dÉD! ?¿d X²­xˆ—‚%ª»ä§ÒÛ÷ýã‹ Þ°öŠÎ^‚óEÏCVEY¹Ñ&­ò­ŸÎ½ÌÒ]:]ûÉbÑ,“âJ‘ÄhæMÂi¡'dg—l¬àxÉ!+è,Ù¶‚øoòÿÈ +¤&h“ VТ:cÊ +>s‚+Õœ.8Á1ÀæËh‘»ÀÜÅO¹çåk¨ìè+Ž ¥Jw%D£q"¶i9%±6zXÄßRìϱF¢<Häq"§>Ùq¾…8é©-šh¿î“Úõ­±˜H•èã¤åaC̉1€Õ|:bÍfvÁI!:^€GL,ÇÏ7‹I$…gÛ²6†÷Õ*­p$}‚[é<ß.ÃCOu´{œ »Ç— Ê·uVúýj_ŠýgG.*@^]®ŽÙñ +4n·vÐI¾³Uº]"HKUºr·²âÍš$¾°d X²Ö½%ÿ&½6õ›'˜{^{‹]Á ÕÁÕ{ MÜd†²šgûýÓ)bd'IhI”çϨEtúˆ‘=¡ÍPð•e‹uztŒ ÒtÌd|Vª†èX¬NH䆨D%¹³Ðq½·1v9Þ€5Ûìsu™.37œb"RAFé²ÄŽ0y YÞ’úgî&=´gúÈà BŸu*pk À­ ™NÚýƒ£˜0Ù°±Áúó½\ŠûùECºÈ§„°pBÊ^O„ã«}$Ò=Ý×)z6³êë÷U _Ï«,ä Ø¢;œrWW¬ŠžóÞ?Ýô “A¨T`ä˜ñ¹Ë󗚥Š=ÔÿP«4j8Fm–ÇfÌ &BòÃʸ³÷wïû" +P¡ŠÍß(bÃñ‚ˆ[)Ýñöîͧw¿Â_È(ÞC\¶.gû|šÍ›ð9PäJ³úW^Î^£’Õ¿¿Óœ +v‚AÙ¥h×¢:î•wÛ‹`ó³]]¼˜äg%k¨Dë¸<5´'ÚG@ÕP@Bͤî‹xŒß(£åa}„‰O0>˜û˜tµ>H?gn&¿¤ÛÊUx`kX¸n nÍwkOtóø©ô_4î=ø¬Üe³Ë™l>Ô.F+¥1½„A¡^ .E/Öø¾1Dí +3€öû )Ô–×ñÁé•lëÍÔ&~évƒ´(¿›Ùùø’m+7áR> f‡ƒ°ïέ.0²Ü+q´÷ 7“{¦¹_­Þúî“”-Ø–|«¢oï¢äš]´úV¸‹Ðhö ²_èn…swlºëÐ~?”ƒ‡ÝÎOº#×Ûb)Ï»c›ê´;6TÖwÝqWì«co¤ÄHu^®@4 W~@ÚäqO°ŸÏ´í»j‚|ý,±–|ñ@u9 Þ/z(¾ãXýrªùZrèuÚÅìH‰Óg*%ÑB› gÚ¢:s¦Êži9PLiª8»d X²WLé˜ÅÝ%Áozû<ô2Lı‡‰VUZÁ±æ³ò jÇ=–üÚñ{Ø@¤5râPÇ[ȾæÕ‘Â…×s¨Á)s½ðKé^ûAùD‡ȡ±OŸùìÞ£ÀËÃ=줋˜°%Ú©a[Ÿ¥½pÈ@ Ê.m|ûÐRŠA‘®1¬)þÃ$ŠÀù(æã»#ÕSÁ•1%‡âvñÑŸ#H2I„£jínZ°¯î7|t[ÀžFímÎQ›µÝˆÞþ† [4Ô¸Îöß žWΕtÓÏñ›‹ÇøÝÙuåµÈðl Ñ;s_ ´GªÚDÆw71Ï&‚Ž_&\a«ò‡_Æ—›x#Á7÷’ Ñÿ¦˜0åß›e¢´9tJñÆV»pMÝeQWõ>sã}¶Æ^ r=2X‰ X€©´MâǬL˜O°­{øÅÁù@ä‹&Pò\WmÜú|k¨l«SB Yè¡žpǨ¥†7„µ—=ÎNj@ºNQý%8hG¼—Ö ›!x<ÜkD\.Ä÷´°!ñɦõ­zdë0R1ËÊÒõ:¸ÿ…fÅfãìnÖ¸€}ö~6qÁÆÓÚË9͇^!Üp‚Üm¡É$V:;à¯Iw¿ ¾ƒNNýjÊbü©ËÀ!Ð&Àýð/j¿’ø£s¢((xö½P¸9Æt_ôæ·7Dzÿòú©xendstream endobj -1869 0 obj << +1944 0 obj << /Type /Page -/Contents 1870 0 R -/Resources 1868 0 R +/Contents 1945 0 R +/Resources 1943 0 R /MediaBox [0 0 595.2756 841.8898] -/Parent 1841 0 R +/Parent 1932 0 R >> endobj -1871 0 obj << -/D [1869 0 R /XYZ 85.0394 794.5015 null] +1946 0 obj << +/D [1944 0 R /XYZ 85.0394 794.5015 null] >> endobj -1872 0 obj << -/D [1869 0 R /XYZ 85.0394 751.7338 null] +1947 0 obj << +/D [1944 0 R /XYZ 85.0394 751.7338 null] >> endobj -1873 0 obj << -/D [1869 0 R /XYZ 85.0394 641.4745 null] +1948 0 obj << +/D [1944 0 R /XYZ 85.0394 641.4745 null] >> endobj -1868 0 obj << -/Font << /F37 747 0 R /F21 658 0 R /F23 682 0 R /F39 863 0 R /F55 970 0 R /F53 962 0 R /F62 995 0 R >> -/XObject << /Im2 984 0 R >> +1943 0 obj << +/Font << /F37 779 0 R /F21 690 0 R /F23 714 0 R /F41 910 0 R /F55 1010 0 R /F53 1002 0 R /F62 1035 0 R >> +/XObject << /Im2 1024 0 R >> /ProcSet [ /PDF /Text ] >> endobj -1876 0 obj << -/Length 2377 +1951 0 obj << +/Length 2379 /Filter /FlateDecode >> stream xÚÅYëÛ6ÿ¾…¾Ub–/ñ~Ú\6¹-’M.qp´ý µ¹k5¶äZò>þûr(Y²eoiq“Ôp8œ×o†Ë ÿX’)¢,·‰¶’d”eÉ|}A“{øöî‚EšiK4íS½ž]üøVèÄ«¸Jfw=^†PcX2[ü’¾&šL€Mo.?\½™L¹”B¥—Ÿ>]ݼ¹þÌ3 -D@Biúáòæëå{\û4±<½|wõeòÛìç‹«Y'N_dF…—å‹_~£É$ÿù‚aM–<„f-OÖ2$“B´+«‹/ÿêö¾†­c*Ü%”N@6"hÆþ̱ÂE˜ñci2µ‚H#íi^¸¯8lw YM #™µY2U:#šõ,ÄE±Yƽ‰Œ&\žè È,×ÁDÿö”–dJ2O{2 ßi ¸œLO?‡ÿoà–^wcž¾;´QÄ‚uM51™ ºJþ-XÆDýq¸ý^+aáÇëµHÞTpǤÍÈxÚ箩xÏ`,à®'†¼ælYÔàZV§Õ¦)ªÒUZ/«Ýjë·wµ‹+E¤šWåï»rÞnÓécÑ,qÔ,êOØžœKÂ-ŒQÓÒ Å” &# -õj2”¥y”t¾ÜVUS”÷~;øž°„S¸gRؘÃ&ÒͶš»ºÆÉv2eYº+K¿5¬äíàçG<]T®.hpٕ˼œ;œÔn¾CEóŒKþÞþw]ÕqGý\7n]ÿ3A[-x§FÙ0ú'À$ŸÁó˜’(¡Tó¨¼ë¯4£þc# -ƒÈÏ$e‘>XSgéÂýJ)/ƒÉ`š¯V•?õ1|V^=~¹SŸDëÁÕxã‡båî]ÜÜTøÑÕó|ƒ7œj/…GF€ÀŠwÀñïy±"‡¡!XÐX“ôõûb_@P+ ‰pºÏ_ß—™Àõˆ1Úz‡Å{Œ -Ì_@AΑ¤,ºœÃFP¡£êÇC–õãc3Í A¸=ÔžåDZ£’þ‰GrµD#r‰ÞiV©í\_\³+Bìso{”±¿Kr¢ûŒ¬¹"†Ù6yæw P–ój½Y¹Ïa¾ÙFw‹GV·Í}¨Cài½›/ñf‘ηfR—7–F>‹Õü›ƒ…&5˼Ám«¢´ŒÜKt`“)áæˆ𻩶M}ä¾-Î(jSÒü%(ND„9©G¡Ðm9…ƒÒ‚wj«_ÀÁ j+dTp3†ƒ”d‚·9úcÀ¾Y@½«S¨— Яߎ¨Çe#ÒõÇ'PŸA½>ç3¨—i$ªPbŸ·¥Jß’1šîž^ż:pjðW¡Z§.ó58Áqö…óLë½ë×ÈÚ§þ0ø6á4 ®ž¥¥[ý07Š4=óÛb…póµ›ÞõÚOuH³~y±­68‚,ŽƒOÑm9ø˜êÀm²6Ü#upžænÓà%T6ÝËàW«Hb8/®.<‚ù e(õ|9ÙÖD8=X Î ›nη®É‹PUÄŽ½oQü<[à h„Ix‡ß­[ØB.‘Ò%¶Úyyß.†wmÚ6ün×춓•Ëk‡…Ñ)´é{Ôwùè߀5·§Š›~¢ì¹}›)¡ôm†Ä†öúÝÍåû/#É,Á¡ù‘ ¯½9•!Qí Gu¸Ðõ¤PpÁ  ¹/s_jøÝënåoãÎøŒÆã3 -Ïh °Â=˜à‹/ß ™¸ù)ÊÚéXsÓÖzÛr1k»¡\†ü‰ö¢Kä½úâ|q¸¸0„sÊÎ#WŸê4tuTÑ ÿüúéèaCj;lK4rì”('TCÏ:8÷m?hq Vb¡Úd¢ezZUÔ!øKªêQQUKUu}3ó0õ -……ÙÕçGˆ]˜5Zž—¤£e ¾ Ò¶‚hʲÜEè\Tåy%¥$ Pæ_X4±‚·©Ùõ•^w`Ü*½våŸtB}õ¿Â1±æÚ‡ž?½—"Œ‹H´+»×QÒÅU/gP2D[ÿññæíõ»¯Ÿ/½Òg×o^γ¶IØ“Y°§yQ°‚£)SÝûoUzQïw˜n|ß!R¿² -‰DL‚µ¦ªp€ÏiOøµ‰‹ WÏ·Åm»§lW¡›YáØëÓ[€ø.˜zÜ÷”ñmÎõ¹lö‚àáÒ÷N>ÅÝw3L [؇bÑ>¢=O ×—ƒ¿—eˆ9x}DPOmñçr±.Ê¢n@U4ëgwe/Û@þ—»|5¢\¦Œ¯U¿Ó:4?¤B¸÷ º¦Šë÷§ÿê柠ÄhÑL;Îßý¹ý_¥†–ÎðñP…ƒÎÆQ(/†ÏÊ«Ç/wêñ“h=¡:oüP¬Ü½‹›› +?ºzžoð†Sí¥ÐâÈXñ8þ=/Vä04¤ k’~ ~_ì je!N÷ùëû2¸1F[ïp࢘cQù (È90’’E—sØ*tTýxȲ~<0bl&¢y!·‡Ú³œHkTÒ?ñH®–hD.Ñ;Íj"µ=ë‹kvEˆ}îm2öwIN4p?ñ€5WÄ0Û&Ïü®ªÀr^­7+â9Ì7ÛènñÈj㶹OuÈ<­wó%~ÂŒ ÒùvÂLêòfÂÒÈb±šs°ÐD¢f™7¸mU@”–‘{‰l2"%Ü|àÀQ~7Õ¶©Ü·ÅE aJš¿Á‰ˆ0ç õ(º-§pPZðNmõ 8˜A a…Ì‚ +nÆp’Lð6G Ø7 ¨wu +õ2úõÛõ¡ lDºþøêñ3¨×ç|õ2 DJìó¶Té{@2FÓÝÓ«˜WN þ*TëÔe¾'8ξpx–i½wýYûÔß&œ¦ÁÕ³´t«&àF‘²g~[¬N`¾vsÀ›¢^û©iÖ//¶ÕGÅqò)º-S¸íAÖ†{¤ÎÎÓÜmœ£„ʦ{üj5IL€gÙbÒmQ.Î!’ì!<\8çø3”m"@\M¦3’– Ô®iwUS¼03>ÙdjxcD1_Co]]í¶´¥Ðéëâ„bÒOúµ¼ózhÏÛ•yãVÏà4…ì"ÕšPùÍk——‘+æV6 +B‚šó• D'ålP٠Ϫ\=ÇZFû,IõQÁ€"Ã=¾ysr›>.]9âµ,’Yù²× +ÃM¯fð,ÛúÈÏ 7°zàÀø‘N˜A/˜_[å>¥gA‘à,Ýú Dít³uon}xr>4k`•ß€5Õi]`YF=ZÇ~(ª]ÄçÅÕ…G0¿¡ ¥ž/'Ûš§ÇA‹ÁyaÓ­ÃùÖ5yªªÀ!€Ø±7Ðá-ꀟgk8‡iAþt}ÔOàß +ÿ÷I*_kP{¾@ê¨BX=jFAª‘V%}fGG¶D#GöCG{T£G~vóýCÆôƒ·­±éI¹[ߢ·QL\~àžŠæÈŒíÕ!·Ì¼¤ž=ÑíD¢ œ§±ê‘ åcÛLäó¥›ÞƒŠÆ8dxÏéœlѱpb€„UéÞWyTÍ"orÝ…ª­ZT”` ¥¥•ûà8§)Õ^±(CwÒ·VØÃêîàÛÂÝå»U´ïCáýûÊÉORŸÂÿÜëÊ‹ž†f]ü/¯qéâR-ÔAL¼PÜ èŒUêï}äÒ­„øë9úœÏ”{BA ÝäÙþ‘Ãסö ;Ì2|ïð¿þ½Ã¿À¸rüÔqñx£»ø¥$pÈ d¿úúúæ Ž,þ,«&€Lnåûšzø>ÛæE Y^ÇG‚0 ï0ð»uë[È%Rz ÄV;/ïÛÅðN£MÛ†ßíšÝ¶c²ryí°0:…6}ú.ý°fàöTqÓO”=·o3%4€¾ÍØÐ^¿»¹|ÿe$™€%84?’!áµ× ‡¢2$ªô¨ºž +.$÷eîK ÿ±{=ãÑ­üâmÜŸÑx|Fáá­ÁV¸³|ñå4Ó7?EYû knÚZo[.æcm7”Ë#Ñ^´c‰¼C_œ/N†pNÙyäêS†®Ž*äŸ_?=lhB-cçm‰FŽ€å„jèYç¾­‚âç ".ácªC¬#Ô@›L´LO«Š"IU=ª3ªj©¢ª®of¦^¡0°0»úüáÑ¡ ³FËó’tT#¢ Ô—AÚVCY–»‹ê±<¯$°”Êü ‹&Vð65»¾ÒëŒ[¥×®\à“N¨¯žãW8&Ö\ûÐó§WãR„q‰ve÷:Jº¸êå êQ†(p« â?>Þ¼½~÷õó¥WúìúãÍËycÖ6‰{2 ö´#/ +Vp4eª{ÿ­J/êýÓï;DêWV¡#‘ˆI°ÖTð9í ¿6qqáêù¶¸m÷”í*t3+{}z ßSûž2¾Í¹>—Í^<\úÞÉç¯Ø¢ûn†©a ûP,ÚG´¢ç)áú=§Ïsðúˆ žÚâÏåb]”EÝ€:ªhÖÏî.Ê^¶ü!/wùjD¹L_-ª~§uh~H…pîtL×ïOÿÕÍ?A‰Ñ¢™vœ¿û/rû¿8J -áã¡ +15Œ£P^x½úQ¢¢P¥ƒŸËþ_á Æ•endstream endobj -1875 0 obj << +1950 0 obj << /Type /Page -/Contents 1876 0 R -/Resources 1874 0 R +/Contents 1951 0 R +/Resources 1949 0 R /MediaBox [0 0 595.2756 841.8898] -/Parent 1841 0 R +/Parent 1932 0 R >> endobj -1877 0 obj << -/D [1875 0 R /XYZ 56.6929 794.5015 null] +1952 0 obj << +/D [1950 0 R /XYZ 56.6929 794.5015 null] >> endobj -1878 0 obj << -/D [1875 0 R /XYZ 56.6929 285.8256 null] +1953 0 obj << +/D [1950 0 R /XYZ 56.6929 285.8256 null] >> endobj -1879 0 obj << -/D [1875 0 R /XYZ 56.6929 148.5666 null] +1954 0 obj << +/D [1950 0 R /XYZ 56.6929 148.5666 null] >> endobj -1880 0 obj << -/D [1875 0 R /XYZ 56.6929 77.061 null] +1955 0 obj << +/D [1950 0 R /XYZ 56.6929 77.061 null] >> endobj -1874 0 obj << -/Font << /F37 747 0 R /F23 682 0 R /F62 995 0 R /F39 863 0 R /F21 658 0 R /F55 970 0 R /F53 962 0 R /F63 998 0 R /F47 879 0 R >> -/XObject << /Im3 1108 0 R /Im2 984 0 R >> +1949 0 obj << +/Font << /F37 779 0 R /F23 714 0 R /F62 1035 0 R /F41 910 0 R /F21 690 0 R /F55 1010 0 R /F53 1002 0 R /F63 1038 0 R /F39 873 0 R >> +/XObject << /Im3 1148 0 R /Im2 1024 0 R >> /ProcSet [ /PDF /Text ] >> endobj -1883 0 obj << +1958 0 obj << /Length 2318 /Filter /FlateDecode >> stream xÚ­Y[oÛ8~ϯðÛ:À˜åýò˜&™NÓ4›¸‹:}Pe:"KKJ6ûë÷P$eI–³QäÑáÇÃï\H“†?2ÓaføLŽ&b–nÎðìÆ>‘ ³ˆB‹¾ÔÇåÙ‡_™šd$•³åº§K#¬5™-Wßæww×·W7ÿ>_PçÑùB`<ÿ|qûõâßwwnèüâÓõƒ{…ïAH;1‰ç÷·W—çß—¿Ÿ]/;4}Ä3寳oßñlÀ?È-f¯ð‚1†Î6g\0$8c±'?{8ûg§°7Ú~:e.4”ËÙ‚q¤%蘴FXÀºJ$e¸ž²S”rvú`ëôC‘lì -¥e±¯š(ŽfdÖW} “:DÍ=¢`Ts1„°|²~GVv4yí_ÍŸÓÇf—ÔYYøNד[t°7ÁŠÄ•ïX©'uÂJQªµÒK²û°kŠ`©m¶:0”¡°"aNcè¤A e’DÑ!ŠiCmwçDÏËÔVÕpíšAFêT/¡H(¥Saï-××þË?¾ø¯xßÅð FcÒïØý¯—ç°<G`a’>|Ž‘äRÃgNú— …Ο }uüÿ«Nü„ºÅtÞnì"}²é³óƒ?±Àþ‘Ãáÿ–…ïŠU:îË_Û±ÕjRŠÓ?r¸¨a.¥Û³°øãÍí•ß,ölµÉŠ¬ªÁQÊﺷkëg/ÒÀ™ÏIÑ$ù„9ˆÔˆJ˜ÅÛãi¢PKlŒ²_—¿}¹ŸÐ9âËMQÛ]aaÞªÚn*ÿrYU¹«³f³Ÿ—#Æ% z8AD2OSˆÐ°³¹3¸ûÀI0ðXA<¢[0í<aŽ Û¯½£Pª|ËmŠoUv÷bw]ª½å¾£©³<«ß¦Œ„õV”Û*«ÆqBB.`TÍ8Õ¦ã)àTphŸŒc}>+š‰8ÖIí.Á€ß?üDßN’ ‹Ò@…ªlv©]$«Õ‚‹ÎÁ œË(þ=jN'4Ã&i qÌ‹:îg‹u–Û µR %«}~Wí³};¦“+¤)VcÕ»:5Â^SÊÉXãvB#ð^COÞñ'S†Œ«0FŠÿÕµÞ&¦Ú 1&%Àj9àL‘Ÿ©`(2ZëéúeÑi\ôU¶L@£\˜²ŸÙAô)t´tHML09\zZn6I±šŽK\#A\ºº~¸¼¿¹[Þ|¹í¾šN|ï‡!ƒB–í{ÂÆ8àóºMÆÐ(·¶+QÜëÚ?ÿaZHŠCˆ…hÄç7uh@CeW¶§ù5å6(šf3lˆt>ïeb¨ -J“0Ýkæ …ÃK¶²+ß“Å5ä¡£Í5.Ì`Œ„À42Øo¢Ï1¹M*[Áª8Óó›õx‘æ4‚?fq†˜ŽÏHÃÒKùÜâƒjý5«Ÿ|wQúžÈ¶3Ï -ë»Ë­Û ¢MŠðLZ´ÍÆu©˜aP_û¶» :ƒœTOÎ=ÛѪYvoAÝÚ[j^Êð(9×±DƒMuîmW1´8CÒóˆ¡Ñ‰'/I–'?òðºÇ?’ÎB^¬M“Ø@1‘'Mk „u$ßlš"K“ÚQ‘) îZ-R¦d ´ëŠyҵˮ•øÇòòÎ˃ç6­³s2/ °:Ç -¾,VYñè%÷¦i?o`¦¢nA¬õÈ¡#ø|•=fuâÒ³LÙc‘ÔM¨¼%9ƒòÃKzkƒTÚìBuTû@_Eˆ°Ãcÿƒ€@µäïr˜c ÚZýâE–·•à„Wø™.¶\•>;æo¾Õg™ÏÅ£à¸q-ÙÐq“ü±Ü 7 Z²ÖÛÜó·Ï—‹ÏWÂÍhÈüõ)KŸüHSÙ “øGõä9èænßmêßkÿîâ¡{Ú$ª°E+ÊÛé:<§ 9R°c’8éDD½ UÅ‚¯ÏƒåÃͧEU¿å­*=6AÛ·v€I'Ôû°á^<ì¿[ÕAGéäé¥êHaüUÿûj ü±?¬ð"ÏMB¯<ýœ»wõfÒ§lŠÎMSÉ1¼Ïclùñb‚Lå~­ ¤Ðæ×ôïçþ¨qÑWyxuiÃ`nö3‡Üï¡åk8Ù×åÈýtyèC.;ù*í§Âœ[‹‰¥šß¯Äcîºo`áírdø„ôBeÐUŽF~ã 9Ik>¤Íç&¯³m¬7²¢ª“"µU¿ºc[Çöº«d¢£&yî™ï\µ®ÛtÞƲuˆJe› û.}s÷ÂG% tÉ ¤g‹Vdo [½ñ#L™»ó=MÊžÔ ^F©–šé51”|äÈ!vÀK ¦œÆ×IMÞÐ8 NÔ$°ýÈ9{ W*U¼ÇNb“ˆ™ˆˆ®3FD×v¬8ê_ܾÃöŸ‡KÊ_¦N¸vF‘ˆ²½ƒv¡»»‚»Ñàžá(´qÛÃNs¡'tœ -Q¨eÂó»Aªï0 çp*ü$²NèÚ`cáü§ `;Ê㮺¦.E:áX†¹2=PËdÊBFž. R¶ßt7Ð:;i:Nl:ijôÁ¦‡‚e„M)¤°ÞßJB L 8Ì 98S 8I%û3ùXUR ‡±ð -0ºÑ$b~Í\]G‰òu'E“äæ R#*ao#¤‰B-i°1>È~]þöå~Bçˆ/7Emw… „}x«j»©üËeYTå®ÎšÍ~^Ž—4èáÉÇä6©l«âLÏoÖàFšÓþ˜Åb:6[Ô¤b†A}í?Øî2è rþQ=9÷lG«fÙ½uko¨y)ãä\Ç 6Õ¹·]Å<Òâ IÏ#†F'ž¼$YžüÈÃëÿH: yi°4Mr`ÅDž49¬Ö‘|³iŠ,MjGE¦D0¸kµH™’Ю+æI×.»VâËË;/žSØ´ÎÎɼ,Àê+ø²XeÅ£—Ü›¦ý¼™Šº± +Ô †ŽTàóUö˜Õ‰KÏ0eER7¡òr”ä Ê/é­ Ri³ ÕQíG} #ÂýÕ’¿ËaŽe4h?jõ‹{YÞV‚j\ágº8ØrUFø옿ùVŸef`<‚ãJĵdCÇMòÇr&Ü€jÉZosÏß>_\.>_ 7£!óק,}ò#MeƒLâÕ“ç ›»}·©¯ý»‹‡îi“¨Â­(oC¤ëðœ‚FäHYÀŽInà¤õ‚T ¾>–7ŸUý–·ªôØmßÚE&UœPïÆ{ñ°ÿjlUq¤“¤—ª#=„ñTýï«-ðÇ:ü°Â‹<L4 ½òôsîÞÕ›]@HŸ°I(:7M$Äð<±åÇ[ˆ þ1•ûµ‚’BBCr˜_Ó¿Ÿû£ÆE_åáAÖ¥ ƒ¹ÙÏr¿‡Z”¯ád_—#ôÓ塹ìä«´Ÿ +sn-&–j~¿Œ}¸tê¾…s´ð¾á0³ñ©ºŸÊWßïÇ[Eu’Ö¡ó)ˆÅãë/h íNi + ÷íWŸªÝpç¥Þ•Ã2,것Û÷¶‘®@kò0ØTÓ·xX8}ik¦‡c÷+°áèË•NÄsaêDâEÜtÝDôÃ#AÚvô 2¸uy%Åæ²Nd mX8 $1¥=l_+;QfS å¦'H½à%L‹xêHÚGb.¥í÷ŽŒ©õN‘&AÒG. Ÿ^¨ ºÊ‘ÀÈoœ 'i͇´ùÜäu¶õFVTuR¤¶êWalëØ^w•LtÔ$Ï=ó«Öu›ÎÛX¶Q©ltߥoî^ø¨¤.”ôlÑŠìma«£7~’)sw¾§IÙ“:ÁË(ÕR3¢&†’9Äx 4”³Óø:© €Ãç¢@£Âi‚º#€¶9gôJ²Š÷ØIL`1ÑuƈèÚŽ5Gý‹ÛwbØþópIùËÔ ÃÎ(Q¶wÐ.twWÐc7Ü3%ƒ6n{Øi.ô„ŽS! +µLx~7Hõï4àNå‚ŸDÖ Bl,œÿT lG9`ÜU×Ô¥È@'Ë0W¦GJc™LYÈ(ÐÓ¥AÊö›îZg§1ÍAljM'B#M>ØôP°Œ°)…Öû[I(I¸‡y4gb*'I£d& ¡ÊA +‚á0ž@F7šD̯™«ë(Q¾ƒ'äÕ•oµqžýŒë‘ý³Q±êë}áGöµ¥kgëýàDR E~ÖË á1h­J€eB—jtB°ÿɪûŒ än]&øŒ»òâoÿB¶ÿ»> endobj -1884 0 obj << -/D [1882 0 R /XYZ 85.0394 794.5015 null] +1959 0 obj << +/D [1957 0 R /XYZ 85.0394 794.5015 null] >> endobj -1885 0 obj << -/D [1882 0 R /XYZ 85.0394 686.1157 null] +1960 0 obj << +/D [1957 0 R /XYZ 85.0394 686.1157 null] >> endobj -1886 0 obj << -/D [1882 0 R /XYZ 85.0394 612.8143 null] +1961 0 obj << +/D [1957 0 R /XYZ 85.0394 612.8143 null] >> endobj -638 0 obj << -/D [1882 0 R /XYZ 85.0394 575.0344 null] +670 0 obj << +/D [1957 0 R /XYZ 85.0394 575.0344 null] >> endobj -1887 0 obj << -/D [1882 0 R /XYZ 85.0394 542.5339 null] +1962 0 obj << +/D [1957 0 R /XYZ 85.0394 542.5339 null] >> endobj -1888 0 obj << -/D [1882 0 R /XYZ 85.0394 507.482 null] +1963 0 obj << +/D [1957 0 R /XYZ 85.0394 507.482 null] >> endobj -1889 0 obj << -/D [1882 0 R /XYZ 85.0394 443.2139 null] +1964 0 obj << +/D [1957 0 R /XYZ 85.0394 443.2139 null] >> endobj -1890 0 obj << -/D [1882 0 R /XYZ 85.0394 372.8773 null] +1965 0 obj << +/D [1957 0 R /XYZ 85.0394 372.8773 null] >> endobj -1891 0 obj << -/D [1882 0 R /XYZ 85.0394 191.4417 null] +1966 0 obj << +/D [1957 0 R /XYZ 85.0394 191.4417 null] >> endobj -1881 0 obj << -/Font << /F37 747 0 R /F48 885 0 R /F23 682 0 R /F21 658 0 R /F47 879 0 R /F39 863 0 R /F53 962 0 R /F55 970 0 R >> +1956 0 obj << +/Font << /F37 779 0 R /F48 925 0 R /F23 714 0 R /F21 690 0 R /F39 873 0 R /F41 910 0 R /F53 1002 0 R /F55 1010 0 R >> /ProcSet [ /PDF /Text ] >> endobj -1895 0 obj << -/Length 2131 +1969 0 obj << +/Length 2135 /Filter /FlateDecode >> stream -xÚ­YÝoÛ6÷_á·Ù@Ìñ[äcÚ¦[†6íw°îA±d[˜,y–œÀÿýîDR–d%ÙС@MNÇ»ß}ðŽaS -ÿØTi¢-·ÓÈJ¢(SÓÕnB§x÷Ó„yžE`Zt¹Þ,'?¾ÑÔ«¹ž.×Y†PcØt™ü1{C,™ÿ¹üåÇ÷Jtx9#š ò‘éËÝ»·äí§»÷Ž³'•b÷¬×Ÿ?ßܽ»ý}¾àŠ‚ôùBQ:ûx}÷õúƒ£}ž[>»þéæ…Mn–­][hÄß“?þ¤ÓLþeB‰°FMŸàf-Ÿî&R ¢¤’Oî'¿¶;o›OÇ°“ÊÅ¥ÑÕã31L‘0Äj[„9C8p!"‹Êã«:œŒ.ÀQ´*=<¦‡!Œru„)æy.õêy“шD}Åλ‚]vd’2x4«ÀoÖÎêmêE¼ó«òà~ã$9Ì™™¥•ç-׃oü^Íúi›­¶n¹‹ëÕ6õÅ—¬U×é.-j÷˜±«²X Ó…V`ŒXሪ£”oŽ‡¸ÎJøRÞPò×l¶.ƒñ]ˆüÈ›~(’Õ>œ ÏQ5»];¡Eé6 -V lhÇý>ÏÒÄ=9•˜3 «r·‹‹ÄQó¬H¯æ ÉT``³mYÕŽ]àNŽ„\ LŠ>IºŽy½hÁ…D\åñ±JݺA~²°(÷ZåºnÀwë3ó%€\@ºIñ -„–"à nì» -¥Wáú)Ës·zðД!!ór³ÉŠÍó 0°@Qó -®@\ §ñTv®ÿ+= Õ2š¨ˆF=µ^;¼¡cÆîExiBO1c‰RV÷MÈ’Ë£”Ådô2l-×nýãÁjÖßõkã:íë5.pê­ËVMQzÞmüèI›´H±ßØñ¶­¥ŸVž Êyî -MU_ !(n0•¼û@cÞ7_ÉÈû@j´fŸ§ WMYrãz tŒ*jЋ6h¡ÓؘÃ`⤊ý‡Qñ*lž”óm3¬#\'»¬È fÇu°äKºöh+ÿÙǸ8h¡`'ÃúN àæň0«Qñ3¬é¶ÕàcïB›#¦Â Rœ™8[†7Û4ß»•?PH«Q›VPUÖq8dR’ˆj—kn?Þ.››#üoyûéî~Ĉi˜d˜RòߟI™VƒÀ<¥!š] x[à ÚÉýéŽÅƒiÈŒÎÉš@÷h\Ufñª.бÎò¬>Íc³þPk-W>þáËy°=·®ŽÂïêxð!Tç'Gjª0ü>ÅžP{‚«¹åc–4BB9ƒ7½úÄm¿Õ€gWœ9^è¸ëBÛµZYpªÒ/uyq™Jð¤DO~—ç.ºÝõhW3l-‹Ìyã—º<>’`ò±r]·g¼.Ë?;}0Æ,$¯¦¶_ÄîÓÇsQLçBBûªB¶57ܬòÔ{é0äl4Óh?ÅîonÜ·×î?X=’\l[£Š*ø]ˆ‰fHgOVæf[Ù»`†i+R"Ԩ΃×vP+4¬•@:×Ê¡/5ô{Zëö:o¬$‰¯í &]]þüéËëHÝuz(BM¹?UÐãxϽ…6 -LvÜ÷ÅùP·²Ä(+Ã]½ÇÇt¹ ¼u$»dƒó˜ÀEà]àoä/‚ïðL¿LUØ]pb¬£‚Eÿ&›öÏß8ü¹ƒU-Üü<{Å7zx‰ý=å¾Êª‹’Á`F‚~SCI5zK…Ôòæ’îå “³„Ë -ÑÞ—x¦ TÆþšç²c»ÒÖàïþKÇùO@2"Â>~qÁ!Œác”BÀìË;&üë`~©û?¥zo«endstream +xÚ­YÝoÛ6÷_á·Ù@Ìñ[äcÚ¦[†6íw°îA±d[˜,y–œÀÿýîDR–d%ÙÐ!@D‘§ãÝï>xG³)…?6UšhËí4²’(ÊÔtµ›ÐéÖ~š0O³D‹.Õ›åäÇ÷"šZb5×ÓåºÃËj ›.“?foˆ%ó?—¿üø^‰-gDsc?}¹{÷–¼ýt÷ÞQö¸ríâžôúóç›»w·¿Ï\Qà>_(Jg¯ï¾^psŸç–Ï®º¹Gf“›e«GWWF*ñ÷ä?é4•™P"¬QÓ'x¡„Y˧»‰T‚()D˜É'÷“_[†ÕæÓ1ì¤2Dq©EEtDõ8ÂŒDŒQ$ 1‚ÚaÎÆTˆÈ¢òøª%£„ 0”­Jéaˆ£œDfc‚yšK¹zÖd4"QÄD_°ó® F—‰¤ Í*°›µ³z›ºAïü¨<¸gœ$‡93³´ò´åzðß«?m³ÕÖ wq½Ú¦þ£ø’´ªã:Ý¥Eí^³bÀvU T`ºÐŠ€ãŒ«ÀQôo”òÍñ×Y _ +Û™<Å1›­Ë |׆ÏÒĽ9‘˜S'Vån‰›Í³"½š/$S€Í¶eU;R4'|8¹)¤j@—`Rô‘HÒu|ÌëE .â*UêÆ ²ðtÈ Ü#h•{éš×ÖgâK¹€p“â9 EÀÌØ7r¦ÂñS–çnôàg@ò„\d¦rÓ¾Ë]ªçc¹¥jby?ËŒ«‚ÂûòP岜Hk^‘+ÈÕEÎFà|v ×}Š~ÓÕ9‘7\]ºçòíg7Ò ·DDBtMIYH EU§qÒ÷ˆ7·wïÜÈþàEðž¤+ê&S”Þœ«m\i~îÊ©ûYëJ rDòëv¨^°n j¬ûÛpK ySCÞ|qË@4²e½2µäº¿åM?'‡À|(C@æåf“›çA` ¢æ:T/€¨Nã..$ˆìLÿWzŠe4Qzb½vxC +0ƌ݋ÀðR…ž`Æ¥¬î«%—G)#ŠÉèeØZªÜúÇ)‚Õ¬¿ë×ÆtÚçkxœ±¦$`IÕóX²‚QÿX†#XöÔ‚Œ"Í10‡@iu(×.¤wõ/³:Lº¬NFslÏlô<0BDÄ@aø¿¾ ˜ Š,fþ30»#بöCp‰¢|òHàÁ͵g9N=eõö bsšóHÈXÖ?Î+W‚)5‹óMy€ÏvþÕ +ê•+Éjÿ^ ¸±;ì%–o@‘¸z@5õP3di5ÛAaoüŽqž%í9­ü;W«å…à®ÂY¨‡.M-¬‚³‹óçM-‚[€VS‰í…þn[·]–—Ɔ3˜pÃØyçg Õøƒ2Þ‡µ³€¦§Ú§« ý=M®Fê$È–qýJ$ˆ<×I® BÞÈöÐTƒÏŠò/aI;g³ƒÇnÁm¡ÜÃ1z>]i Äm¹J{Õ¾âÙÞ¡¥=Ú‡´ñ*dÙ•sÚÈ@5¡%¨kä,kzƒÆ3š÷s½¯úõ¾ô­‡ší}wÑ.8Wµ'±ŸÂâø +%Ñ(iá&}£ Ûú·A?l‹_X,×Y˜h‹ß “ë2h_#” ‘žÝ•5~KmˆÏŽÚ‘D«myëê8k6„•j;}·zeO(Xó”n-à…(=+W"áQ©³(“ô•a¡”f£•¤oþTpƒ +ãÑÙ­¯ðªmyÌ“¶?pâ­ËVLdQzÚmüè§6i‘b¿±£mKKß­ABQ<Ü +3x÷ʼo¾’‘·Ô¨Í>O0]5i¦ÓÃDGY˜ÅF jÑMX|8µ9 :NªØh¯Âæé@8_6Ôu×É.+2ÈÙq4ù’®=šÅÊö1.ŽšƒA(ØÉ°¾Qx‡9xG1¢ôj”Eüß4kºMB5ØØ›Ðùß戡0ð§&ö–ae›æ{7ò +i%jà +²ªÂ<‡ìBJQíbíÃíÇÛess„ÿ–·ŸîîGÔŸ†N†)%ÿ}ó™”i5pÌS¼Ù9‚×5ô m“Ü‘n[<è†ÌhŸ¬ TßÁÆEe¯ê‚ë,ÏêÓœ16 î¹Öâqåýß)¾ ‘Ûsëò(> endobj -1896 0 obj << -/D [1894 0 R /XYZ 56.6929 794.5015 null] +1970 0 obj << +/D [1968 0 R /XYZ 56.6929 794.5015 null] >> endobj -1897 0 obj << -/D [1894 0 R /XYZ 56.6929 470.8431 null] +1971 0 obj << +/D [1968 0 R /XYZ 56.6929 470.8431 null] >> endobj -1898 0 obj << -/D [1894 0 R /XYZ 56.6929 355.3786 null] +1972 0 obj << +/D [1968 0 R /XYZ 56.6929 355.3786 null] >> endobj -1899 0 obj << -/D [1894 0 R /XYZ 56.6929 281.517 null] +1973 0 obj << +/D [1968 0 R /XYZ 56.6929 281.517 null] >> endobj -642 0 obj << -/D [1894 0 R /XYZ 56.6929 235.0409 null] +674 0 obj << +/D [1968 0 R /XYZ 56.6929 235.0409 null] >> endobj -1900 0 obj << -/D [1894 0 R /XYZ 56.6929 198.7213 null] +1974 0 obj << +/D [1968 0 R /XYZ 56.6929 198.7213 null] >> endobj -1901 0 obj << -/D [1894 0 R /XYZ 56.6929 159.8503 null] +1975 0 obj << +/D [1968 0 R /XYZ 56.6929 159.8503 null] >> endobj -1902 0 obj << -/D [1894 0 R /XYZ 56.6929 83.0669 null] +1976 0 obj << +/D [1968 0 R /XYZ 56.6929 83.0669 null] >> endobj -1893 0 obj << -/Font << /F37 747 0 R /F53 962 0 R /F21 658 0 R /F55 970 0 R /F23 682 0 R /F39 863 0 R /F47 879 0 R /F48 885 0 R >> +1967 0 obj << +/Font << /F37 779 0 R /F53 1002 0 R /F21 690 0 R /F55 1010 0 R /F23 714 0 R /F41 910 0 R /F39 873 0 R /F48 925 0 R >> /ProcSet [ /PDF /Text ] >> endobj -1905 0 obj << -/Length 2901 +1979 0 obj << +/Length 2900 /Filter /FlateDecode >> stream -xÚ¥]oÜFîÝ¿b{¨Üf'ó¡’''qz.7׸@^”]Ùª•Ü•Ö®q¸ÿ~䣕ÖÚ8ÅÁqF$‡ßäZ-$ü©…·Bš<]dy*¬Tv±ÚœÈÅ ì}¢øÌ2ZŽO½¹:yùÞd‹\äN»ÅÕõ—Ò{µ¸Zÿ–œ}üx~ùîâ×Ó¥¶2y#N—VÊäÃÙå/g?ìãi®“³ïÏ?Á«Î3‡rqúûÕ/ß[3Boò\d©E®ñÏ—ïÞŠ·?]¾Ç£'çW»ã+)i×?O~û].Öp³N¤0¹·‹x‘Bå¹^lNRk„M‰úäÓÉ¿„£Ýð霈¬ñÂzÍÈH«…R"·VO„dsáŒ6á.ïÎ?½ýùâãÕÅO—tq“.. '‘û”o›õJ¬Ú暎걌l&t.=‹¨êN—ƪ¤¿-q!øêßRê›Ý¶è«¶¡]„Ô|àºÝ2V5ªt*Œ‘£Efhk)ÒÌð™€T9P~sqùŽÈåhŠMI€®ÜÞ—ÛÁ~{ª|ÒÖ´¹ë«ºêO•R ØŽS:¹º¥{Éç*¹-X k 1©…ÌS»X¶ºjSÕÓ6途Ov«~H–-š5o?6}ñ­ûvF/*•Â§.^o´>ª°]P9E/06ùÔ}¹)›¾cÒc>ÊfU·]˜I“ª!èçm±*»Nûr»©ÀÅïU¥ …ÓZG)Oài9 -~S-WmÝ6ÀOjÒäm]ì:Ä®Á#‘"ž -*D@7â7nÃKݵ|lÀÊßÌ1•«ˆp×튚­Ú bf¾úÇ:r‰àmä.wwwíð¾v½p)ÊvßRp ¸^X”L^~K°o_N?Èèƒï¾›ùä%Áú–ž%Ší5=ëª)ç°ýÒT=E÷¯Äö4Œ¯öÅà„œýD§>ÙìV·¸ÊÑþïjt6÷·E3C-·ÂøìoXµß[µ‘9ëˆE÷DZlWíoI¥¼±·ªWôyÑйöCTwpêmF'{HS†Á…¤ÏÒk%^Ðãòñàœ˜Ó&^iÆÿáöfpÿÈïS)¥©È¥ŽykÄ„ÔñŠ -ï‰o(²û’wÈÑk¼:Æ‚K…´Î2îuy]ìê~ÉxÊŠw˜B5' -D­b®ÛºnB$·Ïô¤8‹¶ƒì²"M¥š†–6ÄVˆë5©¹ë€&6èÁá_c:UI`7KC`Ô&†xؽm»žVU]Óê3¹ãè{·eÃx[|Ê ~N/°ŽXoªûøAÁ "¾¶ov¬!€ÄØ?I‰±èkR"Þ-µG©3á3íôˆæù«Ë…ÔÖ*Q{¾_>V"@ƒuÎJ@NÎZñ¤Oî€ð‡Û -CÆgµ‰Th ‡x‹¹ûäJ¨ÌE&ç/¢•Ð2ÍÇŽ±$ãJ5ø–ÕùTÊäŸKç\rŒ;ú~J‚ TqfO»ZÏP7PÕÙÜŽk%—'wT~ÜW`•ëpS†RÉE Ù ïÂÌE‰À¿±òÉ='g80Ë¡V™È¤Íž“©9Ô3à$f=èyÉ„Á‘&áuSô«[&èHx§üÔS«æf. @é® #jWëŸD4¸zª H)ðçU´cz!ãò2z²gOöƒ'{J)v k°· &ÉŽD‡†pñ Óa%ð‰NRb)@iì|v˜*î dSŒÍ²#®éêékbé1#™,ÅŒøÄ7¥ãk'Öq€µ1Àº$à «,°¥%$‰¦\ExKŸ£”±Æ]wÓöŒŠÝV,²`ƒ0”q"•~*ŒàSòˆOA ¶Ô‘Ûkp¼}•K‘pÆô2¸ùìÄCŠaßÐÞ·äÞ·´NØN p1„ݯbu¯(?Ê„»H§b Ú Î5ï?˜1ñ>r©g=ÉB·8çIÐ&³'eräI£ÈF²Á•`\ žìJ»R&ÙxÀ˜BìÀ‘ vž›¡½J‰v·]•KÌç˜ËŸÞ@ M³Šþº™ TiÂa>˜XÜ<‘å½›£cµPÎNÃ!–‡`Õœ® òMV¡~ -$„„² ]Ù3 Tª°¸øxŸÒˆr|¼¥þpŇG¥MÙ±;EÞ¦EºÏ…z£ŽMìL³rvÝï‹ò9å¤Jd¼ž‹ËútŸî³ÊC˜X¿ˆµw¬ºc‰<®­éµ‚¾s·.¹ð.¸oè·hï…ú¡Áðb¹Fa'”ðLaR "€Ç ‹¥—Bi{Фäå±J1“ðõ¡£#쌊iø„†°5øz×v]õ¹æØt^Í9f‰|(Iæó2äîÜ µÚ‹¹Dx¯ì3(ƒ«+ýE·úQB:‰gÈ=Ê9/´Fd¹×£RSgQL:Öuz\¾{-¬;'LÅ¿ŽÕí³)Ä[‘«A¤q9E‰µð`ß_•/¤Þ]@Ë •2@3¬HM–tBNb2HÏú N -š²1ÕŽ:Ád¯y¤@šB3¤ì2?pvÁOÆÙ؈•#Éìz©T¹×ÐBÊÜ?Q¤Mó&L(pf‹PæË`&¡Æðú1$P²À&¦„RðÀª [Èx3ï).¢ !ºã¢hc›(2—t›<[ÞD³,ê›v ·ÙÌÏÑ•2Ãmßúb~1ŠŒÑ8¥Ý>Æ:6öHÃë‘yz%“ú§cÃéûC¡š3¡œyu]š¬v[²Œ¦¯i³mh¥“~8{»üðÎòœ,·P}=•eo·¤<ÚɆûž¡Ø³ ´ ×®\=‡ë¡Vºpƒ+@VtåÒ¥i¶k.42rÙñÙA¸ßts}¬‹8Üc³ÂáëUôÇ=É0øãÊÖUç²qô ŒnÝîB ë?wÐeuÇf…Ã[†ýK wèl¨ñÉ’‡â±ã¨%ÈMÙ”[j|ÇÑÀ7B#߸¾S·ý˜ÎtƇšKØábàpNîÈn¶ÅfÆTyãG¦:ÑÄFûóŽŠy“Ƽž‚)è–ƒiJRÀç^ -A÷ÜBm7´Žú}A¯Tmfû -zês¹Z]!þܶVÎù¾ÚËXDÄÃtø§d if¯›£)½HMQmª/5B™è ±UBZüQqlæ$:ÇÃÐò!„Ê¡|,ºŒfÝx|0{7*èaÿš®¸¡x©0SºÛõbæbÚYa‡„ýeY¦°Ž=eK¥Åz¢ÝÝVw¢Ä‚+2QÜÍ™ó]gÎ^È\ÏÅ1L÷EUƒÆ0°)š8ä„‚jÓq<øT–‰úü׳<çØn#ŽàaZà(´Æñ§›îàp µØ^|£!d@e‘zK¿èFº3 : ‡ý‘Áž#O'¿4,”É‚d"îùîš+E¥á|Ý®ŠÛ´×s!t’+„7ÚÄ»¼=ÿøæç‹—?½§‹[5¹¸\€œD,Þ¶ë•XuíÕS¹\èBQÝŸ.SÙpSáBfðÕ¿¥Ô×»m9Ô]K»iøÀU·e¬S”¶Â™3Zd`†¶–Âæ†Ï¼| Ê‘ò·ïß¹‚m¹©ÐWÛ»j;28lOUȺ†6wCÝÔÃéR*ÛñJg—7t/9á\e7%Kd $&µ…u‹å(|`«¯7uS"1í²H…l·v‘dEв]óöC;”Ñzèfô¢¬Áúte¼ÑúIÅ€í‚Êù(zqÙÇ¡ªMÕ=“žòQµ«¦ë«ÈŒÍê– Ÿ¶åªê8ªí¦n¿ß×ÃM’‚^k¤@>Y‚§(øM½\uM×?ÖØìMSîzÄ®Á#‘"žŠ*D@?á7FnãKÓw|lÄÊßÌ1•Ë„p×ïʆ­º bf¾†‡&q‘ˆàmä‘.w··Ýð¾wƒðå »o(¸D\¯@,Jf/¿&Ø×/?Èéƒo¾™ùä%Á†ŽžŠÝ=›º­æ°ýÒÖ=F÷/Äö8L¯öÙà…ýDÛmv«\hÿ· :‚‡›²¡V8aBþ7¬:ì­ÚÈ‚õ Ä’{"-¶+€7¤RÞØ[Õ+ú¼lé\w‹!ª?:õ‚6““ƒ=XãÕ‘ap@!éó‡ôZ&‰—ôø£z8:'æ´‰Wšñ¸½Ý?ñûXJÖŠBê”·&AH¯¬ñžø†"»«x‡¼½&¨§XðVHçã^WWå®–,Ǭ)Tóq¢@Ôjæàªkšî>Fxûô@OŠã°ˆa;ÊÞ('¬•ê0´t1¶BÆê !µóÇJÔïWL•ШD]°„S°Vi%; üþ¦Æ1ÅY¯A"5è1Þrî>…*÷‰Éù‹h%´´ÅÔ1–d\Vƒo9]J™üsé½Ï.qP߉C„*Îìi×ëêª:W¸i­ä‹ì–Ê»¬ro +ÀX*ù$A õA˜¹(ã7V>Eàä f9Ô*¹tùsâñÒšc=Nb6€žw‰L,áSЀ-¦õÄí58޾ʥŒH8SzÝ‹| vÒ‰1Å°ohï[rï[Zg#ì N p1†Ý/bu¯¨0É„»D§fKÚ‰Î5ï?˜1ñ>r©g=ÉA·8çIÐ&³'årâI£ÈFòÑ•`] žìJ9»R.ÙxÀ˜bìÀì¼0c{=–Ýn»ª–˜Ï1—?¾2šf•üu3#¨Ò„Ç|p`qóD–w~ŽŽÓByw±<«æt•o¶Šõ#ÀP  $–Ý髱R…ÅŇ;K{T ÈóñŽúÞ”6UÏî”x;, +èÔ-x.ÔMjbgš•³«a_”Ï)Ç*‘cðz..èÓƒÝg•û.2±~‘jïTu§yZ[Ók }çn]qá]rß0lÑÞ#( Û†±Áñb¹Fa'–ðLá DË …Òî¨I/ÉËS•bÂÔ‡žZŒ¸3)¦áÀbÒdàëm×÷õ§†?bÓy5ç˜%Š±$™ÏË» 3Öj/æ +‚rÏ ®®ôgÝêG é$!÷¨æ¼Ð‘AOJM'1éT×éiù´pò¸uÚì°ÜÖÞPŒ£%i×[Ö‚bà +Ï’ÔFù}àq†°Ç`¸%4©¹LPŠg¸jw›OÑ.8Õ›ý–tž] c‚Œç:&pqu87àéÇ\Ó«Œ^_"i:)Ž3¼ÖT•áM£UÝéÀaäˆ +à¸úć8^!¾¶ª’_¢ÄS©$†5*&vß&;/£Ú©‘Ê¡oPV9ÅK ¢,ÿ¨hE‡ù²¤ð8¥Ê=’Q±Và³sÂôPüëTÝ>›B‚…EšF‡(±íû‹ò…4"¸± è˜á©rbhÇ©É‘NÈILéYÕIQS.¥Úé@'šìHSh†”]¦ãÎ.øÉ4»à‘#qòoä‘'2»„^ÊêÏ÷ZHY„Ç3 ++Ñ4¯ã„×q¶e¾Œf‚j ¯b‚@% ,aRÊA(\¡*Á¸…,ñ€7â!:`#Fw\ ÷]jEîí‘A§±ÉcA`±L2˲¹î¶p›Íü])3ÎÑö­/æáÈSÚíCªsac4¾>1OÏ¡d +cÿôÔðBúþP¬æL,g^c]g³ÕnK–ÑÍmv-­töÏwgo–ïÞ:ž“ª/£%EÙÛï©ãvòñľgA(ö,-鵯VÄÇ@à1$Âz¬¦ƒ.ÜàŠ•}µô–  ÍnÍ…FN.;=; +÷«~.°Ou‘†{lV8|½Lþ¸'\ÙÀºîÓ\6Þ#”Ñ­»],!pý纬þ©Yá8ÆÇ–aÿ’GÃ;j|òì¾|è¹êr]µÕ–ßic4òÐÄ7®¯âÔm?¦ Äñ¡æRvø‡8\€;²ëm¹™1UÄ„‰©ŽhŽb#ŠýùNG‚¥¼IcÞ@ÁtËÁÔ’ð¹—BÔ=·B» ­“~_Ð+U›ù¾‚>ô¹"-Ç®n[«æ|_ d*¢'âa:üS2Ðv÷-³×ÏÑ”AXcªMý¢F(3}Á"vJH‡?*NÍœDç¹b[>„P9TLE—Ó¬fï'=ì_Ñ7´“.gJ·»AÌ\L{'ܘ°?/K ëÔSvTÊáPl ÚýM}K J,¸"ÅÝ‚9ß iæ„,ô\ÃÔyWÖM9úh +›²MCþ(¨6=ǃUu”¨Ï={÷áÇs>Œé6ሡ%þ€Bëq<‘~ºéWP‹íÅ7ùBT68úE7ÑÉXÐIxì ö…=ø¥aé¥Ìþ%“pÏw×\)* ç›nU6ئ½ž ¡ÓÁ3D™. ﯹգôßddÇ·Jdý”ê³LGÊyxž²ú2ʦ‡éûs¤µåá¹-µàÿÌü#€Qÿßÿv°ÿ· › ‚ÞÿGÁA\•øã|¡Sxh,YÿAá1ïÿÑ{×endstream endobj -1904 0 obj << +1978 0 obj << /Type /Page -/Contents 1905 0 R -/Resources 1903 0 R +/Contents 1979 0 R +/Resources 1977 0 R /MediaBox [0 0 595.2756 841.8898] -/Parent 1892 0 R +/Parent 1983 0 R >> endobj -1906 0 obj << -/D [1904 0 R /XYZ 85.0394 794.5015 null] +1980 0 obj << +/D [1978 0 R /XYZ 85.0394 794.5015 null] >> endobj -1907 0 obj << -/D [1904 0 R /XYZ 85.0394 752.0756 null] +1981 0 obj << +/D [1978 0 R /XYZ 85.0394 752.0756 null] >> endobj -1908 0 obj << -/D [1904 0 R /XYZ 85.0394 252.6303 null] +1982 0 obj << +/D [1978 0 R /XYZ 85.0394 252.6303 null] >> endobj -1903 0 obj << -/Font << /F37 747 0 R /F53 962 0 R /F21 658 0 R /F39 863 0 R /F23 682 0 R >> +1977 0 obj << +/Font << /F37 779 0 R /F53 1002 0 R /F21 690 0 R /F41 910 0 R /F23 714 0 R >> /ProcSet [ /PDF /Text ] >> endobj -1911 0 obj << -/Length 1788 +1986 0 obj << +/Length 1787 /Filter /FlateDecode >> stream -xÚ¥XKsÛ6¾ëWhr)5 QâA€l§Åq%µœÚJ§“Ç&!› E:"UÅIûß»À‚%3µ3,‹}~XˆŽøÑq(‰ŒY6Såm¯óôWVM!¡jwø¥’éwAÀJkórwÈ^’Q—d¨`ÝÆ¥¼´*„«Í:iòÊlW‘g(…F†-$0ŽPsXÍÝbÙÐùfyB#O7Æ{—‹kÇ‚¦–&iôJ— Òó2ËS Ôí16ìxŽóÐ@Ál,r1µáŽ¼ç§Ó#ÿôiˆ³¤˜P¯+@K±: oÜÖ²8O‹eÆUÙ$yi9Õîˤ־8ÑeZeyy…³jù5…¾RðÝÑpµ€¨¢ªm af ߬Ú\ÚHÀøã¦'‘NXD¤â(l¶¨ÖˆÄp/ô‹jz¾±ˆ3‹b.!H$¸Û›×¸sƒêq›_åÀ‰¡ JðûñA)u€ ü]ê´qTHÜ¡õlvòýzV¼¢Ì‚¹¢ZM1(¼­7 90 |c…#ÈpsÛ:¯â ¹0·}…οҥ†q¡H𳆌ªV8>Œ§­›».¢<+Öó‘–/¯:‡ö}%áö#óÏÈ!¢>¾³ &4§ï©~Ü`Ÿ{ -•ª%+SoÆ {-D)öŸé¢C˜RljH˜&ÀÙ9¤øËÅg#Ã#çF(ÖUq‹„ÖÙ2ö ÑˆÁ”1 Íw EÞ€¡(¶ê‹‡ÀM™%68Y{}r æûYmš›E-Š˜¥3È¡Ð{©¸­‡Q‡™Áºr0è3 '&"¥ì™óéé1Ú}q|>[ùøعy™ÌN^ŸO7³³ùp3I;ÇÛ|§Ò]Êœ†z*vftéVwW¿@†«¶|à›¤©¾i/Cu BíØÊ yÚ}(,­®Êü³S+x,J}£ÓÜÞžš—Cw¤kcKF’˜Ëø!XœTÝÁ"Îâö†à”·êq¬>£¾©@Kéu*fš—ƒê@e†ÑCŠ ž_póµšÒˆ8ö.´>Уîy˜Ûk¯]Â!Jê~ñEÅ`²ß‡ôš±^ãצyÏæOqãgš­ò2¯(lS †t®—ã^¦nÛiRn’bNØÍhè¨ -laî)‹cWÓß.ÎîO~“æY™çÀcw;÷îÀõ¶HíSéˆýÿ¨2wkAñû5ëÃÎÂK‡i}†ƒì—ŠÝíO¬>ïàÕ³‹Ž°eÛ]$ø@1ÙYUÅ×þ‚eL'7ð‡IÐyö»ÿžÙý %áQĺ^ö;Ø,[¥Œé”FwToÿȹ«ûèäendstream +xÚ¥XKsÛ6¾ëWhr)5 QâA€l§Åq%µœÚJ§“Ç&!› E:"UÅIûß»À‚%3µ3,–‹}~»ð£ãP³x¬bA€†ãt5 +ÆWpv2¢ŽÇo™ü>דÅè§g\cK&Ç‹eOVD‚(¢ãEöÖ{Bh@& "ðÎçOü£³ù³“ãùħ±P›¾zu<:ûsâ³0fà ït:=ý i¯&1ó¦'Ç“÷‹£ãE§V_up£ÓÇÑÛ÷Á8 ^ŒÂã(oaÇl¼‰“PpÞRŠÑÅè÷N`ïÔ¾:è +°†qÉ|!hÏ4€SÊåX…1‘œqëŒ$ËÖº®u=ñ%˜ùE•&ÅuU7¸½©Önòÿ‚Ë1æ}JI†l·0bÝa0ö#a·ê}‹ïÖÉê¦ÐÝö‹e”WÕ:o®W¬×«$õWYØÉï3×:]kÔ4ðÉg§Ë¿?«?‹âö’‰³™fùÉñç¸XÒ¢xqöcñùÑ° ô!64ºn¾ÑùP˜0œóç³è•|òr¿Ùþ¹ó?Þ¼Üüþë¯Ðú§gß]ì}’H†!,"d’a•ö&¯¹Ö°à±—\Vk¤éO6D°~"A-)Jèn„¬Ë,¸‘1…q蘶yQ ÜË[¼*ÓËdS ©Þ¦v + &@©õúo½vZ9®^Rò»r)À†"WRf²l ^/tæ.HV¾ó"£$TA¼ —ž”R€C8ŽªÕ +„C¡0Ƽ¦rO{ £{Ú½3Žœõ@ECû¯õ*ÁÐÛ;›­ò¶×yz'« Š¦Pµ»üÒ Éô» `¥µ Èy¹»d/ɨK2T °îcR^Z•FÂÕf4ye^W‘g(…F†-$0®Ps8ÍÝaÙ­ÐùæyB#O7Æ{—‹kÇ‚¦–&iôJ— Òó2ËS Ôí56ìxóÐ@Ál,r1µáŽ¼ç§Ó#ÿôiˆ»¤˜P¯+@K±:Â"oÜ«;eqŸ ʬ«²IòÒrªÝ%—I­})p£Ë´Êòò +wÕòk +}¥à»«¡µ€¨¢ªm ag ϬÚ\ÚHÀúã¦'‘NXD¤â(l¶¨ÖˆÄÐúÅ +µ@=ßXÄ™E1—w‹XE$ܽ›×øæÕã6¿ÊCA”à÷ãƒRê@:ø»Ôiã.¨¸CêÙìäûõ¬Ø¢ÌiQ­¦ÞÖÐо±Â dH¸é¶Î«Ø!¦ÛWèü+]j(ŠkȨj…ëÃxÚº¹ë"*À³2`=ù`ùòªshßWº?á˜Fõñ1¡8}Oõ{äûÜS¨T(Y™zk´»f/²!‘bù‰‘> :T€©!uœˆ$€iœCŠo°\Ìu62Ý[4;ý–ª‘0‡EÊ©gBÀ«ì1‰(‹þ¯bh,‰0Ãò^ èôºÂ9íч²Ú–nþ-cò'77ÛEâ¦Y;µ=ÂÍ?ø8PŽv³!Ö‡úˆ”²wΧ§Çh÷Åñùºòð°{óe2;y}>5Þ\ÌÎæÃEÌ$ XìoóJ×”9 ;ô4Tœ"ÌêÒîZ¿@†§¶|à™¤©¾i›‡¡:†I¡vle†<í{(,­®Êü³S+x,J}£ÓÜ\ÞÞš—C=Ò1‡%#IÌeü,Nªî`gqÛ!8å­z«Ï¨o*ÐRz“ŠÙæå :P™aô"ƒÏ/è|­æ€4"Ž½ ­ô¨{æ¶íµÇC8D‰âBÝ ¾B¢löçÞ0Ö<°mšÏàÙü)®b|L³U^æu…mªÁÎõRcÜËÔ½vš”›¤ØN3&ªG˜{JãâØUÆô·‹³û“ßdù,ˆÌçÀc×{=ðð¬-Rû)t{û¾U¦—±¿ÏwM 22˜+»tðŠÏ|¿Á½ïéëÅó³óûÝ2ìZ—-¸^ÜÖj×1Ž Á`rÊ7«Ý½† ÙF>}•€£ö“‰OÍÇõáda‰%„Ã4ƒ>ÊAöKÅîÎ'VŸwðÕ³‹®pdÛ5ü@1ÙYUÅ×þ‚eÌ$7ð‡IÐyö»ÿžÙý %áQĺ^ö'xY¶JÓ)cwToÿȹ«û"xãÅendstream endobj -1910 0 obj << +1985 0 obj << /Type /Page -/Contents 1911 0 R -/Resources 1909 0 R +/Contents 1986 0 R +/Resources 1984 0 R /MediaBox [0 0 595.2756 841.8898] -/Parent 1892 0 R +/Parent 1983 0 R >> endobj -1912 0 obj << -/D [1910 0 R /XYZ 56.6929 794.5015 null] +1987 0 obj << +/D [1985 0 R /XYZ 56.6929 794.5015 null] >> endobj -1913 0 obj << -/D [1910 0 R /XYZ 56.6929 343.1761 null] +1988 0 obj << +/D [1985 0 R /XYZ 56.6929 343.1761 null] >> endobj -1914 0 obj << -/D [1910 0 R /XYZ 56.6929 255.6488 null] +1989 0 obj << +/D [1985 0 R /XYZ 56.6929 255.6488 null] >> endobj -1915 0 obj << -/D [1910 0 R /XYZ 56.6929 192.0319 null] +1990 0 obj << +/D [1985 0 R /XYZ 56.6929 192.0319 null] >> endobj -646 0 obj << -/D [1910 0 R /XYZ 56.6929 152.6743 null] +678 0 obj << +/D [1985 0 R /XYZ 56.6929 152.6743 null] >> endobj -1916 0 obj << -/D [1910 0 R /XYZ 56.6929 115.923 null] +1991 0 obj << +/D [1985 0 R /XYZ 56.6929 115.923 null] >> endobj -1917 0 obj << -/D [1910 0 R /XYZ 56.6929 83.7361 null] +1992 0 obj << +/D [1985 0 R /XYZ 56.6929 83.7361 null] >> endobj -1909 0 obj << -/Font << /F37 747 0 R /F39 863 0 R /F23 682 0 R /F21 658 0 R /F48 885 0 R /F47 879 0 R >> +1984 0 obj << +/Font << /F37 779 0 R /F41 910 0 R /F23 714 0 R /F21 690 0 R /F48 925 0 R /F39 873 0 R >> /ProcSet [ /PDF /Text ] >> endobj -1920 0 obj << +1995 0 obj << /Length 3196 /Filter /FlateDecode >> @@ -8490,80 +8852,88 @@ xÚ¥ZKo #¯K#‰¢L]/7Wôú÷~ºbf‰æ}ªïï®Þý(ÊkCLÁ‹ë»‡/M¨ÖìúnõûìýçÏ?}¸ýÏÍœ+:ûžÜÌ¥³½ÿôÛûú½Ï7†ÏÞÿôñËÍœYJ1jé :ûõÓ‡æ?üòéÇŸ>~ºùãîç«wI¬¾èŒ +ÓŸW¿ÿA¯Wx‚Ÿ¯(F«ëüC 3†_o®¤DI!âÎúêËÕ¿ÃÞ]÷Óœ*”ÐDi^ftÁÙ5cÄ(ÅÊP†‚ §Œ/¯Ûf×ÖíøQ -È#À´‚Ð’ëÜÑ ŠæJb5%TAåó> o"“3Q¤²Rí·«å|Ùl«íͼ€y~Ÿ/þˆ«{+컕è±a‚áÙ ³-ƒ¯Õk[ÿ]yÂÁy’- t‰ç2ÃS(¢ ¥Ž,êõ7°|J«¯æ…"¥òÈ|»Ø|óÝEyw;Ëðã‚‹Í¿}†ß\ÀK~=O0²ÆYlWÍfBÀVY*=fß^w±Zí«¶}»º‹,—Oû¦éVõ>''ï–]¿Þ0Æfßá—òXÓK@#• 6ö7zv{/u÷äw“y‡jQš0-Ë Õ|‘S %¥PQðfœÜÈÀ»­:¿qØùEFU¥&†2ÖGRÞ ÊÚ½äc ½’åÿÜÔ« ÃSxìmU…-ëž“b0®ˆ*ËAÿøˆ^2êŸEÜ嬉`#)ˈŠÈËhu#BP¨ûM¦¨*ÆP œ×]óXáÁ÷7¨¸H6„2ª‰`b¨Ó/.|~9©ÆB¢$â®.‹óUJŸ*O§UJ¢:âª$ò¥pœ³GF¢Ì‘}e¡d pä|]³û,3æ€Kêñ|À†œ÷ÂP?9ØŽ8v÷T·þ¸¥k1›>`"Õtu›¨œÊã˜M U®M2xoÊÖÙâ¼ÚÏÊ–¨2‰ñB6”îK*·,Ü%÷Ê.œDnÕ<Œn!¡²¹ÝsÙÜ.ê°q_w­õ¢rü×Áæ>·YÅk÷RU’®lX(ÆíB8ÿÀR'dc­ºAìX‘ÀÜu0;ãzÒÚ¶ÐJ²óÖîSM[;Q9k/sÖ†{£’9€­]ÆäyÑ"QF´¡­9¡_Ù~ ¹µŸ­ò£H8)ÌNöý:f©ïïå:WÉ?¼ÆÆ7u§n`Ñ+Ž¿L“³¡ÿkÛè]î€d‰Z˜–ix6ezºB^hcûTgL©œšžNÚXIPB^82eŽ´±†Hû’`päç} - ê2¸Õú“Wûå¥ù> yU Þdíx.áBåã!UVΞùôÍ9/ߘ²( -ï4°˜4 7ZnøôYÓô©¦M“¨œi¾¾%Ç7Ù|V¶c >.ƒÒ b°­eƒŠÐ"aáDs+oǯXìj–#[—Ÿ¶Ã(76ß©ô^øËóbí¦gX®šÍ¢Þ% gBð]ÄÕ8gšV;ˆ‘ý6a~Σ‹‹°Qý3½àÑ}ª3°‰T6»‹°‰o‡˜á”Øç;+W$ÊÈ%FItø#Á†Y;ŒçÝ"µãÂôÚq{ÇIêV/¶×tU~Ư)J8^ˆK}¯„0©OZ£—©¶AWu{Qpø2+΃ïä6¹¾KPÂhj·ßøv¤”:ÎElõƒœÇ™|CeóMƒ ‰ÍèKX:R rHÚgdH¡ErƒÁÛÀœ2„Ñú¬h‰èT¶œÒˆ¦l ÜMÊNÆqQ³¶98‹-+¿íê@\½¨žfµè~×Û‹Ðý¹æÖ’xlZ¶ˆO;þ;ÎF .\ÿiï"…´ì­jˆrkÚWàm㛼Uã¢fÁÐxw~kçqö\¯*¿‘ô3MDzônU=¿ Ï•I_ -ÒlÕu•àjNK?xÇù`Q/+×{ÆV¾@ô5joº`Ž«?yÞÛâauaó„õ¨mŠé÷OÔ!P×ÛÝ¡#™§Ôö»‡ã Ó9ó˜eáN¦¤ÓLò‚Í~ËõÜ*h#Pîýõø&ÄE‡É%Œ@ŠÙQù6ÄØ‘#; Y%ºú² >oáÿ02ÂN½.+¿íu gg â› Ÿ¯ŠP¦º)h`ÏC•}-­ÑYöKxkU~/Yú~¢Þ®Ü2@ô8"Ù÷œ äÆhôÑZŒPF 6‚݇dkŸ}2”1Á ŒÎDz>Õt0KT.šµ›œÞg¹&ç¬h©É9-Ûä dS<ÚŸ³Ùíg¿aEó¯—Ź|Èé¨dåå90ÓºçCËÝO¡pþqRÎioRÎé0SºßLgJÔC„ñm™2¼Á,¿àŸ,Ûƃìfw¿X~ MÂ@ƒ®Õ. ðDØ$µ±èç¡Ø#šFb$r@ì²iES™ûve€D—¦@_yN²Dt*Ú0«rb$TÛ—-tÛÆÄnÛ˜©n%žÐꈎ—…wÛ&|Êë±Û6~šktoðÕìóXWö½²d—±nÊô±ÄK½^{Öéˬ¡v‡àÆÜæþ}¸µX…/N (øïøÕª¶Ïæã±€gì^û©RL|ˆ¢0uù¶×¤R$G ƒ­O&Â}sƒ@í¦Ðøß+k¿±4Qç%6ÅÔŒ›m"ò_ø2ìõüG§>4ìÖë1ǣפÉ!û -Î|KûóbÔB hÄt•\Ä~ä“qš¾*ø¿?Ñ<~Š*í‡Hz¢ƒT! ‹BYÁ3cÑÓÇœ§²ÿ^ŒŠendstream -endobj -1919 0 obj << +È#À´‚Ð’ëÜÑ ŠæJb5%TAåó> '–d9E*+Õ~»ZΗÍöá±ÚÞÌ ˜ç÷ù⸺·Â¾ûQ‰&ž½Ð8Û2øZ½¶õß•'œ'ÑR°@—x.3<…"ºPêÈò¡^˧´úša^(R*!Ì·‹Í70ß]”w×ì» ?.ˆ±ØñÛgøÍ…ü¸ä×ó#kœÅvÕl&tl•¥ÒcöíEq«Õ¾jÛ·k »Èrù´ošnUïsrÂCUaÆL™Ú*ÇKÂ{ìÁÐýæ‚q8³ÆB“Ò(Œ>|üòï·Ÿïnù”~täJ¯ç¼ Juêžz)A8åR ©ö‹®jÓ´™ágÿ¥”?°W7[¿iwÖ‘â¡ÙgD`R’"2Ñ$BæhN‰,#¨)%/g·]8yN»¯ü*\ùÕ"½H2>WÛºÚ†_.Ö]µßBÞçðË®ñ×—}ÝÍ­Ð/‰Ð²b´Þ>‚Ò³î)‡RÄãÂjz&bÕšy0URòˆg¯/Ï^`Êáv–Í~Ãô¬jwÍveEȨšâÊD¤àÔn߬ÛÌÉÂY”öö´ 7C4cüD2|@­D>mHl áÖË\o3ê)àqFG¶60­¦ôSpRòNî_=×'ˆK¼}$“È]Ò íóþhÙõë clö~)!5½”4RyÐ`c£g‡°÷RwO~7™w¨¥ Ó² RÍ9µPR +ovÁ)ÀÝ ¼Ûªó‡ßXdTUjb(c}$åÍ ¬ÝK>Ø{ YþÏM½ +2<…ÇÞVUزî9)㊨²Èô€è%£þYÄ]Κ6’²±Œ¨ˆ¼Œv‘Q7"…ºßiŠªb ÅÀyÝ5|ƒŠ‹dC(£šHf!†z0ýâÂç—“j, J"îê²8_¥ô©bñtZ¥$ª#®úG"_ +Ç9{d$ÊÙWJVÁøG~pÁçÐ5¸Ï2c¸¤.ÏlÁy/ õ“ƒ àˆcwOuë[ú¸³Iáv!’Á£TH“_%Ù5Ž€%¶ßUÝ2ݲèaWQç/òå r?g³6ª-TÔBûÚZ¿HC…F@õБ^l +ƒ™fí®ZÖVÖ_íF¼ñòdkX»úþöÓ‡°oÞêua™ÿ·ƒ¨®ç˜Õ (>ð´ñÕ]ÀSËs…¢²àì‚é9‘,E¾‰Ä‚g¥Úô3@Ο91Gõ5á1á×ûî°#6p€(‡«K^§á +m®ÖÃt1™ÙL‘„LáŠÊÙª²ÿmZ©rhu»‹Ãºóÿ,›ÍÆG5,‘°¶ÕÚßI»p²6ƒùàg±h¶Æ®×ÍK>Í †¢QuÑŠšh.—w‚d‡­=² +:A:C/¦†:qI0ƒ$d)å%Ë "QT÷,gC°Ï:X¬›åbí—OMtȺXm}8ì]¼vÿœÄ';ê'Î5šS‹ +éEÿõ°Ýæõ†ZŸª–†m Òg>•—¨PEÁä¬Òzrïq\3ã7òh×òXáOGL*¨î ]yþ¡¦µG„³WÎu›Ý¼²{WÞ­ËT€á‡>­÷d-g:V¶’P]Œ\a²*àù`è$L‹¢ï¦Œj}áÑyŽED3BFõWÝv¾º¶Ã“ 3õ2ãv ©Ê¤×Ku$âør€/K+x„Ÿ[Ü>Øs}çPÐÙ¦ñÚõ›ÕzqßØÞÇÿ{Úú`¡ö¸ê<—Ø2­üûלIt¸fÐ;ô!j¦!ªË—VAêeþóPûÅÊÚ¤àxŽ¿›Ý:F• +æŸz\{к•en¯Ötöjj¯@(¢Ù*»7M×+¿…Ô³×æà Ú§æ°NÄ®ôÎèE4?¦’Ëí©2)C[à5°^Öll&Ζð¨ +UŽJxËÏ…p÷U8ÁÖðîN§xr[„UËßÒrROòIyê“òÛÑ¿η +¸X‘dªºE½<"ž­nûTÓÕm¢r*c65T¹6Éà½)[_4f‹óh?+[¢Ê'ÆeØPº/©Ü²p—ÜG(»p¹Uó0º…„>ÈævÏes»¨ÃÆ}ݵvÖ‹Êñ_›ûÜf¯ÝKUJ¸:°a¡· áXüK Œ ´êb±cEs×ÁìŒëIkÛR@+À쬵ûTÓÖNTÎÚËœµáÞ¨dN Ck—„1y^´H”mhkN¨Å×@¶ßBníg«|Ä($N +³“}¿N…Yêû{¹ÎUò¯±ñMÝ©Xô +¤ã/ÓälèÿÚ6z—; Y¢¦ežM™žƒ®ÚØ>ÕÓG*§¦§“6V”ŽŒD™#m¬!Ò¾$ùy_‡ˆº nµþdçÕ~y@i¾hFˆ7Y;žK¸PùxH••³g>}sÎË7¦,ŠÂ; ,&MÃM–>}Ö4}ªiÓ$*gš¯o‰ÁñÍA6Ÿ•íƒO…ËÆàtƒlkÙ`£"´HX8ÑÜÊÛ±Gã+»‡åÈÁÖ%ħí0ŠÀÍÁ÷#E*½þò¼X»é–«f³¨·G È™|q5ŽÅ™¦Õbd¿M˜Ÿóèâ"l”@ÿL/xtŸê l"•ƒÍî"lâÛ¡f8%öùÎʉ2r‰Ñ@þH°aÖãy·Hí¸0½vÜÞq’ºÕ‹í5]•ŸñkŠŽâRß+!Lê“ÖèeªmÅUÝ^¾ AÆŠóà;¹M®ï”0šÚí7¾)¥Žs[ý çq&ßPÀ|Ó`Bb3ú–ŽDg ˆ’ö$Rh‘Ü`ð6p'… a´>+Z":•m'…4¢)7D“²“q\Ô¬mÎbËÊo»:W/ª§Y-º…ßõvÇ"t®¹µ$›–-âS³¯ÿŽ³Ñ‚ ×Ú{H!-Å{«¢„ÅšöxÛø&oÕ¸¨Y04ÞßÚyœ=׫Êod'ýL‘Þ½[UÏïÂseÒH‹4[u]%¸Ú†ÁÒÞq>XÔËÊõžñŃ•/$}Ú›.˜ãêOÞ†÷¶xX]Ø<¡F=j›bú}ãuÔõvwèHæ)µýîá8ÈtÇ@Î|'&d™F¸“)é4…¼`³_ År=· +Ú”{=¾ qÑ¡Cr #bvT¾M§1väÈhV‰®¾,¨Ï[ø?ŒŒ°So‹ÅÊo{ÝÆ‚ÇÙÇY‚ø&Ãç«"”©nJØóPe_Kkt–ýÞZ`•ŸÃK–¾Ÿ¨·+7€ =ŽHF6Ä=gÃ0©1}´#Ô‡Q‚`÷!ÙÚgŸ eLp£ó±¬O5Ì•‹fíÅ&§÷B®É9+ZjrNEË69Ù†ÅöçlvûÙoXÑüëå@q.2d:*YyyÌ´.ÆùÐr÷S(œœ”sÚ›”s:Ì”î7Ó™õáF|[¦ o0 ÂÆ/ø'˶ñ »ÙÝ/–_C“0РkµK<6‰Em,:Äy(öˆ¦‘‰»lZEÑTæ¾] Å¥)ÐWž“,Š6̪œ Õöe ݶ1±Û6fªÛF‰'´º0¢ãe!Çݶ Ÿràz춟æÝ|5ûpç,Ö•}¯,Ùe¬›2},ñR¯×žuú²k¨Ý!¸q#·¹D€n-Vá‹( +þ;~Eµªí³ùx,à»×~ª¢hL]¾í5©ÉQƒð`듉p_ÄÜ P»)4þ÷ÊZÇog¬MÄy‰Mñ#5ãf›ˆ|Àþƒ {@½ÿÑ©ÍÁ»õzÌÀñè5irȾ‚s#ßÒ¾À¼µP1Ý_¥±ùd„¦¯ +þïO4Ÿ¢Jû!’žè •DâPVpÆÅXôô1ç©ìÿÁr‹Ïendstream +endobj +1994 0 obj << /Type /Page -/Contents 1920 0 R -/Resources 1918 0 R +/Contents 1995 0 R +/Resources 1993 0 R /MediaBox [0 0 595.2756 841.8898] -/Parent 1892 0 R +/Parent 1983 0 R >> endobj -1921 0 obj << -/D [1919 0 R /XYZ 85.0394 794.5015 null] +1996 0 obj << +/D [1994 0 R /XYZ 85.0394 794.5015 null] >> endobj -1922 0 obj << -/D [1919 0 R /XYZ 85.0394 748.9271 null] +1997 0 obj << +/D [1994 0 R /XYZ 85.0394 748.9271 null] >> endobj -1923 0 obj << -/D [1919 0 R /XYZ 85.0394 674.5821 null] +1998 0 obj << +/D [1994 0 R /XYZ 85.0394 674.5821 null] >> endobj -1924 0 obj << -/D [1919 0 R /XYZ 85.0394 573.362 null] +1999 0 obj << +/D [1994 0 R /XYZ 85.0394 573.362 null] >> endobj -1918 0 obj << -/Font << /F37 747 0 R /F21 658 0 R /F39 863 0 R /F53 962 0 R /F23 682 0 R /F55 970 0 R >> +1993 0 obj << +/Font << /F37 779 0 R /F21 690 0 R /F41 910 0 R /F53 1002 0 R /F23 714 0 R /F55 1010 0 R >> /ProcSet [ /PDF /Text ] >> endobj -1927 0 obj << +2002 0 obj << /Length 961 /Filter /FlateDecode >> stream -xÚ¥VMoÛ8½ûWè(+–ß"NâdS$N6v€mª-;ÂÊ”×’äßw(’Žì2ÈaÀJÃyofÞ" †?’‰¤¦:É5G‘,·#œlàÝ͈xŸ,8eC¯‹ÅèË5Ë´¤2Y¬±ÂJ‘d±úž^ ‚ÑBàôivu™]>Ì®o¦³qF4Ïy:y|œÎ®n¿3*08ƒ'Æéýdö<¹sÏÇš¦“›é|üsñu4]i ©Ì,§ÿFßâd|aÄ´É+,0"ZÓd;â‚!Á OêÑ|ôÏ1ààm¿5V -.”K( -E -Óx½Ê Ÿœà¨ßëEI¬^ÁËÖ+;Ø<¿\ 1ð$)-€XïrhËýy14E\+™ ÿàœ"¼ØMçˆçúŒ×s[® !’¥¯U÷b-žv/¥#{’–ä(Ïñd³Â» @ší]š]W5Æïº-;ÿ0z£y5¶3×gøLƒ3ŠÞñ÷fµDÿ–o#ÎAÁÎñÆ´öX›°Š®\hðvÉ30 8lϺ‚FT¨À¤j]ð¢nC’»rYY\(-lNK#Á°J2踂ºú˜úÍÍ‚+G²`Wæìåòe?&*mšÎ­‹~YnõR´~_çPÙ~ka66íî‘Ç:É(GËÜÒD„`Ù“›~›Ü?Þ¹é<Ë»-œðÞsa¹ñ”êºyÔ”Ã`2=ì]$.¥`ûÖù¿|ö'T°¼PÁ2Þg[˜CQûTc«¸9@£A~¹§û±JÆr5Í$ƒS†ÚÖäH3šfi ŠgŽ®¨ÞqØ¥N*Á°LwûÊtÎ,Ü¿¶Øî꘰AŒé¡®-rLØ) ªëÁ¬œ±löNí®1«Êl"½€3)¸Xݾ©ÛÕæ4O$ L"…÷‰$øH‘À¶ƒ Ü–ÆÊÔrî|Å~ùd\3íhØUe2?C” Â¥:œÉÝüáóa³Ñ`üÀ0Hƾƒ}²o—Ãðj'œ"¢DÐÔÅíìÊmÕžÔj[™ªí`–”<•ëÒiÌ,ýhÞ»ñ‹4^*D%ôÌ…? n wïi]&Ï‹¿ž>/È­éʽ)ý‘8kA[þü»lLÛì»ê°ýèíwAäNÅGŠÿûóãý3‹çˆ)Eã·3…{6Ë@Ê&G(þƒ:T‹2I#ÜÃZbÂendstream +xÚ¥VMoÛ8½ûWè(+–ß"NâdS$N6v€mª-;ÂÊ”×’äßw(’Žì2ÈaÀIÃyofÞŒD $IMu’kŽ&"YnG8ÙÀ³›ñ>Ypʆ^‹Ñ—k–'iIe²Xb)„•"Ébõ=½@£1„ÀéÓìê2»|˜]ßLgãŒhžótòø8]Ý~gT`pOŒÓûÉìyrçî=Ž5M'7Óùøçâëhº8ÒR'˜YNÿ¾ÿÄÉ +2ø:ˆi%’W¸ÀˆhM“íˆ †g,Ü©GóÑ?Ç€ƒ§ýÑX)¸PHP.¡()Lãõ"('|rN€£~¯%±z/[¯ì`óür-ÄÀ“¤´b½Ë¡-÷çÅÐq­d2DüƒWpŠðb4#žë3^Ïm¹‚†H–¾VÝ‹µxÚ½”ŽìIZ’£<Ä“Í +ï2DIhJ´wiv]Õ¼k\è¶ìü ÀèæÕ@ÚÎ\Ÿáó!>a½ãïÍj‰þ-ß",Fœƒ‚ãŒií±6%`]¹=2Ðàí:’g.`p8žu¨PIÕºàE݆$wå²²¸PZ8œ–F‚a•dÐq-uõ1õ››W 0ŽdÁ®ÌÙÃåË~LTÚ4».ú˲pW/EëÏuÞ•ífcÓéy¬“Œr¤±Ì-MD–=¹é·Éýã›Î³ì±; ï=vO©®›×HM9 &ÓÃÞEâR +æ±oùËgpBË ,ã}¶…9µOµ1¶Š›4ä÷—»»«ô`¼ªÔ4“ ¶ µ­É‘f4?2Ì Ò3Î$¬®¨Þq8¥N*Á°LwûÊtÎ,Ü¿¶Øî꘰AŒé¡®-rLØ) ªëÁ¬œ±löNí®1«Êl"½€ŠaÜǬnßÔmjsÖ“‰D“Há}â >Rä°í`·¥±2µœ;_±_>×L;öª2™Ÿ!JáRžÎ¬Ì.è +ÞDÊË5â8€›b cðQ}µÝp¡Ÿ*‡`ˆ]¨K'2nøtÎæөÙÜÍ>6ýXÁ ƒdì1xÐ';ðÒá%‚¦.ngWî¨ö¤VÛÊTm³ÔøUòT®K§1³ô£yïÆ/Òx©•Ð3>¾~¼58¼{Oë2y^üýðôyAnMWîMéWâü­mùýwÙ˜¶ÙwÕaûÑ'Úï‚È;)þïÏ÷Ï,ž#¦¿)¼wà° ¤lr„ò?¨Cµ(“4Âý7`«b²endstream endobj -1926 0 obj << +2001 0 obj << /Type /Page -/Contents 1927 0 R -/Resources 1925 0 R +/Contents 2002 0 R +/Resources 2000 0 R /MediaBox [0 0 595.2756 841.8898] -/Parent 1892 0 R +/Parent 1983 0 R >> endobj -1928 0 obj << -/D [1926 0 R /XYZ 56.6929 794.5015 null] +2003 0 obj << +/D [2001 0 R /XYZ 56.6929 794.5015 null] >> endobj -1929 0 obj << -/D [1926 0 R /XYZ 56.6929 687.41 null] +2004 0 obj << +/D [2001 0 R /XYZ 56.6929 687.41 null] >> endobj -1930 0 obj << -/D [1926 0 R /XYZ 56.6929 561.6045 null] +2005 0 obj << +/D [2001 0 R /XYZ 56.6929 561.6045 null] >> endobj -1931 0 obj << -/D [1926 0 R /XYZ 56.6929 501.5525 null] +2006 0 obj << +/D [2001 0 R /XYZ 56.6929 501.5525 null] >> endobj -1925 0 obj << -/Font << /F37 747 0 R /F21 658 0 R /F55 970 0 R /F23 682 0 R /F39 863 0 R /F48 885 0 R /F47 879 0 R >> +2000 0 obj << +/Font << /F37 779 0 R /F21 690 0 R /F55 1010 0 R /F23 714 0 R /F41 910 0 R /F48 925 0 R /F39 873 0 R >> /ProcSet [ /PDF /Text ] >> endobj -1134 0 obj -[650 0 R /Fit] +1174 0 obj +[682 0 R /Fit] endobj -1932 0 obj << +2007 0 obj << /Type /Encoding /Differences [ 0 /.notdef 1/dotaccent/fi/fl/fraction/hungarumlaut/Lslash/lslash/ogonek/ring 10/.notdef 11/breve/minus 13/.notdef 14/Zcaron/zcaron/caron/dotlessi/dotlessj/ff/ffi/ffl/notequal/infinity/lessequal/greaterequal/partialdiff/summation/product/pi/grave/quotesingle/space/exclam/quotedbl/numbersign/dollar/percent/ampersand/quoteright/parenleft/parenright/asterisk/plus/comma/hyphen/period/slash/zero/one/two/three/four/five/six/seven/eight/nine/colon/semicolon/less/equal/greater/question/at/A/B/C/D/E/F/G/H/I/J/K/L/M/N/O/P/Q/R/S/T/U/V/W/X/Y/Z/bracketleft/backslash/bracketright/asciicircum/underscore/quoteleft/a/b/c/d/e/f/g/h/i/j/k/l/m/n/o/p/q/r/s/t/u/v/w/x/y/z/braceleft/bar/braceright/asciitilde 127/.notdef 128/Euro/integral/quotesinglbase/florin/quotedblbase/ellipsis/dagger/daggerdbl/circumflex/perthousand/Scaron/guilsinglleft/OE/Omega/radical/approxequal 144/.notdef 147/quotedblleft/quotedblright/bullet/endash/emdash/tilde/trademark/scaron/guilsinglright/oe/Delta/lozenge/Ydieresis 160/.notdef 161/exclamdown/cent/sterling/currency/yen/brokenbar/section/dieresis/copyright/ordfeminine/guillemotleft/logicalnot/hyphen/registered/macron/degree/plusminus/twosuperior/threesuperior/acute/mu/paragraph/periodcentered/cedilla/onesuperior/ordmasculine/guillemotright/onequarter/onehalf/threequarters/questiondown/Agrave/Aacute/Acircumflex/Atilde/Adieresis/Aring/AE/Ccedilla/Egrave/Eacute/Ecircumflex/Edieresis/Igrave/Iacute/Icircumflex/Idieresis/Eth/Ntilde/Ograve/Oacute/Ocircumflex/Otilde/Odieresis/multiply/Oslash/Ugrave/Uacute/Ucircumflex/Udieresis/Yacute/Thorn/germandbls/agrave/aacute/acircumflex/atilde/adieresis/aring/ae/ccedilla/egrave/eacute/ecircumflex/edieresis/igrave/iacute/icircumflex/idieresis/eth/ntilde/ograve/oacute/ocircumflex/otilde/odieresis/divide/oslash/ugrave/uacute/ucircumflex/udieresis/yacute/thorn/ydieresis] >> endobj -1495 0 obj << +1569 0 obj << /Length1 1628 /Length2 8040 /Length3 532 @@ -8573,7 +8943,7 @@ endobj stream xÚíte\Ôí¶6Ò ˆtÃÐÝÝÝÝ¡Ä0 00Ì ÝÝÝÝ’‚R"‚´t ÒÈ‹>ïÞûüž³?³?½¿w¾Ìÿ^×Z׺î7¶‡Œ5Ü ¬‡¹rðpr‹ t´P(ÐWç…C­fL9g0ЇÉ]Á¢#°5@ ðòxDDD0rp'/gˆ­+€ù‘ƒ…ý_–ß.+¯ ‘.[€ññà …;9‚a®ÿã@=0àjØ@ `€œ–¶‰Š¦€YIÓ †P€¶›¨C@`˜ ˜`w@ÿ:@p˜5ä÷Õ\8¹d\@€‹y {‚ÀN¿!v€ØÙââòø €¸l0×ǸÂêfý[À£ÝþG“3üÑÃñ{$Ó†»¸º€œ!N®€Ç¬ÚòŠétµºþÎíy„p›GOk8Èí÷•þ`4¨+s¸‚=]粬!.NP ×cîG2'gÈn.˜í¿°œÁ¶@gk(ØÅå‘æ‘ûwuþuOÀ¹=ÐÉ êõ'þÇëŸ ®.`¨ '&ïcNëcn[ “ë÷¨¨Àlàî¿ìÖnNÿÀÜÁÎ -Äü{fXE­á0¨ÀlƒÉ¥ w}L `þŸu™ó?×äÿ@‹ÿ# þ´÷×Ü¿÷è¿,ñÿvŸÿN­è…jÁ‚ÿxcê€ßÌs:B ^ÿÎýïžFà¿4þ;Wàc!d`¶Íàáäæù €¸(B<ÁÖÚWÀ}¬Ô»Ìì …ÀÀýSL7÷ß0};Èö»ôA`˜õßå?6éx.5Sc}¶ÿöªrèA§Ë‚GPè¯íÇ9pÕ÷rþo:# ¸õ?¿ùdeáž^7Ïãú=*áðû7¹ÿñüë¬tu†x^psr?Fr~ÿsÿÎýOÀìo4 +Äü{fXE­á0¨ÀlƒÉ¥ w}L `þŸu™ó?×äÿ@‹ÿ# þ´÷×Ü¿÷è¿,ñÿvŸÿN­è…jÁ‚ÿxcê€ßÌs:B ^ÿÎýïžFà¿4þ;Wàc!d`¶Íàáäæù €¸(B<ÁÖÚWÀ}¬Ô»Ìì …ÀÀýSL7÷ß0};Èö»ôA`˜õßå?6éx. #%]-¶ÿöªrèA§Ë‚GPè¯íÇ9pÕ÷rþo:# ¸õ?¿ùdeáž^7Ïãú=*áðû7¹ÿñüë¬tu†x^psr?Fr~ÿsÿÎýOÀìo4 0Üú÷äè¹aÖÃöOÃoäæìüØã?ûÿxýœÿŒ=ì a.ÌÁAb¡ö™9Y® Ä£ò/z{xÂœ*Þè—ÖÁ»2#×Dj,ïêÃ8›ÇEµyÍî;Ýoª²n öA™ºÓÁß‹(üèX>ã.3v±ms™W`gÅúϨ¯"› rn­êèš—ß¡RŽwð9£_²Ò¹Ð_8=óe4%v>oFÀk(Ù?`LÙ½¼`êú4ð±ûåÃ&9[~ƒ˜;26cLà«|r)Sƒj…×Íl(ßÛ b¬Å7ÎßÊçÏVð™h9Žù,¢I‚°RÊ• e®äß·RÆ%=²ìÙ êt›œ(†Ì%³LÇî)®Ž>1Ù¥‘„µ…^Ñ2¼éˆO£Ý %õ‰>•pjÕr{2–ÂwÍ<–g¬™-j—!3cäáakIè,AŒ$ÁLˆÇÆ‹J¯³nöùU»Ïm›Þ‰D3 @@ -8596,82 +8966,137 @@ $O t‡Í=žÝbóÆÃwî6ß"£“˵?”JËOP2RÐ oQo+†â1)©w†¦ÜèådîI½ÈZ¿VÍ­(e÷åû È"QÔüFØs(úF$'‘qL ®/¶!õÔ ¤HvkÖ‰Œh¼È‰¬ê؉á¶o?Ùa:Šÿ±qêcŒ° gã!_QÇ~ÏWê¡1üaœ¯UÝGmã§Yñmn%ìRãr9÷¬ß0qˆ5†/‚E…(êÚ“†,W‚˜$Ù½ï¶åçLxËÎÔ|ú奕£w†Z|ÂV€ãž÷,éOd ÞyŠGÝ ŽÎ¨Ý3lÍ4©¿Î\×T2Zª½Ag—.7Ù#ÏPæï™v¼eŦQLÞ»±Oþ¼Ô\’ ¬ÿĵJÅñ¾(š3Ç].Å*,MÎ>ÛBx(ÃSÃó|D³uû‚Þ¡ï†{:Ò‘Á¨2G9¡Cê{É•<|?ÒK áéá@F)Ø,êw÷ó?È ¸¢Ëa„Çh%Ù±o^Œñ{‹6™Ý @¥-«ä%Å~jÉwXjz1îi´·î¬%uÕ3^¿±g¸`d+ÎK[ŽDe—„]âò†YèÖýÇ?Ï>£³HjË,èkѸÍhÔ8Š” ™v_Å [ªJÖ®²9m=·âú?\‹k>¼à¬‡¤*³Ñ³ž,Y ê<‹ý¹uÓ Z/ZV$S·é#ƒmNOš¨5M@¿§rãÝ0Hõ7¬&7[àçŽAØñêOõƧÈêÚ5±pE6~d»Ž^.x¨T1¬µ¤$£Í7¿ÿ4òÆêüj§‹G1¬èípoóÌ3³QýÐZ:œNÍÆéç,0½‹Š‡Zg‹ðâ£à)‹Q©¯³‹X""œÛÆ0ÏÁ¾äBvFA‚)Y9(ÎYÖý…ì¬S…|¸Ôü¾“qbæÇN.LÔX§…_ï‚¿œ%%½¥åŒìé|°D>W²7}C–Í#—ZR¸­$º`bÛGο…a¿9gÝS%\”Á/œîñhC|?s§ Ø…šg¯ÎÙÈ)ª¬m}ÐvÖËk†Ÿ.bÉ&O üõí+uqfº`Îa‡„°£â,I§ã¯½/‘˜÷ÇÝ›Á¤'P6ߢH‚Ú?÷›½šÙ¹˜Žà9¦ŠmHr7:pMRYŸ#£ 'æW¥¿ðKCß|-¡mWÝ躖nᲶË0–«ÞÐ3äÛÙ=j’¸Ë-,n–³e±€¢üb½iÙ;‘˜Hâ°l<)žL.ßÐYÖÿ°Ú·)wL=(‚Œ£± L|)=å'ÀÆ-Å@²öò¾µ<ÃNrä³6îµEôʃ3±d¶kÓ»¬ÿ‹%ôµøü·(kD~ô(¬_yñ‡Í; ¯åä²fùOî{&*‰äyÒ¯9ÛB±T¨d>è.òY[a-³ZyÏ•px9ÝØÜ>穾„»*|,4°ç Žð=Ï añŽ©{ZwLVqžCÅo, H;ç_7Gg[åGx d½DŽ…*~ÂJSÛ/ *ûÎÔF‹µëújQ‹jw Ý]_-Òq;Œ,1t³õ2ߥÆíËòê{:Ö§Ùo$<×ð¬žôôJ©Àëóüλì„b›F=ÍçåcT”u;ÐuË›÷#³»Z1q“ÒYÖgHŠ^fiyv|‰¢,PkŠA±¢FH£s^…EËRôƇnQWEÛt%Ú·y3™{æÈŒõFbKã<%Æ)â"-L+{墒zS'“#é²ÊòZÃ+•÷U­Á׎#Ç©ÃCcæHŸ,êä;÷=íÏô .óYäg:¯jÔn¹¶Æô×êS:c¤¬UºW¹Þ/Ëf¹ŠšcO¥ÛøŒM¯lD‰Á¦9²ú:­ÈùÈßÛ˜ìÑËr6½õx§ç±2ú]úS¹‘ p7O¼,j1îöÐËÚ{ž$ªS7O–xYŽróæs÷â»ì(è˜Ýš‹ÏD‚@§­Y#žC²L%¯íáž›1A•Ã¸©3¾~M+ÖAîDí>¤¶¯cãµã-Nˆ¥”ûÚÔß ÄÖtzâ"¹tãØ'>(˜“”hSðÕœM]ˆÎÛ…0ìŽ ñâSPÓKD³—dOj nÌó®|KHtÞ‘Ñ+㢟S'÷@6„iõ“¨C,÷ág3B½žpÖáΡÄêφÖÑn‰Ü;ɦc“ _7T,Q1çTiHøBÕWL8­¡¾  ,œ²£.±ß u2†)¶=–Oš ¹ÿêÚ´­Ùê², Aq¨¿râ^T!1í¢ëç2)áN\§‹¬‚)æÄËR…Ëbž÷ž6Cb5ü´çêÞ›Ô;ð¶¹mH“üÅL¸^Ȭü¤Ý¸Ê {>«m@Ë›ðzéN‹›´×»ÔÌÃBÿ]¬—š@)õp[jÊâá…6붡²BSHQøר.öØ«N÷Ž`ðG¿§zŽ^n)?ìû±«892ÉÿxÈÌÄ÷Ù%¼­Ø3ÕÎZJðô]\ÿ^¸Äé„SXA㣅¸r}[(â0Ò@¥elöÉmi¶ö­EWÕ9úQѲ´ˆC¶Û¯µAñ=°g>MF{Q’= †*Ëk¨+™×Øõµk¤i@ïħÕW:x<›ó"Í}<=<²šC½Q¤4Æð÷i©UµSöA-ÒiMÛk×qnñÔÆèO“¦R<)D¾€÷/ÇT#î¡ÍM© Æ$ÖžåÔ3³Ð¿Á¢\ç{Uª÷Þ<UW=ˆ$®&<ƒªZ€0óØÒgÒR*¹ÉÒO¦1‘'£ùŽŠj*5wË-·‰ûùT j4ÝióÍu``òh߯µ“K…ݻʔÑk‡‡A›”ôÈÔDôìtk¯ö2ÅÛö÷ú—¨§$ÌöZ¥ï@Î^ùÝêõ^E~§”Üúí¨u4߉<*ôŽ±§¸KJßùy/žn•C*}…ÃåLgI£J·8jŽ[“Þ³ ”ØT7%JÈOïä,Á!ØžÈ+ÌÁ¯f—ÉȘs‡h`Úq¢O”1£<ƒ3(©dØOfBOŸ º'"p=Q£B¿âäpJ}ÝØü™ŸZ®¤!p{òëÈa}÷qÑ¥³äƒ£DKXôžòxÇ(žÏÑã ©¨“{ÏçÉšj¿dqX·ã·ŸP¦Üv£ä£Ï€³i¬¾AÕ;³@øyŠ*œoLœOœÕøë…ú¾›ºxOÛÝËc -@YšUʳªø;žBiäMÖð.•\rž;ùU´¾Rø'î…ç)眄š˜ …@ƒi/_ A®ÉéÙêr«0áFx<×Er;¾zÇ´UÏšøSÂö²Ù„.¥mô÷Œhâæ¨É2Ø’ç/{I;õŠjÑm÷¬ -*s"}Y ;Ò‰¢ú{YÌÝÇí]p¶Òݯ€Ž¶Xo³êÙ}U¹ôZø: hÁ‚)8f÷EµÔëÛDäµsüð¢ qTMŠ:ù‘ɸX!±l®ûÔ”Ëû ΄,ñº17ýbŸgûŸ&fܽ×Y'jeAt ]ôÛïwV^þ%ÑåµÛR¼”tμ‡Ël¥¿é˜¦j¹„‚øϸ3èm>YjŸÖCƒÕ¸ÄžÄÈÊjbÆn“ªŒUý©?ô‹ïðu«ÈÃWøìý#ë,M€¾ߥJBQlŽ‰âXè-ebtxÃ]€s<—ÿ¢:XÝQ…¸w¶²-N;N¾?Vl¤‘vG‰…,Å%ë9êçöË'bìη9|1.…±!]¹¶DšÏó=RԌݬ¤Iˆg‰=Åh_ìŸ5rÿ/˜ÿŸàÿ  tv…;0ÿã­õÃendstream +*s"}Y ;Ò‰¢ú{YÌÝÇí]p¶Òݯ€Ž¶Xo³êÙ}U¹ôZø: hÁ‚)8f÷EµÔëÛDäµsüð¢ qTMŠ:ù‘ɸX!±l®ûÔ”Ëû ΄,ñº17ýbŸgûŸ&fܽ×Y'jeAt ]ôÛïwV^þ%ÑåµÛR¼”tμ‡Ël¥¿é˜¦j¹„‚øϸ3èm>YjŸÖCƒÕ¸ÄžÄÈÊjbÆn“ªŒUý©?ô‹ïðu«ÈÃWøìý#ë,M€¾ߥJBQlŽ‰âXè-ebtxÃ]€s<—ÿ¢:XÝQ…¸w¶²-N;N¾?Vl¤‘vG‰…,Å%ë9êçöË'bìη9|1.…±!]¹¶DšÏó=RԌݬ¤Iˆg‰=Åh_ìŸ5rÿ/˜ÿŸàÿ  tv…;0ÿõ½endstream endobj -1496 0 obj << +1570 0 obj << /Type /Font /Subtype /Type1 -/Encoding 1932 0 R +/Encoding 2007 0 R /FirstChar 67 /LastChar 85 -/Widths 1933 0 R -/BaseFont /UEKZXT+URWPalladioL-Bold-Slant_167 -/FontDescriptor 1494 0 R +/Widths 2008 0 R +/BaseFont /MWGRYO+URWPalladioL-Bold-Slant_167 +/FontDescriptor 1568 0 R >> endobj -1494 0 obj << +1568 0 obj << /Ascent 708 /CapHeight 672 /Descent -266 -/FontName /UEKZXT+URWPalladioL-Bold-Slant_167 +/FontName /MWGRYO+URWPalladioL-Bold-Slant_167 /ItalicAngle -9 /StemV 123 /XHeight 471 /FontBBox [-152 -301 1000 935] /Flags 4 /CharSet (/C/D/E/H/I/O/R/S/T/U) -/FontFile 1495 0 R +/FontFile 1569 0 R >> endobj -1933 0 obj +2008 0 obj [722 833 611 0 0 833 389 0 0 0 0 0 833 0 0 722 611 667 778 ] endobj -1302 0 obj << +1551 0 obj << +/Length1 1630 +/Length2 6133 +/Length3 532 +/Length 6982 +/Filter /FlateDecode +>> +stream +xÚíVuTÔí¶VA!¤†n†n”.IéΆ˜f(‘N)én$†FJ Á!¤[:%•$.úÝï|g}÷üuÏùë®;kͬ߻Ÿ½Ÿýìø½ki5´8¥¬á–y8 ÉÉÃÅ- +Òy¦§aáèha …«pJí•Ž HÀÈ(ã +±@Bá0Y $D¤±ÉB¬@¼¼ #Hîìå +µµC‚XnxXÙÙ9þ²ürYzý‰ÜD" ¶0Ó̓;Äîì!o(þ×ZiÙ@! u %5‹‚šHƒ¸Þ¡áf鵩@­ 0„dw9þqYÁaÖÐ_¥!¸n¸¤ Âb½ ƒxZAœA gˆ«¸yA [W ò¦H8 +³rt³þ%àÆnÿ-ÈÙ~ãátƒÝiÀH„•+Ô ºÉª!+ÿ‡N¤òWnôÁmn<­áVn¿JúÝÐÜ H ( BB<‘¿rYB@ÖP„³£…×Mî2gWèon(Ìö/ Wˆ­…«µ#¸¡¹áþÕ¿êýSõÎÎŽ^¿£á¿½þ¡ŠD@m¸<¼79­7¹m¡0ø׺(Álà î?ìÖnÎbî×ß bùµ3¬7",¬á0G/5ÄVƒ#oR‚XþwSæúÏ ù?0âÿÈ€ÿ#ãý÷†û÷ýÓKüï¾Ï§–wstT³p‚üýyÏ€T@¿.Я›jõ?b,œ Ž^ÿ*êïžz?¤þ"û;ö·Ìöf&œ"\"X¡y¨'ÄZŠ´²ÙX8Þtë·]f qu„ 7SýÝP'7÷ß0m;¨•ìWûþ€ 0ë¿k¿Ôoå`ummö}»þöÕ¸Ù¤¶—3ô߉ôTáÖÿ8üb’–†{‚¼9y„¸Aœ|7rx¸…ø@"|>ÿ"ëo"ž¿ÎªHW¨'Ȉ›‹››tóûç÷¯“Éßhä`Vpë_{£…´€Y߬Ú? ¿`+7W×› ÿ~ûo +ÿóü{é!Oˆ`zn%lŸš‘†¬"Ïéé—5úÐÁƒÑâ\\£ý:ß¿Þî—¾(Rf~QÂU;(zÕä5¾í|¹ªÌ¶ÖÛAæÈÜž ÙË£ò¡g}ŸO4ÏôNˆ}-lZŒŸöU/Ê{LeÓP[wm©_ó™iÑÅ=àà;>WìýSVz÷|R†g_«”·¯´ÖÞ"®*ØþÊ”°yzÂÜÕ÷±§»ýðîûUJöìW8Œbî˜øL‘þ.Ù”O uJåÊߪݎË;BbubÁï<_^Ë¿Å`i¢KÙÅy¨yc@–‰Ÿ'\;ø$·®Q;S-”âs/, 9D¦Ô#,9ƦïKv²±SÐúê¿»èçö‰%…÷²õ-âÁ]3ëãÝ“±Ñ][™CæºÊlëŠÑLü‹¦ëÀ¢€5‘ؽrô›ìç3üÜ°˜üDÑSjÛðôä)Wï8Ž*öÜŸèž“3@'}~+ÏÝ6‘žˆ•Ø\Žpµ<züuÚ>AbåPóبLbZ÷a3ÒYÍEœVÁ= ¾‹­{·^®2<¿}5aq€©ÿ_5¹Ûðòµ÷>›À¥´ê$C}ÀXŠ¹­œÕ÷ji—û­€G‡/§Œdû-!j¹;Ë6#ÔÜŠ.Oé­×ôÎc´¼$z¾I(ñØÇ/ Wj®½"¹ßKÒÿ¾ð{Lš¿ÞH¥hԻí:iÓFRF<g] Û39}—ÞÞF™8|à0­‰å‚Ô"¦¯£G$¼ ºêÆIª˜Ê΃ .–Šô‹µŸE·ÛCqüQmæoi\7yªàmûŠJ…0:næÅÊØê®óÆ XeŒ`Ãé’_ÿî½jâì…”Êr‰ÇO„DŸÓÕ6xÍ·o¯lŠýP¦ÿÎ*5„$8d”#ÙiWtu¿÷¾žG= kŸoHÉ]˜Ÿ:ã3ùN»­g}„™?&ì +b݇a›yKÜ£%t×TcaÖËF˨?B:äÐ 3ÚZP ‚ÌÆŠ} fñφôˆƒTU‡J鉽žj:»«Ï‹ºôN)/ÂÕ äE½¬^gº‹ ^/«k¯&6Ö7%³"”-ήQËòÍ“ ñÆ‘r¾“'#LwDEëЙ}`?—$-`¤¦ÍC5Õ‡ 9æ3ÖXïžÊºUFC:ׇ¸T<íàìe¸z&îÄŠù @Õ!˜- “Ú½¡…´cEҼŸýÍó2¦±h’—Y#ªªÇSÀìjzaT €Õx…^ÉÊ9%î5Fõ¡ƒ…™y ×±ªälš2$g$?˜ß{v€¢è§à,¯ŽÀnD£ÍfGªªSH4‡S"€ÚóôöóãNƒ^œ¤ä½t!¢+ÏøÝ÷n©X#õg«uW ³}ceS÷ö¸ïcZ¦BF%×# èS=ªbÁõËFñÁp%ˆ&ˆ÷Ñ ÿø‡@§{›Â§ F$ +ñÀèHvo»Vüy½¼Òç³³”ÎjÁÕŸ,_Âh^§–p³/â#Ó„HÊÀç„»ûÄŒ[‡¤Ê»B8Ò¬’%PË ™#¹&}Ô7uo(à–îu•úµÒ95ÀŒ¾?ËêcÕ8—ÄñâθÑ,™ê:f”†.‡Ðà¡ÝõÁ41hÀ›3):«;Ícƒ·ú‘¶Þ,èðY½:Nç5u…QEð ‰rŸ–²ÌûŠ!&.ÜYâü×É ú;á$¤`×yme~b©@{•3*¹‡ô÷¤” ¥Åêg`iDÕ˜|)1IŸ\°êjñ˜Î™+ Ä&j‰wé„™–£Á{÷…á«-G3µ«®ô*UÅmÖ­ïè, ï!¦ öOµìl•yóâúŽàäç?MµŽÇ¾Ä팼®sÞÀ±x»åÅ!¼´œ®“X>ÒIÙ»—X,×EAœ;¯è%Š]"N?v6ÁnÁ$W¥0O«W4¸»Æ—NQI…>Äóq†z#ÚQû3]º¹Ñ +·³®pBk¾j0ĵ¹Žjœßç]ZÙŸB dŠÌÓš­U• +ÂIÛ9ä‚·œãƒÂè©õß½n^(Á•Ýh´7C¶¦2„K~V')Ïï±^š}zTÉúÔu?£F-!z_‚¬šÉÉ/U‚og4²Š’.§N™EhôáÍÎËåÔŒL^ѽð¹œfCÛïPI†^ÔLʸðˆ§/çÓö±’¾¿Ÿ\S ³©»ï™ή0‰Ú·˜O%”çp×ù1ÔA?P(åÞ.¤gÔ> +ó¥ªÕl^Œ¨­Ý)e»ò3Pp[´dbõ¬ðVŠÿÒ³Ü4Å+β&VÊBÔ eŒCuOé‚¿# U9fiêCl·\r«ÒzÃÐWü®6êb1~i“EÉ5ÚÒ A¦¹§üÑœNƒÇ=< l””íyIæj%‡¨äÄiñ(<ÈO› õ;Zõ}¾TªL’[î^åÛA€Z…êþHKJühØûñœq/fóÄf¢8³?€æ¢%K]TkcÑøKEÄL1‡•·FÆîšÃºåØ KCÂCkÇxG®ï[v“U¤Dx?B;/³j8Ï,ã)¢ÉÏù٠űZ,wyð#½Ï«ÛŒr>xŒWÖÆú|nòÚ¸ £Á'¼Û#Í5C²&g«=O(½m°’úb6̶˲G„¬8Uc¬ÿ]ºÍ¼¯7A•Â]Êuþ 0œL2ä+¦ŽÀª²m>us¶„*6ºÏ‰l¾Ü]"¶ëÑ‚æNé9´v—ÈäN¼¥{– ñ°iÖÅ«Hºv!Y %Šžî=ó]©8¶á7ÎR8v4¹ïŽÚw²ts`üŽ<ÏJÅûŽç÷­F¨–¸ZçI°~¡0ÿ00+38)XAM&H.ž:lê}èt«ÈÃŽðÑÔ†2OÔé¢S;ö ·¢¿O±N~VRæ芆Ž@òÐ`"䉡âÚÞ Ç1gWÍçaÕˆ¬±³òÚ*|“ ML–"1fäV½C«Ç3g{©ybí Z) BVÉ?+¢]ìOdaòÏCxy&&üÎóØáå½NRºu8ì§$¥ýuÆEžÇqU-‘ŒOqv´£ÝZŒ¦Ì@F~êºa3>hŠ j-Š"TB«Þçú XB‹ÑN +‰ÌÙd%JWܽóµÈT¿È$ÿ$H~@²&jM¤Iòüé.‡¿÷ywúÜB½ÐÛŠFög„”p¾áÚÀ7sº‰&RDî(ŠpÅ3¯ƒgƒL«Œ˜–)\°¯b„îeý¡u1ì9ÔaºÔ0•i l]˜dÞÊNºwÚøw T甼T ­31&Óãâå"q è{•tjIõOÙ#u‰Uð¤û/qA©SˆËÕ[7Š·oÑ4Ʀ^žÔ™Q™¦¤îŠ»Lzò9QT1q†}«caK"ªQv[‘,P.£d¡ù:üœFª±î¤R=éY@A +‡¶úL9’00#†ô}à…Ú¬ëè¾>€à)…fbˆû†7sÓ¿×ÄÅ}ä׊³ÒgÍ¿?FІæIP›˜ké÷2è´à2|Ö§™¥£[¶WBMåtè³<èù:28¢Ä;Xf1S§³EŠ&´×å0Ä0d—5ŤÐ4|ylæ©@Är˜léË@È}±}µ\"òSÐd5ŒÓkùp ü3ʇÏÎ ++˜^h€&9I‰òÝ3¥–\—qaâ)&J™NBb0šNí`Ò.'39ë4^€îg(}*v–õ +d ¯òˆ¦:ôw.Œô5%µS¯sý˜?™g:S &«t|EŸ4îsFCÏ­ÉAgd«'geߺÌ÷hÛghj34€ž>æ€\û¶=ñþJYÛQã$ŠØ]¸ˆúÿÜ•~­¡ËØÖåú¥·üD7_ÊkþoùåŸ6=:ëëòsâ²ØÒêÊNraý?{•>Jô^ï(Ï%ZR`“Wû€[s|-ð®öü:Q°ø`qXó d=ýóá ÷‡ïÒ·e¿Qé;)1ÄÚ*Ê7¼Ø¹°ùnéû`îû¥µ.{_æΙ$ŽÛÕä6–¥³Á»úcË Äþ$úÄüÒGyÆß쳈‚Ñ÷2@~»ÌþH‚D›X®—vÑ ât‡’ÆŸ”|ùfOûcëQ?U?’N|bk¾ Ôt‰ò)MA ‡ç¨´‹›ÇŠ%î *ìN3zöû˜ Íð×90´­~âÜŠOg½`éÆ.æ%kK2œj/zÈ}âí;ZÑ‚tZ•„Œ±z‹D ÓNZV«ÊõBEí +ýL¡T÷Æ{ši®G3È¥ã"y+â3’§[cͽ<å†Q@òæì+}·÷¼Íñ0þ’Dâ%ßéfL¹7®‡SìD nŸe‹ïãF cé¯ÿäφ=jýúÑ…fìÁµAÌ^He±œÆÌ€PP‹@Sò˜ÈÈ5D7Âþ˃¯íãìoÎ64ÒŽY›]l_o%а¤ÒÉSŽšŒæ©óAüŸhöUù»ÐyèvíS¬ÐD=ËOÃxýa“²I;ÊÃÖ‰do“LÈÁd<±~ŒÞg®¨ÙÏØÃîpðzÕ±5õ*¨2Ò1·2BÏ`«ùñG8nå^{bh…Þƒ1K÷©éVZ˜gí"2eF˜ˆA4”ÈTøxzrA¤ÚØ?ß]íÝÇKÚâ>/oA,™ƒÍßš7±2ÖõÒ%Ýá»ÆAüÄjLï¦#˜!elµqÏpj•žaîñæ"¬¹pÈ®¡³‘¾¬p_Û°~ö¬Yã$Ä/‚¬]‹>’7çWœ¶*CüGž§“0#,Ùâ÷4)jÒ-oï-Ž|?Ä-¹ùË&¿IµBžÛh«£ÞE,÷—TÍŒ‰ðÅd+pY´è´[Ñ[óär›¤–Û#.NkúLK õÀz?|ìþ…"Œ²*çÝ#Š;þ /Á¾Õ™uÛfxA…÷±øÊx­ëL1Ê-¢æíYa“êKá°¬†%õ= Ê\\ɨ²*‰)s,›]øŒÆ×!;ypÕãQ4ÎÞ0QÕÓôÍoúyAyuUç˜C”C”ê؇o+Ê鼡 !‚Wc‡q…›—Á-®ä±s:£¸ùæf4#WßÐz½]!{ׄwETè ìyî¢LF׆‹úa‡õbÍ-dÇ&× Ú +ö”bÇЃ 9µ³+&ì“[8Y)+TïD>ì ¹BÙ˜c¨Eü,„˜Lå÷0±ä+ƒ;n§ør’HN[µ‡ÚöÎ=úôÈôdWÌNP–t«ä¡iÿcƒ¨ðÞ "²`ŒÃ©£ÑÝ{(æ¸ËfÞ.Xçtri¯h¤½8òž¾³pKÇù\ëþǬÐ(oÈùÏœO5†wªÒÝäÊ™ÙÁæ)ÐúÃw¹¿Ýî\d?  å$µ² ?(°¡Âòr>9ð–u é '8°YÒ§hZ³”£ºØƒêÉÔöwl"éWißÈ8¢£_ø7Wlõ°ÙïLE ¼«/£â¼u‘&õ}\GuA+ÅŽö/E`åõy‘ʽJ÷íð­;z£÷ «¸¨oÞù8˨z»jI*Œ»æC®û,²M3noâ§Wïýœû0-5þ6ÚžàMÎînþ÷¨™ìÜrêU¯þq + ‘x£´J60>y®ê$´7An¦“_ƒúµZ³+i5ºÅ‡Á) ¿{iR`FªFý“Sð™ñå»ÿa%€ðeå÷uì†Ò*ড়ÅÊÎ9 |ÀÑå|,´­Hƒèn_ÙË%i·˜³¼Ã'µ+c% ü麖‘Ý@;¶zu@ Ëf#[2aPàØÄë üSÑò“ëùIý1›„túÉb¯Mˆ·gÃÞç+kÚ:ÙîSRc;¦ EKZªâ¤ØjU¡ª†z­iRûRž2ã ­¾~æ9 ¶hKI<üORdÑ*ãAŸYëêà“ºñp0Ÿéj<°÷8KgQ»$`¹dÌù4à|ÐÈ¥ñ„î±ÃäÂñœð*S妽.®R³+Õ„„§æ›u4ÝZ‹]Îó‰ú5ýíî9•Ôp"GõAìÛ²¨<èQQïg7 ,kŸœx¡ÊÓ,/0íV*Ò>xì€Ëøó]Â}ã´„I©Óës” Óšð±ßUÛôÖEÉ|5Ÿ®ÐÁÈ Yf†å?åõNöl sÊrO©XfÒP˜í‹ñ~øX‚­üÀ«WŸù‹è½¢§IË!›¨„q;·[ò'@‹9ªŒòÕÂBiÂ}—&Å‹þª7¤Ü<$Qj¥½€“¢A\©ø¶©šö}ùNm¢r•ˆÅ2~/¶^=1mê"’Ø$ìRÎBï"Öha¨H&Û€à;ÖÊ&K<Ëv|oäϬAF‘/ÜŸÈwÕFµ< †ævJ€®\§š¼ïô~ntG·9%¸M¤x½Ä¢«È5ŽÒܶ?¯ÈÎó¸Û™è]_Ä~l÷?Å 7`NKƾ)a;]¥%سï^»œSx5O‘uy·KEîÔßÇ +(Z¢`‘®~VpùEaAzy÷UwJ­s÷Œ?´½‹š|: }ÒH»a‚º¾g)o}³=‹rrµM3v-ï€Ä@ Ùì'pÅXßÒ–× +ÕB¾ª\h~8©$‰¼¼·ý˜7!g;É¥ƒ\®cf>}7›ùâžÐÙZسãÁÖ–Ü^-Už&( +ÖËÓ»ÜIFÙØS­˜õOV_ºhýÐn-® +X{$¢½‰¼û£@–rlZ™âɞˊ1o(­¶¨mèö¡Ðé»÷ÝõäIŒ]Œ_-ô‹ ¸Þû ò'zŸT¶n76Gت–·& úìIĆ‹7ÎÔ‰‰f¾uä3¾õˆ;)EO4,Źk&l‰#õŽ¾„˜¬Ù¶³ ½höâiF] ‹œx'´ÅfÊb\ñê{Ý?¬¹¶=ê3¤XTÕW©*®§‰\Ee¶©x‘@†Dz:ƒ!¡X¾ÂK ”G½èß>c{BŒÍCŒ±¹0šUÕ¼ƒ¿ªÝ•5xfœéÉU“Nhèòã»Z–$8û훎·òБÞåú¸;ß¾2~%~QÍ÷*|6οÀ.©ó¶H&l]ážçµÐ[èù%¥κƬ!ÙrOxÆ!.B˜“zuW,Ôêr‹9å™ÊT°CHÖ‘_e‘‰ÿð:û5r€û3.ñ4v—W”ò]ª[)ïó–äÙÀ—݈H¾ÌûùSŽ¸+¹ºfS4çHõ¿ÞzyàÂ*/ç%Šâ׻͠Ï8ôæãmº'7…\ì°Å÷K)8ÐÁ@£bÅî\ç±ÄÝÊ‚×[g“©»5é«ÅÖ¡’'¯ÔíÌ¥ºégˆ<‚â¢Ï8TŠqùœ_U å=¢¦#fœÞ*ª6í¶²*æ›\oi›–•`ûlj[ÛW*ˆ»ºœ2Ž(ËtŒp{ˆ¥6Í]š†}„¯>{?'CÆà§5zíEëÝÚÓÞ&vø¾öŠ ÷dYcØL‰8àÇÉu°à•GËÝšÎñtûëV²­ˆ’eÓëû­&KÅàჃ‘oS*.m•»8ÕîŒWQì3ÊDÌûj OpHY²ï®f>×¼ù‰_ôŸö‘Ƥ‰´»ø|EÀ’=PzêîXDƒ%½+C£ˆ1_ù¶‡=AýYœ:&Aaú;æ¬U¾öÝ*“ÍXJ·=à²ùˆ1¦¬ý<ð»©,|# O'Cƒµë“M]í¼æf°ºÜS4‡AÇ÷Mj€“Ò·ÐökxõÊáž™ËG‡ÞÕéú,óÔ92‚¬ ߸gp0o9)ÁM£«&ChVF=Vv¯ñõ­Åž¡üÜÈT·Žïvä(Ê´ãé¿7jzä­ ¾¹Â6]E³ÚŸÉÞeIGOIùç…&˜+ÊZ Sl© +Í`ƒ©c½G¯Lsé:JθÿÍàÿ þOX9B,\‘p' WÀkœy½endstream +endobj +1552 0 obj << +/Type /Font +/Subtype /Type1 +/Encoding 2007 0 R +/FirstChar 66 +/LastChar 78 +/Widths 2009 0 R +/BaseFont /OTTUUC+URWPalladioL-BoldItal +/FontDescriptor 1550 0 R +>> endobj +1550 0 obj << +/Ascent 728 +/CapHeight 669 +/Descent -256 +/FontName /OTTUUC+URWPalladioL-BoldItal +/ItalicAngle -9.9 +/StemV 114 +/XHeight 469 +/FontBBox [-170 -300 1073 935] +/Flags 4 +/CharSet (/B/D/I/N) +/FontFile 1551 0 R +>> endobj +2009 0 obj +[667 0 778 0 0 0 0 389 0 0 0 0 778 ] +endobj +1342 0 obj << /Length1 771 /Length2 1151 /Length3 532 -/Length 1713 +/Length 1712 /Filter /FlateDecode >> stream -xÚíRkTSW‘ª¡¬òRIÕzX%2yj   b( ‰¹7ä–ä^z¹¤D|PIU–EltÉST” -«Š@} Ô«0|‘VXŽƒT­Š€¯¹`]]¥?g~ÍšsþœýíïìýïlšG”Œ!‚°p(† “#ÁR©„Ãä™Í¦ÐhÁ8¬  Q°p°Z§Ü€ÍòVy| - céIUÀ+˜>Iâ‘Æ¥R¡†µd ¥Bd˜ ˆ4°nòFXgÀx& 1)€%6©JaMj’ * ðßÂ.ý]*Æ3HQÀkJ&"! Õ«(¬HŒì“Zþ²¦Õi4‘ -ídù)§þ’Wháw¦M×0¤ãètj,üVœ†vzVB(4ˆR„¦j`Àà¬d²W¾Å‘ŒPDCQ¡T•B“Oá0 -MWBú7¥ƒ%Œ‘ÅxÿþµSÉ(‚цt°ÿ`OÅœ?bÒ$у6“ÍæDr¿;%Mk&F•„ ©€Ëó -W(ä‘9A!X`=©˜ÅD1‚¼Hgr€ -Ã)“ÿêÃ, œ‘1‰¾¸€•:9{¤{“Ø_Ÿ„éŒ\ÀàòÈV앾€Ïcçü‰¨Ôá8ŒSãCô.V!¤§0¬‡•ëMLé·õÓ}§·×䊫:ÙÓ3šlm?¿í”Ù9Üëçroü)þè7çmΟ"ÇJF"¾aA*^õ´(Ûb”±¶õ8[Ýèûe³*‡“g\.kký@{pÇ=ëâÁôFï‡?{>»›yÞ¾nÍ}¿’:R8³æÖÍWOrÓ6uôY¾†<‡J(IegÖì…åÿ¼[tuâAV…Y«/ÏOÜÿÌõµ•Úz§;í¶£Y`*“ÚÝ0û¿œÃ¦ëUýδÅÖ¸RÁj™pöBŸëòr3°ùÐßÃÐÜ!ýuö@]0àa~¿[’ŸS+‰]p¬ÂEY³@ãVMµ…ë[×·hЋƒõkó]Òê;¹þÅœôƽ´u)ã¯h¿-Ù9óiÒ‹½Ïߘ¨-•F÷3b½}fzyÓÛÙTûk_X<âê¯î¢Àð^‡U¦6íßû³›Ç¤ Np#ÏíæÑ/<­\Ê}á¸v_ùߤ뽿m²ìIëmñ—Ðû+ýëR‹é7948¡7ålô-ï˵ ªB\k f&YšBC«–4ÍÆz‚æ{¸.ô›ë$JŒê]Ö‹Ýú¢êsÙ.¼‰ñEÇ…>»_ú ýTci9â³(×~hË‚´]ÌÑ˾¿Ú¨M1túÖž´ü8oÙ>(:›±v_ÚñšˆšíZÃcÁœ½Çõ8våÙ瞊š~P•áE Î+bÓ³åô6Ú†+µ §¢¨•)L<>ðlK+Š£ƒ'ƙܳŸlàù%¦¾î8²îPµq÷¦‡o­\´cEèÐß3  ¦‹?/É}³u´'Lçà,njO°¢÷Ž™ïü؇¶œ;ä¬óôûfi@ µîÂ?ÆV­epUÑF¶&޻ж‚5WjkÝhÛàå Eª—ÕÝ"uý^òÔµ4§›¶‡´Ã¯NV•ÈY¹ƒ=«NùxkÆ*…¨l©ä´f¹ÍŒ;3Çž”¸>Ã7¼Îo(ßÞ®ˆZ?Z1á·kB—çze¤°ã—3+¤*é›ÙÞ”ùª,ƒ¾s^VSWé§r}0Ãkë™OŒ_r¿:mjÜl3”DAßÙªÛ·_w½.wÔr¶Ä -ôÜçGã:òíÞÏ)\M¥~†š–Öé÷×…—öÝy)+æÃË]/¹{©¸äµm¼¼n¨Ý¶,ñ0WèÒ¨l¬7í¹XYìø±\Œ—Fç+Ûn'oY=,­k8±Ûaç:»¸knAó¬…;7ÿìöxY¦¬âëõçùù™òs¡¼¾À9ß{..RPrÎÉ¡"qõÁÔ{âžðìç?|½g2ºäIìYsaÁ‹AuïßòbÉð•NÑ­Ö=´Ú.MSuiÁéÜ— ï…9n¿"¼æä¿»½¸÷YÛ8uñòu©ånßRŠ8!ݦGa-k² ôH âÙÛèÒÈÌË•uÝØ5¢Nnè¸^–÷ #k N´UíŸÃ‰Éc´Í ìfÝÿèjüçߥTóÆ.ˆ[’®õ|9ºv'ÿ¥5‰EO*b(ˆUݼyÖO³¢çWQkûÙÿá¢ü¿ÀÿD¥Và¦Uài”tñŒ³endstream +xÚíRiTSבª¡¬2©¤j=,Œ‚”$7BB„A ¢a”Abî ¹%¹—^n i*©Ê²ˆ.EE©°ªÔ¥–X…p"­"”°¬EªVEÀ©¬««ôç{¿Þzçü9ûÛßÙû;ßÙ —H‰§Æ7 Á8FzBLHÅâ0ˆ ¨3›Mc0 DJ¢8$%€ø|/°R­œe€Íp— ¸<âéZMUÀ-Ð}‚ÄBB 2)ÄRR¨¨2©HpŠZ&*•`íÄ °É@ˆLfÒ À¨ŒT£±&4…arðÞÀ°:ým*!2(QÀmR¦; DÂ8¦Ô‘ÓX8Õ ¡´ü7dM-¬V*#¤ª‰ò“Ný+/U¡Jí_ \•®&ˆq!°©ÔXä81£jÕÔl)U¢2!–ªD€'´œÉ^þG3‚Q G¢¤LäRe2‰#׈Æ£þ°ßjÿ1zÌ®d8ü+,çöÑO ³: kk½ÑÖɽbŸdÆÙPbò´Kem­ï©l¿kZhNoôxð“ëÓ;™ç¬ëV݃x•ôáÂé57o¼|œ›¶±£Ïdó%ì:XBK*;½jóë¢+ã÷Cð*ÜT}in⾧Ž¯LôÖÛÝi·l |}™ØêºÁ÷Å,¶»FÞßAƒö§-4Å•òWJ3ç{]‹)7‹÷}] q~ÍMáâßgt¹ó\ ïv‡å甄ƆEÌ;Zá «™§ô ©¦["õ­ëZT~Ø…sýš|‡´úNŽo1”Þ¸‡±6eì%ãE;¦?Izþ¼÷Ùk=½åLçbá||Z¬‡÷~ÿL7!÷v6ÝúêgF—x©â‹»¤Ð?´×f…¾Mõƒvó¨Äñ¯ç9Ý8ò™«‰C»'Sí-ÿP¼Îãë&ãîD‘Æ‚û¨¿òáo[ôû9ÉÁ ½)g¢nz\ªm8_äX[0=ÉØ\µ¨i&Þ30×ÅÏq¾Ïl;a¢9 +(vš.tkŠî+Îf;pÇÇxè~á3øcI´±qø°×‚\ëÁÍóÒv2ïG-Õyÿnu.¼6EÛé]{Âøýœ%{á¨lÏ5{ÓŽÕ„×lSiñgí9ʯY•gŸ}"lúN^F:·ðO—º·1Ö_®}DÚE>¯LañþgZZ13Óerά^ÏõIL}ÕíwxíÁjÝ®Ý\¾`ûzšÀ¦¿g€OO}Z’ûzËHOˆÚÆ^ÔÔž`Âî5Üþ¾ål>{Ð^íê÷Õb¿zÝù_FW¬ñäØË£tle¼G¡eÿ8n®TÕ:1`'ó¥iª›ÉÙ(vü6ì‰3flN×o &‡^ž¨*‰aåš{Vœôr!WV +0Éâ°SÊ¥ÓnO}\âl~Jl:p5”×P¾ö¿U¹n¤bÜ÷N׸:ÏñòpaÇϧ—‰åâ× ’=)såYZM眬¦®Òyvåš@O·-§Wë>ç|qJ߸Éb c©hßvÍñJhŒ­ +ÚË×pž‰ëÈ·z7§p%þ ¦_\7ªÙWZjî;²ãbVôûÆ;n1Î¥¢’W–ñ1uƒí–e‰‡8‡FYc½~÷…ÊbÛb”DiT¾¬íVòæ•C⺆ã»l¶CÙÅ]³ šgÌß±é'§GK2%_®ó;ÇËÏŒ9ÌíóŸõ­ëÂ" 'çœ,UH½+ê Í~æÿÝ{ð;ÖA#‹Çž1<7+zO{—‡ ]îÞlÝͨíR6U—ìÏ®qXÿNˆÝ¡öË‚«v¾»Ú‹Û¹Ÿ´Ñ—/^%œ\êôµ6¥ +êÖ? iY•c‡[ð ÛˆÞF‡6f^ž°4 ëúÎaErCǵ²¼Ÿ±hI}¼­jß,(:å×6ƒXÈ·šqïƒ+ñŸ~“RÍ=/jIºÚóùÈš¼¦$–{R‘§”\ÑÍcÚð$+òP~½¶Ÿý.Úÿ üO))Aâ*)‘FûVŒ¯endstream endobj -1303 0 obj << +1343 0 obj << /Type /Font /Subtype /Type1 -/Encoding 1934 0 R +/Encoding 2010 0 R /FirstChar 60 /LastChar 62 -/Widths 1935 0 R -/BaseFont /VNUSBU+CMMI10 -/FontDescriptor 1301 0 R +/Widths 2011 0 R +/BaseFont /OKNSTP+CMMI10 +/FontDescriptor 1341 0 R >> endobj -1301 0 obj << +1341 0 obj << /Ascent 694 /CapHeight 683 /Descent -194 -/FontName /VNUSBU+CMMI10 +/FontName /OKNSTP+CMMI10 /ItalicAngle -14.04 /StemV 72 /XHeight 431 /FontBBox [-32 -250 1048 750] /Flags 4 /CharSet (/less/greater) -/FontFile 1302 0 R +/FontFile 1342 0 R >> endobj -1935 0 obj +2011 0 obj [778 0 778 ] endobj -1934 0 obj << +2010 0 obj << /Type /Encoding /Differences [ 0 /.notdef 60/less 61/.notdef 62/greater 63/.notdef] >> endobj -997 0 obj << +1037 0 obj << /Length1 1608 /Length2 7939 /Length3 532 @@ -8682,127 +9107,139 @@ stream xÚívgPTݶ-HPPÉ™&çÐÉ™–œƒº–††î&K(HÎQÉH ’sÎ 9#$ˆ€øÐïžsn}ïüº÷üzõvÕ®ÚkιÆsŽ¹VmVF-]^Yª„p@óùž4`ö–Î(]°ƒ¯ÜEXYå‘P0†pP£¡O†P@jÅÄÄXòGw$ÌÆ àÐ×1ääææù—åwÀÒýžÛ(˜€íöà G8ÚCзÿãºP(m XÃàP€¼¦–1HCÀ¡¬¡P†:@‘`8@ËÙ³¨Á¬ (('ÀÀÿZ¬ØïÒP|·X²(€r„ZÁn·Aݬ Ž¿]<G(Ò†BÝ~`(€ 쀾í€9XÁ!¿ ÜÚ­9"·ö·¾[0- ²BÂÑ€Û¬Z -JñDÛ‚Ñ¿s£`·nÂú6‚°rþ]Òß-Ì­ †9 h¨úw.K(C9ÂÁî·¹oÁ‘°?4œQ0›1à ¡6`$E¡nan±wç_uþ[õ`GG¸ûŸÝˆ?QÿäC£ pk> àmN+ômn˜ÿïA9X#@¿ìgÇø\ È? âø=3œ·$À„ÜZðk з)ÿ3•ùþs"ÿ$þü‘÷'îß5úo‡ø{žÿ­ä ‡k€ío௠p{àj€ßwÌÿ ¶‡ÁÝÿMôß ¡1üw 4ø¶ ²6·Rð üe„¡”`nPˆ me °Ão{ôÇ®ï"á0è­–ÚàŠˆüͧg ³²søÝôÇb\PÈß™ßÊó‡7¿¾žœ²6÷ßoÓ?QZ·ª£õÜo‰ýWêÈ?¿1äänO^ ¨€WH@ôö° ĄżþM¾?@À­ÕÁh$Ì ðü¶hàŸÒÿëý×Êìo0ŠVÈï9ÑEƒ ·£õOÃo·•3y«èŸÓ~[ò?Ö† -uƒZ|™BX‰¼LLIB—Qdt ( Ã?V1ñŸx£+w¿³^õ9’e‡Ð†ŠÚ¥ÍäÊu””7œœ¸äN­Ñ÷ˆ¨/ùŠõ.‹ú…'Ð)á0äPùÝÚ…ke -¸éÛR§ö -]8sô&sß±­|*åŸî#>cÕ¯‡‹úœ‚ œEëÑymeê÷AÆ€>8m„ 1œ4¬jõõr¦XÜâd8„²³¤¿V>M¼çÀ7ÁÜ&N\€*ÄJÒÜOµøï8•^Ýçôáö¼J%qõ‡ ‘®.µ&у;ìXBÒ0ÊÚcVKŸ0-SÛ·ߌG?óí·Eƒòñ(€(§¸Ëš’=´øô•ú+y\J6.æꔋ‚œÞ»ó^eúÞ‚·V„(õb*$Ã=AÁžéÌmEéïa9žoñ€Rý3™ÙÑS×!÷8ÎãÒ9‹ÅÕçÜrƒÅ£‘C™Äù\‹-ÕÕ²k±ò¡øáÃÍ8 -ušÅ?Ó<–“G¬dtü®×ö¾ïùZélf -hEá$=k -jK‹ê\ô#Œ²Ô_j$ø>Û}~';Äë08~Ⱥ:{¤j7l˜ŒEÖÉ/‘ÕØô 5³î*Tô#ÛýêŒm¥(Ÿ¡\B½MÈb\Zk³u -ÂKJ^'W²Ù3FÁå¤éÉ.ðÊüÊÕúìðã‹’c=,®¬3jÉ/Ì ¬}橃”.‡Ó6Š& êÝîU¸¨Ûkh•kgݺKÙ!ì`M«a'x0¡ƒÌ ùts«,t-¥§†ìC+µýÝû¡ÝÒ^aâBý" ðf°Üpû š±›õvV¥³ƒÃ÷Ì ×pJs®a¯—ÀœÉAgÔ6tå„è/ZÅkQ^î›íF“’Ô¯[t#¾]°rÛÅ‹60^Ùý” ðzFYËP’OI*ÄmÉ×d«òñ¦¾âWfÖòûé!ou¾qÊÜCZhµ ÐÞ“iQ'÷|(D¦¶xÙ*ª÷d_R½˜Ñ%8Z?Èb+ -à‹)קw&¬š>òÕäø° DxùAt€næ£`öVkøqvëð1']/¸t ¡yô8,TÎ.a Os%/i5Bk9ºÃÂqóêò?¾*vO›7…›<ë]¥].>náJAž´AÖ 7MÈTk‡è´±ìŽsḢ—ê>¯ŒmÌw.4…ôí -ÉzY`yÖP@-ª¤9¯ŸÇæžÓçý¤>Vo€Ì¢éªd>Í/ˆöõÏ}êYÎàá&¸ÄÛøøsc cRí(æ*©.%Ѧó(á^áU3Ö€Ú~ Ÿ®EU×:3у¸cé‚u6d'¶K<¢šæ2(Õ<>Í´®x¯¶óÙÓ8'~_R³¬šžn]LKû"îà²f*Ã.ñW -³¸~h—•¸8˸ƒŒFF¹õ•Šû?ih -vžj ×`­Ú[­›öÇ|-…>°ë=].žàŽJ,}”›­ûÈi±ð!æÛ‹õÛ‰ÌJ«—–r•øœEk±9,ð”ˆO’ܽ…n®Ðq !páxÓ“1¶¥©~à]ÙDXÞÑTtÿ Xwd‰–¸rϽ”T…³k«eÛ?ƒ6òg¶òõPªj~«YÏZš{JÃÁp´hü@AÓœlú)ÿ€úBè×@aS‡ž”Y2(õ¡r‹¼û^*84å¹uÞVi¢¾¡HÑÂé…ØÊÏ–)ŸÃ;c4¢ž/{Ž¬Ûe/HìEˆ…jŽÚ¼9CÖ•Š ‚ŒüsB—W¨Èòè!&÷E*l.\ÙÈL4´ÚËÚ÷h„¢Æ·GñZÍŽ<çYÎz9†CÅŸäá¦TKñÅ3c/ÕQYV;Ò+Q%_Vªdá¸ô¿ð‘8ܳ v4e$2iä*õ Œ9csõ3k~YžØaí¼zf¡äö•Á’±¥;Éb1ª"(GO_XLô>ÅGçë%:}¨=Â[#™µ¿Nôp½vCžªÂíu>N1 ¬Ê¼íQù„8¬ì¨`æWn-aö­§m+´Y¬~5A”XĽh§"hV לÞ_9æJqB—¡Ìh'·ïžrs)¤<ÃÑ!]‚ŒšÙZ~\ÍHÒzU´NÏh“[€Hái3 -RgT­$vÊ®éï9‡á׺ù§ßWŸa|…psØ´"ÀÅÑÁñgð~¸¿Õxy¿oA‹z¾Â¼âÕëPúí, +ƒ"aª -GZ÷± Z6ÂlƒÝI§(²‡2˜Zδ!|Ñ?-IO“d×´–ÒÉ5(ÿà6÷YJã[u'·û²«€<±¤­åº ú$„whïÀˆZ]À3W=K‹g¸2wñÙàZ )’ÅâK«fE™í›˜9½œ·•*( m¯Ö¦ÑúAÔD%Wãj‰r—þôÎ#gg…ø渆"ÂÜWüsU”·ýBãK9œ'Ž²Oû,U•Ì‰É÷3N®î‘Úµ}¶Ãä9õåiæøHª³²4 <ß¿8++¯Vìâ·§4u6b`´˜ÿR 7ÃÅ·)Kæ÷X?¼É~ôÈ[oü¼·çúgšöì=Óbnš¬¹DÒûÊÆgÚØo–òÎÚ^\§’=Κ‰¹”ãÅžvô0páV[hNHOW0Öz<ýPlpИؑ¤õéylv_ióÔ”½Düñœ˜º!aKfÔô–}#Ëd@‡ŸÍˆuÿŠœ}¾<»Q p5Ieëò*']7÷B¼iØDòÛç£èⵓº‹`u#²ëd^‹Ýrs‰ó…–‡‰A6¾×SûjMÇ|:»NquÞÓÃïÌK!j±eÕ±8É“¹ «±¶~ò&ï|ŽH¸—¯¿ÿ2y”2eÆéžE½ûþ [€hó’ŽÄÆe—Ô;o‘> $øÖ­ð`-£ñz³ýe.¿š(W {"·ýÈ0 '+_è> åg혌ÈT`‰}ócÅVMú:DKÏ—_ÀKe<~"SE„|Yø„”cöÍK7Í‘×Ì û`‹ñWý Ï&“Œ½-òÆqS\šeÛ$ÐÞ*À(¹+œ0)u•QÕ”9Ò={îüyÍëê¾€©¦{ý\JtoeD¿8zK%QR&!k(éËZ"Л¹ÑðØ4ÿ§V0Ò¹È2\û½EŸÉztã;ÅÌ6ú+ŒŽŸrCfEc)lîOÚÕ†8i'|±»UŠ……òï–ëÓÑ ÜDÈdM oÅÏØ'53×Áœ§áLweOª”ÌÂüwͶˆ+»+Ã]ý›õhM.IâµyC]Ó|/ÍŽ™¾õĪ÷¹È”‹ß7ÔeSù°&»¹æ’+±•W|ÿ(̸?ø6|Kú‘œ™µÁ46<6zlDÌ%¡VésF¢¹¦GfôZ¤è)øJâ P1H|Æ<¼H›8ºîeg©õ/öND-¾ú‰”÷c Ó›UêYœq‘Õ1ºüeÅgÏp™šÂd„@ŒwÓ'vU6Vš4¶¨ž+iÙÚN9dB–?qhYêJÁoȯü¸"Š˜‰œñµŠýVw$ˆÇÑ5-C¶Ãö&šg ŸI}2Ñ»5ãùáö¶DăuéBÿ;¤»¥ªïÕ\rþhüæx€Í?‚^z:“Å„ê!Ïå¨Úqn\*$þ²2RAרêÇ"Yþˆ§ò¾_Zp%ý ¤|r(ÒÚpÀ£5§HêDžæÔà¢èE=$‹a”WX œoäž÷[§ -'å\’Äö Çn®u>ãÝNí:“‹&#¶Ú(DMèŽ:ïùSŸ}eH÷é-ü™§QìNV]"äéÿ£ùaÛ÷}é¾æÞ<Åä˜÷íŠdƒ‹^š¯¤,²ë^îL±¥«·ßåñ8#Ðx˜ 5ñ­#áÚ;ŽÅÃ\)³–âÐø|4l8•gQÌ%¿×]Ðì÷Q<îEï’Å:猼³Shpã’¤Z¡6bVš¡Q? ²‘«¼EÔÑ}÷’MgŒÄUb "yWVÝô¨iÆ…™®Àô’è¤øÆqÎë]£´¤ù0ŒjÏÔ•‘éf2ÿRQ¾×€<ÜÕ 't,>þÜÂÆbª—EW+pLfƒ$ý»ç³{Sã–f"Q)¨Ï¨;Š­u6¡1ï¸mÜ?„½|³íÒb°ø¡ýú‹iÃi³½­æ¼gmîg»}Š!½„cÝcÝØF4ã!mjJXο`ŸÔ)W2júK²õ^}®nl»*Í4ô(Æû‚ú6§º%ü£äœ’SÜçYýå&º˜ÌpÃ'xÂy±—2öå‚ÔSBg×^¯ûíê¦ðجTçFœêJYoŸ7&Š*\Ô~ð6þ/R§ïŽÈ'1ð»uefÞT×즶×}¢{lA õp½ -DЃqB[äßTœB*«ic:5uª ÍÐåS;ùEÑÎÙÀHoÑÏWçx ×ØÄИ0uÎlPÎ5 —¢ú½»<>ÕW:‹ƒoY2’˜HJyf€ÇòTcª§Y½ªÄæ'Jçx{êI_Í[¾ÆuE^n¥ñÙ±pmËISDx°ñ¸U -JŠ+Y–¾^#Y%ÿ GpXŽÒ0Nãˆ&^-`iªiðŸ;ÐNU‡UîS’7K±Åüð[Žç&“vñ;ÁsZ§â§u‰ö´{§¸àôò‡ëòÔˆBW ×B‹CóáiòT£ÊÚÿ“±'ŒÒÞÚ¾ ZwÕ¢‰?UÛ.[ h‡)qŒÐÇ -¯5Áƒ ¨“¹Ýa%µxkÐÏ_WÃp)ÉâüdÃSY]K¢þäWOk‹à0É3£¶×ÞGº?úða‚f—ŠTfŒ@Ó\a„¬™âˆÁÜþK ÎÉ ?µ;U6±e‹oÕ¨ÓîÅlé¥Âç+D~Y=÷m쨴¤8™a©f¦ÒÑí¸ÆWKð¹û“4^)½_ÓC×Í]µ¬oÚà¾õ)£Ü~ðM ‹/;…G¨¿?7ÙûŠ½ÚaAUE‚EÎ'èö¤t )®yïÞqŸÑŒž`2OÓÏß0”‡F…îý( r.mV")ã€1ÎÖç}~í5¢oèÑ"{€6@æ8ÏÇqCâ~žm+ ^ݯ˜g©SÌÜ’ñ/Þ˜,ƒ0F•Ë÷Ž#ÍÉqFÕúÉ«êv®W‚ÀEßæw°vöJá)ïŒûðD5{$†/~ÝÆúLb“ó¶j=ü8A~íkÑþPw5W-Dgã…SE˜ù‹Ú”ÁvjŽÄg¿™A£zî„}MmTýöÃIÁëÉñ®^ÂÒ¥· ‡ô¹v«¤ÅÁͤý -m›Hi‘œô d„†q. „WôâPløFûÐÀî±Ü"“­[¹É`¬?sòŠô£NÙêqüiv Ž&#‘ÑPb6G¨4Ùpòã¹>¼¾_$”ì¹J‘Nx?~«=!ädœGû¥ªw³ù‡<§=øÓð†T9ºU˜µZ6áa ¸•:˜ª/‰rÈÖò12Ê=ùëBB"ûª~fs¸WË!Ó¤˜MÙ{‰ë ,Ïïœ.¤Òp%ü¢ã„õ”/.!ËÐRl=šFb›Hk]~lKÂþk¾ç%˜ºè&!ìi§‘²‡šf§ZÕGeÙj½îgeµÍ’©×O2nbïÅâ¶d\—@9}%Õ -‡¯0&;ì8u¶IýÚ¼ü?"¦ûø}¶lÞK©#«ÞÓBüFçõ'Ã÷bc-~Žò8îêÜÕ, |¦,kÏ%äq†Ö‰~^÷ŽÓ×™E°~r¥¡˜[©¹Ùéù _T¾lÌâÍÝÛ'6t˵g™ÿêd‘dç}šÕ<æá©íR²óþs·Žx¹ jRZ áï†ÉyƒäVåã æ¬ -ù¡M½Þöxhá,ÿ -áHQ þY»BåÕjªâD^ûÐ."ß·ƽú5Zï°Æ溱@²¬®fµ4ðÎ^‚›M²¸©ým|ÿ ¯©‰É«ê4 -$L¦nW`6»SN™’h܉¥::`í ?ä·¾:*Q “ן”„y·±,ˆÅ’·õç ?‘²}ùT{·BV°£3ëÉZmmsÇBkÙ-’Ãøá+@™d׾€ËM¥Üšô³lŒ~‹ûÛ«/xôñTpïÅM~âÓ¶•˜IÓAéoc_3¥KNI/6Và&âûßÕ{´adÂ{Þ@:C&] [°A=Ûe¾¶5YØøJ>ªí®(íPãHš(b"»,ŸÚšíÑ)„Ï\˺_ºw‘©¿cð>b»¨Oœ»ÛybôÃ$N`ðöL~kñ^óÛSïž]Þ ÙXƒ‚AW°}´e•!]¨µØìà×fÏH Í·Œš’ ƒGïa:Õsg«1ì8ñÍÑ –äiöÉñhCìò´g¯Ë8ßêô-Ì–~‘9V|T±&Nn·äML†‘§ÚDü”¹Ú>I^Ž”[û•ÞJ¶½ÕÉò< ë•Zv·yÁ<ü0ˆ¤5ºŒ„hO!ƒÈ÷sÿððd‡åÁúÌ´Jb+"ä(2mfƒ77Ê¿”Í@5'çѾë%eˆýÕ0©ª¥îò{d„þº„”ÇÚtÁïå7M …Ö¦ª´}s¢ÎŸGÏ’U¤fÉu'¼ˆ6íãÕ°³ôv‹Ø^,!2èöh §Ûo­£Þ`iÓpë1å·¼øê”ÁßÛÙVaðL?ñ5à²Q‹KÚÒ -‡á{__bçâ.°ßþºæó}<¯½kb¶Þý9\¥™àpDË\TL[\a·¿«NüÆW¨œµ>¿¥t®tÉQÀRD‚!$Dr£G¢1¸AÌý¾ ¥Y í–.ç#_©ØÉ#¬w¥Å¹ò«|Sþ?Z:è:”—fÆ×’¸ʵhúÏÈ×XaÛfÚœ¯Ú3™B¶“—£Ìü¤‡uቇôä·ÏÔϾʉltãp)’&ÿT+p•°e –íZ­M31I¡ÒÏL«êÈcýªG’«ô"Hx¾çS•ö$Û_Œ*[£n~OYgÚC¢ã® ø -LóÃI8GU–¿Bã¡\‚–Ÿˆ{éõ´Sû›7M‹Š–…;ûÛ䃵h¹0GQœ&÷ <‹"œ_ý¼ÈAze‰ÀN2ÿPÜJ"u]©¶ÕLòs.}æQùü‰iõHö5¨ñ‹‚‘öqLðëƒýUj[’ =Á®…1Ñè²YÆHOŠåoq ’„!¿‡RÒ¯¸ð%ê«~u¯ ³¿0Š×·6î;>nE=m½aÔ\{\ÄcïQq”&T/bµ^þü‹}m“¹ò A’ü陈×O/ÍI>c×b%ÒÌ&ìýºªú· ¶mJ;û7žb{ª6eC‰Æô_è<@ÀbW’+Q'‘šäçÚU›‚ݧ/ˆ+ƒË°a*¦Ûåõú/5 JÔ†½ó'lï 0Kf›/Ð^‰ˆÖ½žO¼¡M [If§€ãC `æÔbï1}ÚU*÷i g#™HÓÄ+¸"î2X|F#êLq¶ÀØÙªþr#g -<¤þdÑ _IÒõ.˜ê¢Ï\9¾§é-xÚÖ-9?›ìÐv_ wóý}¾éH`…Ñ'>Êß4¬>äŽT‹¬ÌÛúGäµGÔà…$Í ï‚7LI›u`žUJ2ì„΃79ç¯~f´lá­ÊΚìïW 5?|¸':U—.ûrJo ÇÓlÔË5áAÜçxE ³º×ا‰3Ç•ÚTñ#åKþtâ•.iKW@ö/É›ÔÑ÷ ûj&Q ¦Œ²È˜¥t°Èð§Äh-ؤ1íý b?e¾™F Š– ÉXrÙ/&Šjz©¨rAÁM°re.2Òe%ÉÍ£™6"5[¹(H4 :\mdb“™[i:ýP½2“¿Ýä÷ö0JÑ»pÕh¯QšQ¨ý±Qó_»Ã7;mþã«÷Aú^ÁÐ; Ó èvñ¡Õñ¥ã«*’Hóß¹,QëtT½}…ÁbWý€g”ùxÔ$Ó¬GÞ×™®'}¡uÞói õ´’D§ùõ; ¼xðÞÔ¡Æ°~. °öâ%ÅÅ4O”˜»ª¡ Þ»Bï­\ÿÆÈæ  -†ìvm…$t§³ÎLd?莑ˆ+í–«I&VñZ"-¿35MGöÊìä§7À Ñ4‰>ÅauA×W¯½r‚…`Hã×W{Ûw1Û®­¹E¥^["W¬%BŽ… >«íÜMÑ#nNCuy‹¼Hû %Tž,TÜþ0]4.ïdîžk0œPañœ„5ðY ÓëF–?ªU'?Õ‹«žäfü¸Š·Ö¤qCr®až1j,†º¿÷2Ó“=²õáÿ¶D4ÏØeÊÀ¿I Üóv¼vþ´b„dîÿ¼ø)xý)\+"oÜ´¦ÜD1å[|)h$úØûeGUeŸ?õ¾†Ó<åízznKB†Éd–¬ö…Àÿò!øÿÿOXÁ¡`$aFÚüîm)õendstream +JñDÛ‚Ñ¿s£`·nÂú6‚°rþ]Òß-Ì­ †9 h¨úw.K(C9ÂÁî·¹oÁ‘°?4œQ0›1à ¡6`$E¡nan±wç_uþ[õ`GG¸ûŸÝˆ?QÿäC£ pk> àmN+ômn˜ÿïA9X#@¿ìgÇø\ È? âø=3œ·$À„ÜZðk з)ÿ3•ùþs"ÿ$þü‘÷'îß5úo‡ø{žÿ­ä ‡k€ío௠p{àj€ßwÌÿ ¶‡ÁÝÿMôß ¡1üw 4ø¶ ²6·Rð üe„¡”`nPˆ me °Ão{ôÇ®ï"á0è­–ÚàŠˆüͧg ³²søÝôÇb\PÈß™ßÊó‡7¿ŠŠ’H›ûï·éŸ(­[ÕÑzÄþ«u䟋ßrr7€'/PTÀ+$ z{Ø„bÂb^ÿ&ß à¿Öê`4æx~[´ðOéÿõþkeö7E+ä÷œè¢ÁÛÑú§á·Ûʉ¼UôÏi¿-ùë?C…ºA­¾L!¬Ä^&¦$¡Ë(2ºž·µ±ºó>é½ÏöýˆhöI ^+zq]ÈW9ôô¦Î}rÇñçú3®žr8{s<ô ‹Ö‹™³5ûÑ[ƒ(÷†?¿yaÒ®a¸çá„Ú¶Écƒ•móÜë»tC BH¼ÃÌ.Ù¾¤,çŽDÞV ‘d+1ˆËrvvÙb¾~?gïèíîêl>Æi]§áNÄgwÁ&d óuJ§‘6Ñ/òŒ°ÌÆt|Œm jÕçZ˜9&¯Z˜lá*´šõÜ-‡V#ýü=U®Ìçöïd}hqÓìô~3û!P?K³v•gÄ"H»~j=øVÚûmèÙïꂇJnõYÝÑ@á3þÕ2áľA»T±®üokéwÊÀÃ|í¾9|—#5Q ªU’¥øÑʤñ(K×Ea?iö¢í˜;v•c19>ÖÞ>’7ëÃÛ£¹.᫘øÏ ¼Ñƒ»ßY¯úɲ‚ChCEíÒfrå:ÊÊNN\r§Öè{DÔ—|Åú—EýÂè‰ðr¨üní‡Âµ2 Üôm©S{….œ9z“¹ïØV>•òO÷Ÿ±ê׉ÃE}NÁ΃¢õ輶2õû  c@ +œ6B†NšVµúz9S,nq2BÙYÒ_+Ÿ¦Þsà›`n'.@b%iî§ZüwœJ¯îsúð {^¥’¸úCHW —Z “èŒÁv,!ieí1«¥O˜–©í[oF‹£‡y‚öƒÛ¢Aùx@”SÜeMIƒZ| +úˆJý€•<.%sõ JŽÅ?ANïÝy¯2}oÁ[+B”z1’áž ‚`Ïtf¶¢tÈwŒ°ÏŽ·xÀ©þ™Ììè)‰ë{çqéœÅâêsn¹ÁâÑÈ!áLâ|®Å–êjÙµXùPüðáæN…:ÍâŸiËÉ#V² :~×k{ß÷|­t63´¢p’ž5µ¥Eu.úFÙê/5|Ÿmƒ>¿ˆâõŽ?d]‰=Rµ6LÆ"ëä—Èjl zКYw*ú‘¿íþƒ uF‹¶R”ψP +.¡Þ&ä± .­µÙ:á%%¯ÆƒÀ+Ùì£àrÒôdxå ~åj}vøñÅɱWV‡µäfÖ>óÔAJ—Ãi +E“õî ÷*\ÔíÀ5´Êµ³nÝ¥¿ìv°¦Õ°“@<˜ÐÀÁæ„|º‡¹Uº–ÒSCö¡•Z„þîýÐni¯0q¡~‘x3Xn¸ýÍØÍŒz;«ÒÙÁá{æ†k8¥9WŒ°×K`Îä 3jºrBô­€âµ(¯÷ÍŠv£IIê×-ºß.X¹íâŘ ¯‡ì~Jx½?£¬e(ɧ$â¶äk²UùøS_ñÎ+3kùýô·:ß8eî!-´ZhïÉ´¨“ûN>"S[¼l ŒÕ{²¯G©^ÌèÇ-‰d±…ðÅ”ëÓ;VÈGMùjr|XP"¼ü :@7ó‰Q0{«µNü8»uø˜“®Ü :†Ðõ‚,ç ðp\âm|ü¹1ˆ1©vs•T—’hÓy”p¯ðªk@m?†O×"Š*‰ëN™èAܱtÁ:²Û%QMs”jŸfZW¼WÛùìé œ¿/©YVMO·.¦¥}wpY3•a—ø«ŠY\?´ËJ\œeÜAF#£ÜúJÅý4´H;O5Ðk°ÇVí­ÖMûcŠ ¾–BX‡õž.— OpG%–>ÊÍÖ}ä´XøóíÅúíDf¥ÕKK¹J|΢5ŽØxJÄ'IîÞB7Wˆè8†¸p¼éɘÛÒÔ ?ð®l¢,ïh*ºÿ¬;²DK\¹ç^JªÂÙµÕ²íŸAù³[ùz(U +5¿Õ¬g-Í=¥á`8Z4~  iN6ý”@}!ôk °)„COÊ,”úP¹EÞ}/šòÜ:o«4QßФháôBlågË”O„á1 QÏ—= GÖíÎ2‹$ö"Ä‚B5GmÞœ!kÊ€ÅÁFþ9¡Ë+TdùGô“Àû"6®ld&Zíeí{4BQãÛ£x­æ +Çžó,g½Ã!‰âŒOòpÓª¥øℱ—ê¨,«镨’/+U²ðN\ú_øHîÙ;š2™´@r•zPÆœ±¹ú™5¿,Oì°v^=³ŽÐŽrûÊ`ÉØÒd±‡U”£'„/,&z‰â£óõ¾ Ôá­ÌÚ_'z8ƒ^»‚!OUáö:§˜VeÞö¨|BVvÔ0ó+·–0ûÖÓ¶Ú,V¿š J,â^´S´+kNï¯s¥8¡ËÐ f´“[„wO¹¹Ržáè.ÁFFM„l-¿?®f$i½*Z§g´É-@$ˆð‰´…G©3ªV;eW„ôÆwœÃðÇkÝüÓï«Ï0¾B¸9lZàâèàø3 x?Üßj¼¼ß· E=_a^ñêu(ývЕA‘0U…#­ûØ-a¶Áî¤SÙÃL +-gھ蟖¤§I„²kZKéä”ð +›û,¥ñ­º“Ûý ÙU@žXÒÖrÝ}Â;´w`D­.à™Œ«ž¥ÅÇ3\™»ølð­…Ébñƒ¥‚U³¢ÌöMÌœÞÎÛJ”…¶WkÓhý j¢’«qµD¹Kz瑳³B|óG\Caî+þ¹*ÊÛ~¡ñ¥ÎGÙ§}–ΪJæÄäû§ W÷HíÚ>ÛÀaòœúò4ó üN$ÕYYšžÇï_œ••W+vqƒÛSš:± 0ZÌ©„›a‚â[‹”%sˆ{¬Þd?zä­7~ÞÛsý3M{öži17ÍÖ‚\"éýGeã3mì7 +Kygm/®SÉçÍÄ\ÊqÈbO;z¸‰ð «-4'¤§€+k=ž~(6¸hLìÈÒúô<6»¯´yjÊ^"þxNLÝ°Ç%3jz˾‘e2 ÃÏfĺEÎ>_žÝ(¸š¤²uy•“®ƒ›{!Þ4l"ùíóQtñÚIÝE°ºÙu² ¯‡Ån¹¹ÄùÂGˈÃÄ ›ßë©}µ¦c>]'Ž¸:ïéáwæ%µØ²êXœdÉ܆ÕX[ +?y“w¾ G$ÜË×ß™‹<Ê™2ãtÏ¢Þ}ÿ†­ @´yIGbc‚²Kê·HŸ|ëÖ x°–Ñx½Ùþ2—€_M”+=‘Û~d˜„“•/tŸ†ò³vLFd*°Ä¾ù±b«&} ¢¥çË/à¥2 ?‘©"B¾,|BÊ1û楛æŽÈkf}°¿Åø«þŒ„g“IÆÞyã8‚© .ͲmhïF`”ÜN‚”ƺʨjÊéž=wþ¼æuußÆ?ÀTÓˆ½~.%º·2¢_½¥’()“5”ôe-èÍÜhxlšŒS+é\d®ýÞ¢Ïd=ºñbfýFÇO¹!3‚"Ž±6÷'íjCœ´¾X‰Œ]Š*ÅÂBùwK‡õiŽ€hn"d²¦…Œ·âg쎓š™Îë`ÎÓp¦»²'UJfaþ»f[Ĉ]ˆ•á®þÍz´&—À$ñZ¼¡®i¾—fG‹LßÇzbÕû\dÊÅï격|X“Ý\sÉ•ŠØÊ+¾ÿ fÜŸ|>„%ýHÎÌÚ`=6"æ’P«ô9#Ñ\ Ó#3z-Rô|%ñ¨$¾Gc^¤‹M]÷²³Ôú{'¢_ýDÊû1éÍ*õ,θÈêÝþ²â³Gƒg¸LMa2B Æ»é»*+M[TÏ•´lm§2!ž7V¦Ôˆ·nŠæ‘’¸†pj7ŒÙ>ò"$›XêÐ:{—­¶^˜u^9Ì’„‡DW¬9%%^ ÑËå,W0ß²¦ÜÝ™ZÒ×ý/õ{øúÆ>²Ý” à/"ŽDkúmù0§_ì>WTxìÑéƹœ ‹› +zƒ½Ê-%¯Oà¸L5“‡û’ªV,î½øÊáÃz‡>ò&ïw¼´rY6Ç—ÆJwŽGƒ ±Â*ÜA5ƒ +ëšSùSÕi…Ÿ*z~Öå{OrÛÎâ¿z»—­’M®læ|Pû„î"‡ãüi®WêæˆOâ›Ð'ñëgÏbíbœŒÉQùb³ 3.ã…ñk›ÌBd¬ilüÖw_ãcÂŒ´¾,ã ŽxË? õ XËÇŸ8 ´¬u¥Æà7äW~\EÌDÎøZÅ~+Œ;Äãèš–!Ûa{Í3†Ï¤>™èÝšñüp{["â‚Áºt¡ÿÒÝRÕ÷j.9ÿ4~s¼GÀæA¯ =ÉbBõçò@Tm€87.Y© kTõc‘,ÄSy߯N-¸È~R>H9i m8àÑšS$õ "OsjpQô¢’Å0Ê+¬΋7r Ïû­Ó„–‹r.Ibû„c7×:Ÿ‹ñn'‚vÉE“[íÇ +¢&tG÷ü©Ï¾2¤ûôþÌÓ(v'«.Š +òôÿÑü0íû¾€Žˆtß +sožbrÌûvE ²ÁÅ/ÍWRÙu/w¦ØÒÕÛïòxœ‘ h6œÊ³(æÀ’ßë.höû(÷¢wÉbsFÞÙ)´¸qIR­P1+ÍШÙÈUÞ"êè>Š{ɦ3Fâ*±‘¼+«nzÔ4ãÂLW`zItRü@ã8çõ®QZÒ|FµgêÊÈt3™©(ßk@îê…:îac1ÕKŠ"Œ«• ¸&³A’þÝóÙ½©qK3‘(ž&>ÒM\Ã\`‚jŠ Bø÷!÷©™ åF­–jÕÍ Tâ™3òB½bKG§såÉiQ +Ý‘o•~~æHj¦ä=ß‚§§Øç÷üÁ4fA|Nç“ž@íD2ÏJªÏ ªßãfœêvæ_ïùQÎ`œTäUí`­Ø@–¶Y™i"Çø¡Ñ=¸M×g•Õ´1š:Uпƒfèò©ü¢hçˆ Šl`‡N¤·èç«s¼„klbhL˜:g6(皊…KQ}ÈÞ]Ÿjƒ+ÅÁ7„,IL$¥<³ Àãyª1ÕÓ¬^Ubó¥s¼=õ¤¯æ-_ãº"/·ÒøìX¸¶å¤)"¿öÑ7ôh‘=@ + sœçã¸!q?Oƒ¶•G¯îW̳ŒÔ)HænÉøoÌF–A£Êå{Ç‘æä8£jýäUu;W+Aà¢ïóÇ;X;{¥ð”ÇÎwÆ}x" Æš=×N¿nc}& ±Éy[µ~œ ¿öµh¨»š«¢³ñ©"Ì‹üEmÊ`;µ +Lj +â³ß +Ì Q=w¾?‰¦6ª~ûá¤àõd‰xW/aéÒÛ‹†Cú\»UÒâàfÒ~…¶‡Í +¤´HNú2HBÃ8—GÂ+zq(6|£}h`wŽXn‘ÉÖ­\ƒd0ÖŸ9yEúQ§lõ8þ4»G“‘Èh(1›‚#Tšl8ùñ\^ß/Jö\¥H§¼¿Õž‹r2Σ}‰RÕ»Y€|áCžÓ|ƒi xCªݪÌZ-›Çð0ÜJLÕ—D9dkùåΞ‹üÀu !!‘}U?³9Ü«eŒiÒF̦ì½Äõ–çwNRi¸Ž~ÑqÂzÊ—eh )¶M# ±M¤µ.?¶%aÿ5ßóÀ€L]t“ö´ƒÓÈÙ‹CM³S­ê£²lµ^÷³²ÚfÉÔë'7±‹÷bqÛG2®K œ¾’j…Ã×?“ vœ:Û¤~í ^~ŒÓ}ü>[6ï¥Ô‘Uïi!~£óú“á{±±?Gywuîj>S–µ¿ƒÆçò8CëD?¯‹{ÇéëˆLŠ"X?¹ÒPÌ­ÔÜìô|/*_6fñfwÀËîí›FºåÚ³Ìõ²¿H2ž¤…tgm&T-·¾wV¢ý”u­ä“˜·zªM·›Q_q3/HëŒøl£šÌµ-@j +=ÂRŸó>ÍjóðÔv)Ùyÿ¹[G¼Ü5)­…ðwÃä¼Ar«òqsV +…üЦ^o{<´p–…p¤(„¬Ý¡òž#% +o– ›.%§ª¿ƒàêÕÎ*4Z®÷„&§xás=G‡ü^P䶊ŧ¡¯ÕrȈ=ÂÆé2¾ldÔD4“kêœÐw§3\Wd†@$B}vÓmwÝK&à#ýÁ?¡e6êœÿ¸¥*IÖÔ*Àií¨²Q„É¿åAFÜd@+íy‡íj¡×Ré­¬üž±àV{ñ)„ÓÜy¸K þÍç*ï¬%3Ã6ÄÐqO®Vîz +Pdž·ÕŽÝKcì" ÂñקÃ߸Ð|÷”: úaAÞffñ~þµGµ³+ìMk{çg1Û»tîO±¶)0ÞʜڲÊ.ÔZlvp‡k³g¤…æ[FMIÁ‹£÷0ê¹³ÕvœøæhPKò´ ûäx´!vyÚ³×eœï?uúfK¿ŠÈ+>ªX'·[ò&&ÇŒÈSm"~Ê\mŸ$¯ GÊ-ˆýJo%ÛÞêdyž†õJ-»Û¼`~DÒ]FB´§Aäû¹xx²Ãò`}fZ%±ÆÈr™6³Á‡å_Êf ˆš“óhßõ’ƒ2Äþj˜TÕRwù½@2Bÿƒ]BÊc mºà÷ò›‹¦†ƒBkSUÚ¾9QçÏ£gÉ*R³äº^D›öñjØYz»El/–ôF{4†Óí·ÖQo°´é ¸õ˜r+a]:Ý0A“ SŒ>€Gè<5¾Ó\cô>3µ´×šõ®<;Ýgb¯Ø}ð´=uÛMo––ú(þ„!’¼»Ã!M¥'ÐÌ‹bÄ8.°X$ï*žŠ´1]Ð_Õ>-ÿ¥Ó½Uo×}Utš¡)ƒ(¿rñ›u‹äÞ§P:…(¤ãLQÍüϲIz„_Ϫl¾Z Ø©Î1)™¬¢.TZ +í&2PƒóuíIŸ[^|uÊàïíŽl«0x¦ŸøpÙ(ÈÅ%mé…ÆÃð½/¯ ±sqØo]óù>ž×Þ51[o‰þ®ÒLp8¢ˆe.*¦-®0ƒÛßU'~ã+TNŠZŸßR:Wºä‡(`)"Á"¹Ñ£FÑÜ æ~ß…R,vK—󑯈Tì‚äÖ»Òâ\ùU¾)ÿ-tÊK3ãkI \åZ4ýçäk¬°‰m3mÎWí™L![ +ŠÉËQfþNÒúðÄCzòÛgêg_åD6ºq¸I“ª¸ÊFØ2Ëv­Ö¦™˜¤Pé¿g¦Uu䂱~Õ#ÉUz$¼ßó©J{’í/F•­Q7¿§¬3í!ÑqW|¦ùᤜ£*Ëß ¡ñP.AËOĽtŒzÚ©ýÍ›¦EEËÂýmòÁZ´\˜£‡¨N“û€žÅ ί~Þä ½²D`'™(n%‘º®Ô[ƒj&ù9—>ó¨|þÄ´z$ûÔxŒEÁHû8&x‚õÁþ*µ-É‹€„žà טhtÙ,c¤'Åò·8PIÂßC)éW\øõU¿º×…Ù_Åë[÷·¢ž¶Þ°Nj®=.â±÷¨8Jª±Ú /þž¶É\ù† IþôLÄ맊‰æ$Ÿ±k±ifö~]UýÛ Û6¥ýO±=U›²¡DczŠ/ô? `±+É•¨“HMòsí*‰MÁˆîÓÄ•ÁeØ0•@S‚íòzý—š%jÃÞù¶÷˜%³Íh¯DDk‰Ž^Ï'ÞЦ„­$³SÀñ¡0sj±÷˜>í*•û4†³‘L¤ƒiâ\w,>£u¦8[`ìÇlU¹‘3R²è†‹¯$ézLuÑg®ßÓôßt$0ŽÂèåŒoÖ@ rƒGªEVæmý#òÚ#jðB’æ„wÁ¦¤Í:0Ï*%vBçÁ›œóW?3Z¶ðVegMö÷+†šÀ>ܪK—}9¥·…ãi6êåšð îs¼"ЊYÝklÓÄ™ãJmªø‘ò%:ñJ—´¥+ û‰—äMêè{ýN5“(À ÓFYdÌR:XdøSb´lÒ˜ö~P±Ÿ2ßL£EKÐd,¹ìE5½ÔGT¹ à&X¹2—Gé²’äæÑL‘Κ­\$š† ®62±ÉÌ­´ ~¨^™ÉÆßnò{{¥è]¸j´×(ÍŽ(ÔþXH¨‰‚Æù¯Ýá›6ÿñÕû }¯`è…iŠ?t»øÐêøÒñUI¤yŠ¿oÈ\–¨u:ªÞƾÂ`±«~ÀÀ3Ê|È4}ìý2Ž£ª²ÏŸú +_ƒ ÃižòÆv==·%!Ãd2KVûBàùü€ÿ'¬àP0°#íþ¸)Ðendstream endobj -998 0 obj << +1038 0 obj << /Type /Font /Subtype /Type1 -/Encoding 1932 0 R +/Encoding 2007 0 R /FirstChar 36 /LastChar 121 -/Widths 1936 0 R -/BaseFont /VUTBGQ+NimbusSanL-Bold -/FontDescriptor 996 0 R +/Widths 2012 0 R +/BaseFont /HHFDIQ+NimbusSanL-Bold +/FontDescriptor 1036 0 R >> endobj -996 0 obj << +1036 0 obj << /Ascent 722 /CapHeight 722 /Descent -217 -/FontName /VUTBGQ+NimbusSanL-Bold +/FontName /HHFDIQ+NimbusSanL-Bold /ItalicAngle 0 /StemV 141 /XHeight 532 /FontBBox [-173 -307 1003 949] /Flags 4 /CharSet (/dollar/hyphen/semicolon/C/D/E/F/G/I/L/N/O/R/T/U/Y/a/c/d/e/f/g/h/i/l/m/n/o/p/q/r/s/t/u/w/y) -/FontFile 997 0 R +/FontFile 1037 0 R >> endobj -1936 0 obj +2012 0 obj [556 0 0 0 0 0 0 0 0 333 0 0 0 0 0 0 0 0 0 0 0 0 0 333 0 0 0 0 0 0 0 722 722 667 611 778 0 278 0 0 611 0 722 778 0 0 722 0 611 722 0 0 0 667 0 0 0 0 0 0 0 556 0 556 611 556 333 611 611 278 0 0 278 889 611 611 611 611 389 556 333 611 0 778 0 556 ] endobj -994 0 obj << +1034 0 obj << /Length1 1166 -/Length2 8264 +/Length2 8309 /Length3 544 -/Length 9079 -/Filter /FlateDecode ->> -stream -xÚízUX\[Ö-4Á½p'hpw×*(¤€*Ü!‚»înÁ]ƒ»kÜÝ/çôºoŸîûtßîw«öZcÌ=æœcÍýíz(*r%U&3[ÐG[¨+3 ±1q„«Cå˜T@掀'Ó“ŠJ â` úú‰ƒŒ ¶Pqc‡'^Í o °¬@> 'ëÓÈþW -Œ ƒØغ”@ ˜5úD‰Ûš:Ú€ ªŽvvÖ™ -në3Áùà§Êþ3+@ÌÖÎ1·pЪ«hÒ100þ aåå嘸þÅÄApˆ9@ý´pYÛÚý‘éIBÁžŠ6û#V l,aqø£]­…ƒƒ ‹Øô„1ÃÁÌP ÝS¡P31[›?à˜x&LŸšreù»oVP[g¨ûÀ`ÔìÏ–ÌíXÔ¡{G´øÿ?A˜ÿÂÌAN ÈÙ@.¦,¤TsµýI²þCÍ<Ýílí`ck8È=]0ÝáÆN €Ìäéþ¿ÿ¾Ãde˜AL& ó§cø—ú ÿc/o샸tÌ@ +øÇ÷Ÿ+ý§5³…Z»þ+\ÁØ`Q×’ÒQfø{ïÿŒµ}’dbåæ0±ñp>MÊ“"/'ûßÿéÅ_>ü‰*Cþ§Nà¿$¥¡`[ï?Úyòñ¯–œ@0øÓlhÿc:À¿ë+Ø:@LAÚŽø45OÖÿ:RÿÆÿ×Áú{ŽŽÖÖºBû;O~Àr€?±6†ýG¸± ÄÚõ¿Üð÷@MÐ?¦ÿÿ #í`l 1š[ÿÓ&ü#Äd¦q0µøǸüå²ÙŸÏ!HÉùãI0±r²þS³€˜ZAApøÓYüI fK)5µ5ƒ@ͪOSi 3û'ðmêƒ=Ùóç=Ýû× y*r™bÎMÛšòû[Vú7]•‹83ýfïäR¿xt|Çf¸ÁŒÔ¡ðÚª€„#ãœ'Ò ¡R]dydÄ€H‰0ng+^Ñff4|‚ÏøHRAÄ{ÌU -|ØGè´£ÇÀNâ¨Ð× éÛb®=R‡äEÚTBbCøª¶DÞ¤W:›[öŠ¨$dEY%Š[Ót¼/oü¥¬½”ùP'û[Ä–~ X2­µc×42:Xµ{—%ÍøFSÓ]¢8œÞ“’˜•G&$ÚÜ|-C­l7…à›ò~»,Nv}»Æî,@HíŒÅfMè\ƒ•jLw~˜,rÿMüF]_©!Ìçªu¶KD]ÅîÅÑO¹÷šÕæ%SSJd2N„ì1«Uòêm!fÕá†ïÆ /ëÍ•‰×Ô8ê.Õ›O4E¢6:UB 5 ž Í..7’M%¼Ì¶#M´-Û\¶1êh߉PÕ;þSB%•N’ek!_>”þl€ýHåQ·8ÐmÕRëp9Þ”Ô3áØš`— ùÅ‚ÁZdžÇÑTæw÷RüÂR#Ö\¸å%u± œÝ{WܘòÃ`rRç&ƒæ°ÅPýþ‚9Ú=q…« yì†,ÝŸ÷4^¾ÿ*»Hg½ kt”PØLrœîZ`n#úíÌÁë5&×Å놄ØS~¡RÎyïþyœkô²Aªl–O#ZÏ6±ÚÄ®Z8JH’ð>â.¤}Þ<•Y8R¹j­år"e¡“@nª2i‰6r–·EnX$:ФBLÅw3[Y©]Ê’TɽÈ|ØZoóY*˜1N1.5"Ÿq}|Ã7ÇDaq*áüqdŸ«AåRkD6–*u!óÔ¸$&³^´ È -ýÍ8¶öOáÏoëÓ‚úïLîÓ¼¿œ+è¶kÎ6ÙAÝ$=43Žºoô°Jü¨rOwVsr¶Ê¬ðšz¾Ž~ÿ²ºþëÁ‹êËõ-!蔄Wd=R9‹ò”l:VŽhÔïÀ³¼LôÃaìtþ8QIVæyU&Á¡û«ü\ žj_E‘{<óéYàôDËæúløa½ê£D–Îîç„xô?¹é$Ì|’"Xûü"rø—Xu[ÊÚ6·èNâ÷AŒ»®qmƒ½Éý¢¹Hx7žMxÃ_Õ[±½z -¼*K«™Zú¹úÕ°×Wý¢Øø¹.ÔR¯æES úLkéDÐ?«áäv%.;#•ûc~¨¹i -šI-b´zŸŒU íÑ—þDÅyMß\…‹ÙCó«ïÓÖSätRR˜…$ ùÛˆFy/Áê}äYeOÈZñ¸ÕÏ«¥¬øïc}͹ü< ÂåŠ^úRX¿T[ÅgÝñF/yo\ky“Wb“Ë·Ú{že”Ã_¥b1‰¯ç(17•®LsT/“ks¸àýÄR–Ê8à׆h0ƒÄcsâð]€¡í"Z°p¬Ì¥`ÓTÚÕ¼V£ˆ™×Þš¥”¾Îé;»WžÄi%(¶ØÄ5œ™,—»ì>N*Yƒ?åïyÚóíʈfüλ» ²ɽø7ãáFWqÊZS>M…ùdT„Ǫ;£Qס3˱_‹§ÙL_¥Ÿ€(U}Üh-²CöF;5 œ} ó.T²¶/0žyÖ]±!3f\CÕ1WR|#¯o‚Ǧ?}Fq?¯ÓfÏ ‰²¾RŒ2Á œðäÞ"#±ÒŽuXéKS‚ºãµãõðÄ{¯¶©F -hŠÚ?åðP‘­||èuæsSQ2¨•PbHRóŠêÐ8ꎜ¹MS^MýÜÝ´ Ó›û¶ÈnØU´]IÜl(óš–ªÉô˜ÔpXò,Î%0Œ1µky„Òæ®qú§°Ä ßÉ`hˆ Y›½ goû[rð`jϾªN¸tÇ\®»–ü»bIBj¬÷¯Âµ^‘•HÝ{”é·ÄÞê>µê9ÙY•Ó¯BšË‘!õõ詃W/lë²(»óT²œEÄ$ ^î·lý"Ÿ»É¼µ÷/µ³ÃÚ…/ò½ŠBº¹Ë)E†…å(xˆ¬%ð©»O:Ä$¸]g¤Õ ¾JÑóæÞö…ÕѨ¶EŠŽH¹ïØϹÈGgÔgΨyîDŒg.uøò¤å…MeÕ.…î8ã ÃCK±(Ö.f5i@«v]Q„ƒ¯Å=@Ûp»CDlë£5e…„° 8óMù½€KöVò¯½hŸ’•±¨cÎÔlÊû%±È™‹•3V°°‚`÷b,ˆu®mvÎA“&­ÝTY–vÛ:ìL$cØÜxcšÊï• £\\ª^æû@Ä›xBÐeøü;ÃDÐéÿ˜ Ž*‹ÃA‚¥¼MJ$ˆ¯;ÌPïý47Ø0HïÞ#XýÑôš>ÃêÙ©8„2È^Ï|Pø¦~Œ@ÎtÐCvÅY ÷º÷±ÇØœŽ¸ÍÈëš…^¤Pù]¶B¶š)3iy=-;¤ßÿ¨çÙK%¿ûÉï÷£K}P^å—]èë$Ã;4׺´ˆy¿8¤×[)4±ÆÜ ²T§‘^±"©* -Ô +¸'º]÷ñ@f̼ÀÜGgìdô—éËùêÛðFÔ!k£«Ã*.$|™/mßFàŽùyAO&—2Ö…Õªõ¾1Ù«<Žø+vˆý–­Dce”­µEx`Iµ5úÐçK:™¢¦ïÝOÜtó‡ž.erƧbÛ,H/«äíuåí™RrŠò–WW“OF3³gÃ)‡¬Då"\ßžâjèßÓ”võVسïuÔt2C «Æh]W*é„g̯%ä"‡È@Šr¤Bqf„•4†Fóó<ÐP+]°¹Ng…8à„q/•ãȼ¹b–Òdù&Ê´ºdVN šùÞÕç6bÎNé?ï…çPÒZWïn›vÊ -bší‘v\aۺΤ:×}¸½øÚ"¤#"tl~–ŠÂó5‚ws¬@ö|KéêyÏ’4%Óù|ô}É=ƒ-RK¨Ö{Öˆ“¤‹xwwa@­â©Ûæí‰ûÂŽKˆ0oýwËŠµºÕ6©M8³q¡ºïˆoâ³·àßYF¤i{#ØHjî˜/„†HP,9;]D»¢ôc¢bÓ* ÃzøüÆísüe¹ÔÊâ°?»ÔÎTùw}ãΗÊâÜšTÆýjy¡1(`ãóŸ©3;çó~•…jffl¯©È{>ë²SÕ†¬[ZÆ€ñí^m5 -îlúôü4  }ª9Ã¥jj:ÕÂŒ ÐåÏG‡®ù<Г¾ TÄ.ê…H›Ÿ¼IôhÔ?±·!—,ssÝÒ ´6¡Ø_KiYˆ÷)|“Ûú£a¬>S±I"(.‡±ÇŽ’¶®îîCî>`™ïñ´Ö³=gL”Ä0·mþƒÝ®•@ !á¬ÃYf‚bÂRò=ñT®Î鈶×Æp·ô6/­¼Ï•ñQfÚð^…|_äb õm;à×]1Lð–ùæˆùFóYKïÍh¿µS [ÍÚ«²þÒ`’ùQ­ "ƒž‹£ÈñʽÊ¢@ÃqØâÐ.Qô™óÊÞÐÖW³_~È‹Q5)Ãæh¥_ç• ÒI¸tò±‰ð¾ØÇ(ŽÊE([~ ×ØÚísqÓÛ9êŸ٢Œ™4¤D£l̾½¦Û²úµ9EŽ6Bp,¢Êòé²êG;òƒâ¨¸²µðÆ&;Ì™µ¥ íKk4[ß#½_mú]–T¯ÙFÇÖÃÿPò.€;4'.úU~ëwÐGA9Aá±Õ*§¬ÇAWö 'Æ4RIîHkˆÎZ+{Ö iùay±3_¼ ø’ƒ‡ÇêÉÁ]£¶ÎGBˆÓ -¸iÛ¬[tÁA°Âü™©÷‡¾ú€µÕÚ…i‰È>íï—{Óût{‹s¹"”C/Óçš²†Vn¥‰2$ò v’+X™gh tò‡ê’ž0䶷KW0N¬e"HNY9úóÌŒ¨hA®¼Öô‰óÏß_ÈßHã› §ˆ(X#;B×ý‰Œ\%°üÄ炶zÖÉ7(™öJÇgÄýb-¶ÕÀ$ÉÖ3¡ùzAÎåùv…s¼÷[Jêâ½QÜ<ãF¦=Ç&ÿœl¤rPΧWV€ntBcÈs%¿)œ¬ Žß™(ö׬%¥,R<†H—¢¤‰y]rÉá MèŸÙªž'b¦§¼±¦æ-o½‹”ÍòË›’Ö¿¶g( >Žó–õM6!ÔX¿JdÏÙ=‘¬ðÜÙðM‰-¨u7¡F#]Ê Htæ@¢î{éÂ^¥‚ÜY”1(öó¢ÙHaè¸zÜÛ™ ììÎΕ›!ócÅWH™¶²ny ÈxtƲ‹5‘mtEîúÍ ´¨ ûØ­bñÔŨA÷ -AEÂiæ·Ü¾^Ápš¡¶²S‹q”)ä—®}ÀÈ™’X¦‘Ñê ½ž¹I|&åYöd§œçI»Á~hÜ%i}ºZùñfǤXÂx,¯ðçÝÀŠÆTÀ;=ÝJi×î^‡É¦Öèz,€h?R9Ìó;@Öÿj—þY) Ƀp9:•Iß­¸ùG« -gwoÔЇ¼V}ŽCsg@ˆÑÕ†šÒm ^©‰iÙ;4 -ú‹®fºÐ61^Ô˜±õƒøåiBž•1•ƒ—ÛÉŽ¸ïõ+üèªicöe 3+âòÖÛ'˜–ÍN¥ê“7ðÉi˜ì§ï´½~2¤bêó²ãò½õþ•`×Êê¯áÞØC?¹ÕÔÌ=u¤ÛˆU¸…Í"â#øŽ\f£N2ú-aäÀoŒâÕþÙ`S6¼T z¿Êqˆêëà5À¬³DÕÓÙ÷“G‹sRç\êõ/0+A¬£6àÄZ{Xv#¾K,,Wx§[~ð윲‹T\Æ…Ñѱ1n“w  -wŸè’¡µ¸§¶”¬Õ¾Ï®HÁ=ˆÒT“³šÌ6X’>3¡6º­1•üVŽ mjƒ3/7¯=Íôþ &!nIy<`e%aŠ{ƒ#0SÌ=²\:×Ñòz¤ØGàU%˜YMçËá.žÜÃ_bÔõ~¬›ÖwŸXöçÏ×{7¨‡¬MÅ6ê£BÊæz‘×´‡ïÝpä÷¹QØì‡G2n2ªDö.×hE#£“ Z½¼Y‘ñ&ÐëE\(ÃES¥cùlgK„ŽT@â91D±èc™×Àj…¤ÐiÞÚDÅëÁ»ÂЯ0Tµµ£bÅ$㪌íéyÑdö¸Ì„ýn&¢›\ ‹Hè^¶ÙôX\JÆÇH?!Ê¢ñ*zTD#Äßǧš¿¦3\UƒX¤~d«mNl›oåbã-ÙÜùUÅRù³ž’¹JÖj/3i‡Z+¸V=˜5¶1Jmt•÷êŽ'o›IT/Ãöí©Z'\?¦=0"÷Ñ4¥HíøeA(2½Ø$B¼?ƒíϪE†³FÑ|¾_DÀžûºAqeˆæŒœüµX\K9§†µkÞúšs»¿JÛViS°N}¶²»$ |}Ôˆ<4­œ]Z¼´BdHØüˆ^œÝ¬$À½=N² [¬žgr9Í~[$·*È$#\8GÖiËŽ’'BÃW3Þá*yÛ&ÝôS‡‹p=˜vPbyB^ Ûœ;¬·§G¹ª3vipº";ªÚ§TáF8€Ì'HÔ÷«Žee`h>|7x gZ–ÅÒËÔ©}?‘[^æóN^Ö6“/ÇÄ+Ƕ³©…¥>3ÆùR¶¥L@¦ëû1µèÄþÔôe㛚 -F‘PÖçhé!ÍFµù„複ì‚4ãE¢Q¢ªÈŒ êË¿$Æ£}IÅD0I>àÅlPól&ÕFXÞáÅâ‹×Ž^ì÷êÑ!W‹ é·qV`ç¥Óz"!׌_j¯Ñò«E’µeä —QúŸŠGÌå«P•['ïkÈôZðÛ5%K…š†Â¸ª¾àÛ㼿°è/©äG Z­Ö¸µ²¤Ë›w f§þĺ#7^•Ÿ?<Žàa¶Úñ9" ç*‹æz]à•Öˆ·Ñôv–ý £-ÉTqÿ.åó%‚8Þkeÿ3¿[M£6ò¢@Gò‰ƒXúÞ¥çˆS&2ØŸjF[fzØ.½„ø'eCL`KI -g.£Êù5õ\Ïc¯ªO]ffå,§m¾¼@+¬—q[¹ ,<¸¡ÎIPŸ©if8§”MIe({—Jœ~À$:­`š‘ -éé;±‘¬y~`²ŸâÑjr+Ö-±˜…>IEƒfçl±¢ZV­®ô ÛûUM½5 ßOÇRòˆœN@Èd£èF_ó³òÌu³Gö–l0êYiQ¶ˆrœÔÑeY$î9Ùq+SÊbÁ9+²ÀYƒŒá— )mdA( Å”µˆm;ÞUÓ ŠÊˆm-Œ/=ŠÉ?ˆ)CH ÙrS¶Ô-“×ìª0Kƒk}öW­jõ‰9‡ý@F#iÍKû½D;¦$*µ±¯ˆ:vÍuš - ¢6G4ÚWó÷mq£Mo’¾íü0zt™ žà[ΛÙóïÄ3ÕÝZsÆÈP:dVÔ/fyŨV³Œ§²· ÞŽ%Ÿð G5¤ÆA«ÀÞ«§hÏ}Kœ¤=ª4¢a3¨˜– xMPn”ªÇ#qp´ų́çxk lƒ<¶ä¥ùÁãÊ¿aLÆòË+&ç0qwl$^dnÜðy(ÙBÓ¶ûo‘#@¹×M±®@S#8±CjQðç} ékŠ»*lí,¡µ =êïΘexí¬„¢h‹®•ëö¥°gЇ™N¬/U tùM-w*Û¼¿<ý\ɽ~,($ۥDzÁÏ5dèrР®Ê º=¸’+•"‹~tó%Ê"â…,iãä, -û -àÑè.šoÏx­g6åëÚ†ÇËVDU±N…;ZÆÒ5oùOhú­—Ð>IîÌ:h^$¼Ôlz×ÚÁÓT @ÿ}&YƒHõEŒ(=‹qåö6õÙ¨ôW=wš’xsDs‰¼:ŒëöÊ-¶¿{´1öFi”"}±FêÃLf_ÜÅÅ;FO5æøþ|y~U¦Î ‡ëÄCš¢Õ„’+ê´Èø–u{Ó&d¹¿*¯’E牊ô‡Mâ‰t/&%Ï©H6ÛÒ¥Š‡¬GJ×:Ìøö•¿ÒÒ•ß:–”eˆº —ýq«É(LdOÅ"^$·u1§&j¶ÀZ¬ -Ú=;ˆðá:ØÓÏäÁÏ/én¼¡,*¢`\ÜäK}["ÊHTÆÞˆo`ÝÙýz„N¢ &j¸'µ2ó‹|K×c6Qén)' üÖœëv?.ßüê´–®PÌ£§åZ]GOŸIªvIbŒµ³ÉЄH\Ô‡óÉ}vÆé¾°å1ù{'¾ógâ݇ûmœ‡½*œ‰VákÑJÃÙ9ÿ¾<§µÈi¥ßgCL‚¶áX±rX¯=Gó‹Ûìö.BÒÓ oû~o‡´~8:_ª˜WzåHTº{‚,×d?u-ôR,ýá²ÍþcQk®‰î•üâŒ'ÄݹQ쪡³¾§Æç‰g\&ÚQ„#J©Yð#Õ²á[ƒËEßE(@˵¸x†üœ³/ö®:g]!$…US ](%v¨ åÑÜ팼`‰jî&^Ûœ?-ó@öùàjÙ÷<³ïlY?XRr$Š™£-ÑTù†~ŠÇ/0‰ÌB¯7Ù×ìYSB{@&A^UE s $DH@ -٦ϭÓ%"Òð9ÓPëñÞç}ž¡œb --ý¸Bçhµ0ÊnnL¿ñE~„éMÇv¡“LYd< gñÕ¾ìQ±íÅ EþoÉ|Ľ„\cvê´ -Y É4j"¼ÒÜçÞ»6ð¯ø»(~7qBËb“½L*&=¤ö4P'©ð·@Xáѧ†÷§€R§ ÙiîÌ#k]3§&M<~èêÆŽ¬y×–=¶÷.Ö}ìh"rr²Ë«À±æ <³$wt•°CnEÕ@¸*ùwN.߆Z r™LŽ:øõŒªOâTãPêŽ".!ÉMù?dð<Ÿ½h·Õð¯=B­›B] oº×dûJèoÛ°Æ°­TFØQêP¢úC@qSÁÅùÖ÷¥7_±¸Ôˆ ²»ÞÌ3å³_Ž¾«š’ñ #¼Ì‚ ¸~sOsÔ|ùƱ-J?§>8_@1.æXIg5ßRic¹RcÔŠª¨Ûý*GÆKVJ°îŠ<íãÞÐèHïñúa˜ô0ÂAYêÎÈÈ¿Ô-U@®—‘ì»Be×âwª\ò“C’.US>˜ôÓ»,Ø "mY)×ÿ» %´Å§o_)5ݘñÊÇNÑ÷`AG‰Ÿ9PÙ6R‚stñ¥³e›è©ü[Ueï¬ÐÆ9ÆWúÞ¿ë­QW!'M(gÖG}ú1ö%dyÓõz¹þm¤)9adz/°jE/5Ϧ`†€wƹc:…@Å“|_9,ÑçpSþ˼ËËg;VˆÁÆvÓ[¨™5–`Ú¢!¸(횈݆jª¾¯Òº@–î¤û ðÛ`¶ª&ÂU\ôqŸaá |\+.oø."—Þlˆ“Íèô‹qQõ»6Z7ZíBÏ‚$¿Y휅xÁ¬„×ez¹¦b ¼`<¤tI¥å}Y:½¼ù¼ØÅ„ÝB¹ÞVõ-¦»ƒ¹-†p¸•÷IŠËÔíò»Dmä¼CB˸hB®ºåD™¤L.ŠXG]GbK/aµT”Ú¼_¯‘p (5w»0|2¿}¶ºÊ5i¤™Ø×ùîIJŒ*D-dtš?Ý£üO<*$çŒ7}_Ø´·{MF~F~Aµüž è‚Ú;nU•nÚ—sûZ˜7ûÎKø§Ÿ‚%g¼À¢Œ[Fð}‰X]Â¥2ý¢–ä•z‹8ŽÄ¤5üµòDoÅ2µ_¯âÔ¤°mÿ¢šüj Ýîå]¼@¤FÝÎktdÇjJ×yÇ8x­öàvËÕ’í&jÏõžÇQL6¬w=ÄŸÂËUdçHßÌÜn t¿”è®þÝüÖv—ü³)¦h ?„K¤AØñì¶,á:  á®ããÛ Nàÿåóÿ ü?!`j 2†9ØÚì0Ýa ¸ƒ-ì>aþ/ßyÃendstream +/Length 9124 +/Filter /FlateDecode +>> +stream +xÚízeTÛÖ-– ‡à „à. îîîN4Òî‚÷àÁ-ÁÝÝBp—sîwî}÷Üû~½o¼îµ÷š«æÚkîY£ªÆ(JufQ 3”ÆÌÎÂÆTÛ›¹@ÕM! +Ìj +àsÛ@C£†Ùþ~ÄA¦0°DÂöŒkX»Ml@v6>¶÷|ÜìÏc6οœù€*Î`{O  +r¶Cž! s{¦îâèhY¨ .Îæ (ÐòyeÿY(îàèá ¶²†é4Õ´é™þaçååšyü…%@P°øöyà +²spü£Ò3…4r~^´Å¹*–¦’`Øíé¬a0G>VVGKSÐsŒjÉÁXéŸ* ±w°ÿƒ +øC3 °3Èü¹)Ö¿ëf qpƒxýGØ ±ø³% GVMØÉ$+ñ?ÉÏ!À¿bV ›ƒ—r‚ÜÍ­Yÿ(©ááúdÿ#l +±ðörtpZšÚAAÞ`KÐóà5uaÎ. o¯ÿø÷€h6‡Í@VÏÛð/öç0ÈòsES˜3بÏÆÂÆÆdûãÿÏ‘áó†Z8@ì<þ•®dj²ªJ)ª«I3þ½÷f‰‰98–D2ê›-¯X 2n‚LñK€ú +ÝØ)[7q\ä딬Ÿâ}2Ç”¥Wº4BâÃ8êÁø¾d7z»{NÊ/IÈKsËQ•÷fèy eì|Tù^N ~“`³ IA“k¯¿¥•ÓC«?¸Æ-oÃ1™žéÃàö +–ÀªOÌHt‹ßñ}n縳.i±¼«tÌå–ã4t\dêÍFÔÏZïÖEη2Úú`¿Lè-Š²FsŽ]Ä!JÞlø*@çìwÓ>ׇ&ª©æˆy²¥@¥]kU>=­rEÞ-çŠÇ™°V£¨ÙaQmL1!h²R%^×àj¸Öl;ÓÛì^R‹×5{/¶ ¸»ßËwU°s:NXµ‘÷ +8ÆßÆûOvj(øÏñTÔ¤\¥+Ö#2\…¿n5;ÿH¯i}¤ß®£Ñå~º9$m`Ƶ'4É)ù6b›•½.†eC[•+ÚËG}*”µ>A¼­dÏGæjøf¬%€Ê4ìªÉ$›Š ÛwÃPoÄd‰÷ú´ÊÈÓƒ8~Gžõ‘÷Èe¦_h‘Q¤Ç‹×g\<©‡3Ѿ¯òJ­’ûÁ«‘e‚gìº N¦bŽO+ÞÀ“îS­™c­Hœ4ÞCØKH÷²m:§dÔ’ÆC»t½€!…Âæ©.—IóÉ^!Øæ¾ÔD’ZÐZ¢˜ÝËMïQ•¦ùÜȇ®CÄTÄZÅ‚zŽz­‹Ä#EÄ7ÏLm}.éF?:ÃÓ¬v­Ä3*ŸH“¾˜sLfZžÓ$Vf‹B4®»%DÚ”6òÛì!Ó7ôRI¿S{ŽØ¸Õü ØKÒG;ë¢Od€V@Sp¾¿–_Û«°ÅníË5n̈XÛØ~ô¡ ½ÖRb…LKúÄ6!T²ªNËg¡å‹Åí„\æ |7AÏâO“fgYPg~ø¡õ´Æϳ譑!†Øç]äÆÀ +eÀ_±2äÀéŠê×Ü÷qóºÄÃfhÙzÇð#e6Pw=3vd[¼¶#mýç;±ýO߇P÷LèLI Š `ßy·bgh¶£ûô•À|ª¿2Õ 1äÔ@ßX ˆãàç¹ÒH_Li¹=YK/0¯§E ÒÀ(èù\²ÈÖ«:˜ðCÃkX[ÐBf µÝ÷l¼ +¥ô€áëÖKŒ× m5X€>ÚíÀ½ æؙԄ(QjiVJÒ˜˜¢`ßÛCÄ9UoðzÙ„íÖðWvªD+žoÜhe…Rj;5ö}_”òWЖõoD…åö|ký—¹&ùü5jÖC±8.’óÓYª´'åÉrö'À+Þ@ÖŠt¦ïØÀf p2:7ßu°%¤STÇ9-g9ÜX–ÙG]td1KâƒÑŠQ¶SF$‰·U¥8:ï¾Ó5Ÿ½OÜÇ'vp¦3gGp|wã›À„J÷Wó¯c¶LLËFÊY7pŠäh·nK.q ¥'Œ/®Â9bŽ‡±Ïw 9_2ÇÐfÊê¶VWdÞ·¸áË™w7‰œ"Óù}R4T˾jVø?âó~:Ãí1~uÊæ|*€Ó”ʱŒ«HÂ@pÎúNšú 7¹á8[³?p~¨y4Ñ5r€»ö£õ5C6Œæѵ,âM˜“ÕQÓ8®‚ùÐùU7 ¬Ûþ§>S+zâŸ[VÑUŠ<¥< s²Ê&:Nð )ÎIJÀÃTãÃX×ò„W• ¥jƒddŸv¤øZ’¾p›Kv£ZmÜ"Osë“(šn­¦ô¶yëŒZ¿gó!™PˆÉVŽõä†þ… k¥Hó'´åå0‰’šÉÍq Ž\±Ÿ‘’® Û¾Õeq_*Z¨ÒZ>ÍÆÀ¸ü¾m!Wò §ØiON²¥:LÆÁ·::¤¼Öe8èšDŽ^®´õÎ÷WàÓ;ú…co÷ +ÓsñŸ¬5ŠN!úŠNÌJiJ¥…+kkŸÏÆròæ¢ß ÛŠ)Äxžcé\Œ>Ð~í.í¯râ<èªëf׌Óy¬VÑ‹ÌYÝn§ FÈK Rd"1f…U´†ÇŠŠ”> ¿¬öH‰Bç9Ÿâ‚â%¨„$‘ûò$,gÊóMV0êôÈ­ž·ñQÔ‡‡´æ¦-‚¢óßÐÙÕþúiU:Ö-/P°Ø/%ëºAwð˜Mwk¾¿úñò›ž¨bØ©ÕEú‹÷1¼»ãÅò—{*7¯ú–eß0_.Ä?”?0: |‹Ô¡b9K½JöòÖ+Ÿ{îÞŸ©p.îë°Fˆàú75ÚT­7¬uÈìrAéÝLK4ýGý?!‘ZîäšeŒ¢#hty0£„†I^Øpw»‹õÄ/&Ä%fV-G¥ôñL8å”çѨHBr¯Ÿ­ùØóå]‘L.÷Þ”*V†Í•êüõ¡KlÜK–C†àh8%QoHZ‘×à-–šÒ‘Ô©2‹áâ"ï4ΡÇ%3£Ë!¾Ê¦ÉZý!üÌ#4øcð©“±¦¨vŠ9dB?(‹N=¦{®žu3$‘dàÝÊP^ãû%æ$±†Øx˜ØŒLûkmË‹‡ýˆ8NkšÈÙR,€ñ9#áEÅè§*ÿc¤7¡ ±sù‘$VƒpÐ3šZäñísG +åƒb3èu¯ÃízSHø”Ç!=ÐSV«ènÞèõÐ`åÍ’ª;qg?Ìj†o+ÌÊ€/F;=!`ž· ÀË!¢Ëþiú)*z‘ñÄïø.ëœØ½ 8Òà4AgÉ—õ:fÞv\JÞàrdqÍxøœ]€GÞ‡¿SÓ“9ïiŸ`ã´U´{*=©›ö„%R–ë×M[«'0¨º~×ÔZ]—röUňaÖ·<šúµìH±Jþu"­îIV5‰¹! ˽/Insã°žÆõªª<{Ïñ5gÝl ‡×;{•¬)’#ÐJ¾çzYÅçµ32%2I)OÊ>IhJãÕµÅWobAnK:B¡&ÐítEM•ËÜf-¾¢®Ë&Iº5?RDƒ} 3ez¯jcCçÀÞ½‘SÐìp)WZ¦gâjpå‰Ë6ÓŽ\‡£;vj¼ÍSl·kVÆäø÷õíþ¬ú6-A~H<ÔVï÷3ÎX7ñߟ&7$S/·ý²Ø£ÕY1ê¢Ø‘Åe5Òlß}Hù nû>…!Í:Äè¼Î/à·ŽýßMHÙµ¢ñsÕÝ"=4‰yz-Ú§ÀNèůzYj”7ÎÏ=k|ëæ] Iš>ÒL£ÄSØùIÌÓJm?IrÈ‚U¥›/ΛaÞñ)ƒ²D>´ïËKÃîÆÕ,ao$ÎdiÀ©ˆ¦7õ­œåê¥Æ7Hõ‰‹^ÃõÕÛÓÚ®Œ¶°ÇÚÆÌ_¦/Ä‘ ØM¢Sl'µII37JDÁxñš®3S¤å;Ü_rÝ’}Ò³ôò^Ü%.)ž7è!73iÓXƒÂ]r+œw"ëȦhá¯àûŒ½Ð Ú´Yä㺾ñüe?¾ [÷§“è‹MóûVö›ºÞwqt–Åw¦‘Ϩ°Óì¬è` „ì¿ßJãóf?6f'õ\ÇŒEià[ÿœ«×¨ØU»zšü[I¹hÜŸ#hÇKIçén ­R¹õ–Öi˜ž‰bш˜×5É/ÔÆu,Ì@{–‡Uºya)¨Ì˜:m/¼_iÿÓRÛå8"ž•‰6/Åfþìû—o bæ ‚¯¶ð^'d¦þ( ÷ÉšƒojþMóSêÌE¤]KS9ðHe&Ôz“Û×@U¥)zâ®|ä!aæÇûë<Ýžœ‚À%»Í=¿¦¡jÐ.‘¨µTW4Ô>½Î¯/¥^6|ð:u›Ð5™ ®õ+.›ÿÒ`þxüJYék!øTB¥(P’êi|`þ®0ymc¤ò+©ž ÐÎÏßDMøÈ© ;ßnF$¾¾xïÍÿ^õÆ·OF4ìJ²Ãþa8÷üL_šfÑÜ;’I—¼@öÃè‹VÊ‘¤¸Ý$l¤Ðn€¬¡¬æ04q|ˆ¿œ§à]Û;˜bù«ã›Ý öìô(Ôjo]º¿?Ásîit;ä +L^e°ls›NäºÔ§ßýšR6úù¤Û°éµÁkkùéÓü½I°±U-«a¾rBïñØ;e9Ïx¡‹K€q("Ãßj¯mµW.~ØÛüÔÚuf«ù)ýûU=¼?R‹ï7éÙ5ĺºWéŽò¹ÊaÉ[Ð4Œ@Çrßg|óy¢X–%}ƒ _l3÷ó*CÈz:â0ÂÈ(PóÇŽZÝô†vÌ£1Í5KUFêçöóÉ„¨Bß¹DóV¿ý\öâ•GþÐò$uI“!š›*«±5í1ÀÌD(©u›P¹©üò®¤Ãóãõ€2^DõÚTnÀo—£AÜžÈ77lŽ×¿2+ó33£‚…VØsùÜÁ&ùK + + ×yLˆßº§(Pœ(4Ä3dBmÝkÇ–?v7‹]çì£ PܹïÏ›ËèÓ}@ NdàÛæ]KT/¶@\¤·t‡Ÿ1jà1†œ]ú?p»~ˆÎV”PMy­ŸÍ~ÙçºtóÒ¾_ûᦗGPòÓu-+{Nüß"pÉU‰¹ýÕê-¨Æ·`EF^pÈ}‚%ׂ,”Á—¤O3‡PÍ2E4ÉGÿëaµÎ à§6Õ}›ê×4Q㦷^ÓÙw›«Z+J6lrÎ # s Ð<£ä3ÐfÅç¢ +ð(8ôðY&Ò”}„yäÖ5ð±KêÑ&Ek)Oá†x°ñîs=BˆFÆðïDœxѯÁÛìÍ㓶‹]Õ¼ô½Ó lIÃÏ6<<*°OÖehÞÁ»GÝ„1S¯¿–Z£K§ïË·nN ¾X{\»€#P/ö梢֜«8Ö–¨²²5 8~««Q›s(ƒé¨Ô,Ž­ÁŸn‰vÆ­Æôòç>65˜[P^·Œç"K)u€t3‘5¢²_xËœBÏ1ä_X™ÍÇ¿Êw3Ù%%T2(>b‡r©ê×ÆjÓhÁ8©téññê9¢ùE5’~4¦*%‘'0`W"ÆæÜ" Ní1FûÎÎBâ$¼æÜq[Ü£ef¤°À9t„-„BÆKG«•Ñ2Ä.«j/‰µ/$¤ji½õ4&oØwãI¥»¢w¼6á-UFK»· ñû*­Äfk›öx‘Ô—í"ÃHmKêg@ˆ{(#¼’YD¹ÿBž›ì1ºU5Õ{˜_«H׿ÝbGû ‡*¶†u„üθ­ßáSœáxDž$q*€›¯å ’Ú‚…ÆTHAøiGõ<h7¸Zt³ÁìãX4G’Tßä±£h^ŠÃw­v2¢%%¦2äÁ0æïð¥ŽÀëÚ|Å}sÌ;Á»‡F!GÞßâýë_í\z& ‰hÍ¡ñn€4©D2©b  Ê‚ÎŽ3Ü£fü’1¯æ‚±Ê¶¶f›'C9qoÝ ×ÊÐh´À­J7ŽW1ÒžB*»élMäYyÝ£k­“þ]ÎŽ‚ÁNÌúÔ6¸Å–=h¾Ÿ/š>e +4; ÃkÊZTwïG¶¾htû»Ï4êªÖR¡Þ'­ DIn>˜Qâܤ¹*'_I¦äÆ6 ¦æ>»\<º¿UQ, ‘baà&#ç^ËmÛÝ[oâù$Ç©e$òÔqµ=¿=jY ÄPs˜³ûD<‰™*Jß–¡£fo,_mSBºØɾ z ªS Q_øi¼ÔR@¯KFÀ®+µ™øìiåÁMwš”¶µ<ñiÒ^ìjg–Öëã~f쇬òÑK§kY¤ÓÅx +¾¨¾TKÛzÌ‚Ä?éÁÓ€¡^ É”eÁ.5-]ãPò÷2× EQà{‚°rëáÞ8,~;;ÁWâŒÄ¯Fõ9ŠCá•Øí9c{û¸´pö²ÃŒN¸4ðÚÑù/ààWðö“µËcÌÜM¿À“¡-¿*{ÝÒÙ9ò*N²Žå ¥÷„I3ŽÖ #‰³¤~–”@¸ÂfÅÆ®»¢H2#ÌǸW·£M˜øð‡ÂMOa~Hî÷ñRj¬ nÓ‹ê÷\J”.„sÆ«ño) +j[ÕeÀUoóOõe¹#´M7îL°”XËzÛƒñ…Œ‚´Wvû¼‰¼†Æ«<¶eªhYÃ<ÀæþÆêè²o¦ B‹Ï¯¢:YAW󹄛é_³óöÛЛë7.ï.¹m{(Az>oɧÊé^˜ë@Zc—‰7*wÈê +›»WVö]°dÙ®ã\öý™fÛµ‰t9¶¤V}îñìÝØì¾Vᱸ¨Ô3Z( -ógWÎà iÔ“g±Âî1µúnG¿Õi/ Ö®aª\z6wH5VkÃÂXŒYg týSH}vˆqé-ÂY/Dbø¼ýdyP8s +$RÇÌvé…h'w$K´|†·í…§™;Y¸ñç?óg›+HGÓðF~pQD=YwW´äL;v£ˆ§&Ì3p}OG_½¼¯2y¼¢@Õï·URåo<õ4"¶ÐþÁ€àþ2½öÝCI;¥ €)ª¤ÿéì¼Íµ¾ZnùˆÛ„œß~‹øŒþ—¢@™ðÔ6!†%ÿKu9Èš¸ØA`ŸÊŒa¦ ±¾!¿¯yÙ´FmîLRÂöqu8.ó‹j5Žó®Ö?ÍžÉÎÅ¿ïÅ4‡ôc…g96·¼ oìŽ~¬ðBGÆY6-¹ª…M6õÐêY Z`–ÄR:´t‰¡¼JÆB ÂP™\µÔäœöF-ÂâÉb[&èëÛXåõ‡ R'䄉¥ü"Üñý"É)¥F{WqÜj³‡h!YNéðˆ~~ò"ÙÐ5Œ©»Xçà ‡‹-Ýxä%ñqÉ>ÿó1¹rP*#7 +¶²çìÞê’ñ¬Õ(àmÆÊÞš± ~µnH¤a0³•JT½6‹’¾eËŒL£õ•ÃSóM ›ºá8'#-¹É\ÕÕW«£¡è)͓ᤛ±AççÆl‘ tΗm;"‘¿¾:A½K£ãcôF‘–m PÕ̆3s§$Ç`ÝÈbwÈæ!Þ)‚þTìû k±oqË»g™o˜:™Æ®Xå‡S:´ žø&i{ºˆÞ ó}ÜÕG”twÏ8»ŠÂŽ¥™r&âgؘz^?6×ÐP)ÕâIî–}ú¡hö‘k±+:ÐÏÊ®®ˆ“¤0ÞÇ}#3¼;ßٳƼJ£oèߟ„¡!}|Wš|÷ŽCdI‚¤¥ZÂ?Bë̦3uqà¢?Ò¨D,FTÈÏ,ÔvˆX3íÊQ–Y˜dª¾LÇA8^ÛI6—¬¹R –-uÞmR¼óIs] 2Åúxd«ät9÷9Ñ༡ßB-B ©Ë¦J Ï;gÇÐ ¹Ndfg|§µHOÐeßóšëºšj/{f1Ê=Ä~Æ«½ó±;wjS¯FûuвÕÐùåôX¯C%‚v“µãe»ò-jÒkë-âd¤/1Tĉ>ü² Æç{¶—|ûÅ´¾F¤¯2Ä3Ò—ùôüÚʆzNŸ¦·”‚5áz;κ7MšVà9>›.¦.7UüðD= +Ëȯúô$ šü=Z¤ïs£öjïM ­È"±óBc!¤d³£©Ëb”ű‰„g²@›€³y‹u[ñBQÊüñ‡2+QÉnÎÕ…lÍ É¬Ë½p¤+M)zÙ>û!Ÿ>ÅÏ +¢ï,Ý™Š£°ƒûüµ±ÒI‡c&”ü¼ün®'ñ°~ÅH¿ßýø ‡é+RúŸRû#Ì»’ŒŒ[È1Z‚«„äî<úüEþ„þ'¢DEPˆ¨½|”‘s¼j#U(»1é·–½,ÝÓ4Ešç×Ü WŸuÓ‚S{:D¦àæ }ª¯ÏB%Ö^‰$—Y –Œ8Ǹ %³šc&h˜!ç¹ÙG£ÀŽ–+([;3ˆý¡ŸA`´ž°ç£G°øªlV˜SÞRÿS”W~V'¦—,É*ZÊÿëH™­ >FþrRZ§³¹™ª$@!È¿Æf'%N¯Íqg'á4¤ÄÛeù+¡D‚A¿x0J1»ôÖ©Cøp:©¡Ý69‡Ñr;âš>ã|º‹Úˆ²;h“Ùé gÖÐŒíõÒ½Ó’iH)è¿iŸö&Iû RKÈÜ-‹Åx°VÅ Ec°ÖH·1ÁïX™hF¸íµnQtCç¬``*s¬Räxƃ<¬ˆI·$¿Ã“,Wp¨þ>VDI`×Ï!JØÁÁH¡aÆJC××J\ë(üÕ7“íÿòøÿÿO˜ÛLaö¦Î¶/gæàüÇgR€ÿ÷™øendstream endobj -995 0 obj << +1035 0 obj << /Type /Font /Subtype /Type1 -/Encoding 1932 0 R +/Encoding 2007 0 R /FirstChar 2 /LastChar 151 -/Widths 1937 0 R -/BaseFont /UXHWAQ+NimbusSanL-Regu -/FontDescriptor 993 0 R +/Widths 2013 0 R +/BaseFont /QFMSRG+NimbusSanL-Regu +/FontDescriptor 1033 0 R >> endobj -993 0 obj << +1033 0 obj << /Ascent 712 /CapHeight 712 /Descent -213 -/FontName /UXHWAQ+NimbusSanL-Regu +/FontName /QFMSRG+NimbusSanL-Regu /ItalicAngle 0 /StemV 85 /XHeight 523 /FontBBox [-174 -285 1001 953] /Flags 4 -/CharSet (/fi/quoteright/parenleft/parenright/comma/hyphen/period/zero/one/two/three/five/eight/nine/semicolon/A/B/C/D/F/I/L/N/O/P/R/S/T/U/Y/quoteleft/a/b/c/d/e/f/g/h/i/j/k/l/m/n/o/p/q/r/s/t/u/v/w/x/y/z/quotedblright/emdash) -/FontFile 994 0 R +/CharSet (/fi/quoteright/parenleft/parenright/comma/hyphen/period/zero/one/two/three/five/eight/nine/semicolon/A/B/C/D/F/I/L/N/O/P/R/S/T/U/Y/quoteleft/a/b/c/d/e/f/g/h/i/j/k/l/m/n/o/p/q/r/s/t/u/v/w/x/y/z/quotedblright/endash/emdash) +/FontFile 1034 0 R >> endobj -1937 0 obj -[500 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 222 333 333 0 0 278 333 278 0 556 556 556 556 0 556 0 0 556 556 0 278 0 0 0 0 0 667 667 722 722 0 611 0 0 278 0 0 556 0 722 778 667 0 722 667 611 722 0 0 0 667 0 0 0 0 0 0 222 556 556 500 556 556 278 556 556 222 222 500 222 833 556 556 556 556 333 500 278 556 500 722 500 500 500 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 333 0 0 1000 ] +2013 0 obj +[500 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 222 333 333 0 0 278 333 278 0 556 556 556 556 0 556 0 0 556 556 0 278 0 0 0 0 0 667 667 722 722 0 611 0 0 278 0 0 556 0 722 778 667 0 722 667 611 722 0 0 0 667 0 0 0 0 0 0 222 556 556 500 556 556 278 556 556 222 222 500 222 833 556 556 556 556 333 500 278 556 500 722 500 500 500 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 333 0 556 1000 ] endobj -969 0 obj << +1009 0 obj << /Length1 1624 /Length2 8351 /Length3 532 @@ -8814,138 +9251,158 @@ x ‚lò €À+**ŠÉƒºxÁÀvöp‹¾Ž!+;;Ç¿$¿UÖ^ÿ@-ÝÀvóãƒÈ êâ ‚À)þdžº nØ‚@9M­—*J% }€‚Y9´ÜSÔÀ@Ä Ä °…ÂN@(Äü;57®G.7€ÀÍ?š< —ßÀs»¹=>Àn;˜þX8†Üm~ð(·…þ È}Ôp~ÄÉ´ np7 ìjÚ@î¿Súƒ=Ò<¢p+0Ä yÂû²lÀn.NV^¾É\`à?a¸»!vÿŠ€ÙYÁlœ@nn4Ü¿«ó¯<ÿ-{+'¯?ÖÐ?ZÿŒ w9Ùraòò=úÂ}Û!˜Ü¿‡Eb ðòü%·qwùæ‚ý)Ëï™a} ÂÊ qòØ€l1¹5 ðG—–ÿY—¹þsMþ´ø?ÒàÿH{ÿwÍý{þÛ%þßÞç¿S+º;9iX9?À_Kð¸e 5Àï=ø½h\ÝAÿ—•3ØÉëßXý]ÑôW¤¿ÉþŽ©À­Ë!±{l '/Ï_b°›"Ød£†í¶VNÕú#ׇ؀`N`豫 -úhÄÃó7LÏ t„ü.¿à_bó÷Øõ'rn}%¹Æìÿn·þÑÔzœ¸ž— ðܪCmþyøÍ#+ õøp -ñ8ù„E"<a^¿ãñ ï¿ÎêVpØ`ÂÃÅÃà xüýÇ÷_'³¿Ñ(@€P›ß3£ ·‚Ø<ŽÙ?¿a ; öØÝ?7ÿ1éœÿ <ä bÎMCâ!©éið*ÒìÞ!y“î.^äÞP—ÂZ½yÐÎש᫢¥–¿*C¹ê†Å¦ö]î6_°mõu‘8=ëLçRù1°~ÊÃ_bnfß -â6/ÄN;0|ës2©¶òÄXˆÇ`kmH[Ǽà*õp+? ýä†5€Á#/€ˆñÚǘRóŽ¸ ¯ *ÿ€9a÷æúÙ—þ¯½=g(Ÿ6)Ù³Þa0‰{<ÁfŽ -pÍ¢”2Ö/õ‰`”TèÄjš 3L¿àƒíá!ŠH»  s…?VLãT‘¹Jˆ&‰g: ÉÒѧLy‰À¸Šge0å+÷&|ÂýÀê~sóTšù‡²©ttÔRmñIëëd°9:6+¶@›ÿ䧗%«ŠA~ªÎA ý¨£±bíè0TóYòs¢1…Ðg{Ü™ü_8X—Áx!Öy4´Ê3æmü,qÕ¡Fôž¸Uœ1”=Ê™gÊ™gÆȲüwâEÉw#A¯òøJàú•BþS›•¤ònë®”{w‘?ßW#·TæJZ…å˜>}‡Ñ•ÁJJù‹”ºŠÑäÊj¿¸°[f"­u¬x^Ø( HHŠ}Q¡‚ßaŽRz8Œ¶¦µ“;jÇÐ:šÈƒÏó%^%QÓ±¬­v˜iŒ¼Æ¤|hÉÊUq”J÷¹ù »Ìã:aẖ²Åà2]½Rô¶°÷\xT; µ7L4T3FÁ°.ÌkÛ4ä»Ïuä‰qÑÅÓÅŠ ›c´ã¨ˆ“Ÿ¾Ú:‰Á˃NG!òç»EŽfµ4ƒvZi•M –Þc’þÆXÓ"Ã-­íêÆáP‡³ÕÌ$’_?Nˆyéå…ÓÕ½mÞ+à„_½‘sãÙ ’I%pazÏl›€ÿ¶uçU« ·\Û×Ðbjêìb>U¸)}{QŸNßà—¨ªw%=Ák±äfZ%Åêos[1øÉ]·êñZ¬w¹­fsƒ\û¾cx‰¾¾‰ŽµMÌ(}–"Ú\ñ|1wNkõTƒh,.Wèçh7)m|°Íü'gˆ5’S¯ŠJ2ÇM<'sÖ+ ±UÇR·¬§ëÁµ&I"AkËðÖíƒÜc»Êþª'ºø®¾bÒ^XÛÒV¶ãž‹c&jžü õ«{Aî.5ûÛd -Ž{âA‚ݧL3bü J?ÙnÁ›C#ŒGÖ:ÂûSÅŸ†¸XJ½·5^9%4•Õó’‚Ò¨î_Zúäu¼AÁÜ݇€,23sËÛZÉzÎgIÞf­35TìQ›Ã_ ?Ôn¹)-ödÙ­¤!á-æÔ‡$J›½Àzö‚õ˜»‹Š)Nü‹:¸¶’{ý[}ð|ͯÍ*Úe™à€\‡v,­:j±ªÖÙH’R<[ݧ¹}I¡ÊíÐRò´hst4ý¯3¥{Þë— à e¶A¥ÆÈ)f!ÁîÎÈWn];FuéÅTK&|Õ‹æ¾\c…GîàèE9#½‘lý¤z‡X,¾t8íèëàvO¿šåj›@’ò»²·1Z1–ÈÈWc7Ü^q7÷õÛHm®#Í4š‹9.é"घ»Ž;ʆW=™PNïÞmMj§%·™Gô(àØ/õ]-÷'?E4œ¥ºŸê ЗBáNIV}f…×–Ÿý•‰ÓBýó®aˈÖ[ i´ü%ïÎ¥”uºÄ±‹·•¢ÄÙµâŒ%Ä53ÅŸJÔ‘ñŹgu®mj:7¹1“Æ•™ãw¿(ûÓ^]š¼×ÀÔú˜¢|p©Ö¬kŸ `ìj•óOÉ9¨# ¸iZM˜`¡lÇPa´Cùç_Õª˜ -ÝìËI–Ø+¥®kª+…k{p¶MÍÍ$]Lj&”?M(ìzŽh¾ÏöÄÝá6è g*⪈}Æôš.lÄÕÉ^wïkæXÏ7eKxvù»‡ù5QÁ°Ç•Ê.ܥ˯ŒZKòQóÂsÅhã˜\«l>[êß Ý“Ñ"bÇ -idguÊ ÛáÜ‚Ñ 9¤ëË‘'jM.~×ÿfêKÃÔŸ’ SêkÉ'ë,Fèø.JìíÜÎXѶ%Ænvâš’¤¼ò\¤ëVù¹r >guΆɩ,hè‡ÓbѤÏ_9¶¯Ë`ÔT •#ÅW}gƒ|³f<×­ð8²ÿ5È âõm`cÚ—}çêã[ÿoöþ-ΣÆgLÊôµF&Žzê_Ùºœ['Xæ tqu“G.¢/­bŸºâi$g¿Ð ÿ¥ð¡^df­Ümù!gÞ²Ã3Üú3a|ê0/Àd)°FyQ­unÅ(€?v Ú<$J˜ÿžZªè–ioQÞPëP‘¼“%ÞäØ5r•°ÝZ(J¼æÔLñ{ ‰œßÍuu"@M›ÒŽxˆñE(3'_pTÜS½ù¨æpæ=*½\yíwÈ^aöÚ-6åblEcjÓry† :ÅH±Eè"I„t…39ìî씀-ÜYlZêf©^¿ÓAj÷½Ê»ŒrvŸ5ºZ­X΀9KÓîl±@žñhá½U½ê$–Ï–coXœ•À9$JŸ­4ýÕ‚“ÈŸ $i‘åqHÝy‚ê~ée—ôTG¼n²÷*³‹ß%¥ g­Sšêm²'Xk°•9¢Çõ…Ä’nïø½À©ÚAèuqf]¹IK2|—Y·k‰TK[užXbEƒD8ÆïÇSJüZâ =ÆôÒºµi3íü”‡ùµ^Ф9Ýö@»Àø†Ð­á÷˜ò.ø wœô/[¡ÄŒ\~Á‘¯>3=Ó”£½—©Àé¤YEp¢` ‰¡QÙ¨’ºa®zżžÊ*Þœzgç}¼;Ð#U’ýé -#ÄÎÝSDº“l ¹ügTù®„B'æ|pÙž2SXÁÖ =‹ç~õÎK–DÛ+Ïk¢·­ÀICÇCÜ0SApðäcZ:³ísž÷½Z÷•âKíÀDÙl”osúòÖ'+˜EŒ;úØÏb ]RN;-¿Œº(·]({5ׄX’³øö÷ô~™Ÿ=ÇŒpy¾7rB>Ý#ÛÁr{Yƒ©3ßrƒlšê¼õ~±Y¬Ø)Õ`qyûT±ŸIJ\^Òº2¶5ù¶…ŒÂ¨ÆÙ½C+âa¹ÜmyüÊ€=YÙGzm’ÕŸ>ÖÃI)ª~•¢•¾·wZ䥗QyyŒRÂfff8û“‚ -¸ÜÏ„e) ªÔ5‡Ðz}Í=1¶à‡v‰ÓG<˜'}îpÂ/òʨ^ärÁÍ)¤ƒÇ¼V²YYÍsSsôaÛA ŽPWôÔ /U®øGÎ8G”„X×ö¥ïôgd” ŸŸËÀ¿ÚrsŸc¡W8DN0|’t&sõ™9©~ }Y%ÛZˆÝñ4Ã@hÁwKÇÊ0º7ñ¤‡>–"OhIåà"5àÊtþ]ÛŸe»ÝÁ†UyåÞå¼ë\_¹j†œO" o‰¾é~iŒµb âÔwyu«•¾Ö:&[PŒÑhøvw;}V»\3¿”ÍYÍ>ìk·K¶•°Cã{Ç£¹-wd¦»ÏóQ½ødȹç>UQ\}Ó Ï à 2ÍìšsI°Œ?Á/¸™dâð[6Î…eíÖŠ¥£±J;¤àœ1NcùT)À:[êg³dSÇ·"-ûÍ· Ú£ÝRgÖ–²ØA/‡¿„aavàn–¾„ í0î®èT=:ÇÐÈKg1‹OŽœ8ð[<™+è½õJ퓶Qô»Uæû½žsl ø\]ó%»¬üîúr²0»Ñíû‘¡¯u:ÿlˆZª¥äú‘7ko |OtZc½ÜH$Z¢Zà =ˆ#j ¿ 1¢¼M ÁD§à5Yõ‡íïcE30J)R¢êö³c©Vƒý§¤Ï® KÕ{“z$ïŠàPJ°Ýë—Å£‹‘Þpí쩉nÏïKßÖÌײ«ŸêÇ+F©*Fß9Ç6]|»+(½VEãÚœ± b(N·®åäiÚܪþ -ÓEWº?Kûß“IœñáÕtÍ{Be-ë Uu£tië9ÙVåøë_onw®YH°íy‚Þ|˯©KâÉ'zÙuLÔ‚™I…¾?Cfà.mQn%¥Ÿ•I\zQ[°³D]Yí7öT¬$&+ázªŠÜ^„§P•àÇ´ômÖSXS„α¿çd±³Á¡Y>RêÑ™½²†ò…*Ÿ~ûzr”46:bŒ*Ç´H]ÅúÉ êXË—P/f Îëîw¸ÑV%.Ð-HÙ¤œùÍØÁ°ù¦µŸÏ™¿Ï³Ú/€V>ÖG—ç™~]I§ÐRúå”ù5ÝÙo<…zÅ•—Ã!rÀÜC)4ÜKÿªdÞÌ5YG¨Ò!ŠUa dV¦Ä`ȆՃ¶å|þFĹšÆ#\XZ­•c…–exÍØ⻫‹ -ðŠâÅI´ÁAM8îe¹åÌ 4+Ÿ`,NÍ| -‘†“uÞµ¡ÞEL0ÀsUÆŨ O?’t>ÕÕd(×cpÁ@‘¶DùüÊzƱ±º”u²l(èGC™þVƒa%¡³_¯Òã‰z«£+Sñú€ÏZ·öRÊä»îÛ¡MŒXsPX”èóPÿ8:í©N1–Ž[ ˜š#´â;ëRœ -jT­C©i–Tu #s¥§Ú'¨jzÇ¢’‡‘]ž>û Ó›ãé4ý}AB1ö‰pvs!œÀZý¶Ù0¸øÖ5 =YÙ‘Õ®¨=×`«²Š©«åU:¯ -$¨éå,3£¨{Q¾Qê5¨§6µh¸‰Üüß <ü‡ŸP1[½;džFoU—%÷UÒÞ,²Éš5Vo1ÀfÞ2TÝ9'szÀ´{w¢R“XáÐ㌺EæoTúRf;CHñØž;>áẨßæÞzeZ{ 碭-ÝpzÆç@r3‚ÖÚîPá8å“™ŸôU€ôGj%’vrL>íŽ9ŠúK -=JƒË¬À<2Í¢îÿ¸£»|µºÂmïÝa²‡kv¼@ˆw÷ÎÖý¢AŸyÆ«ïÌvÒDYœ32² -©òc¦Y +«Æ€§Qùsýò:ŽrM£ÅÈ*iÀ· Kö î0ÐÇkøÄ<æçó|;€^QÞâÝ@öE -ăڙ~»À?(Ç«Ì_aè3µœÌÀq•Ò·'ZÍMÈòqZ£¹§ËSÅv8à‚¼Ô[=Ä2MV*ÇE¸ì¬Ömpx†“‘ò°Œ¢Ç¸ +4a¯ã§À!¾Â2J ’¯Ôc2Ä»îú£ GЙÓØQö(„ªž0ôéÊ ÕZÅÅ`¹‰ÞÍ>QqÜY·TÓlFrÙ9Ä>‚$s™| -cúÝå99¯ vµI÷ðJÐ?½›ÉÇÎlâ—2ãÁ¯Ú÷ýŒ€%Í4ïÚ]zôMy\U¯_éCùÅ‘Oaðáׯ™I m>jzX P’·ž¿Á©Øô©:Ïûô.)¿¨h^iyˆpdÎ<öL#ÑÆ¥{¨Òܺ¾E¨ózÛ'¦îIÐÔñ`Ïõ®±G‘ß霈tYD0¸À” 0[þ´rD›X[˜Ê˜ïë‘͵¤?5Í<„»9%WÀÙ!.ÿ:ÈÝ*úœhR*C3›"Lq¹JYžC<+yîõ°mÂOSÌÖ“ç8DºVãL¸ˆ+“„¸×[9µQ|…|¨yžâ rÕÓ¨×ê±Â”ùÓxczb:¸ Æ&= -F¸lqF÷wã!ïlgVc8Agbf–FLD¿¦x9Š|s ý5þi.ñ½5ò.–so–¾¨ìû4§e5CÚ±CŠH›zrŒøòx³÷ÛÅ»+Vˆ-j¼pÎén J™m–›Ñs°pЭ@úEƒsFÚ-V^@6êI]§gIëEJ‚J[eƒÏ%K\ñ¸\%kÕבÊ}½Ï±ª·—´Æs‡2ßwýÕk“Òhý€×U%'ˆW(“ûh?œGØâˆÏlíä7+#ÐÖO'›Þÿ²ºéúÅç78' K*ûTâàÃF\Úÿq$qƒqê¦tMŠ+éM4Îâ§7·!… û9B²cr˜xÔ©*ÑEö¬!ü¯¹Š G_á¹É³Ìkñ¹ïEãA GþHŸ#ÑÙfÓT¼äû<û˜}!gÆÁ¥¬…X Wϲlq*¿ˆé©°MWfüp]ýÕST”i;Çéyù>.¯GxfœÕÛ[$« LTmç¨m–fîîe¬¢¦§P*†tÑ5[=ÑTQ3<“)u k¥ }²ùbâŽ4¯w -E,˜µ´´&¾Þ6º„¢ï¨Í$¹°ÁÜ<ÊÅ|˜oÏLŽ8ßx'%ì-ià_~±úáÚuY߉•ü]<ócÉÞ„Ä:g}ä­A™l=iÜ’Ù›Añþèuúéצ<Û­O˜àmæ5 ÜT… ò‘êÕkjÕ‹IG ¦X%-úú\¶qŸt§D Љ64>–_ÚÒâ[Nlòí3«KRÁp²–Âb]ÌJ—^»6m4×Ë'rÕÏ"d^D›y!!o<¥fN¸È%PZQ¯÷nœ•7Je( æ%.ÜÆÐFœ—Q Ú›v¢î*ï&Q_Ç1éÇ»OµMí÷S]Ðê—âO -,öŠú"Erq‰3×{1NÛZ2ú ©ôeeE?qx -‡N$ÝE¾ã!Nz(Ý}Xn×ü½aב´˜S€¯q=! ÆUwŽÛ-ÁWá‚}Ø\dæ”Qf¨ÛÁsZY THƒ-´/â«Î-k×ÖôïÒÉRZ¤™2ûx°.[ÿªt8HÕ«XE¥2‡U-äbO¶’g×Vs£I5üŒõ¤JÒ´Ù¼ëâ#LAôfvñͳýn™ÖM6H·Þî,ÙŒšípŸBIN"±Š…:2 íÀlÇV=+èw9fš ÷˜±ÁÕ"ÙÛ½ìøù<´ÓÇ™R]Y4B²,LˆéIL ׶—=™ùôÜ3BÍ]²'ÿÔ¨ ’]döŽ -ÝݦDJ)ÙŒáÉ¡fl°«Sa¬c€²cý×Øh}ë –7‘:©„ÑÅeƒ+"Ï ^Œæ?õl^}âï.<œEÖöþÒë’QzM‚iDÓÂÂLTª¬õºÒk=mùP©ú'·UŒ´/€›0òû -ä–“Tf0kˆ¯¨éÞ6¡"¸FÂéq$îDY7Êôµíª‡æ¢_Ä+ùXDLI¨#%ò8ß[”: ¨ËA|’z,¯ -ø¿BówÚ]ŒßxÅ®ª ÙÒš›¼Ï"ÌbYÓ’j=KãðÍ_€FàüÀx•ÓÕ¤'“¶?z˲ˆl®ºn~^ÃÆ/ßc1Òn6i"ø¼å!ÕBuŽÐ#PÁ€ÄÑ£ù±¨óËÏŒPÍVJ8d/¼?­H|ÀDêŸYE|ETÛÐ+MV«ô{8ê§t"'2/<Å“Õû›ÕŽÕ#qX(-an럷?æÞ)¦êÞ…s´ù:™&pRf· nn×c3ò{<ç {î1fJ=‘gq¬qQ’ƒw“¾Ò{+æNkcŠÐ°˜W¬kc+$Ó UÁ#/´®¾òËñfØô}’‡3ðKµù>MÁKÚR‰ûDû­˜ ¼ðM]eËÛuô¯‹ÙŒDÔ6A-Æw¢Á¾êÉöSÛ2•8H¬ó9NS‹²õ"ö• ›ˆhÉôD,,»O&stÃÕZ<1›pxÍ6L½â«c÷Ë섉Λä7ÛǸ{Ò0ÀÍÎ\vÙsùÕw’qò¸%‚‹c4©ŒÆ7ïF#å:¦ÚÐÛ*Ší ò• -rÒÛdê9ñb÷Cæ½óG„á·|9]°Qˆí3ˆ¥8ö•'|2 jK¢´”6¾Y¦·ü–ū؆Mì{"¶¶¤~lú…W²ÌÅ£¥ZI¼ýÇCLTb¼Ø¨ñÉ®-üGOdfEæ—ôk'Ì,³q½Š°ÊšBa›=As_|û¢Õå|šEñ ¦Ùá`uͶ‰:ïp0nÚ”Û+•¥`¯|,_x*¦«;"“T+Bò%Þ}êΈ†õ<õÐMþÙË1Å¢~aEê#0k’Å{¯)QOr­à´¢.ôÄJ¹UâzU_0K‘E³¤ïB=÷eôP–ÃÜÍôC>QR‰øÁÆ“Úå{òë#>Ĥ¯”¤BÄœ“m§EÅÕé³:¸·Â¾ËmŽŠÞ:òpzÝÚ>iŸ÷gc_³wgÓñ¶H|¾âÅèzïÚq÷E)”×[‚¢ñS?ü¦ã4ûÁÀ[<\ÍÕ`ö&“i -Q^ ±ëkB˶ÉÝÏW)´XI6°,}¥¬>Ñ­ -ff|óéæîDÈ[(-’°1MXü’µÌǨæ¹Ð1½æÄCÍ`SN¡‡ÒÅ»ïaÏB±³7,PÄ_ˆ•Žp²Ï‰çó×CG®t¹=6Jøwº‡P×±f×öËÌŸ õò–ÙÍ·¿)—UôÑþN¶Õ2¤C.®;—ÿÔvcƒ‹&çî¼Ð›íø¡¢ ?’!sÛ yvØ·ïœÒÎkYiÌçhbÏ0¾IDê.¶Y_^¤+<@<«Nk¿±eopô³…+¥ºêhC‹0Hó³cŒÆÜHf Õ»uÎTÉ "[1ò™8ÍQ áMBšHiô*ó]ƽ ¨Y©ipá8i­Þñó°žÇª<FßèÍNa¼°ã¹Q[£ðbd Yfwp“—µ©Â·{äBŽT.‡)çN¨5# Ü\8£ ¦oåc—j9^ ÐbYHËoùIà3Ò"¾œ½OÒU›7œëí Ú£xÖ°´ =|MÆË•’ëé÷\Êã®›½›ÊLs (iï*{–2w}À ‚Sq¤”œz¬4XBc°ˆ/­ùšNߧ}‹ÆO"¼¸ò^µ¯Å•m¹•÷h„‰rd,ŒÛà½ûJtF ˆÛÑW¤\ʯ¡q—9-1;Š ’‡Vû·U¢“Äç ½—»ÁD“™A72<öO• ‘6üVCRð³U$· $„Tyl-™üÏ;é4Ðì±ÓÈ„C퉊{ì7–·êë—Ó§è~HË”¼}™+e¦œu1Ïß‘ØU)Ô:·@ïRQuÜ|¯žìÀ·=´6¦òµ”£Iï3VNîôĹÏÃ|)nðËÛ—[®,—èr¶Lß­âØʼnÐ?¾çy1·ãmõé–:”ˆDÈsQuMÀ4‘eÖ*d›K ¿hwŸZÉa…Í“éœcg¸»EXïŠÅ÷‰OÙ#Åî~ý¨bõ*Ú¼W5¤ýXÿ!à%Kìë•(À - a¤)•Y°žeDÿ­ö‡Ú—«~‰ÕofØB8ûzIÅ‹‹—ç"ç6ZŠõæ ï?|ÙÊËûêÞVÓjˆóý ª¾$ù…è¾™A_%ãè -½=7c…ÙG¬èÎ35µmªâÊÉmqZ†\B‘[›¸46ÊÎõÉé1‹äp#T‹ÀY̼†Ü¼²µ8c1@Ìõb$ýZÃ>ËA‡ýÿ Z*9/‹[ qM%ÛZîÔ3Ÿ"Å÷OÙýklT¢HFkmºYüéA3—¾OpkÄ·\;±©ô‰ãìµêOX.š²ÃÙZ|©9K>ø -[L-‘×_ÎlrÉÁ~Õ?·åSç& ‰Å¬}+ž¾†¸WfÊ5na­¸À®ª|êkS=öê[¢8ˆžºÐ(ú°Oæ*ÔØ…ª\LêÊ°_PÄê:‚܆Ÿ0 -o¶d©Wr‘ÓÕ$EŠÚÜÍyÆokjÄÀ”*€Ò¤'ñË']Çåú®8šŸªBžß%[Ž1FôõU~zË7†Ÿ¿Ñ&¤”D·=.Eå°¹úiˆH× |v`—þ /õ«”WÕw°õ‚I ¾ª@+a®ó(©±ãA5¡=y=£­ñxç>USåD»<çÆÍMUÔ›€ÙlE— û†wRŽ{ÞÉíkGo-îçDq±¯R®¾  …ù ¤í€‹p¼ ìoB:04B»Ëß *pº¤¯O*=¾oFäÉ°ïCÀIüŠkú$ÛÆò wLv'1W—8w. -OêX¡gŠÛm9#Êó2Ôq -ÓRLvÏÍŒÆ/Ï7Xy!r8Ë!MÔ4ócK v&½›Ä4á”UO-EyÂTóT­âÑÕì}3Þ5ªV¡H·>”œ³"M*œjnøÏ3°ï|Ú÷×’4²{óÝéL¬!àW”¬Pfœ«ÙýFGó¼Õ‰}j™j컓íRÜAñÓ5Ý«rà)vw º'-¢ßGrËpnvÙ1AÛõ ·ºó\1sNñ&b®]?Mr)smWÅ€ÑûäÌ uQØÉ«N•ä"l•âaLGEí,¯Â·[Á×ì<2±?®¸k´.5ó÷Õ–»ïĉìðOµ2¹ŠqBÂ/1¡3oÌò¬²P¢t?r>qŒ>Øçg(Ò6#ï0õLy¯Gûaš”GêÓ`ì>!úáJ(µ°îÿ,FØ™@xæWÙÔF,7tDƒ—st¡•= ¬'Ïèê©SÅp}K%Áîx\5DGËM®LT¡Cà¿H¦:ØF¯ßÛx‹:ÂukÆÂu“K›` ;üxÐŽ»Z -aàùÚîjäßÜš¨SÞ‚{ÈTvø…ùî)x“›”Vˆc†šçùÁüÿÿO@V08ÔÙ -æˆù_ØŠÐTendstream +úhÄÃó7LÏ t„ü.¿à_bó÷Øõ'rnY#%#ö·[ÿhj=Î\ÏËø?n Õ¡6ÿ<üæ‘•…z|8…xœ|Â"€ˆ0¯ß¿ñø‡†÷_gu+8 ì 0ááâáá<þþãû¯“Ùßh @¨Íï™Ñ…[AlÇ쟂ß0Ð{ìÿ˜ô?Îò1禡@ñ‡Ôô4xivï¼Iw/ro¨Ka­Þ‡¼€ +hçëÔðUÑRË_•¡\uÃb÷Í^Sû.w›/ضúºHœžu&ƒŽs©üX?åá/1· +³oq›b§¾õ9™T[yb,Äc°µ6¤­c^ð •z¸•†~rÃÀà‘@Äxí‚ãL©yG܆W‡@P•¿Àœ°{sýìKÿ×ÞžÎ3”O›”ìYï0˜Ä=ž`3G¸fQJë—úD0J*ôâ?5M¦_ðÁöðE¤]ÐιÂ+¦qªHŽ‹\%D“Ä3ÐdéèS¦¼D`\ų2˜ò•{>á~`u¿¹y*ÍüCYT::j©¶ø$‹õu2Ø›[ ÍòÓË’UÅ ?Uç „¿~ÔÑX±¿vt˜@ªù,ù9QŽ˜Bè³=îLþ/¬Ë`¼ë<Zåó6~–‡¸êP#zOܪ Θ ÊåÌ3åLƒ3cdYþ;q¢‚仑 ×‰Fy|%pýJ!ÿ‡)‡ÍJR +y·uWʽ»ÈŸï«‘[*s%­ÂrLŸ¾ÃèÊ`%¥üÅNJ]Åhreµ_\Ø-3‘Ö:VŠ¨PÁï0G)=F[ÓÚIµchMäÁçù/È’¨ia‡XÖV;Ì4F^cR>´de„ª8J¥ûÜü…]æq°p]KÙbp™®^)z[Ø{.<ª†Z‚&ª#ƒ`XæµmòÝç:òĸèâébEÍ1ÚqTŠGÄÉO_mÄàåA§£ùóÝ"G³ZšA;­´Ê¦… Kï1Ic ¬i‘á–Öö +uãp¨ÃÙjfɯ'Ä‹¼ôòÂéêÞ6ï pB‰¯Þȹñìɤ¸0½g¶MÀÛºóªÕ†À[®íkh1 5uv1Ÿ*Ü”¾½Ž¨O§oðKTÕ»’žàµXòN3­’bõ·¹-‡ üä®[õx-Ö»ÜV³¹A®}ß±¼D_ßDÇÚ¦ f”>Km®x¾˜;§µzªA4—+ôs´›”6>؇fþ“3DŒÉ©WE%™ã&ž‚¹@ë†Øªc©[ÖÓõ`Z“$‘ µåaXëöAîDZ]eÕ]|W_1i/¬mi+ÛqÏÅ15O +þ…záÕ½ w—šým2Ç=ñ ÁîS¦1 þ¥Ÿl·‰àÍ¡Æ#káý)‹âOC\ +¬?¥^‰Û¯œƒÊêyIAiT÷/-}ò:Þ àFîîà @™™¹åm­d=ç³$o³Ö™*öŒ¨Íƒá¯…†j·\Ž”{²ìVÒðsêC¥Í^`={ÁzÌÝEÅ'þE\[ɽþ­>x¾æ×fí²Lp@®Ã ;–Ö@µXUk„l$I)ž­îÓܾ¤Ðåvh)ù€ Z´¹:šþ×™R‰=ïõËp†2Û Rcä³`÷ +gä«·®£ºôbª%¾êEs_®±Â#wpô¢œ‘ÞH¶~R½C¬_:œvôup»§_ÍrµM I‹yŠ]ÙÛ­Kd䫱n¯¸›ûúm¤6בfÍÅ žÎ8cË›®gŸtpRÌÝ G‰eëŒL ('Ž÷?ï¶&µS’ÛÌ#zpì—zÈ®–û“Ÿ‡" ÎRÝOõŒ…ÎGèK¡p§¤F«>³ÂkËÏþÊÄi¡þy×°eDë­‰4Z~ˆ’wçRÊ:]â‡ØÅÛJQâìÚqÆâš™âO%êÈøâܳ„:×65›Ü˜I ãÊÌñ»_”ýi¯.MÞk`j}LÑ >¸TkÖµÏ0vµÊù§äÔPÜ4­&L°P¶c¨°Ú¡üó¯jUL…nöŒå$Kì•R×5UŽ•Âµ=8Û¦æf‚®cDÊŸ&v=Ç4ßg{âîðFtÐ3qUÄ>czM6âêd¯»÷5s¬ç›²%<;ˆüÝÃüš¨`ØãJeîÒåWF­%ù¨yá9b´q L®U6Ÿ-uƒo†îÉh±c…4²³:eíp nÁh†Òõåȵ&¿ë3õ¥aê‰OI) +õµä“u#tü%övnç¬hÛc7;qMIR^y.Òu«ü\¹Ÿ³:gÃäT4ôÃi±hÒgŒ¯Û×e0jª…ʑ⫾ˆ³A¾Y3žëVxÙÿä ñú60ƒ±?í˃¾sõñ­ÿ7û‹  çQc‰3&eúZ#“G=õƒ¯l]έŒ“ ,sPº¸ŠºÉ#Ñ—V±O]ñ4’³_ h€RøP/2³Vî¶ü3oÙáný™0>u˜`²X£¼¨‚Ö:·bÀ; mH +¥FÌÏ?-UtË´·(o¨u¨È ÞÉorì¹JØn-%^sj¦ø=DÎïæº: ¦MiG¼@Œ +ÄøÀŽ"”™“/8*î©Þ|Ts8ó•^®¼öÀ;d¯0{í‡r 1¶¢1µi¹‰Ë¬ÛµDª¥­:O,±"A"ã÷ã)%~-ñ…ãziÝÚ´Š™v~ÊÃüZ/hÒœn{ ˆ]`|CèÖð{Ly ü…;Nú—­PbF.¿àÈÀWŸ™žiÊ€ÑÞËTàtR‰¬"8Q°†ÄШlTIÝ0W½b^OeoN½³ó>Þè‘*Éþt…bçî)"ÝI6‰†\þ3ª|×B¡s>¸lO™)¬` k†žÅs¿zç%K¢í•ç5ÑÛVडã!n˜© 8xò±?-Yö9Ïû^­ûJñ¥v`¢l6Ê·9}yë“Ì"ÆN}lˆg1†.‚)§–_F]”Û.”½‚kB,ÉY|û{z?„ÌÏžcF¸<ßH9!Ÿ‡î‘í`¹½Œ¬ÁÔ™o¹A6 MuÞz?Ø,Vlƒ”j°¸¼}ªØÏ$%./ia]Ûš|ÛBÆGaTãìÞŽ¡ñ°\î¶<~eÀž¬ì#½6ÉêOkŽá¤”U¿JÑJßÛ;-òÒË(ȼw8a‚yeT/r¹àæÒÁc^+Ù¬¬æ¹©9ú°¿í PG¨« zê…—*Wü#gœ#JB¬kûÒwú32JÐÏÏeà_m¹¹Ï±Ð+"'>I:“¹‰úÌœT?о¬’m-Äîxša ´à»¥ceÝxÒCK‘'´¤rppe:ÿ®íϲÝî`꼃roŽrÞu®¯\5CÎ'‘„·Dßt¿Ž4ÆZ±…Gñ 껼ºUH‡J_k“-(Æh4 +|»;Hƒ>«]®™_Êæ¬æ +ö¿µ‚Û%ÛJØ¡ñƽˆã‚ÑÜ–;2ÓÝçù(ƒ^|2äÜsŸª(®¾é†çp™fv͹$Ø ÆŸà—FÜL2qøÆ-粿vkÅÒÑX¥RpΧ±|ª`Æ-õ³Y²©ã[‘–ýæÛíÑn©3kKYìÀ ‹Ã_°0;p7K_Â…v˜w× t*ˆch +ä¥Ç³˜Å'GNø-žÌôÞz¥öIÛ(úÝ‹*óýŒ^Ï96|®®ù’]V~w}9Y˜ÝèvýHáÐ×:6D-ÕRò ýÈ›µ·¾':­±^n$ -Q-p†Ä5H_†QÞ&Ð`¢Sðš¬úCŠö÷±¢¥)QuûÙ±T«ÁþSÒgׄ¥ê½ÉF=’wEp(% ØîÎõËâÑÅHo¸vöTŽD 7ç÷¥okækÙÕOõã£T £ï‡œc›® ¾Ý”^«¢qmN„؉1§[×rò4mnU…é¢+ÝŸ¥}ˆïÉ$Îøðjºæ½G¡²–ˆõ„€ªºQº´u‰œl«rüõ¯7·;׬$Øö#â\MãÇ‚.,­ÖʱŠBË2¼flñÝÕExEñâ$Úà &÷²Ürfš•O0§f>ŠHÃÉ:ˆ ïÚPï"¦@๪ +ãƉbT†§I:Ÿêj2Œë±¸` H[¢|~e=ãØX]Ê:Y +6ô£¡L«Á°’ÐÙ¯WiŠñD½ÕÑ•©x}Àç ­[{)eòÝ÷íˆÐ&F¬9(¬ Jôy¨öT§KÇ­LÍZñu)N5 ªÖ!ˆÔ4Kª:†¹ÒSíT5½cQI‹ÃÈ.OŸý„ÀéMŒqÀtšÆþ¾ ¡¿ûD8»¹N`­~Ûl\|ëš…ž¬ìÈê WÔžk°UYÅÔUò* ÎWÔôr–™QÔ½(ß(õÆÔS›Z4ÜDn þŽoþC‚O¨˜¿­Þ2O#È·ªË’û* +ioHÙŒdÍ«·`3oªî‚“9=`Ú=‡;Q©I¬pèŒqFÝ"ó7*})³!¤xlÏŸðp]Ôoso½2­=†sÑÖ–î¿?8=ãs ¹Akmw¨pœòÉÌOú*@ú#µI;9&ŸvÇEý%…¥ÁeV`‡fQ÷\ŽÑ]¾Z]á¶÷î0ÙÃ5;^ D;‡{gë~Ñ Ï<ãÕwæH;i¢,ÎY‚T +ù1Ó,Š•UcÀÆÓ¨ü¹~yG¹¦Q‹bd•4à[Ð%{ÐFwèã5üNbóóy¾@¯(oñn Fû"ž¬fše¬äe [ï¤ã^¦]Ð÷µ­×4¹«ç¢3ìC5ä)ðF¬þWN;1¿AŽÇÏ!¦Ÿ,:/œßó•›vuö”䳿¤÷‘^{zÏ1´pwæá=l+عt.Í|DœÝAÖƒÕ˜d½Ë¼îBdWeëP h~q‰Ëß#d»aÂVxC1Ÿ@âAíL¿]àŸ”ãˆUæ/‰0ô‡™ZNfà¸JéÛ­æ&dù8­ÑÜÓe©b;pA^ꀭb ™€&+ã"\vV붿 8<ÃÉHyXFÑc܆š°×ñSà_a¥IáWê1â]wýÑ„Ž#èÌiì({BUOúôePƒj­âb°ÜDo‹fŸ¨Œ¸ î¬[ªi6#¹ìbA’¹L>1ýîòŽÎŠœW;„Ú¤{x%èŸÞÍäcg6ñK™ñàWíû~FÀ’fšwíÆ. +=ú¦Œ<®ª×¯ô!ˆüâ‡È§0xÈðë×̤Œ…6ŸG5=¬ P¨}˜-Ÿh}‘SÒüxIR.¤f7a +WûQˆŽ?²TþÆG§¯ݶv¢êñŸÙöìhgKƒž÷îG)'C;´`·'¼OÆž‡½ÁÙ½7pÑ€å|§b­çSDNË‘Ûˆ-(ÉÛÏßàTlúTç}z—”_T4¯´Ô‚Ù|1qGš×;…"ÌZZÚ _o]BÑwT‹f’\Øà@nåb¾Lƒ·g&Gœo¼“ö–4ð/¿Xýpíº¬ïÄJþ®FHžù±ŒdoBâG³>òÖ L¶ž4nÉìÍ xô:ýtkSŠíÖ'Lð6óš +PnªByŽHõêµ +µêŤ£S¬’€}}.Û¸¿Ï ºS¢èDË/íNiñ-'6ùö™Õ%©`8YKa±.f%Ë ¯]‹6šëå¹êg2/¢Îͼ·ž¿R3§F\ä’N(­¨×{7ÎJ¥2ónˆ?ch#Î˨GíM;Q÷•÷ “¨Fˆ¯ã˜ô‡ã]Š§Ú¦öû©.hõKñ'{E}‘"9Œ¸Ä™ˆë½§m-ý€†Tú²²¢Ÿ8<…C'’‰î"ßñ§=”î>,·kþŠÞ°ëHZÌ)À׸žãª;Çí–à+pÁ>l.2sÊÎ(3Ôíà9­,P*¤ÁÚ ñUç–µkkúwéd© -ÒL™ýñ÷Î"k{éuÉ(½&Á4¢iaa&*UÖz]鵞¶|¨T}“Û*FÚÀMù}rËI*3˜5ÄWÔto›‹P\#áô8 ’w¢¬åGúÚvÕÃsÑ/â•|,"¦$Ô‘yœï­JÔå ¾FÉ=–Wü_ ¡ù;í.Æo¼bWU†liÍMÞgf±¬éIµž¥qøæ/@#p~`¼ÊéjÒ“IÛ½eÙGD6W]7?¯aã—ï±i7›4|Þòj¡:Gè¨`@b +ŠèÑüXÔùågF¨f«% ²ÞŸV$>`"õÏ,‹Š"Š ¾"ªmè•&«Uzˆ=õSº ‘™‰žâÉêýŠÍjÇê‘Î8,”–0·õÏÛsïSuïÂ9Ú|L8)³[P7·ë±‰ù=žs†=÷3¥žÈ³8Ö¸(IŽÁ»I_ é½s§µ1EhXÌ+Öµ±’iªà‘Z×ß ùåŽx 3lú>ÉÃø¥ÚüŸ¦àÆ%m©‡Ä}¢ýVÌ^ø&ž3uÍ >'ÇFx†÷~Ÿ®²åí:ú×ÅlF" j› ã;Ñ`_õdû©m™J$ÖÎù§)ˆEÙzûÊ…MD´dz"–Ý'“9ºáj-ž˜M8¼f¦^ñÕ±ûevÂÄGçMò›ícÜ=iàfg.»lȹüê;É8yÜÁÅ1šTFã›w£rSmèmʼnö‹ùJ…¹ém2õœx±û!óÞù#Âð[¾‰.Ø(ÄöD‡Rû‚Ê>™µ%QZJ ߬?Ó[~ËâUlÃ&ö=[[Ò ?6ýB+Yæâ‹ÑR­$Þþã!&*1^lÔÀx‹d×þ£'2³" óËúµf–Ù¸^EXeM¡°Íž ¹/¾}Ñêr>Í¢øÓl¿ð °ºfÛÄw8˜ 7m Êí•ÊR°W>–/<ÓÕ‘Iª!ùï>ugDÃzžzè¦ÿˆìå˜bÑ?¿°¢õ˜5É⽂ה¨'¹Ö pZÈQzb¥Ü*q½Žª¯G˜¥È¢YÒw¡žû2z(Ëaîfú!Ÿ(©Dü`ãIíò=ùõbÒWÊR!bÎɶS +Œ¢âêôYÜ[aßå¶@GEoaY8½nퟴχû³±¯Ù»³éx[$>_ñŽbt½wí¸û"ÈÊë-AÑø©~Óqšý`à-®æj0{“IŽ4…(¯„Øõ5¡eÛäîç«Z¬¤ X–¾RVŸèV… 33¾ytsw"ä-Iؘ&,~ÉZæcTó\è˜^sâ¡f°)§Ðà ébÈÝ÷°g¡ØÙ(âÆ/ÄJG¸NÙçÄsŠùë¡#WºÜ%ü;ÝÇC¨ëX³kûeæOÐzyËìæÆÛ_‚”Ë*úh 'ÛjÒ!×Ëj»±ÁE“s÷ ^èÍvüPQɹí„<;ìÛÆwNi絬4æó4±gß$"uÛ¬//Ò žU§µßX²78úÙ•R]‹u´¡E˜@¤ùÙ„αGFcn$³†‰êÝ:gªä‘­ùL œæ(ð&!M$„´z•ù.ãÞÔ¬Ô4¸pœ´VïøyXÏcUž?£oôæ +§0Þ@ +Øñܨ­Qx1²†,³;¸ÉËÚ +ŠTáÛ=r!Gª —Ôs'Ôš‘Pn.œÑÓ·‚ò±Kµ/h±,¤e‚·ü$ði_ÎÞ'éªÍÎõöíQ `Á©8RJN=V,¡1XÄ—ÖüM§oˆÓ¾Eã'^\y¯Ú×âʶÜÊ{4ÂD92ÆmðÞ}%:#PÄíèÆ+R.å×иËÀœ–˜EÉC«ýÛ*ÑIâó€„ÞËÝ`"ÉÌ û§Ê…H ~«!)øÙ*’[Bª<¶–Lþçt höØid¡öDÅ=öË[õõËéSt?¤ŠeJ޾̕2Sκ˜çïHì*‹ê [ w©¨:n¾WOvàÛZSùZÊѤ÷+'wzâÜça¾7øåíËÆ-W–Kt9[¦ïVqìâDè߃ó¼˜Î[Èñ¶útKwNPJD¢@乨º&`šÈ2k²Í%†_´»Ï ‡ ­ä°Âf‰Iƒtα3ÜÝ"¬áWÅâûħìŽbw¿~T±zmÞ«Ò~¬ÿð’%öõJ`…„0Ò”Ê,XÏ2¢ÿVûCíËU¿Äê73l !œ}½¤âÅÅËÀs‘s  -Åzs†÷¾låå}uo«i5Äù~PU_’üBtßÌ ¯’qt…Þž›±Âì#aVtg‡™šZƒ6Uqåä¶8-C.¡È­M\e çúdŽô˜Eò¸*‚Eà,f^Cn^ÙZœ‹± æz1’~­aŸå ÃþŒ-•œ—Å-¸¦’m- wê™O ‘âû§l‚þ56*Q$£µÇ6Ý,þô ™Ë ß'¸‰5â[®ØTz‹‰ÄñöZõ'¬ MÙál-¾Ôœ%HüÆN…-¦–Èë/g6¹ä`¿êŸÛò©óÄbÖ¾O_CÜ+3å·°V\`WU>õµ©ž{õ-QDO]h}Ø'sjìBU.&ueØ/¨bu‡AnÃO…7[²‹T+"èŸÓ¾[}M=NœBŠ}¹Èéj’"Emî‰æ<ã·55b`J@iÒ“øå“®ãr}WM‹ÏU!Ïï’-Ç#úz*?½åÃÏßhRJ¢Û—¢rXŠ\ý4D¤‰ë>;°Ë ÿ…—úUÊ«ê;ØzÁ$P_U •0×y”ÔØñ šÐž¼žÑÖx¼sŸª©r¢]žˆsã榪GêMÀì ¶¢Ë…}Ã;)Ç=ïdˆöµ£·÷s¢‹¸‹ØW)Wß †Â|PÒö ÀE8^ö7!¡Ýåï8]Ò×'•ß7 #òd؃Æ÷!à$~Å5}’mãFù†;&»€Ç˜«‚Kœ;…ŠÇ'u¬Ð3Å‰í¶œåyê8…i)&»çfFã—笼9œå‡&j„ù±%;“ÞMbšpJª§–¢ +íûkIÙǽùît&Öð+JV(3ÎÕì~££yÞêÄ>µL5öÝ@ˆÉv)nŒ øéšîU9ð»;PÝ“Ñï#¹ƒe87»ì˜ íŒzÐ[Ýy.ž:Oôa±aØCk´¨G5b‹±xÏVE¢8G=–>\Ÿ˜9§x1×®Ÿ&¹”¹¶«bÀè}òæ…º(ìd€U§J‡ r¶Jñ0¦£¢v–WáÛ­àkö ™ØW܃5Z—ÇšyûjËÝwâDvø§Z™\«Ã@ +ãL5Å8!á—˜ÐÀÀ7fyVY¨Qº9‚8Fìó3i›‘w˜z¦¼×£ý° MÊ£Nõi0vŸýp%”ZX÷–£ ìL <ó«lj#–:¢‹ÁË9ºÐÊžÖ“gtõÔ©b¸¾¥’`w<®¢£å&W&ªÐ!ð_$Sl£× ‰ïm¼Eáκ5cá:ŽÉ¥‡M°„~> endobj -968 0 obj << +1008 0 obj << /Ascent 624 /CapHeight 552 /Descent -126 -/FontName /RUGCJZ+NimbusMonL-BoldObli +/FontName /BXRIGX+NimbusMonL-BoldObli /ItalicAngle -12 /StemV 103 /XHeight 439 /FontBBox [-61 -278 840 871] /Flags 4 /CharSet (/numbersign/hyphen/period/a/b/c/d/e/f/g/h/i/j/k/l/m/n/o/p/r/s/t/u/v/w/y/z) -/FontFile 969 0 R +/FontFile 1009 0 R >> endobj -1938 0 obj +2014 0 obj [600 0 0 0 0 0 0 0 0 0 600 600 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 0 600 600 600 600 600 600 0 600 600 ] endobj -961 0 obj << +1001 0 obj << /Length1 1630 /Length2 10420 /Length3 532 -/Length 11283 -/Filter /FlateDecode ->> -stream -xÚíteTœí’-îîNÜ%¸{pw·iÜÝÝÝ݃kp×Á ,œ Á!—|ßœ9³Î_3ç×]·×z{½Oíª]UÏ®·¨)TÔ™Å,Ì€Ò`Wfv6~€ÈÞÌÍEѬÀ¬´rS6³Þ.$jj g ©+È,iê -äh-’@s€‰ áàèå ²²vÐiªiÓ322ýÓòÇ`æõä-Òdм½¸íí`×7Šÿq :pµ,Av@€„²Š®¬ÒÝ%MÀ èljPq{kÅ 2‚]€ôKg€Ý߀¹Øô§5–7.1€)ÀÅhz zšÿ@LG ³=ÈÅåírX9›‚]ßîÀÕ›Û¹Yü)àÍnéðWAŽÎoöoØ™Šƒ‹«‹¹3ÈÑð–UERúï:]­M]ÿäv½ÁË7O s·?-ý…½Ñ¼¡®¦ ° Àèéú'—`rq´3õzËýFæè ú« 7ØêŸ0œV¦Îv@—7š7î?·óÏ>ÿ¥{SGG;¯¿¢þòúÏ@®.@;K$vŽ·œæ®o¹­@`$Ö?Ã" ¶t°³ým·psüætþë‚èþÌ ý[¦`;/€Ð‰UÉÁõ-%€î¦2Ë¿OäƒÄÿÿ-òþïÄýWþËGü¿ýžÿ•ZÚÍÎNÉÔþmþ^2€·-ãPüÙ3v¦Î€?»ÆÉ ø…™Úƒì¼þ›ÀuÔþ]ìðý+,ëjúv)b`«7a˜Ù9XØþ6ƒ\¤Až@ «¹5ÀÒÔîíÎþ²k‚-€Îv 0ðMÛ¿®õ-ˆí_0 k¹-ø\C@°Å¿–ÿ&×_ųÊèÈJiê1þwö/O•·IpÕðrþ#¶¢ƒÅþðˆ‹;x|˜¹ÙÌïy<<œ^vv¿ÿ&ã_4ìÿ<+šº:ƒ<úl,ll쀷ÿ<ÿ<þ ØÜÁâÏ䨻š‚-Þ†í? `s7gç7ÿúþßšþÇù¯±=æH_—ÌBm2s²\ð F?Kêö³C†9V4k”Ö9ôdFnóÕ˜<ׇ±´Ìð¿~òZ:v|ù.Ç°?ÞgGÛ—Ò½8‡êÖÍß<£)·£«¡äø„&åðî–vxblt¤ïvà;1c~"µ€; *ML S>±ˆžfOãTã>yü@r·)–å¹ôCZ(ÞtPæbu¡ª½¦Æ·w¾o®<tyZÚ„r£_y6¸]9b×ÑõÞûԅ>$68?ÛìxE÷gª¥ª^D¸ ý2~+ï®áÿÊk…úõ’óbUí:Òµc˜D°'Y•ø„O,¯ê6Ãóøˆý‰“'Çðr—Úz‰v~âP/eÌz4´1ÆúíÍàñ0YÌ”ÃÁ7m¯A„|ä(»ŠOX³¡½Ž)|?º(_‹$2žËS»)nãÀQkR³m -×u”ø¦ñWÉê!r6Y—fü…øÙGRŸ¾yKR‰vUå)0o+Xä - ø`8ï&-Ô§|_wñ˜7¦æ 奿i®™ÀÂÆC6K’kФZqÿ©Üõ-„8ª±Ïë½=Iæ¾xV@f³6Å-ýwËÄÎûñÌq#Eûu$u±ë5Äel&Qül‰x„ù»ƒ#MeȦ’9ázÚð¤Æ¯ëÃÈ E¸½ëâíŸ+óˆ°×CˆØ³Üg¨´ä·[¾Ñ÷pÒ!ìSðŸò“Ø›9"ÐbòMÀ8Õëq]yZsY£4îV ¯—…d<¥siáøÞù%Þ«¯ÔˆÝ¤qg'ä·„ãKä´¾ÀGq!»:½mQ!!&ßa?F±1Ž»ÁÞ¥Y†eP.hNø­1!/­öã÷œ½ð&  ‚¸a©7hèÛûŒýóÇÙ‡\š¯+D®ÉÑÐ Zƒœ0üÓvÄùØEýÉO¼ö~&ÙRm³ŽÊø=q¶qÊ¥¥»5ôÌ”ëb_ ¸mÓa…©!RÇ<Ê)¯$KåT¾C’"ú3Lº wìóÏ #uCm…›®££¥b·B_iÊîð¼ ]7‰Œõ• ðeQ ,®€”]®ì­|va!Ø;ýF‰E=ÅÑ8³¬5)Å¢u, ûÕðì^È ›Âê‡V+ƉC~~UY›¿> %<{ïè—ÒQs…ñpbÈNÖi¿KÚëC/`_IL»/\x7´×´mÂdšØÒeÖίð¸‡^ìë!>ûÙ;æ ê¹MQU,¯ÕêÓÉKQBäg~—šö–S£,QØú¹¸_ìMjŽCçqTlÉJ6È£¾šø (Ü×}Yô*NY&X ìs'«Q·’RïÍnƒa°1³'ù¶¢;\ ´ý6§eã3Qº7¢RÜ -ã>õû~ -[`Ï—Ì/ù®—o MyYU‹â¢/ÿ¼Ý›Âœ¢ÝˆÓ[³¶MlÆ£ç¬W®¦mTÈǨæ1dªveCž«Ø}z^<’%„áùaönxwŠ»%Q’¡Zû o·UTK¨?Ûìª2?4]žÑÚ„9ùèâ' ÌÖ9daîRT.Ä&0Lh2_ióU@?"Ç’zZ=?…éæŠÆ ÓèÛ†ÿ’Y˜ÇÞƒiâ’¡4ZþØ–ikoóÂŒªlS±Üçe¬q]Tg@QÛ1‡¤ƒ„1:ÝH¨ZYÓéšu7u§ÖítýÖsÞ¬ƒùØJ$ÅØÅ‚¢Ó9ákµz>LÚºS;Ö‡2&êÿ¦AÞÆƬ”½Ö_ê7ãÅ -ËšÕ˜±{[½¤-üyª!Ø¥ò6¯Ë,ÝÏ–r‡{ŠÒþŽ•ðRö¢i³ 4:»ŒNt8¬¼GrØ¿š&¦².ÌP˜ã®—ae‘©Ö’ГÖNTX/ïbmåV¡îé1âûœ9åì¾ú;‘ùÑ­[BvÞÄÏdär{,‹&z¨½tEÒ2]A fS0ò}úö4kwçXN!ZÔ¿£I5·›_m—Ákˆìˆ±—|šÓC„8Ìx^]·=´–(LHž I3(ed7iwã—â ‹ª%ú£%wÚS?{drS[nA½G›;õ>Òi´ý'mLG:dŒhfL{¤ÞzÚGÛH,UAw™Ö PÖê=µàŒ dn¶h˜¥‚Jï ¡ßÜè{ruIîÏžçS?èôQÚØŒjT3§Ïñ¤ ŽYΡ¯jã"»t¡EM>í'ÎÄ—·pýèþÉR ?©0 o‹Oï|Ï‚®š!\Õsø” ¶ìOߨùu±°±Åê[¦ÛÍ’¾ú%_'Eχ—»¢±>‰jI4ZŒÜºµÜñáÉÎScî1*o,³ÌX“¼DZw)ºDf²”uöYŠ‹ë¨R, ¤H«ãô¹b²euJÊLPSœôDÑ@¥ è«!k2ÓÊ” bEàÝÚSÜj‘ ø;•|Þ Òéo£N)L«&´­4¹~û@óŠæåöôÀ»cg0ç2F³C7÷—~gbQ^«PW´›ª†üÎù¹×1&DËfýÛœñ,Æc‘­C!¨ÑbÚ#¹»âàe–ñaÁÖŸºD2¸’â_ÚºjJÎ}7ÚVAWñ¹QÐüdÚÉœÇïžî°Ú÷&LƒýïÍ]§‰@ÑOçT+0¬é5LÞO/ nK¬«üá.·iQißþžŠCè;W#’Ì`š¹•£¹) -Ö«LA‘G´D©(aÿ à;ÔAG´Õ JU;_^\‡uç.-©¤î,+»¼Z‘=•¿RæŸÐò…FIجóÔ~ÅÇ›º1“|÷dÈ…¾^¢§ =Ô**sç «n-Ø[”Ú¶Q¶ñ¦D•œ1ÃØu®KÁ¦¿µÜ†y€´Pä†c(âÏnh0(iX²w¬N¸×õ¡ÍI˜û„ùÒ¥Èæbd¶ùq0«s°ö؆¿-ÆN™¦}ümšŒ­ü‡+ÈŽšœ=zàë…qãWÈÅ+¯|jeÅ5ÎtÿwˆŠoµé¼’{„Ùdã å”=\bHv8†Nt{„¿_å<˜m«3²”K,Í"ëT)(ãú`ÙP¸&«Âo˜«·õ£C·’=ø V–ŽŽ‚ä±à Ë1>F,.6¬z&·!^ ý‚÷ž·9š/–_Ý‹ROnOs!ºð± - ÍœçIËýMãèY=±Dˆ*Ø2‡Ð Š¬¿Á Í­i¤¤Wúó0Mp ×FP®°4Ùð“÷·¶z›$6çÐ4q¤=ú8:`GúF. fQ% pt®‹K·Ð§Už.r!–5—ø3däBÿVìÉ}ã­¾˜öÔ²6\Dø×<7Î\Ó!:7þ¡||]a.¨¸ÌIK+¡£A­E¶ir'Ê}ÿÞ,ž¢ 1"­òJmk8>o1ŸJIï‡@æ=@€aÇÁÇA\a)ó©9ô‘S­ºŽèR@–~’i0W?€yÓ~ C æã}¼ŒþFþ‚8±zuŽ‘v4øËC¹  ŸíšÏ„™ýüØ×],Žö×äê¾KÌl‹G¯Z,·ÕOðȇªß‡/*&eÖŠwLÓÊË9»¼sŸ&aLw¾3Œ„»JKú±›zëó‡v@þÙísañнNÛtñÆÇŽxK(g”1‚²uRº“‹®NØԉ티VÐUÝGï² :£t²¢g€ -Xÿ÷Ô­&?=b¬;”½î‚™ ¬«zGn£P6í±ÿû±Ù‘,œPýgµƒ6å Åù„ ˜:vn‹÷Ó‡²2#^Or3jK:vªªòÔ.–ŸÝ\„ì(ÎÇÈ××,ÖM[êIWÐì’±]d”KÞZx~wŠA Æ8Bxþ^®ן×B›é·‘œMGÖⶹ W™­qªµ¦1¨ƒ|ô†"l!‡qk:¸fV‡ž¾î­_ôn8ØÍÆ6÷ÖØ-hV]†}__Y ~ˆÃ¼l˜Z¬2 ¥G]1]ß3‰°½sÌ!¶ §±‡[LÀ¸ô GøÂõ‰¢­pkk8ÛšöÎfÚi¨bÄ.* Þ4êá`b\¼ÀÎošbhÆä*ͼJžê XúeУ]äév -®õg JŒGâÖÜ3ûRÄë,’ Órw¨¾}óã”sᓱx&á=¥Ì\_ Îƈ߾lz'¦vC>_ €1Ä8ïÁ'nX«ÄÿÔ_>E듸è3cióú‚"“š¿X.,\Œ:ÚÎä½s¿ ‹Šs©h‰74’žÅïM$úÚ”t¹A¬Å‰V%è¼Úï¯àFð¥ìÌšjIp0!{»¢”§îYý2™‡5¥C)›¬ÜgªïvPc,ØÖ1#H¼l€àT3%H°øófØúï{l;¸¼ûüÓ ¿@vt MrO;¨|¡–Ï즪ègY§Óùî îÆô[q£¿èÄ" …W²Èj7ð!¸ÇŸ nV¼ð’"ꘕ¤i$| ðæjlF„’U} ÆÓhØ}w+Œž7S9|ç.ò 7¯î Ö„pÒÉå¸r¸ôŽq‚Áéç6&hdún ³ì_hÝw¸,<¸ªè}&—V†béN¿‚ú*Ò$‹ïʧËÂ[‰‰;¿3Æl–™¾§Þ¸Ôý4lŒ m¬6,MÐh2žшzR˜’ÄÁ‘<@‘šNR]Ö'$jq(ôÊâB ³ *üŒÂ°À‡G€gM%§”‚ƒŽw?Å{&B‰ä¤&¥¼”ò5õf”9“¿îu}/ “ЗŸ°NÒS½9OdfÑϤeëcµ'*û}Ö97i¶{¿õ‚î¾üïqž‰¿üõãr†¸¢¬`E)³Ž@Ìp¼ø*1ï–væ°#H#Xa“g—šŸYÝžê.ù!&„Mª'Leˆd‚öÔ†„ÛIeeMµõÝáV, :ÂÖu3eÿ­¨¾˜Cê­ -ÃÚ¶lóE7÷³3™N/,*+¿PC.m.>ÊÖSyüŠô¥–ƒ®v«~@ P2ÝÒf­NMTP-OÏoIBeqì†bHpæÔt‡“ŽÄqj µ¥u!Œ»MB“†#z«Vk™…ó³;¨b„èC5ãAÆyÝYïØ ü£D@ìpøÃò¾×{àOÅvcwQŠrøŽ €e·52åeú/ ZLé¹ÉË`~>\‚hX"'N¡Ã$wõ¶!•õ[5ièÑsh7â”›Ž›ã¥ä»l—Ý~ú,;>Â|¡bŒ»-挟 B—ík.D¿ÛµËïÅÓ€”ÖWQ”‘]H‰Õ÷gÆPіتïS+ØT ‹§y3ÕúÑ›:u–ù§™Ã ×&_¡TT}4ÞÝÛ˜­¤¢ÓM2²%Òì½#øE=«Z˜£ë´-„R…œkalDÏ3¡¯òEr¦[­A¹B®rÿŠ=¯ÉÔÙ†ÎÝœ³t›bõ%¥ÄF|ÔÎÍúŠÀÉdÙ%óḖ¡y­ÛÒJv’Jô]÷®T 3«Âè*‹pþab¥Ù•+¦_g:7 yåÛSk×ј*"‚yé:œíð¨_v¡2ál=Û½Uªºi~î§p35O2dÚ°Ávɧˎ´ÈÁYLé)RIœð£ûÌ3Ëù·³û«cáœ”Ý ¹ñ…ufOŽæï/_ªŠÝFu‰Ò"æÜ`š«b“]ˆaÒ#b‡Ôlhî¦6׬‡Š¹¿[·â\)ø¢î‘ÞEµ4x’¡.Û¸î.©7ã(^0× ~‘²‡íÌ]m¶â|Ž‚SlÛ–ëƒcµqWÌ,­Ëk‘%§ÃÜl -;½N¿êw<Ê©6Ùûƒ–9Gãà9èI—t§‚gÐBï_¿U­")Â~¥bEÀ’dÜ·äÓ´b†m…åw›q¢Âÿî2æçÒ¡­äE™¥Ô¯~T>5é%@Ö¡„Ú)”…‚p|£€Á~@YŽU.ôÚùù!FwoÖédÄÃßH^Ãë-ûS3íë‹°•d7žm¤N»ŠÄ¢z,¹AgR}v(YŠûçü.'“ܸ(_åä ’±",dVñdžqמSÍ(ÈZaÖ€Ž‹¼ßeì™="\’¡JêУ‘k #¼ÛFßµž0›žé‰dvWl -¸»v ½Ê…éÔÔqKoœâ\¶Ý€×Ÿ0 hïóÚR -¨T5=š€áÅ -•½*V^¾º1êrðŒ* -®é/Š)T,¯}«2lÍ,ʽÆÎ[ÙŸMÕ° Ú~(¤ÞQò«Žã¶ÚœuÁ3° QÑ•×46™›œö¬}Ù6tF-„zôôÏ -x0Æà K¾'¯g~y÷ý|Ž°ž¡CCëLFRçÔûCx“U2x’ì¤Ú€òzô8i½‚“ÀÀºP &&åËk剺âi-`JÜ&â,¿Ý¦¯˜Á¦¯z‚+Ý°G…˜Ö¬l†0ÏüÜÖ9oHƒT>vüŠ"nC1Ç=ˆ§XØ„?ýËzñŽ7½Ò!·51 ضMcÿekxnºÒº1Èv&ÿ%V¯Œ Q¶Ù¾¡cÑ4~€Úgo¡ =;?§‹c6vÖÂ5NCÞ0è+wµ ý¶NùLCª•û‰­r,Ïbj¿ÞÀ×Otm‹yã«÷Q±âm·/SVæK |“D|VïáEV ¯-¢A–×pE¸6¥]“ ¼á£Ê h3–©pD’&ä£Ä É +k«ût‹2üWŽÜª|nÈ<~'>m8MUš™Ö²Z†>?nÆšfcBeµvG5?ÛbêÀ:' ñ” "enërv×Mq(‘¦aíÅýv&…æäüá —<šµWˆ¼üe®vz{óü·ÄÜÓ òŽ¦G§IDÃ"b_Ö Í%ËŒ‚²¢êx‡Ê^‘$Û„ù…üÆy uÁéQ_p$@ÖU/Èãˆ(w¡id-êl¡å¾kT^{T“¼®‡Z{úUÙ¼|„ÖDEPD#qúC2Ð:ûU–ƒ·™9õ¤Q@ÿº±R`¹õ[Fצ+5Ô9â(T‚$§ï -K§4xÈÔP¶—ÛÛ‰Õ[û‹ÕÇo›_¶¤uÃwü`@Àr4ýÃ¥Šùâu.Çc^ʈ~¢{ªŽËûb²OÁw}ñx×—`c™ãø?$?q;a—C¸GKÁCÐJ&Ÿò"t¸§'¥=€gh¥Þ¹ê ýs§H½Q”þ¯ÙN0ViT®I‚ÀRÜ#Š,šõ@¯»Ï„S; —nÑ´„(ÁPþ±Óí'ó±÷t—¢ç©¤ç‹ûø?0õK*`ÁÎöÄË’&8¡ßçöìd„ÌV  }¼·Õ0£¢²Ü}çŽ 3ѬÅ@‘Òµ13LëÃAÏNÓó.WN8™œ `c¥ý -üm££O<+„ºlMË´p~Mý™[ñ©ø·hÊW·N–&9_ 9øÂåÖ ÒgÙ0ª¸Lt»ÈéX+sÿõ„&ûI*ofʸèÊ /ŒÀÐÀƒÔ[ü"¤}.¸ûæ¥c‘çäß>3D|åOVη}ðî -(ª4rQ¹!Yzˆ‘Yù_‡u¼‡Ó´Q½Þˆ®¸ËÛÌ« -|ø2C¸Yƒ~Y¤¬BþLŽË¬ðLÕûvè÷Í ³˜U@âçÖ¾”5Ù¹~ÜCåýŽœ—® ‘ë†<…¡ÚÉ¡È„¿ ;÷Un¹ù¼‡ ã à™9 ZTêS½D,f¥‘j@xqÒ–iEÐ+ž²J>`ýáìÃÕ´Eñϼœ#ÄñN%€õÐ7°Â9È£¥õqÛ&gÀ¿žZ±è»ØH¶`ßœo+¤fÓxýБ±;KÜ­#õÙËþjí€léŒ.ÊŸj>Ê/4;D±WWÙ}]×èòª„•7]Ô7¾º¢»oÑì2‚â „Tú˶úL‹7ÿ˜C¸¬õ½Êð\¨Âà2@Mdº°ÝµìdS?Ö)pÔe–FãûUöG,·EúÙúlHý“3÷œ†ú xšë -l^¹C8I‘èe«3ÅA¤Ã¯ðÿØòk¾Z¬nk¢ªh±¡FÃ]ðÙ›·²îtxrJ¼‰Ù¿bo -d©‘¯l};¥ZòM«yŽÏ‚ÐÛe´Æ;Î÷kßíªêÂ×¢èCsú?êÂr؇VÚýV.K“.ÅÍ"ûUg§ ™áön~ vµ2Äv gè"àÃ\ôAm»)Zÿh”RøÉR¼.|y÷¹'"ˆ*&–ç>™#xr§cm¦Æö0žœn³‘=ǤslF&~k2E«jlþ¬ Ƈf„ÃLbJ&ÆRXc6¦KnÄÎäÖ¹˜O"êûðΕ¦#{äÚª|^3ŨÊ;è44Âr1f5)·g¼_ ì(1%Õ -rÒŽ½wÂø’>;Slêô‰‘5s¼uÖ²Å#&ëA¬!­ø5çÈÔúÉÂbªªF%.ïîÐ{ãRU©ÉàëNyÐÒ6½/ÚÓNEg“É·Û¯êÏò¼hžNº–Ž¡]Șùj©<}crÑ¥d­!]ìÜÎò>þ ÞÄ ÷{€m6"ûªùø@P¡S†¸s}'V%ó.£zùˆí]¡I^(ÛùÌ6…–¯ƒÑ|4âsæþ>êYÈ-Ï:´¢Ù2åÁÅs(×±@¢ =}Åæ—U·n6 ÈBC¯>Ç!Âû@u=å<²—1i=íÉú=ƒ-¨òZ—ÅM ­Â4÷–@tõJæv‘q½ãû´yç¾vr«Ï„¾VnEø„}j*7Si‹{=‹Áï£!æXàý1±J ='»Ê`W¸îÌÒìì;ïD}Âv-wŒ$ØM0½(ðö¨ÍéM$ÀzCç§ 3ß3XôåB£¼äõÆãêø%Âþˆ¨ÜA£›pP†©¢ª4 µ+Ø<¢ÅJõ"S^샽9â@ -°œâ‘1é#V~Ö¤›½hBñ åùjtw“bsYŸ´5 ¬˜ºÿ“,W²ýÖ»X,+'z7ÂàOe~a.!dÊ«+¼˜å¡ñÊVóÎçõîú…*>3 þ»m'¯¼ŽpFTYDº9HÁ†“lPËÁsà–Žý„Ä&ä’ÍåìƒÔ„¶“MÊBW{a -œây[ƒËu¦YÚr!ƒô$l³Ø a£.†þÌGƒaW]èPj©"!w¦k?…Bm$¯œ:#ϯ˜R¡~+Oø0¹`5ÌP(ÅÍé=vÛ „ú"þÀ‘—Ñî1+…¸Ý¸&ߘ óÚ*-‰Š ”8ÕÐYNÒcŸ˜¾üJìsMQj[F¸‹kzéú¸ä(ŽÀK¹öëÎá½ gnä@@m35N-Í˨d²äí«hV]¨Áà^ƒì÷¾­Þ uŸ÷ÚÖ¦k‰-¾·UÉ[~¡‰è%?Ôé·SrJvı}Ñ™¾Ä=3¯rêÅÀØ›uYoaQ•L}F¡©›§ü¡à:Ežir¢,sÊÜ[¸©¿ÄG€ÇàðÿÀï>Â6SGÄT¤®I;@|&ÞHJstÊk=Lig¤5è‰,þm!7ÿîág=ò"Œ -<uHîPe£C³PÍ2EíäÁ|ËM ó«QX³g9(bçŠvà‹÷µ/’TÂèó¹ÂûàEÔ’÷¼¡¿J£ºV]CG ;f¥/ÁàL­÷mˆª©’’ùê#°ð¯¸1¹C‚U=è3TnÌó´sS_vçahîÖ5ImŒ=_²ž‘•9–ãÆ›Öo!|>i÷.T+=a9?wô²ÅùÄ˺éN¡¼‡Q²¡\Ýq.¿³lߣ¯ÚÌMú‘á£óäPêç@lʼnT -¨JUŠÆ•ý¿Ñu3·àp G„‡ùbÃéÏÝDŒ%çwì´¯ïª9áÌ ó5SsÕþ†ˆKë†Üœ¼e}Vô™¡)‹$?·,V§¨$Uã½cNùÕTD ½³#éˆF»œ±´Å(EB‰w%È {|(¬3-I™¢m8W‘r…XÍe«àÞVLL¥Q.*Gõt¹IÚ¯±™^_Ø“’ÚÖÈûR˜Sö «îÒžÿk./·9Ï•ÅyÊo •ÓwÉ×°ïJwYâ‘ϱî¸6eÉÑœEɈeósS}¯E±X8‚ÕË#¤y 㼟KuEüì£!o´öUöä”óÏéŽÃZX©¨,M|eÍóÉÝ)ƒ^»D¥?O­Ü]De×a$p*£<Ôu¸-‡•²·HÈÁÉ'. JØ QíH2³&šÞ–é{IênÊf›êòËŽêõ0]\³Ç¸,Y|egσÜÍ–Ø,’ä¥à¦¥\ÂO°ÌA%hP ŽmÀÙ3Y'Ä]ÄhÌýð±ÕÞì²›ODPxþõnº”å“]ç7CåÎm gªô÷ËÜÆu“óm‚ 5 :ª4kíusD󰈪KÀs¢'·»^Rå”XÄ ) >M“£<Áp©E^ˆž+vxE$¶ÆöÕ¸œ eMÁ$ ÷Š¡|¨•ùìü–îøÈp¹[䢧ªT«-ĺ ô{~Êfª~ý WÑ8æôQT“yi¬W%>ùàw—3+¶ë‡IÕæŒ}'Î '>š! ^ËÉ´¯ƒT%¼àn=0Z€ÞOi°nŠŒƒÔ'ó'~ -\´)(ä t‹hß÷çuÌîÈÕyêáTÅD_.àÞM`¦_}\_i¥ê#k?×ziÓÍà‰Á¼­zñ)90¥7€•ØIgx¶}/b…42Ãö,,Þ …F º¿.8û@ì;{ç)ÛÌtå0q€TmiÈçqW ]œäAr¸»MDfÿ ùgØ)ñÌ:…KKyÄš×ì´š¢~Ayk¡ŒoN0GŨÝ×KÊ×È¥{_s$~)R1:¤ˆ3Д«mFÍ—"okññÜ9Ì‚ÛGGÚ¦xUJú$KÑó«¨iG_ƒaÌÄBÏq½PN.ÍÅ$€_LÂù t”N#´wýžŸ›22Ö¨\2×S‚eëãž D-çŸö²>æ'hm^–*¸É楌–â•pTˆe˜$O‡È¼h¡¥Øïn÷­/Áélh÷#Ú§Ù'‹_j>I3õ Œon—2­…•uÛZãàIöË?!φGb…!AL:e¦_K]ø:†ŠèjçË>šá¥áœÉ0m*Ž%ó@¶‘pÑ‹ÈȯGÆÓósÀ'ʉ“¼ÄÞé½îÂséÞ]–`&ÁfLÏZÒ–ÂHiMj?DÆÜmúýXáŽé¡›Ð†ú‰ –òA˜¥½ˆV½£úÅÓ9mYcYR&•»u0º? ï¶gŒ!¬ûRÒ-Ü´¢ç ÔK†›Ìm4°n¡MÒùââ0àí‰?\âùU¾`ßèÊ÷»#8^Ú¾ö¢]Bkd>•Iל6‹}¤(P¨˜ Í{<Í=:EÃÒuæ@ª€^o­ÔÑngrj©æ¯c†ÁØU®-½ç©¾Û½é0ÑB—ÏÖ“Búu;%™€€òx¨K -(Ñ-ì@¹ÀËq²<Þl™xüú0·¨gOyP} Å¥\’`ÀxªÃÆ°6‹9)ü<»^íéîä>ƒ@1è¥ôk5 ê¥5a*ìH¹4}YÕ #|ÿ§¦}ý68w…Ëj*6Ã㸟QmŽECÁ¬œ“§ÄƒOoül“³æoC’rR>s”Ù°ký“Xâ²Tþ--i»ê‘7`ù`/N…›'¶1 h <þS°=xÇ4î×ÚT¡ëÛÇÍs=@· 1~_¶ý)î;ÎnoŸ*CHÖÏÄÒú `^¨VY©êKŒ·€’ÃN±ÍÉÿ£†-$Û:5š›B§>™ÌwÍ?|4ã­ybÅù]r¶?*Ã~›ÃYþéÑÔµŠ\—ÕÞ$£³ÿdEŒmÒ+rrµÿÝ%Ó-7Öœ¬œC°3³ÞϽ¤?6*w‡˜¶´(¨2 ½79M\']ŒÅy¬!oýÐü@­>!‰«ª`Ôãñsÿ73Öí9Ûòl’bk0ªLW3NžU¶¦õ‰»äN ×ãħ;©ÐdÛY%ù“ˆ\à -qÒ¸#q¹àÞMn¢¾ƒ†ÇU­ÛòA ö5 îQ¤±£-•²x^€’ÙtÉ¥óçw¸_Ü ý‡ýZ;Ô4ò#qó)ùtƒ/UåÐnp©á„Ͷ5ž‚B²W  ÎQÝNk›‹v<§sïU'¦J*"Ñx«xóoŽú ¡…ÁÇ••×ÕqƧÇãç‘œ^¬³“RöéEhæå)ôd6ºØ¦Nr ?â¿®¼Ä½`„ˆÇÐS#£‹c†MéáßÞÀ>RÝNf¹h}ù)æ_Èt€½-n™ùò‘»]Àbà8¸GRª*XÉ($ÛkrJ0•ªa{yp!—&"8ݪ÷[¶‘¶ß7Ã=Èg<–u´”Ù¶9íA8sŸe[Ô¡yW•ƒ]ǽA¨CÁFT®[Ñ…‹n$ÏEž'h¼§ÝîÌ-±ß¡ z?-ø±fòoù¾ÜrûªÍf?.Q‰‚Z:ÄDJkLÐ…îš™§^ŒŽÍà.ˆÅ )!6pÄo pe„¨t2Ò á²÷…›dx5ýz5r%{fç‚ù¾Mú¬8×øù`•Ã¹¾ÛTH¶Ä+£Þ7'QÏ`õ0B2»¯JHòëDv<D±«LV5_·í:©”Úéò>Êis¯êe _ÿò¹@Êr¸Î©ª5¿ç%o•é­úÎnSuÈÔˆ YÓVQõ>>A6Š*Ñ mËîñà¿âz8²ù,Î:åÎP8¨ÂfŽ[£Ù`ìœâqMÇZ6ßÎv1S,Õzùh%¼(/Ú«Ìr^¬=ºÈ…1hàö-‰#€Œ„nóZp{{€™di<¤MCå Õ³”™¹pW”íùCúÿÿO˜ÛM]ìMm‘þ«ˆ–xendstream -endobj -962 0 obj << +/Length 11285 +/Filter /FlateDecode +>> +stream +xÚíteTœí’-î\›à.ÁÝ qwm ‘ÆÝÝ]‚»®Á]ƒ» 'HpÈ%ß7gάsç×Ìùu×íµÞ^ïS»jWÕ³ë-Je5qs{SŒ=Ä……ƒ•] ¶3uuV°‡YTA–®J¦¶`À+ÀBC#é2qÛC¤L\@-9@ +dàäpðóó£Ð$í<À–V.z U-&&æZþ¸L=ÿ¼F:ƒ-!Ú×7­½ƒâòJñ?T.V €ØTRÖ‘U| ¯¨x‚€œLlÊ®¯­˜€`3ÄÄ°°wØþ}˜ÙCÌÁZsf}åw˜œ@fà×0‡ÈáÄ p9Ù_ß`g€¥“ Äåõ\ì`ˆ™­«ùŸ^íöäàdÿêa÷Š½’)Û;»8›9\¯Y•¥dþ®ÓÅÊÄåOngð+ °·xõ4·7sýÓÒ_Ø+Í+êb†8\@.r™‚æ`g[Ï×ܯdNà¿ÊpuC,ÿY3À diâdn rv~¥yåþs;ÿìð_º7qp°õü+Úþ/¯ÿ¬ìâ ²µ`Eáà|ÍiæòšÛ Aaû3,² {ûßvsW‡`n §¿.ˆþÏÌ0¼abn±õ˜ƒ,PØí]^Sèÿg*³þûDþ7Hüoøß"ïÿNÜÕè¿|ÄÿÛïù_©e\mmMì^àï%xÝ2ö àÏž±5qüÙ5Ž® ÿ+ÌÄlëùßþ«£èïbÿƒï_aY“×K‡X¾ +ÃÂÁÉÊþ·ì,ö™+ƒ]̬&¶¯wö—]br²C@¯Úþu­¯Aììÿ‚©[Íl DàþAÌÿµüW¹þ*ž ¨¨.Tcúï6ì_žÊ¯“à¢îéüG-{óÿ<üá‘°÷x³ðpX8ßñxy¹|¾ÿMÆ¿h8þyV0qq{ôØYÙÙ9¯ÿÿxþy2øiˆ™½ùŸÉQs1˜¿ÛþÀf®NN¯ÿõý¿6ýó_cy€ÌPVíÍC¬Ó³2\j ò†¾JéõõpÀ…:”5¨TÛwû§GlñW?Õ„²6N +¼|ñ\8rxþ.Ǹ7ÒƒoK×:+ õ¥bè-ÄÞ mçeÚ b3,CÏ8ÖŠñ>ŸnÂéò°kîmUQ5,}B ›lç„t~Ë@åV€K}ã€ágö±>¯« +§¶èè˜6ùàö†n`txh°û¾÷; Sn<2 :mt€c.‰¨®F¥w$Ó.LÝE\oR ŽÅ™Ì}jþD`ú|E¾Š†ú%_G®O¶ñhXð¤>öðºE$Õ7gçÕ¸²»Ñì¡œD2ÜsÑE·¦A׉¥G·D讥~¶‰ÀQr“Ëá\ƒd-ßÚÑM +AggŠ…Zh]×D¾3Cï(Ô¤x¾z´žÿìí¥×Cóof7¬TIŸ?×Ö?b=‚½¬Šh×3þ²—0WÚÈý£ã'kâ°WÞ†€ÁéŽ55˜Cå£HyçÁc¼ê¢CÆJ/r~"r£å·tEöë=UÌ vþ6fÊÎ÷Ïû¶áÄÃÝ’RÞtXÙÕ«Ù#×"cyîm'FAe[ÖS´®X»¦ìM°OeOÑ^vô}!í%Œ µñTW +>òf$ØþÄï5'“öù&òøÒ¤œpTËRƒû·7´ŸXNvg'¢d{&Ý©v(3dcoáw†¶!Á•2MY‹‰Jðײַ»­ÃÂtìV¿Í˜ÞÃc½7­Õ<†*4¨<”Û¶- ZdpÇêeû©CüOJbº¹½²èÌg½Ep|)— +@®•Äuôöñ§ewÔ$ÈïàÎÙe‚õxFM¸Ç–Ö[Éìõø >æ±Ð÷ùÌhw“ñ™è,;€½u1’¦ÑÎ,ÎŒS²]¦ ‰>`$HWˆÀùUJ‚Þ¢÷9`,þP,ßž~vЙ¹° –¾µøÔîÙ„ê¡´B•{LÇD)i½Æ[µ‚‹ˆ?~1h*õöÑ€)/l­H)&(Óß"öáÖ^ÒTµ%>/½e­d çE….5iŠµã:P1œü†áÆb îÚ\A +±@ ³¶V¿¨vÁΡ"þNÇ›.+~æ ös»»³¡éÆ羜Rì¾Zø#+8æhP(UF¨ÖÑ· röÒ.`[ +Ž¨Þ•s£º[Ïàó>ù”OeW¸=ßݡʾU¥ñIíe’Ô–Rur‹£Øâ´:êÒïý~‘sg‰g²©ø˜¡TdaQ­BIÛ ÏŽÆ=VvÍR±¥²™äáÏ·´px(ƒHTŠõ9|~¾vÙ#©ù¼ÿT˜×$¤ÄÙp¾øüàVrR{s’ ÕN€“o`ê”0KöPêgËÀæ#J\xóá`vNí7„©¡)•ŒìÒ^RPo® ÑüÊÆž63qì®ìþæÞFwƒÔú –6–¬SOÿA2Wt`¨Õ®ãa|¢ Í´sëä{7ÉÓG¬!Å°e“|…Ž˜ëÙŒ¹6¾«»Ñ×_ÔBë瞥çÁ©$Âä!8«ÎÏ–8jjÆ·Öª6ÊÖ@oGºíÝ™ÆQÖ#‡‡»~ºT݈˙O VÔý!˜~dܶ÷¶—ö¡¤?6„ ‰ºÕçýÁ³²q‰¡Â-ó„ÒbÖÎ>ßÌ—18“íï,Ÿ#.ãÅÌǤÜx?#`ìS|uýš_x+|§Ýˆ]ÕÆ3µ·<ðxðqkšÖ½æäè3ÞØ]å0§]vpòzya…ú!÷.¢v6p¾\Ÿ¦oˆRMlÉdm×8ÜæÖ!‹Ä<$ŒÖa>ëÂ' išû esþ.÷æ@¦ü ‚õ„cÙ md*¢Iäýþè"ÏÖw‚²Îø2Õ¬\žz?Hæ¹Ï½Eôñf¡ég#Z´{ÂæÌÇBøËŠ­óbG9¸¦eãó¸Sþ£‘D:Ñ=Õ‡]„DþFÜõAß=Mø´6l­Ú\þVRS°Qνwì€f‘߉Ÿb²æ ±'¦T²†µ9fU?ñlxH,„h5Œí±;§kVe§b±"/X9|óß( UÉir­BîÑ8óÛ£MŠ°9Uß_ô!µŒÞLîaŠ™é•Rž "ŽQdiÓšErw+*ûžbvY¹¯Ôßma†YßXE¢ð±‚RL¡!OÓ,ð5ëëßwÙ·ñøöü'âkÕmé‘jëåò·Ñù9C,žÚ8LT0O3N&rÝÝŒ6c‡~Ñ‹Gè£.eW­ß×ö@ñŒ<^/Û{â'†Wײ(ÅËÐJzCáÏTZˆ¤ÚÊ»ã&0Þtß.1y\ÏÊ£ä?s–¯½v!tc´"ªCè•I*Å;—Ãcpˆ… +J;³6Æ ×s›fþÂè¸ÅcåÅSÁì6¾°4OsüØ]–*UWx[:?QÖ4OBòÐö)z£ÄäÍú…Η¡ £7°Fª½ âD­Ó™!­˜G¥ iÌ!é= ™ÉõùAM|‚&'°K–f€ø3\Ëœ ‘-…‚J6ÎíäÍø1Z Õ…´‰Ó‡Sùs™.—w2àaI=ùQ«D]•ë³f‰A½Ìp¦NK‚’ïWí3ãÛw›Ï˜n‹ïðf™J_>/~”Pª¥,fÑ …ˆ“X&áÛÔJp«׸xwhXÔì¨o“öæÀoÈtE¨ PŒ1›±PðÚ¨-­¨7¿Û߈gÀÆ@Ù¸lÄ" í½ b4"rJ_c4ScYÙTA¬§uBð¾Ú³kwÁ£³ ×fÓe£ mÞ:–Æõ+Ë\hÚëh5é¤Ò,¬WóéUÅäbq ì c¶¿jÕ_Èóݪ ÷胾KvÙ¢_ëAŽ¾hí²³ Ö€«pÎR#4-hß–½Ü`Éõ‰ Ð¼%×Àf5è)›\X“×$OJCü¼Q %~r•ö­èµ>‚K© 78z¹†b9Ètƃ&1Bî^¾•/£( œ¬P³!áH1íYðk˜ ³À7Ás¸N:R|wöun +×Rô¤ÊPìÑ ;,ŸäÄÖ†$oUDo“ Ì@Cº ºâ†s\øS•bD– +¿´G|½GŠÖÙr<޳à ÔQ”Áñ¹G ÇüÔH]y±”êÀ·I„ÖnQ–œW‹¡ÐoKŒgÈ !OvûšÛîhœ½飴‹:J:\€£ŒÊ&ñP;âÒy¢ ]å.ÂæßzÞ‰ÿ»„#½S”[*É^Q v(iµvo *Üð»æ#výñÆ%ë<žömXÏRú9U5¼âk'ûXç-WÐÕlBº»œæ”Þ²Á&4F~\¡Ou5t”¸VÆE¨o•/X<ý’Au¬©pR—°?Ím±în}ä ÕS9Æ“ióߥFNmP2Ešeyjn› 0 E)ƒ9¬ IXSÎðôá+ä×LÂþ²š¿åËÅüdŸÝž +jÞ¢µ›žÄ˜BXƒýdUh3™û£[BŽ,ÛjWÛ:o×Kã½;—×’™›ÕÎ93eî’J¯.o¸ÂS!Ä°¥]:Y›bévl£û€ƒ\‚Þ£Û»ò…¾y>gdù.2F¢ùæyÜRÝlaŽŒ˜ßòã¢è’:,•0owÀâƘšà˘œ–òÆÈ,P$)¤c| R/“á’±Sˆfa´Žžu +Á[°ö¥Q,Ðâ +¡Ïº¸}Œ‘/lHPéacÒ"Xʘb¨•¤6)¯viuy~þƒÀ¥ +¿+*¯ï±7g3n}¹Fº•¬¦÷ëáú©èYÍ!¯6ØÚðG‰Â¼¥B(éëcÄX虉ŒñGÞ34—«’„kp–ÑϨ¨E¢Ÿ›œNÛÜt’í‹dhÙºð¾Jc8:½ßbë‚P§gª&¶6Î~KÎ,0?£nk¸·‡×Î#wgLÒ^°N•TFZ•w ¤ØG…ÍÎå×Ï*iòN»ƒºé¡².ºî‡ÄÙHõƒ«‘§swíC‚ˆZC@lŠêN­‰%³OCŒzjÂZÉ“RV™/²œ| ,)Çu‚zWÈùT‚‹Mß>¶o¸Ð0Âœ!ÁÄKqù¬¢±¶É@úM d»x¼Ù¼´¦-?Û˜Þ”Ñ Ûö…ƒZ½)0ô¶·)g ×Û¶ø¨Â{ˆï¨[/¶ï +iÉ¿ÝvÇá_]pBŒ>Åû¢øJØŠ8ç *îéž©<3<µ‰ÖFêýXéÍt„³L¥vIãÂQfЮxÞ~]'ß;wˆ¥ÆG +… 7šl=š-‰¿£¿»?ûL-3[Ø-0/ôž¹GJaÿMüTgœ,Y¼#šÑ]vçöÇà©ŠA´þÏ·}#6ê¦ Ô;oÝ°áF4)s‚Û×'è¼98h;ßÆàɉ$Q0¬-µ^@¿­µ¹$X1Âè‹VtÌëHWþaW4oQy®P +‹%¯¸¶±ÖËùHÊ!æ/6?¡É†RǦcÚFLtÂ[šùÍ©Å×ÛÑR{±Pm#D}Z÷Ä + ØO¹!˜d$FÙãF¸kX8í}Júí 5‰DÌ_ŠôhétÓèDSÉ£•‹ÌÎÐEŽÈÈ…ZÐöHÕB÷dŒ%ºšã)m6E-Ïó +ì§ó°þ2O^†þ™û±¯Ì#EWüÛSì7GìB6A¨Ÿ‡8{ÒVägz±ŒŸî¶åpð\f— +›Íº3]žØYÑ`Ť¿ÔHÆ`²%Vñ+LÜ4) \`ÃWRάݟ¾¿œ0/ü™“uˆ<Ò¦°êÿ•9º76=lYÇáÎÖâÁK¶‚íâçëIAæ³Íù4ìê/ï;Ã?îL‘thKuDZ»\Ý'_8¥ô£žô É VeêÒQ2À\Ó1¼¸,bãKÃó‰«(ëèž7}«„¤Ð')ö¼¯¥6Ù䶓µºS˜ ö-TEw`›‰Z¬ÐÑKŽ7ôb†œ§hÕ¿_f~ÆqmU`˜ªÉ„Ö;>u˪­ Œ£½J¦|Ã'w€ %µhyªÐ‡r°‚ø!¿êS÷¾Ñò¦2²œî ÌP˜3GÃæ\|fü­6oV‘ ÇÊ›Mâ>Á UŠ¥ÍoÇðÔ >©•Oq0ÛÌý¦èB‡Ù­ÛÄ*4=X.¿§xN»O¶¿•JReŠñ2È Ø5>º¾]€_®…¶Æí?÷?ÓL»_Õb‚Ñs '籃¬‰\Ü~í Ï¡‹‹ç¸õ¦g ßj[™ª²ß$¥Y¯gö#0k™Ò¤JÜÓ©†=Åù‘R qYHMÈÅYó+M‡u( 9˜]Ûö³‰ÄÝïߺ0Áµf¾ÅXÅH‘Ïi R~ ›ŠAT +gQ…’v}ÂöS)®¨RFAÖºûV„@ +Ë{{œ]!!¢òsV­—öj¦Dø(S ˜-¸‰ ò •F/ID\EÅ°È™òí-fWlŠ +u9b5‘Âý /f|ê†òyKê‰ØTÅVËeÍiŽ'Ê>íãq;ÊBü¬39 µ‡Ot6¦´ì‘´K¯­ëiÎׯ¿aÂê¹~÷²¯Ñ…g^V¢í Û>´­íòÆ(§ß~¬XF=d›oœÂÈ~6¹E©éÉgo8…ü”¾·‡~|ûÆ+£`z‰JµþÞ Æe8€x]pWV¡áyÙu½ƒ :ßèÙíÐ$º PÓUÊ!–ÑÕ«ÙÕß„)­ržßÙè#Mðl +FU,¥oÕ™Þ§Î:u·PX~%ò±t- ÂÂê¾WU¾6?OßíœZ5Ê苌Së1Ö^¿Ä}kšjk×v+æºc±m(ÉaŒíIň¿KcÆ`, Ñí?“<¡›úœÂc.æúã'­Õ½W#(ñCFç Ú@€1HS±§«ZzÃ+V¨X#:îÙÆÑו%¢„È)ì‘=àTëeŒ¹š3ˆÅöCÑÒS-GuÔ+ð³dwËX‘‹«é +<Êr'Ùm¾Á±·t$dp% +úRâêL®´¼Ä§]w¯d9ëtV㦗¯ì= î¹Ýrzæ´†1¡Ë"ÓÏ@ Õgº‡Zô¹5¶îÅ'Ô£m¼/åè£!²«W¾Ü UrIälö-V›dhÉ÷1²O½™ r6(óc9ì ½losÇ„QM ¾m3Yý)b-uéØqvÉ,˜ìó[iÔ›Ù§v’z_1vF÷¡Ã¶_?Äù®ü­Ž`Ób¨›õ+ŠõQrÏñâÑÈp"YÁuíÅDõPŽÑ‰‹ê ï+Êb›¢<“ ——€ $>ªÕ_·ö²#zý«hp«hŸ‡¤’¤n^Ä2ªCôûvke¿wov"©é{¿Ó2·2YMhô¹)MÚô ©KÀ,ú¡Æ°•œU̸ó#–}Z{âïԬܱ kwÊy­‘UE*å ¶z–êÐeœ"Ý4øXéà KWáÐA*0õ¥û¸$×VVÁ›f*¸ ézòDN¯Š;•L]²@‘Öª>A[J×q*x]vA€„ˆÅé÷ž-Îm}²š˜¹@Mƒ*¦—äB²ž˜êà˜ÓtÜÂD§ßQøÛ\nö'ÂýÏÔyN8eDnšàìKáOuö •‹”U£HÐû³×=Ñ,/†¡ ¥¸àðíKºÞi¯+éø¡§3à» yô¢w|!¿Š#Û—]Ba[§d. tÍwîÍÈ*)RRP¹jƒðˆ_ð¢³û…$Ë;õ1G'©]YféfÆW wfáüio×4Ȭ<ž3žP•8cGê×n ¼¿huÍU(>â8=µv2%ø%J:èO`¼~Q±£]Þr-¾µhÙe(ßÈNüñÑ[ûѾØמĒ/¥Pž¢…'û-nï¼ýzÀiÏ€Œ7mÍåÇSO‚#„à{丧ç¢1êÊò—ó1UuÑú†ŒGçŠÚ”´iuZð•±>ƒ4w/»$F•·¤(]íµmFµb"*˜V„ÝšxȧUÊTÜh˜,©È·èúf¤?´-5Q‰ªy [jDÕy3ïÎF\\¹N. &Kåd±^Æ·®AOÄ›ŠÆÆÐëB„ [v?£úÂN`%›…Ç•‚÷Òü,ù7ÈÒñ»ÔKèw,ÅÛ J‰ˆ§7<ë’¤(®Þ‚$äõÙ™qÊî—‚\¡ +ÂÅA²œ¹¹‘‡÷žLOÅ:¢¾vQÐך{Ê»rJ9}gôG¡lÔÔÆ>²f¹}nT/íb2_Ç—®IÉÏ#3«±â¹Ðî«Ûà\C‹9%åäú$­1¨·¥XØLnJô<¥t6>dšèÈév2Ÿ_qD;/˜¯ppä@ïdÊßoHñQòÐQ-Ä[ôe¡6…«ÅÔâbÏ£Õg~xÛhm´ÛÎ& ŸÞG¾]å„-fýbÛöÍ@©m Ä•"óÈó<3ƒuUïËrü@CŠ‰nËHwÕÞ0 ªËîìÿ”àÁ㦛…òi\¼Sòš Ž€¶ÞAžp Ø<'ÌÀ3°$S çF÷bÔÉ𗶢d–BxÁR:PLr}Ks¸O`ò¿Ø)ð +Ö†(–Ãk ³m€|ï…3™+^~#”Õ ;~ÓàgYnÅSŽKÚÿÝîÄÆüÆåý˜JÃÇ=G®uGB~Ú~I>‹±Ô•ð>ê">H‡.Ã_·ß»8H'ùƒ½ô³GJ<ŒqÔsLó(Ÿwg­Õ”,n¨î9ja’öÔ…ÄÓçoG±Ó.?¯-5Qw“·œi>7ë|äƾ)ö.Ú7aЇ—ÜNc|²z'ªƒ28É ñÈ/ÜÄ‹E"¾»* ?}Oâ3uë!ÛÀ|i?ºRaaÀï~›§U˜èNz°³ÅHn÷õgè Éä0&¥sciøªçÔ„ª‚^^iSþŸ¬ Îj[/ó!Û• ª—ˆí…;3i2qz”ðSð¸‹M,Våt—•D‘Dö ö á̓]}œ +!C¢…ØÙe䄃þvpB¾Çˆn·ÆügRÀ/f‘Ü^pZ›!Ƴ›^çϬй?\ •¬x07ž}ÙÍøœ¯¹qQ t•ÍIé*Æ/â,ÿhœ4,ÿù¼‘Žr¯£Å§¦·­¶Å—xvOÅ_ËþåÏMñ㡇JÅi‹*ŽXa{?5ìj¶ Ù;hÜ–ã1Ýz˜TgXÕ¦¥\¼EîøBü#ßàë4~–’ñ›¡M…^1êÇ”¼§öklLÝßQW‹¸†Èyr¯Ù‡%aÍñN vm“Ø_«ÓèÂW7½gº€ q@BÜž]ËcìwÜ®nÆàŒŸ d5A9!š%Å*§¬Ñ^‚ŠöÛ…ÖÇûÞX6ÐìÓô„ª´ÖùPŽÝÒß6üðÓŽ4åˆæ¶ËÙüøúÛ Áâ‡h§†Ž¹tÄš¬Ö9½ÝKœ(›à.Ñã˽ïÎé®Ù1f䥜Bmé5¾nE=10ÙÛ$tÅÙ å1Øy„ ì Ò j™B®#uy«û†'µQ)ü a§ûϽß,8?´ÂålòpÕK{ß"YAâ—?´7àæXfbëÒ»ImWr?Œ~Ù¾•Ib´™R”?ÏÖÖ7¤” ‹=” êÔàA"îÞ_"ª}HVѼ)í3çX•äK9ØP+Iäø+šN]8mr}GøÅ޻߫²EORJ˜Ë§éO——º"¤„5ØT¶z Ë^2ÚƒÛžÅtÚ¬¬Ï[ðõÏ”½–õ™?Q‹ÅYÆ™}sЃf É‚>úôéª"Öèähä,‚Ë“m +iLÚ®5­Ã¬4™ÜZçM™‰£Üܸ•¥çØg¬P‰hTL ìÐ1b]‚›køê›± gÍéŸâ~ùÌûoæ`%,ÒŸ?ó4b +š÷uJI—)Úg¿ñJ¡®ÝšE]#êc̦ Jó€éú–©K¬åûÍ`ú Ÿu #ùG¦MVK îÌWÙF5˜y¾e¥ —/0z!µ‹äfTþ¼+éSÇ1ßÉy‡Kãç7oѽ缉ÙÒ6}žox|T§2¨E…À­â¢Eu•Æ˜Â· ,ŒÏ†G¦çÄ TPë¸7úx„©µ?¦9B#dî‰ÔàÓðEéRϖꜚ âÿ6æ½äTéwèS +Oìòv˜d_B³-aFªö‘ÍÝÅô®<>¡ß·ÑÑ{o°É¡ 0^ÖxÙ²m£Vl¡Ïù,§Å³¬ûqÀèê—÷9J†ýUÖ§Cd侻Ŏå°9.h¯'ZéÚ/V*þëkñ™ £½Õ4!׆£©­IGÃ*³;>Š¦]åß9¬Ë˜ë°¡+›ËÊßÅÅËFR'@`m8Üïý–œB.ç"ž$ØÆÝóû”ÙÍðJá4jœ’ý ®èÙJf[ØÏ' ¥[¢B.,EæåÅ:c”XÏ +µ†æ¹±úô]B¿%£pú““Ò÷c_ mmõ².Œ7«+笠r3 ²ä晴±ÿ/(ÿŸàÿ 3[‰“‹½‰“ ÊÿŸ–lendstream +endobj +1002 0 obj << /Type /Font /Subtype /Type1 -/Encoding 1932 0 R +/Encoding 2007 0 R /FirstChar 34 /LastChar 122 -/Widths 1939 0 R -/BaseFont /HXIEUZ+NimbusMonL-ReguObli -/FontDescriptor 960 0 R +/Widths 2015 0 R +/BaseFont /LNTDLS+NimbusMonL-ReguObli +/FontDescriptor 1000 0 R >> endobj -960 0 obj << +1000 0 obj << /Ascent 625 /CapHeight 557 /Descent -147 -/FontName /HXIEUZ+NimbusMonL-ReguObli +/FontName /LNTDLS+NimbusMonL-ReguObli /ItalicAngle -12 /StemV 43 /XHeight 426 /FontBBox [-61 -237 774 811] /Flags 4 /CharSet (/quotedbl/numbersign/parenleft/parenright/plus/hyphen/period/colon/B/C/D/F/N/O/R/T/bracketleft/bracketright/a/b/c/d/e/f/g/h/i/j/k/l/m/n/o/p/q/r/s/t/u/v/w/x/y/z) -/FontFile 961 0 R +/FontFile 1001 0 R >> endobj -1939 0 obj +2015 0 obj [600 600 0 0 0 0 600 600 0 600 0 600 600 0 0 0 0 0 0 0 0 0 0 0 600 0 0 0 0 0 0 0 600 600 600 0 600 0 0 0 0 0 0 0 600 600 0 0 600 0 600 0 0 0 0 0 0 600 0 600 0 0 0 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 ] endobj -884 0 obj << +924 0 obj << /Length1 1606 /Length2 16437 /Length3 532 @@ -8956,7 +9413,7 @@ stream xÚ¬¶ct§_Ó%Ûv~1:¶mÛ¶í¤ÃŽmÛ¶Ó±mÛìØzûß3ó̺ßù4ó|¸ÖºNU]»j×9ë)(Ó šØ™ŠÙÛ¹Ð2Ò1pä,m\eíídh…ìmL¬0ddÂN¦†.–öv"†.¦\uS€ˆ©1€‰ ÀÈÉÉ C¶wðt²4·pPª*©SýøAó_–BFžÿÓów§³¥¹€ü½ƒ­©Ë_ˆÿëʦ¦ S€™¥)@X^ASRN@).§ 7µ3u2´(¸ÙXd,MíœM©föN›/Æöv&–ÿ”æL÷KÐ`pv05¶ü»ÍÔÃØÔá ÀÁÔÉÖÒÙùï?ÀÒ`îdhçò·.öK;cW“üµ›Ùÿ‹ƒ“ýßÛ¿¾¿` -öÎ.ÎÆN–.€¿YDÄþÍÓÅÂÐåŸÜΖÝ{³¿‘&öÆ®ÿ”ô/ß_˜¿^CK;g€‹©‡Ë?¹ŒL&–Î6†žsÿsp²ü WgK;óÿb@p257t2±1uvþ óûŸîüW€ÿ­zCÏí¶ÿWÔÿâ`éâljcFÃÈô7§±ËßÜæ–v0ôÿ Š¤™=€‘áßvW‡ÿés3uúWƒ(ÿ™ª¿$ Mìíl<&¦f0ôrö.S(ÿïT¦ûïù¿Aâÿÿ[äý÷?5úßñÿëyþOh1W9CÛ¿ðï ð÷†±Èþ¹cþ±†¶–6žÿ‡èÿ T7ý7Ãÿˆ¤‹áß6Ú™ÿ•‚ŽáßFKg1KSKc €™¡ÍßýË®jgbêdcigúW˵@ËÈÀð> Kck»šÎúo—©É2ÿ+Ï¿xÓK*+‹‰+üøÏÛô_Q +öÎ.ÎÆN–.€¿YDÄþÍÓÅÂÐåŸÜΖÝ{³¿‘&öÆ®ÿ”ô/ß_˜¿^CK;g€‹©‡Ë?¹ŒL&–Î6†žsÿsp²ü WgK;óÿb@p257t2±1uvþ óûŸîüW€ÿ­zCÏí¶ÿWÔÿâ`éâljcFÃÈô7§±ËßÜæ–v0ôÿ Š¤™=€‘áßvW‡ÿés3uúWƒ(ÿ™ª¿$ Mìíl<&¦f0ôrö.S(ÿïT¦ûïù¿Aâÿÿ[äý÷?5úßñÿëyþOh1W9CÛ¿ðï ð÷†±Èþ¹cþ±†¶–6žÿ‡èÿ T7ý7Ãÿˆ¤‹áß6Ú™ÿ•‚ŽáßFKg1KSKc €™¡ÍßýË®jgbêdcigúW˵@ËÈÀð> Kck»šÎúo—©É2ÿ+Ï¿xÓ+‰*)hªýøÏÛô_Q UwQñtøKìÔ!koò¿ÿ` Ù{¼iY˜´Lì6F;ãÏÿC¶Á0þ×ZÖÐÅÉÒ ý·dÆþ?¾ÿZéþŒ¨±½É?S¢ìbhgòw°þ—á·±«“Ó_=ÿuÖÿü?×ÿqSSSc˜µe{cî_Vi™é.u˜¹Ã“"Úý½Œ ÃÁ¥*Eþ5ö=~ia»œ•µÁtMÓ\_ížK矇RÔG£½6=)¦òñ~’Põ o‘w²ÿ8 ¤×+…O¿Pò¾^”ÙÓbcP;Ú›TTÒ+ù€ÀŸîdv‚º~¦ò'q+ðG#}r@ð5NmˆEïBjB©+<¿ O<}~¢ê¹ï;Äý‘ MÆíOé˯¥ZéN½tœ1>iƒ!pÁ`Þ3,Éñ€Á¶ÆƽU9ìþóæÝ©<¾2숽â0‘륵“W`_â\¯?Î`Bç~@“ùo¢»êÎO4ñÄkW©s}¼uf¤S^¼4 8³åºáhI·ðèì¾¼h`˜“§hžÝÒ=h$!‰‰Æ_@¿¯Ãå>³’ÔÎT)mÐdù>æ‘nkÜH‘<»ûÒ9«Rè`ËPY³Ðë|\–ÎBbˆÌÏ‘ÓçñÊ}¶n»ƒÔÉqè<¿JºÄU݇ž~‰vE? +¨S7r+øv¿-Ž(ÕòMõÌkŒ¸i£jèšþ•Ó@ßöœ$,x×–€¥"ýaì¢Y•ßçGe‡á¶Ë R­e3çÙ8æ¡X¼Ù úZ¯b¬ÿÃÜ®ÎE‡mØ:ÜQDèÃwùI°­®–ïÍ}S€ëÃó€”8ev99Iü ,‰2 uœìRçGj ¾ÙEêOq•£Ê m•$7R‘kéÇ*•Ï¾W®âûÕ7±d1‘žîùX3\[&·þÝdÎCïÁ)Àê“#EH}&¼~t–ßêÆ“5µZ•çÎäÒàMV]ÓYÚñ‰‘06Îóó¬y?‚²9¼oºÝ²Ï—YzÉA€&S5õC`ÝnhÙ°ðõɃ Í’D ×gÚUÑ{Mh£Ž_Z¬ìÊø)£bzlS âz/ˆPR M„–ÕýŒø8öÚ:‰èü¬OÍaö®P¥¦(- D ¬P X‘µôªÅÑQN<ÇŒ °²[ÔÀc#TŽWÔ•Ñ´Êà“Až8㻢ÝϵÜ(à÷ šEh3ŸiqÌVHX.´Nx-ÿQ9ƒ].e£(‰ßU;Ükµ˜œû·h8Vɇ5ª#qa»+[|ƒÁ›úaXRû¦Ÿæ¿rçG.€môú¥»ÁÊ|a™â!^>#áþ»ˆ^驵]M»±¿ž|´l´YA_{j“E¿X|å¨;.ƒ3ªvtbÊIôd(vùÔ>÷,|gP¨Ö:`ÌG*p²“í»Ï³œ.ÞJ;Â9æÉK­ñs·Ìúe”%±¶ Ü-.EÊKÿLØ&h·ý,hïY«M÷s<ùi“©Ò£úþÕ›j2žE)mÏæ;Ÿ¡å×)× ÄíÜùšëŽW`Âý܃4¨÷ca@8÷Dõ€ý]ó:¼A†ƒ?Á¡B&yQ?UN¿µÊIwOTÃ_7ùzdÎGjë[vQ @@ -9025,35 +9482,153 @@ kS ”}âJu¬ÍzݨºÙê–ë-VæS;'# rÛL¨y¼o·Ã¯óó;ö©tù^F'É2óyîh"+ȲJ5JÔÛga1Þ?µØ³ —hÖäJ„1‹þvE9ûÖ–‚X ¢6y`8E„gÕÂÞn"Ý—{QwÕZšpœîQ»MÐ×±û÷¡F"”ªMa[üMr†NÂ=ˆÌ œ°ÿ‡IÓð‰ß '…)LÕÆ·_õ<Îün W¹±’‹;ÓÕð~ë‚ß báN(êÌ l8Ü,G,ÄkY/¾Åg|àŽþÅ‚h7^v -ű ïô¡ÿÁvú±3ÇãøïVÐTöíÈ¡Ìf À-7ÖÊË¢Ô¹òí1ú黳ÄH+ÎÊh½TÙ8MÈbQí‡PáÄ´Á%§kùÍÏÏ‹_…âË+Î@dí×>rÍÕ4¯Þ1HÍÅw]¿lh–ò(ÑÂBšùªŒîÖÊ?SÔúFi O¿±¡æŒ#HnjMa±1§„‡ýù[Õ³0Ýàd.åÓûäè•O%êLþ¿•»íÒkž‘¼r¦„òª7¯fõîËbÞáÙ´­Ùÿ €¿Ñ†Ò¥z¼ÛT¦|–Ùb°ÊîOôÔ3§féUÝ9Žþž0ÁË&C­‚emŒ@õ—Ù¼)bG~´…~´; ä5¿ åìâuUë9·•°ìuØíivñ~P¾ëÖÄ­ïϱ˜Ì,2™2ÿwQÈöSŽ_ß(,)øÿÁ¬ã¾G>s865ÏdšŸT¹B`©`݃À…g×Jq³kMâez몾-³éÓ“õžlÂçè-Þ¤Qý¸ÒSÉl¯—î¹E.¹awÃ6ü+ ]ãÅýdi¯CÛ7þ÷o_Zê6×kƒÀ¿Ú3×…O<ڕľ>.ÇT~IÜÏ$_ûo—>FNy¼êSÒE “?«¦Em| 5Í™Sš¯ýñœ•›{æ￯z­|fá› Ù1'2• ™'o¼iºýĆÿ!é¥ïnI¶N{_µ²èñ›òy¹¥Ißß³Ÿœæ±/+JqçtEþ+Œa¶ŽßߧÕÜ0ÖPùéw%bþâ~=ý‰ëV´0·… ³>ç•ߥ˜žµ²vÛ›ÙǦ<¸eq-ëEj+˹)S¯2œÿJ%¼YjÒJÜc¢yÇ÷¾¸²™Ç}…ZköµÛ5>›÷-\þ-t~fÙÕ˜É6ÿ“µÓO/¿{±©ïšÿ£É?L•W–ÌpØ+ö®Í’ßLÄÄþbF¬-WÝëã¡â«§•\ÐÛ:£ë¹tϦ̣’,«ŽGßLŠyz½3»|Ê›'=íSìÖOH­=k·Æ4íÒÚÛ-Âïþï°’K}x­]›Y¨ÍªÂçÁ댈Àƒ?-*Z²åNÊú'/yw¬úd:a~rszòu¿*×ãÌW .Ÿºc´íó‚Gj¡7ÖX¼07 p0, HÎIM,*ÉÏM,ÊæßÀƒÅendstream +ű ïô¡ÿÁvú±3ÇãøïVÐTöíÈ¡Ìf À-7ÖÊË¢Ô¹òí1ú黳ÄH+ÎÊh½TÙ8MÈbQí‡PáÄ´Á%§kùÍÏÏ‹_…âË+Î@dí×>rÍÕ4¯Þ1HÍÅw]¿lh–ò(ÑÂBšùªŒîÖÊ?SÔúFi O¿±¡æŒ#HnjMa±1§„‡ýù[Õ³0Ýàd.åÓûäè•O%êLþ¿•»íÒkž‘¼r¦„òª7¯fõîËbÞáÙ´­Ùÿ €¿Ñ†Ò¥z¼ÛT¦|–Ùb°ÊîOôÔ3§féUÝ9Žþž0ÁË&C­‚emŒ@õ—Ù¼)bG~´…~´; ä5¿ åìâuUë9·•°ìuØíivñ~P¾ëÖÄ­ïϱ˜Ì,2™2ÿwQÈöSŽ_ß(,)øÿÁ¬ã¾G>s865ÏdšŸT¹B`©`݃À…g×Jq³kMâez몾-³éÓ“õžlÂçè-Þ¤Qý¸ÒSÉl¯—î¹E.¹awÃ6ü+ ]ãÅýdi¯CÛ7þ÷o_Zê6×kƒÀ¿Ú3×…O<ڕľ>.ÇT~IÜÏ$_ûo—>FNy¼êSÒE “?«¦Em| 5Í™Sš¯ýñœ•›{æ￯z­|fá› Ù1'2• ™'o¼iºýĆÿ!é¥ïnI¶N{_µ²èñ›òy¹¥Ißß³Ÿœæ±/+JqçtEþ+Œa¶ŽßߧÕÜ0ÖPùéw%bþâ~=ý‰ëV´0·… ³>ç•ߥ˜žµ²vÛ›ÙǦ<¸eq-ëEj+˹)S¯2œÿJ%¼YjÒJÜc¢yÇ÷¾¸²™Ç}…ZköµÛ5>›÷-\þ-t~fÙÕ˜É6ÿ“µÓO/¿{±©ïšÿ£É?L•W–ÌpØ+ö®Í’ßLÄÄþbF¬-WÝëã¡â«§•\ÐÛ:£ë¹tϦ̣’,«ŽGßLŠyz½3»|Ê›'=íSìÖOH­=k·Æ4íÒÚÛ-Âïþï°’K}x­]›Y¨ÍªÂçÁ댈Àƒ?-*Z²åNÊú'/yw¬úd:a~rszòu¿*×ãÌW .Ÿºc´íó‚Gj¡7ÖX¼07 p0, HÎIM,*ÉÏM,Êæ9tƒáendstream +endobj +925 0 obj << +/Type /Font +/Subtype /Type1 +/Encoding 2007 0 R +/FirstChar 34 +/LastChar 125 +/Widths 2016 0 R +/BaseFont /RERPYV+NimbusMonL-Bold +/FontDescriptor 923 0 R +>> endobj +923 0 obj << +/Ascent 624 +/CapHeight 552 +/Descent -126 +/FontName /RERPYV+NimbusMonL-Bold +/ItalicAngle 0 +/StemV 101 +/XHeight 439 +/FontBBox [-43 -278 681 871] +/Flags 4 +/CharSet (/quotedbl/numbersign/plus/hyphen/period/slash/zero/one/two/three/five/six/seven/eight/semicolon/equal/at/A/B/D/E/F/G/H/K/M/N/O/R/S/T/W/Z/bracketleft/bracketright/a/b/c/d/e/f/g/h/i/k/l/m/n/o/p/q/r/s/t/u/v/w/x/y/z/braceleft/bar/braceright) +/FontFile 924 0 R +>> endobj +2016 0 obj +[600 600 0 0 0 0 0 0 0 600 0 600 600 600 600 600 600 600 0 600 600 600 600 0 0 600 0 600 0 0 600 600 600 0 600 600 600 600 600 0 0 600 0 600 600 600 0 0 600 600 600 0 0 600 0 0 600 600 0 600 0 0 0 600 600 600 600 600 600 600 600 600 0 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 ] +endobj +909 0 obj << +/Length1 1612 +/Length2 18760 +/Length3 532 +/Length 19672 +/Filter /FlateDecode +>> +stream +xÚ¬·ctåßÖ&›£’Û¶mWœT²cÛ¶m§bÛ¶]±*¶­[ÿsºûíqnß/}ß{Œßšxæ3ç3×c“)ªÐ ÛþŠÛÚ8Ñ1Ñ3räÍ­:;ÊÙÚÈÒ)Mlpdd"@C's[QC' 7@h ˜™L\\\pd[;wsS3'¥š² íYþ ütÿŸž¿™Žæ¦6ò¿.@+[;k Ó_ˆÿëD àd˜˜[" +ŠšRòJ y5€Ðè`hPtþien57Ú8©&¶«F¶6Ææÿ´æHÿKÈ`p´™ÿMºíþqÑì€Ö掎¿æŽSC§¿3p²˜ÛY9ÿCà¯ÝÄö_„ìlÿFXÿõýS´utr4r0·sü­ª(*þožNf†NÿÔv4ÿëØšü4¶5rþ§¥ùþÂüõ:šÛ8œ€nNÿÔú ›;ÚYºÿ­ýÌÎÁü_4œÍmLÿ‹-Àhjè`lttü óûŸéüWŸ€ÿ­{C;;+÷eÛþ+êq0wrZ™ÐÃ11ÿ­iäô·¶©¹ Ã?‹"ecb `bü·ÝØÙîú\€ÿå?;Cõ—„¡±­•;ÀhÇ oëô·$€òÿNeúÿ>‘ÿ$þoø¿EÞÿâþ§FÿÛ%þÿ{ŸÿZÜÙÊJÞÐúïüûü}al²€Þ+C‡ÿW¸¡µ¹•ûÿ!á?5€ÿ&ùÿ#ådøwB6¦a¤gü·ÑÜQÜÜ h¬hîdd01´ú;©ÙÕlŒVæ6À¿Šþk˜:&FÆÿð©š™YÚü3z¶»€6ÆÿIþ¯Hÿ¢Î ®.ª*$CóŸoê¿¢ÿjï¤ên÷—ØÿhEÎÖøþÁ¶uxÒý½tÌ,ö¿9™˜¼ÿÕþÃô_g9C's7€öß–™þÕøÿøý×I÷?`ÄlŒlÿÙ'Cã¿ëõ¿ ÿ¸œþªú¯ÿ·áÿyþ×¢n@#¸Õ߶Fö¥©F{1­(zR€—ùøÞ$T}¨›ä4 z%ˆégQžW‹²ÛZìŒê»“JÊzÅïPߧ;X`®ž¨üH\ +üÐIí|ŒRëc1:QA¾Õžž‘'?=R Ž õÜ@öíãÑäÄÂ’ñ¸@ ’GúÙçà h©Ux†SA¥7!àÝ´_}jt{êå‘‘â’FX˾*šæ¯Ù´Ë¾'A¦· ð&Ê9H¶îWþÀ¼žŸŽäJœæšËýZw&sÄâmŸ +쿵$ œÉ„®'~»¦ìw 󬵮¦~íCÊ]™Qê,©wmÚ'c¤ w®Diµs$óÐY–1¾—f‡ÙÄ&>.jüäë賬9“5ÎÕu¨ÍÄV¤?m=Á8ib/4l¼˜’lºÖ’Ÿ$):Srïð¹ŒtéÇ#/sƒydŠü¡ _•vÏÐX¢ÖÙ"» ú”4Ú]Ô†Üf†·”-FêÕˆFG‚„ùs!kt> +j8+¼="HOló‰à|V”LôIŽÅ_y·1A‘T5dSoEy%|Dm3N†Á‡P¥{ú¼ÞÆÙˆ +šÔ0ã#¢DËFwˆ(¤ ÙÓ§~¾f%ž©Y·˜"<Ø™Él¶‹Ç¹ÿúä2Ý©²HˆîKöÿ¢Õê’2|Cu˜Äï4‡ÙbIYY`AýÝ«!ðc* w¡)óÊ~#†!åÌDŠ¹p¼šÖ™(bðÆ%łߪÇ4òsœ.劎^Ëú0ª†'> +dÇ$[ß4˜h3iï*#§†]Y·6_¡$l¥—\5Š´ +ÖƒGÒgÏt7êz \ÄØSÂèÑÝá Kz¬Å~»šF£¦s>y{­)ÕCóaÑýû²Ú7× Ý#ÓF¾o¯Q2v3äòÔן¼xÒ¾#x9s¬(ÃÇÊÒ÷öUX7Žqb‘ŠŒHö;QºÙö³ˆÊëí:²5p,sÍŠ˜VÚÜýXQý3j .jWô…¼¬[Ç2#oîä2’«²6¢£yé0O ÙÓËø8³)Kz¡l„ïzä^骟|‚gOH)àY îó¸¢e¾,Ùê›Ì,ðŒ‚þ²Êsźy&Ê⥄ñϤì*“@bKiyäúk@WÁ»¾/ÿë÷îÆ5 Ï##êáù@¹‡ŽRƒ;ÇË6ÈV|¶å9{<)¼ç QU+ó؉¬@"9ãå·¾9Ì-–†Æ¬»î³ØŽÈ³¼…„e†t Y.ž±áWËÔÀ;žš¹„PfÙWÐBNûŠX÷a|nÓd5ÕR©¡Ûo÷¿]fǧ_$¿å0[^ž‚IpƒVzrEÄsÜó^Á¤ÑÏJó„½Ë®Ïô—qŠž€3«Çþt¿ipôøɼïÆ/ÑøµÑ7d™§©M’°{<1†/ß{€"Ãg'”Dnnë«J0 VkÜ„},j6ä²6”ª ’nå'Ž`gâ[ö +õ Ò””d³3þˆA*ú<ì;»ãçëȈÏÞr‘U¦Ξƒ ¸R64yEIÝ#ب[@“4ÂS»Ð¯«±÷è(pÖg/ä/ÄX»ÐÖ@­Å»b¾äcŠÅIî n¿¿„îçç3Ã"çU=^ó»\XºwV¯”¡ûB:Ï‘ +[—ÒØ$ ´zEø}:µ`s(éHô‚Å+X—³÷¶*5Â^ÁmøÆÊ$¶ïÉéGH +>êò:Û†ç-àñwN‰ +3“7º]Ç }"}xt¿-i7Ÿè¹½‚• +üƉ¾ÏÑüІž@S&_#‰= ]Œ% ešPŠ†¼RŽ”oQÈJt{¸œñàº0ê8&ò½A"zXXª‰„^i$º@õÁh0škm}…“u­@îK/²OÊ\®zOóu#«"ùÈR.¯AÇ„ŠòÙôÐJ©4I°muþ`*?섨0­V2×~„/ŽZ.&òÂ×Ñ_ݼÇa)¼<¯l ‹¤ab˜wK¿ð[p…*¿–ªì˜F°_z¡>ôÿ-p¾þmQÌHtðFЇt½® ·Ð[Cr:Îæ'w|…ôSoñ;ÕdȇkM*a1eˆƒS¢ß%!¹J-¢¤tXäÖ’´–šBÎuÞ/ +p‡÷/ó¢nD(0ÂDã ,q®R5Î@¨)µŠ ö|÷ò¤ºÛ\{=÷5¯ãƒ8zB uyÚ£e4O랊u¼z.©2Êqi¼ûTœ°,³Õ¸¼[¡~o$n{Ìq³¦×·1åŠ|…²Ï!§-4`f‘ך¹ïPÛ¹Ui«í!3ÏpN"LnR‰ôAQ“!ÄùðíSÆŽËî1ÕÔ9PƒoHT7-÷dâz7/ÉÐ÷3¯vU~2‰áW3Ýk"XŸ&¾L;Ï´Ö¾s°˜9¿O'`u?‹¶Ôi„ØCBs®Q‘ô±…ñ"¯Ïæ˜L#ÈÝœÿì UüÒ¹ùeŸáS©Ù_§Ó¢ªîÑ _e(ò~ ¾áÚÈÙ¼ßÕt2ƒÄI]Õ× Éuûͺ›WV>{€º^7¬K·ƒ9@3¤uÜq¿¯ØŒM(ÕAfW$ùÑ>Ž¢róÕõ'Üt*®IkÒæ·&„óÎãÔ£yù„2¦§äº VБÇ/êÀp4¹‡èT›ïwnÚuŠêæÔgW«È$&¥é®&tÏ„ZgqÙÇCȇŒ† ßðéårüc­ŽMÔEÇ×çÔkâÓåLÁG1‹^­?z&É ¢2™"«….^R,• ÀÜ ndAU]l$þôº<¤q Já9 [Rèç+œ„$E˜b…†F΂dù#ÕÒéËYûV·"r†Š}cà’³$#QZ0 ãû‡H„f¡ª÷›v«±*øöç9ꞧÇ)$¥!€4%J)Æ«B¡(kèè^«£ Œ¢K"ôŒÖIQ§.¾É°UDBó€â¼HÛHzõV¢’éç5柑&xã>fé.j/O§Î5$8žÔÎÅ òíÊ°¿_ëqv–'´#zÑÚfs +[Õ%:P+t¦*5Gil@ÐvmY‘ ‚œÁ‰~¦S JÖjn5£ë—ðys¬Ø0ÒÉð¹¼tOC»¯‰æ÷­™ÄiÐDX¯ÐåpÖïÆÎl¶TS†ffe2·©iB>²ˆÜKmV3 ·ï¬I‰Àq>ü€~y ±z‘ô&VQ|!æ 쨯tàZ…)"¡ ?ëzÁ4%vïù2<€ºµ—ÊŠ¶ÍìA 6hä挑ÿ>„ŒÔxZÜ5&R'!Ö§•gÜ…«¢ú½s’+ÔCÐ[ØÄx›)½ºo +Ù¿®;ªôŠD™r]9@èšÌˆ“ÖS|æ[Û, ('|f¤~}Ã!Ónëw¦©®n”Š\8ÖgK½Uz:'=*"Ô›%FWHO´­Ú³ÒèÒõÖDÐ_|ÌÎ\ê\Û +qá‚ú a¾ýGŸºî“•e +™âîÑ~)Ü“U‚™$¹ß“ñA=‡C“ü‘:³œW•Pv Æû§hbÖ¼ð»AàlmoÎUÁùË7…¹í \~3È +ÂÏå±äÑs‰TNŸ +Ã<ˆ•9O¶¥fÈËDˆF§‹ÑÉöY廙l›¸·°6¿33ïáð\1ôb° a÷ Á{ó|³m«é*Ê›}½"é?Yš,µÔ¹‹ e§úPh‹ŽŸXEô¸º\©çÜ[ëgøV3C^à ±çSø¥$š ƒÛáÃ:“É»®’´ ð¾ˆïÅ^ƒÑÁ´‹¶ù´ë¬†)à!jáìKøGR~ŽCkCœùŒBΔí!$ÐdÕˆV`¨­\ ©n¿»Gó§æHðnê Úïvœ&ëÌŠ":—íÞÕ^"Æ;bÊz³N¾0UÅÕ–ûÖ1ÃÁ,Ծ㢫|7ßoV};º:Mý³éØc£ôÂà¤=™MhüCÔgaì‘7¨²Âˆ±b®5_¡·¸/ H:L« >r>Õ²"™y£6o„Aù±RQ ¼“_;N\¾L©µá%7¸àÀ‘¾g$µc [ž Ü80›=~Øü.¥T¿†ñ¥™^šW`/ž$8¢%S>ô”æý XÞ$'ñ.ά¡¥„2Éÿoƒã;At«!Äò‚´žÖ&\Åžã™dn£˜kjÓ¥³< -YRç˜oiæUìÚÆ‘ÌY Kî%?ê5TXrz¶ë[È/¨£=gU0‰Ü„€UShW´1ûºzcw™>ÔXê1§†S\»²3Š‘ÎBaʉ@,ŒëÂ?/ßu3u¤ð;…®MXÛ;Í0¾z“ƒE9–T¨ÕÖ[x,ÐÏsô1Æ÷Ìó–Q£×©VNcÌ…ËrÖs,¨ ³“eeµ‚l€N0j—;î~÷–ê2›ZoºäÆ JR¸¬ Ý.nìÿ¦ÏR(šF½qqIéì{7¸–lƒ%Jåíi6.’±ñNJ„µ­~d¢Jă÷^Oß«Ñ É s!¨kgw%¼¤ó_†©ë +??zÜ…¤Ÿ'PìE¶e6¹-Vƒú£ò>áÂPe†–½Í•Gèf5©{AuÔ¦JÑø^V¡ÌP +:Ù‰4GÌCe*Z­:?ß"íÖŠS$`ë¾*~=QîFf†£¾d5 ?Užaú9v¢÷"“T!KÈ õð;[ùÛCµÛ²Ñä$|É•ÿ#]±·,ÄgåÂc>t- ƒôÏ/c!Ö’&,î—AØ$l‹ˆ4`¿Ì™é„G ‘9h{±I K­àôáî·3ÂF£Ýйô±Peûw + 8ø=ÇC¦ñÙ"ê®ÒL¨ì:0%»¸vÕ´HƒŒ?˜ø¾âù¢õ3™VF _?Òí)Û÷³qoTŒ²>ô£‚ùvî[±~á+Ó ñ¢øøhÂ…ª>çV©Ã{‰iÜÁɾ,ÓPhF°1J4‘÷Ò.’×l"üˆæ ¿D9TäÝ!°hjky~ÒHTòövd@X|A¼ —Õò/²áxxûfÙ z¸|ÁV§Om×¾SD*gi[‹4i p¯—ðƒ½ÐØv )ilPcΙŒ€~9¤Í^-P>½•Sø¢ªÖ_Ñ:v}¼ú‰ ø9#}hçp‘à;‡¾¢~¶&í@»Âªž$ûòYéØsE6ýPÈ¿Dpñˆò϶J úy·#“Ø'PG ‡ãŒY9ÇçzÖïIE ç©_¿+Pììk.Âî+çpnT+ ±µÇ1*#Xd4-.¹.f(܌̠n{Sš©|ãPtw90¿Ì§­ã=tÜr•xÿ’Yñ©Õa…@.i¾™?#E¬4*872lºGÝ›ü”òóÕƒ¹óšAúa§¢+lµh ›¹cÿ[ÅU‚·_Q'ï–íMÇ7&U6æØ‹{tÍ3_ŸÔ_óerˆ$q¿E½â>$zr,¾.ÄBËëDÒ‰ú@û‡ÍDü”Ä­wPL+w1xàKDTjã_žKU÷‡Š¿÷ðN€úè±=©C; ]‹‰ØÑ\z©r¸úÕ~ÈK*¼Æf:²}䥳ý]°¤Bu›B<+2¦ø¥Ø×Iÿ§½²¿S©ôûü¨·zM­<ƒïˆn1•ùu›Ó÷^Vú#:.æ?¿yÙž®ïµá§ðƒ£|`q^ Iš©åâ:kÓãZFMd§Í‡ˆ¨><…÷Å4I)'16TØ͆Nß°`‹ð` [€r óz‡ÅÜl8±§ ’¹Ll[@Æh_ëí; Hk¢ÉjLÁf'‘Ö%З&så@µTýb[Ojöß 0®šm-Z‡µ<"ÂVç­wSp#H¸Í°ÿ,3L\g*±Ý¾–Ýçpg¡’^uІªH%a€ÃuQlàÎZK‡B£vHÕqe·lAW`¬úÑ–îxüFÁŽ¸“Õ7º¼Î IhB($y{³ÓËòMSô~¥ã # Z|Ѻ6Æ×c>ÁB’Y”ï‚*¤ÓµEkèið„ûܲ²ê6ë#¥ÊxNÛµqqŠ®k%:ЂÃÏý0{Â4Û¤8¿ŸJØTá‡ð~UâjçµDg,Vå|ÌÙ)îmÛ ÁÎ n$;ùâßÎWûË)6{ô2÷Å1§ßÿ2_Q.4ÓZxWG)ûqŠ·óGŠõ{RÜh¯ºÎW¦ãrzÞõÈÐKËDä]Üw¹Qöº¯G…\å# n—ë{aæÆŸð»Â¯U"¨k;`aEw}øŽ¦¢´Äætf µŒu &ßéæsÜk¶Qk¥pxNšnL’v’Ô(|)²FðcˆÇY£0c…‚Ø0cX{Ò}hƒ¸eÐúƒKŸ:†ohÁhdYÔ}îw¼Vj¾]½¹cû¦wní†PžQY@V)[7ôU5:Ò³ûÑ 7k"%W¥v3<ú[j¬ån–E¿kƒœm»ŠìŸ×—´[™Ý%I¤@DZrbÑll¯azQ?ÍüŽÂævFúµg. P³e†¼x€ÉôHý‚€#j(hôÄEÕÑ7z,œB-»§óÎ…5E«›}~i›“;e€b9i«À9úHðêùÚ§7~ Êã>OöᙯµÒ+7¿Ë„8Xu@HáÐG§6¤'Q{—ªß/R2§o´D^ÒEœ (¸ü,¯TcÏ©ÆìȽã‚Z]iÚXçKâ Ó«¦ŒÜ„Y¼ý}ÉkwïPï <{.ÏÓ™O .õÔ‚Äñ|Ÿoh£‹êÙÕ†4ü&Æ ÊÌŸ¢RÚ±¡™Hõš‰ wó½é2)B­…‹·†ª"Ú7cHЭŽ8º̧\tøºlg%Ijð«]R˼a\nÝ8†÷¿ú³à!V#RÎ96áw¥1K©DŠŒ?VäÃÍBD\w.UȇH·:Êæ·7Ä­‰ö‘gBrny)A½Á4k1H´?ëÉà$œNŲ!ÉZS†^0yVÖldlƒËä~~;Þ¿g;¡Ð\ÚaæôK¾L‚ùõÛÛ“½O’l»,© ¿™[§ +¢ðBîBZYø ¡QÚ÷¥Ä:_}ÒbeÚ*r³9ò”¯Ô¿åÏ{ݘéËáªÝ]1÷WšeÂ…5âo#”‰Nb… ¨ô>¶ïÓAÎì·¼žíÉzàá]M¸Q»„)ˆ'°&má"²‡8øg+Gž‹-¯ðJÁÙ¶(!‚d%šò÷F¨é’‹Íü0ÓK^žŒð §.Úf9Õºi"‚Bœ‘תÂh‚0æ£Þ·/Dž¿V™¹6j©Û̇‡o— +_0ß9ø™Ü®Á³@3&i ¯)BBD‚Òr8ª¯sÿ’¶þø¶6ù5EåÇÁ‡›3§ŸÒûišI©R«‹ª]S¯Ðeÿzý!KþãÑÑÛ7çÙ96@:áO´ˆE(Q`¡W¡ÐêgÉCIචœ7·@ªÁ×N~ðOÎÏL ÔšîÑ„6t>æ€ñtFt&QòŒõk©ú¡Ì: ZBw˜0.•Ö +X˜DöBà矉uƒRá±êëŒãù³"‹‡»½øS,VëUgÈÓÑ×Hë‡ Ö•Ø®ôh3ßõ½@gYa°«¯ÃK}\)ÚÖ„èoô}7dÔ{Â+ä’רþ‘ǟúiæpC8[bk%u‘I0: ]¯úíŽI*]¬NꌕԲî<'âÌ€Dq¥1öYßþù4ˆù;4Ù´Ô˜¥^ðžöE›:ãZ”¢‡ÖãßhSÁÒ"”‘æeGq ¿¸ú‚Ò®ˆ÷ñ"‰v=}ç¾ÌÅ%ű;>RÕw´ºÊuú)DãPèñåVÂ-{ i¢87£rC ~zIu(a=/åÓ`éÇ +`JVæ€ÝM?Ë-*\šFì\q¬w÷4³Ç"Ây'LÜi æI²úвTxÝCxEåÇ7#Í=䬯šÐ]ÏÂ)9™šj^wpŸiuØ•°I/9c½šÙ;ˆ†YÂV%íÇ’:ðgEFÙÒ·O(–qS”•=ŽM.A¥ó¾5Æ·ôŸ·¸PF×/ *ÝXåï·Dê,oö°`ÐO„&ÄÓú1¢ç)ã”au§4‚x­¦"ô£šVKnþ?af¿½ðÒâº-©Þ(äM×4jý€‘âª[ Âx06Ä–3± ÊbV®gG¬$¨ˆX”£þÙ]0ML]B@! !k“ö'9iH„%7ØdÇýý³ê«VÂiH€ð‹Lêõº «§ÜTÉMÓ´1=1TäöÅ¢ÕæûH&LÏ5« "ŒúÞ¶jªÏa1¾5e‘ׯŠ9³dfƒC|—fS}½Á¢^3²Ry€!©ìcÊ^Ù±•CyÞ>æäŸGY›µöLˆ²Í+ðüw…¯‰‡›]E™†ÏIœº#½Á”“W¿ig/€¶0@hçnlÊäª5Áç®ýF6PI¥pKˆÈKUëqßoÁÎJôƒED=§É*óS½PlBø±a` +^ñ2Ý9á4GÌMdHä:a,h&y að;!Ù$õÖaÖ8|Z2ÃdÞ‹J‰Óc—…6‘Ñ}Äu"åÈÄ7)õ)ÚÞ”L#mõ0n—Ü^žÇl¡~c[øïz¡AèÖЕ–êÍ™qùÐEm)PF½÷¢xŠÔ–ŒisØ€ç³D6 &œ<ÝÍYï’Úl¥ç¬œs·ÚCò£ypKWFsš£jƒ“ÃÉs ÈÚË~ +¸š4?æ·q|CÇÂ[9ËÞnÑŽ¯U…”kCWvܾOøHB ÔfGpÊñ¦Ú™uw"£Û¬‘M+<ÂREÍœËâ`Ôщ) SßêÓk3—ÌŒÊy‰m:ãs‚êf“Bܲþà ĨÙþ†¨4ÃJ´§ ¹=µ¬l%Ž»Wa*ÂÎK6#º=\{œ˜{áÒBz[òaey}1i%œ1ˆpÊeDNi±`à6^¥ +“V-Á …ê©>Zw>î^’:ðëÖ£,AÎó=a¼PP?N}“­8s3zxC4-áÙ'Ð@¢¯Äa0½ÌåŠ&vù& Ê«¹jÐ-OB;ó¹bîAl/­äÝÈ»÷ #o«²#yÁ?.¶Üè© ®Ï² +sf"7íȘ'z½½Aܬù;˜-Ø„º5½ŸPoö’RnÃã—§cÄ­d>­Õ‚ëmOévXš}Ý…["äC»Îµš Ú·ñfº ?jÊ…Šs$!ϧmAb÷yg‘Õ3–ã¾ú©Ÿ™ì‰YÊIÚÓjû[«Òaî ë—e·Ù{/ûÀjÂé‰õÙÊZXÀüì˜à äa.ð–Ïæ\àß›¶üؼ¾~ ê¶Éþ¶ü5öZ š‘X’oJQ˜iOÎãÅ[=Z)é!³»&ç–ÃîIëBå\Ý;»"B7›§ c)Œ—†Þa%ó‡ŸTÚÅLn_´´i·‘c•udg/U†Å=7 +BÎA>ȨÅt»î„ÞñMt7¡Š:»ùœ=2>ï((Ÿ!{GÅo’8DiåGÍlœ ÊãVÍÒUŒÖº‘jÜ”Õíë +ÞÐõ)δ¨ŠP=¥ŠúçÇ ºÚiÓNRŠÓ€„™m:ô¹¾@1??¡– ­”x!MÕT•ÛŸAsË•-&I˜·ö@ãݪƒêE!F_Õç5²î´ÛT² «ô±.è-ó°{m”´YÐßžëÈC&ÐöºoÕ¬ìêW5iø·Š ¹Ž–ðûï~dÏFœöN{uÍUg¿a`BFtCÙ¾VØ-¯Vâe*ï@ì @uòQµ ä8L°4§2Ir©¶Ð“†¤o§¿Ù §¥ëÁIÆtPÕ'ÆiÎâsëŽÉÇTЃF`Þ™0Úu­5hJ»½ Ù‡,KíÜкÔP¡f|éO7§Hf|dÑr^kç Žß¼¥'@>¢íð@‘…„—Ä”ÄÄJÄÞ¿Ý>3„Œµ¬èZˆ›Ù¡R^XÚ9ÈÍjÕy0”Nš¯s„gA‚îWˆ™[Uú £™2õÞzבl‡KØ6`ñ +î†Å×°æËùß'™+¹O?àªH‡q@…ÑQœÙ–l.vk -3Ô+¸Gç Q@CX <¢â*î>Ö‰?7ëÝSY±ƒ°±÷a~ü¨=j ºíd„¾‚þÔ‘"Ød±ÊUU;•ÞÆrÝJéŒ$AøZ©uëÎñ³‰W´Bšgûû±wæp'Øbû5莵Ë#—½ë ¿É¥M!¹q¼V@«ßÂ=¼8жœÃñ!r1†À`^6]ÈÊü«o†c\'7 V;:šb˜€™Sì +…eȤ½øÛ ]Ûq};—¼¿ý%W[J¨÷¡¼–Þè aÁþ[Ò-@^ŸFðGH¿ ìÏÈÜ°<·eÕ@wô¨‰Îy«(‘«xd;{”«‰U¸otÁªDÕL +˜ªˆÍ|Îóp—aÜ^§9Lî÷‹¥¨`=1OþLˆq‡p–*ÃsqÇwŸÚOuØÝã-ôõ•)D©Û¹(ÕDIÅ,$¬ßÌ÷!›xŠt¾+’V‚Zä\õ‰ØÑk‡¥ vÜå# âiÑò2œK³ÈÖ–ª·K ?žfÁ_ ž`á—À§,‡h@cÄÏÙ›‰„œ#¦å[àŒ‘æÈÝŒ‘IágWà^2/Œýäoö9œóê¹ÜüŒða yƒ?wR"”S;¦ÇG^ˆø3ðÙ»¥%3œj˺Ø&B–#vàXÂÃÇpçŽ7†.arï«ö •íWÓ~ j¤gb‹]ª6ɵvô±A` Û·ŽîB s8<«ò齓O`«ç( &»Rð¼ÕSÐó–=Ãê‘1ßì¼Û#ûžB6&L`¦­k7èT™7„,uxæ}ëåÊ{!,¯&šª‚i»FB6˜3=…ÎÀùÞþì…æe£Qµ5'ØŒ™Þ+ò@3îàœ•öÝÔÙÏ£’â»Ûö_:`n?ãô`}ò4 T躉l¶}™=aC,I‚#«&‘Ü÷Ó_rlïyÅ–$S—‡—8•í–æ æý©ŠV7Wo¿ßγœ'“éžÁ©Z [ÆN«éaîÓó'¨5ˆé´ìiU÷ç+3=;– ov –ç 8\ õäñ›V†Ã4¼@jãÖ)ãì±Ü>ÒíªO+^xN¼s—]Ž»(¿ïi¥™¡ì §±,¡ÝèAÒãÍúŸŽVjóºb,ÇnåCæWä¾E ±k‘ +^ú”ãh@RÄfíÁ•6—U +×qóp&+yPå°1¦àÙÂ¥å Xˆ|¿ð$6Uç»’ÄŽ¸%¼ûm'v»!†æ^™íç Åä.°¥6q2Œ\õº«CÛ7E.ÄÔ—¨lwBÂæ8=÷_so09Fµtéf²ÅoÊRaáÜJýèb;†xŸ)ォG œþW¤ÈùQw¤ØØV„K˜7µºy$•o5MåÐà,=²æ_³4¥ñ3ž•÷°Ÿ +áB«¦¨Û$EZk°`ë¥Y 5qÁ[œù¥ëÂF… :ÁƒN„´®jîܨ€›JV[‘ +ü™±8Ébº¢¾9àѲœ&Â&9 h°¼§!`Z„ù“½M$¨'Ì é·Ç ˆ‰b|ö]·[EÍ\çtHL”.=MSeî{F"ä(ËfIÜ +ˆ4ƬÆx»ák&ªˆü• “KѡڪƎ5soõUKæU6Û‹m™³Ó<{WûFgsü2‘“+tëÑɇ¡ˆ§Ç—–Fë¹mù¨ö9¥ûŒí¬ ( Q«¿˜?©Fߧ$‹OÌr?ãZJŠM¿{m9ùœÄ1+É°‡!¨Ú‚§¨næòY:ŸAÈ‹Wv¿ ˜iq“~ˆRŠ:²«ª j½¤©Gc„ËZÐètúœùyF6¾K*Û[HzÒ§ib·I þhŠÕ‘¿tîÈøhbþàáDëÊ0Žñ/—Í• W L|õ)ä™Ê~¸Ã$|hæ¼)½ü'CZHsöfW^È¡µ „u™§™êÄð‰¼—9*ÙËŒÝÏO´Oý bDòÎ7Ž¶³B ­DÖD3]‰xécFb\“4“ï› O`É@®0{”X«V%Üq7j·6Ç„ŒìÏõ¼Âør¶µ¦§@Üt,«"2ðÏǹ.Š­Ý§ã7‹ø£¯šr°>C;–wD72Ð AvIlU&m¡•˜E4Ù(`ý[wZQ3‡Ùµoœ'é†zDŒdØ'ü#mø Ͻç[Ü#ñ™‰.i¡®îñϲzåª}:K-òÐm(¤²“™º>ÍÝ0«l7á¯r†Ûì%óÙSï)?ú±ãR™Â—wv“iQ— øð`gcÜabO©_7d@ Óq¿" ™%qtÍGJ߃Ù56榑û¶5ù|[!Ä”L{ü÷ß_é$£½—zø[HŠëNκü-ÅÉEn4«Ržú˜‹¨ç£”v”bRŒiº& åõ8æz Ü®ºˆA¨.Ó}:pc“%„9¶³C@Ã×vt|jâ0òFóðÛqò¨|jùŠƒÊá~·l–‡kàVÞ5-¯$Ý3ð`z—º¨Ùû…>F½IÜÝJ² ? =q/ ØîAÏb“~Xc„\9+&•óEµ‡w)³SOS>}Sl´;#5(î=:·qøO\ᦦDø3ÖF@rTôÙoÈ'É@'áÛ¨9o;=Ò«M!±ë{2‡JÕöhU5ŒGÊÇÅúÔr–Ùèjšíê–uÀ@Ætáóå•­qW3gPÚž‘õ§/-‰Óî¨~%ŒŽòû‘„¿Fãk Óü§:(™aÿýœßL +íqÃoØ8\"ÉÄø‰m~'8 £Éùª¤\"~Ķº…puX‚8R±·ù;¤‡,qÞ\;1´L AÈ›œ>lϴʘƒš¶ü¸\UÆækèK¬ôó(29÷ðJ3ôûõrï˜O²âåMçÑñBu”蓼!þ*²‰ñØx“–ãfðÔƒªáFb6ä([N£+þe÷#Ìó,+CðÇUÓ3Mcf‘ÐAñn0Ja¸Þ.H”#ÓJ>U³ÂåbFµîV?4™;> +Û Ì_÷cvDMÄȺ„‘)˜3,fÅ·„@sž?X³¡˜ò\ªå$@Š$ÈW;ö=W!za(NGv È(èᇓÃY†CõdQ1”On?S9Ç>Oµ +dõ›#. +óÕu«ðaxÍ'¢T´Æ49¿} +„¹ƒ°yeàêÙÔSYãæœjî×]…)Å’ÀY¡vSWòÀ­¢ÒGÕîUê£ ãþh4× ¯DTÚè¢Ë ¾ŠŒ}dœœ'.ßñ»c)sùÂ4E©”€cr'L’q!2XdêFÒ±!NMi€âñ¢ÂdÖ |H—^ÉuÞõ“ù¦?aÈísNfBèÈ(û;Ÿ>§[Q-„- ï$àKor§ËûI’;G¸],˜úJâAžXÚ€àvÞ9g•0žh}[ü £Å‹—T€%/WHþî×Dªÿ~Å!¬„ŒµWJQ;dZUüÁˆo 7êU ‰iT†dGà!y×"?αLÛuº·Ô~¡šŒ{U#[Ö÷g_SÚ®s·ßñs=„Ñý}Ž´þ^W@ƒ¨IÙ9¼£ýè@‡}Ó$0_>)’¤Èz®Ep,—ðóõ覲üˆì£å"è`06déðµÃ•GѶ`DÅÄÑrß‹èGÃõ¶F´(øLIÓÓ2¨ÄhŒÑ¢syçw-[ý $SŠQévÂÙG0p•|õL ŸûŒM:2ßx¶åÊ®I÷ëžvH…¶ß]„,U5‰eÅæ°LX*º{Œ+—LÊjŸO}«nU²9¸ç\wýÓ/~cÝS4ƒRꩱT.&êò³Í66USQ–‘*·R°l"È÷è;/Z÷«ÁB5OmùǤA– +ÈïQš4Zl’€AÍMNÒ1B.NèL·YÏ¥£ÌÊ©“0d›±)š„¢«ëOØF'Í<I('Ó.DÁ=Œ”³‡pEd­ùØøõmQÜÛÓJ:ëÔs††¥[H3h™7Â6uaÂÈ4UgÊh {V†k|–¶ žd£å4A:kY’(‰®rŒ“JY55b¢L ï¾íV·œ2kÙzÙÛÌ9éúŒðlâÞõa÷xSkðJ–†µä{Út´çŽ[9¦3ñÇk4OÂK8­Ÿçå Û°¨oS3æÈàQÌà~i–¯³•úc"uË-ëe0¶Áÿ6µ¡ÉÞ†ÚÄÜøÊUƒÆï¼à쌪2ئ„T(™˜ž‚è ¡)ÙqìÔn»Fñ±Aò¼Œ +~z#ë6 å˜Mmné©^«ŠÒŽ†y§×ù{?¤¾ó ÃN[„!H-Èâ–‘Ôyúê³Ból«nsªYòU4Mö¤ ©0lÕÜ´~µÇê½æ`¾ü™ñd™ÿÍ%ºŒ(„ïñÃpY0çh^zÑl™dɄ˱½ú¸çðG0Q'[9R3…m4cA¸Ôá÷¹öîY+x‡}Ê)¹ÕV¹„çþìm‚›sÞi +chô„, 3 ‹ ï‘“#•ÃùG ÖÑŠ9$5à »l|ëQλM}ž¥’>‚ÈÔ!¦}™n¿°B=…_½' qŠ=ò¼²D½JQ:|4ù "V&71¢‡»Ê´XGŽÌ˜Û6¸XÉLjðD^«Pìˆ,0ª°>«ÇŒzK „Uê• Á;ð# zJí™ÛG ÃLtåk ­' , 2ýòô™ÏªÍÑk|Õ[~>'}A–ž­h¦M$™O¤{É™™aý|Fo¾á¦›\basmç­‚‹ÝjM߃½€—RÚ·Ž¤`W 5YC¶]Þœ}ËA… IñFÝi„—¤>4Å1 <ÏÜïQ»ÔäJ!¼@ïµ/g”ÆL…˦Xx2¹Z‰—L¤xó¨jZ‹¿•…< ËÍ(癵uèKvÝ%' ¹ä†¡&$XôÕÝevþŒÂ…--kZ"»À¤Kõ.C!5—ÔÖ² NɆ ÅŸ;DrR,çÖ‚ŒQŸ¥Hâ-A(wYœÐ% + ±(ø'E5 Í0Á{'­WÈÐÐlûù 4·Oÿæþk¨ÕÏÙ€œ“æ¬)Tlý¼SM¢ÌºtÙö:ʇOI[|¹,™á +¸} ³i¼<nU·ƒÊ'D†7Òz;%s}S°l<•’y°46Ê–TZ¹eÛ]DÕ\Y¹ñ}˜en|(xèn)<¸ËŒ¢G/Çê‚«þf$'„ƒ":èuë ìðx/’<€Â?‰CòSÁ064qcZŒz¸ÙÝü\! ;‰^ ¼·'PZÖ‰EvdŒ¢bòjGYþ=Ñh/«¹È´®ŸË $8éÈ'kê¼²à +%gsðùB§*÷Ä•TÝþô¶VÔ½~Þgÿ°s-Ãê¾ù¤‡I3ôÀâʨbŠÅ4ZŨǾdzçÏ—à Áç‰÷ø׳ŠX]"ïe‰¥?ÂÛjš…<®ÛsÒfÔAgV+¢ÔŸ8ýdÚ¥_ÜÌl:ɶ™q +L! … a¥,C-CŒ}M¾~šÞƒÔCzâë—ò '|;¦DÜ‹ Ž‹¼”ýû·NsŠŠô c‹Ð9T#qY%%ËGð 0Ù¥*÷f’® +.³ã׋ÏLH]DÒ.½Å¦œÈçûNcxï*ÿÍRŒõjHGmwr$Æ›~üzXÉõ½c7G9±fRpÂÔ›õñ`ç¾/ŽFöøÍ¡Sësöe‘Ä¡ûůjrv±K ±‚º‹—li¬@b Á̧òÓµ¬FÁ§”L¡s¾´_úm\9G›8+¥£XmK‰^γ³æ&„m©œtðÞì]ª_l„Š@O3º] q—ÃX;Ü3œåá› +kƒãåxÄüÁ‡¹C ¥"QPf¦CY_vŠÓÑô|‚ŸŽîdœîÃ: eФÛw‘éûe« VÑê–†P-o‰ ã¶*‚½—€:GçMøŸ¥ÀOr¿/CîlMk[6qÉŠP·eÙ0ÿ¸•Ëzý?TRÈõó·—Ï(ªå8“j$27BjߺÌèÖ–õ¦òãȹÿäâÌ-:N ^TüÚO`bŒvï ×o(<>yýeþðHó‚Tƒƒ2¸¹ÁíåÞ(å2Çæ¬9½³g¦F³Ù å’Ë?q…ÃNßJšPZØcš¹ÔiΑ88›ï…wäD&oô\<朕çÞ‡.'cve‰kÎþšØuôI¡]Èš‡þý+‡¨§Ä ~¸db D:{‹ÛÖq •¢j+˜ZÖ+·?ÜT±æ­ºŸÀÜÀ! +û:%é5¾¯åV¾çu™J°5Jòb´â"2jþä³àí=j¹ òüÅÍ·½OÖ±¼×Ñi¥Réqødoeל}½j(áIaRFT¼‡{°˜Të‰n°‹W÷'½y@,}H5»A¬8ÑLØÑ]ƒ5ævYÛÐD"ßïŽÊDʺ°z¡Ž »z}ð…ˆÇÄ_@ïO>s0<#gr¹ñ´»f!bºÛèÊ5ƒ¢Ã–x¦ÐJÚ./°A>x»! jm–²sÞ7vÁßC}AœíÁ÷}Žn4XìÅVÄés¡%›†¹¢{Pû< ´éÔ Ì7¹d±·ÝÖ.´?²s1‹t¯}¼;¯±Ý½’×Gû»{UÔ.!ó!T-ºž¸9Çݯ~_’*gûkèŽvª»¦$û¦ÝU‰ô¥5Sü¼‘i÷I´Ï(Ô_:$³^‹â»Ù…eÑ\ ¯eÈk#Ü¡ðï…Š íw¿ÆÚæ'È­ÏòãJk-Yc¿ö3A2ûW´ìßßUøäë/5^]ïèø×¢ òÁoÀ&ÇÀÍ/úŸNÜ&ÞÞè\:?Fîö…)«pÈ:RªB¹TŠP¶×ÒªA +¨ïÃÌ'l¿:¦ðè;{3¦Íäeµ—Ä;»¯McÕÒÚ-ÿXON´Â½²ùr0‘õC€ƒºÆ…L9ꉱSWËñÛÖþN2¼‹ÆvÃñ’ýÐ È*ö{ä•k^‡jogÊ"oØÊglÂóIüPÚ}tq(½Ÿ +QCm6õv;1w²ª‡Hk_Êx½xµ™\Q\5“`b?ÛÓE„ÝH¦æX­Ž…äš»^ÁqL]ÙPºÀ³A‚ä£h]hò(0ã»d68ýÀëÓQ/eÃ`Ü›i0ÐñXV£ξ0žzGïZUOdCZ4[J)é?°µDäé*}ï uÒÌ{QýÜÕ‚äÕ_x® +Ê’¸È˜”m€¿™»_–pÛD‹KÅ|iVWeeÀÀ«‰ „lÐÁôÿê4èT0Éëë]Ïd‹;PL¹£¥e!D*%)f­­Ð¾ì {ÄùíÐîòsÃÕ|0ŠLï-ûÈØÀªY‚èZ`ä<Üu´N!ìÆÂçaæ¨ÞôIJE OÕFÚØÙ‚™O¥ì鲟‹„œ*+aB5*êëˆYš0MŽŒ£>ÂãðSΚb¤³(=nìj‘·æÑ4W­ÁÂ-ÕÏ·­_ѱîíô‡Çº™·` î%âg›«ïW‘iІJmøª º¢Ô††ß‘$1½ÑØ“](snr…„L¹Rœ±¹UbµVfn3]ú‘ÛÀáˆÿ3È9ÆTÄk›“¯Bšž«µW¯ôoäˆ9u“lܲ‡vxvèô3Õ ÖÞlQ;, ÿ®w½ß,Öf9z ïï‹?ŽJ¬äl* +pË(ÑMÁ™ž eF×gº‡@‰<·5ð˜MêÍ jmòÏ °ñksŒ]VY:zÅPÆ]•a£¿u_d„‰ê`”]&6ú‚–2#³ëb…S–ä|_'UBÉ9ÇØÔ*+‹©´ËY[–µ²zŽ’w +Áë±(`°1BøÍéÑ÷kL»;B„/ˆ,à  G70“›(Y:¥ö +ùµi¸ŸÔ§îwX\Ÿy=rû„7"¬ˆiÝe6ÕÈý`Cõì¥oØ?g`ÍF朌‹ÀH‹†ò×ÓÕÏ‘`ñ» ‚ƒT~65Î.96,`³xõµôlë Ä\θ;&¦!kÇ×å ÆæÁJôV>ÓÛnQ3­‹c…8¤„½aGãÐ$îÉ(»çf†A*"CÛï}„:¾¹ Ìl{‹7nN^ÐÊ`„påƒå˘ÌV—Ûyþ2>÷{Ή =½"ž;ôl`¦GS=)ÅhhR:ê bÞ°ã}µ;íYÏHey~aN'¡¦o¦NQ»ð%`\ô?G°2™9×Á>ìSŠ¬7…¾»Ù6ò_qÛ§ÍȒΊŽ¤¦vغä.Ù#*Íõ¹²G-–à°Ã~3º½øÕNôdàÐH¬|ò€Ò>I6]ñs˜öüåÛ{ñ7cÌ a8d?‡ÉNV¦æWíûê^ÙŸ\W’é†;ˆwÒ`–v0zA…füA©‰õ§$=›Ò¥˜ÖÒGVöašMŒs*(±Ó8üì¹äô¶^d•àŒ1÷·»s®ÛCºDdq +I¢BŸîÙ¿¿²ÊXãÞLbÁcÔÅã‡Î0¸±hÿŸvæû +‡ðgl2²¹¯u¶¯}gï™™³;dsvÉÙãlBvg”y8;âì…²et)Þ?âýíý¼Ïð„Û!O:hÛDr@Q9Ul:Ø«Táa¯a ..4EÿBÜÖÑôŽŒn†éü +ïÔ2AÆìöâ©eîÛ›Ó¦;»ŠÞ¹‘°!¸„è`Ò]åU-YñÌëŸò¬ùM5ÁF³·&RGßw´+ùûè8šŒÁÈfïyFW OU£wÀº$¾¿@i¼ù9ºùr¹>ÒHÝÂö§õÆe¢Íw{˜¡Ù +,ùÌçÖ6ºþ‘ß‘—§ìä*ƒšA>SxÏå’ò§Oœ•Ãøjäwcâ]o¸‡´×ç?e•é%Iôm ßÞl)·œ?Þ4‹™æI¿´—.¦Äì Ê×AÖŒqh}Ä_J¬Qêõu‘¦ZX´y7³xÄ,i’¸«^飯\µ1) Ík„ÝÅ TÅ>¹Þðô3¥Ÿ¦õ1!}KGf³[ZdɦÚ^Ýs>¶ì¨¹…ç›ý˜“]û·çÁ ~V\Yƒ°ÕæÆÐ¥–tQrÿ=!ën¡¾5ó -b Ýmº¡ýŽþÒéÚŽëÁMyùAãýX W ÜKî(-ëß)¯Tà‰aß½ŸSñÖ*æHGÚàœ° \>|¢<ý(­³Ä¢­pš6>AÈ?!K•úÜû5wv")]mBßþsËäÖ»y¿ˆ~li¨c~Ÿ…Ýu¿û0Î_·÷§n¸>õã³@IIS¡å 0B}?)4ð“ìó ßùöìä]ϧmÍ|—Ýý2žÌÉuf ‹cHéwia3êêùçIRyïX”v*&äaëR¹r}"f>Kèbœ#òF¾¾R>ô•g*("¸AÄv%§U–ݹ°¾ tðî—´"wXÈD Kaë:¦Rô6½fFä’pìï8%/ÁB×lC«ÓùꉛAØ„‹ƒ™ÐȆpñ½ªWfÂDùtËÏÛƒ'qØV>“žÇëîä"9š#÷cõeŠÞ«øüt7–À“rELåÊ1<¯Z  ¡“gÌ^™7…fÖ¶†Î;xzÍ.—½°õ<µ@|˜¾÷º`ÜG¶ÁàÇ¡ÝQ‘ôÁö¥¿XmQ žh?ÝŠd„Zêภw–_ã÷ëÛ“ÌWsƒÚH ãØ´ðÕHPÎ#razoºÚ·¼§,ýÎ{=M¤LÅ;uD«&RVdz»Qò¿£Ài:ü:a‘Ѽr.<Ó!OÍÁãÏcL­ó*ó@ dbzâ2YÌóŒûäð<îº|¯t$âckÖvzÎÌfPW´ DSÄwÞqŸm¦DC\s+v¨ Ò~b¥æg¢=R8+’(%ÖTúL茜m8ÀjñÕ|"Òr˜ü¯C1Ÿt)u+ ºakPâ&2?Ân6ˆ=Aù¹ä?úZ¨içiõêØÛfÄ·âw|šûÚѲiC©ÔŒ€} +ogÓƒ1GC6E®Í]cdv®l}©µžÆÍE*û‚Xí øVr,À8è–>7%×5/ÔQz 6@^î$Æ +Ìkª¸â§hDlU¼v7X}ñÂúZ%fòb+†Î5ƒ;TÅHÿ$IÀÒR.X/+ùeÌö2¸Õ4•õ…6È(z¡ØîõÉìg,Í¢ÛäZ}~û JmÕg(±èe{u›"&Œ›Å?ci¸èàòÝþªxš» P1¡,›%7Ñ9¶£ÍCN„zD²O•EwŒöÐwAöº”\¼ ¥¶¥&†m—}É·åæ5FèHîñÁmÉæåwæµÃØ_ÁÆuIð*Š_7S§êö®B›¹æÑÜíä4žœ¹?B¸ivèÍÊ¢ûÙ‰Ð=ŠTgÜÍÎh QvUKœRŠ¡ÔÛ³=³·*ŸèÌ »ü ÔÚÕ$dno(Î*ˆÍ¥e[­¨þ¶5ÐÛóÁ2¿±¹™eTFXôÑïŽj_â|§Ç9Ú ÆxŽüP$ßB^àâG:ƒÊÊòÎJ£Iÿ—¢baDѦËvwi¬†¹Ã¥Ë•4{ÓÖÓ/mJûW2S‡êrÚS–V¸&•ˆàúZ(^S'2×ä‹’L3:5¨V}JC9ÜÖË”2Jî(>9c·aïj<Ü(ÎQC…6Ç­ X)sSl„öϲژÑ߬n +i¿5xÑ@>,Ïu> w?tiÓ¶0ûôIÏä#%(ù‰ö +©«ˆ|LO†D¨Å÷¦gîÑå¼Þ8vÉC÷I~®O–ÙÍ>mŒáõÞ¢‰‘}‚ +^hâŒð·¹ œ£“hZ™Í/øÅ_à7œÀ+P¸¸&&êåî$+Nȶp®Ô ~I(–»c¹ÚŸYªÓÅg¶%ø¥p%ö>­’H¾iL¿\ÚõÐß(¦µâ_«8Cƒ—R{‹ +Žµrð¦ëØíû‹0Ê{‡˜ÊQê¸2‰«Zœa‰ƒ†*7Äc¹äJî„I›ÏüìÒ]©æÁ 1=Š¡å©òñS€MX¡¥GMøªéþP¢‹:*½ÙOT9†ÜD¨*ÀzÞÃ*Úž“¬ÿ°Ë_hg +‚œ«ê9ŸjˆŠ"J7Þ®(ðhT(ìâ ª¦¼ÜðÊ™§Ä‹V¬áÝq +oò]ç }£¯9B‘7õ· öœH{È­’ëæi`T&éVÇãs"¹‡‡ªÃßÛçVMo¼iá÷׈â{C„^×;¿_g¿`,·÷þ2 Ún“ R ɫǶ]ÅjÍuib°ƒãÏV!QÏÆ>²¦aO<ö”ñOÁxƒªH²$áófe°§Åû›ê¥úКxÇÑiêÅà>ò$­–Ìy"-Ú-ŵ ôý‰¤Ëq ¸ŠÖˆÕ"™[Ø m¥cA¸¶¹"t8Q+PK¥ìó÷Ñ”¶ëÛãh_“ ®$+ƒº‡¼S¾ÎúÜþµ$áØ™éezv~7EhÅZÞ‚¥ÓªãHÝåûm®Ý‘(ãŸÄ"Þïòwnúê›»ÉÕ”^«¦y$3î3i=+iÿWuÈæÔmâ’<£Ⱥ][±÷QgShSÝ»¤SñºïX±wû@`z>ÍÛòÈëB¶"Æ®.(ñôAàN¥Ã|³w®3¬ín1eqÞ¸XäL%­1;¹MÊ®¦*Åÿ^OìU©‘yo•½§ìRùùÑ© lå™Õº©RéÓåú’ØyšQÝÅêØÌ·XçY2‹†¸Ä¾ŒPñ+«Ö$ßo¼7SæDEÏ–GÙËËGªvË.¼–Õ£ª¾PH^ ÍuòñjzZ+3àÆ´¤Nc<ÃÃe™åGKB.þ/Qü?øŸÜ|Ý]ƒà~.>ÿ™-ßendstream endobj -885 0 obj << +910 0 obj << /Type /Font /Subtype /Type1 -/Encoding 1932 0 R -/FirstChar 34 +/Encoding 2007 0 R +/FirstChar 33 /LastChar 125 -/Widths 1940 0 R -/BaseFont /ISSFGP+NimbusMonL-Bold -/FontDescriptor 883 0 R +/Widths 2017 0 R +/BaseFont /VVDTAK+NimbusMonL-Regu +/FontDescriptor 908 0 R >> endobj -883 0 obj << -/Ascent 624 -/CapHeight 552 -/Descent -126 -/FontName /ISSFGP+NimbusMonL-Bold +908 0 obj << +/Ascent 625 +/CapHeight 557 +/Descent -147 +/FontName /VVDTAK+NimbusMonL-Regu /ItalicAngle 0 -/StemV 101 -/XHeight 439 -/FontBBox [-43 -278 681 871] +/StemV 41 +/XHeight 426 +/FontBBox [-12 -237 650 811] /Flags 4 -/CharSet (/quotedbl/numbersign/plus/hyphen/period/slash/zero/one/two/three/five/six/seven/eight/semicolon/equal/at/A/B/D/E/F/G/H/K/M/N/O/R/S/T/W/Z/bracketleft/bracketright/a/b/c/d/e/f/g/h/i/k/l/m/n/o/p/q/r/s/t/u/v/w/x/y/z/braceleft/bar/braceright) -/FontFile 884 0 R +/CharSet (/exclam/quotedbl/numbersign/dollar/percent/quoteright/parenleft/parenright/asterisk/plus/comma/hyphen/period/slash/zero/one/two/three/four/five/six/seven/eight/nine/colon/semicolon/less/equal/greater/at/A/B/C/D/E/F/G/H/I/J/K/L/M/N/O/P/Q/R/S/T/U/V/W/X/Y/Z/bracketleft/backslash/bracketright/underscore/a/b/c/d/e/f/g/h/i/j/k/l/m/n/o/p/q/r/s/t/u/v/w/x/y/z/braceleft/bar/braceright) +/FontFile 909 0 R >> endobj -1940 0 obj -[600 600 0 0 0 0 0 0 0 600 0 600 600 600 600 600 600 600 0 600 600 600 600 0 0 600 0 600 0 0 600 600 600 0 600 600 600 600 600 0 0 600 0 600 600 600 0 0 600 600 600 0 0 600 0 0 600 600 0 600 0 0 0 600 600 600 600 600 600 600 600 600 0 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 ] +2017 0 obj +[600 600 600 600 600 0 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 0 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 0 600 0 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 ] endobj -878 0 obj << +872 0 obj << /Length1 1620 /Length2 20127 /Length3 532 @@ -9061,76 +9636,66 @@ endobj /Filter /FlateDecode >> stream -xÚ¬ºct¤]·.Ûv*I§cul'ÛFÅNÅFǶm۶͎í¤cwý¼ï·÷>cŸóëœý£jÜk^s^×Zë5FQ’)ª0›Ú%ìí@ ,ŒÌ<5e E##SK{Y)‘ ௙’RÔ h²´·3y@S€Ðð퀅›› jïàádinPÿå ¡££ÿ/Ë?.cÿ@þF:[šÛ¾þ}pÚØ;Øí@)þ¯U€@È0³´Dµ¤ä%Ô’òjI ÐéoŠ.Æ6–&YK 3`fï°ù÷`bogjùOkÎŒ¹„Fg ‰åß0 » Ðáˆàt²µtvþû °t˜;ÙþÎd°´3±q1ý§€¿v3ûäàdÿ×Ãö/ö—LÑÞälâdéüͪ(&ñï:AF r;[þ…öf=MíM\þié_Ø_š¿(ÈÈÒκƒþÉe ˜Z:;ØyüÍý—ÌÁÉò_e¸8[Ú™ÿWô' ¹‘“© ÐÙù/Í_î¦ó_}þ—îl<þmÿ/¯ÿ¬Áä ´1cD`ùö7§ èonsK;¦¶Š”™=€…ùßvS‡ÿÀ\Nÿõ?{†æoF¦öv6S “¼=èoJõÿÊŒÿs"ÿHü?"ðÿˆ¼ÿoâþwþ—Cüÿzžÿ;µ„‹¼‘-ð_A€ÿ¸c²€.K“ÿÍÝÈÖÒÆãÿðß=5€ÿ®RhîbcäôßáÓ Û™ÿU„›‘ýßVKg Kw ©¢%ÈÄ`fdówVÿ²«Ù™l,í€5ý×8 ,ÌÌÿ Sµ°4±¶ûgøìÿ†€v¦ÿ½ü¿2ý«x&)am1uºÿý^ý—Ÿâ_ýAª@ÀÿŸDCÎÞô?ÿ°ˆˆØ»¼X8™ ¬ÌìÝ߃ÇÍÆâóÈø/"–ÿZËœ,Ý:ÌŒÌÌ,€¿ßÿñù¯•Þ£·3±7ýgǨ€ŒìLÿn²ÿ4ü›¸89ýÕö_çþoÓÿ±þ×vÝ&ë+ö&¼ÁVi™é :ÜÜ‘)1>È‘¥ªEþ5ö½~ia»Ü•†µ?›fx~·{,Ÿ;|JÓõáØPõ¦¯ó‰|(hú з¾vrÒ2é—"§_hDyÝ,Éî@is0«íM))ë—|ÀÏt²:ÁÝ<ÓøS¸øc}yr@ñ5ImˆÅîBkè+<¿øšxúüD54>:2Ü{ ÝHH— OÉë -…ü5Òß1‡PP[­B¼ªùÕy{Ju ¡glŸÏßüC(»ƒ¢ÈrÓÛFÁ÷jð§fÌÁpC`¶VBjä+s^"òœ’£\žpÖk×Ñí HNZl¸Š”»Ào{ö«OŠ—©™}½ŽÈïqM gÀÁõ@‰Î -vÌó™\Ÿäsi‹ ø'o0=ÆK‘ wnÕÉÙë)ÕiÞ8©dÆî¦uË͈âL8{8yŸì'!HÄ`9õ'žz6±VÁ‹Ã Dp.µh4ÇÛÛ8ôÌÊv]ÊB‡ºŒŒžš¿ØKÕËËÃÙÏ£€_ë%ç=ùäÚâô%N¥¡[é ¡Zß—”Ž8¸³OÊÖÚvAÔÊ -ųÎ:]Ní®¯jï‚?Ú1Ü¡}ú߬Eþ·ß™ã…°ä]x‰©9ØhÎTº™þ«„r…7Ôè¯Ár Òx‹'£z줔(I6R×Äæ*n•5`™xZi”çe™•Öê]èntßMò ¦@ßë¨ÖŸ :º·WH’gå Îã:g¡ÎßqQþ5ÿ*<È8Ô²iir:ÿ±d*$ÀÇŒ‡™M ,tEÃ2g¯ö“0ACª•ƒÇ‹IyàbLÅ¢ê|cÔdˆ&ó­Ð“}7ÆÈZVóJfŒ!`/—ö©ÄaiCB2l´–¼â¸¡Å¯Û‰ÜÑäÈÖ )/úh½0XéZ=p|K‡À ôî3Ob¨cË\2Í%׹߰%Æ -¾@£dJî'¾T¨×½– ’ÆÑë«úþ®@Zl—,P*0ï™7oöÇRÄÈŸÖÛóŸ®Q§ Sý a‘²rÕmûx “ŽºñZHìnõóø•ãÙøï -z õÊøjØNE'·M¼¼² _ÉHËq zÎ9W±O´à¼¢\Y`Gà^ùa“ñóQýÕùÒ^mš¿RDÓyYÕãľ¤w§fküV¥_d•ôúÁï¡qUåM»n<%ò„é±D}^õ…ï9ÜÚ™/˜zšâ.Øè×)ú/…0×Ο· ×rþ¦›§›Ü:;Òé:of\ÛsG§ys÷ÌäxQåç!X[EsèAm®¿NB(^WÄÌoÑÎÉ…qeQoP½'“ÀäŠÛ±vÅTäŠËÔ›Ê`Þ£>G}òxeVÈ#E²Á¯¶b@:4ÖëOØ,Û“œÖ˜ w÷Ý@)Æ óeîG£J (P å[ývÞ²zž¹<ú JŠ ÔÂY­CµŸÐÝ^R°¼k eMÒ]@KòB ™ŽtF ò°…&eð *VÛ Ãì` -îïø`—÷¹K³†>E9‰ú¢%óeKšb¥6$O÷Àw¯sjºN«–'šuYv™ÁuC0=õOS‘GQ‰þ¯Âì{êMüqûÊ¿ûw^³4)pD^W¾i 22øQæBæeëðÄø8Ü+Î(ä€#x2dßë~r%³õç:9ÿ8¯%è5.Ý‹IáÊ9ƒnò )6Ý(€É7ÇÅåÑ Ú:T÷ ¼$Ó­jæÏI,n›Ýƒ0C5r ¦Ð{Ûôù4uJS·1Q¾àIÞ[°šùq™B·ã§ThBŒ¢$¹*3„¯ld¹oH÷¸¾I¤#×A·<ã;¹(m„ý0ïïwôù¨î´ó[bµˆv /“•†&fò5© hž›û:ß•·ÖÜ€–>È´!^$!±k•€‰˜“'æ ?›µ…÷yÌø•3ºš}Q(+pRÌ_jíy -j)ÔˆÀ9”‰©P͸\‘<«Cz„ w$;48™un¤£Üó -yÍ: -Þäâ¨Mœj‚ñí*Ã;øí3ÈñÈmľÎV¤>û¢{Ž'ûh„³vÁ›¤ÊŒ=N(ßÔ™Þ‡RÆÇâ-ë-U¸Õ¡AÉ^³Ø1!>•…k;oI ™&Z£Åó²A`þH¤Žš“´¹žÞù=&¬;îõ4vŸ ]Â÷žå·£Ë Z±ÔNnbáÓ1¦[^ÏÂëMᬯij ç_ÓTô²È§šl`îS ñö—›.²XˆGe(p¤.¿¡ CžFêJ)ËÂÀ€z®Œæ×Ô9øè¹'ÆÂ-ÉÆÞGܶ• [|ÛþTÿÞ l©5· BZ«àà"—䬩¹9£ÈµÿT*qq„ÏÏ4dG<éZS{Ëèœz 2T$g€ E‡úÅ3P&¶ãäQ,À‹é$‡(YÐF¥›Ýúg¾ÙþËœ;HGŸ€UÏ0/ˆF®A¶¢ºhÝÂüÏɬSŠ›?…ð.zì$ƒþ¾‰OøBw F9.é»°{IÛÖ]µYÎÙÛö>….¹©i>Öª®¤Á¹º·t’ÞѱûªÜI rvWL«Ýa%´§AX™ée‹ÇXço^´¡€KE-éÍBòŸ’Þ®ü1Ò^Þ€8ä„áU„4‡Ü46 -`YzY,lsÿtψSòé’üZQ”²8 !Êó@¨`öžnBîàñÃ`N€¥Nw§©Ç!ô$ÕæõÎ%¢ˆ(­Ùâ ÐκÒC$‚é‹Q -=öRþ÷y:×S¨‡ÎG~.Ílñõ¤1Õß«Øg½ ?o!==çxQWP8?®~|˜Üÿ¸¾x¿¾tW õ/ŸU®kdY¸Åã–„ ¯iHxºâñ¸l±˜“¾ž?b™qé®yx@cÏ·è£P(&—.!ÕGÑ‚¢™þ=Wc7Ü1WÏ28'ƒ;2[.ˆxý‘×µèÀw,ÔE h@¡3§>WYˆ}ðùaæNy´59ƒ‚Oà -Û#ñ=X6µÈøÌý/ùj¨5§äÕ‰X¦NëxþU¢lµÅ•¬A2fNyë BåK@z«1ÅÓÅ¿fÍÈnÿÙÒ©ê¹4mmÒmyŸ;þ-áu/AÏî^O«3Uªž3õ÷@ ¿Ý±”ÁX#`´BZŒ -¶Šy­ŒØœX6$ XbLÖ¯Æë6SÅGó´»k%¾PjãdÉ\c_¼œMMâ›7IJÑ1è‡ÛÒŒÆî C¡oÖ)ëÆ -‰} âx†Ü²t¼Væ–67Î5¥ðž)‹ôÇ“‚õ\æb—qå‘!̸øglnëNò4ü ˆ -/ô Ä@þåí‰e2bƆwU†ŽUöq`æïâðÅFŽÓ⊂™¼ná{™š¢5¿áPƒ Ýâx0 -\ÅT»à^7–4N’’Ÿ»$$Tƒ-L3éΚ¹¼Ìè-h’T8 @½Okè#ÁMÁ[¯/³xO:"¨4áxüåäL—„Z¯9rŠ; {ù#'¯‰ëºSçv²{ ñåûÃ<¾@nT´fÕɶ„m|ŬH•³)ãÆ{6­˜€©ÌómpWµÌsõÊS‰8B§n‚ÞÌ/÷ßœÌríŒÈX‹Q~Fš+AiîµoR_-v0ƒÇJH ¡øqµ'×z«0É:á¤PÂ-¦v€ª„Êß\¡nÊ8UÙwtwät?lwP2<8;É¥‘„ «¢J®ò:]÷7ÆŠÀ»·çYăŸÅ®ÿ<ÏÞ"€LàÛàh©‰¬Ñ/OQð烛T‰ÑÊ‘2ðUdß7G 2o´ž³ÂQI¤ßÎB6뾨ö!øÔïÑâŒ'âB‰™öðØ,‰¨ÐÍ>nõÀõgËlˆþd»:ûüŽEÕÒ'(̲gˆXô –‰0ôL·ZO2ì†X臄2&e¾ :¤·VNÂÌKXïÄþ®åƒj™Ävœ‡tÊ6ç¦%_þ­Ö¾lÞ+ã,¬zïpÆ%¿ìg.#C‰ž4¥ì#,jsÓd‡á~.ÖàËR“Eû?ø¿±ó­ZH1à -v¿»3 ëåƒÙ*ˆ¼JCü -ä+N‰Ø5ÞNj4xÐ]›€¨áàݵmï+Zf;ˆ?Çåe³ÝöPà·oŸÒÃüµ—¢I¹ë¼“F<{½*-5 …)ôcÚ -#oÓÂíç ç‚͘™ØÔäs½ºAï6?\$Ý “ Ûh¿øæ ´OÅ@¸º?ÑG´/á1¨÷÷7®š@ëûú¡ÓOW-•÷Šçµ6©qæÞ·lØ…Ÿ"õø2â“OcPp›Â‡T51 &éuS,͉p¾ËŸ{º%i›Ìe~´÷Ö - -8À#D=ÐÚ–'¼ËÆ€7aî^MXÛsänjã„h1B–¤ÖÑØÞt\§´äŠúã=/t2K(¦­H÷±X į̀W2­ál“åÇ W÷íÀyŠ|¸`¡ïì¹Æî§È…çÁ™kÙYÔë:½ |â­±ôÈìÓDáw E)³*j³sý«‹ÛV]öŠSl|œf&EÔô5L‘VÑ V ºZ™ÜŠ2Mù…%VÐ`ß¿1¹¦²¿‡T@@jLªPèȘ֨s*ô½§ Ëâå®è -I³ÙêéœÆ–T©-˜Q§5߇[„þÚ@ÂÇŒçoT§÷sa‘‚‚Ÿ£;?®IÖB,$Êq®G¶qÞâ¯PIJ •£Æ»¨(¡àœ•SÕ`RHáRp”·Í/i¼™É6vÁ³ªÈ»ÚôÎvñoU;]äW¸é­ysQ†$Z k›oÀëãõO„ö¤Î£ýÁË2Uø˜>¼sUàtO?úp '@úÂÜdÛ¹KuŸCí½ìe½oÄÜóÏrž‹ëéEÓ3ŒžÈèÎ#$ûYjŒ²äØyÇúÚIÂOÁu )–8 Çúƒ}Ú |þ84G'.«2c2´GÂdL¡ÌàŽ6(­1¥²ò&µÂgùð‘ôrœP$A€+ÒádˆÐíçÁ¼_äÓôèä8\áä'wÇT`S^JkÊ_HÿΡ ÇÐïK”.±®:¤vìÓîÓcˆä"AŽ¥Øm¤.l¬È¤÷4³å)¸ -4=_A€ï CÎyëºnlT÷SIÆlBŽãÇD‰gÿ¸e‡Ýl‚È¢s›y|œRJ¥sáŸÆ%÷›oßú§gªDT+êg&Ÿ‡ -û -ÀáRLæÃ2–6çW0*¯bö"QÛ 8Òœ3,´~~ý¨yܵ±®ƒ!èk÷}“IU?û -^ºö.ÕÊ;â˜<\éæjB† :æ‹ãk‡o™ùžËýta˜A=«(ÓÔ'ŸÔÐH•ÄN!z^“kðw¢ëKËŽÌ´«öߪ&ZÎØS³_­ž!¡ÑÐ9†˜mx,by5À,Ù{Ô´9s†s_=ªŒBÑ3ú§ÉÅé7˜MgðRSÙ aÅL4äÆÍœdä’¶î¡ÁZ’Ô§q½ ¸‚’6ˆõA3†Švbwq]o§æö§%¡×+DðXÚ2ˆPvêð7?³Í®=Dø"EL‰ÁÀ} §Û#WYççÕ"ú­Cø(øºÕèa ,Ù`­}Ta¼R›L΋ÜW’ï“9Ž˜oÖ”c/9ŠÈÀ°º·‹*£ÈpOˆjêû‹ ª`= à^SVnæ¶ô@&2†4.Ê0h-5zPÖz.Îxúƒ)Ë+™ÆÁ·ÙÃ!îˆF°²VóöqÓA#õ:ãF½À=Ca祥…1‰d1xýº¿ìø2ï«9Œ)Cí$§øV„" Æ1‰F¢rnêOèó$9žíÞŠòZ «>’qXøŒúÑú‡¶úIÛ¦Q!yˆ|¨(wàÌh"¾n£K²ñúB© -/5ˆÝï9éŠ1)ëM÷çY¤Ò\Þ5ö £yLU!?䡳ìšýõÀªi›Ž}Ìn‹‘f^;àQb ù¸RÿBr Ï¿I-9:5Å·À2>ÁÐ3d±†Fˆc,¬ã1‚¤á7ú>< -£2„‡Œ°±hdw,}ýåÒps9KuN4ÒÝœ°T×£bK؆F–i$Ÿ‹‹'p‘}¾Ÿt¥™´ðÞɨ"3±Ut¢¡úx²Ø&x4D K¬ZógÜVú‘xC¶‹]äÂØý9¦yóï³t¶Úxæ‘…HÞ#ü¡ æh -ø>_@[›cQƒY«]®Á²´%! -ÚÕìΨwtŠÓ ?oAZdævò6I‡¼)’þ‰èRUÇÜ (Á@Ú”µ²âi·¦Ð£ñ ÛåºÛšÖ/ì¢ó&Å%é±ACF÷Àa¾šƒ;öùZjûâ×QBÙŒãωÎYIN«ä{Ïy|—hT®t²RML‡WK&q¨aMPjÍ–_ê›Í2ÖÝmYL¡£Ý§ÎŒrîgs7¨NãÚ‹+Aׇ²‚·`¨ëÞÊN óoé…%¦~aÝ–o¥­~F¼».û#3{9D«Áä9;â ´æÍôQ¤m£ÆgsHœ;“¯0C[µÐñû8Z¹Ô€î>¿œáƒ¨ÃY„Üá€ø¨e{MA\\ˆbi©O»‚›îöŽÁAø¡Ö3 -'ˆqqµi½á¢C°z³(†Jœ=ã€àˆœý]ÔÞ8§š¶±×†3`žbµ^0Ï »©uDA"e‰57 "jÍLLÇXÝ'N-ëZnˆhK$%JrrÛ­‹y¬ewyä¬ÏÖlv-‡åƒÑ‚ûvô¿L‡|ä‹N*<‹c)u4¢×é²=hIë&a‰ ét•ÎÉV¢z*ºìÃfÞaJž¿+uÍçWâèÚK}¤¦ -cþ1α¼ZÞÃbi÷cžç„ Š¢c;Ï\ºFý‚I ¤Ø-óÒF ¡Ù¡·ŒhÌ$‹™òjLjÚ¹ÕTãŸLàIHJ+øæö‡dPßÜlvÈåAÞñ GΓ[ãŽ`Ñ#&ûîR…j—ܬ'VuUÎÔ‡íëÌÒ†·r€"˜Ž†(¾WwPßSè¤u‚3ØRUê·€¥~²ýbæ³u«jJäþnÏ×íºÁëi¯™ê'‡¹IÀ&JIÔô0>e¾dÞ>#Ç<®å³Ü±éúÞv‘¹‚ΪçñæWêÕ‰½˜¥‹ÞÛd ³ªÐçÄsFÞLÖ÷ÍÝ">nfhx¬ºqŠ~K~áåÔZçW -D9ÐÄ×ý«ÌNc­ü¤¶ƒ("ý÷÷‹¬~”Ù]Ç@Ž€pmMÂËSãÂy|ºµXùJgÑ »bdÌ”qs/}Q,†Ô"ǧLsõÕ÷¯JnJ8œ~ØÙ“«‘Óø?ÏzNèlüšIÅ m󯔫͗Éd.¼”»N~ÄmY» kD—hÕ‘¼m™³£Þ/}·±ù Ýö‡ó#–ùI×ý&¿²œ}X§¹ýQ3öÉÚU¨¥ûÁZ*蜷,û@Õ>ºxY62’«’HäÙ€«!<¤ðá¢'œ‹k4»ï™iÓ‰‘³Ïrï­ˆÆ(Àf9ÁlCšã1xxçûVÜjÅŒDÂA=¦p¹ËÇzî­üv«ªÓIÇ¥†kþ@ÑzßÄfOoÓìk”Nâ6emWáî™äQÏäé‘ ñ…]øYu“nȈõ›¸qBû±$[ë:ЋÔÈÏ¿mßÚÆêe+(Þ„jØñôLl±ê3‚¥áÿ¾†´b>1U”Îón,Ž‘çŠw–GüD<Í1)g¦Zµ÷†Ýy}+ˆR &“¥Ä.Ø*âaý€èD>s»,6'ó?Þ0MR4¢ Kíþ6 ´9òì1@ÒÙ+ñ=ïÄ› ¦…öÞNëe?ZÎÂfRc¯PÌeš²ªÙQÚ"äI8 -4Æg÷ÎüôL¬¾¾Ò?Âlœá¶_±Ã؈õ†ëî$àÝ-:ÇDpBÝu£Cbî›#13º;Ï -*‡Kò·¶‡;¾-’"+ܦ˳-ý<ÎÈôXüöYëÁ’áJÁ‚¡$üé¥Ò.&>Ùe¸R¸¡3ŸÁÿ]u7üaÂõñ.R8‹zAµÓã~nTLûçpYTÓìª[7ÒøUÒð=|¹üº*ÚÂ_AŒ/–*CØ¿?CÞúh67÷ Wáïx,V[ýªŽ?RÆò^oH–èÈ;Ǩ=käàkáÕÊu3®ÉẇNbnN’²‹Y)êctž-yá¬JHÇd`‹“mó®úí}KÕ4¬½9«–øWù… YÚá•M3 |•Ð§D N¿"æµdYDé@ÖáÄúÑ¥õÇ*1öEÒ.úMµü–r± ÒüØ -Á4õ5’+Äó}†#‘.ç­¤‹R‹ë -õS׸­oïÖ‚•fx{ì—?]Ž{øjA}øé{v$õFBÇÃh¾/oF"U¹»ý´P‡SkwUŽçî0€8â…lù9|2öêlá˜,RºÆ,;?…Y¦y$…䯠‰+aÍB•¨ì5šEÇ婳Ž÷õ¾Ióþ†n$ŸJ±šÿHbN±ãHÿ­^Ù’Ÿ¨aêºV§hÞšW>#žµºra·‰áWvdyóEúC ‰ÙãÃ/c7>+΄É6¸ôªû,,V>'$úÒµe P¹…'›ð3f3[l64d±DÅZX¢bT<0o½|ÜÙ—‰óGû¼ µ´$Í:©Îs×™[Ïî -|f÷ãþØ‹ k–±¤oÉögä¾–Œr‡¢s%ž‡×Z8–$ä-.¸ºçT/f=þ(.×E›F¶RdÄ3xîæÀ ¾3ê¬Òßk¬!ŠúäGÕ¼œ6LØ[¹-…©)Ì%…g?¿!W<דx˜¼ä‘xmÝA—*ŸûèOLçûÒþÚ‚š…ˆãw0ð¤¶VEZÓcJ§v=‹o#›üÄHP"ÏÙÎ QºØ¿fÜLœôØ’4¬¥½e6y®H«ˆø¾3Š¼›»g1x1ÖÞDµà^°ýƒ~H'3Pf !PfZè׳ !dƇ’ÜŒß!ò%;ãhGEÔ[–Y5;­míJQ6"RäÞbÁª†9Uöº£hDÒŽœy}|#Ú“äýºÑûà'¯![ÝùëŸ"‰Ðý…åÕ‚'’‡•¯ËŽÈ¾„¸:3kòV™_è (JRañ+$–H-œÀ³¶VdoÔ³ H\[»°údÊ,ëÜÍÈ5…ðNÂ#žšÏGÞ¥ÝsÚb{Ðí™igÂê`Å á?¿ó"‹›—qÍŒâFD^õãÌÔ¢^Gw„á]£vž3ø)&). -J̺6I>ìß $‘–HåÇ(ÃÈ;LØAB¿ªƒKéíqrm”ü¼Ëµ˜+ู؂۾Ó&§døäNÃ0I¿r!7%tj[®†ð¼¸ ‡¿¬e°¢zñ÷pöZù¹Üvi3l*.p.&€Ñ· Kóâd¹¨É -ÃŽ¿N õÆç*匶ölIUQ8(± J 8a•˜· 5«X~+Õøëam:Êœ·jP¤^Jœ§î‘¸ÃsÀÿ‰û‡FmA@ [r«@æ [¼¼'O24ö‰¨-ç¯Ô‰Qy"ð빟z¿–2¯\ÅC ]õõtQŸ;G@(úŠÆ^½|B(8Ú¯–×ÙûsHbM,)ÀÔ û%3ßJɽ@ ÄgJm)l¶ lû$Þ_Wûú?Á‡ä‹Â (bS¼¤n ñ!Y!~QŽžß {{°Q$¤ïöƒK[ N(‘æ[bÚ©HQöœý3Èð¹ùf6ø æ¡ -ƒmÕR¯ Ö$õì ÔÛ6Áò´K·8} bS5Û €UÞXÈs^ƒ=$Bÿ©†Þ‚€`õ©£X&ýµ§=²w3ØÔ]ö§ã^êÌNóÊ»Aøðc0ÎäÚ5¯uÈòtœ) ¼Ã؆Fê|ZEò‹Vjê¹Cç‚¡þË€y·rûÌÂqëBªUèü õÉK%©BIhs”¨ƒr¾‰Ÿc\už…L}dþlùÅ#œsþµÝ -­­Ûä¾xP1S'¢Ä”ÀÏ/m*5blð•šZh—E5Ú°ZÊ‚?7/ ö®Ê¼¢¾Ø‡ç]Ï|Ö;ŠÔBùúéíôý'rUS”ÂŒ,ù³Ç?»FöÌ’±ÛõÚ$Ämk¥kˆ"ƒVa+±<•šºa¶>Sû%­äù‡¸’øVî™ÏáEü4¬:ÀðÊT?ëðÎhx®‘ÕÓéUDÂãÚ%†è( -Djà&$ >g÷5«d( -x­áO¶S.eƒ›»NÄÑűn5wÔÖ‹IêÞ(ˆÂ8ãÞ×Àn†hºkͬ½P#éQ'ÕíîaT¿£þ$RyÉà–&S(v±8m`iʽ]rþù¦³íJùQ5x9–Bgaàž}x’2ÍDÑÔ1 IÐÏ4—ÆÇûèr¶¡¥Ø17€!C,o¾ÃGv;§T³…þd°{+W™  ã;…Ã3øS­ª4çq’_n¾¦whÔ!^öv™Cà2x‚§Ú,#FêÇÙü/VKÇOŸi™Xôõš—J6ÃCk -´¡é LŠ.Ô»4,›æË…Ü)]Ã*Vi}¾I&È éà1ƒs¸g´YÄ1Rë}}ã$¬Ë¶Ò|>”OÙ‰@½)Ûá`LÓïËñyŒoãwk5±ÈVð…SŠËm‘í ¬Í‡Ÿê)"q%U æ#}VíÈ·ŽGØlxR×{häYÏøç%»Œk#’–ñ -°û€‚ß_7ÖˆýõƯ¤øÖe÷®eßêT\qÓýÖ®Épswþõ§ºfidG#¿C!Ð3²þþ´›ºÂØe.V ~4'¿ËNƒë'æîÅ-cæàXà."†—ž®W½xyèâ0„¹^Òa-€™ë‰KížØ—%ùûÛFƲ Ðá´”Ýn4Àté—{âÊy¬ \I; -Ü$( Wgœî‘·xeµ§²Þ¢Q«:p¶ÐšaBš³·ØÄ ô¥7'‡Îò Ì[H›†{ ±_‡*ºŸñ´í!NTúû[ìD_lïñ (bÂ/Ý}¤)mR¼™~pÁþØL®†PèK¶ M5”ð?Æ®*äQF2±g™#ªûغà>~‚;H°‹¨-ƒô9ü·—5ûÎG 9„õKƒ[Óc÷­~@H"…°Î–E(Mõˆ@å4/”š0ù{oNcáKC¹¶un˜íÌ——*ÕˆÏh1+(¸Ôýd04—DËÓ`IRïÐðý„ã‚çNÝÝ45öH3‚-]º5û`EJd>¯3Ãæ B­gÍR™n"éK`~[›J:4qð7v®`=RŽ}EñŽ:è¼süôŒÍ˜4¹nÏñÈôQr,É¢ï°ÍkÄêãÉÌ^Iö-ûØLƒÙ£1#iÕ³q{ÁðÅÔ#…·¦˜&#¹–æÆÌ0žpk+«£ç;çR,‚oUñ¹_nJR -†é68û½3¿âØ €ÙAehD¡–~ØioÔQbØFÈöyÍpR<‰˜ÈfÏâŒ&a›æ(z -YìT”ÄÐ_ïCŽÆ} _zA-nuò®Z˜ÄögúvXPô‹•5tº ÁúOÌ]šÛæÞÄUhN'u6V‹3án[ }¶ŽMïm9¤‚Ü.QÒ(Æ‚Ølšõ3EȽ¹²FÕ7CÇ¡¥ŸµÂü‹›¸¡• Ò†Ô·X>År­V¤«´þœùÈ87‹Ðæ^’Ü#ž³Ä…*[Ã00Άºª\-zÂ0³•CÄx:M«»ÄãVNcÇICÃOgUÛ¼¬*¶@ÚU·ae’+b˜ÀèÌ¥¯é¶QñóP/Anžóu–ÇúeÙM"èzpJ™Ïò®­"U‰ ñ+“ãé?§ÙÂf%%íl¿çkíæ¿„òLO^‰ªãÃFÒò’Âiú,ÞTõg1ª -l•"\\â„o8½²b¯‰{åIPwví ËQæH¶$ÜÉ´¦ÕL`e·©ѲÂJ»ýT‚Ε^jr˜²:ª×»‹¾n ³d@Ž +û?Ju㭿μ¹|ÿ¼Pæà4þôpÿ¤:Tº·uqƒkZw<㸺 ëùZwŒ¡ò²õ¨~3áÉÒ¸‰{ÔÁ KùKªu+•à*úÜX©|,<™¬ÂÁICO¿%ÁrÿäuŒôtèbuîÖ€Õqn8.ó³£Q†µ¼fz«—§"ù'ÂÅïj®–ˆ{vða4ƒž¦>äâÑ^f¨¼Ni)r)[v/#E¾ýœûŸ"|å7Ô„D 2Ç_9VŒIPqžæ×7VÓFÔlìH#ÜxÄê/,û¼&-ˆ{)­€{]?gšëyäÎî+Ю<ˆš`K“sÍ,žlù¿ky"3‰nèKuÃíuÈ2€ú%/†nýqˆîœh#L—í³íÕ8.«Îo¹¯3>Î ¼-"“»ËÀ»heè¢FI:NŸ¦ˆ"|±ZL{±·Âó†¶Ý›·jËó+à£]¥pŽ7j1è=¯7"¡Ø;® p9\E®kT9)5¡zHñaHôüŠCÇ4BG›EÌ«yD¡–™ñ^òÇKŽ%°V^ùÃDJ½yØLùE'0=2òc¡ÌÀÑ•9„ê~'žÅ– ÈCyG˜õ”¢Zf ¨\’nß&ÀxI n\Ó—a$ΨBBbÙ"½÷2Á¸ÌÏh=ã:ð¨fjR9cÁ>z LœµöXer¬uÁu6Ù4 à"ñx%J#©Ã gǤMYˆq,éó•n‘á@øÀýf†iÍÿ•«yܯ£‚X—'ikZ|èdü%Î0 ,cYÎ]o5ÊÓÓˆP|øTëZBŒåæxM~`Ôä×P -Ïoé†-«ûç²`¹ Y¶ñ­Î±‹èÞÛ°ëÙC¼aßèß7åv¸×^ -뜻%CÁÌ‚¬UÖ´‰Maü€¤Ï¹uñçó„áÜê :œð؃C»(|cºÉ& §ëéòɼ¯È8'Ùx被 Šóp<]BÌý «›[¤„Êñ+§Õ˳ž8Wb·ˆ×[ÍT|­¥#NùæQ¿§CÏWGˆ|SmÿFÞÎyl±^õãþ™ef C¹‡¸·á¢y JòëL;˜L]¸ÞÙÙeÂAÚbˆPAIÛä#’¨¡Ü‹BÕÝkñ:FñHí`—絬¦æÐì âyPÞÛúóÐn#Z\›é72L]ËŠ“°-*#ÌÚº§´á—µg摃ì“Ùðú”ø>“ f«©¤7i0˜ûû/‘ªª:ÜÁñ‡n¸»¤ß3¶îew´°éÜÑ gÌ8QqÙ]Q ×·²¿èÿöÔ¤¤5FéÂKÖÔ( ÿRÂM«bl®ñâÀJn°Ü>å+cë~“¯Š1‰«¹Ñrj¶éßM —U;hGË’ºDÐWRIÔ®H$š@ì2‘ÍA´¨ÄDú&„IU©¦"ŸöÐ9~D”eõÖÔ ôRê¬ãœé(¤Çn.”.kø¼ ¥n`ïà3ƒþ½»þsuF(”ëw+ÇœðaÚ¨F~¶zñyþþ{ ‡>gS(êá9‡&IdÑX2)Fžb¡8ÚËp¤«PX,Gæ(xõš2œsPº% fajU‰ªh.,w¤Ñ« -cLÇý2 Ža®_š²HÎh 2/ƒZj@¥Ò¦7çnîS}Ž@N:°› è3ÁúZ½Fõkwy<Òè‹ÏÜhŠKÏ=s+8T¬ªÈáöÀ¿ Üvë%¸‰ø×îD¿=pNÞßà`å7—Ò‡Rtóž ^5•C{ -L­ysNRú?]œã|DuVò=Â+÷œõç°üdË,󴵋¨t}ïæBÖ 9Q’Ž¹¡¥PÖ•g$±»ÖùW7‡È0‰dÐs`Å/]N˜Cñh¿5÷‹$YlÄžìžvÌ6èëZü¾Žñ:á3~|±‰Q¤ãïÛ_6tºs´“WÛïµÈßFgùè`æ} |5*¦ -…3© ¤ 0.aõÃ’ AÜÿJ&ªƒ0C|R*ü(ô¯[ \eZ¢¬ ÏÑZ àú½á´sÅ%¶_,sEjâ’ñƒ]]¹QÙÄäã¤Óoxé{×ùÒT¬ ¬>ÔDu±:eƒ„Ž¬‹C5áj¬QjCìé÷¤›ìÐ̆£Y•Ãé²{G ·$7wA”_sïâPs±¢Sš˜=ÍêïxEJI7z˜³LYò>‚Ý'ò.ä?4û™36L®PæØi¸Êfá]Y­IÍuÅSÛÁý²n’YWºjRdúAùú†ÄMw¼NÆÒ`´­Š&'"—cxŒ?¦¾©Žd[ºhxB{ü¼ãXæ}•£689®ªíV3*àV,´NÃIæ®ÎúÄ’Ÿ]ñ]Ì&ßkÏ—Ê­!ØEø>µBGD“ÊÚ DÄ`ŽÀzë†ÿD9ÜD•^ãP¹¹¡ÒC`pÞ¸q¶SÏ/@j»_»;Æ),H¿¥ÌNeÊ„cwLˆ^ŒM\Ú‘/Q„Ýr½Î«D¦F¡CzmbÍ$cÁïW %—õÛà”\Ù’æ’.îrËäU+ôŠÖ½U©+A´5ŸJ¤Ï)ªãÿä;z_{®ðø– ©ŒJ !uêˆÉ3e|Yüê*¹ˆcËûõ);ß.†úðò#ãDhö€ö‹G¸èFyç;u=2_–\?c«î¤~‘Éü5ÂV?ø -ƒÅÊ~Ïz_úà)ë¨R÷Ãfæ4Vf™k+{Çc–®ŸSxéüýpŸÀ–éò¢Žú‘›B6Uß\•AM{ƒo—áŧÜùþ1÷¹ž ƒG‹KÕeºd´fÙà&ö÷- ¹÷ŸÞ ŸLHÁ¹‰àT­Lq> ã3ïçÙuÐ3õ.°ó»ÏDkr%[’û V! =?(F‹V>Då†TÜ'LÞ»tðþDì0åœjiJWù¦¯:•º?˜ákÅtð·Dt,e¹Cëàì8´­~¶^Wìh÷ðá²› ó&pÀs–K‘v£yª¤}ÜYhÇû/q˜š\—1άÄ.5HLUcß|{¨8óŠò^ß4à`äô·ÅPß½Q5ãŽèz”=ûý¯`ôô«î½A$äÆô¥=ÿ7<‰†ÐZLLSXëNŠ}Db6¶Ð,èÿv;=›#˜‡Ãc“(í„FrEƒÎUA7Á¾ºñ°¤‘ïÁ¼ Ÿ³ËÔ 0 -·•—Vh/†¸MƒD:•ÄÇNñú°•:#Þþ>PLÇÒwðQ5GbÌñ Ò禪ð@` Ìf(iVþÉOëµ6 ‘–`.¿ô#¨Ý'Uº-AnGG7<³Y6ªãvl¤ÎÝ©æŒú‹;Ù¸¹‡ÈÈc?m·Ò†h¡ˆõ©åç••RäÍ×”‡L|âÊLwõø Ρò°¤¼açYKr¼ï¹#ÙÖJÑkW½b%òy°q·ŠTæ9æ‹Ló"$N¬½7ôž§È¿òL¡åùö;û]€ZÆMú›¡¦ýj{wAÆILTI¨“èÔ&ëƒö…ôâÞ %§ƒ(1ã:«;/h•¶µôÕ%óUÖ씑­Í±i¬rÝdUæ¸ÂÃHÂ3á61”#,*PŠ –üb±·Tx8ÙÔ÷{ëG79yçЪ6XÐ!ÿI;s¨z0érF@+ Ë1à ÿ:›?׊Âü¸1CÖyÃ':göJ7ú;li (b»T•}žý“¿^»Ý ´¢xnuFÈË`“<¯üv7naóRŠ@‚ž¬ÏéI8vÁ"}ˇ¸"ólìötg+(Ñ›ÉêÜÃÆÝÛ½Ñã¡÷RòC0)øçR‹ìÛÏvýÆ[½æ…ðö&->£ê£ö’ÕWÄâFëR$›¾„ñ\x}\XhàèÀG‹õ²vD=Ø+A},A,[߶UìÞJÂÝüš³©MO£Ü=A -’Yý”:®”èAèÂûXqQ¾®ãÜþŸœß,è'ì-¦E“qàO¹)• ìG³VÍ4ºf,§œR¢X=ÒÄ"Æ œVpÕŽà"ç¸Éü 4¥^Ëdw3{ñ¾T ¨Œþ)þ1²ðùfäI>EÄ ÷ó…>W¹;A©jæG’òÛB¿¶ä®.L)y{kÂ^×ö ,”K@[ âŸdOÜŲÝ_t NÖm,b°®Ü‘ÁnI¬Ëê7ó(Ž³ôßç*ÂÝ›6ÄRr.ɹúûHFÑ&廚‡,6Êé°¦NᮣÁ7®/ŒR¡+ÑdKÆ¿‡nÀWLÆ|Q«>i"ÓúøQgd…>D𸋞£Sœú˜nþæ—.­ŸyŽ=‰(Ÿ<õªJÎÚ ý¾ôc OåroòP‚*c…nAã7€gë÷-3>º›ø!-–‘h^©©< ®ÙÒ]+,à‚A‡Ø  •;…ÔzEåSþ<Ïßý‹Ì -É´ C™Ñ.ïðÖJ®{Ò¦sŽyZÍÊ;±êÈÂìÄk´3ѤFÈZ‰FÝmp ÷:%•Ùd -Ü)„lk2'¨ á"”Öë±âµ|syùͱÕu€\çÊZ'YýMªI­‘_£ƒ~Æ)bfÓíÝt=–ÙáÅbSÅ#Uk.`« -S­‚DÍ( »(ë%ªUÎ)7%g:F—°ÞÆ {¡ßk·1SÊ» „]« -G7üæôÆn}Ò{«óef‚‰@ƃÚZt'ˆD©Ñuèb ÕËáÿkŸ,ÛšŠ( ¢Ä’n¤Gw3pÔèÝH·„4 I‘.é–îÝ%HŒîîÚ{ÿÃûí>÷ü€óá<ÏñÊ@J>N‘÷x°íþ®/Àï^ÈnÙv®Q’U õ×=[#Cã]6öçÑŠŸ‚h& ’Œ# ëyƒòk»6úq +xÚ¬ºct¤]·.Ûv*I§cul'[£b§bÛ¶mÛ¶­Ží¤cwý¼ï·÷>cŸóëœý£jÜk^s^×Zë5FQ’)ª0›Ø%ìlA ,ŒÌ<5e ECkkC ;Y)¡5௙’RÔh²°³3y@€Ðð퀅›› jgïîhafPÿå ¡££ÿ/Ë?.#÷ÿ@þF:Y˜Ù¾þ}pZÛÙÛmA)þ¯U€@È0µ°Dµ¤ä%Ô’òjI -ÐñoŠÎFÖÆY c ­`jç°þ÷`lgkbñOkNŒ¹„†'{ ±Åß0 ›1Ðþˆ`t´±prúû °p˜9Ú‚þÎd°°5¶v6ù§€¿vS»dïh÷×Ãæ/ö—LÑÎ ädìhaüͪ(&ñï:A憠r;Yü…v¦=MìŒÿié_Ø_š¿(ÈÐÂÖ ºþÉe˜X8Ù[ºÿÍý—ÌÞÑâ_e8;YØšýWôG ™¡£‰5ÐÉé/Í_î¦ó_}þ—î íí­Ýÿm÷/¯ÿ¬Áä´6eD`ùö7§1èon3 [¦¶Š”­©€…ùßvgûÿÀ\€Žÿõ?{†æo†&v¶Öî )“¼èoJõÿÊŒÿs"ÿHü?"ðÿˆ¼ÿoâþwþ—Cüÿzžÿ;µ„³µµ¼¡ ð_A€ÿ¸c²€. ãÿÍÝÐÆÂÚýÿðß=5€ÿ®RhælmèøßáÓ ÛšýU„›‘ýßV ' 7 ‰¢ÈØ`jhýwVÿ²«Ùš­-l5ý×8 ,ÌÌÿ S5·0¶²ýgøìÿ†€¶&ÿ½ü¿2ý«x&q) -I1ºÿý^ý—Ÿâ_ýAªîö@ÀÿŸDCÎÎä?ÿ°ˆˆØ¹<X8™ ¬ÌìÝ߃ÇÍÆâýÈø/"–ÿZË‚-ÜÚÌŒÌÌ,€¿ßÿñù¯•î£·5¶3ùgǨ€ mMþn²ÿ4ü;;:þÕö_çþoÓÿ±þ×vÝ€Æë+vƼA–i™é :ÜÜ‘)1í>È‘`ûÒFÕ¢¿»^ß´°]îJƒÚ`ƦžßíîËçöŸ‡Ò´Gc}8ÖT½)Àë|"o +šþô­¯œtGLz¥ÈéQž7K²;P?8˜Õö¦””õJ>`ˆg:Yánžiü(\ +ü°¾<Ù£ø§6Äbw¡5aÔž_|M<}~¢î½…î?$¤Ë‰…§äuBþéçC(øC­B¼ªùÕi{Ju ¡glŸÏÏìC(»ƒ¢ÈbÓËZÁçjð§fÌÁpC@¶VBjä+s^"ò“£œŸpÖj×Ñm¡HNZ¬¹Šù—;Ão{ô«OŠ—©š}¾ŽÈïqM gÀÁõ@‰Î +vÌó_ŸäsýðKÞ`zŒ—6$Aïܪ“³ÖUª Ô¼qTÉŒ!ÝNë”›Å/˜4ú#pöpò>ÙMBˆÁrêM<õlb®‚‡é‹à\jÑhŽ!··qèš–í:—… u>5±“ª——‡³›G¿:×MÎ{òεÁéKœJC·Ò@µ¾/)qpgŸ”­µí‚ ¨•Šgý´»Û]^ÕÞƒÛ1Ü ½û߬Dþµß™á…°ä]xŠ©9ØhNT:™~«„r…7Ôè¯Ar Òx‹'£º줔(IÖR×Äf*®•5`™xZi”çe™•Vê]è®tßó ¦@ßë¨ÖŸ :º·WH’gå Îãí;g¡ÎÞqQþ6ÿ*<È8Ô²nir{:^2‘@àcÆÃLˆ&º¢a™³SûI˜ ¡NÕÊÁãɤðÛeã‘[‹}­H}öA÷4OöÖgí +„7N•{œP¾©3¹¥Œ/Ä[Ö]ªp­Cƒ’½f±eB8|* ÿá´%Q0d’hyŽÏË9€œH7þ5'i}=½ó{LXwÜëaä6Aº„ï5Ëo7F—Aµbñ#¹‰…O[?ˆny= ¯7…³¾ÏÆ_žMSÑÓ<Ÿj²¹O-ÄËOrlºÈ|!•¡ÀºüV„, y©+¥, ßê¹2š_Sûà£#üåž ·${qÛF2<üm=àmûS}ü{/°¥ÖÌ:i­‚ƒ‹\’³¦ææŒ"×îS©ÄÙM>?gЀñ¤kMí!,£sê-Ð@‘œm.êÎ@ušltÚŽ£{±/¦£¢a?©8AŽ°KjðæêBQù–‹Mør“J­õ¡F7ÇET¤tVÂÌ''¿3ÉØn¦»3=æܽ‰(®!að5÷åñŠ&'×ì ®n612"à8F•–²£ _;Ù¦kžO„ÝÓjwX í¨FVfzÙâ1ÖãðÆé›­iàRQKzó€ü§$·+ ,o@rÂð*šAnú³,½,¶¹}ºeÄ)ywÉG~­(JYœ…Gåy T0}O7&·wŠÖŸ D©ÓÙé@ê±=Iµ~½sŽè#"Jk6ÿ´µªt‰`úb˜B½”ÿ}FžÎå”ê¡scÆ_»K3B|=iLõ÷*öY/È× d@OÏ9FÔ•Îk…&÷;®/Þ¯/]ÁH}ÄËg•ëYnq¿C…å#!èkšž®¸B<.›/æǤ¯çXd\ºiÐØñ-z+ŠÉ¥KHõQ´ h¦ÿFÏÀÁÕØ wˆÇÕµÊÉàŽÌ– $^?Bäu):pã uÖêShÏ©ÏUbŸ¼ƒMÝ(¶&gPð \`{$¾ɦc¢¹Ýà%_ µæ”¼:ËÔiÏ¿J”­¶¸•#HÆÌ)o=A¨|iÃHo5¦x8ûÕ¬¹Ùî?[8V=—¦­Mº.ïS`Ç¿%¼à%¨âÙÞëju¦JÕs¦þð²=ö–ÒkŒVH‹CÁVÑ"¯•›ˆøKŒÉúÖxÞfªxkžv7`­ÄJmœ,™iì‹—³é éM|ó‚X2<».Íhì¾0úd²n¬ØÕ ŽgÈ-KÇkenI`sã\ãQ +ï™°H¯Ñq<)XÍe.vUÀŒ‹Ææ6¼j÷(OóÈŠ¨ð"AÏ@ ä_ÞžX$#–alxUeh[fdþ.Þ_lÔæ8-®(˜ÙÉë¾—©)ZóÕŸÐ-Ž¡ÀULµ îu!lIã$)ùºI@ÂÁA5ØÀ4“î¬Y’ËËŒÞòQ€!I…ó +Ôû´Þܼõz2‹÷¤#‚JÇ_N‚aºäYCÏ>\z…„–gĈÏs³Ìjd¨¦!X¸ˆÓ wÜ2mö8Ùp!os´C?yTÿ@[Qc×Üÿq…ÒŽ¥Á=5(æΡm³× ÔIìÑ/Ôa1VGKj]Ø w´Ú}oä¿8A#çÁ°\SêœM,ZkyÀºHí(¨ ·³ÔŠSñçöš]MC~ÌTŸÜ¤Pg}÷p€‡€ J¥'Þ fØ‘Vý"‡øíbÇdsªÝë~£vz-t±~ŸU²ôn5\±ìÕµIýS«Uÿ >¢KóHšÃmµ[»nKYݼ øËÈ|(ÚÍs@w³™ >sϽ°V…–šü ®ÙÞÇ+×Xª‰‘†€9õUW«K8†?é `(zšŒÜ›×Io_eîÁ‘Í>&p×$ÏoLòŠJß´/õý…›R-“ÃOÃÄ,Á‰ þØFáÒÓýâùu.Í­Ž©X€²£ÝF:ûL@¥å߸‰+¸CVçD§›î$2ܘ±­¤‚Tô¦:‡4Oòü?ŒÙì7ØC *™VBÆò6Vjó­šÛ¾§ ÷fÝÆ1÷ídž ¿ô |ÒÞÞ@OBG À§˜«T ˜Ã1=Úuø1&\ÛTĉº(Ð64Ï›§¼ì¥—¿ž6ÇnÚ4~ÆcÅÛ[zFbÆ’RJ»žƒ.¶¡ÖkŽãÃÞDþÈÉ+GâzƒîÔ¹m_C|øþ0/–­Xµ³-`_1+Rå¬Ë¸ƒðžM*&`*ó|ÜTF-ò\<óãT¢Щ› 7³ Âý7GÓ\[C2Öb”Ÿ‘„fÊPš{í›ÔW‹Ìà±(B(¾\íɵ^*L²€N8)”póiÿ *aG„ò7(…ÛŸòŽUvÝ9ÝÛ” NŽri$!誨’«¼Ž×ãý±"ðníyæñàg±ë?ϳ· ÓøÖ8Zj"kô 䓆üùàÆUb´r¤ |Ù÷̓ÌÛ­ç,¤p†é÷ƒ³ÍÚ…ïßý«½ >õz´ø#㉸Pb¦ÝÝ7K"*t²[ÝqýXÁ2¢?Ù®Î>¿cQµôÄ +³ì$"½ƒd" <Ò-ד º!ú!áŒI™o‚öé­•“0óV;q„¿kù ÚAƱç!²‡Í¹iÉ—?E«\6ï•qV½w8á’Ž_ö3—‘¡DÏ RöpÓd‡á~.ÖàËR“Eû?ø¿±ó­šK1à +v¿»1 ëæƒÙ(ˆ¼JCü +à+N‰Ø5ÚNjÔÐY›€¨áàݵiï+Zf;ˆ?Çåe³ÙvWà·kŸÒÅüµ—¢I¹ë´“F4{½*-5 …)2x¤iÎ#§·5ž.‰©sV ñº^ñ¼ëÓýªÀ›`õVÙÅ¢UR¸¼ûpœ“åæ41$ûFÐ8ªŸ8 lV{v”ƒîÞw©³î~¯ìýý«&À꾃~èôÓEKå½ây­ Dj”¹÷-vá'†H=~€Œøä“þܦð!UMÌÆ‚qzÝKs"œÏòçžNIZÇ&s™/í}‡•‚ðQE´¶åï¼1àE˜»×AÖö¹›€Ú8!ZŒ%©u4¶7×)-¹¢þxÏ ÌŠi#Ò},V{ 3ê™Lk0Ûd±À1èÙýåÇN@ˆñ€ÖXzdöi¢ð»†¢”YµÇÙ¹þÕ‚ÅmË.»ÎÅ)6>NSã"jú¦HËèË­LnE™ƒ¦üÂKh°ï_ŽÆˆ\RÙßC* 5¦ T(´eLjÔ9úÞÓ…eñrWtA…¤ÙlõtŽcKª¿ÔL©ÓšïÃÍCm á‚cÆó7ªÓû:³HAÁÏÑ×$k!å8Õ#[;mñW¨$¥„ÊQã]T”PpÎÊ©j0)¤p)8H‹Ûä—4ÞÌd9ãYVä]mze;ûµª.ò+ÜôÖƼ9+C­…ŒµÍ7ÈÀaÀõñú%B{PçÑó²ŒG>¦ï\8ÞÓ>\ùë +¾07ÙtîRÝçP{myZí2÷<ijœçâzxÒô £'2ºñÉþD–£,9tÞ±¾vR§ðSpCŠ%è²³O»¢‘χæhÇeUfL†öH)”éßѦ"¥2¦TVÞ¤Vx/>’^Ž³Š$pEÚŸ ºþ<˜÷|š‡+œüäî˜jlJ¢ÂKiMù éÝÙ—áø~‰Ò!ÖQ‡ü{Ç´ûô"¹HПc!v©+2é5ÍlqJ®‚MÏWàï3hŸsÞ:®ÕýT‡1›ãð1QâÑ?nÑa»A› ²¨ÍÜf§”RéTø§qÉíæÛ·>Åé™*QÕŠú™Égš¾p¸ãù€ß°L£¥ÍùŒ„Ê«˜½HÔvN„4'F ­Ÿ_?jw­í€ë`Dz?ú¾É¤‡ªŸ}¯? ]{•jåqL®tsµN!CPóÅñ5ˆÃ·Ì|Ïå~º0È žÕ iê“Ojh¤Jb§ =¯ÉŒÕÿ;Ñõ¥efÚU»oÕŠþ-gì©Ù¯–Ï‚ƒ‡ÐhèCÌÖ¼Á‹Xž 0Kvî5möAœáÅ\AW*£PôŒ~é_rqúõ§EÓ<ÕÔCvCX± ¸q`3'¹¤­„{èF°–$õh\..‡ ¤õc½ÑŒ â†Ù]ÖÛi ¹ýhIèu ü–¶ô#”;üÌÎl²k¾HSEb0pßÂéôÈUÖùz¶ˆ~ë> +º.F5|EKÖ_kßU­†Ä&“ó"÷•€äûdÎ…#æ›5åØK"20¬.Fí¢Jà(2\࢚z~"‚*X¸×”•›¹-=‰Œ!‹2 ZK …‹3…~`ÊòJ&qðmvpˆ;¢¬¬Õ¼}ÜtЈD½N¸Q/pÏÐ@Øy)diDÿD¡L"Y ^ßî/;>Ìûjö‚cÊP;É)>¡ˆD‚qL¢‘hF‡\§›:ÄzPªÂK b÷{Ž:bÌ_ÊúDÓýx©4—wB<ÂhESUÈyè,ºf=°jŦc³Ûb¤€™×Nx”ØBÞ.Ô¿œÃóoRKŽNMðͱŒNpt ØA¬¡â ϹùèÓAØûE lÞn_V~M TÈüð +ÛIX¨_QW:ÿµ ]úÐÀï9Lœ`]fd„ú1ØñœÖʨó™¢r +EþØÜlgøÕ_:jûìe ‚¡¡¬¯ 3"=%…m7áûìç‚=~WéFF× 4"K¬³DÜ'ªÑ?¶úï…nÞüú +M q‚8IoÜ•ªÅö›ÍL-Ô…`€ToÞ½*Pvz:N“x ›ÝžÜ™3*IŸeÀ4µô +;S9Á%]9Ao¢ÁN©‡’p6/€ôJš6:7õ"élÈ2îqœÞ܃A«ñ)Û«Â!F—?+Íõ­ÙV³d$7ÁÌ&áýWW(Þg0 ÎÜ#Úž8¤;ßJì­¯ý‰Ù¡L¹ŒÙOÝ5 oYÖᘠ+AÒà}…a™5‚>ÂÃNFØX4²–€žÞri¸™½‹…:'é‹NÎXªËQ±lC#Ë4’w‰ùŸÈ>ßOºÒLZx¯dTH‘™‡Ø*:ÑP=@[›CQƒi«m®þ²´! +ÚÕìΨWtŠã ?oAZdævò6I›¼)’þ‰èRUÛÌ(Á@Ú”µ²âa»¦Ð£ñ Ûå²ÛšÖ/ì¬ý&Å%é¾ACF÷êÏa¶šƒ;öùZjûâÛQBÙ„ãljÎYIN«ä…{Ïy|—hX®t²RML‡WK&q¨aEPjÍ–_ê›Í2ÒÙmYL¡£Ý§ÎŒrêgsÓ¯NãÚ‹+A׃²„7g¨ëÞÊN óké…%¦~aÝ–o¥­~F¼».û#3{9D«Áä1;â´æ ÍôQôÃZÏú8w&_a†¶j¡ã÷q ´r©>Ý}~9ÃQ‡“¹ýñQËöš‚¸¸ÅÒRß +nº_Ø;úáW„ZÏ(œd ÆÅÕ>¤õ„‹ÁêÍ¢*qöŒ‚#röwQ;£œjÚÆ^kNÿyŠÕzÁ tjY×rCD[")Q’£#˜Øn]Ìcõ(ð(»CÈ=g}¶F`³k940Œܧk¤ÿe:ä#_tRáY L©£½N‡íAKZ' KLH§£tvH¶ÐSÑe6óSò<ø]©k>¿2 GÇNê#u0UóQŽÅÕòK»/ó<'\`ÛyæÒ5êLZ íèÄn™çšz‹ˆÆL²˜)ÏvŒX¡[M5þÉž„¤´‚o®HõÌLg‡œQäzä<¸±5î6Ýc²±ï.U¨vÉM{bUWåL¼Ù¾Î,mxÙ*û+‚ikX‚â{uõ<„NZ'8ƒ,T¥~ Xè%{2Ñ/f>[µª¦Dîïö|Ý¡±šöœ©.q´Ÿ›l¢”„AMãSæKæí3r,ÁãZ<Ë›¬ïám)œ+h¯zìÏa~¥^Ø‹Yºxà½M67­ +}¾Q@°ë_Â! ¡nÒ q£^c7Nh?–Dbk]z‘Zøù·Íà[ÛX=mÅ›P :žž‰ÍW½G°tC#<áß×V Â'¦ŠÒyÞÄ1ò\ðÎòˆ¿ƒˆ§9&åŒÂT«âÞ°;¯oQ +Äd²’Ø[EÜ­°¿ÈÇ`n—ÅædþǦiBŠFtù£¿ mŽ<{ töJD|Ï;±Æ&G‚iþco§Àå²-çaA3©±W(æ‚2MYÕô(mò¤ œFã³{gþz&V__éa6ÎÇp›¯ØalĺÃuwðnæc"8¡n‡:Ñ!1w‡Í‘˜Ý¿g•Ã ˆ%ù[ÛÃÞI‘nÓåÙ–~gdº/~û¬ugÉp¡`ÁPþôTiHŸì2\)ÜЙÍàÿ®ºþ0æ‡zx)œE½ Úéq;7,¦ýs¸ƒ,ª‡izÕ­éü*ið¾\~]•mî§Æ Æ K•!ì†ß!ou4›¿›û‹†«ðw<«^UG‰/)cy¯$Ë‹> täCÔž•6rеð‚jåº)×ä; æC'17'IÙŬõ1:Ï–¼pV%¤»Ã +2°ÅѦyWýö¾¥jÖÎŒUËü«üÂ@¹,íðÊ&©¾JèS"§oóZ²,¢tëpbýèÒúc•û"i}„¦Z~K¹ŠX`i~l…`šúI‹%âù>ÑH—ÓVÒE©ÆÅU …ú©KÜÖ·w+ÁJS¼=öËŸ.Ç=|µ >üô=ÛŒ +’ú C¡ãa4Ÿ—7C‘ªÜ݃~Z¨‹ˆÃ©µ»*‡‚s· @qp![~_£Œ¿:[8&‹”ŽËNp€0ËtÃ"¤ü4q%¬i¨•F³høð¡HÁ81äј=Þü2¶ã³âL˜lƒK¯:ÏÂiåsB¢/]ûP6•[x² _#6}°Åf T¬…%*FųÖËÇ}Ù‘8?´Ï›P Ò¬“ê<7í¹õìÒÂgVq_î½ò±fKú–lFîkÉ(w(:Wâyx­¹CIBÞâ‚Û¨[NõbÖcpq¹Ú4j´¥"#žþs7¾hÐag•Þ^c QÔ'?ªæå´AÂÞÊ…øh¹(LMa.‰(<ûù ¹â¹®ÄÃä%ÄkëºT)ƽØGbª8Ø—ö×tà,D¿“¿¾µ•*Òš.S:µ›èY|Ùä'Fz„yÎv~lˆ²Ð…ÿþ5£àfâ¤û–¤A-í-³ñsEZEÄ÷QàÝÜ=‹þ‹ÑMTsî›?8á‡t2eVe&…¾1›B¦\q(ɽAˆð"_²ó8ŽvTD=°e™U³ÓÚÖ®e#"EîÍÌ-ûax‘Se¯;ŠF$­àÈY‘×Ç7¢=HÞ¯½~òp±Õ¿þ) ’ýÐ+PXY-x"yQùºì€ìCˆ«=³&o™ù…ŠÒ¿$¿Bb‰ÔÜ“Q80ƒÁ˜jU¥9Ãüró5½C£öñ²·Ëä—A<Õ¦¡1RÁgó[¼X- ?¼§µebÑ×k^6*Ù J ¬(І¦7Ü1)ºPïNଛ/r§t ªX¥õø&™ ¥ƒÆôÏážµÓfÇH­öõŒ’°.ÛJó9øP>µe't§l†ƒì1M¾#,Çä1¾#Ü­ÕÄš#[ÀN).·E¶/°6~ª§ˆÄ•T1˜ôY¶#ß:a³áI]ï¡‘g=㟗ì26®HZÄ+ØÃîk +z|~ÝX!ö×½’F`à[m”Ý»”}«SqÁM÷]»&ÃÍÝùԛꚥ‘ü…@ÏHÈúû Ónê +c—™XúAÒœü.; ®¯˜›'·Œ©½C›ˆ^zºnõâ塳ýæzI‡•f®.µ[bO\–äïoË2@c„ÓRvÛQ“5¦_nuˆ+ç±Þ0p%í(p“ ,\íqºGÞâ•ÕœJÈzpˆF­zè€ÙB+>„ iÎÞbcýЗޜ:È3\0/¡4ÜcàˆýÚTÑýŒ§m q¢Òß\cÇ úb{OhD~éì#­Hýð&Åû˜éì¿Íäj…¾d›ÐTC ÿcä¢Be({fŸ9¢z±í¯ãîí+¸ƒ»ˆÚ2HŸÃ{Y³ït”CX¿4±5=vßê „$òVëlY„ÒT PNóD© “¿÷Âá4¾4k[ç†ÙÎ|y©RøŒ³„‚KÝOsOsN±< –$õ ßO8,xìÔÝMSc1#ØÐ¥[±V¤Dæó:1lž ÔzÔ,•é$âλ›¼ôá·µ©¤C}cç +RÐ%åØWÔ糖Î;ÇOÏØŒI“ëöL%Ç’,úÛ¼F¬>žÜÁ|á™ôaײÍ4˜m?3’V=·_L=Rx;`‚i<’kav`Ä óè·¶²ú0 +pºs*Å"øVŸûå¦ä!¥`˜nƒ³ß+ó+ŽµÐ˜-”a¦¿FJá`éˆöF%†m„lï×Ñ|GÅ“ˆ9€lö,Îh¶IŽ¢‡…ÿNEI ýõ>ähÜ—ð¥‡Ôâ VG¯ªuIl?¦_a‡EÁX¬¬¡Ó]VbîÒ\ß0—ð&®Bs:¹¨k~`µ8î¶ÈÑgk[÷Þ–C*qÁí%b,ˆÍ¦Y=S„Ü›)kT}3ÐwZúY+Ì¿¸‰Z™ m@}‹å],×jIºJëÇ™Œs³mæ™!É=â1P1@\¨²5ãd £ÊÕ¢+ 3[9DŒ§Ý´º;A‘þsš-lFQRÒÀöÛa¾Övþ[A(Ïô䕨:>Üa$/)œ¦ÿâMU_q£ªÀX9ð(ÂÙ9Nø†Ó3+öš¸wQžugGвeŽd‹@ÂLkZÍöç@QvÛ˜Š!-+¬d±ëO%è \é¥&û)Ë£zÝ»èëvÁ10 䘰²ÿø£T7ÞúûèÌ›ó÷Ï eN£Ow·OªCõ§{gW¸¦u‡3Ž«›°ž¯uÇ*/[ê7,›¸GÜ°”¿¤Z·R ®²¡Ï”ÊÇ‚À“É*ì5tõŠQ,öO^ÇHO‡^!VçnõYç†ã2?K0eXËk¦·zy*’"\ü®æj‰¸gFÓïiêC.Níe†Êë”–"—²a÷4TÔîÛϹÿ)ÂP~CMH” sü•cň$çi~}c5mDÍÚ64òÀG¬þ¢ÏsÒœ¸—Ò¸×õs† ¹žGîì¾íʨ ¶49×ÔüɆÿ»–21“膞„P1Ün`‡\¨_RðbèÖ‡èΑ6ÂdÙ.ÛNã²êü–û:ããœÀË<2¹»ì¼‹¶Q†.j”¤ãôiaŠ(«Ť{+ÚE +çøx£ƒ®Ñãz#ú€½ãJÿy‘ÃEäºF•“Róª»ÿø†D¯11tü@Ct´Y$Á¼šGj™¯%?¼äX+å•?L¤ÔÛ˜‡Í”_´Ò#(?Êô\˜ã@¨nw"àYl™À<”w„ÙY)ª5avQÿÊ%éömŒ—êÆ5=–AâŒ*$$–-Ò{OcŒËüŒÖ3n¡÷j¦&•3ì£Ç€ÄY+÷U&‡Zg\'ãMnÿ@÷W¢4’: zvlAÚ”‘…‡’>é„Üo¦˜Vü_Ù¹šÇ};*ˆux’ÆC,(¨ƒ|ýÜñ¹Ú÷zw¹)ç`‚‚zÂÐg\ÔMñJÿ¤žÜɆ'Ž§¡j9åÛôWÙM¶¬út5àÅWª˜»ž›Eþvó[rǺ4®€Ü’™`h—=¿©ÆôB•š¹ÍjÂìI~ •[ak‰¸‹ +£fÍ6•9í]ØTÉ°bµ÷áú1K/š&‘9€‡e×¢hœj4Šß.Î[)Z +dCŽREm46¬8Ó¥N¸ «Ô6<É,ÆÐÍÉÎæi:ýx(¥Ët8ÐËn ÿ`’®! ©›86·§FåK•5JíB«×½VYg©»,&à1:¥ËãŒ'„D=lï«&è©IãQ ¯€äÌWƺ¥„RÒŠHw²ˆsë&üÙ­kèàûmïyoµ©ltxebmHçfïêïo&Hì*âj¦Î¾kÒrX›0 — ó=è^›,›.Âå˜/Z—[’áXýõ~™?4ÒxÈÙ'€äñq ´¤ª^JÙ[K™†OøHÊW|Ý@yw³IÉ:—ˆ™ô U-MÎL áÖœZàZÌBÊíXÃ6‚|6å˃ÃçÙÚœ—äºëZ£ÇØų%GÁc‡0Cüs‰ö[}‹#µ\ˆae¤Ãú4R{ ä{ÙãaË4#ôbÏ7áÅÂ…z¬«@½‰ FC̳„…žóc’ÒNÜ4.~4\jtÑõœáåxþ;²![EâOB ÆwkäL•1Ó-M‰Ë㤶@fõ$²&©U"Ë*u A½ +¼ë0å ®ÏØ¿îZïܪc~[Q7µê4è©Hšñq‡Ôø°7ò=­³ž‰’ §™òÆú˜“duˆ?ÎÕ+r^9kæÖq槜a^NžbÁ:ÐÞ“ªC=>JÅЕd›dg‡¼]ÕúˆËz@øeaªCšs5z Q/FÐé­Dú÷8È«âX²D›íŽO@Ñ% U÷Méd>kZ|èdü%ÎÐ?,cYÎMw5ÊÃÃP|øTëZBŒåæxM~`Ô•ä×P +Ïoé†-Ë»ç² ¹ Y¶ñ­Î±‹èÞÛ°ëÙC¼aŸèß7嶸מ +뜻%CAÌ‚¬UV´‰Maü€¤Ï¹uñçó„áÜêÀ:œð؃CÛ(|#ºÉ& ÇëéòɼÏÈ8GÙx被 Š³p<BÌýÀ«›[¤Êñ+ÇÕ˳ž8b׈×[ÍT|­¥#NùæQߧCW;Gˆ|SmÿFÞÖil±^õãþ™ef C¹‡¸·á¢y JòëL;˜L]¸îÙÙeÂAÚbˆPAIÛdðIÔPîÅ¡êîµx£x¤ÀvóóZVSshö†ñ<(ïmýyh·-®Í䦊ŽEʼnqØ•!fmÝSÚ‡ðËZŒóÈAöÉlxýJ|Ÿ¶q³åT ÒŽ4˜Ìýý—HUUmnˆ øCWÜ]Òï[÷²;ZØtnh3¦œ¨8 ì.(Ðë[Ù_ô~{hRÒ¡tá%kj†)á¦U12Óx±g¥×_nŸò‘±q»ÉWŘÄÕÜh95Ýô릆‚˪¿´¥eI]"è+©$jW M vžÈæ ZTb"}¤ªTS ‘O{hŠ?"ʲ|kêz*uÖqÎtR‡c7J—‚5ø Z‚†R +×·³÷ŒAÿÞ]ÿ¹:#¥µI丙û@òñœPœ p9EñxŒ9"úˆçFëÒ1“ä2cÈÝVâârÌàOÜ>KÖ>uÒ»jì¡ír¡Ž#ú$ÝQoë <µ ƒº²#×_›Êÿ~†L²¸Q“Îxêœ-ñ9t­@i_Àš9™’»ÂuŸîçrÿ +ÑÅÛ±åprkBÙûCzÆaÑÓ3ëÌ"!²2ö]3¾v{ÌÆY­»G «Œs» Oå×náR¤C2¾&`ñNƒ§Eƒ“\ÙÍ9È&Bê.üŒ¶Ù· nRV'“BV’äýáú%h:¾.l¶CÑy%4KÉÂTÙfÝ4„T·:ùÔÖ4_'áULšj€žXËÜý¤öiû ÃÆûêç”´c§=`²¨øqªe˜ßC´Ü¥îóÚlméòùfôæw Ñå#ÑÇ’tx³%;$àh én÷ý ‰7pP0OÇI¢£§f2TûvÆafÕ4Qö“ ˆ,‘XûÜLܧ–zá_ÐáVM¹‡¦OšdvÉDþeQܪ#éØ©èªmc…PðQh–ȳç%w"?/]]‡iîä-7.ã ’ÿ¦VÆ|K‰bÆ”`ˆëF¡·bÈÑ¢-ñ1Œ¨y4T,}ueé'ÊÇõ»•ã Nø0mT#?[½ø<ÿ=†C³)õðœC“$²h,™#O±Píe8ÒE(,–# s¼zMÎ)0Ý‚³0µÀ²DU4–;ÒðÕ…1¦ãŠ~Ç0W€/MY$g´™•A-5 Òþ 7ãnîS}Ž@N:°óï3ÆúZ½Fõkwy<Òð‹÷ÜhŠKÏ=s+8T¬ªÈáö@°on»ÕÜDük w¢ïž@8'ïop°ò›KéC©ºyϚʡ½ +H¦Ö¼9Gž¸M‡ôº„þP¼¡ïÒ4Š›µ.¾êJøiˆG•Ä$ …hÎX÷lÕ-DÞßÍ›á/c;§Ü?‚Ë¥9‡l®Ñ{Ä­Æ»òni†n½$›B×:õÒ©~’Xvy x’9c…Y + w/¼ÞU·O§”~EÁÏAç8Q•|ðŒGÇ=gý9,?YÁ2Ë2L"ôÄEñK‡æPüÚ÷AÍí"I1„'{†§³ úº¿¯c¼NøŒß_lbéøûö— m„nĜɫí÷Zäo£‚³|t0ó>ú>S‹Â™ÔRú—°zaI¿ î%ÕA˜">© •N~ú‚×-† ®2-QVçh-‰úó ýÞpܹâÛ/–¹"5vÎf—GWnT66þ8éô^úÞu¾4+k‹O5Q]¬NÙ  ¡-ël_M¸k˜ÚûAú=é&;4³áhgVå°CºìÞÃ5ÉÕMå×\Æ»8Ô\¬è”&fO³úÇ;^‘RÒ.æ,S–¼÷ƒ`÷‰†¹¼3y°f?s&†ñÊ; WÙ,¼K#«©Ù¯®øbj[¸_VM2ë*BWMŠ¬3@¿1(Ÿ¸éŽ÷ÏÉXúŒ¶UÑäDär ÷ñÇtƒ7Õ‘l g h/‚Ÿw˼¯rÔú'‡cÀUµÁªqFÜŠ%ÿÖi8ÉÜÕYýXò³+~¢‹Ùäûó¥rkHú¶>O­ÐÑѤ²v†1˜#°^:á?Q7Q¥×8Tnn¨tÑ#œ6nœlÕó Úî×îŽq + Òo)³S™2áØ¢c—¶FäKa·\®ó*‡©‘@èž›XsIÅXðûh‰ðeýÖ8%W6¤¹¤‹»Ü²yÕŠ½¢uoUêJP'mͧésŠêø?¹ÄÆŽÞמ+Ü¿eB*£HH:`rÀL]¿ºH.âØð~}Êη¡>¼üHÇ8š½D ýâ.ºQÞùÎ_]Ì—%×Ïت3©W$@2?d…°Õã¾Â`¾²ß³Þ׆>xÊ:ªÔý°™9•YæÒÊßÞñ˜¥ãë^:?Ü'°‡eIº¼¨-„~ä˦MÕ7W¥_ÓÞàÁ¥MxqÅß)w¾€Ì}®+È Á‘ÄâGu™.­Y6¸D£‰ý}KCîý§WçRPn"8U+Sœ÷ÂøÌûyvÝôL½3ìüî3QÁš\É–ä>¨UHC{ϊѼ•€Q¹!÷Å“÷.¼?;L9§ZšÒE¾é«v¥Ž}03|­˜6þ–ˆ¶9£,whœ-ÇËŸ­×;?zøpÙÍ„y8àŽ9Ë¥H»ÑHîÍÄû-q˜˜\—1άÄ.5HLUcß|{¨8óŒòZßÔç`äô³ÁPß½Q5åŽèz”=ûŒW0zúU÷Þ r còRˆžÿžDCh-&¦)¬u#Å>"1™k–ôÿ »žÍÌÃá±N”vD#¹¢A窠›`_ÝxXÒÈwgÞ„ÏÙå 솋ÛÈK+´CܦA"Ê +âc§x~XÃJo(¦cé;‚÷ÿ¨š#1âŽøé}SUx °f=”4+ÿ䎧õZ›…HK0 +—€_úØî*Ý– ·£ý7<³Y6ªãvl¤ÎݱæŒú‹Ù¸™‡ÈÈc?m·Ò†h¡ˆÕ©Åç•¥RäÍ×”»L|âÊLwõø Ρò°¤¼AçYKr¼Ï¹ÙÖJÑkW½b%òyQ·ŠTæ9æ‹Ló"$N¬½ôž‡9ȯòL¡åùö;û¿ZÆMú›¦Ýj{wAÆILTI¨£%èÔ&ëö…ôâÞ %§½(1ã:«/h•¶µôÕ9óUÖô”‘­Í¡i¬rÝxUæ¸ÂÝPÂ#á61”#,*@Š –üb±·Tx8ÙÄç{ëG79yçÐê°ÀCþ“væ$Põ`Ò匀V–ƒÿþu6®%…Ùqc†¬Ó:†wtÎì•NôwØÒPÄv©*û&<û'ývýЊâ¹!ÔA"OýMBð¼"ðÛQܸ…ÍK) z²>Ç'áØóô-oâŠÌ#°±ÛÓ­ÀD/&Ësg k7/;ô^D÷‡ÞKÉÁ¤ ŸCH-²oS<ÛõCoõšÂÛw˜´øŒª"ØK–_Š­"H‘¬ûVpÆsáõpa¡£_Ì×SÈÚua¯õ°Ü±l|ÚV±{+ wókÎ:¤6= s÷(HfUôRê¸zP¢[E  ïcYÄEùºŽsûr~3§Ÿ°3ŸMÆ?å¦T‚°ÍZ5ÕèR˜±˜rL‰buO[ˆ`×w\ÁU·?‚‹œWà&ó+Дzu(“ Ø!ÌìÅûR% 2ú§8xdßÿó <ÌЃ|Šˆîç }®rw‚RÕ:Mp’òÛBÿÉ]˜RòöÖ„½®íX((gÿ¶Ä?ɸ‹e»¿è­ÚXÄ`]¹#ƒÝ’X—ÕofQg è¿ÏU„»7­‰¥äœ“sõö‘ ý£Ëw5Y¬•ÓaM(Ã]Fƒn\^¥BW¢É–Œ~3 +ܯ*ù V}ÒD¦ÿôð¥ÎÈ +}ˆÒçq=G/¦8õ6ÙüÍ/]Z?ó{P>yêU•œµú}éË2&@žÊå:Þä®þ;TÆ +݂Ư9ÎÖïSftt7,-–‘hV©©< ®ÙÒ]+,àŒA‡Ø  •;…ÔzEå]þ<Ïßý‹Ìɤ C™Ñ6ïðÖR®{ÒºsŽyZÍÒ+±êÈÜôÄk´ѤFÈZ‰!FÝmP€×:%•éd +Ü)„lk2'¨ á"€”Öó±âµ|syùͱÕe€\ûÊJ;YýMªI­‘_£ƒ~Æ1bfÓõÝd=–ÙþÅ|SÅ=UkΫ +S­‚DÍ0 »(ë%ªUÎ17%g:F‡°ÞZ?{¡ßs·1SÊ« „]« +G7ôæøÆnuÒ{«ýef‚‰@ÆÚJt'D©Ñeèb ÕÓþÿkŸ,ÛšŠ( ¢Ä’n¤Gw3pÔèÝH·„4 I‘.é–îÝ%HŒîîÚ{ÿÃûí>÷ü€óá<ÏñÊ@J>N‘÷x°íþ®/Àï^ÈnÙv®Q’U õ×=[#Cã]6öçÑŠŸ‚h& ’Œ# ëyƒòk»6úq ÅGÕkX:gׂ še£¤xu®ôØ\CùqKå1¦g ¡lø 7[Ù²Ì4Òÿ¹[PÞÿøç¥ÏFÔ´²ÿšûI#pŒ"­ªºóöWwxN¥&ÿÊYGúéÆ„¾åoK?\aùt@½=¥¢D#UŠ&ÐmÂ΃:Kó#˜´ÏÙf`ÃN¯Ú¬5}=ÿúfy$V·‹Id”-é%#©¾¯{z²5…رF’oö¾!²’»÷ØIáMØïä†H}ØÝÖR´x`î/Æ]è›Òª^3±Í7é¶ûñâ¬Â^µñŠ ·(FLH³~å¶ÞÖ@Õ6Jäó¾xÌ0V?K£ÈÕJÑ}gy,‹¨†/ã©$þ¸Ì~“Æp\!#…þö/»-ñæ –Ú3Uv+l•EM ´Dýý_O‰uò!÷¶:) G‚·Ñ é91¬ÄdÐ~í@§q&±ÑŸ<¹¥ËŠ)üÁžjÄÆpîp ãO`6ÿÓaÌ€“Ê ‰bœ›³ƒø*LnhœýbyZÃ÷-ý$ËbÇ;¨´²* #Œ6^ÿ´Œ‹Ä*jj¾}5™üÊ­tÿg ›­ûá=)ìGõ™;RVÛÚ½wV*îM\ˆšhßn`ÇPÙºzÇ'I~©VŽ;&븙i—w âc3:™S‹åa¥40ÏZ: Moè¥Ø~ƒÐ#YcÑV„³IF^¸Övú¾&ÕÍBoªzôåÒ½¢šºˆ<è@Õ Ž!ÄVo£Cé·³s~íAãŸ)4°jsY™ÖÑÁ¤¤Òøɉ cxg4Hc=‰‚­|(—æ3§‘»Ñô¯ðÑqr1¥~tÓ™²süçŸVý;Ë}I†õ„=*š½Â!³ ®8¸²ù ¢Ÿ{J½ÅhJ$‘¹Í2ÕtKcÇZ=P¶)»ûøÔÂwË,û«øƒˆcÌm#ãdxÐu!^ Ú9ûi7ŸÙJcÔŒ]+µ jÆ»Ò_€[hI£YÉì0…òÇ*껪¦úݳj€í¨ž¨ß`Ù?8sGx9g3ÎîèñÙt÷:n:—SúluHx‹œ›ÍÉPo·«ÃJAüÕh€ß¾ÅW'ˆÃô´B ¶q…¡Jˆ`“ý kaæ®´bg>–MO”¶æB8uk—ÄþÙ7)Çê®Ü¿5GVQ(ë¿P­m-FG*åTA¸¡WK2z)· Ž×?3Ì›QOl s¹xŽ5WË–§zGϺß?ÁyËÇDóÛ8Þ6<,óyÊœ³%ɾŠaîjôër¤ôç ³L.¸!åeÖ&A—¯y!qíµ¸`Û®8 &ƒûCá°ˆ×P·KÄMZQƒñˆR“!»V¸x3ËßÀÃ'£l{…x|#”ÄÒ,ò9r&tã|¼ a¥ïéæ3sawÄø² Ã××ÿuåÝ™×Ãùv¦&R®É;Ƴo©5$rÇâ¯%ì»iÕav·4Ë EìØÔ;E6'µ…¹ïh;ž7\oqkÙñ*¯u¾+ÍNcýàÿOÃõÿû‚ÿ -¹ƒ%ÔÕÝÙêjý÷áöendstream +¹ƒ%ÔÕÝÙêjý‹´áåendstream endobj -879 0 obj << +873 0 obj << /Type /Font /Subtype /Type1 -/Encoding 1932 0 R +/Encoding 2007 0 R /FirstChar 2 /LastChar 151 -/Widths 1941 0 R -/BaseFont /IAZDVK+URWPalladioL-Ital -/FontDescriptor 877 0 R +/Widths 2018 0 R +/BaseFont /EIFYGD+URWPalladioL-Ital +/FontDescriptor 871 0 R >> endobj -877 0 obj << +871 0 obj << /Ascent 722 /CapHeight 693 /Descent -261 -/FontName /IAZDVK+URWPalladioL-Ital +/FontName /EIFYGD+URWPalladioL-Ital /ItalicAngle -9.5 /StemV 78 /XHeight 482 /FontBBox [-170 -305 1010 941] /Flags 4 /CharSet (/fi/fl/parenleft/parenright/comma/hyphen/period/slash/zero/one/two/three/four/five/six/seven/eight/nine/colon/A/B/C/D/E/F/G/H/I/K/L/M/N/O/P/Q/R/S/T/U/V/W/X/Y/Z/a/b/c/d/e/f/g/h/i/k/l/m/n/o/p/q/r/s/t/u/v/w/x/y/z/emdash) -/FontFile 878 0 R +/FontFile 872 0 R >> endobj -1941 0 obj +2018 0 obj [528 545 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 333 333 0 0 250 333 250 296 500 500 500 500 500 500 500 500 500 500 250 0 0 0 0 0 0 722 611 667 778 611 556 722 778 333 0 667 556 944 778 778 611 778 667 556 611 778 722 944 722 667 667 0 0 0 0 0 0 444 463 407 500 389 278 500 500 278 0 444 278 778 556 444 500 463 389 389 333 556 500 722 500 500 444 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1000 ] endobj -862 0 obj << -/Length1 1612 -/Length2 18760 -/Length3 532 -/Length 19672 -/Filter /FlateDecode ->> -stream -xÚ¬·ctåßÖ&›£’Û¶mWœT²cÛ¶m§bÛ¶]±*¶­[ÿsºûíqnß/}ß{Œßšxæ3ç3×c“)ªÐ ÛþŠÛÚ8Ñ1Ñ3räÍ­:;ÊÙÚÈÒ)Mlpdd"@C's[QC' 7@h ˜™L\\\pd[;wsS3'¥š² íYþ ütÿŸž¿™Žæ¦6ò¿.@+[;k Ó_ˆÿëD àd˜˜[" -ŠšRòJ y5€Ðè`hPtþien57Ú8©&¶«F¶6Ææÿ´æHÿKÈ`p´™ÿMºíþqÑì€Ö掎¿æŽSC§¿3p²˜ÛY9ÿCà¯ÝÄö_„ìlÿFXÿõýS´utr4r0·sü­ª(*þožNf†NÿÔv4ÿëØšü4¶5rþ§¥ùþÂüõ:šÛ8œ€nNÿÔú ›;ÚYºÿ­ýÌÎÁü_4œÍmLÿ‹-Àhjè`lttü óûŸéüWŸ€ÿ­{C;;+÷eÛþ+êq0wrZ™ÐÃ11ÿ­iäô·¶©¹ Ã?‹"ecb `bü·ÝØÙîú\€ÿå?;Cõ—„¡±­•;ÀhÇ oëô·$€òÿNeúÿ>‘ÿ$þoø¿EÞÿâþ§FÿÛ%þÿ{ŸÿZÜÙÊJÞÐúïüûü}al²€Þ+C‡ÿW¸¡µ¹•ûÿ!á?5€ÿ&ùÿ#ådøwB6¦a¤gü·ÑÜQÜÜ h¬hîdd01´ú;©ÙÕlŒVæ6À¿Šþk˜:&FÆÿð©š™YÚü3z¶»€6ÆÿIþ¯Hÿ¢ÎðC\XB^æ?ßÔE)þÕÞIÕÝî/±ÿÑŠœ­ñÿ:üƒ!,lëð¤û{é˜Y8ì r21yÿªý †é¿Îr†Næní¿-32ý«ñÿñû¯“îÀˆÙÙÿ³+*N†6Æ×ëþq9;8üUõ_7þoÃÿóü¯EÝ€Fp«¿mx‚,Ò2Ój±r‡'Eµû{™À‡ƒíJTøUÛöø¦…ípU¼×Ó7Ns¶¹/Ú}ìKSŒöbZQô¤/óñ½I¨ú -P7É;8hôJÓÏ4¢<¯e·!´ØÕv'•”õŠß¡¾Ow°8À\=Qù‘¸ø¡“>Ú!ù¥ÖÇbt¢4‚|«-<=#O<~z¤ê¹ìÛǣɉ…%ãq@$ô³ÏÁÐR«ð §‚JoBÀ»i¿ú$ÔèöÔË##Å%°–}U4Í_³i—}O‚LoàM”slݯüy=?É+”8Í5—ûµîL&æˆÅÛ„?Ø;kI8“ ]O0üvMÙïæYk]MýÚ‡”»02£ÔYRïÚµOÆH7î\‰$ÒjçH桳,,c|/ͳ‰M|\ÔøÉ×Ñ;gYs&kœ«ëP›‰­HÚz‚qÒÄ^hØx#:0%;Øt­%?!IRt¦äÞáséÒG_æóÈùC¾*íž¡±D­³EvAõ)i´»¨ ¹Í o)([ŒÔ‡+!Œ4Ž óçBÖx¨ö×éÀQ†Û–Í·´Š“çALb¸Ù…B ß%5Vy>©•õ_C äåwÍO?Xjb¸ËRˆ¢kŠìßFÆW‘¦³Âxýùb1£ôB:^‘átlØèöÇóžˆ}† -ß´Ç-_†‘À=DMá¢y;3pîÜÇ£àí •"¢œÍ‰pGÄ/çk~ú’DÎv}û Î|è8|ÔpVx{DžØæÁù¬(™è“‹¿ònc‚"©jȦފòJøˆÚfœ ƒ¡J÷ôy¼5Œ³4©aÆGD‰–îQHA²;§Oý|ÍJÑs{+ø}Ÿ£ù-0  <¦L¾F{@ºK4@Ê84;/  y¥)ߢ•èöp9ãÁuaÔqLä z?‚Dô°°Tÿ ½ÒHt<êƒÑ`4×Úú -'ëZ;/€Ü –^dŸ”¹\ ô 0:ŸæëFVEò‘¥0\^ƒŽ å³Ý1wé¡•>Rh’`ÛêüÁT~Ø QaZ­d®ý:<_µ\Lä…5®£¿ºyÃRxy^Ù@I?ÂÄ0ï–~ÿà·à -U~-UÙ1`¿ôB}èÿ[à|ýÛ¢˜‘èþà éz]n¡·†ätœÍOîø -é+¦ÞâwªÉ"=ÖšTÂb.Ê;9§D¿KBr•ZDIé°É¬/$h-5…œë¼_àï_æE݈P`„‰ÆA/Xâ\¥$jœPSj9ìùîåIt·¹özîk^Çqô„êò´GËhžÖ=ëxõ\Se”ãÒx!÷©8aYf«qy·BýÞHÜö˜ãfM¯ocþÊù -eŸCN[hÀÌ"¯5sß¡¶s«ÒVÛBfžáœD(˜Ü¤胢&BˆóáÛ§Œ—=Ü9bª©s ß¨nZîÉÄõn^’¡ïg^í*ªüdïfº×D°>M*|™vži­}ç`1;s~ŸNÀê~m©Ó±‡„æ\£"éc ã9D^ŸÍ1ÿ˜,F»9ÿÙªø¥só=Ê>çR³¿N§EUÝ£¾ÊPäý60|õ‘³9& x¿«é:d=ˆ“ºª¯’!êö9šu96¯¬|öu½nX—n/:s€fHë¸ã~_±›PªƒÍ®Hò£}&Eåæ«ëO¸éT\“Ö¤ÍoMç9œÇ!©Góò eLOÉuA¬¡#_Ôáhr/Щ6ßïÜ:´ëÕÍ©Ï®$V‘ILJÓ]Mèž µÎⲇ  @¾áÓË9äøÇZ›¨6ŠŽ¯7Ï©"Öħ1Ê™‚b½ZôL’ADe2EV ]¼¤X*Aþ8€?¸AÝÈ‚ªºØHüéuyHã”Âs *þ¶¤ÐÏW8=IŠ0Å - œÉò;Fª¥)Ò—³ö­nEä ûÆÀ%g5HF¢´`Æ÷‘1ÌBTï7íVcUðíÏsÔ5#LðÆ}Ì Ó]Ô^žNkHp<¨‹7äÛ!”a¿Ö9âì-OhGô¢µÍæ<¶ªKt VèLUjŽÒ:Ø€ íÚ²"A9ƒýL§@•­ÕÜjF×/áóæX±a¤“á…sy鞆v_Íï[3‰Ó ‰°^¡Ê-à¬ßŒ!œÙl7¨¦ ÍÌÊdnS;Ó>„|d¹—.Ú¬fnßY“ã|ø5ýòbõ"éM¬¢øBÍØ-P_éÀ'´ -S4DB~Öõ‚iJìÞóex1tk/•m›ÙƒlÐÈÍ#ÿ}7©ñ´¸jL¤NB¬O+ϸ WEõ{ç$3W¨† ·°‰ñ6Szuß²]wTé‰2åº -r€Ð5™'­§øÌ·¶YPNøÌHý ú†C¦ÝÖïLS]Ý(…3¹p¬Ï–z«ôtNzTD¨7KŒ:®žh[µg¥Ñ¤ë­‰ ¿ø˜¹Ô¹¶âÂõA?Â}û Ž>uÝ'9*Ë25 ÄÜ£ýR¹'«3Ir¿'ãƒz‡&ù#uf9¯*¡ì@ Œ÷OÑĬyáw‚ÀÙÚÞœ«‚ó—o -s%Ú¸üf„ŸËcÉ£ç ©œ>V† x*sžlKÍ?–‰N£“í³Þ;TÙ6qoam~gfÞÃá¹b:èÅ `Âî ƒ3öæùfÛVÓT”75"úzEÒ²4Yj©sÊNõ Ñ?±Šèqu""¸RϹ·ÖÏð­f†¼ÀA'bϧð!KI4 @·Ã‡u&“w]!&$ià}ߊ½£ƒimói×Y +RÀCÔÂÙ—ð¤ü‡Ö†8ó1…œ)ÛC0H Éª­ÀP[¹@SÝ~w0æOÍ‘àÝÔ´#Þ%ì8MÖ™E -t.Û½«½DŒ/vÄ”õf&|aªŠ«-÷­c†ƒY¨}ÇEWùn¾ß¬úvtÿtšúgÓ±ÇFé…ÁI{>2›Ðø‡¨ÏÂØ#7nPe…cÄ\k¾Boq_„t˜V/|å|ªeE2óFm<Þƒòc):¥¢@y'¿v4œ¸}!™RkÃKnpÁÿ"}ÏHj/Æ*.@¶B™¡áì8³h¨ûÂò0:z$X(q»®%ù9ÞÃX*´ŒEŸ|ÆB¬-$MXÜ/ƒ°I,Ø iÀ~™3Ó &"sÐöb“–ZÁéÃÝog„F#º¡séc¡Êöïpð{Ž‡Lã³EÔ]¥™PÙu`Jvqíªi‘0ñ}ÅóEëg2!­Œ:¾~¤ÛS¶ïgãÞ¨e}èGóíÜ+¶býÂW¦âEñ%,ðÑ„ U |έR †÷Ó¸ ‚“7|Y0¦¡ÐŒ`c”h"ï¥]$¯ÙDøy–¢U”÷³*Ëö;•»°žˆž½X€Vºi<„#ÑÅÒ8ù³‰·5òNéK#Û”îËÏNï‘r®[nXôf$AO"Ý–¸SVµ¼7ê^Y´]VsBe÷ ´g¬KI^¹A5Çr &&# zK½q*Ø" ¥¸ÅS äVOlMš­åV:ìH™/*go¾ |¿Û^B´÷£sä™Í/‚¬¨+“`‡™Dì žº,Âe…9:Cf!3M¯ˆNïxnÀ>9ë·ÞxCaSB$È7{Od¤Ôt †ðˆÍŠcÅø»,Y™B‹áºoÛâUûà¸Í —¢§²Â‡W½`¢ñ"•oû›‹¶»í‹èoœSªÛ>¢UÍAÃo+«îÅ —6/¿es^“Y ?±Py2C™‹ -ÆŒEöÏ´óŸ{.Ô&fÓAÄVUþDØ×™ -´ÂØ÷þÞŒ4à…÷r Å› ‚$Œ¾£Q`ƒ-`¬×ðÇŽMéˆüyÀœJØ ò`’…hQý)*¡ $ˆY -5Ëñò­Àóv3.]”T'‘™×_ìÎ"ÀT'8±ìƒJÕ2,ί„q;§oék9ãñÙ^¼è½þ#±ª‘l VgÈDÝ/tHõÿ¨ÀQ—Œï±<=fYM[=€7 µ¡éPÅ°¯qdt³a³´Ÿ¸®‰ViÉ}Í~‰r¨È ºC`%ÐÔÖòü¤‘ ¨ä=ìíÈ€°ø‚x.«å_dÃñð,öͲ ôpù‚­NŸÛ®}§ˆTÎÒ¶iÒà_/á z¡±íRÒ*Ø Æ 3ýrI›½Z }z+§ðEU-8¬¿¢u6ìú xõ+ðsFúÐÎ3à"Áw}EýlMÚv…U=Iö1ä³Ò±çŠ:lú¡‰àâåŸm•ôònG&±O4 ŽÇ³rŽÏõ¬ß’Š@Î%R¿~W Ø)Ø×\„Ý=VÎáܨVbkcà6æŒ#°ÅóŽùI4MœÑb¸ï=pû{níÒË%ˆfcY¨¬×¿þécaöyqÌÝ1¯Æ ì—n7 -4?äÀYÜéV“yö2RS¨àÆ`{š,#JiHÂâ-ý»€ëbú@ùðsºÄÙÙÇ5NJ;Îið’s7?†™YJÂ’F4TïËý´äb„RêK,k"z’t&¼pwÛkßò1^šDFO²ÌÂ>1Ñk3V¾îÈNŽD{¶æDJ™¼oæà”1•±ææ¯\ÒeÖ/žôG};;’%Ú¨A{½Eì–6¿nn† ê¢Î,%*îp5¤=¾š£Íi -Yت^éιAÈ•Ë5í -Ñaµ+Ë“º±\‹0ïdÅ C´Ð²(Ó©Öצpy§’éÛ …oû x#z–ÓŽú­iÅ6„_´'Æõœ¦?óØ&¢6ºT&V@t½E ­B:3ç|¡7›Ãù)èq‘ y#釪sfWZâH«abzTÆcóY!ë>=ä€Ë„—ö†ÅŒÎF1-Ùòò}\Ò|3GŠXi -TpndØtº7ù)åç«sç/4ƒ8ôÃNE#.VØjÑ6sÇþ·Šª,o¿¢N(Þ-Ú›:ŽoLªḻ9ö8èš?&f¾>©¾*æËäIâ~‹zÅ}HôäX|]ˆ…–5Ö‰¤õö3›‰ø/(‰[ï ˜Vîb6ðÀ—ˆ¨ÔÆ¿<—ªîïáõÑc{R‡vº±£¹ôRåpõ«ý—T6xÍtd=úÈKgû% º`I)„ê6…xVdLñK±¯“þO{e§Ré÷ù+Poõ šZyßÝb*óë6§ï½$¬ôG u\>Ì~ó²=]ÞkÃOáGùÀâ¼’þ4SËÅuÖ¦Ç5´ŒšÈN›Q;|8x -ï‹i’6RNbl¨°› (¾/`Á%àÁ¶åæõ‹¹ÙpbO$s™Ø¶€ŒÑ¾ÖÛw@‘ÖD“Õ˜‚ÍN"­K  &.MæÊj©úŶžÔì¿(`\5ÛZ µ2kyD„ ¬Î[ï*¦à"þFp›aÿ Xf˜¸ÎTb»}-» ÎáÎB%½ 8ê  U‘6J‡(ê¢ØÀµ–…Fíªãʜ؂¯ÀX-ô£-Ýñø>‚q'«o"ty’ЄP.Hòöf;¦—囦 -èýJÇF@´ø¢umŒ¯Æ8|‚…$³(ßUH§k‹ÖÐÓà ÷¹eeÕmÖGJ•#𠜶k%ââ];$ÖJt ‡Ÿû?`ö„i¶Iq~?•°©Âá/üªÄÕÎk‰ÎX¬Êù˜³SÜÛ¶‚ÜHvòÅ¿¯ö—Slöèeî‹*bN¿ÿe¾¢\h¦µð®ŽRöã -oçë÷¤¸Ñ^u¯LÇåô¼ë‘¡—–‰È/º¸ïr£ìu_ -¹ÊGÜ.×÷ÂÌ?áw…_«DP×vÀÊîúðMEi‰Í;èÌjêL¾ÓÍç¸×l£ÖJáðœ4ݘ$í$©QøRdàdzFaÆ -±aÆ°ö¤ûÐq#Ê õ;–>u ßЂÑȲ¨ûÜ î(x­Ô>|»zsÇöMïÜÚ ¡<£²€*¬R¶nè«jt¤g6ö!;¢nÖDJ®Jí¯/i·2»K’HŽc1äÄ¢):ÙØ^Ãô¢šù…Íí>ŒôkÏ\@¡fË yñ6“é‘úGÔPÐ艋ª£5nôXþ8…ZvOç kŠV7ûüÒ6'wÊÅrÒVrô‘àÔóµOoü@ ”Ç}žìÃ3_k¥Wn~— q°ê€Â¡NmHN¢ö.U¿_¤dNß9h‰¼¤‹8 @Qpù7Y^©Æž7RØ‘{ǵºÒ´±Î—ÄA¦WM¹ ³xûû’×*îÞ¡Þxö\(ž§/2Ÿ@\ꩉãù>#ÞÐFÕ³« iøMŒ”™?E¥´bC3%ê5îæ{ÓeR„Z )o UE4´oÆ :[qt ˜O¹èðuÙÎJ’ÔàW-º¤–yÃ*¸Ü,ºq ï7ô/fÁC¬F¤œslÂïJc–R‰¬È3†›…ˆ¸î*\ª‘nu”Íooˆ[í)0"Ï„äÜòR‚zƒi"ÖbhÖ“ ÀI8ŠeC’µ¦ ½`ò6¬¬ÙÈØ—Éýüv¼ÏvB¡¹†5ÃÌé—|5˜,óë··'{Ÿ$ÿ0Ø vYR~=2·NDá…Ü… ´²ðAC£´ïK‰ t¾ú¤ÅÊ´Uäfsä)_©ËŸ÷º1Ó—ÃU»»bî¯41Ê„ kÄßF(Ä -AQé}lߧ‚>œ'Øoy=Û“õÀ!»šp£v SO`MÚ -ÂEdqðÏVŽ<[^/à•‚³mQB(ÉJ4åïPÓ%›ù5`¦—¼<áN]´ÍrªuÓD…8#¯U…ÑxšŒŸžþØë$@Ñrˆ ¥åpT_ç6þ3$$mýñmmòk ŠÊƒ!7gN?¥÷Ó -4“R¥VU»4¦^¡ËþõúB–üLJ#£·nγsl€tŸh‹P¢ÀB¯B¡1ÔÏ’‡’ÀmA8onTƒ¯üàŸœŸ™@©5Ý£ m>è|Ìãé$Œè8L¢äë×RõC™u´„î0a\*;­A° 0‰ì…ÀÏ?'ê=¤†CcÕ×ÇógEw{ñ§X<¬Ö«Î§¢¯‘Ö/¬+±]éÐf¾ë{Î"²Â.`W_‡—ú¸R2´  ¬ ÑßèûnȨ÷„W:È%¯Qý#?‡uÓÌá†8p¶ÄÖKê"“`t@ º^õÛ“TºXÔ+©eÝy,NÄ™‰âJcì³¾ýóiówh²i©1K½à#<í‹6uƵ(E -¬Ç¿Ñ¦‚¤E(#ÍËŽâ~qõ¥]ïãDí -zúÎ}™‹KŠcw|¤ªïhu•ëôSˆÆ¡ÐãË­„[ö:Ò-DqnFå†üô’êP>Âz^ʧÁÒÀ”¬Ì»›~–[T¸4عâXïîif%ŽE„óN˜¸þÒ:Í“dõ¡#d©ðº+†ðŠÊoFš{ÈY_5¡»$ž…Sr25Õ¼îà>Ó ë°+a“^r8Æz5³w ³„­JÚ%uàÏŠŒ²¥oŸP,ã¦8(+{(š\‚J)æ}kŒné?op¡Œ®_@U<º°4Êßo‰ÔYÞ<ìaÁ ŸMˆ§õcDÏSÆ)ÃêNiñZMEèG5­:—ÜüÂ.Ì{á¥Åu[R½Q0È›®iÔú#ÅU·@„ñ`lˆ-gb”Ŭ\ÏŽXIP'°(Gý³»`š˜º„€B@BÖ&íOrÒKn°ÉŽ‡{ûgÕ.V­„Ó á™ÔëuVO¹©’›¦ic{b¨þÈí‹5D«Í÷‘(L˜žkVADõ½mÕTŸÃb|kÊ"¯=^sfÉ̇ ø.Íþ¦úzƒ D?¼fd¥òCRØÇ”½²c+‡ò¼}ÌÉ? Ž²69>jí™e›W"àùï -.^7=º6Š2#0 Ÿ“8uGzƒ)?&¯~Ó&Î^ma€ÐÎÝØ”ÉUk‚Ï]ûl ’4Já–‘—ªÖã¾ß‚•è‹ˆzN“Uæ§z¡Ø„ðcÃÀ4¼âeºsÂiŽ˜›ÈÈu"ÂXÐ MòÂàwB²Iê­Ã>¬qø´d†É¼•§Ç. m"£ûˆëDÊ!‘‰oRêS´½)™FÚêaÜ.¹½<ÙBý 2ƶðÞ+ôBƒÐ­¡+-Õ›3ãò¡5ŠÚR" :zïEñ>©-Óæ° Îg‰lL8y$º›³Þ%µÙJÏX9?ænµ‡äFóà–®Œæ4GÕ'‡“ç@µ-–ýp5i~Ìoãø†Ž…·r–½Ý¢_« -)׆þ®ì¸}Ÿð‘„¨ÍŽà”ÿâMµ3ëîDþþF·X#›Vx„¥Šš9—ÅÁ¨¢S@§¾Õ§+Öf.;™•óÛtÆçÕÍ&…¸eýÁˆQ³ý Qi†•hOr{jY%ÙJw¯ÂT„—lFt{¸ö81÷(Â¥…ô¶äÃÊòûb2ÒJ8cá”ˈÒbÁÀm¼J&­Z‚A -Õ!R3|´î|ܽ$uà×­GY‚œ æ{Âx¡  ~.œú&[qæfôð†hZ³O D_‰Ã`z™7ÊMìòMA•WsÕ [ž„væsÅÜ!ƒØ^ZÉ»‘wïFÞVeGò‚\l¹ÑS\Ÿeæ"þÌDnÚ‘15Nôz{ƒ¸Yów0[° ukz?¡Þì%¥ -Ü0†Ç/OLj[É|Z«×Ûž<Òí°4ûº ·Dɇvk5A´oã ÌtAÔ” -çHBžO+Ú‚ÄîóÎ"«g,Ç}õS?3Ù³”“´§+Ôö·V¥+ÂÜÖ/'Ên³÷^ö/€Õ…Óÿ곕µ°€ùÙ?"0ÁAÉÃ\(à-ŸÍ¹À/¾7mù±y}ýÔm“ýmùkìµ4#±$ß” -¢0ÓžœÇ‹·z´RÒCfwMÎ-‡Ý ’օʹºwvE:…n6OAÆR . ½Ã Kæÿ>©´‹™Ü¾hiÓn#Ç*ëÈÎ^ª ‹{n„œƒ|Q‹évÝ 5¼ã›ènB uv%ò9{d|ÞQP>CöŽŠß$qˆÒÊšÙ8”Ç­š¥«­u#Õ¸)«Û×¼¡ëSœiQ¡zJõÏA*tµÓ¦¤§ 3;Ûtès-|b~0~B-Z)ñBšª©*·?ƒæ–+[L’0o!ìÆ»UÕ‹B"Œ¾ªÏ5jdÝi·©dVéc]Ð[æa÷Ú(i³ ¿=ב;†L íu߆+YÙÔ¯jÒðoAs-á÷!Þ;ýÈž8íöêš«Î~à 0 À„ -Œè†²}­°[^­ÄÊ"+4´Ÿê°»Ç[èë+SˆR·sQª‰’ŠYHX¿™ïC6ñé|W$­µÈ¹ê1±£×Kì¸ËG4ÄÓ:£å9d8—f‘%¬-Uo—@~<Í‚¿<ÀÂ/OY„рƈŸ²7 9ÿFL!Ë·$À#Í‘»%#“ÂÏ®À!¼d^ûÉßì#r8ç7Ôs¹ùáÃ@óî¤D((§vL¼ñgà³wKKf8Õ–u±M„ ,GìÀ±„#†áÎ7n $\*Âä2Þ Ví/@3*Û¯¦"üÔHÏ Ä»Tm’k7ìècƒÀ¶oÝ…æpxVåÓ{'ŸÀVÏQ@Lv¥ày«§ ç-{†Õ#c¾Ùy·Gö=…lL˜ÀL[×nЩ2oY4êðÌûÖË•÷>BX^M4UÓvŒ„l0gz -ó½ýÙ ÍËF£jkN°3½WäfÜÁ)8+í':º/¨%²+žG%$Åw·í=¾tÀÜ~ÆéÁúäi*¨ÐuÙ>lû2{†X’GVM"¹ï§¿äØÞóŠ-I¦./q*#Ú-ÍÌûS­n®Þ~¿5f58O&Ó=ƒSµ@·ŒVÓÃܧçOPkÓÿ hÙ)&ÒªîÏWfzv,Þ6ì,Ïp¸êÉã7­ ‡ixÔÆ­SÆ;Øc¹}¤ÛUŸV¼ðœxç.»wQ~ßÓJ3CÙNcYB»Ñƒ¤3Æ›õ?­ÔæuÅXŽÝʇÌ®þÈ}‹b×"¼ô)ÿÆ;Ñ€¤ˆÍ -Ú‚+m.'ª®ãæáLVò ÊacL-À³…KË+@±ù~àI mªÎw3$‰/pKx÷ÛNìv þB ͽ2ÛÏA‹É]`Kmâd¹êuW‡¶oŠ\ˆ©/QÙî„„!'Ìqzî¿æÞ`rŒjéÒÍd‹ß”¥ -¹•úÑÅ0v ñ>R0Þ{W8ý34®H‘ó£îH±±­ -—0oj+tóH*ßj<šÊ¡ÁYzdÍ¿f1hJãg<+ïa??Â…VMQ·IŠ´Ö`ÁÖK)²jâ‚·8óK×… -t‚i]ÕܹQ7•¬¶">ø'2cq’ÅuE}sÀ£e9L&„MrÐ`yOCÀ´ó'{›HPO˜ÒoÅø8ì»n·Šš¹Î1è˜(]zš¦ÊÜ÷ŒDÈQ–Í’>¸iŒYñvÃ×LT%ù+0&—¢1BµUkæÞê«–Ì«l -¶Û2g§yö$®ö*Îæøe"'WèÖ£“C N1.-ÖsÛòQí5rJ÷ÛYAQ&¢V1R7Œ¾'NI,Ÿ*˜å~Ƶ”›~÷Úrò9!ˆcV†aCPµO;;PÝÌå³(t>ƒ ¯ì~0Óâ&ý¥tdW)T?&ÔzISÆ—µ Ñéô9óóŒl|—T¶·ô¤+NÓÄn“4üÑ«#éÜ‘ñÑÄüÁÉ֕aã_.›+A¯@™øêSÈ3•'üp‡IøÐÌySzùO ‡´æìÍ®¼Ck;ë2O3Ô‰áy/sT²—»ŸŸhŸúĈäomg…Zˆ­‰fº9ðþÒnjĹ.&i&ß7AŸÀ’\aö(±V­J¸ãnÔœm> ØŸ) þêy…ñålkMO¸éX8VEdàŸs][» NÆoñ3F_ 4å`}†v,ïˆnd ‚ì’تLÚB+;1‹h²QÀú·î´¢f)²kß8OÒ# õ:‰É°*NøG0Úðž{Ï·¸Gâ3]ÒB]ÝãŸeõÊUút–Zä¡ÛQ*He'3u}š&ºaVÙ0nÂ_å · Ø5J泧Þ;R~&ôc5Æ¥:3…/ïì&Ó¢.AðáÁÎƸÃÄžR¿nÈ€¦ã~E2Kâèš”¾³klÌM"÷mkòù¶Bˆ)™öøï¿¿ÓIF{/õð·לuù[Š“‹ÜhV¥<õ!1QÏG)9ì(Å¥ ÒtM ËëqÌõþ¸]%tƒP]¦ûtàÆ&Ks:!lg‡€†)®7ì,èøÔ:Åaäæá·ãäQùÔò=•ÃýnÙ,×À­¼kZ^IºgàÁô.uQ³÷ },Œz“¸»•dA@{â^@±ÝƒžÅ&ýþ°Æ¹rVL*ç‹jïRf§ž¦|ú¦ØhwFjPÜ{tnã𠞸Â1LM‰ðg6þ>¬€ä¨è!³ßO’N·3PsÞvz¤' W›Bb×÷d•ª;ì;Ъ"j7Ž”‹98ô©å,³ÑÕ4ÛÕ-뀌éÂçË+[ã®fΠ´=5"ëO_Z§ÝQýJå÷# ;~Æ×:¦ùOuP2Ãþû9¿™Úã†ß°q¸D’!ˆñÛü"Np G“ó TI¹Düˆmu áê°q¤boówH/Xâ¼¹vbh™‚79}Øži• 0!5mù'p¸ªŒÍ-ÖЗXéçQdrîá•fè÷ëåÞ1ŸdÅ˛Σã…ê(?ÞOCüUd;â±ñ.&- ÆÍ á©UÃ&ÄlÈQ¶œFWü ÊîG˜ç;!:XV†à Ž«¦g.šÆÌ" ƒâÝ`”Âp¼](G¦•|ªf?„ËÄŒjݬ~h2w|¶A™¿îÇ숚ˆ‘u #S0g0XÌŠo æ< ~°fC1å¹TËI€I¯v8ì{0®BôÂPœŽì>@;QÐÃ'‡³ †êÉ2$¢b(ŸÜ~¦r Ž}žjÈê 6G\æ«ëVáÃðšOD©h#Œir ~7úsaóÊÀ?Ô³©§²ÆÍ9Õܯ» -%*RŠ 8$ ²Bí¦®ä[D¥ªÝ«ÔGÆ;üÑh<®^‰¨´ÑE—@$|ûÈ89O\2¾ãw3ÆRæò…iŠR)ÇäN(˜$ âBd ±ÈÔ: ¤cCœšÒÅãE…É<¬)2@5ø.½’ë"¼ë'óMÂÛçœÌ„8 -БQöw>}N·>¢Z[@ß HÀ—ÞäN—÷“$wŽp»X0õ•Äƒ<±´Áí¼sÎ*`<Ñú¶øAF‹/©=J^®üݯ‰TÿýŠCX k¯”¢vÈ´ªøƒßnÔ«Ó¨ ÉŽ:ÁCò®E~$œ-b™¶ëþto©ýB5÷ªF¶¬ïϾ¦´]çnÿ¾ãçz£û-&úiý½®€Q“²sxGûÑû¦I`¾|R$I‘õ\‹àX.áçëÑMdù ØGË7DÐÁ`lÈÒák‡)*¢mÁˆŠ‰£ä¾цëmhQ8ð™’¦;¦eP‰Ñ£EçòÎïZ¶úAI -¦£Ò턳`à*ùê™>÷)›td¾ñlË•]“î×=í -9l¿»YªjËŠÍa™°Tt÷W.™”Õ>/žú„ VݪdspÏ#¸îú§+^üƺ§h¥ÔS-b©\LÔåg› llª¦¢,#Un¥`ÙD2ïÑw^´îWƒ…jžÚòHƒ,ߣ4i´Ø$ƒšš4œ¤c„\œÐ9˜n³žK=F™•S'a&È6cS4 EV×#ž°Nšy’ QN¦]ˆ‚{4)gáŠÈZó±ñëÛ¢¸$¶§”tÖ©ç< K·fÐ2o„mê„‘iª:Ï”)Ðö¬ ×ø,m/@=ÉFËi‚tÖ²$Q."]å+&•²jjÄD™Þ}Û­n38e(Ö²õ²·™s,ÒõáÙĽëÃîñ¦Öà#” -, kÉ÷´éhÏ·.rLgâ×hž„—pZ??ÎË;@·aQÞ¦fÍ‘Á£˜ÁüÒ,_g+õÇDê–[ÖË`lƒÿmjC“½ µ‰¹ñ•«ßyÁÙUe°M ©P21=ÑAC6R²ãxÖ¢Ó»ÌiI˜µnþ¡twÙW|$Ø©Ýv;Œ4âcƒäy.,üôFÖm@Ë1›ÚÜÒS½V%¥ òN)®#ò÷~H}ç†/œ¶CDÞË>K†·Õ04 y\·ç¤Í¨ƒÎ¬VD©?qúÉ´K¿¸!˜Ù6t’m3ã˜B. -ÂJY†Z†ûš|ý4-¼©‡ôÄÖ/äNø&vL‰¸y)û÷oæéÆ¡s¨Fâ²JJ–à!`²K-TîÍ$\ \8fÇ®Ÿ™ºˆ¤]z‹9L9‘Ïÿö4ÆðÞ/Tþ&š¥ëÕŽÛîäHŒ7ýø1ô°’ë{ÇnŽrbÍ¤à„©7ëã!ÀÎ|#^ìñ›C§.Öçì1Ê"‰ >B÷‹=^Õäìb—bu/ÙÒXÄ‚™Oå§kY‚O)™:&Bç|i¿ôÚ¸rŽ:7q.8VJG±Ú–= -¼œggÍMÛR9éà½Ù»T¿Ø6žft»@ã.‡±v¸g8ËÃ7ÖÇËñˆùƒs‡@JE¢ ÌL‡²¾ì§£é-ø?ÝÉ8݇uÊ I·ï*"3 Ò÷ËVA¬¢Õ- ¡Z"ÞÆmU{/)tŽÎ›ð?KŸä~_†ÜÙš Ö¶lâ’¡n˲aþq+—ôú¨¤ë1æo/+žQTËq&ÕHdn„Ô¾u ˜Ñ­-ëMåÇ‘sÿÉÅ™[tœ¼¨øµŸÀÄíÞ®ßPx|òúËüá‘æ/¨-epsƒÛ;ʽQÊeŽÍYszgÏLf²Ê%—â -‡3¾•þ4¡´°Ç4s©Ó(œ#qp6ß ïȈLÞè¹xÌ9ÿ*Ͻ-+\NÆ"ìÊלý 4±ëè“B»5ýû/VQO‰Aüp ÈÄ@ˆtö·­ã*EÕV0µ¬7Vn¸¨bÍ[u?¹CöuJ4,Òk|_Ë­|Ïë2•`k”äÅhÅEdÔ<üÉgÁÛ{Ôrä5ø‹›o{Ÿ¬cy¯£ÓJ¥Ò/âðÉÞ28Ê8®9!úzÕP“¤¨x÷6`1©ÖÝ`¯îOzó€Xú8jvƒXq¢™°£»kÌí²¶¡‰2D¾ß•‰”uaôBAwõúà ‰¿ -€ÞŸ|æ`xFÎärãiwÍBÄt·Ñ9”kE‡-ñL¡•´]^`ƒ|ðv?B@ÕÚ,eç¼oì.9‚¿‡ú‚8ÛƒïûÝ -2h°Ø‹­ˆÓçBJ6 rD÷ öy@hÓ©A˜orÉbo»­]hdçb;é^ûxw^c»{$¯öw÷ª(:©]Bæ?0B¨Zt=qsŽ»_ý¾$UÎö×ÐíT! vMIöM»ªéKk¦øy"Óî“hŸQ¨¿tHg½Å#v³ Ë¢¹(^Ë×"F¸Cáß Úï~µÍO[ŸåÇ•ÖZ²Æ~!íg‚dö¯hÙ¿¿«ðÉ×_j¼ºÞÑñ¯EAåƒß€MŽ›_ô?¸M¼½Ñ¹t~ŒÜ+ì SVáu¤T…r©¡l®¥Uƒ0P;Þ‡™OØ~uLáÑwöÞ5gL›É+Êj/1ˆwv_›Æª¥µ[þ±žœh…{eóåa"ë‡u ™rÔc§®–㶭=üdxí†ã%û¡AUì÷È+×¼ Ô4ÞΔEÞ°•ÏØ„ç“ø¡´ûèâPz?¢†Ú mê"ìvbîdU‘Ö¾”ñzñj3¹¢¸j&ÁÄ~¶§‹»‘LͱZ -É5w½‚'☺²¡tg‚ÉGѺÐäQ`Æ9vÉlpúÿÖ§ÿ¢^ʆÁ.¸7%Ò` ã±¬Fœ}a<õŽÞµªž2Ȇ´h¶”RÒ`k‰ÉÓUúÞê¤/˜÷¢ú¹«É«¿ð\”)$q‘1)Ûÿ~3w¿,ᶉ:—ŠùÒ¬®ÊÊ€W6 Ù ƒé‡~ÕiЩ`’××»žÉ v ˜rGK/ÊBˆTJRÌZ[¡}ÙAöˆóÛ¡Ýå熫"ø`™Þ[þö‘±U1²ѵÀÈyþ¸ëhBØ…ÏÃÌQ)¼é‰e‹@Ÿª"´±³ÿ2ŸJÙÒe5> 9UV„ jTÔ׳4ašG}„Ç᧜5ÅHgQz>ÜØÕ"oÍ£i:,®Zƒ…[ªŸo[¿¢!cÝÛ)èu3oÁÜKÄÏ6W Þ¯"Ó  ”ÚðUAtE© ¿#Ibz£±'»PæÜä - !˜s¥8cs;ªÄj­ÌÜfºô#·Ãÿg:‘s2$Œ©ˆ×6'?^1„4=Wk¯^éßÈsê&Ù¸e;ìðìÐégªA¬½Ù¢vXþ]ïz¿Y¬ÍrôÞ= - Þ?”XÉÙTVà†Q¢›‚3=A(ÊŒ®?Ît??xnkà1›Ô›ÔÚ äŸA`ã×0滬²tôŠ¡Œ»*!ÂFë¾ÈÕÁ(»L lô-eFf×Å -§,Éù¾Nª„8’sŽ±©U WSi—³¶,keõ%ï"‚×cQ:Á`c„†3p› Ò£ïט vv„_Y†)„A(@n`'7)$P²tJíòkÓp? ¨OÝï°¸>ózäö o"DXÓº3Êlª‘ûÁ†êÙKß±6ÎÀš9ŒÌ9‘ 寧«Ÿ#Áâw©üljœ]rlXÀfñêjéÙÖ ˆ¹œqwLLCÖŽ¯ËAŒÍƒ•è­0|¦·Ý¢fZ/Ç -qH {ÃŽÆ¡I<Ü“QvÏÍ ‚TD†¶ßûu|s˜ÙöoÜœ¼ •ÁáÊË—1™­.·óüe|î÷œzzEÝ³Ý U1d•1°Æ½™Ä<‚Ǩ‹Ç/œapbÑþ?íÌ÷?à3ÎÙdds_ël_ûÎÞ;33gwÈæì’³ÇÙ„ì2Î(ópvÄÙ+ -eËè2R¼ÄûÛûyŸ?à ·Cžtж‰ä€¢rªØt°W¨ÂÃ^Ã>\\hŠþ…¸­£éÝ ÓùÞ©e‚ & -ŒÙí?ÄSËÜ·7 ¦Mwv½ r#aCp ÑÁ¤»Ê«Z²â™×?åYó›j‚foM¤Ž¾ïhWò÷%Ñq.4ƒ5ÍÞóŒ®:žªFï€uI|Òxóstóår}¤‘(º…íOëËD›ïö0C³Xò™Ï­mtý#¿#/OÙÉU5ƒ|¦ðžË%åOŸ8+‡!ðÕÈïÆÄ»Þpi¯ÏÊ*ÓK(’èÛ¾½ÙR„n9 ½i3Í“~i/]L‰ÙA•+®ƒ¬-ãÐúˆ¿”X£Ôëë"M3µ°hónf;ñˆYþÒ$qW½ÒG_¹jcR2š×»‹7¨Š}r ¼áègJ?%Lë9bBú<–ŽÌ&f·´È’Mµ½>ºç|lÙQs- -Ï7û1'»öoσAü¬¸²a«Í¡K-é¢äþ{." xÊDï ùÐæI~˹G=Ö±?‚§>Èyüñ°“NÐ%îIß×µ¿è4É^)Oïä¥ç¾®ÁÉ’F°³¥1ŽžzÓ€SÚóJîi¸g_ ~`ñ›1E!ûŽ±Ö]Óhcotí¿AàçUpö„ß*&"-š{~gò&ú{ …rO]ÉOœ…È”[‰„î£-•;J×VAЊü$JJX&Ê×"é 5 -¼ØñÆV¼_±  ’™c€AÆ -€~g´¦™L#ZeöܬðrFVU -¨ì¿öžÓpÇ£†äH¶Õ2Señϵt(å¶õOÖt†Ò[ \„¢73}ñƒça-ø{û9…Ô8‚Ãõa8K<ªä-™£UÍZˆjzìɲ¦Omuã–‹ -|BÖÝB|kæZÄ@ºÛt7B5úÿü¥/Òµ׃1šòò‚Æû±®¸—ÜQZÖ¿S^©Àþz?§â7*¬UÌ‘Ž´Á9a¸|ø2DyúQZg‰?D[á4m|‚B–*õ¹÷kîìDRºÚ0„¾ýç–É­wó~ýØÒPÇü>? -»ë~÷aœ¿nïOÝp}ê#Æ)f’’¦„?BË`„ú ~R(hà'Ùç¾óì ØÉ»žOÛšù.»ûe<™“1êÌÇÒïÒÂfÔÕóÏ“¤òÞ!°(íTLÈÃÖ¥råúDÌ|–ÐÅ8Gä|}¥|è+ÏTPDpƒˆíJN5ª,»sa}èàÝ!/ÿhEî:±‰–ÂÖuL¥èmzÍŒÈ%áØß+pJ^‚…®Ù†V§óÕ7ƒ° 3¡‘ áâ9zU¯Ì…‰ò;é–Ÿ·(Nâ°­|&=×ÝÉEr4GîÇ4ê˽/Vñùén :,'劘ʕc(x^µ@$ÛL‰†¸æVìP¤ýÄJÍÏD{¤>pV$QJ¬©ô=˜Ð9 Úp€Õâ«ùD¤å0ù_‡b>éRêVtÃÖ ÄMd~„Ýl{‚òsÉÞ! 5õµPÓÎ!ÓêÕ±·ÍˆoÅï$ø4÷µ£e!Ó†R©û,ÞΦbŽ†lŠ\›»ÆÈì\Ùú$Rk=›‹Tö° -Úð­,6äX€qÐ-}nJ®k^¨£ô@l€¼ÜI>Œ˜×TqÅOшتxín°úâ…õµ4JÌäÅV kw¨Š‘þI’€¥¤\°^0Vò˘íep«%"h* ê mQôB±Ýë“ÙÏXšEÿ¶Éµú0üöA•ÚªÏPbÑËöê6EL7‹:Æ6ÒpÑÁå»ý%Tñ4w bBY6Kn8¢slG›‡œ .ôˆdŸ*‹îí¡ï8‚ìu)+¸"xJmKM Û /û’oË3ÌkŒÐ‘ÜãƒÛ’ÍËïÌk‡;/°¿‚ë’àU¿n¦NÔí]…6sÍ£¹ÛÉi<9s„pÓ4ìЛ•E÷³¡{¨Î¸›Ñ(@£ìª–8¥C©·g{foU>Ñ™vù¨µ«IÈÜÞPœU›K)ʶZQýmk ·çƒe~cs3˨Œ°2è£ßÕ ¾ÄùNs´Añ,ù¡H¾…¼ÀÅt••å;: -œ•F“þ/Eň¢M—íîÒX =r‡K—+hö¦­y¢–éx>39+¥¸®¯k"½…Çl÷ÀJí„MÚÜ8ÁYËÜ&F¶”´Ñnýó'¶±_t¯…´²ÅÕÛ¥ ¼”žŸö8Gojü=ã6ÀçÞ}IP†C?äy¹l÷×MÜ 8ºSJ§Y´%$<-ãw¼S9ðJU&t ŽÞ[™#ÅÀ½5‘µc§O&QNðoMÂM/ …Ìþæ2¼`ÕE”n¼]QàѨPØÅA9TM;x¸á•3O‰­X»ãÞä»ÎúF_s„"oêoì9‘ö-Z%×/ÌÓÀ¨LÒ¬ŽÇçDrU‡¿ ¶Ï­š6ÞxÓÂï¯Å÷†½®w~¿Î~ÁX0nïýe´Ý&¤„’Wm»Š)Ôšë2ÒÄ`ÇŸ­B¢ž}dMÞ xì)㟂ñU‘dIÂçÍ Ê>`O‹5ö7ÕKõ 5ñŽ£ÓÔ‹Á}äIZ-™óDZ´[ŠkA,è3úI—ãq­«E2·:±AÚJÇ‚p9lrEèp¢V —2JÙçï£)m×·ÇѾ&\!H !Wuy§|õ ¸ýkI±3ÓËôì ünŠÐŠµ¼J§UÇ‘º;Ë÷Û\»#QÆ>‰E¼ßå îÜôÕ7;w“«)½VM.òHfÜ7$fÒzVÒþ ®:ëÍ©Û"Ä%yF#u»¶b1:î£Î¦Ð¦ºwI§âtß±.bïö:Áô|š·!/ä‘×…lEŒ];\PâéƒÀJ-†ùfï\gX?ÚÝbÊâ¼q#°È™JZcvr›”)\MUŠÿ½žØ«R#óÞ*{OÙ¥òó£SØÊ3«uS¥Ò+¦Ë?:ô$±ó4£º‹Õ±™o °Î³d q‰ÿ|¡âWV¬I¾ßxo¦Ì=ˆ4Šž%,²——Tí–]x-«GU}¡:¼@šëäãÕô´:+VfÀiIÆx†‡Ë2Ë–„\ü_¢øð?¸ùº»Áý\}(þŸÞüendstream -endobj -863 0 obj << -/Type /Font -/Subtype /Type1 -/Encoding 1932 0 R -/FirstChar 33 -/LastChar 125 -/Widths 1942 0 R -/BaseFont /XFBGNO+NimbusMonL-Regu -/FontDescriptor 861 0 R ->> endobj -861 0 obj << -/Ascent 625 -/CapHeight 557 -/Descent -147 -/FontName /XFBGNO+NimbusMonL-Regu -/ItalicAngle 0 -/StemV 41 -/XHeight 426 -/FontBBox [-12 -237 650 811] -/Flags 4 -/CharSet (/exclam/quotedbl/numbersign/dollar/percent/quoteright/parenleft/parenright/asterisk/plus/comma/hyphen/period/slash/zero/one/two/three/four/five/six/seven/eight/nine/colon/semicolon/less/equal/greater/at/A/B/C/D/E/F/G/H/I/J/K/L/M/N/O/P/Q/R/S/T/U/V/W/X/Y/Z/bracketleft/backslash/bracketright/underscore/a/b/c/d/e/f/g/h/i/j/k/l/m/n/o/p/q/r/s/t/u/v/w/x/y/z/braceleft/bar/braceright) -/FontFile 862 0 R ->> endobj -1942 0 obj -[600 600 600 600 600 0 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 0 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 0 600 0 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 ] -endobj -746 0 obj << +778 0 obj << /Length1 1630 /Length2 15892 /Length3 532 @@ -9307,7 +9749,7 @@ stream xÚ¬¹cx¥]³-Ûv¯ØfǶm¯$+6:ìض“Žm;éØè°culãëç}ÏÞû\ûœ_çÛ¿Ö=kTªY£æ¼îûZ”¤ÊjŒ"æ¦@I{WFV&^€†ª–²‰­­‰9ÈAžQÕÁÎð×̉@I)æ 4q9Ø‹›¸yZ@s€8Ð ÀÆ`ýúõ+%@ÌÁÑËdiå  ùËAKOÏð_–\¦^ÿütYÚ¨þ>¸mí€ö®)þŸÕ€@€«`²Ä””ud¥4RŠ) =ÐÙÄ ìfj 2ȃ̀ö.@Z€…ƒ3Àöß €™ƒ½9蟭¹0ýåq˜\f ¿a@O3 ã?Àèlrqùû ¹,Mì]ÿöÀÕ²7³u3ÿ§€¿v ‡äèìð×Ãî/ö—LÙÁÅÕÅÌäè ø›UY\òßuºZ™¸þ“Ûô8Xüõ4w0sûgKÿÂþÒüE]M@ö.W §ë?¹Ls‹£­‰×ßÜÉAÿ*ÃÍdoù_0œ–&Îæ¶@—¿4¹ÿéÎíð¿íÞÄÑÑÖë_ÑÿòúÏ@®.@[ &V¶¿9Í\ÿæ¶Ù#0ÿ3*2öV–ÛÍÝÿs:ÿ«A4ÿÌ íß"LÌìm½æ@ fE׿)4ÿo*3ýωü? ñÿˆÀÿ#òþÿ÷¿kô¿âÿ¿çù¿SKºÙÚ*šØÿø; øç’±ÿ?¼Mì@¶^ÿ7ÿÿî©üw‘ÿWW“¿­±·ü+ãW&–¯ÿ@.’ O ¹2ÈÕÌ -`abû·Wÿ²kØ›mAöÀ¿šþ«FV–ÿ†©[Ìlìÿi>ç¿! ½ù¯ÿ¯LÿªžYUTKQL–þÿ¸WÕlÿΗ+÷¿#”ÿN‚«º—#ð¿Òi)8˜ÿçâ>QQO€7#+€‘‡ýïdc|å`÷ý¿äþë­L\Až=&Ö¿¤ÿü²ü“û? ƒÿF#aoæ`þÏ쨹šØ›ÿ·ÿ4ü›¹9;ÿUù_7ÀßíÿÇú_ƒzÍV9˜ñ[§ge¸Öáæ OŠë ô±B‡8–6ªÔ8ôú§‡o­4~« ajšæýh÷Z:q|ß—¥;íñ¥îM^ù’Óö¢ÿ¦êä¦?d6,EÎ8ÕŠö¾\”ß‚ÒåbÑ<Ø™TQ5,yƒ!žîdw†»|¤ w/ À¢xpDñ3KkˆÃîBkèûqrJ•tüø@=462ü³÷ºŸ>7ž’Ï +`abû·Wÿ²kØ›mAöÀ¿šþ«FV–ÿ†©[Ìlìÿi>ç¿! ½ù¯ÿ¯LÿªžYVGGJVžþÿ¸WÕlÿΗ+÷¿#”ÿN‚«º—#ð¿Òi)8˜ÿçâ>QQO€7#+€‘‡ýïdc|å`÷ý¿äþë­L\Až=&Ö¿¤ÿü²ü“û? ƒÿF#aoæ`þÏ쨹šØ›ÿ·ÿ4ü›¹9;ÿUù_7ÀßíÿÇú_ƒzÍV9˜ñ[§ge¸Öáæ OŠë ô±B‡8–6ªÔ8ôú§‡o­4~« ajšæýh÷Z:q|ß—¥;íñ¥îM^ù’Óö¢ÿ¦êä¦?d6,EÎ8ÕŠö¾\”ß‚ÒåbÑ<Ø™TQ5,yƒ!žîdw†»|¤ w/ À¢xpDñ3KkˆÃîBkèûqrJ•tüø@=462ü³÷ºŸ>7ž’Ï ™**À)—PHW£B¢ªU³m·WÛÔOrí]VÉ• $«ùqyĤ"õÂzŒf<0ëûë£Îðf}/Ÿí¤>bêFè,VØUd‹ÕƒæÔJlNÍo’©+¬OXÏ1Ï-¼§c-NÂ1ipÝ›í\AÖµ?ªª…¹{G.ž'Þ½µ$5õü^oDÌÒ’j8Á¬R/ë‰yÝ࣑<Ì`½^ úêì`uvdé,RHžê$žkK‚>&Y ¤ºÛ”OØ&â„o™kâÆœm§Ù WëÙÉ ¨œ/û«Ð[BÒó´`Ûtä¯äÍN¿GfáĈHªýmVéDÇÏ“Ÿ”Ä÷¦Y_kÉóÍ+èü1pÇÒ¨åÁ³ñÂjD•jÊ @@ -9369,208 +9811,210 @@ MI ¿n$rÝ XðD˜t ÎõÓ…”2§—n„sÞmOÆ„ ˆ;²ÃßshuåU9ñÖ&;y-sõP~K*ªÅz4rnp´}ª÷œõ)RB—+«å—>¢cI£Ž¹w× éhz€Ì\mm £MúHþ×<×|Ìï­&‰ Ÿw³s£Üë+\?VË´<=yò‹ØH»M'²ñÑ67Cøoí+A5x5½·x¯'_Ë c!vÜ~óÓ4¶bIpµP]ãH^ŒúÀnkLßYßÙ„æÀ,•‰)tCœrÀ‘ Çi†Ï±m$hýÈn.ÿ¶»öO¿ªWÂ[–{OFChÓ'žWùÆ*6L‡1±’g^H]u Ââa3ð¸g@—TÕL_1@d7¾ùÁ“†µ‹Œ:…‘XF.ÿ§Òfb1\ÄñSÙ£Ö®TÁIS ÒŽã{9.´ v´ôPš_$ ƒºÃ™.T€Áj”¤RÚ.zàÂiXÎ^;-”ûkwå0HMKyÃûSc-‘tkâôk'a.*bí Û¶4ŠdÇ&ž*qÉŸX‡ÒÝÓä"c°4 *+9‚3£ cáE¢Lg%ãŸïÁó§KíÚï©=ëg‡~Q)œu‘Še7@ô`­¥¡c˜„s2¬ìe/ï´Ã÷5ØI*·[ÔrHîD4;"«hntRÉ´c¬¥ŸýÝ„u å{ÿÁØ }hë …x;³°çlqf—š “d79˜R€2õ¨)iµ†–Gö»€ê&‚—ÜÞ¨CšùŸeVò]ÏÓ~„ð¡T}îY¸dë`XÕìéÎ<òe JË»1ÒXê¤QáÀ#÷gX¹;«ÜÉà{}¤* ½lÈ»€~.ž©kÜõVÅÇ®þÒ€§ú‘7ã$o—#€àkص <Éâ{ -¯41¶{ºQµÚâl·Pãg;‹($@QQ~:ú4¥ /麞e„¼æª't“Ê>~œÍÆTÂ={š÷ÈcW ä­ë6Å͆ÇIjË‚¶{Al ¸¸ ²œís è¹”Lª £ÈàýÞùqœöÇ=*Y€þKTØ&§Ð9æ2ös³Ìü±×îªÊ›õäõ§=ìÌÉIx=ãç7åv[¿Céhw›«Ó(îl*ø®Ÿq ‰Ëb“ÛfÜèY àûYÚÿßRŸåÆ |)¶U-*ª[rᇻ……øw8me-PÍsóQîñúW™N‡vé¸î²”š{e³ã=öEëe>*­xQÿuò_­Rñ„çÒ˜ ¢þ«Iïç?d¯Y¹Æa½/Kz†Âc™›gZ6qæåØöì—3 p0, HÎIM,*ÉÏM,Êæ5Ëf–endstream +¯41¶{ºQµÚâl·Pãg;‹($@QQ~:ú4¥ /麞e„¼æª't“Ê>~œÍÆTÂ={š÷ÈcW ä­ë6Å͆ÇIjË‚¶{Al ¸¸ ²œís è¹”Lª £ÈàýÞùqœöÇ=*Y€þKTØ&§Ð9æ2ös³Ìü±×îªÊ›õäõ§=ìÌÉIx=ãç7åv[¿Céhw›«Ó(îl*ø®Ÿq ‰Ëb“ÛfÜèY àûYÚÿßRŸåÆ |)¶U-*ª[rᇻ……øw8me-PÍsóQîñúW™N‡vé¸î²”š{e³ã=öEëe>*­xQÿuò_­Rñ„çÒ˜ ¢þ«Iïç?d¯Y¹Æa½/Kz†Âc™›gZ6qæåØöì—3 p0, HÎIM,*ÉÏM,Êæ ]f©endstream endobj -747 0 obj << +779 0 obj << /Type /Font /Subtype /Type1 -/Encoding 1932 0 R +/Encoding 2007 0 R /FirstChar 40 /LastChar 90 -/Widths 1943 0 R -/BaseFont /RBWNCJ+URWPalladioL-Roma-Slant_167 -/FontDescriptor 745 0 R +/Widths 2019 0 R +/BaseFont /JYYGJL+URWPalladioL-Roma-Slant_167 +/FontDescriptor 777 0 R >> endobj -745 0 obj << +777 0 obj << /Ascent 715 /CapHeight 680 /Descent -282 -/FontName /RBWNCJ+URWPalladioL-Roma-Slant_167 +/FontName /JYYGJL+URWPalladioL-Roma-Slant_167 /ItalicAngle -9 /StemV 84 /XHeight 469 /FontBBox [-166 -283 1021 943] /Flags 4 /CharSet (/parenleft/parenright/hyphen/period/zero/one/two/three/four/five/six/seven/eight/nine/A/B/C/D/E/F/G/H/I/K/L/M/N/O/P/Q/R/S/T/U/V/X/Y/Z) -/FontFile 746 0 R +/FontFile 778 0 R >> endobj -1943 0 obj +2019 0 obj [333 333 0 0 0 333 250 0 500 500 500 500 500 500 500 500 500 500 0 0 0 0 0 0 0 778 611 709 774 611 556 763 832 337 0 726 611 946 831 786 604 786 668 525 613 778 722 0 667 667 667 ] endobj -684 0 obj << +716 0 obj << /Length1 862 /Length2 1251 /Length3 532 -/Length 1860 +/Length 1861 /Filter /FlateDecode >> stream xÚíUkTgnõJÀ+Å€€¸ -æ2@ Š&X4-w¤2$H20I0@(PÁ Bå"Pi¥´^€ÊÅ`EÁS#BAn¬\uÝôØ¥?wíÙ™?ó>Ïó½ß3Ïûó™™xxèl$vF„bHi€“«÷A €D2ÎÌÌ …!1îÄ0 ííA€. @*@¶£QÈ4ªÎ pB£P^W X8}²(²èå± !à -‰¹°ëÁ‚ø€7ÂâÁâ("@çó¯Å"À Áh$Ì&â@`óXb á q¤EGL!ì–a¶$ü- £"Ì`™üÀ,²!? -`ÃÉ Áö‚1'ÿ S+›;Kø|7H°Ø~)¥¿ð€Çz£@á1Œ®F…+¥¾ð²9W˜Í“V²L1Äç±èÂ> @"ÙšºLðDÎ<)Ìöà‰Y\€ñEð Ù+­`ñ-!Ñé>þôƒVoæºDz@<¡xT8 ß©—jð]¥„ò¤@™H&ƒ˜{ß~®Øì3! aó„!…j @( -Eá°„UT xB6,`)æ˜D"bl €Esà (nq¬ 5@bñPf-NM¼È.T€Œeÿ "S0 …X0æü¶~/ýn‹áúÀ2ÀV˜ˆ‰¸Kð_ƒc0i bìm±A[ÀÎŽzôß„, ŠÂBñÒÙÄâ[sxØÈ`X -³p½ÝË!)4¯:¹"ö³s·¿ÿ€¤õ¢­RÝ«ÙìW›Ïcõ¦žõ4 —Ž+¯—ãÃúŸ³Nꢗ 2ÜÒ¿œ.ѽp%­¨Ü/+žÚDìñÆG%¦ÉÖ¼²2eÊ#|N|­4¤5¡Ï|³m{ïô¶¸6³lÃÿ\ãÜ`·öFK¯–¦›ízÏk¼¿ 5ð¸sëdm\Þõ¬‰[÷\˜x‘sš¹‚ã¨< Í>Âr" -+ÏzË]•òˆ>{~½{zS€ô‰qªiŠÙ³VïréLZ¬aÌï7Ã5ñwRÇ2Šg¾r×Â53® Ü–']W’2ã÷6»µ=´æ¾ÜÜfå&û(„ã(ñ‹êSŸ–Ö˵»ëõ@Ý]w{2_j¹uh¤Q\%WfeµÜãc$üð¸MG÷í½¥ãïé|û•g` .Ãr~¥‘Ñ2ãM=çi,.-V^=!LJ*ô¿d9œÒE¯d¸§5]¢{ñjZQ¹_V<µ‰ØãLL“­yme>ʇ<]ðÒÖ„>:ûí¶í½ÓÛâÚtαUôÃç绵7Zz´4Ýl×{AsàÃMøÈ'['kãònìdMܾïÊðÀ‹\ÒÌGí ihö1.€¡PXyŽ8µÜS)é³ç×3Ó›ü¥OSMSÌž·z—KgÒb £»¦‰¿›:–Q<ó5S ×dL¿>pGžtCIÊŒßÛhìjÔöÈšûjs›•»ì“`ò õªK#µí!üR¦¼Qin.‹}Q…Ôäïyþ}ýιøŒâþêÓ‡ž•Ö˵»ëõ@Ý]÷z3_j¹wh¤QÜ$WgeµÜc$üð¸MG÷½¥âè|÷µg@ .ƒ ¹¼ÖÈh<~=Œ¢e*ë²32ÿêà+Æêòµ¢‹M¢’Kñc‰´þc`ÕÍÎ.ðj<ãHN,c’‘¦—|-Æ‘ãí«,›7ÊêôzjÎÊä}:Æšýʬ(=…‰¬RÈãœÑžÍLÏðp÷ôÛ¯w¤9/)€ð\­î{Qñ¬ 9»clK˜¯:™q¢õåà„Õ”hÜ[›v©«Ô/ÅÐ<¾Ôàh3S éT~v½Š¡@rÚoÒý.útq “³¹QS©çþaú2nð÷Éï7…~Š¶šÐ@níËž‰q38YÆ}®dÖ9T—›{íÇí’zB"pŽ¨,©]¹æ)þ¦u`çá}(ÆáqYGÃÇL<4t™å²+Ú 5×u e!³;t"4矕Šia«õS pMïÖ{&?Ö¾\à5rjÇOjŠ¥¤õ»vàƒéê›Þd|ÞA×Ïý$ôoº³~êWáyóG‡ÕÇULYŸü2îÃüFé‚ßÿ2T:¾>ÿÚ-ù59Ñ…Ð:ÑÚ«È–ª8öpRy½òƘ¤á¦ƒ¹Œ¤¼M9p&‹í_šç{ñG53’uEeñ¸ª©±§n>%pP´ÝST}J›G9Ï\Æ+&+KýiŸ{ïû5Ž*æœtzñ÷S¤7‰Ý/4êZ¥Fe¾ôª”©é­Ö7[=²Ú‡˜ƒz²9+K:¥zd_3H³ßÝo¸cgîÂoRû–u㾊Äh{¯àFgœåÇ:O¾Û¼û57ÿÙqèùpŸ¸Îÿ¾j•J}Ú(Œv_P1F¬+L»ð«û®BeJò|Ä–ü¡ë»æ1š½[Úß0Ûô*ÑBõmf•‡éjãâ¾…’J€¾m¸X]0ðI¼½lÀ-\Ÿ0JcM|^”ÐÐî10×%ÉiÈMÈq—_‰"g>)EŠýZmtÊñÅ=Ñ—EÝà(£¶š†€;Mu<Öµnæî=8µ¾P6æªZ­Ùg {·Ó¥lT·u¡–½»åö¨cÈÓ5-I¿MóçÙá¦pØ7/]sÆfC"b’“0Þ]°]ßp]¶Ñ^‡ïkšÇ?¡>œÝê9h;>•MsÊo:Â(žGŸ7ùñ›¨£ªÿµá£¿ôµè«êꎞîìJöu5k—¦œQNmÜÙÞM8±+›ù˜q²ïKºëþ9¹Öê¤òXvGH½ wHÒ“í¥Ñ+㬠ìÍ­à| CþÜÿüO4À®n# Åý èÖþrendstream endobj -685 0 obj << +717 0 obj << /Type /Font /Subtype /Type1 -/Encoding 1944 0 R +/Encoding 2020 0 R /FirstChar 13 /LastChar 110 -/Widths 1945 0 R -/BaseFont /AAVZAY+CMSY10 -/FontDescriptor 683 0 R +/Widths 2021 0 R +/BaseFont /BOTYKT+CMSY10 +/FontDescriptor 715 0 R >> endobj -683 0 obj << +715 0 obj << /Ascent 750 /CapHeight 683 /Descent -194 -/FontName /AAVZAY+CMSY10 +/FontName /BOTYKT+CMSY10 /ItalicAngle -14.035 /StemV 85 /XHeight 431 /FontBBox [-29 -960 1116 775] /Flags 4 /CharSet (/circlecopyrt/bullet/braceleft/braceright/bar/backslash) -/FontFile 684 0 R +/FontFile 716 0 R >> endobj -1945 0 obj +2021 0 obj [1000 0 500 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 500 500 0 0 278 0 0 0 500 ] endobj -1944 0 obj << +2020 0 obj << /Type /Encoding /Differences [ 0 /.notdef 13/circlecopyrt 14/.notdef 15/bullet 16/.notdef 102/braceleft/braceright 104/.notdef 106/bar 107/.notdef 110/backslash 111/.notdef] >> endobj -681 0 obj << +713 0 obj << /Length1 1616 -/Length2 25291 +/Length2 25334 /Length3 532 -/Length 26183 -/Filter /FlateDecode ->> -stream -xÚ¬ºc”¤]°%\]èª.uÙȲmÛ¶]YV—mÛ¶mtÙ¶ºlÛÖ×ï{çÎug~Í7?r­çDÄÙ±#ö9±Ö“™$òJ4ƶ†@Q[GZzN€Š¢š¼••±¹­4¢­µ௙š„DÈhàhnk#làä¨Â@###€ƒƒš dkçfonjæ ÿ‹AAEEý_–B†nÿéù»ÓÁÜÔ@ú÷Áhekg ´qü ñ½Q 8š&æV@€œ¼†„¬€\LV ´ÚXä ­ÌÒæF@ ÀÄÖ`õ €‘­±ù?¥9ÐþÅpì€Fæ·]€vÿ¸¨v@{ks‡¿Ïs€©½ãß8ÚÌmŒ¬œŒÿ!ð×nbû/!;{Û¿Ö}ÁämŒìÍí³Ê ‹þOG3Çr;˜ÿulMþFÛ9ýSÒ¿¾¿0½Žæ6G «ã?¹ cs;+·¿¹ÿ‚ÙÙ›ÿKÃÉÁÜÆô¿Pì¦öÆV@‡¿0±ÿéÎÕ ø_ª7°³³rûw·í¿Qÿ“ƒ¹£ÐÊ„šñoN#Ç¿¹MÍm éþ9*6&¶úÿ°;Ùý§ÏhÿoƒÈÿ93IÛÚX¹Œ&Ðt²¶ŽSÈÿïT¦ý'òÿ‰ÿŸüÿDÞÿâþwþ—Küÿ÷>ÿwhQ'++Ykà¿›ÿ9cÒ€†ŒÍÿm`mnåöŠÿï‘jÀÿ ù„‘p4øÛ -Ó¿rÐÓÒÿ‡ÑÜAÔÜh,oîhd01°úÛ§í*6Æ@{+sà_=ÿm%€†žþ¿ù”ÍÌ,mþi<˸€6Æÿû_‰þeN§&)!¯)Nõ¿ÏÔãäÿjï¨ìf÷—Úÿ(EÆÖø.þA´uxÐ0°²hÙ™þ^9F3“×ÿ!ã¿@ ÿµ–1p´7whý-›žáßâÿÇç¿V:ÿ FÄÆÈÖøŸÓ¢äh`cü÷€ýOÃ?n#'{û¿ºþ{çÿýŸë:è -4‚^ùckÄh‘š‘æX‹ž34!¬Õ×Ã6dWÒ \˜ï[mÛ퓺ÍQ¡ÿ^DÛ8ÅùÙê¶xj÷±/Iy0ÒƒfEÖ ¼ÌÃñ"¢èÍGÜ mg£:ð§Ó-K;S‹ô¸ZÞ×d¥W=Ø™PPÔ-~ÿŽ;ÕÎduõDáKäœï‹Bühïm”RƒÚЂT[pzFšpüôH60:<4Ø}Ñ»M•óƒ„ËŽ4Â÷W66Ÿ¦J¹He‹êïÝn-6CoÑÕI9G¬ Œ¦§¥aŸáòäK‹Qîïcþ~Ÿ {4C›uÝ\VÚÜñÉëÁ3(!×áÍfª“ËѿѪ7ð^Å®Q¾4¢]G]·0žõÕX°G-Å¿iÞngó2ø*(žTñ³u_¾Œxô«‰ªjy¿Ý -¥$T³ØÄ^×âs:‰¿„³Ót»©È i+3«0€Ö~Z¦Ò‹Áº*ã¹®.òzbdÄhn“<£c¿§¯ -ë³ü>Ëä1os´˜™(ÏÂß_Ø⟣٦$z#zlúµ1R?m%„ƒWåc¹BI-8v‘øòKNxoŠá­†(׸œÒùÏ[4¹RÈFNH•ƒˆUIþj¢ïö…D«6Êh”oϯ[%Z0ïÆQ:Åç $؆­˜U‰ú!6Wã1YDæcô*þ`ß•ø¸qÅó¯R rú†};V”¡ý!ÅYs>*²%èa¡ûG¶G\V­n63QËR]BlõõLƒšªNS±o³®Xãk”t¯Ž¿¥è%+Ú£|ŽÔuœÙ¨ýf4 l˜³®En>îg„ 1 æ„ÄNò]¨ß`Ф­×/i‰û5Òyµ˜7:ê 2M~¨‚´S&Ò>À{y$ «É6W¼H?ŠÅÏÝÉÓ*S;£BÝŠ ÄIÕÓ¤¹ª|wf ãÆ!â…@[|…9s³qÈŽ××—}>¹v¼¶±Ä¸©–ˆ2CÌQÕ™15Bj"«RŸóöÚ窙Ä;cF1rv/T…ÎeBPBœÐA/[ŒÒ'}¯ä •©Ú{rRŸñ[±p†âºÙ§9êppàÒ-ƒÅ”vÁ{:Æð"çd€BnRâtïn‹}¨Â‡‡5„P‡<ùáew”McÛb… L™¯ÎýŽ’µú¹¬<,ÌÒ=¶I¥]¥¶‚•!ìk ÎÔÄdùÝÊ:ó$q®éÞ®Šq¾ƒ¼Æ<ÃýÊ,svwA]¯cŽŸ™¾"{=Ÿ&u lc ^£çDÿ)a/{¦8N.§% §q±ü5¥×KÇx20œqK;ÈjtTŽ¸y´&H*À͵§¶q¨p¥GsÓü G4%Dá—rnì$áD_f!º>Èø`k‹æógúCÞŽsNU¸ÁŸ2û¥çüUÔÎ7Ú-/3аÉt=ÂœZžZ÷öešElòÉåi³Ø!š±ýKŽœ—DíØûø½u×"ƒq”‚d¯²Ôšª 9僄U1ðêpbDþ±kWaGÚ”ªø5ÁÐ ç#Ç~ÞŸú§j Çÿ½B7$Åšš’”6ìG†g€y†µWÿÚ›¨¸ð‹Êö|Ÿ¹^qHcOG_ùÎ}ŒÝËîNÓPb¥j„úiQR}D™CTµ u( Õ]ú·ð»è·¸{§¢e%‚ÓòåO™ Ú¡Þ=’Gf0ýa½<ŒjZ80P߬j…'¿Ú_/ü„ÑêaÍ·LšÖz‹€f1ÏÍRpÿß&áì88g=§u©Îc“ñÖ›í²!»GYº7ù:1’‚¾3¼rž.5»W¹"j> •Š2¦Õ?Ê{®!¹ ªô&(žì$¾^ºêX¦ŠÓÂø Â} >‡ii3^ >ÑÇÞè‹›.7ùLå# +ºÈ!¼®MëŽkX¿ &î‡O÷•ÎקvŽß÷›/á)]—¼<.Õ_‚jÁŒó(e÷¿OÀœÎ”!9¼¹¬Õ)jh‚r¾8®i® ö%»@æB‡›GïÊ.PÔœ–~1+D²¨€*Ûšq¨²×`ÕäÀ½`ñfŒÜ~{éSšØ.7§ÂÑV,¼sqÆÇ\ów/Lrå¼æ¸-6a¨oIÀuêˆËîÕ¨@¬EÒß­“K-۱择á.ÀäA]ÏB²ßb:ƒšor…‡@_×ð—ù L'¾RHüÅýϪà­yZAQnƳo ôSóŒà%à¹WœA€\ArKñðÜÍÕ%ô¿æneDáš÷9(ËMŸ·œÔ2ç¤Ç5Á2?PFÏ𢧷I^ß÷4#äD}ÏügIJÒ›]RaßÍQ×|™=ê*à¿j›¸­¢½Ø®Pbû&À„K¦1!>7µ‚Á’¾ÒºTkÃp¦Ô"•Cy¤CAx$u‰WÊHµXu™ªÔæuz×ðœàÅÜf˜6‚Š&´Tçð.ÄÆÕŸ¢œ3…—ì’~¼.¬¨ñÒ°(—H cð]€g R+…Ó©®:¤ zœ§ó×p–†?'Y¿´|gƒ~·xæg˜-ËÓK̸֡wî?3Â[¬­=`â(*ËpèUÌø®Â.ÃE=Yâöå8#ÉH©”7äÊ>S»Á–Þ«Ò1â‚„Ñíf'åÿàz#ªZ:A^ªë·¯ìœü|ð˜+ª¨¶^48i¸Cº¹,xŸÝ3ëK&ƒ ‚ -Ý}ÈâJK3î„ÕžÖõlµüÁçÓDÓRfd‚ICÖFJ$GKó¾¯D˜ü‘·vŽ+À$kPSöc«¶U|R·Æ ‹‡hX'œQýSÁàØœ¸5£ -•LŒ{Œ›h1X+ðaÃ1©GÌ$“ñ¥l&HÝoÿÃ5Ÿ©qΧ©uAÑÇÁÛ9+.ÅÌAK¯lrD‡2||ÀÞW™òqo ÅU{´@ÎÜ^ËÜqøHΧ6U½SN0} ì Šz,sE¬˜¶a;eŽE/Í:P–ÒÝH“OïQ\ÉŒm–Õ›ÝèIY湪 F'}P¡Éô”ÆiR¤ÞÑî •¼Æ-D1dšMZa·ø»ooÄPe0™ù{à3X|ªÕ(Æ5rcˆí“ªCch³Áó€n']íõ%®$Á÷pÙC$äg´ž/qº–Q„¬{kÐÝy¡ »ä(örïZÔ”*"ILÎÑŒè¹ÐbG. /“!C¡U†RmÊfB,@²¼NïÊ;ÉE–•@’O}64jÂ(æcŠ¤½k#Ï÷éWOm½·þ'Ãœ¬2ƒ÷¦œ¸ìuzí‘tÓ^% vÅ©§{“F'Mj•åçKÐk>ó/Y`íe¦ÊKdëÑžvÜàlG8h(ìü2«ä¥1(_t“K¯cdOc?$øí?JÓßù35![3ìú‘÷ -M J9‚®»˜=¾EMì¥Ç§SëøüªæÊgg æ·g˜èô\ %#B9%´®©b]c A=Ô'‘B˜1É2ׄ١·]CbLX Bîo’›Ð{ü)EÌ~É–½ó‡¢½§‘E»©z! &‘e»ÊÁ»*7Èç_"mœe優t_8!ð¦[rФNC+PÖª=i -‹“Û,o2ˆC½³Ò=ÙÖk•/ØØK‘ÕœƒjŸQªÊ„·¨Ãy -@†Ä¿ØÜôH ¢ì’×Z²øPAçGÆKX•©Èë7ÿŒQŒ±f´ý1ÜF-Ùw|¤$»\ÃD¿‰x¼ È€Ñ"õ†t?oånŒFÖÙ»s¤‡V@•RÈ2Sx p]½ùö]¼¦ÊCRë ".zî¼å§ð©PGŠŠ Ôƒ H>öé%WÀD|rÀ©ñËE`…zôGfìí¢t•„9—šÏ¶3Í7„  ir6s¼ŸÏ‹¼Á†(»µ›œM•_Ï^–8%ÃÒÌh§Üs: žlwÇjèQ›–óž…-á’æØŽ¬£öI:(i>·QÄJé|]ˆgZC—º’¢0'¡Üœó7Á¿†pyfãÎCûâtˆí&ž?¨Ó[åÏ蘚ç>÷bE‰ÌiòK)¿Oµ…µËÃmžÒÃúÔˆÒÒ³ü}'ð– ixiªûÂcá‰|^"íÆÅ>p&ÄñâüGÚ:[>´ŠX>µlºZ‹ÿZ9Ð[:ž}€Àe‡Fk;èpO ©¿=–õySɱ¤T‰‚í)Üsm%¾äËï¨OZ¥8!'Ú76 ÅuþöÍqCS) (Ág-˜¾"Ÿmå:ºWV¶õÇ/ã|ÅÂY¿,F}ØÛu/Ÿˤ°¨570]ç 4eCØ¢Yøí–² ó—Z -Jë Ø -{Œ¥«KqHM+~ÏBO¨Ÿ?oiµxÍ+«7g7[*‰F]4HxD½I·È-÷€ðÚѦîº-v€á*hûT°ž½ g$+ªíá?t"+<äµ +zÒ´ÊßÇKÙ’«fÍ¡Ù”ø…È^fx—wÝ¡×Ú‘Q!·úwxm$, ãûùyïìC8@„S+®dtóWÚ³æѶ9ÊN-*h³ÞºE¨‹@­åðòuAIÒØždé°&#t›ÿ xªÅæQ§„ óãUÆ)3ªçèeœUýaìFÊ7iyªÅ+; c ,Uïלq,0úv~D5¡§Ü”+pùˆeÂí<Þsm=ûÌWôÃÉS{ö’'4ñ§±¶Tmon“º×d5 -9µÝ.Ý0{Z[Cdiî×É!âOø^)kUIÑhäëºCiµá{¾ç&KÚéçýoû›ÆîZ—‰ÜËlÓîÔù—6lÂKR:¶;y>ñuj u¶ M¯²á3Ú©*cð!¼cpäï ½¿§$+7æ,ÌŸ; o&ÁÈbÓZlÑ~ËwÔ»¤¶”Y¶ˆ~ÂÞÉ)X‡[u­çÌSX‰&©ìÈ-D rÄ-‘7Œ¿îV5Û—nþÙÓž­ÍÔÞš£÷âËì›tŽƒ‚õGQbEˆD>¤*꯴Â[@ÁÖ5Ƥö*>›9%§úýDHÔy µff3@h?L;¬îFÂð¡Íϸ/;*s ˆ¯cOåU®BÚ½/âAñ.kþÚ sHFC®Ü¨¬J½¯1þFn^×áöƒ¿¢WW)ËNV¹ŸQO‘Âömœi}Ü8åÑñ¶;áî=Ÿ8;2{¶†^ÜóJE9£n(tòx~˜Jþká)5þ–ÞBʨnŽ8Ʋ>>•m‹jS#®YR«—Í´…Á­‰Ù\ñGkï¬1_d:mN;ªž‚˜"a’žq€‹©°Ê?ÌÐÄ#ìÕãÙ{½=#Ç™‰¢Òò¢äè{¶Êl¯=¨çPÒDZÒ‹Ýlļ÷Ù-:ñeD8å=ü*$YTÔO½xÑÜúÜ]µ©ÑÚˆ”I5ãþ±×©_)ºNÈ3¨6«äµõ«‰Nó"äD1¬ù „®ê0ö°7®<4ö(Ìuæ´SˆQÁ“pR/Á®E©`SŒ^ôÈÅÙ@D‚±ñ–§æxÌä}ú”:»º¶¥uÒpp—§QÿÐšÓ -ÒÎ&rs¿:Ÿ°ôåÌÄÜÏVèy.<Ó!f•ÛËiQØg:0ÖáéãÍs_E©3dΑ¹Ÿ:A=Ë×8‹´dÍAƒʽïêÛRØ-À×SÄÂ'ãBØ\eá~›"›ÙRrD|©}Ýÿd¯qyIÇð1ó6§µ(‹‚hQCÀÛ#÷œ—é[6ED€ó‹%±˜úÍ<ZL9ÉAÒê“sõ“7\wêm’’¹Ù·—¬˜9ðwב0Êpø¢Ày&NߧBm4D”SD"«4*Èwît£&ˆÞWÄŠWÈžèHÌËKv3†;a4¥QoÚ®ÓA.óÎ`L›&•q‘óýÁµÚi¦týL6OcG!,çj§eD­=G83˜ø®eÁ鯑´^4ÒršXýŽ2Nä@È“mï†óD¼ <ÔýÙíŠÎ±6øpv\èÚž”%¦3+è¢W,K…êÙœçEÛhÃï`vÐyù'5‰$ع$rñ‹’ŸÅ[ -Ý(~®$"·jJZ«ö0V;XÁÖ9àL[ö÷ŽÃ=ú\µ$ÔeKE²¦ë•*VÃ% TÚÓì—£ácÒ㢎¯ô­1 6`hÒÀ7>œm¸>/ÿge–‰—sªè²àÔ2Vú¤ yîpwí¡úÜkÆƱg¬¯Ð·ˆ½P…ÊÔÆöÐGWð%!Žl sŒÒe £•;‹8Ù1Ëk²àÚ>Ø?Fõ$é;wͺn­æœÌ^Ü”/˜÷RºñTš„ŽzÇWÒU~WW›G0a– @8§OQvˆk?UJ_xJ”³&ûˆ#p;'+ÍUv˜á#9¾}¶Qý•þÇ%ë<"w9>O“d°FT´pü;í&w°nð-gùo …ÁŸÒ3íâDã»­;ÖC+Ò¸ïÅf@Ô -Æ°çe=âT“¥j-”_.¾Ø?0Šy!éâ}tF_0ØçÅæü¹oet¯IFeaa‚+œ:%N»YÎH”¿ÅÜÍSýÙ^7DžÀ“b}‹7kÄð*¹ÑùÕ|Aþ£Iæ·fuêEÛÛÜõî¼½bÁÈ:®Ô;I¢A9ÙP -á[xœŒ†÷\KQ}Þ£{ânUÃ{¨ƒÁÅð(¸ixJ -/ÀÅÜÍôx¢Pt|‚£»ŽPûβJÿ´ÌΧ•Í[…† %®§íßW´¦ú‡Ñá´L±ŒZLys)5œb[vb§¦ÖKÃB¬ÐüŽÛ|Å2Þ>‚µ¡XÉK©o[rHÔ\ñíq˜²? ßyæ ùíoædÏfN/Ê ÎMB-£ÁPˆ,÷#”|¬7a•´“YE8n¤ Hõ¥ ¨ùIHÿD}ž†‘#×Àä:>ƒŒlØ)_Æ1}N šLŠýö]ùNp’›±=’“j †/Gîr¶Ò£1,Â;c|6Ž 4Õ‘a 'ýq*v¥Ú³§ '|iú‚â®ìL5³ÇI"wè{À,•|XÐì¯/û(3Âö-4Ø—•0dT@N&‚†E|ð4þç.ùiÛÑœÈ1àü[Ò pJÓT †šžs;ícñU\ÂKÁ/m¨@‘§M=ò]“’Jí‚% ë_JXñÒ¹Žìhuó{¨øy¬–z­¼ÍAWô{iaz¢˜š–mŽÜ󺳘;¨2¨/ˆþ/»ÄcÆѶˆäó?™Nû¸°Ü F`® ^å±Z§ôv»ÜÃR4êI¯d¸'|ß|ºÐzëÔ%†=-ÉjÅÐÕï¡ó-‡Õ´;ÌXåpMž8Ìæ-< -QPÓ-áê“&eÃÜÓªŠ^" q\SVÁkøD÷>©Ìp8ð=·[5<‚K‹ “óç/=¨^ï{"~jhõ^Z ×çþ¸š[Œ ä{˜ÿEƒlqt3HðGRÃÞ¨î|¤]e1ݼqì&vÈúÍ’ðfôŽ•žŽý³ð¨•¯ëåu!šQ³ú¬€#yìížJ}ð`¦æÛ6YÒdvF§{KxôDl¬ -TSõ÷Ò‘òÍ?¡n¢‡ Ì>bO³3ÙØÈ#wÈVßÊ[½6´Éû‰V˜5xy`ï’ÙFC±èëŠY &³»ïÙXºÜR>Ñí.Ž ù’Bpe­Œ ¹Ž•®¶ºÁ¼ž¾ÖM‡çÃ{‰(Lv¹%Û<ÃDì¼Ù ÑÄ@^m„ï}(}屩 A?N'´89}¡ãÕ°àahg›ò…NyF=Ø,¨E$ª=ˆ -‡?wÔ]™{†]°á³Í4jÕâŠ”P)ssW;RëË„‘#•m“>®~Fí&û[¾F>«¹MÖ`5`¬M«,>NÛÈà/ÁnJ¾V¦Œ뵞ÑïyÀÞÀù؃7¨–Qa‘5¦CäÑÓƸÅCOƒ­r§Þ—س–ÕNæÉg%…•æþ²RZÔ€ªf1 -Êçx™>]ù‘³±”íìÕÄõ3OSF}óÞn+QýíPR»Š¦½Ý5­¨VÅÅ ç„þªeh—‡ÇŠûFe]mÿ‚e¤e¤RÕƒÓI¤MQÈ›.·—~#v‰XÇJ€Ë¦ïu»wgß´»Ù²‹Ð·‹mèΩˆU¦Î\ÂÜI!&ÅÅÁ -^>íª$¡‚ªN³°jQtˆâ ¡'§"»BKº-¯”¬ØfOUÎ51½D:e;…"YE­"^gŽLÖIÜ)Éæ#S|^o´¨/‘feý •á€•‰¶ 4ê|¶%ýý .–î´0¶&Û$LèÐÛýÏk¨MLèOöc«¨ðæ[›L3xÒZsýZ”Óîd42)wàÐ!É5³ ­%aû+|ã=Ê.ÜÓ¹3ÜÙ8Þ- pˆh’•™ž^¿W¯ïEvÃhdBdwü¨øPy>h†L r%@÷CøÆ#œ(|HD‰ñÝ ¾W6ÀG~ùç+¢m+ç®_#É€'[.ÕF­ ö Ô9”f÷iõD -ÇEE‹S9WM3×!ídòÔmAfoçõÄmî¦Ð[Òd‘F$ØíRUJt·äýÀ ÷ ä{v@8üªÍÁpU×°h7(Ë4l^b¬ç/«*ŽS<ÎÞÀ$l:®NléÓÉÙé)ŸÖ%¯¥Ÿ8ƒ‹U5ã=çøŸ>áŸKö…(W$#,•üZ°QTÀ1š¸ÊS¾í>Fj^*Œùnur8øÒ”¥tgá†EÑ\£±kâVružâ„õ#=Ü>?+ÉF[M¤&Ä7ë&%?×çRí¨¦E!3óÛvtˆ´S²–•¨GÛ\˜&w¬bÑØPÏLý,ýò¤ -0êæz©/`¸2ídž©Ä[@GÊÁn‚½‰Ô«þE9"*‚G*þ½Îbé”(F†C}†™W¹–^.~-죦ª îêê>. ó¾_þAC鈮ëø:%cý6{L™n&¾[™˜â¨†énC–rMÌÒ( ¿Zv›ptúˆ c2{d„q¡D|ýü¢ó䊇•©|„¦3Ì‹ÀŒ¶¹S(·’ ÖÿÎV‰Ò‡CýîδÐCM*y]?œeàq1œ®=à¨Ì>xÞd?O-G¼®·²µñ¤ç¿òºáåÞ¿ï¯ý _ŠS߃Ø#”ÍÝÈÞc³7—½û9˜X'!yf¿ÑìfÝ;ˆg3³Œ0¬`ÛemrG¨^²üzë ÓãÓÉ×eI’ÚuÓV¨™Wk))5ü÷pÝ3`ÜŠŽâf~€)`â¸ÒÉê ¦GñF¬&ÐœíçMÃD@«UJ¾ k¶¦» Öê^ŠdÔ«©ÒmÞ~9OºðQ†4Â>…£”ÈX>®è8#c -ÿ^÷É’^³õR™aÉC¼ÇJ®ÂZúí!ŽHÑwØÌÒ—þÅÍ7ÜÂĶ6Ú™¬žÛôäAkyýægT8 @.tß ——™³?â¥ÂËÀÖZ:WŽÞžEö~îþ¯6ñ߸lëóÈj*Ò Õñ¤ã×EHŒK˜âS5TAœåçÕ1œ(˾…µW+1ä„ÜrzEC - ŽM·«*T$à&N_Òò,j5% -œì_ØË\ŸŽdµíY|ï—ô(®iÙ˜ï÷_ <{‚ßnSéÓ7T³®lpá/Å=[ü][Ë6S[ÑM¹–3$`êMIuÀØR{,ÅWþ¤”µΖg-ÿqjòIý˜=ßôY÷idᜒÑtR˜)¸z éôªóe;úOt+%«Àã†Ù²ÇÙWË7pž>\¦ ÅxÑÍŸ*L³bæüQÄ'QÛ\˜èõžx˜:S,Q@²úIyîÛIÿAË)i^í·’ê#\>¡²ˆ×k¸ôpÀ/ðânoMe™3²ÌB¤ÿÆ]Ò§F¿"Ûà5~·±µÐÇVS´Öþ,&Tqx`•GYú®F/Í âå=TЉ¦ê&Ô%³S¬À#¯]âëI–7•„GKPj%?‡Vo ÔR6Ôõ+¯0X¤Vo€\Àå)s—X‚càÉRû{c‡Õ=µ\…=!ýûÚ\'<&~j~®èHü‹£l”ã7C0YœiÛɺß>¥¯:\»á84±tÊÒw6ò°á¤ëv­6hÕ·ØYYŽž[¨d%8ôc#œŸ+a&"Fš:ÄrU•Î­›‰@zSßÜ®s'"YÉNePtí«¬·÷?›;Ej“Í&>ò‚ßk@)oœ¡”ŸÀ¹f3% (¾«-K~u0`²¡`«Ã/ÿŠVÔXײaURè+)(™êéûÙß WHœ;tLçñçà’« ç·ò™‚< -öšûDG¹_× óæÕõôðªØtx˜†&ÍRueŠÖï:FŸ‚sy.!À\Ùs‡‡k¯EÁ€Ó•sö«x×CíÕ<©t¹KrgÆ/Y4Žö•V«‹§K¯€Kb1¸Ž†¤”,M1}}A­ÖW2Œ…á¤ÊùÛ8x¼3tã×Ã3Ï<º›©¼U³GüÖ†¤|D‘‚ZÚD…ûú÷÷>Ìâ’¾ÃÁÊ:ºŸømõA‘ÚõØ'º\ÝöH+Ì»tô¤H¿€áÖNÛstàmœŽ'1LÞd˜Í8¿Ê!©£lÄö'`•,áO›>Ö SÃâ<Ú…Ì¢î±D»Lôyº*mpÐœŸUžâ™Jš:‘¢`6Í؈÷+ÒÜ\ñ2¬aÃUÃ?wéöÛ<ÚÊë4'ž’!lž¾T§brÖœ-1_/&âXcb®ÓiÇD8ûæþŽu†åfmk7ÔõvüZ­ÏÅ¢ã|$b ŒAnÕ·Íê…¸bQ&¢½ÁRîX[ÂÅѸ¶ ¿øE·Ë¬[oÙ¶žÚ[£Ê«ïÌw>w¦{3ÿD)¯Iÿ#Ó)°Ó'×J‡£ÀŒÏF™¡ã×ö£M÷ß4ÙËáZuT»Ø²n“€9DDt”¾ôb5Û1g8õ!2õ¬j<­è+Íy" $¬ï¡1!‰ùœ«l_.‰‰´—k3q,7’•ˆ³F÷F¹¡ï_z=F¨ïœ:Gß¿q€*F yDÓ³–R3¡ÞPaZ¥~CRœúsF]ñµ«†, -áŠD(A~«ÌiðÔ–Eó—1+¥^¨„iyÖ¡dõgVs¥Ý_Çë t\û¥[Vƒ‹¢ ãŸž4Ž«EUwS¦€˜”ÍƵßT÷Ün¯ °"@æs÷‚Ù¡h B^#ÓÞ€Ý~aG>a­LÉ uò§p€ºf¦Î -ë`H“@$ÕflÕ=nUúÕ5îÙù-2?—+{žj•ð¡Òj›W b>H°ÿØ…9ŠÌïh‹æv =f÷{fÕüVì:Ç1["rù”SêƒoÑõ¾Ç’€šlOÕ‘äÌ]ªãuƒ0êôXPðkµ»9Ð…Ø:ÿÖ‹\þ±Öãà–{áÍÜÒ#ú}B*Q½‘W¢¢´ž…tZ…xœêÆ/*ÖV’^oá?Z‘F ‰Ô7” :ã øcj¿?‰zz1ÿÍ^yãývÍð¿\û0Æò±ŒÄ†]dqá=¤¿@‚Öº›3IoÝûÂ"Ãp™çMLò"–Îw»h=y|+Õ(¹2#g‰DÛkœþUhÉ«ýƒh+V2™¹,ÈÎ*MYcœ´ð¬äOæ~‚ gï.ícfÛèMM““!TêÕ6ƒ8 .ƒ)¡ éU¾ïmS‹"Œ§Ô°5” L4ûöã¾:‘Oìc³5hFWG8 sË›æs-¡ëûç";÷\¬ã2•„ys8‹×ªlºP²XÎL|¹©‰ü4ÍÞ̯v9êNvsr‰…Â+xCü>c¯Xç§Ë'­}ֲ߱ß1TÝçu#ß2çÓ -+¦É¿ìÚÖŠ^Ú®/\—sjÇOŒ¤+G4Õ–¬¨9 -,Ù°U× g­·ù;ŸÐôl"•R’uEc°VÁ2^ºBRA4MæÀQ‰ç‰¶·#ÂÊ€ó#Šh­5¾;•b‡§XæD ””gX]åF¥"yM…Y@ÅZéxaxÕ49ìÍ|ÑÞŒ>‹ŠçââD’ü2¼C%4öÿ/ô»ènÙt§ÄŠeýú2nš±t =_~ ¼}RÉ~>Ë »a0¬n.¿Î¥µ#M HöíTiCÕNjŽØÃsûÖ‘ýaç_ÒÈ£ÑxF‰“Ô EG^Èn Ý=†¨Œr&ª‡C0ŒwCÀ“`>ÒUÜFæœØXîØ}6ø[·ìfÇ·fíŒz¼–ç‡ñVÉSçä‘¿Ôìi€ÐgoLúº¨6UtY–S ýS´,ãþXppjIíWÀž8›‘ÊsÇÞwZ„EyB¦È˜Ê}°w9zÌ^Ù®(ÿ÷ôÈЩÛ<KäVÕø>Q/ÚÜ#ï×Ø·¢yû!«oø~Aòô­%“#¹ö÷ƒ¼BzÁ˜»ªŒï?_"’ ë‘Úë?w0ºŠüvˆ_…¡"=%_U[Œˆ|ð <"á6ìZƒ UcèzA²¿¯5`¢\î~ê×Sù©å¡ïÕšPÄëŠó+™ë´Z,kB¦§F ŸñÁêÚàT‰Ò~–á^Wíl¹PÖÓáÛ](R¶=$Ÿ‚$|-È°hˆÌñ„ÂÓU¡ãÆ.ùƒ-ë¾)=+µÏPDóÕÌÔÅ-öÇe~àï ëþ½ÙêÖ;fx\sYc2¿ÞðànóyRYƆYõä>n½3Œ=yF@NÓCBÒ ŠPœà€5¦+úÇ[rG¹h‰ºÁ™NÀUÏ ›ãö0ÛÖÖwé߯f3œEñšaJ†ºxüèEÈ ¯ÄUt6q-èa¥‡z5 þCg¿šÁ´˜Ù[Yˆ”œúéüü™Å<¦ÿÄúŸPÙ×(:þ†r<+ ll"¯‡-‡6ë‰ðÅdÒîÛÖ²D,vºÑÖq­ Ch"'ýc‚$^´5ð¾»D_H‡”Ò_ˆ¯¸®ÀŸ`¾í¤þlØYF)×op9Öh¼â«äz%ÓŒžËÐe7‹õ}fFîSª¬Pîdœú‹À¼·âŒgU´ú4L1˜ê'‡5ƒ„‡cDˆžáhÁŸ¥Ï HP ðñHK¯z›lîD‰õ“—z¿[š«ŽÁ/húKØÌZäjyù[\5CŠœG#ÀîcEU½o‡ë`1òd1v'QeºŠÞÆ­¯!Íâ¹IXÛ4+¼\zˆdÏ'sŸK ¦²R)¯l“€‘?‡ud¾9öˆ©jmMé‰*—‹| )„Ü©¹úºâúÐ(" çVð(è<˜¬öóPĹÆÏàϱþÔCL`E¿rKÖ}¥ÌÆÉe¸yZÓÚ̶OÑÎ~âŸ7ïã9•Ò&œkq¸F¶F#¾Ê Õ»ci€kzÆh²"”œf¥²T¼ âœóÌáæÕ¨`Vv÷ùø»ÛÔ#GäDz»`Íõ¸ëØò6ÃIM~ -1·ð€š2åªvÙz¥›Ž³AfW­æ› îs÷óK—i&ê¯Ózy¿ðƒþ#t°ZÚ)þƒÝ6Ö¼˜ëþ¥ØwÌ ãZ5ãRa Hl[:VBJí3¹ÓÌ/*m“eâ…Âé;á°¼¥e4˜ìÔRéà©êý_†Í|P"w9B FF¯Ý,€z]WñóRAJúۈ멧ÍͪŽI{9ð‡,Îo²#â«*¡pŸ¤Š†^YRnTȘqÛG…{í~ý©J,!à‘¼RçÌÁ’0ör¤A[AÌ ‹áé$¢$’JQßGó½i·˜åÌôiÄ«õUÆ ô¼òàÝõ[P¹BsüÔü.¼†³».y‰ù¨†œ÷·? -kÈä+>x‡ÅôŸåÞ„PÁ EEo-B1ЦL¥ŠñãÝÖ›²Ö›ï{ƒÎûZq"Cöá±âši¨èbyÇû[&Èïd_†/ -ÁÑ™i-j´ã/¾fXØü€ßÙ(‡.V’+®¿ ² -½JTàÇÊcŒ†úJ$1³Ù«B«“HûS•° î{ƒ)E˜ï@Ä|èÈö,›G|8fäUÜêg¾dÊÊSð õÀPÒ”¬^Ÿ¢õ±ûJ#„ÉòvÖœ¶2W¡ýâ­Vø~-…3RüzÌýÝ÷ -3Üdc ×›+°É'©z8údÆÕùÛüÌ[Tòw@ÿŽ¦žÍ…gM/Ù›ƒéFŽ]á,ˆø½Åžlx+d±‹ 9²ðä~OêÌKC†«hMŒú%ÎvkøæþÒ(„¼MW{B %8T ØdaèÒ…`[Ô¥Ýy¬CCtt?èhîÑâðïä÷`ãß1>ëÕÙu•î$= ›gSg¸W‚Åw‚¾H. Þ¬¬_ÕLz£x­÷þç…«ˆ9ú¼Q³:²sðÖ9v®A%ý˲ùïß¡ãë’!CÒ¶è‰)YXP›Äî­é•1*A‹EöRSîŸùÆš¦ÿ8L?#ºOYI(¬c,F‡n¿ô¤@É«ïE6ÊPdw9^Öäv] ô%cND·y§;£ÙP™äµQFaØ®›qF?Æh¿µÚëè-Å×›ÞË#ôý<ë)%™<åàiÙFÏ -{@[s0Ÿ"¥²ŽÌdbÔǘ–´EVðMh^±i5q×B2¯^JO ^Ìê£oÜ'‹âØL¥ÆdýT<“ø­ê²fjí7Dµ• 1­X}2†7›€¤c½Bbá/?ãÒIxPp%‡Œ©SíCÖ…“La2ì‹i½I[«E8Ššå½¸çÌ Þ@Âî\ǸŸ29SQTw*ÑB1ï¼Ðå+Uïh®¼Ä¡Ê/þ­‘Cå y[üAôŒŸ#2‰oLú *ÇÇUqQ½ -ó|,šZŠK§ -J˜UÀ·~SsÜ1Á¥Ã3ûtâ’”§ ¿ømƒQDf"x~ˆîd÷ôM”prB!4¥”N½Ëïb«@äÒë³q §àάAÃêÕµhÛ„Œ°Ç³8vˆti¤E¥ÌU$ÕƒF#ãlˆè‹2Ž55JÁÆû -W—‰ÊGo#Jܤ±ÐLê yNב]IïðÔfñ+ZMv‡ï7{ä¶Ãê‚øíXºžXäó½Ý‹`*‹Ò‚jpj÷´?+› -|B@†-›&±í ä5‰tkfÏ?B~½b:%Yñóà6uέ£þ˜”£LA®ªˆðÁëX‹ÀÌWÿªïÏ,Ñoðö»¶ƒ1´†Ö®ûM")ûŠ’8H_Q@)­ÃûÌßj”Yã*Fô&ù2ÙüB‘çÇ.Œ%nåÁ\Û†_ØO˜Aê;)çÓjÙ7 ÊíåÛsoÒ쪰1¯3Yjè@á³fæåE#ÚQÔYï”zpÒáš×,£»e‹\nÆnCþÙPÛöXC­ƒ -Û .]¿1èf‹Þ$‰V™ÇŒ[óN<š?ÜY ætLçN¢“v} «˜&…yncú(Å:ÉZ£Ÿœî,Õ„wJo ØŸq”é»»2ÛÔŒR⩽(Òue†·¦³‰Â€D…%ô¿Á„Ä a÷uZG“9ì4éÓ¤uy Ù¡]&PžàfÌeAÔ>X õ®pøN·¶±R`ÿläC‰ÚHlÐ$ðô²NæPh7»˜ è›LfŒ¨“a h¿Ïy8 ¨ã q˜ác )ÿ_~1iSÕˆC¢aH ”Ó‰k0zÉæ.@ÉÕ—Rû“µl‚‘¿R §´ù½Lý¥tû(Iðd˜î |ëm´ ØÿSáB÷ÈVG:ý†®§DÚƒ?s¼Úö˜ ÎTëýô?ÿ?ˆ ¹×”-.ûdÜ7”ˆì¾.îÐ -q·–-bÔqŠŒë—âNòA?£,(T|Ý·ž¬ ¯[{5º MÚ56¸ñ+å-x «ìŒ즘¢Ð Óž‘¡Ï/Ì^;Ÿ -<Š´yçö{e¯(×6鈔I»îbyö„•ZA„I³ªÙÆç`¼ÏÎS¼^™AáRup:ÓäGW@-!Äø«ƒèÕßèËs=aË‹Ü'vÉRýl+}¦Á_¾u0ûÅF/¬D—5u«œ?Ë”ëñè TÐaöÑ»ZÂ]6A-k•gjtfÞñkLbn€£‚VáÊœ¨ºŽà.yÞvÚ…};”kÐ÷ñY 8{ùÑïB%}Œa‚~óE,lÔ³J0œ¸â_ÍõÐÁöÉgaá+!Z"U”¿ýK2š§¡¡¨¶,sìSƒ"&2ÙEgõË–}5ìK Ve -Öÿ“^)~ƒpàÕ²ô*²ÿ‰sY:ûyé×6Å€$ŒÝº½Å{‡êÑi×rL#¯(T‹PÆvœ·Qr†¤óVJôkH0¥rÔIV€«´*$ã®/ -ëÙO³!õxÉRdíhÜ!] úãUK+<7Öœjã«/ªM;Ë>ú‘ÕÃ}„ý甂ÜZV훺¤¶&mgëlf1nM¥þÏ»{I¢íAµiŠoL6Qca2Ì'ÚVŽa±„Éü6¶Y(¨=¯/-ô 4Šëfræ˜Ø„‰¤ÚÒÉW9ÇÃ7ÐR~AÉÀ‹GŠßJ2´XÇdI<Œ¾î•ìM°ð*©óÔÌäÃÍוE–Ѷëñ›Æù˜#ÿàÅx]j{$8@ÑöœÏÈÅR¡Z¸ÓAŽ¤4AÊA°TMáЗˆbZbq2Ê¡²†m€9häxÒµ2#@n[@´<ò±íG%åSz‡Kñ/w¬ó§RÌï¾æ˜q Íî‚GâKF/¹%ÆÅEw•®dýª,Tè!0Ï+? -bù‰æ1²y†#Ö6yéRØÙ`sßUJ öà‚Hø.ß°›GßôýMŒek½„¾Û º¦¥CŽšËž…l^§¿\<…‡6ÂK̹çø$‡’vçÏ %hf¥Ëm°¥sô |G'Æ[fûý/Ša¥¬3µrž®gS¬Ê~9^éÈŠSìꦘÏéNÐó á¢M>À]àpÀ -䀚Œ5åèÓíöRŠÙRÒ¶>ù;¹Ý>Z׺Oמڢ5RBd$j«C ûJïeù˜äÔwÝX})ZϬ&fäXÛXIƒ^±®.<Ó¾Û+ç­ƒ…Œ{dÕ!¹\™˜ïÅQ’‰EªgBnëø]~©ŸHJ£ãßQ Jì㉨K$ewqá0œ²F§_ñÈR7p‚ÆL˜»‹ZîFë‰c‹”%»• >¦{+e•VÊÝVˆÍê]¼ó–ÓÒLäÝ‘h&$¹./€Ô è¤ÐàÞà€y&c_ž0/‘D*#ûÛ਌‡¦uõÁaÔ<‘’Ž«kW’g&8>Ÿ§Ç¹úã{ n K?ñVݧˆv¢eÿ–YdÙëûv*e¡»âbƒä³Œ‘PeëÈ¡¨ø3€æ7¨G=61ØyvrˆèÌ/oë¯Px=Õçö–‰f$úÛP8BaZ¦tð²]6F4ºî:'ù H&0¸˜/’w+–é{>)ZÜÞÁ F &–¬%ÏS-l—¯‹àöIŸc†Wˆ=Ô¡8œO[âb׫ÖLÕ‹´¯8¤¸î59ó øc’k!±y´dXFü>xn2HÍ¥@ -Ì‚StRóùa¼âæøïŸm+ŽÞ¾µ¬¼/†m@”«†fDä)”y â­XDl_`p ˜3‰Õé"p£ ùÓ½r§à‡¬i3N€‚_ø+iÝ‚WQô¥ˆlò÷ÅK¯Ë.XÐ :îîÐ0 ûvפ¹, aÑ;‰x{N:ëLÕoÓ„4ÃÉ€«ñ)í/9Æïã¾KÒåöþÜT.7±¢¢ANÕÉg=Ω¶>Ñßq:u¥ÅÿµÅì𡼠6p܈é3£¡²“®+è^ÉehÆUÚ¬B}¯\u¥™&+ÐÇB_¥²Ê¥e?‹)„¹Ýá×oÞ,ñ#6ǧ§ËEô7u@ƒÒý§å˜MïD;ÏÏÏ;\Má Ç­ l|~l‡š[¶lB¯ï¥á1g<`LV+ .ò‰xo샥 $(éÚ?J’_ÂäRŸ2¨!û×ImgYwŒÊÝêû“ÅÿúžÃÝq•£-³d/RXÓ€óý¦÷ºÛûJÀ[#t>D™dXò§`K³µ£¸¾»—J\&g“9éx!+D•éD¯+ï‚ö‚#u‡PãhŽj\~búiôïq[€Äß‘yO(³ÿ®™3hwr粂ˆ¢†;D¾J#Hù]øÝ/˜[>@çÆŒt.<‘I×S=RÌZ`Ï3Uó%ÖÑõ,Á>!ßÀÄt$9·žÒ›Q6óâ‚:ÕEðµ$î£?u&ÌIßIUŒûÍÛÜ¡½Àý—#û&y- -tkR¦ ÍûÀVùŒ -+Eª0»¹§“Í 3M‡rN?ZeÜÔhSžK½c#B¯š`”Ž+ÞÁ?í@žâM¹ÓØ%qndzF¯ðIÏE8ú£ÖÚ¥dó½ëH’›Tz]¾7]37Ô—ãß?2œœÕ˜`‹Óý5ŒVY7Žâv‡ ébŸ -2ã$5nµD錥öI …5;£·‘³â¥œš½œ¹ÎœI—¼ŠP¶–z ¬{çÙÏšÐQÅhÆ- [/µ/þ%Á4¾Ù^—a‚ªßvè¨1 ¡x™6LÚëI –œ©n¾4âzEÍçõ3ù¬ßÇÖ%r—±(×Ù[!yŒk»¬Fy›˜µ›e5kWâìŒ(¯(j¶Y9›oæÔjCBçO›ƒ±æä9?}0‹ÀÃÒéstQ Óútƒy QÆä*¥[ ~R¨[E†¼Íx#è{¬=6OKâ#s‚{oq“7ë­[›¹D(r]¢&†·­)eî5:_ÙÂÆ7D‹”C˜TɧµÇ~K˜’±TŸVåJ"ð_àö!¡ü@ŒàÆ›Üppm¯ÄHš÷k-‹H¾©—se•`jš ·”õµeæ^±üad‡DuÅB\CÅs~Õzß<éUÍk•V^?ÝÂø1 7dAíî]žWŽ¾0 º¯èP¿MÄÇßÓÉ„k‚Š67Ÿ7õæ¥ÑìJ4.Š“±!­ó[¤£æ_7ò&²œkGd8+0cë³®¿ƒ+ÅSÑ•ˆ@i¶òÚGîÏäÀ”ð´øÐ?Œ=—ž½\ŠÕÔ­Þìr ×Œâ³/Ÿ6`OC\h1ȸ˜K öD°ïŽ @ÅÙø1d­)w`0a=Jç)!Ë2ÁŒoŸk×ñ±ÔЊzLw! ¦Ï?‡Sw3øò GG -iâwˆ]SwC''/ˆŽ‰~ðs¼Í¥PC4³DuE~A}=Ó T¯}ÁuÇttôÉNx`kWãê«Ÿ"QDúnÓÓÈcàßvß :Kð°T|)ÊüNm7p·ìlƒlvqºÕòJ‚k”[ª± T§j|H,‘k² +µ¿]¦³sÍ׈㚺¾Ë¡97håʸéþV=ºk‚ä¼àH¶²èS}‰´ñ;ñYØh}np‡£`¢|YÚãÌvb2ò°#ßv 4õ©ÍóÚ”‡UŸÙŠM>Äôö¼C´™Ó”ê…?|ÙÜuh:”A.l]Âb}Žažû»Õ̶Ќ ŽåuGL7pkò¨óT\‰áºM+‡¡²ÛéDÒãL@h‡•^Kå l»*¯YÚ-_EP÷Ž« Ô¼²;CbÒNseà‡„±.BûÎ ó þ4¦ý)½òA*þ”’arð0é¤ìP ãQuRš0¡ëÎY5§@©çn)¢‚taFœ<ÏÔ&Md§4€îW´ - -ñ 8þ~|²oßÅ3ôv<*gÅײî_ÈŠZœëÁf—ì¹ÍF‡Gâ¥\¡^ÌtפZf¾7Ët!Ûí|qC³M¿¤œìß+†£Þ-Ú_,0^µk£54u+¬Ç’5Ëz×Éy~¿C³‚f§ÖQâtš÷brÒ€5ñ3Að¸i$ŸbŒç[‡ÙØ'Ùexðh‰*q¢‡Ã:–¦r"³gz€_à3jé¤ý"Õ¸dÕS‰åY)5dSO#s­.Ê•¶yà‹bw¹åiUa›Ï&ðrȳsúúj{Ö^Œ]$êö8g•6 Ôu.ºG¥àe{aØÂ^ "ÇR‡¿#-¦±§f@!„-hÿÌŠó ÛvDç1ptõ-¨ö¥Ü à_D²–È4ý®›šØ9s†Ãñ ˜ >“Tú&>,œu…êG¢¶4¥ -jf«Õ Iˆ7ÛÑt":¤Ê˜f÷ºá|¥Ýn«8ËiòÙºi=7"*ÆZ÷T…½ƒ Jœ[É©L~¯ä÷úxô|×ôjƒsm #ƒYmèu#Œì .¨lÝPXUòÑ,‹÷âÐysËÓJàläy¨›Èß¾gVmè|Yɺ™IÎoÆÙ¥Ã}xªhx R§ªœØD"áíñmóC/·Û]Ë#ìß’œ|rÝB>ý†›Ýe‚gظ%ÛâÂ¥FK#¼Ü -VKëÏ°@öMêhµÕ{íÓ«kª‰þ®W=õ€[xŒ¡èûÞÚ) ÿöx0RaU6 )ûËöñ^óîʦ=£É2XÜØ{?ÍÜ”â$¹v’˜g„×;• œþ8Ëà#ÓTˆ­½ytÑžgÖØ£üd?,Ïö+«¶[{‚æÞÅM·¾YY¹·ûž’ÿÃ7‡ZЫ¡×ôWÁI熃83ZúeIºSÌa-Ó«dzå!£Ñ­þüÛ*\Ò'µ¦ý6W Cí|Hª«&XW´Øeê›àâ*üd÷gÔºñ= €ø¸J³ëRì4”íaN¢<1cœÕ²iHÈ_ÊOml¡FŽý -ýñWÖ͸uòóɃɋ,In“„È ÷úÏh¬Záßrž×wç3÷¡nã)8FÕ°=ÀËÈS¬‡5÷*ÎoÕ`!Ú\:âÀÉGàb¸ØÖ:*™°Wɬ)÷Ðõáñµ.Åzxï¶Q+u -ßoÕüŠèg|)¢Ý”+媀B}lzr}/LŸè×ZýxeÌÖ{po6Ñ1–—Û€úuê-Í„Éuß) kê8ñüJ[q=Õ’tÕ|F ´ŽoWÓ‹ÁÅ'üÉ;Í‹ŸA-߉~çYqP”$uöëå±´Úê8ÛšOŒ%¯0䑱§i»ZÊPÕÀú˜ß µ¶2Ùmß~ýœ÷PßE¢Ó(÷rëÞüÛ=ã;輸E-~ag|^f]pŸQ÷± NÅÁóO‡\áä—$LŒa›~z“À˱F;"GÍLÅ|õÞ·TúrœB˜êtŽd’žœ ½ç(¹’_Ó GÕBkMD\h±²Íl·Äèý/A$%a³Æ–ˆSUM/‡Ì¨(ÿfŒ¢Cµx†x|˜WÄÈ{WZ׎rÒŒ»ôW~ç4‹o,£)×â‰öûU¸µèá¥k8æl!2"gvéº(m–´§=O øZÕG‰IlZýòØ¡µ­mò‰Ù{ªhd¥\B§l+‹z†KŒð«ž ¹§(O¾ÃGÇm›TXê) - ¸Ä¦~Vyg²åŒ¡°uÆJ°Ê×´fM-€8 ¥K¬Ÿ«äCËš, J½| šj_6R#/&]ääæ|e@¸(óã#š' ò{Ì¿’˜qå »|ð¹L¹¹j«²Ë/Ù¯ñ³»Û$wqià5šÜÛ2‰t d{ÞTçÚ·­cEU¤¡óôÀÁKKe¶rÄTê"r\=¢¾e÷Š dÂàþù•9O·Ä‚Ë¥»~ÒÝWë§A?&™µ>Ò˜Ç9§Ö…Äd·{‰ˆŽ™Ü‡ôÚÊ7SFä3¢Ö¡ÅoB8‘º¾#%Âí{üÁºkÐF_Û÷€êZu²}ªÂ9«Ê=‹Ny Ñ,âb¼â ãi\ZÀ™Ø¨ù(¡þL ¯6‚œ­?~ãØ•Sþ/L‹ý$ªt~P›sUºÎ€¥Meæt"“[¤¢‰ãDö -çŽ|" Å¥®2‡Y÷¨ Ù#µ:¯út\]Ñq Ï{Ðeë˱2: r¿ø1ט…ùò û+£DÈx\üÛB:Ú}[Nâì_è׿1ÜÈÍáÇa Œ }g)ý^4’çý í0)Ñòd}Ó%4H šËã¿yÎápJ&2Ð*E}oÁyæ+8%‚6X_Iƒ#DŽƒïðSΞ~È£Pw6÷­,pzº~öÀëîÏÙªßêK%^™–ÞRÉ/ÉÐ}êÏÐæ ä-áfQ3Q¿Ê¾ÚðO°J'@…‚dQÏƽ¸â¤Ø*Ü…ñû¨$¬k3:@ ä> Ð"’;{æ<ß߬}\ç²dRŒ;ö’u{x^û¼³³LmP~gWº™ªU¾Ï_ƒU)ÝZ‰>hœÀødäï¾ ¹–"Â÷ÚÝ)Í2Ê‘rès*H„ -0ís ¬¦¬×&0/¾Ét‹ÕŸóëå;”Û9t;ÎÑÛ¶niaóÀvñ~¶"‘_ŒNëÁÚGM] Ñ#·8-z;aaZJpÙ ½kš -²°׳^Kè„…žåÖ#Ö »*0N” u ^8~=“²BÑóCŒüÛr/CÎà-À;0|ûÇ£‡gÊÒMNÄéa`œËßwª@É#—0ñŸ}Åà¦Åÿ“[Ž5^3H¸>x«0Ò"†„TÛp» -ÓhÙ$ål$zQœ€ì=´ö‚1d–®ÓÃû"sx(Ú*1¨ø¶z,ˆÒ'݇v!²§ðI1Õ΃ñ¦©»g [ÞC¡ç1Q1SÑÄl»Iz_TŸÊé–Éü¢Í«¹>Ð¥Gâ­È…¬oa¦Ý—ÞëZ¼êɬÿDW•¸¼‹Uô‰ ù;VtWí½ªŒä´p€4oUû¤I67Â]¯KÃ%µôN”ph»ÈØ O{ViÂÔFìË¿ú°È‹!”éH8-“¨š -:B‡ŒlŽgú‚2ºaÒ"¦¹?|  ÿ¢ t+ë+ˆùR–~h ,“Ø‚_s -h<…È™¸gß W ¯@Wç™áÜ;_y"ÙCü :mM`¢= ã;òtçÊXÈê ~Ô“'–6Ç3mœÄAÛ÷1­Á¦±ÙMæŽW‰¡Þ®jjÚÔ2ä,Êb¡¦³ÿÊ<)yh+oÕ QÑv‘j—3¦‘„å&‰£nµ‰ø©íEÑC›¸CÄù|ü2醙+ßÆ„mK€`‡4¿Tƽ–b´7lT›½rB´¹Áø&œH&@RÈMŒx­c&û¦¸x,=˜B>Õ¿Ö’`tàœÑK–ž›És®h%ºùÔ~ÐõÔ&­Ø`Y£Í˜¡cç?›2¡e‰ð D/Ô(–+ÉP×½L-Íaž -Z¦Ûæûa„Ék6kUqèL£%hp—´rÛ° ÍèE–r:-ÃdÆÊHP:ì‡2;P®…ÓêF{ƯДÏ@ÏœüO©ªtºG©÷Ž’4Å%ü’Y×ÞöPðüid‘˃8LÖU/p„h[×ÿ1õ˜åô×îE¥JP(òCˆ¤‚§t¢8ꜧÝÎQ‹‚j%U×¼±†ÙŸJXµ¿LF-.=5†Oí~Ñ -\jË9gWØÅ."FˆmßÝÔÇ‘ÓßAÌõ|ˆWj p7MÐ"Kc20ȧåOh]9J°F®×Ò‡õíTNì)mC\Rà‰æ8èÄЗ|- µÂ¸ÅæßËlÏB@\ë®4Ʋó˜•k™_̦CÍö˜T!Ô½\!ƒÂD×$×&m iÀ槻ÁLÝ¢»?a|ÿ¤þë™ ú*$÷¼66ÛëðÞºR¨p`N‹8¹Îs©2õóŸÉ×®aLç%¢)K–9CJN¼·ดÇÃ6ôqx~ë“;à@È÷<þ]ÍCļؽyùI©Ž6xóm·Lº¥—Óê©.Chøƒ‹ÿ<™a-^õÄÞU\u´úé,R8ô0V‰ƒÖ=iï$……ní±ª—Æ„®h„¸çM«KÈÅcóÇŒqØÌ8wƒZÃÊf;Íhi3‚{~„Ý($ -iÿót:ùÃûxxñÍš6ïÛ÷ÄKZ·ÏlŽ¸ŠŒbd|Oá±–kË¥þÎÏB™E‹¤» -èlLäšOnRZ~‡î&I°=w¦}æ‰l§b””Î÷g ÅTÍ‘ûûÁ{Ë1LxméÌ­?b†‘Ü€±%Öé]¶çÛ'$5ˆç }~Ü‹{Á47 ŒCS®¯çÏgá·!v(°Z^cß—"|ÏÉUÛëUÛ„³¾Éêºêo6–I‰®óì¢;ɬ ‹a6²ôÍEê—'ÅKÜv–Ý«kî]¥’*€Þÿ<þSÍ?´.õÞ>|»ùו{šV8IÉ€¸@²`!Cr}Ùu3MVÅ ògè¿<*4ËëαÁŸ%… Ò9zS7ú‘Ÿœ’âó:·©Ž6Z3_C¯h¬Q½ÉŒff]1.ärÔõ„ÀݺgŒ6 hnO+(HuXíY]dOUÝ&°†9&/×á!^cnȯ(«eHü€SdClvÌf‹•”ØME?ÛÔ³ÐZ›N˜´BfG1d>QÚj\¼È”Ï·îPΊŸ¿æà;j:Œáo2çI­`þ÷?Á…ÀÌÞÂÄÅÕÑÁÄÅîÿoŽ¹¸endstream +/Length 26225 +/Filter /FlateDecode +>> +stream +xÚ¬ºc”¤]°%\]î²,Û¶mÛvuÙ¶mÛ¶m£ËU]¶í¯ß÷Î;ëÎüšo~äZωˆ³cGìsb­'3Iä•hŒí MDílhhé9*ŠjòÖÖÆvÒ4Šv6€¿f(!' ;[a'N€š‰1@ØÄÀÈ`ààà€"ÙÙ»;X˜™;ÈÿbPPQQÿ—埀¡ûzþît´0³þ}p1±¶³·1±uú ñ½QÉÄàdn0µ°6ÉÉkHÈŠÈÅdUb&¶&ÖygCk #€´…‘‰­£ ÀÔÎ`ý €‘­±Å?¥9ÒþÅpíMŒ,þn3q32±ÿÇE °7q°±ptüû °p˜9Ø:ýí“ÀÂÖÈÚÙøí¦vÿ²w°ûaó×÷LÞÎÑÉÑÈÁÂÞ ð7«¼°èðt27pú'·£Å_7ÀÎôo¤±‘ó?%ýëû ó×ëd`aëp2qsú'—¡ ÀØÂÑÞÚÀýoî¿`öÿÒpv´°5û/Ô3ckGÇ¿0±ÿéÎÕ ø_ª7°··vÿw·Ý¿Qÿ“ƒ…“£‰µ)-ãßœFNs›YØBÑýsT$lMí ôÿa7v¶ÿOŸ‹‰Ã¿ "ÿçÌPü%a`lgkí061…¢“µsú›@þ§2íÿ;‘ÿHüÿDàÿ'òþÿ÷¿kô¿\âÿ¿÷ù¿C‹:[[Ëؘü» ðŸ3 øgÈØþoÑ6Öîÿ§øÿ©fò$ÿ0N[!`köWzZúÿ0Z8ŠZ¸™Ë[8™L ¬ÿöé_»Š­±‰ƒµ…­É_=ÿm%€†žþ¿ù”Í-Œ¬lÿi<˸Llÿ;÷¿ýËœNPJ^HX–꟩ÿÆÉÿÕÞIÙÝþ/µÿQŠŒñÿ\üƒ"(hçð¤a`eÐ0²3ý½rŒ f&ïÿCÆþk-càä`áÐú[6=ÿÅÿÏ­tþŒˆ­‘ñ?§EÉÉÀÖøïûŸ†ÜFÎuý÷Îÿ-ú?×ÿu7#¨µßvF\A–i™éNuè¹#SÂZ} #Áö¥ÊE~5v½¾ia8*õ?jƒi›f8¿ÚÝ—Ïì?$)ÇúЬÉzSL®òq¼‰(ú ·H;Ù¨ètKaÓÏÕ¢<¯—¤w@5YéUw§uK>Àqg:™ ¯Ÿ)üˆ\ +üPˆŸìá|ŒRbQ»š€ê +ÏÎIOžŸÈ†ÆGG†{oÁú°©rb’p¹€Â’FúýÊÁæÓT©©jUmÛëÕb3ô]ÿ””s +Îl~^õ­H¹²çŸÈôÿbاÑÙ®ï岞ÒæNHÙ ™C ½‰h1R^iC«ÙÂ{»AùÖˆqwÛÁxyÒWcÁ·ÿ¡y÷'‡—ÁOéTñ´šŸ­wôêuòÓsPMTUËçýNÀ(5±†ÅÄ ö¶‘ÛMüc,‚¨×]EI[™Y… ¸îˆ0^ ÆMÏm}™× Ë 3ž@óÉ ª0öGƺ°>KÛyE‡“åÜTh6þÁØŸøÐJ¢w¢§æ_[c ³öB8xÕ¾Vk”Ô‚—I¯¿ä„÷gÞk‰òŒ+(}‘²Å+åýdä„P9Œ,U•äD¡&w("Z·´U¾D£|yÛ)Õ‚þ0ŽÖ)¹` Á6l¬NÒµ½žŒÍ&²˜ W WâãÆ[.¸N5ÈõëZS† +€gÍý¬ÌV” C†û3æèºnMp»-˜…Z‘˜æj¤¯gÜ\}–ʈ}—}ÍšP«¤{}ò#U/ÉXÑ…€¼ðk¬¾ëÜV­Ð<´eÁºµýt.<Á0œ7Íw©~‹A“1²Ù°¢%îßD?âÝjÑä¤[,È4ý© +ÔI™Èüíç‘,ª!Û^ó&I|ú,~C¼ð O¯JëŽs/)'UgL—æªöÛ'ŒŸKnõætÉËÁ!;ÙÜ\õýâÚõþ#ˆ%æÈMµB”j!ˆªÎŒ o¢†PU&ø’¿ß¹PÃ$Þ;Ž‘»w©*t!Šꌄ|Õj”1íw-¡LÕÙ—›ö‚ߎ…>ßË>#ÈQƒ›a"¦´Ú×5ù“97Ûô ,h˜Ú?ä°wïا*\Dxc(uè³?^NWù,±CVØñÁáŒÅú3ý XÎfM.êÈ4Æ$œFß©þsÂ&^ÎtI¼\nk2NÓrÅ[>K¿·ŽñtPã(–v°õø¸qËxm°T +š[_]ÓHÑZŸæ¶ÅaŸhj¨Â-.åÂÄi⩾ÌRLC°ñáÎÍ|Æcþ®#snu„Áïr‡1¥—‚uÔîwÚosàðFÉ =ÂÐÜ:ž:ÎUšelòéÕY󸚉ƒ+ŽÜ×$í¸‡„ýM·bƒI”Âïò´Úê`9åÃÄu1КBPbdÁ‰[OQWúŒªø Á Ðë+Ç~1˜ö»z'à£R74ņš’”&üg½†W E¦÷àÆ»¨¸ð«ÊŸÅ\> ½’Ц¾®ŠÝ‡Phoº×ŸÜÝfaÄJ5¦ ³¢¤úЈ2G¨jÁ›žª{ôï÷1ïñÎ?EËKgå+ž³µÃ|ú$$Í¡ÃûyÕ´p À~·X5 +Ïþu¿^ù5cÔÃ[î˜4mô–CÌb^Ûe m¦Ýìž88ç}gõi.Ó 6Û²¡{ÇÙº[·:±’‚~s¼r^®µ{×y"j¾À`UŠ2f5?+ún ¸ ¼â@œî׿…@“%5£shàî‚Œš¶{++¬#ÂЙH¼GH–T l™!Ñ+PH­ÞPË9­«·Ä[ZYIçi\eyr*–¨Ö{Gnðx*yçK ’„èD2JG«L¸Vä±èG6<… †Žçð9‡X¹;‹X‡ã$]Hñ8ÇR™¿}t%بêŸZ¥ +´êÄÐÓ +Þkvßèåà?`Hdò8Ÿáz„û%u•$õAºu™\›+Gr*|wݨWÔÐæ>zuÚÐÜHq…ȃŠ0?‰Ù“]¢¨=+ûfUˆb9TV¶54ç,Te5®ÅjÈzÃà͹ÿšôÖ§"´ø´[mIƒ¡®\úàâLˆ½áï]šæÊ}Ëu_:jÆPß +–€íÖ—ݯUÛˆ¢¿ß$»Zµg-SÃ]‚.(#º™‡`¿ Ât´Üæ 6¿mà¯ò™9M}§’ˆù'WÃÙð´£ÜNæÜ‚é§$# ÁIÀq¯¹™|rË­$Àq·Ô”ÒÿZ¸“…m9à ¬0ãÞqVËZžÔÉúD?Ç‹™ýCòö± )'êwîß4'–½”ÑŒèšóaºáÇìY_ ÷]×ÌmÝäÍv784"œT&؈0‹ öµ­’üÞ£ZŽ3£¾¥Æ#­Ä#©K¼VNªÅªË¼T­¶¸¼¬Ó¿ç 'æ>Ç丕\<¥¥º€w)¦0©þí’%¼bŸ¬ðómiM—†E¹Tƒï4•Z)‚NuÝ1CèÌó,$U˜¿–³,âù$Ù*䵜 JøÃò…Ÿ`¾Bd,O/Y2çÑ}ðÂg¹±ñˆ‰£¨,áW9ç·³ +ýl…;œë‚$#¥Rј'ûBYâSö JLj N·—“\ð“ë¨zå0y¥~Сª{úë#Òsa¢¸²ÆfÙà´ñéöªðc~ßâ} ]˜ V42lï +T ›+=Ý"N¸F{VwÜ«Ýê'O¼o3Mk¹‘)& Y)‘-ÍÇaÊgþÆ®“¬AmIÂùϺvUÐiÝZw,:ÃzáÌxƒ âöÌjT21î n¢å­ Ç-§ä>1Ó,Æ×ò¹`uC¼ƒc ·¦¦ßæö%E_GOä ¬ ºTs'\- ¼òé1ʈ-Ð!^eʧý7íñB9 - §Mâc9ߺ4ôn9IÀ삲£(ê‰`ì5±bú–ÝèxMò±8õ1é]ôÎc-LðÛDZv;8lA¼ó/Y“º«,•×¨öã}íøá{˜®à0˜ÅUVÉ+c`¾˜f×~§¨¾¦Aлw~”æ¿ógfL¶vÔí,ÿ Š +˜r ]w9jr‡šØ[O§ÎéåMÍÏÞ@Í?éÀ0ÕíµDJF„rFhS[ͺ.ÆŠz¤9dR’XL +fÎ$Ë\nÞq94e#q0r±MnJïù» 1ç5Gö>’JôFí¶ú•,„DZ”í:ïºÂ €…´i*Œ•²Êcé”À‡nIÊQ“:­PݤNíYSXœÜvu›Aò=„•îÙ®A«bÉÖAŠ¬ö<$X#ÄøœR}X&¢UÎÈK"4áÕö¶ÿPbe¼ÎŠÅ— +ª *Aº\Õ@^¿>V1Ö†ÑîçhµäÀɱ~°ìj-ýflâÉL8D¼ÈV©§p¤‡Ekc4²îþÝc=´BªÔ"–¹² + „›šíwp ‹ÚjOI­{4°ؘ…‹VxáOR¡®TÈGA ì³+ ®À©„”À3ã×ËbÀõøϬ¸»eéj .5ß?.4?‚w1¤ÉÙ,ðà_–yC Qöê¶9›«¾_¼­pJ-G¥™Ñx¨^ð5xŽ“L¼ðh¼D°A€'áO¶0„0²8t³˜¡hÀ~AÛ{ˆ&î)'`Gï^¦‰m ½\‹HBõoW"Þt.Äñ˜êò[Ê&G>¬šX>­|¶F‹ÿF9ÈG: +}ˆÀu‰‡FëOðѾÒ`g!ë˶’Si™Ûs„×dŒìΈ”’G‹ŒÒ÷¤úPXŸ‘ÊX*òp¾š£µô†;pšX ¯»Õ䄾ÐÐÅ·.ÊÆ™³õK· ó§r±çÌg<¢åûœs§0œRÁãýËdò3‹Lqø%$ØDë=+¶X—¥ˆÚHï´m%¾”+pÔg­2œÐSíÛ&ÛÆ’ú‡®–ø‘™ÔD”sƒVL?‘¯Ž +ˆ!Ýkk»†“×ÉÇ.¾á®ì6Ëq_6…áNÝ«—6™T¶Sµ–F¦›–‰0;4Kÿ½26aþ2+Ai};bŸÀ‰ŒIu)I£YÅï“y¨)õ‹—­VïEeõ–œ+e"ÑèËF ÏèwéV¹Õ> ^;"ZÀÌ}¯å®I„ +ÚŒW?ð9ÉšjgÄO¤¨Ê£%Oy-¨Ê¾ÆÃt­ŠÉ2¶”êy (6eÅF~!²×9ÞÕ=¨NdÔ_Èí]Þ[‰+£øþþ>»`.‡`ÔŠk™½¼CæêU¬ùôÃÅN²3Ë +Ú¬wî‘ê"¹¼|=’4v§Ù:¬)ÈÝ%¿Ÿë°yÔÅ)aÆÃ=Ax•qÊ8úçUûƒòM[iñÊŽBËE7ø·džŒ¿_SMé)7ç \=aY„2Ǹ,DôÝØÌ¿ðÿtöÒãž¿â K‚7Ö–ªëÏ«wV÷ž®a@¡ §¶¦Û£;4É™ÕÖYYøuzD×/e£*)£‘ò9fS$ 6úÀ÷ÒlE;ûrðã`Û¸ËCë*‰{•mÖƒºàÊ–Mx¥PJÇn7ß7Á±^m©Þ®;±ùM6ÂqN;Me.”·k–ü¸¿mF²jkÁÒ⥠êv„,Î8½Õ­Mþk´«Á5­ ÜªUô æ^NÁ&ºg3w‘²X4YeWn)•#~…¼qòõh¯jH¨Åö¤Tpû÷ؾö|]–öÎ…¸GxÖÀ´K<$LŠ+êT +ÔUñ`•5Þ +¶¾¨1&µwÉù|ì9UÛ39TQ÷䆹í| ¡Ã(=̨º; GLâ§6ÿãì¸Ì¡"¾Ž•w…B|(iïˆ'Å'º¬ú[7ô ¹r+£²*iÌÆä;¹E}—ûOþÊF\]¦l{YåAF=AD +»÷I¦aôIãÔ'§»ÞÄû✨œùZzñÌkåÌú9¡ÓŸ&G ‡Iiä¿–žÓîè½À¤Œêˆc­Òئ¼¹!·5â[$µúÙÌZÜ›˜@_q´öOAš +´afÓ´s!(ˆ)§é‡¸˜Š  Mí0Âß<_°7;3s]˜(ª¬Þ)JÁsTæû°€½F’§Ò“_íç#¹ÏïЉ¯"#(àÖ!È¢‹ù£áõDóòöÔfÆë"S§ÔtN'Þf~¥ê:#Ï¡Ú®“×5¬'9/ŠŲº©C;ÀÞºñ Ñ8 0×[ÐÎ"F‡LÃJ½†¸§Ì0Hx_Ò#—ä˜ L슷>72ŸÂa¦ЧÖÛ×w¬l’ö‚º>„ÕžU’v7“[ø×û†÷¡¯f}&å}µ @-rá™Õ +1«¬Ù]͊¼аŽÎžl_ø)J%r˜#sŽ-Àë÷­Ýà,Ó’µÿV¨ðyºoèLLe·rÝLû—‚ f{ûc†lî %Gä·Ú÷<{­ëk†¯¹­ey4X«Þ>¹×¢ìØÀª"¬‰åLóp å4I»{lî5QÞ9ãÃôId3–Ò_`gbת}û +rÂWf¯(¾ Ê.Tsûœ$rG~‡ÌR)G…-ú²O2cl?ÂBüX CÇäd"iXćÏà÷ÈÏ:ŽDN?’OÁLf4ÍÔ ©é9÷°Ó?—P5Â+ ¼þÒ† yÓôÔ#ß3-­Ò.\±´ù¥„• çÄŽV¿¸:…ŸÏj¥×ÎÛ|M¿Ÿ®'Š©iÕἨ;¹‹*ƒúŠðºG£o´×ã®æ¬Ñ@z-Ã=å÷îÛƒîØ_¯.1êeEV'†–¤þ%@X`5ª¦ÔeÎ*‡kúÌa¾heäY„‚šaÛ<-î‘^]üiˆã–ºZË'ºÿEeŽÃïõ§]Ã3¤¬„0¥`ñÊ“êí~¹/^C«ÿÊZ¸Ödá·›¹±å¤@§ùÅßQ4Ìo@÷4‡wÜ-5꓉êÁGÚSŽÛËÏnj¬ß" gNïTåå48‡Zõ¶YQªéø-0¯ÏCÒþØ´EI%±ÀÄ,ueíËÚ 8–ÇþÓW¥ÂÔr×!KšÂÎèü`‡ž„Õà@l®/«Øþæ.z”ÈÙä+ö…m\0 ‹¾¾„,qÚd~ï#ç7K{êºýÂI_r(®¬µ׉ÒõN/ˆÏñó÷¦ÙèbDßÑÑ#…iâ·d‡W¸ˆ½÷2šЛ­ðƒ‹_e ". (ø§ãÙ”'§ÉDØd (F¸Úù¶|‘³e¾Q6 j1‰jߢÂü®ºÛ2SRßè²+6\Ž¹FÝ‘ZüýuMb±*eR^ÞzWjSC¹0r”2â²]òÃ5|ô¹Ñ^òI€Õ+`쫆‹ÐtúIÚÙô©Úòó¬ƒ î +ä¶Ôñ{mƸM¯ýœîdßËæ6Ú´Qµœ +‹¬)Ì Ÿž6Ö=jÖdÃ;í¡Ô¶„µ¼n:_>;y""¸ü,߸藵’ðȲd Ëd¨Q TÇëìÙÚÏÜ­•ïØ`.ø|Mõíº$õ´#É*šö7 ´¢Z•—Ã^SúëVa=žBžk#UõuƒKVQVQJÕÞL§Q¶Å¡ïºÜöÞÖøMØ¥b]k®Ûý7>ݳd«,B?.ÿ@uÏD®3uçæM ‰0).WòòÉÈhW' Vws˜‡×ˆ¢ƒ•\ +=;3؇ZÑíx§fÇu1{©‚qnˆé%Ñ)(Û+Ë*jóºpd±NãÎH¶›áóú E‹´Ø*ë_ªŒ®MuL¡Q°­èlq±ô¦‡³ý4ýCÂ4Š +õgðeµ™ ýÙabÎbg›iÏRZkaPC+ˆrÖƒŒF&õ*4¥vè°½4ü`o²O¹Û•{6oŽ;ǧ5M²*ËË»mýæAd/œvH&TvןŠ•×èë§fè"W"Ô ˜_©§D´ß-ê{IU#\Ôw€18_1mGwÃI&Ùj™6j%µΑ4»o»R.*Z¼Ê…jº…i7“—n+2{'oœnó„É^*½mp`6id¢ýU•DoPþO z¯@@W7Q!˜ã¯º| —qu ËNƒò,ÖÆ8þÉòê’xÅ“œ-LÂæ“š¤Ö,Q‘ݾŠY]ò:ú©s¸÷8UsÞ ð„Œ)ü<²oD¹B2 +Q9ÁïÕ@[E£©ë|å»Þ¡–åq¡¢ pȫУá'¨h æl¥ËˆxKw,Š–Z=S÷z ë‹TgÔèŸ)¸ yXɶÚj"С~Ù·©y¾Wjǵ­ +)˜Y?þÄô‰H;§#ËaY‹zv,„krÇ)Æ-¼›è™«Ÿg\VÆAÜ®ô ×f-²”x éH9ØM±·‘úÕ¿)ÇDEðHÅ#Àë-WΈbe8Ôç˜y•ÛaÈÓ¶#„ŠB€s¨Ô[¿Ñ¬å=%*žÞ$ŠÞµmu|6$)!¨z°ŸøǸô†áîÊMÌ]Ê„hf⃕ðH! +Z_!ÎØÏ™P°‚ž§TÙ s§ÌÛ ˆo{V®!(H”4o|ؤvIÒ†¹./ÔPÒùä³L6ŠH±ÞNÛ¯9s=N­ âkûrë¡¡ #Ž™.|eìÀ‡Ú½ìðâ+}(|ô’‹Ñ<w–ãÇûpÌ'ä çEFeÆZeý‰¶{ÌÌŠZâ;•–½D±Õ½v)<Ô3ÿ./|\×øÁ¨b÷ïWSDh~2vLñÛ¥“¤KE'LúlŸvQiuRî–±Å+{J¼Q*P­/QÁÓ÷“M¶äÂh$ÞE?&•é—ŽåaX&’@7?“Ÿ¢£DsüÛ™µ×Ìò"²"3]CxÏ}Þ“|mï/ÏC¼ãÜÔAÕ5ÙÐLÚ;î ¨ÅGX¾çE˜Ç¸–SÈŒáÄäóþ©Ò"eÌ/(qxBšp+²zGJÏð/ð^3£¦¯DüÆÕqŸfk)KÏpHóÚ¥÷$tÏ–9%7³2ÜAP ï¡~+)@°‰Tù©Ža™p¢ °µWƒV'Æv+ÀW¦_|\1gýÕ›ÿä°Wˆ–FAXq‚¬cà×¼²)sø¿íFã»)Q~žéüÈ Û°¯Cë5Ýp }PqfEÓ3zÎâºî#˜Ý€†.„¢-o ¿t61ßÔúªONkØݧ”¦ãWå'Šéi›Î¥lvê”ô÷ÞÕ8R¼Ù[M\šÅ2‡çà +O>´?ˆw]°÷¨Ãæ'²€n]*¼½ZX6ÏvJgv’‚¶Á =£;–ðO ½‘*-ŸâÝx>G( †Væ3ÀamÔ­{b|¥ %D~!Ù;'½Xï×>Å{2\ôsA¢›åÖOUiCYxm]¦ý,+“+ÎLïûôcK”¿´ãOn¶Ó†2pÖh¿EßµWê¼Ý†a#’Á°ImǨÐ5<,”ç'—ÇI$º¬ªêßbŒ>"1^ÓZ-âáÛÝ-ƺ%·£¹¤“—Í¥’IÙ ÕÛzbÑéš}¶~Ä©âLÄ6 ãaÕÁqðP2´6GðâPx,ro½sayjñ¥\Mó8Ë49öÑ~q|¾^þZ:@MSAÜÓÕ}$\æý¸ú† +ÔSßõ}FÆúcþ„"Ã\|¯*)ÕI ÓÔ–,õ†˜¥I" +n½ü.ñø*ì AÆtþØãR‰øæåUçÙ +KùMg”m{·Hn-dðƒ­ +'´ ‡úÃi©šTâ¦a4ÛÀór4C{$ÐI™}ø¢Ù>a‘Z(žxSomgìY/àOêÛ–·Go<Ü;œö£~NCbŸPT{ŸíþBÎÞ×pR½P¤ä¹ÃV‹»MÿpžíÜ*¨‚]”Yè=¡zéêÛCœ£LŸ3t7_>&IZoômG‘f~•¤Ôóþ{àMßq;:Š»Åu ¦€©ÓZOk˜ˆ<´XmümŸãT`»u6J+kŽ¦‡+Ö3ê~ªdô›™Ò]þAO†ðq†Â…“”ÈH®è$#c*ÿ1^ïÉ’^‹ÍR¹aéc‚ç'JžÂF°úÝŽH18LVÙë`¨çòö«;nQRGí\vß]"zÊ°¼~Ë *¬‰@ÔàÀ°··¹Kâ•ÂëÐÎF>:W®Þ¾eÎA°îÁ¯ñ6\¶ÍEäO5ÏOéÄšKÒÉ›b$ÆLñ™Z +ª`Ί‹šXN”ÀU?Ž¢®ºëÈ5ËXrB0n9½âà!§æ®»u*PSçoiyµÚÒLNöolU®/'²ºNl¾+ +z·ô̇oŠ%ž}Áwiô[ªÙ׶K¸pWâ^­níåÛiíèf.\«™CÐ f¤: l©N}Vâk¿3 Ê[‹æ+>C²W97û&Î_lûnú6±pÎÈè?9+Ì^?…ö z×û±·ÝIÉ*ð¸ãEu…nÄsA´Ç×ñ^dŒ–kC2^FvBñ§ Ó¬Yƒ¸†|óIÔµ%y$¥Í•Èƒ’¬¿BPÞƒúuÓ?fÒrJZÔø¯e¢ú +WL©,ãõ®<ò ¼z8ØAÚBeåŽýAf!Òç.P£MX“mtŠž¼ßZ‰^`«-Þè|‘ ª<:´N†„¥,ûP£—ærÌö)ìÆFSuê‘Ù-Qà‘×® +õó"KŒŸIF€¥%(³–_@k°„ +j-éù•_"R§‡7D.àúœµÁK`RŠcàÅRÓ¶µËê‘V¡€Â‚¾±Ð ‡‰ŸV':–ðê$íôÃDgènº¾Í·ìM‡k/‡&ŽNYúÞVÆ3‚tӾݭæ;["Û‰`Ëk•¬‡~bŒók-<ÓLÄHsH‡X®¡Ê%¨};É„ÞÌ“Äo·ç™HV²[]û:ûýã÷ön±Út‹©¯¼€ x-0å­ ¤ò3(×|–¤á#¸Úª$xœ£“µ[=~©øwBˆ¢ÞЦîx´-«’Â@iaéLßü` la"qÞÈ çïÃ+®(XÿµgˆTäq·¼O$:ʃú^ÐØwàÇ7Å棣t4i–êk3´A·‰púTœ« 檾{<\-ÚHœžÜ›Ðð_%{žjoÉe«=’»sþ)¢ñô0Ùšª:Êò7çVÀ×RÄpi´Z=<=z…\Ë!õ4$ed銛Kju~’á, §Å.?&‰@\ š¾_x6ÝÍä­[<v0$å#‹EԪѦ*=6Á?0KJŽ†«êé†à9ñ‡:‚£´°Ou¹zÖ˜öèè+I‘ž~™DØ8þY %èàt:eòñ$ÃlÁ)ls®€ Ž¶;;˜‚Q²‚;3Ùöµ1`˜çÑ.*dýý€%ÚcªÏÓSeË€ƒæô¢òœÀœ„PÚÜ ½mÎF|P™îi¡ñµGwÐáÙQQ¯9µlôœfûü­"8›»´áb…ùv9Ï2{s’¡HË8!¹<°ðwô¨3¬¶hÛ¸£nvâàßÒj}-Ÿ »b` s«¾o×,Å—ˆ2í? +–qÇÙ¶â(ŽÇwû',»_eßùÈvôÕÝU]wùd}ðy0=˜$IyO›ÍÈ€œ=»U9e~5ÉŒœ¼uo{´Ñä¬nEhÕkPía˺OoÑQ2úˆ9Ôì&\`}ÕGÈÔ³ktð´bÖ¬5‰\5 °ÀÃbC“ +8×Ù¾]“’h·À¯6æâYn%«çŒò2Ã>¾õúŒP?$8uŽÁp+F + ™ðˆfd;®"¤¹dA¾£B·KµAPùsF_óuª†. áŠD*Aü¨ÊiðÔ•Çð—3+¥]ª„kyÕ£dfÕp¥ß†ÜŒ&è tÝøgXÕ€Š¢ ãŸ6MªE×ôR¦™–/œÅOtÞÖôÝýÙbE€(àºè±GÑ@…¸A¦½¹ûÆŽJÉìÁÚ ˜‘êæ§p„¼a¦ÎïbH—@$ÕflÕ?îTù×7íÛ|¯œ1¿T({i•ò¡Òj[T b>J°ÿ܃>Ž.èh‹æ +v¡=å ze׶)ö\à˜¯y€Š|É) Àµêú<`I@Nw¦éŠHræ­Ôóºƒuy.)ø·Û‰Ýê‚í\üèG®øÜè 8tÏ»ôanퟒJRo╨,ëE…cc!U!ž¤ºõN±“¤×[zçQ¤QC"5ä ã‚Ê|7ù9s0˜L½I½\ðî §¼õq·aø‹_®sÅ$Ö꩜Ė]dyé=t°P‚Ö¦—3YoÝçÒ2Ëp•ç]Lò2†ÎïOñfÊäNªQJUfî‰8¶÷$ý›°‰¯öOv¢8ÉæòLvViÊZã¬à¥Wf¥2# =ÛiïXs»&ÇjšœhèL¡2ïŽ9Ä! Pé\L mØ:É<¥Æ‘Ä“$ó?jÂùTA>—1Ûƒçtu„³°0w|h¾6bzÀ¿–ÙɸâœV©<Á,Z"X¼×e3„RÄrç*ÌLå¿¡höç~uÊQw³[K,…^ÃâÏ ð{Ç©¸<_=ë í8B³–·Åc¨z,êF½g-¦UÎ’Û3tl¿tÜ\º­æÖMžIWiª­XSsZ"³`«nÍ[ýá#ì~FÓ°RJMFÖÅZÿÃxåAÖT< K%ž/ÚÙ‰#Ê(¢µÑôzâHT†‘^h•#PZ‘i}1Œä=û}Jn gI¦ãá]Ûìd°?÷M{;þ"*ž‡‹w1EòË|øz•ÐØÿ¡Èÿ.²·CdÛƒ+Ž>ìuÒ,låj±ô@x÷¬,’óržI&vË`XÓRz“GkOš( +<”â׭Ҫܹçò3¼+çÓ2> $´‰G£éœ'¹’Ž¼ˆÔ +ªwQå\T1‡`ï–*!7Ñb¬§¤ƒÌ%©©Â+¨÷|¸M·äv×·vã„z²Žç§ñN4És÷ôq€ÔüY ÐW8­-²¼ +!STlÕȇ=f¿lOtÀGF­FTØÌ]¾Žr»j€¨7mÞ±Ï[Üû)ѢÈõ|ÿ`yzŠöÒé±<‡‡a^!½Ì=UÆø×ÈÂúa¤Î†¯=Æ%L€®"¿ý%âwQ˜H_éwõ#"ÜH„-»Ö0PõºÞ¥@°lÛt´+Ã=¼~•¬Z>ñ~)E‚®8¿’…@ Å²!tiv6diü•â¨n© J@u˜$íoá}ÝÉ–i3Áñ§EÊ®äK„o«9 ‘9Px¶:lrÔpÊÕ²²`¸uÓ/µo­î’h±†™º¤Õá¤Üôƒa30 ?GÝf× k!{h¢Ræ×;ì]OËÄ(«‹ž<üÓÎÃijW$Ä,= B‘Å)HS†b@‚ÕIw´«–¨;¬Ùlͨn³]]CþÃzÃÅH4¯9¦d˜«çï¡~¬ˆÊ \ES ·Â>VjPÈ7³ßtë™LËYýUå€(ÉxpЋØÁß`›¿ÃTdߢ}éøO Éñ¬1°y°‰¼wx;l¦"–SH{ïÚË“°ØéÆÛ'µ‚ ‰œõO +‘xÑ6@·î“ü <SË~m!¾áº™Àƒøu’°ag¥Þ¼ÃæÚ ñŠw­“ë•Î2z­B•CÜ.7 `˜Uy̨²Bzx’qê/›ä?º—d¾¨¢ ѧcŠA×<38æª"<ž ‚õÆ—½!A.Á& ­¼ém³y%U6L_éµµ'¶TŸ€^Òšè¯`3k‘«åìpÕŽ)r™ôž(ªêýx:Ú‰•'‹µ?.×Uô1n mÏKÆúC³ÆË¥‡Hörºðµ’h† ;$•úÆ6 û}TOVè—뀘¦†ÑÑœ‘¤rµ¬ÁÇJÈ–÷©¯+®…"|a ‡‚΃Éê°ùd@œgø²ú@0ÂRü+1Ï©tÓOÊ|ò—\¦»'© ­í|çì7=áü÷8þEËžsmRà…‡[T{ â›ÌHƒ–°±F‘ç3Ôù½&åó?e1OAh¹¿æTÛ*&MׄR’íUVJÖUüB’c_8ܽ›ÌËï¿žÚzÍS}XâË´] Nâ®@"ÂÈì·ŸPoêj"~])HIÿs#õ²½]Â1í¬à2ù)ˆÓFvL|]-Aøè›\™ÈÐ/KÊ +;i÷¤ð =¨?³F‰%dr,¯Ô=wxŽ$Ì„½‹eÐQ˜ } èax>,¢RÔ÷ÕüMoÖ+&Dù ={ùfs9 µ¨<|ó\¡Ð’0së·§!Æì¡K^j1®!çóã7ƒÂF!2ùš/ÞQ ýW…!dHc±g±Ä{«£Pa,†S™"GÂd¯Íçe䶬ÍöáÇþ°ËV¼Èˆ€CaDÜøçf:*ºXþÉÁŽ)2Å·áV׫ÂPHLVz륚íä«Ÿ96? Í2åÈÕZrÍ­Í »È»Tn¢"Öhd T3‡½:¬&™t0M ;Éà¡?„R„ùHÌ÷ŽlߪeÌ—cN^Žaî[¦|©"ÏP%]Éúí9F{ ,R˜,wÃy'kÊ?Ázï×J#ů§¼¶7èÑf[ØÖ¸Ü8m>é,Õ£ñgsöèîǼ–Ÿ >¢’mƒ»šz¶‡–œµýdïŽf[¹öEódd@â?õ–ûn±áH¬‘YÄ.·äÈ"R½¨³® ®c41V8;MmàZË¢ò·ÝHu0”`QMĦ‹Â‘.;¢¯|í/âcbÇóŽ—GÛR>BŒÛb}7krê«À¡꓃ BÓwè‰)YXP›Ålè•1«€KDà©)ÎýâÌ2~eœM=¤®%Õ3– Cu^yQ ä7ô£¿˜ e*²»ž¬js»¯ù‘1'¡Û~POœÓü T™æ·UFaØ­ŸsA?Áè¼³Þïê/Ã×›Ý/ˆ' xû:ï+#™>ãàiýƒžþˆ¶ âh1CJi•ÅĨ 0+íˆ ªä›Ò¼fÓjæ®3„":b^¿’ž¾>œ ÒGßzHűI ŠÍ2‚W<—ø­î±aj4Dµ“ 5«\6†3Ÿ‚ c½Fbá¯8çÒIzTp…!‡ˆ­W@Ö…•Le2ˆm¿MߨC8Žžç¾|à̤ÞBÂîÞÄx˜1=WUTw.ÒB²è¾Ôç+Sïj©zx¡Ê-iSŒÌ¥ŠvÔ¼+ù$zÁÏ™FK0&}–ã㪼¬Y‡~9M+Ã¥SÐ%Ì.äÛ¼­=éšâÒá™>uMÎWÐ_Jú±Å("3²8Bwú÷7Ôm´pJ°B4¥”Nƒk[‰urÙÍù¤†sH÷Ö°aÍúFŒÆ]bføÓy<;X†4Ò²RÖ:’êa“‘qXL¢e9G膥`ÓC®%…›ëTÕ“PnòDXup­<§Û­Èž¤ODZ‹ø5­¦/»#øí>¹Ý¨€º ~'–®y×âSï2ˆÊ²„´` l—Ú-|Us¡o(ШUó4¶ƒ¼&‘níüÅçcè¯7Lçdk~Üæî…MTx€iÊL1ĺŠœŽõ‰4Ábͯ†Á¬R=ÐFÿ‡ hC(íú6IÙÇ0”¬ aúÊBJiÞþv£¬zh7ùp¢wÉ×é–WŠ|WXva,qkOæê¸ü¢AÂLR¿i9ßv«!Uno¿¾Ó7…­EýØé2CGÊHß soo¹°®âîç´ÃÓ.·ü‰XÝ[ä +sŽ[ò¯ÆºŽÏ ZªT˜Fu醭aw;ôfI´ª|fÜÚâñ‚ÑîB5ç:ô›C]Åt)´¨ [³')Öá(Ö²Xý” ©A8çŒFŠƒ9'™ûkóm Áh%žºË!]Çqf°pPŠpÛh T€[LœPv?çM4™£nÓMZw ×Ð]ÚUå)nÆ<DíÃÐ0ŸJç!pº­µB‡#_JÔ&bƒfç×M2ÇjH@§ùåAßÄt +Ópd½Ô[`çCDîãY`=O¨ã<IÅÿò‹I‡ªF< óPZä„N|£Ñkÿh!Jž¾”Ú§x¼¬ÃÇ`3´üµj¥mÛ*õ·ÒÝ“$Á³a†£òÑ*ààw¥+}ü[=5êÔ;ºžiþÜÉzÇS^ dSuœÏóÿüÿ,.Ä2lsŽ¸@î³ñÀH²Ç¦¸c;däýHŽˆEpcæ2®ªÉ'ýœ²( HñíÀfº6¢~ãÍè’6yÏØlêÖ¿Œ·ð‘®ª_0°—j†BƒLgxN†N¼¸4tãr&ð$Òá“×⳦\׬#RdBÚsdz/¬Ôü(Lš]ÓÄ>ºís~þ”êýÆ ›¦£€Ó‘(?¾lˆ$Æ_L¯þN_‘çSQìÎ8µG–æoWåŸw<þÞÅ`2(n4~i-ºª©[íòU®Ü€GO ‚6 }€ÞÓŠáºý rU«"K£;Ûðž_csû¸W–àTÕm wÅ›ð®Û>üì‘\£þ‡¯ïútàùëÏAW*‘˜ SôÛoba£¾u‚Ѥ5÷„®Ç.¶ï(>KK? 9àR©â‚?¿$cHp‹ëʳ&¾4(b£R\uÖ¿íØ×ÿÅ`Tf`lqñ¿è•¶‡Þ¬ Ê®£JñŸ9W¥3}ZV~ý¡’„¶ßt°üèR=>ëYmâ…lÊü“«Ám”’)é²Ó³ÏZ¨B©}šè&­ +Á¸ç‡ÂúIo>¢ž Y†¬ƒ;¢+A²neçΚ[czýMµm/p5@?¶~t€pð’ºF°‹[Ç + }W—ÔÖ¤í®dÏê3Æ­­Ò‡¿$ºÕVP› øÅVc%3¥@¡íä&žH˜.ÀýÁ6vÀáõ£…z…BqÛNÉš›2•TûD:½õ®àxü\Æ/(tùDѦ$C‹%Ð}B–ÌCÀèçQÅÞ §ŠµHËÅL9Ú~[[f︙¼mZŒ=6% Ù]NÐu¤s0E‚ÿYð»\I'T‹p>̵†ƒ"H= ‘ª-ùQLO*I!P9RÖ° ´ŽšL¾QfÈýíDzjDûYEùœÑåZòËëâ¹ Ü 8ê²€È}†Ýù«]5ÖôV‡Š2Ûy¿Ì¯Ê”¨ÈHs¾©Ónb„ÏçXÊ°& ëçï‹šß÷¦‹:ü…諭==’åÐýzúÙL}ˆÀ^Úíéˆù×½ê9a´¹©ôz£œ]?¯™ ,}QhyÜK(þ|Íöªgˆ˜€!¨Z Ñ„œpaÌ9…åôÀ!ñ¥ —Þã⢻IW±~W)ôXäW³ü€@óœMÝ>Ç똾r-ên´}h†,#Pû +tE$ úoÜK‚†¥ocÙÙ E/¥ïµªmí’£ær`![Ô¬Oå¡ôVqé;9Í¥¤Ýý}K œUåzWiÒÚ=þ º«ë#óç'ý/Š>a¥ìsµ +žž3¬ªA9^éH_ˆÊ3ìšæدÙnà‹)áâm>À}ÐhàÄšŒ åø3ÓÝŸ•Tw²•ä!l}òrû´žMßÁž}µe¤Ä¨(ÔvÇ µþ«Š ÉpÝ8})Z¯ìfä8»8Iƒ~±žH.<³»k—Ã¥ÌdÕ¹<™Xð’hɤbÕs!÷Müÿ´/$¥nŒñIpƒR{Ä„'âcêRIÙ=\XÌDçl„ñÙ7<²´-œà SæÞ’ÇVûñâ¸bå#É^e‚ÏÙþ*Y¥µ +÷5bóWŸüÕôt³C9D$š)I®«K$j tR(PPÀ"“‰ìXjÄrÍq=L7Dã`f*n^˜ÑééÍz˜`ÕîÊ_Òºn°u|ù5Öe3Œ?Ä‚! ×J„·LR8“*'²¸¢hŽ•ˆã€AŒe~ô"ž^'Ô®qiÙ&­´fˆÄãow^xvÁoóÏRvÎ?îè†÷ÖlùÑ2ú«4Nc|mOdòpÝ.#8£²#îK²nd¹!6Hßçw¿Mï;ž†‚ìÞ BUuו€‚CTl®´ÔZ¡ØlAi!Lëö.¨N«¬œÏÂðNÕ ÷?õaØÞ&.8ï †‹Gq2x4Sâ@ò~ê–œ%´Æ­j¤«¦³úN‚Ó˜N SˆWVµêYkÇ°¬5²¥áŽ¥ôbûz\séeñ½kQZy¤h*Z–E(ÚRˆ3 Fè~˜;ã|$ªÓÃ[®ÍÖ-˜N]ˆÉáÙP<|Å:³èôFÎõSº6¾Ï,)£Tÿ¨²š +ÑåêB:­ÃÖŠ Êx$To9@H¸%±.¨Ì~jô&+A 7—ê³Óê®ãO ºQœß ÝÓ¼UëªðKŒGf´Â8Jý?âá~«¦°,i´KRQFÈ:çZÔ²öhÚO>Oɽfx‡2ȪA™`dµjg ÞqÚþæb[{e=?_)ºüDÁêÊl[TÌ37Æ8)Ñn+àAíMõ­¨Š"z´CE'h˜¹BÅQqzïªö0|#aÄ—loàÊ—v’³XfŒ´xè@—zÁÄJ/Ÿa‰¹­2ŸÝ¥1%~¬uÂ…ÚÐ63íè4(ÖOHv´Éã‡6ø‚æ *ñ;yŸÄp+íKÈG?üþúI‹À7 \sNw%Ø’‰î;J¸To•Ö!NÉSenéN†£²p¬î“‹vÇìàà¥vŸæ:ûó”Åáê–Ê Å’gäÝÙ›¼í*p1IýŽµm©– Ý¥Þ™P`<êÿk¿œ–+Q,š¤Ó±­Û¶qb»cÛÛ¶m۶ӱѱíŽçþüMÍú€õ´jWmâžnâGa¯/e®_°^èd!xìí¢ ¯¾>äÂH³Œ’L­‰uw›Õbd>)ÅxWÛµWã h”M¬Sçà’.³™FðuÖîë' $ä|?3¹O€úu?,€XFc”ÝÙP;™ò~ÃSG\iÈÑI¦„õðçBl9Áó<×`Xzr˾uӷÑH?sÝ‚±LɱT†UJʇ ß6¯BOcE7W‹oûvO¾ÍTúŽ§¯KˆwÙÔôã¢K)]€úøoé)c«¨T½«ÄBgOBiž?Ôu$i6§(`«N"¤VqôB¨/ç¾›G’¶ÝÁaäz©¶îp”kQGU©·T½qk”D”øŸ*Íø^nãGò 4¯ d¶¯'ã*Öáå,Ù£b|Êsé†,§²Ð¦Z¢€%¦N<4¯ƒåôbtß+ÁxÎq„íöU'éù³“ÁÄ€?å(Ÿ6î §SÕY·ùÑØ5E¬©ƒi• Ó¶ ã;Ü«Q²õò¿ßÃNè[ÿŠòÞÓ1äï[}ˆ·8—^°xôï¬3¶µ±‘¢5:ÿˆÏÝ•AOoË° +4­úWM‹~©¡CÏßÊÿU-Ÿ}ìŽY¾†¢á_±@Yh€íu›øbÔnW,ø”=ízt<îKfp¥]“ŸqæÅÞ-3Æn’aZ|ìŠï|=AW?~†ŠŠ¬‘-šë\ïb;üšsî¶j÷Žmùé4§xßîh&ô¥ü"{kƒ³é|‡l#g nl+Ï7#R±´Ö>õŒ™Y©âeë:@³Í¿xçc…/}RÖ¸g´µõIßârÎëýM•4yþ^Ú'ȇ·ø§–ýͬ&‘^×Á7È:6'ó'r2!LÇ1¤Abw>ñg²*¯Ž¾O‚Gk(9ïu +%¶íV,ÜQòQÛÆtäf‡ÅuZý~J´A{3’ÀJ™‰&Ð0M\ý\¶XÀö1S¤³ô;5¯EaÏôJ0·/›Í4j³} +eOLÌq3©¶Ô}ÅÂù„וSmZógÀ:dôe7ðA¡€5úêKíÿ¹â®RâáÏÚçËÀ BE* h} Ý9htå_W´Ô½3ÁmªÅŸ¾?~M_ï9be·â™ô¹-ð`á\Wqv|®³8_'Óey‡ÈŒƒ‚ï°óƒ~Ø//ê,·"FxÀÉ€[.+OftI8gÀAÃÝþ’âüQ¸¸Ør~€rKò¬IlòJ‘+6¬¾•~Æíöî.ìRÖÎgmîàYÑ€´g±ëë7LÒ(©Ùü|I#¯–>Sy go§Éè0Ø‹P['3o^‡× ‰G=Û%Y¯?&IO¼VD .©7AÕÂÝC+äàº)Nmè:me°ÆO3›_ÅòvóBÊ›¬L.hÜLÏå\®¼5~ѦùËLÀöœmf°™ö.%0랇>¸2UáSB/o›ú"¥uŒ +…™¡é*®ïÏZžx;À-Ïåìƒ"ïÚ†ùòù·)*¤¥3ËÚ^ý=äÜúP~Ø.†ÜT Ë ‹ùæ(Õ¯ ^þkΛ±¢é ¤TrÌ°íåZãÒm5Xî3·#xæÓÄ·¼+»b{ÿÃ0œ}-å1˜Ë¾•áQÎÁz‰Â¬ÊÞ¹tEpyIêY`à7¢K KÀ½1«Òâ ++aëØ “)¯[L’ïµ' ò+Ÿ°Ÿl‘\ñ™ÛtôÍ<ÌÖëwÊ¢bð59Ð*ßCdŠã•Q¦T¹/®¬“¯}%%§º/»ï³t.fÌ fMÚ˜Õ]Õ4}/ ÃÆѾ9ÿ5$ÉýÓ\úP/eë1WÞ³…Óv`ÓHT»Š@NùÛèjÔø«Â2¬ËXì^â{ËÆmô«—Ä 3¥è)Ç UGø:ÿ‚|…o?W6Á~ÇÈ!]ØâgÆ®±ê3_áoxFP²¾Nµ¢CŸs|’u(ÙR«ãòâü)ÞNcZöÒ¼°nPF›‘úâP‰6úÓ(1êv¾o*ï›”|QÐù#$!4SzâS#Ž·uþI6Då%3פx{ˆé´¯KKÁçÌ®CÌ|HuæË‚Þ||ó_¡Ò£)®+yû|(ëîßâ‡Ë@Ü2…Ž—2DӪæÇNA´[÷õrðtSðø{ƒhóÉ®p‘þ7.Ï(’u€Øfl1©Ü•Ô<†âÌnj$~à-Ì£ølÉFb@êD•ˆ,X äÊ[ÝŠ•>´³cxË%ssøɆ£M>ÃJ¦öÇ\\|ía¶d:£ãÏO(c‹ÝÒ$ôèq˜±58Ãrt îv&ßÆSŽ}O «Û©-$ï‰#‡`gÃíñ‰Ÿ +mèLj¿I¼Äyê4¢“xC‹´¾}í_dšÈb‡a¼Ð˜,ÇÁ”jÿ»¡| +ôÏ™¶ôúû¿ +h?IOø¿{EÁk–X4~Ôåqp „DuNLi’ã¨L’¸œKŒ}ƒ—Öxåp·UÚ¡e=.L,¾uêÀ±Ó>Ø6¶Ëh ¾­I ©¥2ÈæýkæYל2oíˆ6KîØà|ž ° +4£|í 4öî #a`ãåƱÂcJN¿$DÁäÊ:ß÷”¶Sù¿š0'x\n)|”"<jÈàlZñL|ìó “ ¨EëhÈ`TdÈægòㄲ'{°›ö…`*ÌñN¦ÈKìí111—Q'ÁX¢‡^¡8fŽ$°}d+xÑW_Ìñ÷õ•Â  Rö>ü?ëáˆò$ƒ‚EÍ›z`…Ó.´ïîÞ9C˜Lö*¸`b@åMlå½/O‹EW98d¨T36ã±ÄuÝY;h?»Ä˜¯?S/óÉL\ ÞÂÞá·˜É=8ŒõÁ e÷µ¡? +¦?Ä›Q‰ìó +€u“¶o-ռζÈFE£ð.åƒÊŠë>{‰*¨òwµš°s÷ãÁ±A +Ä¡gK°–jྤvÖ?”lMöV([®™4úÊáD3p½$V¶Å,t‰#”ò·k¼Í_y´©¡4A{;D9"š;ó;ée$X|9T7N®åüok½µÏÝ3äñ= àŠŸœó ,çPzìýªk,AUóÚd¢`VX¬@a!G»¸¬³^„žÍdSïÄâzy’_W}T kÓˆ}¯µj,BMðî´¥{¦XS~§aN·¶®žc“£Ô‘«8³s&ëÊ‹·Å &èñÜ”?äý«>ÀÞ×]Q´®óP™Øk`ßäÕÝf û®‹Y×Z«ruì=È3€1\&ÀHCNXùlu[80ëFÝŨïØìNÄ]© +˜%0œÒAJ^ý´¼%¤w}/ ö‡î²òAæìQæãžûnúéùÎÕŽÙPÒòçÌÃzÈ/Z;ž)\x‘ÚìëÖÞ9”U.‰Ó_>ò_øá5Uûc-­@6 QEæ*D}X2a/GúGc1§OMc-Œ¾2å\¶ý„ÆP¶ó2¥‡`1”{݆àYšU!²TQŒywµÄB´¶BSÒhឤ2šA1±3_oyPüTIŠ¼û«õ[»TW”—¡6ŠÅ~u‘#·ëõpmðI„#³ZÕY$Øóyø2XõþÇ0†¸-{ñÍ·¾ªå¼2ñåÐèœ/ûY-T !ÓXÈ`lgÀðß‹Ù§¦ßªY¥.ÓJÔÝ2ù¦Qâ2¼·ÓýÎhð4[YŒX¾i‘å÷Í6C1ï²ÂlA`ü_ð¦rk: +_ÃýS‡µ )1ŒÊOesLQ² +Ôqµwˆlød {ŽÞ‹t¢ Þâ+ïí[^.\1} )ÃÌÚtú¢à›%×ùRO|cÇŠˆ?ô€L]£µúem˜m…pRn7+o“Þ«¶›4s·Í –çë:yÊtôÒ² ê+ã\æ—‹HöɈD#|q™eѺTÀ?È6@å¦}Òú”¶¢§†ñ®ÐJÛ?ûÝ( +!N™<‘cÞšó¬1¬ +Jµ¸Q¾n ݧ¿žc@\é—‚õ’®TŸ3«0ÔꑯJñ­c81ÚGe:’¸ëðîÞ€0c(¤¢H¸ŽhÏ)^÷MÉ*ïYŽ0… +¸* ÞNK +Ä'Εo äNïçÊòHª,—üw*»ú.|¶0ÚIÐ ž4[Vƒç›-Gy2½ û{(b'óXèŽïÝÕˆYzåeø’ºkSoðÕzN +…Ï\{¥?!݈¿Q 圲,é“Ó{Ü™Óó½%·‡ƒR™ØKY,áëÎú¤ÌLŠšàßÎÐc+t_5ñ‡^€ ¨aà¹3n<‰¨ t6.ôÌö›Šûƒì-w\£ÐZÆ.ž(¯íôúDÀëôèT!þYÑPêÒ•m‘Q•ôƒMƒhØ›‹Öš– Z¿,ÃCó +ËÝ@Á¢gßqìöD€¶þ¸µÿO™ë&Ñsu€r“·NŽ¸¬¸Ü/½à=Nº&F¼«F_ L-C§ˆ}yï=]Ií˵¦² †¤Ä,Õmza­®4@Aĺ@q‘s “†D(7–Øuç´qçGªw=cP Ïú#ÆÅ·¹ªËPl²Uø¾d¤GË^ôë/mŠ¯,¾RÁõw虎ðÏËxuë¡‚êìI¡Ï™Cè<«ßÙÈIz‡¿T/H$ø›Ÿ1ZÉvPæªhÊ'ŒåÇDS.„˧M6ΰP¸%É‚Siæ*aÓõû@ ~ä¢×Ûê—}¿ÊcM$ îœGéµírжJYÉÿ|#1ƒÔ;àÐ7pð8rü5%_yÞ„r”]ãk‚ò‚ˆ<"ê™kk?IÚSþOXÍ̳ߙñʱi `eV`Én‰R‰v«qu×Jzb;7ŽÖ_íETL"Ð8a$ÓìÜ8;tHiúÑÒi:!ZFQ«Ë²¹ÆÐ!»€d8Ú6,èÇ%\&¬H‹\ZØQ·§CÏâZZ4AÁi¹ZòÇÛzجêS×Qר˜¡óù•Hî,?X´†àñÃðnÛº‰9ß–ü_/‘ñé3ÄýBOÃö%O«ððÖ9Eçp¯¡œªJÁYÉN0Ä%ÏÚïêEZÔ!”øÚßÜ“‚ïW<Àf§¡&½äŒ/I?aB'·ú‰²Y«·y45,¹Üjʪ<=ÛVáje{‚¿œÄÑõK>K$9Ü21s–ÀáÍÞ·­XlO[!9NìP%§ØKBÄûïi+‰¦óÁ×ZRÑòYÈÙÅB±á‹‡”#(!¦Ò–+±ÕŠø®ÚK®<]rk—À!‡jÉ¥¡æì<Õ í‘Ϥ@™Xä¨L:¤µ¸Ë$E䪕âxKq\ÿD.bá%,Chm±$T~Ùàó^ã±Ê]ÊÐGùNÆ "§I,~ÞQ†ždºÙ ù°–`NÖ"Sj1¯…i+gK¤·!Éõný\VÌøºNnqy‡Üsä §©«ww~=Äq‘b²­GŸ¥Ã›×û2·J³ID¢DŒØDIôLÓV –­~&J‹=—YN«ýœúËY#é¬QZ¹ˆ˜|aÛ`„·›ÊºÿA!ß¹ ZbëíæC"ÑB^@*ztc9„)þœNIÛ E:2"ù1ÂrŽ(”qØŽÔÔu$æzÝ€LêL¦ÌÅ&â-3Ïû€Q ê´[?ô‘Ý}·]C,È×çŒ5Cè•\Å©$Ãæϯ£È§{ýÂ[VNB¨æ(êî¶ OÝÒnÝšÀîL|H¢ð˜²÷¬žTÍý.”ò–â„Aã¡,ÇسÞÉz`Þ¾¼k~AÙTÇ]°ý眆÷ùóØG`9mMüFGŠŽÆGù5œ…R¿!ÁBö²*u¨¢|¼Û}õ}l¶x«$˦­k¢ÿ¾Æv^ü¥ÄP##nÓÒÆGnÙ €•&:Ž3k'*ø0 |ñOh”IßòcØÇF”Ù7""QÙMP†O2PO:¶?Ñ°Õõ:)ï*קMB_q«Ûêã¼j­'wú±3ɤ’Þ&‹7KÙ3ºº‰+Uu}••²-}AœÓئPVǘ@‘ï3«CÜLx¶°^MÓÆ?` äijbH )-™ Ã8 Gn¤R\/üd~–òÅî<¤'aÀÍ´Éy¬.ŒbZÀ¯ÄÐh3ëÓ-ÏÇi[ºx}Ñ?[íÙe§ÍM@^‚šÉoþ7졇ßK°1ÝBéÚK™üoPº-¨Ï^Fž+wñYø¢WÛŸ³ã®ðS·‹:>ÓÖ¶¨±ÎieÎß fmô„ÜΓê‘ÖºÃgt2ˆ ]¥…sRÈú‹:÷®oü']­eò-ÄdÞ¦+v{ÇÂeaTÊ•µpj諪µ7SX 3OéiØ®ªwOPj:ÚÔ‰~¾žiÏØIXÛÖ;‘bâc†´®M£<‰ê¦ë)¡D·'²\ªïJmú¶gáåãVÛ¤úµŒ —Óë‹ú¦áîJ~°¥R¤±Dé@>c#÷‰,rrXå{*ãh'=iU³ºi÷–EŽmk÷r6ÄB¤V9Ïzs“ã]­(‚-‹ïkÕZ@½Æñ´…J:,õ(!TÏaj®Ác}ãö‹Íf†|ä„ Úz²€+•“¹yïÉ|Îøúö¯ü «˜ŠçܪΙ¢¿­ü|”z<¡¸d!+iéûž¯i£bݘ ,¸¹Y¿Û-³Gõž—û2z¨_-R·`Á`¥ÅŠ‚nü먋á,ªê/Öꎇ@ñçÅÀ‡µ"z¡Œ{«C˜ï¬ëÚm`J`öÙÿx<òxà!º Ѹ÷Uâù€nöé.R€Aå)\á{«^×S'©/ÏkCpb@hÙ,R=RqæëfâLsÆåªÐ‡vÌáà |Àyéäg,åå~B’fwñÝ—&Y4Üõbã>¤8·õLªº\ÑI¦·öIºõW°£ž¼§UÃ)KBB”¬öÿÿew= 4—ïSJle7ê$6Æ…WÀ‰6Ï7òõý¸ð.üÂöWIÙ{Ùíoû8ëäU±Û=6ÉÛ ÝÆÒ¬åhn@‰æq æ[Ž% +¶Èãé©t²„4å¼н”n_0gþZXßåì…×bKÀ!È*Š¢Só±[¸ùq]²Q¨ù8Èßu‡HTs5ÞV¥XH¶{í»Œ†í`Ù·Tî+ž†äLC"ábYàÁ™ÈŒšyU'ÊCÿn.ÐG£ù=ñïxÔÑ' +R㻯ÙQôÏŽ}Ô Z—7“Á ¬¤jžé ñ"FOiŠ>?ÎyÛ!änQT)Æd§ Õ©Jü[—p1}àn‹߯¶ñˆ#ªU{¹SV}¿W†yT¼"~,*0W‰™ý.ÜXxäݾw‚”ÕÏ#hïyª ?N8,¬Ÿ¢Ò‚÷†—ó]ÅŒPpFÅKÕ~G‹kýj Ý¿þKIÕ$õºÁÞº©‰uVé¡OýC±ÉåMìi ž2C´gyƒ?’ËvH4åËÌŠJ ÂCéØK!ÄÕãþIêf|ÐÝþs/ô³@Ä:÷8=]׆ËlÙím1qGoi{tÒ-3î.¡¡¡)òË“–š1®”9c¿X;È:Œ5ð4‘t# `bK)qA¢ ©˜æš ›c´­5ÁzZ1ŠÞÖª)\“²1ì×±u27Õ@}}·f RÙáÝoW9Ç\P¦0»EÆ}UB%×/y×—¶¤^â¡26ýù,bÍŽóPI2ƒM<¦éË:ª‚ »û­h¡1¢Yâl8.ì4„ãGóqj#ÊÑYœÆïüO«È#!˜na¬âldfk“ ÅÎ.Ô{aTOFç x˦â[ô)fËádï°ÏçºU.‡¹¨¤93ž°‘òóT@œEgf>êd ³·N­[±mÕ_ „Éå¡«åc +bJÁœ>ZÔ¶X-wJÂp²u©âÆ0S§±sª3KÅæóì“#‹yžÇ­¶÷ âÙØn¼ú}åÔ\C"…}ñõkRO‘"ÆÉصCŸ°Ç&î—»ýl#˜LV¢n÷‘¡ÈÀ)5~ÁrioΟeÓH²ƒ'¨ŠÒc~1GÙÏVÛÔ&¶b®Æz†­(óÞçy]µu9Û³·ºSß<ñ‘¨¥ÔÆúµ•†Š·ý]n>+`½÷£¯´¢w¬lŤŸÊPh;w#7Ž®vUs Ë0 ÒÕ1©HÖW¦Bü0%Ï x4î/ƤúEGû ¤y+Ë(§ÛH·ïv²x¹1= ›uBCpƒÉŒ5¾ÂÇ™Ò{A•0žÑ5'†:]+³ lYô9²Ÿo Û;O%í§æe½;ió]…J.Å*¸½ÚWféë]šÆ¨’IFD>’!(š 9$˜Õ{è{W»‰êå|rg,fi©†Yœž›V™êkS3ððŠ³Œê£s(h"ñÞJÚ¹‚ërG×ȃ®Ÿ¦Ô\ãûö! ]aX +=ÄWDe1ˆ¦H”L9ʳ‹Šâ(ÉLU~f 3Š^ùž©DÃUBAB´m0Ap ÿØÁ÷4@-ð³ÅÌO­‰D^¯-;H'?Çé +A™âõ2ѶŠŸÓ¶Äøí÷w6Ê+–IºÓœnµq×oúWïkN)ï‡mÖ8/1aÀÈ[­ø'! ´ŒÄPxÉ¢rB<–ðœØEÔ?Pr|7°™2­²3Dá ÄWUOš9¬hÓÄ5@)NI´°›s0ÇÖnŸ[fö½U¹fHɸ>›»|¾¸¬{ü*ÄØ*X‰À¤ø‹Ã’mdñ„]8Î̱r¯éúë$Ÿ5îyôÅ 1™ú&àv(WØáñªLŽe½pò‰õTàb{´ŠÄB!ð¸YRE!ɾdä\ÁÔ| +Äôò} 0á·Ï<ðx­×³5(©²ÓÇXõ̼‰h8L©m¢Í°]ºÓŒx$“ +­u|Ðí8t^ˆš/€‹MÝp­_’<{*ñ>Jn ÐÅ—6¹s²R¯aÆ‹úr×€]9ä¯:²(`\‰áÉlA7¾ĦK”ž·†9z8nb64Ë¢jE¢$µ1V|·ZBËÐöX#Y»ͪföWßqYûlf/ö»­8Fj…›ë_X1¡ÁèínÕ (N1©þ¢CÑð´ýÆ9(AÄEêÞ–«ôáÃÉ€ÖÜÑf}_¢£J¾:¤ íéJ$<ÂBÿˆSUÅöìMø›Yr¤˜¾ÃÈ×`Qíå?›Ù±VƒÝŽˆ½¸ÂˆÚÖñhÃÙƒXÔ‡7Ó¶,Í!Á•FÿÁEè^F ¸¯xÀÁ¦ÿàB*·ÛvªR&¤N<•ê`¢µ+çN¼é¬ +g¤£Ê¾2f~mû„m}…i¶xÄãæužÙÆœ»‚ÙüÂx\Ôt{™C Àåò ›ËøýÈ·'5' ªzqvipd×kµ»¶j©@ƒæ…:Íw¾?bøàôVs,%ãIP¡ÍSÃ…„A³ô‰ìDª`Ïûñ,{r˜¦fY—AÀ˜EÏ¡+LNä^õ,¸¬Y¼B™¡9ÛœÐç†dbTC4è¿JLWl©0Âkž ^¸ùT›Úò«¾¦ét«§^Þí§/‡3SÄ蚇dQœv(CÜ쇵È%#¾j0Æ7›5pEZ‡ì—,í¼éÀOÇéÃõ¤¯(CæýéZb4üÁP”™Γ{5Þ…k`åùÃJÙãpÔféAvs,µp̈Õ.¨±g¸Ño¡µ°±P9:Ý,'c|Ì1eÁh†M~‘fQÞúûdú9’LÈúôÖN0–"/Ó|8׃ҿ]‰/ óûÚûس˜z$©Ôü³[<~q÷é#ƒä2 +'óP4I×¥ŸÐ?`b¬FH. ÷R}ÿÀ#] «iÀAñ7FÌÐ5øùq6O‰ Ç/êúWbõÑFåq-¢´ð §]xžök%˜Ã–td˜¯‘ŒÎ¼r¿?qEµÀ¡Glq_åOÎ1ŠL$HülÓ‚|²ëÅ›:vÐ Ø›¨†À<¬è2ëg8„7ë%j ÅL/ARWˆŠmõƒÑ ±)Cðî&œ£Ò(q14ŒED;ÌjdW åqêÒÚ8ß'‡õt˜{r›`üz$¸~ЗV-ðr#QcªžÉ¹=H­EÍëCóIîÁÕŒ–aYÅuz8UG²þºÝ¡HJP+dGR]¤IؘNd'×DóN'é[ºqÆIÒĵF,·;Å—d•”©7•‘W­_ˆF®kô­é¢á£tΘ ~­ yTjænUÀNöÂߥ6”éŸì¶\e>:3‚t{ù^÷p*kõ!1ñÖ3«/¥tŒëÖÈ|æeWç¯ÛQ#`IbýÍÃ$ŒPÍXÉSKUŽž¡’` ËAÅžþ›m­%N©ò’÷Y ¥Ê¡K_º`ÕsYGõ¾ìŸö¨,4ƒ“³›¯HC'Ÿû89cá[ã Û2?ÆN¼ ü±ù#°¥ª0ägã¶,Š¢œ¡. éj”¿ê?ÉxG# Ò+“Å.ă-†cå-Yo¢UÄVõñÈö15Ò»æ¾Ýc@@íéíAŸ LüUÜêÏÉ…ÜÔ¿©ÿÌZÏ‚ñåÎSUn9“mbµf[‘€Š±ÑT8D1¿4г#hqÙך½E9É{Ь¶uîœb…M'­?/ÖGÐÿéε%¨˜Gš±Ñ3 ?hßó¤¸þa¶„çŽØyžÓ€’^`´ý×Þz\‹÷¶v«áP{ÑÑ•Ih~×`5»æ0ïfM…ÂÛ +ä&oH[œ¯A•9fÜË•ÿ+J†'¡1ê’ëyC \<†æ›îyʇfäiX.²¢¦ ËÅoöøA…°•#ó3ÆÎÑ—ï;¦ûÁ_;râw‚›ìĽÅzi“Ã+Yxh­ÀêÐÃz5xu¾5)sþ³py}Mµ~à óÿ¸ÿüŸ˜Øš9ÿv°3r¶ûº¹%endstream endobj -682 0 obj << +714 0 obj << /Type /Font /Subtype /Type1 -/Encoding 1932 0 R +/Encoding 2007 0 R /FirstChar 2 /LastChar 216 -/Widths 1946 0 R -/BaseFont /WJIPZH+URWPalladioL-Roma -/FontDescriptor 680 0 R +/Widths 2022 0 R +/BaseFont /BKPCDN+URWPalladioL-Roma +/FontDescriptor 712 0 R >> endobj -680 0 obj << +712 0 obj << /Ascent 715 /CapHeight 680 /Descent -282 -/FontName /WJIPZH+URWPalladioL-Roma +/FontName /BKPCDN+URWPalladioL-Roma /ItalicAngle 0 /StemV 84 /XHeight 469 /FontBBox [-166 -283 1021 943] /Flags 4 -/CharSet (/fi/fl/exclam/numbersign/dollar/percent/quoteright/parenleft/parenright/asterisk/plus/comma/hyphen/period/slash/zero/one/two/three/four/five/six/seven/eight/nine/colon/semicolon/equal/question/at/A/B/C/D/E/F/G/H/I/J/K/L/M/N/O/P/Q/R/S/T/U/V/W/X/Y/Z/bracketleft/bracketright/quoteleft/a/b/c/d/e/f/g/h/i/j/k/l/m/n/o/p/q/r/s/t/u/v/w/x/y/z/circumflex/quotedblright/emdash/Oslash) -/FontFile 681 0 R +/CharSet (/fi/fl/exclam/numbersign/dollar/percent/quoteright/parenleft/parenright/asterisk/plus/comma/hyphen/period/slash/zero/one/two/three/four/five/six/seven/eight/nine/colon/semicolon/equal/question/at/A/B/C/D/E/F/G/H/I/J/K/L/M/N/O/P/Q/R/S/T/U/V/W/X/Y/Z/bracketleft/bracketright/quoteleft/a/b/c/d/e/f/g/h/i/j/k/l/m/n/o/p/q/r/s/t/u/v/w/x/y/z/circumflex/quotedblright/endash/emdash/Oslash) +/FontFile 713 0 R >> endobj -1946 0 obj -[605 608 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 278 0 500 500 840 0 278 333 333 389 606 250 333 250 606 500 500 500 500 500 500 500 500 500 500 250 250 0 606 0 444 747 778 611 709 774 611 556 763 832 337 333 726 611 946 831 786 604 786 668 525 613 778 722 1000 667 667 667 333 0 333 0 0 278 500 553 444 611 479 333 556 582 291 234 556 291 883 582 546 601 560 395 424 326 603 565 834 516 556 500 0 0 0 0 0 0 0 0 0 0 0 0 0 333 0 0 0 0 0 0 0 0 0 0 0 500 0 0 1000 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 833 ] +2022 0 obj +[605 608 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 278 0 500 500 840 0 278 333 333 389 606 250 333 250 606 500 500 500 500 500 500 500 500 500 500 250 250 0 606 0 444 747 778 611 709 774 611 556 763 832 337 333 726 611 946 831 786 604 786 668 525 613 778 722 1000 667 667 667 333 0 333 0 0 278 500 553 444 611 479 333 556 582 291 234 556 291 883 582 546 601 560 395 424 326 603 565 834 516 556 500 0 0 0 0 0 0 0 0 0 0 0 0 0 333 0 0 0 0 0 0 0 0 0 0 0 500 0 500 1000 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 833 ] endobj -657 0 obj << +689 0 obj << /Length1 1614 /Length2 24766 /Length3 532 @@ -9578,7 +10022,7 @@ endobj /Filter /FlateDecode >> stream -xÚ¬zSm]³eÙ¶]uʶmÛ¶mÛö)Û¶mÛæ)ó”«ëû¯:n÷S÷}Xkfæ92GÎ{G,RBy%c;CQ;[gZzNE5ykkc ;iA;kc‚3 )©£‰³…­°³ 'š‰1°‰##)½‡£…™¹3ùõYþ !0ôøÏÏN' 3[²ŸWk;{[çˆÿçJ&&Îæ&¦Ö&Brò²bäb²*b&¶&ŽÖò.†ÖFÒF&¶N&¦vŽÖÿ¶ 0²³5¶ø§4'Ú,''{#‹Ÿm&îF&öÿ¸¨ ìMm,œœ~Þ ,œÌ lzàlG`akdíbü»©Ý¿Ù;ÚýDØüø~Àä휜Œ-ì ~²Ê ‹þOgsçr;Yü¸ ìL"íŒ\þ)é_¾˜¯³…­³‰»ó?¹ MŒ-œì­ <~rÿ€Ù;Zü‹†‹“…­Ù1 &p413p4¶6qrúùÁþ§;ÿU'ÁÿV½½½µÇ¿vÛý+ê?9X8;™X›ÒB10þä4rþÉmfa E÷ϨHØšÚ0Ðÿ›ÝØÅþ?|®&Žÿjù?3CñCÂÀØÎÖÚƒÀØÄŠNÖÎù'%ùÿ›Ê´ÿs"ÿHü?"ðÿˆ¼ÿâþwþ·Cüÿ{žÿ;´¨‹µµ¬É¿6üÇC MðÏ%óØXX{üßÂÿ{¤šÉ¿qü¿¡H8ü4BÀÖìG zZú3Z8‰Z¸›Ë[8™˜Xÿté_v[cGk [“5ÿÕHzúÿæS6·0²²ý§í,ÿæ2±5þïÔúq:eq!%qªÿóFýWœüòÎÊö?Ôþ½;ãÿ\üƒ"(hçNàEÃÀÂH@ÃDÏðsà~øp0±øü_2þ ˆá¿Ö2ÎŽîZ?eÿìü§øþk¥óß`DlìŒÿ™%g[ãŸñúOÃ?n#GÇUÿuâŠþõ¿ÝÄÄÝÄj}ÅΈ+Ø2ýw†szîÈ”°Ö@ðHˆ}i£rQ]¯_zøG¥þGmmÓ çW»ÇòûÏ#IÊã±>4ë_½©&×ù8>ÄýˆÛdlTÇtº¥°jÑ^7KÒ» š¬ôªÇûS +xÚ¬zSm]³eÙ¶]uʶmÛ¶mÛö)Û¶mÛæ)ó”«ëû¯:n÷S÷}Xkfæ92GÎ{G,RBy%c;CQ;[gZzNE5ykkc ;iA;kc‚3 )©£‰³…­°³ 'š‰1°‰##)½‡£…™¹3ùõYþ !0ôøÏÏN' 3[²ŸWk;{[çˆÿçJ&&Îæ&¦Ö&Brò²bäb²*b&¶&ŽÖò.†ÖFÒF&¶N&¦vŽÖÿ¶ 0²³5¶ø§4'Ú,''{#‹Ÿm&îF&öÿ¸¨ ìMm,œœ~Þ ,œÌ lzàlG`akdíbü»©Ý¿Ù;ÚýDØüø~Àä휜Œ-ì ~²Ê ‹þOgsçr;Yü¸ ìL"íŒ\þ)é_¾˜¯³…­³‰»ó?¹ MŒ-œì­ <~rÿ€Ù;Zü‹†‹“…­Ù1 &p413p4¶6qrúùÁþ§;ÿU'ÁÿV½½½µÇ¿vÛý+ê?9X8;™X›ÒB10þä4rþÉmfa E÷ϨHØšÚ0Ðÿ›ÝØÅþ?|®&Žÿjù?3CñCÂÀØÎÖÚƒÀØÄŠNÖÎù'%ùÿ›Ê´ÿs"ÿHü?"ðÿˆ¼ÿâþwþ·Cüÿ{žÿ;´¨‹µµ¬É¿6üÇC MðÏ%óØXX{üßÂÿ{¤šÉ¿qü¿¡H8ü4BÀÖìG zZú3Z8‰Z¸›Ë[8™˜Xÿté_v[cGk [“5ÿÕHzúÿæS6·0²²ý§í,ÿæ2±5þïÔúq:iYi!ªÿóFýWœüòÎÊö?Ôþ½;ãÿ\üƒ"(hçNàEÃÀÂH@ÃDÏðsà~øp0±øü_2þ ˆá¿Ö2ÎŽîZ?eÿìü§øþk¥óß`DlìŒÿ™%g[ãŸñúOÃ?n#GÇUÿuâŠþõ¿ÝÄÄÝÄj}ÅΈ+Ø2ýw†szîÈ”°Ö@ðHˆ}i£rQ]¯_zøG¥þGmmÓ çW»ÇòûÏ#IÊã±>4ë_½©&×ù8>ÄýˆÛdlTÇtº¥°jÑ^7KÒ» š¬ôªÇûS Šº%`¸3LŽ7)ü‰] üQHžíá|ÒâP»šê ÿ\%ý}þ54>:2Ü{Ú„M•IÊå KåïƒÍ§©R!RÕDzÝžeÌ}øØ"œ³\ʤ!g?5íµ Îk“T $f}QìŒ}}œ7Ãë–aI­zQ£Ø`{1®ËÊ›¡9sõ‰ór5úË<#¤=ø…ˆ´±36…è4Ó+òŽÇ¾a‘Ïp:‰é"“|:[5P6“Ó#\2®˜Æíß»OÍß 6.â'¢ÿp$iÊíù2ŸÒ;LÛ–Oòá ±Fóyº)‘ùµ©ãà~ ¥ŸC¡ë­„aø ÅÑ«¨ÙûGæhg [&óâ<1—Xû²Âø{iª_“¸bf)¦Œ²§T˜ ÜÓ»GAe!ógF玦àUa!*ÚZ0Ÿðç/è a0¼€ž~£œ†äwÝo âïfŸJ³xÛw® ÞaÇL¿õ0 è^š `8¿Ú Ù4Ùç÷ Ï©4†V×"”]BÝ3pþà·½_) èIÞ\H$séåXŒ{Òb^Z,ÃÛ6ö©ÉÁ ¬–R2µCÇŠ‰t(£ˆOܲÓ7‚9òó`e€² ä@y%0júAÈëRÿ˜à˜~xƒ4wÖ5çíÂàÖ±åmÝÓ×â}=Ð’tRX[>͔ҞÐRÔ "çH³l/é•_r> endobj -656 0 obj << +688 0 obj << /Ascent 708 /CapHeight 672 /Descent -266 -/FontName /THCASH+URWPalladioL-Bold +/FontName /LUNULC+URWPalladioL-Bold /ItalicAngle 0 /StemV 123 /XHeight 471 /FontBBox [-152 -301 1000 935] /Flags 4 /CharSet (/fi/fl/exclam/dollar/percent/quoteright/parenleft/parenright/asterisk/plus/comma/hyphen/period/slash/zero/one/two/three/four/five/six/seven/eight/nine/colon/semicolon/question/at/A/B/C/D/E/F/G/H/I/K/L/M/N/O/P/Q/R/S/T/U/V/W/X/Y/Z/bracketleft/bracketright/a/b/c/d/e/f/g/h/i/j/k/l/m/n/o/p/q/r/s/t/u/v/w/x/y/z/quotedblright/emdash) -/FontFile 657 0 R +/FontFile 689 0 R >> endobj -1947 0 obj +2023 0 obj [611 611 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 278 0 0 500 889 0 278 333 333 444 606 250 333 250 296 500 500 500 500 500 500 500 500 500 500 250 250 0 0 0 444 747 778 667 722 833 611 556 833 833 389 0 778 611 1000 833 833 611 833 722 611 667 778 778 1000 667 667 667 333 0 333 0 0 0 500 611 444 611 500 389 556 611 333 333 611 333 889 611 556 611 611 389 444 333 611 556 833 500 556 500 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 500 0 0 1000 ] endobj -659 0 obj << +691 0 obj << /Type /Pages /Count 6 -/Parent 1948 0 R -/Kids [650 0 R 677 0 R 687 0 R 742 0 R 806 0 R 867 0 R] +/Parent 2024 0 R +/Kids [682 0 R 709 0 R 719 0 R 774 0 R 838 0 R 900 0 R] >> endobj -886 0 obj << +926 0 obj << /Type /Pages /Count 6 -/Parent 1948 0 R -/Kids [871 0 R 888 0 R 902 0 R 913 0 R 920 0 R 932 0 R] +/Parent 2024 0 R +/Kids [914 0 R 928 0 R 942 0 R 953 0 R 960 0 R 972 0 R] >> endobj -944 0 obj << +984 0 obj << /Type /Pages /Count 6 -/Parent 1948 0 R -/Kids [937 0 R 946 0 R 957 0 R 965 0 R 972 0 R 978 0 R] +/Parent 2024 0 R +/Kids [977 0 R 986 0 R 997 0 R 1005 0 R 1012 0 R 1018 0 R] >> endobj -1001 0 obj << +1041 0 obj << /Type /Pages /Count 6 -/Parent 1948 0 R -/Kids [986 0 R 1008 0 R 1018 0 R 1023 0 R 1027 0 R 1034 0 R] +/Parent 2024 0 R +/Kids [1026 0 R 1048 0 R 1058 0 R 1063 0 R 1067 0 R 1074 0 R] >> endobj -1050 0 obj << +1090 0 obj << /Type /Pages /Count 6 -/Parent 1948 0 R -/Kids [1042 0 R 1053 0 R 1060 0 R 1065 0 R 1074 0 R 1081 0 R] +/Parent 2024 0 R +/Kids [1082 0 R 1093 0 R 1100 0 R 1105 0 R 1114 0 R 1121 0 R] >> endobj -1093 0 obj << +1133 0 obj << /Type /Pages /Count 6 -/Parent 1948 0 R -/Kids [1085 0 R 1096 0 R 1102 0 R 1110 0 R 1117 0 R 1126 0 R] +/Parent 2024 0 R +/Kids [1125 0 R 1136 0 R 1142 0 R 1150 0 R 1157 0 R 1166 0 R] >> endobj -1145 0 obj << +1185 0 obj << /Type /Pages /Count 6 -/Parent 1949 0 R -/Kids [1136 0 R 1147 0 R 1152 0 R 1158 0 R 1164 0 R 1169 0 R] +/Parent 2025 0 R +/Kids [1176 0 R 1187 0 R 1192 0 R 1198 0 R 1204 0 R 1209 0 R] >> endobj -1182 0 obj << +1222 0 obj << /Type /Pages /Count 6 -/Parent 1949 0 R -/Kids [1179 0 R 1184 0 R 1188 0 R 1193 0 R 1199 0 R 1205 0 R] +/Parent 2025 0 R +/Kids [1219 0 R 1224 0 R 1228 0 R 1233 0 R 1239 0 R 1245 0 R] >> endobj -1218 0 obj << +1258 0 obj << /Type /Pages /Count 6 -/Parent 1949 0 R -/Kids [1210 0 R 1221 0 R 1225 0 R 1230 0 R 1239 0 R 1247 0 R] +/Parent 2025 0 R +/Kids [1250 0 R 1261 0 R 1265 0 R 1270 0 R 1279 0 R 1287 0 R] >> endobj -1255 0 obj << +1295 0 obj << /Type /Pages /Count 6 -/Parent 1949 0 R -/Kids [1252 0 R 1257 0 R 1261 0 R 1268 0 R 1275 0 R 1282 0 R] +/Parent 2025 0 R +/Kids [1292 0 R 1297 0 R 1301 0 R 1308 0 R 1315 0 R 1321 0 R] >> endobj -1294 0 obj << +1334 0 obj << /Type /Pages /Count 6 -/Parent 1949 0 R -/Kids [1288 0 R 1296 0 R 1306 0 R 1314 0 R 1318 0 R 1324 0 R] +/Parent 2025 0 R +/Kids [1327 0 R 1336 0 R 1346 0 R 1354 0 R 1358 0 R 1363 0 R] >> endobj -1334 0 obj << +1374 0 obj << /Type /Pages /Count 6 -/Parent 1949 0 R -/Kids [1329 0 R 1336 0 R 1344 0 R 1348 0 R 1352 0 R 1356 0 R] +/Parent 2025 0 R +/Kids [1369 0 R 1376 0 R 1384 0 R 1388 0 R 1392 0 R 1396 0 R] >> endobj -1368 0 obj << +1416 0 obj << /Type /Pages /Count 6 -/Parent 1950 0 R -/Kids [1364 0 R 1370 0 R 1389 0 R 1402 0 R 1418 0 R 1430 0 R] +/Parent 2026 0 R +/Kids [1404 0 R 1418 0 R 1430 0 R 1452 0 R 1460 0 R 1472 0 R] >> endobj -1441 0 obj << +1484 0 obj << /Type /Pages /Count 6 -/Parent 1950 0 R -/Kids [1436 0 R 1443 0 R 1453 0 R 1465 0 R 1474 0 R 1480 0 R] +/Parent 2026 0 R +/Kids [1476 0 R 1486 0 R 1498 0 R 1507 0 R 1516 0 R 1523 0 R] >> endobj -1489 0 obj << +1535 0 obj << /Type /Pages /Count 6 -/Parent 1950 0 R -/Kids [1484 0 R 1491 0 R 1502 0 R 1506 0 R 1510 0 R 1521 0 R] +/Parent 2026 0 R +/Kids [1529 0 R 1537 0 R 1547 0 R 1555 0 R 1559 0 R 1565 0 R] >> endobj -1531 0 obj << +1579 0 obj << /Type /Pages /Count 6 -/Parent 1950 0 R -/Kids [1525 0 R 1533 0 R 1543 0 R 1602 0 R 1658 0 R 1712 0 R] +/Parent 2026 0 R +/Kids [1576 0 R 1581 0 R 1585 0 R 1596 0 R 1600 0 R 1607 0 R] >> endobj -1754 0 obj << +1675 0 obj << /Type /Pages /Count 6 -/Parent 1950 0 R -/Kids [1746 0 R 1756 0 R 1762 0 R 1767 0 R 1771 0 R 1776 0 R] +/Parent 2026 0 R +/Kids [1617 0 R 1677 0 R 1733 0 R 1787 0 R 1821 0 R 1830 0 R] >> endobj -1791 0 obj << +1840 0 obj << /Type /Pages /Count 6 -/Parent 1950 0 R -/Kids [1788 0 R 1793 0 R 1805 0 R 1810 0 R 1821 0 R 1826 0 R] +/Parent 2026 0 R +/Kids [1836 0 R 1842 0 R 1846 0 R 1851 0 R 1863 0 R 1867 0 R] >> endobj -1841 0 obj << +1883 0 obj << /Type /Pages /Count 6 -/Parent 1951 0 R -/Kids [1831 0 R 1843 0 R 1854 0 R 1859 0 R 1869 0 R 1875 0 R] +/Parent 2027 0 R +/Kids [1879 0 R 1885 0 R 1896 0 R 1901 0 R 1906 0 R 1917 0 R] >> endobj -1892 0 obj << +1932 0 obj << /Type /Pages /Count 6 -/Parent 1951 0 R -/Kids [1882 0 R 1894 0 R 1904 0 R 1910 0 R 1919 0 R 1926 0 R] +/Parent 2027 0 R +/Kids [1928 0 R 1934 0 R 1944 0 R 1950 0 R 1957 0 R 1968 0 R] >> endobj -1948 0 obj << +1983 0 obj << +/Type /Pages +/Count 4 +/Parent 2027 0 R +/Kids [1978 0 R 1985 0 R 1994 0 R 2001 0 R] +>> endobj +2024 0 obj << /Type /Pages /Count 36 -/Parent 1952 0 R -/Kids [659 0 R 886 0 R 944 0 R 1001 0 R 1050 0 R 1093 0 R] +/Parent 2028 0 R +/Kids [691 0 R 926 0 R 984 0 R 1041 0 R 1090 0 R 1133 0 R] >> endobj -1949 0 obj << +2025 0 obj << /Type /Pages /Count 36 -/Parent 1952 0 R -/Kids [1145 0 R 1182 0 R 1218 0 R 1255 0 R 1294 0 R 1334 0 R] +/Parent 2028 0 R +/Kids [1185 0 R 1222 0 R 1258 0 R 1295 0 R 1334 0 R 1374 0 R] >> endobj -1950 0 obj << +2026 0 obj << /Type /Pages /Count 36 -/Parent 1952 0 R -/Kids [1368 0 R 1441 0 R 1489 0 R 1531 0 R 1754 0 R 1791 0 R] +/Parent 2028 0 R +/Kids [1416 0 R 1484 0 R 1535 0 R 1579 0 R 1675 0 R 1840 0 R] >> endobj -1951 0 obj << +2027 0 obj << /Type /Pages -/Count 12 -/Parent 1952 0 R -/Kids [1841 0 R 1892 0 R] +/Count 16 +/Parent 2028 0 R +/Kids [1883 0 R 1932 0 R 1983 0 R] >> endobj -1952 0 obj << +2028 0 obj << /Type /Pages -/Count 120 -/Kids [1948 0 R 1949 0 R 1950 0 R 1951 0 R] +/Count 124 +/Kids [2024 0 R 2025 0 R 2026 0 R 2027 0 R] >> endobj -1953 0 obj << +2029 0 obj << /Type /Outlines /First 7 0 R -/Last 607 0 R +/Last 639 0 R /Count 10 >> endobj +679 0 obj << +/Title 680 0 R +/A 677 0 R +/Parent 639 0 R +/Prev 675 0 R +>> endobj +675 0 obj << +/Title 676 0 R +/A 673 0 R +/Parent 639 0 R +/Prev 671 0 R +/Next 679 0 R +>> endobj +671 0 obj << +/Title 672 0 R +/A 669 0 R +/Parent 639 0 R +/Prev 667 0 R +/Next 675 0 R +>> endobj +667 0 obj << +/Title 668 0 R +/A 665 0 R +/Parent 639 0 R +/Prev 663 0 R +/Next 671 0 R +>> endobj +663 0 obj << +/Title 664 0 R +/A 661 0 R +/Parent 639 0 R +/Prev 659 0 R +/Next 667 0 R +>> endobj +659 0 obj << +/Title 660 0 R +/A 657 0 R +/Parent 639 0 R +/Prev 655 0 R +/Next 663 0 R +>> endobj +655 0 obj << +/Title 656 0 R +/A 653 0 R +/Parent 639 0 R +/Prev 651 0 R +/Next 659 0 R +>> endobj +651 0 obj << +/Title 652 0 R +/A 649 0 R +/Parent 639 0 R +/Prev 647 0 R +/Next 655 0 R +>> endobj 647 0 obj << /Title 648 0 R /A 645 0 R -/Parent 607 0 R +/Parent 639 0 R /Prev 643 0 R +/Next 651 0 R >> endobj 643 0 obj << /Title 644 0 R /A 641 0 R -/Parent 607 0 R -/Prev 639 0 R +/Parent 639 0 R /Next 647 0 R >> endobj 639 0 obj << /Title 640 0 R /A 637 0 R -/Parent 607 0 R -/Prev 635 0 R -/Next 643 0 R +/Parent 2029 0 R +/Prev 603 0 R +/First 643 0 R +/Last 679 0 R +/Count -10 >> endobj 635 0 obj << /Title 636 0 R /A 633 0 R -/Parent 607 0 R +/Parent 623 0 R /Prev 631 0 R -/Next 639 0 R >> endobj 631 0 obj << /Title 632 0 R /A 629 0 R -/Parent 607 0 R +/Parent 623 0 R /Prev 627 0 R /Next 635 0 R >> endobj 627 0 obj << /Title 628 0 R /A 625 0 R -/Parent 607 0 R -/Prev 623 0 R +/Parent 623 0 R /Next 631 0 R >> endobj 623 0 obj << /Title 624 0 R /A 621 0 R -/Parent 607 0 R -/Prev 619 0 R -/Next 627 0 R +/Parent 603 0 R +/Prev 615 0 R +/First 627 0 R +/Last 635 0 R +/Count -3 >> endobj 619 0 obj << /Title 620 0 R /A 617 0 R -/Parent 607 0 R -/Prev 615 0 R -/Next 623 0 R +/Parent 615 0 R >> endobj 615 0 obj << /Title 616 0 R /A 613 0 R -/Parent 607 0 R -/Prev 611 0 R -/Next 619 0 R +/Parent 603 0 R +/Prev 607 0 R +/Next 623 0 R +/First 619 0 R +/Last 619 0 R +/Count -1 >> endobj 611 0 obj << /Title 612 0 R /A 609 0 R /Parent 607 0 R -/Next 615 0 R >> endobj 607 0 obj << /Title 608 0 R /A 605 0 R -/Parent 1953 0 R -/Prev 571 0 R +/Parent 603 0 R +/Next 615 0 R /First 611 0 R -/Last 647 0 R -/Count -10 +/Last 611 0 R +/Count -1 >> endobj 603 0 obj << /Title 604 0 R /A 601 0 R -/Parent 591 0 R -/Prev 599 0 R +/Parent 2029 0 R +/Prev 583 0 R +/Next 639 0 R +/First 607 0 R +/Last 623 0 R +/Count -3 >> endobj 599 0 obj << /Title 600 0 R /A 597 0 R -/Parent 591 0 R +/Parent 583 0 R /Prev 595 0 R -/Next 603 0 R >> endobj 595 0 obj << /Title 596 0 R /A 593 0 R -/Parent 591 0 R +/Parent 583 0 R +/Prev 587 0 R /Next 599 0 R >> endobj 591 0 obj << /Title 592 0 R /A 589 0 R -/Parent 571 0 R -/Prev 583 0 R -/First 595 0 R -/Last 603 0 R -/Count -3 +/Parent 587 0 R >> endobj 587 0 obj << /Title 588 0 R /A 585 0 R /Parent 583 0 R +/Next 595 0 R +/First 591 0 R +/Last 591 0 R +/Count -1 >> endobj 583 0 obj << /Title 584 0 R /A 581 0 R -/Parent 571 0 R -/Prev 575 0 R -/Next 591 0 R +/Parent 2029 0 R +/Prev 559 0 R +/Next 603 0 R /First 587 0 R -/Last 587 0 R -/Count -1 +/Last 599 0 R +/Count -3 >> endobj 579 0 obj << /Title 580 0 R /A 577 0 R -/Parent 575 0 R +/Parent 559 0 R +/Prev 567 0 R >> endobj 575 0 obj << /Title 576 0 R /A 573 0 R -/Parent 571 0 R -/Next 583 0 R -/First 579 0 R -/Last 579 0 R -/Count -1 +/Parent 567 0 R +/Prev 571 0 R >> endobj 571 0 obj << /Title 572 0 R /A 569 0 R -/Parent 1953 0 R -/Prev 551 0 R -/Next 607 0 R -/First 575 0 R -/Last 591 0 R -/Count -3 +/Parent 567 0 R +/Next 575 0 R >> endobj 567 0 obj << /Title 568 0 R /A 565 0 R -/Parent 551 0 R +/Parent 559 0 R /Prev 563 0 R +/Next 579 0 R +/First 571 0 R +/Last 575 0 R +/Count -2 >> endobj 563 0 obj << /Title 564 0 R /A 561 0 R -/Parent 551 0 R -/Prev 555 0 R +/Parent 559 0 R /Next 567 0 R >> endobj 559 0 obj << /Title 560 0 R /A 557 0 R -/Parent 555 0 R +/Parent 2029 0 R +/Prev 243 0 R +/Next 583 0 R +/First 563 0 R +/Last 579 0 R +/Count -3 >> endobj 555 0 obj << /Title 556 0 R /A 553 0 R -/Parent 551 0 R -/Next 563 0 R -/First 559 0 R -/Last 559 0 R -/Count -1 +/Parent 539 0 R +/Prev 551 0 R >> endobj 551 0 obj << /Title 552 0 R /A 549 0 R -/Parent 1953 0 R -/Prev 527 0 R -/Next 571 0 R -/First 555 0 R -/Last 567 0 R -/Count -3 +/Parent 539 0 R +/Prev 547 0 R +/Next 555 0 R >> endobj 547 0 obj << /Title 548 0 R /A 545 0 R -/Parent 527 0 R -/Prev 535 0 R +/Parent 539 0 R +/Prev 543 0 R +/Next 551 0 R >> endobj 543 0 obj << /Title 544 0 R /A 541 0 R -/Parent 535 0 R -/Prev 539 0 R +/Parent 539 0 R +/Next 547 0 R >> endobj 539 0 obj << /Title 540 0 R /A 537 0 R -/Parent 535 0 R -/Next 543 0 R +/Parent 531 0 R +/Prev 535 0 R +/First 543 0 R +/Last 555 0 R +/Count -4 >> endobj 535 0 obj << /Title 536 0 R /A 533 0 R -/Parent 527 0 R -/Prev 531 0 R -/Next 547 0 R -/First 539 0 R -/Last 543 0 R -/Count -2 +/Parent 531 0 R +/Next 539 0 R >> endobj 531 0 obj << /Title 532 0 R /A 529 0 R -/Parent 527 0 R -/Next 535 0 R +/Parent 243 0 R +/Prev 479 0 R +/First 535 0 R +/Last 539 0 R +/Count -2 >> endobj 527 0 obj << /Title 528 0 R /A 525 0 R -/Parent 1953 0 R -/Prev 243 0 R -/Next 551 0 R -/First 531 0 R -/Last 547 0 R -/Count -3 +/Parent 479 0 R +/Prev 523 0 R >> endobj 523 0 obj << /Title 524 0 R /A 521 0 R -/Parent 475 0 R -/Prev 519 0 R +/Parent 479 0 R +/Prev 507 0 R +/Next 527 0 R >> endobj 519 0 obj << /Title 520 0 R /A 517 0 R -/Parent 475 0 R -/Prev 503 0 R -/Next 523 0 R +/Parent 507 0 R +/Prev 515 0 R >> endobj 515 0 obj << /Title 516 0 R /A 513 0 R -/Parent 503 0 R +/Parent 507 0 R /Prev 511 0 R +/Next 519 0 R >> endobj 511 0 obj << /Title 512 0 R /A 509 0 R -/Parent 503 0 R -/Prev 507 0 R +/Parent 507 0 R /Next 515 0 R >> endobj 507 0 obj << /Title 508 0 R /A 505 0 R -/Parent 503 0 R -/Next 511 0 R +/Parent 479 0 R +/Prev 503 0 R +/Next 523 0 R +/First 511 0 R +/Last 519 0 R +/Count -3 >> endobj 503 0 obj << /Title 504 0 R /A 501 0 R -/Parent 475 0 R +/Parent 479 0 R /Prev 499 0 R -/Next 519 0 R -/First 507 0 R -/Last 515 0 R -/Count -3 +/Next 507 0 R >> endobj 499 0 obj << /Title 500 0 R /A 497 0 R -/Parent 475 0 R +/Parent 479 0 R /Prev 495 0 R /Next 503 0 R >> endobj 495 0 obj << /Title 496 0 R /A 493 0 R -/Parent 475 0 R -/Prev 491 0 R +/Parent 479 0 R +/Prev 483 0 R /Next 499 0 R >> endobj 491 0 obj << /Title 492 0 R /A 489 0 R -/Parent 475 0 R -/Prev 479 0 R -/Next 495 0 R +/Parent 483 0 R +/Prev 487 0 R >> endobj 487 0 obj << /Title 488 0 R /A 485 0 R -/Parent 479 0 R -/Prev 483 0 R +/Parent 483 0 R +/Next 491 0 R >> endobj 483 0 obj << /Title 484 0 R /A 481 0 R /Parent 479 0 R -/Next 487 0 R +/Next 495 0 R +/First 487 0 R +/Last 491 0 R +/Count -2 >> endobj 479 0 obj << /Title 480 0 R /A 477 0 R -/Parent 475 0 R -/Next 491 0 R +/Parent 243 0 R +/Prev 275 0 R +/Next 531 0 R /First 483 0 R -/Last 487 0 R -/Count -2 +/Last 527 0 R +/Count -7 >> endobj 475 0 obj << /Title 476 0 R /A 473 0 R -/Parent 243 0 R -/Prev 275 0 R -/First 479 0 R -/Last 523 0 R -/Count -7 +/Parent 459 0 R +/Prev 471 0 R >> endobj 471 0 obj << /Title 472 0 R /A 469 0 R -/Parent 455 0 R +/Parent 459 0 R /Prev 467 0 R +/Next 475 0 R >> endobj 467 0 obj << /Title 468 0 R /A 465 0 R -/Parent 455 0 R +/Parent 459 0 R /Prev 463 0 R /Next 471 0 R >> endobj 463 0 obj << /Title 464 0 R /A 461 0 R -/Parent 455 0 R -/Prev 459 0 R +/Parent 459 0 R /Next 467 0 R >> endobj 459 0 obj << /Title 460 0 R /A 457 0 R -/Parent 455 0 R -/Next 463 0 R +/Parent 275 0 R +/Prev 455 0 R +/First 463 0 R +/Last 475 0 R +/Count -4 >> endobj 455 0 obj << /Title 456 0 R /A 453 0 R /Parent 275 0 R /Prev 451 0 R -/First 459 0 R -/Last 471 0 R -/Count -4 +/Next 459 0 R >> endobj 451 0 obj << /Title 452 0 R @@ -10259,21 +10767,21 @@ endobj /Title 428 0 R /A 425 0 R /Parent 275 0 R -/Prev 347 0 R +/Prev 423 0 R /Next 431 0 R >> endobj 423 0 obj << /Title 424 0 R /A 421 0 R -/Parent 347 0 R -/Prev 419 0 R +/Parent 275 0 R +/Prev 347 0 R +/Next 427 0 R >> endobj 419 0 obj << /Title 420 0 R /A 417 0 R /Parent 347 0 R /Prev 415 0 R -/Next 423 0 R >> endobj 415 0 obj << /Title 416 0 R @@ -10398,10 +10906,10 @@ endobj /A 345 0 R /Parent 275 0 R /Prev 343 0 R -/Next 427 0 R +/Next 423 0 R /First 351 0 R -/Last 423 0 R -/Count -19 +/Last 419 0 R +/Count -18 >> endobj 343 0 obj << /Title 344 0 R @@ -10527,10 +11035,10 @@ endobj /A 273 0 R /Parent 243 0 R /Prev 247 0 R -/Next 475 0 R +/Next 479 0 R /First 279 0 R -/Last 455 0 R -/Count -24 +/Last 459 0 R +/Count -26 >> endobj 271 0 obj << /Title 272 0 R @@ -10586,12 +11094,12 @@ endobj 243 0 obj << /Title 244 0 R /A 241 0 R -/Parent 1953 0 R +/Parent 2029 0 R /Prev 231 0 R -/Next 527 0 R +/Next 559 0 R /First 247 0 R -/Last 475 0 R -/Count -3 +/Last 531 0 R +/Count -4 >> endobj 239 0 obj << /Title 240 0 R @@ -10608,7 +11116,7 @@ endobj 231 0 obj << /Title 232 0 R /A 229 0 R -/Parent 1953 0 R +/Parent 2029 0 R /Prev 131 0 R /Next 243 0 R /First 235 0 R @@ -10790,7 +11298,7 @@ endobj 131 0 obj << /Title 132 0 R /A 129 0 R -/Parent 1953 0 R +/Parent 2029 0 R /Prev 91 0 R /Next 231 0 R /First 135 0 R @@ -10864,7 +11372,7 @@ endobj 91 0 obj << /Title 92 0 R /A 89 0 R -/Parent 1953 0 R +/Parent 2029 0 R /Prev 67 0 R /Next 131 0 R /First 95 0 R @@ -10907,7 +11415,7 @@ endobj 67 0 obj << /Title 68 0 R /A 65 0 R -/Parent 1953 0 R +/Parent 2029 0 R /Prev 7 0 R /Next 91 0 R /First 71 0 R @@ -11016,2003 +11524,2079 @@ endobj 7 0 obj << /Title 8 0 R /A 5 0 R -/Parent 1953 0 R +/Parent 2029 0 R /Next 67 0 R /First 11 0 R /Last 23 0 R /Count -4 >> endobj -1954 0 obj << -/Names [(Access_Control_Lists) 1488 0 R (Bv9ARM.ch01) 874 0 R (Bv9ARM.ch02) 923 0 R (Bv9ARM.ch03) 940 0 R (Bv9ARM.ch04) 989 0 R (Bv9ARM.ch05) 1077 0 R (Bv9ARM.ch06) 1088 0 R (Bv9ARM.ch07) 1487 0 R (Bv9ARM.ch08) 1513 0 R (Bv9ARM.ch09) 1528 0 R (Bv9ARM.ch10) 1749 0 R (Configuration_File_Grammar) 1113 0 R (DNSSEC) 1056 0 R (Doc-Start) 655 0 R (Setting_TTLs) 1458 0 R (acache) 930 0 R (access_control) 1235 0 R (acl) 1121 0 R (address_match_lists) 1094 0 R (admin_tools) 963 0 R (appendix.A) 570 0 R (appendix.B) 606 0 R (bibliography) 1537 0 R (boolean_options) 1005 0 R (builtin) 1309 0 R (chapter*.1) 690 0 R (chapter.1) 6 0 R (chapter.2) 66 0 R (chapter.3) 90 0 R (chapter.4) 130 0 R (chapter.5) 230 0 R (chapter.6) 242 0 R (chapter.7) 526 0 R (chapter.8) 550 0 R (cite.RFC1033) 1664 0 R (cite.RFC1034) 1549 0 R (cite.RFC1035) 1551 0 R (cite.RFC1101) 1646 0 R (cite.RFC1123) 1648 0 R (cite.RFC1183) 1608 0 R (cite.RFC1464) 1686 0 R (cite.RFC1535) 1594 0 R (cite.RFC1536) 1596 0 R (cite.RFC1537) 1666 0 R (cite.RFC1591) 1650 0 R (cite.RFC1706) 1610 0 R (cite.RFC1712) 1706 0 R (cite.RFC1713) 1688 0 R (cite.RFC1794) 1690 0 R (cite.RFC1876) 1612 0 R (cite.RFC1912) 1668 0 R (cite.RFC1982) 1598 0 R (cite.RFC1995) 1556 0 R (cite.RFC1996) 1558 0 R (cite.RFC2010) 1670 0 R (cite.RFC2052) 1614 0 R (cite.RFC2065) 1718 0 R (cite.RFC2136) 1560 0 R (cite.RFC2137) 1720 0 R (cite.RFC2163) 1616 0 R (cite.RFC2168) 1618 0 R (cite.RFC2181) 1562 0 R (cite.RFC2219) 1672 0 R (cite.RFC2230) 1620 0 R (cite.RFC2240) 1692 0 R (cite.RFC2308) 1564 0 R (cite.RFC2317) 1652 0 R (cite.RFC2345) 1694 0 R (cite.RFC2352) 1696 0 R (cite.RFC2535) 1722 0 R (cite.RFC2536) 1622 0 R (cite.RFC2537) 1624 0 R (cite.RFC2538) 1626 0 R (cite.RFC2539) 1628 0 R (cite.RFC2540) 1630 0 R (cite.RFC2671) 1566 0 R (cite.RFC2672) 1568 0 R (cite.RFC2673) 1708 0 R (cite.RFC2782) 1632 0 R (cite.RFC2825) 1676 0 R (cite.RFC2826) 1654 0 R (cite.RFC2845) 1570 0 R (cite.RFC2874) 1710 0 R (cite.RFC2915) 1634 0 R (cite.RFC2929) 1656 0 R (cite.RFC2930) 1572 0 R (cite.RFC2931) 1574 0 R (cite.RFC3007) 1576 0 R (cite.RFC3008) 1724 0 R (cite.RFC3071) 1698 0 R (cite.RFC3090) 1726 0 R (cite.RFC3110) 1636 0 R (cite.RFC3123) 1638 0 R (cite.RFC3225) 1582 0 R (cite.RFC3258) 1700 0 R (cite.RFC3445) 1728 0 R (cite.RFC3490) 1678 0 R (cite.RFC3491) 1680 0 R (cite.RFC3492) 1682 0 R (cite.RFC3596) 1640 0 R (cite.RFC3597) 1642 0 R (cite.RFC3645) 1578 0 R (cite.RFC3655) 1730 0 R (cite.RFC3658) 1732 0 R (cite.RFC3755) 1734 0 R (cite.RFC3757) 1736 0 R (cite.RFC3833) 1584 0 R (cite.RFC3845) 1738 0 R (cite.RFC3901) 1702 0 R (cite.RFC4033) 1586 0 R (cite.RFC4035) 1588 0 R (cite.RFC4044) 1590 0 R (cite.RFC4074) 1600 0 R (cite.RFC974) 1553 0 R (cite.id2500250) 1743 0 R (configuration_file_elements) 1089 0 R (controls_statement_definition_and_usage) 976 0 R (diagnostic_tools) 911 0 R (dynamic_update) 999 0 R (dynamic_update_policies) 1051 0 R (dynamic_update_security) 1245 0 R (empty) 1311 0 R (historical_dns_information) 1530 0 R (id2465026) 875 0 R (id2466484) 876 0 R (id2467305) 880 0 R (id2467506) 881 0 R (id2467714) 891 0 R (id2467891) 893 0 R (id2467912) 894 0 R (id2467946) 895 0 R (id2468030) 898 0 R (id2470292) 905 0 R (id2470315) 908 0 R (id2470345) 909 0 R (id2470435) 910 0 R (id2470465) 916 0 R (id2470500) 917 0 R (id2470595) 918 0 R (id2470629) 924 0 R (id2470656) 925 0 R (id2470668) 926 0 R (id2470694) 929 0 R (id2470705) 935 0 R (id2470805) 942 0 R (id2470821) 943 0 R (id2470843) 949 0 R (id2470860) 950 0 R (id2471334) 953 0 R (id2471339) 954 0 R (id2473122) 981 0 R (id2473133) 982 0 R (id2473527) 1014 0 R (id2473545) 1015 0 R (id2473980) 1031 0 R (id2473997) 1032 0 R (id2474036) 1037 0 R (id2474122) 1038 0 R (id2474133) 1039 0 R (id2474172) 1040 0 R (id2474230) 1045 0 R (id2474343) 1047 0 R (id2474357) 1048 0 R (id2474542) 1049 0 R (id2474679) 1057 0 R (id2474748) 1058 0 R (id2474827) 1063 0 R (id2474970) 1068 0 R (id2475169) 1070 0 R (id2475190) 1071 0 R (id2475223) 1078 0 R (id2475370) 1090 0 R (id2476166) 1099 0 R (id2476194) 1100 0 R (id2476388) 1105 0 R (id2476403) 1106 0 R (id2476433) 1107 0 R (id2476584) 1114 0 R (id2476932) 1120 0 R (id2476974) 1122 0 R (id2477190) 1124 0 R (id2477550) 1131 0 R (id2477565) 1132 0 R (id2477589) 1133 0 R (id2477678) 1139 0 R (id2477837) 1143 0 R (id2477963) 1144 0 R (id2478084) 1150 0 R (id2478777) 1161 0 R (id2479480) 1167 0 R (id2479554) 1172 0 R (id2479618) 1175 0 R (id2479661) 1176 0 R (id2479676) 1177 0 R (id2481882) 1202 0 R (id2483682) 1228 0 R (id2483740) 1234 0 R (id2484373) 1244 0 R (id2485408) 1264 0 R (id2485422) 1265 0 R (id2485538) 1271 0 R (id2485739) 1273 0 R (id2486307) 1291 0 R (id2487541) 1321 0 R (id2488731) 1339 0 R (id2488780) 1340 0 R (id2488860) 1342 0 R (id2490419) 1359 0 R (id2490426) 1360 0 R (id2490432) 1361 0 R (id2490777) 1367 0 R (id2490810) 1373 0 R (id2492304) 1421 0 R (id2492629) 1423 0 R (id2492647) 1424 0 R (id2492667) 1427 0 R (id2492972) 1433 0 R (id2493933) 1439 0 R (id2494061) 1446 0 R (id2494083) 1447 0 R (id2494445) 1449 0 R (id2494582) 1451 0 R (id2494673) 1456 0 R (id2495077) 1459 0 R (id2495270) 1461 0 R (id2495285) 1462 0 R (id2495397) 1468 0 R (id2495419) 1469 0 R (id2495480) 1470 0 R (id2495618) 1471 0 R (id2495654) 1472 0 R (id2495716) 1477 0 R (id2496338) 1498 0 R (id2496414) 1499 0 R (id2496474) 1500 0 R (id2496554) 1514 0 R (id2496560) 1515 0 R (id2496571) 1516 0 R (id2496725) 1517 0 R (id2496787) 1529 0 R (id2496958) 1536 0 R (id2497214) 1541 0 R (id2497217) 1547 0 R (id2497225) 1552 0 R (id2497249) 1548 0 R (id2497272) 1550 0 R (id2497308) 1561 0 R (id2497335) 1563 0 R (id2497361) 1555 0 R (id2497385) 1557 0 R (id2497477) 1559 0 R (id2497532) 1565 0 R (id2497559) 1567 0 R (id2497586) 1569 0 R (id2497648) 1571 0 R (id2497677) 1573 0 R (id2497707) 1575 0 R (id2497734) 1577 0 R (id2497809) 1580 0 R (id2497816) 1581 0 R (id2497843) 1583 0 R (id2497879) 1585 0 R (id2497944) 1589 0 R (id2498009) 1587 0 R (id2498074) 1592 0 R (id2498083) 1593 0 R (id2498108) 1595 0 R (id2498177) 1597 0 R (id2498212) 1599 0 R (id2498252) 1606 0 R (id2498258) 1607 0 R (id2498315) 1609 0 R (id2498353) 1617 0 R (id2498388) 1611 0 R (id2498442) 1613 0 R (id2498481) 1615 0 R (id2498506) 1619 0 R (id2498532) 1621 0 R (id2498558) 1623 0 R (id2498585) 1625 0 R (id2498625) 1627 0 R (id2498654) 1629 0 R (id2498684) 1631 0 R (id2498727) 1633 0 R (id2498760) 1635 0 R (id2498787) 1637 0 R (id2498810) 1639 0 R (id2498868) 1641 0 R (id2498892) 1644 0 R (id2498900) 1645 0 R (id2498925) 1647 0 R (id2498948) 1649 0 R (id2498971) 1651 0 R (id2499017) 1653 0 R (id2499041) 1655 0 R (id2499091) 1662 0 R (id2499098) 1663 0 R (id2499122) 1665 0 R (id2499148) 1667 0 R (id2499175) 1669 0 R (id2499211) 1671 0 R (id2499252) 1674 0 R (id2499257) 1675 0 R (id2499289) 1677 0 R (id2499335) 1679 0 R (id2499370) 1681 0 R (id2499397) 1684 0 R (id2499415) 1685 0 R (id2499437) 1687 0 R (id2499463) 1689 0 R (id2499489) 1691 0 R (id2499512) 1693 0 R (id2499558) 1695 0 R (id2499581) 1697 0 R (id2499608) 1699 0 R (id2499634) 1701 0 R (id2499671) 1704 0 R (id2499677) 1705 0 R (id2499803) 1707 0 R (id2499830) 1709 0 R (id2499866) 1716 0 R (id2499878) 1717 0 R (id2499917) 1719 0 R (id2499944) 1721 0 R (id2499974) 1723 0 R (id2500000) 1725 0 R (id2500026) 1727 0 R (id2500062) 1729 0 R (id2500099) 1731 0 R (id2500125) 1733 0 R (id2500152) 1735 0 R (id2500197) 1737 0 R (id2500238) 1740 0 R (id2500248) 1742 0 R (id2500250) 1744 0 R (incremental_zone_transfers) 1011 0 R (internet_drafts) 1739 0 R (ipv6addresses) 1072 0 R (journal) 1000 0 R (lwresd) 1079 0 R (man.dig) 1750 0 R (man.dnssec-keygen) 1799 0 R (man.dnssec-signzone) 1816 0 R (man.host) 1783 0 R (man.named) 1865 0 R (man.named-checkconf) 1836 0 R (man.named-checkzone) 1849 0 R (man.rndc) 1887 0 R (man.rndc-confgen) 1916 0 R (man.rndc.conf) 1900 0 R (notify) 990 0 R (options) 1191 0 R (page.1) 654 0 R (page.10) 915 0 R (page.100) 1769 0 R (page.101) 1773 0 R (page.102) 1778 0 R (page.103) 1790 0 R (page.104) 1795 0 R (page.105) 1807 0 R (page.106) 1812 0 R (page.107) 1823 0 R (page.108) 1828 0 R (page.109) 1833 0 R (page.11) 922 0 R (page.110) 1845 0 R (page.111) 1856 0 R (page.112) 1861 0 R (page.113) 1871 0 R (page.114) 1877 0 R (page.115) 1884 0 R (page.116) 1896 0 R (page.117) 1906 0 R (page.118) 1912 0 R (page.119) 1921 0 R (page.12) 934 0 R (page.120) 1928 0 R (page.13) 939 0 R (page.14) 948 0 R (page.15) 959 0 R (page.16) 967 0 R (page.17) 974 0 R (page.18) 980 0 R (page.19) 988 0 R (page.2) 679 0 R (page.20) 1010 0 R (page.21) 1020 0 R (page.22) 1025 0 R (page.23) 1029 0 R (page.24) 1036 0 R (page.25) 1044 0 R (page.26) 1055 0 R (page.27) 1062 0 R (page.28) 1067 0 R (page.29) 1076 0 R (page.3) 689 0 R (page.30) 1083 0 R (page.31) 1087 0 R (page.32) 1098 0 R (page.33) 1104 0 R (page.34) 1112 0 R (page.35) 1119 0 R (page.36) 1128 0 R (page.37) 1138 0 R (page.38) 1149 0 R (page.39) 1154 0 R (page.4) 744 0 R (page.40) 1160 0 R (page.41) 1166 0 R (page.42) 1171 0 R (page.43) 1181 0 R (page.44) 1186 0 R (page.45) 1190 0 R (page.46) 1195 0 R (page.47) 1201 0 R (page.48) 1207 0 R (page.49) 1212 0 R (page.5) 808 0 R (page.50) 1223 0 R (page.51) 1227 0 R (page.52) 1232 0 R (page.53) 1241 0 R (page.54) 1249 0 R (page.55) 1254 0 R (page.56) 1259 0 R (page.57) 1263 0 R (page.58) 1270 0 R (page.59) 1277 0 R (page.6) 869 0 R (page.60) 1284 0 R (page.61) 1290 0 R (page.62) 1298 0 R (page.63) 1308 0 R (page.64) 1316 0 R (page.65) 1320 0 R (page.66) 1326 0 R (page.67) 1331 0 R (page.68) 1338 0 R (page.69) 1346 0 R (page.7) 873 0 R (page.70) 1350 0 R (page.71) 1354 0 R (page.72) 1358 0 R (page.73) 1366 0 R (page.74) 1372 0 R (page.75) 1391 0 R (page.76) 1404 0 R (page.77) 1420 0 R (page.78) 1432 0 R (page.79) 1438 0 R (page.8) 890 0 R (page.80) 1445 0 R (page.81) 1455 0 R (page.82) 1467 0 R (page.83) 1476 0 R (page.84) 1482 0 R (page.85) 1486 0 R (page.86) 1493 0 R (page.87) 1504 0 R (page.88) 1508 0 R (page.89) 1512 0 R (page.9) 904 0 R (page.90) 1523 0 R (page.91) 1527 0 R (page.92) 1535 0 R (page.93) 1545 0 R (page.94) 1604 0 R (page.95) 1660 0 R (page.96) 1714 0 R (page.97) 1748 0 R (page.98) 1758 0 R (page.99) 1764 0 R (proposed_standards) 1016 0 R (query_address) 1250 0 R (rfcs) 900 0 R (rndc) 1134 0 R (rrset_ordering) 955 0 R (sample_configuration) 941 0 R (section*.10) 1673 0 R (section*.11) 1683 0 R (section*.12) 1703 0 R (section*.13) 1715 0 R (section*.14) 1741 0 R (section*.15) 1751 0 R (section*.16) 1752 0 R (section*.17) 1753 0 R (section*.18) 1759 0 R (section*.19) 1760 0 R (section*.2) 1540 0 R (section*.20) 1765 0 R (section*.21) 1774 0 R (section*.22) 1779 0 R (section*.23) 1780 0 R (section*.24) 1781 0 R (section*.25) 1782 0 R (section*.26) 1784 0 R (section*.27) 1785 0 R (section*.28) 1786 0 R (section*.29) 1796 0 R (section*.3) 1546 0 R (section*.30) 1797 0 R (section*.31) 1798 0 R (section*.32) 1800 0 R (section*.33) 1801 0 R (section*.34) 1802 0 R (section*.35) 1803 0 R (section*.36) 1808 0 R (section*.37) 1813 0 R (section*.38) 1814 0 R (section*.39) 1815 0 R (section*.4) 1554 0 R (section*.40) 1817 0 R (section*.41) 1818 0 R (section*.42) 1819 0 R (section*.43) 1824 0 R (section*.44) 1829 0 R (section*.45) 1834 0 R (section*.46) 1835 0 R (section*.47) 1837 0 R (section*.48) 1838 0 R (section*.49) 1839 0 R (section*.5) 1579 0 R (section*.50) 1840 0 R (section*.51) 1846 0 R (section*.52) 1847 0 R (section*.53) 1848 0 R (section*.54) 1850 0 R (section*.55) 1851 0 R (section*.56) 1852 0 R (section*.57) 1857 0 R (section*.58) 1862 0 R (section*.59) 1863 0 R (section*.6) 1591 0 R (section*.60) 1864 0 R (section*.61) 1866 0 R (section*.62) 1867 0 R (section*.63) 1872 0 R (section*.64) 1873 0 R (section*.65) 1878 0 R (section*.66) 1879 0 R (section*.67) 1880 0 R (section*.68) 1885 0 R (section*.69) 1886 0 R (section*.7) 1605 0 R (section*.70) 1888 0 R (section*.71) 1889 0 R (section*.72) 1890 0 R (section*.73) 1891 0 R (section*.74) 1897 0 R (section*.75) 1898 0 R (section*.76) 1899 0 R (section*.77) 1901 0 R (section*.78) 1902 0 R (section*.79) 1907 0 R (section*.8) 1643 0 R (section*.80) 1908 0 R (section*.81) 1913 0 R (section*.82) 1914 0 R (section*.83) 1915 0 R (section*.84) 1917 0 R (section*.85) 1922 0 R (section*.86) 1923 0 R (section*.87) 1924 0 R (section*.88) 1929 0 R (section*.89) 1930 0 R (section*.9) 1661 0 R (section*.90) 1931 0 R (section.1.1) 10 0 R (section.1.2) 14 0 R (section.1.3) 18 0 R (section.1.4) 22 0 R (section.2.1) 70 0 R (section.2.2) 74 0 R (section.2.3) 78 0 R (section.2.4) 82 0 R (section.2.5) 86 0 R (section.3.1) 94 0 R (section.3.2) 106 0 R (section.3.3) 110 0 R (section.4.1) 134 0 R (section.4.2) 138 0 R (section.4.3) 146 0 R (section.4.4) 150 0 R (section.4.5) 158 0 R (section.4.6) 194 0 R (section.4.7) 198 0 R (section.4.8) 202 0 R (section.4.9) 218 0 R (section.5.1) 234 0 R (section.5.2) 238 0 R (section.6.1) 246 0 R (section.6.2) 274 0 R (section.6.3) 474 0 R (section.7.1) 530 0 R (section.7.2) 534 0 R (section.7.3) 546 0 R (section.8.1) 554 0 R (section.8.2) 562 0 R (section.8.3) 566 0 R (section.A.1) 574 0 R (section.A.2) 582 0 R (section.A.3) 590 0 R (section.B.1) 610 0 R (section.B.10) 646 0 R (section.B.2) 614 0 R (section.B.3) 618 0 R (section.B.4) 622 0 R (section.B.5) 626 0 R (section.B.6) 630 0 R (section.B.7) 634 0 R (section.B.8) 638 0 R (section.B.9) 642 0 R (server_statement_definition_and_usage) 1219 0 R (server_statement_grammar) 1327 0 R (statsfile) 1197 0 R (subsection.1.4.1) 26 0 R (subsection.1.4.2) 30 0 R (subsection.1.4.3) 34 0 R (subsection.1.4.4) 38 0 R (subsection.1.4.5) 54 0 R (subsection.1.4.6) 62 0 R (subsection.3.1.1) 98 0 R (subsection.3.1.2) 102 0 R (subsection.3.3.1) 114 0 R (subsection.3.3.2) 126 0 R (subsection.4.2.1) 142 0 R (subsection.4.4.1) 154 0 R (subsection.4.5.1) 162 0 R (subsection.4.5.2) 174 0 R (subsection.4.5.3) 178 0 R (subsection.4.5.4) 182 0 R (subsection.4.5.5) 186 0 R (subsection.4.5.6) 190 0 R (subsection.4.8.1) 206 0 R (subsection.4.8.2) 210 0 R (subsection.4.8.3) 214 0 R (subsection.4.9.1) 222 0 R (subsection.4.9.2) 226 0 R (subsection.6.1.1) 250 0 R (subsection.6.1.2) 262 0 R (subsection.6.2.1) 278 0 R (subsection.6.2.10) 314 0 R (subsection.6.2.11) 326 0 R (subsection.6.2.12) 330 0 R (subsection.6.2.13) 334 0 R (subsection.6.2.14) 338 0 R (subsection.6.2.15) 342 0 R (subsection.6.2.16) 346 0 R (subsection.6.2.17) 426 0 R (subsection.6.2.18) 430 0 R (subsection.6.2.19) 434 0 R (subsection.6.2.2) 282 0 R (subsection.6.2.20) 438 0 R (subsection.6.2.21) 442 0 R (subsection.6.2.22) 446 0 R (subsection.6.2.23) 450 0 R (subsection.6.2.24) 454 0 R (subsection.6.2.3) 286 0 R (subsection.6.2.4) 290 0 R (subsection.6.2.5) 294 0 R (subsection.6.2.6) 298 0 R (subsection.6.2.7) 302 0 R (subsection.6.2.8) 306 0 R (subsection.6.2.9) 310 0 R (subsection.6.3.1) 478 0 R (subsection.6.3.2) 490 0 R (subsection.6.3.3) 494 0 R (subsection.6.3.4) 498 0 R (subsection.6.3.5) 502 0 R (subsection.6.3.6) 518 0 R (subsection.6.3.7) 522 0 R (subsection.7.2.1) 538 0 R (subsection.7.2.2) 542 0 R (subsection.8.1.1) 558 0 R (subsection.A.1.1) 578 0 R (subsection.A.2.1) 586 0 R (subsection.A.3.1) 594 0 R (subsection.A.3.2) 598 0 R (subsection.A.3.3) 602 0 R (subsubsection.1.4.4.1) 42 0 R (subsubsection.1.4.4.2) 46 0 R (subsubsection.1.4.4.3) 50 0 R (subsubsection.1.4.5.1) 58 0 R (subsubsection.3.3.1.1) 118 0 R (subsubsection.3.3.1.2) 122 0 R (subsubsection.4.5.1.1) 166 0 R (subsubsection.4.5.1.2) 170 0 R (subsubsection.6.1.1.1) 254 0 R (subsubsection.6.1.1.2) 258 0 R (subsubsection.6.1.2.1) 266 0 R (subsubsection.6.1.2.2) 270 0 R (subsubsection.6.2.10.1) 318 0 R (subsubsection.6.2.10.2) 322 0 R (subsubsection.6.2.16.1) 350 0 R (subsubsection.6.2.16.10) 386 0 R (subsubsection.6.2.16.11) 390 0 R (subsubsection.6.2.16.12) 394 0 R (subsubsection.6.2.16.13) 398 0 R (subsubsection.6.2.16.14) 402 0 R (subsubsection.6.2.16.15) 406 0 R (subsubsection.6.2.16.16) 410 0 R (subsubsection.6.2.16.17) 414 0 R (subsubsection.6.2.16.18) 418 0 R (subsubsection.6.2.16.19) 422 0 R (subsubsection.6.2.16.2) 354 0 R (subsubsection.6.2.16.3) 358 0 R (subsubsection.6.2.16.4) 362 0 R (subsubsection.6.2.16.5) 366 0 R (subsubsection.6.2.16.6) 370 0 R (subsubsection.6.2.16.7) 374 0 R (subsubsection.6.2.16.8) 378 0 R (subsubsection.6.2.16.9) 382 0 R (subsubsection.6.2.24.1) 458 0 R (subsubsection.6.2.24.2) 462 0 R (subsubsection.6.2.24.3) 466 0 R (subsubsection.6.2.24.4) 470 0 R (subsubsection.6.3.1.1) 482 0 R (subsubsection.6.3.1.2) 486 0 R (subsubsection.6.3.5.1) 506 0 R (subsubsection.6.3.5.2) 510 0 R (subsubsection.6.3.5.3) 514 0 R (table.1.1) 882 0 R (table.1.2) 892 0 R (table.3.1) 951 0 R (table.3.2) 983 0 R (table.6.1) 1091 0 R (table.6.10) 1428 0 R (table.6.11) 1434 0 R (table.6.12) 1440 0 R (table.6.13) 1448 0 R (table.6.14) 1450 0 R (table.6.15) 1457 0 R (table.6.16) 1460 0 R (table.6.17) 1463 0 R (table.6.18) 1478 0 R (table.6.2) 1115 0 R (table.6.3) 1123 0 R (table.6.4) 1162 0 R (table.6.5) 1203 0 R (table.6.6) 1292 0 R (table.6.7) 1322 0 R (table.6.8) 1362 0 R (table.6.9) 1422 0 R (the_category_phrase) 1156 0 R (the_sortlist_statement) 1279 0 R (topology) 1278 0 R (tsig) 1030 0 R (tuning) 1293 0 R (types_of_resource_records_and_when_to_use_them) 899 0 R (view_statement_grammar) 1312 0 R (zone_statement_grammar) 1237 0 R (zone_transfers) 1006 0 R (zonefile_format) 1304 0 R] +2030 0 obj << +/Names [(Access_Control_Lists) 1563 0 R (Bv9ARM.ch01) 917 0 R (Bv9ARM.ch02) 963 0 R (Bv9ARM.ch03) 980 0 R (Bv9ARM.ch04) 1029 0 R (Bv9ARM.ch05) 1117 0 R (Bv9ARM.ch06) 1128 0 R (Bv9ARM.ch07) 1562 0 R (Bv9ARM.ch08) 1588 0 R (Bv9ARM.ch09) 1603 0 R (Bv9ARM.ch10) 1824 0 R (Configuration_File_Grammar) 1153 0 R (DNSSEC) 1096 0 R (Doc-Start) 687 0 R (Setting_TTLs) 1494 0 R (acache) 970 0 R (access_control) 1275 0 R (acl) 1161 0 R (address_match_lists) 1134 0 R (admin_tools) 1003 0 R (appendix.A) 602 0 R (appendix.B) 638 0 R (bibliography) 1611 0 R (boolean_options) 1045 0 R (builtin) 1349 0 R (chapter*.1) 722 0 R (chapter.1) 6 0 R (chapter.2) 66 0 R (chapter.3) 90 0 R (chapter.4) 130 0 R (chapter.5) 230 0 R (chapter.6) 242 0 R (chapter.7) 558 0 R (chapter.8) 582 0 R (cite.RFC1033) 1739 0 R (cite.RFC1034) 1623 0 R (cite.RFC1035) 1625 0 R (cite.RFC1101) 1721 0 R (cite.RFC1123) 1723 0 R (cite.RFC1183) 1683 0 R (cite.RFC1464) 1761 0 R (cite.RFC1535) 1668 0 R (cite.RFC1536) 1670 0 R (cite.RFC1537) 1741 0 R (cite.RFC1591) 1725 0 R (cite.RFC1706) 1685 0 R (cite.RFC1712) 1781 0 R (cite.RFC1713) 1763 0 R (cite.RFC1794) 1765 0 R (cite.RFC1876) 1687 0 R (cite.RFC1912) 1743 0 R (cite.RFC1982) 1672 0 R (cite.RFC1995) 1630 0 R (cite.RFC1996) 1632 0 R (cite.RFC2010) 1745 0 R (cite.RFC2052) 1689 0 R (cite.RFC2065) 1793 0 R (cite.RFC2136) 1634 0 R (cite.RFC2137) 1795 0 R (cite.RFC2163) 1691 0 R (cite.RFC2168) 1693 0 R (cite.RFC2181) 1636 0 R (cite.RFC2219) 1747 0 R (cite.RFC2230) 1695 0 R (cite.RFC2240) 1767 0 R (cite.RFC2308) 1638 0 R (cite.RFC2317) 1727 0 R (cite.RFC2345) 1769 0 R (cite.RFC2352) 1771 0 R (cite.RFC2535) 1797 0 R (cite.RFC2536) 1697 0 R (cite.RFC2537) 1699 0 R (cite.RFC2538) 1701 0 R (cite.RFC2539) 1703 0 R (cite.RFC2540) 1705 0 R (cite.RFC2671) 1640 0 R (cite.RFC2672) 1642 0 R (cite.RFC2673) 1783 0 R (cite.RFC2782) 1707 0 R (cite.RFC2825) 1751 0 R (cite.RFC2826) 1729 0 R (cite.RFC2845) 1644 0 R (cite.RFC2874) 1785 0 R (cite.RFC2915) 1709 0 R (cite.RFC2929) 1731 0 R (cite.RFC2930) 1646 0 R (cite.RFC2931) 1648 0 R (cite.RFC3007) 1650 0 R (cite.RFC3008) 1799 0 R (cite.RFC3071) 1773 0 R (cite.RFC3090) 1801 0 R (cite.RFC3110) 1711 0 R (cite.RFC3123) 1713 0 R (cite.RFC3225) 1656 0 R (cite.RFC3258) 1775 0 R (cite.RFC3445) 1803 0 R (cite.RFC3490) 1753 0 R (cite.RFC3491) 1755 0 R (cite.RFC3492) 1757 0 R (cite.RFC3596) 1715 0 R (cite.RFC3597) 1717 0 R (cite.RFC3645) 1652 0 R (cite.RFC3655) 1805 0 R (cite.RFC3658) 1807 0 R (cite.RFC3755) 1809 0 R (cite.RFC3757) 1811 0 R (cite.RFC3833) 1658 0 R (cite.RFC3845) 1813 0 R (cite.RFC3901) 1777 0 R (cite.RFC4033) 1660 0 R (cite.RFC4035) 1662 0 R (cite.RFC4044) 1664 0 R (cite.RFC4074) 1674 0 R (cite.RFC974) 1627 0 R (cite.id2503298) 1818 0 R (configuration_file_elements) 1129 0 R (controls_statement_definition_and_usage) 1016 0 R (diagnostic_tools) 951 0 R (dynamic_update) 1039 0 R (dynamic_update_policies) 1091 0 R (dynamic_update_security) 1285 0 R (empty) 1351 0 R (historical_dns_information) 1605 0 R (id2464966) 918 0 R (id2466572) 919 0 R (id2467531) 920 0 R (id2467541) 921 0 R (id2467713) 933 0 R (id2467734) 934 0 R (id2467768) 935 0 R (id2467852) 938 0 R (id2467945) 931 0 R (id2470250) 945 0 R (id2470274) 948 0 R (id2470372) 949 0 R (id2470393) 950 0 R (id2470423) 956 0 R (id2470526) 957 0 R (id2470553) 958 0 R (id2470587) 964 0 R (id2470614) 965 0 R (id2470627) 966 0 R (id2470721) 969 0 R (id2470731) 975 0 R (id2470763) 982 0 R (id2470779) 983 0 R (id2470802) 989 0 R (id2470819) 990 0 R (id2471156) 993 0 R (id2471161) 994 0 R (id2473080) 1021 0 R (id2473092) 1022 0 R (id2473485) 1054 0 R (id2473504) 1055 0 R (id2474007) 1071 0 R (id2474024) 1072 0 R (id2474062) 1077 0 R (id2474081) 1078 0 R (id2474091) 1079 0 R (id2474199) 1080 0 R (id2474325) 1085 0 R (id2474370) 1087 0 R (id2474384) 1088 0 R (id2474501) 1089 0 R (id2474569) 1097 0 R (id2474707) 1098 0 R (id2474786) 1103 0 R (id2474860) 1108 0 R (id2474990) 1110 0 R (id2475148) 1111 0 R (id2475181) 1118 0 R (id2475329) 1130 0 R (id2476124) 1139 0 R (id2476152) 1140 0 R (id2476346) 1145 0 R (id2476361) 1146 0 R (id2476391) 1147 0 R (id2476542) 1154 0 R (id2476917) 1160 0 R (id2476960) 1162 0 R (id2477175) 1164 0 R (id2477604) 1171 0 R (id2477621) 1172 0 R (id2477644) 1173 0 R (id2477668) 1179 0 R (id2477827) 1183 0 R (id2477953) 1184 0 R (id2478005) 1190 0 R (id2478766) 1201 0 R (id2479401) 1207 0 R (id2479611) 1212 0 R (id2479675) 1215 0 R (id2479719) 1216 0 R (id2479734) 1217 0 R (id2481874) 1242 0 R (id2483741) 1268 0 R (id2483800) 1274 0 R (id2484364) 1284 0 R (id2485399) 1304 0 R (id2485414) 1305 0 R (id2485529) 1311 0 R (id2485662) 1313 0 R (id2486233) 1331 0 R (id2487651) 1366 0 R (id2488403) 1379 0 R (id2488454) 1380 0 R (id2488673) 1382 0 R (id2490165) 1399 0 R (id2490172) 1400 0 R (id2490178) 1401 0 R (id2490592) 1407 0 R (id2490625) 1408 0 R (id2491981) 1457 0 R (id2492238) 1463 0 R (id2492257) 1464 0 R (id2492277) 1467 0 R (id2492718) 1469 0 R (id2493680) 1479 0 R (id2493808) 1481 0 R (id2493829) 1482 0 R (id2494260) 1489 0 R (id2494396) 1491 0 R (id2494419) 1492 0 R (id2494823) 1495 0 R (id2494948) 1501 0 R (id2494963) 1502 0 R (id2495075) 1504 0 R (id2495165) 1505 0 R (id2495226) 1510 0 R (id2495296) 1511 0 R (id2495332) 1512 0 R (id2495394) 1513 0 R (id2495800) 1519 0 R (id2495822) 1520 0 R (id2496217) 1527 0 R (id2496233) 1532 0 R (id2496307) 1533 0 R (id2497825) 1540 0 R (id2497831) 1541 0 R (id2498208) 1543 0 R (id2498213) 1544 0 R (id2499129) 1553 0 R (id2499317) 1572 0 R (id2499394) 1573 0 R (id2499522) 1574 0 R (id2499602) 1589 0 R (id2499607) 1590 0 R (id2499619) 1591 0 R (id2499636) 1592 0 R (id2499698) 1604 0 R (id2500006) 1610 0 R (id2500194) 1615 0 R (id2500196) 1621 0 R (id2500273) 1626 0 R (id2500296) 1622 0 R (id2500320) 1624 0 R (id2500356) 1635 0 R (id2500382) 1637 0 R (id2500408) 1629 0 R (id2500433) 1631 0 R (id2500456) 1633 0 R (id2500512) 1639 0 R (id2500538) 1641 0 R (id2500565) 1643 0 R (id2500627) 1645 0 R (id2500657) 1647 0 R (id2500686) 1649 0 R (id2500713) 1651 0 R (id2500788) 1654 0 R (id2500795) 1655 0 R (id2500822) 1657 0 R (id2500858) 1659 0 R (id2500923) 1663 0 R (id2500988) 1661 0 R (id2501053) 1666 0 R (id2501062) 1667 0 R (id2501088) 1669 0 R (id2501156) 1671 0 R (id2501191) 1673 0 R (id2501232) 1681 0 R (id2501237) 1682 0 R (id2501294) 1684 0 R (id2501332) 1692 0 R (id2501435) 1686 0 R (id2501490) 1688 0 R (id2501528) 1690 0 R (id2501554) 1694 0 R (id2501579) 1696 0 R (id2501606) 1698 0 R (id2501633) 1700 0 R (id2501672) 1702 0 R (id2501702) 1704 0 R (id2501732) 1706 0 R (id2501774) 1708 0 R (id2501808) 1710 0 R (id2501834) 1712 0 R (id2501858) 1714 0 R (id2501915) 1716 0 R (id2501940) 1719 0 R (id2501947) 1720 0 R (id2501973) 1722 0 R (id2501995) 1724 0 R (id2502019) 1726 0 R (id2502065) 1728 0 R (id2502088) 1730 0 R (id2502138) 1737 0 R (id2502146) 1738 0 R (id2502169) 1740 0 R (id2502196) 1742 0 R (id2502222) 1744 0 R (id2502259) 1746 0 R (id2502299) 1749 0 R (id2502305) 1750 0 R (id2502337) 1752 0 R (id2502382) 1754 0 R (id2502418) 1756 0 R (id2502444) 1759 0 R (id2502462) 1760 0 R (id2502485) 1762 0 R (id2502510) 1764 0 R (id2502536) 1766 0 R (id2502560) 1768 0 R (id2502605) 1770 0 R (id2502629) 1772 0 R (id2502656) 1774 0 R (id2502681) 1776 0 R (id2502718) 1779 0 R (id2502725) 1780 0 R (id2502782) 1782 0 R (id2502809) 1784 0 R (id2502845) 1791 0 R (id2502857) 1792 0 R (id2502897) 1794 0 R (id2502923) 1796 0 R (id2502953) 1798 0 R (id2502979) 1800 0 R (id2503074) 1802 0 R (id2503110) 1804 0 R (id2503146) 1806 0 R (id2503173) 1808 0 R (id2503200) 1810 0 R (id2503244) 1812 0 R (id2503286) 1815 0 R (id2503296) 1817 0 R (id2503298) 1819 0 R (incremental_zone_transfers) 1051 0 R (internet_drafts) 1814 0 R (ipv6addresses) 1112 0 R (journal) 1040 0 R (lwresd) 1119 0 R (man.dig) 1825 0 R (man.dnssec-keygen) 1873 0 R (man.dnssec-signzone) 1891 0 R (man.host) 1858 0 R (man.named) 1940 0 R (man.named-checkconf) 1911 0 R (man.named-checkzone) 1923 0 R (man.rndc) 1962 0 R (man.rndc-confgen) 1991 0 R (man.rndc.conf) 1974 0 R (notify) 1030 0 R (options) 1231 0 R (page.1) 686 0 R (page.10) 955 0 R (page.100) 1789 0 R (page.101) 1823 0 R (page.102) 1832 0 R (page.103) 1838 0 R (page.104) 1844 0 R (page.105) 1848 0 R (page.106) 1853 0 R (page.107) 1865 0 R (page.108) 1869 0 R (page.109) 1881 0 R (page.11) 962 0 R (page.110) 1887 0 R (page.111) 1898 0 R (page.112) 1903 0 R (page.113) 1908 0 R (page.114) 1919 0 R (page.115) 1930 0 R (page.116) 1936 0 R (page.117) 1946 0 R (page.118) 1952 0 R (page.119) 1959 0 R (page.12) 974 0 R (page.120) 1970 0 R (page.121) 1980 0 R (page.122) 1987 0 R (page.123) 1996 0 R (page.124) 2003 0 R (page.13) 979 0 R (page.14) 988 0 R (page.15) 999 0 R (page.16) 1007 0 R (page.17) 1014 0 R (page.18) 1020 0 R (page.19) 1028 0 R (page.2) 711 0 R (page.20) 1050 0 R (page.21) 1060 0 R (page.22) 1065 0 R (page.23) 1069 0 R (page.24) 1076 0 R (page.25) 1084 0 R (page.26) 1095 0 R (page.27) 1102 0 R (page.28) 1107 0 R (page.29) 1116 0 R (page.3) 721 0 R (page.30) 1123 0 R (page.31) 1127 0 R (page.32) 1138 0 R (page.33) 1144 0 R (page.34) 1152 0 R (page.35) 1159 0 R (page.36) 1168 0 R (page.37) 1178 0 R (page.38) 1189 0 R (page.39) 1194 0 R (page.4) 776 0 R (page.40) 1200 0 R (page.41) 1206 0 R (page.42) 1211 0 R (page.43) 1221 0 R (page.44) 1226 0 R (page.45) 1230 0 R (page.46) 1235 0 R (page.47) 1241 0 R (page.48) 1247 0 R (page.49) 1252 0 R (page.5) 840 0 R (page.50) 1263 0 R (page.51) 1267 0 R (page.52) 1272 0 R (page.53) 1281 0 R (page.54) 1289 0 R (page.55) 1294 0 R (page.56) 1299 0 R (page.57) 1303 0 R (page.58) 1310 0 R (page.59) 1317 0 R (page.6) 902 0 R (page.60) 1323 0 R (page.61) 1329 0 R (page.62) 1338 0 R (page.63) 1348 0 R (page.64) 1356 0 R (page.65) 1360 0 R (page.66) 1365 0 R (page.67) 1371 0 R (page.68) 1378 0 R (page.69) 1386 0 R (page.7) 916 0 R (page.70) 1390 0 R (page.71) 1394 0 R (page.72) 1398 0 R (page.73) 1406 0 R (page.74) 1420 0 R (page.75) 1432 0 R (page.76) 1454 0 R (page.77) 1462 0 R (page.78) 1474 0 R (page.79) 1478 0 R (page.8) 930 0 R (page.80) 1488 0 R (page.81) 1500 0 R (page.82) 1509 0 R (page.83) 1518 0 R (page.84) 1525 0 R (page.85) 1531 0 R (page.86) 1539 0 R (page.87) 1549 0 R (page.88) 1557 0 R (page.89) 1561 0 R (page.9) 944 0 R (page.90) 1567 0 R (page.91) 1578 0 R (page.92) 1583 0 R (page.93) 1587 0 R (page.94) 1598 0 R (page.95) 1602 0 R (page.96) 1609 0 R (page.97) 1619 0 R (page.98) 1679 0 R (page.99) 1735 0 R (proposed_standards) 1056 0 R (query_address) 1290 0 R (rfcs) 940 0 R (rndc) 1174 0 R (rrset_ordering) 995 0 R (sample_configuration) 981 0 R (section*.10) 1748 0 R (section*.11) 1758 0 R (section*.12) 1778 0 R (section*.13) 1790 0 R (section*.14) 1816 0 R (section*.15) 1826 0 R (section*.16) 1827 0 R (section*.17) 1828 0 R (section*.18) 1833 0 R (section*.19) 1834 0 R (section*.2) 1614 0 R (section*.20) 1839 0 R (section*.21) 1849 0 R (section*.22) 1854 0 R (section*.23) 1855 0 R (section*.24) 1856 0 R (section*.25) 1857 0 R (section*.26) 1859 0 R (section*.27) 1860 0 R (section*.28) 1861 0 R (section*.29) 1870 0 R (section*.3) 1620 0 R (section*.30) 1871 0 R (section*.31) 1872 0 R (section*.32) 1874 0 R (section*.33) 1875 0 R (section*.34) 1876 0 R (section*.35) 1877 0 R (section*.36) 1882 0 R (section*.37) 1888 0 R (section*.38) 1889 0 R (section*.39) 1890 0 R (section*.4) 1628 0 R (section*.40) 1892 0 R (section*.41) 1893 0 R (section*.42) 1894 0 R (section*.43) 1899 0 R (section*.44) 1904 0 R (section*.45) 1909 0 R (section*.46) 1910 0 R (section*.47) 1912 0 R (section*.48) 1913 0 R (section*.49) 1914 0 R (section*.5) 1653 0 R (section*.50) 1915 0 R (section*.51) 1920 0 R (section*.52) 1921 0 R (section*.53) 1922 0 R (section*.54) 1924 0 R (section*.55) 1925 0 R (section*.56) 1926 0 R (section*.57) 1931 0 R (section*.58) 1937 0 R (section*.59) 1938 0 R (section*.6) 1665 0 R (section*.60) 1939 0 R (section*.61) 1941 0 R (section*.62) 1942 0 R (section*.63) 1947 0 R (section*.64) 1948 0 R (section*.65) 1953 0 R (section*.66) 1954 0 R (section*.67) 1955 0 R (section*.68) 1960 0 R (section*.69) 1961 0 R (section*.7) 1680 0 R (section*.70) 1963 0 R (section*.71) 1964 0 R (section*.72) 1965 0 R (section*.73) 1966 0 R (section*.74) 1971 0 R (section*.75) 1972 0 R (section*.76) 1973 0 R (section*.77) 1975 0 R (section*.78) 1976 0 R (section*.79) 1981 0 R (section*.8) 1718 0 R (section*.80) 1982 0 R (section*.81) 1988 0 R (section*.82) 1989 0 R (section*.83) 1990 0 R (section*.84) 1992 0 R (section*.85) 1997 0 R (section*.86) 1998 0 R (section*.87) 1999 0 R (section*.88) 2004 0 R (section*.89) 2005 0 R (section*.9) 1736 0 R (section*.90) 2006 0 R (section.1.1) 10 0 R (section.1.2) 14 0 R (section.1.3) 18 0 R (section.1.4) 22 0 R (section.2.1) 70 0 R (section.2.2) 74 0 R (section.2.3) 78 0 R (section.2.4) 82 0 R (section.2.5) 86 0 R (section.3.1) 94 0 R (section.3.2) 106 0 R (section.3.3) 110 0 R (section.4.1) 134 0 R (section.4.2) 138 0 R (section.4.3) 146 0 R (section.4.4) 150 0 R (section.4.5) 158 0 R (section.4.6) 194 0 R (section.4.7) 198 0 R (section.4.8) 202 0 R (section.4.9) 218 0 R (section.5.1) 234 0 R (section.5.2) 238 0 R (section.6.1) 246 0 R (section.6.2) 274 0 R (section.6.3) 478 0 R (section.6.4) 530 0 R (section.7.1) 562 0 R (section.7.2) 566 0 R (section.7.3) 578 0 R (section.8.1) 586 0 R (section.8.2) 594 0 R (section.8.3) 598 0 R (section.A.1) 606 0 R (section.A.2) 614 0 R (section.A.3) 622 0 R (section.B.1) 642 0 R (section.B.10) 678 0 R (section.B.2) 646 0 R (section.B.3) 650 0 R (section.B.4) 654 0 R (section.B.5) 658 0 R (section.B.6) 662 0 R (section.B.7) 666 0 R (section.B.8) 670 0 R (section.B.9) 674 0 R (server_statement_definition_and_usage) 1259 0 R (server_statement_grammar) 1367 0 R (statschannels) 1361 0 R (statsfile) 1237 0 R (subsection.1.4.1) 26 0 R (subsection.1.4.2) 30 0 R (subsection.1.4.3) 34 0 R (subsection.1.4.4) 38 0 R (subsection.1.4.5) 54 0 R (subsection.1.4.6) 62 0 R (subsection.3.1.1) 98 0 R (subsection.3.1.2) 102 0 R (subsection.3.3.1) 114 0 R (subsection.3.3.2) 126 0 R (subsection.4.2.1) 142 0 R (subsection.4.4.1) 154 0 R (subsection.4.5.1) 162 0 R (subsection.4.5.2) 174 0 R (subsection.4.5.3) 178 0 R (subsection.4.5.4) 182 0 R (subsection.4.5.5) 186 0 R (subsection.4.5.6) 190 0 R (subsection.4.8.1) 206 0 R (subsection.4.8.2) 210 0 R (subsection.4.8.3) 214 0 R (subsection.4.9.1) 222 0 R (subsection.4.9.2) 226 0 R (subsection.6.1.1) 250 0 R (subsection.6.1.2) 262 0 R (subsection.6.2.1) 278 0 R (subsection.6.2.10) 314 0 R (subsection.6.2.11) 326 0 R (subsection.6.2.12) 330 0 R (subsection.6.2.13) 334 0 R (subsection.6.2.14) 338 0 R (subsection.6.2.15) 342 0 R (subsection.6.2.16) 346 0 R (subsection.6.2.17) 422 0 R (subsection.6.2.18) 426 0 R (subsection.6.2.19) 430 0 R (subsection.6.2.2) 282 0 R (subsection.6.2.20) 434 0 R (subsection.6.2.21) 438 0 R (subsection.6.2.22) 442 0 R (subsection.6.2.23) 446 0 R (subsection.6.2.24) 450 0 R (subsection.6.2.25) 454 0 R (subsection.6.2.26) 458 0 R (subsection.6.2.3) 286 0 R (subsection.6.2.4) 290 0 R (subsection.6.2.5) 294 0 R (subsection.6.2.6) 298 0 R (subsection.6.2.7) 302 0 R (subsection.6.2.8) 306 0 R (subsection.6.2.9) 310 0 R (subsection.6.3.1) 482 0 R (subsection.6.3.2) 494 0 R (subsection.6.3.3) 498 0 R (subsection.6.3.4) 502 0 R (subsection.6.3.5) 506 0 R (subsection.6.3.6) 522 0 R (subsection.6.3.7) 526 0 R (subsection.6.4.1) 538 0 R (subsection.7.2.1) 570 0 R (subsection.7.2.2) 574 0 R (subsection.8.1.1) 590 0 R (subsection.A.1.1) 610 0 R (subsection.A.2.1) 618 0 R (subsection.A.3.1) 626 0 R (subsection.A.3.2) 630 0 R (subsection.A.3.3) 634 0 R (subsubsection.1.4.4.1) 42 0 R (subsubsection.1.4.4.2) 46 0 R (subsubsection.1.4.4.3) 50 0 R (subsubsection.1.4.5.1) 58 0 R (subsubsection.3.3.1.1) 118 0 R (subsubsection.3.3.1.2) 122 0 R (subsubsection.4.5.1.1) 166 0 R (subsubsection.4.5.1.2) 170 0 R (subsubsection.6.1.1.1) 254 0 R (subsubsection.6.1.1.2) 258 0 R (subsubsection.6.1.2.1) 266 0 R (subsubsection.6.1.2.2) 270 0 R (subsubsection.6.2.10.1) 318 0 R (subsubsection.6.2.10.2) 322 0 R (subsubsection.6.2.16.1) 350 0 R (subsubsection.6.2.16.10) 386 0 R (subsubsection.6.2.16.11) 390 0 R (subsubsection.6.2.16.12) 394 0 R (subsubsection.6.2.16.13) 398 0 R (subsubsection.6.2.16.14) 402 0 R (subsubsection.6.2.16.15) 406 0 R (subsubsection.6.2.16.16) 410 0 R (subsubsection.6.2.16.17) 414 0 R (subsubsection.6.2.16.18) 418 0 R (subsubsection.6.2.16.2) 354 0 R (subsubsection.6.2.16.3) 358 0 R (subsubsection.6.2.16.4) 362 0 R (subsubsection.6.2.16.5) 366 0 R (subsubsection.6.2.16.6) 370 0 R (subsubsection.6.2.16.7) 374 0 R (subsubsection.6.2.16.8) 378 0 R (subsubsection.6.2.16.9) 382 0 R (subsubsection.6.2.26.1) 462 0 R (subsubsection.6.2.26.2) 466 0 R (subsubsection.6.2.26.3) 470 0 R (subsubsection.6.2.26.4) 474 0 R (subsubsection.6.3.1.1) 486 0 R (subsubsection.6.3.1.2) 490 0 R (subsubsection.6.3.5.1) 510 0 R (subsubsection.6.3.5.2) 514 0 R (subsubsection.6.3.5.3) 518 0 R (subsubsection.6.4.0.1) 534 0 R (subsubsection.6.4.1.1) 542 0 R (subsubsection.6.4.1.2) 546 0 R (subsubsection.6.4.1.3) 550 0 R (subsubsection.6.4.1.4) 554 0 R (table.1.1) 922 0 R (table.1.2) 932 0 R (table.3.1) 991 0 R (table.3.2) 1023 0 R (table.6.1) 1131 0 R (table.6.10) 1470 0 R (table.6.11) 1480 0 R (table.6.12) 1483 0 R (table.6.13) 1490 0 R (table.6.14) 1493 0 R (table.6.15) 1496 0 R (table.6.16) 1503 0 R (table.6.17) 1514 0 R (table.6.18) 1521 0 R (table.6.19) 1534 0 R (table.6.2) 1155 0 R (table.6.20) 1542 0 R (table.6.21) 1545 0 R (table.6.3) 1163 0 R (table.6.4) 1202 0 R (table.6.5) 1243 0 R (table.6.6) 1332 0 R (table.6.7) 1402 0 R (table.6.8) 1458 0 R (table.6.9) 1468 0 R (the_category_phrase) 1196 0 R (the_sortlist_statement) 1319 0 R (topology) 1318 0 R (tsig) 1070 0 R (tuning) 1333 0 R (types_of_resource_records_and_when_to_use_them) 939 0 R (view_statement_grammar) 1352 0 R (zone_statement_grammar) 1277 0 R (zone_transfers) 1046 0 R (zonefile_format) 1344 0 R] /Limits [(Access_Control_Lists) (zonefile_format)] >> endobj -1955 0 obj << -/Kids [1954 0 R] +2031 0 obj << +/Kids [2030 0 R] >> endobj -1956 0 obj << -/Dests 1955 0 R +2032 0 obj << +/Dests 2031 0 R >> endobj -1957 0 obj << +2033 0 obj << /Type /Catalog -/Pages 1952 0 R -/Outlines 1953 0 R -/Names 1956 0 R +/Pages 2028 0 R +/Outlines 2029 0 R +/Names 2032 0 R /PageMode /UseOutlines -/OpenAction 649 0 R +/OpenAction 681 0 R >> endobj -1958 0 obj << +2034 0 obj << /Author()/Title()/Subject()/Creator(LaTeX with hyperref package)/Producer(pdfeTeX-1.21a)/Keywords() -/CreationDate (D:20071031133547+11'00') +/CreationDate (D:20080506014144Z) /PTEX.Fullbanner (This is pdfeTeX, Version 3.141592-1.21a-2.2 (Web2C 7.5.4) kpathsea version 3.5.4) >> endobj xref -0 1959 +0 2035 0000000001 65535 f 0000000002 00000 f 0000000003 00000 f 0000000004 00000 f 0000000000 00000 f 0000000009 00000 n -0000066894 00000 n -0000672242 00000 n +0000069906 00000 n +0000696437 00000 n 0000000054 00000 n 0000000086 00000 n -0000067018 00000 n -0000672170 00000 n +0000070030 00000 n +0000696365 00000 n 0000000133 00000 n 0000000173 00000 n -0000067143 00000 n -0000672084 00000 n +0000070155 00000 n +0000696279 00000 n 0000000221 00000 n 0000000273 00000 n -0000067268 00000 n -0000671998 00000 n +0000070280 00000 n +0000696193 00000 n 0000000321 00000 n 0000000377 00000 n -0000071531 00000 n -0000671888 00000 n +0000074544 00000 n +0000696083 00000 n 0000000425 00000 n 0000000478 00000 n -0000071656 00000 n -0000671814 00000 n +0000074669 00000 n +0000696009 00000 n 0000000531 00000 n 0000000572 00000 n -0000071781 00000 n -0000671727 00000 n +0000074794 00000 n +0000695922 00000 n 0000000625 00000 n 0000000674 00000 n -0000071906 00000 n -0000671640 00000 n +0000074919 00000 n +0000695835 00000 n 0000000727 00000 n 0000000757 00000 n -0000076184 00000 n -0000671516 00000 n +0000079198 00000 n +0000695711 00000 n 0000000810 00000 n 0000000861 00000 n -0000076309 00000 n -0000671442 00000 n +0000079323 00000 n +0000695637 00000 n 0000000919 00000 n 0000000964 00000 n -0000076434 00000 n -0000671355 00000 n +0000079448 00000 n +0000695550 00000 n 0000001022 00000 n 0000001062 00000 n -0000076559 00000 n -0000671281 00000 n +0000079573 00000 n +0000695476 00000 n 0000001120 00000 n 0000001162 00000 n -0000079531 00000 n -0000671157 00000 n +0000082545 00000 n +0000695352 00000 n 0000001215 00000 n 0000001260 00000 n -0000079656 00000 n -0000671096 00000 n +0000082670 00000 n +0000695291 00000 n 0000001318 00000 n 0000001355 00000 n -0000079781 00000 n -0000671022 00000 n +0000082795 00000 n +0000695217 00000 n 0000001408 00000 n 0000001463 00000 n -0000082709 00000 n -0000670897 00000 n +0000085723 00000 n +0000695092 00000 n 0000001509 00000 n 0000001556 00000 n -0000082834 00000 n -0000670823 00000 n +0000085848 00000 n +0000695018 00000 n 0000001604 00000 n 0000001648 00000 n -0000082959 00000 n -0000670736 00000 n +0000085973 00000 n +0000694931 00000 n 0000001696 00000 n 0000001735 00000 n -0000083084 00000 n -0000670649 00000 n +0000086098 00000 n +0000694844 00000 n 0000001783 00000 n 0000001825 00000 n -0000083208 00000 n -0000670562 00000 n +0000086222 00000 n +0000694757 00000 n 0000001873 00000 n 0000001936 00000 n -0000084294 00000 n -0000670488 00000 n +0000087308 00000 n +0000694683 00000 n 0000001984 00000 n 0000002034 00000 n -0000086004 00000 n -0000670360 00000 n +0000089018 00000 n +0000694555 00000 n 0000002080 00000 n 0000002126 00000 n -0000086128 00000 n -0000670247 00000 n +0000089142 00000 n +0000694442 00000 n 0000002174 00000 n 0000002218 00000 n -0000086253 00000 n -0000670171 00000 n +0000089267 00000 n +0000694366 00000 n 0000002271 00000 n 0000002323 00000 n -0000086378 00000 n -0000670094 00000 n +0000089392 00000 n +0000694289 00000 n 0000002377 00000 n 0000002436 00000 n -0000088906 00000 n -0000670003 00000 n +0000091921 00000 n +0000694198 00000 n 0000002485 00000 n 0000002523 00000 n -0000089158 00000 n -0000669886 00000 n +0000092173 00000 n +0000694081 00000 n 0000002572 00000 n 0000002618 00000 n -0000089284 00000 n -0000669768 00000 n +0000092299 00000 n +0000693963 00000 n 0000002672 00000 n 0000002739 00000 n -0000092491 00000 n -0000669689 00000 n +0000095505 00000 n +0000693884 00000 n 0000002798 00000 n 0000002842 00000 n -0000092617 00000 n -0000669610 00000 n +0000095631 00000 n +0000693805 00000 n 0000002901 00000 n 0000002949 00000 n -0000102946 00000 n -0000669531 00000 n +0000105984 00000 n +0000693726 00000 n 0000003003 00000 n 0000003036 00000 n -0000107915 00000 n -0000669399 00000 n +0000110971 00000 n +0000693594 00000 n 0000003083 00000 n 0000003126 00000 n -0000108041 00000 n -0000669320 00000 n +0000111100 00000 n +0000693515 00000 n 0000003175 00000 n 0000003205 00000 n -0000108167 00000 n -0000669188 00000 n +0000111229 00000 n +0000693383 00000 n 0000003254 00000 n 0000003292 00000 n -0000108293 00000 n -0000669123 00000 n +0000111358 00000 n +0000693318 00000 n 0000003346 00000 n 0000003388 00000 n -0000112549 00000 n -0000669030 00000 n +0000115620 00000 n +0000693225 00000 n 0000003437 00000 n 0000003496 00000 n -0000112678 00000 n -0000668898 00000 n +0000115749 00000 n +0000693093 00000 n 0000003545 00000 n 0000003578 00000 n -0000112807 00000 n -0000668833 00000 n +0000115878 00000 n +0000693028 00000 n 0000003632 00000 n 0000003681 00000 n -0000120116 00000 n -0000668701 00000 n +0000123188 00000 n +0000692896 00000 n 0000003730 00000 n 0000003758 00000 n -0000120245 00000 n -0000668583 00000 n +0000123317 00000 n +0000692778 00000 n 0000003812 00000 n 0000003881 00000 n -0000120374 00000 n -0000668504 00000 n +0000123446 00000 n +0000692699 00000 n 0000003940 00000 n 0000003988 00000 n -0000123205 00000 n -0000668425 00000 n +0000126280 00000 n +0000692620 00000 n 0000004047 00000 n 0000004092 00000 n -0000123334 00000 n -0000668332 00000 n +0000126409 00000 n +0000692527 00000 n 0000004146 00000 n 0000004214 00000 n -0000123463 00000 n -0000668239 00000 n +0000126538 00000 n +0000692434 00000 n 0000004268 00000 n 0000004338 00000 n -0000123592 00000 n -0000668146 00000 n +0000126667 00000 n +0000692341 00000 n 0000004392 00000 n 0000004455 00000 n -0000127494 00000 n -0000668053 00000 n +0000130570 00000 n +0000692248 00000 n 0000004509 00000 n 0000004564 00000 n -0000127623 00000 n -0000667974 00000 n +0000130699 00000 n +0000692169 00000 n 0000004618 00000 n 0000004650 00000 n -0000127752 00000 n -0000667881 00000 n +0000130828 00000 n +0000692076 00000 n 0000004699 00000 n 0000004727 00000 n -0000127881 00000 n -0000667788 00000 n +0000130957 00000 n +0000691983 00000 n 0000004776 00000 n 0000004808 00000 n -0000131500 00000 n -0000667656 00000 n +0000134576 00000 n +0000691851 00000 n 0000004857 00000 n 0000004887 00000 n -0000131629 00000 n -0000667577 00000 n +0000134705 00000 n +0000691772 00000 n 0000004941 00000 n 0000004982 00000 n -0000131757 00000 n -0000667484 00000 n +0000134833 00000 n +0000691679 00000 n 0000005036 00000 n 0000005078 00000 n -0000135199 00000 n -0000667405 00000 n +0000138274 00000 n +0000691600 00000 n 0000005132 00000 n 0000005177 00000 n -0000138273 00000 n -0000667287 00000 n +0000141349 00000 n +0000691482 00000 n 0000005226 00000 n 0000005272 00000 n -0000138402 00000 n -0000667208 00000 n +0000141478 00000 n +0000691403 00000 n 0000005326 00000 n 0000005386 00000 n -0000138530 00000 n -0000667129 00000 n +0000141606 00000 n +0000691324 00000 n 0000005440 00000 n 0000005509 00000 n -0000141010 00000 n -0000666996 00000 n +0000144088 00000 n +0000691191 00000 n 0000005556 00000 n 0000005609 00000 n -0000141139 00000 n -0000666917 00000 n +0000144217 00000 n +0000691112 00000 n 0000005658 00000 n 0000005714 00000 n -0000141268 00000 n -0000666838 00000 n +0000144346 00000 n +0000691033 00000 n 0000005763 00000 n 0000005812 00000 n -0000145452 00000 n -0000666705 00000 n +0000148530 00000 n +0000690900 00000 n 0000005859 00000 n 0000005911 00000 n -0000145581 00000 n -0000666587 00000 n +0000148659 00000 n +0000690782 00000 n 0000005960 00000 n 0000006011 00000 n -0000149858 00000 n -0000666469 00000 n +0000152938 00000 n +0000690664 00000 n 0000006065 00000 n 0000006110 00000 n -0000149987 00000 n -0000666390 00000 n +0000153067 00000 n +0000690585 00000 n 0000006169 00000 n 0000006203 00000 n -0000150116 00000 n -0000666311 00000 n +0000153196 00000 n +0000690506 00000 n 0000006262 00000 n 0000006310 00000 n -0000153650 00000 n -0000666193 00000 n +0000156728 00000 n +0000690388 00000 n 0000006364 00000 n 0000006404 00000 n -0000153779 00000 n -0000666114 00000 n +0000156857 00000 n +0000690309 00000 n 0000006463 00000 n 0000006497 00000 n -0000153908 00000 n -0000666035 00000 n +0000156986 00000 n +0000690230 00000 n 0000006556 00000 n 0000006604 00000 n -0000157771 00000 n -0000665902 00000 n +0000160851 00000 n +0000690097 00000 n 0000006653 00000 n 0000006703 00000 n -0000160870 00000 n -0000665823 00000 n +0000163735 00000 n +0000690018 00000 n 0000006757 00000 n 0000006804 00000 n -0000160998 00000 n -0000665730 00000 n +0000163864 00000 n +0000689925 00000 n 0000006858 00000 n 0000006918 00000 n -0000161257 00000 n -0000665637 00000 n +0000164123 00000 n +0000689832 00000 n 0000006972 00000 n 0000007024 00000 n -0000161386 00000 n -0000665544 00000 n +0000164252 00000 n +0000689739 00000 n 0000007078 00000 n 0000007143 00000 n -0000166285 00000 n -0000665451 00000 n +0000169432 00000 n +0000689646 00000 n 0000007197 00000 n 0000007248 00000 n -0000166414 00000 n -0000665358 00000 n +0000169561 00000 n +0000689553 00000 n 0000007302 00000 n 0000007366 00000 n -0000166543 00000 n -0000665265 00000 n +0000169690 00000 n +0000689460 00000 n 0000007420 00000 n 0000007467 00000 n -0000170308 00000 n -0000665172 00000 n +0000173305 00000 n +0000689367 00000 n 0000007521 00000 n 0000007581 00000 n -0000170437 00000 n -0000665079 00000 n +0000173434 00000 n +0000689274 00000 n 0000007635 00000 n 0000007686 00000 n -0000170566 00000 n -0000664947 00000 n +0000173563 00000 n +0000689142 00000 n 0000007741 00000 n 0000007806 00000 n -0000175098 00000 n -0000664868 00000 n +0000177956 00000 n +0000689063 00000 n 0000007866 00000 n 0000007913 00000 n -0000181525 00000 n -0000664789 00000 n +0000184266 00000 n +0000688984 00000 n 0000007973 00000 n 0000008021 00000 n -0000184795 00000 n -0000664696 00000 n +0000187786 00000 n +0000688891 00000 n 0000008076 00000 n 0000008126 00000 n -0000187652 00000 n -0000664603 00000 n +0000190633 00000 n +0000688798 00000 n 0000008181 00000 n 0000008244 00000 n -0000187781 00000 n -0000664510 00000 n +0000190762 00000 n +0000688705 00000 n 0000008299 00000 n 0000008351 00000 n -0000187909 00000 n -0000664417 00000 n +0000190891 00000 n +0000688612 00000 n 0000008406 00000 n 0000008471 00000 n -0000188037 00000 n -0000664324 00000 n +0000191020 00000 n +0000688519 00000 n 0000008526 00000 n 0000008578 00000 n -0000194604 00000 n -0000664191 00000 n +0000197034 00000 n +0000688386 00000 n 0000008633 00000 n 0000008698 00000 n -0000202603 00000 n -0000664112 00000 n +0000205352 00000 n +0000688307 00000 n 0000008758 00000 n 0000008802 00000 n -0000219854 00000 n -0000664019 00000 n +0000222778 00000 n +0000688214 00000 n 0000008862 00000 n 0000008901 00000 n -0000223372 00000 n -0000663926 00000 n +0000226450 00000 n +0000688121 00000 n 0000008961 00000 n 0000009008 00000 n -0000223499 00000 n -0000663833 00000 n +0000226577 00000 n +0000688028 00000 n 0000009068 00000 n 0000009111 00000 n -0000227712 00000 n -0000663740 00000 n +0000230855 00000 n +0000687935 00000 n 0000009171 00000 n 0000009210 00000 n -0000230808 00000 n -0000663647 00000 n +0000234179 00000 n +0000687842 00000 n 0000009270 00000 n 0000009312 00000 n -0000233931 00000 n -0000663554 00000 n +0000237215 00000 n +0000687749 00000 n 0000009372 00000 n 0000009415 00000 n -0000241657 00000 n -0000663461 00000 n +0000245043 00000 n +0000687656 00000 n 0000009475 00000 n 0000009522 00000 n -0000241786 00000 n -0000663368 00000 n +0000245172 00000 n +0000687563 00000 n 0000009582 00000 n 0000009643 00000 n -0000245605 00000 n -0000663275 00000 n +0000249012 00000 n +0000687470 00000 n 0000009704 00000 n 0000009756 00000 n -0000245734 00000 n -0000663182 00000 n +0000249141 00000 n +0000687377 00000 n 0000009817 00000 n 0000009870 00000 n -0000248983 00000 n -0000663089 00000 n +0000252166 00000 n +0000687284 00000 n 0000009931 00000 n 0000009969 00000 n -0000249112 00000 n -0000662996 00000 n +0000252295 00000 n +0000687191 00000 n 0000010030 00000 n 0000010082 00000 n -0000253078 00000 n -0000662903 00000 n +0000256271 00000 n +0000687098 00000 n 0000010143 00000 n 0000010187 00000 n -0000256388 00000 n -0000662810 00000 n +0000260104 00000 n +0000687005 00000 n 0000010248 00000 n 0000010284 00000 n -0000264852 00000 n -0000662717 00000 n +0000268639 00000 n +0000686912 00000 n 0000010345 00000 n 0000010408 00000 n -0000264981 00000 n -0000662624 00000 n +0000268768 00000 n +0000686819 00000 n 0000010469 00000 n 0000010519 00000 n -0000270896 00000 n -0000662531 00000 n +0000274993 00000 n +0000686740 00000 n 0000010580 00000 n -0000010629 00000 n -0000271155 00000 n -0000662452 00000 n -0000010690 00000 n -0000010746 00000 n -0000274528 00000 n -0000662359 00000 n -0000010801 00000 n -0000010852 00000 n -0000279551 00000 n -0000662266 00000 n -0000010907 00000 n -0000010971 00000 n -0000283053 00000 n -0000662173 00000 n -0000011026 00000 n -0000011083 00000 n -0000283182 00000 n -0000662080 00000 n -0000011138 00000 n -0000011208 00000 n -0000283311 00000 n -0000661987 00000 n -0000011263 00000 n -0000011312 00000 n -0000283440 00000 n -0000661894 00000 n -0000011367 00000 n -0000011429 00000 n -0000286034 00000 n -0000661801 00000 n -0000011484 00000 n -0000011533 00000 n -0000291265 00000 n -0000661683 00000 n -0000011588 00000 n -0000011650 00000 n -0000291394 00000 n -0000661604 00000 n -0000011710 00000 n -0000011749 00000 n -0000295447 00000 n -0000661511 00000 n -0000011809 00000 n -0000011843 00000 n -0000301339 00000 n -0000661418 00000 n -0000011903 00000 n -0000011944 00000 n -0000311696 00000 n -0000661339 00000 n -0000012004 00000 n -0000012056 00000 n -0000315963 00000 n -0000661221 00000 n -0000012105 00000 n -0000012138 00000 n -0000316092 00000 n -0000661103 00000 n -0000012192 00000 n -0000012264 00000 n -0000316220 00000 n -0000661024 00000 n -0000012323 00000 n -0000012367 00000 n -0000327286 00000 n -0000660945 00000 n -0000012426 00000 n -0000012479 00000 n -0000327674 00000 n -0000660852 00000 n -0000012533 00000 n -0000012583 00000 n -0000331107 00000 n -0000660759 00000 n -0000012637 00000 n -0000012675 00000 n -0000331366 00000 n -0000660666 00000 n -0000012729 00000 n +0000010636 00000 n +0000275121 00000 n +0000686647 00000 n +0000010691 00000 n +0000010755 00000 n +0000278582 00000 n +0000686554 00000 n +0000010810 00000 n +0000010887 00000 n +0000278711 00000 n +0000686461 00000 n +0000010942 00000 n +0000010993 00000 n +0000278840 00000 n +0000686368 00000 n +0000011048 00000 n +0000011112 00000 n +0000287116 00000 n +0000686275 00000 n +0000011167 00000 n +0000011224 00000 n +0000287245 00000 n +0000686182 00000 n +0000011279 00000 n +0000011349 00000 n +0000287373 00000 n +0000686089 00000 n +0000011404 00000 n +0000011453 00000 n +0000287502 00000 n +0000685996 00000 n +0000011508 00000 n +0000011570 00000 n +0000289734 00000 n +0000685903 00000 n +0000011625 00000 n +0000011674 00000 n +0000295929 00000 n +0000685785 00000 n +0000011729 00000 n +0000011791 00000 n +0000296058 00000 n +0000685706 00000 n +0000011851 00000 n +0000011890 00000 n +0000301098 00000 n +0000685613 00000 n +0000011950 00000 n +0000011984 00000 n +0000301226 00000 n +0000685520 00000 n +0000012044 00000 n +0000012085 00000 n +0000316788 00000 n +0000685441 00000 n +0000012145 00000 n +0000012197 00000 n +0000320751 00000 n +0000685309 00000 n +0000012246 00000 n +0000012279 00000 n +0000320880 00000 n +0000685191 00000 n +0000012333 00000 n +0000012405 00000 n +0000321008 00000 n +0000685112 00000 n +0000012464 00000 n +0000012508 00000 n +0000328396 00000 n +0000685033 00000 n +0000012567 00000 n +0000012620 00000 n +0000332073 00000 n +0000684940 00000 n +0000012674 00000 n +0000012724 00000 n +0000332331 00000 n +0000684847 00000 n 0000012778 00000 n -0000334263 00000 n -0000660534 00000 n -0000012832 00000 n -0000012884 00000 n -0000334391 00000 n -0000660455 00000 n -0000012943 00000 n -0000012995 00000 n -0000334520 00000 n -0000660362 00000 n -0000013054 00000 n -0000013107 00000 n -0000334648 00000 n -0000660283 00000 n -0000013166 00000 n -0000013215 00000 n -0000334777 00000 n -0000660190 00000 n -0000013269 00000 n -0000013349 00000 n -0000338704 00000 n -0000660111 00000 n -0000013403 00000 n -0000013452 00000 n -0000342023 00000 n -0000659978 00000 n -0000013499 00000 n -0000013551 00000 n -0000342152 00000 n -0000659899 00000 n -0000013600 00000 n -0000013644 00000 n -0000346338 00000 n -0000659767 00000 n -0000013693 00000 n -0000013734 00000 n -0000346467 00000 n -0000659688 00000 n +0000012816 00000 n +0000335585 00000 n +0000684754 00000 n +0000012870 00000 n +0000012919 00000 n +0000335843 00000 n +0000684622 00000 n +0000012973 00000 n +0000013025 00000 n +0000335972 00000 n +0000684543 00000 n +0000013084 00000 n +0000013136 00000 n +0000338788 00000 n +0000684450 00000 n +0000013195 00000 n +0000013248 00000 n +0000338917 00000 n +0000684371 00000 n +0000013307 00000 n +0000013356 00000 n +0000339046 00000 n +0000684278 00000 n +0000013410 00000 n +0000013490 00000 n +0000343375 00000 n +0000684199 00000 n +0000013544 00000 n +0000013593 00000 n +0000343504 00000 n +0000684081 00000 n +0000013642 00000 n +0000013682 00000 n +0000347194 00000 n +0000684002 00000 n +0000013741 00000 n 0000013788 00000 n -0000013836 00000 n -0000346595 00000 n -0000659609 00000 n -0000013890 00000 n -0000013941 00000 n -0000346724 00000 n -0000659530 00000 n -0000013990 00000 n -0000014037 00000 n -0000350987 00000 n -0000659397 00000 n -0000014084 00000 n -0000014121 00000 n -0000351116 00000 n -0000659279 00000 n -0000014170 00000 n -0000014209 00000 n -0000351245 00000 n -0000659214 00000 n -0000014263 00000 n -0000014341 00000 n -0000351374 00000 n -0000659121 00000 n -0000014390 00000 n -0000014457 00000 n -0000351503 00000 n -0000659042 00000 n -0000014506 00000 n -0000014551 00000 n -0000354942 00000 n -0000658909 00000 n -0000014599 00000 n -0000014631 00000 n -0000355071 00000 n -0000658791 00000 n -0000014680 00000 n -0000014719 00000 n -0000355200 00000 n -0000658726 00000 n -0000014773 00000 n -0000014834 00000 n -0000358965 00000 n -0000658594 00000 n -0000014883 00000 n -0000014940 00000 n -0000359094 00000 n -0000658529 00000 n -0000014994 00000 n -0000015043 00000 n -0000359223 00000 n -0000658411 00000 n -0000015092 00000 n -0000015154 00000 n -0000359352 00000 n -0000658332 00000 n -0000015208 00000 n -0000015263 00000 n -0000383375 00000 n -0000658239 00000 n -0000015317 00000 n -0000015358 00000 n -0000383504 00000 n -0000658160 00000 n -0000015412 00000 n -0000015464 00000 n -0000386207 00000 n -0000658040 00000 n -0000015512 00000 n -0000015546 00000 n -0000386336 00000 n -0000657961 00000 n -0000015595 00000 n -0000015622 00000 n -0000404272 00000 n -0000657868 00000 n -0000015671 00000 n -0000015699 00000 n -0000411809 00000 n -0000657775 00000 n -0000015748 00000 n -0000015785 00000 n -0000418149 00000 n -0000657682 00000 n -0000015834 00000 n -0000015873 00000 n -0000427649 00000 n -0000657589 00000 n -0000015922 00000 n -0000015961 00000 n -0000430507 00000 n -0000657496 00000 n -0000016010 00000 n -0000016049 00000 n -0000436910 00000 n -0000657403 00000 n -0000016098 00000 n -0000016127 00000 n -0000446426 00000 n -0000657310 00000 n -0000016176 00000 n -0000016204 00000 n -0000449575 00000 n -0000657217 00000 n -0000016253 00000 n -0000016286 00000 n -0000455680 00000 n -0000657138 00000 n -0000016336 00000 n -0000016373 00000 n -0000016742 00000 n -0000016864 00000 n -0000024693 00000 n -0000016426 00000 n -0000024567 00000 n -0000024630 00000 n -0000653001 00000 n -0000627058 00000 n -0000652827 00000 n -0000654026 00000 n -0000019727 00000 n -0000019944 00000 n -0000020013 00000 n -0000020082 00000 n -0000020150 00000 n -0000020218 00000 n -0000020267 00000 n -0000020314 00000 n -0000020647 00000 n -0000020669 00000 n -0000020837 00000 n -0000021002 00000 n -0000021171 00000 n -0000021350 00000 n -0000021659 00000 n -0000021819 00000 n -0000026052 00000 n -0000025867 00000 n -0000024793 00000 n -0000025989 00000 n -0000625846 00000 n -0000599367 00000 n -0000625672 00000 n -0000598682 00000 n -0000596538 00000 n -0000598518 00000 n -0000037759 00000 n -0000029108 00000 n -0000026137 00000 n -0000037633 00000 n -0000037696 00000 n -0000029642 00000 n -0000029796 00000 n -0000029953 00000 n -0000030110 00000 n -0000030266 00000 n -0000030423 00000 n -0000030585 00000 n -0000030746 00000 n -0000030907 00000 n -0000031069 00000 n -0000031236 00000 n -0000031403 00000 n -0000031568 00000 n -0000031730 00000 n -0000031896 00000 n -0000032057 00000 n -0000032212 00000 n -0000032369 00000 n -0000032525 00000 n -0000032682 00000 n -0000032839 00000 n -0000032996 00000 n -0000033150 00000 n -0000033306 00000 n -0000033468 00000 n -0000033630 00000 n -0000033786 00000 n -0000033943 00000 n -0000034105 00000 n -0000034272 00000 n -0000034438 00000 n -0000034599 00000 n -0000034754 00000 n -0000034911 00000 n -0000035068 00000 n -0000035230 00000 n -0000035387 00000 n -0000035544 00000 n -0000035706 00000 n -0000035863 00000 n -0000036025 00000 n -0000036192 00000 n -0000036358 00000 n -0000036520 00000 n -0000036682 00000 n -0000036844 00000 n -0000037006 00000 n -0000037168 00000 n -0000037323 00000 n -0000037478 00000 n -0000051123 00000 n -0000041075 00000 n -0000037844 00000 n -0000051060 00000 n -0000595987 00000 n -0000578906 00000 n -0000595803 00000 n -0000041665 00000 n -0000041828 00000 n -0000041990 00000 n -0000042153 00000 n -0000042311 00000 n -0000042474 00000 n -0000042637 00000 n -0000042792 00000 n -0000042950 00000 n -0000043108 00000 n -0000043264 00000 n -0000043422 00000 n -0000043585 00000 n -0000043753 00000 n -0000043921 00000 n -0000044084 00000 n -0000044252 00000 n -0000044420 00000 n -0000044578 00000 n -0000044741 00000 n -0000044904 00000 n -0000045066 00000 n -0000045228 00000 n -0000045391 00000 n -0000045553 00000 n -0000045715 00000 n -0000045878 00000 n -0000046041 00000 n -0000046204 00000 n -0000046373 00000 n -0000046542 00000 n -0000046706 00000 n -0000046869 00000 n -0000047033 00000 n -0000047197 00000 n -0000047360 00000 n -0000047524 00000 n -0000047693 00000 n -0000047861 00000 n -0000048030 00000 n -0000048199 00000 n -0000048368 00000 n -0000048537 00000 n -0000048706 00000 n -0000048875 00000 n -0000049044 00000 n -0000049214 00000 n -0000049384 00000 n -0000049554 00000 n -0000049723 00000 n -0000049893 00000 n -0000050063 00000 n -0000050231 00000 n -0000050400 00000 n -0000050570 00000 n -0000050737 00000 n -0000050898 00000 n -0000063946 00000 n -0000054652 00000 n -0000051221 00000 n -0000063883 00000 n -0000055218 00000 n -0000055381 00000 n -0000055544 00000 n -0000055707 00000 n -0000055870 00000 n -0000056032 00000 n -0000056195 00000 n -0000056363 00000 n -0000056531 00000 n -0000056697 00000 n -0000056865 00000 n -0000057022 00000 n -0000057184 00000 n -0000057351 00000 n -0000057518 00000 n -0000057680 00000 n -0000057842 00000 n -0000058004 00000 n -0000058166 00000 n -0000058333 00000 n -0000058500 00000 n -0000058667 00000 n -0000058829 00000 n -0000058991 00000 n -0000059146 00000 n -0000059301 00000 n -0000059458 00000 n -0000059620 00000 n -0000059782 00000 n -0000059939 00000 n -0000060094 00000 n -0000060251 00000 n -0000060413 00000 n -0000060569 00000 n -0000060726 00000 n -0000060882 00000 n -0000061039 00000 n -0000061201 00000 n -0000061358 00000 n -0000061520 00000 n -0000061677 00000 n -0000061838 00000 n -0000062000 00000 n -0000062162 00000 n -0000062317 00000 n -0000062473 00000 n -0000062630 00000 n -0000062787 00000 n -0000062944 00000 n -0000063100 00000 n -0000063257 00000 n -0000063414 00000 n -0000577940 00000 n -0000557973 00000 n -0000577767 00000 n -0000063571 00000 n -0000063727 00000 n -0000064391 00000 n -0000064206 00000 n -0000064057 00000 n -0000064328 00000 n -0000067519 00000 n -0000066709 00000 n -0000064432 00000 n -0000066831 00000 n -0000066955 00000 n -0000067080 00000 n -0000067205 00000 n -0000557084 00000 n -0000535753 00000 n -0000556910 00000 n -0000067330 00000 n -0000067393 00000 n -0000067456 00000 n -0000534981 00000 n -0000517360 00000 n -0000534808 00000 n -0000654144 00000 n -0000072030 00000 n -0000070848 00000 n -0000067643 00000 n -0000071342 00000 n -0000071405 00000 n -0000071468 00000 n -0000071593 00000 n -0000071718 00000 n -0000071843 00000 n -0000070998 00000 n -0000071191 00000 n -0000071968 00000 n -0000316156 00000 n -0000359416 00000 n -0000076684 00000 n -0000075648 00000 n -0000072154 00000 n -0000076121 00000 n -0000076246 00000 n -0000075798 00000 n -0000075960 00000 n -0000076371 00000 n -0000076496 00000 n -0000076621 00000 n -0000092554 00000 n -0000079906 00000 n -0000079346 00000 n -0000076808 00000 n -0000079468 00000 n -0000079593 00000 n -0000079718 00000 n -0000079843 00000 n -0000083333 00000 n -0000082192 00000 n -0000080017 00000 n -0000082646 00000 n -0000082771 00000 n -0000082896 00000 n -0000083021 00000 n -0000083146 00000 n -0000082342 00000 n -0000082494 00000 n -0000083270 00000 n -0000271219 00000 n -0000084419 00000 n -0000084109 00000 n -0000083418 00000 n -0000084231 00000 n -0000084356 00000 n -0000086504 00000 n -0000085819 00000 n -0000084517 00000 n -0000085941 00000 n -0000086066 00000 n -0000086190 00000 n -0000086315 00000 n -0000086441 00000 n -0000654262 00000 n -0000089409 00000 n -0000088541 00000 n -0000086602 00000 n -0000088843 00000 n -0000088969 00000 n -0000089032 00000 n -0000089095 00000 n -0000088683 00000 n -0000089221 00000 n -0000089347 00000 n -0000253142 00000 n -0000092743 00000 n -0000092306 00000 n -0000089520 00000 n -0000092428 00000 n -0000516704 00000 n -0000505122 00000 n -0000516527 00000 n -0000092680 00000 n -0000096528 00000 n -0000096343 00000 n -0000092867 00000 n -0000096465 00000 n -0000504587 00000 n -0000495073 00000 n -0000504410 00000 n -0000100912 00000 n -0000100521 00000 n -0000096691 00000 n -0000100849 00000 n -0000100663 00000 n -0000161450 00000 n -0000103198 00000 n -0000102761 00000 n -0000101049 00000 n -0000102883 00000 n -0000103009 00000 n -0000103072 00000 n -0000103135 00000 n -0000105889 00000 n -0000108420 00000 n -0000105738 00000 n -0000103322 00000 n -0000107852 00000 n -0000107978 00000 n -0000108104 00000 n -0000107531 00000 n -0000107692 00000 n -0000494214 00000 n -0000484842 00000 n -0000494042 00000 n -0000484280 00000 n -0000475197 00000 n -0000484107 00000 n -0000108230 00000 n -0000108356 00000 n -0000654380 00000 n -0000107360 00000 n -0000107418 00000 n -0000107508 00000 n -0000202667 00000 n -0000233995 00000 n -0000112936 00000 n -0000112001 00000 n -0000108572 00000 n -0000112484 00000 n -0000112613 00000 n -0000112157 00000 n -0000112322 00000 n -0000112742 00000 n -0000112871 00000 n -0000363441 00000 n -0000116550 00000 n -0000116170 00000 n -0000113087 00000 n -0000116485 00000 n -0000116317 00000 n -0000117799 00000 n -0000117608 00000 n -0000116675 00000 n -0000117734 00000 n -0000120502 00000 n -0000119925 00000 n -0000117898 00000 n -0000120051 00000 n -0000120180 00000 n -0000120309 00000 n -0000120438 00000 n -0000123721 00000 n -0000123014 00000 n -0000120640 00000 n -0000123140 00000 n -0000123269 00000 n -0000123398 00000 n -0000123527 00000 n -0000123656 00000 n -0000128009 00000 n -0000127111 00000 n -0000123846 00000 n -0000127429 00000 n -0000127558 00000 n -0000127258 00000 n -0000127687 00000 n -0000127816 00000 n -0000127944 00000 n -0000654504 00000 n -0000311760 00000 n -0000131886 00000 n -0000131309 00000 n -0000128134 00000 n -0000131435 00000 n -0000131564 00000 n -0000131692 00000 n -0000131821 00000 n -0000135328 00000 n -0000135008 00000 n -0000132024 00000 n -0000135134 00000 n -0000135263 00000 n -0000138659 00000 n -0000137900 00000 n -0000135440 00000 n -0000138208 00000 n -0000138337 00000 n -0000138047 00000 n -0000138466 00000 n -0000138594 00000 n -0000359158 00000 n -0000141397 00000 n -0000140819 00000 n -0000138825 00000 n -0000140945 00000 n -0000141074 00000 n -0000141203 00000 n -0000141332 00000 n -0000141837 00000 n -0000141646 00000 n -0000141496 00000 n -0000141772 00000 n -0000145839 00000 n -0000145073 00000 n -0000141879 00000 n -0000145387 00000 n -0000145516 00000 n -0000145644 00000 n -0000145709 00000 n -0000145774 00000 n -0000145220 00000 n -0000654629 00000 n -0000149922 00000 n -0000150245 00000 n -0000149667 00000 n -0000145938 00000 n -0000149793 00000 n -0000150051 00000 n -0000150180 00000 n -0000154037 00000 n -0000153459 00000 n -0000150370 00000 n -0000153585 00000 n -0000153714 00000 n -0000153843 00000 n -0000153972 00000 n -0000156780 00000 n -0000158029 00000 n -0000156654 00000 n -0000154175 00000 n -0000157706 00000 n -0000157835 00000 n -0000157900 00000 n -0000157964 00000 n -0000161513 00000 n -0000160679 00000 n -0000158183 00000 n -0000160805 00000 n -0000160934 00000 n -0000161062 00000 n -0000161127 00000 n -0000161192 00000 n -0000161321 00000 n -0000166671 00000 n -0000165754 00000 n -0000161625 00000 n -0000166220 00000 n -0000165910 00000 n -0000166061 00000 n -0000166349 00000 n -0000166478 00000 n -0000166606 00000 n -0000461387 00000 n -0000170695 00000 n -0000169553 00000 n -0000166809 00000 n -0000170243 00000 n -0000170372 00000 n -0000169718 00000 n -0000169870 00000 n -0000170057 00000 n -0000170501 00000 n -0000170630 00000 n -0000654754 00000 n -0000175227 00000 n -0000174907 00000 n -0000170820 00000 n -0000175033 00000 n -0000175162 00000 n -0000178416 00000 n -0000178037 00000 n -0000175352 00000 n -0000178351 00000 n -0000178184 00000 n -0000181589 00000 n -0000181784 00000 n -0000181334 00000 n -0000178528 00000 n -0000181460 00000 n -0000181654 00000 n -0000181719 00000 n -0000184923 00000 n -0000184604 00000 n -0000181896 00000 n -0000184730 00000 n -0000184858 00000 n -0000188166 00000 n -0000187126 00000 n -0000185035 00000 n -0000187587 00000 n -0000187716 00000 n -0000187282 00000 n -0000187436 00000 n -0000187844 00000 n -0000187973 00000 n -0000188101 00000 n -0000189726 00000 n -0000189535 00000 n -0000188278 00000 n -0000189661 00000 n -0000654879 00000 n -0000191214 00000 n -0000191023 00000 n -0000189825 00000 n +0000347322 00000 n +0000683884 00000 n +0000013842 00000 n +0000013887 00000 n +0000350644 00000 n +0000683805 00000 n +0000013946 00000 n +0000014005 00000 n +0000353439 00000 n +0000683712 00000 n +0000014064 00000 n +0000014128 00000 n +0000353698 00000 n +0000683619 00000 n +0000014187 00000 n +0000014243 00000 n +0000355369 00000 n +0000683540 00000 n +0000014302 00000 n +0000014364 00000 n +0000357603 00000 n +0000683407 00000 n +0000014411 00000 n +0000014463 00000 n +0000357732 00000 n +0000683328 00000 n +0000014512 00000 n +0000014556 00000 n +0000361918 00000 n +0000683196 00000 n +0000014605 00000 n +0000014646 00000 n +0000362047 00000 n +0000683117 00000 n +0000014700 00000 n +0000014748 00000 n +0000362175 00000 n +0000683038 00000 n +0000014802 00000 n +0000014853 00000 n +0000362304 00000 n +0000682959 00000 n +0000014902 00000 n +0000014949 00000 n +0000366571 00000 n +0000682826 00000 n +0000014996 00000 n +0000015033 00000 n +0000366700 00000 n +0000682708 00000 n +0000015082 00000 n +0000015121 00000 n +0000366829 00000 n +0000682643 00000 n +0000015175 00000 n +0000015253 00000 n +0000366958 00000 n +0000682550 00000 n +0000015302 00000 n +0000015369 00000 n +0000367087 00000 n +0000682471 00000 n +0000015418 00000 n +0000015463 00000 n +0000370526 00000 n +0000682338 00000 n +0000015511 00000 n +0000015543 00000 n +0000370655 00000 n +0000682220 00000 n +0000015592 00000 n +0000015631 00000 n +0000370784 00000 n +0000682155 00000 n +0000015685 00000 n +0000015746 00000 n +0000374549 00000 n +0000682023 00000 n +0000015795 00000 n +0000015852 00000 n +0000374678 00000 n +0000681958 00000 n +0000015906 00000 n +0000015955 00000 n +0000374807 00000 n +0000681840 00000 n +0000016004 00000 n +0000016066 00000 n +0000374936 00000 n +0000681761 00000 n +0000016120 00000 n +0000016175 00000 n +0000398960 00000 n +0000681668 00000 n +0000016229 00000 n +0000016270 00000 n +0000399089 00000 n +0000681589 00000 n +0000016324 00000 n +0000016376 00000 n +0000401791 00000 n +0000681469 00000 n +0000016424 00000 n +0000016458 00000 n +0000401920 00000 n +0000681390 00000 n +0000016507 00000 n +0000016534 00000 n +0000419860 00000 n +0000681297 00000 n +0000016583 00000 n +0000016611 00000 n +0000427395 00000 n +0000681204 00000 n +0000016660 00000 n +0000016697 00000 n +0000433738 00000 n +0000681111 00000 n +0000016746 00000 n +0000016785 00000 n +0000443242 00000 n +0000681018 00000 n +0000016834 00000 n +0000016873 00000 n +0000446100 00000 n +0000680925 00000 n +0000016922 00000 n +0000016961 00000 n +0000452504 00000 n +0000680832 00000 n +0000017010 00000 n +0000017039 00000 n +0000462033 00000 n +0000680739 00000 n +0000017088 00000 n +0000017116 00000 n +0000465188 00000 n +0000680646 00000 n +0000017165 00000 n +0000017198 00000 n +0000471294 00000 n +0000680567 00000 n +0000017248 00000 n +0000017285 00000 n +0000017654 00000 n +0000017776 00000 n +0000025605 00000 n +0000017338 00000 n +0000025479 00000 n +0000025542 00000 n +0000676310 00000 n +0000650367 00000 n +0000676136 00000 n +0000677335 00000 n +0000020639 00000 n +0000020856 00000 n +0000020925 00000 n +0000020994 00000 n +0000021062 00000 n +0000021130 00000 n +0000021179 00000 n +0000021226 00000 n +0000021559 00000 n +0000021581 00000 n +0000021749 00000 n +0000021914 00000 n +0000022083 00000 n +0000022262 00000 n +0000022571 00000 n +0000022731 00000 n +0000026969 00000 n +0000026784 00000 n +0000025705 00000 n +0000026906 00000 n +0000649146 00000 n +0000622625 00000 n +0000648972 00000 n +0000621940 00000 n +0000619795 00000 n +0000621776 00000 n +0000038676 00000 n +0000030025 00000 n +0000027054 00000 n +0000038550 00000 n +0000038613 00000 n +0000030559 00000 n +0000030713 00000 n +0000030870 00000 n +0000031027 00000 n +0000031183 00000 n +0000031340 00000 n +0000031502 00000 n +0000031663 00000 n +0000031824 00000 n +0000031986 00000 n +0000032153 00000 n +0000032320 00000 n +0000032485 00000 n +0000032647 00000 n +0000032813 00000 n +0000032974 00000 n +0000033129 00000 n +0000033286 00000 n +0000033442 00000 n +0000033599 00000 n +0000033756 00000 n +0000033913 00000 n +0000034067 00000 n +0000034223 00000 n +0000034385 00000 n +0000034547 00000 n +0000034703 00000 n +0000034860 00000 n +0000035022 00000 n +0000035189 00000 n +0000035355 00000 n +0000035516 00000 n +0000035671 00000 n +0000035828 00000 n +0000035985 00000 n +0000036147 00000 n +0000036304 00000 n +0000036461 00000 n +0000036623 00000 n +0000036780 00000 n +0000036942 00000 n +0000037109 00000 n +0000037275 00000 n +0000037437 00000 n +0000037599 00000 n +0000037761 00000 n +0000037923 00000 n +0000038085 00000 n +0000038240 00000 n +0000038395 00000 n +0000052052 00000 n +0000042010 00000 n +0000038761 00000 n +0000051989 00000 n +0000619244 00000 n +0000602163 00000 n +0000619060 00000 n +0000042600 00000 n +0000042763 00000 n +0000042925 00000 n +0000043088 00000 n +0000043246 00000 n +0000043409 00000 n +0000043572 00000 n +0000043727 00000 n +0000043885 00000 n +0000044043 00000 n +0000044199 00000 n +0000044357 00000 n +0000044520 00000 n +0000044688 00000 n +0000044856 00000 n +0000045019 00000 n +0000045187 00000 n +0000045355 00000 n +0000045513 00000 n +0000045676 00000 n +0000045839 00000 n +0000046001 00000 n +0000046163 00000 n +0000046326 00000 n +0000046488 00000 n +0000046650 00000 n +0000046813 00000 n +0000046976 00000 n +0000047139 00000 n +0000047308 00000 n +0000047477 00000 n +0000047641 00000 n +0000047804 00000 n +0000047968 00000 n +0000048132 00000 n +0000048295 00000 n +0000048459 00000 n +0000048628 00000 n +0000048796 00000 n +0000048965 00000 n +0000049134 00000 n +0000049303 00000 n +0000049472 00000 n +0000049641 00000 n +0000049810 00000 n +0000049979 00000 n +0000050149 00000 n +0000050319 00000 n +0000050489 00000 n +0000050658 00000 n +0000050828 00000 n +0000050998 00000 n +0000051166 00000 n +0000051335 00000 n +0000051505 00000 n +0000051666 00000 n +0000051827 00000 n +0000065187 00000 n +0000055669 00000 n +0000052150 00000 n +0000065124 00000 n +0000056243 00000 n +0000056406 00000 n +0000056569 00000 n +0000056732 00000 n +0000056895 00000 n +0000057058 00000 n +0000057221 00000 n +0000057383 00000 n +0000057550 00000 n +0000057718 00000 n +0000057886 00000 n +0000058054 00000 n +0000058211 00000 n +0000058373 00000 n +0000058540 00000 n +0000058706 00000 n +0000058868 00000 n +0000059030 00000 n +0000059192 00000 n +0000059354 00000 n +0000059521 00000 n +0000059687 00000 n +0000059854 00000 n +0000060016 00000 n +0000060178 00000 n +0000060335 00000 n +0000060502 00000 n +0000060664 00000 n +0000060831 00000 n +0000060998 00000 n +0000601274 00000 n +0000579943 00000 n +0000601100 00000 n +0000061165 00000 n +0000061332 00000 n +0000061487 00000 n +0000061644 00000 n +0000061801 00000 n +0000061963 00000 n +0000062124 00000 n +0000062280 00000 n +0000062435 00000 n +0000062592 00000 n +0000062754 00000 n +0000062911 00000 n +0000063068 00000 n +0000063224 00000 n +0000063380 00000 n +0000063541 00000 n +0000063698 00000 n +0000063860 00000 n +0000064017 00000 n +0000064179 00000 n +0000064341 00000 n +0000064503 00000 n +0000064659 00000 n +0000064814 00000 n +0000064969 00000 n +0000067346 00000 n +0000065996 00000 n +0000065298 00000 n +0000067283 00000 n +0000066186 00000 n +0000066343 00000 n +0000066500 00000 n +0000066655 00000 n +0000066812 00000 n +0000578977 00000 n +0000559010 00000 n +0000578804 00000 n +0000066968 00000 n +0000067125 00000 n +0000070531 00000 n +0000069721 00000 n +0000067444 00000 n +0000069843 00000 n +0000069967 00000 n +0000070092 00000 n +0000070217 00000 n +0000070342 00000 n +0000070405 00000 n +0000070468 00000 n +0000558238 00000 n +0000540617 00000 n +0000558065 00000 n +0000677453 00000 n +0000075043 00000 n +0000073861 00000 n +0000070655 00000 n +0000074355 00000 n +0000074418 00000 n +0000074481 00000 n +0000074606 00000 n +0000074731 00000 n +0000074856 00000 n +0000074011 00000 n +0000074204 00000 n +0000074981 00000 n +0000320944 00000 n +0000375000 00000 n +0000079698 00000 n +0000078662 00000 n +0000075167 00000 n +0000079135 00000 n +0000079260 00000 n +0000078812 00000 n +0000078974 00000 n +0000079385 00000 n +0000079510 00000 n +0000079635 00000 n +0000095568 00000 n +0000082920 00000 n +0000082360 00000 n +0000079822 00000 n +0000082482 00000 n +0000082607 00000 n +0000082732 00000 n +0000082857 00000 n +0000086347 00000 n +0000085206 00000 n +0000083031 00000 n +0000085660 00000 n +0000085785 00000 n +0000085910 00000 n +0000086035 00000 n +0000086160 00000 n +0000085356 00000 n +0000085508 00000 n +0000086284 00000 n +0000275057 00000 n +0000087433 00000 n +0000087123 00000 n +0000086432 00000 n +0000087245 00000 n +0000087370 00000 n +0000089518 00000 n +0000088833 00000 n +0000087531 00000 n +0000088955 00000 n +0000089080 00000 n +0000089204 00000 n +0000089329 00000 n +0000089455 00000 n +0000677571 00000 n +0000092424 00000 n +0000091556 00000 n +0000089616 00000 n +0000091858 00000 n +0000091984 00000 n +0000092047 00000 n +0000092110 00000 n +0000091698 00000 n +0000092236 00000 n +0000092362 00000 n +0000256335 00000 n +0000095758 00000 n +0000095320 00000 n +0000092535 00000 n +0000095442 00000 n +0000539959 00000 n +0000528372 00000 n +0000539780 00000 n +0000095694 00000 n +0000099548 00000 n +0000099358 00000 n +0000095883 00000 n +0000099483 00000 n +0000527835 00000 n +0000518318 00000 n +0000527656 00000 n +0000103942 00000 n +0000103544 00000 n +0000099714 00000 n +0000103877 00000 n +0000103690 00000 n +0000164316 00000 n +0000106243 00000 n +0000105794 00000 n +0000104081 00000 n +0000105919 00000 n +0000106048 00000 n +0000106113 00000 n +0000106178 00000 n +0000108940 00000 n +0000111487 00000 n +0000108784 00000 n +0000106368 00000 n +0000110906 00000 n +0000111035 00000 n +0000111164 00000 n +0000110583 00000 n +0000110745 00000 n +0000517448 00000 n +0000508028 00000 n +0000517274 00000 n +0000507464 00000 n +0000498378 00000 n +0000507289 00000 n +0000111293 00000 n +0000111422 00000 n +0000677692 00000 n +0000110412 00000 n +0000110470 00000 n +0000110560 00000 n +0000205416 00000 n +0000237279 00000 n +0000116007 00000 n +0000115072 00000 n +0000111643 00000 n +0000115555 00000 n +0000115684 00000 n +0000115228 00000 n +0000115393 00000 n +0000115813 00000 n +0000115942 00000 n +0000379026 00000 n +0000119621 00000 n +0000119241 00000 n +0000116159 00000 n +0000119556 00000 n +0000119388 00000 n +0000120871 00000 n +0000120680 00000 n +0000119746 00000 n +0000120806 00000 n +0000123574 00000 n +0000122997 00000 n +0000120970 00000 n +0000123123 00000 n +0000123252 00000 n +0000123381 00000 n +0000123510 00000 n +0000126796 00000 n +0000126089 00000 n +0000123712 00000 n +0000126215 00000 n +0000126344 00000 n +0000126473 00000 n +0000126602 00000 n +0000126731 00000 n +0000131085 00000 n +0000130187 00000 n +0000126921 00000 n +0000130505 00000 n +0000130634 00000 n +0000130334 00000 n +0000130763 00000 n +0000130892 00000 n +0000131020 00000 n +0000677817 00000 n +0000316852 00000 n +0000134962 00000 n +0000134385 00000 n +0000131210 00000 n +0000134511 00000 n +0000134640 00000 n +0000134768 00000 n +0000134897 00000 n +0000138403 00000 n +0000138083 00000 n +0000135100 00000 n +0000138209 00000 n +0000138338 00000 n +0000141735 00000 n +0000140976 00000 n +0000138515 00000 n +0000141284 00000 n +0000141413 00000 n +0000141123 00000 n +0000141542 00000 n +0000141670 00000 n +0000374742 00000 n +0000144475 00000 n +0000143897 00000 n +0000141903 00000 n +0000144023 00000 n +0000144152 00000 n +0000144281 00000 n +0000144410 00000 n +0000144915 00000 n +0000144724 00000 n +0000144574 00000 n +0000144850 00000 n +0000148917 00000 n +0000148151 00000 n +0000144957 00000 n +0000148465 00000 n +0000148594 00000 n +0000148722 00000 n +0000148787 00000 n +0000148852 00000 n +0000148298 00000 n +0000677942 00000 n +0000153002 00000 n +0000153325 00000 n +0000152747 00000 n +0000149016 00000 n +0000152873 00000 n +0000153131 00000 n +0000153260 00000 n +0000157115 00000 n +0000156537 00000 n +0000153450 00000 n +0000156663 00000 n +0000156792 00000 n +0000156921 00000 n +0000157050 00000 n +0000159860 00000 n +0000161109 00000 n +0000159734 00000 n +0000157253 00000 n +0000160786 00000 n +0000160915 00000 n +0000160980 00000 n +0000161044 00000 n +0000164381 00000 n +0000163544 00000 n +0000161264 00000 n +0000163670 00000 n +0000163799 00000 n +0000163928 00000 n +0000163993 00000 n +0000164058 00000 n +0000164187 00000 n +0000169819 00000 n +0000168903 00000 n +0000164493 00000 n +0000169367 00000 n +0000169059 00000 n +0000169209 00000 n +0000169496 00000 n +0000169625 00000 n +0000169754 00000 n +0000477004 00000 n +0000173692 00000 n +0000172549 00000 n +0000169957 00000 n +0000173240 00000 n +0000173369 00000 n +0000172714 00000 n +0000172866 00000 n +0000173053 00000 n +0000173498 00000 n +0000173627 00000 n +0000678067 00000 n +0000178084 00000 n +0000177765 00000 n +0000173818 00000 n +0000177891 00000 n +0000178020 00000 n +0000181229 00000 n +0000180851 00000 n +0000178209 00000 n +0000181164 00000 n +0000180998 00000 n +0000184330 00000 n +0000184525 00000 n +0000184075 00000 n +0000181341 00000 n +0000184201 00000 n +0000184395 00000 n +0000184460 00000 n +0000187914 00000 n +0000187595 00000 n +0000184637 00000 n +0000187721 00000 n +0000187850 00000 n 0000191149 00000 n -0000194732 00000 n -0000194413 00000 n -0000191313 00000 n -0000194539 00000 n -0000194667 00000 n -0000198800 00000 n -0000198431 00000 n -0000194870 00000 n -0000198735 00000 n -0000198578 00000 n -0000270960 00000 n -0000202861 00000 n -0000202412 00000 n -0000198912 00000 n -0000202538 00000 n -0000202732 00000 n -0000202796 00000 n -0000207067 00000 n -0000206701 00000 n -0000202973 00000 n -0000207002 00000 n -0000206848 00000 n -0000212148 00000 n -0000211017 00000 n -0000207192 00000 n -0000212083 00000 n -0000211200 00000 n -0000211357 00000 n -0000211541 00000 n -0000211714 00000 n -0000211898 00000 n -0000655004 00000 n -0000279615 00000 n -0000216361 00000 n -0000216170 00000 n -0000212340 00000 n -0000216296 00000 n -0000219983 00000 n -0000219663 00000 n -0000216473 00000 n -0000219789 00000 n -0000219918 00000 n -0000223628 00000 n -0000222814 00000 n -0000220095 00000 n -0000223307 00000 n -0000222970 00000 n -0000223436 00000 n -0000223563 00000 n -0000223140 00000 n -0000286098 00000 n -0000227841 00000 n -0000227151 00000 n -0000223781 00000 n -0000227647 00000 n -0000227307 00000 n -0000227477 00000 n -0000227776 00000 n -0000346788 00000 n -0000230937 00000 n -0000230617 00000 n -0000227966 00000 n -0000230743 00000 n -0000230872 00000 n -0000234060 00000 n -0000233740 00000 n -0000231049 00000 n -0000233866 00000 n -0000655129 00000 n -0000237772 00000 n -0000237581 00000 n -0000234213 00000 n -0000237707 00000 n -0000241915 00000 n -0000241270 00000 n -0000237925 00000 n -0000241592 00000 n -0000241721 00000 n -0000241850 00000 n -0000241417 00000 n -0000245863 00000 n -0000245238 00000 n -0000242081 00000 n -0000245540 00000 n -0000245669 00000 n -0000245385 00000 n -0000245798 00000 n -0000249241 00000 n -0000248611 00000 n -0000245975 00000 n -0000248918 00000 n -0000249047 00000 n -0000249176 00000 n -0000248758 00000 n -0000253206 00000 n -0000252534 00000 n -0000249407 00000 n -0000253013 00000 n -0000252690 00000 n -0000252845 00000 n -0000256516 00000 n -0000256067 00000 n -0000253318 00000 n -0000256193 00000 n -0000256258 00000 n -0000256323 00000 n -0000256452 00000 n -0000655254 00000 n -0000261198 00000 n -0000260652 00000 n -0000256708 00000 n -0000261133 00000 n -0000260808 00000 n -0000260970 00000 n -0000474842 00000 n -0000472843 00000 n -0000474677 00000 n -0000338768 00000 n -0000265110 00000 n -0000264471 00000 n -0000261365 00000 n -0000264787 00000 n -0000264916 00000 n -0000264618 00000 n -0000265045 00000 n -0000283375 00000 n -0000267775 00000 n -0000267584 00000 n -0000265235 00000 n -0000267710 00000 n -0000271283 00000 n -0000270705 00000 n -0000267941 00000 n -0000270831 00000 n -0000271025 00000 n -0000271090 00000 n -0000274657 00000 n -0000274337 00000 n -0000271382 00000 n -0000274463 00000 n -0000274592 00000 n -0000279680 00000 n -0000279018 00000 n -0000274769 00000 n -0000279486 00000 n -0000279174 00000 n -0000279326 00000 n -0000655379 00000 n -0000283569 00000 n -0000282687 00000 n -0000279792 00000 n -0000282988 00000 n -0000283117 00000 n -0000283246 00000 n -0000282834 00000 n -0000283504 00000 n -0000286163 00000 n -0000285843 00000 n -0000283681 00000 n -0000285969 00000 n -0000287614 00000 n -0000287423 00000 n -0000286275 00000 n -0000287549 00000 n -0000289031 00000 n -0000288840 00000 n -0000287713 00000 n -0000288966 00000 n -0000291653 00000 n -0000291074 00000 n -0000289130 00000 n -0000291200 00000 n -0000291329 00000 n -0000291458 00000 n -0000291523 00000 n -0000291588 00000 n -0000295576 00000 n -0000295256 00000 n -0000291765 00000 n -0000295382 00000 n -0000295511 00000 n -0000655504 00000 n -0000301468 00000 n -0000298733 00000 n -0000295688 00000 n -0000301274 00000 n -0000301403 00000 n -0000298997 00000 n -0000299159 00000 n -0000299321 00000 n -0000299482 00000 n -0000299642 00000 n -0000299804 00000 n -0000299975 00000 n -0000300137 00000 n -0000300299 00000 n -0000300462 00000 n -0000300625 00000 n -0000300788 00000 n -0000300951 00000 n -0000301114 00000 n -0000306442 00000 n -0000304717 00000 n -0000301580 00000 n -0000306377 00000 n -0000304936 00000 n -0000305099 00000 n -0000305260 00000 n -0000305422 00000 n -0000305584 00000 n -0000305746 00000 n -0000305908 00000 n -0000306062 00000 n -0000306225 00000 n -0000311825 00000 n -0000309464 00000 n -0000306567 00000 n -0000311631 00000 n -0000309710 00000 n -0000309872 00000 n -0000310034 00000 n -0000310196 00000 n -0000310358 00000 n -0000310520 00000 n -0000310682 00000 n -0000310844 00000 n -0000310998 00000 n -0000311159 00000 n -0000311314 00000 n -0000311477 00000 n -0000316476 00000 n -0000315280 00000 n -0000311937 00000 n -0000315768 00000 n -0000315833 00000 n -0000315898 00000 n -0000316027 00000 n -0000316284 00000 n -0000315436 00000 n -0000315606 00000 n -0000316348 00000 n -0000316412 00000 n -0000320089 00000 n -0000319768 00000 n -0000316614 00000 n -0000319894 00000 n -0000319959 00000 n -0000320024 00000 n -0000323772 00000 n -0000323452 00000 n -0000320188 00000 n -0000323578 00000 n -0000323643 00000 n -0000323707 00000 n -0000655629 00000 n -0000327803 00000 n -0000327095 00000 n -0000323884 00000 n -0000327221 00000 n -0000327350 00000 n -0000327415 00000 n -0000327480 00000 n -0000327544 00000 n -0000327609 00000 n -0000327738 00000 n -0000331625 00000 n -0000330786 00000 n -0000327928 00000 n -0000330912 00000 n -0000330977 00000 n -0000331042 00000 n -0000331171 00000 n -0000331236 00000 n -0000331301 00000 n -0000331430 00000 n -0000331495 00000 n -0000331560 00000 n -0000334905 00000 n -0000334072 00000 n -0000331804 00000 n -0000334198 00000 n -0000334327 00000 n -0000334455 00000 n -0000334583 00000 n -0000334712 00000 n -0000334841 00000 n -0000338833 00000 n -0000338383 00000 n -0000335098 00000 n -0000338509 00000 n -0000338574 00000 n -0000338639 00000 n -0000340315 00000 n -0000340124 00000 n -0000338958 00000 n -0000340250 00000 n -0000342280 00000 n -0000341832 00000 n -0000340427 00000 n -0000341958 00000 n -0000342087 00000 n -0000342216 00000 n -0000655754 00000 n -0000346853 00000 n -0000345910 00000 n -0000342392 00000 n -0000346273 00000 n -0000472522 00000 n -0000463309 00000 n -0000472336 00000 n -0000346057 00000 n -0000346402 00000 n -0000346530 00000 n -0000346659 00000 n -0000347891 00000 n -0000347700 00000 n -0000347086 00000 n -0000347826 00000 n -0000348318 00000 n -0000348127 00000 n -0000347977 00000 n -0000348253 00000 n -0000351631 00000 n -0000350405 00000 n -0000348360 00000 n -0000350922 00000 n -0000351051 00000 n -0000351180 00000 n -0000351309 00000 n -0000351438 00000 n -0000351567 00000 n -0000350561 00000 n -0000350733 00000 n -0000352085 00000 n -0000351894 00000 n -0000351744 00000 n -0000352020 00000 n -0000355329 00000 n -0000354751 00000 n -0000352127 00000 n -0000354877 00000 n -0000355006 00000 n -0000355135 00000 n -0000355264 00000 n -0000655879 00000 n -0000359608 00000 n -0000358389 00000 n -0000355415 00000 n -0000358900 00000 n -0000359029 00000 n -0000359287 00000 n -0000358545 00000 n -0000358724 00000 n -0000359480 00000 n -0000359544 00000 n -0000366493 00000 n -0000362665 00000 n -0000359760 00000 n -0000362791 00000 n -0000362856 00000 n -0000362921 00000 n -0000362986 00000 n -0000363051 00000 n -0000363116 00000 n -0000363181 00000 n -0000363246 00000 n -0000363311 00000 n -0000363376 00000 n -0000363506 00000 n -0000363571 00000 n -0000363636 00000 n -0000363701 00000 n -0000363766 00000 n -0000363831 00000 n -0000363896 00000 n -0000363961 00000 n -0000364026 00000 n -0000364091 00000 n -0000364156 00000 n -0000364221 00000 n -0000364286 00000 n -0000364351 00000 n -0000364416 00000 n -0000364481 00000 n -0000364546 00000 n -0000364611 00000 n -0000364676 00000 n -0000364741 00000 n -0000364806 00000 n -0000364871 00000 n -0000364936 00000 n -0000365001 00000 n -0000365065 00000 n -0000365130 00000 n -0000365195 00000 n -0000365260 00000 n -0000365325 00000 n -0000365390 00000 n -0000365455 00000 n -0000365520 00000 n -0000365585 00000 n -0000365650 00000 n -0000365715 00000 n -0000365780 00000 n -0000365845 00000 n -0000365910 00000 n -0000365975 00000 n -0000366040 00000 n -0000366105 00000 n -0000366170 00000 n -0000366235 00000 n -0000366300 00000 n -0000366365 00000 n -0000366429 00000 n -0000373139 00000 n -0000369575 00000 n -0000366605 00000 n -0000369701 00000 n -0000369766 00000 n -0000369831 00000 n -0000369896 00000 n -0000369961 00000 n -0000370026 00000 n -0000370091 00000 n -0000370156 00000 n -0000370221 00000 n -0000370286 00000 n -0000370351 00000 n -0000370416 00000 n -0000370480 00000 n -0000370545 00000 n -0000370610 00000 n -0000370675 00000 n -0000370740 00000 n -0000370805 00000 n -0000370870 00000 n -0000370935 00000 n -0000371000 00000 n -0000371065 00000 n -0000371130 00000 n -0000371195 00000 n -0000371259 00000 n -0000371324 00000 n -0000371389 00000 n -0000371454 00000 n -0000371519 00000 n -0000371584 00000 n -0000371649 00000 n -0000371714 00000 n -0000371779 00000 n -0000371844 00000 n -0000371909 00000 n -0000371974 00000 n -0000372039 00000 n -0000372104 00000 n -0000372169 00000 n -0000372234 00000 n -0000372298 00000 n -0000372362 00000 n -0000372426 00000 n -0000372491 00000 n -0000372556 00000 n -0000372621 00000 n -0000372686 00000 n -0000372751 00000 n -0000372816 00000 n -0000372881 00000 n -0000372946 00000 n -0000373011 00000 n -0000373075 00000 n -0000379314 00000 n -0000375876 00000 n -0000373251 00000 n -0000376002 00000 n -0000376067 00000 n -0000376132 00000 n -0000376197 00000 n -0000376262 00000 n -0000376327 00000 n -0000376392 00000 n -0000376457 00000 n -0000376522 00000 n -0000376587 00000 n -0000376652 00000 n -0000376717 00000 n -0000376782 00000 n -0000376847 00000 n -0000376912 00000 n -0000376977 00000 n -0000377042 00000 n -0000377107 00000 n -0000377172 00000 n -0000377237 00000 n -0000377302 00000 n -0000377367 00000 n -0000377432 00000 n -0000377497 00000 n -0000377562 00000 n -0000377627 00000 n -0000377692 00000 n -0000377757 00000 n -0000377822 00000 n -0000377887 00000 n -0000377952 00000 n -0000378017 00000 n -0000378082 00000 n -0000378147 00000 n -0000378211 00000 n -0000378276 00000 n -0000378341 00000 n -0000378406 00000 n -0000378471 00000 n -0000378536 00000 n -0000378601 00000 n -0000378666 00000 n -0000378731 00000 n -0000378796 00000 n -0000378861 00000 n -0000378926 00000 n -0000378991 00000 n -0000379056 00000 n -0000379121 00000 n -0000379186 00000 n -0000379250 00000 n -0000383893 00000 n -0000381629 00000 n -0000379426 00000 n +0000190112 00000 n +0000188026 00000 n +0000190568 00000 n +0000190697 00000 n +0000190268 00000 n +0000190422 00000 n +0000190826 00000 n +0000190955 00000 n +0000191084 00000 n +0000192655 00000 n +0000192464 00000 n +0000191261 00000 n +0000192590 00000 n +0000678192 00000 n +0000194152 00000 n +0000193961 00000 n +0000192754 00000 n +0000194087 00000 n +0000197163 00000 n +0000196843 00000 n +0000194251 00000 n +0000196969 00000 n +0000197098 00000 n +0000201369 00000 n +0000201000 00000 n +0000197301 00000 n +0000201304 00000 n +0000201147 00000 n +0000347257 00000 n +0000205611 00000 n +0000205161 00000 n +0000201481 00000 n +0000205287 00000 n +0000205481 00000 n +0000205546 00000 n +0000209659 00000 n +0000209293 00000 n +0000205723 00000 n +0000209594 00000 n +0000209440 00000 n +0000214817 00000 n +0000213683 00000 n +0000209784 00000 n +0000214752 00000 n +0000213866 00000 n +0000214023 00000 n +0000214208 00000 n +0000214382 00000 n +0000214567 00000 n +0000678317 00000 n +0000278904 00000 n +0000219119 00000 n +0000218928 00000 n +0000215011 00000 n +0000219054 00000 n +0000222906 00000 n +0000222587 00000 n +0000219231 00000 n +0000222713 00000 n +0000222842 00000 n +0000226705 00000 n +0000225892 00000 n +0000223018 00000 n +0000226385 00000 n +0000226048 00000 n +0000226514 00000 n +0000226640 00000 n +0000226218 00000 n +0000289798 00000 n +0000230984 00000 n +0000230293 00000 n +0000226874 00000 n +0000230790 00000 n +0000230449 00000 n +0000230619 00000 n +0000230919 00000 n +0000362368 00000 n +0000234308 00000 n +0000233988 00000 n +0000231166 00000 n +0000234114 00000 n +0000234243 00000 n +0000237344 00000 n +0000237024 00000 n +0000234420 00000 n +0000237150 00000 n +0000678442 00000 n +0000241156 00000 n +0000240965 00000 n +0000237500 00000 n +0000241091 00000 n +0000245301 00000 n +0000244656 00000 n +0000241311 00000 n +0000244978 00000 n +0000245107 00000 n +0000245236 00000 n +0000244803 00000 n +0000249270 00000 n +0000248645 00000 n +0000245470 00000 n +0000248947 00000 n +0000249076 00000 n +0000248792 00000 n +0000249205 00000 n +0000252423 00000 n +0000251975 00000 n +0000249382 00000 n +0000252101 00000 n +0000252230 00000 n +0000252359 00000 n +0000256398 00000 n +0000255734 00000 n +0000252592 00000 n +0000256206 00000 n +0000255890 00000 n +0000256052 00000 n +0000260233 00000 n +0000259593 00000 n +0000256510 00000 n +0000259909 00000 n +0000259740 00000 n +0000259974 00000 n +0000260039 00000 n +0000260168 00000 n +0000678567 00000 n +0000264821 00000 n +0000264275 00000 n +0000260429 00000 n +0000264756 00000 n +0000264431 00000 n +0000264593 00000 n +0000498023 00000 n +0000496025 00000 n +0000497858 00000 n +0000343439 00000 n +0000268897 00000 n +0000268258 00000 n +0000264990 00000 n +0000268574 00000 n +0000268703 00000 n +0000268405 00000 n +0000268832 00000 n +0000287437 00000 n +0000271498 00000 n +0000271307 00000 n +0000269022 00000 n +0000271433 00000 n +0000275250 00000 n +0000274802 00000 n +0000271666 00000 n +0000274928 00000 n +0000275185 00000 n +0000278969 00000 n +0000278391 00000 n +0000275362 00000 n +0000278517 00000 n +0000278646 00000 n +0000278775 00000 n +0000283647 00000 n +0000283113 00000 n +0000279081 00000 n +0000283582 00000 n +0000283269 00000 n +0000283421 00000 n +0000678692 00000 n +0000287631 00000 n +0000286750 00000 n +0000283746 00000 n +0000287051 00000 n +0000287180 00000 n +0000287308 00000 n +0000286897 00000 n +0000287566 00000 n +0000289863 00000 n +0000289543 00000 n +0000287743 00000 n +0000289669 00000 n +0000291304 00000 n +0000291113 00000 n +0000289975 00000 n +0000291239 00000 n +0000292672 00000 n +0000292481 00000 n +0000291403 00000 n +0000292607 00000 n +0000296316 00000 n +0000295738 00000 n +0000292771 00000 n +0000295864 00000 n +0000295993 00000 n +0000296122 00000 n +0000296187 00000 n +0000296252 00000 n +0000301355 00000 n +0000299693 00000 n +0000296428 00000 n +0000301033 00000 n +0000301162 00000 n +0000301290 00000 n +0000299894 00000 n +0000300056 00000 n +0000300218 00000 n +0000300379 00000 n +0000300541 00000 n +0000300703 00000 n +0000300873 00000 n +0000678817 00000 n +0000306445 00000 n +0000304871 00000 n +0000301467 00000 n +0000306380 00000 n +0000305081 00000 n +0000305244 00000 n +0000305407 00000 n +0000305570 00000 n +0000305733 00000 n +0000305896 00000 n +0000306059 00000 n +0000306219 00000 n +0000312614 00000 n +0000309381 00000 n +0000306570 00000 n +0000312549 00000 n +0000309681 00000 n +0000309843 00000 n +0000310005 00000 n +0000310167 00000 n +0000310329 00000 n +0000310492 00000 n +0000310646 00000 n +0000310808 00000 n +0000310962 00000 n +0000311124 00000 n +0000311286 00000 n +0000311446 00000 n +0000311606 00000 n +0000311768 00000 n +0000311928 00000 n +0000312086 00000 n +0000312238 00000 n +0000312400 00000 n +0000317047 00000 n +0000316250 00000 n +0000312739 00000 n +0000316723 00000 n +0000316406 00000 n +0000316569 00000 n +0000316917 00000 n +0000316982 00000 n +0000321396 00000 n +0000320200 00000 n +0000317186 00000 n +0000320686 00000 n +0000320815 00000 n +0000321071 00000 n +0000320356 00000 n +0000320525 00000 n +0000321136 00000 n +0000321201 00000 n +0000321266 00000 n +0000321331 00000 n +0000324694 00000 n +0000324503 00000 n +0000321535 00000 n +0000324629 00000 n +0000328655 00000 n +0000328075 00000 n +0000324780 00000 n +0000328201 00000 n +0000328266 00000 n +0000328331 00000 n +0000328460 00000 n +0000328525 00000 n +0000328590 00000 n +0000678942 00000 n +0000332590 00000 n +0000331752 00000 n +0000328780 00000 n +0000331878 00000 n +0000331943 00000 n +0000332008 00000 n +0000332137 00000 n +0000332202 00000 n +0000332266 00000 n +0000332395 00000 n +0000332460 00000 n +0000332525 00000 n +0000336099 00000 n +0000335394 00000 n +0000332715 00000 n +0000335520 00000 n +0000335649 00000 n +0000335713 00000 n +0000335778 00000 n +0000335907 00000 n +0000336034 00000 n +0000339304 00000 n +0000338597 00000 n +0000336309 00000 n +0000338723 00000 n +0000338852 00000 n +0000338981 00000 n +0000339110 00000 n +0000339175 00000 n +0000339240 00000 n +0000343761 00000 n +0000343184 00000 n +0000339487 00000 n +0000343310 00000 n +0000343568 00000 n +0000343633 00000 n +0000343697 00000 n +0000347451 00000 n +0000346822 00000 n +0000343886 00000 n +0000347129 00000 n +0000346969 00000 n +0000347386 00000 n +0000350903 00000 n +0000350453 00000 n +0000347563 00000 n +0000350579 00000 n +0000350708 00000 n +0000350773 00000 n +0000350838 00000 n +0000679067 00000 n +0000353956 00000 n +0000353248 00000 n +0000351015 00000 n +0000353374 00000 n +0000353503 00000 n +0000353568 00000 n +0000353633 00000 n +0000353761 00000 n +0000353826 00000 n +0000353891 00000 n +0000355498 00000 n +0000355178 00000 n +0000354068 00000 n +0000355304 00000 n +0000495744 00000 n +0000488460 00000 n +0000495564 00000 n +0000355433 00000 n +0000355965 00000 n +0000355774 00000 n +0000355624 00000 n +0000355900 00000 n +0000357860 00000 n +0000357412 00000 n +0000356007 00000 n +0000357538 00000 n +0000357667 00000 n +0000357796 00000 n +0000362433 00000 n +0000361490 00000 n +0000357972 00000 n +0000361853 00000 n +0000488139 00000 n +0000478926 00000 n +0000487953 00000 n +0000361637 00000 n +0000361982 00000 n +0000362110 00000 n +0000362239 00000 n +0000363475 00000 n +0000363284 00000 n +0000362670 00000 n +0000363410 00000 n +0000679192 00000 n +0000363902 00000 n +0000363711 00000 n +0000363561 00000 n +0000363837 00000 n +0000367215 00000 n +0000365989 00000 n +0000363944 00000 n +0000366506 00000 n +0000366635 00000 n +0000366764 00000 n +0000366893 00000 n +0000367022 00000 n +0000367151 00000 n +0000366145 00000 n +0000366317 00000 n +0000367669 00000 n +0000367478 00000 n +0000367328 00000 n +0000367604 00000 n +0000370913 00000 n +0000370335 00000 n +0000367711 00000 n +0000370461 00000 n +0000370590 00000 n +0000370719 00000 n +0000370848 00000 n +0000375192 00000 n +0000373973 00000 n +0000370999 00000 n +0000374484 00000 n +0000374613 00000 n +0000374871 00000 n +0000374129 00000 n +0000374308 00000 n +0000375064 00000 n +0000375128 00000 n +0000382078 00000 n +0000378250 00000 n +0000375345 00000 n +0000378376 00000 n +0000378441 00000 n +0000378506 00000 n +0000378571 00000 n +0000378636 00000 n +0000378701 00000 n +0000378766 00000 n +0000378831 00000 n +0000378896 00000 n +0000378961 00000 n +0000379091 00000 n +0000379156 00000 n +0000379221 00000 n +0000379286 00000 n +0000379351 00000 n +0000379416 00000 n +0000379481 00000 n +0000379546 00000 n +0000379611 00000 n +0000379676 00000 n +0000379741 00000 n +0000379806 00000 n +0000379871 00000 n +0000379936 00000 n +0000380001 00000 n +0000380066 00000 n +0000380131 00000 n +0000380196 00000 n +0000380261 00000 n +0000380326 00000 n +0000380391 00000 n +0000380456 00000 n +0000380521 00000 n +0000380586 00000 n +0000380650 00000 n +0000380715 00000 n +0000380780 00000 n +0000380845 00000 n +0000380910 00000 n +0000380975 00000 n +0000381040 00000 n +0000381105 00000 n +0000381170 00000 n +0000381235 00000 n +0000381300 00000 n +0000381365 00000 n +0000381430 00000 n +0000381495 00000 n +0000381560 00000 n +0000381625 00000 n +0000381690 00000 n 0000381755 00000 n 0000381820 00000 n 0000381885 00000 n 0000381950 00000 n -0000382015 00000 n -0000382080 00000 n -0000382145 00000 n -0000382210 00000 n -0000382275 00000 n -0000382340 00000 n -0000382405 00000 n -0000382470 00000 n -0000382535 00000 n -0000382600 00000 n -0000382662 00000 n -0000382726 00000 n -0000382791 00000 n -0000382855 00000 n -0000382920 00000 n -0000382985 00000 n -0000383050 00000 n -0000383115 00000 n -0000383180 00000 n -0000383245 00000 n -0000383310 00000 n -0000383439 00000 n -0000383568 00000 n -0000383633 00000 n -0000383698 00000 n -0000383763 00000 n -0000383828 00000 n -0000386660 00000 n -0000386016 00000 n -0000384018 00000 n -0000386142 00000 n -0000386271 00000 n -0000386400 00000 n -0000386465 00000 n -0000386530 00000 n -0000386595 00000 n -0000656004 00000 n -0000391145 00000 n -0000390824 00000 n -0000386772 00000 n -0000390950 00000 n -0000391015 00000 n -0000391080 00000 n -0000394395 00000 n -0000394139 00000 n -0000391297 00000 n -0000394265 00000 n -0000394330 00000 n -0000397643 00000 n -0000397452 00000 n -0000394533 00000 n -0000397578 00000 n -0000401422 00000 n -0000401166 00000 n -0000397768 00000 n -0000401292 00000 n -0000401357 00000 n -0000404596 00000 n -0000403821 00000 n -0000401560 00000 n -0000403947 00000 n -0000404012 00000 n -0000404077 00000 n -0000404142 00000 n -0000404207 00000 n -0000404336 00000 n -0000404401 00000 n -0000404466 00000 n -0000404531 00000 n -0000409068 00000 n -0000408877 00000 n -0000404734 00000 n -0000409003 00000 n -0000656129 00000 n -0000412197 00000 n -0000411424 00000 n -0000409206 00000 n -0000411550 00000 n -0000411615 00000 n -0000411680 00000 n -0000411744 00000 n -0000411873 00000 n -0000411938 00000 n -0000412002 00000 n -0000412067 00000 n -0000412132 00000 n -0000415613 00000 n -0000415357 00000 n -0000412335 00000 n -0000415483 00000 n -0000415548 00000 n -0000418473 00000 n -0000417763 00000 n -0000415751 00000 n -0000417889 00000 n -0000417954 00000 n -0000418019 00000 n -0000418084 00000 n -0000418213 00000 n -0000418278 00000 n -0000418343 00000 n -0000418408 00000 n -0000422152 00000 n -0000421896 00000 n -0000418624 00000 n -0000422022 00000 n -0000422087 00000 n -0000425589 00000 n -0000425333 00000 n -0000422277 00000 n -0000425459 00000 n -0000425524 00000 n -0000428038 00000 n +0000382014 00000 n +0000679317 00000 n +0000388724 00000 n +0000385160 00000 n +0000382190 00000 n +0000385286 00000 n +0000385351 00000 n +0000385416 00000 n +0000385481 00000 n +0000385546 00000 n +0000385611 00000 n +0000385676 00000 n +0000385741 00000 n +0000385806 00000 n +0000385871 00000 n +0000385936 00000 n +0000386001 00000 n +0000386065 00000 n +0000386130 00000 n +0000386195 00000 n +0000386260 00000 n +0000386325 00000 n +0000386390 00000 n +0000386455 00000 n +0000386520 00000 n +0000386585 00000 n +0000386650 00000 n +0000386715 00000 n +0000386780 00000 n +0000386844 00000 n +0000386909 00000 n +0000386974 00000 n +0000387039 00000 n +0000387104 00000 n +0000387169 00000 n +0000387234 00000 n +0000387299 00000 n +0000387364 00000 n +0000387429 00000 n +0000387494 00000 n +0000387559 00000 n +0000387624 00000 n +0000387689 00000 n +0000387754 00000 n +0000387819 00000 n +0000387883 00000 n +0000387947 00000 n +0000388011 00000 n +0000388076 00000 n +0000388141 00000 n +0000388206 00000 n +0000388271 00000 n +0000388336 00000 n +0000388401 00000 n +0000388466 00000 n +0000388531 00000 n +0000388596 00000 n +0000388660 00000 n +0000394900 00000 n +0000391462 00000 n +0000388836 00000 n +0000391588 00000 n +0000391653 00000 n +0000391718 00000 n +0000391783 00000 n +0000391848 00000 n +0000391913 00000 n +0000391978 00000 n +0000392043 00000 n +0000392108 00000 n +0000392173 00000 n +0000392238 00000 n +0000392303 00000 n +0000392368 00000 n +0000392433 00000 n +0000392498 00000 n +0000392563 00000 n +0000392628 00000 n +0000392693 00000 n +0000392758 00000 n +0000392823 00000 n +0000392888 00000 n +0000392953 00000 n +0000393018 00000 n +0000393083 00000 n +0000393148 00000 n +0000393213 00000 n +0000393278 00000 n +0000393343 00000 n +0000393408 00000 n +0000393473 00000 n +0000393538 00000 n +0000393603 00000 n +0000393668 00000 n +0000393733 00000 n +0000393797 00000 n +0000393862 00000 n +0000393927 00000 n +0000393992 00000 n +0000394057 00000 n +0000394122 00000 n +0000394187 00000 n +0000394252 00000 n +0000394317 00000 n +0000394382 00000 n +0000394447 00000 n +0000394512 00000 n +0000394577 00000 n +0000394642 00000 n +0000394707 00000 n +0000394772 00000 n +0000394836 00000 n +0000399478 00000 n +0000397214 00000 n +0000395012 00000 n +0000397340 00000 n +0000397405 00000 n +0000397470 00000 n +0000397535 00000 n +0000397600 00000 n +0000397665 00000 n +0000397730 00000 n +0000397795 00000 n +0000397860 00000 n +0000397925 00000 n +0000397990 00000 n +0000398055 00000 n +0000398120 00000 n +0000398185 00000 n +0000398247 00000 n +0000398311 00000 n +0000398376 00000 n +0000398440 00000 n +0000398505 00000 n +0000398570 00000 n +0000398635 00000 n +0000398700 00000 n +0000398765 00000 n +0000398830 00000 n +0000398895 00000 n +0000399024 00000 n +0000399153 00000 n +0000399218 00000 n +0000399283 00000 n +0000399348 00000 n +0000399413 00000 n +0000402244 00000 n +0000401600 00000 n +0000399603 00000 n +0000401726 00000 n +0000401855 00000 n +0000401984 00000 n +0000402049 00000 n +0000402114 00000 n +0000402179 00000 n +0000406729 00000 n +0000406408 00000 n +0000402357 00000 n +0000406534 00000 n +0000406599 00000 n +0000406664 00000 n +0000409980 00000 n +0000409724 00000 n +0000406882 00000 n +0000409850 00000 n +0000409915 00000 n +0000679442 00000 n +0000413229 00000 n +0000413038 00000 n +0000410119 00000 n +0000413164 00000 n +0000417009 00000 n +0000416753 00000 n +0000413355 00000 n +0000416879 00000 n +0000416944 00000 n +0000420184 00000 n +0000419409 00000 n +0000417148 00000 n +0000419535 00000 n +0000419600 00000 n +0000419665 00000 n +0000419730 00000 n +0000419795 00000 n +0000419924 00000 n +0000419989 00000 n +0000420054 00000 n +0000420119 00000 n +0000424656 00000 n +0000424465 00000 n +0000420323 00000 n +0000424591 00000 n +0000427783 00000 n +0000427010 00000 n +0000424795 00000 n +0000427136 00000 n +0000427201 00000 n +0000427266 00000 n 0000427330 00000 n -0000425727 00000 n -0000427456 00000 n -0000427521 00000 n -0000427586 00000 n -0000427713 00000 n -0000427778 00000 n -0000427843 00000 n -0000427908 00000 n -0000427973 00000 n -0000656254 00000 n -0000430831 00000 n -0000430122 00000 n -0000428189 00000 n -0000430248 00000 n -0000430313 00000 n -0000430378 00000 n -0000430442 00000 n -0000430571 00000 n -0000430636 00000 n -0000430701 00000 n -0000430766 00000 n -0000434008 00000 n -0000433752 00000 n -0000430969 00000 n -0000433878 00000 n -0000433943 00000 n -0000437165 00000 n -0000436525 00000 n -0000434133 00000 n -0000436651 00000 n -0000436716 00000 n -0000436781 00000 n -0000436845 00000 n -0000436974 00000 n -0000437037 00000 n -0000437101 00000 n -0000440466 00000 n -0000440145 00000 n -0000437316 00000 n -0000440271 00000 n -0000440336 00000 n -0000440401 00000 n -0000443487 00000 n -0000443103 00000 n -0000440645 00000 n -0000443229 00000 n -0000443294 00000 n -0000443359 00000 n -0000443424 00000 n -0000446814 00000 n -0000446105 00000 n -0000443706 00000 n -0000446231 00000 n -0000446296 00000 n -0000446361 00000 n -0000446490 00000 n -0000446555 00000 n -0000446619 00000 n -0000446684 00000 n -0000446749 00000 n -0000656379 00000 n -0000449833 00000 n -0000449190 00000 n -0000446978 00000 n -0000449316 00000 n -0000449381 00000 n -0000449446 00000 n -0000449511 00000 n -0000449639 00000 n -0000449704 00000 n -0000449769 00000 n -0000453300 00000 n -0000452979 00000 n -0000449997 00000 n -0000453105 00000 n -0000453170 00000 n -0000453235 00000 n -0000455872 00000 n -0000455294 00000 n -0000453425 00000 n -0000455420 00000 n -0000455485 00000 n -0000455550 00000 n -0000455615 00000 n -0000455744 00000 n -0000455808 00000 n -0000459672 00000 n -0000459287 00000 n -0000456010 00000 n -0000459413 00000 n -0000459478 00000 n -0000459543 00000 n -0000459608 00000 n -0000461236 00000 n -0000460852 00000 n -0000459810 00000 n -0000460978 00000 n -0000461043 00000 n -0000461106 00000 n -0000461171 00000 n -0000461420 00000 n -0000472764 00000 n -0000475089 00000 n -0000475058 00000 n -0000484577 00000 n -0000494633 00000 n -0000504871 00000 n -0000517073 00000 n -0000535422 00000 n -0000557511 00000 n -0000578521 00000 n -0000596339 00000 n -0000599169 00000 n -0000598939 00000 n -0000626427 00000 n -0000653536 00000 n -0000656504 00000 n -0000656627 00000 n -0000656753 00000 n -0000656879 00000 n -0000656969 00000 n -0000657061 00000 n -0000672352 00000 n -0000689662 00000 n -0000689703 00000 n -0000689743 00000 n -0000689877 00000 n +0000427459 00000 n +0000427524 00000 n +0000427588 00000 n +0000427653 00000 n +0000427718 00000 n +0000431200 00000 n +0000430944 00000 n +0000427923 00000 n +0000431070 00000 n +0000431135 00000 n +0000679567 00000 n +0000434062 00000 n +0000433352 00000 n +0000431339 00000 n +0000433478 00000 n +0000433543 00000 n +0000433608 00000 n +0000433673 00000 n +0000433802 00000 n +0000433867 00000 n +0000433932 00000 n +0000433997 00000 n +0000437742 00000 n +0000437486 00000 n +0000434214 00000 n +0000437612 00000 n +0000437677 00000 n +0000441181 00000 n +0000440925 00000 n +0000437868 00000 n +0000441051 00000 n +0000441116 00000 n +0000443631 00000 n +0000442923 00000 n +0000441320 00000 n +0000443049 00000 n +0000443114 00000 n +0000443179 00000 n +0000443306 00000 n +0000443371 00000 n +0000443436 00000 n +0000443501 00000 n +0000443566 00000 n +0000446424 00000 n +0000445715 00000 n +0000443784 00000 n +0000445841 00000 n +0000445906 00000 n +0000445971 00000 n +0000446035 00000 n +0000446164 00000 n +0000446229 00000 n +0000446294 00000 n +0000446359 00000 n +0000449602 00000 n +0000449346 00000 n +0000446563 00000 n +0000449472 00000 n +0000449537 00000 n +0000679692 00000 n +0000452759 00000 n +0000452119 00000 n +0000449728 00000 n +0000452245 00000 n +0000452310 00000 n +0000452375 00000 n +0000452439 00000 n +0000452568 00000 n +0000452631 00000 n +0000452695 00000 n +0000456062 00000 n +0000455741 00000 n +0000452912 00000 n +0000455867 00000 n +0000455932 00000 n +0000455997 00000 n +0000459089 00000 n +0000458705 00000 n +0000456245 00000 n +0000458831 00000 n +0000458896 00000 n +0000458961 00000 n +0000459026 00000 n +0000462421 00000 n +0000461712 00000 n +0000459313 00000 n +0000461838 00000 n +0000461903 00000 n +0000461968 00000 n +0000462097 00000 n +0000462162 00000 n +0000462226 00000 n +0000462291 00000 n +0000462356 00000 n +0000465446 00000 n +0000464803 00000 n +0000462587 00000 n +0000464929 00000 n +0000464994 00000 n +0000465059 00000 n +0000465124 00000 n +0000465252 00000 n +0000465317 00000 n +0000465382 00000 n +0000468914 00000 n +0000468593 00000 n +0000465612 00000 n +0000468719 00000 n +0000468784 00000 n +0000468849 00000 n +0000679817 00000 n +0000471486 00000 n +0000470908 00000 n +0000469040 00000 n +0000471034 00000 n +0000471099 00000 n +0000471164 00000 n +0000471229 00000 n +0000471358 00000 n +0000471422 00000 n +0000475286 00000 n +0000474901 00000 n +0000471624 00000 n +0000475027 00000 n +0000475092 00000 n +0000475157 00000 n +0000475222 00000 n +0000476852 00000 n +0000476468 00000 n +0000475426 00000 n +0000476594 00000 n +0000476659 00000 n +0000476722 00000 n +0000476787 00000 n +0000477037 00000 n +0000488381 00000 n +0000495970 00000 n +0000498270 00000 n +0000498239 00000 n +0000507763 00000 n +0000517876 00000 n +0000528121 00000 n +0000540330 00000 n +0000558679 00000 n +0000579558 00000 n +0000601701 00000 n +0000619596 00000 n +0000622427 00000 n +0000622197 00000 n +0000649734 00000 n +0000676845 00000 n +0000679924 00000 n +0000680047 00000 n +0000680173 00000 n +0000680299 00000 n +0000680398 00000 n +0000680490 00000 n +0000696547 00000 n +0000714481 00000 n +0000714522 00000 n +0000714562 00000 n +0000714696 00000 n trailer << -/Size 1959 -/Root 1957 0 R -/Info 1958 0 R -/ID [<37F82A89388E4C9FB25FD9CE610A28FF> <37F82A89388E4C9FB25FD9CE610A28FF>] +/Size 2035 +/Root 2033 0 R +/Info 2034 0 R +/ID [<12041F55A50724DE57B7F83DE999224F> <12041F55A50724DE57B7F83DE999224F>] >> startxref -690141 +714954 %%EOF diff --git a/doc/arm/man.dig.html b/doc/arm/man.dig.html index 9041168d..2a482f70 100644 --- a/doc/arm/man.dig.html +++ b/doc/arm/man.dig.html @@ -14,7 +14,7 @@ - OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR - PERFORMANCE OF THIS SOFTWARE. --> - + @@ -52,7 +52,7 @@

dig [global-queryopt...] [query...]

-

DESCRIPTION

+

DESCRIPTION

dig (domain information groper) is a flexible tool for interrogating DNS name servers. It performs DNS lookups and @@ -98,7 +98,7 @@

-

SIMPLE USAGE

+

SIMPLE USAGE

A typical invocation of dig looks like:

@@ -144,7 +144,7 @@

-

OPTIONS

+

OPTIONS

The -b option sets the source IP address of the query to address. This must be a valid @@ -244,7 +244,7 @@

-

QUERY OPTIONS

+

QUERY OPTIONS

dig provides a number of query options which affect the way in which lookups are made and the results displayed. Some of @@ -563,7 +563,7 @@

-

MULTIPLE QUERIES

+

MULTIPLE QUERIES

The BIND 9 implementation of dig supports @@ -609,7 +609,7 @@ dig +qr www.isc.org any -x 127.0.0.1 isc.org ns +noqr

-

IDN SUPPORT

+

IDN SUPPORT

If dig has been built with IDN (internationalized domain name) support, it can accept and display non-ASCII domain names. @@ -623,14 +623,14 @@ dig +qr www.isc.org any -x 127.0.0.1 isc.org ns +noqr

-

FILES

+

FILES

/etc/resolv.conf

${HOME}/.digrc

-

SEE ALSO

+

SEE ALSO

host(1), named(8), dnssec-keygen(8), @@ -638,7 +638,7 @@ dig +qr www.isc.org any -x 127.0.0.1 isc.org ns +noqr

-

BUGS

+

BUGS

There are probably too many query options.

diff --git a/doc/arm/man.dnssec-keygen.html b/doc/arm/man.dnssec-keygen.html index e56ec780..5d93e206 100644 --- a/doc/arm/man.dnssec-keygen.html +++ b/doc/arm/man.dnssec-keygen.html @@ -14,7 +14,7 @@ - OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR - PERFORMANCE OF THIS SOFTWARE. --> - + @@ -50,7 +50,7 @@

dnssec-keygen {-a algorithm} {-b keysize} {-n nametype} [-c class] [-e] [-f flag] [-g generator] [-h] [-k] [-p protocol] [-r randomdev] [-s strength] [-t type] [-v level] {name}

-

DESCRIPTION

+

DESCRIPTION

dnssec-keygen generates keys for DNSSEC (Secure DNS), as defined in RFC 2535 and RFC 4034. It can also generate keys for use with @@ -58,7 +58,7 @@

-

OPTIONS

+

OPTIONS

-a algorithm
@@ -166,7 +166,7 @@
-

GENERATED KEYS

+

GENERATED KEYS

When dnssec-keygen completes successfully, @@ -212,7 +212,7 @@

-

EXAMPLE

+

EXAMPLE

To generate a 768-bit DSA key for the domain example.com, the following command would be @@ -233,7 +233,7 @@

-

SEE ALSO

+

SEE ALSO

dnssec-signzone(8), BIND 9 Administrator Reference Manual, RFC 2535, @@ -242,7 +242,7 @@

-

AUTHOR

+

AUTHOR

Internet Systems Consortium

diff --git a/doc/arm/man.dnssec-signzone.html b/doc/arm/man.dnssec-signzone.html index cbeda9e1..13d14c7e 100644 --- a/doc/arm/man.dnssec-signzone.html +++ b/doc/arm/man.dnssec-signzone.html @@ -14,7 +14,7 @@ - OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR - PERFORMANCE OF THIS SOFTWARE. --> - + @@ -50,7 +50,7 @@

dnssec-signzone [-a] [-c class] [-d directory] [-e end-time] [-f output-file] [-g] [-h] [-k key] [-l domain] [-i interval] [-I input-format] [-j jitter] [-N soa-serial-format] [-o origin] [-O output-format] [-p] [-r randomdev] [-s start-time] [-t] [-v level] [-z] {zonefile} [key...]

-

DESCRIPTION

+

DESCRIPTION

dnssec-signzone signs a zone. It generates NSEC and RRSIG records and produces a signed version of the @@ -61,7 +61,7 @@

-

OPTIONS

+

OPTIONS

-a

@@ -259,7 +259,7 @@

-

EXAMPLE

+

EXAMPLE

The following command signs the example.com zone with the DSA key generated by dnssec-keygen @@ -288,14 +288,14 @@ db.example.com.signed %

-

SEE ALSO

+

SEE ALSO

dnssec-keygen(8), BIND 9 Administrator Reference Manual, RFC 2535.

-

AUTHOR

+

AUTHOR

Internet Systems Consortium

diff --git a/doc/arm/man.host.html b/doc/arm/man.host.html index 3dfaeb72..cfb95fb3 100644 --- a/doc/arm/man.host.html +++ b/doc/arm/man.host.html @@ -14,7 +14,7 @@ - OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR - PERFORMANCE OF THIS SOFTWARE. --> - + @@ -50,7 +50,7 @@

host [-aCdlnrsTwv] [-c class] [-N ndots] [-R number] [-t type] [-W wait] [-m flag] [-4] [-6] {name} [server]

-

DESCRIPTION

+

DESCRIPTION

host is a simple utility for performing DNS lookups. It is normally used to convert names to IP addresses and vice versa. @@ -166,7 +166,7 @@ NS, SOA, SIG, KEY, AXFR, etc. When no query type is specified, host automatically selects an appropriate query - type. By default it looks for A records, but if the + type. By default it looks for A, AAAA, and MX records, but if the -C option was given, queries will be made for SOA records, and if name is a dotted-decimal IPv4 @@ -202,7 +202,7 @@

-

IDN SUPPORT

+

IDN SUPPORT

If host has been built with IDN (internationalized domain name) support, it can accept and display non-ASCII domain names. @@ -216,12 +216,12 @@

-

FILES

+

FILES

/etc/resolv.conf

-

SEE ALSO

+

SEE ALSO

dig(1), named(8).

diff --git a/doc/arm/man.named-checkconf.html b/doc/arm/man.named-checkconf.html index 9beb3b41..f003c9fc 100644 --- a/doc/arm/man.named-checkconf.html +++ b/doc/arm/man.named-checkconf.html @@ -14,7 +14,7 @@ - OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR - PERFORMANCE OF THIS SOFTWARE. --> - + @@ -50,14 +50,14 @@

named-checkconf [-h] [-v] [-j] [-t directory] {filename} [-z]

-

DESCRIPTION

+

DESCRIPTION

named-checkconf checks the syntax, but not the semantics, of a named configuration file.

-

OPTIONS

+

OPTIONS

-h

@@ -92,21 +92,21 @@

-

RETURN VALUES

+

RETURN VALUES

named-checkconf returns an exit status of 1 if errors were detected and 0 otherwise.

-

SEE ALSO

+

SEE ALSO

named(8), named-checkzone(8), BIND 9 Administrator Reference Manual.

-

AUTHOR

+

AUTHOR

Internet Systems Consortium

diff --git a/doc/arm/man.named-checkzone.html b/doc/arm/man.named-checkzone.html index bdbc2d91..0fcdafce 100644 --- a/doc/arm/man.named-checkzone.html +++ b/doc/arm/man.named-checkzone.html @@ -14,7 +14,7 @@ - OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR - PERFORMANCE OF THIS SOFTWARE. --> - + @@ -51,7 +51,7 @@

named-compilezone [-d] [-j] [-q] [-v] [-c class] [-C mode] [-f format] [-F format] [-i mode] [-k mode] [-m mode] [-n mode] [-o filename] [-s style] [-t directory] [-w directory] [-D] [-W mode] {zonename} {filename}

-

DESCRIPTION

+

DESCRIPTION

named-checkzone checks the syntax and integrity of a zone file. It performs the same checks as named does when loading a @@ -71,7 +71,7 @@

-

OPTIONS

+

OPTIONS

-d

@@ -257,14 +257,14 @@

-

RETURN VALUES

+

RETURN VALUES

named-checkzone returns an exit status of 1 if errors were detected and 0 otherwise.

-

SEE ALSO

+

SEE ALSO

named(8), named-checkconf(8), RFC 1035, @@ -272,7 +272,7 @@

-

AUTHOR

+

AUTHOR

Internet Systems Consortium

diff --git a/doc/arm/man.named.html b/doc/arm/man.named.html index b33b06ac..fa157fab 100644 --- a/doc/arm/man.named.html +++ b/doc/arm/man.named.html @@ -14,7 +14,7 @@ - OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR - PERFORMANCE OF THIS SOFTWARE. --> - + @@ -50,7 +50,7 @@

named [-4] [-6] [-c config-file] [-d debug-level] [-f] [-g] [-m flag] [-n #cpus] [-p port] [-s] [-t directory] [-u user] [-v] [-x cache-file]

-

DESCRIPTION

+

DESCRIPTION

named is a Domain Name System (DNS) server, part of the BIND 9 distribution from ISC. For more @@ -65,7 +65,7 @@

-

OPTIONS

+

OPTIONS

-4

@@ -209,7 +209,7 @@

-

SIGNALS

+

SIGNALS

In routine operation, signals should not be used to control the nameserver; rndc should be used @@ -230,7 +230,7 @@

-

CONFIGURATION

+

CONFIGURATION

The named configuration file is too complex to describe in detail here. A complete description is provided @@ -239,7 +239,7 @@

-

FILES

+

FILES

/etc/named.conf

@@ -252,7 +252,7 @@

-

SEE ALSO

+

SEE ALSO

RFC 1033, RFC 1034, RFC 1035, @@ -265,7 +265,7 @@

-

AUTHOR

+

AUTHOR

Internet Systems Consortium

diff --git a/doc/arm/man.rndc-confgen.html b/doc/arm/man.rndc-confgen.html index df5aea85..de4413a4 100644 --- a/doc/arm/man.rndc-confgen.html +++ b/doc/arm/man.rndc-confgen.html @@ -14,7 +14,7 @@ - OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR - PERFORMANCE OF THIS SOFTWARE. --> - + @@ -48,7 +48,7 @@

rndc-confgen [-a] [-b keysize] [-c keyfile] [-h] [-k keyname] [-p port] [-r randomfile] [-s address] [-t chrootdir] [-u user]

-

DESCRIPTION

+

DESCRIPTION

rndc-confgen generates configuration files for rndc. It can be used as a @@ -64,7 +64,7 @@

-

OPTIONS

+

OPTIONS

-a
@@ -171,7 +171,7 @@
-

EXAMPLES

+

EXAMPLES

To allow rndc to be used with no manual configuration, run @@ -188,7 +188,7 @@

-

SEE ALSO

+

SEE ALSO

rndc(8), rndc.conf(5), named(8), @@ -196,7 +196,7 @@

-

AUTHOR

+

AUTHOR

Internet Systems Consortium

diff --git a/doc/arm/man.rndc.conf.html b/doc/arm/man.rndc.conf.html index cc8fedba..2c0b3307 100644 --- a/doc/arm/man.rndc.conf.html +++ b/doc/arm/man.rndc.conf.html @@ -14,7 +14,7 @@ - OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR - PERFORMANCE OF THIS SOFTWARE. --> - + @@ -50,7 +50,7 @@

rndc.conf

-

DESCRIPTION

+

DESCRIPTION

rndc.conf is the configuration file for rndc, the BIND 9 name server control utility. This file has a similar structure and syntax to @@ -135,7 +135,7 @@

-

EXAMPLE

+

EXAMPLE

       options {
         default-server  localhost;
@@ -209,7 +209,7 @@
     

-

NAME SERVER CONFIGURATION

+

NAME SERVER CONFIGURATION

The name server must be configured to accept rndc connections and to recognize the key specified in the rndc.conf @@ -219,7 +219,7 @@

-

SEE ALSO

+

SEE ALSO

rndc(8), rndc-confgen(8), mmencode(1), @@ -227,7 +227,7 @@

-

AUTHOR

+

AUTHOR

Internet Systems Consortium

diff --git a/doc/arm/man.rndc.html b/doc/arm/man.rndc.html index 5b422372..3153828f 100644 --- a/doc/arm/man.rndc.html +++ b/doc/arm/man.rndc.html @@ -14,7 +14,7 @@ - OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR - PERFORMANCE OF THIS SOFTWARE. --> - + @@ -50,7 +50,7 @@

rndc [-b source-address] [-c config-file] [-k key-file] [-s server] [-p port] [-V] [-y key_id] {command}

-

DESCRIPTION

+

DESCRIPTION

rndc controls the operation of a name server. It supersedes the ndc utility @@ -79,7 +79,7 @@

-

OPTIONS

+

OPTIONS

-b source-address

@@ -151,7 +151,7 @@

-

LIMITATIONS

+

LIMITATIONS

rndc does not yet support all the commands of the BIND 8 ndc utility. @@ -165,7 +165,7 @@

-

SEE ALSO

+

SEE ALSO

rndc.conf(5), rndc-confgen(8), named(8), @@ -175,7 +175,7 @@

-

AUTHOR

+

AUTHOR

Internet Systems Consortium

diff --git a/doc/misc/migration b/doc/misc/migration index d9dca134..d8bdc1f7 100644 --- a/doc/misc/migration +++ b/doc/misc/migration @@ -1,4 +1,4 @@ -Copyright (C) 2004, 2007 Internet Systems Consortium, Inc. ("ISC") +Copyright (C) 2004, 2007, 2008 Internet Systems Consortium, Inc. ("ISC") Copyright (C) 2000, 2001, 2003 Internet Software Consortium. See COPYRIGHT in the source root or http://isc.org/copyright.html for terms. @@ -26,6 +26,16 @@ understand the many-answers zone transfer format (e.g., BIND 4.9.5 or older) you need to explicitly specify "transfer-format one-answer;" in either the options block or a server statement. +BIND 9.4 onwards implements "allow-query-cache". The "allow-query" +option is no longer used to specify access to the cache. The +"allow-query" option continues to specify which hosts are allowed +to ask ordinary DNS questions. The new "allow-query-cache" option +is used to specify which hosts are allowed to get answers from the +cache. Since BIND 9.4.1, if "allow-query-cache" is not set then +"allow-recursion" is used if it is set, otherwise "allow-query" is +used if it is set, otherwise the default localnets and localhost +is used. + 1.2. Handling of Configuration File Errors In BIND 9, named refuses to start if it detects an error in @@ -254,4 +264,4 @@ necessary, the umask should be set explicitly in the script used to start the named process. -$Id: migration,v 1.48 2007/08/23 23:46:43 tbox Exp $ +$Id: migration,v 1.48.94.1 2008/03/18 16:02:36 jreed Exp $ diff --git a/doc/misc/options b/doc/misc/options index 818d852c..b18b4326 100644 --- a/doc/misc/options +++ b/doc/misc/options @@ -24,7 +24,8 @@ key { logging { category { ; ... }; channel { - file ; + file [ versions ( "unlimited" | ) + ] [ size ]; null; print-category ; print-severity ; @@ -43,8 +44,8 @@ lwres { view ; }; -masters [ port ] { ( | [port - ] | [port ] ) [ key ]; ... }; +masters [ port ] { ( | [ port + ] | [ port ] ) [ key ]; ... }; options { acache-cleaning-interval ; @@ -93,9 +94,9 @@ options { dnssec-lookaside trust-anchor ; dnssec-must-be-secure ; dnssec-validation ; - dual-stack-servers [ port ] { ( [port - ] | [port ] | - [port ] ); ... }; + dual-stack-servers [ port ] { ( [ port + ] | [ port ] | + [ port ] ); ... }; dump-file ; edns-udp-size ; empty-contact ; @@ -164,6 +165,7 @@ options { recursion ; recursive-clients ; request-ixfr ; + request-nsid ; rfc2308-type1 ; // not yet implemented root-delegation-only [ exclude { ; ... } ]; rrset-order { [ class ] [ type ] [ name @@ -272,9 +274,9 @@ view { dnssec-lookaside trust-anchor ; dnssec-must-be-secure ; dnssec-validation ; - dual-stack-servers [ port ] { ( [port - ] | [port ] | - [port ] ); ... }; + dual-stack-servers [ port ] { ( [ port + ] | [ port ] | + [ port ] ); ... }; edns-udp-size ; empty-contact ; empty-server ; @@ -327,6 +329,7 @@ view { queryport-pool-updateinterval ; recursion ; request-ixfr ; + request-nsid ; rfc2308-type1 ; // not yet implemented root-delegation-only [ exclude { ; ... } ]; rrset-order { [ class ] [ type ] [ name @@ -402,9 +405,9 @@ view { key-directory ; maintain-ixfr-base ; // obsolete masterfile-format ( text | raw ); - masters [ port ] { ( | - [port ] | [port ] ) [ - key ]; ... }; + masters [ port ] { ( | [ + port ] | [ port ] ) + [ key ]; ... }; max-ixfr-log-size ; // obsolete max-journal-size ; max-refresh-time ; @@ -478,9 +481,9 @@ zone { key-directory ; maintain-ixfr-base ; // obsolete masterfile-format ( text | raw ); - masters [ port ] { ( | [port - ] | [port ] ) [ key - ]; ... }; + masters [ port ] { ( | [ port + ] | [ port ] ) [ key + ]; ... }; max-ixfr-log-size ; // obsolete max-journal-size ; max-refresh-time ; diff --git a/lib/bind/api b/lib/bind/api index a87852a8..a2d21190 100644 --- a/lib/bind/api +++ b/lib/bind/api @@ -1,3 +1,3 @@ -LIBINTERFACE = 4 -LIBREVISION = 10 -LIBAGE = 0 +LIBINTERFACE = 5 +LIBREVISION = 0 +LIBAGE = 1 diff --git a/lib/bind/bsd/Makefile.in b/lib/bind/bsd/Makefile.in index 3cbd7763..de228d29 100644 --- a/lib/bind/bsd/Makefile.in +++ b/lib/bind/bsd/Makefile.in @@ -1,4 +1,4 @@ -# Copyright (C) 2004, 2007 Internet Systems Consortium, Inc. ("ISC") +# Copyright (C) 2004, 2007, 2008 Internet Systems Consortium, Inc. ("ISC") # Copyright (C) 2001 Internet Software Consortium. # # Permission to use, copy, modify, and/or distribute this software for any @@ -13,7 +13,7 @@ # OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR # PERFORMANCE OF THIS SOFTWARE. -# $Id: Makefile.in,v 1.9 2007/06/19 23:47:13 tbox Exp $ +# $Id: Makefile.in,v 1.9.128.2 2008/03/20 23:46:31 tbox Exp $ srcdir= @srcdir@ VPATH = @srcdir@ @@ -34,6 +34,6 @@ SRCS= daemon.c ftruncate.c gettimeofday.c mktemp.c putenv.c \ TARGETS= ${OBJS} -CINCLUDES= -I.. -I${srcdir}/../include +CINCLUDES= -I.. -I../include -I${srcdir}/../include @BIND9_MAKE_RULES@ diff --git a/lib/bind/bsd/strerror.c b/lib/bind/bsd/strerror.c index 416cad48..7b125929 100644 --- a/lib/bind/bsd/strerror.c +++ b/lib/bind/bsd/strerror.c @@ -1,6 +1,6 @@ #if defined(LIBC_SCCS) && !defined(lint) static const char sccsid[] = "@(#)strerror.c 8.1 (Berkeley) 6/4/93"; -static const char rcsid[] = "$Id: strerror.c,v 1.5 2005/04/27 04:56:12 sra Exp $"; +static const char rcsid[] = "$Id: strerror.c,v 1.5.672.1 2008/02/18 04:10:16 marka Exp $"; #endif /* LIBC_SCCS and not lint */ /* @@ -60,12 +60,14 @@ isc_strerror(int num) { static char ebuf[40] = UPREFIX; /*%< 64-bit number + slop */ u_int errnum; char *p, *t; +#ifndef USE_SYSERROR_LIST const char *ret; +#endif char tmp[40]; errnum = num; /*%< convert to unsigned */ #ifdef USE_SYSERROR_LIST - if (errnum < sys_nerr) + if (errnum < (u_int)sys_nerr) return (sys_errlist[errnum]); #else #undef strerror diff --git a/lib/bind/bsd/strtoul.c b/lib/bind/bsd/strtoul.c index 5d066a93..d942df07 100644 --- a/lib/bind/bsd/strtoul.c +++ b/lib/bind/bsd/strtoul.c @@ -1,6 +1,6 @@ #if defined(LIBC_SCCS) && !defined(lint) static const char sccsid[] = "@(#)strtoul.c 8.1 (Berkeley) 6/4/93"; -static const char rcsid[] = "$Id: strtoul.c,v 1.3 2005/04/27 04:56:12 sra Exp $"; +static const char rcsid[] = "$Id: strtoul.c,v 1.3.672.1 2008/02/18 04:10:16 marka Exp $"; #endif /* LIBC_SCCS and not lint */ /* @@ -70,7 +70,7 @@ strtoul(const char *nptr, char **endptr, int base) { * See strtol for comments as to the logic used. */ do { - c = *(unsigned char *)s++; + c = *(const unsigned char *)s++; } while (isspace(c)); if (c == '-') { neg = 1; @@ -87,7 +87,7 @@ strtoul(const char *nptr, char **endptr, int base) { base = c == '0' ? 8 : 10; cutoff = (u_long)ULONG_MAX / (u_long)base; cutlim = (u_long)ULONG_MAX % (u_long)base; - for (acc = 0, any = 0;; c = *(unsigned char*)s++) { + for (acc = 0, any = 0;; c = *(const unsigned char*)s++) { if (isdigit(c)) c -= '0'; else if (isalpha(c)) @@ -96,7 +96,7 @@ strtoul(const char *nptr, char **endptr, int base) { break; if (c >= base) break; - if (any < 0 || acc > cutoff || acc == cutoff && c > cutlim) + if (any < 0 || acc > cutoff || (acc == cutoff && c > cutlim)) any = -1; else { any = 1; @@ -110,7 +110,7 @@ strtoul(const char *nptr, char **endptr, int base) { } else if (neg) acc = -acc; if (endptr != 0) - *endptr = (char *)(any ? s - 1 : nptr); + DE_CONST((any ? s - 1 : nptr), *endptr); return (acc); } diff --git a/lib/bind/config.h.in b/lib/bind/config.h.in index 69ea2854..5e2a83de 100644 --- a/lib/bind/config.h.in +++ b/lib/bind/config.h.in @@ -5,6 +5,7 @@ #undef HAVE_STROPTS_H #undef HAVE_SYS_TIMERS_H #undef HAVE_SYS_SELECT_H +#undef HAVE_MEMORY_H #undef SYS_CDEFS_H #undef _POSIX_PTHREAD_SEMANTICS #undef POSIX_GETPWUID_R @@ -13,6 +14,12 @@ #undef POSIX_GETGRNAM_R #undef HAVE_MEMMOVE #undef HAVE_MEMCHR +#undef SPRINTF_CHAR +#undef VSPRINTF_CHAR +#undef USE_SYSERROR_LIST +#undef NEED_STRTOUL +#undef NEED_SUN4PROTOS +#undef REENABLE_SEND #undef NEED_SETGROUPENT #undef NEED_GETGROUPLIST diff --git a/lib/bind/configure b/lib/bind/configure index 518e43a1..0938c1a4 100755 --- a/lib/bind/configure +++ b/lib/bind/configure @@ -1,5 +1,5 @@ #! /bin/sh -# From configure.in Revision: 1.128.128.2 . +# From configure.in Revision: 1.128.128.7 . # Guess values for system-dependent variables and create Makefiles. # Generated by GNU Autoconf 2.61. # @@ -929,7 +929,6 @@ ISC_PLATFORM_NEEDSTRSEP ISC_PLATFORM_NEEDVSNPRINTF ISC_EXTRA_OBJS ISC_EXTRA_SRCS -USE_SYSERROR_LIST ISC_PLATFORM_QUADFORMAT ISC_SOCKLEN_T GETGROUPLIST_ARGS @@ -972,6 +971,7 @@ HOST_R_SET_RESULT HOST_R_SET_RETURN SETPWENT_VOID SETGRENT_VOID +NGR_R_CONST NGR_R_ARGS NGR_R_BAD NGR_R_COPY @@ -981,9 +981,11 @@ NGR_R_RETURN NGR_R_PRIVATE NGR_R_END_RESULT NGR_R_END_RETURN -NGR_R_ENT_ARGS +NGR_R_END_ARGS NGR_R_SET_RESULT NGR_R_SET_RETURN +NGR_R_SET_ARGS +NGR_R_SET_CONST PROTO_R_ARGS PROTO_R_BAD PROTO_R_COPY @@ -4248,7 +4250,8 @@ done -for ac_header in fcntl.h db.h paths.h sys/time.h unistd.h sys/sockio.h sys/select.h sys/timers.h stropts.h + +for ac_header in fcntl.h db.h paths.h sys/time.h unistd.h sys/sockio.h sys/select.h sys/timers.h stropts.h memory.h do as_ac_Header=`echo "ac_cv_header_$ac_header" | $as_tr_sh` if { as_var=$as_ac_Header; eval "test \"\${$as_var+set}\" = set"; }; then @@ -7258,10 +7261,9 @@ _ACEOF fi - -{ echo "$as_me:$LINENO: checking for if_nametoindex" >&5 -echo $ECHO_N "checking for if_nametoindex... $ECHO_C" >&6; } -if test "${ac_cv_func_if_nametoindex+set}" = set; then +{ echo "$as_me:$LINENO: checking for strtoul" >&5 +echo $ECHO_N "checking for strtoul... $ECHO_C" >&6; } +if test "${ac_cv_func_strtoul+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else cat >conftest.$ac_ext <<_ACEOF @@ -7270,12 +7272,12 @@ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ -/* Define if_nametoindex to an innocuous variant, in case declares if_nametoindex. +/* Define strtoul to an innocuous variant, in case declares strtoul. For example, HP-UX 11i declares gettimeofday. */ -#define if_nametoindex innocuous_if_nametoindex +#define strtoul innocuous_strtoul /* System header to define __stub macros and hopefully few prototypes, - which can conflict with char if_nametoindex (); below. + which can conflict with char strtoul (); below. Prefer to if __STDC__ is defined, since exists even on freestanding compilers. */ @@ -7285,7 +7287,7 @@ cat >>conftest.$ac_ext <<_ACEOF # include #endif -#undef if_nametoindex +#undef strtoul /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC @@ -7293,18 +7295,18 @@ cat >>conftest.$ac_ext <<_ACEOF #ifdef __cplusplus extern "C" #endif -char if_nametoindex (); +char strtoul (); /* 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_if_nametoindex || defined __stub___if_nametoindex +#if defined __stub_strtoul || defined __stub___strtoul choke me #endif int main () { -return if_nametoindex (); +return strtoul (); ; return 0; } @@ -7327,125 +7329,32 @@ eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 test ! -s conftest.err } && test -s conftest$ac_exeext && $as_test_x conftest$ac_exeext; then - ac_cv_func_if_nametoindex=yes + ac_cv_func_strtoul=yes else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 - ac_cv_func_if_nametoindex=no + ac_cv_func_strtoul=no fi rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \ conftest$ac_exeext conftest.$ac_ext fi -{ echo "$as_me:$LINENO: result: $ac_cv_func_if_nametoindex" >&5 -echo "${ECHO_T}$ac_cv_func_if_nametoindex" >&6; } -if test $ac_cv_func_if_nametoindex = yes; then - USE_IFNAMELINKID="#define USE_IFNAMELINKID 1" -else - USE_IFNAMELINKID="#undef USE_IFNAMELINKID" -fi - - - -ISC_THREAD_DIR=$thread_dir - - -{ echo "$as_me:$LINENO: checking for daemon" >&5 -echo $ECHO_N "checking for daemon... $ECHO_C" >&6; } -if test "${ac_cv_func_daemon+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 +{ echo "$as_me:$LINENO: result: $ac_cv_func_strtoul" >&5 +echo "${ECHO_T}$ac_cv_func_strtoul" >&6; } +if test $ac_cv_func_strtoul = yes; then + : else - cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF -/* end confdefs.h. */ -/* Define daemon to an innocuous variant, in case declares daemon. - For example, HP-UX 11i declares gettimeofday. */ -#define daemon innocuous_daemon - -/* System header to define __stub macros and hopefully few prototypes, - which can conflict with char daemon (); below. - Prefer to if __STDC__ is defined, since - exists even on freestanding compilers. */ - -#ifdef __STDC__ -# include -#else -# include -#endif - -#undef daemon - -/* 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 daemon (); -/* 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_daemon || defined __stub___daemon -choke me -#endif - -int -main () -{ -return daemon (); - ; - return 0; -} + cat >>confdefs.h <<\_ACEOF +#define NEED_STRTOUL 1 _ACEOF -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 "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 - (eval "$ac_link") 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && { - test -z "$ac_c_werror_flag" || - test ! -s conftest.err - } && test -s conftest$ac_exeext && - $as_test_x conftest$ac_exeext; then - ac_cv_func_daemon=yes -else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - ac_cv_func_daemon=no fi -rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \ - conftest$ac_exeext conftest.$ac_ext -fi -{ echo "$as_me:$LINENO: result: $ac_cv_func_daemon" >&5 -echo "${ECHO_T}$ac_cv_func_daemon" >&6; } -if test $ac_cv_func_daemon = yes; then - DAEMON_OBJS="" NEED_DAEMON="#undef NEED_DAEMON" -else - DAEMON_OBJS="\${DAEMON_OBJS}" NEED_DAEMON="#define NEED_DAEMON 1" - -fi - - - - -{ echo "$as_me:$LINENO: checking for strsep" >&5 -echo $ECHO_N "checking for strsep... $ECHO_C" >&6; } -if test "${ac_cv_func_strsep+set}" = set; then +{ echo "$as_me:$LINENO: checking for if_nametoindex" >&5 +echo $ECHO_N "checking for if_nametoindex... $ECHO_C" >&6; } +if test "${ac_cv_func_if_nametoindex+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else cat >conftest.$ac_ext <<_ACEOF @@ -7454,12 +7363,12 @@ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ -/* Define strsep to an innocuous variant, in case declares strsep. +/* Define if_nametoindex to an innocuous variant, in case declares if_nametoindex. For example, HP-UX 11i declares gettimeofday. */ -#define strsep innocuous_strsep +#define if_nametoindex innocuous_if_nametoindex /* System header to define __stub macros and hopefully few prototypes, - which can conflict with char strsep (); below. + which can conflict with char if_nametoindex (); below. Prefer to if __STDC__ is defined, since exists even on freestanding compilers. */ @@ -7469,7 +7378,7 @@ cat >>conftest.$ac_ext <<_ACEOF # include #endif -#undef strsep +#undef if_nametoindex /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC @@ -7477,18 +7386,18 @@ cat >>conftest.$ac_ext <<_ACEOF #ifdef __cplusplus extern "C" #endif -char strsep (); +char if_nametoindex (); /* 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_strsep || defined __stub___strsep +#if defined __stub_if_nametoindex || defined __stub___if_nametoindex choke me #endif int main () { -return strsep (); +return if_nametoindex (); ; return 0; } @@ -7511,126 +7420,33 @@ eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 test ! -s conftest.err } && test -s conftest$ac_exeext && $as_test_x conftest$ac_exeext; then - ac_cv_func_strsep=yes + ac_cv_func_if_nametoindex=yes else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 - ac_cv_func_strsep=no + ac_cv_func_if_nametoindex=no fi rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \ conftest$ac_exeext conftest.$ac_ext fi -{ echo "$as_me:$LINENO: result: $ac_cv_func_strsep" >&5 -echo "${ECHO_T}$ac_cv_func_strsep" >&6; } -if test $ac_cv_func_strsep = yes; then - STRSEP_OBJS="" NEED_STRSEP="#undef NEED_STRSEP" - +{ echo "$as_me:$LINENO: result: $ac_cv_func_if_nametoindex" >&5 +echo "${ECHO_T}$ac_cv_func_if_nametoindex" >&6; } +if test $ac_cv_func_if_nametoindex = yes; then + USE_IFNAMELINKID="#define USE_IFNAMELINKID 1" else - STRSEP_OBJS="\${STRSEP_OBJS}" NEED_STRSEP="#define NEED_STRSEP 1" - + USE_IFNAMELINKID="#undef USE_IFNAMELINKID" fi - -{ echo "$as_me:$LINENO: checking for strerror" >&5 -echo $ECHO_N "checking for strerror... $ECHO_C" >&6; } -if test "${ac_cv_func_strerror+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 -else - cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF -/* end confdefs.h. */ -/* Define strerror to an innocuous variant, in case declares strerror. - For example, HP-UX 11i declares gettimeofday. */ -#define strerror innocuous_strerror - -/* System header to define __stub macros and hopefully few prototypes, - which can conflict with char strerror (); below. - Prefer to if __STDC__ is defined, since - exists even on freestanding compilers. */ - -#ifdef __STDC__ -# include -#else -# include -#endif - -#undef strerror - -/* 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 strerror (); -/* 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_strerror || defined __stub___strerror -choke me -#endif - -int -main () -{ -return strerror (); - ; - return 0; -} -_ACEOF -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 "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 - (eval "$ac_link") 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && { - test -z "$ac_c_werror_flag" || - test ! -s conftest.err - } && test -s conftest$ac_exeext && - $as_test_x conftest$ac_exeext; then - ac_cv_func_strerror=yes -else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - - ac_cv_func_strerror=no -fi - -rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \ - conftest$ac_exeext conftest.$ac_ext -fi -{ echo "$as_me:$LINENO: result: $ac_cv_func_strerror" >&5 -echo "${ECHO_T}$ac_cv_func_strerror" >&6; } -if test $ac_cv_func_strerror = yes; then - NEED_STRERROR="#undef NEED_STRERROR" -else - NEED_STRERROR="#define NEED_STRERROR 1" -fi - +ISC_THREAD_DIR=$thread_dir -# -# flockfile is usually provided by pthreads, but we may want to use it -# even if compiled with --disable-threads. -# -{ echo "$as_me:$LINENO: checking for flockfile" >&5 -echo $ECHO_N "checking for flockfile... $ECHO_C" >&6; } -if test "${ac_cv_func_flockfile+set}" = set; then +{ echo "$as_me:$LINENO: checking for daemon" >&5 +echo $ECHO_N "checking for daemon... $ECHO_C" >&6; } +if test "${ac_cv_func_daemon+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else cat >conftest.$ac_ext <<_ACEOF @@ -7639,12 +7455,12 @@ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ -/* Define flockfile to an innocuous variant, in case declares flockfile. +/* Define daemon to an innocuous variant, in case declares daemon. For example, HP-UX 11i declares gettimeofday. */ -#define flockfile innocuous_flockfile +#define daemon innocuous_daemon /* System header to define __stub macros and hopefully few prototypes, - which can conflict with char flockfile (); below. + which can conflict with char daemon (); below. Prefer to if __STDC__ is defined, since exists even on freestanding compilers. */ @@ -7654,7 +7470,7 @@ cat >>conftest.$ac_ext <<_ACEOF # include #endif -#undef flockfile +#undef daemon /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC @@ -7662,18 +7478,350 @@ cat >>conftest.$ac_ext <<_ACEOF #ifdef __cplusplus extern "C" #endif -char flockfile (); +char daemon (); /* 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_flockfile || defined __stub___flockfile +#if defined __stub_daemon || defined __stub___daemon choke me #endif int main () { -return flockfile (); +return daemon (); + ; + return 0; +} +_ACEOF +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 "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 + (eval "$ac_link") 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && { + test -z "$ac_c_werror_flag" || + test ! -s conftest.err + } && test -s conftest$ac_exeext && + $as_test_x conftest$ac_exeext; then + ac_cv_func_daemon=yes +else + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + ac_cv_func_daemon=no +fi + +rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \ + conftest$ac_exeext conftest.$ac_ext +fi +{ echo "$as_me:$LINENO: result: $ac_cv_func_daemon" >&5 +echo "${ECHO_T}$ac_cv_func_daemon" >&6; } +if test $ac_cv_func_daemon = yes; then + DAEMON_OBJS="" NEED_DAEMON="#undef NEED_DAEMON" + +else + DAEMON_OBJS="\${DAEMON_OBJS}" NEED_DAEMON="#define NEED_DAEMON 1" + +fi + + + + +{ echo "$as_me:$LINENO: checking for strsep" >&5 +echo $ECHO_N "checking for strsep... $ECHO_C" >&6; } +if test "${ac_cv_func_strsep+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ +/* Define strsep to an innocuous variant, in case declares strsep. + For example, HP-UX 11i declares gettimeofday. */ +#define strsep innocuous_strsep + +/* System header to define __stub macros and hopefully few prototypes, + which can conflict with char strsep (); below. + Prefer to if __STDC__ is defined, since + exists even on freestanding compilers. */ + +#ifdef __STDC__ +# include +#else +# include +#endif + +#undef strsep + +/* 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 strsep (); +/* 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_strsep || defined __stub___strsep +choke me +#endif + +int +main () +{ +return strsep (); + ; + return 0; +} +_ACEOF +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 "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 + (eval "$ac_link") 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && { + test -z "$ac_c_werror_flag" || + test ! -s conftest.err + } && test -s conftest$ac_exeext && + $as_test_x conftest$ac_exeext; then + ac_cv_func_strsep=yes +else + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + ac_cv_func_strsep=no +fi + +rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \ + conftest$ac_exeext conftest.$ac_ext +fi +{ echo "$as_me:$LINENO: result: $ac_cv_func_strsep" >&5 +echo "${ECHO_T}$ac_cv_func_strsep" >&6; } +if test $ac_cv_func_strsep = yes; then + STRSEP_OBJS="" NEED_STRSEP="#undef NEED_STRSEP" + +else + STRSEP_OBJS="\${STRSEP_OBJS}" NEED_STRSEP="#define NEED_STRSEP 1" + +fi + + + + +{ echo "$as_me:$LINENO: checking for strerror" >&5 +echo $ECHO_N "checking for strerror... $ECHO_C" >&6; } +if test "${ac_cv_func_strerror+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ +/* Define strerror to an innocuous variant, in case declares strerror. + For example, HP-UX 11i declares gettimeofday. */ +#define strerror innocuous_strerror + +/* System header to define __stub macros and hopefully few prototypes, + which can conflict with char strerror (); below. + Prefer to if __STDC__ is defined, since + exists even on freestanding compilers. */ + +#ifdef __STDC__ +# include +#else +# include +#endif + +#undef strerror + +/* 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 strerror (); +/* 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_strerror || defined __stub___strerror +choke me +#endif + +int +main () +{ +return strerror (); + ; + return 0; +} +_ACEOF +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 "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 + (eval "$ac_link") 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && { + test -z "$ac_c_werror_flag" || + test ! -s conftest.err + } && test -s conftest$ac_exeext && + $as_test_x conftest$ac_exeext; then + ac_cv_func_strerror=yes +else + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + ac_cv_func_strerror=no +fi + +rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \ + conftest$ac_exeext conftest.$ac_ext +fi +{ echo "$as_me:$LINENO: result: $ac_cv_func_strerror" >&5 +echo "${ECHO_T}$ac_cv_func_strerror" >&6; } +if test $ac_cv_func_strerror = yes; then + NEED_STRERROR="#undef NEED_STRERROR" +else + NEED_STRERROR="#define NEED_STRERROR 1" +fi + + + +if test -n "$NEED_STRERROR" +then + { echo "$as_me:$LINENO: checking for extern char * sys_errlist" >&5 +echo $ECHO_N "checking for extern char * sys_errlist... $ECHO_C" >&6; } + cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ + extern int sys_nerr; extern char *sys_errlist[]; +int +main () +{ + const char *p = sys_errlist[0]; + ; + return 0; +} +_ACEOF +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 "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 + (eval "$ac_link") 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && { + test -z "$ac_c_werror_flag" || + test ! -s conftest.err + } && test -s conftest$ac_exeext && + $as_test_x conftest$ac_exeext; then + { echo "$as_me:$LINENO: result: yes" >&5 +echo "${ECHO_T}yes" >&6; } + cat >>confdefs.h <<\_ACEOF +#define USE_SYSERROR_LIST 1 +_ACEOF + +else + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + { echo "$as_me:$LINENO: result: no" >&5 +echo "${ECHO_T}no" >&6; } +fi + +rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \ + conftest$ac_exeext conftest.$ac_ext +fi + +# +# flockfile is usually provided by pthreads, but we may want to use it +# even if compiled with --disable-threads. +# +{ echo "$as_me:$LINENO: checking for flockfile" >&5 +echo $ECHO_N "checking for flockfile... $ECHO_C" >&6; } +if test "${ac_cv_func_flockfile+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ +/* Define flockfile to an innocuous variant, in case declares flockfile. + For example, HP-UX 11i declares gettimeofday. */ +#define flockfile innocuous_flockfile + +/* System header to define __stub macros and hopefully few prototypes, + which can conflict with char flockfile (); below. + Prefer to if __STDC__ is defined, since + exists even on freestanding compilers. */ + +#ifdef __STDC__ +# include +#else +# include +#endif + +#undef flockfile + +/* 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 flockfile (); +/* 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_flockfile || defined __stub___flockfile +choke me +#endif + +int +main () +{ +return flockfile (); ; return 0; } @@ -8425,6 +8573,14 @@ esac # # GNU libtool support # +case $host in +sunos*) + # Just set the maximum command line length for sunos as it otherwise + # takes a exceptionally long time to work it out. Required for libtool. + lt_cv_sys_max_cmd_len=4096; + ;; +esac + # Check whether --with-libtool was given. if test "${with_libtool+set}" = set; then @@ -8972,7 +9128,7 @@ ia64-*-hpux*) ;; *-*-irix6*) # Find out which ABI we are using. - echo '#line 8975 "configure"' > conftest.$ac_ext + echo '#line 9131 "configure"' > conftest.$ac_ext if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 (eval $ac_compile) 2>&5 ac_status=$? @@ -11094,11 +11250,11 @@ else -e 's:.*FLAGS}? :&$lt_compiler_flag :; t' \ -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \ -e 's:$: $lt_compiler_flag:'` - (eval echo "\"\$as_me:11097: $lt_compile\"" >&5) + (eval echo "\"\$as_me:11253: $lt_compile\"" >&5) (eval "$lt_compile" 2>conftest.err) ac_status=$? cat conftest.err >&5 - echo "$as_me:11101: \$? = $ac_status" >&5 + echo "$as_me:11257: \$? = $ac_status" >&5 if (exit $ac_status) && test -s "$ac_outfile"; then # The compiler can only warn and ignore the option if not recognized # So say no if there are warnings @@ -11337,11 +11493,11 @@ else -e 's:.*FLAGS}? :&$lt_compiler_flag :; t' \ -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \ -e 's:$: $lt_compiler_flag:'` - (eval echo "\"\$as_me:11340: $lt_compile\"" >&5) + (eval echo "\"\$as_me:11496: $lt_compile\"" >&5) (eval "$lt_compile" 2>conftest.err) ac_status=$? cat conftest.err >&5 - echo "$as_me:11344: \$? = $ac_status" >&5 + echo "$as_me:11500: \$? = $ac_status" >&5 if (exit $ac_status) && test -s "$ac_outfile"; then # The compiler can only warn and ignore the option if not recognized # So say no if there are warnings @@ -11397,11 +11553,11 @@ else -e 's:.*FLAGS}? :&$lt_compiler_flag :; t' \ -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \ -e 's:$: $lt_compiler_flag:'` - (eval echo "\"\$as_me:11400: $lt_compile\"" >&5) + (eval echo "\"\$as_me:11556: $lt_compile\"" >&5) (eval "$lt_compile" 2>out/conftest.err) ac_status=$? cat out/conftest.err >&5 - echo "$as_me:11404: \$? = $ac_status" >&5 + echo "$as_me:11560: \$? = $ac_status" >&5 if (exit $ac_status) && test -s out/conftest2.$ac_objext then # The compiler can only warn and ignore the option if not recognized @@ -13545,7 +13701,7 @@ else lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2 lt_status=$lt_dlunknown cat > conftest.$ac_ext < conftest.$ac_ext <&5) + (eval echo "\"\$as_me:15995: $lt_compile\"" >&5) (eval "$lt_compile" 2>conftest.err) ac_status=$? cat conftest.err >&5 - echo "$as_me:15843: \$? = $ac_status" >&5 + echo "$as_me:15999: \$? = $ac_status" >&5 if (exit $ac_status) && test -s "$ac_outfile"; then # The compiler can only warn and ignore the option if not recognized # So say no if there are warnings @@ -15896,11 +16052,11 @@ else -e 's:.*FLAGS}? :&$lt_compiler_flag :; t' \ -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \ -e 's:$: $lt_compiler_flag:'` - (eval echo "\"\$as_me:15899: $lt_compile\"" >&5) + (eval echo "\"\$as_me:16055: $lt_compile\"" >&5) (eval "$lt_compile" 2>out/conftest.err) ac_status=$? cat out/conftest.err >&5 - echo "$as_me:15903: \$? = $ac_status" >&5 + echo "$as_me:16059: \$? = $ac_status" >&5 if (exit $ac_status) && test -s out/conftest2.$ac_objext then # The compiler can only warn and ignore the option if not recognized @@ -17224,7 +17380,7 @@ else lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2 lt_status=$lt_dlunknown cat > conftest.$ac_ext < conftest.$ac_ext <&5) + (eval echo "\"\$as_me:18318: $lt_compile\"" >&5) (eval "$lt_compile" 2>conftest.err) ac_status=$? cat conftest.err >&5 - echo "$as_me:18166: \$? = $ac_status" >&5 + echo "$as_me:18322: \$? = $ac_status" >&5 if (exit $ac_status) && test -s "$ac_outfile"; then # The compiler can only warn and ignore the option if not recognized # So say no if there are warnings @@ -18219,11 +18375,11 @@ else -e 's:.*FLAGS}? :&$lt_compiler_flag :; t' \ -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \ -e 's:$: $lt_compiler_flag:'` - (eval echo "\"\$as_me:18222: $lt_compile\"" >&5) + (eval echo "\"\$as_me:18378: $lt_compile\"" >&5) (eval "$lt_compile" 2>out/conftest.err) ac_status=$? cat out/conftest.err >&5 - echo "$as_me:18226: \$? = $ac_status" >&5 + echo "$as_me:18382: \$? = $ac_status" >&5 if (exit $ac_status) && test -s out/conftest2.$ac_objext then # The compiler can only warn and ignore the option if not recognized @@ -20253,11 +20409,11 @@ else -e 's:.*FLAGS}? :&$lt_compiler_flag :; t' \ -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \ -e 's:$: $lt_compiler_flag:'` - (eval echo "\"\$as_me:20256: $lt_compile\"" >&5) + (eval echo "\"\$as_me:20412: $lt_compile\"" >&5) (eval "$lt_compile" 2>conftest.err) ac_status=$? cat conftest.err >&5 - echo "$as_me:20260: \$? = $ac_status" >&5 + echo "$as_me:20416: \$? = $ac_status" >&5 if (exit $ac_status) && test -s "$ac_outfile"; then # The compiler can only warn and ignore the option if not recognized # So say no if there are warnings @@ -20496,11 +20652,11 @@ else -e 's:.*FLAGS}? :&$lt_compiler_flag :; t' \ -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \ -e 's:$: $lt_compiler_flag:'` - (eval echo "\"\$as_me:20499: $lt_compile\"" >&5) + (eval echo "\"\$as_me:20655: $lt_compile\"" >&5) (eval "$lt_compile" 2>conftest.err) ac_status=$? cat conftest.err >&5 - echo "$as_me:20503: \$? = $ac_status" >&5 + echo "$as_me:20659: \$? = $ac_status" >&5 if (exit $ac_status) && test -s "$ac_outfile"; then # The compiler can only warn and ignore the option if not recognized # So say no if there are warnings @@ -20556,11 +20712,11 @@ else -e 's:.*FLAGS}? :&$lt_compiler_flag :; t' \ -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \ -e 's:$: $lt_compiler_flag:'` - (eval echo "\"\$as_me:20559: $lt_compile\"" >&5) + (eval echo "\"\$as_me:20715: $lt_compile\"" >&5) (eval "$lt_compile" 2>out/conftest.err) ac_status=$? cat out/conftest.err >&5 - echo "$as_me:20563: \$? = $ac_status" >&5 + echo "$as_me:20719: \$? = $ac_status" >&5 if (exit $ac_status) && test -s out/conftest2.$ac_objext then # The compiler can only warn and ignore the option if not recognized @@ -22704,7 +22860,7 @@ else lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2 lt_status=$lt_dlunknown cat > conftest.$ac_ext < conftest.$ac_ext <>confdefs.h <<\_ACEOF +#define REENABLE_SEND 1 +_ACEOF + # Turn on 4.4BSD style sa_len support. cat >>confdefs.h <<\_ACEOF #define _SOCKADDR_LEN 1 @@ -24621,6 +24782,10 @@ case "$host" in *-qnx*) PORT_DIR="port/qnx";; *-rhapsody*) PORT_DIR="port/rhapsody";; *-sunos4*) + cat >>confdefs.h <<\_ACEOF +#define NEED_SUN4PROTOS 1 +_ACEOF + PORT_NONBLOCK="#define PORT_NONBLOCK O_NDELAY" PORT_DIR="port/sunos";; *-solaris2.[01234]) @@ -25917,64 +26082,35 @@ else ISC_PLATFORM_NEEDSTRSEP="#define ISC_PLATFORM_NEEDSTRSEP 1" fi -{ echo "$as_me:$LINENO: checking for vsnprintf" >&5 -echo $ECHO_N "checking for vsnprintf... $ECHO_C" >&6; } -if test "${ac_cv_func_vsnprintf+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 -else - cat >conftest.$ac_ext <<_ACEOF + + +{ echo "$as_me:$LINENO: checking for char *sprintf" >&5 +echo $ECHO_N "checking for char *sprintf... $ECHO_C" >&6; } +cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ -/* Define vsnprintf to an innocuous variant, in case declares vsnprintf. - For example, HP-UX 11i declares gettimeofday. */ -#define vsnprintf innocuous_vsnprintf - -/* System header to define __stub macros and hopefully few prototypes, - which can conflict with char vsnprintf (); below. - Prefer to if __STDC__ is defined, since - exists even on freestanding compilers. */ - -#ifdef __STDC__ -# include -#else -# include -#endif - -#undef vsnprintf -/* 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 vsnprintf (); -/* 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_vsnprintf || defined __stub___vsnprintf -choke me -#endif +#include int main () { -return vsnprintf (); + char buf[2]; return(*sprintf(buf,"x")); ; return 0; } _ACEOF -rm -f conftest.$ac_objext conftest$ac_exeext -if { (ac_try="$ac_link" +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 "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 - (eval "$ac_link") 2>conftest.er1 + (eval "$ac_compile") 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 @@ -25983,37 +26119,94 @@ eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 (exit $ac_status); } && { test -z "$ac_c_werror_flag" || test ! -s conftest.err - } && test -s conftest$ac_exeext && - $as_test_x conftest$ac_exeext; then - ac_cv_func_vsnprintf=yes + } && test -s conftest.$ac_objext; then + cat >>confdefs.h <<\_ACEOF +#define SPRINTF_CHAR 1 +_ACEOF + +{ echo "$as_me:$LINENO: result: yes" >&5 +echo "${ECHO_T}yes" >&6; } + else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 - ac_cv_func_vsnprintf=no -fi + { echo "$as_me:$LINENO: result: no" >&5 +echo "${ECHO_T}no" >&6; } -rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \ - conftest$ac_exeext conftest.$ac_ext -fi -{ echo "$as_me:$LINENO: result: $ac_cv_func_vsnprintf" >&5 -echo "${ECHO_T}$ac_cv_func_vsnprintf" >&6; } -if test $ac_cv_func_vsnprintf = yes; then - ISC_PLATFORM_NEEDVSNPRINTF="#undef ISC_PLATFORM_NEEDVSNPRINTF" -else - ISC_EXTRA_OBJS="$ISC_EXTRA_OBJS print.$O" - ISC_EXTRA_SRCS="$ISC_EXTRA_SRCS print.c" - ISC_PLATFORM_NEEDVSNPRINTF="#define ISC_PLATFORM_NEEDVSNPRINTF 1" fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext + +{ echo "$as_me:$LINENO: checking for char *vsprintf" >&5 +echo $ECHO_N "checking for char *vsprintf... $ECHO_C" >&6; } +case $host in +*sunos4*) # not decared in any header file. +cat >>confdefs.h <<\_ACEOF +#define VSPRINTF_CHAR 1 +_ACEOF +{ echo "$as_me:$LINENO: result: yes" >&5 +echo "${ECHO_T}yes" >&6; } +;; +*) +cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ +#include +int +main () +{ + char buf[2]; return(*vsprintf(buf,"x")); + ; + return 0; +} +_ACEOF +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 "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 + (eval "$ac_compile") 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && { + test -z "$ac_c_werror_flag" || + test ! -s conftest.err + } && test -s conftest.$ac_objext; then + cat >>confdefs.h <<\_ACEOF +#define VSPRINTF_CHAR 1 +_ACEOF +{ echo "$as_me:$LINENO: result: yes" >&5 +echo "${ECHO_T}yes" >&6; } -{ echo "$as_me:$LINENO: checking for strerror" >&5 -echo $ECHO_N "checking for strerror... $ECHO_C" >&6; } -if test "${ac_cv_func_strerror+set}" = set; then +else + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + { echo "$as_me:$LINENO: result: no" >&5 +echo "${ECHO_T}no" >&6; } + +fi + +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +;; +esac + +{ echo "$as_me:$LINENO: checking for vsnprintf" >&5 +echo $ECHO_N "checking for vsnprintf... $ECHO_C" >&6; } +if test "${ac_cv_func_vsnprintf+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else cat >conftest.$ac_ext <<_ACEOF @@ -26022,12 +26215,12 @@ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ -/* Define strerror to an innocuous variant, in case declares strerror. +/* Define vsnprintf to an innocuous variant, in case declares vsnprintf. For example, HP-UX 11i declares gettimeofday. */ -#define strerror innocuous_strerror +#define vsnprintf innocuous_vsnprintf /* System header to define __stub macros and hopefully few prototypes, - which can conflict with char strerror (); below. + which can conflict with char vsnprintf (); below. Prefer to if __STDC__ is defined, since exists even on freestanding compilers. */ @@ -26037,7 +26230,7 @@ cat >>conftest.$ac_ext <<_ACEOF # include #endif -#undef strerror +#undef vsnprintf /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC @@ -26045,18 +26238,18 @@ cat >>conftest.$ac_ext <<_ACEOF #ifdef __cplusplus extern "C" #endif -char strerror (); +char vsnprintf (); /* 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_strerror || defined __stub___strerror +#if defined __stub_vsnprintf || defined __stub___vsnprintf choke me #endif int main () { -return strerror (); +return vsnprintf (); ; return 0; } @@ -26079,28 +26272,33 @@ eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 test ! -s conftest.err } && test -s conftest$ac_exeext && $as_test_x conftest$ac_exeext; then - ac_cv_func_strerror=yes + ac_cv_func_vsnprintf=yes else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 - ac_cv_func_strerror=no + ac_cv_func_vsnprintf=no fi rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \ conftest$ac_exeext conftest.$ac_ext fi -{ echo "$as_me:$LINENO: result: $ac_cv_func_strerror" >&5 -echo "${ECHO_T}$ac_cv_func_strerror" >&6; } -if test $ac_cv_func_strerror = yes; then - USE_SYSERROR_LIST="#undef USE_SYSERROR_LIST" +{ echo "$as_me:$LINENO: result: $ac_cv_func_vsnprintf" >&5 +echo "${ECHO_T}$ac_cv_func_vsnprintf" >&6; } +if test $ac_cv_func_vsnprintf = yes; then + ISC_PLATFORM_NEEDVSNPRINTF="#undef ISC_PLATFORM_NEEDVSNPRINTF" else - USE_SYSERROR_LIST="#define USE_SYSERROR_LIST 1" + ISC_EXTRA_OBJS="$ISC_EXTRA_OBJS print.$O" + ISC_EXTRA_SRCS="$ISC_EXTRA_SRCS print.c" + ISC_PLATFORM_NEEDVSNPRINTF="#define ISC_PLATFORM_NEEDVSNPRINTF 1" fi -# + + + + # Determine the printf format characters to use when printing # values of type isc_int64_t. We make the assumption that platforms # where a "long long" is the same size as a "long" (e.g., Alpha/OSF1) @@ -29054,7 +29252,21 @@ rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext case $host in ia64-hp-hpux11.*) +NGR_R_CONST="#define NGR_R_CONST" +;; +*-hp-hpux11.*) +# +# HPUX doesn't have a prototype for getnetgrent_r(). +# +NGR_R_CONST="#define NGR_R_CONST" +NGR_R_ARGS="#define NGR_R_ARGS char *buf, int buflen" +NGR_R_BAD="#define NGR_R_BAD (0)" +NGR_R_COPY="#define NGR_R_COPY buf, buflen" +NGR_R_COPY_ARGS="#define NGR_R_COPY_ARGS NGR_R_ARGS" +NGR_R_OK="#define NGR_R_OK 1" +NGR_R_RETURN="#define NGR_R_RETURN int" ;; + *) { echo "$as_me:$LINENO: checking for getnetgrent_r" >&5 echo $ECHO_N "checking for getnetgrent_r... $ECHO_C" >&6; } @@ -29124,20 +29336,362 @@ eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 test ! -s conftest.err } && test -s conftest$ac_exeext && $as_test_x conftest$ac_exeext; then - ac_cv_func_getnetgrent_r=yes + ac_cv_func_getnetgrent_r=yes +else + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + ac_cv_func_getnetgrent_r=no +fi + +rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \ + conftest$ac_exeext conftest.$ac_ext +fi +{ echo "$as_me:$LINENO: result: $ac_cv_func_getnetgrent_r" >&5 +echo "${ECHO_T}$ac_cv_func_getnetgrent_r" >&6; } +if test $ac_cv_func_getnetgrent_r = yes; then + cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ + +#undef __USE_MISC +#define __USE_MISC +#undef _REEENTRANT +#define _REEENTRANT +#include +#include +int getnetgrent_r(char **m, char **u, char **d, char *b, int l) {} + + +int +main () +{ +return (0); + ; + return 0; +} +_ACEOF +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 "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 + (eval "$ac_compile") 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && { + test -z "$ac_c_werror_flag" || + test ! -s conftest.err + } && test -s conftest.$ac_objext; then + +NGR_R_CONST="#define NGR_R_CONST" +NGR_R_ARGS="#define NGR_R_ARGS char *buf, int buflen" +NGR_R_BAD="#define NGR_R_BAD (0)" +NGR_R_COPY="#define NGR_R_COPY buf, buflen" +NGR_R_COPY_ARGS="#define NGR_R_COPY_ARGS NGR_R_ARGS" +NGR_R_OK="#define NGR_R_OK 1" +NGR_R_RETURN="#define NGR_R_RETURN int" + + +else + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ + +#undef __USE_MISC +#define __USE_MISC +#undef _REEENTRANT +#define _REEENTRANT +#include +#include +int getnetgrent_r(char **m, char **u, char **d, char *b, size_t l) {} + + +int +main () +{ +return (0); + ; + return 0; +} +_ACEOF +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 "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 + (eval "$ac_compile") 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && { + test -z "$ac_c_werror_flag" || + test ! -s conftest.err + } && test -s conftest.$ac_objext; then + +NGR_R_CONST="#define NGR_R_CONST" +NGR_R_ARGS="#define NGR_R_ARGS char *buf, size_t buflen" +NGR_R_BAD="#define NGR_R_BAD (0)" +NGR_R_COPY="#define NGR_R_COPY buf, buflen" +NGR_R_COPY_ARGS="#define NGR_R_COPY_ARGS NGR_R_ARGS" +NGR_R_OK="#define NGR_R_OK 1" +NGR_R_RETURN="#define NGR_R_RETURN int" + + +else + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ + +#undef __USE_MISC +#define __USE_MISC +#undef _REEENTRANT +#define _REEENTRANT +#include +#include +extern int getnetgrent_r(char **, char **, char **, void **); + + +int +main () +{ +return (0); + ; + return 0; +} +_ACEOF +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 "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 + (eval "$ac_compile") 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && { + test -z "$ac_c_werror_flag" || + test ! -s conftest.err + } && test -s conftest.$ac_objext; then + +NGR_R_CONST="#define NGR_R_CONST" +NGR_R_ARGS="#define NGR_R_ARGS void **buf" +NGR_R_BAD="#define NGR_R_BAD (0)" +NGR_R_COPY="#define NGR_R_COPY buf" +NGR_R_COPY_ARGS="#define NGR_R_COPY_ARGS NGR_R_ARGS" +NGR_R_OK="#define NGR_R_OK 1" +NGR_R_RETURN="#define NGR_R_RETURN int" +NGR_R_PRIVATE="#define NGR_R_PRIVATE 1" + + +else + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ + +#undef __USE_MISC +#define __USE_MISC +#undef _REEENTRANT +#define _REEENTRANT +#include +#include +extern int getnetgrent_r(const char **, const char **, const char **, void *); + + +int +main () +{ +return (0); + ; + return 0; +} +_ACEOF +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 "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 + (eval "$ac_compile") 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && { + test -z "$ac_c_werror_flag" || + test ! -s conftest.err + } && test -s conftest.$ac_objext; then + +NGR_R_CONST="#define NGR_R_CONST const" +NGR_R_ARGS="#define NGR_R_ARGS void *buf" +NGR_R_BAD="#define NGR_R_BAD (0)" +NGR_R_COPY="#define NGR_R_COPY buf" +NGR_R_COPY_ARGS="#define NGR_R_COPY_ARGS NGR_R_ARGS" +NGR_R_OK="#define NGR_R_OK 1" +NGR_R_RETURN="#define NGR_R_RETURN int" +NGR_R_PRIVATE="#define NGR_R_PRIVATE 2" + + +else + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + +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 + +fi + +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext + +else + NGR_R_CONST="#define NGR_R_CONST" +NGR_R_ARGS="#define NGR_R_ARGS char *buf, int buflen" +NGR_R_BAD="#define NGR_R_BAD (0)" +NGR_R_COPY="#define NGR_R_COPY buf, buflen" +NGR_R_COPY_ARGS="#define NGR_R_COPY_ARGS NGR_R_ARGS" +NGR_R_OK="#define NGR_R_OK 1" +NGR_R_RETURN="#define NGR_R_RETURN int" + +fi + +esac + + + + + + + + + +{ echo "$as_me:$LINENO: checking for endnetgrent_r" >&5 +echo $ECHO_N "checking for endnetgrent_r... $ECHO_C" >&6; } +if test "${ac_cv_func_endnetgrent_r+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ +/* Define endnetgrent_r to an innocuous variant, in case declares endnetgrent_r. + For example, HP-UX 11i declares gettimeofday. */ +#define endnetgrent_r innocuous_endnetgrent_r + +/* System header to define __stub macros and hopefully few prototypes, + which can conflict with char endnetgrent_r (); below. + Prefer to if __STDC__ is defined, since + exists even on freestanding compilers. */ + +#ifdef __STDC__ +# include +#else +# include +#endif + +#undef endnetgrent_r + +/* 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 endnetgrent_r (); +/* 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_endnetgrent_r || defined __stub___endnetgrent_r +choke me +#endif + +int +main () +{ +return endnetgrent_r (); + ; + return 0; +} +_ACEOF +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 "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 + (eval "$ac_link") 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && { + test -z "$ac_c_werror_flag" || + test ! -s conftest.err + } && test -s conftest$ac_exeext && + $as_test_x conftest$ac_exeext; then + ac_cv_func_endnetgrent_r=yes else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 - ac_cv_func_getnetgrent_r=no + ac_cv_func_endnetgrent_r=no fi rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \ conftest$ac_exeext conftest.$ac_ext fi -{ echo "$as_me:$LINENO: result: $ac_cv_func_getnetgrent_r" >&5 -echo "${ECHO_T}$ac_cv_func_getnetgrent_r" >&6; } -if test $ac_cv_func_getnetgrent_r = yes; then +{ echo "$as_me:$LINENO: result: $ac_cv_func_endnetgrent_r" >&5 +echo "${ECHO_T}$ac_cv_func_endnetgrent_r" >&6; } +if test $ac_cv_func_endnetgrent_r = yes; then cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF @@ -29147,65 +29701,18 @@ cat >>conftest.$ac_ext <<_ACEOF #undef __USE_MISC #define __USE_MISC +#undef _REEENTRANT +#define _REEENTRANT #include -int getnetgrent_r(char **m, char **u, char **d, char *b, int l) {} +#include +void endnetgrent_r(void **ptr); int main () { return (0); - ; - return 0; -} -_ACEOF -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 "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 - (eval "$ac_compile") 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && { - test -z "$ac_c_werror_flag" || - test ! -s conftest.err - } && test -s conftest.$ac_objext; then - -NGR_R_ARGS="#define NGR_R_ARGS char *buf, int buflen" -NGR_R_BAD="#define NGR_R_BAD (0)" -NGR_R_COPY="#define NGR_R_COPY buf, buflen" -NGR_R_COPY_ARGS="#define NGR_R_COPY_ARGS NGR_R_ARGS" -NGR_R_OK="#define NGR_R_OK 1" -NGR_R_RETURN="#define NGR_R_RETURN int" - - -else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - - cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF -/* end confdefs.h. */ - -#undef __USE_MISC -#define __USE_MISC -#include -int getnetgrent_r(char **m, char **u, char **d, char *b, size_t l) {} - -int -main () -{ -return (0); ; return 0; } @@ -29228,12 +29735,9 @@ eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 test ! -s conftest.err } && test -s conftest.$ac_objext; then -NGR_R_ARGS="#define NGR_R_ARGS char *buf, size_t buflen" -NGR_R_BAD="#define NGR_R_BAD (0)" -NGR_R_COPY="#define NGR_R_COPY buf, buflen" -NGR_R_COPY_ARGS="#define NGR_R_COPY_ARGS NGR_R_ARGS" -NGR_R_OK="#define NGR_R_OK 1" -NGR_R_RETURN="#define NGR_R_RETURN int" +NGR_R_END_RESULT="#define NGR_R_END_RESULT(x) /* empty */" +NGR_R_END_RETURN="#define NGR_R_END_RETURN void" +NGR_R_END_ARGS="#define NGR_R_END_ARGS NGR_R_ARGS" else @@ -29249,14 +29753,18 @@ cat >>conftest.$ac_ext <<_ACEOF #undef __USE_MISC #define __USE_MISC +#undef _REEENTRANT +#define _REEENTRANT #include -extern int getnetgrent_r( char **, char **, char **, void **); +#include +void endnetgrent_r(void *ptr); int main () { return (0); + ; return 0; } @@ -29279,13 +29787,9 @@ eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 test ! -s conftest.err } && test -s conftest.$ac_objext; then -NGR_R_ARGS="#define NGR_R_ARGS void **buf" -NGR_R_BAD="#define NGR_R_BAD (0)" -NGR_R_COPY="#define NGR_R_COPY buf" -NGR_R_COPY_ARGS="#define NGR_R_COPY_ARGS NGR_R_ARGS" -NGR_R_OK="#define NGR_R_OK 1" -NGR_R_RETURN="#define NGR_R_RETURN int" -NGR_R_PRIVATE="#define NGR_R_PRIVATE 1" +NGR_R_END_RESULT="#define NGR_R_END_RESULT(x) /* empty */" +NGR_R_END_RETURN="#define NGR_R_END_RETURN void" +NGR_R_END_ARGS="#define NGR_R_END_ARGS void *buf" else @@ -29293,9 +29797,10 @@ else sed 's/^/| /' conftest.$ac_ext >&5 -fi +NGR_R_END_RESULT="#define NGR_R_END_RESULT(x) return (x)" +NGR_R_END_RETURN="#define NGR_R_END_RETURN int" +NGR_R_END_ARGS="#define NGR_R_END_ARGS NGR_R_ARGS" -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi @@ -29306,27 +29811,23 @@ fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext else - NGR_R_ARGS="#define NGR_R_ARGS char *buf, int buflen" -NGR_R_BAD="#define NGR_R_BAD (0)" -NGR_R_COPY="#define NGR_R_COPY buf, buflen" -NGR_R_COPY_ARGS="#define NGR_R_COPY_ARGS NGR_R_ARGS" -NGR_R_OK="#define NGR_R_OK 1" -NGR_R_RETURN="#define NGR_R_RETURN int" - -fi - -esac - + NGR_R_END_RESULT="#define NGR_R_END_RESULT(x) /*empty*/" +NGR_R_END_RETURN="#define NGR_R_END_RETURN void" +NGR_R_END_ARGS="#undef NGR_R_END_ARGS /*empty*/" +cat >>confdefs.h <<\_ACEOF +#define NEED_ENDNETGRENT_R 1 +_ACEOF +fi -{ echo "$as_me:$LINENO: checking for endnetgrent_r" >&5 -echo $ECHO_N "checking for endnetgrent_r... $ECHO_C" >&6; } -if test "${ac_cv_func_endnetgrent_r+set}" = set; then +{ echo "$as_me:$LINENO: checking for setnetgrent_r" >&5 +echo $ECHO_N "checking for setnetgrent_r... $ECHO_C" >&6; } +if test "${ac_cv_func_setnetgrent_r+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else cat >conftest.$ac_ext <<_ACEOF @@ -29335,12 +29836,12 @@ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ -/* Define endnetgrent_r to an innocuous variant, in case declares endnetgrent_r. +/* Define setnetgrent_r to an innocuous variant, in case declares setnetgrent_r. For example, HP-UX 11i declares gettimeofday. */ -#define endnetgrent_r innocuous_endnetgrent_r +#define setnetgrent_r innocuous_setnetgrent_r /* System header to define __stub macros and hopefully few prototypes, - which can conflict with char endnetgrent_r (); below. + which can conflict with char setnetgrent_r (); below. Prefer to if __STDC__ is defined, since exists even on freestanding compilers. */ @@ -29350,7 +29851,7 @@ cat >>conftest.$ac_ext <<_ACEOF # include #endif -#undef endnetgrent_r +#undef setnetgrent_r /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC @@ -29358,18 +29859,18 @@ cat >>conftest.$ac_ext <<_ACEOF #ifdef __cplusplus extern "C" #endif -char endnetgrent_r (); +char setnetgrent_r (); /* 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_endnetgrent_r || defined __stub___endnetgrent_r +#if defined __stub_setnetgrent_r || defined __stub___setnetgrent_r choke me #endif int main () { -return endnetgrent_r (); +return setnetgrent_r (); ; return 0; } @@ -29392,21 +29893,42 @@ eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 test ! -s conftest.err } && test -s conftest$ac_exeext && $as_test_x conftest$ac_exeext; then - ac_cv_func_endnetgrent_r=yes + ac_cv_func_setnetgrent_r=yes else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 - ac_cv_func_endnetgrent_r=no + ac_cv_func_setnetgrent_r=no fi rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \ conftest$ac_exeext conftest.$ac_ext fi -{ echo "$as_me:$LINENO: result: $ac_cv_func_endnetgrent_r" >&5 -echo "${ECHO_T}$ac_cv_func_endnetgrent_r" >&6; } -if test $ac_cv_func_endnetgrent_r = yes; then - cat >conftest.$ac_ext <<_ACEOF +{ echo "$as_me:$LINENO: result: $ac_cv_func_setnetgrent_r" >&5 +echo "${ECHO_T}$ac_cv_func_setnetgrent_r" >&6; } +if test $ac_cv_func_setnetgrent_r = yes; then + +case "$host" in +*bsdi*) + # + # No prototype + # + NGR_R_SET_RESULT="#undef NGR_R_SET_RESULT /*empty*/" + NGR_R_SET_RETURN="#define NGR_R_SET_RETURN void" + NGR_R_SET_ARGS="#define NGR_R_SET_ARGS NGR_R_ARGS" + NGR_R_SET_CONST="#define NGR_R_SET_CONST" + ;; +*hpux*) + # + # No prototype + # + NGR_R_SET_RESULT="#define NGR_R_SET_RESULT NGR_R_OK" + NGR_R_SET_RETURN="#define NGR_R_SET_RETURN int" + NGR_R_SET_ARGS="#undef NGR_R_SET_ARGS /* empty */" + NGR_R_SET_CONST="#define NGR_R_SET_CONST" + ;; +*) +cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext @@ -29415,8 +29937,11 @@ cat >>conftest.$ac_ext <<_ACEOF #undef __USE_MISC #define __USE_MISC +#undef _REEENTRANT +#define _REEENTRANT #include -void endnetgrent_r(void **ptr); +#include +void setnetgrent_r(void **ptr); int @@ -29446,98 +29971,49 @@ eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 test ! -s conftest.err } && test -s conftest.$ac_objext; then -NGR_R_END_RESULT="#define NGR_R_END_RESULT(x) /* empty */" -NGR_R_END_RETURN="#define NGR_R_END_RETURN void" -NGR_R_ENT_ARGS="#define NGR_R_ENT_ARGS NGR_R_ARGS" +NGR_R_SET_RESULT="#undef NGR_R_SET_RESULT /* empty */" +NGR_R_SET_RETURN="#define NGR_R_SET_RETURN void" +NGR_R_SET_ARGS="#define NGR_R_SET_ARGS void **buf" +NGR_R_SET_CONST="#define NGR_R_SET_CONST" else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 - -NGR_R_END_RESULT="#define NGR_R_END_RESULT(x) return (x)" -NGR_R_END_RETURN="#define NGR_R_END_RETURN int" -NGR_R_ENT_ARGS="#define NGR_R_ENT_ARGS NGR_R_ARGS" - - -fi - -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext - -else - NGR_R_END_RESULT="#define NGR_R_END_RESULT(x) /*empty*/" -NGR_R_END_RETURN="#define NGR_R_END_RETURN void" -NGR_R_ENT_ARGS="#undef NGR_R_ENT_ARGS /*empty*/" -cat >>confdefs.h <<\_ACEOF -#define NEED_ENDNETGRENT_R 1 -_ACEOF - - -fi - - - - - -{ echo "$as_me:$LINENO: checking for setnetgrent_r" >&5 -echo $ECHO_N "checking for setnetgrent_r... $ECHO_C" >&6; } -if test "${ac_cv_func_setnetgrent_r+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 -else - cat >conftest.$ac_ext <<_ACEOF + cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ -/* Define setnetgrent_r to an innocuous variant, in case declares setnetgrent_r. - For example, HP-UX 11i declares gettimeofday. */ -#define setnetgrent_r innocuous_setnetgrent_r - -/* System header to define __stub macros and hopefully few prototypes, - which can conflict with char setnetgrent_r (); below. - Prefer to if __STDC__ is defined, since - exists even on freestanding compilers. */ - -#ifdef __STDC__ -# include -#else -# include -#endif -#undef setnetgrent_r +#undef __USE_MISC +#define __USE_MISC +#undef _REEENTRANT +#define _REEENTRANT +#include +#include +extern int setnetgrent_r(char *, void **); -/* 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 setnetgrent_r (); -/* 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_setnetgrent_r || defined __stub___setnetgrent_r -choke me -#endif int main () { -return setnetgrent_r (); +return (0); + ; return 0; } _ACEOF -rm -f conftest.$ac_objext conftest$ac_exeext -if { (ac_try="$ac_link" +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 "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 - (eval "$ac_link") 2>conftest.er1 + (eval "$ac_compile") 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 @@ -29546,44 +30022,49 @@ eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 (exit $ac_status); } && { test -z "$ac_c_werror_flag" || test ! -s conftest.err - } && test -s conftest$ac_exeext && - $as_test_x conftest$ac_exeext; then - ac_cv_func_setnetgrent_r=yes + } && test -s conftest.$ac_objext; then + +NGR_R_SET_RESULT="#define NGR_R_SET_RESULT NGR_R_OK" +NGR_R_SET_RETURN="#define NGR_R_SET_RETURN int" +NGR_R_SET_ARGS="#define NGR_R_SET_ARGS void **buf" +NGR_R_SET_CONST="#define NGR_R_SET_CONST" + + else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 - ac_cv_func_setnetgrent_r=no + +NGR_R_SET_RESULT="#define NGR_R_SET_RESULT NGR_R_OK" +NGR_R_SET_RETURN="#define NGR_R_SET_RETURN int" +NGR_R_SET_ARGS="#undef NGR_R_SET_ARGS" +NGR_R_SET_CONST="#define NGR_R_SET_CONST const" + + fi -rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \ - conftest$ac_exeext conftest.$ac_ext +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi -{ echo "$as_me:$LINENO: result: $ac_cv_func_setnetgrent_r" >&5 -echo "${ECHO_T}$ac_cv_func_setnetgrent_r" >&6; } -if test $ac_cv_func_setnetgrent_r = yes; then -case "$host" in -*bsdi*) - NGR_R_SET_RESULT="#undef NGR_R_SET_RESULT /*empty*/" - NGR_R_SET_RETURN="#define NGR_R_SET_RETURN void" - ;; -*) - NGR_R_SET_RESULT="#define NGR_R_SET_RESULT NGR_R_OK" - NGR_R_SET_RETURN="#define NGR_R_SET_RETURN int" - ;; +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +;; esac else NGR_R_SET_RESULT="#undef NGR_R_SET_RESULT /*empty*/" NGR_R_SET_RETURN="#define NGR_R_SET_RETURN void" +NGR_R_SET_ARGS="#undef NGR_R_SET_ARGS" +NGR_R_SET_CONST="#define NGR_R_SET_CONST const" fi + + + { echo "$as_me:$LINENO: checking for innetgr_r" >&5 echo $ECHO_N "checking for innetgr_r... $ECHO_C" >&6; } if test "${ac_cv_func_innetgr_r+set}" = set; then @@ -33211,7 +33692,6 @@ ISC_PLATFORM_NEEDSTRSEP!$ISC_PLATFORM_NEEDSTRSEP$ac_delim ISC_PLATFORM_NEEDVSNPRINTF!$ISC_PLATFORM_NEEDVSNPRINTF$ac_delim ISC_EXTRA_OBJS!$ISC_EXTRA_OBJS$ac_delim ISC_EXTRA_SRCS!$ISC_EXTRA_SRCS$ac_delim -USE_SYSERROR_LIST!$USE_SYSERROR_LIST$ac_delim ISC_PLATFORM_QUADFORMAT!$ISC_PLATFORM_QUADFORMAT$ac_delim ISC_SOCKLEN_T!$ISC_SOCKLEN_T$ac_delim GETGROUPLIST_ARGS!$GETGROUPLIST_ARGS$ac_delim @@ -33235,6 +33715,7 @@ GROUP_R_OK!$GROUP_R_OK$ac_delim GROUP_R_RETURN!$GROUP_R_RETURN$ac_delim GROUP_R_END_RESULT!$GROUP_R_END_RESULT$ac_delim GROUP_R_END_RETURN!$GROUP_R_END_RETURN$ac_delim +GROUP_R_ENT_ARGS!$GROUP_R_ENT_ARGS$ac_delim _ACEOF if test `sed -n "s/.*$ac_delim\$/X/p" conf$$subs.sed | grep -c X` = 97; then @@ -33276,7 +33757,6 @@ _ACEOF ac_delim='%!_!# ' for ac_last_try in false false false false false :; do cat >conf$$subs.sed <<_ACEOF -GROUP_R_ENT_ARGS!$GROUP_R_ENT_ARGS$ac_delim GROUP_R_SET_RESULT!$GROUP_R_SET_RESULT$ac_delim GROUP_R_SET_RETURN!$GROUP_R_SET_RETURN$ac_delim HOST_R_ARGS!$HOST_R_ARGS$ac_delim @@ -33295,6 +33775,7 @@ HOST_R_SET_RESULT!$HOST_R_SET_RESULT$ac_delim HOST_R_SET_RETURN!$HOST_R_SET_RETURN$ac_delim SETPWENT_VOID!$SETPWENT_VOID$ac_delim SETGRENT_VOID!$SETGRENT_VOID$ac_delim +NGR_R_CONST!$NGR_R_CONST$ac_delim NGR_R_ARGS!$NGR_R_ARGS$ac_delim NGR_R_BAD!$NGR_R_BAD$ac_delim NGR_R_COPY!$NGR_R_COPY$ac_delim @@ -33304,9 +33785,11 @@ NGR_R_RETURN!$NGR_R_RETURN$ac_delim NGR_R_PRIVATE!$NGR_R_PRIVATE$ac_delim NGR_R_END_RESULT!$NGR_R_END_RESULT$ac_delim NGR_R_END_RETURN!$NGR_R_END_RETURN$ac_delim -NGR_R_ENT_ARGS!$NGR_R_ENT_ARGS$ac_delim +NGR_R_END_ARGS!$NGR_R_END_ARGS$ac_delim NGR_R_SET_RESULT!$NGR_R_SET_RESULT$ac_delim NGR_R_SET_RETURN!$NGR_R_SET_RETURN$ac_delim +NGR_R_SET_ARGS!$NGR_R_SET_ARGS$ac_delim +NGR_R_SET_CONST!$NGR_R_SET_CONST$ac_delim PROTO_R_ARGS!$PROTO_R_ARGS$ac_delim PROTO_R_BAD!$PROTO_R_BAD$ac_delim PROTO_R_COPY!$PROTO_R_COPY$ac_delim @@ -33354,7 +33837,7 @@ LIBOBJS!$LIBOBJS$ac_delim LTLIBOBJS!$LTLIBOBJS$ac_delim _ACEOF - if test `sed -n "s/.*$ac_delim\$/X/p" conf$$subs.sed | grep -c X` = 76; then + if test `sed -n "s/.*$ac_delim\$/X/p" conf$$subs.sed | grep -c X` = 78; then break elif $ac_last_try; then { { echo "$as_me:$LINENO: error: could not make $CONFIG_STATUS" >&5 diff --git a/lib/bind/configure.in b/lib/bind/configure.in index 50a6212f..f809a48e 100644 --- a/lib/bind/configure.in +++ b/lib/bind/configure.in @@ -13,7 +13,7 @@ # OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR # PERFORMANCE OF THIS SOFTWARE. -AC_REVISION($Revision: 1.128.128.2 $) +AC_REVISION($Revision: 1.128.128.7 $) AC_INIT(resolv/herror.c) AC_PREREQ(2.13) @@ -169,7 +169,7 @@ AC_PROG_CC AC_HEADER_STDC -AC_CHECK_HEADERS(fcntl.h db.h paths.h sys/time.h unistd.h sys/sockio.h sys/select.h sys/timers.h stropts.h) +AC_CHECK_HEADERS(fcntl.h db.h paths.h sys/time.h unistd.h sys/sockio.h sys/select.h sys/timers.h stropts.h memory.h) AC_C_CONST AC_C_INLINE @@ -461,6 +461,7 @@ AC_SUBST(WANT_THREADS_OBJS) AC_CHECK_FUNC(strlcat, AC_DEFINE(HAVE_STRLCAT)) AC_CHECK_FUNC(memmove, AC_DEFINE(HAVE_MEMMOVE)) AC_CHECK_FUNC(memchr, AC_DEFINE(HAVE_MEMCHR)) +AC_CHECK_FUNC(strtoul, , AC_DEFINE(NEED_STRTOUL)) AC_CHECK_FUNC(if_nametoindex, [USE_IFNAMELINKID="#define USE_IFNAMELINKID 1"], @@ -490,6 +491,16 @@ AC_CHECK_FUNC(strerror, [NEED_STRERROR="#undef NEED_STRERROR"], [NEED_STRERROR="#define NEED_STRERROR 1"]) AC_SUBST(NEED_STRERROR) +if test -n "$NEED_STRERROR" +then + AC_MSG_CHECKING([for extern char * sys_errlist[]]) + AC_TRY_LINK([ extern int sys_nerr; extern char *sys_errlist[]; ], + [ const char *p = sys_errlist[0]; ], + AC_MSG_RESULT(yes) + AC_DEFINE(USE_SYSERROR_LIST), + AC_MSG_RESULT(no)) +fi + # # flockfile is usually provided by pthreads, but we may want to use it # even if compiled with --disable-threads. @@ -666,6 +677,14 @@ AC_SUBST(PURIFY) # # GNU libtool support # +case $host in +sunos*) + # Just set the maximum command line length for sunos as it otherwise + # takes a exceptionally long time to work it out. Required for libtool. + lt_cv_sys_max_cmd_len=4096; + ;; +esac + AC_ARG_WITH(libtool, [ --with-libtool use GNU libtool (following indented options supported)], use_libtool="$withval", use_libtool="no") @@ -976,6 +995,8 @@ AC_SUBST(ISC_PLATFORM_NEEDATON) # case "$host" in *-dec-osf*) + # Tru64 broke send() by defining it to send_OBSOLETE + AC_DEFINE(REENABLE_SEND) # Turn on 4.4BSD style sa_len support. AC_DEFINE(_SOCKADDR_LEN) ;; @@ -1050,6 +1071,7 @@ case "$host" in *-qnx*) PORT_DIR="port/qnx";; *-rhapsody*) PORT_DIR="port/rhapsody";; *-sunos4*) + AC_DEFINE(NEED_SUN4PROTOS) PORT_NONBLOCK="#define PORT_NONBLOCK O_NDELAY" PORT_DIR="port/sunos";; *-solaris2.[[01234]]) @@ -1246,6 +1268,38 @@ found_rt_iflist AC_CHECK_FUNC(strsep, [ISC_PLATFORM_NEEDSTRSEP="#undef ISC_PLATFORM_NEEDSTRSEP"], [ISC_PLATFORM_NEEDSTRSEP="#define ISC_PLATFORM_NEEDSTRSEP 1"]) + + +AC_MSG_CHECKING(for char *sprintf) +AC_TRY_COMPILE([ +#include +], +[ char buf[2]; return(*sprintf(buf,"x"));], +AC_DEFINE(SPRINTF_CHAR) +AC_MSG_RESULT(yes) +, +AC_MSG_RESULT(no) +) + +AC_MSG_CHECKING(for char *vsprintf) +case $host in +*sunos4*) # not decared in any header file. +AC_DEFINE(VSPRINTF_CHAR) +AC_MSG_RESULT(yes) +;; +*) +AC_TRY_COMPILE([ +#include +], +[ char buf[2]; return(*vsprintf(buf,"x"));], +AC_DEFINE(VSPRINTF_CHAR) +AC_MSG_RESULT(yes) +, +AC_MSG_RESULT(no) +) +;; +esac + AC_CHECK_FUNC(vsnprintf, [ISC_PLATFORM_NEEDVSNPRINTF="#undef ISC_PLATFORM_NEEDVSNPRINTF"], [ISC_EXTRA_OBJS="$ISC_EXTRA_OBJS print.$O" @@ -1256,12 +1310,7 @@ AC_SUBST(ISC_PLATFORM_NEEDVSNPRINTF) AC_SUBST(ISC_EXTRA_OBJS) AC_SUBST(ISC_EXTRA_SRCS) -AC_CHECK_FUNC(strerror, - [USE_SYSERROR_LIST="#undef USE_SYSERROR_LIST"], - [USE_SYSERROR_LIST="#define USE_SYSERROR_LIST 1"]) -AC_SUBST(USE_SYSERROR_LIST) -# # Determine the printf format characters to use when printing # values of type isc_int64_t. We make the assumption that platforms # where a "long long" is the same size as a "long" (e.g., Alpha/OSF1) @@ -1865,19 +1914,37 @@ AC_SUBST(SETGRENT_VOID) case $host in ia64-hp-hpux11.*) +NGR_R_CONST="#define NGR_R_CONST" ;; +*-hp-hpux11.*) +# +# HPUX doesn't have a prototype for getnetgrent_r(). +# +NGR_R_CONST="#define NGR_R_CONST" +NGR_R_ARGS="#define NGR_R_ARGS char *buf, int buflen" +NGR_R_BAD="#define NGR_R_BAD (0)" +NGR_R_COPY="#define NGR_R_COPY buf, buflen" +NGR_R_COPY_ARGS="#define NGR_R_COPY_ARGS NGR_R_ARGS" +NGR_R_OK="#define NGR_R_OK 1" +NGR_R_RETURN="#define NGR_R_RETURN int" +;; + *) AC_CHECK_FUNC(getnetgrent_r, AC_TRY_COMPILE( [ #undef __USE_MISC #define __USE_MISC +#undef _REEENTRANT +#define _REEENTRANT #include +#include int getnetgrent_r(char **m, char **u, char **d, char *b, int l) {} ] , [return (0);], [ +NGR_R_CONST="#define NGR_R_CONST" NGR_R_ARGS="#define NGR_R_ARGS char *buf, int buflen" NGR_R_BAD="#define NGR_R_BAD (0)" NGR_R_COPY="#define NGR_R_COPY buf, buflen" @@ -1890,12 +1957,16 @@ AC_TRY_COMPILE( [ #undef __USE_MISC #define __USE_MISC +#undef _REEENTRANT +#define _REEENTRANT #include +#include int getnetgrent_r(char **m, char **u, char **d, char *b, size_t l) {} ] , [return (0);], [ +NGR_R_CONST="#define NGR_R_CONST" NGR_R_ARGS="#define NGR_R_ARGS char *buf, size_t buflen" NGR_R_BAD="#define NGR_R_BAD (0)" NGR_R_COPY="#define NGR_R_COPY buf, buflen" @@ -1908,12 +1979,16 @@ AC_TRY_COMPILE( [ #undef __USE_MISC #define __USE_MISC +#undef _REEENTRANT +#define _REEENTRANT #include -extern int getnetgrent_r( char **, char **, char **, void **); +#include +extern int getnetgrent_r(char **, char **, char **, void **); ] , [return (0);], [ +NGR_R_CONST="#define NGR_R_CONST" NGR_R_ARGS="#define NGR_R_ARGS void **buf" NGR_R_BAD="#define NGR_R_BAD (0)" NGR_R_COPY="#define NGR_R_COPY buf" @@ -1923,10 +1998,35 @@ NGR_R_RETURN="#define NGR_R_RETURN int" NGR_R_PRIVATE="#define NGR_R_PRIVATE 1" ] , +AC_TRY_COMPILE( +[ +#undef __USE_MISC +#define __USE_MISC +#undef _REEENTRANT +#define _REEENTRANT +#include +#include +extern int getnetgrent_r(const char **, const char **, const char **, void *); +] +, +[return (0);], +[ +NGR_R_CONST="#define NGR_R_CONST const" +NGR_R_ARGS="#define NGR_R_ARGS void *buf" +NGR_R_BAD="#define NGR_R_BAD (0)" +NGR_R_COPY="#define NGR_R_COPY buf" +NGR_R_COPY_ARGS="#define NGR_R_COPY_ARGS NGR_R_ARGS" +NGR_R_OK="#define NGR_R_OK 1" +NGR_R_RETURN="#define NGR_R_RETURN int" +NGR_R_PRIVATE="#define NGR_R_PRIVATE 2" +] +, +) ) ) ) , +NGR_R_CONST="#define NGR_R_CONST" NGR_R_ARGS="#define NGR_R_ARGS char *buf, int buflen" NGR_R_BAD="#define NGR_R_BAD (0)" NGR_R_COPY="#define NGR_R_COPY buf, buflen" @@ -1935,6 +2035,7 @@ NGR_R_OK="#define NGR_R_OK 1" NGR_R_RETURN="#define NGR_R_RETURN int" ) esac +AC_SUBST(NGR_R_CONST) AC_SUBST(NGR_R_ARGS) AC_SUBST(NGR_R_BAD) AC_SUBST(NGR_R_COPY) @@ -1948,7 +2049,10 @@ AC_TRY_COMPILE( [ #undef __USE_MISC #define __USE_MISC +#undef _REEENTRANT +#define _REEENTRANT #include +#include void endnetgrent_r(void **ptr); ] , @@ -1957,44 +2061,128 @@ void endnetgrent_r(void **ptr); [ NGR_R_END_RESULT="#define NGR_R_END_RESULT(x) /* empty */" NGR_R_END_RETURN="#define NGR_R_END_RETURN void" -NGR_R_ENT_ARGS="#define NGR_R_ENT_ARGS NGR_R_ARGS" +NGR_R_END_ARGS="#define NGR_R_END_ARGS NGR_R_ARGS" +] +, +AC_TRY_COMPILE( +[ +#undef __USE_MISC +#define __USE_MISC +#undef _REEENTRANT +#define _REEENTRANT +#include +#include +void endnetgrent_r(void *ptr); +] +, +[return (0);] +, +[ +NGR_R_END_RESULT="#define NGR_R_END_RESULT(x) /* empty */" +NGR_R_END_RETURN="#define NGR_R_END_RETURN void" +NGR_R_END_ARGS="#define NGR_R_END_ARGS void *buf" ] , [ NGR_R_END_RESULT="#define NGR_R_END_RESULT(x) return (x)" NGR_R_END_RETURN="#define NGR_R_END_RETURN int" -NGR_R_ENT_ARGS="#define NGR_R_ENT_ARGS NGR_R_ARGS" +NGR_R_END_ARGS="#define NGR_R_END_ARGS NGR_R_ARGS" ] ) +) , NGR_R_END_RESULT="#define NGR_R_END_RESULT(x) /*empty*/" NGR_R_END_RETURN="#define NGR_R_END_RETURN void" -NGR_R_ENT_ARGS="#undef NGR_R_ENT_ARGS /*empty*/" +NGR_R_END_ARGS="#undef NGR_R_END_ARGS /*empty*/" AC_DEFINE(NEED_ENDNETGRENT_R) ) AC_SUBST(NGR_R_END_RESULT) AC_SUBST(NGR_R_END_RETURN) -AC_SUBST(NGR_R_ENT_ARGS) +AC_SUBST(NGR_R_END_ARGS) AC_CHECK_FUNC(setnetgrent_r, [ case "$host" in *bsdi*) + # + # No prototype + # NGR_R_SET_RESULT="#undef NGR_R_SET_RESULT /*empty*/" NGR_R_SET_RETURN="#define NGR_R_SET_RETURN void" + NGR_R_SET_ARGS="#define NGR_R_SET_ARGS NGR_R_ARGS" + NGR_R_SET_CONST="#define NGR_R_SET_CONST" ;; -*) +*hpux*) + # + # No prototype + # NGR_R_SET_RESULT="#define NGR_R_SET_RESULT NGR_R_OK" NGR_R_SET_RETURN="#define NGR_R_SET_RETURN int" + NGR_R_SET_ARGS="#undef NGR_R_SET_ARGS /* empty */" + NGR_R_SET_CONST="#define NGR_R_SET_CONST" ;; +*) +AC_TRY_COMPILE( +[ +#undef __USE_MISC +#define __USE_MISC +#undef _REEENTRANT +#define _REEENTRANT +#include +#include +void setnetgrent_r(void **ptr); +] +, +[return (0);] +, +[ +NGR_R_SET_RESULT="#undef NGR_R_SET_RESULT /* empty */" +NGR_R_SET_RETURN="#define NGR_R_SET_RETURN void" +NGR_R_SET_ARGS="#define NGR_R_SET_ARGS void **buf" +NGR_R_SET_CONST="#define NGR_R_SET_CONST" +] +, +AC_TRY_COMPILE( +[ +#undef __USE_MISC +#define __USE_MISC +#undef _REEENTRANT +#define _REEENTRANT +#include +#include +extern int setnetgrent_r(char *, void **); +] +, +[return (0);] +, +[ +NGR_R_SET_RESULT="#define NGR_R_SET_RESULT NGR_R_OK" +NGR_R_SET_RETURN="#define NGR_R_SET_RETURN int" +NGR_R_SET_ARGS="#define NGR_R_SET_ARGS void **buf" +NGR_R_SET_CONST="#define NGR_R_SET_CONST" +] +, +[ +NGR_R_SET_RESULT="#define NGR_R_SET_RESULT NGR_R_OK" +NGR_R_SET_RETURN="#define NGR_R_SET_RETURN int" +NGR_R_SET_ARGS="#undef NGR_R_SET_ARGS" +NGR_R_SET_CONST="#define NGR_R_SET_CONST const" +] +)) +;; esac ] , NGR_R_SET_RESULT="#undef NGR_R_SET_RESULT /*empty*/" NGR_R_SET_RETURN="#define NGR_R_SET_RETURN void" +NGR_R_SET_ARGS="#undef NGR_R_SET_ARGS" +NGR_R_SET_CONST="#define NGR_R_SET_CONST const" ) + AC_SUBST(NGR_R_SET_RESULT) AC_SUBST(NGR_R_SET_RETURN) +AC_SUBST(NGR_R_SET_ARGS) +AC_SUBST(NGR_R_SET_CONST) AC_CHECK_FUNC(innetgr_r,,AC_DEFINE(NEED_INNETGR_R)) diff --git a/lib/bind/dst/Makefile.in b/lib/bind/dst/Makefile.in index 2cb10cf6..f4e84a49 100644 --- a/lib/bind/dst/Makefile.in +++ b/lib/bind/dst/Makefile.in @@ -1,4 +1,4 @@ -# Copyright (C) 2004, 2007 Internet Systems Consortium, Inc. ("ISC") +# Copyright (C) 2004, 2007, 2008 Internet Systems Consortium, Inc. ("ISC") # Copyright (C) 2001 Internet Software Consortium. # # Permission to use, copy, modify, and/or distribute this software for any @@ -13,7 +13,7 @@ # OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR # PERFORMANCE OF THIS SOFTWARE. -# $Id: Makefile.in,v 1.8 2007/06/19 23:47:13 tbox Exp $ +# $Id: Makefile.in,v 1.8.128.2 2008/03/20 23:46:31 tbox Exp $ srcdir= @srcdir@ VPATH = @srcdir@ @@ -26,7 +26,7 @@ TARGETS= ${OBJS} CRYPTFLAGS= -DCYLINK_DSS -DHMAC_MD5 -DUSE_MD5 -DDNSSAFE -CINCLUDES= -I.. -I${srcdir}/../include ${CRYPTINCL} +CINCLUDES= -I.. -I../include -I${srcdir}/../include ${CRYPTINCL} CDEFINES= ${CRYPTFLAGS} @BIND9_MAKE_RULES@ diff --git a/lib/bind/include/arpa/nameser.h b/lib/bind/include/arpa/nameser.h index b6d34aab..d1cbf428 100644 --- a/lib/bind/include/arpa/nameser.h +++ b/lib/bind/include/arpa/nameser.h @@ -49,7 +49,7 @@ */ /* - * $Id: nameser.h,v 1.8 2005/04/27 04:56:16 sra Exp $ + * $Id: nameser.h,v 1.8.672.1 2008/04/03 02:12:21 marka Exp $ */ #ifndef _ARPA_NAMESER_H_ @@ -427,9 +427,10 @@ typedef enum __ns_cert_types { #define NS_NXT_MAX 127 /*% - * EDNS0 extended flags, host order. + * EDNS0 extended flags and option codes, host order. */ #define NS_OPT_DNSSEC_OK 0x8000U +#define NS_OPT_NSID 3 /*% * Inline versions of get/put short/long. Pointer is advanced. diff --git a/lib/bind/include/isc/misc.h b/lib/bind/include/isc/misc.h index e9ad2c55..8736bf91 100644 --- a/lib/bind/include/isc/misc.h +++ b/lib/bind/include/isc/misc.h @@ -16,7 +16,7 @@ */ /* - * $Id: misc.h,v 1.5 2005/04/27 04:56:18 sra Exp $ + * $Id: misc.h,v 1.5.672.1 2008/02/18 04:10:16 marka Exp $ */ #ifndef _ISC_MISC_H @@ -25,6 +25,7 @@ /*! \file */ #include +#include #define bitncmp __bitncmp /*#define isc_movefile __isc_movefile */ diff --git a/lib/bind/include/netdb.h b/lib/bind/include/netdb.h index e7026150..651cdd87 100644 --- a/lib/bind/include/netdb.h +++ b/lib/bind/include/netdb.h @@ -86,7 +86,7 @@ /* * @(#)netdb.h 8.1 (Berkeley) 6/2/93 - * $Id: netdb.h,v 1.21 2006/10/02 01:14:36 marka Exp $ + * $Id: netdb.h,v 1.21.288.1 2008/02/28 05:46:12 marka Exp $ */ #ifndef _NETDB_H_ @@ -481,7 +481,7 @@ int endservent_r __P((struct servent_data *)); void endservent_r __P((struct servent_data *)); #endif #ifdef _AIX -int setnetgrent_r __P((const char *, void **)); +int setnetgrent_r __P((char *, void **)); void endnetgrent_r __P((void **)); /* * Note: AIX's netdb.h declares innetgr_r() as: diff --git a/lib/bind/include/resolv.h b/lib/bind/include/resolv.h index bb5863e9..409a4881 100644 --- a/lib/bind/include/resolv.h +++ b/lib/bind/include/resolv.h @@ -50,7 +50,7 @@ /*% * @(#)resolv.h 8.1 (Berkeley) 6/2/93 - * $Id: resolv.h,v 1.23 2005/08/25 04:41:46 marka Exp $ + * $Id: resolv.h,v 1.23.564.1 2008/04/03 02:12:21 marka Exp $ */ #ifndef _RESOLV_H_ @@ -250,6 +250,7 @@ union res_sockaddr_union { #define RES_NOCHECKNAME 0x00008000 /*%< do not check names for sanity. */ #define RES_KEEPTSIG 0x00010000 /*%< do not strip TSIG records */ #define RES_BLAST 0x00020000 /*%< blast all recursive servers */ +#define RES_NSID 0x00040000 /*%< request name server ID */ #define RES_NOTLDQUERY 0x00100000 /*%< don't unqualified name as a tld */ #define RES_USE_DNSSEC 0x00200000 /*%< use DNSSEC using OK bit in OPT */ /* #define RES_DEBUG2 0x00400000 */ /* nslookup internal */ @@ -396,6 +397,7 @@ extern const struct res_sym __p_rcode_syms[]; #define sym_ntos __sym_ntos #define sym_ston __sym_ston #define res_nopt __res_nopt +#define res_nopt_rdata __res_nopt_rdata #define res_ndestroy __res_ndestroy #define res_nametoclass __res_nametoclass #define res_nametotype __res_nametotype @@ -482,6 +484,8 @@ int res_findzonecut2 __P((res_state, const char *, ns_class, int, union res_sockaddr_union *, int)); void res_nclose __P((res_state)); int res_nopt __P((res_state, int, u_char *, int, int)); +int res_nopt_rdata __P((res_state, int, u_char *, int, u_char *, + u_short, u_short, u_char *)); void res_send_setqhook __P((res_send_qhook)); void res_send_setrhook __P((res_send_rhook)); int __res_vinit __P((res_state, int)); diff --git a/lib/bind/inet/Makefile.in b/lib/bind/inet/Makefile.in index bd5d352d..31d8baa8 100644 --- a/lib/bind/inet/Makefile.in +++ b/lib/bind/inet/Makefile.in @@ -1,4 +1,4 @@ -# Copyright (C) 2004, 2007 Internet Systems Consortium, Inc. ("ISC") +# Copyright (C) 2004, 2007, 2008 Internet Systems Consortium, Inc. ("ISC") # Copyright (C) 2001 Internet Software Consortium. # # Permission to use, copy, modify, and/or distribute this software for any @@ -13,7 +13,7 @@ # OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR # PERFORMANCE OF THIS SOFTWARE. -# $Id: Makefile.in,v 1.7 2007/06/19 23:47:13 tbox Exp $ +# $Id: Makefile.in,v 1.7.128.2 2008/03/20 23:46:31 tbox Exp $ srcdir= @srcdir@ VPATH = @srcdir@ @@ -30,6 +30,6 @@ SRCS= inet_addr.c inet_cidr_ntop.c inet_cidr_pton.c inet_data.c \ TARGETS= ${OBJS} -CINCLUDES= -I.. -I${srcdir}/../include +CINCLUDES= -I.. -I../include -I${srcdir}/../include @BIND9_MAKE_RULES@ diff --git a/lib/bind/irs/Makefile.in b/lib/bind/irs/Makefile.in index d5b73405..457038aa 100644 --- a/lib/bind/irs/Makefile.in +++ b/lib/bind/irs/Makefile.in @@ -1,4 +1,4 @@ -# Copyright (C) 2004, 2007 Internet Systems Consortium, Inc. ("ISC") +# Copyright (C) 2004, 2007, 2008 Internet Systems Consortium, Inc. ("ISC") # Copyright (C) 2001 Internet Software Consortium. # # Permission to use, copy, modify, and/or distribute this software for any @@ -13,7 +13,7 @@ # OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR # PERFORMANCE OF THIS SOFTWARE. -# $Id: Makefile.in,v 1.12 2007/06/19 23:47:13 tbox Exp $ +# $Id: Makefile.in,v 1.12.128.2 2008/03/20 23:46:31 tbox Exp $ srcdir= @srcdir@ VPATH = @srcdir@ @@ -65,6 +65,6 @@ WANT_IRS_THREADSGR_OBJS=getgrent_r.@O@ TARGETS= ${OBJS} -CINCLUDES= -I.. -I${srcdir}/../include +CINCLUDES= -I.. -I../include -I${srcdir}/../include @BIND9_MAKE_RULES@ diff --git a/lib/bind/irs/getnetgrent.c b/lib/bind/irs/getnetgrent.c index 0adeb616..697de4bd 100644 --- a/lib/bind/irs/getnetgrent.c +++ b/lib/bind/irs/getnetgrent.c @@ -16,7 +16,7 @@ */ #if defined(LIBC_SCCS) && !defined(lint) -static const char rcsid[] = "$Id: getnetgrent.c,v 1.4 2005/04/27 04:56:25 sra Exp $"; +static const char rcsid[] = "$Id: getnetgrent.c,v 1.4.672.1 2008/02/27 00:05:45 marka Exp $"; #endif /* LIBC_SCCS and not lint */ /* Imports */ @@ -76,7 +76,9 @@ innetgr(INNETGR_ARGS) { } int -getnetgrent(char **host, char **user, char **domain) { +getnetgrent(NGR_R_CONST char **host, NGR_R_CONST char **user, + NGR_R_CONST char **domain) +{ struct net_data *net_data = init(); const char *ch, *cu, *cd; int ret; diff --git a/lib/bind/irs/getnetgrent_r.c b/lib/bind/irs/getnetgrent_r.c index fe461f72..331f7b36 100644 --- a/lib/bind/irs/getnetgrent_r.c +++ b/lib/bind/irs/getnetgrent_r.c @@ -16,7 +16,7 @@ */ #if defined(LIBC_SCCS) && !defined(lint) -static const char rcsid[] = "$Id: getnetgrent_r.c,v 1.11 2005/09/03 12:41:38 marka Exp $"; +static const char rcsid[] = "$Id: getnetgrent_r.c,v 1.11.558.2 2008/02/28 05:46:12 marka Exp $"; #endif /* LIBC_SCCS and not lint */ #include @@ -33,10 +33,13 @@ static const char rcsid[] = "$Id: getnetgrent_r.c,v 1.11 2005/09/03 12:41:38 mar #include #ifdef NGR_R_RETURN +#ifndef NGR_R_PRIVATE +#define NGR_R_PRIVATE 0 +#endif static NGR_R_RETURN -copy_protoent(char **, char **, char **, const char *, const char *, - const char *, NGR_R_COPY_ARGS); +copy_protoent(NGR_R_CONST char **, NGR_R_CONST char **, NGR_R_CONST char **, + const char *, const char *, const char *, NGR_R_COPY_ARGS); NGR_R_RETURN innetgr_r(const char *netgroup, const char *host, const char *user, @@ -58,8 +61,10 @@ innetgr_r(const char *netgroup, const char *host, const char *user, */ NGR_R_RETURN -getnetgrent_r(char **machinep, char **userp, char **domainp, NGR_R_ARGS) { - char *mp, *up, *dp; +getnetgrent_r(NGR_R_CONST char **machinep, NGR_R_CONST char **userp, + NGR_R_CONST char **domainp, NGR_R_ARGS) +{ + NGR_R_CONST char *mp, *up, *dp; int res = getnetgrent(&mp, &up, &dp); if (res != 1) @@ -69,15 +74,24 @@ getnetgrent_r(char **machinep, char **userp, char **domainp, NGR_R_ARGS) { mp, up, dp, NGR_R_COPY)); } +#if NGR_R_PRIVATE == 2 +struct private { + char *buf; +}; + +#endif NGR_R_SET_RETURN -#ifdef NGR_R_ENT_ARGS -setnetgrent_r(const char *netgroup, NGR_R_ENT_ARGS) +#ifdef NGR_R_SET_ARGS +setnetgrent_r(NGR_R_SET_CONST char *netgroup, NGR_R_SET_ARGS) #else -setnetgrent_r(const char *netgroup) +setnetgrent_r(NGR_R_SET_CONST char *netgroup) #endif { +#if NGR_R_PRIVATE == 2 + struct private *p; +#endif char *tmp; -#if defined(NGR_R_ENT_ARGS) && !defined(NGR_R_PRIVATE) +#if defined(NGR_R_SET_ARGS) && NGR_R_PRIVATE == 0 UNUSED(buf); UNUSED(buflen); #endif @@ -85,8 +99,17 @@ setnetgrent_r(const char *netgroup) DE_CONST(netgroup, tmp); setnetgrent(tmp); -#ifdef NGR_R_PRIVATE +#if NGR_R_PRIVATE == 1 *buf = NULL; +#elif NGR_R_PRIVATE == 2 + *buf = p = malloc(sizeof(struct private)); + if (p == NULL) +#ifdef NGR_R_SET_RESULT + return (NGR_R_BAD); +#else + return; +#endif + p->buf = NULL; #endif #ifdef NGR_R_SET_RESULT return (NGR_R_SET_RESULT); @@ -94,22 +117,29 @@ setnetgrent_r(const char *netgroup) } NGR_R_END_RETURN -#ifdef NGR_R_ENT_ARGS -endnetgrent_r(NGR_R_ENT_ARGS) +#ifdef NGR_R_END_ARGS +endnetgrent_r(NGR_R_END_ARGS) #else endnetgrent_r(void) #endif { -#if defined(NGR_R_ENT_ARGS) && !defined(NGR_R_PRIVATE) +#if NGR_R_PRIVATE == 2 + struct private *p = buf; +#endif +#if defined(NGR_R_SET_ARGS) && NGR_R_PRIVATE == 0 UNUSED(buf); UNUSED(buflen); #endif endnetgrent(); -#ifdef NGR_R_PRIVATE +#if NGR_R_PRIVATE == 1 if (*buf != NULL) free(*buf); *buf = NULL; +#elif NGR_R_PRIVATE == 2 + if (p->buf != NULL) + free(p->buf); + free(p); #endif NGR_R_END_RESULT(NGR_R_OK); } @@ -117,9 +147,13 @@ endnetgrent_r(void) /* Private */ static int -copy_protoent(char **machinep, char **userp, char **domainp, - const char *mp, const char *up, const char *dp, - NGR_R_COPY_ARGS) { +copy_protoent(NGR_R_CONST char **machinep, NGR_R_CONST char **userp, + NGR_R_CONST char **domainp, const char *mp, const char *up, + const char *dp, NGR_R_COPY_ARGS) +{ +#if NGR_R_PRIVATE == 2 + struct private *p = buf; +#endif char *cp; int n; int len; @@ -130,12 +164,20 @@ copy_protoent(char **machinep, char **userp, char **domainp, if (up != NULL) len += strlen(up) + 1; if (dp != NULL) len += strlen(dp) + 1; -#ifdef NGR_R_PRIVATE - free(*buf); +#if NGR_R_PRIVATE == 1 + if (*buf != NULL) + free(*buf); *buf = malloc(len); if (*buf == NULL) return(NGR_R_BAD); cp = *buf; +#elif NGR_R_PRIVATE == 2 + if (p->buf) + free(p->buf); + p->buf = malloc(len); + if (p->buf == NULL) + return(NGR_R_BAD); + cp = p->buf; #else if (len > (int)buflen) { errno = ERANGE; @@ -144,7 +186,6 @@ copy_protoent(char **machinep, char **userp, char **domainp, cp = buf; #endif - if (mp != NULL) { n = strlen(mp) + 1; strcpy(cp, mp); diff --git a/lib/bind/irs/irp.c b/lib/bind/irs/irp.c index 3bd43783..15e7dbdf 100644 --- a/lib/bind/irs/irp.c +++ b/lib/bind/irs/irp.c @@ -16,7 +16,7 @@ */ #if !defined(LINT) && !defined(CODECENTER) -static const char rcsid[] = "$Id: irp.c,v 1.9 2006/03/09 23:57:56 marka Exp $"; +static const char rcsid[] = "$Id: irp.c,v 1.9.394.2 2008/02/28 05:46:12 marka Exp $"; #endif /* Imports */ @@ -528,7 +528,8 @@ irs_irp_send_command(struct irp_p *pvt, const char *fmt, ...) { } va_start(ap, fmt); - todo = vsprintf(buffer, fmt, ap); + (void) vsprintf(buffer, fmt, ap); + todo = strlen(buffer); va_end(ap); if (todo > (int)sizeof(buffer) - 3) { syslog(LOG_CRIT, "memory overrun in irs_irp_send_command()"); diff --git a/lib/bind/isc/Makefile.in b/lib/bind/isc/Makefile.in index dcd02487..a7df580a 100644 --- a/lib/bind/isc/Makefile.in +++ b/lib/bind/isc/Makefile.in @@ -1,4 +1,4 @@ -# Copyright (C) 2004, 2007 Internet Systems Consortium, Inc. ("ISC") +# Copyright (C) 2004, 2007, 2008 Internet Systems Consortium, Inc. ("ISC") # Copyright (C) 2001 Internet Software Consortium. # # Permission to use, copy, modify, and/or distribute this software for any @@ -13,7 +13,7 @@ # OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR # PERFORMANCE OF THIS SOFTWARE. -# $Id: Makefile.in,v 1.9 2007/06/19 23:47:13 tbox Exp $ +# $Id: Makefile.in,v 1.9.128.2 2008/03/20 23:46:31 tbox Exp $ srcdir= @srcdir@ VPATH = @srcdir@ @@ -30,6 +30,6 @@ SRCS= assertions.c base64.c bitncmp.c ctl_clnt.c ctl_p.c \ TARGETS= ${OBJS} -CINCLUDES= -I.. -I${srcdir}/../include +CINCLUDES= -I.. -I../include -I${srcdir}/../include @BIND9_MAKE_RULES@ diff --git a/lib/bind/isc/ctl_clnt.c b/lib/bind/isc/ctl_clnt.c index 5438868f..cc8ee2f9 100644 --- a/lib/bind/isc/ctl_clnt.c +++ b/lib/bind/isc/ctl_clnt.c @@ -1,5 +1,5 @@ #if !defined(lint) && !defined(SABER) -static const char rcsid[] = "$Id: ctl_clnt.c,v 1.9 2007/05/18 06:22:03 marka Exp $"; +static const char rcsid[] = "$Id: ctl_clnt.c,v 1.9.140.1 2008/02/18 04:10:16 marka Exp $"; #endif /* not lint */ /* @@ -38,6 +38,9 @@ static const char rcsid[] = "$Id: ctl_clnt.c,v 1.9 2007/05/18 06:22:03 marka Exp #include #include #include +#ifdef HAVE_MEMORY_H +#include +#endif #include #include diff --git a/lib/bind/isc/ctl_srvr.c b/lib/bind/isc/ctl_srvr.c index 836b85a8..919dec7c 100644 --- a/lib/bind/isc/ctl_srvr.c +++ b/lib/bind/isc/ctl_srvr.c @@ -1,5 +1,5 @@ #if !defined(lint) && !defined(SABER) -static const char rcsid[] = "$Id: ctl_srvr.c,v 1.8 2006/12/07 04:46:27 marka Exp $"; +static const char rcsid[] = "$Id: ctl_srvr.c,v 1.8.246.1 2008/02/18 04:10:16 marka Exp $"; #endif /* not lint */ /* @@ -40,6 +40,9 @@ static const char rcsid[] = "$Id: ctl_srvr.c,v 1.8 2006/12/07 04:46:27 marka Exp #include #include #include +#ifdef HAVE_MEMORY_H +#include +#endif #include #include diff --git a/lib/bind/isc/logging.c b/lib/bind/isc/logging.c index b2daff40..313a6c80 100644 --- a/lib/bind/isc/logging.c +++ b/lib/bind/isc/logging.c @@ -16,7 +16,7 @@ */ #if !defined(LINT) && !defined(CODECENTER) -static const char rcsid[] = "$Id: logging.c,v 1.7 2005/04/27 04:56:38 sra Exp $"; +static const char rcsid[] = "$Id: logging.c,v 1.7.672.1 2008/02/28 05:46:12 marka Exp $"; #endif /* not lint */ #include "port_before.h" @@ -43,12 +43,6 @@ static const char rcsid[] = "$Id: logging.c,v 1.7 2005/04/27 04:56:38 sra Exp $" #include "port_after.h" -#ifdef VSPRINTF_CHAR -# define VSPRINTF(x) strlen(vsprintf/**/x) -#else -# define VSPRINTF(x) ((size_t)vsprintf x) -#endif - #include "logging_p.h" static const int syslog_priority[] = { LOG_DEBUG, LOG_INFO, LOG_NOTICE, @@ -363,8 +357,8 @@ log_vwrite(log_context lc, int category, int level, const char *format, continue; if (!did_vsprintf) { - if (VSPRINTF((lc->buffer, format, args)) > - (size_t)LOG_BUFFER_SIZE) { + (void)vsprintf(lc->buffer, format, args); + if (strlen(lc->buffer) > (size_t)LOG_BUFFER_SIZE) { syslog(LOG_CRIT, "memory overrun in log_vwrite()"); exit(1); diff --git a/lib/bind/nameser/Makefile.in b/lib/bind/nameser/Makefile.in index 86365265..695d17c6 100644 --- a/lib/bind/nameser/Makefile.in +++ b/lib/bind/nameser/Makefile.in @@ -1,4 +1,4 @@ -# Copyright (C) 2004, 2007 Internet Systems Consortium, Inc. ("ISC") +# Copyright (C) 2004, 2007, 2008 Internet Systems Consortium, Inc. ("ISC") # Copyright (C) 2001 Internet Software Consortium. # # Permission to use, copy, modify, and/or distribute this software for any @@ -13,7 +13,7 @@ # OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR # PERFORMANCE OF THIS SOFTWARE. -# $Id: Makefile.in,v 1.7 2007/06/19 23:47:13 tbox Exp $ +# $Id: Makefile.in,v 1.7.128.2 2008/03/20 23:46:31 tbox Exp $ srcdir= @srcdir@ VPATH = @srcdir@ @@ -26,6 +26,6 @@ SRCS= ns_date.c ns_name.c ns_netint.c ns_parse.c ns_print.c \ TARGETS= ${OBJS} -CINCLUDES= -I.. -I${srcdir}/../include +CINCLUDES= -I.. -I../include -I${srcdir}/../include @BIND9_MAKE_RULES@ diff --git a/lib/bind/port_after.h.in b/lib/bind/port_after.h.in index 6449301b..b7496a2d 100644 --- a/lib/bind/port_after.h.in +++ b/lib/bind/port_after.h.in @@ -15,7 +15,7 @@ * PERFORMANCE OF THIS SOFTWARE. */ -/* $Id: port_after.h.in,v 1.53.128.2 2008/01/23 02:15:32 tbox Exp $ */ +/* $Id: port_after.h.in,v 1.53.128.7 2008/02/28 05:46:12 marka Exp $ */ #ifndef port_after_h #define port_after_h @@ -35,12 +35,20 @@ #include #endif /* HAVE_SYS_SELECT_H */ +#ifdef REENABLE_SEND +#undef send +#endif + @NEED_PSELECT@ @HAVE_SA_LEN@ @HAVE_MINIMUM_IFREQ@ @NEED_DAEMON@ @NEED_STRSEP@ @NEED_STRERROR@ +#ifdef NEED_STRERROR +const char *isc_strerror(int); +#define strerror isc_strerror +#endif @HAS_INET6_STRUCTS@ @HAVE_SIN6_SCOPE_ID@ @NEED_IN6ADDR_ANY@ @@ -49,7 +57,6 @@ @NEED_GETTIMEOFDAY@ @HAVE_STRNDUP@ @USE_FIONBIO_IOCTL@ -@USE_SYSERROR_LIST@ @INNETGR_ARGS@ @SETNETGRENT_ARGS@ @USE_IFNAMELINKID@ @@ -335,16 +342,16 @@ innetgr_r(const char *, const char *, const char *, const char *); #endif #ifdef NEED_SETNETGRENT_R -#ifdef NGR_R_ENT_ARGS -NGR_R_SET_RETURN setnetgrent_r(const char *netgroup, NGR_R_ENT_ARGS); +#ifdef NGR_R_SET_ARGS +NGR_R_SET_RETURN setnetgrent_r(NGR_R_SET_CONST char *netgroup, NGR_R_SET_ARGS); #else -NGR_R_SET_RETURN setnetgrent_r(const char *netgroup); +NGR_R_SET_RETURN setnetgrent_r(NGR_R_SET_CONST char *netgroup); #endif #endif #ifdef NEED_ENDNETGRENT_R -#ifdef NGR_R_ENT_ARGS -NGR_R_END_RETURN endnetgrent_r(NGR_R_ENT_ARGS); +#ifdef NGR_R_END_ARGS +NGR_R_END_RETURN endnetgrent_r(NGR_R_END_ARGS); #else NGR_R_END_RETURN endnetgrent_r(void); #endif @@ -410,10 +417,12 @@ int isc__gettimeofday(struct timeval *tvp, struct _TIMEZONE *tzp); int isc__gettimeofday(struct timeval *tp, struct timezone *tzp); #endif -int getnetgrent(char **machinep, char **userp, char **domainp); +int getnetgrent(NGR_R_CONST char **machinep, NGR_R_CONST char **userp, + NGR_R_CONST char **domainp); #ifdef NGR_R_ARGS -int getnetgrent_r(char **machinep, char **userp, char **domainp, NGR_R_ARGS); +int getnetgrent_r(NGR_R_CONST char **machinep, NGR_R_CONST char **userp, + NGR_R_CONST char **domainp, NGR_R_ARGS); #endif #ifdef SETNETGRENT_ARGS @@ -431,11 +440,87 @@ int innetgr(const char *netgroup, const char *machine, const char *user, const char *domain); #endif -#ifdef NGR_R_ENT_ARGS +#ifdef NGR_R_SET_ARGS NGR_R_SET_RETURN -setnetgrent_r(const char *netgroup, NGR_R_ENT_ARGS); +setnetgrent_r(NGR_R_SET_CONST char *netgroup, NGR_R_SET_ARGS); #else NGR_R_SET_RETURN -setnetgrent_r(const char *netgroup); +setnetgrent_r(NGR_R_SET_CONST char *netgroup); +#endif + +#ifdef NEED_STRTOUL +unsigned long strtoul(const char *, char **, int); +#endif + +#ifdef NEED_SUN4PROTOS +#include +#ifndef __SIZE_TYPE__ +#define __SIZE_TYPE__ int +#endif +struct sockaddr; +struct iovec; +struct timeval; +struct timezone; +int fprintf(FILE *, const char *, ...); +int getsockname(int, struct sockaddr *, int *); +int getpeername(int, struct sockaddr *, int *); +int socket(int, int, int); +int connect(int, const struct sockaddr *, int); +int writev(int, struct iovec *, int); +int readv(int, struct iovec *, int); +int send(int, const char *, int, int); +void bzero(char *, int); +int recvfrom(int, char *, int, int, struct sockaddr *, int *); +int syslog(int, const char *, ... ); +int printf(const char *, ...); +__SIZE_TYPE__ fread(void *, __SIZE_TYPE__, __SIZE_TYPE__, FILE *); +__SIZE_TYPE__ fwrite(const void *, __SIZE_TYPE__, __SIZE_TYPE__, FILE *); +int fclose(FILE *); +int ungetc(int, FILE *); +int scanf(const char *, ...); +int sscanf(const char *, const char *, ... ); +int tolower(int); +int toupper(int); +int strcasecmp(const char *, const char *); +int strncasecmp(const char *, const char *, int); +int select(int, fd_set *, fd_set *, fd_set *, struct timeval *); +#ifdef gettimeofday +#undef gettimeofday +int gettimeofday(struct timeval *, struct timezone *); +#define gettimeofday isc__gettimeofday +#else +int gettimeofday(struct timeval *, struct timezone *); +#endif +long strtol(const char*, char **, int); +int fseek(FILE *, long, int); +int setsockopt(int, int, int, const char *, int); +int bind(int, const struct sockaddr *, int); +void bcopy(char *, char *, int); +int fputc(char, FILE *); +int listen(int, int); +int accept(int, struct sockaddr *, int *); +int getsockopt(int, int, int, char *, int *); +int vfprintf(FILE *, const char *, va_list); +int fflush(FILE *); +int fgetc(FILE *); +int fputs(const char *, FILE *); +int fchown(int, int, int); +void setbuf(FILE *, char *); +int gethostname(char *, int); +int rename(const char *, const char *); +time_t time(time_t *); +int fscanf(FILE *, const char *, ...); +int sscanf(const char *, const char *, ...); +int ioctl(int, int, caddr_t); +void perror(const char *); + +#if !defined(__USE_FIXED_PROTOTYPES__) && !defined(__cplusplus) && !defined(__STRICT_ANSI__) +/* + * 'gcc -ansi' changes the prototype for vsprintf(). + * Use this prototype when 'gcc -ansi' is not in effect. + */ +char *vsprintf(char *, const char *, va_list); #endif #endif + +#endif diff --git a/lib/bind/port_before.h.in b/lib/bind/port_before.h.in index 19552f92..49100912 100644 --- a/lib/bind/port_before.h.in +++ b/lib/bind/port_before.h.in @@ -1,5 +1,5 @@ /* - * Copyright (C) 2005-2007 Internet Systems Consortium, Inc. ("ISC") + * Copyright (C) 2005-2008 Internet Systems Consortium, Inc. ("ISC") * Copyright (C) 2001 Internet Software Consortium. * * Permission to use, copy, modify, and/or distribute this software for any @@ -15,12 +15,16 @@ * PERFORMANCE OF THIS SOFTWARE. */ -/* $Id: port_before.h.in,v 1.27 2007/06/18 23:47:34 tbox Exp $ */ +/* $Id: port_before.h.in,v 1.27.128.3 2008/02/28 05:46:12 marka Exp $ */ #ifndef port_before_h #define port_before_h #include +#ifdef NEED_SUN4PROTOS +#define _PARAMS(x) x +#endif + struct group; /* silence warning */ struct passwd; /* silence warning */ struct timeval; /* silence warning */ @@ -34,8 +38,8 @@ struct timezone; /* silence warning */ #ifdef ISC_PLATFORM_NEEDTIMESPEC #include /* For time_t */ struct timespec { - time_t tv_sec; /* seconds */ - long tv_nsec; /* nanoseconds */ + time_t tv_sec; /* seconds */ + long tv_nsec; /* nanoseconds */ }; #endif #ifndef HAVE_MEMMOVE @@ -100,15 +104,22 @@ struct timespec { @NGR_R_BAD@ @NGR_R_COPY@ @NGR_R_COPY_ARGS@ +@NGR_R_CONST@ @NGR_R_END_RESULT@ @NGR_R_END_RETURN@ -@NGR_R_ENT_ARGS@ +@NGR_R_END_ARGS@ @NGR_R_OK@ @NGR_R_RETURN@ +@NGR_R_SET_CONST@ @NGR_R_SET_RESULT@ @NGR_R_SET_RETURN@ +@NGR_R_SET_ARGS@ @NGR_R_PRIVATE@ +#if !defined(NGR_R_SET_ARGS) && defined(NGR_R_END_ARGS) +#define NGR_R_SET_ARGS NGR_R_END_ARGS +#endif + @PROTO_R_ARGS@ @PROTO_R_BAD@ @PROTO_R_COPY@ @@ -153,11 +164,11 @@ struct timespec { #define DE_CONST(konst, var) \ - do { \ - union { const void *k; void *v; } _u; \ - _u.k = konst; \ - var = _u.v; \ - } while (0) + do { \ + union { const void *k; void *v; } _u; \ + _u.k = konst; \ + var = _u.v; \ + } while (0) #define UNUSED(x) (x) = (x) diff --git a/lib/bind/resolv/Makefile.in b/lib/bind/resolv/Makefile.in index d5bbb674..d6ebd60c 100644 --- a/lib/bind/resolv/Makefile.in +++ b/lib/bind/resolv/Makefile.in @@ -1,4 +1,4 @@ -# Copyright (C) 2004, 2005, 2007 Internet Systems Consortium, Inc. ("ISC") +# Copyright (C) 2004, 2005, 2007, 2008 Internet Systems Consortium, Inc. ("ISC") # Copyright (C) 2001 Internet Software Consortium. # # Permission to use, copy, modify, and/or distribute this software for any @@ -13,7 +13,7 @@ # OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR # PERFORMANCE OF THIS SOFTWARE. -# $Id: Makefile.in,v 1.8 2007/06/19 23:47:16 tbox Exp $ +# $Id: Makefile.in,v 1.8.128.2 2008/03/20 23:46:31 tbox Exp $ srcdir= @srcdir@ VPATH = @srcdir@ @@ -28,7 +28,7 @@ SRCS= herror.c mtctxres.c res_comp.c res_data.c res_debug.c \ TARGETS= ${OBJS} -CINCLUDES= -I.. -I${srcdir}/../include +CINCLUDES= -I.. -I../include -I${srcdir}/../include CWARNINGS= @BIND9_MAKE_RULES@ diff --git a/lib/bind/resolv/res_debug.c b/lib/bind/resolv/res_debug.c index b12a112f..100133e2 100644 --- a/lib/bind/resolv/res_debug.c +++ b/lib/bind/resolv/res_debug.c @@ -95,7 +95,7 @@ #if defined(LIBC_SCCS) && !defined(lint) static const char sccsid[] = "@(#)res_debug.c 8.1 (Berkeley) 6/4/93"; -static const char rcsid[] = "$Id: res_debug.c,v 1.15 2005/07/28 06:51:50 marka Exp $"; +static const char rcsid[] = "$Id: res_debug.c,v 1.15.574.1 2008/04/03 02:12:21 marka Exp $"; #endif /* LIBC_SCCS and not lint */ #include "port_before.h" @@ -189,10 +189,56 @@ do_section(const res_state statp, p_type(ns_rr_type(rr)), p_class(ns_rr_class(rr))); else if (section == ns_s_ar && ns_rr_type(rr) == ns_t_opt) { + u_int16_t optcode, optlen, rdatalen = ns_rr_rdlen(rr); u_int32_t ttl = ns_rr_ttl(rr); + fprintf(file, "; EDNS: version: %u, udp=%u, flags=%04x\n", (ttl>>16)&0xff, ns_rr_class(rr), ttl&0xffff); + + while (rdatalen >= 4) { + const u_char *cp = ns_rr_rdata(rr); + int i; + + GETSHORT(optcode, cp); + GETSHORT(optlen, cp); + + if (optcode == NS_OPT_NSID) { + fputs("; NSID: ", file); + if (optlen == 0) { + fputs("; NSID\n", file); + } else { + fputs("; NSID: ", file); + for (i = 0; i < optlen; i++) + fprintf(file, "%02x ", + cp[i]); + fputs(" (",file); + for (i = 0; i < optlen; i++) + fprintf(file, "%c", + isprint(cp[i])? + cp[i] : '.'); + fputs(")\n", file); + } + } else { + if (optlen == 0) { + fprintf(file, "; OPT=%u\n", + optcode); + } else { + fprintf(file, "; OPT=%u: ", + optcode); + for (i = 0; i < optlen; i++) + fprintf(file, "%02x ", + cp[i]); + fputs(" (",file); + for (i = 0; i < optlen; i++) + fprintf(file, "%c", + isprint(cp[i]) ? + cp[i] : '.'); + fputs(")\n", file); + } + } + rdatalen -= 4 + optlen; + } } else { n = ns_sprintrr(handle, &rr, NULL, NULL, buf, buflen); @@ -204,7 +250,7 @@ do_section(const res_state statp, buf = malloc(buflen += 1024); if (buf == NULL) { fprintf(file, - ";; memory allocation failure\n"); + ";; memory allocation failure\n"); return; } continue; @@ -381,7 +427,7 @@ const struct res_sym __p_default_section_syms[] = { {ns_s_an, "ANSWER", (char *)0}, {ns_s_ns, "AUTHORITY", (char *)0}, {ns_s_ar, "ADDITIONAL", (char *)0}, - {0, (char *)0, (char *)0} + {0, (char *)0, (char *)0} }; const struct res_sym __p_update_section_syms[] = { @@ -389,7 +435,7 @@ const struct res_sym __p_update_section_syms[] = { {S_PREREQ, "PREREQUISITE", (char *)0}, {S_UPDATE, "UPDATE", (char *)0}, {S_ADDT, "ADDITIONAL", (char *)0}, - {0, (char *)0, (char *)0} + {0, (char *)0, (char *)0} }; const struct res_sym __p_key_syms[] = { @@ -617,6 +663,7 @@ p_option(u_long option) { case RES_USE_INET6: return "inet6"; #ifdef RES_USE_EDNS0 /*%< KAME extension */ case RES_USE_EDNS0: return "edns0"; + case RES_NSID: return "nsid"; #endif #ifdef RES_USE_DNAME case RES_USE_DNAME: return "dname"; diff --git a/lib/bind/resolv/res_mkquery.c b/lib/bind/resolv/res_mkquery.c index 09133baf..1392b6bb 100644 --- a/lib/bind/resolv/res_mkquery.c +++ b/lib/bind/resolv/res_mkquery.c @@ -70,7 +70,7 @@ #if defined(LIBC_SCCS) && !defined(lint) static const char sccsid[] = "@(#)res_mkquery.c 8.1 (Berkeley) 6/4/93"; -static const char rcsid[] = "$Id: res_mkquery.c,v 1.6 2005/04/27 04:56:42 sra Exp $"; +static const char rcsid[] = "$Id: res_mkquery.c,v 1.6.672.1 2008/04/03 02:12:21 marka Exp $"; #endif /* LIBC_SCCS and not lint */ #include "port_before.h" @@ -203,9 +203,6 @@ res_nmkquery(res_state statp, #ifdef RES_USE_EDNS0 /* attach OPT pseudo-RR, as documented in RFC2671 (EDNS0). */ -#ifndef T_OPT -#define T_OPT 41 -#endif int res_nopt(res_state statp, @@ -230,13 +227,14 @@ res_nopt(res_state statp, if ((ep - cp) < 1 + RRFIXEDSZ) return (-1); - *cp++ = 0; /*%< "." */ - ns_put16(T_OPT, cp); /*%< TYPE */ + *cp++ = 0; /*%< "." */ + ns_put16(ns_t_opt, cp); /*%< TYPE */ cp += INT16SZ; - ns_put16(anslen & 0xffff, cp); /*%< CLASS = UDP payload size */ + ns_put16(anslen & 0xffff, cp); /*%< CLASS = UDP payload size */ cp += INT16SZ; - *cp++ = NOERROR; /*%< extended RCODE */ - *cp++ = 0; /*%< EDNS version */ + *cp++ = NOERROR; /*%< extended RCODE */ + *cp++ = 0; /*%< EDNS version */ + if (statp->options & RES_USE_DNSSEC) { #ifdef DEBUG if (statp->options & RES_DEBUG) @@ -246,12 +244,60 @@ res_nopt(res_state statp, } ns_put16(flags, cp); cp += INT16SZ; - ns_put16(0, cp); /*%< RDLEN */ + + ns_put16(0U, cp); /*%< RDLEN */ cp += INT16SZ; + hp->arcount = htons(ntohs(hp->arcount) + 1); return (cp - buf); } + +/* + * Construct variable data (RDATA) block for OPT psuedo-RR, append it + * to the buffer, then update the RDLEN field (previously set to zero by + * res_nopt()) with the new RDATA length. + */ +int +res_nopt_rdata(res_state statp, + int n0, /*%< current offset in buffer */ + u_char *buf, /*%< buffer to put query */ + int buflen, /*%< size of buffer */ + u_char *rdata, /*%< ptr to start of opt rdata */ + u_short code, /*%< OPTION-CODE */ + u_short len, /*%< OPTION-LENGTH */ + u_char *data) /*%< OPTION_DATA */ +{ + register u_char *cp, *ep; + +#ifdef DEBUG + if ((statp->options & RES_DEBUG) != 0U) + printf(";; res_nopt_rdata()\n"); +#endif + + cp = buf + n0; + ep = buf + buflen; + + if ((ep - cp) < (4 + len)) + return (-1); + + if (rdata < (buf + 2) || rdata >= ep) + return (-1); + + ns_put16(code, cp); + cp += INT16SZ; + + ns_put16(len, cp); + cp += INT16SZ; + + memcpy(cp, data, len); + cp += len; + + len = cp - rdata; + ns_put16(len, rdata - 2); /* Update RDLEN field */ + + return (cp - buf); +} #endif /*! \file */ diff --git a/lib/bind/resolv/res_query.c b/lib/bind/resolv/res_query.c index 8dd68e8d..4a39c8bb 100644 --- a/lib/bind/resolv/res_query.c +++ b/lib/bind/resolv/res_query.c @@ -70,7 +70,7 @@ #if defined(LIBC_SCCS) && !defined(lint) static const char sccsid[] = "@(#)res_query.c 8.1 (Berkeley) 6/4/93"; -static const char rcsid[] = "$Id: res_query.c,v 1.8 2005/04/27 04:56:42 sra Exp $"; +static const char rcsid[] = "$Id: res_query.c,v 1.8.672.2 2008/04/03 10:49:22 marka Exp $"; #endif /* LIBC_SCCS and not lint */ #include "port_before.h" @@ -116,8 +116,9 @@ res_nquery(res_state statp, { u_char buf[MAXPACKET]; HEADER *hp = (HEADER *) answer; - int n; u_int oflags; + u_char *rdata; + int n; oflags = statp->_flags; @@ -132,8 +133,14 @@ again: buf, sizeof(buf)); #ifdef RES_USE_EDNS0 if (n > 0 && (statp->_flags & RES_F_EDNS0ERR) == 0 && - (statp->options & (RES_USE_EDNS0|RES_USE_DNSSEC)) != 0U) + (statp->options & (RES_USE_EDNS0|RES_USE_DNSSEC|RES_NSID))) { n = res_nopt(statp, n, buf, sizeof(buf), anslen); + rdata = &buf[n]; + if (n > 0 && (statp->options & RES_NSID) != 0U) { + n = res_nopt_rdata(statp, n, buf, sizeof(buf), rdata, + NS_OPT_NSID, 0, NULL); + } + } #endif if (n <= 0) { #ifdef DEBUG @@ -143,6 +150,7 @@ again: RES_SET_H_ERRNO(statp, NO_RECOVERY); return (n); } + n = res_nsend(statp, buf, n, answer, anslen); if (n < 0) { #ifdef RES_USE_EDNS0 diff --git a/lib/bind9/api b/lib/bind9/api index e1227550..f606e999 100644 --- a/lib/bind9/api +++ b/lib/bind9/api @@ -1,3 +1,3 @@ LIBINTERFACE = 40 -LIBREVISION = 1 +LIBREVISION = 3 LIBAGE = 0 diff --git a/lib/bind9/check.c b/lib/bind9/check.c index 92a3ba73..d06afbda 100644 --- a/lib/bind9/check.c +++ b/lib/bind9/check.c @@ -1,5 +1,5 @@ /* - * Copyright (C) 2004-2007 Internet Systems Consortium, Inc. ("ISC") + * Copyright (C) 2004-2008 Internet Systems Consortium, Inc. ("ISC") * Copyright (C) 2001-2003 Internet Software Consortium. * * Permission to use, copy, modify, and/or distribute this software for any @@ -15,7 +15,7 @@ * PERFORMANCE OF THIS SOFTWARE. */ -/* $Id: check.c,v 1.86 2007/12/14 01:27:12 marka Exp $ */ +/* $Id: check.c,v 1.86.10.4 2008/04/23 21:43:57 each Exp $ */ /*! \file */ @@ -46,10 +46,6 @@ #include -#ifndef DNS_RDATASET_FIXED -#define DNS_RDATASET_FIXED 1 -#endif - static void freekey(char *key, unsigned int type, isc_symvalue_t value, void *userarg) { UNUSED(type); @@ -128,7 +124,8 @@ check_orderent(const cfg_obj_t *ent, isc_log_t *logctx) { } else if (strcasecmp(cfg_obj_asstring(obj), "fixed") == 0) { #if !DNS_RDATASET_FIXED cfg_obj_log(obj, logctx, ISC_LOG_WARNING, - "rrset-order: order 'fixed' not fully implemented"); + "rrset-order: order 'fixed' was disabled at " + "compilation time"); #endif } else if (strcasecmp(cfg_obj_asstring(obj), "random") != 0 && strcasecmp(cfg_obj_asstring(obj), "cyclic") != 0) { @@ -222,13 +219,24 @@ check_dual_stack(const cfg_obj_t *options, isc_log_t *logctx) { } static isc_result_t -check_forward(const cfg_obj_t *options, isc_log_t *logctx) { +check_forward(const cfg_obj_t *options, const cfg_obj_t *global, + isc_log_t *logctx) +{ const cfg_obj_t *forward = NULL; const cfg_obj_t *forwarders = NULL; (void)cfg_map_get(options, "forward", &forward); (void)cfg_map_get(options, "forwarders", &forwarders); + if (forwarders != NULL && global != NULL) { + const char *file = cfg_obj_file(global); + unsigned int line = cfg_obj_line(global); + cfg_obj_log(forwarders, logctx, ISC_LOG_ERROR, + "forwarders declared in root zone and " + "in general configuration: %s:%u", + file, line); + return (ISC_R_FAILURE); + } if (forward != NULL && forwarders == NULL) { cfg_obj_log(forward, logctx, ISC_LOG_ERROR, "no matching 'forwarders' statement"); @@ -380,7 +388,7 @@ checkacl(const char *aclname, cfg_aclconfctx_t *actx, const cfg_obj_t *zconfig, if (aclobj == NULL) return (ISC_R_SUCCESS); result = cfg_acl_fromconfig(aclobj, config, logctx, - actx, mctx, 0, &acl); + actx, mctx, 0, &acl); if (acl != NULL) dns_acl_detach(&acl); return (result); @@ -392,9 +400,9 @@ check_viewacls(cfg_aclconfctx_t *actx, const cfg_obj_t *voptions, { isc_result_t result = ISC_R_SUCCESS, tresult; int i = 0; - + static const char *acls[] = { "allow-query", "allow-query-on", - "allow-query-cache", "allow-query-cache-on", + "allow-query-cache", "allow-query-cache-on", "blackhole", "match-clients", "match-destinations", "sortlist", NULL }; @@ -402,7 +410,7 @@ check_viewacls(cfg_aclconfctx_t *actx, const cfg_obj_t *voptions, tresult = checkacl(acls[i++], actx, NULL, voptions, config, logctx, mctx); if (tresult != ISC_R_SUCCESS) - result = tresult; + result = tresult; } return (result); } @@ -424,8 +432,8 @@ check_recursionacls(cfg_aclconfctx_t *actx, const cfg_obj_t *voptions, int i = 0; static const char *acls[] = { "allow-recursion", "allow-recursion-on", - NULL }; - + NULL }; + if (voptions != NULL) cfg_map_get(voptions, "recursion", &obj); if (obj == NULL && config != NULL) { @@ -456,14 +464,14 @@ check_recursionacls(cfg_aclconfctx_t *actx, const cfg_obj_t *voptions, if (options != NULL) cfg_map_get(options, acls[i], &aclobj); } - if (aclobj == NULL) + if (aclobj == NULL) continue; tresult = cfg_acl_fromconfig(aclobj, config, logctx, actx, mctx, 0, &acl); if (tresult != ISC_R_SUCCESS) - result = tresult; + result = tresult; if (acl == NULL) continue; @@ -480,7 +488,7 @@ check_recursionacls(cfg_aclconfctx_t *actx, const cfg_obj_t *voptions, if (acl != NULL) dns_acl_detach(&acl); - } + } return (result); } @@ -544,8 +552,8 @@ check_options(const cfg_obj_t *options, isc_log_t *logctx, isc_mem_t *mctx) { (void)cfg_map_get(options, "preferred-glue", &obj); if (obj != NULL) { const char *str; - str = cfg_obj_asstring(obj); - if (strcasecmp(str, "a") != 0 && + str = cfg_obj_asstring(obj); + if (strcasecmp(str, "a") != 0 && strcasecmp(str, "aaaa") != 0 && strcasecmp(str, "none") != 0) cfg_obj_log(obj, logctx, ISC_LOG_ERROR, @@ -574,7 +582,7 @@ check_options(const cfg_obj_t *options, isc_log_t *logctx, isc_mem_t *mctx) { isc_buffer_add(&b, strlen(str)); tresult = dns_name_fromtext(name, &b, dns_rootname, - ISC_FALSE, NULL); + ISC_FALSE, NULL); if (tresult != ISC_R_SUCCESS) { cfg_obj_log(obj, logctx, ISC_LOG_ERROR, "bad domain name '%s'", @@ -584,7 +592,7 @@ check_options(const cfg_obj_t *options, isc_log_t *logctx, isc_mem_t *mctx) { } } } - + /* * Set supported DNSSEC algorithms. */ @@ -780,7 +788,7 @@ get_masters_def(const cfg_obj_t *cctx, const char *name, const cfg_obj_t **ret) static isc_result_t validate_masters(const cfg_obj_t *obj, const cfg_obj_t *config, - isc_uint32_t *countp, isc_log_t *logctx, isc_mem_t *mctx) + isc_uint32_t *countp, isc_log_t *logctx, isc_mem_t *mctx) { isc_result_t result = ISC_R_SUCCESS; isc_result_t tresult; @@ -802,7 +810,7 @@ validate_masters(const cfg_obj_t *obj, const cfg_obj_t *config, newlist: list = cfg_tuple_get(obj, "addresses"); element = cfg_list_first(list); - resume: + resume: for ( ; element != NULL; element = cfg_list_next(element)) @@ -899,7 +907,7 @@ check_update_policy(const cfg_obj_t *policy, isc_log_t *logctx) { isc_buffer_init(&b, str, strlen(str)); isc_buffer_add(&b, strlen(str)); tresult = dns_name_fromtext(dns_fixedname_name(&fixed), &b, - dns_rootname, ISC_FALSE, NULL); + dns_rootname, ISC_FALSE, NULL); if (tresult != ISC_R_SUCCESS) { cfg_obj_log(identity, logctx, ISC_LOG_ERROR, "'%s' is not a valid name", str); @@ -932,7 +940,7 @@ check_update_policy(const cfg_obj_t *policy, isc_log_t *logctx) { const cfg_obj_t *typeobj; isc_textregion_t r; dns_rdatatype_t type; - + typeobj = cfg_listelt_value(element2); DE_CONST(cfg_obj_asstring(typeobj), r.base); r.length = strlen(r.base); @@ -940,7 +948,7 @@ check_update_policy(const cfg_obj_t *policy, isc_log_t *logctx) { tresult = dns_rdatatype_fromtext(&type, &r); if (tresult != ISC_R_SUCCESS) { cfg_obj_log(typeobj, logctx, ISC_LOG_ERROR, - "'%s' is not a valid type", r.base); + "'%s' is not a valid type", r.base); result = tresult; } } @@ -978,6 +986,7 @@ check_zoneconf(const cfg_obj_t *zconfig, const cfg_obj_t *voptions, dns_rdataclass_t zclass; dns_fixedname_t fixedname; isc_buffer_t b; + isc_boolean_t root = ISC_FALSE; static optionstable options[] = { { "allow-query", MASTERZONE | SLAVEZONE | STUBZONE | CHECKACL }, @@ -1096,7 +1105,7 @@ check_zoneconf(const cfg_obj_t *zconfig, const cfg_obj_t *voptions, isc_buffer_init(&b, zname, strlen(zname)); isc_buffer_add(&b, strlen(zname)); tresult = dns_name_fromtext(dns_fixedname_name(&fixedname), &b, - dns_rootname, ISC_TRUE, NULL); + dns_rootname, ISC_TRUE, NULL); if (tresult != ISC_R_SUCCESS) { cfg_obj_log(zconfig, logctx, ISC_LOG_ERROR, "zone '%s': is not a valid name", zname); @@ -1111,6 +1120,9 @@ check_zoneconf(const cfg_obj_t *zconfig, const cfg_obj_t *voptions, "previous definition: %s:%u", logctx, mctx); if (tresult != ISC_R_SUCCESS) result = tresult; + if (dns_name_equal(dns_fixedname_name(&fixedname), + dns_rootname)) + root = ISC_TRUE; } /* @@ -1141,7 +1153,7 @@ check_zoneconf(const cfg_obj_t *zconfig, const cfg_obj_t *voptions, (options[i].allowed & CHECKACL) != 0) { tresult = checkacl(options[i].name, actx, zconfig, - voptions, config, logctx, mctx); + voptions, config, logctx, mctx); if (tresult != ISC_R_SUCCESS) result = tresult; } @@ -1230,7 +1242,18 @@ check_zoneconf(const cfg_obj_t *zconfig, const cfg_obj_t *voptions, /* * Check that forwarding is reasonable. */ - if (check_forward(zoptions, logctx) != ISC_R_SUCCESS) + obj = NULL; + if (root) { + if (voptions != NULL) + (void)cfg_map_get(voptions, "forwarders", &obj); + if (obj == NULL) { + const cfg_obj_t *options = NULL; + (void)cfg_map_get(config, "options", &options); + if (options != NULL) + (void)cfg_map_get(options, "forwarders", &obj); + } + } + if (check_forward(zoptions, obj, logctx) != ISC_R_SUCCESS) result = ISC_R_FAILURE; /* @@ -1260,7 +1283,7 @@ check_zoneconf(const cfg_obj_t *zconfig, const cfg_obj_t *voptions, result = tresult; } } - + return (result); } @@ -1289,7 +1312,7 @@ bind9_check_key(const cfg_obj_t *key, isc_log_t *logctx) { { "hmac-sha512", 512 }, { NULL, 0 } }; - + (void)cfg_map_get(key, "algorithm", &algobj); (void)cfg_map_get(key, "secret", &secretobj); if (secretobj == NULL || algobj == NULL) { @@ -1340,7 +1363,7 @@ bind9_check_key(const cfg_obj_t *key, isc_log_t *logctx) { (digestbits < 80U))) cfg_obj_log(algobj, logctx, ISC_LOG_WARNING, "key '%s' digest-bits too small " - "[<%u]", keyname, + "[<%u]", keyname, algorithms[i].size/2); } else { cfg_obj_log(algobj, logctx, ISC_LOG_ERROR, @@ -1447,13 +1470,13 @@ rndckey_exists(const cfg_obj_t *keylist, const char *keyname) { const cfg_listelt_t *element; const cfg_obj_t *obj; const char *str; - + if (keylist == NULL) return (ISC_FALSE); for (element = cfg_list_first(keylist); - element != NULL; - element = cfg_list_next(element)) + element != NULL; + element = cfg_list_next(element)) { obj = cfg_listelt_value(element); str = cfg_obj_asstring(cfg_map_getname(obj)); @@ -1572,7 +1595,7 @@ check_servers(const cfg_obj_t *config, const cfg_obj_t *voptions, } return (result); } - + static isc_result_t check_viewconf(const cfg_obj_t *config, const cfg_obj_t *voptions, const char *viewname, dns_rdataclass_t vclass, @@ -1626,10 +1649,11 @@ check_viewconf(const cfg_obj_t *config, const cfg_obj_t *voptions, const cfg_obj_t *options = NULL; (void)cfg_map_get(config, "options", &options); if (options != NULL) - if (check_forward(options, logctx) != ISC_R_SUCCESS) + if (check_forward(options, NULL, + logctx) != ISC_R_SUCCESS) result = ISC_R_FAILURE; } else { - if (check_forward(voptions, logctx) != ISC_R_SUCCESS) + if (check_forward(voptions, NULL, logctx) != ISC_R_SUCCESS) result = ISC_R_FAILURE; } @@ -1672,7 +1696,7 @@ check_viewconf(const cfg_obj_t *config, const cfg_obj_t *voptions, isc_symtab_destroy(&symtab); return (tresult); } - + if (voptions != NULL) { keys = NULL; (void)cfg_map_get(voptions, "key", &keys); @@ -1763,10 +1787,10 @@ bind9_check_logging(const cfg_obj_t *config, isc_log_t *logctx, const char *channelname; const char *catname; const cfg_obj_t *fileobj = NULL; - const cfg_obj_t *syslogobj = NULL; - const cfg_obj_t *nullobj = NULL; - const cfg_obj_t *stderrobj = NULL; - const cfg_obj_t *logobj = NULL; + const cfg_obj_t *syslogobj = NULL; + const cfg_obj_t *nullobj = NULL; + const cfg_obj_t *stderrobj = NULL; + const cfg_obj_t *logobj = NULL; isc_result_t result = ISC_R_SUCCESS; isc_result_t tresult; isc_symtab_t *symtab = NULL; @@ -1827,9 +1851,9 @@ bind9_check_logging(const cfg_obj_t *config, isc_log_t *logctx, cfg_map_get(logobj, "category", &categories); for (element = cfg_list_first(categories); - element != NULL; - element = cfg_list_next(element)) - { + element != NULL; + element = cfg_list_next(element)) + { category = cfg_listelt_value(element); catname = cfg_obj_asstring(cfg_tuple_get(category, "name")); if (isc_log_categorybyname(logctx, catname) == NULL) { @@ -1845,7 +1869,7 @@ bind9_check_logging(const cfg_obj_t *config, isc_log_t *logctx, channel = cfg_listelt_value(delement); channelname = cfg_obj_asstring(channel); tresult = isc_symtab_lookup(symtab, channelname, 1, - &symvalue); + &symvalue); if (tresult != ISC_R_SUCCESS) { cfg_obj_log(channel, logctx, ISC_LOG_ERROR, "undefined channel: '%s'", @@ -1867,7 +1891,7 @@ bind9_check_controlskeys(const cfg_obj_t *control, const cfg_obj_t *keylist, const cfg_listelt_t *element; const cfg_obj_t *key; const char *keyval; - + control_keylist = cfg_tuple_get(control, "keys"); if (cfg_obj_isvoid(control_keylist)) return (ISC_R_SUCCESS); @@ -2014,7 +2038,7 @@ bind9_check_namedconf(const cfg_obj_t *config, isc_log_t *logctx, if (bind9_check_controls(config, logctx, mctx) != ISC_R_SUCCESS) result = ISC_R_FAILURE; - if (options != NULL && + if (options != NULL && check_order(options, logctx) != ISC_R_SUCCESS) result = ISC_R_FAILURE; @@ -2076,7 +2100,7 @@ bind9_check_namedconf(const cfg_obj_t *config, isc_log_t *logctx, const char *file; unsigned int line; RUNTIME_CHECK(isc_symtab_lookup(symtab, key, - vclass, &symvalue) == ISC_R_SUCCESS); + vclass, &symvalue) == ISC_R_SUCCESS); file = cfg_obj_file(symvalue.as_cpointer); line = cfg_obj_line(symvalue.as_cpointer); cfg_obj_log(view, logctx, ISC_LOG_ERROR, @@ -2116,9 +2140,9 @@ bind9_check_namedconf(const cfg_obj_t *config, isc_log_t *logctx, } } - cfg_map_get(config, "acl", &acls); + cfg_map_get(config, "acl", &acls); - if (acls != NULL) { + if (acls != NULL) { const cfg_listelt_t *elt; const cfg_listelt_t *elt2; const char *aclname; @@ -2138,7 +2162,7 @@ bind9_check_namedconf(const cfg_obj_t *config, isc_log_t *logctx, cfg_obj_log(acl, logctx, ISC_LOG_ERROR, "attempt to redefine " "builtin acl '%s'", - aclname); + aclname); result = ISC_R_FAILURE; break; } @@ -2167,8 +2191,8 @@ bind9_check_namedconf(const cfg_obj_t *config, isc_log_t *logctx, } } - tresult = cfg_map_get(config, "kal", &kals); - if (tresult == ISC_R_SUCCESS) { + tresult = cfg_map_get(config, "kal", &kals); + if (tresult == ISC_R_SUCCESS) { const cfg_listelt_t *elt; const cfg_listelt_t *elt2; const char *aclname; diff --git a/lib/dns/acache.c b/lib/dns/acache.c index c95e2036..0836aca6 100644 --- a/lib/dns/acache.c +++ b/lib/dns/acache.c @@ -1,5 +1,5 @@ /* - * Copyright (C) 2004-2007 Internet Systems Consortium, Inc. ("ISC") + * Copyright (C) 2004-2008 Internet Systems Consortium, Inc. ("ISC") * * Permission to use, copy, modify, and/or distribute this software for any * purpose with or without fee is hereby granted, provided that the above @@ -14,7 +14,7 @@ * PERFORMANCE OF THIS SOFTWARE. */ -/* $Id: acache.c,v 1.20 2007/06/19 23:47:16 tbox Exp $ */ +/* $Id: acache.c,v 1.20.128.2 2008/02/07 23:46:25 tbox Exp $ */ #include @@ -137,7 +137,7 @@ struct acache_cleaner { in seconds. */ isc_stdtime_t last_cleanup_time; /* The time when the last - cleanup task completed */ + cleanup task completed */ isc_timer_t *cleaning_timer; isc_event_t *resched_event; /* Sent by cleaner task to @@ -347,11 +347,11 @@ shutdown_buckets(dns_acache_t *acache) { INSIST(ISC_LIST_EMPTY(dbent->originlist) && ISC_LIST_EMPTY(dbent->referlist)); ISC_LIST_UNLINK(acache->dbbucket[i], dbent, link); - + dns_db_detach(&dbent->db); isc_mem_put(acache->mctx, dbent, sizeof(*dbent)); - + acache->dbentries--; } } @@ -513,7 +513,7 @@ clear_entry(dns_acache_t *acache, dns_acacheentry_t *entry) { if (dns_name_dynamic(entry->foundname)) dns_name_free(entry->foundname, acache->mctx); isc_mem_put(acache->mctx, entry->foundname, - sizeof(*entry->foundname)); + sizeof(*entry->foundname)); entry->foundname = NULL; } @@ -558,7 +558,7 @@ acache_cleaner_init(dns_acache_t *acache, isc_timermgr_t *timermgr, if (timermgr != NULL) { cleaner->acache->live_cleaners++; - + result = isc_task_onshutdown(acache->task, acache_cleaner_shutdown_action, acache); @@ -677,7 +677,7 @@ end_cleaning(acache_cleaner_t *cleaner, isc_event_t *event) { */ if (isc_refcount_current(&cleaner->current_entry->references) == 1) { INSIST(cleaner->current_entry->callback == NULL); - + if (ISC_LINK_LINKED(cleaner->current_entry, link)) { ISC_LIST_UNLINK(acache->entries, cleaner->current_entry, link); @@ -701,7 +701,7 @@ end_cleaning(acache_cleaner_t *cleaner, isc_event_t *event) { acache->stats.queries, acache->stats.adds, acache->stats.deleted, acache->stats.cleaned, acache->stats.cleaner_runs, - acache->stats.overmem, acache->stats.overmem_nocreates, + acache->stats.overmem, acache->stats.overmem_nocreates, acache->stats.nomem); reset_stats(acache); @@ -913,7 +913,7 @@ static void acache_overmem_cleaning_action(isc_task_t *task, isc_event_t *event) { acache_cleaner_t *cleaner = event->ev_arg; isc_boolean_t want_cleaning = ISC_FALSE; - + UNUSED(task); INSIST(event->ev_type == DNS_EVENT_ACACHEOVERMEM); @@ -965,10 +965,14 @@ water(void *arg, int mark) { LOCK(&acache->cleaner.lock); - acache->cleaner.overmem = overmem; + if (acache->cleaner.overmem != overmem) { + acache->cleaner.overmem = overmem; - if (acache->cleaner.overmem_event != NULL) - isc_task_send(acache->task, &acache->cleaner.overmem_event); + if (acache->cleaner.overmem_event != NULL) + isc_task_send(acache->task, + &acache->cleaner.overmem_event); + isc_mem_waterack(acache->mctx, mark); + } UNLOCK(&acache->cleaner.lock); } @@ -1102,7 +1106,7 @@ dns_acache_create(dns_acache_t **acachep, isc_mem_t *mctx, } acache->live_cleaners = 0; - result = acache_cleaner_init(acache, timermgr, &acache->cleaner); + result = acache_cleaner_init(acache, timermgr, &acache->cleaner); if (result != ISC_R_SUCCESS) goto cleanup; @@ -1177,7 +1181,7 @@ dns_acache_detach(dns_acache_t **acachep) { isc_task_shutdown(acache->task); should_free = ISC_FALSE; } - + if (should_free) destroy(acache); } @@ -1366,14 +1370,14 @@ dns_acache_createentry(dns_acache_t *acache, dns_db_t *origdb, REQUIRE(entryp != NULL && *entryp == NULL); REQUIRE(origdb != NULL); - /* - * Should we exceed our memory limit for some reason (for - * example, if the cleaner does not run aggressively enough), + /* + * Should we exceed our memory limit for some reason (for + * example, if the cleaner does not run aggressively enough), * then we will not create additional entries. * * XXXSK: It might be better to lock the acache->cleaner->lock, - * but locking may be an expensive bottleneck. If we misread - * the value, we will occasionally refuse to create a few + * but locking may be an expensive bottleneck. If we misread + * the value, we will occasionally refuse to create a few * cache entries, or create a few that we should not. I do not * expect this to happen often, and it will not have very bad * effects when it does. So no lock for now. @@ -1391,7 +1395,7 @@ dns_acache_createentry(dns_acache_t *acache, dns_db_t *origdb, isc_random_get(&r); newentry->locknum = r % DEFAULT_ACACHE_ENTRY_LOCK_COUNT; - + result = isc_refcount_init(&newentry->references, 1); if (result != ISC_R_SUCCESS) { isc_mem_put(acache->mctx, newentry, sizeof(*newentry)); @@ -1738,7 +1742,7 @@ dns_acache_setcleaninginterval(dns_acache_t *acache, unsigned int t) { isc_timertype_ticker, NULL, &interval, ISC_FALSE); } - if (result != ISC_R_SUCCESS) + if (result != ISC_R_SUCCESS) isc_log_write(dns_lctx, DNS_LOGCATEGORY_DATABASE, DNS_LOGMODULE_ACACHE, ISC_LOG_WARNING, "could not set acache cleaning interval: %s", diff --git a/lib/dns/acl.c b/lib/dns/acl.c index d8d0b9bc..bb54a8a3 100644 --- a/lib/dns/acl.c +++ b/lib/dns/acl.c @@ -15,7 +15,7 @@ * PERFORMANCE OF THIS SOFTWARE. */ -/* $Id: acl.c,v 1.37.2.6 2008/01/27 02:12:51 marka Exp $ */ +/* $Id: acl.c,v 1.37.2.7 2008/04/29 01:04:14 each Exp $ */ /*! \file */ @@ -148,7 +148,7 @@ dns_acl_isanyornone(dns_acl_t *acl, isc_boolean_t pos) return (ISC_FALSE); if (acl->iptable->radix->head->prefix->bitlen == 0 && - *(isc_boolean_t *) (acl->iptable->radix->head->data) == pos) + *(isc_boolean_t *) (acl->iptable->radix->head->data[0]) == pos) return (ISC_TRUE); return (ISC_FALSE); /* All others */ diff --git a/lib/dns/adb.c b/lib/dns/adb.c index 182f1c53..e862a726 100644 --- a/lib/dns/adb.c +++ b/lib/dns/adb.c @@ -1,5 +1,5 @@ /* - * Copyright (C) 2004-2007 Internet Systems Consortium, Inc. ("ISC") + * Copyright (C) 2004-2008 Internet Systems Consortium, Inc. ("ISC") * Copyright (C) 1999-2003 Internet Software Consortium. * * Permission to use, copy, modify, and/or distribute this software for any @@ -15,7 +15,7 @@ * PERFORMANCE OF THIS SOFTWARE. */ -/* $Id: adb.c,v 1.233 2007/10/19 17:15:53 explorer Exp $ */ +/* $Id: adb.c,v 1.233.36.8 2008/05/03 05:06:03 marka Exp $ */ /*! \file * @@ -26,13 +26,6 @@ * */ -/*% - * After we have cleaned all buckets, dump the database contents. - */ -#if 0 -#define DUMP_ADB_AFTER_CLEANING -#endif - #include #include @@ -42,7 +35,6 @@ #include #include /* Required for HP/UX (and others?) */ #include -#include #include #include @@ -55,6 +47,7 @@ #include #include #include +#include #define DNS_ADB_MAGIC ISC_MAGIC('D', 'a', 'd', 'b') #define DNS_ADB_VALID(x) ISC_MAGIC_VALID(x, DNS_ADB_MAGIC) @@ -88,16 +81,6 @@ #define ADB_CACHE_MAXIMUM 86400 /*%< seconds (86400 = 24 hours) */ #define ADB_ENTRY_WINDOW 1800 /*%< seconds */ -/*% - * Wake up every CLEAN_SECONDS and clean CLEAN_BUCKETS buckets, so that all - * buckets are cleaned in CLEAN_PERIOD seconds. - */ -#define CLEAN_PERIOD 3600 -/*% See #CLEAN_PERIOD */ -#define CLEAN_SECONDS 30 -/*% See #CLEAN_PERIOD */ -#define CLEAN_BUCKETS ((NBUCKETS * CLEAN_SECONDS) / CLEAN_PERIOD) - /*% * The period in seconds after which an ADB name entry is regarded as stale * and forced to be cleaned up. @@ -124,78 +107,60 @@ typedef struct dns_adbfetch6 dns_adbfetch6_t; /*% dns adb structure */ struct dns_adb { - unsigned int magic; - - isc_mutex_t lock; - isc_mutex_t reflock; /*%< Covers irefcnt, erefcnt */ - isc_mem_t *mctx; - dns_view_t *view; - isc_timermgr_t *timermgr; - isc_timer_t *timer; - -#ifdef LRU_DEBUG - isc_timer_t *dump_timer; /* for test */ - isc_time_t dump_time; /* for test */ -#define DUMP_INTERVAL 30 /* seconds */ -#endif - - isc_taskmgr_t *taskmgr; - isc_task_t *task; - isc_boolean_t overmem; - - isc_interval_t tick_interval; - int next_cleanbucket; - - unsigned int irefcnt; - unsigned int erefcnt; - - isc_mutex_t mplock; - isc_mempool_t *nmp; /*%< dns_adbname_t */ - isc_mempool_t *nhmp; /*%< dns_adbnamehook_t */ - isc_mempool_t *limp; /*%< dns_adblameinfo_t */ - isc_mempool_t *emp; /*%< dns_adbentry_t */ - isc_mempool_t *ahmp; /*%< dns_adbfind_t */ - isc_mempool_t *aimp; /*%< dns_adbaddrinfo_t */ - isc_mempool_t *afmp; /*%< dns_adbfetch_t */ - - /*! - * Bucketized locks and lists for names. - * - * XXXRTH Have a per-bucket structure that contains all of these? - */ - dns_adbnamelist_t names[NBUCKETS]; - /*% See dns_adbnamelist_t */ - isc_mutex_t namelocks[NBUCKETS]; - /*% See dns_adbnamelist_t */ - isc_boolean_t name_sd[NBUCKETS]; - /*% See dns_adbnamelist_t */ - unsigned int name_refcnt[NBUCKETS]; - - /*! - * Bucketized locks for entries. - * - * XXXRTH Have a per-bucket structure that contains all of these? - */ - dns_adbentrylist_t entries[NBUCKETS]; - isc_mutex_t entrylocks[NBUCKETS]; - isc_boolean_t entry_sd[NBUCKETS]; /*%< shutting down */ - unsigned int entry_refcnt[NBUCKETS]; - - isc_event_t cevent; - isc_boolean_t cevent_sent; - isc_boolean_t shutting_down; - isc_eventlist_t whenshutdown; - -#ifdef LRU_DEBUG - unsigned int stale_purge; - unsigned int stale_scan; - unsigned int stale_expire; - unsigned int stale_lru; - - unsigned int nname, nname_total; - unsigned int nentry, nentry_total; - unsigned int nameuses, entryuses; -#endif + unsigned int magic; + + isc_mutex_t lock; + isc_mutex_t reflock; /*%< Covers irefcnt, erefcnt */ + isc_mutex_t overmemlock; /*%< Covers overmem */ + isc_mem_t *mctx; + dns_view_t *view; + + isc_taskmgr_t *taskmgr; + isc_task_t *task; + isc_boolean_t overmem; + + isc_interval_t tick_interval; + int next_cleanbucket; + + unsigned int irefcnt; + unsigned int erefcnt; + + isc_mutex_t mplock; + isc_mempool_t *nmp; /*%< dns_adbname_t */ + isc_mempool_t *nhmp; /*%< dns_adbnamehook_t */ + isc_mempool_t *limp; /*%< dns_adblameinfo_t */ + isc_mempool_t *emp; /*%< dns_adbentry_t */ + isc_mempool_t *ahmp; /*%< dns_adbfind_t */ + isc_mempool_t *aimp; /*%< dns_adbaddrinfo_t */ + isc_mempool_t *afmp; /*%< dns_adbfetch_t */ + + /*! + * Bucketized locks and lists for names. + * + * XXXRTH Have a per-bucket structure that contains all of these? + */ + dns_adbnamelist_t names[NBUCKETS]; + /*% See dns_adbnamelist_t */ + isc_mutex_t namelocks[NBUCKETS]; + /*% See dns_adbnamelist_t */ + isc_boolean_t name_sd[NBUCKETS]; + /*% See dns_adbnamelist_t */ + unsigned int name_refcnt[NBUCKETS]; + + /*! + * Bucketized locks for entries. + * + * XXXRTH Have a per-bucket structure that contains all of these? + */ + dns_adbentrylist_t entries[NBUCKETS]; + isc_mutex_t entrylocks[NBUCKETS]; + isc_boolean_t entry_sd[NBUCKETS]; /*%< shutting down */ + unsigned int entry_refcnt[NBUCKETS]; + + isc_event_t cevent; + isc_boolean_t cevent_sent; + isc_boolean_t shutting_down; + isc_eventlist_t whenshutdown; }; /* @@ -204,37 +169,37 @@ struct dns_adb { /*% dns_adbname structure */ struct dns_adbname { - unsigned int magic; - dns_name_t name; - dns_adb_t *adb; - unsigned int partial_result; - unsigned int flags; - int lock_bucket; - dns_name_t target; - isc_stdtime_t expire_target; - isc_stdtime_t expire_v4; - isc_stdtime_t expire_v6; - unsigned int chains; - dns_adbnamehooklist_t v4; - dns_adbnamehooklist_t v6; - dns_adbfetch_t *fetch_a; - dns_adbfetch_t *fetch_aaaa; - unsigned int fetch_err; - unsigned int fetch6_err; - dns_adbfindlist_t finds; - /* for LRU-based management */ - isc_stdtime_t last_used; - - ISC_LINK(dns_adbname_t) plink; + unsigned int magic; + dns_name_t name; + dns_adb_t *adb; + unsigned int partial_result; + unsigned int flags; + int lock_bucket; + dns_name_t target; + isc_stdtime_t expire_target; + isc_stdtime_t expire_v4; + isc_stdtime_t expire_v6; + unsigned int chains; + dns_adbnamehooklist_t v4; + dns_adbnamehooklist_t v6; + dns_adbfetch_t *fetch_a; + dns_adbfetch_t *fetch_aaaa; + unsigned int fetch_err; + unsigned int fetch6_err; + dns_adbfindlist_t finds; + /* for LRU-based management */ + isc_stdtime_t last_used; + + ISC_LINK(dns_adbname_t) plink; }; /*% The adbfetch structure */ struct dns_adbfetch { - unsigned int magic; - dns_adbnamehook_t *namehook; - dns_adbentry_t *entry; - dns_fetch_t *fetch; - dns_rdataset_t rdataset; + unsigned int magic; + dns_adbnamehook_t *namehook; + dns_adbentry_t *entry; + dns_fetch_t *fetch; + dns_rdataset_t rdataset; }; /*% @@ -243,9 +208,9 @@ struct dns_adbfetch { * namehook that will contain the next address this host has. */ struct dns_adbnamehook { - unsigned int magic; - dns_adbentry_t *entry; - ISC_LINK(dns_adbnamehook_t) plink; + unsigned int magic; + dns_adbentry_t *entry; + ISC_LINK(dns_adbnamehook_t) plink; }; /*% @@ -254,13 +219,13 @@ struct dns_adbnamehook { * extended to other types of information about zones. */ struct dns_adblameinfo { - unsigned int magic; + unsigned int magic; - dns_name_t qname; - dns_rdatatype_t qtype; - isc_stdtime_t lame_timer; + dns_name_t qname; + dns_rdatatype_t qtype; + isc_stdtime_t lame_timer; - ISC_LINK(dns_adblameinfo_t) plink; + ISC_LINK(dns_adblameinfo_t) plink; }; /*% @@ -269,26 +234,26 @@ struct dns_adblameinfo { * the host. */ struct dns_adbentry { - unsigned int magic; - - int lock_bucket; - unsigned int refcnt; - - unsigned int flags; - unsigned int srtt; - isc_sockaddr_t sockaddr; - - isc_stdtime_t expires; - /*%< - * A nonzero 'expires' field indicates that the entry should - * persist until that time. This allows entries found - * using dns_adb_findaddrinfo() to persist for a limited time - * even though they are not necessarily associated with a - * name. - */ - - ISC_LIST(dns_adblameinfo_t) lameinfo; - ISC_LINK(dns_adbentry_t) plink; + unsigned int magic; + + int lock_bucket; + unsigned int refcnt; + + unsigned int flags; + unsigned int srtt; + isc_sockaddr_t sockaddr; + + isc_stdtime_t expires; + /*%< + * A nonzero 'expires' field indicates that the entry should + * persist until that time. This allows entries found + * using dns_adb_findaddrinfo() to persist for a limited time + * even though they are not necessarily associated with a + * name. + */ + + ISC_LIST(dns_adblameinfo_t) lameinfo; + ISC_LINK(dns_adbentry_t) plink; }; /* @@ -297,52 +262,51 @@ struct dns_adbentry { static inline dns_adbname_t *new_adbname(dns_adb_t *, dns_name_t *); static inline void free_adbname(dns_adb_t *, dns_adbname_t **); static inline dns_adbnamehook_t *new_adbnamehook(dns_adb_t *, - dns_adbentry_t *); + dns_adbentry_t *); static inline void free_adbnamehook(dns_adb_t *, dns_adbnamehook_t **); static inline dns_adblameinfo_t *new_adblameinfo(dns_adb_t *, dns_name_t *, - dns_rdatatype_t); + dns_rdatatype_t); static inline void free_adblameinfo(dns_adb_t *, dns_adblameinfo_t **); static inline dns_adbentry_t *new_adbentry(dns_adb_t *); static inline void free_adbentry(dns_adb_t *, dns_adbentry_t **); static inline dns_adbfind_t *new_adbfind(dns_adb_t *); static inline isc_boolean_t free_adbfind(dns_adb_t *, dns_adbfind_t **); static inline dns_adbaddrinfo_t *new_adbaddrinfo(dns_adb_t *, dns_adbentry_t *, - in_port_t); + in_port_t); static inline dns_adbfetch_t *new_adbfetch(dns_adb_t *); static inline void free_adbfetch(dns_adb_t *, dns_adbfetch_t **); static inline dns_adbname_t *find_name_and_lock(dns_adb_t *, dns_name_t *, - unsigned int, int *); + unsigned int, int *); static inline dns_adbentry_t *find_entry_and_lock(dns_adb_t *, - isc_sockaddr_t *, int *); + isc_sockaddr_t *, int *); static void dump_adb(dns_adb_t *, FILE *, isc_boolean_t debug, isc_stdtime_t); static void print_dns_name(FILE *, dns_name_t *); static void print_namehook_list(FILE *, const char *legend, - dns_adbnamehooklist_t *list, - isc_boolean_t debug, - isc_stdtime_t now); + dns_adbnamehooklist_t *list, + isc_boolean_t debug, + isc_stdtime_t now); static void print_find_list(FILE *, dns_adbname_t *); static void print_fetch_list(FILE *, dns_adbname_t *); static inline isc_boolean_t dec_adb_irefcnt(dns_adb_t *); static inline void inc_adb_irefcnt(dns_adb_t *); static inline void inc_adb_erefcnt(dns_adb_t *); static inline void inc_entry_refcnt(dns_adb_t *, dns_adbentry_t *, - isc_boolean_t); + isc_boolean_t); static inline isc_boolean_t dec_entry_refcnt(dns_adb_t *, dns_adbentry_t *, - isc_boolean_t); + isc_boolean_t); static inline void violate_locking_hierarchy(isc_mutex_t *, isc_mutex_t *); static isc_boolean_t clean_namehooks(dns_adb_t *, dns_adbnamehooklist_t *, - isc_boolean_t); + isc_boolean_t); static void clean_target(dns_adb_t *, dns_name_t *); static void clean_finds_at_name(dns_adbname_t *, isc_eventtype_t, - unsigned int); + unsigned int); static isc_boolean_t check_expire_namehooks(dns_adbname_t *, isc_stdtime_t); static void cancel_fetches_at_name(dns_adbname_t *); static isc_result_t dbfind_name(dns_adbname_t *, isc_stdtime_t, - dns_rdatatype_t); + dns_rdatatype_t); static isc_result_t fetch_name(dns_adbname_t *, isc_boolean_t, - dns_rdatatype_t); + dns_rdatatype_t); static inline void check_exit(dns_adb_t *); -static void timer_cleanup(isc_task_t *, isc_event_t *); static void destroy(dns_adb_t *); static isc_boolean_t shutdown_names(dns_adb_t *); static isc_boolean_t shutdown_entries(dns_adb_t *); @@ -351,14 +315,10 @@ static inline isc_boolean_t unlink_name(dns_adb_t *, dns_adbname_t *); static inline void link_entry(dns_adb_t *, int, dns_adbentry_t *); static inline isc_boolean_t unlink_entry(dns_adb_t *, dns_adbentry_t *); static isc_boolean_t kill_name(dns_adbname_t **, isc_eventtype_t, - isc_boolean_t); + isc_boolean_t); static void water(void *, int); static void dump_entry(FILE *, dns_adbentry_t *, isc_boolean_t, isc_stdtime_t); -#ifdef LRU_DEBUG -static void timer_dump(isc_task_t *, isc_event_t *); -#endif - /* * MUST NOT overlap DNS_ADBFIND_* flags! */ @@ -404,9 +364,9 @@ static void timer_dump(isc_task_t *, isc_event_t *); #define FIND_WANTEVENT(fn) (((fn)->options & DNS_ADBFIND_WANTEVENT) != 0) #define FIND_WANTEMPTYEVENT(fn) (((fn)->options & DNS_ADBFIND_EMPTYEVENT) != 0) #define FIND_AVOIDFETCHES(fn) (((fn)->options & DNS_ADBFIND_AVOIDFETCHES) \ - != 0) + != 0) #define FIND_STARTATZONE(fn) (((fn)->options & DNS_ADBFIND_STARTATZONE) \ - != 0) + != 0) #define FIND_HINTOK(fn) (((fn)->options & DNS_ADBFIND_HINTOK) != 0) #define FIND_GLUEOK(fn) (((fn)->options & DNS_ADBFIND_GLUEOK) != 0) #define FIND_HAS_ADDRS(fn) (!ISC_LIST_EMPTY((fn)->list)) @@ -430,7 +390,7 @@ static void timer_dump(isc_task_t *, isc_event_t *); #define HINT_OK(nf, o) (!NAME_HINTOK(nf) || (((o) & DNS_ADBFIND_HINTOK) != 0)) #define GLUEHINT_OK(nf, o) (GLUE_OK(nf, o) || HINT_OK(nf, o)) #define STARTATZONE_MATCHES(nf, o) (((nf)->flags & NAME_STARTATZONE) == \ - ((o) & DNS_ADBFIND_STARTATZONE)) + ((o) & DNS_ADBFIND_STARTATZONE)) #define ENTER_LEVEL ISC_LOG_DEBUG(50) #define EXIT_LEVEL ENTER_LEVEL @@ -439,14 +399,14 @@ static void timer_dump(isc_task_t *, isc_event_t *); #define NCACHE_LEVEL ISC_LOG_DEBUG(20) #define NCACHE_RESULT(r) ((r) == DNS_R_NCACHENXDOMAIN || \ - (r) == DNS_R_NCACHENXRRSET) + (r) == DNS_R_NCACHENXRRSET) #define AUTH_NX(r) ((r) == DNS_R_NXDOMAIN || \ - (r) == DNS_R_NXRRSET) + (r) == DNS_R_NXRRSET) #define NXDOMAIN_RESULT(r) ((r) == DNS_R_NXDOMAIN || \ - (r) == DNS_R_NCACHENXDOMAIN) + (r) == DNS_R_NCACHENXDOMAIN) #define NXRRSET_RESULT(r) ((r) == DNS_R_NCACHENXRRSET || \ - (r) == DNS_R_NXRRSET || \ - (r) == DNS_R_HINTNXRRSET) + (r) == DNS_R_NXRRSET || \ + (r) == DNS_R_HINTNXRRSET) /* * Error state rankings. @@ -462,25 +422,25 @@ static void timer_dump(isc_task_t *, isc_event_t *); #define FIND_ERR_MAX 7 static const char *errnames[] = { - "success", - "canceled", - "failure", - "nxdomain", - "nxrrset", - "unexpected", - "not_found" + "success", + "canceled", + "failure", + "nxdomain", + "nxrrset", + "unexpected", + "not_found" }; #define NEWERR(old, new) (ISC_MIN((old), (new))) static isc_result_t find_err_map[FIND_ERR_MAX] = { - ISC_R_SUCCESS, - ISC_R_CANCELED, - ISC_R_FAILURE, - DNS_R_NXDOMAIN, - DNS_R_NXRRSET, - ISC_R_UNEXPECTED, - ISC_R_NOTFOUND /* not YET found */ + ISC_R_SUCCESS, + ISC_R_CANCELED, + ISC_R_FAILURE, + DNS_R_NXDOMAIN, + DNS_R_NXRRSET, + ISC_R_UNEXPECTED, + ISC_R_NOTFOUND /* not YET found */ }; static void @@ -488,23 +448,32 @@ DP(int level, const char *format, ...) ISC_FORMAT_PRINTF(2, 3); static void DP(int level, const char *format, ...) { - va_list args; + va_list args; - va_start(args, format); - isc_log_vwrite(dns_lctx, - DNS_LOGCATEGORY_DATABASE, DNS_LOGMODULE_ADB, - level, format, args); - va_end(args); + va_start(args, format); + isc_log_vwrite(dns_lctx, + DNS_LOGCATEGORY_DATABASE, DNS_LOGMODULE_ADB, + level, format, args); + va_end(args); +} + +/*% + * Increment resolver-related statistics counters. + */ +static inline void +inc_stats(dns_adb_t *adb, dns_statscounter_t counter) { + if (adb->view->resstats != NULL) + dns_generalstats_increment(adb->view->resstats, counter); } static inline dns_ttl_t ttlclamp(dns_ttl_t ttl) { - if (ttl < ADB_CACHE_MINIMUM) - ttl = ADB_CACHE_MINIMUM; - if (ttl > ADB_CACHE_MAXIMUM) - ttl = ADB_CACHE_MAXIMUM; + if (ttl < ADB_CACHE_MINIMUM) + ttl = ADB_CACHE_MINIMUM; + if (ttl > ADB_CACHE_MAXIMUM) + ttl = ADB_CACHE_MAXIMUM; - return (ttl); + return (ttl); } /* @@ -514,134 +483,133 @@ ttlclamp(dns_ttl_t ttl) { */ static isc_result_t import_rdataset(dns_adbname_t *adbname, dns_rdataset_t *rdataset, - isc_stdtime_t now) + isc_stdtime_t now) { - isc_result_t result; - dns_adb_t *adb; - dns_adbnamehook_t *nh; - dns_adbnamehook_t *anh; - dns_rdata_t rdata = DNS_RDATA_INIT; - struct in_addr ina; - struct in6_addr in6a; - isc_sockaddr_t sockaddr; - dns_adbentry_t *foundentry; /* NO CLEAN UP! */ - int addr_bucket; - isc_boolean_t new_addresses_added; - dns_rdatatype_t rdtype; - unsigned int findoptions; - - INSIST(DNS_ADBNAME_VALID(adbname)); - adb = adbname->adb; - INSIST(DNS_ADB_VALID(adb)); - - rdtype = rdataset->type; - INSIST((rdtype == dns_rdatatype_a) || (rdtype == dns_rdatatype_aaaa)); - if (rdtype == dns_rdatatype_a) - findoptions = DNS_ADBFIND_INET; - else - findoptions = DNS_ADBFIND_INET6; - - addr_bucket = DNS_ADB_INVALIDBUCKET; - new_addresses_added = ISC_FALSE; - - nh = NULL; - result = dns_rdataset_first(rdataset); - while (result == ISC_R_SUCCESS) { - dns_rdata_reset(&rdata); - dns_rdataset_current(rdataset, &rdata); - if (rdtype == dns_rdatatype_a) { - INSIST(rdata.length == 4); - memcpy(&ina.s_addr, rdata.data, 4); - isc_sockaddr_fromin(&sockaddr, &ina, 0); - } else { - INSIST(rdata.length == 16); - memcpy(in6a.s6_addr, rdata.data, 16); - isc_sockaddr_fromin6(&sockaddr, &in6a, 0); - } - - INSIST(nh == NULL); - nh = new_adbnamehook(adb, NULL); - if (nh == NULL) { - adbname->partial_result |= findoptions; - result = ISC_R_NOMEMORY; - goto fail; - } - - foundentry = find_entry_and_lock(adb, &sockaddr, &addr_bucket); - if (foundentry == NULL) { - dns_adbentry_t *entry; - - entry = new_adbentry(adb); - if (entry == NULL) { - adbname->partial_result |= findoptions; - result = ISC_R_NOMEMORY; - goto fail; - } - - entry->sockaddr = sockaddr; - entry->refcnt = 1; - - nh->entry = entry; - - link_entry(adb, addr_bucket, entry); - } else { - for (anh = ISC_LIST_HEAD(adbname->v4); - anh != NULL; - anh = ISC_LIST_NEXT(anh, plink)) - if (anh->entry == foundentry) - break; - if (anh == NULL) { - foundentry->refcnt++; - nh->entry = foundentry; - } else - free_adbnamehook(adb, &nh); - } - - new_addresses_added = ISC_TRUE; - if (nh != NULL) { - if (rdtype == dns_rdatatype_a) - ISC_LIST_APPEND(adbname->v4, nh, plink); - else - ISC_LIST_APPEND(adbname->v6, nh, plink); - } - nh = NULL; - result = dns_rdataset_next(rdataset); - } + isc_result_t result; + dns_adb_t *adb; + dns_adbnamehook_t *nh; + dns_adbnamehook_t *anh; + dns_rdata_t rdata = DNS_RDATA_INIT; + struct in_addr ina; + struct in6_addr in6a; + isc_sockaddr_t sockaddr; + dns_adbentry_t *foundentry; /* NO CLEAN UP! */ + int addr_bucket; + isc_boolean_t new_addresses_added; + dns_rdatatype_t rdtype; + unsigned int findoptions; + dns_adbnamehooklist_t *hookhead; + + INSIST(DNS_ADBNAME_VALID(adbname)); + adb = adbname->adb; + INSIST(DNS_ADB_VALID(adb)); + + rdtype = rdataset->type; + INSIST((rdtype == dns_rdatatype_a) || (rdtype == dns_rdatatype_aaaa)); + if (rdtype == dns_rdatatype_a) + findoptions = DNS_ADBFIND_INET; + else + findoptions = DNS_ADBFIND_INET6; + + addr_bucket = DNS_ADB_INVALIDBUCKET; + new_addresses_added = ISC_FALSE; + + nh = NULL; + result = dns_rdataset_first(rdataset); + while (result == ISC_R_SUCCESS) { + dns_rdata_reset(&rdata); + dns_rdataset_current(rdataset, &rdata); + if (rdtype == dns_rdatatype_a) { + INSIST(rdata.length == 4); + memcpy(&ina.s_addr, rdata.data, 4); + isc_sockaddr_fromin(&sockaddr, &ina, 0); + hookhead = &adbname->v4; + } else { + INSIST(rdata.length == 16); + memcpy(in6a.s6_addr, rdata.data, 16); + isc_sockaddr_fromin6(&sockaddr, &in6a, 0); + hookhead = &adbname->v6; + } + + INSIST(nh == NULL); + nh = new_adbnamehook(adb, NULL); + if (nh == NULL) { + adbname->partial_result |= findoptions; + result = ISC_R_NOMEMORY; + goto fail; + } + + foundentry = find_entry_and_lock(adb, &sockaddr, &addr_bucket); + if (foundentry == NULL) { + dns_adbentry_t *entry; + + entry = new_adbentry(adb); + if (entry == NULL) { + adbname->partial_result |= findoptions; + result = ISC_R_NOMEMORY; + goto fail; + } + + entry->sockaddr = sockaddr; + entry->refcnt = 1; + + nh->entry = entry; + + link_entry(adb, addr_bucket, entry); + } else { + for (anh = ISC_LIST_HEAD(*hookhead); + anh != NULL; + anh = ISC_LIST_NEXT(anh, plink)) + if (anh->entry == foundentry) + break; + if (anh == NULL) { + foundentry->refcnt++; + nh->entry = foundentry; + } else + free_adbnamehook(adb, &nh); + } + + new_addresses_added = ISC_TRUE; + if (nh != NULL) + ISC_LIST_APPEND(*hookhead, nh, plink); + nh = NULL; + result = dns_rdataset_next(rdataset); + } fail: - if (nh != NULL) - free_adbnamehook(adb, &nh); - - if (addr_bucket != DNS_ADB_INVALIDBUCKET) - UNLOCK(&adb->entrylocks[addr_bucket]); - - if (rdataset->trust == dns_trust_glue || - rdataset->trust == dns_trust_additional) - rdataset->ttl = ADB_CACHE_MINIMUM; - else - rdataset->ttl = ttlclamp(rdataset->ttl); - - if (rdtype == dns_rdatatype_a) { - DP(NCACHE_LEVEL, "expire_v4 set to MIN(%u,%u) import_rdataset", - adbname->expire_v4, now + rdataset->ttl); - adbname->expire_v4 = ISC_MIN(adbname->expire_v4, - now + rdataset->ttl); - } else { - DP(NCACHE_LEVEL, "expire_v6 set to MIN(%u,%u) import_rdataset", - adbname->expire_v6, now + rdataset->ttl); - adbname->expire_v6 = ISC_MIN(adbname->expire_v6, - now + rdataset->ttl); - } - - if (new_addresses_added) { - /* - * Lie a little here. This is more or less so code that cares - * can find out if any new information was added or not. - */ - return (ISC_R_SUCCESS); - } - - return (result); + if (nh != NULL) + free_adbnamehook(adb, &nh); + + if (addr_bucket != DNS_ADB_INVALIDBUCKET) + UNLOCK(&adb->entrylocks[addr_bucket]); + + if (rdataset->trust == dns_trust_glue || + rdataset->trust == dns_trust_additional) + rdataset->ttl = ADB_CACHE_MINIMUM; + else + rdataset->ttl = ttlclamp(rdataset->ttl); + + if (rdtype == dns_rdatatype_a) { + DP(NCACHE_LEVEL, "expire_v4 set to MIN(%u,%u) import_rdataset", + adbname->expire_v4, now + rdataset->ttl); + adbname->expire_v4 = ISC_MIN(adbname->expire_v4, + now + rdataset->ttl); + } else { + DP(NCACHE_LEVEL, "expire_v6 set to MIN(%u,%u) import_rdataset", + adbname->expire_v6, now + rdataset->ttl); + adbname->expire_v6 = ISC_MIN(adbname->expire_v6, + now + rdataset->ttl); + } + + if (new_addresses_added) { + /* + * Lie a little here. This is more or less so code that cares + * can find out if any new information was added or not. + */ + return (ISC_R_SUCCESS); + } + + return (result); } /* @@ -649,57 +617,57 @@ import_rdataset(dns_adbname_t *adbname, dns_rdataset_t *rdataset, */ static isc_boolean_t kill_name(dns_adbname_t **n, isc_eventtype_t ev, isc_boolean_t is_purge) { - dns_adbname_t *name; - isc_boolean_t result = ISC_FALSE; - isc_boolean_t result4, result6; - dns_adb_t *adb; - - INSIST(n != NULL); - name = *n; - *n = NULL; - INSIST(DNS_ADBNAME_VALID(name)); - adb = name->adb; - INSIST(DNS_ADB_VALID(adb)); - - DP(DEF_LEVEL, "killing name %p", name); - - /* - * If we're dead already, just check to see if we should go - * away now or not. - */ - if (NAME_DEAD(name) && !NAME_FETCH(name)) { - result = unlink_name(adb, name); - free_adbname(adb, &name); - if (result) - result = dec_adb_irefcnt(adb); - return (result); - } - - /* - * Clean up the name's various lists. These two are destructive - * in that they will always empty the list. - */ - clean_finds_at_name(name, ev, DNS_ADBFIND_ADDRESSMASK); - result4 = clean_namehooks(adb, &name->v4, is_purge); - result6 = clean_namehooks(adb, &name->v6, is_purge); - clean_target(adb, &name->target); - result = ISC_TF(result4 || result6); - - /* - * If fetches are running, cancel them. If none are running, we can - * just kill the name here. - */ - if (!NAME_FETCH(name)) { - INSIST(result == ISC_FALSE); - result = unlink_name(adb, name); - free_adbname(adb, &name); - if (result) - result = dec_adb_irefcnt(adb); - } else { - name->flags |= NAME_IS_DEAD; - cancel_fetches_at_name(name); - } - return (result); + dns_adbname_t *name; + isc_boolean_t result = ISC_FALSE; + isc_boolean_t result4, result6; + dns_adb_t *adb; + + INSIST(n != NULL); + name = *n; + *n = NULL; + INSIST(DNS_ADBNAME_VALID(name)); + adb = name->adb; + INSIST(DNS_ADB_VALID(adb)); + + DP(DEF_LEVEL, "killing name %p", name); + + /* + * If we're dead already, just check to see if we should go + * away now or not. + */ + if (NAME_DEAD(name) && !NAME_FETCH(name)) { + result = unlink_name(adb, name); + free_adbname(adb, &name); + if (result) + result = dec_adb_irefcnt(adb); + return (result); + } + + /* + * Clean up the name's various lists. These two are destructive + * in that they will always empty the list. + */ + clean_finds_at_name(name, ev, DNS_ADBFIND_ADDRESSMASK); + result4 = clean_namehooks(adb, &name->v4, is_purge); + result6 = clean_namehooks(adb, &name->v6, is_purge); + clean_target(adb, &name->target); + result = ISC_TF(result4 || result6); + + /* + * If fetches are running, cancel them. If none are running, we can + * just kill the name here. + */ + if (!NAME_FETCH(name)) { + INSIST(result == ISC_FALSE); + result = unlink_name(adb, name); + free_adbname(adb, &name); + if (result) + result = dec_adb_irefcnt(adb); + } else { + name->flags |= NAME_IS_DEAD; + cancel_fetches_at_name(name); + } + return (result); } /* @@ -707,48 +675,48 @@ kill_name(dns_adbname_t **n, isc_eventtype_t ev, isc_boolean_t is_purge) { */ static isc_boolean_t check_expire_namehooks(dns_adbname_t *name, isc_stdtime_t now) { - dns_adb_t *adb; - isc_boolean_t result4 = ISC_FALSE; - isc_boolean_t result6 = ISC_FALSE; - - INSIST(DNS_ADBNAME_VALID(name)); - adb = name->adb; - INSIST(DNS_ADB_VALID(adb)); - - /* - * Check to see if we need to remove the v4 addresses - */ - if (!NAME_FETCH_V4(name) && EXPIRE_OK(name->expire_v4, now)) { - if (NAME_HAS_V4(name)) { - DP(DEF_LEVEL, "expiring v4 for name %p", name); - result4 = clean_namehooks(adb, &name->v4, ISC_FALSE); - name->partial_result &= ~DNS_ADBFIND_INET; - } - name->expire_v4 = INT_MAX; - name->fetch_err = FIND_ERR_UNEXPECTED; - } - - /* - * Check to see if we need to remove the v6 addresses - */ - if (!NAME_FETCH_V6(name) && EXPIRE_OK(name->expire_v6, now)) { - if (NAME_HAS_V6(name)) { - DP(DEF_LEVEL, "expiring v6 for name %p", name); - result6 = clean_namehooks(adb, &name->v6, ISC_FALSE); - name->partial_result &= ~DNS_ADBFIND_INET6; - } - name->expire_v6 = INT_MAX; - name->fetch6_err = FIND_ERR_UNEXPECTED; - } - - /* - * Check to see if we need to remove the alias target. - */ - if (EXPIRE_OK(name->expire_target, now)) { - clean_target(adb, &name->target); - name->expire_target = INT_MAX; - } - return (ISC_TF(result4 || result6)); + dns_adb_t *adb; + isc_boolean_t result4 = ISC_FALSE; + isc_boolean_t result6 = ISC_FALSE; + + INSIST(DNS_ADBNAME_VALID(name)); + adb = name->adb; + INSIST(DNS_ADB_VALID(adb)); + + /* + * Check to see if we need to remove the v4 addresses + */ + if (!NAME_FETCH_V4(name) && EXPIRE_OK(name->expire_v4, now)) { + if (NAME_HAS_V4(name)) { + DP(DEF_LEVEL, "expiring v4 for name %p", name); + result4 = clean_namehooks(adb, &name->v4, ISC_FALSE); + name->partial_result &= ~DNS_ADBFIND_INET; + } + name->expire_v4 = INT_MAX; + name->fetch_err = FIND_ERR_UNEXPECTED; + } + + /* + * Check to see if we need to remove the v6 addresses + */ + if (!NAME_FETCH_V6(name) && EXPIRE_OK(name->expire_v6, now)) { + if (NAME_HAS_V6(name)) { + DP(DEF_LEVEL, "expiring v6 for name %p", name); + result6 = clean_namehooks(adb, &name->v6, ISC_FALSE); + name->partial_result &= ~DNS_ADBFIND_INET6; + } + name->expire_v6 = INT_MAX; + name->fetch6_err = FIND_ERR_UNEXPECTED; + } + + /* + * Check to see if we need to remove the alias target. + */ + if (EXPIRE_OK(name->expire_target, now)) { + clean_target(adb, &name->target); + name->expire_target = INT_MAX; + } + return (ISC_TF(result4 || result6)); } /* @@ -756,11 +724,11 @@ check_expire_namehooks(dns_adbname_t *name, isc_stdtime_t now) { */ static inline void link_name(dns_adb_t *adb, int bucket, dns_adbname_t *name) { - INSIST(name->lock_bucket == DNS_ADB_INVALIDBUCKET); + INSIST(name->lock_bucket == DNS_ADB_INVALIDBUCKET); - ISC_LIST_PREPEND(adb->names[bucket], name, plink); - name->lock_bucket = bucket; - adb->name_refcnt[bucket]++; + ISC_LIST_PREPEND(adb->names[bucket], name, plink); + name->lock_bucket = bucket; + adb->name_refcnt[bucket]++; } /* @@ -768,19 +736,19 @@ link_name(dns_adb_t *adb, int bucket, dns_adbname_t *name) { */ static inline isc_boolean_t unlink_name(dns_adb_t *adb, dns_adbname_t *name) { - int bucket; - isc_boolean_t result = ISC_FALSE; + int bucket; + isc_boolean_t result = ISC_FALSE; - bucket = name->lock_bucket; - INSIST(bucket != DNS_ADB_INVALIDBUCKET); + bucket = name->lock_bucket; + INSIST(bucket != DNS_ADB_INVALIDBUCKET); - ISC_LIST_UNLINK(adb->names[bucket], name, plink); - name->lock_bucket = DNS_ADB_INVALIDBUCKET; - INSIST(adb->name_refcnt[bucket] > 0); - adb->name_refcnt[bucket]--; - if (adb->name_sd[bucket] && adb->name_refcnt[bucket] == 0) - result = ISC_TRUE; - return (result); + ISC_LIST_UNLINK(adb->names[bucket], name, plink); + name->lock_bucket = DNS_ADB_INVALIDBUCKET; + INSIST(adb->name_refcnt[bucket] > 0); + adb->name_refcnt[bucket]--; + if (adb->name_sd[bucket] && adb->name_refcnt[bucket] == 0) + result = ISC_TRUE; + return (result); } /* @@ -788,9 +756,9 @@ unlink_name(dns_adb_t *adb, dns_adbname_t *name) { */ static inline void link_entry(dns_adb_t *adb, int bucket, dns_adbentry_t *entry) { - ISC_LIST_PREPEND(adb->entries[bucket], entry, plink); - entry->lock_bucket = bucket; - adb->entry_refcnt[bucket]++; + ISC_LIST_PREPEND(adb->entries[bucket], entry, plink); + entry->lock_bucket = bucket; + adb->entry_refcnt[bucket]++; } /* @@ -798,28 +766,28 @@ link_entry(dns_adb_t *adb, int bucket, dns_adbentry_t *entry) { */ static inline isc_boolean_t unlink_entry(dns_adb_t *adb, dns_adbentry_t *entry) { - int bucket; - isc_boolean_t result = ISC_FALSE; + int bucket; + isc_boolean_t result = ISC_FALSE; - bucket = entry->lock_bucket; - INSIST(bucket != DNS_ADB_INVALIDBUCKET); + bucket = entry->lock_bucket; + INSIST(bucket != DNS_ADB_INVALIDBUCKET); - ISC_LIST_UNLINK(adb->entries[bucket], entry, plink); - entry->lock_bucket = DNS_ADB_INVALIDBUCKET; - INSIST(adb->entry_refcnt[bucket] > 0); - adb->entry_refcnt[bucket]--; - if (adb->entry_sd[bucket] && adb->entry_refcnt[bucket] == 0) - result = ISC_TRUE; - return (result); + ISC_LIST_UNLINK(adb->entries[bucket], entry, plink); + entry->lock_bucket = DNS_ADB_INVALIDBUCKET; + INSIST(adb->entry_refcnt[bucket] > 0); + adb->entry_refcnt[bucket]--; + if (adb->entry_sd[bucket] && adb->entry_refcnt[bucket] == 0) + result = ISC_TRUE; + return (result); } static inline void violate_locking_hierarchy(isc_mutex_t *have, isc_mutex_t *want) { - if (isc_mutex_trylock(want) != ISC_R_SUCCESS) { - UNLOCK(have); - LOCK(want); - LOCK(have); - } + if (isc_mutex_trylock(want) != ISC_R_SUCCESS) { + UNLOCK(have); + LOCK(want); + LOCK(have); + } } /* @@ -828,44 +796,44 @@ violate_locking_hierarchy(isc_mutex_t *have, isc_mutex_t *want) { */ static isc_boolean_t shutdown_names(dns_adb_t *adb) { - int bucket; - isc_boolean_t result = ISC_FALSE; - dns_adbname_t *name; - dns_adbname_t *next_name; - - for (bucket = 0; bucket < NBUCKETS; bucket++) { - LOCK(&adb->namelocks[bucket]); - adb->name_sd[bucket] = ISC_TRUE; - - name = ISC_LIST_HEAD(adb->names[bucket]); - if (name == NULL) { - /* - * This bucket has no names. We must decrement the - * irefcnt ourselves, since it will not be - * automatically triggered by a name being unlinked. - */ - INSIST(result == ISC_FALSE); - result = dec_adb_irefcnt(adb); - } else { - /* - * Run through the list. For each name, clean up finds - * found there, and cancel any fetches running. When - * all the fetches are canceled, the name will destroy - * itself. - */ - while (name != NULL) { - next_name = ISC_LIST_NEXT(name, plink); - INSIST(result == ISC_FALSE); - result = kill_name(&name, - DNS_EVENT_ADBSHUTDOWN, - ISC_FALSE); - name = next_name; - } - } - - UNLOCK(&adb->namelocks[bucket]); - } - return (result); + int bucket; + isc_boolean_t result = ISC_FALSE; + dns_adbname_t *name; + dns_adbname_t *next_name; + + for (bucket = 0; bucket < NBUCKETS; bucket++) { + LOCK(&adb->namelocks[bucket]); + adb->name_sd[bucket] = ISC_TRUE; + + name = ISC_LIST_HEAD(adb->names[bucket]); + if (name == NULL) { + /* + * This bucket has no names. We must decrement the + * irefcnt ourselves, since it will not be + * automatically triggered by a name being unlinked. + */ + INSIST(result == ISC_FALSE); + result = dec_adb_irefcnt(adb); + } else { + /* + * Run through the list. For each name, clean up finds + * found there, and cancel any fetches running. When + * all the fetches are canceled, the name will destroy + * itself. + */ + while (name != NULL) { + next_name = ISC_LIST_NEXT(name, plink); + INSIST(result == ISC_FALSE); + result = kill_name(&name, + DNS_EVENT_ADBSHUTDOWN, + ISC_FALSE); + name = next_name; + } + } + + UNLOCK(&adb->namelocks[bucket]); + } + return (result); } /* @@ -874,44 +842,44 @@ shutdown_names(dns_adb_t *adb) { */ static isc_boolean_t shutdown_entries(dns_adb_t *adb) { - int bucket; - isc_boolean_t result = ISC_FALSE; - dns_adbentry_t *entry; - dns_adbentry_t *next_entry; - - for (bucket = 0; bucket < NBUCKETS; bucket++) { - LOCK(&adb->entrylocks[bucket]); - adb->entry_sd[bucket] = ISC_TRUE; - - entry = ISC_LIST_HEAD(adb->entries[bucket]); - if (entry == NULL) { - /* - * This bucket has no entries. We must decrement the - * irefcnt ourselves, since it will not be - * automatically triggered by an entry being unlinked. - */ - result = dec_adb_irefcnt(adb); - } else { - /* - * Run through the list. Cleanup any entries not - * associated with names, and which are not in use. - */ - while (entry != NULL) { - next_entry = ISC_LIST_NEXT(entry, plink); - if (entry->refcnt == 0 && - entry->expires != 0) { - result = unlink_entry(adb, entry); - free_adbentry(adb, &entry); - if (result) - result = dec_adb_irefcnt(adb); - } - entry = next_entry; - } - } - - UNLOCK(&adb->entrylocks[bucket]); - } - return (result); + int bucket; + isc_boolean_t result = ISC_FALSE; + dns_adbentry_t *entry; + dns_adbentry_t *next_entry; + + for (bucket = 0; bucket < NBUCKETS; bucket++) { + LOCK(&adb->entrylocks[bucket]); + adb->entry_sd[bucket] = ISC_TRUE; + + entry = ISC_LIST_HEAD(adb->entries[bucket]); + if (entry == NULL) { + /* + * This bucket has no entries. We must decrement the + * irefcnt ourselves, since it will not be + * automatically triggered by an entry being unlinked. + */ + result = dec_adb_irefcnt(adb); + } else { + /* + * Run through the list. Cleanup any entries not + * associated with names, and which are not in use. + */ + while (entry != NULL) { + next_entry = ISC_LIST_NEXT(entry, plink); + if (entry->refcnt == 0 && + entry->expires != 0) { + result = unlink_entry(adb, entry); + free_adbentry(adb, &entry); + if (result) + result = dec_adb_irefcnt(adb); + } + entry = next_entry; + } + } + + UNLOCK(&adb->entrylocks[bucket]); + } + return (result); } /* @@ -919,11 +887,11 @@ shutdown_entries(dns_adb_t *adb) { */ static void cancel_fetches_at_name(dns_adbname_t *name) { - if (NAME_FETCH_A(name)) - dns_resolver_cancelfetch(name->fetch_a->fetch); + if (NAME_FETCH_A(name)) + dns_resolver_cancelfetch(name->fetch_a->fetch); - if (NAME_FETCH_AAAA(name)) - dns_resolver_cancelfetch(name->fetch_aaaa->fetch); + if (NAME_FETCH_AAAA(name)) + dns_resolver_cancelfetch(name->fetch_aaaa->fetch); } /* @@ -931,131 +899,131 @@ cancel_fetches_at_name(dns_adbname_t *name) { */ static isc_boolean_t clean_namehooks(dns_adb_t *adb, dns_adbnamehooklist_t *namehooks, - isc_boolean_t is_purge) + isc_boolean_t is_purge) { - dns_adbentry_t *entry; - dns_adbnamehook_t *namehook; - int addr_bucket; - isc_boolean_t result = ISC_FALSE; - - addr_bucket = DNS_ADB_INVALIDBUCKET; - namehook = ISC_LIST_HEAD(*namehooks); - while (namehook != NULL) { - INSIST(DNS_ADBNAMEHOOK_VALID(namehook)); - - /* - * Clean up the entry if needed. - */ - entry = namehook->entry; - if (entry != NULL) { - INSIST(DNS_ADBENTRY_VALID(entry)); - - if (addr_bucket != entry->lock_bucket) { - if (addr_bucket != DNS_ADB_INVALIDBUCKET) - UNLOCK(&adb->entrylocks[addr_bucket]); - addr_bucket = entry->lock_bucket; - LOCK(&adb->entrylocks[addr_bucket]); - } - - /* - * If we are in an overmem situation, force expiration - * so that # of names and # of entries are well - * balanced. - */ - if (is_purge) - entry->expires = 0; - result = dec_entry_refcnt(adb, entry, ISC_FALSE); - } - - /* - * Free the namehook - */ - namehook->entry = NULL; - ISC_LIST_UNLINK(*namehooks, namehook, plink); - free_adbnamehook(adb, &namehook); - - namehook = ISC_LIST_HEAD(*namehooks); - } - - if (addr_bucket != DNS_ADB_INVALIDBUCKET) - UNLOCK(&adb->entrylocks[addr_bucket]); - return (result); + dns_adbentry_t *entry; + dns_adbnamehook_t *namehook; + int addr_bucket; + isc_boolean_t result = ISC_FALSE; + + addr_bucket = DNS_ADB_INVALIDBUCKET; + namehook = ISC_LIST_HEAD(*namehooks); + while (namehook != NULL) { + INSIST(DNS_ADBNAMEHOOK_VALID(namehook)); + + /* + * Clean up the entry if needed. + */ + entry = namehook->entry; + if (entry != NULL) { + INSIST(DNS_ADBENTRY_VALID(entry)); + + if (addr_bucket != entry->lock_bucket) { + if (addr_bucket != DNS_ADB_INVALIDBUCKET) + UNLOCK(&adb->entrylocks[addr_bucket]); + addr_bucket = entry->lock_bucket; + LOCK(&adb->entrylocks[addr_bucket]); + } + + /* + * If we are in an overmem situation, force expiration + * so that # of names and # of entries are well + * balanced. + */ + if (is_purge) + entry->expires = 0; + result = dec_entry_refcnt(adb, entry, ISC_FALSE); + } + + /* + * Free the namehook + */ + namehook->entry = NULL; + ISC_LIST_UNLINK(*namehooks, namehook, plink); + free_adbnamehook(adb, &namehook); + + namehook = ISC_LIST_HEAD(*namehooks); + } + + if (addr_bucket != DNS_ADB_INVALIDBUCKET) + UNLOCK(&adb->entrylocks[addr_bucket]); + return (result); } static void clean_target(dns_adb_t *adb, dns_name_t *target) { - if (dns_name_countlabels(target) > 0) { - dns_name_free(target, adb->mctx); - dns_name_init(target, NULL); - } + if (dns_name_countlabels(target) > 0) { + dns_name_free(target, adb->mctx); + dns_name_init(target, NULL); + } } static isc_result_t set_target(dns_adb_t *adb, dns_name_t *name, dns_name_t *fname, - dns_rdataset_t *rdataset, dns_name_t *target) + dns_rdataset_t *rdataset, dns_name_t *target) { - isc_result_t result; - dns_namereln_t namereln; - unsigned int nlabels; - int order; - dns_rdata_t rdata = DNS_RDATA_INIT; - dns_fixedname_t fixed1, fixed2; - dns_name_t *prefix, *new_target; - - REQUIRE(dns_name_countlabels(target) == 0); - - if (rdataset->type == dns_rdatatype_cname) { - dns_rdata_cname_t cname; - - /* - * Copy the CNAME's target into the target name. - */ - result = dns_rdataset_first(rdataset); - if (result != ISC_R_SUCCESS) - return (result); - dns_rdataset_current(rdataset, &rdata); - result = dns_rdata_tostruct(&rdata, &cname, NULL); - if (result != ISC_R_SUCCESS) - return (result); - result = dns_name_dup(&cname.cname, adb->mctx, target); - dns_rdata_freestruct(&cname); - if (result != ISC_R_SUCCESS) - return (result); - } else { - dns_rdata_dname_t dname; - - INSIST(rdataset->type == dns_rdatatype_dname); - namereln = dns_name_fullcompare(name, fname, &order, &nlabels); - INSIST(namereln == dns_namereln_subdomain); - /* - * Get the target name of the DNAME. - */ - result = dns_rdataset_first(rdataset); - if (result != ISC_R_SUCCESS) - return (result); - dns_rdataset_current(rdataset, &rdata); - result = dns_rdata_tostruct(&rdata, &dname, NULL); - if (result != ISC_R_SUCCESS) - return (result); - /* - * Construct the new target name. - */ - dns_fixedname_init(&fixed1); - prefix = dns_fixedname_name(&fixed1); - dns_fixedname_init(&fixed2); - new_target = dns_fixedname_name(&fixed2); - dns_name_split(name, nlabels, prefix, NULL); - result = dns_name_concatenate(prefix, &dname.dname, new_target, - NULL); - dns_rdata_freestruct(&dname); - if (result != ISC_R_SUCCESS) - return (result); - result = dns_name_dup(new_target, adb->mctx, target); - if (result != ISC_R_SUCCESS) - return (result); - } - - return (ISC_R_SUCCESS); + isc_result_t result; + dns_namereln_t namereln; + unsigned int nlabels; + int order; + dns_rdata_t rdata = DNS_RDATA_INIT; + dns_fixedname_t fixed1, fixed2; + dns_name_t *prefix, *new_target; + + REQUIRE(dns_name_countlabels(target) == 0); + + if (rdataset->type == dns_rdatatype_cname) { + dns_rdata_cname_t cname; + + /* + * Copy the CNAME's target into the target name. + */ + result = dns_rdataset_first(rdataset); + if (result != ISC_R_SUCCESS) + return (result); + dns_rdataset_current(rdataset, &rdata); + result = dns_rdata_tostruct(&rdata, &cname, NULL); + if (result != ISC_R_SUCCESS) + return (result); + result = dns_name_dup(&cname.cname, adb->mctx, target); + dns_rdata_freestruct(&cname); + if (result != ISC_R_SUCCESS) + return (result); + } else { + dns_rdata_dname_t dname; + + INSIST(rdataset->type == dns_rdatatype_dname); + namereln = dns_name_fullcompare(name, fname, &order, &nlabels); + INSIST(namereln == dns_namereln_subdomain); + /* + * Get the target name of the DNAME. + */ + result = dns_rdataset_first(rdataset); + if (result != ISC_R_SUCCESS) + return (result); + dns_rdataset_current(rdataset, &rdata); + result = dns_rdata_tostruct(&rdata, &dname, NULL); + if (result != ISC_R_SUCCESS) + return (result); + /* + * Construct the new target name. + */ + dns_fixedname_init(&fixed1); + prefix = dns_fixedname_name(&fixed1); + dns_fixedname_init(&fixed2); + new_target = dns_fixedname_name(&fixed2); + dns_name_split(name, nlabels, prefix, NULL); + result = dns_name_concatenate(prefix, &dname.dname, new_target, + NULL); + dns_rdata_freestruct(&dname); + if (result != ISC_R_SUCCESS) + return (result); + result = dns_name_dup(new_target, adb->mctx, target); + if (result != ISC_R_SUCCESS) + return (result); + } + + return (ISC_R_SUCCESS); } /* @@ -1063,16 +1031,16 @@ set_target(dns_adb_t *adb, dns_name_t *name, dns_name_t *fname, */ static void event_free(isc_event_t *event) { - dns_adbfind_t *find; + dns_adbfind_t *find; - INSIST(event != NULL); - find = event->ev_destroy_arg; - INSIST(DNS_ADBFIND_VALID(find)); + INSIST(event != NULL); + find = event->ev_destroy_arg; + INSIST(DNS_ADBFIND_VALID(find)); - LOCK(&find->lock); - find->flags |= FIND_EVENT_FREED; - event->ev_destroy_arg = NULL; - UNLOCK(&find->lock); + LOCK(&find->lock); + find->flags |= FIND_EVENT_FREED; + event->ev_destroy_arg = NULL; + UNLOCK(&find->lock); } /* @@ -1080,502 +1048,487 @@ event_free(isc_event_t *event) { */ static void clean_finds_at_name(dns_adbname_t *name, isc_eventtype_t evtype, - unsigned int addrs) + unsigned int addrs) { - isc_event_t *ev; - isc_task_t *task; - dns_adbfind_t *find; - dns_adbfind_t *next_find; - isc_boolean_t process; - unsigned int wanted, notify; - - DP(ENTER_LEVEL, - "ENTER clean_finds_at_name, name %p, evtype %08x, addrs %08x", - name, evtype, addrs); - - find = ISC_LIST_HEAD(name->finds); - while (find != NULL) { - LOCK(&find->lock); - next_find = ISC_LIST_NEXT(find, plink); - - process = ISC_FALSE; - wanted = find->flags & DNS_ADBFIND_ADDRESSMASK; - notify = wanted & addrs; - - switch (evtype) { - case DNS_EVENT_ADBMOREADDRESSES: - DP(ISC_LOG_DEBUG(3), "DNS_EVENT_ADBMOREADDRESSES"); - if ((notify) != 0) { - find->flags &= ~addrs; - process = ISC_TRUE; - } - break; - case DNS_EVENT_ADBNOMOREADDRESSES: - DP(ISC_LOG_DEBUG(3), "DNS_EVENT_ADBNOMOREADDRESSES"); - find->flags &= ~addrs; - wanted = find->flags & DNS_ADBFIND_ADDRESSMASK; - if (wanted == 0) - process = ISC_TRUE; - break; - default: - find->flags &= ~addrs; - process = ISC_TRUE; - } - - if (process) { - DP(DEF_LEVEL, "cfan: processing find %p", find); - /* - * Unlink the find from the name, letting the caller - * call dns_adb_destroyfind() on it to clean it up - * later. - */ - ISC_LIST_UNLINK(name->finds, find, plink); - find->adbname = NULL; - find->name_bucket = DNS_ADB_INVALIDBUCKET; - - INSIST(!FIND_EVENTSENT(find)); - - ev = &find->event; - task = ev->ev_sender; - ev->ev_sender = find; - find->result_v4 = find_err_map[name->fetch_err]; - find->result_v6 = find_err_map[name->fetch6_err]; - ev->ev_type = evtype; - ev->ev_destroy = event_free; - ev->ev_destroy_arg = find; - - DP(DEF_LEVEL, - "sending event %p to task %p for find %p", - ev, task, find); - - isc_task_sendanddetach(&task, (isc_event_t **)&ev); - } else { - DP(DEF_LEVEL, "cfan: skipping find %p", find); - } - - UNLOCK(&find->lock); - find = next_find; - } - - DP(ENTER_LEVEL, "EXIT clean_finds_at_name, name %p", name); + isc_event_t *ev; + isc_task_t *task; + dns_adbfind_t *find; + dns_adbfind_t *next_find; + isc_boolean_t process; + unsigned int wanted, notify; + + DP(ENTER_LEVEL, + "ENTER clean_finds_at_name, name %p, evtype %08x, addrs %08x", + name, evtype, addrs); + + find = ISC_LIST_HEAD(name->finds); + while (find != NULL) { + LOCK(&find->lock); + next_find = ISC_LIST_NEXT(find, plink); + + process = ISC_FALSE; + wanted = find->flags & DNS_ADBFIND_ADDRESSMASK; + notify = wanted & addrs; + + switch (evtype) { + case DNS_EVENT_ADBMOREADDRESSES: + DP(ISC_LOG_DEBUG(3), "DNS_EVENT_ADBMOREADDRESSES"); + if ((notify) != 0) { + find->flags &= ~addrs; + process = ISC_TRUE; + } + break; + case DNS_EVENT_ADBNOMOREADDRESSES: + DP(ISC_LOG_DEBUG(3), "DNS_EVENT_ADBNOMOREADDRESSES"); + find->flags &= ~addrs; + wanted = find->flags & DNS_ADBFIND_ADDRESSMASK; + if (wanted == 0) + process = ISC_TRUE; + break; + default: + find->flags &= ~addrs; + process = ISC_TRUE; + } + + if (process) { + DP(DEF_LEVEL, "cfan: processing find %p", find); + /* + * Unlink the find from the name, letting the caller + * call dns_adb_destroyfind() on it to clean it up + * later. + */ + ISC_LIST_UNLINK(name->finds, find, plink); + find->adbname = NULL; + find->name_bucket = DNS_ADB_INVALIDBUCKET; + + INSIST(!FIND_EVENTSENT(find)); + + ev = &find->event; + task = ev->ev_sender; + ev->ev_sender = find; + find->result_v4 = find_err_map[name->fetch_err]; + find->result_v6 = find_err_map[name->fetch6_err]; + ev->ev_type = evtype; + ev->ev_destroy = event_free; + ev->ev_destroy_arg = find; + + DP(DEF_LEVEL, + "sending event %p to task %p for find %p", + ev, task, find); + + isc_task_sendanddetach(&task, (isc_event_t **)&ev); + } else { + DP(DEF_LEVEL, "cfan: skipping find %p", find); + } + + UNLOCK(&find->lock); + find = next_find; + } + + DP(ENTER_LEVEL, "EXIT clean_finds_at_name, name %p", name); } static inline void check_exit(dns_adb_t *adb) { - isc_event_t *event; - /* - * The caller must be holding the adb lock. - */ - if (adb->shutting_down) { - /* - * If there aren't any external references either, we're - * done. Send the control event to initiate shutdown. - */ - INSIST(!adb->cevent_sent); /* Sanity check. */ - event = &adb->cevent; - isc_task_send(adb->task, &event); - adb->cevent_sent = ISC_TRUE; - } + isc_event_t *event; + /* + * The caller must be holding the adb lock. + */ + if (adb->shutting_down) { + /* + * If there aren't any external references either, we're + * done. Send the control event to initiate shutdown. + */ + INSIST(!adb->cevent_sent); /* Sanity check. */ + event = &adb->cevent; + isc_task_send(adb->task, &event); + adb->cevent_sent = ISC_TRUE; + } } static inline isc_boolean_t dec_adb_irefcnt(dns_adb_t *adb) { - isc_event_t *event; - isc_task_t *etask; - isc_boolean_t result = ISC_FALSE; + isc_event_t *event; + isc_task_t *etask; + isc_boolean_t result = ISC_FALSE; - LOCK(&adb->reflock); + LOCK(&adb->reflock); - INSIST(adb->irefcnt > 0); - adb->irefcnt--; + INSIST(adb->irefcnt > 0); + adb->irefcnt--; - if (adb->irefcnt == 0) { - event = ISC_LIST_HEAD(adb->whenshutdown); - while (event != NULL) { - ISC_LIST_UNLINK(adb->whenshutdown, event, ev_link); - etask = event->ev_sender; - event->ev_sender = adb; - isc_task_sendanddetach(&etask, &event); - event = ISC_LIST_HEAD(adb->whenshutdown); - } - } + if (adb->irefcnt == 0) { + event = ISC_LIST_HEAD(adb->whenshutdown); + while (event != NULL) { + ISC_LIST_UNLINK(adb->whenshutdown, event, ev_link); + etask = event->ev_sender; + event->ev_sender = adb; + isc_task_sendanddetach(&etask, &event); + event = ISC_LIST_HEAD(adb->whenshutdown); + } + } - if (adb->irefcnt == 0 && adb->erefcnt == 0) - result = ISC_TRUE; - UNLOCK(&adb->reflock); - return (result); + if (adb->irefcnt == 0 && adb->erefcnt == 0) + result = ISC_TRUE; + UNLOCK(&adb->reflock); + return (result); } static inline void inc_adb_irefcnt(dns_adb_t *adb) { - LOCK(&adb->reflock); - adb->irefcnt++; - UNLOCK(&adb->reflock); + LOCK(&adb->reflock); + adb->irefcnt++; + UNLOCK(&adb->reflock); } static inline void inc_adb_erefcnt(dns_adb_t *adb) { - LOCK(&adb->reflock); - adb->erefcnt++; - UNLOCK(&adb->reflock); + LOCK(&adb->reflock); + adb->erefcnt++; + UNLOCK(&adb->reflock); } static inline void inc_entry_refcnt(dns_adb_t *adb, dns_adbentry_t *entry, isc_boolean_t lock) { - int bucket; + int bucket; - bucket = entry->lock_bucket; + bucket = entry->lock_bucket; - if (lock) - LOCK(&adb->entrylocks[bucket]); + if (lock) + LOCK(&adb->entrylocks[bucket]); - entry->refcnt++; + entry->refcnt++; - if (lock) - UNLOCK(&adb->entrylocks[bucket]); + if (lock) + UNLOCK(&adb->entrylocks[bucket]); } static inline isc_boolean_t dec_entry_refcnt(dns_adb_t *adb, dns_adbentry_t *entry, isc_boolean_t lock) { - int bucket; - isc_boolean_t destroy_entry; - isc_boolean_t result = ISC_FALSE; + int bucket; + isc_boolean_t destroy_entry; + isc_boolean_t result = ISC_FALSE; - bucket = entry->lock_bucket; + bucket = entry->lock_bucket; - if (lock) - LOCK(&adb->entrylocks[bucket]); + if (lock) + LOCK(&adb->entrylocks[bucket]); - INSIST(entry->refcnt > 0); - entry->refcnt--; + INSIST(entry->refcnt > 0); + entry->refcnt--; - destroy_entry = ISC_FALSE; - if (entry->refcnt == 0 && - (adb->entry_sd[bucket] || entry->expires == 0)) { - destroy_entry = ISC_TRUE; - result = unlink_entry(adb, entry); - } + destroy_entry = ISC_FALSE; + if (entry->refcnt == 0 && + (adb->entry_sd[bucket] || entry->expires == 0)) { + destroy_entry = ISC_TRUE; + result = unlink_entry(adb, entry); + } - if (lock) - UNLOCK(&adb->entrylocks[bucket]); + if (lock) + UNLOCK(&adb->entrylocks[bucket]); - if (!destroy_entry) - return (result); + if (!destroy_entry) + return (result); - entry->lock_bucket = DNS_ADB_INVALIDBUCKET; + entry->lock_bucket = DNS_ADB_INVALIDBUCKET; - free_adbentry(adb, &entry); - if (result) - result =dec_adb_irefcnt(adb); + free_adbentry(adb, &entry); + if (result) + result = dec_adb_irefcnt(adb); - return (result); + return (result); } static inline dns_adbname_t * new_adbname(dns_adb_t *adb, dns_name_t *dnsname) { - dns_adbname_t *name; - - name = isc_mempool_get(adb->nmp); - if (name == NULL) - return (NULL); - - dns_name_init(&name->name, NULL); - if (dns_name_dup(dnsname, adb->mctx, &name->name) != ISC_R_SUCCESS) { - isc_mempool_put(adb->nmp, name); - return (NULL); - } - dns_name_init(&name->target, NULL); - name->magic = DNS_ADBNAME_MAGIC; - name->adb = adb; - name->partial_result = 0; - name->flags = 0; - name->expire_v4 = INT_MAX; - name->expire_v6 = INT_MAX; - name->expire_target = INT_MAX; - name->chains = 0; - name->lock_bucket = DNS_ADB_INVALIDBUCKET; - ISC_LIST_INIT(name->v4); - ISC_LIST_INIT(name->v6); - name->fetch_a = NULL; - name->fetch_aaaa = NULL; - name->fetch_err = FIND_ERR_UNEXPECTED; - name->fetch6_err = FIND_ERR_UNEXPECTED; - ISC_LIST_INIT(name->finds); - ISC_LINK_INIT(name, plink); - - return (name); + dns_adbname_t *name; + + name = isc_mempool_get(adb->nmp); + if (name == NULL) + return (NULL); + + dns_name_init(&name->name, NULL); + if (dns_name_dup(dnsname, adb->mctx, &name->name) != ISC_R_SUCCESS) { + isc_mempool_put(adb->nmp, name); + return (NULL); + } + dns_name_init(&name->target, NULL); + name->magic = DNS_ADBNAME_MAGIC; + name->adb = adb; + name->partial_result = 0; + name->flags = 0; + name->expire_v4 = INT_MAX; + name->expire_v6 = INT_MAX; + name->expire_target = INT_MAX; + name->chains = 0; + name->lock_bucket = DNS_ADB_INVALIDBUCKET; + ISC_LIST_INIT(name->v4); + ISC_LIST_INIT(name->v6); + name->fetch_a = NULL; + name->fetch_aaaa = NULL; + name->fetch_err = FIND_ERR_UNEXPECTED; + name->fetch6_err = FIND_ERR_UNEXPECTED; + ISC_LIST_INIT(name->finds); + ISC_LINK_INIT(name, plink); + + return (name); } static inline void free_adbname(dns_adb_t *adb, dns_adbname_t **name) { - dns_adbname_t *n; - - INSIST(name != NULL && DNS_ADBNAME_VALID(*name)); - n = *name; - *name = NULL; - - INSIST(!NAME_HAS_V4(n)); - INSIST(!NAME_HAS_V6(n)); - INSIST(!NAME_FETCH(n)); - INSIST(ISC_LIST_EMPTY(n->finds)); - INSIST(!ISC_LINK_LINKED(n, plink)); - INSIST(n->lock_bucket == DNS_ADB_INVALIDBUCKET); - INSIST(n->adb == adb); - -#ifdef LRU_DEBUG - adb->nname--; /* XXX: omit ADB lock for brevity */ - INSIST((int)adb->nname >= 0); -#endif + dns_adbname_t *n; + + INSIST(name != NULL && DNS_ADBNAME_VALID(*name)); + n = *name; + *name = NULL; + + INSIST(!NAME_HAS_V4(n)); + INSIST(!NAME_HAS_V6(n)); + INSIST(!NAME_FETCH(n)); + INSIST(ISC_LIST_EMPTY(n->finds)); + INSIST(!ISC_LINK_LINKED(n, plink)); + INSIST(n->lock_bucket == DNS_ADB_INVALIDBUCKET); + INSIST(n->adb == adb); - n->magic = 0; - dns_name_free(&n->name, adb->mctx); + n->magic = 0; + dns_name_free(&n->name, adb->mctx); - isc_mempool_put(adb->nmp, n); + isc_mempool_put(adb->nmp, n); } static inline dns_adbnamehook_t * new_adbnamehook(dns_adb_t *adb, dns_adbentry_t *entry) { - dns_adbnamehook_t *nh; + dns_adbnamehook_t *nh; - nh = isc_mempool_get(adb->nhmp); - if (nh == NULL) - return (NULL); + nh = isc_mempool_get(adb->nhmp); + if (nh == NULL) + return (NULL); - nh->magic = DNS_ADBNAMEHOOK_MAGIC; - nh->entry = entry; - ISC_LINK_INIT(nh, plink); + nh->magic = DNS_ADBNAMEHOOK_MAGIC; + nh->entry = entry; + ISC_LINK_INIT(nh, plink); - return (nh); + return (nh); } static inline void free_adbnamehook(dns_adb_t *adb, dns_adbnamehook_t **namehook) { - dns_adbnamehook_t *nh; + dns_adbnamehook_t *nh; - INSIST(namehook != NULL && DNS_ADBNAMEHOOK_VALID(*namehook)); - nh = *namehook; - *namehook = NULL; + INSIST(namehook != NULL && DNS_ADBNAMEHOOK_VALID(*namehook)); + nh = *namehook; + *namehook = NULL; - INSIST(nh->entry == NULL); - INSIST(!ISC_LINK_LINKED(nh, plink)); + INSIST(nh->entry == NULL); + INSIST(!ISC_LINK_LINKED(nh, plink)); - nh->magic = 0; - isc_mempool_put(adb->nhmp, nh); + nh->magic = 0; + isc_mempool_put(adb->nhmp, nh); } static inline dns_adblameinfo_t * new_adblameinfo(dns_adb_t *adb, dns_name_t *qname, dns_rdatatype_t qtype) { - dns_adblameinfo_t *li; + dns_adblameinfo_t *li; - li = isc_mempool_get(adb->limp); - if (li == NULL) - return (NULL); + li = isc_mempool_get(adb->limp); + if (li == NULL) + return (NULL); - dns_name_init(&li->qname, NULL); - if (dns_name_dup(qname, adb->mctx, &li->qname) != ISC_R_SUCCESS) { - isc_mempool_put(adb->limp, li); - return (NULL); - } - li->magic = DNS_ADBLAMEINFO_MAGIC; - li->lame_timer = 0; - li->qtype = qtype; - ISC_LINK_INIT(li, plink); + dns_name_init(&li->qname, NULL); + if (dns_name_dup(qname, adb->mctx, &li->qname) != ISC_R_SUCCESS) { + isc_mempool_put(adb->limp, li); + return (NULL); + } + li->magic = DNS_ADBLAMEINFO_MAGIC; + li->lame_timer = 0; + li->qtype = qtype; + ISC_LINK_INIT(li, plink); - return (li); + return (li); } static inline void free_adblameinfo(dns_adb_t *adb, dns_adblameinfo_t **lameinfo) { - dns_adblameinfo_t *li; + dns_adblameinfo_t *li; - INSIST(lameinfo != NULL && DNS_ADBLAMEINFO_VALID(*lameinfo)); - li = *lameinfo; - *lameinfo = NULL; + INSIST(lameinfo != NULL && DNS_ADBLAMEINFO_VALID(*lameinfo)); + li = *lameinfo; + *lameinfo = NULL; - INSIST(!ISC_LINK_LINKED(li, plink)); + INSIST(!ISC_LINK_LINKED(li, plink)); - dns_name_free(&li->qname, adb->mctx); + dns_name_free(&li->qname, adb->mctx); - li->magic = 0; + li->magic = 0; - isc_mempool_put(adb->limp, li); + isc_mempool_put(adb->limp, li); } static inline dns_adbentry_t * new_adbentry(dns_adb_t *adb) { - dns_adbentry_t *e; - isc_uint32_t r; - - e = isc_mempool_get(adb->emp); - if (e == NULL) - return (NULL); - - e->magic = DNS_ADBENTRY_MAGIC; - e->lock_bucket = DNS_ADB_INVALIDBUCKET; - e->refcnt = 0; - e->flags = 0; - isc_random_get(&r); - e->srtt = (r & 0x1f) + 1; - e->expires = 0; - ISC_LIST_INIT(e->lameinfo); - ISC_LINK_INIT(e, plink); - -#ifdef LRU_DEBUG - adb->nentry++; /* XXX: omit ADB lock for brevity */ - adb->nentry_total++; -#endif + dns_adbentry_t *e; + isc_uint32_t r; + + e = isc_mempool_get(adb->emp); + if (e == NULL) + return (NULL); - return (e); + e->magic = DNS_ADBENTRY_MAGIC; + e->lock_bucket = DNS_ADB_INVALIDBUCKET; + e->refcnt = 0; + e->flags = 0; + isc_random_get(&r); + e->srtt = (r & 0x1f) + 1; + e->expires = 0; + ISC_LIST_INIT(e->lameinfo); + ISC_LINK_INIT(e, plink); + + return (e); } static inline void free_adbentry(dns_adb_t *adb, dns_adbentry_t **entry) { - dns_adbentry_t *e; - dns_adblameinfo_t *li; - - INSIST(entry != NULL && DNS_ADBENTRY_VALID(*entry)); - e = *entry; - *entry = NULL; + dns_adbentry_t *e; + dns_adblameinfo_t *li; - INSIST(e->lock_bucket == DNS_ADB_INVALIDBUCKET); - INSIST(e->refcnt == 0); - INSIST(!ISC_LINK_LINKED(e, plink)); + INSIST(entry != NULL && DNS_ADBENTRY_VALID(*entry)); + e = *entry; + *entry = NULL; - e->magic = 0; + INSIST(e->lock_bucket == DNS_ADB_INVALIDBUCKET); + INSIST(e->refcnt == 0); + INSIST(!ISC_LINK_LINKED(e, plink)); - li = ISC_LIST_HEAD(e->lameinfo); - while (li != NULL) { - ISC_LIST_UNLINK(e->lameinfo, li, plink); - free_adblameinfo(adb, &li); - li = ISC_LIST_HEAD(e->lameinfo); - } + e->magic = 0; -#ifdef LRU_DEBUG - adb->nentry--; /* XXX: omit ADB lock for brevity */ - INSIST((int)adb->nentry >= 0); -#endif + li = ISC_LIST_HEAD(e->lameinfo); + while (li != NULL) { + ISC_LIST_UNLINK(e->lameinfo, li, plink); + free_adblameinfo(adb, &li); + li = ISC_LIST_HEAD(e->lameinfo); + } - isc_mempool_put(adb->emp, e); + isc_mempool_put(adb->emp, e); } static inline dns_adbfind_t * new_adbfind(dns_adb_t *adb) { - dns_adbfind_t *h; - isc_result_t result; - - h = isc_mempool_get(adb->ahmp); - if (h == NULL) - return (NULL); - - /* - * Public members. - */ - h->magic = 0; - h->adb = adb; - h->partial_result = 0; - h->options = 0; - h->flags = 0; - h->result_v4 = ISC_R_UNEXPECTED; - h->result_v6 = ISC_R_UNEXPECTED; - ISC_LINK_INIT(h, publink); - ISC_LINK_INIT(h, plink); - ISC_LIST_INIT(h->list); - h->adbname = NULL; - h->name_bucket = DNS_ADB_INVALIDBUCKET; - - /* - * private members - */ - result = isc_mutex_init(&h->lock); - if (result != ISC_R_SUCCESS) { - isc_mempool_put(adb->ahmp, h); - return (NULL); - } - - ISC_EVENT_INIT(&h->event, sizeof(isc_event_t), 0, 0, 0, NULL, NULL, - NULL, NULL, h); - - inc_adb_irefcnt(adb); - h->magic = DNS_ADBFIND_MAGIC; - return (h); + dns_adbfind_t *h; + isc_result_t result; + + h = isc_mempool_get(adb->ahmp); + if (h == NULL) + return (NULL); + + /* + * Public members. + */ + h->magic = 0; + h->adb = adb; + h->partial_result = 0; + h->options = 0; + h->flags = 0; + h->result_v4 = ISC_R_UNEXPECTED; + h->result_v6 = ISC_R_UNEXPECTED; + ISC_LINK_INIT(h, publink); + ISC_LINK_INIT(h, plink); + ISC_LIST_INIT(h->list); + h->adbname = NULL; + h->name_bucket = DNS_ADB_INVALIDBUCKET; + + /* + * private members + */ + result = isc_mutex_init(&h->lock); + if (result != ISC_R_SUCCESS) { + isc_mempool_put(adb->ahmp, h); + return (NULL); + } + + ISC_EVENT_INIT(&h->event, sizeof(isc_event_t), 0, 0, 0, NULL, NULL, + NULL, NULL, h); + + inc_adb_irefcnt(adb); + h->magic = DNS_ADBFIND_MAGIC; + return (h); } static inline dns_adbfetch_t * new_adbfetch(dns_adb_t *adb) { - dns_adbfetch_t *f; + dns_adbfetch_t *f; - f = isc_mempool_get(adb->afmp); - if (f == NULL) - return (NULL); + f = isc_mempool_get(adb->afmp); + if (f == NULL) + return (NULL); - f->magic = 0; - f->namehook = NULL; - f->entry = NULL; - f->fetch = NULL; + f->magic = 0; + f->namehook = NULL; + f->entry = NULL; + f->fetch = NULL; - f->namehook = new_adbnamehook(adb, NULL); - if (f->namehook == NULL) - goto err; + f->namehook = new_adbnamehook(adb, NULL); + if (f->namehook == NULL) + goto err; - f->entry = new_adbentry(adb); - if (f->entry == NULL) - goto err; + f->entry = new_adbentry(adb); + if (f->entry == NULL) + goto err; - dns_rdataset_init(&f->rdataset); + dns_rdataset_init(&f->rdataset); - f->magic = DNS_ADBFETCH_MAGIC; + f->magic = DNS_ADBFETCH_MAGIC; - return (f); + return (f); err: - if (f->namehook != NULL) - free_adbnamehook(adb, &f->namehook); - if (f->entry != NULL) - free_adbentry(adb, &f->entry); - isc_mempool_put(adb->afmp, f); - return (NULL); + if (f->namehook != NULL) + free_adbnamehook(adb, &f->namehook); + if (f->entry != NULL) + free_adbentry(adb, &f->entry); + isc_mempool_put(adb->afmp, f); + return (NULL); } static inline void free_adbfetch(dns_adb_t *adb, dns_adbfetch_t **fetch) { - dns_adbfetch_t *f; + dns_adbfetch_t *f; - INSIST(fetch != NULL && DNS_ADBFETCH_VALID(*fetch)); - f = *fetch; - *fetch = NULL; + INSIST(fetch != NULL && DNS_ADBFETCH_VALID(*fetch)); + f = *fetch; + *fetch = NULL; - f->magic = 0; + f->magic = 0; - if (f->namehook != NULL) - free_adbnamehook(adb, &f->namehook); - if (f->entry != NULL) - free_adbentry(adb, &f->entry); + if (f->namehook != NULL) + free_adbnamehook(adb, &f->namehook); + if (f->entry != NULL) + free_adbentry(adb, &f->entry); - if (dns_rdataset_isassociated(&f->rdataset)) - dns_rdataset_disassociate(&f->rdataset); + if (dns_rdataset_isassociated(&f->rdataset)) + dns_rdataset_disassociate(&f->rdataset); - isc_mempool_put(adb->afmp, f); + isc_mempool_put(adb->afmp, f); } static inline isc_boolean_t free_adbfind(dns_adb_t *adb, dns_adbfind_t **findp) { - dns_adbfind_t *find; + dns_adbfind_t *find; - INSIST(findp != NULL && DNS_ADBFIND_VALID(*findp)); - find = *findp; - *findp = NULL; + INSIST(findp != NULL && DNS_ADBFIND_VALID(*findp)); + find = *findp; + *findp = NULL; - INSIST(!FIND_HAS_ADDRS(find)); - INSIST(!ISC_LINK_LINKED(find, publink)); - INSIST(!ISC_LINK_LINKED(find, plink)); - INSIST(find->name_bucket == DNS_ADB_INVALIDBUCKET); - INSIST(find->adbname == NULL); + INSIST(!FIND_HAS_ADDRS(find)); + INSIST(!ISC_LINK_LINKED(find, publink)); + INSIST(!ISC_LINK_LINKED(find, plink)); + INSIST(find->name_bucket == DNS_ADB_INVALIDBUCKET); + INSIST(find->adbname == NULL); - find->magic = 0; + find->magic = 0; - DESTROYLOCK(&find->lock); - isc_mempool_put(adb->ahmp, find); - return (dec_adb_irefcnt(adb)); + DESTROYLOCK(&find->lock); + isc_mempool_put(adb->ahmp, find); + return (dec_adb_irefcnt(adb)); } /* @@ -1585,41 +1538,37 @@ free_adbfind(dns_adb_t *adb, dns_adbfind_t **findp) { */ static inline dns_adbaddrinfo_t * new_adbaddrinfo(dns_adb_t *adb, dns_adbentry_t *entry, in_port_t port) { - dns_adbaddrinfo_t *ai; - - ai = isc_mempool_get(adb->aimp); - if (ai == NULL) - return (NULL); - - ai->magic = DNS_ADBADDRINFO_MAGIC; - ai->sockaddr = entry->sockaddr; - isc_sockaddr_setport(&ai->sockaddr, port); - ai->srtt = entry->srtt; - ai->flags = entry->flags; - ai->entry = entry; - ISC_LINK_INIT(ai, publink); - -#ifdef LRU_DEBUG - adb->entryuses++; /* for debug */ -#endif + dns_adbaddrinfo_t *ai; + + ai = isc_mempool_get(adb->aimp); + if (ai == NULL) + return (NULL); + + ai->magic = DNS_ADBADDRINFO_MAGIC; + ai->sockaddr = entry->sockaddr; + isc_sockaddr_setport(&ai->sockaddr, port); + ai->srtt = entry->srtt; + ai->flags = entry->flags; + ai->entry = entry; + ISC_LINK_INIT(ai, publink); - return (ai); + return (ai); } static inline void free_adbaddrinfo(dns_adb_t *adb, dns_adbaddrinfo_t **ainfo) { - dns_adbaddrinfo_t *ai; + dns_adbaddrinfo_t *ai; - INSIST(ainfo != NULL && DNS_ADBADDRINFO_VALID(*ainfo)); - ai = *ainfo; - *ainfo = NULL; + INSIST(ainfo != NULL && DNS_ADBADDRINFO_VALID(*ainfo)); + ai = *ainfo; + *ainfo = NULL; - INSIST(ai->entry == NULL); - INSIST(!ISC_LINK_LINKED(ai, publink)); + INSIST(ai->entry == NULL); + INSIST(!ISC_LINK_LINKED(ai, publink)); - ai->magic = 0; + ai->magic = 0; - isc_mempool_put(adb->aimp, ai); + isc_mempool_put(adb->aimp, ai); } /* @@ -1631,34 +1580,34 @@ free_adbaddrinfo(dns_adb_t *adb, dns_adbaddrinfo_t **ainfo) { */ static inline dns_adbname_t * find_name_and_lock(dns_adb_t *adb, dns_name_t *name, - unsigned int options, int *bucketp) + unsigned int options, int *bucketp) { - dns_adbname_t *adbname; - int bucket; - - bucket = dns_name_fullhash(name, ISC_FALSE) % NBUCKETS; - - if (*bucketp == DNS_ADB_INVALIDBUCKET) { - LOCK(&adb->namelocks[bucket]); - *bucketp = bucket; - } else if (*bucketp != bucket) { - UNLOCK(&adb->namelocks[*bucketp]); - LOCK(&adb->namelocks[bucket]); - *bucketp = bucket; - } - - adbname = ISC_LIST_HEAD(adb->names[bucket]); - while (adbname != NULL) { - if (!NAME_DEAD(adbname)) { - if (dns_name_equal(name, &adbname->name) - && GLUEHINT_OK(adbname, options) - && STARTATZONE_MATCHES(adbname, options)) - return (adbname); - } - adbname = ISC_LIST_NEXT(adbname, plink); - } - - return (NULL); + dns_adbname_t *adbname; + int bucket; + + bucket = dns_name_fullhash(name, ISC_FALSE) % NBUCKETS; + + if (*bucketp == DNS_ADB_INVALIDBUCKET) { + LOCK(&adb->namelocks[bucket]); + *bucketp = bucket; + } else if (*bucketp != bucket) { + UNLOCK(&adb->namelocks[*bucketp]); + LOCK(&adb->namelocks[bucket]); + *bucketp = bucket; + } + + adbname = ISC_LIST_HEAD(adb->names[bucket]); + while (adbname != NULL) { + if (!NAME_DEAD(adbname)) { + if (dns_name_equal(name, &adbname->name) + && GLUEHINT_OK(adbname, options) + && STARTATZONE_MATCHES(adbname, options)) + return (adbname); + } + adbname = ISC_LIST_NEXT(adbname, plink); + } + + return (NULL); } /* @@ -1673,28 +1622,28 @@ find_name_and_lock(dns_adb_t *adb, dns_name_t *name, */ static inline dns_adbentry_t * find_entry_and_lock(dns_adb_t *adb, isc_sockaddr_t *addr, int *bucketp) { - dns_adbentry_t *entry; - int bucket; + dns_adbentry_t *entry; + int bucket; - bucket = isc_sockaddr_hash(addr, ISC_TRUE) % NBUCKETS; + bucket = isc_sockaddr_hash(addr, ISC_TRUE) % NBUCKETS; - if (*bucketp == DNS_ADB_INVALIDBUCKET) { - LOCK(&adb->entrylocks[bucket]); - *bucketp = bucket; - } else if (*bucketp != bucket) { - UNLOCK(&adb->entrylocks[*bucketp]); - LOCK(&adb->entrylocks[bucket]); - *bucketp = bucket; - } + if (*bucketp == DNS_ADB_INVALIDBUCKET) { + LOCK(&adb->entrylocks[bucket]); + *bucketp = bucket; + } else if (*bucketp != bucket) { + UNLOCK(&adb->entrylocks[*bucketp]); + LOCK(&adb->entrylocks[bucket]); + *bucketp = bucket; + } - entry = ISC_LIST_HEAD(adb->entries[bucket]); - while (entry != NULL) { - if (isc_sockaddr_equal(addr, &entry->sockaddr)) - return (entry); - entry = ISC_LIST_NEXT(entry, plink); - } + entry = ISC_LIST_HEAD(adb->entries[bucket]); + while (entry != NULL) { + if (isc_sockaddr_equal(addr, &entry->sockaddr)) + return (entry); + entry = ISC_LIST_NEXT(entry, plink); + } - return (NULL); + return (NULL); } /* @@ -1702,140 +1651,133 @@ find_entry_and_lock(dns_adb_t *adb, isc_sockaddr_t *addr, int *bucketp) { */ static isc_boolean_t entry_is_lame(dns_adb_t *adb, dns_adbentry_t *entry, dns_name_t *qname, - dns_rdatatype_t qtype, isc_stdtime_t now) + dns_rdatatype_t qtype, isc_stdtime_t now) { - dns_adblameinfo_t *li, *next_li; - isc_boolean_t is_bad; + dns_adblameinfo_t *li, *next_li; + isc_boolean_t is_bad; - is_bad = ISC_FALSE; + is_bad = ISC_FALSE; - li = ISC_LIST_HEAD(entry->lameinfo); - if (li == NULL) - return (ISC_FALSE); - while (li != NULL) { - next_li = ISC_LIST_NEXT(li, plink); + li = ISC_LIST_HEAD(entry->lameinfo); + if (li == NULL) + return (ISC_FALSE); + while (li != NULL) { + next_li = ISC_LIST_NEXT(li, plink); - /* - * Has the entry expired? - */ - if (li->lame_timer < now) { - ISC_LIST_UNLINK(entry->lameinfo, li, plink); - free_adblameinfo(adb, &li); - } + /* + * Has the entry expired? + */ + if (li->lame_timer < now) { + ISC_LIST_UNLINK(entry->lameinfo, li, plink); + free_adblameinfo(adb, &li); + } - /* - * Order tests from least to most expensive. - * - * We do not break out of the main loop here as - * we use the loop for house keeping. - */ - if (li != NULL && !is_bad && li->qtype == qtype && - dns_name_equal(qname, &li->qname)) - is_bad = ISC_TRUE; + /* + * Order tests from least to most expensive. + * + * We do not break out of the main loop here as + * we use the loop for house keeping. + */ + if (li != NULL && !is_bad && li->qtype == qtype && + dns_name_equal(qname, &li->qname)) + is_bad = ISC_TRUE; - li = next_li; - } + li = next_li; + } - return (is_bad); + return (is_bad); } static void copy_namehook_lists(dns_adb_t *adb, dns_adbfind_t *find, dns_name_t *qname, - dns_rdatatype_t qtype, dns_adbname_t *name, - isc_stdtime_t now) + dns_rdatatype_t qtype, dns_adbname_t *name, + isc_stdtime_t now) { - dns_adbnamehook_t *namehook; - dns_adbaddrinfo_t *addrinfo; - dns_adbentry_t *entry; - int bucket; - - bucket = DNS_ADB_INVALIDBUCKET; - - if (find->options & DNS_ADBFIND_INET) { - namehook = ISC_LIST_HEAD(name->v4); - while (namehook != NULL) { - entry = namehook->entry; - bucket = entry->lock_bucket; - LOCK(&adb->entrylocks[bucket]); - - if (!FIND_RETURNLAME(find) - && entry_is_lame(adb, entry, qname, qtype, now)) { - find->options |= DNS_ADBFIND_LAMEPRUNED; - goto nextv4; - } - addrinfo = new_adbaddrinfo(adb, entry, find->port); - if (addrinfo == NULL) { - find->partial_result |= DNS_ADBFIND_INET; - goto out; - } - /* - * Found a valid entry. Add it to the find's list. - */ - inc_entry_refcnt(adb, entry, ISC_FALSE); - ISC_LIST_APPEND(find->list, addrinfo, publink); - addrinfo = NULL; - nextv4: - UNLOCK(&adb->entrylocks[bucket]); - bucket = DNS_ADB_INVALIDBUCKET; - namehook = ISC_LIST_NEXT(namehook, plink); - } - } - - if (find->options & DNS_ADBFIND_INET6) { - namehook = ISC_LIST_HEAD(name->v6); - while (namehook != NULL) { - entry = namehook->entry; - bucket = entry->lock_bucket; - LOCK(&adb->entrylocks[bucket]); - - if (entry_is_lame(adb, entry, qname, qtype, now)) - goto nextv6; - addrinfo = new_adbaddrinfo(adb, entry, find->port); - if (addrinfo == NULL) { - find->partial_result |= DNS_ADBFIND_INET6; - goto out; - } - /* - * Found a valid entry. Add it to the find's list. - */ - inc_entry_refcnt(adb, entry, ISC_FALSE); - ISC_LIST_APPEND(find->list, addrinfo, publink); - addrinfo = NULL; - nextv6: - UNLOCK(&adb->entrylocks[bucket]); - bucket = DNS_ADB_INVALIDBUCKET; - namehook = ISC_LIST_NEXT(namehook, plink); - } - } + dns_adbnamehook_t *namehook; + dns_adbaddrinfo_t *addrinfo; + dns_adbentry_t *entry; + int bucket; + + bucket = DNS_ADB_INVALIDBUCKET; + + if (find->options & DNS_ADBFIND_INET) { + namehook = ISC_LIST_HEAD(name->v4); + while (namehook != NULL) { + entry = namehook->entry; + bucket = entry->lock_bucket; + LOCK(&adb->entrylocks[bucket]); + + if (!FIND_RETURNLAME(find) + && entry_is_lame(adb, entry, qname, qtype, now)) { + find->options |= DNS_ADBFIND_LAMEPRUNED; + goto nextv4; + } + addrinfo = new_adbaddrinfo(adb, entry, find->port); + if (addrinfo == NULL) { + find->partial_result |= DNS_ADBFIND_INET; + goto out; + } + /* + * Found a valid entry. Add it to the find's list. + */ + inc_entry_refcnt(adb, entry, ISC_FALSE); + ISC_LIST_APPEND(find->list, addrinfo, publink); + addrinfo = NULL; + nextv4: + UNLOCK(&adb->entrylocks[bucket]); + bucket = DNS_ADB_INVALIDBUCKET; + namehook = ISC_LIST_NEXT(namehook, plink); + } + } + + if (find->options & DNS_ADBFIND_INET6) { + namehook = ISC_LIST_HEAD(name->v6); + while (namehook != NULL) { + entry = namehook->entry; + bucket = entry->lock_bucket; + LOCK(&adb->entrylocks[bucket]); + + if (entry_is_lame(adb, entry, qname, qtype, now)) + goto nextv6; + addrinfo = new_adbaddrinfo(adb, entry, find->port); + if (addrinfo == NULL) { + find->partial_result |= DNS_ADBFIND_INET6; + goto out; + } + /* + * Found a valid entry. Add it to the find's list. + */ + inc_entry_refcnt(adb, entry, ISC_FALSE); + ISC_LIST_APPEND(find->list, addrinfo, publink); + addrinfo = NULL; + nextv6: + UNLOCK(&adb->entrylocks[bucket]); + bucket = DNS_ADB_INVALIDBUCKET; + namehook = ISC_LIST_NEXT(namehook, plink); + } + } out: - if (bucket != DNS_ADB_INVALIDBUCKET) - UNLOCK(&adb->entrylocks[bucket]); + if (bucket != DNS_ADB_INVALIDBUCKET) + UNLOCK(&adb->entrylocks[bucket]); } static void shutdown_task(isc_task_t *task, isc_event_t *ev) { - dns_adb_t *adb; - - UNUSED(task); - - adb = ev->ev_arg; - INSIST(DNS_ADB_VALID(adb)); - - /* - * Kill the timer, and then the ADB itself. Note that this implies - * that this task was the one scheduled to get timer events. If - * this is not true (and it is unfortunate there is no way to INSIST() - * this) badness will occur. - */ - LOCK(&adb->lock); - isc_timer_detach(&adb->timer); -#ifdef LRU_DEBUG - isc_timer_detach(&adb->dump_timer); -#endif - UNLOCK(&adb->lock); - isc_event_free(&ev); - destroy(adb); + dns_adb_t *adb; + + UNUSED(task); + + adb = ev->ev_arg; + INSIST(DNS_ADB_VALID(adb)); + + isc_event_free(&ev); + /* + * Wait for lock around check_exit() call to be released. + */ + LOCK(&adb->lock); + UNLOCK(&adb->lock); + destroy(adb); } /* @@ -1843,34 +1785,34 @@ shutdown_task(isc_task_t *task, isc_event_t *ev) { */ static isc_boolean_t check_expire_name(dns_adbname_t **namep, isc_stdtime_t now) { - dns_adbname_t *name; - isc_boolean_t result = ISC_FALSE; - - INSIST(namep != NULL && DNS_ADBNAME_VALID(*namep)); - name = *namep; - - if (NAME_HAS_V4(name) || NAME_HAS_V6(name)) - return (result); - if (NAME_FETCH(name)) - return (result); - if (!EXPIRE_OK(name->expire_v4, now)) - return (result); - if (!EXPIRE_OK(name->expire_v6, now)) - return (result); - if (!EXPIRE_OK(name->expire_target, now)) - return (result); - - /* - * The name is empty. Delete it. - */ - result = kill_name(&name, DNS_EVENT_ADBEXPIRED, ISC_FALSE); - *namep = NULL; - - /* - * Our caller, or one of its callers, will be calling check_exit() at - * some point, so we don't need to do it here. - */ - return (result); + dns_adbname_t *name; + isc_boolean_t result = ISC_FALSE; + + INSIST(namep != NULL && DNS_ADBNAME_VALID(*namep)); + name = *namep; + + if (NAME_HAS_V4(name) || NAME_HAS_V6(name)) + return (result); + if (NAME_FETCH(name)) + return (result); + if (!EXPIRE_OK(name->expire_v4, now)) + return (result); + if (!EXPIRE_OK(name->expire_v6, now)) + return (result); + if (!EXPIRE_OK(name->expire_target, now)) + return (result); + + /* + * The name is empty. Delete it. + */ + result = kill_name(&name, DNS_EVENT_ADBEXPIRED, ISC_FALSE); + *namep = NULL; + + /* + * Our caller, or one of its callers, will be calling check_exit() at + * some point, so we don't need to do it here. + */ + return (result); } /*% @@ -1886,67 +1828,55 @@ check_expire_name(dns_adbname_t **namep, isc_stdtime_t now) { */ static void check_stale_name(dns_adb_t *adb, int bucket, isc_stdtime_t now) { - int victims, max_victims; - isc_boolean_t result; - dns_adbname_t *victim, *next_victim; - isc_boolean_t overmem = adb->overmem; - int scans = 0; - - INSIST(bucket != DNS_ADB_INVALIDBUCKET); - - max_victims = overmem ? 2 : 1; - - /* - * We limit the number of scanned entries to 10 (arbitrary choice) - * in order to avoid examining too many entries when there are many - * tail entries that have fetches (this should be rare, but could - * happen). - */ - victim = ISC_LIST_TAIL(adb->names[bucket]); - for (victims = 0; - victim != NULL && victims < max_victims && scans < 10; - victim = next_victim) { - scans++; - next_victim = ISC_LIST_PREV(victim, plink); - - /* - * If the victim is already dead, it simply waits for some - * final events. Ignore it. - */ - if (NAME_DEAD(victim)) - goto next; - - result = check_expire_name(&victim, now); - if (victim == NULL) { -#ifdef LRU_DEBUG - adb->stale_expire++; -#endif - victims++; - goto next; - } - - if (!NAME_FETCH(victim) && - (overmem || victim->last_used + ADB_STALE_MARGIN <= now)) { - RUNTIME_CHECK(kill_name(&victim, - DNS_EVENT_ADBCANCELED, - ISC_TRUE) == - ISC_FALSE); -#ifdef LRU_DEBUG - adb->stale_lru++; -#endif - victims++; - } - - next: - if (!overmem) - break; - } - -#ifdef LRU_DEBUG - /* XXX: omit lock for brevity */ - adb->stale_scan += scans; - adb->stale_purge += victims; -#endif + int victims, max_victims; + isc_boolean_t result; + dns_adbname_t *victim, *next_victim; + isc_boolean_t overmem = adb->overmem; + int scans = 0; + + INSIST(bucket != DNS_ADB_INVALIDBUCKET); + + max_victims = overmem ? 2 : 1; + + /* + * We limit the number of scanned entries to 10 (arbitrary choice) + * in order to avoid examining too many entries when there are many + * tail entries that have fetches (this should be rare, but could + * happen). + */ + victim = ISC_LIST_TAIL(adb->names[bucket]); + for (victims = 0; + victim != NULL && victims < max_victims && scans < 10; + victim = next_victim) { + scans++; + next_victim = ISC_LIST_PREV(victim, plink); + + /* + * If the victim is already dead, it simply waits for some + * final events. Ignore it. + */ + if (NAME_DEAD(victim)) + goto next; + + result = check_expire_name(&victim, now); + if (victim == NULL) { + victims++; + goto next; + } + + if (!NAME_FETCH(victim) && + (overmem || victim->last_used + ADB_STALE_MARGIN <= now)) { + RUNTIME_CHECK(kill_name(&victim, + DNS_EVENT_ADBCANCELED, + ISC_TRUE) == + ISC_FALSE); + victims++; + } + + next: + if (!overmem) + break; + } } /* @@ -1955,29 +1885,29 @@ check_stale_name(dns_adb_t *adb, int bucket, isc_stdtime_t now) { static isc_boolean_t check_expire_entry(dns_adb_t *adb, dns_adbentry_t **entryp, isc_stdtime_t now) { - dns_adbentry_t *entry; - isc_boolean_t result = ISC_FALSE; + dns_adbentry_t *entry; + isc_boolean_t result = ISC_FALSE; - INSIST(entryp != NULL && DNS_ADBENTRY_VALID(*entryp)); - entry = *entryp; + INSIST(entryp != NULL && DNS_ADBENTRY_VALID(*entryp)); + entry = *entryp; - if (entry->refcnt != 0) - return (result); + if (entry->refcnt != 0) + return (result); - if (entry->expires == 0 || entry->expires > now) - return (result); + if (entry->expires == 0 || entry->expires > now) + return (result); - /* - * The entry is not in use. Delete it. - */ - DP(DEF_LEVEL, "killing entry %p", entry); - INSIST(ISC_LINK_LINKED(entry, plink)); - result = unlink_entry(adb, entry); - free_adbentry(adb, &entry); - if (result) - dec_adb_irefcnt(adb); - *entryp = NULL; - return (result); + /* + * The entry is not in use. Delete it. + */ + DP(DEF_LEVEL, "killing entry %p", entry); + INSIST(ISC_LINK_LINKED(entry, plink)); + result = unlink_entry(adb, entry); + free_adbentry(adb, &entry); + if (result) + dec_adb_irefcnt(adb); + *entryp = NULL; + return (result); } /* @@ -1985,29 +1915,29 @@ check_expire_entry(dns_adb_t *adb, dns_adbentry_t **entryp, isc_stdtime_t now) */ static isc_boolean_t cleanup_names(dns_adb_t *adb, int bucket, isc_stdtime_t now) { - dns_adbname_t *name; - dns_adbname_t *next_name; - isc_boolean_t result = ISC_FALSE; - - DP(CLEAN_LEVEL, "cleaning name bucket %d", bucket); - - LOCK(&adb->namelocks[bucket]); - if (adb->name_sd[bucket]) { - UNLOCK(&adb->namelocks[bucket]); - return (result); - } - - name = ISC_LIST_HEAD(adb->names[bucket]); - while (name != NULL) { - next_name = ISC_LIST_NEXT(name, plink); - INSIST(result == ISC_FALSE); - result = check_expire_namehooks(name, now); - if (!result) - result = check_expire_name(&name, now); - name = next_name; - } - UNLOCK(&adb->namelocks[bucket]); - return (result); + dns_adbname_t *name; + dns_adbname_t *next_name; + isc_boolean_t result = ISC_FALSE; + + DP(CLEAN_LEVEL, "cleaning name bucket %d", bucket); + + LOCK(&adb->namelocks[bucket]); + if (adb->name_sd[bucket]) { + UNLOCK(&adb->namelocks[bucket]); + return (result); + } + + name = ISC_LIST_HEAD(adb->names[bucket]); + while (name != NULL) { + next_name = ISC_LIST_NEXT(name, plink); + INSIST(result == ISC_FALSE); + result = check_expire_namehooks(name, now); + if (!result) + result = check_expire_name(&name, now); + name = next_name; + } + UNLOCK(&adb->namelocks[bucket]); + return (result); } /* @@ -2015,131 +1945,46 @@ cleanup_names(dns_adb_t *adb, int bucket, isc_stdtime_t now) { */ static isc_boolean_t cleanup_entries(dns_adb_t *adb, int bucket, isc_stdtime_t now) { - dns_adbentry_t *entry, *next_entry; - isc_boolean_t result = ISC_FALSE; - - DP(CLEAN_LEVEL, "cleaning entry bucket %d", bucket); - - LOCK(&adb->entrylocks[bucket]); - entry = ISC_LIST_HEAD(adb->entries[bucket]); - while (entry != NULL) { - next_entry = ISC_LIST_NEXT(entry, plink); - INSIST(result == ISC_FALSE); - result = check_expire_entry(adb, &entry, now); - entry = next_entry; - } - UNLOCK(&adb->entrylocks[bucket]); - return (result); -} - -#if 1 -static void -timer_cleanup(isc_task_t *task, isc_event_t *ev) { - UNUSED(task); + dns_adbentry_t *entry, *next_entry; + isc_boolean_t result = ISC_FALSE; - isc_event_free(&ev); -} -#else -static void -timer_cleanup(isc_task_t *task, isc_event_t *ev) { - dns_adb_t *adb; - isc_stdtime_t now; - unsigned int i; - isc_interval_t interval; - - UNUSED(task); - - adb = ev->ev_arg; - INSIST(DNS_ADB_VALID(adb)); - - LOCK(&adb->lock); - - isc_stdtime_get(&now); - - for (i = 0; i < CLEAN_BUCKETS; i++) { - /* - * Call our cleanup routines. - */ - RUNTIME_CHECK(cleanup_names(adb, adb->next_cleanbucket, now) == - ISC_FALSE); - RUNTIME_CHECK(cleanup_entries(adb, adb->next_cleanbucket, now) - == ISC_FALSE); - - /* - * Set the next bucket to be cleaned. - */ - adb->next_cleanbucket++; - if (adb->next_cleanbucket >= NBUCKETS) { - adb->next_cleanbucket = 0; -#ifdef DUMP_ADB_AFTER_CLEANING - dump_adb(adb, stdout, ISC_TRUE, now); -#endif - } - } + DP(CLEAN_LEVEL, "cleaning entry bucket %d", bucket); - /* - * Reset the timer. - * XXXDCL isc_timer_reset might return ISC_R_UNEXPECTED or - * ISC_R_NOMEMORY, but it isn't clear what could be done here - * if either one of those things happened. - */ - interval = adb->tick_interval; - if (adb->overmem) - isc_interval_set(&interval, 0, 1); - (void)isc_timer_reset(adb->timer, isc_timertype_once, NULL, - &interval, ISC_FALSE); - - UNLOCK(&adb->lock); - - isc_event_free(&ev); + LOCK(&adb->entrylocks[bucket]); + entry = ISC_LIST_HEAD(adb->entries[bucket]); + while (entry != NULL) { + next_entry = ISC_LIST_NEXT(entry, plink); + INSIST(result == ISC_FALSE); + result = check_expire_entry(adb, &entry, now); + entry = next_entry; + } + UNLOCK(&adb->entrylocks[bucket]); + return (result); } -#endif static void destroy(dns_adb_t *adb) { - adb->magic = 0; - -#ifdef LRU_DEBUG - /* for debug: print statistics */ - if (adb->nname_total > 0) { - INSIST(adb->nname == 0 && adb->nentry == 0); - isc_log_write(dns_lctx, DNS_LOGCATEGORY_DATABASE, - DNS_LOGMODULE_ADB, ISC_LOG_INFO, - "ADB %p name hit %.2f, entry hit %.2f", adb, - (double)adb->nameuses / - (adb->nname_total + adb->nameuses), - adb->entryuses > 0 ? - (double)adb->entryuses / - (adb->nentry_total + adb->entryuses) : 0); - isc_log_write(dns_lctx, DNS_LOGCATEGORY_DATABASE, - DNS_LOGMODULE_ADB, ISC_LOG_INFO, - "ADB %p stale name purges: %u(%u,%u)/%u", - adb, adb->stale_purge, adb->stale_expire, - adb->stale_lru, adb->stale_scan); - } -#endif + adb->magic = 0; - /* - * The timer is already dead, from the task's shutdown callback. - */ - isc_task_detach(&adb->task); + isc_task_detach(&adb->task); - isc_mempool_destroy(&adb->nmp); - isc_mempool_destroy(&adb->nhmp); - isc_mempool_destroy(&adb->limp); - isc_mempool_destroy(&adb->emp); - isc_mempool_destroy(&adb->ahmp); - isc_mempool_destroy(&adb->aimp); - isc_mempool_destroy(&adb->afmp); + isc_mempool_destroy(&adb->nmp); + isc_mempool_destroy(&adb->nhmp); + isc_mempool_destroy(&adb->limp); + isc_mempool_destroy(&adb->emp); + isc_mempool_destroy(&adb->ahmp); + isc_mempool_destroy(&adb->aimp); + isc_mempool_destroy(&adb->afmp); - DESTROYMUTEXBLOCK(adb->entrylocks, NBUCKETS); - DESTROYMUTEXBLOCK(adb->namelocks, NBUCKETS); + DESTROYMUTEXBLOCK(adb->entrylocks, NBUCKETS); + DESTROYMUTEXBLOCK(adb->namelocks, NBUCKETS); - DESTROYLOCK(&adb->reflock); - DESTROYLOCK(&adb->lock); - DESTROYLOCK(&adb->mplock); + DESTROYLOCK(&adb->reflock); + DESTROYLOCK(&adb->lock); + DESTROYLOCK(&adb->mplock); + DESTROYLOCK(&adb->overmemlock); - isc_mem_putanddetach(&adb->mctx, adb, sizeof(dns_adb_t)); + isc_mem_putanddetach(&adb->mctx, adb, sizeof(dns_adb_t)); } @@ -2149,1393 +1994,1350 @@ destroy(dns_adb_t *adb) { isc_result_t dns_adb_create(isc_mem_t *mem, dns_view_t *view, isc_timermgr_t *timermgr, - isc_taskmgr_t *taskmgr, dns_adb_t **newadb) + isc_taskmgr_t *taskmgr, dns_adb_t **newadb) { - dns_adb_t *adb; - isc_result_t result; - int i; - - REQUIRE(mem != NULL); - REQUIRE(view != NULL); - REQUIRE(timermgr != NULL); - REQUIRE(taskmgr != NULL); - REQUIRE(newadb != NULL && *newadb == NULL); - - adb = isc_mem_get(mem, sizeof(dns_adb_t)); - if (adb == NULL) - return (ISC_R_NOMEMORY); - - /* - * Initialize things here that cannot fail, and especially things - * that must be NULL for the error return to work properly. - */ - adb->magic = 0; - adb->erefcnt = 1; - adb->irefcnt = 0; - adb->nmp = NULL; - adb->nhmp = NULL; - adb->limp = NULL; - adb->emp = NULL; - adb->ahmp = NULL; - adb->aimp = NULL; - adb->afmp = NULL; - adb->task = NULL; - adb->timer = NULL; -#ifdef LRU_DEBUG - adb->dump_timer = NULL; -#endif - adb->mctx = NULL; - adb->view = view; - adb->timermgr = timermgr; - adb->taskmgr = taskmgr; - adb->next_cleanbucket = 0; - ISC_EVENT_INIT(&adb->cevent, sizeof(adb->cevent), 0, NULL, - DNS_EVENT_ADBCONTROL, shutdown_task, adb, - adb, NULL, NULL); - adb->cevent_sent = ISC_FALSE; - adb->shutting_down = ISC_FALSE; - adb->overmem = ISC_FALSE; - ISC_LIST_INIT(adb->whenshutdown); - -#ifdef LRU_DEBUG - /* for debug */ - adb->nname = 0; - adb->nname_total = 0; - adb->nentry = 0; - adb->nentry_total = 0; - adb->stale_purge = 0; - adb->stale_scan = 0; - adb->stale_expire = 0; - adb->stale_lru = 0; - adb->nameuses = 0; - adb->entryuses = 0; -#endif - - isc_mem_attach(mem, &adb->mctx); - - result = isc_mutex_init(&adb->lock); - if (result != ISC_R_SUCCESS) - goto fail0b; - - result = isc_mutex_init(&adb->mplock); - if (result != ISC_R_SUCCESS) - goto fail0c; - - result = isc_mutex_init(&adb->reflock); - if (result != ISC_R_SUCCESS) - goto fail0d; - - /* - * Initialize the bucket locks for names and elements. - * May as well initialize the list heads, too. - */ - result = isc_mutexblock_init(adb->namelocks, NBUCKETS); - if (result != ISC_R_SUCCESS) - goto fail1; - for (i = 0; i < NBUCKETS; i++) { - ISC_LIST_INIT(adb->names[i]); - adb->name_sd[i] = ISC_FALSE; - adb->name_refcnt[i] = 0; - adb->irefcnt++; - } - for (i = 0; i < NBUCKETS; i++) { - ISC_LIST_INIT(adb->entries[i]); - adb->entry_sd[i] = ISC_FALSE; - adb->entry_refcnt[i] = 0; - adb->irefcnt++; - } - result = isc_mutexblock_init(adb->entrylocks, NBUCKETS); - if (result != ISC_R_SUCCESS) - goto fail2; - - /* - * Memory pools - */ + dns_adb_t *adb; + isc_result_t result; + int i; + + REQUIRE(mem != NULL); + REQUIRE(view != NULL); + REQUIRE(timermgr != NULL); /* this is actually unused */ + REQUIRE(taskmgr != NULL); + REQUIRE(newadb != NULL && *newadb == NULL); + + UNUSED(timermgr); + + adb = isc_mem_get(mem, sizeof(dns_adb_t)); + if (adb == NULL) + return (ISC_R_NOMEMORY); + + /* + * Initialize things here that cannot fail, and especially things + * that must be NULL for the error return to work properly. + */ + adb->magic = 0; + adb->erefcnt = 1; + adb->irefcnt = 0; + adb->nmp = NULL; + adb->nhmp = NULL; + adb->limp = NULL; + adb->emp = NULL; + adb->ahmp = NULL; + adb->aimp = NULL; + adb->afmp = NULL; + adb->task = NULL; + adb->mctx = NULL; + adb->view = view; + adb->taskmgr = taskmgr; + adb->next_cleanbucket = 0; + ISC_EVENT_INIT(&adb->cevent, sizeof(adb->cevent), 0, NULL, + DNS_EVENT_ADBCONTROL, shutdown_task, adb, + adb, NULL, NULL); + adb->cevent_sent = ISC_FALSE; + adb->shutting_down = ISC_FALSE; + adb->overmem = ISC_FALSE; + ISC_LIST_INIT(adb->whenshutdown); + + isc_mem_attach(mem, &adb->mctx); + + result = isc_mutex_init(&adb->lock); + if (result != ISC_R_SUCCESS) + goto fail0b; + + result = isc_mutex_init(&adb->mplock); + if (result != ISC_R_SUCCESS) + goto fail0c; + + result = isc_mutex_init(&adb->reflock); + if (result != ISC_R_SUCCESS) + goto fail0d; + + result = isc_mutex_init(&adb->overmemlock); + if (result != ISC_R_SUCCESS) + goto fail0e; + + /* + * Initialize the bucket locks for names and elements. + * May as well initialize the list heads, too. + */ + result = isc_mutexblock_init(adb->namelocks, NBUCKETS); + if (result != ISC_R_SUCCESS) + goto fail1; + for (i = 0; i < NBUCKETS; i++) { + ISC_LIST_INIT(adb->names[i]); + adb->name_sd[i] = ISC_FALSE; + adb->name_refcnt[i] = 0; + adb->irefcnt++; + } + for (i = 0; i < NBUCKETS; i++) { + ISC_LIST_INIT(adb->entries[i]); + adb->entry_sd[i] = ISC_FALSE; + adb->entry_refcnt[i] = 0; + adb->irefcnt++; + } + result = isc_mutexblock_init(adb->entrylocks, NBUCKETS); + if (result != ISC_R_SUCCESS) + goto fail2; + + /* + * Memory pools + */ #define MPINIT(t, p, n) do { \ - result = isc_mempool_create(mem, sizeof(t), &(p)); \ - if (result != ISC_R_SUCCESS) \ - goto fail3; \ - isc_mempool_setfreemax((p), FREE_ITEMS); \ - isc_mempool_setfillcount((p), FILL_COUNT); \ - isc_mempool_setname((p), n); \ - isc_mempool_associatelock((p), &adb->mplock); \ + result = isc_mempool_create(mem, sizeof(t), &(p)); \ + if (result != ISC_R_SUCCESS) \ + goto fail3; \ + isc_mempool_setfreemax((p), FREE_ITEMS); \ + isc_mempool_setfillcount((p), FILL_COUNT); \ + isc_mempool_setname((p), n); \ + isc_mempool_associatelock((p), &adb->mplock); \ } while (0) - MPINIT(dns_adbname_t, adb->nmp, "adbname"); - MPINIT(dns_adbnamehook_t, adb->nhmp, "adbnamehook"); - MPINIT(dns_adblameinfo_t, adb->limp, "adblameinfo"); - MPINIT(dns_adbentry_t, adb->emp, "adbentry"); - MPINIT(dns_adbfind_t, adb->ahmp, "adbfind"); - MPINIT(dns_adbaddrinfo_t, adb->aimp, "adbaddrinfo"); - MPINIT(dns_adbfetch_t, adb->afmp, "adbfetch"); + MPINIT(dns_adbname_t, adb->nmp, "adbname"); + MPINIT(dns_adbnamehook_t, adb->nhmp, "adbnamehook"); + MPINIT(dns_adblameinfo_t, adb->limp, "adblameinfo"); + MPINIT(dns_adbentry_t, adb->emp, "adbentry"); + MPINIT(dns_adbfind_t, adb->ahmp, "adbfind"); + MPINIT(dns_adbaddrinfo_t, adb->aimp, "adbaddrinfo"); + MPINIT(dns_adbfetch_t, adb->afmp, "adbfetch"); #undef MPINIT - /* - * Allocate a timer and a task for our periodic cleanup. - */ - result = isc_task_create(adb->taskmgr, 0, &adb->task); - if (result != ISC_R_SUCCESS) - goto fail3; - isc_task_setname(adb->task, "ADB", adb); - /* - * XXXMLG When this is changed to be a config file option, - */ - isc_interval_set(&adb->tick_interval, CLEAN_SECONDS, 0); - result = isc_timer_create(adb->timermgr, isc_timertype_once, - NULL, &adb->tick_interval, adb->task, - timer_cleanup, adb, &adb->timer); - if (result != ISC_R_SUCCESS) - goto fail3; - -#ifdef LRU_DEBUG - { - isc_interval_t interval; - - interval.seconds = DUMP_INTERVAL; - interval.nanoseconds = 0; - RUNTIME_CHECK(isc_time_nowplusinterval(&adb->dump_time, - &interval) == - ISC_R_SUCCESS); - - result = isc_timer_create(adb->timermgr, isc_timertype_once, - &adb->dump_time, NULL, adb->task, - timer_dump, adb, &adb->dump_timer); - } -#endif - - DP(ISC_LOG_DEBUG(5), "cleaning interval for adb: " - "%u buckets every %u seconds, %u buckets in system, %u cl.interval", - CLEAN_BUCKETS, CLEAN_SECONDS, NBUCKETS, CLEAN_PERIOD); - - /* - * Normal return. - */ - adb->magic = DNS_ADB_MAGIC; - *newadb = adb; - return (ISC_R_SUCCESS); + /* + * Allocate an internal task. + */ + result = isc_task_create(adb->taskmgr, 0, &adb->task); + if (result != ISC_R_SUCCESS) + goto fail3; + isc_task_setname(adb->task, "ADB", adb); + + /* + * Normal return. + */ + adb->magic = DNS_ADB_MAGIC; + *newadb = adb; + return (ISC_R_SUCCESS); fail3: - if (adb->task != NULL) - isc_task_detach(&adb->task); - if (adb->timer != NULL) - isc_timer_detach(&adb->timer); + if (adb->task != NULL) + isc_task_detach(&adb->task); - /* clean up entrylocks */ - DESTROYMUTEXBLOCK(adb->entrylocks, NBUCKETS); + /* clean up entrylocks */ + DESTROYMUTEXBLOCK(adb->entrylocks, NBUCKETS); fail2: /* clean up namelocks */ - DESTROYMUTEXBLOCK(adb->namelocks, NBUCKETS); + DESTROYMUTEXBLOCK(adb->namelocks, NBUCKETS); fail1: /* clean up only allocated memory */ - if (adb->nmp != NULL) - isc_mempool_destroy(&adb->nmp); - if (adb->nhmp != NULL) - isc_mempool_destroy(&adb->nhmp); - if (adb->limp != NULL) - isc_mempool_destroy(&adb->limp); - if (adb->emp != NULL) - isc_mempool_destroy(&adb->emp); - if (adb->ahmp != NULL) - isc_mempool_destroy(&adb->ahmp); - if (adb->aimp != NULL) - isc_mempool_destroy(&adb->aimp); - if (adb->afmp != NULL) - isc_mempool_destroy(&adb->afmp); - - DESTROYLOCK(&adb->reflock); + if (adb->nmp != NULL) + isc_mempool_destroy(&adb->nmp); + if (adb->nhmp != NULL) + isc_mempool_destroy(&adb->nhmp); + if (adb->limp != NULL) + isc_mempool_destroy(&adb->limp); + if (adb->emp != NULL) + isc_mempool_destroy(&adb->emp); + if (adb->ahmp != NULL) + isc_mempool_destroy(&adb->ahmp); + if (adb->aimp != NULL) + isc_mempool_destroy(&adb->aimp); + if (adb->afmp != NULL) + isc_mempool_destroy(&adb->afmp); + + DESTROYLOCK(&adb->overmemlock); + fail0e: + DESTROYLOCK(&adb->reflock); fail0d: - DESTROYLOCK(&adb->mplock); + DESTROYLOCK(&adb->mplock); fail0c: - DESTROYLOCK(&adb->lock); + DESTROYLOCK(&adb->lock); fail0b: - isc_mem_putanddetach(&adb->mctx, adb, sizeof(dns_adb_t)); + isc_mem_putanddetach(&adb->mctx, adb, sizeof(dns_adb_t)); - return (result); + return (result); } void dns_adb_attach(dns_adb_t *adb, dns_adb_t **adbx) { - REQUIRE(DNS_ADB_VALID(adb)); - REQUIRE(adbx != NULL && *adbx == NULL); + REQUIRE(DNS_ADB_VALID(adb)); + REQUIRE(adbx != NULL && *adbx == NULL); - inc_adb_erefcnt(adb); - *adbx = adb; + inc_adb_erefcnt(adb); + *adbx = adb; } void dns_adb_detach(dns_adb_t **adbx) { - dns_adb_t *adb; - isc_boolean_t need_exit_check; + dns_adb_t *adb; + isc_boolean_t need_exit_check; - REQUIRE(adbx != NULL && DNS_ADB_VALID(*adbx)); + REQUIRE(adbx != NULL && DNS_ADB_VALID(*adbx)); - adb = *adbx; - *adbx = NULL; + adb = *adbx; + *adbx = NULL; - INSIST(adb->erefcnt > 0); + INSIST(adb->erefcnt > 0); - LOCK(&adb->reflock); - adb->erefcnt--; - need_exit_check = ISC_TF(adb->erefcnt == 0 && adb->irefcnt == 0); - UNLOCK(&adb->reflock); + LOCK(&adb->reflock); + adb->erefcnt--; + need_exit_check = ISC_TF(adb->erefcnt == 0 && adb->irefcnt == 0); + UNLOCK(&adb->reflock); - if (need_exit_check) { - LOCK(&adb->lock); - INSIST(adb->shutting_down); - check_exit(adb); - UNLOCK(&adb->lock); - } + if (need_exit_check) { + LOCK(&adb->lock); + INSIST(adb->shutting_down); + check_exit(adb); + UNLOCK(&adb->lock); + } } void dns_adb_whenshutdown(dns_adb_t *adb, isc_task_t *task, isc_event_t **eventp) { - isc_task_t *clone; - isc_event_t *event; - isc_boolean_t zeroirefcnt = ISC_FALSE; + isc_task_t *clone; + isc_event_t *event; + isc_boolean_t zeroirefcnt = ISC_FALSE; - /* - * Send '*eventp' to 'task' when 'adb' has shutdown. - */ + /* + * Send '*eventp' to 'task' when 'adb' has shutdown. + */ - REQUIRE(DNS_ADB_VALID(adb)); - REQUIRE(eventp != NULL); + REQUIRE(DNS_ADB_VALID(adb)); + REQUIRE(eventp != NULL); - event = *eventp; - *eventp = NULL; + event = *eventp; + *eventp = NULL; - LOCK(&adb->lock); + LOCK(&adb->lock); - LOCK(&adb->reflock); - zeroirefcnt = ISC_TF(adb->irefcnt == 0); + LOCK(&adb->reflock); + zeroirefcnt = ISC_TF(adb->irefcnt == 0); - if (adb->shutting_down && zeroirefcnt && - isc_mempool_getallocated(adb->ahmp) == 0) { - /* - * We're already shutdown. Send the event. - */ - event->ev_sender = adb; - isc_task_send(task, &event); - } else { - clone = NULL; - isc_task_attach(task, &clone); - event->ev_sender = clone; - ISC_LIST_APPEND(adb->whenshutdown, event, ev_link); - } + if (adb->shutting_down && zeroirefcnt && + isc_mempool_getallocated(adb->ahmp) == 0) { + /* + * We're already shutdown. Send the event. + */ + event->ev_sender = adb; + isc_task_send(task, &event); + } else { + clone = NULL; + isc_task_attach(task, &clone); + event->ev_sender = clone; + ISC_LIST_APPEND(adb->whenshutdown, event, ev_link); + } - UNLOCK(&adb->reflock); - UNLOCK(&adb->lock); + UNLOCK(&adb->reflock); + UNLOCK(&adb->lock); } void dns_adb_shutdown(dns_adb_t *adb) { - isc_boolean_t need_check_exit; + isc_boolean_t need_check_exit; - /* - * Shutdown 'adb'. - */ + /* + * Shutdown 'adb'. + */ - LOCK(&adb->lock); + LOCK(&adb->lock); - if (!adb->shutting_down) { - adb->shutting_down = ISC_TRUE; - isc_mem_setwater(adb->mctx, water, adb, 0, 0); - need_check_exit = shutdown_names(adb); - if (!need_check_exit) - need_check_exit = shutdown_entries(adb); - if (need_check_exit) - check_exit(adb); - } + if (!adb->shutting_down) { + adb->shutting_down = ISC_TRUE; + isc_mem_setwater(adb->mctx, water, adb, 0, 0); + need_check_exit = shutdown_names(adb); + if (!need_check_exit) + need_check_exit = shutdown_entries(adb); + if (need_check_exit) + check_exit(adb); + } - UNLOCK(&adb->lock); + UNLOCK(&adb->lock); } isc_result_t dns_adb_createfind(dns_adb_t *adb, isc_task_t *task, isc_taskaction_t action, - void *arg, dns_name_t *name, dns_name_t *qname, - dns_rdatatype_t qtype, unsigned int options, - isc_stdtime_t now, dns_name_t *target, - in_port_t port, dns_adbfind_t **findp) + void *arg, dns_name_t *name, dns_name_t *qname, + dns_rdatatype_t qtype, unsigned int options, + isc_stdtime_t now, dns_name_t *target, + in_port_t port, dns_adbfind_t **findp) { - dns_adbfind_t *find; - dns_adbname_t *adbname; - int bucket; - isc_boolean_t want_event, start_at_zone, alias, have_address; - isc_result_t result; - unsigned int wanted_addresses; - unsigned int wanted_fetches; - unsigned int query_pending; - - REQUIRE(DNS_ADB_VALID(adb)); - if (task != NULL) { - REQUIRE(action != NULL); - } - REQUIRE(name != NULL); - REQUIRE(qname != NULL); - REQUIRE(findp != NULL && *findp == NULL); - REQUIRE(target == NULL || dns_name_hasbuffer(target)); - - REQUIRE((options & DNS_ADBFIND_ADDRESSMASK) != 0); - - result = ISC_R_UNEXPECTED; - wanted_addresses = (options & DNS_ADBFIND_ADDRESSMASK); - wanted_fetches = 0; - query_pending = 0; - want_event = ISC_FALSE; - start_at_zone = ISC_FALSE; - alias = ISC_FALSE; - - if (now == 0) - isc_stdtime_get(&now); - - /* - * XXXMLG Move this comment somewhere else! - * - * Look up the name in our internal database. - * - * Possibilities: Note that these are not always exclusive. - * - * No name found. In this case, allocate a new name header and - * an initial namehook or two. If any of these allocations - * fail, clean up and return ISC_R_NOMEMORY. - * - * Name found, valid addresses present. Allocate one addrinfo - * structure for each found and append it to the linked list - * of addresses for this header. - * - * Name found, queries pending. In this case, if a task was - * passed in, allocate a job id, attach it to the name's job - * list and remember to tell the caller that there will be - * more info coming later. - */ - - find = new_adbfind(adb); - if (find == NULL) - return (ISC_R_NOMEMORY); - - find->port = port; - - /* - * Remember what types of addresses we are interested in. - */ - find->options = options; - find->flags |= wanted_addresses; - if (FIND_WANTEVENT(find)) { - REQUIRE(task != NULL); - } - - /* - * Try to see if we know anything about this name at all. - */ - bucket = DNS_ADB_INVALIDBUCKET; - adbname = find_name_and_lock(adb, name, find->options, &bucket); - if (adb->name_sd[bucket]) { - DP(DEF_LEVEL, - "dns_adb_createfind: returning ISC_R_SHUTTINGDOWN"); - RUNTIME_CHECK(free_adbfind(adb, &find) == ISC_FALSE); - result = ISC_R_SHUTTINGDOWN; - goto out; - } - - /* - * Nothing found. Allocate a new adbname structure for this name. - */ - if (adbname == NULL) { - /* - * See if there is any stale name at the end of list, and purge - * it if so. - */ - check_stale_name(adb, bucket, now); - - adbname = new_adbname(adb, name); - if (adbname == NULL) { - RUNTIME_CHECK(free_adbfind(adb, &find) == ISC_FALSE); - result = ISC_R_NOMEMORY; - goto out; - } - link_name(adb, bucket, adbname); - if (FIND_HINTOK(find)) - adbname->flags |= NAME_HINT_OK; - if (FIND_GLUEOK(find)) - adbname->flags |= NAME_GLUE_OK; - if (FIND_STARTATZONE(find)) - adbname->flags |= NAME_STARTATZONE; - -#ifdef LRU_DEBUG - adb->nname++; /* XXX: omit ADB lock for brevity */ - adb->nname_total++; -#endif - } else { - /* Move this name forward in the LRU list */ - ISC_LIST_UNLINK(adb->names[bucket], adbname, plink); - ISC_LIST_PREPEND(adb->names[bucket], adbname, plink); -#ifdef LRU_DEBUG - adb->nameuses++; -#endif - } - adbname->last_used = now; - - /* - * Expire old entries, etc. - */ - RUNTIME_CHECK(check_expire_namehooks(adbname, now) == ISC_FALSE); - - /* - * Do we know that the name is an alias? - */ - if (!EXPIRE_OK(adbname->expire_target, now)) { - /* - * Yes, it is. - */ - DP(DEF_LEVEL, - "dns_adb_createfind: name %p is an alias (cached)", - adbname); - alias = ISC_TRUE; - goto post_copy; - } - - /* - * Try to populate the name from the database and/or - * start fetches. First try looking for an A record - * in the database. - */ - if (!NAME_HAS_V4(adbname) && EXPIRE_OK(adbname->expire_v4, now) - && WANT_INET(wanted_addresses)) { - result = dbfind_name(adbname, now, dns_rdatatype_a); - if (result == ISC_R_SUCCESS) { - DP(DEF_LEVEL, - "dns_adb_createfind: found A for name %p in db", - adbname); - goto v6; - } - - /* - * Did we get a CNAME or DNAME? - */ - if (result == DNS_R_ALIAS) { - DP(DEF_LEVEL, - "dns_adb_createfind: name %p is an alias", - adbname); - alias = ISC_TRUE; - goto post_copy; - } - - /* - * If the name doesn't exist at all, don't bother with - * v6 queries; they won't work. - * - * If the name does exist but we didn't get our data, go - * ahead and try AAAA. - * - * If the result is neither of these, try a fetch for A. - */ - if (NXDOMAIN_RESULT(result)) - goto fetch; - else if (NXRRSET_RESULT(result)) - goto v6; - - if (!NAME_FETCH_V4(adbname)) - wanted_fetches |= DNS_ADBFIND_INET; - } + dns_adbfind_t *find; + dns_adbname_t *adbname; + int bucket; + isc_boolean_t want_event, start_at_zone, alias, have_address; + isc_result_t result; + unsigned int wanted_addresses; + unsigned int wanted_fetches; + unsigned int query_pending; + + REQUIRE(DNS_ADB_VALID(adb)); + if (task != NULL) { + REQUIRE(action != NULL); + } + REQUIRE(name != NULL); + REQUIRE(qname != NULL); + REQUIRE(findp != NULL && *findp == NULL); + REQUIRE(target == NULL || dns_name_hasbuffer(target)); + + REQUIRE((options & DNS_ADBFIND_ADDRESSMASK) != 0); + + result = ISC_R_UNEXPECTED; + wanted_addresses = (options & DNS_ADBFIND_ADDRESSMASK); + wanted_fetches = 0; + query_pending = 0; + want_event = ISC_FALSE; + start_at_zone = ISC_FALSE; + alias = ISC_FALSE; + + if (now == 0) + isc_stdtime_get(&now); + + /* + * XXXMLG Move this comment somewhere else! + * + * Look up the name in our internal database. + * + * Possibilities: Note that these are not always exclusive. + * + * No name found. In this case, allocate a new name header and + * an initial namehook or two. If any of these allocations + * fail, clean up and return ISC_R_NOMEMORY. + * + * Name found, valid addresses present. Allocate one addrinfo + * structure for each found and append it to the linked list + * of addresses for this header. + * + * Name found, queries pending. In this case, if a task was + * passed in, allocate a job id, attach it to the name's job + * list and remember to tell the caller that there will be + * more info coming later. + */ + + find = new_adbfind(adb); + if (find == NULL) + return (ISC_R_NOMEMORY); + + find->port = port; + + /* + * Remember what types of addresses we are interested in. + */ + find->options = options; + find->flags |= wanted_addresses; + if (FIND_WANTEVENT(find)) { + REQUIRE(task != NULL); + } + + /* + * Try to see if we know anything about this name at all. + */ + bucket = DNS_ADB_INVALIDBUCKET; + adbname = find_name_and_lock(adb, name, find->options, &bucket); + if (adb->name_sd[bucket]) { + DP(DEF_LEVEL, + "dns_adb_createfind: returning ISC_R_SHUTTINGDOWN"); + RUNTIME_CHECK(free_adbfind(adb, &find) == ISC_FALSE); + result = ISC_R_SHUTTINGDOWN; + goto out; + } + + /* + * Nothing found. Allocate a new adbname structure for this name. + */ + if (adbname == NULL) { + /* + * See if there is any stale name at the end of list, and purge + * it if so. + */ + check_stale_name(adb, bucket, now); + + adbname = new_adbname(adb, name); + if (adbname == NULL) { + RUNTIME_CHECK(free_adbfind(adb, &find) == ISC_FALSE); + result = ISC_R_NOMEMORY; + goto out; + } + link_name(adb, bucket, adbname); + if (FIND_HINTOK(find)) + adbname->flags |= NAME_HINT_OK; + if (FIND_GLUEOK(find)) + adbname->flags |= NAME_GLUE_OK; + if (FIND_STARTATZONE(find)) + adbname->flags |= NAME_STARTATZONE; + } else { + /* Move this name forward in the LRU list */ + ISC_LIST_UNLINK(adb->names[bucket], adbname, plink); + ISC_LIST_PREPEND(adb->names[bucket], adbname, plink); + } + adbname->last_used = now; + + /* + * Expire old entries, etc. + */ + RUNTIME_CHECK(check_expire_namehooks(adbname, now) == ISC_FALSE); + + /* + * Do we know that the name is an alias? + */ + if (!EXPIRE_OK(adbname->expire_target, now)) { + /* + * Yes, it is. + */ + DP(DEF_LEVEL, + "dns_adb_createfind: name %p is an alias (cached)", + adbname); + alias = ISC_TRUE; + goto post_copy; + } + + /* + * Try to populate the name from the database and/or + * start fetches. First try looking for an A record + * in the database. + */ + if (!NAME_HAS_V4(adbname) && EXPIRE_OK(adbname->expire_v4, now) + && WANT_INET(wanted_addresses)) { + result = dbfind_name(adbname, now, dns_rdatatype_a); + if (result == ISC_R_SUCCESS) { + DP(DEF_LEVEL, + "dns_adb_createfind: found A for name %p in db", + adbname); + goto v6; + } + + /* + * Did we get a CNAME or DNAME? + */ + if (result == DNS_R_ALIAS) { + DP(DEF_LEVEL, + "dns_adb_createfind: name %p is an alias", + adbname); + alias = ISC_TRUE; + goto post_copy; + } + + /* + * If the name doesn't exist at all, don't bother with + * v6 queries; they won't work. + * + * If the name does exist but we didn't get our data, go + * ahead and try AAAA. + * + * If the result is neither of these, try a fetch for A. + */ + if (NXDOMAIN_RESULT(result)) + goto fetch; + else if (NXRRSET_RESULT(result)) + goto v6; + + if (!NAME_FETCH_V4(adbname)) + wanted_fetches |= DNS_ADBFIND_INET; + } v6: - if (!NAME_HAS_V6(adbname) && EXPIRE_OK(adbname->expire_v6, now) - && WANT_INET6(wanted_addresses)) { - result = dbfind_name(adbname, now, dns_rdatatype_aaaa); - if (result == ISC_R_SUCCESS) { - DP(DEF_LEVEL, - "dns_adb_createfind: found AAAA for name %p", - adbname); - goto fetch; - } - - /* - * Did we get a CNAME or DNAME? - */ - if (result == DNS_R_ALIAS) { - DP(DEF_LEVEL, - "dns_adb_createfind: name %p is an alias", - adbname); - alias = ISC_TRUE; - goto post_copy; - } - - /* - * Listen to negative cache hints, and don't start - * another query. - */ - if (NCACHE_RESULT(result) || AUTH_NX(result)) - goto fetch; - - if (!NAME_FETCH_V6(adbname)) - wanted_fetches |= DNS_ADBFIND_INET6; - } + if (!NAME_HAS_V6(adbname) && EXPIRE_OK(adbname->expire_v6, now) + && WANT_INET6(wanted_addresses)) { + result = dbfind_name(adbname, now, dns_rdatatype_aaaa); + if (result == ISC_R_SUCCESS) { + DP(DEF_LEVEL, + "dns_adb_createfind: found AAAA for name %p", + adbname); + goto fetch; + } + + /* + * Did we get a CNAME or DNAME? + */ + if (result == DNS_R_ALIAS) { + DP(DEF_LEVEL, + "dns_adb_createfind: name %p is an alias", + adbname); + alias = ISC_TRUE; + goto post_copy; + } + + /* + * Listen to negative cache hints, and don't start + * another query. + */ + if (NCACHE_RESULT(result) || AUTH_NX(result)) + goto fetch; + + if (!NAME_FETCH_V6(adbname)) + wanted_fetches |= DNS_ADBFIND_INET6; + } fetch: - if ((WANT_INET(wanted_addresses) && NAME_HAS_V4(adbname)) || - (WANT_INET6(wanted_addresses) && NAME_HAS_V6(adbname))) - have_address = ISC_TRUE; - else - have_address = ISC_FALSE; - if (wanted_fetches != 0 && - ! (FIND_AVOIDFETCHES(find) && have_address)) { - /* - * We're missing at least one address family. Either the - * caller hasn't instructed us to avoid fetches, or we don't - * know anything about any of the address families that would - * be acceptable so we have to launch fetches. - */ - - if (FIND_STARTATZONE(find)) - start_at_zone = ISC_TRUE; - - /* - * Start V4. - */ - if (WANT_INET(wanted_fetches) && - fetch_name(adbname, start_at_zone, - dns_rdatatype_a) == ISC_R_SUCCESS) { - DP(DEF_LEVEL, - "dns_adb_createfind: started A fetch for name %p", - adbname); - } - - /* - * Start V6. - */ - if (WANT_INET6(wanted_fetches) && - fetch_name(adbname, start_at_zone, - dns_rdatatype_aaaa) == ISC_R_SUCCESS) { - DP(DEF_LEVEL, - "dns_adb_createfind: " - "started AAAA fetch for name %p", - adbname); - } - } - - /* - * Run through the name and copy out the bits we are - * interested in. - */ - copy_namehook_lists(adb, find, qname, qtype, adbname, now); + if ((WANT_INET(wanted_addresses) && NAME_HAS_V4(adbname)) || + (WANT_INET6(wanted_addresses) && NAME_HAS_V6(adbname))) + have_address = ISC_TRUE; + else + have_address = ISC_FALSE; + if (wanted_fetches != 0 && + ! (FIND_AVOIDFETCHES(find) && have_address)) { + /* + * We're missing at least one address family. Either the + * caller hasn't instructed us to avoid fetches, or we don't + * know anything about any of the address families that would + * be acceptable so we have to launch fetches. + */ + + if (FIND_STARTATZONE(find)) + start_at_zone = ISC_TRUE; + + /* + * Start V4. + */ + if (WANT_INET(wanted_fetches) && + fetch_name(adbname, start_at_zone, + dns_rdatatype_a) == ISC_R_SUCCESS) { + DP(DEF_LEVEL, + "dns_adb_createfind: started A fetch for name %p", + adbname); + } + + /* + * Start V6. + */ + if (WANT_INET6(wanted_fetches) && + fetch_name(adbname, start_at_zone, + dns_rdatatype_aaaa) == ISC_R_SUCCESS) { + DP(DEF_LEVEL, + "dns_adb_createfind: " + "started AAAA fetch for name %p", + adbname); + } + } + + /* + * Run through the name and copy out the bits we are + * interested in. + */ + copy_namehook_lists(adb, find, qname, qtype, adbname, now); post_copy: - if (NAME_FETCH_V4(adbname)) - query_pending |= DNS_ADBFIND_INET; - if (NAME_FETCH_V6(adbname)) - query_pending |= DNS_ADBFIND_INET6; - - /* - * Attach to the name's query list if there are queries - * already running, and we have been asked to. - */ - want_event = ISC_TRUE; - if (!FIND_WANTEVENT(find)) - want_event = ISC_FALSE; - if (FIND_WANTEMPTYEVENT(find) && FIND_HAS_ADDRS(find)) - want_event = ISC_FALSE; - if ((wanted_addresses & query_pending) == 0) - want_event = ISC_FALSE; - if (alias) - want_event = ISC_FALSE; - if (want_event) { - find->adbname = adbname; - find->name_bucket = bucket; - ISC_LIST_APPEND(adbname->finds, find, plink); - find->query_pending = (query_pending & wanted_addresses); - find->flags &= ~DNS_ADBFIND_ADDRESSMASK; - find->flags |= (find->query_pending & DNS_ADBFIND_ADDRESSMASK); - DP(DEF_LEVEL, "createfind: attaching find %p to adbname %p", - find, adbname); - } else { - /* - * Remove the flag so the caller knows there will never - * be an event, and set internal flags to fake that - * the event was sent and freed, so dns_adb_destroyfind() will - * do the right thing. - */ - find->query_pending = (query_pending & wanted_addresses); - find->options &= ~DNS_ADBFIND_WANTEVENT; - find->flags |= (FIND_EVENT_SENT | FIND_EVENT_FREED); - find->flags &= ~DNS_ADBFIND_ADDRESSMASK; - } - - find->partial_result |= (adbname->partial_result & wanted_addresses); - if (alias) { - if (target != NULL) { - result = dns_name_copy(&adbname->target, target, NULL); - if (result != ISC_R_SUCCESS) - goto out; - } - result = DNS_R_ALIAS; - } else - result = ISC_R_SUCCESS; - - /* - * Copy out error flags from the name structure into the find. - */ - find->result_v4 = find_err_map[adbname->fetch_err]; - find->result_v6 = find_err_map[adbname->fetch6_err]; + if (NAME_FETCH_V4(adbname)) + query_pending |= DNS_ADBFIND_INET; + if (NAME_FETCH_V6(adbname)) + query_pending |= DNS_ADBFIND_INET6; + + /* + * Attach to the name's query list if there are queries + * already running, and we have been asked to. + */ + want_event = ISC_TRUE; + if (!FIND_WANTEVENT(find)) + want_event = ISC_FALSE; + if (FIND_WANTEMPTYEVENT(find) && FIND_HAS_ADDRS(find)) + want_event = ISC_FALSE; + if ((wanted_addresses & query_pending) == 0) + want_event = ISC_FALSE; + if (alias) + want_event = ISC_FALSE; + if (want_event) { + find->adbname = adbname; + find->name_bucket = bucket; + ISC_LIST_APPEND(adbname->finds, find, plink); + find->query_pending = (query_pending & wanted_addresses); + find->flags &= ~DNS_ADBFIND_ADDRESSMASK; + find->flags |= (find->query_pending & DNS_ADBFIND_ADDRESSMASK); + DP(DEF_LEVEL, "createfind: attaching find %p to adbname %p", + find, adbname); + } else { + /* + * Remove the flag so the caller knows there will never + * be an event, and set internal flags to fake that + * the event was sent and freed, so dns_adb_destroyfind() will + * do the right thing. + */ + find->query_pending = (query_pending & wanted_addresses); + find->options &= ~DNS_ADBFIND_WANTEVENT; + find->flags |= (FIND_EVENT_SENT | FIND_EVENT_FREED); + find->flags &= ~DNS_ADBFIND_ADDRESSMASK; + } + + find->partial_result |= (adbname->partial_result & wanted_addresses); + if (alias) { + if (target != NULL) { + result = dns_name_copy(&adbname->target, target, NULL); + if (result != ISC_R_SUCCESS) + goto out; + } + result = DNS_R_ALIAS; + } else + result = ISC_R_SUCCESS; + + /* + * Copy out error flags from the name structure into the find. + */ + find->result_v4 = find_err_map[adbname->fetch_err]; + find->result_v6 = find_err_map[adbname->fetch6_err]; out: - if (find != NULL) { - *findp = find; + if (find != NULL) { + *findp = find; - if (want_event) { - isc_task_t *taskp; + if (want_event) { + isc_task_t *taskp; - INSIST((find->flags & DNS_ADBFIND_ADDRESSMASK) != 0); - taskp = NULL; - isc_task_attach(task, &taskp); - find->event.ev_sender = taskp; - find->event.ev_action = action; - find->event.ev_arg = arg; - } - } + INSIST((find->flags & DNS_ADBFIND_ADDRESSMASK) != 0); + taskp = NULL; + isc_task_attach(task, &taskp); + find->event.ev_sender = taskp; + find->event.ev_action = action; + find->event.ev_arg = arg; + } + } - UNLOCK(&adb->namelocks[bucket]); + UNLOCK(&adb->namelocks[bucket]); - return (result); + return (result); } void dns_adb_destroyfind(dns_adbfind_t **findp) { - dns_adbfind_t *find; - dns_adbentry_t *entry; - dns_adbaddrinfo_t *ai; - int bucket; - dns_adb_t *adb; - - REQUIRE(findp != NULL && DNS_ADBFIND_VALID(*findp)); - find = *findp; - *findp = NULL; - - LOCK(&find->lock); - - DP(DEF_LEVEL, "dns_adb_destroyfind on find %p", find); - - adb = find->adb; - REQUIRE(DNS_ADB_VALID(adb)); - - REQUIRE(FIND_EVENTFREED(find)); - - bucket = find->name_bucket; - INSIST(bucket == DNS_ADB_INVALIDBUCKET); - - UNLOCK(&find->lock); - - /* - * The find doesn't exist on any list, and nothing is locked. - * Return the find to the memory pool, and decrement the adb's - * reference count. - */ - ai = ISC_LIST_HEAD(find->list); - while (ai != NULL) { - ISC_LIST_UNLINK(find->list, ai, publink); - entry = ai->entry; - ai->entry = NULL; - INSIST(DNS_ADBENTRY_VALID(entry)); - RUNTIME_CHECK(dec_entry_refcnt(adb, entry, ISC_TRUE) == - ISC_FALSE); - free_adbaddrinfo(adb, &ai); - ai = ISC_LIST_HEAD(find->list); - } - - /* - * WARNING: The find is freed with the adb locked. This is done - * to avoid a race condition where we free the find, some other - * thread tests to see if it should be destroyed, detects it should - * be, destroys it, and then we try to lock it for our check, but the - * lock is destroyed. - */ - LOCK(&adb->lock); - if (free_adbfind(adb, &find)) - check_exit(adb); - UNLOCK(&adb->lock); + dns_adbfind_t *find; + dns_adbentry_t *entry; + dns_adbaddrinfo_t *ai; + int bucket; + dns_adb_t *adb; + + REQUIRE(findp != NULL && DNS_ADBFIND_VALID(*findp)); + find = *findp; + *findp = NULL; + + LOCK(&find->lock); + + DP(DEF_LEVEL, "dns_adb_destroyfind on find %p", find); + + adb = find->adb; + REQUIRE(DNS_ADB_VALID(adb)); + + REQUIRE(FIND_EVENTFREED(find)); + + bucket = find->name_bucket; + INSIST(bucket == DNS_ADB_INVALIDBUCKET); + + UNLOCK(&find->lock); + + /* + * The find doesn't exist on any list, and nothing is locked. + * Return the find to the memory pool, and decrement the adb's + * reference count. + */ + ai = ISC_LIST_HEAD(find->list); + while (ai != NULL) { + ISC_LIST_UNLINK(find->list, ai, publink); + entry = ai->entry; + ai->entry = NULL; + INSIST(DNS_ADBENTRY_VALID(entry)); + RUNTIME_CHECK(dec_entry_refcnt(adb, entry, ISC_TRUE) == + ISC_FALSE); + free_adbaddrinfo(adb, &ai); + ai = ISC_LIST_HEAD(find->list); + } + + /* + * WARNING: The find is freed with the adb locked. This is done + * to avoid a race condition where we free the find, some other + * thread tests to see if it should be destroyed, detects it should + * be, destroys it, and then we try to lock it for our check, but the + * lock is destroyed. + */ + LOCK(&adb->lock); + if (free_adbfind(adb, &find)) + check_exit(adb); + UNLOCK(&adb->lock); } void dns_adb_cancelfind(dns_adbfind_t *find) { - isc_event_t *ev; - isc_task_t *task; - dns_adb_t *adb; - int bucket; - int unlock_bucket; - - LOCK(&find->lock); - - DP(DEF_LEVEL, "dns_adb_cancelfind on find %p", find); - - adb = find->adb; - REQUIRE(DNS_ADB_VALID(adb)); - - REQUIRE(!FIND_EVENTFREED(find)); - REQUIRE(FIND_WANTEVENT(find)); - - bucket = find->name_bucket; - if (bucket == DNS_ADB_INVALIDBUCKET) - goto cleanup; - - /* - * We need to get the adbname's lock to unlink the find. - */ - unlock_bucket = bucket; - violate_locking_hierarchy(&find->lock, &adb->namelocks[unlock_bucket]); - bucket = find->name_bucket; - if (bucket != DNS_ADB_INVALIDBUCKET) { - ISC_LIST_UNLINK(find->adbname->finds, find, plink); - find->adbname = NULL; - find->name_bucket = DNS_ADB_INVALIDBUCKET; - } - UNLOCK(&adb->namelocks[unlock_bucket]); - bucket = DNS_ADB_INVALIDBUCKET; + isc_event_t *ev; + isc_task_t *task; + dns_adb_t *adb; + int bucket; + int unlock_bucket; + + LOCK(&find->lock); + + DP(DEF_LEVEL, "dns_adb_cancelfind on find %p", find); + + adb = find->adb; + REQUIRE(DNS_ADB_VALID(adb)); + + REQUIRE(!FIND_EVENTFREED(find)); + REQUIRE(FIND_WANTEVENT(find)); + + bucket = find->name_bucket; + if (bucket == DNS_ADB_INVALIDBUCKET) + goto cleanup; + + /* + * We need to get the adbname's lock to unlink the find. + */ + unlock_bucket = bucket; + violate_locking_hierarchy(&find->lock, &adb->namelocks[unlock_bucket]); + bucket = find->name_bucket; + if (bucket != DNS_ADB_INVALIDBUCKET) { + ISC_LIST_UNLINK(find->adbname->finds, find, plink); + find->adbname = NULL; + find->name_bucket = DNS_ADB_INVALIDBUCKET; + } + UNLOCK(&adb->namelocks[unlock_bucket]); + bucket = DNS_ADB_INVALIDBUCKET; cleanup: - if (!FIND_EVENTSENT(find)) { - ev = &find->event; - task = ev->ev_sender; - ev->ev_sender = find; - ev->ev_type = DNS_EVENT_ADBCANCELED; - ev->ev_destroy = event_free; - ev->ev_destroy_arg = find; - find->result_v4 = ISC_R_CANCELED; - find->result_v6 = ISC_R_CANCELED; + if (!FIND_EVENTSENT(find)) { + ev = &find->event; + task = ev->ev_sender; + ev->ev_sender = find; + ev->ev_type = DNS_EVENT_ADBCANCELED; + ev->ev_destroy = event_free; + ev->ev_destroy_arg = find; + find->result_v4 = ISC_R_CANCELED; + find->result_v6 = ISC_R_CANCELED; - DP(DEF_LEVEL, "sending event %p to task %p for find %p", - ev, task, find); + DP(DEF_LEVEL, "sending event %p to task %p for find %p", + ev, task, find); - isc_task_sendanddetach(&task, (isc_event_t **)&ev); - } + isc_task_sendanddetach(&task, (isc_event_t **)&ev); + } - UNLOCK(&find->lock); + UNLOCK(&find->lock); } void dns_adb_dump(dns_adb_t *adb, FILE *f) { - int i; - isc_stdtime_t now; + int i; + isc_stdtime_t now; - REQUIRE(DNS_ADB_VALID(adb)); - REQUIRE(f != NULL); + REQUIRE(DNS_ADB_VALID(adb)); + REQUIRE(f != NULL); - /* - * Lock the adb itself, lock all the name buckets, then lock all - * the entry buckets. This should put the adb into a state where - * nothing can change, so we can iterate through everything and - * print at our leisure. - */ + /* + * Lock the adb itself, lock all the name buckets, then lock all + * the entry buckets. This should put the adb into a state where + * nothing can change, so we can iterate through everything and + * print at our leisure. + */ - LOCK(&adb->lock); - isc_stdtime_get(&now); + LOCK(&adb->lock); + isc_stdtime_get(&now); - for (i = 0; i < NBUCKETS; i++) - RUNTIME_CHECK(cleanup_names(adb, i, now) == ISC_FALSE); - for (i = 0; i < NBUCKETS; i++) - RUNTIME_CHECK(cleanup_entries(adb, i, now) == ISC_FALSE); + for (i = 0; i < NBUCKETS; i++) + RUNTIME_CHECK(cleanup_names(adb, i, now) == ISC_FALSE); + for (i = 0; i < NBUCKETS; i++) + RUNTIME_CHECK(cleanup_entries(adb, i, now) == ISC_FALSE); - dump_adb(adb, f, ISC_FALSE, now); - UNLOCK(&adb->lock); + dump_adb(adb, f, ISC_FALSE, now); + UNLOCK(&adb->lock); } static void dump_ttl(FILE *f, const char *legend, isc_stdtime_t value, isc_stdtime_t now) { - if (value == INT_MAX) - return; - fprintf(f, " [%s TTL %d]", legend, value - now); + if (value == INT_MAX) + return; + fprintf(f, " [%s TTL %d]", legend, value - now); } static void dump_adb(dns_adb_t *adb, FILE *f, isc_boolean_t debug, isc_stdtime_t now) { - int i; - dns_adbname_t *name; - dns_adbentry_t *entry; - - fprintf(f, ";\n; Address database dump\n;\n"); - if (debug) - fprintf(f, "; addr %p, erefcnt %u, irefcnt %u, finds out %u\n", - adb, adb->erefcnt, adb->irefcnt, - isc_mempool_getallocated(adb->nhmp)); - - for (i = 0; i < NBUCKETS; i++) - LOCK(&adb->namelocks[i]); - for (i = 0; i < NBUCKETS; i++) - LOCK(&adb->entrylocks[i]); - - /* - * Dump the names - */ - for (i = 0; i < NBUCKETS; i++) { - name = ISC_LIST_HEAD(adb->names[i]); - if (name == NULL) - continue; - if (debug) - fprintf(f, "; bucket %d\n", i); - for (; - name != NULL; - name = ISC_LIST_NEXT(name, plink)) - { - if (debug) - fprintf(f, "; name %p (flags %08x)\n", - name, name->flags); - - fprintf(f, "; "); - print_dns_name(f, &name->name); - if (dns_name_countlabels(&name->target) > 0) { - fprintf(f, " alias "); - print_dns_name(f, &name->target); - } - - dump_ttl(f, "v4", name->expire_v4, now); - dump_ttl(f, "v6", name->expire_v6, now); - dump_ttl(f, "target", name->expire_target, now); - - fprintf(f, " [v4 %s] [v6 %s]", - errnames[name->fetch_err], - errnames[name->fetch6_err]); - - fprintf(f, "\n"); - - print_namehook_list(f, "v4", &name->v4, debug, now); - print_namehook_list(f, "v6", &name->v6, debug, now); - - if (debug) - print_fetch_list(f, name); - if (debug) - print_find_list(f, name); - - } - } - - fprintf(f, ";\n; Unassociated entries\n;\n"); - - for (i = 0; i < NBUCKETS; i++) { - entry = ISC_LIST_HEAD(adb->entries[i]); - while (entry != NULL) { - if (entry->refcnt == 0) - dump_entry(f, entry, debug, now); - entry = ISC_LIST_NEXT(entry, plink); - } - } - - /* - * Unlock everything - */ - for (i = 0; i < NBUCKETS; i++) - UNLOCK(&adb->entrylocks[i]); - for (i = 0; i < NBUCKETS; i++) - UNLOCK(&adb->namelocks[i]); + int i; + dns_adbname_t *name; + dns_adbentry_t *entry; + + fprintf(f, ";\n; Address database dump\n;\n"); + if (debug) + fprintf(f, "; addr %p, erefcnt %u, irefcnt %u, finds out %u\n", + adb, adb->erefcnt, adb->irefcnt, + isc_mempool_getallocated(adb->nhmp)); + + for (i = 0; i < NBUCKETS; i++) + LOCK(&adb->namelocks[i]); + for (i = 0; i < NBUCKETS; i++) + LOCK(&adb->entrylocks[i]); + + /* + * Dump the names + */ + for (i = 0; i < NBUCKETS; i++) { + name = ISC_LIST_HEAD(adb->names[i]); + if (name == NULL) + continue; + if (debug) + fprintf(f, "; bucket %d\n", i); + for (; + name != NULL; + name = ISC_LIST_NEXT(name, plink)) + { + if (debug) + fprintf(f, "; name %p (flags %08x)\n", + name, name->flags); + + fprintf(f, "; "); + print_dns_name(f, &name->name); + if (dns_name_countlabels(&name->target) > 0) { + fprintf(f, " alias "); + print_dns_name(f, &name->target); + } + + dump_ttl(f, "v4", name->expire_v4, now); + dump_ttl(f, "v6", name->expire_v6, now); + dump_ttl(f, "target", name->expire_target, now); + + fprintf(f, " [v4 %s] [v6 %s]", + errnames[name->fetch_err], + errnames[name->fetch6_err]); + + fprintf(f, "\n"); + + print_namehook_list(f, "v4", &name->v4, debug, now); + print_namehook_list(f, "v6", &name->v6, debug, now); + + if (debug) + print_fetch_list(f, name); + if (debug) + print_find_list(f, name); + + } + } + + fprintf(f, ";\n; Unassociated entries\n;\n"); + + for (i = 0; i < NBUCKETS; i++) { + entry = ISC_LIST_HEAD(adb->entries[i]); + while (entry != NULL) { + if (entry->refcnt == 0) + dump_entry(f, entry, debug, now); + entry = ISC_LIST_NEXT(entry, plink); + } + } + + /* + * Unlock everything + */ + for (i = 0; i < NBUCKETS; i++) + UNLOCK(&adb->entrylocks[i]); + for (i = 0; i < NBUCKETS; i++) + UNLOCK(&adb->namelocks[i]); } static void dump_entry(FILE *f, dns_adbentry_t *entry, isc_boolean_t debug, - isc_stdtime_t now) + isc_stdtime_t now) { - char addrbuf[ISC_NETADDR_FORMATSIZE]; - char typebuf[DNS_RDATATYPE_FORMATSIZE]; - isc_netaddr_t netaddr; - dns_adblameinfo_t *li; - - isc_netaddr_fromsockaddr(&netaddr, &entry->sockaddr); - isc_netaddr_format(&netaddr, addrbuf, sizeof(addrbuf)); - - if (debug) - fprintf(f, ";\t%p: refcnt %u\n", entry, entry->refcnt); - - fprintf(f, ";\t%s [srtt %u] [flags %08x]", - addrbuf, entry->srtt, entry->flags); - if (entry->expires != 0) - fprintf(f, " [ttl %d]", entry->expires - now); - fprintf(f, "\n"); - for (li = ISC_LIST_HEAD(entry->lameinfo); - li != NULL; - li = ISC_LIST_NEXT(li, plink)) { - fprintf(f, ";\t\t"); - print_dns_name(f, &li->qname); - dns_rdatatype_format(li->qtype, typebuf, sizeof(typebuf)); - fprintf(f, " %s [lame TTL %d]\n", typebuf, - li->lame_timer - now); - } + char addrbuf[ISC_NETADDR_FORMATSIZE]; + char typebuf[DNS_RDATATYPE_FORMATSIZE]; + isc_netaddr_t netaddr; + dns_adblameinfo_t *li; + + isc_netaddr_fromsockaddr(&netaddr, &entry->sockaddr); + isc_netaddr_format(&netaddr, addrbuf, sizeof(addrbuf)); + + if (debug) + fprintf(f, ";\t%p: refcnt %u\n", entry, entry->refcnt); + + fprintf(f, ";\t%s [srtt %u] [flags %08x]", + addrbuf, entry->srtt, entry->flags); + if (entry->expires != 0) + fprintf(f, " [ttl %d]", entry->expires - now); + fprintf(f, "\n"); + for (li = ISC_LIST_HEAD(entry->lameinfo); + li != NULL; + li = ISC_LIST_NEXT(li, plink)) { + fprintf(f, ";\t\t"); + print_dns_name(f, &li->qname); + dns_rdatatype_format(li->qtype, typebuf, sizeof(typebuf)); + fprintf(f, " %s [lame TTL %d]\n", typebuf, + li->lame_timer - now); + } } void dns_adb_dumpfind(dns_adbfind_t *find, FILE *f) { - char tmp[512]; - const char *tmpp; - dns_adbaddrinfo_t *ai; - isc_sockaddr_t *sa; - - /* - * Not used currently, in the API Just In Case we - * want to dump out the name and/or entries too. - */ - - LOCK(&find->lock); - - fprintf(f, ";Find %p\n", find); - fprintf(f, ";\tqpending %08x partial %08x options %08x flags %08x\n", - find->query_pending, find->partial_result, - find->options, find->flags); - fprintf(f, ";\tname_bucket %d, name %p, event sender %p\n", - find->name_bucket, find->adbname, find->event.ev_sender); - - ai = ISC_LIST_HEAD(find->list); - if (ai != NULL) - fprintf(f, "\tAddresses:\n"); - while (ai != NULL) { - sa = &ai->sockaddr; - switch (sa->type.sa.sa_family) { - case AF_INET: - tmpp = inet_ntop(AF_INET, &sa->type.sin.sin_addr, - tmp, sizeof(tmp)); - break; - case AF_INET6: - tmpp = inet_ntop(AF_INET6, &sa->type.sin6.sin6_addr, - tmp, sizeof(tmp)); - break; - default: - tmpp = "UnkFamily"; - } - - if (tmpp == NULL) - tmpp = "BadAddress"; - - fprintf(f, "\t\tentry %p, flags %08x" - " srtt %u addr %s\n", - ai->entry, ai->flags, ai->srtt, tmpp); - - ai = ISC_LIST_NEXT(ai, publink); - } - - UNLOCK(&find->lock); + char tmp[512]; + const char *tmpp; + dns_adbaddrinfo_t *ai; + isc_sockaddr_t *sa; + + /* + * Not used currently, in the API Just In Case we + * want to dump out the name and/or entries too. + */ + + LOCK(&find->lock); + + fprintf(f, ";Find %p\n", find); + fprintf(f, ";\tqpending %08x partial %08x options %08x flags %08x\n", + find->query_pending, find->partial_result, + find->options, find->flags); + fprintf(f, ";\tname_bucket %d, name %p, event sender %p\n", + find->name_bucket, find->adbname, find->event.ev_sender); + + ai = ISC_LIST_HEAD(find->list); + if (ai != NULL) + fprintf(f, "\tAddresses:\n"); + while (ai != NULL) { + sa = &ai->sockaddr; + switch (sa->type.sa.sa_family) { + case AF_INET: + tmpp = inet_ntop(AF_INET, &sa->type.sin.sin_addr, + tmp, sizeof(tmp)); + break; + case AF_INET6: + tmpp = inet_ntop(AF_INET6, &sa->type.sin6.sin6_addr, + tmp, sizeof(tmp)); + break; + default: + tmpp = "UnkFamily"; + } + + if (tmpp == NULL) + tmpp = "BadAddress"; + + fprintf(f, "\t\tentry %p, flags %08x" + " srtt %u addr %s\n", + ai->entry, ai->flags, ai->srtt, tmpp); + + ai = ISC_LIST_NEXT(ai, publink); + } + + UNLOCK(&find->lock); } static void print_dns_name(FILE *f, dns_name_t *name) { - char buf[DNS_NAME_FORMATSIZE]; + char buf[DNS_NAME_FORMATSIZE]; - INSIST(f != NULL); + INSIST(f != NULL); - dns_name_format(name, buf, sizeof(buf)); - fprintf(f, "%s", buf); + dns_name_format(name, buf, sizeof(buf)); + fprintf(f, "%s", buf); } static void print_namehook_list(FILE *f, const char *legend, dns_adbnamehooklist_t *list, - isc_boolean_t debug, isc_stdtime_t now) + isc_boolean_t debug, isc_stdtime_t now) { - dns_adbnamehook_t *nh; + dns_adbnamehook_t *nh; - for (nh = ISC_LIST_HEAD(*list); - nh != NULL; - nh = ISC_LIST_NEXT(nh, plink)) - { - if (debug) - fprintf(f, ";\tHook(%s) %p\n", legend, nh); - dump_entry(f, nh->entry, debug, now); - } + for (nh = ISC_LIST_HEAD(*list); + nh != NULL; + nh = ISC_LIST_NEXT(nh, plink)) + { + if (debug) + fprintf(f, ";\tHook(%s) %p\n", legend, nh); + dump_entry(f, nh->entry, debug, now); + } } static inline void print_fetch(FILE *f, dns_adbfetch_t *ft, const char *type) { - fprintf(f, "\t\tFetch(%s): %p -> { nh %p, entry %p, fetch %p }\n", - type, ft, ft->namehook, ft->entry, ft->fetch); + fprintf(f, "\t\tFetch(%s): %p -> { nh %p, entry %p, fetch %p }\n", + type, ft, ft->namehook, ft->entry, ft->fetch); } static void print_fetch_list(FILE *f, dns_adbname_t *n) { - if (NAME_FETCH_A(n)) - print_fetch(f, n->fetch_a, "A"); - if (NAME_FETCH_AAAA(n)) - print_fetch(f, n->fetch_aaaa, "AAAA"); + if (NAME_FETCH_A(n)) + print_fetch(f, n->fetch_a, "A"); + if (NAME_FETCH_AAAA(n)) + print_fetch(f, n->fetch_aaaa, "AAAA"); } static void print_find_list(FILE *f, dns_adbname_t *name) { - dns_adbfind_t *find; + dns_adbfind_t *find; - find = ISC_LIST_HEAD(name->finds); - while (find != NULL) { - dns_adb_dumpfind(find, f); - find = ISC_LIST_NEXT(find, plink); - } + find = ISC_LIST_HEAD(name->finds); + while (find != NULL) { + dns_adb_dumpfind(find, f); + find = ISC_LIST_NEXT(find, plink); + } } static isc_result_t dbfind_name(dns_adbname_t *adbname, isc_stdtime_t now, dns_rdatatype_t rdtype) { - isc_result_t result; - dns_rdataset_t rdataset; - dns_adb_t *adb; - dns_fixedname_t foundname; - dns_name_t *fname; - - INSIST(DNS_ADBNAME_VALID(adbname)); - adb = adbname->adb; - INSIST(DNS_ADB_VALID(adb)); - INSIST(rdtype == dns_rdatatype_a || rdtype == dns_rdatatype_aaaa); - - dns_fixedname_init(&foundname); - fname = dns_fixedname_name(&foundname); - dns_rdataset_init(&rdataset); - - if (rdtype == dns_rdatatype_a) - adbname->fetch_err = FIND_ERR_UNEXPECTED; - else - adbname->fetch6_err = FIND_ERR_UNEXPECTED; - - result = dns_view_find(adb->view, &adbname->name, rdtype, now, - NAME_GLUEOK(adbname) ? DNS_DBFIND_GLUEOK : 0, - ISC_TF(NAME_HINTOK(adbname)), - NULL, NULL, fname, &rdataset, NULL); - - /* XXXVIX this switch statement is too sparse to gen a jump table. */ - switch (result) { - case DNS_R_GLUE: - case DNS_R_HINT: - case ISC_R_SUCCESS: - /* - * Found in the database. Even if we can't copy out - * any information, return success, or else a fetch - * will be made, which will only make things worse. - */ - if (rdtype == dns_rdatatype_a) - adbname->fetch_err = FIND_ERR_SUCCESS; - else - adbname->fetch6_err = FIND_ERR_SUCCESS; - result = import_rdataset(adbname, &rdataset, now); - break; - case DNS_R_NXDOMAIN: - case DNS_R_NXRRSET: - /* - * We're authoritative and the data doesn't exist. - * Make up a negative cache entry so we don't ask again - * for a while. - * - * XXXRTH What time should we use? I'm putting in 30 seconds - * for now. - */ - if (rdtype == dns_rdatatype_a) { - adbname->expire_v4 = now + 30; - DP(NCACHE_LEVEL, - "adb name %p: Caching auth negative entry for A", - adbname); - if (result == DNS_R_NXDOMAIN) - adbname->fetch_err = FIND_ERR_NXDOMAIN; - else - adbname->fetch_err = FIND_ERR_NXRRSET; - } else { - DP(NCACHE_LEVEL, - "adb name %p: Caching auth negative entry for AAAA", - adbname); - adbname->expire_v6 = now + 30; - if (result == DNS_R_NXDOMAIN) - adbname->fetch6_err = FIND_ERR_NXDOMAIN; - else - adbname->fetch6_err = FIND_ERR_NXRRSET; - } - break; - case DNS_R_NCACHENXDOMAIN: - case DNS_R_NCACHENXRRSET: - /* - * We found a negative cache entry. Pull the TTL from it - * so we won't ask again for a while. - */ - rdataset.ttl = ttlclamp(rdataset.ttl); - if (rdtype == dns_rdatatype_a) { - adbname->expire_v4 = rdataset.ttl + now; - if (result == DNS_R_NCACHENXDOMAIN) - adbname->fetch_err = FIND_ERR_NXDOMAIN; - else - adbname->fetch_err = FIND_ERR_NXRRSET; - DP(NCACHE_LEVEL, - "adb name %p: Caching negative entry for A (ttl %u)", - adbname, rdataset.ttl); - } else { - DP(NCACHE_LEVEL, - "adb name %p: Caching negative entry for AAAA (ttl %u)", - adbname, rdataset.ttl); - adbname->expire_v6 = rdataset.ttl + now; - if (result == DNS_R_NCACHENXDOMAIN) - adbname->fetch6_err = FIND_ERR_NXDOMAIN; - else - adbname->fetch6_err = FIND_ERR_NXRRSET; - } - break; - case DNS_R_CNAME: - case DNS_R_DNAME: - /* - * Clear the hint and glue flags, so this will match - * more often. - */ - adbname->flags &= ~(DNS_ADBFIND_GLUEOK | DNS_ADBFIND_HINTOK); - - rdataset.ttl = ttlclamp(rdataset.ttl); - clean_target(adb, &adbname->target); - adbname->expire_target = INT_MAX; - result = set_target(adb, &adbname->name, fname, &rdataset, - &adbname->target); - if (result == ISC_R_SUCCESS) { - result = DNS_R_ALIAS; - DP(NCACHE_LEVEL, - "adb name %p: caching alias target", - adbname); - adbname->expire_target = rdataset.ttl + now; - } - if (rdtype == dns_rdatatype_a) - adbname->fetch_err = FIND_ERR_SUCCESS; - else - adbname->fetch6_err = FIND_ERR_SUCCESS; - break; - } - - if (dns_rdataset_isassociated(&rdataset)) - dns_rdataset_disassociate(&rdataset); - - return (result); + isc_result_t result; + dns_rdataset_t rdataset; + dns_adb_t *adb; + dns_fixedname_t foundname; + dns_name_t *fname; + + INSIST(DNS_ADBNAME_VALID(adbname)); + adb = adbname->adb; + INSIST(DNS_ADB_VALID(adb)); + INSIST(rdtype == dns_rdatatype_a || rdtype == dns_rdatatype_aaaa); + + dns_fixedname_init(&foundname); + fname = dns_fixedname_name(&foundname); + dns_rdataset_init(&rdataset); + + if (rdtype == dns_rdatatype_a) + adbname->fetch_err = FIND_ERR_UNEXPECTED; + else + adbname->fetch6_err = FIND_ERR_UNEXPECTED; + + result = dns_view_find(adb->view, &adbname->name, rdtype, now, + NAME_GLUEOK(adbname) ? DNS_DBFIND_GLUEOK : 0, + ISC_TF(NAME_HINTOK(adbname)), + NULL, NULL, fname, &rdataset, NULL); + + /* XXXVIX this switch statement is too sparse to gen a jump table. */ + switch (result) { + case DNS_R_GLUE: + case DNS_R_HINT: + case ISC_R_SUCCESS: + /* + * Found in the database. Even if we can't copy out + * any information, return success, or else a fetch + * will be made, which will only make things worse. + */ + if (rdtype == dns_rdatatype_a) + adbname->fetch_err = FIND_ERR_SUCCESS; + else + adbname->fetch6_err = FIND_ERR_SUCCESS; + result = import_rdataset(adbname, &rdataset, now); + break; + case DNS_R_NXDOMAIN: + case DNS_R_NXRRSET: + /* + * We're authoritative and the data doesn't exist. + * Make up a negative cache entry so we don't ask again + * for a while. + * + * XXXRTH What time should we use? I'm putting in 30 seconds + * for now. + */ + if (rdtype == dns_rdatatype_a) { + adbname->expire_v4 = now + 30; + DP(NCACHE_LEVEL, + "adb name %p: Caching auth negative entry for A", + adbname); + if (result == DNS_R_NXDOMAIN) + adbname->fetch_err = FIND_ERR_NXDOMAIN; + else + adbname->fetch_err = FIND_ERR_NXRRSET; + } else { + DP(NCACHE_LEVEL, + "adb name %p: Caching auth negative entry for AAAA", + adbname); + adbname->expire_v6 = now + 30; + if (result == DNS_R_NXDOMAIN) + adbname->fetch6_err = FIND_ERR_NXDOMAIN; + else + adbname->fetch6_err = FIND_ERR_NXRRSET; + } + break; + case DNS_R_NCACHENXDOMAIN: + case DNS_R_NCACHENXRRSET: + /* + * We found a negative cache entry. Pull the TTL from it + * so we won't ask again for a while. + */ + rdataset.ttl = ttlclamp(rdataset.ttl); + if (rdtype == dns_rdatatype_a) { + adbname->expire_v4 = rdataset.ttl + now; + if (result == DNS_R_NCACHENXDOMAIN) + adbname->fetch_err = FIND_ERR_NXDOMAIN; + else + adbname->fetch_err = FIND_ERR_NXRRSET; + DP(NCACHE_LEVEL, + "adb name %p: Caching negative entry for A (ttl %u)", + adbname, rdataset.ttl); + } else { + DP(NCACHE_LEVEL, + "adb name %p: Caching negative entry for AAAA (ttl %u)", + adbname, rdataset.ttl); + adbname->expire_v6 = rdataset.ttl + now; + if (result == DNS_R_NCACHENXDOMAIN) + adbname->fetch6_err = FIND_ERR_NXDOMAIN; + else + adbname->fetch6_err = FIND_ERR_NXRRSET; + } + break; + case DNS_R_CNAME: + case DNS_R_DNAME: + /* + * Clear the hint and glue flags, so this will match + * more often. + */ + adbname->flags &= ~(DNS_ADBFIND_GLUEOK | DNS_ADBFIND_HINTOK); + + rdataset.ttl = ttlclamp(rdataset.ttl); + clean_target(adb, &adbname->target); + adbname->expire_target = INT_MAX; + result = set_target(adb, &adbname->name, fname, &rdataset, + &adbname->target); + if (result == ISC_R_SUCCESS) { + result = DNS_R_ALIAS; + DP(NCACHE_LEVEL, + "adb name %p: caching alias target", + adbname); + adbname->expire_target = rdataset.ttl + now; + } + if (rdtype == dns_rdatatype_a) + adbname->fetch_err = FIND_ERR_SUCCESS; + else + adbname->fetch6_err = FIND_ERR_SUCCESS; + break; + } + + if (dns_rdataset_isassociated(&rdataset)) + dns_rdataset_disassociate(&rdataset); + + return (result); } static void fetch_callback(isc_task_t *task, isc_event_t *ev) { - dns_fetchevent_t *dev; - dns_adbname_t *name; - dns_adb_t *adb; - dns_adbfetch_t *fetch; - int bucket; - isc_eventtype_t ev_status; - isc_stdtime_t now; - isc_result_t result; - unsigned int address_type; - isc_boolean_t want_check_exit = ISC_FALSE; - - UNUSED(task); - - INSIST(ev->ev_type == DNS_EVENT_FETCHDONE); - dev = (dns_fetchevent_t *)ev; - name = ev->ev_arg; - INSIST(DNS_ADBNAME_VALID(name)); - adb = name->adb; - INSIST(DNS_ADB_VALID(adb)); - - bucket = name->lock_bucket; - LOCK(&adb->namelocks[bucket]); - - INSIST(NAME_FETCH_A(name) || NAME_FETCH_AAAA(name)); - address_type = 0; - if (NAME_FETCH_A(name) && (name->fetch_a->fetch == dev->fetch)) { - address_type = DNS_ADBFIND_INET; - fetch = name->fetch_a; - name->fetch_a = NULL; - } else if (NAME_FETCH_AAAA(name) - && (name->fetch_aaaa->fetch == dev->fetch)) { - address_type = DNS_ADBFIND_INET6; - fetch = name->fetch_aaaa; - name->fetch_aaaa = NULL; - } - INSIST(address_type != 0); - - dns_resolver_destroyfetch(&fetch->fetch); - dev->fetch = NULL; - - ev_status = DNS_EVENT_ADBNOMOREADDRESSES; - - /* - * Cleanup things we don't care about. - */ - if (dev->node != NULL) - dns_db_detachnode(dev->db, &dev->node); - if (dev->db != NULL) - dns_db_detach(&dev->db); - - /* - * If this name is marked as dead, clean up, throwing away - * potentially good data. - */ - if (NAME_DEAD(name)) { - free_adbfetch(adb, &fetch); - isc_event_free(&ev); - - want_check_exit = kill_name(&name, DNS_EVENT_ADBCANCELED, - ISC_FALSE); - - UNLOCK(&adb->namelocks[bucket]); - - if (want_check_exit) { - LOCK(&adb->lock); - check_exit(adb); - UNLOCK(&adb->lock); - } - - return; - } - - isc_stdtime_get(&now); - - /* - * If we got a negative cache response, remember it. - */ - if (NCACHE_RESULT(dev->result)) { - dev->rdataset->ttl = ttlclamp(dev->rdataset->ttl); - if (address_type == DNS_ADBFIND_INET) { - DP(NCACHE_LEVEL, "adb fetch name %p: " - "caching negative entry for A (ttl %u)", - name, dev->rdataset->ttl); - name->expire_v4 = ISC_MIN(name->expire_v4, - dev->rdataset->ttl + now); - if (dev->result == DNS_R_NCACHENXDOMAIN) - name->fetch_err = FIND_ERR_NXDOMAIN; - else - name->fetch_err = FIND_ERR_NXRRSET; - } else { - DP(NCACHE_LEVEL, "adb fetch name %p: " - "caching negative entry for AAAA (ttl %u)", - name, dev->rdataset->ttl); - name->expire_v6 = ISC_MIN(name->expire_v6, - dev->rdataset->ttl + now); - if (dev->result == DNS_R_NCACHENXDOMAIN) - name->fetch6_err = FIND_ERR_NXDOMAIN; - else - name->fetch6_err = FIND_ERR_NXRRSET; - } - goto out; - } - - /* - * Handle CNAME/DNAME. - */ - if (dev->result == DNS_R_CNAME || dev->result == DNS_R_DNAME) { - dev->rdataset->ttl = ttlclamp(dev->rdataset->ttl); - clean_target(adb, &name->target); - name->expire_target = INT_MAX; - result = set_target(adb, &name->name, - dns_fixedname_name(&dev->foundname), - dev->rdataset, - &name->target); - if (result == ISC_R_SUCCESS) { - DP(NCACHE_LEVEL, - "adb fetch name %p: caching alias target", - name); - name->expire_target = dev->rdataset->ttl + now; - } - goto check_result; - } - - /* - * Did we get back junk? If so, and there are no more fetches - * sitting out there, tell all the finds about it. - */ - if (dev->result != ISC_R_SUCCESS) { - char buf[DNS_NAME_FORMATSIZE]; - - dns_name_format(&name->name, buf, sizeof(buf)); - DP(DEF_LEVEL, "adb: fetch of '%s' %s failed: %s", - buf, address_type == DNS_ADBFIND_INET ? "A" : "AAAA", - dns_result_totext(dev->result)); - /* XXXMLG Don't pound on bad servers. */ - if (address_type == DNS_ADBFIND_INET) { - name->expire_v4 = ISC_MIN(name->expire_v4, now + 300); - name->fetch_err = FIND_ERR_FAILURE; - } else { - name->expire_v6 = ISC_MIN(name->expire_v6, now + 300); - name->fetch6_err = FIND_ERR_FAILURE; - } - goto out; - } - - /* - * We got something potentially useful. - */ - result = import_rdataset(name, &fetch->rdataset, now); + dns_fetchevent_t *dev; + dns_adbname_t *name; + dns_adb_t *adb; + dns_adbfetch_t *fetch; + int bucket; + isc_eventtype_t ev_status; + isc_stdtime_t now; + isc_result_t result; + unsigned int address_type; + isc_boolean_t want_check_exit = ISC_FALSE; + + UNUSED(task); + + INSIST(ev->ev_type == DNS_EVENT_FETCHDONE); + dev = (dns_fetchevent_t *)ev; + name = ev->ev_arg; + INSIST(DNS_ADBNAME_VALID(name)); + adb = name->adb; + INSIST(DNS_ADB_VALID(adb)); + + bucket = name->lock_bucket; + LOCK(&adb->namelocks[bucket]); + + INSIST(NAME_FETCH_A(name) || NAME_FETCH_AAAA(name)); + address_type = 0; + if (NAME_FETCH_A(name) && (name->fetch_a->fetch == dev->fetch)) { + address_type = DNS_ADBFIND_INET; + fetch = name->fetch_a; + name->fetch_a = NULL; + } else if (NAME_FETCH_AAAA(name) + && (name->fetch_aaaa->fetch == dev->fetch)) { + address_type = DNS_ADBFIND_INET6; + fetch = name->fetch_aaaa; + name->fetch_aaaa = NULL; + } + INSIST(address_type != 0); + + dns_resolver_destroyfetch(&fetch->fetch); + dev->fetch = NULL; + + ev_status = DNS_EVENT_ADBNOMOREADDRESSES; + + /* + * Cleanup things we don't care about. + */ + if (dev->node != NULL) + dns_db_detachnode(dev->db, &dev->node); + if (dev->db != NULL) + dns_db_detach(&dev->db); + + /* + * If this name is marked as dead, clean up, throwing away + * potentially good data. + */ + if (NAME_DEAD(name)) { + free_adbfetch(adb, &fetch); + isc_event_free(&ev); + + want_check_exit = kill_name(&name, DNS_EVENT_ADBCANCELED, + ISC_FALSE); + + UNLOCK(&adb->namelocks[bucket]); + + if (want_check_exit) { + LOCK(&adb->lock); + check_exit(adb); + UNLOCK(&adb->lock); + } + + return; + } + + isc_stdtime_get(&now); + + /* + * If we got a negative cache response, remember it. + */ + if (NCACHE_RESULT(dev->result)) { + dev->rdataset->ttl = ttlclamp(dev->rdataset->ttl); + if (address_type == DNS_ADBFIND_INET) { + DP(NCACHE_LEVEL, "adb fetch name %p: " + "caching negative entry for A (ttl %u)", + name, dev->rdataset->ttl); + name->expire_v4 = ISC_MIN(name->expire_v4, + dev->rdataset->ttl + now); + if (dev->result == DNS_R_NCACHENXDOMAIN) + name->fetch_err = FIND_ERR_NXDOMAIN; + else + name->fetch_err = FIND_ERR_NXRRSET; + inc_stats(adb, dns_resstatscounter_gluefetchv4fail); + } else { + DP(NCACHE_LEVEL, "adb fetch name %p: " + "caching negative entry for AAAA (ttl %u)", + name, dev->rdataset->ttl); + name->expire_v6 = ISC_MIN(name->expire_v6, + dev->rdataset->ttl + now); + if (dev->result == DNS_R_NCACHENXDOMAIN) + name->fetch6_err = FIND_ERR_NXDOMAIN; + else + name->fetch6_err = FIND_ERR_NXRRSET; + inc_stats(adb, dns_resstatscounter_gluefetchv6fail); + } + goto out; + } + + /* + * Handle CNAME/DNAME. + */ + if (dev->result == DNS_R_CNAME || dev->result == DNS_R_DNAME) { + dev->rdataset->ttl = ttlclamp(dev->rdataset->ttl); + clean_target(adb, &name->target); + name->expire_target = INT_MAX; + result = set_target(adb, &name->name, + dns_fixedname_name(&dev->foundname), + dev->rdataset, + &name->target); + if (result == ISC_R_SUCCESS) { + DP(NCACHE_LEVEL, + "adb fetch name %p: caching alias target", + name); + name->expire_target = dev->rdataset->ttl + now; + } + goto check_result; + } + + /* + * Did we get back junk? If so, and there are no more fetches + * sitting out there, tell all the finds about it. + */ + if (dev->result != ISC_R_SUCCESS) { + char buf[DNS_NAME_FORMATSIZE]; + + dns_name_format(&name->name, buf, sizeof(buf)); + DP(DEF_LEVEL, "adb: fetch of '%s' %s failed: %s", + buf, address_type == DNS_ADBFIND_INET ? "A" : "AAAA", + dns_result_totext(dev->result)); + /* XXXMLG Don't pound on bad servers. */ + if (address_type == DNS_ADBFIND_INET) { + name->expire_v4 = ISC_MIN(name->expire_v4, now + 300); + name->fetch_err = FIND_ERR_FAILURE; + inc_stats(adb, dns_resstatscounter_gluefetchv4fail); + } else { + name->expire_v6 = ISC_MIN(name->expire_v6, now + 300); + name->fetch6_err = FIND_ERR_FAILURE; + inc_stats(adb, dns_resstatscounter_gluefetchv6fail); + } + goto out; + } + + /* + * We got something potentially useful. + */ + result = import_rdataset(name, &fetch->rdataset, now); check_result: - if (result == ISC_R_SUCCESS) { - ev_status = DNS_EVENT_ADBMOREADDRESSES; - if (address_type == DNS_ADBFIND_INET) - name->fetch_err = FIND_ERR_SUCCESS; - else - name->fetch6_err = FIND_ERR_SUCCESS; - } + if (result == ISC_R_SUCCESS) { + ev_status = DNS_EVENT_ADBMOREADDRESSES; + if (address_type == DNS_ADBFIND_INET) + name->fetch_err = FIND_ERR_SUCCESS; + else + name->fetch6_err = FIND_ERR_SUCCESS; + } out: - free_adbfetch(adb, &fetch); - isc_event_free(&ev); + free_adbfetch(adb, &fetch); + isc_event_free(&ev); - clean_finds_at_name(name, ev_status, address_type); + clean_finds_at_name(name, ev_status, address_type); - UNLOCK(&adb->namelocks[bucket]); + UNLOCK(&adb->namelocks[bucket]); } static isc_result_t fetch_name(dns_adbname_t *adbname, - isc_boolean_t start_at_zone, - dns_rdatatype_t type) + isc_boolean_t start_at_zone, + dns_rdatatype_t type) { - isc_result_t result; - dns_adbfetch_t *fetch = NULL; - dns_adb_t *adb; - dns_fixedname_t fixed; - dns_name_t *name; - dns_rdataset_t rdataset; - dns_rdataset_t *nameservers; - unsigned int options; - - INSIST(DNS_ADBNAME_VALID(adbname)); - adb = adbname->adb; - INSIST(DNS_ADB_VALID(adb)); - - INSIST((type == dns_rdatatype_a && !NAME_FETCH_V4(adbname)) || - (type == dns_rdatatype_aaaa && !NAME_FETCH_V6(adbname))); - - adbname->fetch_err = FIND_ERR_NOTFOUND; - - name = NULL; - nameservers = NULL; - dns_rdataset_init(&rdataset); - - options = DNS_FETCHOPT_NOVALIDATE; - if (start_at_zone) { - DP(ENTER_LEVEL, - "fetch_name: starting at zone for name %p", - adbname); - dns_fixedname_init(&fixed); - name = dns_fixedname_name(&fixed); - result = dns_view_findzonecut2(adb->view, &adbname->name, name, - 0, 0, ISC_TRUE, ISC_FALSE, - &rdataset, NULL); - if (result != ISC_R_SUCCESS && result != DNS_R_HINT) - goto cleanup; - nameservers = &rdataset; - options |= DNS_FETCHOPT_UNSHARED; - } - - fetch = new_adbfetch(adb); - if (fetch == NULL) { - result = ISC_R_NOMEMORY; - goto cleanup; - } - - result = dns_resolver_createfetch(adb->view->resolver, &adbname->name, - type, name, nameservers, NULL, - options, adb->task, fetch_callback, - adbname, &fetch->rdataset, NULL, - &fetch->fetch); - if (result != ISC_R_SUCCESS) - goto cleanup; - - if (type == dns_rdatatype_a) - adbname->fetch_a = fetch; - else - adbname->fetch_aaaa = fetch; - fetch = NULL; /* Keep us from cleaning this up below. */ + isc_result_t result; + dns_adbfetch_t *fetch = NULL; + dns_adb_t *adb; + dns_fixedname_t fixed; + dns_name_t *name; + dns_rdataset_t rdataset; + dns_rdataset_t *nameservers; + unsigned int options; + + INSIST(DNS_ADBNAME_VALID(adbname)); + adb = adbname->adb; + INSIST(DNS_ADB_VALID(adb)); + + INSIST((type == dns_rdatatype_a && !NAME_FETCH_V4(adbname)) || + (type == dns_rdatatype_aaaa && !NAME_FETCH_V6(adbname))); + + adbname->fetch_err = FIND_ERR_NOTFOUND; + + name = NULL; + nameservers = NULL; + dns_rdataset_init(&rdataset); + + options = DNS_FETCHOPT_NOVALIDATE; + if (start_at_zone) { + DP(ENTER_LEVEL, + "fetch_name: starting at zone for name %p", + adbname); + dns_fixedname_init(&fixed); + name = dns_fixedname_name(&fixed); + result = dns_view_findzonecut2(adb->view, &adbname->name, name, + 0, 0, ISC_TRUE, ISC_FALSE, + &rdataset, NULL); + if (result != ISC_R_SUCCESS && result != DNS_R_HINT) + goto cleanup; + nameservers = &rdataset; + options |= DNS_FETCHOPT_UNSHARED; + } + + fetch = new_adbfetch(adb); + if (fetch == NULL) { + result = ISC_R_NOMEMORY; + goto cleanup; + } + + result = dns_resolver_createfetch(adb->view->resolver, &adbname->name, + type, name, nameservers, NULL, + options, adb->task, fetch_callback, + adbname, &fetch->rdataset, NULL, + &fetch->fetch); + if (result != ISC_R_SUCCESS) + goto cleanup; + + if (type == dns_rdatatype_a) { + adbname->fetch_a = fetch; + inc_stats(adb, dns_resstatscounter_gluefetchv4); + } else { + adbname->fetch_aaaa = fetch; + inc_stats(adb, dns_resstatscounter_gluefetchv6); + } + fetch = NULL; /* Keep us from cleaning this up below. */ cleanup: - if (fetch != NULL) - free_adbfetch(adb, &fetch); - if (dns_rdataset_isassociated(&rdataset)) - dns_rdataset_disassociate(&rdataset); + if (fetch != NULL) + free_adbfetch(adb, &fetch); + if (dns_rdataset_isassociated(&rdataset)) + dns_rdataset_disassociate(&rdataset); - return (result); + return (result); } /* @@ -3544,315 +3346,271 @@ fetch_name(dns_adbname_t *adbname, */ isc_result_t dns_adb_marklame(dns_adb_t *adb, dns_adbaddrinfo_t *addr, dns_name_t *qname, - dns_rdatatype_t qtype, isc_stdtime_t expire_time) + dns_rdatatype_t qtype, isc_stdtime_t expire_time) { - dns_adblameinfo_t *li; - int bucket; - isc_result_t result = ISC_R_SUCCESS; - - REQUIRE(DNS_ADB_VALID(adb)); - REQUIRE(DNS_ADBADDRINFO_VALID(addr)); - REQUIRE(qname != NULL); - - bucket = addr->entry->lock_bucket; - LOCK(&adb->entrylocks[bucket]); - li = ISC_LIST_HEAD(addr->entry->lameinfo); - while (li != NULL && - (li->qtype != qtype || !dns_name_equal(qname, &li->qname))) - li = ISC_LIST_NEXT(li, plink); - if (li != NULL) { - if (expire_time > li->lame_timer) - li->lame_timer = expire_time; - goto unlock; - } - li = new_adblameinfo(adb, qname, qtype); - if (li == NULL) { - result = ISC_R_NOMEMORY; - goto unlock; - } - - li->lame_timer = expire_time; - - ISC_LIST_PREPEND(addr->entry->lameinfo, li, plink); + dns_adblameinfo_t *li; + int bucket; + isc_result_t result = ISC_R_SUCCESS; + + REQUIRE(DNS_ADB_VALID(adb)); + REQUIRE(DNS_ADBADDRINFO_VALID(addr)); + REQUIRE(qname != NULL); + + bucket = addr->entry->lock_bucket; + LOCK(&adb->entrylocks[bucket]); + li = ISC_LIST_HEAD(addr->entry->lameinfo); + while (li != NULL && + (li->qtype != qtype || !dns_name_equal(qname, &li->qname))) + li = ISC_LIST_NEXT(li, plink); + if (li != NULL) { + if (expire_time > li->lame_timer) + li->lame_timer = expire_time; + goto unlock; + } + li = new_adblameinfo(adb, qname, qtype); + if (li == NULL) { + result = ISC_R_NOMEMORY; + goto unlock; + } + + li->lame_timer = expire_time; + + ISC_LIST_PREPEND(addr->entry->lameinfo, li, plink); unlock: - UNLOCK(&adb->entrylocks[bucket]); + UNLOCK(&adb->entrylocks[bucket]); - return (result); + return (result); } void dns_adb_adjustsrtt(dns_adb_t *adb, dns_adbaddrinfo_t *addr, - unsigned int rtt, unsigned int factor) + unsigned int rtt, unsigned int factor) { - int bucket; - unsigned int new_srtt; - isc_stdtime_t now; + int bucket; + unsigned int new_srtt; + isc_stdtime_t now; - REQUIRE(DNS_ADB_VALID(adb)); - REQUIRE(DNS_ADBADDRINFO_VALID(addr)); - REQUIRE(factor <= 10); + REQUIRE(DNS_ADB_VALID(adb)); + REQUIRE(DNS_ADBADDRINFO_VALID(addr)); + REQUIRE(factor <= 10); - bucket = addr->entry->lock_bucket; - LOCK(&adb->entrylocks[bucket]); + bucket = addr->entry->lock_bucket; + LOCK(&adb->entrylocks[bucket]); - if (factor == DNS_ADB_RTTADJAGE) - new_srtt = addr->entry->srtt * 98 / 100; - else - new_srtt = (addr->entry->srtt / 10 * factor) - + (rtt / 10 * (10 - factor)); + if (factor == DNS_ADB_RTTADJAGE) + new_srtt = addr->entry->srtt * 98 / 100; + else + new_srtt = (addr->entry->srtt / 10 * factor) + + (rtt / 10 * (10 - factor)); - addr->entry->srtt = new_srtt; - addr->srtt = new_srtt; + addr->entry->srtt = new_srtt; + addr->srtt = new_srtt; - isc_stdtime_get(&now); - addr->entry->expires = now + ADB_ENTRY_WINDOW; + isc_stdtime_get(&now); + addr->entry->expires = now + ADB_ENTRY_WINDOW; - UNLOCK(&adb->entrylocks[bucket]); + UNLOCK(&adb->entrylocks[bucket]); } void dns_adb_changeflags(dns_adb_t *adb, dns_adbaddrinfo_t *addr, - unsigned int bits, unsigned int mask) + unsigned int bits, unsigned int mask) { - int bucket; + int bucket; - REQUIRE(DNS_ADB_VALID(adb)); - REQUIRE(DNS_ADBADDRINFO_VALID(addr)); + REQUIRE(DNS_ADB_VALID(adb)); + REQUIRE(DNS_ADBADDRINFO_VALID(addr)); - bucket = addr->entry->lock_bucket; - LOCK(&adb->entrylocks[bucket]); + bucket = addr->entry->lock_bucket; + LOCK(&adb->entrylocks[bucket]); - addr->entry->flags = (addr->entry->flags & ~mask) | (bits & mask); - /* - * Note that we do not update the other bits in addr->flags with - * the most recent values from addr->entry->flags. - */ - addr->flags = (addr->flags & ~mask) | (bits & mask); + addr->entry->flags = (addr->entry->flags & ~mask) | (bits & mask); + /* + * Note that we do not update the other bits in addr->flags with + * the most recent values from addr->entry->flags. + */ + addr->flags = (addr->flags & ~mask) | (bits & mask); - UNLOCK(&adb->entrylocks[bucket]); + UNLOCK(&adb->entrylocks[bucket]); } isc_result_t dns_adb_findaddrinfo(dns_adb_t *adb, isc_sockaddr_t *sa, - dns_adbaddrinfo_t **addrp, isc_stdtime_t now) + dns_adbaddrinfo_t **addrp, isc_stdtime_t now) { - int bucket; - dns_adbentry_t *entry; - dns_adbaddrinfo_t *addr; - isc_result_t result; - in_port_t port; - - REQUIRE(DNS_ADB_VALID(adb)); - REQUIRE(addrp != NULL && *addrp == NULL); - - UNUSED(now); - - result = ISC_R_SUCCESS; - bucket = DNS_ADB_INVALIDBUCKET; - entry = find_entry_and_lock(adb, sa, &bucket); - if (adb->entry_sd[bucket]) { - result = ISC_R_SHUTTINGDOWN; - goto unlock; - } - if (entry == NULL) { - /* - * We don't know anything about this address. - */ - entry = new_adbentry(adb); - if (entry == NULL) { - result = ISC_R_NOMEMORY; - goto unlock; - } - entry->sockaddr = *sa; - link_entry(adb, bucket, entry); - DP(ENTER_LEVEL, "findaddrinfo: new entry %p", entry); - } else - DP(ENTER_LEVEL, "findaddrinfo: found entry %p", entry); - - port = isc_sockaddr_getport(sa); - addr = new_adbaddrinfo(adb, entry, port); - if (addr == NULL) { - result = ISC_R_NOMEMORY; - } else { - inc_entry_refcnt(adb, entry, ISC_FALSE); - *addrp = addr; - } + int bucket; + dns_adbentry_t *entry; + dns_adbaddrinfo_t *addr; + isc_result_t result; + in_port_t port; + + REQUIRE(DNS_ADB_VALID(adb)); + REQUIRE(addrp != NULL && *addrp == NULL); + + UNUSED(now); + + result = ISC_R_SUCCESS; + bucket = DNS_ADB_INVALIDBUCKET; + entry = find_entry_and_lock(adb, sa, &bucket); + if (adb->entry_sd[bucket]) { + result = ISC_R_SHUTTINGDOWN; + goto unlock; + } + if (entry == NULL) { + /* + * We don't know anything about this address. + */ + entry = new_adbentry(adb); + if (entry == NULL) { + result = ISC_R_NOMEMORY; + goto unlock; + } + entry->sockaddr = *sa; + link_entry(adb, bucket, entry); + DP(ENTER_LEVEL, "findaddrinfo: new entry %p", entry); + } else + DP(ENTER_LEVEL, "findaddrinfo: found entry %p", entry); + + port = isc_sockaddr_getport(sa); + addr = new_adbaddrinfo(adb, entry, port); + if (addr == NULL) { + result = ISC_R_NOMEMORY; + } else { + inc_entry_refcnt(adb, entry, ISC_FALSE); + *addrp = addr; + } unlock: - UNLOCK(&adb->entrylocks[bucket]); + UNLOCK(&adb->entrylocks[bucket]); - return (result); + return (result); } void dns_adb_freeaddrinfo(dns_adb_t *adb, dns_adbaddrinfo_t **addrp) { - dns_adbaddrinfo_t *addr; - dns_adbentry_t *entry; - int bucket; - isc_stdtime_t now; - isc_boolean_t want_check_exit = ISC_FALSE; + dns_adbaddrinfo_t *addr; + dns_adbentry_t *entry; + int bucket; + isc_stdtime_t now; + isc_boolean_t want_check_exit = ISC_FALSE; - REQUIRE(DNS_ADB_VALID(adb)); - REQUIRE(addrp != NULL); - addr = *addrp; - REQUIRE(DNS_ADBADDRINFO_VALID(addr)); - entry = addr->entry; - REQUIRE(DNS_ADBENTRY_VALID(entry)); + REQUIRE(DNS_ADB_VALID(adb)); + REQUIRE(addrp != NULL); + addr = *addrp; + REQUIRE(DNS_ADBADDRINFO_VALID(addr)); + entry = addr->entry; + REQUIRE(DNS_ADBENTRY_VALID(entry)); - isc_stdtime_get(&now); + isc_stdtime_get(&now); - *addrp = NULL; + *addrp = NULL; - bucket = addr->entry->lock_bucket; - LOCK(&adb->entrylocks[bucket]); + bucket = addr->entry->lock_bucket; + LOCK(&adb->entrylocks[bucket]); - entry->expires = now + ADB_ENTRY_WINDOW; + entry->expires = now + ADB_ENTRY_WINDOW; - want_check_exit = dec_entry_refcnt(adb, entry, ISC_FALSE); + want_check_exit = dec_entry_refcnt(adb, entry, ISC_FALSE); - UNLOCK(&adb->entrylocks[bucket]); + UNLOCK(&adb->entrylocks[bucket]); - addr->entry = NULL; - free_adbaddrinfo(adb, &addr); + addr->entry = NULL; + free_adbaddrinfo(adb, &addr); - if (want_check_exit) { - LOCK(&adb->lock); - check_exit(adb); - UNLOCK(&adb->lock); - } + if (want_check_exit) { + LOCK(&adb->lock); + check_exit(adb); + UNLOCK(&adb->lock); + } } void dns_adb_flush(dns_adb_t *adb) { - unsigned int i; + unsigned int i; - INSIST(DNS_ADB_VALID(adb)); + INSIST(DNS_ADB_VALID(adb)); - LOCK(&adb->lock); + LOCK(&adb->lock); - /* - * Call our cleanup routines. - */ - for (i = 0; i < NBUCKETS; i++) - RUNTIME_CHECK(cleanup_names(adb, i, INT_MAX) == ISC_FALSE); - for (i = 0; i < NBUCKETS; i++) - RUNTIME_CHECK(cleanup_entries(adb, i, INT_MAX) == ISC_FALSE); + /* + * Call our cleanup routines. + */ + for (i = 0; i < NBUCKETS; i++) + RUNTIME_CHECK(cleanup_names(adb, i, INT_MAX) == ISC_FALSE); + for (i = 0; i < NBUCKETS; i++) + RUNTIME_CHECK(cleanup_entries(adb, i, INT_MAX) == ISC_FALSE); #ifdef DUMP_ADB_AFTER_CLEANING - dump_adb(adb, stdout, ISC_TRUE, INT_MAX); + dump_adb(adb, stdout, ISC_TRUE, INT_MAX); #endif - UNLOCK(&adb->lock); + UNLOCK(&adb->lock); } void dns_adb_flushname(dns_adb_t *adb, dns_name_t *name) { - dns_adbname_t *adbname; - dns_adbname_t *nextname; - int bucket; - - INSIST(DNS_ADB_VALID(adb)); - - LOCK(&adb->lock); - bucket = dns_name_hash(name, ISC_FALSE) % NBUCKETS; - LOCK(&adb->namelocks[bucket]); - adbname = ISC_LIST_HEAD(adb->names[bucket]); - while (adbname != NULL) { - nextname = ISC_LIST_NEXT(adbname, plink); - if (!NAME_DEAD(adbname) && - dns_name_equal(name, &adbname->name)) { - RUNTIME_CHECK(kill_name(&adbname, - DNS_EVENT_ADBCANCELED, - ISC_TRUE) == - ISC_FALSE); - } - adbname = nextname; - } - UNLOCK(&adb->namelocks[bucket]); - UNLOCK(&adb->lock); + dns_adbname_t *adbname; + dns_adbname_t *nextname; + int bucket; + + INSIST(DNS_ADB_VALID(adb)); + + LOCK(&adb->lock); + bucket = dns_name_hash(name, ISC_FALSE) % NBUCKETS; + LOCK(&adb->namelocks[bucket]); + adbname = ISC_LIST_HEAD(adb->names[bucket]); + while (adbname != NULL) { + nextname = ISC_LIST_NEXT(adbname, plink); + if (!NAME_DEAD(adbname) && + dns_name_equal(name, &adbname->name)) { + RUNTIME_CHECK(kill_name(&adbname, + DNS_EVENT_ADBCANCELED, + ISC_TRUE) == + ISC_FALSE); + } + adbname = nextname; + } + UNLOCK(&adb->namelocks[bucket]); + UNLOCK(&adb->lock); } static void water(void *arg, int mark) { - dns_adb_t *adb = arg; - isc_boolean_t overmem = ISC_TF(mark == ISC_MEM_HIWATER); + dns_adb_t *adb = arg; + isc_boolean_t overmem = ISC_TF(mark == ISC_MEM_HIWATER); - REQUIRE(DNS_ADB_VALID(adb)); + REQUIRE(DNS_ADB_VALID(adb)); - DP(ISC_LOG_DEBUG(1), - "adb reached %s water mark", overmem ? "high" : "low"); + DP(ISC_LOG_DEBUG(1), + "adb reached %s water mark", overmem ? "high" : "low"); - adb->overmem = overmem; -#if 0 /* we don't need this timer for the new cleaning policy. */ - if (overmem) { - isc_interval_t interval; - - isc_interval_set(&interval, 0, 1); - (void)isc_timer_reset(adb->timer, isc_timertype_once, NULL, - &interval, ISC_TRUE); - } -#endif + /* + * We can't use adb->lock as there is potential for water + * to be called when adb->lock is held. + */ + LOCK(&adb->overmemlock); + if (adb->overmem != overmem) { + adb->overmem = overmem; + isc_mem_waterack(adb->mctx, mark); + } + UNLOCK(&adb->overmemlock); } void dns_adb_setadbsize(dns_adb_t *adb, isc_uint32_t size) { - isc_uint32_t hiwater; - isc_uint32_t lowater; + isc_uint32_t hiwater; + isc_uint32_t lowater; - INSIST(DNS_ADB_VALID(adb)); + INSIST(DNS_ADB_VALID(adb)); - if (size != 0 && size < DNS_ADB_MINADBSIZE) - size = DNS_ADB_MINADBSIZE; + if (size != 0 && size < DNS_ADB_MINADBSIZE) + size = DNS_ADB_MINADBSIZE; - hiwater = size - (size >> 3); /* Approximately 7/8ths. */ - lowater = size - (size >> 2); /* Approximately 3/4ths. */ - - if (size == 0 || hiwater == 0 || lowater == 0) - isc_mem_setwater(adb->mctx, water, adb, 0, 0); - else - isc_mem_setwater(adb->mctx, water, adb, hiwater, lowater); -} + hiwater = size - (size >> 3); /* Approximately 7/8ths. */ + lowater = size - (size >> 2); /* Approximately 3/4ths. */ -#ifdef LRU_DEBUG -/* - * Periodic dumping of the internal state of the statistics. - * This will dump the cache contents, uses, record types, etc. - */ -static void -timer_dump(isc_task_t *task, isc_event_t *ev) { - dns_adb_t *adb; - isc_interval_t interval; - isc_time_t nexttime; - - UNUSED(task); - - adb = ev->ev_arg; - INSIST(DNS_ADB_VALID(adb)); - - LOCK(&adb->lock); - if (adb->nname > 0 || adb->nentry > 0) { - isc_log_write(dns_lctx, DNS_LOGCATEGORY_DATABASE, - DNS_LOGMODULE_ADB, ISC_LOG_INFO, - "ADB memory usage %p: mem inuse %lu, " - "%u/%u names, %u/%u entries, " - "purge/scan=%u(%u,%u)/%u, overmem=%d", - adb, (unsigned long)isc_mem_inuse(adb->mctx), - adb->nname, adb->nname_total, - adb->nentry, adb->nentry_total, - adb->stale_purge, adb->stale_expire, - adb->stale_lru, adb->stale_scan, adb->overmem); - } - - interval.seconds = DUMP_INTERVAL; - interval.nanoseconds = 0; - - RUNTIME_CHECK(isc_time_add(&adb->dump_time, &interval, &nexttime) == - ISC_R_SUCCESS); /* XXX: this is not always true */ - adb->dump_time = nexttime; - (void)isc_timer_reset(adb->dump_timer, isc_timertype_once, - &adb->dump_time, NULL, ISC_FALSE); - UNLOCK(&adb->lock); - - isc_event_free(&ev); + if (size == 0 || hiwater == 0 || lowater == 0) + isc_mem_setwater(adb->mctx, water, adb, 0, 0); + else + isc_mem_setwater(adb->mctx, water, adb, hiwater, lowater); } -#endif diff --git a/lib/dns/api b/lib/dns/api index 58fb9f89..5dee1eec 100644 --- a/lib/dns/api +++ b/lib/dns/api @@ -1,3 +1,3 @@ -LIBINTERFACE = 41 -LIBREVISION = 0 +LIBINTERFACE = 42 +LIBREVISION = 1 LIBAGE = 0 diff --git a/lib/dns/cache.c b/lib/dns/cache.c index cd384205..6f1e189b 100644 --- a/lib/dns/cache.c +++ b/lib/dns/cache.c @@ -1,5 +1,5 @@ /* - * Copyright (C) 2004-2007 Internet Systems Consortium, Inc. ("ISC") + * Copyright (C) 2004-2008 Internet Systems Consortium, Inc. ("ISC") * Copyright (C) 1999-2003 Internet Software Consortium. * * Permission to use, copy, modify, and/or distribute this software for any @@ -15,13 +15,14 @@ * PERFORMANCE OF THIS SOFTWARE. */ -/* $Id: cache.c,v 1.76 2007/10/19 17:15:53 explorer Exp $ */ +/* $Id: cache.c,v 1.76.36.3 2008/05/01 18:32:31 jinmei Exp $ */ /*! \file */ #include #include +#include #include #include #include @@ -39,24 +40,24 @@ #include #include -#define CACHE_MAGIC ISC_MAGIC('$', '$', '$', '$') -#define VALID_CACHE(cache) ISC_MAGIC_VALID(cache, CACHE_MAGIC) +#define CACHE_MAGIC ISC_MAGIC('$', '$', '$', '$') +#define VALID_CACHE(cache) ISC_MAGIC_VALID(cache, CACHE_MAGIC) /*! * Control incremental cleaning. * DNS_CACHE_MINSIZE is how many bytes is the floor for dns_cache_setcachesize(). * See also DNS_CACHE_CLEANERINCREMENT */ -#define DNS_CACHE_MINSIZE 2097152 /*%< Bytes. 2097152 = 2 MB */ +#define DNS_CACHE_MINSIZE 2097152 /*%< Bytes. 2097152 = 2 MB */ /*! * Control incremental cleaning. * CLEANERINCREMENT is how many nodes are examined in one pass. * See also DNS_CACHE_MINSIZE */ -#define DNS_CACHE_CLEANERINCREMENT 1000U /*%< Number of nodes. */ +#define DNS_CACHE_CLEANERINCREMENT 1000U /*%< Number of nodes. */ /*** - *** Types + *** Types ***/ /* @@ -67,40 +68,48 @@ typedef struct cache_cleaner cache_cleaner_t; typedef enum { - cleaner_s_idle, /*%< Waiting for cleaning-interval to expire. */ - cleaner_s_busy, /*%< Currently cleaning. */ - cleaner_s_done /*%< Freed enough memory after being overmem. */ + cleaner_s_idle, /*%< Waiting for cleaning-interval to expire. */ + cleaner_s_busy, /*%< Currently cleaning. */ + cleaner_s_done /*%< Freed enough memory after being overmem. */ } cleaner_state_t; /* * Convenience macros for comprehensive assertion checking. */ -#define CLEANER_IDLE(c) ((c)->state == cleaner_s_idle) -#define CLEANER_BUSY(c) ((c)->state == cleaner_s_busy) +#define CLEANER_IDLE(c) ((c)->state == cleaner_s_idle && \ + (c)->resched_event != NULL) +#define CLEANER_BUSY(c) ((c)->state == cleaner_s_busy && \ + (c)->iterator != NULL && \ + (c)->resched_event == NULL) /*% * Accesses to a cache cleaner object are synchronized through * task/event serialization, or locked from the cache object. */ struct cache_cleaner { - isc_mutex_t lock; - /*%< - * Locks overmem. Note: never allocate memory - * while holding this lock - that could lead to deadlock since - * the lock is take by water() which is called from the memory - * allocator. - */ - - dns_cache_t *cache; - isc_task_t *task; - unsigned int cleaning_interval; /*% The cleaning-interval from - named.conf, in seconds. */ - isc_timer_t *cleaning_timer; - - unsigned int increment; /*% Number of names to - clean in one increment */ - cleaner_state_t state; /*% Idle/Busy. */ - isc_boolean_t overmem; /*% The cache is in an overmem state. */ + isc_mutex_t lock; + /*%< + * Locks overmem_event, overmem. Note: never allocate memory + * while holding this lock - that could lead to deadlock since + * the lock is take by water() which is called from the memory + * allocator. + */ + + dns_cache_t *cache; + isc_task_t *task; + unsigned int cleaning_interval; /*% The cleaning-interval from + named.conf, in seconds. */ + isc_timer_t *cleaning_timer; + isc_event_t *resched_event; /*% Sent by cleaner task to + itself to reschedule */ + isc_event_t *overmem_event; + + dns_dbiterator_t *iterator; + unsigned int increment; /*% Number of names to + clean in one increment */ + cleaner_state_t state; /*% Idle/Busy. */ + isc_boolean_t overmem; /*% The cache is in an overmem state. */ + isc_boolean_t replaceiterator; }; /*% @@ -108,434 +117,371 @@ struct cache_cleaner { */ struct dns_cache { - /* Unlocked. */ - unsigned int magic; - isc_mutex_t lock; - isc_mutex_t filelock; - isc_mem_t *mctx; - - /* Locked by 'lock'. */ - int references; - int live_tasks; - dns_rdataclass_t rdclass; - dns_db_t *db; - cache_cleaner_t cleaner; - char *db_type; - int db_argc; - char **db_argv; - - /* Locked by 'filelock'. */ - char * filename; - /* Access to the on-disk cache file is also locked by 'filelock'. */ - -#ifdef LRU_DEBUG -#define DUMP_INTERVAL 30 /* seconds */ - isc_timer_t *dump_timer; /* for test */ - isc_time_t dump_time; /* for test */ -#endif + /* Unlocked. */ + unsigned int magic; + isc_mutex_t lock; + isc_mutex_t filelock; + isc_mem_t *mctx; + + /* Locked by 'lock'. */ + int references; + int live_tasks; + dns_rdataclass_t rdclass; + dns_db_t *db; + cache_cleaner_t cleaner; + char *db_type; + int db_argc; + char **db_argv; + + /* Locked by 'filelock'. */ + char *filename; + /* Access to the on-disk cache file is also locked by 'filelock'. */ }; /*** - *** Functions + *** Functions ***/ static isc_result_t cache_cleaner_init(dns_cache_t *cache, isc_taskmgr_t *taskmgr, - isc_timermgr_t *timermgr, cache_cleaner_t *cleaner); + isc_timermgr_t *timermgr, cache_cleaner_t *cleaner); static void cleaning_timer_action(isc_task_t *task, isc_event_t *event); static void -cleaner_shutdown_action(isc_task_t *task, isc_event_t *event); +incremental_cleaning_action(isc_task_t *task, isc_event_t *event); -#ifdef LRU_DEBUG static void -timer_dump(isc_task_t *task, isc_event_t *event); -#endif +cleaner_shutdown_action(isc_task_t *task, isc_event_t *event); -#if 0 /* This is no longer needed. When LRU_TEST is cleaned up, - * this should be as well. XXXMLG */ -/*% - * Work out how many nodes can be cleaned in the time between two - * requests to the nameserver. Smooth the resulting number and use - * it as a estimate for the number of nodes to be cleaned in the next - * iteration. - */ static void -adjust_increment(cache_cleaner_t *cleaner, unsigned int remaining, - isc_time_t *start) -{ - isc_time_t end; - isc_uint64_t usecs; - isc_uint64_t new; - unsigned int pps = dns_pps; - unsigned int interval; - unsigned int names; - - /* - * Tune for minumum of 100 packets per second (pps). - */ - if (pps < 100) - pps = 100; - - isc_time_now(&end); - - interval = 1000000 / pps; /* Interval between packets in usecs. */ - if (interval == 0) - interval = 1; - - INSIST(cleaner->increment >= remaining); - names = cleaner->increment - remaining; - usecs = isc_time_microdiff(&end, start); - - isc_log_write(dns_lctx, DNS_LOGCATEGORY_DATABASE, DNS_LOGMODULE_CACHE, - ISC_LOG_DEBUG(1), "adjust_increment interval=%u " - "names=%u usec=%" ISC_PLATFORM_QUADFORMAT "u", - interval, names, usecs); - - if (usecs == 0) { - /* - * If we cleaned all the nodes in unmeasurable time - * double the number of nodes to be cleaned next time. - */ - if (names == cleaner->increment) { - cleaner->increment *= 2; - if (cleaner->increment > DNS_CACHE_CLEANERINCREMENT) - cleaner->increment = DNS_CACHE_CLEANERINCREMENT; - isc_log_write(dns_lctx, DNS_LOGCATEGORY_DATABASE, - DNS_LOGMODULE_CACHE, ISC_LOG_DEBUG(1), - "%p:new cleaner->increment = %u\n", - cleaner, cleaner->increment); - } - return; - } - - new = (names * interval); - new /= (usecs * 2); - if (new == 0) - new = 1; - - /* Smooth */ - new = (new + cleaner->increment * 7) / 8; - - if (new > DNS_CACHE_CLEANERINCREMENT) - new = DNS_CACHE_CLEANERINCREMENT; - - cleaner->increment = (unsigned int)new; - - isc_log_write(dns_lctx, DNS_LOGCATEGORY_DATABASE, DNS_LOGMODULE_CACHE, - ISC_LOG_DEBUG(1), "%p:new cleaner->increment = %u\n", - cleaner, cleaner->increment); -} -#endif +overmem_cleaning_action(isc_task_t *task, isc_event_t *event); static inline isc_result_t cache_create_db(dns_cache_t *cache, dns_db_t **db) { - return (dns_db_create(cache->mctx, cache->db_type, dns_rootname, - dns_dbtype_cache, cache->rdclass, - cache->db_argc, cache->db_argv, db)); + return (dns_db_create(cache->mctx, cache->db_type, dns_rootname, + dns_dbtype_cache, cache->rdclass, + cache->db_argc, cache->db_argv, db)); } isc_result_t dns_cache_create(isc_mem_t *mctx, isc_taskmgr_t *taskmgr, - isc_timermgr_t *timermgr, dns_rdataclass_t rdclass, - const char *db_type, unsigned int db_argc, char **db_argv, - dns_cache_t **cachep) + isc_timermgr_t *timermgr, dns_rdataclass_t rdclass, + const char *db_type, unsigned int db_argc, char **db_argv, + dns_cache_t **cachep) { - isc_result_t result; - dns_cache_t *cache; - int i; - - REQUIRE(cachep != NULL); - REQUIRE(*cachep == NULL); - REQUIRE(mctx != NULL); - - cache = isc_mem_get(mctx, sizeof(*cache)); - if (cache == NULL) - return (ISC_R_NOMEMORY); - - cache->mctx = NULL; - isc_mem_attach(mctx, &cache->mctx); - - result = isc_mutex_init(&cache->lock); - if (result != ISC_R_SUCCESS) - goto cleanup_mem; - - result = isc_mutex_init(&cache->filelock); - if (result != ISC_R_SUCCESS) - goto cleanup_lock; - - cache->references = 1; - cache->live_tasks = 0; - cache->rdclass = rdclass; - - cache->db_type = isc_mem_strdup(mctx, db_type); - if (cache->db_type == NULL) { - result = ISC_R_NOMEMORY; - goto cleanup_filelock; - } - - cache->db_argc = db_argc; - if (cache->db_argc == 0) - cache->db_argv = NULL; - else { - cache->db_argv = isc_mem_get(mctx, - cache->db_argc * sizeof(char *)); - if (cache->db_argv == NULL) { - result = ISC_R_NOMEMORY; - goto cleanup_dbtype; - } - for (i = 0; i < cache->db_argc; i++) - cache->db_argv[i] = NULL; - for (i = 0; i < cache->db_argc; i++) { - cache->db_argv[i] = isc_mem_strdup(mctx, db_argv[i]); - if (cache->db_argv[i] == NULL) { - result = ISC_R_NOMEMORY; - goto cleanup_dbargv; - } - } - } - - cache->db = NULL; - result = cache_create_db(cache, &cache->db); - if (result != ISC_R_SUCCESS) - goto cleanup_dbargv; - - cache->filename = NULL; - - cache->magic = CACHE_MAGIC; - - result = cache_cleaner_init(cache, taskmgr, timermgr, &cache->cleaner); - if (result != ISC_R_SUCCESS) - goto cleanup_db; - - *cachep = cache; - return (ISC_R_SUCCESS); + isc_result_t result; + dns_cache_t *cache; + int i; + + REQUIRE(cachep != NULL); + REQUIRE(*cachep == NULL); + REQUIRE(mctx != NULL); + + cache = isc_mem_get(mctx, sizeof(*cache)); + if (cache == NULL) + return (ISC_R_NOMEMORY); + + cache->mctx = NULL; + isc_mem_attach(mctx, &cache->mctx); + + result = isc_mutex_init(&cache->lock); + if (result != ISC_R_SUCCESS) + goto cleanup_mem; + + result = isc_mutex_init(&cache->filelock); + if (result != ISC_R_SUCCESS) + goto cleanup_lock; + + cache->references = 1; + cache->live_tasks = 0; + cache->rdclass = rdclass; + + cache->db_type = isc_mem_strdup(mctx, db_type); + if (cache->db_type == NULL) { + result = ISC_R_NOMEMORY; + goto cleanup_filelock; + } + + cache->db_argc = db_argc; + if (cache->db_argc == 0) + cache->db_argv = NULL; + else { + cache->db_argv = isc_mem_get(mctx, + cache->db_argc * sizeof(char *)); + if (cache->db_argv == NULL) { + result = ISC_R_NOMEMORY; + goto cleanup_dbtype; + } + for (i = 0; i < cache->db_argc; i++) + cache->db_argv[i] = NULL; + for (i = 0; i < cache->db_argc; i++) { + cache->db_argv[i] = isc_mem_strdup(mctx, db_argv[i]); + if (cache->db_argv[i] == NULL) { + result = ISC_R_NOMEMORY; + goto cleanup_dbargv; + } + } + } + + cache->db = NULL; + result = cache_create_db(cache, &cache->db); + if (result != ISC_R_SUCCESS) + goto cleanup_dbargv; + + cache->filename = NULL; + + cache->magic = CACHE_MAGIC; + + /* + * RBT-type cache DB has its own mechanism of cache cleaning and doesn't + * need the control of the generic cleaner. + */ + if (strcmp(db_type, "rbt") == 0) + result = cache_cleaner_init(cache, NULL, NULL, &cache->cleaner); + else { + result = cache_cleaner_init(cache, taskmgr, timermgr, + &cache->cleaner); + } + if (result != ISC_R_SUCCESS) + goto cleanup_db; + + *cachep = cache; + return (ISC_R_SUCCESS); cleanup_db: - dns_db_detach(&cache->db); + dns_db_detach(&cache->db); cleanup_dbargv: - for (i = 0; i < cache->db_argc; i++) - if (cache->db_argv[i] != NULL) - isc_mem_free(mctx, cache->db_argv[i]); - if (cache->db_argv != NULL) - isc_mem_put(mctx, cache->db_argv, - cache->db_argc * sizeof(char *)); + for (i = 0; i < cache->db_argc; i++) + if (cache->db_argv[i] != NULL) + isc_mem_free(mctx, cache->db_argv[i]); + if (cache->db_argv != NULL) + isc_mem_put(mctx, cache->db_argv, + cache->db_argc * sizeof(char *)); cleanup_dbtype: - isc_mem_free(mctx, cache->db_type); + isc_mem_free(mctx, cache->db_type); cleanup_filelock: - DESTROYLOCK(&cache->filelock); + DESTROYLOCK(&cache->filelock); cleanup_lock: - DESTROYLOCK(&cache->lock); + DESTROYLOCK(&cache->lock); cleanup_mem: - isc_mem_put(mctx, cache, sizeof(*cache)); - isc_mem_detach(&mctx); - return (result); + isc_mem_put(mctx, cache, sizeof(*cache)); + isc_mem_detach(&mctx); + return (result); } static void cache_free(dns_cache_t *cache) { - isc_mem_t *mctx; - int i; + isc_mem_t *mctx; + int i; - REQUIRE(VALID_CACHE(cache)); - REQUIRE(cache->references == 0); + REQUIRE(VALID_CACHE(cache)); + REQUIRE(cache->references == 0); - isc_mem_setwater(cache->mctx, NULL, NULL, 0, 0); + isc_mem_setwater(cache->mctx, NULL, NULL, 0, 0); - if (cache->cleaner.task != NULL) - isc_task_detach(&cache->cleaner.task); + if (cache->cleaner.task != NULL) + isc_task_detach(&cache->cleaner.task); - DESTROYLOCK(&cache->cleaner.lock); + if (cache->cleaner.overmem_event != NULL) + isc_event_free(&cache->cleaner.overmem_event); - if (cache->filename) { - isc_mem_free(cache->mctx, cache->filename); - cache->filename = NULL; - } + if (cache->cleaner.resched_event != NULL) + isc_event_free(&cache->cleaner.resched_event); - if (cache->db != NULL) - dns_db_detach(&cache->db); + if (cache->cleaner.iterator != NULL) + dns_dbiterator_destroy(&cache->cleaner.iterator); - if (cache->db_argv != NULL) { - for (i = 0; i < cache->db_argc; i++) - if (cache->db_argv[i] != NULL) - isc_mem_free(cache->mctx, cache->db_argv[i]); - isc_mem_put(cache->mctx, cache->db_argv, - cache->db_argc * sizeof(char *)); - } + DESTROYLOCK(&cache->cleaner.lock); - if (cache->db_type != NULL) - isc_mem_free(cache->mctx, cache->db_type); + if (cache->filename) { + isc_mem_free(cache->mctx, cache->filename); + cache->filename = NULL; + } - DESTROYLOCK(&cache->lock); - DESTROYLOCK(&cache->filelock); - cache->magic = 0; - mctx = cache->mctx; - isc_mem_put(cache->mctx, cache, sizeof(*cache)); - isc_mem_detach(&mctx); + if (cache->db != NULL) + dns_db_detach(&cache->db); + + if (cache->db_argv != NULL) { + for (i = 0; i < cache->db_argc; i++) + if (cache->db_argv[i] != NULL) + isc_mem_free(cache->mctx, cache->db_argv[i]); + isc_mem_put(cache->mctx, cache->db_argv, + cache->db_argc * sizeof(char *)); + } + + if (cache->db_type != NULL) + isc_mem_free(cache->mctx, cache->db_type); + + DESTROYLOCK(&cache->lock); + DESTROYLOCK(&cache->filelock); + cache->magic = 0; + mctx = cache->mctx; + isc_mem_put(cache->mctx, cache, sizeof(*cache)); + isc_mem_detach(&mctx); } void dns_cache_attach(dns_cache_t *cache, dns_cache_t **targetp) { - REQUIRE(VALID_CACHE(cache)); - REQUIRE(targetp != NULL && *targetp == NULL); + REQUIRE(VALID_CACHE(cache)); + REQUIRE(targetp != NULL && *targetp == NULL); - LOCK(&cache->lock); - cache->references++; - UNLOCK(&cache->lock); + LOCK(&cache->lock); + cache->references++; + UNLOCK(&cache->lock); - *targetp = cache; + *targetp = cache; } void dns_cache_detach(dns_cache_t **cachep) { - dns_cache_t *cache; - isc_boolean_t free_cache = ISC_FALSE; - - REQUIRE(cachep != NULL); - cache = *cachep; - REQUIRE(VALID_CACHE(cache)); - - LOCK(&cache->lock); - REQUIRE(cache->references > 0); - cache->references--; - if (cache->references == 0) { - cache->cleaner.overmem = ISC_FALSE; - free_cache = ISC_TRUE; - } - - *cachep = NULL; - - if (free_cache) { - /* - * When the cache is shut down, dump it to a file if one is - * specified. - */ - isc_result_t result = dns_cache_dump(cache); - if (result != ISC_R_SUCCESS) - isc_log_write(dns_lctx, DNS_LOGCATEGORY_DATABASE, - DNS_LOGMODULE_CACHE, ISC_LOG_WARNING, - "error dumping cache: %s ", - isc_result_totext(result)); - - /* - * If the cleaner task exists, let it free the cache. - */ - if (cache->live_tasks > 0) { - isc_task_shutdown(cache->cleaner.task); - free_cache = ISC_FALSE; - } - } - - UNLOCK(&cache->lock); - - if (free_cache) - cache_free(cache); + dns_cache_t *cache; + isc_boolean_t free_cache = ISC_FALSE; + + REQUIRE(cachep != NULL); + cache = *cachep; + REQUIRE(VALID_CACHE(cache)); + + LOCK(&cache->lock); + REQUIRE(cache->references > 0); + cache->references--; + if (cache->references == 0) { + cache->cleaner.overmem = ISC_FALSE; + free_cache = ISC_TRUE; + } + + *cachep = NULL; + + if (free_cache) { + /* + * When the cache is shut down, dump it to a file if one is + * specified. + */ + isc_result_t result = dns_cache_dump(cache); + if (result != ISC_R_SUCCESS) + isc_log_write(dns_lctx, DNS_LOGCATEGORY_DATABASE, + DNS_LOGMODULE_CACHE, ISC_LOG_WARNING, + "error dumping cache: %s ", + isc_result_totext(result)); + + /* + * If the cleaner task exists, let it free the cache. + */ + if (cache->live_tasks > 0) { + isc_task_shutdown(cache->cleaner.task); + free_cache = ISC_FALSE; + } + } + + UNLOCK(&cache->lock); + + if (free_cache) + cache_free(cache); } void dns_cache_attachdb(dns_cache_t *cache, dns_db_t **dbp) { - REQUIRE(VALID_CACHE(cache)); - REQUIRE(dbp != NULL && *dbp == NULL); - REQUIRE(cache->db != NULL); + REQUIRE(VALID_CACHE(cache)); + REQUIRE(dbp != NULL && *dbp == NULL); + REQUIRE(cache->db != NULL); - LOCK(&cache->lock); - dns_db_attach(cache->db, dbp); - UNLOCK(&cache->lock); + LOCK(&cache->lock); + dns_db_attach(cache->db, dbp); + UNLOCK(&cache->lock); } isc_result_t dns_cache_setfilename(dns_cache_t *cache, const char *filename) { - char *newname; + char *newname; - REQUIRE(VALID_CACHE(cache)); - REQUIRE(filename != NULL); + REQUIRE(VALID_CACHE(cache)); + REQUIRE(filename != NULL); - newname = isc_mem_strdup(cache->mctx, filename); - if (newname == NULL) - return (ISC_R_NOMEMORY); + newname = isc_mem_strdup(cache->mctx, filename); + if (newname == NULL) + return (ISC_R_NOMEMORY); - LOCK(&cache->filelock); - if (cache->filename) - isc_mem_free(cache->mctx, cache->filename); - cache->filename = newname; - UNLOCK(&cache->filelock); + LOCK(&cache->filelock); + if (cache->filename) + isc_mem_free(cache->mctx, cache->filename); + cache->filename = newname; + UNLOCK(&cache->filelock); - return (ISC_R_SUCCESS); + return (ISC_R_SUCCESS); } isc_result_t dns_cache_load(dns_cache_t *cache) { - isc_result_t result; + isc_result_t result; - REQUIRE(VALID_CACHE(cache)); + REQUIRE(VALID_CACHE(cache)); - if (cache->filename == NULL) - return (ISC_R_SUCCESS); + if (cache->filename == NULL) + return (ISC_R_SUCCESS); - LOCK(&cache->filelock); - result = dns_db_load(cache->db, cache->filename); - UNLOCK(&cache->filelock); + LOCK(&cache->filelock); + result = dns_db_load(cache->db, cache->filename); + UNLOCK(&cache->filelock); - return (result); + return (result); } isc_result_t dns_cache_dump(dns_cache_t *cache) { - isc_result_t result; + isc_result_t result; - REQUIRE(VALID_CACHE(cache)); + REQUIRE(VALID_CACHE(cache)); - if (cache->filename == NULL) - return (ISC_R_SUCCESS); + if (cache->filename == NULL) + return (ISC_R_SUCCESS); - LOCK(&cache->filelock); - result = dns_master_dump(cache->mctx, cache->db, NULL, - &dns_master_style_cache, cache->filename); - UNLOCK(&cache->filelock); + LOCK(&cache->filelock); + result = dns_master_dump(cache->mctx, cache->db, NULL, + &dns_master_style_cache, cache->filename); + UNLOCK(&cache->filelock); - return (result); + return (result); } void dns_cache_setcleaninginterval(dns_cache_t *cache, unsigned int t) { - isc_interval_t interval; - isc_result_t result; - - LOCK(&cache->lock); - - /* - * It may be the case that the cache has already shut down. - * If so, it has no timer. - */ - if (cache->cleaner.cleaning_timer == NULL) - goto unlock; - - cache->cleaner.cleaning_interval = t; - - if (t == 0) { - result = isc_timer_reset(cache->cleaner.cleaning_timer, - isc_timertype_inactive, - NULL, NULL, ISC_TRUE); - } else { - isc_interval_set(&interval, cache->cleaner.cleaning_interval, - 0); - result = isc_timer_reset(cache->cleaner.cleaning_timer, - isc_timertype_ticker, - NULL, &interval, ISC_FALSE); - } - if (result != ISC_R_SUCCESS) - isc_log_write(dns_lctx, DNS_LOGCATEGORY_DATABASE, - DNS_LOGMODULE_CACHE, ISC_LOG_WARNING, - "could not set cache cleaning interval: %s", - isc_result_totext(result)); + isc_interval_t interval; + isc_result_t result; + + LOCK(&cache->lock); + + /* + * It may be the case that the cache has already shut down. + * If so, it has no timer. + */ + if (cache->cleaner.cleaning_timer == NULL) + goto unlock; + + cache->cleaner.cleaning_interval = t; + + if (t == 0) { + result = isc_timer_reset(cache->cleaner.cleaning_timer, + isc_timertype_inactive, + NULL, NULL, ISC_TRUE); + } else { + isc_interval_set(&interval, cache->cleaner.cleaning_interval, + 0); + result = isc_timer_reset(cache->cleaner.cleaning_timer, + isc_timertype_ticker, + NULL, &interval, ISC_FALSE); + } + if (result != ISC_R_SUCCESS) + isc_log_write(dns_lctx, DNS_LOGCATEGORY_DATABASE, + DNS_LOGMODULE_CACHE, ISC_LOG_WARNING, + "could not set cache cleaning interval: %s", + isc_result_totext(result)); unlock: - UNLOCK(&cache->lock); + UNLOCK(&cache->lock); } /* @@ -545,86 +491,180 @@ dns_cache_setcleaninginterval(dns_cache_t *cache, unsigned int t) { static isc_result_t cache_cleaner_init(dns_cache_t *cache, isc_taskmgr_t *taskmgr, - isc_timermgr_t *timermgr, cache_cleaner_t *cleaner) + isc_timermgr_t *timermgr, cache_cleaner_t *cleaner) { - isc_result_t result; -#ifdef LRU_DEBUG - isc_interval_t interval; -#endif - - result = isc_mutex_init(&cleaner->lock); - if (result != ISC_R_SUCCESS) - goto fail; - - cleaner->increment = DNS_CACHE_CLEANERINCREMENT; - cleaner->state = cleaner_s_idle; - cleaner->cache = cache; - cleaner->overmem = ISC_FALSE; - - cleaner->task = NULL; - cleaner->cleaning_timer = NULL; - - if (taskmgr != NULL && timermgr != NULL) { - result = isc_task_create(taskmgr, 1, &cleaner->task); - if (result != ISC_R_SUCCESS) { - UNEXPECTED_ERROR(__FILE__, __LINE__, - "isc_task_create() failed: %s", - dns_result_totext(result)); - result = ISC_R_UNEXPECTED; - goto cleanup; - } - cleaner->cache->live_tasks++; - isc_task_setname(cleaner->task, "cachecleaner", cleaner); - - result = isc_task_onshutdown(cleaner->task, - cleaner_shutdown_action, cache); - if (result != ISC_R_SUCCESS) { - UNEXPECTED_ERROR(__FILE__, __LINE__, - "cache cleaner: " - "isc_task_onshutdown() failed: %s", - dns_result_totext(result)); - goto cleanup; - } - - cleaner->cleaning_interval = 0; /* Initially turned off. */ - result = isc_timer_create(timermgr, isc_timertype_inactive, - NULL, NULL, - cleaner->task, - cleaning_timer_action, cleaner, - &cleaner->cleaning_timer); - if (result != ISC_R_SUCCESS) { - UNEXPECTED_ERROR(__FILE__, __LINE__, - "isc_timer_create() failed: %s", - dns_result_totext(result)); - result = ISC_R_UNEXPECTED; - goto cleanup; - } - -#ifdef LRU_DEBUG - interval.seconds = DUMP_INTERVAL; - interval.nanoseconds = 0; - RUNTIME_CHECK(isc_time_nowplusinterval(&cache->dump_time, - &interval) == - ISC_R_SUCCESS); - cache->dump_timer = NULL; - result = isc_timer_create(timermgr, isc_timertype_once, - &cache->dump_time, NULL, - cleaner->task, timer_dump, - cache, &cache->dump_timer); - RUNTIME_CHECK(result == ISC_R_SUCCESS); /* for brevity */ -#endif - } - - return (ISC_R_SUCCESS); + isc_result_t result; + + result = isc_mutex_init(&cleaner->lock); + if (result != ISC_R_SUCCESS) + goto fail; + + cleaner->increment = DNS_CACHE_CLEANERINCREMENT; + cleaner->state = cleaner_s_idle; + cleaner->cache = cache; + cleaner->iterator = NULL; + cleaner->overmem = ISC_FALSE; + cleaner->replaceiterator = ISC_FALSE; + + cleaner->task = NULL; + cleaner->cleaning_timer = NULL; + cleaner->resched_event = NULL; + cleaner->overmem_event = NULL; + + result = dns_db_createiterator(cleaner->cache->db, ISC_FALSE, + &cleaner->iterator); + if (result != ISC_R_SUCCESS) + goto cleanup; + + if (taskmgr != NULL && timermgr != NULL) { + result = isc_task_create(taskmgr, 1, &cleaner->task); + if (result != ISC_R_SUCCESS) { + UNEXPECTED_ERROR(__FILE__, __LINE__, + "isc_task_create() failed: %s", + dns_result_totext(result)); + result = ISC_R_UNEXPECTED; + goto cleanup; + } + cleaner->cache->live_tasks++; + isc_task_setname(cleaner->task, "cachecleaner", cleaner); + + result = isc_task_onshutdown(cleaner->task, + cleaner_shutdown_action, cache); + if (result != ISC_R_SUCCESS) { + UNEXPECTED_ERROR(__FILE__, __LINE__, + "cache cleaner: " + "isc_task_onshutdown() failed: %s", + dns_result_totext(result)); + goto cleanup; + } + + cleaner->cleaning_interval = 0; /* Initially turned off. */ + result = isc_timer_create(timermgr, isc_timertype_inactive, + NULL, NULL, cleaner->task, + cleaning_timer_action, cleaner, + &cleaner->cleaning_timer); + if (result != ISC_R_SUCCESS) { + UNEXPECTED_ERROR(__FILE__, __LINE__, + "isc_timer_create() failed: %s", + dns_result_totext(result)); + result = ISC_R_UNEXPECTED; + goto cleanup; + } + + cleaner->resched_event = + isc_event_allocate(cache->mctx, cleaner, + DNS_EVENT_CACHECLEAN, + incremental_cleaning_action, + cleaner, sizeof(isc_event_t)); + if (cleaner->resched_event == NULL) { + result = ISC_R_NOMEMORY; + goto cleanup; + } + + cleaner->overmem_event = + isc_event_allocate(cache->mctx, cleaner, + DNS_EVENT_CACHEOVERMEM, + overmem_cleaning_action, + cleaner, sizeof(isc_event_t)); + if (cleaner->overmem_event == NULL) { + result = ISC_R_NOMEMORY; + goto cleanup; + } + } + + return (ISC_R_SUCCESS); cleanup: - if (cleaner->cleaning_timer != NULL) - isc_timer_detach(&cleaner->cleaning_timer); - if (cleaner->task != NULL) - isc_task_detach(&cleaner->task); - DESTROYLOCK(&cleaner->lock); + if (cleaner->overmem_event != NULL) + isc_event_free(&cleaner->overmem_event); + if (cleaner->resched_event != NULL) + isc_event_free(&cleaner->resched_event); + if (cleaner->cleaning_timer != NULL) + isc_timer_detach(&cleaner->cleaning_timer); + if (cleaner->task != NULL) + isc_task_detach(&cleaner->task); + if (cleaner->iterator != NULL) + dns_dbiterator_destroy(&cleaner->iterator); + DESTROYLOCK(&cleaner->lock); fail: - return (result); + return (result); +} + +static void +begin_cleaning(cache_cleaner_t *cleaner) { + isc_result_t result = ISC_R_SUCCESS; + + REQUIRE(CLEANER_IDLE(cleaner)); + + /* + * Create an iterator, if it does not already exist, and + * position it at the beginning of the cache. + */ + if (cleaner->iterator == NULL) + result = dns_db_createiterator(cleaner->cache->db, ISC_FALSE, + &cleaner->iterator); + if (result != ISC_R_SUCCESS) + isc_log_write(dns_lctx, DNS_LOGCATEGORY_DATABASE, + DNS_LOGMODULE_CACHE, ISC_LOG_WARNING, + "cache cleaner could not create " + "iterator: %s", isc_result_totext(result)); + else { + dns_dbiterator_setcleanmode(cleaner->iterator, ISC_TRUE); + result = dns_dbiterator_first(cleaner->iterator); + } + if (result != ISC_R_SUCCESS) { + /* + * If the result is ISC_R_NOMORE, the database is empty, + * so there is nothing to be cleaned. + */ + if (result != ISC_R_NOMORE && cleaner->iterator != NULL) { + UNEXPECTED_ERROR(__FILE__, __LINE__, + "cache cleaner: " + "dns_dbiterator_first() failed: %s", + dns_result_totext(result)); + dns_dbiterator_destroy(&cleaner->iterator); + } else if (cleaner->iterator != NULL) { + result = dns_dbiterator_pause(cleaner->iterator); + RUNTIME_CHECK(result == ISC_R_SUCCESS); + } + } else { + /* + * Pause the iterator to free its lock. + */ + result = dns_dbiterator_pause(cleaner->iterator); + RUNTIME_CHECK(result == ISC_R_SUCCESS); + + isc_log_write(dns_lctx, DNS_LOGCATEGORY_DATABASE, + DNS_LOGMODULE_CACHE, ISC_LOG_DEBUG(1), + "begin cache cleaning, mem inuse %lu", + (unsigned long)isc_mem_inuse(cleaner->cache->mctx)); + cleaner->state = cleaner_s_busy; + isc_task_send(cleaner->task, &cleaner->resched_event); + } + + return; +} + +static void +end_cleaning(cache_cleaner_t *cleaner, isc_event_t *event) { + isc_result_t result; + + REQUIRE(CLEANER_BUSY(cleaner)); + REQUIRE(event != NULL); + + result = dns_dbiterator_pause(cleaner->iterator); + if (result != ISC_R_SUCCESS) + dns_dbiterator_destroy(&cleaner->iterator); + + dns_cache_setcleaninginterval(cleaner->cache, + cleaner->cleaning_interval); + + isc_log_write(dns_lctx, DNS_LOGCATEGORY_DATABASE, DNS_LOGMODULE_CACHE, + ISC_LOG_DEBUG(1), "end cache cleaning, mem inuse %lu", + (unsigned long)isc_mem_inuse(cleaner->cache->mctx)); + + cleaner->state = cleaner_s_idle; + cleaner->resched_event = event; } /* @@ -632,18 +672,183 @@ cache_cleaner_init(dns_cache_t *cache, isc_taskmgr_t *taskmgr, */ static void cleaning_timer_action(isc_task_t *task, isc_event_t *event) { - cache_cleaner_t *cleaner = event->ev_arg; + cache_cleaner_t *cleaner = event->ev_arg; + + UNUSED(task); - UNUSED(task); + INSIST(task == cleaner->task); + INSIST(event->ev_type == ISC_TIMEREVENT_TICK); - INSIST(task == cleaner->task); - INSIST(event->ev_type == ISC_TIMEREVENT_TICK); + isc_log_write(dns_lctx, DNS_LOGCATEGORY_DATABASE, DNS_LOGMODULE_CACHE, + ISC_LOG_DEBUG(1), "cache cleaning timer fired, " + "cleaner state = %d", cleaner->state); - isc_log_write(dns_lctx, DNS_LOGCATEGORY_DATABASE, DNS_LOGMODULE_CACHE, - ISC_LOG_DEBUG(1), "cache cleaning timer fired, " - "cleaner state = %d", cleaner->state); + if (cleaner->state == cleaner_s_idle) + begin_cleaning(cleaner); - isc_event_free(&event); + isc_event_free(&event); +} + +/* + * This is called when the cache either surpasses its upper limit + * or shrinks beyond its lower limit. + */ +static void +overmem_cleaning_action(isc_task_t *task, isc_event_t *event) { + cache_cleaner_t *cleaner = event->ev_arg; + isc_boolean_t want_cleaning = ISC_FALSE; + + UNUSED(task); + + INSIST(task == cleaner->task); + INSIST(event->ev_type == DNS_EVENT_CACHEOVERMEM); + INSIST(cleaner->overmem_event == NULL); + + isc_log_write(dns_lctx, DNS_LOGCATEGORY_DATABASE, DNS_LOGMODULE_CACHE, + ISC_LOG_DEBUG(1), "overmem_cleaning_action called, " + "overmem = %d, state = %d", cleaner->overmem, + cleaner->state); + + LOCK(&cleaner->lock); + + if (cleaner->overmem) { + if (cleaner->state == cleaner_s_idle) + want_cleaning = ISC_TRUE; + } else { + if (cleaner->state == cleaner_s_busy) + /* + * end_cleaning() can't be called here because + * then both cleaner->overmem_event and + * cleaner->resched_event will point to this + * event. Set the state to done, and then + * when the incremental_cleaning_action() event + * is posted, it will handle the end_cleaning. + */ + cleaner->state = cleaner_s_done; + } + + cleaner->overmem_event = event; + + UNLOCK(&cleaner->lock); + + if (want_cleaning) + begin_cleaning(cleaner); +} + +/* + * Do incremental cleaning. + */ +static void +incremental_cleaning_action(isc_task_t *task, isc_event_t *event) { + cache_cleaner_t *cleaner = event->ev_arg; + isc_result_t result; + unsigned int n_names; + isc_time_t start; + + UNUSED(task); + + INSIST(task == cleaner->task); + INSIST(event->ev_type == DNS_EVENT_CACHECLEAN); + + if (cleaner->state == cleaner_s_done) { + cleaner->state = cleaner_s_busy; + end_cleaning(cleaner, event); + LOCK(&cleaner->cache->lock); + LOCK(&cleaner->lock); + if (cleaner->replaceiterator) { + dns_dbiterator_destroy(&cleaner->iterator); + (void) dns_db_createiterator(cleaner->cache->db, + ISC_FALSE, + &cleaner->iterator); + cleaner->replaceiterator = ISC_FALSE; + } + UNLOCK(&cleaner->lock); + UNLOCK(&cleaner->cache->lock); + return; + } + + INSIST(CLEANER_BUSY(cleaner)); + + n_names = cleaner->increment; + + REQUIRE(DNS_DBITERATOR_VALID(cleaner->iterator)); + + isc_time_now(&start); + while (n_names-- > 0) { + dns_dbnode_t *node = NULL; + + result = dns_dbiterator_current(cleaner->iterator, &node, + NULL); + if (result != ISC_R_SUCCESS) { + UNEXPECTED_ERROR(__FILE__, __LINE__, + "cache cleaner: dns_dbiterator_current() " + "failed: %s", dns_result_totext(result)); + + end_cleaning(cleaner, event); + return; + } + + /* + * The node was not needed, but was required by + * dns_dbiterator_current(). Give up its reference. + */ + dns_db_detachnode(cleaner->cache->db, &node); + + /* + * Step to the next node. + */ + result = dns_dbiterator_next(cleaner->iterator); + + if (result != ISC_R_SUCCESS) { + /* + * Either the end was reached (ISC_R_NOMORE) or + * some error was signaled. If the cache is still + * overmem and no error was encountered, + * keep trying to clean it, otherwise stop cleaning. + */ + if (result != ISC_R_NOMORE) + UNEXPECTED_ERROR(__FILE__, __LINE__, + "cache cleaner: " + "dns_dbiterator_next() " + "failed: %s", + dns_result_totext(result)); + else if (cleaner->overmem) { + result = dns_dbiterator_first(cleaner-> + iterator); + if (result == ISC_R_SUCCESS) { + isc_log_write(dns_lctx, + DNS_LOGCATEGORY_DATABASE, + DNS_LOGMODULE_CACHE, + ISC_LOG_DEBUG(1), + "cache cleaner: " + "still overmem, " + "reset and try again"); + continue; + } + } + + end_cleaning(cleaner, event); + return; + } + } + + /* + * We have successfully performed a cleaning increment but have + * not gone through the entire cache. Free the iterator locks + * and reschedule another batch. If it fails, just try to continue + * anyway. + */ + result = dns_dbiterator_pause(cleaner->iterator); + RUNTIME_CHECK(result == ISC_R_SUCCESS); + + isc_log_write(dns_lctx, DNS_LOGCATEGORY_DATABASE, DNS_LOGMODULE_CACHE, + ISC_LOG_DEBUG(1), "cache cleaner: checked %u nodes, " + "mem inuse %lu, sleeping", cleaner->increment, + (unsigned long)isc_mem_inuse(cleaner->cache->mctx)); + + isc_task_send(task, &event); + INSIST(CLEANER_BUSY(cleaner)); + return; } /* @@ -651,104 +856,111 @@ cleaning_timer_action(isc_task_t *task, isc_event_t *event) { */ isc_result_t dns_cache_clean(dns_cache_t *cache, isc_stdtime_t now) { - isc_result_t result; - dns_dbiterator_t *iterator = NULL; - - REQUIRE(VALID_CACHE(cache)); - - result = dns_db_createiterator(cache->db, ISC_FALSE, &iterator); - if (result != ISC_R_SUCCESS) - return result; - - result = dns_dbiterator_first(iterator); - - while (result == ISC_R_SUCCESS) { - dns_dbnode_t *node = NULL; - result = dns_dbiterator_current(iterator, &node, - (dns_name_t *)NULL); - if (result != ISC_R_SUCCESS) - break; - - /* - * Check TTLs, mark expired rdatasets stale. - */ - result = dns_db_expirenode(cache->db, node, now); - if (result != ISC_R_SUCCESS) { - UNEXPECTED_ERROR(__FILE__, __LINE__, - "cache cleaner: dns_db_expirenode() " - "failed: %s", - dns_result_totext(result)); - /* - * Continue anyway. - */ - } - - /* - * This is where the actual freeing takes place. - */ - dns_db_detachnode(cache->db, &node); - - result = dns_dbiterator_next(iterator); - } - - dns_dbiterator_destroy(&iterator); - - if (result == ISC_R_NOMORE) - result = ISC_R_SUCCESS; - - return (result); + isc_result_t result; + dns_dbiterator_t *iterator = NULL; + + REQUIRE(VALID_CACHE(cache)); + + result = dns_db_createiterator(cache->db, ISC_FALSE, &iterator); + if (result != ISC_R_SUCCESS) + return result; + + result = dns_dbiterator_first(iterator); + + while (result == ISC_R_SUCCESS) { + dns_dbnode_t *node = NULL; + result = dns_dbiterator_current(iterator, &node, + (dns_name_t *)NULL); + if (result != ISC_R_SUCCESS) + break; + + /* + * Check TTLs, mark expired rdatasets stale. + */ + result = dns_db_expirenode(cache->db, node, now); + if (result != ISC_R_SUCCESS) { + UNEXPECTED_ERROR(__FILE__, __LINE__, + "cache cleaner: dns_db_expirenode() " + "failed: %s", + dns_result_totext(result)); + /* + * Continue anyway. + */ + } + + /* + * This is where the actual freeing takes place. + */ + dns_db_detachnode(cache->db, &node); + + result = dns_dbiterator_next(iterator); + } + + dns_dbiterator_destroy(&iterator); + + if (result == ISC_R_NOMORE) + result = ISC_R_SUCCESS; + + return (result); } static void water(void *arg, int mark) { - dns_cache_t *cache = arg; - isc_boolean_t overmem = ISC_TF(mark == ISC_MEM_HIWATER); + dns_cache_t *cache = arg; + isc_boolean_t overmem = ISC_TF(mark == ISC_MEM_HIWATER); + + REQUIRE(VALID_CACHE(cache)); - REQUIRE(VALID_CACHE(cache)); + LOCK(&cache->cleaner.lock); - LOCK(&cache->cleaner.lock); + if (overmem != cache->cleaner.overmem) { + dns_db_overmem(cache->db, overmem); + cache->cleaner.overmem = overmem; + isc_mem_waterack(cache->mctx, mark); + } - dns_db_overmem(cache->db, overmem); - cache->cleaner.overmem = overmem; + if (cache->cleaner.overmem_event != NULL) + isc_task_send(cache->cleaner.task, + &cache->cleaner.overmem_event); - UNLOCK(&cache->cleaner.lock); + UNLOCK(&cache->cleaner.lock); } void dns_cache_setcachesize(dns_cache_t *cache, isc_uint32_t size) { - isc_uint32_t lowater; - isc_uint32_t hiwater; - - REQUIRE(VALID_CACHE(cache)); - - /* - * Impose a minumum cache size; pathological things happen if there - * is too little room. - */ - if (size != 0 && size < DNS_CACHE_MINSIZE) - size = DNS_CACHE_MINSIZE; - - hiwater = size - (size >> 3); /* Approximately 7/8ths. */ - lowater = size - (size >> 2); /* Approximately 3/4ths. */ - - /* - * If the cache was overmem and cleaning, but now with the new limits - * it is no longer in an overmem condition, then the next - * isc_mem_put for cache memory will do the right thing and trigger - * water(). - */ - - if (size == 0 || hiwater == 0 || lowater == 0) - /* - * Disable cache memory limiting. - */ - isc_mem_setwater(cache->mctx, water, cache, 0, 0); - else - /* - * Establish new cache memory limits (either for the first - * time, or replacing other limits). - */ - isc_mem_setwater(cache->mctx, water, cache, hiwater, lowater); + isc_uint32_t lowater; + isc_uint32_t hiwater; + + REQUIRE(VALID_CACHE(cache)); + + /* + * Impose a minumum cache size; pathological things happen if there + * is too little room. + */ + if (size != 0 && size < DNS_CACHE_MINSIZE) + size = DNS_CACHE_MINSIZE; + + hiwater = size - (size >> 3); /* Approximately 7/8ths. */ + lowater = size - (size >> 2); /* Approximately 3/4ths. */ + + /* + * If the cache was overmem and cleaning, but now with the new limits + * it is no longer in an overmem condition, then the next + * isc_mem_put for cache memory will do the right thing and trigger + * water(). + */ + + if (size == 0 || hiwater == 0 || lowater == 0) + /* + * Disable cache memory limiting. + */ + isc_mem_setwater(cache->mctx, water, cache, 0, 0); + else + /* + * Establish new cache memory limits (either for the first + * time, or replacing other limits). + */ + isc_mem_setwater(cache->mctx, water, cache, hiwater, lowater); } /* @@ -756,148 +968,122 @@ dns_cache_setcachesize(dns_cache_t *cache, isc_uint32_t size) { */ static void cleaner_shutdown_action(isc_task_t *task, isc_event_t *event) { - dns_cache_t *cache = event->ev_arg; - isc_boolean_t should_free = ISC_FALSE; + dns_cache_t *cache = event->ev_arg; + isc_boolean_t should_free = ISC_FALSE; - UNUSED(task); + UNUSED(task); - INSIST(task == cache->cleaner.task); - INSIST(event->ev_type == ISC_TASKEVENT_SHUTDOWN); + INSIST(task == cache->cleaner.task); + INSIST(event->ev_type == ISC_TASKEVENT_SHUTDOWN); - LOCK(&cache->lock); + if (CLEANER_BUSY(&cache->cleaner)) + end_cleaning(&cache->cleaner, event); + else + isc_event_free(&event); - cache->live_tasks--; - INSIST(cache->live_tasks == 0); + LOCK(&cache->lock); - if (cache->references == 0) - should_free = ISC_TRUE; + cache->live_tasks--; + INSIST(cache->live_tasks == 0); - /* - * By detaching the timer in the context of its task, - * we are guaranteed that there will be no further timer - * events. - */ - if (cache->cleaner.cleaning_timer != NULL) - isc_timer_detach(&cache->cleaner.cleaning_timer); + if (cache->references == 0) + should_free = ISC_TRUE; -#ifdef LRU_DEBUG - isc_timer_detach(&cache->dump_timer); -#endif + /* + * By detaching the timer in the context of its task, + * we are guaranteed that there will be no further timer + * events. + */ + if (cache->cleaner.cleaning_timer != NULL) + isc_timer_detach(&cache->cleaner.cleaning_timer); - /* Make sure we don't reschedule anymore. */ - (void)isc_task_purge(task, NULL, DNS_EVENT_CACHECLEAN, NULL); + /* Make sure we don't reschedule anymore. */ + (void)isc_task_purge(task, NULL, DNS_EVENT_CACHECLEAN, NULL); - UNLOCK(&cache->lock); + UNLOCK(&cache->lock); - if (should_free) - cache_free(cache); - - isc_event_free(&event); + if (should_free) + cache_free(cache); } isc_result_t dns_cache_flush(dns_cache_t *cache) { - dns_db_t *db = NULL; - isc_result_t result; - - result = cache_create_db(cache, &db); - if (result != ISC_R_SUCCESS) - return (result); - - LOCK(&cache->lock); - LOCK(&cache->cleaner.lock); - if (cache->cleaner.state == cleaner_s_idle) { - /* XXXMLG do something */ - } else if (cache->cleaner.state == cleaner_s_busy) { - /* XXXMLG do something else */ - } - dns_db_detach(&cache->db); - cache->db = db; - UNLOCK(&cache->cleaner.lock); - UNLOCK(&cache->lock); - - return (ISC_R_SUCCESS); + dns_db_t *db = NULL; + isc_result_t result; + + result = cache_create_db(cache, &db); + if (result != ISC_R_SUCCESS) + return (result); + + LOCK(&cache->lock); + LOCK(&cache->cleaner.lock); + if (cache->cleaner.state == cleaner_s_idle) { + if (cache->cleaner.iterator != NULL) + dns_dbiterator_destroy(&cache->cleaner.iterator); + (void) dns_db_createiterator(db, ISC_FALSE, + &cache->cleaner.iterator); + } else { + if (cache->cleaner.state == cleaner_s_busy) + cache->cleaner.state = cleaner_s_done; + cache->cleaner.replaceiterator = ISC_TRUE; + } + dns_db_detach(&cache->db); + cache->db = db; + UNLOCK(&cache->cleaner.lock); + UNLOCK(&cache->lock); + + return (ISC_R_SUCCESS); } isc_result_t dns_cache_flushname(dns_cache_t *cache, dns_name_t *name) { - isc_result_t result; - dns_rdatasetiter_t *iter = NULL; - dns_dbnode_t *node = NULL; - dns_db_t *db = NULL; - - LOCK(&cache->lock); - if (cache->db != NULL) - dns_db_attach(cache->db, &db); - UNLOCK(&cache->lock); - if (db == NULL) - return (ISC_R_SUCCESS); - result = dns_db_findnode(cache->db, name, ISC_FALSE, &node); - if (result == ISC_R_NOTFOUND) { - result = ISC_R_SUCCESS; - goto cleanup_db; - } - if (result != ISC_R_SUCCESS) - goto cleanup_db; - - result = dns_db_allrdatasets(cache->db, node, NULL, - (isc_stdtime_t)0, &iter); - if (result != ISC_R_SUCCESS) - goto cleanup_node; - - for (result = dns_rdatasetiter_first(iter); - result == ISC_R_SUCCESS; - result = dns_rdatasetiter_next(iter)) - { - dns_rdataset_t rdataset; - dns_rdataset_init(&rdataset); - - dns_rdatasetiter_current(iter, &rdataset); - result = dns_db_deleterdataset(cache->db, node, NULL, - rdataset.type, rdataset.covers); - dns_rdataset_disassociate(&rdataset); - if (result != ISC_R_SUCCESS && result != DNS_R_UNCHANGED) - break; - } - if (result == ISC_R_NOMORE) - result = ISC_R_SUCCESS; - - dns_rdatasetiter_destroy(&iter); + isc_result_t result; + dns_rdatasetiter_t *iter = NULL; + dns_dbnode_t *node = NULL; + dns_db_t *db = NULL; + + LOCK(&cache->lock); + if (cache->db != NULL) + dns_db_attach(cache->db, &db); + UNLOCK(&cache->lock); + if (db == NULL) + return (ISC_R_SUCCESS); + result = dns_db_findnode(cache->db, name, ISC_FALSE, &node); + if (result == ISC_R_NOTFOUND) { + result = ISC_R_SUCCESS; + goto cleanup_db; + } + if (result != ISC_R_SUCCESS) + goto cleanup_db; + + result = dns_db_allrdatasets(cache->db, node, NULL, + (isc_stdtime_t)0, &iter); + if (result != ISC_R_SUCCESS) + goto cleanup_node; + + for (result = dns_rdatasetiter_first(iter); + result == ISC_R_SUCCESS; + result = dns_rdatasetiter_next(iter)) + { + dns_rdataset_t rdataset; + dns_rdataset_init(&rdataset); + + dns_rdatasetiter_current(iter, &rdataset); + result = dns_db_deleterdataset(cache->db, node, NULL, + rdataset.type, rdataset.covers); + dns_rdataset_disassociate(&rdataset); + if (result != ISC_R_SUCCESS && result != DNS_R_UNCHANGED) + break; + } + if (result == ISC_R_NOMORE) + result = ISC_R_SUCCESS; + + dns_rdatasetiter_destroy(&iter); cleanup_node: - dns_db_detachnode(cache->db, &node); + dns_db_detachnode(cache->db, &node); cleanup_db: - dns_db_detach(&db); - return (result); -} - -#ifdef LRU_DEBUG -static void -timer_dump(isc_task_t *task, isc_event_t *event) { - dns_cache_t *cache; - isc_interval_t interval; - isc_time_t nexttime; - - UNUSED(task); - - cache = event->ev_arg; - INSIST(VALID_CACHE(cache)); - -#ifdef LRU_DEBUG - /* XXX: abuse existing overmem method */ - dns_db_overmem(cache->db, (isc_boolean_t)-1); -#endif - - interval.seconds = DUMP_INTERVAL; - interval.nanoseconds = 0; - - RUNTIME_CHECK(isc_time_add(&cache->dump_time, &interval, &nexttime) == - ISC_R_SUCCESS); /* XXX: this is not always true */ - cache->dump_time = nexttime; - (void)isc_timer_reset(cache->dump_timer, isc_timertype_once, - &cache->dump_time, NULL, ISC_FALSE); - - isc_event_free(&event); + dns_db_detach(&db); + return (result); } -#endif diff --git a/lib/dns/db.c b/lib/dns/db.c index 64327651..67be11c1 100644 --- a/lib/dns/db.c +++ b/lib/dns/db.c @@ -1,5 +1,5 @@ /* - * Copyright (C) 2004, 2005, 2007 Internet Systems Consortium, Inc. ("ISC") + * Copyright (C) 2004, 2005, 2007, 2008 Internet Systems Consortium, Inc. ("ISC") * Copyright (C) 1999-2001, 2003 Internet Software Consortium. * * Permission to use, copy, modify, and/or distribute this software for any @@ -15,7 +15,7 @@ * PERFORMANCE OF THIS SOFTWARE. */ -/* $Id: db.c,v 1.83 2007/06/18 23:47:40 tbox Exp $ */ +/* $Id: db.c,v 1.83.128.2 2008/04/03 06:20:34 tbox Exp $ */ /*! \file */ @@ -95,7 +95,7 @@ static inline dns_dbimplementation_t * impfind(const char *name) { dns_dbimplementation_t *imp; - for (imp = ISC_LIST_HEAD(implementations); + for (imp = ISC_LIST_HEAD(implementations); imp != NULL; imp = ISC_LIST_NEXT(imp, link)) if (strcasecmp(name, imp->name) == 0) @@ -543,10 +543,10 @@ dns_db_transfernode(dns_db_t *db, dns_dbnode_t **sourcep, UNUSED(db); if (db->methods->transfernode == NULL) { - *targetp = *sourcep; - *sourcep = NULL; + *targetp = *sourcep; + *sourcep = NULL; } else - (db->methods->transfernode)(db, sourcep, targetp); + (db->methods->transfernode)(db, sourcep, targetp); ENSURE(*sourcep == NULL); } @@ -711,7 +711,7 @@ dns_db_deleterdataset(dns_db_t *db, dns_dbnode_t *node, type, covers)); } -void +void dns_db_overmem(dns_db_t *db, isc_boolean_t overmem) { REQUIRE(DNS_DB_VALID(db)); @@ -737,11 +737,11 @@ dns_db_getsoaserial(dns_db_t *db, dns_dbversion_t *ver, isc_uint32_t *serialp) dns_rdataset_init(&rdataset); result = dns_db_findrdataset(db, node, ver, dns_rdatatype_soa, 0, (isc_stdtime_t)0, &rdataset, NULL); - if (result != ISC_R_SUCCESS) + if (result != ISC_R_SUCCESS) goto freenode; result = dns_rdataset_first(&rdataset); - if (result != ISC_R_SUCCESS) + if (result != ISC_R_SUCCESS) goto freerdataset; dns_rdataset_current(&rdataset, &rdata); result = dns_rdataset_next(&rdataset); @@ -794,7 +794,7 @@ dns_db_register(const char *name, dns_dbcreatefunc_t create, void *driverarg, RWUNLOCK(&implock, isc_rwlocktype_write); return (ISC_R_EXISTS); } - + imp = isc_mem_get(mctx, sizeof(dns_dbimplementation_t)); if (imp == NULL) { RWUNLOCK(&implock, isc_rwlocktype_write); @@ -832,6 +832,16 @@ dns_db_unregister(dns_dbimplementation_t **dbimp) { RWUNLOCK(&implock, isc_rwlocktype_write); } +dns_stats_t * +dns_db_getrrsetstats(dns_db_t *db) { + REQUIRE(DNS_DB_VALID(db)); + + if (db->methods->getrrsetstats != NULL) + return ((db->methods->getrrsetstats)(db)); + + return (NULL); +} + isc_result_t dns_db_getoriginnode(dns_db_t *db, dns_dbnode_t **nodep) { REQUIRE(DNS_DB_VALID(db)); diff --git a/lib/dns/dispatch.c b/lib/dns/dispatch.c index 07235da8..d8a8b779 100644 --- a/lib/dns/dispatch.c +++ b/lib/dns/dispatch.c @@ -1,5 +1,5 @@ /* - * Copyright (C) 2004-2007 Internet Systems Consortium, Inc. ("ISC") + * Copyright (C) 2004-2008 Internet Systems Consortium, Inc. ("ISC") * Copyright (C) 1999-2003 Internet Software Consortium. * * Permission to use, copy, modify, and/or distribute this software for any @@ -15,7 +15,7 @@ * PERFORMANCE OF THIS SOFTWARE. */ -/* $Id: dispatch.c,v 1.137 2007/06/27 04:10:44 marka Exp $ */ +/* $Id: dispatch.c,v 1.137.128.3 2008/04/03 06:10:19 marka Exp $ */ /*! \file */ @@ -40,27 +40,29 @@ #include #include #include +#include #include #include typedef ISC_LIST(dns_dispentry_t) dns_displist_t; -typedef struct dns_nsid { - isc_uint16_t nsid_state; - isc_uint16_t *nsid_vtable; - isc_uint16_t *nsid_pool; - isc_uint16_t nsid_a1, nsid_a2, nsid_a3; - isc_uint16_t nsid_c1, nsid_c2, nsid_c3; - isc_uint16_t nsid_state2; - isc_boolean_t nsid_usepool; -} dns_nsid_t; +/* transaction ID */ +typedef struct dns_tid { + isc_uint16_t tid_state; + isc_uint16_t *tid_vtable; + isc_uint16_t *tid_pool; + isc_uint16_t tid_a1, tid_a2, tid_a3; + isc_uint16_t tid_c1, tid_c2, tid_c3; + isc_uint16_t tid_state2; + isc_boolean_t tid_usepool; +} dns_tid_t; typedef struct dns_qid { unsigned int magic; unsigned int qid_nbuckets; /*%< hash table size */ unsigned int qid_increment; /*%< id increment on collision */ isc_mutex_t lock; - dns_nsid_t nsid; + dns_tid_t tid; dns_displist_t *qid_table; /*%< the table itself */ } dns_qid_t; @@ -70,6 +72,7 @@ struct dns_dispatchmgr { isc_mem_t *mctx; dns_acl_t *blackhole; dns_portlist_t *portlist; + dns_stats_t *stats; /* Locked by "lock". */ isc_mutex_t lock; @@ -169,7 +172,7 @@ static void destroy_disp(isc_task_t *task, isc_event_t *event); static void udp_recv(isc_task_t *, isc_event_t *); static void tcp_recv(isc_task_t *, isc_event_t *); static void startrecv(dns_dispatch_t *); -static dns_messageid_t dns_randomid(dns_nsid_t *); +static dns_messageid_t dns_randomid(dns_tid_t *); static isc_uint32_t dns_hash(dns_qid_t *, isc_sockaddr_t *, dns_messageid_t); static void free_buffer(dns_dispatch_t *disp, void *buf, unsigned int len); static void *allocate_udp_buffer(dns_dispatch_t *disp); @@ -193,9 +196,10 @@ static isc_result_t qid_allocate(dns_dispatchmgr_t *mgr, unsigned int buckets, unsigned int increment, isc_boolean_t usepool, dns_qid_t **qidp); static void qid_destroy(isc_mem_t *mctx, dns_qid_t **qidp); -static isc_uint16_t nsid_next(dns_nsid_t *nsid); -static isc_result_t nsid_init(isc_mem_t *mctx, dns_nsid_t *nsid, isc_boolean_t usepool); -static void nsid_destroy(isc_mem_t *mctx, dns_nsid_t *nsid); +static isc_uint16_t tid_next(dns_tid_t *tid); +static isc_result_t tid_init(isc_mem_t *mctx, dns_tid_t *tid, + isc_boolean_t usepool); +static void tid_destroy(isc_mem_t *mctx, dns_tid_t *tid); #define LVL(x) ISC_LOG_DEBUG(x) @@ -280,10 +284,10 @@ request_log(dns_dispatch_t *disp, dns_dispentry_t *resp, * framework for this purpose. */ static in_port_t -get_randomport(dns_nsid_t *nsid) { +get_randomport(dns_tid_t *tid) { isc_uint16_t p; - p = nsid_next(nsid); + p = tid_next(tid); /* XXX: should the range be configurable? */ return ((in_port_t)(1024 + (p % (65535 - 1024)))); @@ -293,10 +297,10 @@ get_randomport(dns_nsid_t *nsid) { * Return an unpredictable message ID. */ static dns_messageid_t -dns_randomid(dns_nsid_t *nsid) { +dns_randomid(dns_tid_t *tid) { isc_uint32_t id; - id = nsid_next(nsid); + id = tid_next(tid); return ((dns_messageid_t)id); } @@ -596,7 +600,7 @@ udp_recv(isc_task_t *task, isc_event_t *ev_in) { isc_netaddr_fromsockaddr(&netaddr, &ev->address); if (disp->mgr->blackhole != NULL && dns_acl_match(&netaddr, NULL, disp->mgr->blackhole, - NULL, &match, NULL) == ISC_R_SUCCESS && + NULL, &match, NULL) == ISC_R_SUCCESS && match > 0) { if (isc_log_wouldlog(dns_lctx, LVL(10))) { @@ -650,9 +654,11 @@ udp_recv(isc_task_t *task, isc_event_t *ev_in) { bucket, (resp == NULL ? "not found" : "found")); if (resp == NULL) { + dns_generalstats_increment(mgr->stats, + dns_resstatscounter_mismatch); free_buffer(disp, ev->region.base, ev->region.length); goto unlock; - } + } /* * Now that we have the original dispatch the query was sent @@ -662,7 +668,7 @@ udp_recv(isc_task_t *task, isc_event_t *ev_in) { if (disp != resp->disp) { isc_sockaddr_t a1; isc_sockaddr_t a2; - + /* * Check that the socket types and ports match. */ @@ -675,11 +681,11 @@ udp_recv(isc_task_t *task, isc_event_t *ev_in) { /* * If both dispatches are bound to an address then fail as - * the addresses can't be equal (enforced by the IP stack). + * the addresses can't be equal (enforced by the IP stack). * * Note under Linux a packet can be sent out via IPv4 socket * and the response be received via a IPv6 socket. - * + * * Requests sent out via IPv6 should always come back in * via IPv6. */ @@ -800,7 +806,7 @@ tcp_recv(isc_task_t *task, isc_event_t *ev_in) { switch (tcpmsg->result) { case ISC_R_CANCELED: break; - + case ISC_R_EOF: dispatch_log(disp, LVL(90), "shutting down on EOF"); do_cancel(disp); @@ -1054,6 +1060,9 @@ destroy_mgr(dns_dispatchmgr_t **mgrp) { if (mgr->portlist != NULL) dns_portlist_detach(&mgr->portlist); + if (mgr->stats != NULL) + dns_stats_detach(&mgr->stats); + isc_mem_put(mctx, mgr, sizeof(dns_dispatchmgr_t)); isc_mem_detach(&mctx); } @@ -1108,6 +1117,7 @@ dns_dispatchmgr_create(isc_mem_t *mctx, isc_entropy_t *entropy, mgr->blackhole = NULL; mgr->portlist = NULL; + mgr->stats = NULL; result = isc_mutex_init(&mgr->lock); if (result != ISC_R_SUCCESS) @@ -1303,6 +1313,15 @@ dns_dispatchmgr_destroy(dns_dispatchmgr_t **mgrp) { destroy_mgr(&mgr); } +void +dns_dispatchmgr_setstats(dns_dispatchmgr_t *mgr, dns_stats_t *stats) { + REQUIRE(VALID_DISPATCHMGR(mgr)); + REQUIRE(ISC_LIST_EMPTY(mgr->list)); + REQUIRE(mgr->stats == NULL); + + dns_stats_attach(stats, &mgr->stats); +} + static isc_boolean_t blacklisted(dns_dispatchmgr_t *mgr, isc_socket_t *sock, isc_sockaddr_t *sockaddrp) @@ -1439,7 +1458,7 @@ qid_allocate(dns_dispatchmgr_t *mgr, unsigned int buckets, return (ISC_R_NOMEMORY); } - result = nsid_init(mgr->mctx, &qid->nsid, usepool); + result = tid_init(mgr->mctx, &qid->tid, usepool); if (result != ISC_R_SUCCESS) { isc_mem_put(mgr->mctx, qid->qid_table, buckets * sizeof(dns_displist_t)); @@ -1449,7 +1468,7 @@ qid_allocate(dns_dispatchmgr_t *mgr, unsigned int buckets, result = isc_mutex_init(&qid->lock); if (result != ISC_R_SUCCESS) { - nsid_destroy(mgr->mctx, &qid->nsid); + tid_destroy(mgr->mctx, &qid->tid); isc_mem_put(mgr->mctx, qid->qid_table, buckets * sizeof(dns_displist_t)); isc_mem_put(mgr->mctx, qid, sizeof(*qid)); @@ -1477,7 +1496,7 @@ qid_destroy(isc_mem_t *mctx, dns_qid_t **qidp) { *qidp = NULL; qid->magic = 0; - nsid_destroy(mctx, &qid->nsid); + tid_destroy(mctx, &qid->tid); isc_mem_put(mctx, qid->qid_table, qid->qid_nbuckets * sizeof(dns_displist_t)); DESTROYLOCK(&qid->lock); @@ -1795,7 +1814,7 @@ dispatch_createudp(dns_dispatchmgr_t *mgr, isc_socketmgr_t *sockmgr, getsocket: if ((attributes & DNS_DISPATCHATTR_RANDOMPORT) != 0) { isc_sockaddr_setport(&localaddr_bound, - get_randomport(&mgr->qid->nsid)); + get_randomport(&mgr->qid->tid)); if (blacklisted(mgr, NULL, &localaddr_bound)) { if (++k == 1024) attributes &= ~DNS_DISPATCHATTR_RANDOMPORT; @@ -1807,7 +1826,7 @@ dispatch_createudp(dns_dispatchmgr_t *mgr, isc_socketmgr_t *sockmgr, attributes &= ~DNS_DISPATCHATTR_RANDOMPORT; goto getsocket; } - } else + } else result = create_socket(sockmgr, localaddr, &sock); if (result != ISC_R_SUCCESS) goto deallocate_dispatch; @@ -1969,7 +1988,7 @@ dns_dispatch_addresponse(dns_dispatch_t *disp, isc_sockaddr_t *dest, */ qid = DNS_QID(disp); LOCK(&qid->lock); - id = dns_randomid(&qid->nsid); + id = dns_randomid(&qid->tid); bucket = dns_hash(qid, dest, id); ok = ISC_FALSE; for (i = 0; i < 64; i++) { @@ -2294,7 +2313,7 @@ dns_dispatch_importrecv(dns_dispatch_t *disp, isc_event_t *event) { newsevent->timestamp = sevent->timestamp; newsevent->pktinfo = sevent->pktinfo; newsevent->attributes = sevent->attributes; - + isc_task_send(disp->task, ISC_EVENT_PTR(&newsevent)); } @@ -2381,26 +2400,26 @@ dns_dispatchmgr_dump(dns_dispatchmgr_t *mgr) { * the pool. */ -#define NSID_SHUFFLE_TABLE_SIZE 100 /* Suggested by Knuth */ +#define TID_SHUFFLE_TABLE_SIZE 100 /* Suggested by Knuth */ /* * Pick one of the next 4096 IDs in the pool. * There is a tradeoff here between randomness and how often and ID is reused. */ -#define NSID_LOOKAHEAD 4096 /* Must be a power of 2 */ -#define NSID_SHUFFLE_ONLY 1 /* algorithm 1 */ -#define NSID_USE_POOL 2 /* algorithm 2 */ -#define NSID_HASHSHIFT 3 -#define NSID_HASHROTATE(v) \ - (((v) << NSID_HASHSHIFT) | ((v) >> ((sizeof(v) * 8) - NSID_HASHSHIFT))) +#define TID_LOOKAHEAD 4096 /* Must be a power of 2 */ +#define TID_SHUFFLE_ONLY 1 /* algorithm 1 */ +#define TID_USE_POOL 2 /* algorithm 2 */ +#define TID_HASHSHIFT 3 +#define TID_HASHROTATE(v) \ + (((v) << TID_HASHSHIFT) | ((v) >> ((sizeof(v) * 8) - TID_HASHSHIFT))) -static isc_uint32_t nsid_hash_state; +static isc_uint32_t tid_hash_state; /* * Keep a running hash of various bits of data that we'll use to * stir the ID pool or perturb the ID generator */ static void -nsid_hash(void *data, size_t len) { +tid_hash(void *data, size_t len) { unsigned char *p = data; /* * Hash function similar to the one we use for hashing names. @@ -2412,12 +2431,12 @@ nsid_hash(void *data, size_t len) { * fast. */ /* - * We don't care about locking access to nsid_hash_state. + * We don't care about locking access to tid_hash_state. * In fact races make the result even more non deteministic. */ while (len-- > 0U) { - nsid_hash_state = NSID_HASHROTATE(nsid_hash_state); - nsid_hash_state += *p++; + tid_hash_state = TID_HASHROTATE(tid_hash_state); + tid_hash_state += *p++; } } @@ -2426,7 +2445,7 @@ nsid_hash(void *data, size_t len) { * in order of increasing serial correlation bounds (so trim from * the end). */ -static const isc_uint16_t nsid_multiplier_table[] = { +static const isc_uint16_t tid_multiplier_table[] = { 17565, 25013, 11733, 19877, 23989, 23997, 24997, 25421, 26781, 27413, 35901, 35917, 35973, 36229, 38317, 38437, 39941, 40493, 41853, 46317, 50581, 51429, 53453, 53805, @@ -2562,159 +2581,168 @@ static const isc_uint16_t nsid_multiplier_table[] = { 10853, 1453, 18069, 21693, 30573, 36261, 37421, 42533 }; -#define NSID_MULT_TABLE_SIZE \ - ((sizeof nsid_multiplier_table)/(sizeof nsid_multiplier_table[0])) -#define NSID_RANGE_MASK (NSID_LOOKAHEAD - 1) -#define NSID_POOL_MASK 0xFFFF /* used to wrap the pool index */ -#define NSID_SHUFFLE_ONLY 1 -#define NSID_USE_POOL 2 +#define TID_MULT_TABLE_SIZE \ + ((sizeof tid_multiplier_table) / \ + (sizeof tid_multiplier_table[0])) +#define TID_RANGE_MASK (TID_LOOKAHEAD - 1) +#define TID_POOL_MASK 0xFFFF /* used to wrap the pool index */ +#define TID_SHUFFLE_ONLY 1 +#define TID_USE_POOL 2 static isc_uint16_t -nsid_next(dns_nsid_t *nsid) { - isc_uint16_t id, compressed_hash; +tid_next(dns_tid_t *tid) { + isc_uint16_t id, compressed_hash; isc_uint16_t j; - compressed_hash = ((nsid_hash_state >> 16) ^ - (nsid_hash_state)) & 0xFFFF; - - if (nsid->nsid_usepool) { - isc_uint16_t pick; - - pick = compressed_hash & NSID_RANGE_MASK; - pick = (nsid->nsid_state + pick) & NSID_POOL_MASK; - id = nsid->nsid_pool[pick]; - if (pick != 0) { - /* Swap two IDs to stir the pool */ - nsid->nsid_pool[pick] = - nsid->nsid_pool[nsid->nsid_state]; - nsid->nsid_pool[nsid->nsid_state] = id; - } - - /* increment the base pointer into the pool */ - if (nsid->nsid_state == 65535) - nsid->nsid_state = 0; - else - nsid->nsid_state++; + compressed_hash = ((tid_hash_state >> 16) ^ + (tid_hash_state)) & 0xFFFF; + + if (tid->tid_usepool) { + isc_uint16_t pick; + + pick = compressed_hash & TID_RANGE_MASK; + pick = (tid->tid_state + pick) & TID_POOL_MASK; + id = tid->tid_pool[pick]; + if (pick != 0) { + /* Swap two IDs to stir the pool */ + tid->tid_pool[pick] = + tid->tid_pool[tid->tid_state]; + tid->tid_pool[tid->tid_state] = id; + } + + /* increment the base pointer into the pool */ + if (tid->tid_state == 65535) + tid->tid_state = 0; + else + tid->tid_state++; } else { /* * This is the original Algorithm B - * j = ((u_long) NSID_SHUFFLE_TABLE_SIZE * nsid_state2) >> 16; + * j = ((u_long) + * QUERID_SHUFFLE_TABLE_SIZE * tid_state2) >> 16; * * We'll perturb it with some random stuff ... */ - j = ((isc_uint32_t) NSID_SHUFFLE_TABLE_SIZE * - (nsid->nsid_state2 ^ compressed_hash)) >> 16; - nsid->nsid_state2 = id = nsid->nsid_vtable[j]; - nsid->nsid_state = (((isc_uint32_t) nsid->nsid_a1 * nsid->nsid_state) + - nsid->nsid_c1) & 0xFFFF; - nsid->nsid_vtable[j] = nsid->nsid_state; + j = ((isc_uint32_t) TID_SHUFFLE_TABLE_SIZE * + (tid->tid_state2 ^ compressed_hash)) >> 16; + tid->tid_state2 = id = tid->tid_vtable[j]; + tid->tid_state = (((isc_uint32_t) tid->tid_a1 * + tid->tid_state) + + tid->tid_c1) & 0xFFFF; + tid->tid_vtable[j] = tid->tid_state; } - /* Now lets obfuscate ... */ - id = (((isc_uint32_t) nsid->nsid_a2 * id) + nsid->nsid_c2) & 0xFFFF; - id = (((isc_uint32_t) nsid->nsid_a3 * id) + nsid->nsid_c3) & 0xFFFF; + /* Now lets obfuscate ... */ + id = (((isc_uint32_t) tid->tid_a2 * id) + + tid->tid_c2) & 0xFFFF; + id = (((isc_uint32_t) tid->tid_a3 * id) + + tid->tid_c3) & 0xFFFF; - return (id); + return (id); } static isc_result_t -nsid_init(isc_mem_t *mctx, dns_nsid_t *nsid, isc_boolean_t usepool) { - isc_time_t now; - pid_t mypid; - isc_uint16_t a1ndx, a2ndx, a3ndx, c1ndx, c2ndx, c3ndx; - int i; +tid_init(isc_mem_t *mctx, dns_tid_t *tid, isc_boolean_t usepool) { + isc_time_t now; + pid_t mypid; + isc_uint16_t a1ndx, a2ndx, a3ndx, c1ndx, c2ndx, c3ndx; + int i; isc_time_now(&now); - mypid = getpid(); - - /* Initialize the state */ - memset(nsid, 0, sizeof(*nsid)); - nsid_hash(&now, sizeof now); - nsid_hash(&mypid, sizeof mypid); - - /* - * Select our random number generators and initial seed. - * We could really use more random bits at this point, - * but we'll try to make a silk purse out of a sows ear ... - */ - /* generator 1 */ - a1ndx = ((isc_uint32_t) NSID_MULT_TABLE_SIZE * - (nsid_hash_state & 0xFFFF)) >> 16; - nsid->nsid_a1 = nsid_multiplier_table[a1ndx]; - c1ndx = (nsid_hash_state >> 9) & 0x7FFF; - nsid->nsid_c1 = 2 * c1ndx + 1; - - /* generator 2, distinct from 1 */ - a2ndx = ((isc_uint32_t) (NSID_MULT_TABLE_SIZE - 1) * - ((nsid_hash_state >> 10) & 0xFFFF)) >> 16; - if (a2ndx >= a1ndx) - a2ndx++; - nsid->nsid_a2 = nsid_multiplier_table[a2ndx]; - c2ndx = nsid_hash_state % 32767; - if (c2ndx >= c1ndx) - c2ndx++; - nsid->nsid_c2 = 2*c2ndx + 1; - - /* generator 3, distinct from 1 and 2 */ - a3ndx = ((isc_uint32_t) (NSID_MULT_TABLE_SIZE - 2) * - ((nsid_hash_state >> 20) & 0xFFFF)) >> 16; - if (a3ndx >= a1ndx || a3ndx >= a2ndx) - a3ndx++; - if (a3ndx >= a1ndx && a3ndx >= a2ndx) - a3ndx++; - nsid->nsid_a3 = nsid_multiplier_table[a3ndx]; - c3ndx = nsid_hash_state % 32766; - if (c3ndx >= c1ndx || c3ndx >= c2ndx) - c3ndx++; - if (c3ndx >= c1ndx && c3ndx >= c2ndx) - c3ndx++; - nsid->nsid_c3 = 2*c3ndx + 1; - - nsid->nsid_state = - ((nsid_hash_state >> 16) ^ (nsid_hash_state)) & 0xFFFF; - - nsid->nsid_usepool = usepool; - if (nsid->nsid_usepool) { - nsid->nsid_pool = isc_mem_get(mctx, 0x10000 * sizeof(isc_uint16_t)); - if (nsid->nsid_pool == NULL) + mypid = getpid(); + + /* Initialize the state */ + memset(tid, 0, sizeof(*tid)); + tid_hash(&now, sizeof now); + tid_hash(&mypid, sizeof mypid); + + /* + * Select our random number generators and initial seed. + * We could really use more random bits at this point, + * but we'll try to make a silk purse out of a sows ear ... + */ + /* generator 1 */ + a1ndx = ((isc_uint32_t) TID_MULT_TABLE_SIZE * + (tid_hash_state & 0xFFFF)) >> 16; + tid->tid_a1 = tid_multiplier_table[a1ndx]; + c1ndx = (tid_hash_state >> 9) & 0x7FFF; + tid->tid_c1 = 2 * c1ndx + 1; + + /* generator 2, distinct from 1 */ + a2ndx = ((isc_uint32_t) (TID_MULT_TABLE_SIZE - 1) * + ((tid_hash_state >> 10) & 0xFFFF)) >> 16; + if (a2ndx >= a1ndx) + a2ndx++; + tid->tid_a2 = tid_multiplier_table[a2ndx]; + c2ndx = tid_hash_state % 32767; + if (c2ndx >= c1ndx) + c2ndx++; + tid->tid_c2 = 2*c2ndx + 1; + + /* generator 3, distinct from 1 and 2 */ + a3ndx = ((isc_uint32_t) (TID_MULT_TABLE_SIZE - 2) * + ((tid_hash_state >> 20) & 0xFFFF)) >> 16; + if (a3ndx >= a1ndx || a3ndx >= a2ndx) + a3ndx++; + if (a3ndx >= a1ndx && a3ndx >= a2ndx) + a3ndx++; + tid->tid_a3 = tid_multiplier_table[a3ndx]; + c3ndx = tid_hash_state % 32766; + if (c3ndx >= c1ndx || c3ndx >= c2ndx) + c3ndx++; + if (c3ndx >= c1ndx && c3ndx >= c2ndx) + c3ndx++; + tid->tid_c3 = 2*c3ndx + 1; + + tid->tid_state = + ((tid_hash_state >> 16) ^ (tid_hash_state)) & 0xFFFF; + + tid->tid_usepool = usepool; + if (tid->tid_usepool) { + tid->tid_pool = isc_mem_get(mctx, + 0x10000 * sizeof(isc_uint16_t)); + if (tid->tid_pool == NULL) return (ISC_R_NOMEMORY); - for (i = 0; ; i++) { - nsid->nsid_pool[i] = nsid->nsid_state; - nsid->nsid_state = - (((u_long) nsid->nsid_a1 * nsid->nsid_state) + - nsid->nsid_c1) & 0xFFFF; - if (i == 0xFFFF) - break; - } + for (i = 0; ; i++) { + tid->tid_pool[i] = tid->tid_state; + tid->tid_state = + (((u_long) tid->tid_a1 * + tid->tid_state) + + tid->tid_c1) & 0xFFFF; + if (i == 0xFFFF) + break; + } } else { - nsid->nsid_vtable = isc_mem_get(mctx, NSID_SHUFFLE_TABLE_SIZE * + tid->tid_vtable = isc_mem_get(mctx, TID_SHUFFLE_TABLE_SIZE * (sizeof(isc_uint16_t)) ); - if (nsid->nsid_vtable == NULL) + if (tid->tid_vtable == NULL) return (ISC_R_NOMEMORY); - for (i = 0; i < NSID_SHUFFLE_TABLE_SIZE; i++) { - nsid->nsid_vtable[i] = nsid->nsid_state; - nsid->nsid_state = - (((isc_uint32_t) nsid->nsid_a1 * nsid->nsid_state) + - nsid->nsid_c1) & 0xFFFF; + for (i = 0; i < TID_SHUFFLE_TABLE_SIZE; i++) { + tid->tid_vtable[i] = tid->tid_state; + tid->tid_state = + (((isc_uint32_t) tid->tid_a1 * + tid->tid_state) + + tid->tid_c1) & 0xFFFF; } - nsid->nsid_state2 = nsid->nsid_state; - } + tid->tid_state2 = tid->tid_state; + } return (ISC_R_SUCCESS); } static void -nsid_destroy(isc_mem_t *mctx, dns_nsid_t *nsid) { - if (nsid->nsid_usepool) - isc_mem_put(mctx, nsid->nsid_pool, +tid_destroy(isc_mem_t *mctx, dns_tid_t *tid) { + if (tid->tid_usepool) + isc_mem_put(mctx, tid->tid_pool, 0x10000 * sizeof(isc_uint16_t)); else - isc_mem_put(mctx, nsid->nsid_vtable, - NSID_SHUFFLE_TABLE_SIZE * (sizeof(isc_uint16_t)) ); - memset(nsid, 0, sizeof(*nsid)); + isc_mem_put(mctx, tid->tid_vtable, + TID_SHUFFLE_TABLE_SIZE * + (sizeof(isc_uint16_t)) ); + memset(tid, 0, sizeof(*tid)); } void dns_dispatch_hash(void *data, size_t len) { - nsid_hash(data, len); + tid_hash(data, len); } diff --git a/lib/dns/dst_api.c b/lib/dns/dst_api.c index 0dfadb48..f36ad205 100644 --- a/lib/dns/dst_api.c +++ b/lib/dns/dst_api.c @@ -1,5 +1,5 @@ /* - * Portions Copyright (C) 2004-2007 Internet Systems Consortium, Inc. ("ISC") + * Portions Copyright (C) 2004-2008 Internet Systems Consortium, Inc. ("ISC") * Portions Copyright (C) 1999-2003 Internet Software Consortium. * * Permission to use, copy, modify, and/or distribute this software for any @@ -31,7 +31,7 @@ /* * Principal Author: Brian Wellington - * $Id: dst_api.c,v 1.11 2007/08/28 07:20:42 tbox Exp $ + * $Id: dst_api.c,v 1.11.92.2 2008/03/31 23:46:42 tbox Exp $ */ /*! \file */ @@ -162,6 +162,7 @@ dst_lib_init(isc_mem_t *mctx, isc_entropy_t *ectx, unsigned int eflags) { NULL, &dst__memory_pool, 0); if (result != ISC_R_SUCCESS) return (result); + isc_mem_setname(dst__memory_pool, "dst", NULL); isc_mem_setdestroycheck(dst__memory_pool, ISC_FALSE); #else isc_mem_attach(mctx, &dst__memory_pool); diff --git a/lib/dns/gssapi_link.c b/lib/dns/gssapi_link.c index b37b39e9..349826ff 100644 --- a/lib/dns/gssapi_link.c +++ b/lib/dns/gssapi_link.c @@ -1,5 +1,5 @@ /* - * Copyright (C) 2004-2007 Internet Systems Consortium, Inc. ("ISC") + * Copyright (C) 2004-2008 Internet Systems Consortium, Inc. ("ISC") * Copyright (C) 2000-2002 Internet Software Consortium. * * Permission to use, copy, modify, and/or distribute this software for any @@ -16,7 +16,7 @@ */ /* - * $Id: gssapi_link.c,v 1.7 2007/06/19 23:47:16 tbox Exp $ + * $Id: gssapi_link.c,v 1.7.128.3 2008/04/03 06:08:26 tbox Exp $ */ #include @@ -174,7 +174,8 @@ gssapi_sign(dst_context_t *dctx, isc_buffer_t *sig) { * allocated space. */ isc_buffer_putmem(sig, gsig.value, gsig.length); - gss_release_buffer(&minor, &gsig); + if (gsig.length != 0) + gss_release_buffer(&minor, &gsig); return (ISC_R_SUCCESS); } @@ -291,6 +292,7 @@ static dst_func_t gssapi_functions = { NULL, /*%< tofile */ NULL, /*%< parse */ NULL, /*%< cleanup */ + NULL }; isc_result_t diff --git a/lib/dns/gssapictx.c b/lib/dns/gssapictx.c index 195a2b63..614d88f7 100644 --- a/lib/dns/gssapictx.c +++ b/lib/dns/gssapictx.c @@ -15,7 +15,7 @@ * PERFORMANCE OF THIS SOFTWARE. */ -/* $Id: gssapictx.c,v 1.8.128.2 2008/01/22 23:27:35 tbox Exp $ */ +/* $Id: gssapictx.c,v 1.8.128.4 2008/04/03 06:08:26 tbox Exp $ */ #include @@ -175,11 +175,13 @@ log_cred(const gss_cred_id_t cred) { } if (gret == GSS_S_COMPLETE) { - gret = gss_release_buffer(&minor, &gbuffer); - if (gret != GSS_S_COMPLETE) - gss_log(3, "failed gss_release_buffer: %s", - gss_error_tostring(gret, minor, buf, - sizeof(buf))); + if (gbuffer.length != 0) { + gret = gss_release_buffer(&minor, &gbuffer); + if (gret != GSS_S_COMPLETE) + gss_log(3, "failed gss_release_buffer: %s", + gss_error_tostring(gret, minor, buf, + sizeof(buf))); + } } gret = gss_release_name(&minor, &gname); @@ -459,7 +461,7 @@ dst_gssapi_initctx(dns_name_t *name, isc_buffer_t *intoken, isc_buffer_t namebuf; gss_name_t gname; OM_uint32 gret, minor, ret_flags, flags; - gss_buffer_desc gintoken, *gintokenp, gouttoken; + gss_buffer_desc gintoken, *gintokenp, gouttoken = GSS_C_EMPTY_BUFFER; isc_result_t result; gss_buffer_desc gnamebuf; unsigned char array[DNS_NAME_MAXTEXT + 1]; @@ -507,11 +509,15 @@ dst_gssapi_initctx(dns_name_t *name, isc_buffer_t *intoken, * MUTUAL and INTEG flags, fail if either not set. */ - GBUFFER_TO_REGION(gouttoken, r); - RETERR(isc_buffer_copyregion(outtoken, &r)); - + /* + * RFC 2744 states the a valid output token has a non-zero length. + */ + if (gouttoken.length != 0) { + GBUFFER_TO_REGION(gouttoken, r); + RETERR(isc_buffer_copyregion(outtoken, &r)); + (void)gss_release_buffer(&minor, &gouttoken); + } (void)gss_release_name(&minor, &gname); - (void)gss_release_buffer(&minor, &gouttoken); if (gret == GSS_S_COMPLETE) result = ISC_R_SUCCESS; @@ -539,7 +545,8 @@ dst_gssapi_acceptctx(gss_cred_id_t cred, #ifdef GSSAPI isc_region_t r; isc_buffer_t namebuf; - gss_buffer_desc gnamebuf, gintoken, gouttoken; + gss_buffer_desc gnamebuf = GSS_C_EMPTY_BUFFER, gintoken, + gouttoken = GSS_C_EMPTY_BUFFER; OM_uint32 gret, minor; gss_ctx_id_t context = GSS_C_NO_CONTEXT; gss_name_t gname = NULL; @@ -593,6 +600,7 @@ dst_gssapi_acceptctx(gss_cred_id_t cred, RETERR(isc_buffer_allocate(mctx, outtoken, gouttoken.length)); GBUFFER_TO_REGION(gouttoken, r); RETERR(isc_buffer_copyregion(*outtoken, &r)); + (void)gss_release_buffer(&minor, &gouttoken); } if (gret == GSS_S_COMPLETE) { @@ -624,11 +632,13 @@ dst_gssapi_acceptctx(gss_cred_id_t cred, RETERR(dns_name_fromtext(principal, &namebuf, dns_rootname, ISC_FALSE, NULL)); - gret = gss_release_buffer(&minor, &gnamebuf); - if (gret != GSS_S_COMPLETE) - gss_log(3, "failed gss_release_buffer: %s", - gss_error_tostring(gret, minor, buf, - sizeof(buf))); + if (gnamebuf.length != 0) { + gret = gss_release_buffer(&minor, &gnamebuf); + if (gret != GSS_S_COMPLETE) + gss_log(3, "failed gss_release_buffer: %s", + gss_error_tostring(gret, minor, buf, + sizeof(buf))); + } } *ctxout = context; @@ -685,7 +695,8 @@ char * gss_error_tostring(isc_uint32_t major, isc_uint32_t minor, char *buf, size_t buflen) { #ifdef GSSAPI - gss_buffer_desc msg_minor, msg_major; + gss_buffer_desc msg_minor = GSS_C_EMPTY_BUFFER, + msg_major = GSS_C_EMPTY_BUFFER; OM_uint32 msg_ctx, minor_stat; /* Handle major status */ @@ -701,8 +712,10 @@ gss_error_tostring(isc_uint32_t major, isc_uint32_t minor, snprintf(buf, buflen, "GSSAPI error: Major = %s, Minor = %s.", (char *)msg_major.value, (char *)msg_minor.value); - (void)gss_release_buffer(&minor_stat, &msg_major); - (void)gss_release_buffer(&minor_stat, &msg_minor); + if (msg_major.length != 0) + (void)gss_release_buffer(&minor_stat, &msg_major); + if (msg_minor.length != 0) + (void)gss_release_buffer(&minor_stat, &msg_minor); return(buf); #else snprintf(buf, buflen, "GSSAPI error: Major = %u, Minor = %u.", diff --git a/lib/dns/include/dns/adb.h b/lib/dns/include/dns/adb.h index 0e8fc997..eaf2e378 100644 --- a/lib/dns/include/dns/adb.h +++ b/lib/dns/include/dns/adb.h @@ -1,5 +1,5 @@ /* - * Copyright (C) 2004-2007 Internet Systems Consortium, Inc. ("ISC") + * Copyright (C) 2004-2008 Internet Systems Consortium, Inc. ("ISC") * Copyright (C) 1999-2003 Internet Software Consortium. * * Permission to use, copy, modify, and/or distribute this software for any @@ -15,7 +15,7 @@ * PERFORMANCE OF THIS SOFTWARE. */ -/* $Id: adb.h,v 1.83 2007/06/19 23:47:16 tbox Exp $ */ +/* $Id: adb.h,v 1.83.128.2 2008/04/03 06:20:34 tbox Exp $ */ #ifndef DNS_ADB_H #define DNS_ADB_H 1 @@ -99,7 +99,7 @@ ISC_LANG_BEGINDECLS typedef struct dns_adbname dns_adbname_t; -/*! +/*! *\brief * Represents a lookup for a single name. * @@ -220,7 +220,7 @@ struct dns_adbaddrinfo { ISC_LINK(dns_adbaddrinfo_t) publink; }; -/*!< +/*!< * The event sent to the caller task is just a plain old isc_event_t. It * contains no data other than a simple status, passed in the "type" field * to indicate that another address resolved, or all partially resolved @@ -520,7 +520,7 @@ void dns_adb_adjustsrtt(dns_adb_t *adb, dns_adbaddrinfo_t *addr, unsigned int rtt, unsigned int factor); /*%< - * Mix the round trip time into the existing smoothed rtt. + * Mix the round trip time into the existing smoothed rtt. * The formula used * (where srtt is the existing rtt value, and rtt and factor are arguments to @@ -623,13 +623,12 @@ void dns_adb_flushname(dns_adb_t *adb, dns_name_t *name); /*%< * Flush 'name' from the adb cache. - * + * * Requires: *\li 'adb' is valid. *\li 'name' is valid. */ - ISC_LANG_ENDDECLS #endif /* DNS_ADB_H */ diff --git a/lib/dns/include/dns/db.h b/lib/dns/include/dns/db.h index fb87cf66..8ea81fd5 100644 --- a/lib/dns/include/dns/db.h +++ b/lib/dns/include/dns/db.h @@ -1,5 +1,5 @@ /* - * Copyright (C) 2004-2007 Internet Systems Consortium, Inc. ("ISC") + * Copyright (C) 2004-2008 Internet Systems Consortium, Inc. ("ISC") * Copyright (C) 1999-2003 Internet Software Consortium. * * Permission to use, copy, modify, and/or distribute this software for any @@ -15,7 +15,7 @@ * PERFORMANCE OF THIS SOFTWARE. */ -/* $Id: db.h,v 1.89 2007/06/18 23:47:42 tbox Exp $ */ +/* $Id: db.h,v 1.89.128.2 2008/04/03 06:20:34 tbox Exp $ */ #ifndef DNS_DB_H #define DNS_DB_H 1 @@ -147,7 +147,8 @@ typedef struct dns_dbmethods { void (*settask)(dns_db_t *db, isc_task_t *); isc_result_t (*getoriginnode)(dns_db_t *db, dns_dbnode_t **nodep); void (*transfernode)(dns_db_t *db, dns_dbnode_t **sourcep, - dns_dbnode_t **targetp); + dns_dbnode_t **targetp); + dns_stats_t *(*getrrsetstats)(dns_db_t *db); } dns_dbmethods_t; typedef isc_result_t @@ -155,7 +156,7 @@ typedef isc_result_t dns_dbtype_t type, dns_rdataclass_t rdclass, unsigned int argc, char *argv[], void *driverarg, dns_db_t **dbp); - + #define DNS_DB_MAGIC ISC_MAGIC('D','N','S','D') #define DNS_DB_VALID(db) ISC_MAGIC_VALID(db, DNS_DB_MAGIC) @@ -788,7 +789,7 @@ dns_db_find(dns_db_t *db, dns_name_t *name, dns_dbversion_t *version, * the negative caching proof. * * \li #DNS_R_EMPTYNAME The name exists but there is - * no data at the name. + * no data at the name. * * \li #DNS_R_COVERINGNSEC The returned data is a NSEC * that potentially covers 'name'. @@ -886,8 +887,8 @@ dns_db_detachnode(dns_db_t *db, dns_dbnode_t **nodep); */ void -dns_db_transfernode(dns_db_t *db, dns_dbnode_t **sourcep, - dns_dbnode_t **targetp); +dns_db_transfernode(dns_db_t *db, dns_dbnode_t **sourcep, + dns_dbnode_t **targetp); /*%< * Transfer a node between pointer. * @@ -1317,6 +1318,21 @@ dns_db_getoriginnode(dns_db_t *db, dns_dbnode_t **nodep); * \li #ISC_R_NOTFOUND - the DB implementation does not support this feature. */ +dns_stats_t * +dns_db_getrrsetstats(dns_db_t *db); +/*%< + * Get statistics information counting RRsets stored in the DB, when available. + * The statistics may not be available depending on the DB implementation. + * + * Requires: + * + * \li 'db' is a valid database (zone or cache). + * + * Returns: + * \li when available, a pointer to a statistics object created by + * dns_rdatasetstats_create(); otherwise NULL. + */ + ISC_LANG_ENDDECLS #endif /* DNS_DB_H */ diff --git a/lib/dns/include/dns/dispatch.h b/lib/dns/include/dns/dispatch.h index 71922d77..9ed8a464 100644 --- a/lib/dns/include/dns/dispatch.h +++ b/lib/dns/include/dns/dispatch.h @@ -1,5 +1,5 @@ /* - * Copyright (C) 2004-2007 Internet Systems Consortium, Inc. ("ISC") + * Copyright (C) 2004-2008 Internet Systems Consortium, Inc. ("ISC") * Copyright (C) 1999-2003 Internet Software Consortium. * * Permission to use, copy, modify, and/or distribute this software for any @@ -15,7 +15,7 @@ * PERFORMANCE OF THIS SOFTWARE. */ -/* $Id: dispatch.h,v 1.56 2007/06/26 02:52:15 marka Exp $ */ +/* $Id: dispatch.h,v 1.56.128.2 2008/04/03 06:20:34 tbox Exp $ */ #ifndef DNS_DISPATCH_H #define DNS_DISPATCH_H 1 @@ -187,7 +187,7 @@ dns_dispatchmgr_getblackhole(dns_dispatchmgr_t *mgr); void dns_dispatchmgr_setblackportlist(dns_dispatchmgr_t *mgr, - dns_portlist_t *portlist); + dns_portlist_t *portlist); /*%< * Sets a list of UDP ports that won't be used when creating a udp * dispatch with a wildcard port. @@ -206,7 +206,20 @@ dns_dispatchmgr_getblackportlist(dns_dispatchmgr_t *mgr); *\li mgr is a valid dispatchmgr */ - +void +dns_dispatchmgr_setstats(dns_dispatchmgr_t *mgr, dns_stats_t *stats); +/*%< + * Sets statistics counter for the dispatchmgr. This function is expected to + * be called only on zone creation (when necessary). + * Once installed, it cannot be removed or replaced. Also, there is no + * interface to get the installed stats from the zone; the caller must keep the + * stats to reference (e.g. dump) it later. + * + * Requires: + *\li mgr is a valid dispatchmgr with no managed dispatch. + *\li stats is a valid statistics supporting resolver statistics counters + * (see dns/stats.h). + */ isc_result_t dns_dispatch_getudp(dns_dispatchmgr_t *mgr, isc_socketmgr_t *sockmgr, @@ -367,7 +380,7 @@ dns_dispatch_removeresponse(dns_dispentry_t **resp, *\li "resp" != NULL and "*resp" contain a value previously allocated * by dns_dispatch_addresponse(); * - *\li May only be called from within the task given as the 'task' + *\li May only be called from within the task given as the 'task' * argument to dns_dispatch_addresponse() when allocating '*resp'. */ @@ -384,7 +397,7 @@ dns_dispatch_getsocket(dns_dispatch_t *disp); *\li The socket the dispatcher is using. */ -isc_result_t +isc_result_t dns_dispatch_getlocaladdress(dns_dispatch_t *disp, isc_sockaddr_t *addrp); /*%< * Return the local address for this dispatch. @@ -395,7 +408,7 @@ dns_dispatch_getlocaladdress(dns_dispatch_t *disp, isc_sockaddr_t *addrp); *\li addrp to be non null. * * Returns: - *\li ISC_R_SUCCESS + *\li ISC_R_SUCCESS *\li ISC_R_NOTIMPLEMENTED */ @@ -421,7 +434,7 @@ dns_dispatch_changeattributes(dns_dispatch_t *disp, * new = (old & ~mask) | (attributes & mask) * \endcode * - * This function has a side effect when #DNS_DISPATCHATTR_NOLISTEN changes. + * This function has a side effect when #DNS_DISPATCHATTR_NOLISTEN changes. * When the flag becomes off, the dispatch will start receiving on the * corresponding socket. When the flag becomes on, receive events on the * corresponding socket will be canceled. diff --git a/lib/dns/include/dns/message.h b/lib/dns/include/dns/message.h index 2d487fa1..99716a35 100644 --- a/lib/dns/include/dns/message.h +++ b/lib/dns/include/dns/message.h @@ -1,5 +1,5 @@ /* - * Copyright (C) 2004-2007 Internet Systems Consortium, Inc. ("ISC") + * Copyright (C) 2004-2008 Internet Systems Consortium, Inc. ("ISC") * Copyright (C) 1999-2003 Internet Software Consortium. * * Permission to use, copy, modify, and/or distribute this software for any @@ -15,7 +15,7 @@ * PERFORMANCE OF THIS SOFTWARE. */ -/* $Id: message.h,v 1.123 2007/06/19 23:47:17 tbox Exp $ */ +/* $Id: message.h,v 1.123.128.2 2008/04/03 06:08:27 tbox Exp $ */ #ifndef DNS_MESSAGE_H #define DNS_MESSAGE_H 1 @@ -101,8 +101,12 @@ #define DNS_MESSAGEFLAG_AD 0x0020U #define DNS_MESSAGEFLAG_CD 0x0010U +/*%< EDNS0 extended message flags */ #define DNS_MESSAGEEXTFLAG_DO 0x8000U +/*%< EDNS0 extended OPT codes */ +#define DNS_OPT_NSID 0x0003 /*%< NSID opt code */ + #define DNS_MESSAGE_REPLYPRESERVE (DNS_MESSAGEFLAG_RD|DNS_MESSAGEFLAG_CD) #define DNS_MESSAGEEXTFLAG_REPLYPRESERVE (DNS_MESSAGEEXTFLAG_DO) @@ -771,7 +775,7 @@ dns_message_addname(dns_message_t *msg, dns_name_t *name, void dns_message_removename(dns_message_t *msg, dns_name_t *name, - dns_section_t section); + dns_section_t section); /*%< * Remove a existing name from a given section. * @@ -1031,7 +1035,7 @@ dns_message_setopt(dns_message_t *msg, dns_rdataset_t *opt); *\li The OPT record has either been freed or ownership of it has * been transferred to the message. * - *\li If ISC_R_SUCCESS was returned, the OPT record will be rendered + *\li If ISC_R_SUCCESS was returned, the OPT record will be rendered * when dns_message_renderend() is called. * * Returns: @@ -1315,7 +1319,7 @@ dns_message_setsortorder(dns_message_t *msg, dns_rdatasetorderfunc_t order, *\li order_arg is NULL if and only if order is NULL. */ -void +void dns_message_settimeadjust(dns_message_t *msg, int timeadjust); /*%< * Adjust the time used to sign/verify a message by timeadjust. @@ -1325,7 +1329,7 @@ dns_message_settimeadjust(dns_message_t *msg, int timeadjust); *\li msg be a valid message. */ -int +int dns_message_gettimeadjust(dns_message_t *msg); /*%< * Return the current time adjustment. diff --git a/lib/dns/include/dns/peer.h b/lib/dns/include/dns/peer.h index a28c55e5..0975a1af 100644 --- a/lib/dns/include/dns/peer.h +++ b/lib/dns/include/dns/peer.h @@ -1,5 +1,5 @@ /* - * Copyright (C) 2004-2007 Internet Systems Consortium, Inc. ("ISC") + * Copyright (C) 2004-2008 Internet Systems Consortium, Inc. ("ISC") * Copyright (C) 2000, 2001, 2003 Internet Software Consortium. * * Permission to use, copy, modify, and/or distribute this software for any @@ -15,7 +15,7 @@ * PERFORMANCE OF THIS SOFTWARE. */ -/* $Id: peer.h,v 1.31 2007/06/19 23:47:17 tbox Exp $ */ +/* $Id: peer.h,v 1.31.128.2 2008/04/03 06:08:27 tbox Exp $ */ #ifndef DNS_PEER_H #define DNS_PEER_H 1 @@ -73,10 +73,11 @@ struct dns_peer { isc_boolean_t provide_ixfr; isc_boolean_t request_ixfr; isc_boolean_t support_edns; + isc_boolean_t request_nsid; dns_name_t *key; isc_sockaddr_t *transfer_source; - isc_sockaddr_t *notify_source; - isc_sockaddr_t *query_source; + isc_sockaddr_t *notify_source; + isc_sockaddr_t *query_source; isc_uint16_t udpsize; /* recieve size */ isc_uint16_t maxudp; /* transmit size */ @@ -149,6 +150,12 @@ dns_peer_setprovideixfr(dns_peer_t *peer, isc_boolean_t newval); isc_result_t dns_peer_getprovideixfr(dns_peer_t *peer, isc_boolean_t *retval); +isc_result_t +dns_peer_setrequestnsid(dns_peer_t *peer, isc_boolean_t newval); + +isc_result_t +dns_peer_getrequestnsid(dns_peer_t *peer, isc_boolean_t *retval); + isc_result_t dns_peer_setsupportedns(dns_peer_t *peer, isc_boolean_t newval); diff --git a/lib/dns/include/dns/rdatalist.h b/lib/dns/include/dns/rdatalist.h index e2415488..b4ff817d 100644 --- a/lib/dns/include/dns/rdatalist.h +++ b/lib/dns/include/dns/rdatalist.h @@ -1,5 +1,5 @@ /* - * Copyright (C) 2004-2007 Internet Systems Consortium, Inc. ("ISC") + * Copyright (C) 2004-2008 Internet Systems Consortium, Inc. ("ISC") * Copyright (C) 1999-2001 Internet Software Consortium. * * Permission to use, copy, modify, and/or distribute this software for any @@ -15,7 +15,7 @@ * PERFORMANCE OF THIS SOFTWARE. */ -/* $Id: rdatalist.h,v 1.20 2007/06/19 23:47:17 tbox Exp $ */ +/* $Id: rdatalist.h,v 1.20.128.2 2008/04/03 06:08:27 tbox Exp $ */ #ifndef DNS_RDATALIST_H #define DNS_RDATALIST_H 1 @@ -98,6 +98,27 @@ dns_rdatalist_tordataset(dns_rdatalist_t *rdatalist, *\li #ISC_R_SUCCESS */ +isc_result_t +dns_rdatalist_fromrdataset(dns_rdataset_t *rdataset, + dns_rdatalist_t **rdatalist); +/*%< + * Point 'rdatalist' to the rdatalist in 'rdataset'. + * + * Requires: + * + *\li 'rdatalist' is a pointer to a NULL dns_rdatalist_t pointer. + * + *\li 'rdataset' is a valid rdataset associated with an rdatalist. + * + * Ensures, + * on success, + * + *\li 'rdatalist' is pointed to the rdatalist in rdataset. + * + * Returns: + *\li #ISC_R_SUCCESS + */ + ISC_LANG_ENDDECLS #endif /* DNS_RDATALIST_H */ diff --git a/lib/dns/include/dns/resolver.h b/lib/dns/include/dns/resolver.h index 5c190aa9..8c5c7afd 100644 --- a/lib/dns/include/dns/resolver.h +++ b/lib/dns/include/dns/resolver.h @@ -1,5 +1,5 @@ /* - * Copyright (C) 2004-2007 Internet Systems Consortium, Inc. ("ISC") + * Copyright (C) 2004-2008 Internet Systems Consortium, Inc. ("ISC") * Copyright (C) 1999-2001, 2003 Internet Software Consortium. * * Permission to use, copy, modify, and/or distribute this software for any @@ -15,7 +15,7 @@ * PERFORMANCE OF THIS SOFTWARE. */ -/* $Id: resolver.h,v 1.56 2007/06/18 23:47:42 tbox Exp $ */ +/* $Id: resolver.h,v 1.56.128.2 2008/04/03 06:08:27 tbox Exp $ */ #ifndef DNS_RESOLVER_H #define DNS_RESOLVER_H 1 @@ -93,7 +93,8 @@ typedef struct dns_fetchevent { #define DNS_FETCHOPT_FORWARDONLY 0x10 /*%< Only use forwarders. */ #define DNS_FETCHOPT_NOVALIDATE 0x20 /*%< Disable validation. */ #define DNS_FETCHOPT_EDNS512 0x40 /*%< Advertise a 512 byte - UDP buffer. */ + UDP buffer. */ +#define DNS_FETCHOPT_WANTNSID 0x80 /*%< Request NSID */ #define DNS_FETCHOPT_EDNSVERSIONSET 0x00800000 #define DNS_FETCHOPT_EDNSVERSIONMASK 0xff000000 @@ -470,7 +471,7 @@ dns_resolver_getclientsperquery(dns_resolver_t *resolver, isc_uint32_t *cur, isc_boolean_t dns_resolver_getzeronosoattl(dns_resolver_t *resolver); - + void dns_resolver_setzeronosoattl(dns_resolver_t *resolver, isc_boolean_t state); @@ -491,7 +492,7 @@ dns_resolver_createdispatchpool(dns_resolver_t *res, unsigned int ndisps, * Requires: * *\li 'res' is a valid resolver that has not been frozen. Also it must have - * either the _USEDISPATCHPOOL4 or _USEDISPATCHPOOL6 option. + * either the _USEDISPATCHPOOL4 or _USEDISPATCHPOOL6 option. * *\li 'taskmgr' is a valid task manager. * diff --git a/lib/dns/include/dns/stats.h b/lib/dns/include/dns/stats.h index 57fac98b..afc64242 100644 --- a/lib/dns/include/dns/stats.h +++ b/lib/dns/include/dns/stats.h @@ -15,7 +15,7 @@ * PERFORMANCE OF THIS SOFTWARE. */ -/* $Id: stats.h,v 1.13.128.2 2008/01/24 23:46:26 tbox Exp $ */ +/* $Id: stats.h,v 1.13.128.5 2008/04/08 03:46:36 each Exp $ */ #ifndef DNS_STATS_H #define DNS_STATS_H 1 @@ -25,9 +25,58 @@ #include /*% - * Query statistics counter types. + * Statistics counters. Used as dns_statscounter_t values. */ -typedef enum { +enum { + /*% + * Resolver statistics counters. + */ + dns_resstatscounter_queryv4 = 0, + dns_resstatscounter_queryv6 = 1, + dns_resstatscounter_responsev4 = 2, + dns_resstatscounter_responsev6 = 3, + dns_resstatscounter_nxdomain = 4, + dns_resstatscounter_servfail = 5, + dns_resstatscounter_formerr = 6, + dns_resstatscounter_othererror = 7, + dns_resstatscounter_edns0fail = 8, + dns_resstatscounter_mismatch = 9, + dns_resstatscounter_truncated = 10, + dns_resstatscounter_lame = 11, + dns_resstatscounter_retry = 12, + dns_resstatscounter_gluefetchv4 = 13, + dns_resstatscounter_gluefetchv6 = 14, + dns_resstatscounter_gluefetchv4fail = 15, + dns_resstatscounter_gluefetchv6fail = 16, + dns_resstatscounter_val = 17, + dns_resstatscounter_valsuccess = 18, + dns_resstatscounter_valnegsuccess = 19, + dns_resstatscounter_valfail = 20, + + dns_resstatscounter_max = 21, + + /*% + * Zone statistics counters. + */ + dns_zonestatscounter_notifyoutv4 = 0, + dns_zonestatscounter_notifyoutv6 = 1, + dns_zonestatscounter_notifyinv4 = 2, + dns_zonestatscounter_notifyinv6 = 3, + dns_zonestatscounter_notifyrej = 4, + dns_zonestatscounter_soaoutv4 = 5, + dns_zonestatscounter_soaoutv6 = 6, + dns_zonestatscounter_axfrreqv4 = 7, + dns_zonestatscounter_axfrreqv6 = 8, + dns_zonestatscounter_ixfrreqv4 = 9, + dns_zonestatscounter_ixfrreqv6 = 10, + dns_zonestatscounter_xfrsuccess = 11, + dns_zonestatscounter_xfrfail = 12, + + dns_zonestatscounter_max = 13, + + /*% + * Query statistics counters (obsolete). + */ dns_statscounter_success = 0, /*%< Successful lookup */ dns_statscounter_referral = 1, /*%< Referral result */ dns_statscounter_nxrrset = 2, /*%< NXRRSET result */ @@ -35,64 +84,242 @@ typedef enum { dns_statscounter_recursion = 4, /*%< Recursion was used */ dns_statscounter_failure = 5, /*%< Some other failure */ dns_statscounter_duplicate = 6, /*%< Duplicate query */ - dns_statscounter_dropped = 7 /*%< Duplicate query */ -} dns_statscounter_t; + dns_statscounter_dropped = 7 /*%< Duplicate query (dropped) */ +}; #define DNS_STATS_NCOUNTERS 8 +/*%< + * Flag(s) for dns_xxxstats_dump(). + */ +#define DNS_STATSDUMP_VERBOSE 0x00000001 /*%< dump 0-value counters */ + +/*%< + * (Obsoleted) + */ LIBDNS_EXTERNAL_DATA extern const char *dns_statscounter_names[]; +/*% + * Attributes for statistics counters of RRset and Rdatatype types. + * + * _OTHERTYPE + * The rdata type is not explicitly supported and the corresponding counter + * is counted for other such types, too. When this attribute is set, + * the base type is of no use. + * + * _NXRRSET + * RRset type counters only. Indicates the RRset is non existent. + * + * _NXDOMAIN + * RRset type counters only. Indicates a non existent name. When this + * attribute is set, the base type is of no use. + */ +#define DNS_RDATASTATSTYPE_ATTR_OTHERTYPE 0x0001 +#define DNS_RDATASTATSTYPE_ATTR_NXRRSET 0x0002 +#define DNS_RDATASTATSTYPE_ATTR_NXDOMAIN 0x0004 + +/*%< + * Conversion macros among dns_rdatatype_t, attributes and dns_statscounter_t. + */ +#define DNS_RDATASTATSTYPE_BASE(type) ((dns_rdatatype_t)((type) & 0xFFFF)) +#define DNS_RDATASTATSTYPE_ATTR(type) ((type) >> 16) +#define DNS_RDATASTATSTYPE_VALUE(b, a) (((a) << 16) | (b)) + +/*%< + * Types of dump callbacks. + */ +typedef void (*dns_generalstats_dumper_t)(dns_statscounter_t, isc_uint64_t, + void *); +typedef void (*dns_rdatatypestats_dumper_t)(dns_rdatastatstype_t, isc_uint64_t, + void *); +typedef void (*dns_opcodestats_dumper_t)(dns_opcode_t, isc_uint64_t, void *); + isc_result_t -dns_stats_create(isc_mem_t *mctx, dns_stats_t **statsp); +dns_generalstats_create(isc_mem_t *mctx, dns_stats_t **statsp, int ncounters); /*%< - * Create a statistics counter structure. + * Create a statistics counter structure of general type. It counts a general + * set of counters indexed by an ID between 0 and ncounters -1. * * Requires: + *\li 'mctx' must be a valid memory context. + * + *\li 'statsp' != NULL && '*statsp' == NULL. + * + * Returns: + *\li ISC_R_SUCCESS -- all ok * + *\li anything else -- failure + */ + +isc_result_t +dns_rdatatypestats_create(isc_mem_t *mctx, dns_stats_t **statsp); +/*%< + * Create a statistics counter structure per rdatatype. + * + * Requires: *\li 'mctx' must be a valid memory context. * *\li 'statsp' != NULL && '*statsp' == NULL. + * + * Returns: + *\li ISC_R_SUCCESS -- all ok + * + *\li anything else -- failure */ -void -dns_stats_destroy(isc_mem_t *mctx, dns_stats_t **statsp); +isc_result_t +dns_rdatasetstats_create(isc_mem_t *mctx, dns_stats_t **statsp); /*%< - * Destroy a statistics counter structure. + * Create a statistics counter structure per RRset. * * Requires: + *\li 'mctx' must be a valid memory context. + * + *\li 'statsp' != NULL && '*statsp' == NULL. + * + * Returns: + *\li ISC_R_SUCCESS -- all ok + * + *\li anything else -- failure + */ + +isc_result_t +dns_opcodestats_create(isc_mem_t *mctx, dns_stats_t **statsp); +/*%< + * Create a statistics counter structure per opcode. * + * Requires: *\li 'mctx' must be a valid memory context. * - *\li 'statsp' != NULL and '*statsp' be valid dns_stats_t. + *\li 'statsp' != NULL && '*statsp' == NULL. + * + * Returns: + *\li ISC_R_SUCCESS -- all ok + * + *\li anything else -- failure + */ + +void +dns_stats_attach(dns_stats_t *stats, dns_stats_t **statsp); +/*%< + * Attach to a statistics set. + * + * Requires: + *\li 'stats' is a valid dns_stats_t. * - * Ensures: + *\li 'statsp' != NULL && '*statsp' == NULL + */ + +void +dns_stats_detach(dns_stats_t **statsp); +/*%< + * Detaches from the statistics set. * - *\li '*statsp' == NULL + * Requires: + *\li 'statsp' != NULL and '*statsp' is a valid dns_stats_t. */ void -dns_stats_incrementcounter(dns_stats_t *stat, dns_statscounter_t counter); +dns_generalstats_increment(dns_stats_t *stats, dns_statscounter_t counter); /*%< - * Increment a counter field of 'stat' specified by 'counter'. + * Increment the counter-th counter of stats. * * Requires: + *\li 'stats' is a valid dns_stats_t created by dns_generalstats_create(). * - *\li 'stat' be a valid dns_stats_t. + *\li counter is less than the maximum available ID for the stats specified + * on creation. + */ + +void +dns_rdatatypestats_increment(dns_stats_t *stats, dns_rdatatype_t type); +/*%< + * Increment the statistics counter for 'type'. * - *\li counter < DNS_STATS_NCOUNTERS + * Requires: + *\li 'stats' is a valid dns_stats_t created by dns_rdatatypestats_create(). */ void -dns_stats_copy(dns_stats_t *src, isc_uint64_t *dst); +dns_rdatasetstats_increment(dns_stats_t *stats, dns_rdatastatstype_t rrsettype); /*%< - * Copy statistics counter fields of 'src' to the 'dst' array. + * Increment the statistics counter for 'rrsettype'. * * Requires: + *\li 'stats' is a valid dns_stats_t created by dns_rdatasetstats_create(). + */ + +void +dns_rdatasetstats_decrement(dns_stats_t *stats, dns_rdatastatstype_t rrsettype); +/*%< + * Decrement the statistics counter for 'rrsettype'. * - *\li 'src' be a valid dns_stats_t. + * Requires: + *\li 'stats' is a valid dns_stats_t created by dns_rdatasetstats_create(). + */ + +void +dns_opcodestats_increment(dns_stats_t *stats, dns_opcode_t code); +/*%< + * Increment the statistics counter for 'code'. * - *\li 'dst' be sufficiently large to store DNS_STATS_NCOUNTERS 64-bit - * integers. + * Requires: + *\li 'stats' is a valid dns_stats_t created by dns_opcodestats_create(). + */ + +void +dns_generalstats_dump(dns_stats_t *stats, dns_generalstats_dumper_t dump_fn, + void *arg, unsigned int options); +/*%< + * Dump the current statistics counters in a specified way. For each counter + * in stats, dump_fn is called with its current value and the given argument + * arg. By default counters that have a value of 0 is skipped; if options has + * the DNS_STATSDUMP_VERBOSE flag, even such counters are dumped. + * + * Requires: + *\li 'stats' is a valid dns_stats_t created by dns_generalstats_create(). + */ + +void +dns_rdatatypestats_dump(dns_stats_t *stats, dns_rdatatypestats_dumper_t dump_fn, + void *arg, unsigned int options); +/*%< + * Dump the current statistics counters in a specified way. For each counter + * in stats, dump_fn is called with the corresponding type in the form of + * dns_rdatastatstype_t, the current counter value and the given argument + * arg. By default counters that have a value of 0 is skipped; if options has + * the DNS_STATSDUMP_VERBOSE flag, even such counters are dumped. + * + * Requires: + *\li 'stats' is a valid dns_stats_t created by dns_generalstats_create(). + */ + +void +dns_rdatasetstats_dump(dns_stats_t *stats, dns_rdatatypestats_dumper_t dump_fn, + void *arg, unsigned int options); +/*%< + * Dump the current statistics counters in a specified way. For each counter + * in stats, dump_fn is called with the corresponding type in the form of + * dns_rdatastatstype_t, the current counter value and the given argument + * arg. By default counters that have a value of 0 is skipped; if options has + * the DNS_STATSDUMP_VERBOSE flag, even such counters are dumped. + * + * Requires: + *\li 'stats' is a valid dns_stats_t created by dns_generalstats_create(). + */ + +void +dns_opcodestats_dump(dns_stats_t *stats, dns_opcodestats_dumper_t dump_fn, + void *arg, unsigned int options); +/*%< + * Dump the current statistics counters in a specified way. For each counter + * in stats, dump_fn is called with the corresponding opcode, the current + * counter value and the given argument arg. By default counters that have a + * value of 0 is skipped; if options has the DNS_STATSDUMP_VERBOSE flag, even + * such counters are dumped. + * + * Requires: + *\li 'stats' is a valid dns_stats_t created by dns_generalstats_create(). */ isc_result_t @@ -101,7 +328,7 @@ dns_stats_alloccounters(isc_mem_t *mctx, isc_uint64_t **ctrp); * Allocate an array of query statistics counters from the memory * context 'mctx'. * - * This function is obsoleted. Use dns_stats_create() instead. + * This function is obsoleted. Use dns_xxxstats_create() instead. */ void diff --git a/lib/dns/include/dns/types.h b/lib/dns/include/dns/types.h index d13b2c82..ea20787e 100644 --- a/lib/dns/include/dns/types.h +++ b/lib/dns/include/dns/types.h @@ -15,7 +15,7 @@ * PERFORMANCE OF THIS SOFTWARE. */ -/* $Id: types.h,v 1.126.62.2 2008/01/24 23:46:26 tbox Exp $ */ +/* $Id: types.h,v 1.126.62.3 2008/04/03 06:10:21 marka Exp $ */ #ifndef DNS_TYPES_H #define DNS_TYPES_H 1 @@ -107,6 +107,8 @@ typedef struct dns_signature dns_signature_t; typedef struct dns_ssurule dns_ssurule_t; typedef struct dns_ssutable dns_ssutable_t; typedef struct dns_stats dns_stats_t; +typedef int dns_statscounter_t; +typedef isc_uint32_t dns_rdatastatstype_t; typedef struct dns_tkeyctx dns_tkeyctx_t; typedef isc_uint16_t dns_trust_t; typedef struct dns_tsig_keyring dns_tsig_keyring_t; diff --git a/lib/dns/include/dns/view.h b/lib/dns/include/dns/view.h index 4964bd1f..a488a62c 100644 --- a/lib/dns/include/dns/view.h +++ b/lib/dns/include/dns/view.h @@ -1,5 +1,5 @@ /* - * Copyright (C) 2004-2007 Internet Systems Consortium, Inc. ("ISC") + * Copyright (C) 2004-2008 Internet Systems Consortium, Inc. ("ISC") * Copyright (C) 1999-2003 Internet Software Consortium. * * Permission to use, copy, modify, and/or distribute this software for any @@ -15,7 +15,7 @@ * PERFORMANCE OF THIS SOFTWARE. */ -/* $Id: view.h,v 1.107 2007/06/18 23:47:42 tbox Exp $ */ +/* $Id: view.h,v 1.107.128.4 2008/04/03 06:20:34 tbox Exp $ */ #ifndef DNS_VIEW_H #define DNS_VIEW_H 1 @@ -70,7 +70,6 @@ #include #include #include -#include #include #include @@ -101,6 +100,8 @@ struct dns_view { isc_event_t resevent; isc_event_t adbevent; isc_event_t reqevent; + dns_stats_t * resstats; + dns_stats_t * resquerystats; /* Configurable data. */ dns_tsig_keyring_t * statickeys; @@ -124,6 +125,7 @@ struct dns_view { dns_acl_t * sortlist; isc_boolean_t requestixfr; isc_boolean_t provideixfr; + isc_boolean_t requestnsid; dns_ttl_t maxcachettl; dns_ttl_t maxncachettl; in_port_t dstport; @@ -596,7 +598,7 @@ dns_viewlist_find(dns_viewlist_t *list, const char *name, isc_result_t dns_viewlist_findzone(dns_viewlist_t *list, dns_name_t *name, isc_boolean_t allclasses, - dns_rdataclass_t rdclass, dns_zone_t **zonep); + dns_rdataclass_t rdclass, dns_zone_t **zonep); /*%< * Search zone with 'name' in view with 'rdclass' in viewlist 'list' @@ -632,7 +634,7 @@ dns_view_loadnew(dns_view_t *view, isc_boolean_t stop); /*%< * Load zones attached to this view. dns_view_load() loads * all zones whose master file has changed since the last - * load; dns_view_loadnew() loads only zones that have never + * load; dns_view_loadnew() loads only zones that have never * been loaded. * * If 'stop' is ISC_TRUE, stop on the first error and return it. @@ -708,7 +710,7 @@ dns_view_dumpdbtostream(dns_view_t *view, FILE *fp); * easily obtainable by other means. * * Requires: - * + * *\li 'view' is valid. * *\li 'fp' refers to a file open for writing. @@ -751,7 +753,7 @@ isc_result_t dns_view_adddelegationonly(dns_view_t *view, dns_name_t *name); /*%< * Add the given name to the delegation only table. - * + * * * Requires: *\li 'view' is valid. @@ -766,7 +768,7 @@ isc_result_t dns_view_excludedelegationonly(dns_view_t *view, dns_name_t *name); /*%< * Add the given name to be excluded from the root-delegation-only. - * + * * * Requires: *\li 'view' is valid. @@ -819,11 +821,55 @@ dns_view_freezezones(dns_view_t *view, isc_boolean_t freeze); * \li 'view' is valid. */ -#ifdef HAVE_LIBXML2 +void +dns_view_setresstats(dns_view_t *view, dns_stats_t *stats); +/*%< + * Set a general resolver statistics counter set 'stats' for 'view'. + * + * Requires: + * \li 'view' is valid and is not frozen. + * + *\li stats is a valid statistics supporting resolver statistics counters + * (see dns/stats.h). + */ -isc_result_t -dns_view_xmlrender(dns_view_t *view, xmlTextWriterPtr xml, int flags); +void +dns_view_getresstats(dns_view_t *view, dns_stats_t **statsp); +/*%< + * Get the general statistics counter set for 'view'. If a statistics set is + * set '*statsp' will be attached to the set; otherwise, '*statsp' will be + * untouched. + * + * Requires: + * \li 'view' is valid and is not frozen. + * + *\li 'statsp' != NULL && '*statsp' != NULL + */ + +void +dns_view_setresquerystats(dns_view_t *view, dns_stats_t *stats); +/*%< + * Set a statistics counter set of rdata type, 'stats', for 'view'. Once the + * statistic set is installed, view's resolver will count outgoing queries + * per rdata type. + * + * Requires: + * \li 'view' is valid and is not frozen. + * + *\li stats is a valid statistics created by dns_rdatatypestats_create(). + */ -#endif +void +dns_view_getresquerystats(dns_view_t *view, dns_stats_t **statsp); +/*%< + * Get the rdatatype statistics counter set for 'view'. If a statistics set is + * set '*statsp' will be attached to the set; otherwise, '*statsp' will be + * untouched. + * + * Requires: + * \li 'view' is valid and is not frozen. + * + *\li 'statsp' != NULL && '*statsp' != NULL + */ #endif /* DNS_VIEW_H */ diff --git a/lib/dns/include/dns/zone.h b/lib/dns/include/dns/zone.h index dc4d1983..27ef22ce 100644 --- a/lib/dns/include/dns/zone.h +++ b/lib/dns/include/dns/zone.h @@ -15,7 +15,7 @@ * PERFORMANCE OF THIS SOFTWARE. */ -/* $Id: zone.h,v 1.153.56.2 2008/01/24 23:46:26 tbox Exp $ */ +/* $Id: zone.h,v 1.153.56.3 2008/04/03 06:10:21 marka Exp $ */ #ifndef DNS_ZONE_H #define DNS_ZONE_H 1 @@ -31,7 +31,6 @@ #include #include #include -#include #include #include @@ -148,6 +147,15 @@ dns_zone_getclass(dns_zone_t *zone); *\li 'zone' to be a valid zone. */ +isc_uint32_t +dns_zone_getserial(dns_zone_t *zone); +/*%< + * Returns the current serial number of the zone. + * + * Requires: + *\li 'zone' to be a valid zone. + */ + void dns_zone_settype(dns_zone_t *zone, dns_zonetype_t type); /*%< @@ -1479,28 +1487,55 @@ dns_zone_isforced(dns_zone_t *zone); isc_result_t dns_zone_setstatistics(dns_zone_t *zone, isc_boolean_t on); /*%< - * Make the zone keep or not keep an array of statistics - * counter. - * - * Requires: - * \li zone be a valid zone. + * This function is obsoleted by dns_zone_setrequeststats(). */ isc_uint64_t * dns_zone_getstatscounters(dns_zone_t *zone); /*%< - * This function is obsoleted by dns_zone_getstats(). + * This function is obsoleted by dns_zone_getrequeststats(). + */ + +void +dns_zone_setstats(dns_zone_t *zone, dns_stats_t *stats); +/*%< + * Set a general zone-maintenance statistics set 'stats' for 'zone'. This + * function is expected to be called only on zone creation (when necessary). + * Once installed, it cannot be removed or replaced. Also, there is no + * interface to get the installed stats from the zone; the caller must keep the + * stats to reference (e.g. dump) it later. + * + * Requires: + * \li 'zone' to be a valid zone and does not have a statistics set already + * installed. + * + *\li stats is a valid statistics supporting zone statistics counters + * (see dns/stats.h). + */ + +void +dns_zone_setrequeststats(dns_zone_t *zone, dns_stats_t *stats); +/*%< + * Set an additional statistics set to zone. It is attached in the zone + * but is not counted in the zone module; only the caller updates the counters. + * + * Requires: + * \li 'zone' to be a valid zone. + * + *\li stats is a valid statistics. */ dns_stats_t * -dns_zone_getstats(dns_zone_t *zone); +dns_zone_getrequeststats(dns_zone_t *zone); /*%< + * Get the additional statistics for zone, if one is installed. + * * Requires: - * zone be a valid zone. + * \li 'zone' to be a valid zone. * * Returns: - * \li A pointer to the zone's array of statistics counters, - * or NULL if it has none. + * \li when available, a pointer to the statistics set installed in zone; + * otherwise NULL. */ void @@ -1636,13 +1671,6 @@ dns_zone_setisself(dns_zone_t *zone, dns_isselffunc_t isself, void *arg); * delivered to 'myview'. */ -#ifdef HAVE_LIBXML2 - -isc_result_t -dns_zone_xmlrender(dns_zone_t *zone, xmlTextWriterPtr xml, int flags); - -#endif - ISC_LANG_ENDDECLS #endif /* DNS_ZONE_H */ diff --git a/lib/dns/masterdump.c b/lib/dns/masterdump.c index 8b3ebd66..0c48eee7 100644 --- a/lib/dns/masterdump.c +++ b/lib/dns/masterdump.c @@ -1,5 +1,5 @@ /* - * Copyright (C) 2004-2007 Internet Systems Consortium, Inc. ("ISC") + * Copyright (C) 2004-2008 Internet Systems Consortium, Inc. ("ISC") * Copyright (C) 1999-2003 Internet Software Consortium. * * Permission to use, copy, modify, and/or distribute this software for any @@ -15,7 +15,7 @@ * PERFORMANCE OF THIS SOFTWARE. */ -/* $Id: masterdump.c,v 1.89 2007/06/19 23:47:16 tbox Exp $ */ +/* $Id: masterdump.c,v 1.89.128.2 2008/04/09 22:53:06 tbox Exp $ */ /*! \file */ @@ -183,7 +183,7 @@ struct dns_dumpctx { isc_buffer_t *buffer, FILE *f); }; -#define NXDOMAIN(x) (((x)->attributes & DNS_RDATASETATTR_NXDOMAIN) != 0) +#define NXDOMAIN(x) (((x)->attributes & DNS_RDATASETATTR_NXDOMAIN) != 0) /*% * Output tabs and spaces to go from column '*current' to @@ -1020,9 +1020,9 @@ dumpctx_destroy(dns_dumpctx_t *dctx) { dctx->magic = 0; DESTROYLOCK(&dctx->lock); + dns_dbiterator_destroy(&dctx->dbiter); if (dctx->version != NULL) dns_db_closeversion(dctx->db, &dctx->version, ISC_FALSE); - dns_dbiterator_destroy(&dctx->dbiter); dns_db_detach(&dctx->db); if (dctx->task != NULL) isc_task_detach(&dctx->task); @@ -1071,13 +1071,13 @@ dns_dumpctx_detach(dns_dumpctx_t **dctxp) { dns_dbversion_t * dns_dumpctx_version(dns_dumpctx_t *dctx) { - REQUIRE(DNS_DCTX_VALID(dctx)); + REQUIRE(DNS_DCTX_VALID(dctx)); return (dctx->version); } dns_db_t * dns_dumpctx_db(dns_dumpctx_t *dctx) { - REQUIRE(DNS_DCTX_VALID(dctx)); + REQUIRE(DNS_DCTX_VALID(dctx)); return (dctx->db); } @@ -1703,10 +1703,10 @@ dns_master_dumpnode(isc_mem_t *mctx, dns_db_t *db, dns_dbversion_t *version, isc_result_t dns_master_stylecreate(dns_master_style_t **stylep, unsigned int flags, - unsigned int ttl_column, unsigned int class_column, - unsigned int type_column, unsigned int rdata_column, - unsigned int line_length, unsigned int tab_width, - isc_mem_t *mctx) + unsigned int ttl_column, unsigned int class_column, + unsigned int type_column, unsigned int rdata_column, + unsigned int line_length, unsigned int tab_width, + isc_mem_t *mctx) { dns_master_style_t *style; diff --git a/lib/dns/message.c b/lib/dns/message.c index b798f25a..29958cce 100644 --- a/lib/dns/message.c +++ b/lib/dns/message.c @@ -15,7 +15,7 @@ * PERFORMANCE OF THIS SOFTWARE. */ -/* $Id: message.c,v 1.237.110.3 2008/01/17 23:46:37 tbox Exp $ */ +/* $Id: message.c,v 1.237.110.5 2008/04/03 10:50:01 marka Exp $ */ /*! \file */ @@ -24,6 +24,7 @@ ***/ #include +#include #include #include @@ -1488,14 +1489,8 @@ getsection(isc_buffer_t *source, dns_message_t *msg, dns_decompress_t *dctx, rdataset->ttl = ttl; } - /* - * XXXMLG Perform a totally ugly hack here to pull - * the rdatalist out of the private field in the rdataset, - * and append this rdata to the rdatalist's linked list - * of rdata. - */ - rdatalist = (dns_rdatalist_t *)(rdataset->private1); - + /* Append this rdata to the rdataset. */ + dns_rdatalist_fromrdataset(rdataset, &rdatalist); ISC_LIST_APPEND(rdatalist->rdata, rdata, link); /* @@ -3127,6 +3122,10 @@ dns_message_pseudosectiontotext(dns_message_t *msg, isc_result_t result; char buf[sizeof("1234567890")]; isc_uint32_t mbz; + dns_rdata_t rdata; + isc_buffer_t optbuf; + isc_uint16_t optcode, optlen; + unsigned char *optdata; REQUIRE(DNS_MESSAGE_VALID(msg)); REQUIRE(target != NULL); @@ -3156,6 +3155,50 @@ dns_message_pseudosectiontotext(dns_message_t *msg, ADD_STRING(target, "; udp: "); snprintf(buf, sizeof(buf), "%u\n", (unsigned int)ps->rdclass); ADD_STRING(target, buf); + + result = dns_rdataset_first(ps); + if (result != ISC_R_SUCCESS) + return (ISC_R_SUCCESS); + + /* Print EDNS info, if any */ + dns_rdata_init(&rdata); + dns_rdataset_current(ps, &rdata); + if (rdata.length < 4) + return (ISC_R_SUCCESS); + + isc_buffer_init(&optbuf, rdata.data, rdata.length); + isc_buffer_add(&optbuf, rdata.length); + optcode = isc_buffer_getuint16(&optbuf); + optlen = isc_buffer_getuint16(&optbuf); + + if (optcode == DNS_OPT_NSID) { + ADD_STRING(target, "; NSID"); + } else { + ADD_STRING(target, "; OPT="); + sprintf(buf, "%u", optcode); + ADD_STRING(target, buf); + } + + if (optlen != 0) { + int i; + ADD_STRING(target, ": "); + + optdata = rdata.data + 4; + for (i = 0; i < optlen; i++) { + sprintf(buf, "%02x ", optdata[i]); + ADD_STRING(target, buf); + } + for (i = 0; i < optlen; i++) { + ADD_STRING(target, " ("); + if (isprint(optdata[i])) + isc_buffer_putmem(target, &optdata[i], + 1); + else + isc_buffer_putstr(target, "."); + ADD_STRING(target, ")"); + } + } + ADD_STRING(target, "\n"); return (ISC_R_SUCCESS); case DNS_PSEUDOSECTION_TSIG: ps = dns_message_gettsig(msg, &name); diff --git a/lib/dns/name.c b/lib/dns/name.c index a15c7d23..638cdc86 100644 --- a/lib/dns/name.c +++ b/lib/dns/name.c @@ -1,5 +1,5 @@ /* - * Copyright (C) 2004-2007 Internet Systems Consortium, Inc. ("ISC") + * Copyright (C) 2004-2008 Internet Systems Consortium, Inc. ("ISC") * Copyright (C) 1998-2003 Internet Software Consortium. * * Permission to use, copy, modify, and/or distribute this software for any @@ -15,7 +15,7 @@ * PERFORMANCE OF THIS SOFTWARE. */ -/* $Id: name.c,v 1.163 2007/06/19 23:47:16 tbox Exp $ */ +/* $Id: name.c,v 1.163.128.2 2008/03/31 23:46:42 tbox Exp $ */ /*! \file */ @@ -155,7 +155,7 @@ do { \ static unsigned char root_ndata[] = { '\0' }; static unsigned char root_offsets[] = { 0 }; -static dns_name_t root = +static dns_name_t root = { DNS_NAME_MAGIC, root_ndata, 1, 1, @@ -298,7 +298,7 @@ dns_name_ismailbox(const dns_name_t *name) { REQUIRE(name->labels > 0); REQUIRE(name->attributes & DNS_NAMEATTR_ABSOLUTE); - /* + /* * Root label. */ if (name->length == 1) @@ -312,7 +312,7 @@ dns_name_ismailbox(const dns_name_t *name) { if (!domainchar(ch)) return (ISC_FALSE); } - + if (ndata == name->ndata + name->length) return (ISC_FALSE); @@ -347,8 +347,8 @@ dns_name_ishostname(const dns_name_t *name, isc_boolean_t wildcard) { REQUIRE(VALID_NAME(name)); REQUIRE(name->labels > 0); REQUIRE(name->attributes & DNS_NAMEATTR_ABSOLUTE); - - /* + + /* * Root label. */ if (name->length == 1) @@ -918,7 +918,7 @@ dns_name_getlabelsequence(const dns_name_t *source, target->ndata = &source->ndata[firstoffset]; target->length = endoffset - firstoffset; - + if (first + n == source->labels && n > 0 && (source->attributes & DNS_NAMEATTR_ABSOLUTE) != 0) target->attributes |= DNS_NAMEATTR_ABSOLUTE; @@ -991,7 +991,7 @@ dns_name_fromregion(dns_name_t *name, const isc_region_t *r) { name->length = len; } else { name->ndata = r->base; - name->length = (r->length <= DNS_NAME_MAXWIRE) ? + name->length = (r->length <= DNS_NAME_MAXWIRE) ? r->length : DNS_NAME_MAXWIRE; } @@ -1049,7 +1049,7 @@ dns_name_fromtext(dns_name_t *name, isc_buffer_t *source, REQUIRE(ISC_BUFFER_VALID(source)); REQUIRE((target != NULL && ISC_BUFFER_VALID(target)) || (target == NULL && ISC_BUFFER_VALID(name->buffer))); - + downcase = ISC_TF((options & DNS_NAME_DOWNCASE) != 0); if (target == NULL && name->buffer != NULL) { @@ -1303,8 +1303,9 @@ totext_filter_proc_key_init(void) { result = isc_mem_create2(0, 0, &thread_key_mctx, 0); if (result != ISC_R_SUCCESS) goto unlock; + isc_mem_setname(thread_key_mctx, "threadkey", NULL); isc_mem_setdestroycheck(thread_key_mctx, ISC_FALSE); - + if (!thread_key_initialized && isc_thread_key_create(&totext_filter_proc_key, free_specific) != 0) { @@ -2299,7 +2300,7 @@ dns_name_settotextfilter(dns_name_totextfilter_t proc) { result = ISC_R_UNEXPECTED; return (result); } - + mem = isc_mem_get(thread_key_mctx, sizeof(*mem)); if (mem == NULL) return (ISC_R_NOMEMORY); diff --git a/lib/dns/peer.c b/lib/dns/peer.c index 8ed33859..c5aad7dc 100644 --- a/lib/dns/peer.c +++ b/lib/dns/peer.c @@ -1,5 +1,5 @@ /* - * Copyright (C) 2004-2007 Internet Systems Consortium, Inc. ("ISC") + * Copyright (C) 2004-2008 Internet Systems Consortium, Inc. ("ISC") * Copyright (C) 2000, 2001, 2003 Internet Software Consortium. * * Permission to use, copy, modify, and/or distribute this software for any @@ -15,7 +15,7 @@ * PERFORMANCE OF THIS SOFTWARE. */ -/* $Id: peer.c,v 1.29 2007/06/19 23:47:16 tbox Exp $ */ +/* $Id: peer.c,v 1.29.128.2 2008/04/03 06:08:27 tbox Exp $ */ /*! \file */ @@ -42,6 +42,7 @@ #define SUPPORT_EDNS_BIT 5 #define SERVER_UDPSIZE_BIT 6 #define SERVER_MAXUDP_BIT 7 +#define REQUEST_NSID_BIT 8 static void peerlist_delete(dns_peerlist_t **list); @@ -146,7 +147,7 @@ dns_peerlist_addpeer(dns_peerlist_t *peers, dns_peer_t *peer) { ISC_LIST_INSERTBEFORE(peers->elements, p, peer, next); else ISC_LIST_APPEND(peers->elements, peer, next); - + } isc_result_t @@ -213,7 +214,7 @@ dns_peer_new(isc_mem_t *mem, isc_netaddr_t *addr, dns_peer_t **peerptr) { isc_result_t dns_peer_newprefix(isc_mem_t *mem, isc_netaddr_t *addr, unsigned int prefixlen, dns_peer_t **peerptr) -{ +{ dns_peer_t *peer; REQUIRE(peerptr != NULL); @@ -415,6 +416,32 @@ dns_peer_getsupportedns(dns_peer_t *peer, isc_boolean_t *retval) { return (ISC_R_NOTFOUND); } +isc_result_t +dns_peer_setrequestnsid(dns_peer_t *peer, isc_boolean_t newval) { + isc_boolean_t existed; + + REQUIRE(DNS_PEER_VALID(peer)); + + existed = DNS_BIT_CHECK(REQUEST_NSID_BIT, &peer->bitflags); + + peer->request_nsid = newval; + DNS_BIT_SET(REQUEST_NSID_BIT, &peer->bitflags); + + return (existed ? ISC_R_EXISTS : ISC_R_SUCCESS); +} + +isc_result_t +dns_peer_getrequestnsid(dns_peer_t *peer, isc_boolean_t *retval) { + REQUIRE(DNS_PEER_VALID(peer)); + REQUIRE(retval != NULL); + + if (DNS_BIT_CHECK(REQUEST_NSID_BIT, &peer->bitflags)) { + *retval = peer->request_nsid; + return (ISC_R_SUCCESS); + } else + return (ISC_R_NOTFOUND); +} + isc_result_t dns_peer_settransfers(dns_peer_t *peer, isc_uint32_t newval) { isc_boolean_t existed; @@ -544,7 +571,7 @@ dns_peer_settransfersource(dns_peer_t *peer, } if (transfer_source != NULL) { peer->transfer_source = isc_mem_get(peer->mem, - sizeof(*peer->transfer_source)); + sizeof(*peer->transfer_source)); if (peer->transfer_source == NULL) return (ISC_R_NOMEMORY); @@ -577,7 +604,7 @@ dns_peer_setnotifysource(dns_peer_t *peer, } if (notify_source != NULL) { peer->notify_source = isc_mem_get(peer->mem, - sizeof(*peer->notify_source)); + sizeof(*peer->notify_source)); if (peer->notify_source == NULL) return (ISC_R_NOMEMORY); @@ -608,7 +635,7 @@ dns_peer_setquerysource(dns_peer_t *peer, const isc_sockaddr_t *query_source) { } if (query_source != NULL) { peer->query_source = isc_mem_get(peer->mem, - sizeof(*peer->query_source)); + sizeof(*peer->query_source)); if (peer->query_source == NULL) return (ISC_R_NOMEMORY); @@ -649,11 +676,11 @@ dns_peer_getudpsize(dns_peer_t *peer, isc_uint16_t *udpsize) { REQUIRE(udpsize != NULL); if (DNS_BIT_CHECK(SERVER_UDPSIZE_BIT, &peer->bitflags)) { - *udpsize = peer->udpsize; - return (ISC_R_SUCCESS); - } else { - return (ISC_R_NOTFOUND); - } + *udpsize = peer->udpsize; + return (ISC_R_SUCCESS); + } else { + return (ISC_R_NOTFOUND); + } } isc_result_t @@ -677,9 +704,9 @@ dns_peer_getmaxudp(dns_peer_t *peer, isc_uint16_t *maxudp) { REQUIRE(maxudp != NULL); if (DNS_BIT_CHECK(SERVER_MAXUDP_BIT, &peer->bitflags)) { - *maxudp = peer->maxudp; - return (ISC_R_SUCCESS); - } else { - return (ISC_R_NOTFOUND); - } + *maxudp = peer->maxudp; + return (ISC_R_SUCCESS); + } else { + return (ISC_R_NOTFOUND); + } } diff --git a/lib/dns/rbt.c b/lib/dns/rbt.c index e6fc6328..b045cea1 100644 --- a/lib/dns/rbt.c +++ b/lib/dns/rbt.c @@ -15,7 +15,7 @@ * PERFORMANCE OF THIS SOFTWARE. */ -/* $Id: rbt.c,v 1.138.36.2 2008/01/22 23:27:35 tbox Exp $ */ +/* $Id: rbt.c,v 1.138.36.3 2008/03/31 13:18:00 fdupont Exp $ */ /*! \file */ @@ -2056,10 +2056,6 @@ dns_rbt_deletetreeflat(dns_rbt_t *rbt, unsigned int quantum, node = LEFT(node); goto traverse; } - if (RIGHT(node) != NULL) { - node = RIGHT(node); - goto traverse; - } if (DOWN(node) != NULL) { node = DOWN(node); goto traverse; @@ -2076,14 +2072,15 @@ dns_rbt_deletetreeflat(dns_rbt_t *rbt, unsigned int quantum, node->magic = 0; #endif parent = PARENT(node); + if (RIGHT(node) != NULL) + PARENT(RIGHT(node)) = parent; if (parent != NULL) { if (LEFT(parent) == node) - LEFT(parent) = NULL; + LEFT(parent) = RIGHT(node); else if (DOWN(parent) == node) - DOWN(parent) = NULL; - else if (RIGHT(parent) == node) - RIGHT(parent) = NULL; - } + DOWN(parent) = RIGHT(node); + } else + parent = RIGHT(node); isc_mem_put(rbt->mctx, node, NODE_SIZE(node)); rbt->nodecount--; diff --git a/lib/dns/rbtdb.c b/lib/dns/rbtdb.c index 6ecc2eec..d2d3630f 100644 --- a/lib/dns/rbtdb.c +++ b/lib/dns/rbtdb.c @@ -1,5 +1,5 @@ /* - * Copyright (C) 2004-2007 Internet Systems Consortium, Inc. ("ISC") + * Copyright (C) 2004-2008 Internet Systems Consortium, Inc. ("ISC") * Copyright (C) 1999-2003 Internet Software Consortium. * * Permission to use, copy, modify, and/or distribute this software for any @@ -15,7 +15,7 @@ * PERFORMANCE OF THIS SOFTWARE. */ -/* $Id: rbtdb.c,v 1.248 2007/12/02 20:27:35 marka Exp $ */ +/* $Id: rbtdb.c,v 1.248.12.8 2008/05/01 18:32:31 jinmei Exp $ */ /*! \file */ @@ -53,6 +53,7 @@ #include #include #include +#include #include #include #include @@ -74,7 +75,7 @@ * ISC_MAGIC_VALID cannot be used. */ #define VALID_RBTDB(rbtdb) ((rbtdb) != NULL && \ - (rbtdb)->common.impmagic == RBTDB_MAGIC) + (rbtdb)->common.impmagic == RBTDB_MAGIC) #ifdef DNS_RBTDB_VERSION64 typedef isc_uint64_t rbtdb_serial_t; @@ -96,15 +97,15 @@ typedef isc_uint32_t rbtdb_rdatatype_t; #define RBTDB_RDATATYPE_VALUE(b, e) (((e) << 16) | (b)) #define RBTDB_RDATATYPE_SIGNSEC \ - RBTDB_RDATATYPE_VALUE(dns_rdatatype_rrsig, dns_rdatatype_nsec) + RBTDB_RDATATYPE_VALUE(dns_rdatatype_rrsig, dns_rdatatype_nsec) #define RBTDB_RDATATYPE_SIGNS \ - RBTDB_RDATATYPE_VALUE(dns_rdatatype_rrsig, dns_rdatatype_ns) + RBTDB_RDATATYPE_VALUE(dns_rdatatype_rrsig, dns_rdatatype_ns) #define RBTDB_RDATATYPE_SIGCNAME \ - RBTDB_RDATATYPE_VALUE(dns_rdatatype_rrsig, dns_rdatatype_cname) + RBTDB_RDATATYPE_VALUE(dns_rdatatype_rrsig, dns_rdatatype_cname) #define RBTDB_RDATATYPE_SIGDNAME \ - RBTDB_RDATATYPE_VALUE(dns_rdatatype_rrsig, dns_rdatatype_dname) + RBTDB_RDATATYPE_VALUE(dns_rdatatype_rrsig, dns_rdatatype_dname) #define RBTDB_RDATATYPE_NCACHEANY \ - RBTDB_RDATATYPE_VALUE(0, dns_rdatatype_any) + RBTDB_RDATATYPE_VALUE(0, dns_rdatatype_any) /* * We use rwlock for DB lock only when ISC_RWLOCK_USEATOMIC is non 0. @@ -181,10 +182,6 @@ typedef isc_mutex_t nodelock_t; #define NODE_WEAKDOWNGRADE(l) ((void)0) #endif -#ifndef DNS_RDATASET_FIXED -#define DNS_RDATASET_FIXED 1 -#endif - /* * Allow clients with a virtual time of up to 5 minutes in the past to see * records that would have otherwise have expired. @@ -192,75 +189,75 @@ typedef isc_mutex_t nodelock_t; #define RBTDB_VIRTUAL 300 struct noqname { - dns_name_t name; - void * nsec; - void * nsecsig; + dns_name_t name; + void * nsec; + void * nsecsig; }; typedef struct acachectl acachectl_t; typedef struct rdatasetheader { - /*% - * Locked by the owning node's lock. - */ - rbtdb_serial_t serial; - dns_ttl_t rdh_ttl; - rbtdb_rdatatype_t type; - isc_uint16_t attributes; - dns_trust_t trust; - struct noqname *noqname; - /*%< - * We don't use the LIST macros, because the LIST structure has - * both head and tail pointers, and is doubly linked. - */ - - struct rdatasetheader *next; - /*%< - * If this is the top header for an rdataset, 'next' points - * to the top header for the next rdataset (i.e., the next type). - * Otherwise, it points up to the header whose down pointer points - * at this header. - */ - - struct rdatasetheader *down; - /*%< - * Points to the header for the next older version of - * this rdataset. - */ - - isc_uint32_t count; - /*%< - * Monotonously increased every time this rdataset is bound so that - * it is used as the base of the starting point in DNS responses - * when the "cyclic" rrset-order is required. Since the ordering - * should not be so crucial, no lock is set for the counter for - * performance reasons. - */ - - acachectl_t *additional_auth; - acachectl_t *additional_glue; - - dns_rbtnode_t *node; - isc_stdtime_t last_used; - ISC_LINK(struct rdatasetheader) lru_link; - /*%< - * Used for LRU-based cache management. We should probably make - * these cache-DB specific. We might also make it a pointer and - * ensure only the top header has a valid link to save memory. - * The linked-list is locked by the rbtdb->lrulock. - */ - - /* - * It's possible this should not be here anymore, but instead - * referenced from the bucket's heap directly. - */ + /*% + * Locked by the owning node's lock. + */ + rbtdb_serial_t serial; + dns_ttl_t rdh_ttl; + rbtdb_rdatatype_t type; + isc_uint16_t attributes; + dns_trust_t trust; + struct noqname *noqname; + /*%< + * We don't use the LIST macros, because the LIST structure has + * both head and tail pointers, and is doubly linked. + */ + + struct rdatasetheader *next; + /*%< + * If this is the top header for an rdataset, 'next' points + * to the top header for the next rdataset (i.e., the next type). + * Otherwise, it points up to the header whose down pointer points + * at this header. + */ + + struct rdatasetheader *down; + /*%< + * Points to the header for the next older version of + * this rdataset. + */ + + isc_uint32_t count; + /*%< + * Monotonously increased every time this rdataset is bound so that + * it is used as the base of the starting point in DNS responses + * when the "cyclic" rrset-order is required. Since the ordering + * should not be so crucial, no lock is set for the counter for + * performance reasons. + */ + + acachectl_t *additional_auth; + acachectl_t *additional_glue; + + dns_rbtnode_t *node; + isc_stdtime_t last_used; + ISC_LINK(struct rdatasetheader) lru_link; + /*%< + * Used for LRU-based cache management. We should probably make + * these cache-DB specific. We might also make it a pointer and + * ensure only the top header has a valid link to save memory. + * The linked-list is locked by the rbtdb->lrulock. + */ + + /* + * It's possible this should not be here anymore, but instead + * referenced from the bucket's heap directly. + */ #if 0 - isc_heap_t *heap; + isc_heap_t *heap; #endif - unsigned int heap_index; - /*%< - * Used for TTL-based cache cleaning. - */ + unsigned int heap_index; + /*%< + * Used for TTL-based cache cleaning. + */ } rdatasetheader_t; typedef ISC_LIST(rdatasetheader_t) rdatasetheaderlist_t; @@ -271,20 +268,20 @@ typedef ISC_LIST(dns_rbtnode_t) rbtnodelist_t; #define RDATASET_ATTR_IGNORE 0x0004 #define RDATASET_ATTR_RETAIN 0x0008 #define RDATASET_ATTR_NXDOMAIN 0x0010 -#define RDATASET_ATTR_CACHE 0x1000 /* for debug */ -#define RDATASET_ATTR_CANCELED 0x2000 /* for debug */ +#define RDATASET_ATTR_RESIGN 0x0020 +#define RDATASET_ATTR_STATCOUNT 0x0040 typedef struct acache_cbarg { - dns_rdatasetadditional_t type; - unsigned int count; - dns_db_t *db; - dns_dbnode_t *node; - rdatasetheader_t *header; + dns_rdatasetadditional_t type; + unsigned int count; + dns_db_t *db; + dns_dbnode_t *node; + rdatasetheader_t *header; } acache_cbarg_t; struct acachectl { - dns_acacheentry_t *entry; - acache_cbarg_t *cbarg; + dns_acacheentry_t *entry; + acache_cbarg_t *cbarg; }; /* @@ -298,129 +295,105 @@ struct acachectl { #undef IGNORE /* WIN32 winbase.h defines this. */ #define EXISTS(header) \ - (((header)->attributes & RDATASET_ATTR_NONEXISTENT) == 0) + (((header)->attributes & RDATASET_ATTR_NONEXISTENT) == 0) #define NONEXISTENT(header) \ - (((header)->attributes & RDATASET_ATTR_NONEXISTENT) != 0) + (((header)->attributes & RDATASET_ATTR_NONEXISTENT) != 0) #define IGNORE(header) \ - (((header)->attributes & RDATASET_ATTR_IGNORE) != 0) + (((header)->attributes & RDATASET_ATTR_IGNORE) != 0) #define RETAIN(header) \ - (((header)->attributes & RDATASET_ATTR_RETAIN) != 0) + (((header)->attributes & RDATASET_ATTR_RETAIN) != 0) #define NXDOMAIN(header) \ - (((header)->attributes & RDATASET_ATTR_NXDOMAIN) != 0) + (((header)->attributes & RDATASET_ATTR_NXDOMAIN) != 0) #define DEFAULT_NODE_LOCK_COUNT 7 /*%< Should be prime. */ #define DEFAULT_CACHE_NODE_LOCK_COUNT 1009 /*%< Should be prime. */ typedef struct { - nodelock_t lock; - /* Protected in the refcount routines. */ - isc_refcount_t references; - /* Locked by lock. */ - isc_boolean_t exiting; + nodelock_t lock; + /* Protected in the refcount routines. */ + isc_refcount_t references; + /* Locked by lock. */ + isc_boolean_t exiting; } rbtdb_nodelock_t; typedef struct rbtdb_changed { - dns_rbtnode_t * node; - isc_boolean_t dirty; - ISC_LINK(struct rbtdb_changed) link; + dns_rbtnode_t * node; + isc_boolean_t dirty; + ISC_LINK(struct rbtdb_changed) link; } rbtdb_changed_t; typedef ISC_LIST(rbtdb_changed_t) rbtdb_changedlist_t; typedef struct rbtdb_version { - /* Not locked */ - rbtdb_serial_t serial; - /* - * Protected in the refcount routines. - * XXXJT: should we change the lock policy based on the refcount - * performance? - */ - isc_refcount_t references; - /* Locked by database lock. */ - isc_boolean_t writer; - isc_boolean_t commit_ok; - rbtdb_changedlist_t changed_list; - ISC_LINK(struct rbtdb_version) link; + /* Not locked */ + rbtdb_serial_t serial; + /* + * Protected in the refcount routines. + * XXXJT: should we change the lock policy based on the refcount + * performance? + */ + isc_refcount_t references; + /* Locked by database lock. */ + isc_boolean_t writer; + isc_boolean_t commit_ok; + rbtdb_changedlist_t changed_list; + ISC_LINK(struct rbtdb_version) link; } rbtdb_version_t; typedef ISC_LIST(rbtdb_version_t) rbtdb_versionlist_t; -#ifdef LRU_DEBUG -/* statistics info for testing */ -struct cachestat { - unsigned int cache_total; - int cache_current; - unsigned int ncache_total; - int ncache_current; - unsigned int a_total; - int a_current; - unsigned int aaaa_total; - int aaaa_current; - unsigned int ns_total; - int ns_current; - unsigned int ptr_total; - int ptr_current; - unsigned int glue_total; - int glue_current; - unsigned int additional_total; - int additional_current; - - unsigned int stale_purge; - unsigned int stale_scan; - unsigned int stale_expire; - unsigned int stale_lru; -}; -#endif - typedef struct { - /* Unlocked. */ - dns_db_t common; + /* Unlocked. */ + dns_db_t common; #if DNS_RBTDB_USERWLOCK - isc_rwlock_t lock; + isc_rwlock_t lock; #else - isc_mutex_t lock; -#endif - isc_rwlock_t tree_lock; - unsigned int node_lock_count; - rbtdb_nodelock_t * node_locks; - dns_rbtnode_t * origin_node; - /* Locked by lock. */ - unsigned int active; - isc_refcount_t references; - unsigned int attributes; - rbtdb_serial_t current_serial; - rbtdb_serial_t least_serial; - rbtdb_serial_t next_serial; - rbtdb_version_t * current_version; - rbtdb_version_t * future_version; - rbtdb_versionlist_t open_versions; - isc_boolean_t overmem; - isc_task_t * task; - dns_dbnode_t *soanode; - dns_dbnode_t *nsnode; - - /* - * This is a linked list used to implement the LRU cache. There will - * be node_lock_count linked lists here. Nodes in bucket 1 will be - * placed on the linked list rdatasets[1]. - */ - rdatasetheaderlist_t *rdatasets; - rbtnodelist_t *deadnodes; - - /* - * Heaps. Each of these is used for TTL based expiry. - */ - isc_heap_t **heaps; - - /* Locked by tree_lock. */ - dns_rbt_t * tree; - isc_boolean_t secure; - - /* Unlocked */ - unsigned int quantum; -#ifdef LRU_DEBUG - struct cachestat cachestat; + isc_mutex_t lock; #endif + isc_rwlock_t tree_lock; + unsigned int node_lock_count; + rbtdb_nodelock_t * node_locks; + dns_rbtnode_t * origin_node; + dns_stats_t * rrsetstats; /* cache DB only */ + /* Locked by lock. */ + unsigned int active; + isc_refcount_t references; + unsigned int attributes; + rbtdb_serial_t current_serial; + rbtdb_serial_t least_serial; + rbtdb_serial_t next_serial; + rbtdb_version_t * current_version; + rbtdb_version_t * future_version; + rbtdb_versionlist_t open_versions; + isc_boolean_t overmem; + isc_task_t * task; + dns_dbnode_t *soanode; + dns_dbnode_t *nsnode; + + /* + * This is a linked list used to implement the LRU cache. There will + * be node_lock_count linked lists here. Nodes in bucket 1 will be + * placed on the linked list rdatasets[1]. + */ + rdatasetheaderlist_t *rdatasets; + + /*% + * Temporary storage for stale cache nodes and dynamically deleted + * nodes that await being cleaned up. + */ + rbtnodelist_t *deadnodes; + + /* + * Heaps. Each of these is used for TTL based expiry. + */ + isc_heap_t **heaps; + + /* Locked by tree_lock. */ + dns_rbt_t * tree; + isc_boolean_t secure; + + /* Unlocked */ + unsigned int quantum; } dns_rbtdb_t; #define RBTDB_ATTR_LOADED 0x01 @@ -430,27 +403,27 @@ typedef struct { * Search Context */ typedef struct { - dns_rbtdb_t * rbtdb; - rbtdb_version_t * rbtversion; - rbtdb_serial_t serial; - unsigned int options; - dns_rbtnodechain_t chain; - isc_boolean_t copy_name; - isc_boolean_t need_cleanup; - isc_boolean_t wild; - dns_rbtnode_t * zonecut; - rdatasetheader_t * zonecut_rdataset; - rdatasetheader_t * zonecut_sigrdataset; - dns_fixedname_t zonecut_name; - isc_stdtime_t now; + dns_rbtdb_t * rbtdb; + rbtdb_version_t * rbtversion; + rbtdb_serial_t serial; + unsigned int options; + dns_rbtnodechain_t chain; + isc_boolean_t copy_name; + isc_boolean_t need_cleanup; + isc_boolean_t wild; + dns_rbtnode_t * zonecut; + rdatasetheader_t * zonecut_rdataset; + rdatasetheader_t * zonecut_sigrdataset; + dns_fixedname_t zonecut_name; + isc_stdtime_t now; } rbtdb_search_t; /*% * Load Context */ typedef struct { - dns_rbtdb_t * rbtdb; - isc_stdtime_t now; + dns_rbtdb_t * rbtdb; + isc_stdtime_t now; } rbtdb_load_t; static void rdataset_disassociate(dns_rdataset_t *rdataset); @@ -460,96 +433,96 @@ static void rdataset_current(dns_rdataset_t *rdataset, dns_rdata_t *rdata); static void rdataset_clone(dns_rdataset_t *source, dns_rdataset_t *target); static unsigned int rdataset_count(dns_rdataset_t *rdataset); static isc_result_t rdataset_getnoqname(dns_rdataset_t *rdataset, - dns_name_t *name, - dns_rdataset_t *nsec, - dns_rdataset_t *nsecsig); + dns_name_t *name, + dns_rdataset_t *nsec, + dns_rdataset_t *nsecsig); static isc_result_t rdataset_getadditional(dns_rdataset_t *rdataset, - dns_rdatasetadditional_t type, - dns_rdatatype_t qtype, - dns_acache_t *acache, - dns_zone_t **zonep, - dns_db_t **dbp, - dns_dbversion_t **versionp, - dns_dbnode_t **nodep, - dns_name_t *fname, - dns_message_t *msg, - isc_stdtime_t now); + dns_rdatasetadditional_t type, + dns_rdatatype_t qtype, + dns_acache_t *acache, + dns_zone_t **zonep, + dns_db_t **dbp, + dns_dbversion_t **versionp, + dns_dbnode_t **nodep, + dns_name_t *fname, + dns_message_t *msg, + isc_stdtime_t now); static isc_result_t rdataset_setadditional(dns_rdataset_t *rdataset, - dns_rdatasetadditional_t type, - dns_rdatatype_t qtype, - dns_acache_t *acache, - dns_zone_t *zone, - dns_db_t *db, - dns_dbversion_t *version, - dns_dbnode_t *node, - dns_name_t *fname); + dns_rdatasetadditional_t type, + dns_rdatatype_t qtype, + dns_acache_t *acache, + dns_zone_t *zone, + dns_db_t *db, + dns_dbversion_t *version, + dns_dbnode_t *node, + dns_name_t *fname); static isc_result_t rdataset_putadditional(dns_acache_t *acache, - dns_rdataset_t *rdataset, - dns_rdatasetadditional_t type, - dns_rdatatype_t qtype); + dns_rdataset_t *rdataset, + dns_rdatasetadditional_t type, + dns_rdatatype_t qtype); static inline isc_boolean_t need_headerupdate(rdatasetheader_t *header, - isc_stdtime_t now); + isc_stdtime_t now); static void update_header(dns_rbtdb_t *rbtdb, rdatasetheader_t *header, - isc_stdtime_t now); + isc_stdtime_t now); static void check_stale_cache(dns_rbtdb_t *rbtdb, dns_rbtnode_t *rbtnode, - isc_stdtime_t now, isc_boolean_t tree_locked); + isc_stdtime_t now, isc_boolean_t tree_locked); static dns_rdatasetmethods_t rdataset_methods = { - rdataset_disassociate, - rdataset_first, - rdataset_next, - rdataset_current, - rdataset_clone, - rdataset_count, - NULL, - rdataset_getnoqname, - rdataset_getadditional, - rdataset_setadditional, - rdataset_putadditional + rdataset_disassociate, + rdataset_first, + rdataset_next, + rdataset_current, + rdataset_clone, + rdataset_count, + NULL, + rdataset_getnoqname, + rdataset_getadditional, + rdataset_setadditional, + rdataset_putadditional }; static void rdatasetiter_destroy(dns_rdatasetiter_t **iteratorp); static isc_result_t rdatasetiter_first(dns_rdatasetiter_t *iterator); static isc_result_t rdatasetiter_next(dns_rdatasetiter_t *iterator); static void rdatasetiter_current(dns_rdatasetiter_t *iterator, - dns_rdataset_t *rdataset); + dns_rdataset_t *rdataset); static dns_rdatasetitermethods_t rdatasetiter_methods = { - rdatasetiter_destroy, - rdatasetiter_first, - rdatasetiter_next, - rdatasetiter_current + rdatasetiter_destroy, + rdatasetiter_first, + rdatasetiter_next, + rdatasetiter_current }; typedef struct rbtdb_rdatasetiter { - dns_rdatasetiter_t common; - rdatasetheader_t * current; + dns_rdatasetiter_t common; + rdatasetheader_t * current; } rbtdb_rdatasetiter_t; static void dbiterator_destroy(dns_dbiterator_t **iteratorp); static isc_result_t dbiterator_first(dns_dbiterator_t *iterator); static isc_result_t dbiterator_last(dns_dbiterator_t *iterator); static isc_result_t dbiterator_seek(dns_dbiterator_t *iterator, - dns_name_t *name); + dns_name_t *name); static isc_result_t dbiterator_prev(dns_dbiterator_t *iterator); static isc_result_t dbiterator_next(dns_dbiterator_t *iterator); static isc_result_t dbiterator_current(dns_dbiterator_t *iterator, - dns_dbnode_t **nodep, - dns_name_t *name); + dns_dbnode_t **nodep, + dns_name_t *name); static isc_result_t dbiterator_pause(dns_dbiterator_t *iterator); static isc_result_t dbiterator_origin(dns_dbiterator_t *iterator, - dns_name_t *name); + dns_name_t *name); static dns_dbiteratormethods_t dbiterator_methods = { - dbiterator_destroy, - dbiterator_first, - dbiterator_last, - dbiterator_seek, - dbiterator_prev, - dbiterator_next, - dbiterator_current, - dbiterator_pause, - dbiterator_origin + dbiterator_destroy, + dbiterator_first, + dbiterator_last, + dbiterator_seek, + dbiterator_prev, + dbiterator_next, + dbiterator_current, + dbiterator_pause, + dbiterator_origin }; #define DELETION_BATCH_MAX 64 @@ -558,17 +531,17 @@ static dns_dbiteratormethods_t dbiterator_methods = { * If 'paused' is ISC_TRUE, then the tree lock is not being held. */ typedef struct rbtdb_dbiterator { - dns_dbiterator_t common; - isc_boolean_t paused; - isc_boolean_t new_origin; - isc_rwlocktype_t tree_locked; - isc_result_t result; - dns_fixedname_t name; - dns_fixedname_t origin; - dns_rbtnodechain_t chain; - dns_rbtnode_t *node; - dns_rbtnode_t *deletions[DELETION_BATCH_MAX]; - int delete; + dns_dbiterator_t common; + isc_boolean_t paused; + isc_boolean_t new_origin; + isc_rwlocktype_t tree_locked; + isc_result_t result; + dns_fixedname_t name; + dns_fixedname_t origin; + dns_rbtnodechain_t chain; + dns_rbtnode_t *node; + dns_rbtnode_t *deletions[DELETION_BATCH_MAX]; + int delete; } rbtdb_dbiterator_t; @@ -576,7 +549,7 @@ typedef struct rbtdb_dbiterator { #define IS_CACHE(rbtdb) (((rbtdb)->common.attributes & DNS_DBATTR_CACHE) != 0) static void free_rbtdb(dns_rbtdb_t *rbtdb, isc_boolean_t log, - isc_event_t *event); + isc_event_t *event); static void overmem(dns_db_t *db, isc_boolean_t overmem); /*% @@ -621,49 +594,75 @@ static unsigned int init_count; static void attach(dns_db_t *source, dns_db_t **targetp) { - dns_rbtdb_t *rbtdb = (dns_rbtdb_t *)source; + dns_rbtdb_t *rbtdb = (dns_rbtdb_t *)source; - REQUIRE(VALID_RBTDB(rbtdb)); + REQUIRE(VALID_RBTDB(rbtdb)); - isc_refcount_increment(&rbtdb->references, NULL); + isc_refcount_increment(&rbtdb->references, NULL); - *targetp = source; + *targetp = source; } static void free_rbtdb_callback(isc_task_t *task, isc_event_t *event) { - dns_rbtdb_t *rbtdb = event->ev_arg; + dns_rbtdb_t *rbtdb = event->ev_arg; + + UNUSED(task); - UNUSED(task); + free_rbtdb(rbtdb, ISC_TRUE, event); +} - free_rbtdb(rbtdb, ISC_TRUE, event); +static void +update_rrsetstats(dns_rbtdb_t *rbtdb, rdatasetheader_t *header, + isc_boolean_t increment) +{ + dns_rdatastatstype_t statattributes = 0; + dns_rdatastatstype_t base = 0; + dns_rdatastatstype_t type; + + /* At the moment we count statistics only for cache DB */ + INSIST(IS_CACHE(rbtdb)); + + if (NXDOMAIN(header)) + statattributes = DNS_RDATASTATSTYPE_ATTR_NXDOMAIN; + else if (RBTDB_RDATATYPE_BASE(header->type) == 0) { + statattributes = DNS_RDATASTATSTYPE_ATTR_NXRRSET; + base = RBTDB_RDATATYPE_EXT(header->type); + } else + base = RBTDB_RDATATYPE_BASE(header->type); + + type = DNS_RDATASTATSTYPE_VALUE(base, statattributes); + if (increment) + dns_rdatasetstats_increment(rbtdb->rrsetstats, type); + else + dns_rdatasetstats_decrement(rbtdb->rrsetstats, type); } static void set_ttl(dns_rbtdb_t *rbtdb, rdatasetheader_t *header, dns_ttl_t newttl) { - int idx; - isc_heap_t *heap; - dns_ttl_t oldttl; - - oldttl = header->rdh_ttl; - header->rdh_ttl = newttl; - - /* - * It's possible the rbtdb is not a cache. If this is the case, - * we will not have a heap, and we move on. If we do, though, - * we might need to adjust things. - */ - if (header->heap_index == 0 || newttl == oldttl) - return; - idx = header->node->locknum; - if (rbtdb->heaps == NULL || rbtdb->heaps[idx] == NULL) - return; - heap = rbtdb->heaps[idx]; - - if (newttl < oldttl) - isc_heap_increased(heap, header->heap_index); - else - isc_heap_decreased(heap, header->heap_index); + int idx; + isc_heap_t *heap; + dns_ttl_t oldttl; + + oldttl = header->rdh_ttl; + header->rdh_ttl = newttl; + + /* + * It's possible the rbtdb is not a cache. If this is the case, + * we will not have a heap, and we move on. If we do, though, + * we might need to adjust things. + */ + if (header->heap_index == 0 || newttl == oldttl) + return; + idx = header->node->locknum; + if (rbtdb->heaps == NULL || rbtdb->heaps[idx] == NULL) + return; + heap = rbtdb->heaps[idx]; + + if (newttl < oldttl) + isc_heap_increased(heap, header->heap_index); + else + isc_heap_decreased(heap, header->heap_index); } /*% @@ -672,12 +671,12 @@ set_ttl(dns_rbtdb_t *rbtdb, rdatasetheader_t *header, dns_ttl_t newttl) { */ static isc_boolean_t ttl_sooner(void *v1, void *v2) { - rdatasetheader_t *h1 = v1; - rdatasetheader_t *h2 = v2; + rdatasetheader_t *h1 = v1; + rdatasetheader_t *h2 = v2; - if (h1->rdh_ttl < h2->rdh_ttl) - return (ISC_TRUE); - return (ISC_FALSE); + if (h1->rdh_ttl < h2->rdh_ttl) + return (ISC_TRUE); + return (ISC_FALSE); } /*% @@ -685,9 +684,9 @@ ttl_sooner(void *v1, void *v2) { */ static void ttl_set_index(void *what, unsigned int index) { - rdatasetheader_t *h = what; + rdatasetheader_t *h = what; - h->heap_index = index; + h->heap_index = index; } /*% @@ -698,755 +697,663 @@ ttl_set_index(void *what, unsigned int index) { */ static unsigned int adjust_quantum(unsigned int old, isc_time_t *start) { - unsigned int pps = dns_pps; /* packets per second */ - unsigned int interval; - isc_uint64_t usecs; - isc_time_t end; - unsigned int new; - - if (pps < 100) - pps = 100; - isc_time_now(&end); - - interval = 1000000 / pps; /* interval in usec */ - if (interval == 0) - interval = 1; - usecs = isc_time_microdiff(&end, start); - if (usecs == 0) { - /* - * We were unable to measure the amount of time taken. - * Double the nodes deleted next time. - */ - old *= 2; - if (old > 1000) - old = 1000; - return (old); - } - new = old * interval; - new /= (unsigned int)usecs; - if (new == 0) - new = 1; - else if (new > 1000) - new = 1000; - - /* Smooth */ - new = (new + old * 3) / 4; - - isc_log_write(dns_lctx, DNS_LOGCATEGORY_DATABASE, DNS_LOGMODULE_CACHE, - ISC_LOG_DEBUG(1), "adjust_quantum -> %d", new); - - return (new); + unsigned int pps = dns_pps; /* packets per second */ + unsigned int interval; + isc_uint64_t usecs; + isc_time_t end; + unsigned int new; + + if (pps < 100) + pps = 100; + isc_time_now(&end); + + interval = 1000000 / pps; /* interval in usec */ + if (interval == 0) + interval = 1; + usecs = isc_time_microdiff(&end, start); + if (usecs == 0) { + /* + * We were unable to measure the amount of time taken. + * Double the nodes deleted next time. + */ + old *= 2; + if (old > 1000) + old = 1000; + return (old); + } + new = old * interval; + new /= (unsigned int)usecs; + if (new == 0) + new = 1; + else if (new > 1000) + new = 1000; + + /* Smooth */ + new = (new + old * 3) / 4; + + isc_log_write(dns_lctx, DNS_LOGCATEGORY_DATABASE, DNS_LOGMODULE_CACHE, + ISC_LOG_DEBUG(1), "adjust_quantum -> %d", new); + + return (new); } static void free_rbtdb(dns_rbtdb_t *rbtdb, isc_boolean_t log, isc_event_t *event) { - unsigned int i; - isc_ondestroy_t ondest; - isc_result_t result; - char buf[DNS_NAME_FORMATSIZE]; - isc_time_t start; - - if (IS_CACHE(rbtdb) && rbtdb->common.rdclass == dns_rdataclass_in) - overmem((dns_db_t *)rbtdb, (isc_boolean_t)-1); - - REQUIRE(rbtdb->current_version != NULL || EMPTY(rbtdb->open_versions)); - REQUIRE(rbtdb->future_version == NULL); - - if (rbtdb->current_version != NULL) { - unsigned int refs; - - isc_refcount_decrement(&rbtdb->current_version->references, - &refs); - INSIST(refs == 0); - UNLINK(rbtdb->open_versions, rbtdb->current_version, link); - isc_refcount_destroy(&rbtdb->current_version->references); - isc_mem_put(rbtdb->common.mctx, rbtdb->current_version, - sizeof(rbtdb_version_t)); - } - if (IS_CACHE(rbtdb)) { - /* - * We assume the number of remaining dead nodes is reasonably - * small; the overhead of unlinking all nodes here should be - * negligible. - */ - for (i = 0; i < rbtdb->node_lock_count; i++) { - dns_rbtnode_t *node; - - node = ISC_LIST_HEAD(rbtdb->deadnodes[i]); - while (node != NULL) { - ISC_LIST_UNLINK(rbtdb->deadnodes[i], node, - deadlink); - node = ISC_LIST_HEAD(rbtdb->deadnodes[i]); - } - } - } - if (event == NULL) - rbtdb->quantum = (rbtdb->task != NULL) ? 100 : 0; + unsigned int i; + isc_ondestroy_t ondest; + isc_result_t result; + char buf[DNS_NAME_FORMATSIZE]; + isc_time_t start; + + if (IS_CACHE(rbtdb) && rbtdb->common.rdclass == dns_rdataclass_in) + overmem((dns_db_t *)rbtdb, (isc_boolean_t)-1); + + REQUIRE(rbtdb->current_version != NULL || EMPTY(rbtdb->open_versions)); + REQUIRE(rbtdb->future_version == NULL); + + if (rbtdb->current_version != NULL) { + unsigned int refs; + + isc_refcount_decrement(&rbtdb->current_version->references, + &refs); + INSIST(refs == 0); + UNLINK(rbtdb->open_versions, rbtdb->current_version, link); + isc_refcount_destroy(&rbtdb->current_version->references); + isc_mem_put(rbtdb->common.mctx, rbtdb->current_version, + sizeof(rbtdb_version_t)); + } + + /* + * We assume the number of remaining dead nodes is reasonably small; + * the overhead of unlinking all nodes here should be negligible. + */ + for (i = 0; i < rbtdb->node_lock_count; i++) { + dns_rbtnode_t *node; + + node = ISC_LIST_HEAD(rbtdb->deadnodes[i]); + while (node != NULL) { + ISC_LIST_UNLINK(rbtdb->deadnodes[i], node, deadlink); + node = ISC_LIST_HEAD(rbtdb->deadnodes[i]); + } + } + + if (event == NULL) + rbtdb->quantum = (rbtdb->task != NULL) ? 100 : 0; again: - if (rbtdb->tree != NULL) { - isc_time_now(&start); - result = dns_rbt_destroy2(&rbtdb->tree, rbtdb->quantum); - if (result == ISC_R_QUOTA) { - INSIST(rbtdb->task != NULL); - if (rbtdb->quantum != 0) - rbtdb->quantum = adjust_quantum(rbtdb->quantum, - &start); - if (event == NULL) - event = isc_event_allocate(rbtdb->common.mctx, - NULL, - DNS_EVENT_FREESTORAGE, - free_rbtdb_callback, - rbtdb, - sizeof(isc_event_t)); - if (event == NULL) - goto again; - isc_task_send(rbtdb->task, &event); - return; - } - INSIST(result == ISC_R_SUCCESS && rbtdb->tree == NULL); - } - if (event != NULL) - isc_event_free(&event); - if (log) { - if (dns_name_dynamic(&rbtdb->common.origin)) - dns_name_format(&rbtdb->common.origin, buf, - sizeof(buf)); - else - strcpy(buf, ""); - isc_log_write(dns_lctx, DNS_LOGCATEGORY_DATABASE, - DNS_LOGMODULE_CACHE, ISC_LOG_DEBUG(1), - "done free_rbtdb(%s)", buf); - } - if (dns_name_dynamic(&rbtdb->common.origin)) - dns_name_free(&rbtdb->common.origin, rbtdb->common.mctx); - for (i = 0; i < rbtdb->node_lock_count; i++) { - isc_refcount_destroy(&rbtdb->node_locks[i].references); - NODE_DESTROYLOCK(&rbtdb->node_locks[i].lock); - } - - /* - * Clean up LRU cache objects. - */ - if (rbtdb->rdatasets != NULL) { - for (i = 0; i < rbtdb->node_lock_count; i++) - INSIST(ISC_LIST_EMPTY(rbtdb->rdatasets[i])); - isc_mem_put(rbtdb->common.mctx, rbtdb->rdatasets, - rbtdb->node_lock_count * - sizeof(rdatasetheaderlist_t)); - } - /* - * Clean up dead node buckets. - */ - if (rbtdb->deadnodes != NULL) { - for (i = 0; i < rbtdb->node_lock_count; i++) - INSIST(ISC_LIST_EMPTY(rbtdb->deadnodes[i])); - isc_mem_put(rbtdb->common.mctx, rbtdb->deadnodes, - rbtdb->node_lock_count * sizeof(rbtnodelist_t)); - } - /* - * Clean up TTL heap cache objects. - */ - if (rbtdb->heaps != NULL) { - for (i = 0; i < rbtdb->node_lock_count; i++) - isc_heap_destroy(&rbtdb->heaps[i]); - isc_mem_put(rbtdb->common.mctx, rbtdb->heaps, - rbtdb->node_lock_count * - sizeof(isc_heap_t *)); - } - - isc_mem_put(rbtdb->common.mctx, rbtdb->node_locks, - rbtdb->node_lock_count * sizeof(rbtdb_nodelock_t)); - isc_rwlock_destroy(&rbtdb->tree_lock); - isc_refcount_destroy(&rbtdb->references); - if (rbtdb->task != NULL) - isc_task_detach(&rbtdb->task); - -#ifdef LRU_DEBUG - /* Experimental logging about memory usage */ - if (IS_CACHE(rbtdb) && rbtdb->common.rdclass == dns_rdataclass_in) { - isc_log_write(dns_lctx, DNS_LOGCATEGORY_DATABASE, - DNS_LOGMODULE_CACHE, ISC_LOG_INFO, - "cache DB %p: mem inuse %lu, XXX node, " - "%d/%u current/total cache, %d/%u neg, %d/%u A, %d/%u AAAA, " - "%d/%u NS, %d/%u PTR, %d/%u glue, " - "%d/%u additional, purge/scan=%u(%u expiry, %u lru)/%u, " - "overmem=%d", - rbtdb, - (unsigned long)isc_mem_inuse(rbtdb->common.mctx), - rbtdb->cachestat.cache_current, rbtdb->cachestat.cache_total, - rbtdb->cachestat.ncache_current, rbtdb->cachestat.ncache_total, - rbtdb->cachestat.a_current, rbtdb->cachestat.a_total, - rbtdb->cachestat.aaaa_current, rbtdb->cachestat.aaaa_total, - rbtdb->cachestat.ns_current, rbtdb->cachestat.ns_total, - rbtdb->cachestat.ptr_current, rbtdb->cachestat.ptr_total, - rbtdb->cachestat.glue_current, rbtdb->cachestat.glue_total, - rbtdb->cachestat.additional_current, - rbtdb->cachestat.additional_total, - rbtdb->cachestat.stale_purge, rbtdb->cachestat.stale_expire, - rbtdb->cachestat.stale_lru, rbtdb->cachestat.stale_scan, - rbtdb->overmem); - INSIST(rbtdb->cachestat.cache_current == 0); - INSIST(rbtdb->cachestat.ncache_current == 0); - INSIST(rbtdb->cachestat.a_current == 0); - INSIST(rbtdb->cachestat.aaaa_current == 0); - INSIST(rbtdb->cachestat.ns_current == 0); - INSIST(rbtdb->cachestat.ptr_current == 0); - INSIST(rbtdb->cachestat.glue_current == 0); - INSIST(rbtdb->cachestat.additional_current == 0); - } -#endif - - RBTDB_DESTROYLOCK(&rbtdb->lock); - rbtdb->common.magic = 0; - rbtdb->common.impmagic = 0; - ondest = rbtdb->common.ondest; - isc_mem_putanddetach(&rbtdb->common.mctx, rbtdb, sizeof(*rbtdb)); - isc_ondestroy_notify(&ondest, rbtdb); + if (rbtdb->tree != NULL) { + isc_time_now(&start); + result = dns_rbt_destroy2(&rbtdb->tree, rbtdb->quantum); + if (result == ISC_R_QUOTA) { + INSIST(rbtdb->task != NULL); + if (rbtdb->quantum != 0) + rbtdb->quantum = adjust_quantum(rbtdb->quantum, + &start); + if (event == NULL) + event = isc_event_allocate(rbtdb->common.mctx, + NULL, + DNS_EVENT_FREESTORAGE, + free_rbtdb_callback, + rbtdb, + sizeof(isc_event_t)); + if (event == NULL) + goto again; + isc_task_send(rbtdb->task, &event); + return; + } + INSIST(result == ISC_R_SUCCESS && rbtdb->tree == NULL); + } + if (event != NULL) + isc_event_free(&event); + if (log) { + if (dns_name_dynamic(&rbtdb->common.origin)) + dns_name_format(&rbtdb->common.origin, buf, + sizeof(buf)); + else + strcpy(buf, ""); + isc_log_write(dns_lctx, DNS_LOGCATEGORY_DATABASE, + DNS_LOGMODULE_CACHE, ISC_LOG_DEBUG(1), + "done free_rbtdb(%s)", buf); + } + if (dns_name_dynamic(&rbtdb->common.origin)) + dns_name_free(&rbtdb->common.origin, rbtdb->common.mctx); + for (i = 0; i < rbtdb->node_lock_count; i++) { + isc_refcount_destroy(&rbtdb->node_locks[i].references); + NODE_DESTROYLOCK(&rbtdb->node_locks[i].lock); + } + + /* + * Clean up LRU cache objects. + */ + if (rbtdb->rdatasets != NULL) { + for (i = 0; i < rbtdb->node_lock_count; i++) + INSIST(ISC_LIST_EMPTY(rbtdb->rdatasets[i])); + isc_mem_put(rbtdb->common.mctx, rbtdb->rdatasets, + rbtdb->node_lock_count * + sizeof(rdatasetheaderlist_t)); + } + /* + * Clean up dead node buckets. + */ + if (rbtdb->deadnodes != NULL) { + for (i = 0; i < rbtdb->node_lock_count; i++) + INSIST(ISC_LIST_EMPTY(rbtdb->deadnodes[i])); + isc_mem_put(rbtdb->common.mctx, rbtdb->deadnodes, + rbtdb->node_lock_count * sizeof(rbtnodelist_t)); + } + /* + * Clean up TTL heap cache objects. + */ + if (rbtdb->heaps != NULL) { + for (i = 0; i < rbtdb->node_lock_count; i++) + isc_heap_destroy(&rbtdb->heaps[i]); + isc_mem_put(rbtdb->common.mctx, rbtdb->heaps, + rbtdb->node_lock_count * + sizeof(isc_heap_t *)); + } + + if (rbtdb->rrsetstats != NULL) + dns_stats_detach(&rbtdb->rrsetstats); + + isc_mem_put(rbtdb->common.mctx, rbtdb->node_locks, + rbtdb->node_lock_count * sizeof(rbtdb_nodelock_t)); + isc_rwlock_destroy(&rbtdb->tree_lock); + isc_refcount_destroy(&rbtdb->references); + if (rbtdb->task != NULL) + isc_task_detach(&rbtdb->task); + + RBTDB_DESTROYLOCK(&rbtdb->lock); + rbtdb->common.magic = 0; + rbtdb->common.impmagic = 0; + ondest = rbtdb->common.ondest; + isc_mem_putanddetach(&rbtdb->common.mctx, rbtdb, sizeof(*rbtdb)); + isc_ondestroy_notify(&ondest, rbtdb); } static inline void maybe_free_rbtdb(dns_rbtdb_t *rbtdb) { - isc_boolean_t want_free = ISC_FALSE; - unsigned int i; - unsigned int inactive = 0; - - /* XXX check for open versions here */ - - if (rbtdb->soanode != NULL) - dns_db_detachnode((dns_db_t *)rbtdb, &rbtdb->soanode); - if (rbtdb->nsnode != NULL) - dns_db_detachnode((dns_db_t *)rbtdb, &rbtdb->nsnode); - - /* - * Even though there are no external direct references, there still - * may be nodes in use. - */ - for (i = 0; i < rbtdb->node_lock_count; i++) { - NODE_LOCK(&rbtdb->node_locks[i].lock, isc_rwlocktype_write); - rbtdb->node_locks[i].exiting = ISC_TRUE; - NODE_UNLOCK(&rbtdb->node_locks[i].lock, isc_rwlocktype_write); - if (isc_refcount_current(&rbtdb->node_locks[i].references) - == 0) { - inactive++; - } - } - - if (inactive != 0) { - RBTDB_LOCK(&rbtdb->lock, isc_rwlocktype_write); - rbtdb->active -= inactive; - if (rbtdb->active == 0) - want_free = ISC_TRUE; - RBTDB_UNLOCK(&rbtdb->lock, isc_rwlocktype_write); - if (want_free) { - char buf[DNS_NAME_FORMATSIZE]; - if (dns_name_dynamic(&rbtdb->common.origin)) - dns_name_format(&rbtdb->common.origin, buf, - sizeof(buf)); - else - strcpy(buf, ""); - isc_log_write(dns_lctx, DNS_LOGCATEGORY_DATABASE, - DNS_LOGMODULE_CACHE, ISC_LOG_DEBUG(1), - "calling free_rbtdb(%s)", buf); - free_rbtdb(rbtdb, ISC_TRUE, NULL); - } - } + isc_boolean_t want_free = ISC_FALSE; + unsigned int i; + unsigned int inactive = 0; + + /* XXX check for open versions here */ + + if (rbtdb->soanode != NULL) + dns_db_detachnode((dns_db_t *)rbtdb, &rbtdb->soanode); + if (rbtdb->nsnode != NULL) + dns_db_detachnode((dns_db_t *)rbtdb, &rbtdb->nsnode); + + /* + * Even though there are no external direct references, there still + * may be nodes in use. + */ + for (i = 0; i < rbtdb->node_lock_count; i++) { + NODE_LOCK(&rbtdb->node_locks[i].lock, isc_rwlocktype_write); + rbtdb->node_locks[i].exiting = ISC_TRUE; + NODE_UNLOCK(&rbtdb->node_locks[i].lock, isc_rwlocktype_write); + if (isc_refcount_current(&rbtdb->node_locks[i].references) + == 0) { + inactive++; + } + } + + if (inactive != 0) { + RBTDB_LOCK(&rbtdb->lock, isc_rwlocktype_write); + rbtdb->active -= inactive; + if (rbtdb->active == 0) + want_free = ISC_TRUE; + RBTDB_UNLOCK(&rbtdb->lock, isc_rwlocktype_write); + if (want_free) { + char buf[DNS_NAME_FORMATSIZE]; + if (dns_name_dynamic(&rbtdb->common.origin)) + dns_name_format(&rbtdb->common.origin, buf, + sizeof(buf)); + else + strcpy(buf, ""); + isc_log_write(dns_lctx, DNS_LOGCATEGORY_DATABASE, + DNS_LOGMODULE_CACHE, ISC_LOG_DEBUG(1), + "calling free_rbtdb(%s)", buf); + free_rbtdb(rbtdb, ISC_TRUE, NULL); + } + } } static void detach(dns_db_t **dbp) { - dns_rbtdb_t *rbtdb = (dns_rbtdb_t *)(*dbp); - unsigned int refs; + dns_rbtdb_t *rbtdb = (dns_rbtdb_t *)(*dbp); + unsigned int refs; - REQUIRE(VALID_RBTDB(rbtdb)); + REQUIRE(VALID_RBTDB(rbtdb)); - isc_refcount_decrement(&rbtdb->references, &refs); + isc_refcount_decrement(&rbtdb->references, &refs); - if (refs == 0) - maybe_free_rbtdb(rbtdb); + if (refs == 0) + maybe_free_rbtdb(rbtdb); - *dbp = NULL; + *dbp = NULL; } static void currentversion(dns_db_t *db, dns_dbversion_t **versionp) { - dns_rbtdb_t *rbtdb = (dns_rbtdb_t *)db; - rbtdb_version_t *version; - unsigned int refs; + dns_rbtdb_t *rbtdb = (dns_rbtdb_t *)db; + rbtdb_version_t *version; + unsigned int refs; - REQUIRE(VALID_RBTDB(rbtdb)); + REQUIRE(VALID_RBTDB(rbtdb)); - RBTDB_LOCK(&rbtdb->lock, isc_rwlocktype_read); - version = rbtdb->current_version; - isc_refcount_increment(&version->references, &refs); - RBTDB_UNLOCK(&rbtdb->lock, isc_rwlocktype_read); + RBTDB_LOCK(&rbtdb->lock, isc_rwlocktype_read); + version = rbtdb->current_version; + isc_refcount_increment(&version->references, &refs); + RBTDB_UNLOCK(&rbtdb->lock, isc_rwlocktype_read); - *versionp = (dns_dbversion_t *)version; + *versionp = (dns_dbversion_t *)version; } static inline rbtdb_version_t * allocate_version(isc_mem_t *mctx, rbtdb_serial_t serial, - unsigned int references, isc_boolean_t writer) + unsigned int references, isc_boolean_t writer) { - isc_result_t result; - rbtdb_version_t *version; - - version = isc_mem_get(mctx, sizeof(*version)); - if (version == NULL) - return (NULL); - version->serial = serial; - result = isc_refcount_init(&version->references, references); - if (result != ISC_R_SUCCESS) { - isc_mem_put(mctx, version, sizeof(*version)); - return (NULL); - } - version->writer = writer; - version->commit_ok = ISC_FALSE; - ISC_LIST_INIT(version->changed_list); - ISC_LINK_INIT(version, link); - - return (version); + isc_result_t result; + rbtdb_version_t *version; + + version = isc_mem_get(mctx, sizeof(*version)); + if (version == NULL) + return (NULL); + version->serial = serial; + result = isc_refcount_init(&version->references, references); + if (result != ISC_R_SUCCESS) { + isc_mem_put(mctx, version, sizeof(*version)); + return (NULL); + } + version->writer = writer; + version->commit_ok = ISC_FALSE; + ISC_LIST_INIT(version->changed_list); + ISC_LINK_INIT(version, link); + + return (version); } static isc_result_t newversion(dns_db_t *db, dns_dbversion_t **versionp) { - dns_rbtdb_t *rbtdb = (dns_rbtdb_t *)db; - rbtdb_version_t *version; - - REQUIRE(VALID_RBTDB(rbtdb)); - REQUIRE(versionp != NULL && *versionp == NULL); - REQUIRE(rbtdb->future_version == NULL); - - RBTDB_LOCK(&rbtdb->lock, isc_rwlocktype_write); - RUNTIME_CHECK(rbtdb->next_serial != 0); /* XXX Error? */ - version = allocate_version(rbtdb->common.mctx, rbtdb->next_serial, 1, - ISC_TRUE); - if (version != NULL) { - version->commit_ok = ISC_TRUE; - rbtdb->next_serial++; - rbtdb->future_version = version; - } - RBTDB_UNLOCK(&rbtdb->lock, isc_rwlocktype_write); - - if (version == NULL) - return (ISC_R_NOMEMORY); - - *versionp = version; - - return (ISC_R_SUCCESS); + dns_rbtdb_t *rbtdb = (dns_rbtdb_t *)db; + rbtdb_version_t *version; + + REQUIRE(VALID_RBTDB(rbtdb)); + REQUIRE(versionp != NULL && *versionp == NULL); + REQUIRE(rbtdb->future_version == NULL); + + RBTDB_LOCK(&rbtdb->lock, isc_rwlocktype_write); + RUNTIME_CHECK(rbtdb->next_serial != 0); /* XXX Error? */ + version = allocate_version(rbtdb->common.mctx, rbtdb->next_serial, 1, + ISC_TRUE); + if (version != NULL) { + version->commit_ok = ISC_TRUE; + rbtdb->next_serial++; + rbtdb->future_version = version; + } + RBTDB_UNLOCK(&rbtdb->lock, isc_rwlocktype_write); + + if (version == NULL) + return (ISC_R_NOMEMORY); + + *versionp = version; + + return (ISC_R_SUCCESS); } static void attachversion(dns_db_t *db, dns_dbversion_t *source, - dns_dbversion_t **targetp) + dns_dbversion_t **targetp) { - dns_rbtdb_t *rbtdb = (dns_rbtdb_t *)db; - rbtdb_version_t *rbtversion = source; - unsigned int refs; + dns_rbtdb_t *rbtdb = (dns_rbtdb_t *)db; + rbtdb_version_t *rbtversion = source; + unsigned int refs; - REQUIRE(VALID_RBTDB(rbtdb)); + REQUIRE(VALID_RBTDB(rbtdb)); - isc_refcount_increment(&rbtversion->references, &refs); - INSIST(refs > 1); + isc_refcount_increment(&rbtversion->references, &refs); + INSIST(refs > 1); - *targetp = rbtversion; + *targetp = rbtversion; } static rbtdb_changed_t * add_changed(dns_rbtdb_t *rbtdb, rbtdb_version_t *version, - dns_rbtnode_t *node) + dns_rbtnode_t *node) { - rbtdb_changed_t *changed; - unsigned int refs; + rbtdb_changed_t *changed; + unsigned int refs; - /* - * Caller must be holding the node lock if its reference must be - * protected by the lock. - */ + /* + * Caller must be holding the node lock if its reference must be + * protected by the lock. + */ - changed = isc_mem_get(rbtdb->common.mctx, sizeof(*changed)); + changed = isc_mem_get(rbtdb->common.mctx, sizeof(*changed)); - RBTDB_LOCK(&rbtdb->lock, isc_rwlocktype_write); + RBTDB_LOCK(&rbtdb->lock, isc_rwlocktype_write); - REQUIRE(version->writer); + REQUIRE(version->writer); - if (changed != NULL) { - dns_rbtnode_refincrement(node, &refs); - INSIST(refs != 0); - changed->node = node; - changed->dirty = ISC_FALSE; - ISC_LIST_INITANDAPPEND(version->changed_list, changed, link); - } else - version->commit_ok = ISC_FALSE; + if (changed != NULL) { + dns_rbtnode_refincrement(node, &refs); + INSIST(refs != 0); + changed->node = node; + changed->dirty = ISC_FALSE; + ISC_LIST_INITANDAPPEND(version->changed_list, changed, link); + } else + version->commit_ok = ISC_FALSE; - RBTDB_UNLOCK(&rbtdb->lock, isc_rwlocktype_write); + RBTDB_UNLOCK(&rbtdb->lock, isc_rwlocktype_write); - return (changed); + return (changed); } static void free_acachearray(isc_mem_t *mctx, rdatasetheader_t *header, - acachectl_t *array) + acachectl_t *array) { - unsigned int count; - unsigned int i; - unsigned char *raw; /* RDATASLAB */ + unsigned int count; + unsigned int i; + unsigned char *raw; /* RDATASLAB */ - /* - * The caller must be holding the corresponding node lock. - */ + /* + * The caller must be holding the corresponding node lock. + */ - if (array == NULL) - return; + if (array == NULL) + return; - raw = (unsigned char *)header + sizeof(*header); - count = raw[0] * 256 + raw[1]; + raw = (unsigned char *)header + sizeof(*header); + count = raw[0] * 256 + raw[1]; - /* - * Sanity check: since an additional cache entry has a reference to - * the original DB node (in the callback arg), there should be no - * acache entries when the node can be freed. - */ - for (i = 0; i < count; i++) - INSIST(array[i].entry == NULL && array[i].cbarg == NULL); + /* + * Sanity check: since an additional cache entry has a reference to + * the original DB node (in the callback arg), there should be no + * acache entries when the node can be freed. + */ + for (i = 0; i < count; i++) + INSIST(array[i].entry == NULL && array[i].cbarg == NULL); - isc_mem_put(mctx, array, count * sizeof(acachectl_t)); + isc_mem_put(mctx, array, count * sizeof(acachectl_t)); } static inline void free_noqname(isc_mem_t *mctx, struct noqname **noqname) { - if (dns_name_dynamic(&(*noqname)->name)) - dns_name_free(&(*noqname)->name, mctx); - if ((*noqname)->nsec != NULL) - isc_mem_put(mctx, (*noqname)->nsec, - dns_rdataslab_size((*noqname)->nsec, 0)); - if ((*noqname)->nsecsig != NULL) - isc_mem_put(mctx, (*noqname)->nsecsig, - dns_rdataslab_size((*noqname)->nsecsig, 0)); - isc_mem_put(mctx, *noqname, sizeof(**noqname)); - *noqname = NULL; + if (dns_name_dynamic(&(*noqname)->name)) + dns_name_free(&(*noqname)->name, mctx); + if ((*noqname)->nsec != NULL) + isc_mem_put(mctx, (*noqname)->nsec, + dns_rdataslab_size((*noqname)->nsec, 0)); + if ((*noqname)->nsecsig != NULL) + isc_mem_put(mctx, (*noqname)->nsecsig, + dns_rdataslab_size((*noqname)->nsecsig, 0)); + isc_mem_put(mctx, *noqname, sizeof(**noqname)); + *noqname = NULL; } static inline void init_rdataset(dns_rbtdb_t *rbtdb, rdatasetheader_t *h) { - ISC_LINK_INIT(h, lru_link); - h->heap_index = 0; + ISC_LINK_INIT(h, lru_link); + h->heap_index = 0; #if TRACE_HEADER - if (IS_CACHE(rbtdb) && rbtdb->common.rdclass == dns_rdataclass_in) - fprintf(stderr, "initialized header: %p\n", h); + if (IS_CACHE(rbtdb) && rbtdb->common.rdclass == dns_rdataclass_in) + fprintf(stderr, "initialized header: %p\n", h); #else - UNUSED(rbtdb); + UNUSED(rbtdb); #endif } static inline rdatasetheader_t * new_rdataset(dns_rbtdb_t *rbtdb, isc_mem_t *mctx) { - rdatasetheader_t *h; + rdatasetheader_t *h; - h = isc_mem_get(mctx, sizeof(*h)); - if (h == NULL) - return (NULL); + h = isc_mem_get(mctx, sizeof(*h)); + if (h == NULL) + return (NULL); #if TRACE_HEADER - if (IS_CACHE(rbtdb) && rbtdb->common.rdclass == dns_rdataclass_in) - fprintf(stderr, "allocated header: %p\n", h); + if (IS_CACHE(rbtdb) && rbtdb->common.rdclass == dns_rdataclass_in) + fprintf(stderr, "allocated header: %p\n", h); #endif - init_rdataset(rbtdb, h); - return (h); + init_rdataset(rbtdb, h); + return (h); } static inline void free_rdataset(dns_rbtdb_t *rbtdb, isc_mem_t *mctx, rdatasetheader_t *rdataset) { - unsigned int size; - -#ifdef LRU_DEBUG - /* - * for debug: statistics update. - * Nothing in this block should have any side-effects. - */ - if (EXISTS(rdataset) && - (rdataset->attributes & RDATASET_ATTR_CACHE) != 0) { - rbtdb->cachestat.cache_current--; - if ((rdataset->attributes & RDATASET_ATTR_CANCELED) != 0) - rbtdb->cachestat.cache_total--; - if (RBTDB_RDATATYPE_BASE(rdataset->type) == 0) { - rbtdb->cachestat.ncache_current--; - INSIST(rbtdb->cachestat.ncache_current >= 0); - if ((rdataset->attributes & RDATASET_ATTR_CANCELED) - != 0) - rbtdb->cachestat.ncache_total--; - } - if (rdataset->type == dns_rdatatype_a) { - rbtdb->cachestat.a_current--; - INSIST(rbtdb->cachestat.a_current >= 0); - if ((rdataset->attributes & RDATASET_ATTR_CANCELED) - != 0) - rbtdb->cachestat.a_total--; - } else if (rdataset->type == dns_rdatatype_aaaa) { - rbtdb->cachestat.aaaa_current--; - INSIST(rbtdb->cachestat.aaaa_current >= 0); - if ((rdataset->attributes & RDATASET_ATTR_CANCELED) - != 0) - rbtdb->cachestat.aaaa_total--; - } else if (rdataset->type == dns_rdatatype_ptr) { - rbtdb->cachestat.ptr_current--; - INSIST(rbtdb->cachestat.ptr_current >= 0); - if ((rdataset->attributes & RDATASET_ATTR_CANCELED) - != 0) - rbtdb->cachestat.ptr_total--; - } else if (rdataset->type == dns_rdatatype_ns) { - rbtdb->cachestat.ns_current--; - INSIST(rbtdb->cachestat.ns_current >= 0); - if ((rdataset->attributes & RDATASET_ATTR_CANCELED) - != 0) - rbtdb->cachestat.ns_total--; - } - if (rdataset->trust == dns_trust_glue && - (rdataset->type == dns_rdatatype_a || - rdataset->type == dns_rdatatype_aaaa)) { - rbtdb->cachestat.glue_current--; - INSIST(rbtdb->cachestat.glue_current >= 0); - if ((rdataset->attributes & RDATASET_ATTR_CANCELED) - != 0) - rbtdb->cachestat.glue_total--; - } - if (rdataset->trust == dns_trust_additional && - (rdataset->type == dns_rdatatype_a || - rdataset->type == dns_rdatatype_aaaa)) { - rbtdb->cachestat.additional_current--; - INSIST(rbtdb->cachestat.additional_current >= 0); - if ((rdataset->attributes & RDATASET_ATTR_CANCELED) - != 0) - rbtdb->cachestat.additional_total--; - } - } -#endif - - if (IS_CACHE(rbtdb) && ISC_LINK_LINKED(rdataset, lru_link)) { - int idx = rdataset->node->locknum; - ISC_LIST_UNLINK(rbtdb->rdatasets[idx], rdataset, lru_link); - if (rdataset->heap_index != 0) { - isc_heap_delete(rbtdb->heaps[idx], - rdataset->heap_index); - } - rdataset->heap_index = 0; - } - - if (rdataset->noqname != NULL) - free_noqname(mctx, &rdataset->noqname); - - free_acachearray(mctx, rdataset, rdataset->additional_auth); - free_acachearray(mctx, rdataset, rdataset->additional_glue); - - if ((rdataset->attributes & RDATASET_ATTR_NONEXISTENT) != 0) - size = sizeof(*rdataset); - else - size = dns_rdataslab_size((unsigned char *)rdataset, - sizeof(*rdataset)); - isc_mem_put(mctx, rdataset, size); + unsigned int size; + + if (EXISTS(rdataset) && + (rdataset->attributes & RDATASET_ATTR_STATCOUNT) != 0) { + update_rrsetstats(rbtdb, rdataset, ISC_FALSE); + } + + if (IS_CACHE(rbtdb) && ISC_LINK_LINKED(rdataset, lru_link)) { + int idx = rdataset->node->locknum; + ISC_LIST_UNLINK(rbtdb->rdatasets[idx], rdataset, lru_link); + if (rdataset->heap_index != 0) { + isc_heap_delete(rbtdb->heaps[idx], + rdataset->heap_index); + } + rdataset->heap_index = 0; + } + + if (rdataset->noqname != NULL) + free_noqname(mctx, &rdataset->noqname); + + free_acachearray(mctx, rdataset, rdataset->additional_auth); + free_acachearray(mctx, rdataset, rdataset->additional_glue); + + if ((rdataset->attributes & RDATASET_ATTR_NONEXISTENT) != 0) + size = sizeof(*rdataset); + else + size = dns_rdataslab_size((unsigned char *)rdataset, + sizeof(*rdataset)); + isc_mem_put(mctx, rdataset, size); } static inline void rollback_node(dns_rbtnode_t *node, rbtdb_serial_t serial) { - rdatasetheader_t *header, *dcurrent; - isc_boolean_t make_dirty = ISC_FALSE; - - /* - * Caller must hold the node lock. - */ - - /* - * We set the IGNORE attribute on rdatasets with serial number - * 'serial'. When the reference count goes to zero, these rdatasets - * will be cleaned up; until that time, they will be ignored. - */ - for (header = node->data; header != NULL; header = header->next) { - if (header->serial == serial) { - header->attributes |= RDATASET_ATTR_IGNORE; - make_dirty = ISC_TRUE; - } - for (dcurrent = header->down; - dcurrent != NULL; - dcurrent = dcurrent->down) { - if (dcurrent->serial == serial) { - dcurrent->attributes |= RDATASET_ATTR_IGNORE; - make_dirty = ISC_TRUE; - } - } - } - if (make_dirty) - node->dirty = 1; + rdatasetheader_t *header, *dcurrent; + isc_boolean_t make_dirty = ISC_FALSE; + + /* + * Caller must hold the node lock. + */ + + /* + * We set the IGNORE attribute on rdatasets with serial number + * 'serial'. When the reference count goes to zero, these rdatasets + * will be cleaned up; until that time, they will be ignored. + */ + for (header = node->data; header != NULL; header = header->next) { + if (header->serial == serial) { + header->attributes |= RDATASET_ATTR_IGNORE; + make_dirty = ISC_TRUE; + } + for (dcurrent = header->down; + dcurrent != NULL; + dcurrent = dcurrent->down) { + if (dcurrent->serial == serial) { + dcurrent->attributes |= RDATASET_ATTR_IGNORE; + make_dirty = ISC_TRUE; + } + } + } + if (make_dirty) + node->dirty = 1; } static inline void clean_stale_headers(dns_rbtdb_t *rbtdb, isc_mem_t *mctx, rdatasetheader_t *top) { - rdatasetheader_t *d, *down_next; + rdatasetheader_t *d, *down_next; - for (d = top->down; d != NULL; d = down_next) { - down_next = d->down; - free_rdataset(rbtdb, mctx, d); - } - top->down = NULL; + for (d = top->down; d != NULL; d = down_next) { + down_next = d->down; + free_rdataset(rbtdb, mctx, d); + } + top->down = NULL; } static inline void clean_cache_node(dns_rbtdb_t *rbtdb, dns_rbtnode_t *node) { - rdatasetheader_t *current, *top_prev, *top_next; - isc_mem_t *mctx = rbtdb->common.mctx; - - /* - * Caller must be holding the node lock. - */ - - top_prev = NULL; - for (current = node->data; current != NULL; current = top_next) { - top_next = current->next; - clean_stale_headers(rbtdb, mctx, current); - /* - * If current is nonexistent or stale, we can clean it up. - */ - if ((current->attributes & - (RDATASET_ATTR_NONEXISTENT|RDATASET_ATTR_STALE)) != 0) { - if (top_prev != NULL) - top_prev->next = current->next; - else - node->data = current->next; - free_rdataset(rbtdb, mctx, current); - } else - top_prev = current; - } - node->dirty = 0; + rdatasetheader_t *current, *top_prev, *top_next; + isc_mem_t *mctx = rbtdb->common.mctx; + + /* + * Caller must be holding the node lock. + */ + + top_prev = NULL; + for (current = node->data; current != NULL; current = top_next) { + top_next = current->next; + clean_stale_headers(rbtdb, mctx, current); + /* + * If current is nonexistent or stale, we can clean it up. + */ + if ((current->attributes & + (RDATASET_ATTR_NONEXISTENT|RDATASET_ATTR_STALE)) != 0) { + if (top_prev != NULL) + top_prev->next = current->next; + else + node->data = current->next; + free_rdataset(rbtdb, mctx, current); + } else + top_prev = current; + } + node->dirty = 0; } static inline void clean_zone_node(dns_rbtdb_t *rbtdb, dns_rbtnode_t *node, - rbtdb_serial_t least_serial) + rbtdb_serial_t least_serial) { - rdatasetheader_t *current, *dcurrent, *down_next, *dparent; - rdatasetheader_t *top_prev, *top_next; - isc_mem_t *mctx = rbtdb->common.mctx; - isc_boolean_t still_dirty = ISC_FALSE; - - /* - * Caller must be holding the node lock. - */ - REQUIRE(least_serial != 0); - - top_prev = NULL; - for (current = node->data; current != NULL; current = top_next) { - top_next = current->next; - - /* - * First, we clean up any instances of multiple rdatasets - * with the same serial number, or that have the IGNORE - * attribute. - */ - dparent = current; - for (dcurrent = current->down; - dcurrent != NULL; - dcurrent = down_next) { - down_next = dcurrent->down; - INSIST(dcurrent->serial <= dparent->serial); - if (dcurrent->serial == dparent->serial || - IGNORE(dcurrent)) { - if (down_next != NULL) - down_next->next = dparent; - dparent->down = down_next; - free_rdataset(rbtdb, mctx, dcurrent); - } else - dparent = dcurrent; - } - - /* - * We've now eliminated all IGNORE datasets with the possible - * exception of current, which we now check. - */ - if (IGNORE(current)) { - down_next = current->down; - if (down_next == NULL) { - if (top_prev != NULL) - top_prev->next = current->next; - else - node->data = current->next; - free_rdataset(rbtdb, mctx, current); - /* - * current no longer exists, so we can - * just continue with the loop. - */ - continue; - } else { - /* - * Pull up current->down, making it the new - * current. - */ - if (top_prev != NULL) - top_prev->next = down_next; - else - node->data = down_next; - down_next->next = top_next; - free_rdataset(rbtdb, mctx, current); - current = down_next; - } - } - - /* - * We now try to find the first down node less than the - * least serial. - */ - dparent = current; - for (dcurrent = current->down; - dcurrent != NULL; - dcurrent = down_next) { - down_next = dcurrent->down; - if (dcurrent->serial < least_serial) - break; - dparent = dcurrent; - } - - /* - * If there is a such an rdataset, delete it and any older - * versions. - */ - if (dcurrent != NULL) { - do { - down_next = dcurrent->down; - INSIST(dcurrent->serial <= least_serial); - free_rdataset(rbtdb, mctx, dcurrent); - dcurrent = down_next; - } while (dcurrent != NULL); - dparent->down = NULL; - } - - /* - * Note. The serial number of 'current' might be less than - * least_serial too, but we cannot delete it because it is - * the most recent version, unless it is a NONEXISTENT - * rdataset. - */ - if (current->down != NULL) { - still_dirty = ISC_TRUE; - top_prev = current; - } else { - /* - * If this is a NONEXISTENT rdataset, we can delete it. - */ - if (NONEXISTENT(current)) { - if (top_prev != NULL) - top_prev->next = current->next; - else - node->data = current->next; - free_rdataset(rbtdb, mctx, current); - } else - top_prev = current; - } - } - if (!still_dirty) - node->dirty = 0; + rdatasetheader_t *current, *dcurrent, *down_next, *dparent; + rdatasetheader_t *top_prev, *top_next; + isc_mem_t *mctx = rbtdb->common.mctx; + isc_boolean_t still_dirty = ISC_FALSE; + + /* + * Caller must be holding the node lock. + */ + REQUIRE(least_serial != 0); + + top_prev = NULL; + for (current = node->data; current != NULL; current = top_next) { + top_next = current->next; + + /* + * First, we clean up any instances of multiple rdatasets + * with the same serial number, or that have the IGNORE + * attribute. + */ + dparent = current; + for (dcurrent = current->down; + dcurrent != NULL; + dcurrent = down_next) { + down_next = dcurrent->down; + INSIST(dcurrent->serial <= dparent->serial); + if (dcurrent->serial == dparent->serial || + IGNORE(dcurrent)) { + if (down_next != NULL) + down_next->next = dparent; + dparent->down = down_next; + free_rdataset(rbtdb, mctx, dcurrent); + } else + dparent = dcurrent; + } + + /* + * We've now eliminated all IGNORE datasets with the possible + * exception of current, which we now check. + */ + if (IGNORE(current)) { + down_next = current->down; + if (down_next == NULL) { + if (top_prev != NULL) + top_prev->next = current->next; + else + node->data = current->next; + free_rdataset(rbtdb, mctx, current); + /* + * current no longer exists, so we can + * just continue with the loop. + */ + continue; + } else { + /* + * Pull up current->down, making it the new + * current. + */ + if (top_prev != NULL) + top_prev->next = down_next; + else + node->data = down_next; + down_next->next = top_next; + free_rdataset(rbtdb, mctx, current); + current = down_next; + } + } + + /* + * We now try to find the first down node less than the + * least serial. + */ + dparent = current; + for (dcurrent = current->down; + dcurrent != NULL; + dcurrent = down_next) { + down_next = dcurrent->down; + if (dcurrent->serial < least_serial) + break; + dparent = dcurrent; + } + + /* + * If there is a such an rdataset, delete it and any older + * versions. + */ + if (dcurrent != NULL) { + do { + down_next = dcurrent->down; + INSIST(dcurrent->serial <= least_serial); + free_rdataset(rbtdb, mctx, dcurrent); + dcurrent = down_next; + } while (dcurrent != NULL); + dparent->down = NULL; + } + + /* + * Note. The serial number of 'current' might be less than + * least_serial too, but we cannot delete it because it is + * the most recent version, unless it is a NONEXISTENT + * rdataset. + */ + if (current->down != NULL) { + still_dirty = ISC_TRUE; + top_prev = current; + } else { + /* + * If this is a NONEXISTENT rdataset, we can delete it. + */ + if (NONEXISTENT(current)) { + if (top_prev != NULL) + top_prev->next = current->next; + else + node->data = current->next; + free_rdataset(rbtdb, mctx, current); + } else + top_prev = current; + } + } + if (!still_dirty) + node->dirty = 0; } /*% @@ -1459,31 +1366,31 @@ clean_zone_node(dns_rbtdb_t *rbtdb, dns_rbtnode_t *node, */ static void cleanup_dead_nodes(dns_rbtdb_t *rbtdb, int bucketnum) { - dns_rbtnode_t *node; - isc_result_t result; - int count = 10; /* XXXJT: should be adjustable */ - - node = ISC_LIST_HEAD(rbtdb->deadnodes[bucketnum]); - while (node != NULL && count > 0) { - ISC_LIST_UNLINK(rbtdb->deadnodes[bucketnum], node, deadlink); - - /* - * Since we're holding a tree write lock, it should be - * impossible for this node to be referenced by others. - */ - INSIST(dns_rbtnode_refcurrent(node) == 0 && - node->data == NULL); - - result = dns_rbt_deletenode(rbtdb->tree, node, ISC_FALSE); - if (result != ISC_R_SUCCESS) - isc_log_write(dns_lctx, DNS_LOGCATEGORY_DATABASE, - DNS_LOGMODULE_CACHE, ISC_LOG_WARNING, - "cleanup_dead_nodes: " - "dns_rbt_deletenode: %s", - isc_result_totext(result)); - node = ISC_LIST_HEAD(rbtdb->deadnodes[bucketnum]); - count--; - } + dns_rbtnode_t *node; + isc_result_t result; + int count = 10; /* XXXJT: should be adjustable */ + + node = ISC_LIST_HEAD(rbtdb->deadnodes[bucketnum]); + while (node != NULL && count > 0) { + ISC_LIST_UNLINK(rbtdb->deadnodes[bucketnum], node, deadlink); + + /* + * Since we're holding a tree write lock, it should be + * impossible for this node to be referenced by others. + */ + INSIST(dns_rbtnode_refcurrent(node) == 0 && + node->data == NULL); + + result = dns_rbt_deletenode(rbtdb->tree, node, ISC_FALSE); + if (result != ISC_R_SUCCESS) + isc_log_write(dns_lctx, DNS_LOGCATEGORY_DATABASE, + DNS_LOGMODULE_CACHE, ISC_LOG_WARNING, + "cleanup_dead_nodes: " + "dns_rbt_deletenode: %s", + isc_result_totext(result)); + node = ISC_LIST_HEAD(rbtdb->deadnodes[bucketnum]); + count--; + } } /* @@ -1492,16 +1399,16 @@ cleanup_dead_nodes(dns_rbtdb_t *rbtdb, int bucketnum) { */ static inline void new_reference(dns_rbtdb_t *rbtdb, dns_rbtnode_t *node) { - unsigned int lockrefs, noderefs; - isc_refcount_t *lockref; - - dns_rbtnode_refincrement0(node, &noderefs); - if (noderefs == 1) { /* this is the first reference to the node */ - lockref = &rbtdb->node_locks[node->locknum].references; - isc_refcount_increment0(lockref, &lockrefs); - INSIST(lockrefs != 0); - } - INSIST(noderefs != 0); + unsigned int lockrefs, noderefs; + isc_refcount_t *lockref; + + dns_rbtnode_refincrement0(node, &noderefs); + if (noderefs == 1) { /* this is the first reference to the node */ + lockref = &rbtdb->node_locks[node->locknum].references; + isc_refcount_increment0(lockref, &lockrefs); + INSIST(lockrefs != 0); + } + INSIST(noderefs != 0); } /* @@ -1516,428 +1423,445 @@ new_reference(dns_rbtdb_t *rbtdb, dns_rbtnode_t *node) { */ static isc_boolean_t decrement_reference(dns_rbtdb_t *rbtdb, dns_rbtnode_t *node, - rbtdb_serial_t least_serial, - isc_rwlocktype_t nlock, isc_rwlocktype_t tlock) + rbtdb_serial_t least_serial, + isc_rwlocktype_t nlock, isc_rwlocktype_t tlock) { - isc_result_t result; - isc_boolean_t write_locked; - rbtdb_nodelock_t *nodelock; - unsigned int refs, nrefs; - int bucket = node->locknum; - - nodelock = &rbtdb->node_locks[bucket]; - - /* Handle easy and typical case first. */ - if (!node->dirty && (node->data != NULL || node->down != NULL)) { - dns_rbtnode_refdecrement(node, &nrefs); - INSIST((int)nrefs >= 0); - if (nrefs == 0) { - isc_refcount_decrement(&nodelock->references, &refs); - INSIST((int)refs >= 0); - } - return ((nrefs == 0) ? ISC_TRUE : ISC_FALSE); - } - - /* Upgrade the lock? */ - if (nlock == isc_rwlocktype_read) { - NODE_WEAKUNLOCK(&nodelock->lock, isc_rwlocktype_read); - NODE_WEAKLOCK(&nodelock->lock, isc_rwlocktype_write); - } - dns_rbtnode_refdecrement(node, &nrefs); - INSIST((int)nrefs >= 0); - if (nrefs > 0) { - /* Restore the lock? */ - if (nlock == isc_rwlocktype_read) - NODE_WEAKDOWNGRADE(&nodelock->lock); - return (ISC_FALSE); - } - - if (node->dirty && dns_rbtnode_refcurrent(node) == 0) { - if (IS_CACHE(rbtdb)) - clean_cache_node(rbtdb, node); - else { - if (least_serial == 0) { - /* - * Caller doesn't know the least serial. - * Get it. - */ - RBTDB_LOCK(&rbtdb->lock, isc_rwlocktype_read); - least_serial = rbtdb->least_serial; - RBTDB_UNLOCK(&rbtdb->lock, - isc_rwlocktype_read); - } - clean_zone_node(rbtdb, node, least_serial); - } - } - - isc_refcount_decrement(&nodelock->references, &refs); - INSIST((int)refs >= 0); - - /* - * XXXDCL should this only be done for cache zones? - */ - if (node->data != NULL || node->down != NULL) { - /* Restore the lock? */ - if (nlock == isc_rwlocktype_read) - NODE_WEAKDOWNGRADE(&nodelock->lock); - return (ISC_TRUE); - } - - /* - * Attempt to switch to a write lock on the tree. If this fails, - * we will add this node to a linked list of nodes in this locking - * bucket which we will free later. - */ - if (tlock != isc_rwlocktype_write) { - /* - * Locking hierarchy notwithstanding, we don't need to free - * the node lock before acquiring the tree write lock because - * we only do a trylock. - */ - if (tlock == isc_rwlocktype_read) - result = isc_rwlock_tryupgrade(&rbtdb->tree_lock); - else - result = isc_rwlock_trylock(&rbtdb->tree_lock, - isc_rwlocktype_write); - RUNTIME_CHECK(result == ISC_R_SUCCESS || - result == ISC_R_LOCKBUSY); - - write_locked = ISC_TF(result == ISC_R_SUCCESS); - } else - write_locked = ISC_TRUE; - - if (write_locked && dns_rbtnode_refcurrent(node) == 0) { - /* - * We can now delete the node if the reference counter is - * zero. This should be typically the case, but a different - * thread may still gain a (new) reference just before the - * current thread locks the tree (e.g., in findnode()). - */ - - if (isc_log_wouldlog(dns_lctx, ISC_LOG_DEBUG(1))) { - char printname[DNS_NAME_FORMATSIZE]; - - isc_log_write(dns_lctx, DNS_LOGCATEGORY_DATABASE, - DNS_LOGMODULE_CACHE, ISC_LOG_DEBUG(1), - "decrement_reference: " - "delete from rbt: %p %s", - node, - dns_rbt_formatnodename(node, printname, - sizeof(printname))); - } - - result = dns_rbt_deletenode(rbtdb->tree, node, ISC_FALSE); - if (result != ISC_R_SUCCESS) - isc_log_write(dns_lctx, DNS_LOGCATEGORY_DATABASE, - DNS_LOGMODULE_CACHE, ISC_LOG_WARNING, - "decrement_reference: " - "dns_rbt_deletenode: %s", - isc_result_totext(result)); - } else if (dns_rbtnode_refcurrent(node) == 0) { - INSIST(!ISC_LINK_LINKED(node, deadlink)); - ISC_LIST_APPEND(rbtdb->deadnodes[bucket], node, deadlink); - } - - /* Restore the lock? */ - if (nlock == isc_rwlocktype_read) - NODE_WEAKDOWNGRADE(&nodelock->lock); - - /* - * Relock a read lock, or unlock the write lock if no lock was held. - */ - if (tlock == isc_rwlocktype_none) - if (write_locked) - RWUNLOCK(&rbtdb->tree_lock, isc_rwlocktype_write); - - if (tlock == isc_rwlocktype_read) - if (write_locked) - isc_rwlock_downgrade(&rbtdb->tree_lock); - - return (ISC_TRUE); + isc_result_t result; + isc_boolean_t write_locked; + rbtdb_nodelock_t *nodelock; + unsigned int refs, nrefs; + int bucket = node->locknum; + + nodelock = &rbtdb->node_locks[bucket]; + + /* Handle easy and typical case first. */ + if (!node->dirty && (node->data != NULL || node->down != NULL)) { + dns_rbtnode_refdecrement(node, &nrefs); + INSIST((int)nrefs >= 0); + if (nrefs == 0) { + isc_refcount_decrement(&nodelock->references, &refs); + INSIST((int)refs >= 0); + } + return ((nrefs == 0) ? ISC_TRUE : ISC_FALSE); + } + + /* Upgrade the lock? */ + if (nlock == isc_rwlocktype_read) { + NODE_WEAKUNLOCK(&nodelock->lock, isc_rwlocktype_read); + NODE_WEAKLOCK(&nodelock->lock, isc_rwlocktype_write); + } + dns_rbtnode_refdecrement(node, &nrefs); + INSIST((int)nrefs >= 0); + if (nrefs > 0) { + /* Restore the lock? */ + if (nlock == isc_rwlocktype_read) + NODE_WEAKDOWNGRADE(&nodelock->lock); + return (ISC_FALSE); + } + + if (node->dirty && dns_rbtnode_refcurrent(node) == 0) { + if (IS_CACHE(rbtdb)) + clean_cache_node(rbtdb, node); + else { + if (least_serial == 0) { + /* + * Caller doesn't know the least serial. + * Get it. + */ + RBTDB_LOCK(&rbtdb->lock, isc_rwlocktype_read); + least_serial = rbtdb->least_serial; + RBTDB_UNLOCK(&rbtdb->lock, + isc_rwlocktype_read); + } + clean_zone_node(rbtdb, node, least_serial); + } + } + + isc_refcount_decrement(&nodelock->references, &refs); + INSIST((int)refs >= 0); + + /* + * XXXDCL should this only be done for cache zones? + */ + if (node->data != NULL || node->down != NULL) { + /* Restore the lock? */ + if (nlock == isc_rwlocktype_read) + NODE_WEAKDOWNGRADE(&nodelock->lock); + return (ISC_TRUE); + } + + /* + * Attempt to switch to a write lock on the tree. If this fails, + * we will add this node to a linked list of nodes in this locking + * bucket which we will free later. + */ + if (tlock != isc_rwlocktype_write) { + /* + * Locking hierarchy notwithstanding, we don't need to free + * the node lock before acquiring the tree write lock because + * we only do a trylock. + */ + if (tlock == isc_rwlocktype_read) + result = isc_rwlock_tryupgrade(&rbtdb->tree_lock); + else + result = isc_rwlock_trylock(&rbtdb->tree_lock, + isc_rwlocktype_write); + RUNTIME_CHECK(result == ISC_R_SUCCESS || + result == ISC_R_LOCKBUSY); + + write_locked = ISC_TF(result == ISC_R_SUCCESS); + } else + write_locked = ISC_TRUE; + + if (write_locked && dns_rbtnode_refcurrent(node) == 0) { + /* + * We can now delete the node if the reference counter is + * zero. This should be typically the case, but a different + * thread may still gain a (new) reference just before the + * current thread locks the tree (e.g., in findnode()). + */ + + if (isc_log_wouldlog(dns_lctx, ISC_LOG_DEBUG(1))) { + char printname[DNS_NAME_FORMATSIZE]; + + isc_log_write(dns_lctx, DNS_LOGCATEGORY_DATABASE, + DNS_LOGMODULE_CACHE, ISC_LOG_DEBUG(1), + "decrement_reference: " + "delete from rbt: %p %s", + node, + dns_rbt_formatnodename(node, printname, + sizeof(printname))); + } + + result = dns_rbt_deletenode(rbtdb->tree, node, ISC_FALSE); + if (result != ISC_R_SUCCESS) + isc_log_write(dns_lctx, DNS_LOGCATEGORY_DATABASE, + DNS_LOGMODULE_CACHE, ISC_LOG_WARNING, + "decrement_reference: " + "dns_rbt_deletenode: %s", + isc_result_totext(result)); + } else if (dns_rbtnode_refcurrent(node) == 0) { + INSIST(!ISC_LINK_LINKED(node, deadlink)); + ISC_LIST_APPEND(rbtdb->deadnodes[bucket], node, deadlink); + } + + /* Restore the lock? */ + if (nlock == isc_rwlocktype_read) + NODE_WEAKDOWNGRADE(&nodelock->lock); + + /* + * Relock a read lock, or unlock the write lock if no lock was held. + */ + if (tlock == isc_rwlocktype_none) + if (write_locked) + RWUNLOCK(&rbtdb->tree_lock, isc_rwlocktype_write); + + if (tlock == isc_rwlocktype_read) + if (write_locked) + isc_rwlock_downgrade(&rbtdb->tree_lock); + + return (ISC_TRUE); } static inline void make_least_version(dns_rbtdb_t *rbtdb, rbtdb_version_t *version, - rbtdb_changedlist_t *cleanup_list) + rbtdb_changedlist_t *cleanup_list) { - /* - * Caller must be holding the database lock. - */ + /* + * Caller must be holding the database lock. + */ - rbtdb->least_serial = version->serial; - *cleanup_list = version->changed_list; - ISC_LIST_INIT(version->changed_list); + rbtdb->least_serial = version->serial; + *cleanup_list = version->changed_list; + ISC_LIST_INIT(version->changed_list); } static inline void cleanup_nondirty(rbtdb_version_t *version, rbtdb_changedlist_t *cleanup_list) { - rbtdb_changed_t *changed, *next_changed; - - /* - * If the changed record is dirty, then - * an update created multiple versions of - * a given rdataset. We keep this list - * until we're the least open version, at - * which point it's safe to get rid of any - * older versions. - * - * If the changed record isn't dirty, then - * we don't need it anymore since we're - * committing and not rolling back. - * - * The caller must be holding the database lock. - */ - for (changed = HEAD(version->changed_list); - changed != NULL; - changed = next_changed) { - next_changed = NEXT(changed, link); - if (!changed->dirty) { - UNLINK(version->changed_list, - changed, link); - APPEND(*cleanup_list, - changed, link); - } - } + rbtdb_changed_t *changed, *next_changed; + + /* + * If the changed record is dirty, then + * an update created multiple versions of + * a given rdataset. We keep this list + * until we're the least open version, at + * which point it's safe to get rid of any + * older versions. + * + * If the changed record isn't dirty, then + * we don't need it anymore since we're + * committing and not rolling back. + * + * The caller must be holding the database lock. + */ + for (changed = HEAD(version->changed_list); + changed != NULL; + changed = next_changed) { + next_changed = NEXT(changed, link); + if (!changed->dirty) { + UNLINK(version->changed_list, + changed, link); + APPEND(*cleanup_list, + changed, link); + } + } } static isc_boolean_t iszonesecure(dns_db_t *db, dns_dbnode_t *origin) { - dns_rdataset_t keyset; - dns_rdataset_t nsecset, signsecset; - isc_boolean_t haszonekey = ISC_FALSE; - isc_boolean_t hasnsec = ISC_FALSE; - isc_result_t result; - - dns_rdataset_init(&keyset); - result = dns_db_findrdataset(db, origin, NULL, dns_rdatatype_dnskey, 0, - 0, &keyset, NULL); - if (result == ISC_R_SUCCESS) { - dns_rdata_t keyrdata = DNS_RDATA_INIT; - result = dns_rdataset_first(&keyset); - while (result == ISC_R_SUCCESS) { - dns_rdataset_current(&keyset, &keyrdata); - if (dns_zonekey_iszonekey(&keyrdata)) { - haszonekey = ISC_TRUE; - break; - } - result = dns_rdataset_next(&keyset); - } - dns_rdataset_disassociate(&keyset); - } - if (!haszonekey) - return (ISC_FALSE); - - dns_rdataset_init(&nsecset); - dns_rdataset_init(&signsecset); - result = dns_db_findrdataset(db, origin, NULL, dns_rdatatype_nsec, 0, - 0, &nsecset, &signsecset); - if (result == ISC_R_SUCCESS) { - if (dns_rdataset_isassociated(&signsecset)) { - hasnsec = ISC_TRUE; - dns_rdataset_disassociate(&signsecset); - } - dns_rdataset_disassociate(&nsecset); - } - return (hasnsec); + dns_rdataset_t keyset; + dns_rdataset_t nsecset, signsecset; + isc_boolean_t haszonekey = ISC_FALSE; + isc_boolean_t hasnsec = ISC_FALSE; + isc_result_t result; + + dns_rdataset_init(&keyset); + result = dns_db_findrdataset(db, origin, NULL, dns_rdatatype_dnskey, 0, + 0, &keyset, NULL); + if (result == ISC_R_SUCCESS) { + dns_rdata_t keyrdata = DNS_RDATA_INIT; + result = dns_rdataset_first(&keyset); + while (result == ISC_R_SUCCESS) { + dns_rdataset_current(&keyset, &keyrdata); + if (dns_zonekey_iszonekey(&keyrdata)) { + haszonekey = ISC_TRUE; + break; + } + result = dns_rdataset_next(&keyset); + } + dns_rdataset_disassociate(&keyset); + } + if (!haszonekey) + return (ISC_FALSE); + + dns_rdataset_init(&nsecset); + dns_rdataset_init(&signsecset); + result = dns_db_findrdataset(db, origin, NULL, dns_rdatatype_nsec, 0, + 0, &nsecset, &signsecset); + if (result == ISC_R_SUCCESS) { + if (dns_rdataset_isassociated(&signsecset)) { + hasnsec = ISC_TRUE; + dns_rdataset_disassociate(&signsecset); + } + dns_rdataset_disassociate(&nsecset); + } + return (hasnsec); } static void closeversion(dns_db_t *db, dns_dbversion_t **versionp, isc_boolean_t commit) { - dns_rbtdb_t *rbtdb = (dns_rbtdb_t *)db; - rbtdb_version_t *version, *cleanup_version, *least_greater; - isc_boolean_t rollback = ISC_FALSE; - rbtdb_changedlist_t cleanup_list; - rbtdb_changed_t *changed, *next_changed; - rbtdb_serial_t serial, least_serial; - dns_rbtnode_t *rbtnode; - unsigned int refs; + dns_rbtdb_t *rbtdb = (dns_rbtdb_t *)db; + rbtdb_version_t *version, *cleanup_version, *least_greater; + isc_boolean_t rollback = ISC_FALSE; + rbtdb_changedlist_t cleanup_list; + rbtdb_changed_t *changed, *next_changed; + rbtdb_serial_t serial, least_serial; + dns_rbtnode_t *rbtnode; + unsigned int refs; isc_boolean_t writer; - REQUIRE(VALID_RBTDB(rbtdb)); - version = (rbtdb_version_t *)*versionp; - - cleanup_version = NULL; - ISC_LIST_INIT(cleanup_list); - - isc_refcount_decrement(&version->references, &refs); - if (refs > 0) { /* typical and easy case first */ - if (commit) { - RBTDB_LOCK(&rbtdb->lock, isc_rwlocktype_read); - INSIST(!version->writer); - RBTDB_UNLOCK(&rbtdb->lock, isc_rwlocktype_read); - } - goto end; - } - - RBTDB_LOCK(&rbtdb->lock, isc_rwlocktype_write); - serial = version->serial; - writer = version->writer; - if (version->writer) { - if (commit) { - unsigned cur_ref; - rbtdb_version_t *cur_version; - - INSIST(version->commit_ok); - INSIST(version == rbtdb->future_version); - /* - * The current version is going to be replaced. - * Release the (likely last) reference to it from the - * DB itself and unlink it from the open list. - */ - cur_version = rbtdb->current_version; - isc_refcount_decrement(&cur_version->references, - &cur_ref); - if (cur_ref == 0) { - if (cur_version->serial == rbtdb->least_serial) - INSIST(EMPTY(cur_version->changed_list)); - UNLINK(rbtdb->open_versions, - cur_version, link); - } - if (EMPTY(rbtdb->open_versions)) { - /* - * We're going to become the least open - * version. - */ - make_least_version(rbtdb, version, - &cleanup_list); - } else { - /* - * Some other open version is the - * least version. We can't cleanup - * records that were changed in this - * version because the older versions - * may still be in use by an open - * version. - * - * We can, however, discard the - * changed records for things that - * we've added that didn't exist in - * prior versions. - */ - cleanup_nondirty(version, &cleanup_list); - } - /* - * If the (soon to be former) current version - * isn't being used by anyone, we can clean - * it up. - */ - if (cur_ref == 0) { - cleanup_version = cur_version; - APPENDLIST(version->changed_list, - cleanup_version->changed_list, - link); - } - /* - * Become the current version. - */ - version->writer = ISC_FALSE; - rbtdb->current_version = version; - rbtdb->current_serial = version->serial; - rbtdb->future_version = NULL; - - /* - * Keep the current version in the open list, and - * gain a reference for the DB itself (see the DB - * creation function below). This must be the only - * case where we need to increment the counter from - * zero and need to use isc_refcount_increment0(). - */ - isc_refcount_increment0(&version->references, - &cur_ref); - INSIST(cur_ref == 1); - PREPEND(rbtdb->open_versions, - rbtdb->current_version, link); - } else { - /* - * We're rolling back this transaction. - */ - cleanup_list = version->changed_list; - ISC_LIST_INIT(version->changed_list); - rollback = ISC_TRUE; - cleanup_version = version; - rbtdb->future_version = NULL; - } - } else { - if (version != rbtdb->current_version) { - /* - * There are no external or internal references - * to this version and it can be cleaned up. - */ - cleanup_version = version; - - /* - * Find the version with the least serial - * number greater than ours. - */ - least_greater = PREV(version, link); - if (least_greater == NULL) - least_greater = rbtdb->current_version; - - INSIST(version->serial < least_greater->serial); - /* - * Is this the least open version? - */ - if (version->serial == rbtdb->least_serial) { - /* - * Yes. Install the new least open - * version. - */ - make_least_version(rbtdb, - least_greater, - &cleanup_list); - } else { - /* - * Add any unexecuted cleanups to - * those of the least greater version. - */ - APPENDLIST(least_greater->changed_list, - version->changed_list, - link); - } - } else if (version->serial == rbtdb->least_serial) - INSIST(EMPTY(version->changed_list)); - UNLINK(rbtdb->open_versions, version, link); - } - least_serial = rbtdb->least_serial; - RBTDB_UNLOCK(&rbtdb->lock, isc_rwlocktype_write); - - /* - * Update the zone's secure status. - */ - if (writer && commit && !IS_CACHE(rbtdb)) - rbtdb->secure = iszonesecure(db, rbtdb->origin_node); - - if (cleanup_version != NULL) { - INSIST(EMPTY(cleanup_version->changed_list)); - isc_mem_put(rbtdb->common.mctx, cleanup_version, - sizeof(*cleanup_version)); - } - - if (!EMPTY(cleanup_list)) { - for (changed = HEAD(cleanup_list); - changed != NULL; - changed = next_changed) { - nodelock_t *lock; - - next_changed = NEXT(changed, link); - rbtnode = changed->node; - lock = &rbtdb->node_locks[rbtnode->locknum].lock; - - NODE_LOCK(lock, isc_rwlocktype_write); - if (rollback) - rollback_node(rbtnode, serial); - decrement_reference(rbtdb, rbtnode, least_serial, - isc_rwlocktype_write, - isc_rwlocktype_none); - NODE_UNLOCK(lock, isc_rwlocktype_write); - - isc_mem_put(rbtdb->common.mctx, changed, - sizeof(*changed)); - } - } + REQUIRE(VALID_RBTDB(rbtdb)); + version = (rbtdb_version_t *)*versionp; + + cleanup_version = NULL; + ISC_LIST_INIT(cleanup_list); + + isc_refcount_decrement(&version->references, &refs); + if (refs > 0) { /* typical and easy case first */ + if (commit) { + RBTDB_LOCK(&rbtdb->lock, isc_rwlocktype_read); + INSIST(!version->writer); + RBTDB_UNLOCK(&rbtdb->lock, isc_rwlocktype_read); + } + goto end; + } + + RBTDB_LOCK(&rbtdb->lock, isc_rwlocktype_write); + serial = version->serial; + writer = version->writer; + if (version->writer) { + if (commit) { + unsigned cur_ref; + rbtdb_version_t *cur_version; + + INSIST(version->commit_ok); + INSIST(version == rbtdb->future_version); + /* + * The current version is going to be replaced. + * Release the (likely last) reference to it from the + * DB itself and unlink it from the open list. + */ + cur_version = rbtdb->current_version; + isc_refcount_decrement(&cur_version->references, + &cur_ref); + if (cur_ref == 0) { + if (cur_version->serial == rbtdb->least_serial) + INSIST(EMPTY(cur_version->changed_list)); + UNLINK(rbtdb->open_versions, + cur_version, link); + } + if (EMPTY(rbtdb->open_versions)) { + /* + * We're going to become the least open + * version. + */ + make_least_version(rbtdb, version, + &cleanup_list); + } else { + /* + * Some other open version is the + * least version. We can't cleanup + * records that were changed in this + * version because the older versions + * may still be in use by an open + * version. + * + * We can, however, discard the + * changed records for things that + * we've added that didn't exist in + * prior versions. + */ + cleanup_nondirty(version, &cleanup_list); + } + /* + * If the (soon to be former) current version + * isn't being used by anyone, we can clean + * it up. + */ + if (cur_ref == 0) { + cleanup_version = cur_version; + APPENDLIST(version->changed_list, + cleanup_version->changed_list, + link); + } + /* + * Become the current version. + */ + version->writer = ISC_FALSE; + rbtdb->current_version = version; + rbtdb->current_serial = version->serial; + rbtdb->future_version = NULL; + + /* + * Keep the current version in the open list, and + * gain a reference for the DB itself (see the DB + * creation function below). This must be the only + * case where we need to increment the counter from + * zero and need to use isc_refcount_increment0(). + */ + isc_refcount_increment0(&version->references, + &cur_ref); + INSIST(cur_ref == 1); + PREPEND(rbtdb->open_versions, + rbtdb->current_version, link); + } else { + /* + * We're rolling back this transaction. + */ + cleanup_list = version->changed_list; + ISC_LIST_INIT(version->changed_list); + rollback = ISC_TRUE; + cleanup_version = version; + rbtdb->future_version = NULL; + } + } else { + if (version != rbtdb->current_version) { + /* + * There are no external or internal references + * to this version and it can be cleaned up. + */ + cleanup_version = version; + + /* + * Find the version with the least serial + * number greater than ours. + */ + least_greater = PREV(version, link); + if (least_greater == NULL) + least_greater = rbtdb->current_version; + + INSIST(version->serial < least_greater->serial); + /* + * Is this the least open version? + */ + if (version->serial == rbtdb->least_serial) { + /* + * Yes. Install the new least open + * version. + */ + make_least_version(rbtdb, + least_greater, + &cleanup_list); + } else { + /* + * Add any unexecuted cleanups to + * those of the least greater version. + */ + APPENDLIST(least_greater->changed_list, + version->changed_list, + link); + } + } else if (version->serial == rbtdb->least_serial) + INSIST(EMPTY(version->changed_list)); + UNLINK(rbtdb->open_versions, version, link); + } + least_serial = rbtdb->least_serial; + RBTDB_UNLOCK(&rbtdb->lock, isc_rwlocktype_write); + + /* + * Update the zone's secure status. + */ + if (writer && commit && !IS_CACHE(rbtdb)) + rbtdb->secure = iszonesecure(db, rbtdb->origin_node); + + if (cleanup_version != NULL) { + INSIST(EMPTY(cleanup_version->changed_list)); + isc_mem_put(rbtdb->common.mctx, cleanup_version, + sizeof(*cleanup_version)); + } + + if (!EMPTY(cleanup_list)) { + /* + * We acquire a tree write lock here in order to make sure + * that stale nodes will be removed in decrement_reference(). + * If we didn't have the lock, those nodes could miss the + * chance to be removed until the server stops. The write lock + * is expensive, but this event should be rare enough to justify + * the cost. + */ + RWLOCK(&rbtdb->tree_lock, isc_rwlocktype_write); + for (changed = HEAD(cleanup_list); + changed != NULL; + changed = next_changed) { + nodelock_t *lock; + + next_changed = NEXT(changed, link); + rbtnode = changed->node; + lock = &rbtdb->node_locks[rbtnode->locknum].lock; + + NODE_LOCK(lock, isc_rwlocktype_write); + /* + * This is a good opportunity to purge any dead nodes, + * so use it. + */ + cleanup_dead_nodes(rbtdb, rbtnode->locknum); + + if (rollback) + rollback_node(rbtnode, serial); + decrement_reference(rbtdb, rbtnode, least_serial, + isc_rwlocktype_write, + isc_rwlocktype_write); + + NODE_UNLOCK(lock, isc_rwlocktype_write); + + isc_mem_put(rbtdb->common.mctx, changed, + sizeof(*changed)); + } + RWUNLOCK(&rbtdb->tree_lock, isc_rwlocktype_write); + } end: - *versionp = NULL; + *versionp = NULL; } /* @@ -1955,4130 +1879,4032 @@ closeversion(dns_db_t *db, dns_dbversion_t **versionp, isc_boolean_t commit) { */ static isc_result_t add_wildcard_magic(dns_rbtdb_t *rbtdb, dns_name_t *name) { - isc_result_t result; - dns_name_t foundname; - dns_offsets_t offsets; - unsigned int n; - dns_rbtnode_t *node = NULL; - - dns_name_init(&foundname, offsets); - n = dns_name_countlabels(name); - INSIST(n >= 2); - n--; - dns_name_getlabelsequence(name, 1, n, &foundname); - result = dns_rbt_addnode(rbtdb->tree, &foundname, &node); - if (result != ISC_R_SUCCESS && result != ISC_R_EXISTS) - return (result); - node->find_callback = 1; - node->wild = 1; - return (ISC_R_SUCCESS); + isc_result_t result; + dns_name_t foundname; + dns_offsets_t offsets; + unsigned int n; + dns_rbtnode_t *node = NULL; + + dns_name_init(&foundname, offsets); + n = dns_name_countlabels(name); + INSIST(n >= 2); + n--; + dns_name_getlabelsequence(name, 1, n, &foundname); + result = dns_rbt_addnode(rbtdb->tree, &foundname, &node); + if (result != ISC_R_SUCCESS && result != ISC_R_EXISTS) + return (result); + node->find_callback = 1; + node->wild = 1; + return (ISC_R_SUCCESS); } static isc_result_t add_empty_wildcards(dns_rbtdb_t *rbtdb, dns_name_t *name) { - isc_result_t result; - dns_name_t foundname; - dns_offsets_t offsets; - unsigned int n, l, i; - - dns_name_init(&foundname, offsets); - n = dns_name_countlabels(name); - l = dns_name_countlabels(&rbtdb->common.origin); - i = l + 1; - while (i < n) { - dns_rbtnode_t *node = NULL; /* dummy */ - dns_name_getlabelsequence(name, n - i, i, &foundname); - if (dns_name_iswildcard(&foundname)) { - result = add_wildcard_magic(rbtdb, &foundname); - if (result != ISC_R_SUCCESS) - return (result); - result = dns_rbt_addnode(rbtdb->tree, &foundname, - &node); - if (result != ISC_R_SUCCESS && result != ISC_R_EXISTS) - return (result); - } - i++; - } - return (ISC_R_SUCCESS); + isc_result_t result; + dns_name_t foundname; + dns_offsets_t offsets; + unsigned int n, l, i; + + dns_name_init(&foundname, offsets); + n = dns_name_countlabels(name); + l = dns_name_countlabels(&rbtdb->common.origin); + i = l + 1; + while (i < n) { + dns_rbtnode_t *node = NULL; /* dummy */ + dns_name_getlabelsequence(name, n - i, i, &foundname); + if (dns_name_iswildcard(&foundname)) { + result = add_wildcard_magic(rbtdb, &foundname); + if (result != ISC_R_SUCCESS) + return (result); + result = dns_rbt_addnode(rbtdb->tree, &foundname, + &node); + if (result != ISC_R_SUCCESS && result != ISC_R_EXISTS) + return (result); + } + i++; + } + return (ISC_R_SUCCESS); } static isc_result_t findnode(dns_db_t *db, dns_name_t *name, isc_boolean_t create, - dns_dbnode_t **nodep) + dns_dbnode_t **nodep) { - dns_rbtdb_t *rbtdb = (dns_rbtdb_t *)db; - dns_rbtnode_t *node = NULL; - dns_name_t nodename; - isc_result_t result; - isc_rwlocktype_t locktype = isc_rwlocktype_read; - - REQUIRE(VALID_RBTDB(rbtdb)); - - dns_name_init(&nodename, NULL); - RWLOCK(&rbtdb->tree_lock, locktype); - result = dns_rbt_findnode(rbtdb->tree, name, NULL, &node, NULL, - DNS_RBTFIND_EMPTYDATA, NULL, NULL); - if (result != ISC_R_SUCCESS) { - RWUNLOCK(&rbtdb->tree_lock, locktype); - if (!create) { - if (result == DNS_R_PARTIALMATCH) - result = ISC_R_NOTFOUND; - return (result); - } - /* - * It would be nice to try to upgrade the lock instead of - * unlocking then relocking. - */ - locktype = isc_rwlocktype_write; - RWLOCK(&rbtdb->tree_lock, locktype); - node = NULL; - result = dns_rbt_addnode(rbtdb->tree, name, &node); - if (result == ISC_R_SUCCESS) { - dns_rbt_namefromnode(node, &nodename); + dns_rbtdb_t *rbtdb = (dns_rbtdb_t *)db; + dns_rbtnode_t *node = NULL; + dns_name_t nodename; + isc_result_t result; + isc_rwlocktype_t locktype = isc_rwlocktype_read; + isc_boolean_t need_relock; + + REQUIRE(VALID_RBTDB(rbtdb)); + + dns_name_init(&nodename, NULL); + RWLOCK(&rbtdb->tree_lock, locktype); + result = dns_rbt_findnode(rbtdb->tree, name, NULL, &node, NULL, + DNS_RBTFIND_EMPTYDATA, NULL, NULL); + if (result != ISC_R_SUCCESS) { + RWUNLOCK(&rbtdb->tree_lock, locktype); + if (!create) { + if (result == DNS_R_PARTIALMATCH) + result = ISC_R_NOTFOUND; + return (result); + } + /* + * It would be nice to try to upgrade the lock instead of + * unlocking then relocking. + */ + locktype = isc_rwlocktype_write; + RWLOCK(&rbtdb->tree_lock, locktype); + node = NULL; + result = dns_rbt_addnode(rbtdb->tree, name, &node); + if (result == ISC_R_SUCCESS) { + dns_rbt_namefromnode(node, &nodename); #ifdef DNS_RBT_USEHASH - node->locknum = node->hashval % rbtdb->node_lock_count; + node->locknum = node->hashval % rbtdb->node_lock_count; #else - node->locknum = dns_name_hash(&nodename, ISC_TRUE) % - rbtdb->node_lock_count; + node->locknum = dns_name_hash(&nodename, ISC_TRUE) % + rbtdb->node_lock_count; #endif - add_empty_wildcards(rbtdb, name); - - if (dns_name_iswildcard(name)) { - result = add_wildcard_magic(rbtdb, name); - if (result != ISC_R_SUCCESS) { - RWUNLOCK(&rbtdb->tree_lock, locktype); - return (result); - } - } - } else if (result != ISC_R_EXISTS) { - RWUNLOCK(&rbtdb->tree_lock, locktype); - return (result); - } - } - NODE_STRONGLOCK(&rbtdb->node_locks[node->locknum].lock); - new_reference(rbtdb, node); - - /* - * If the node just found is in the deadnode list, we need to retrieve - * it from the list because we are going to use the node. There are - * other cases where a node is newly referenced, but this should be - * the only case where it can be in the deadnode list. Also, if we - * happen to hold a write lock on the tree, it's a good chance to purge - * dead nodes. - */ - if (IS_CACHE(rbtdb)) { - isc_boolean_t need_relock = ISC_FALSE; - - NODE_WEAKLOCK(&rbtdb->node_locks[node->locknum].lock, - isc_rwlocktype_read); - if (ISC_LINK_LINKED(node, deadlink) && isc_rwlocktype_write) - need_relock = ISC_TRUE; - else if (!ISC_LIST_EMPTY(rbtdb->deadnodes[node->locknum]) && - locktype == isc_rwlocktype_write) - need_relock = ISC_TRUE; - NODE_WEAKUNLOCK(&rbtdb->node_locks[node->locknum].lock, - isc_rwlocktype_read); - if (need_relock) { - NODE_WEAKLOCK(&rbtdb->node_locks[node->locknum].lock, - isc_rwlocktype_write); - if (ISC_LINK_LINKED(node, deadlink)) - ISC_LIST_UNLINK(rbtdb->deadnodes[node->locknum], - node, deadlink); - if (locktype == isc_rwlocktype_write) - cleanup_dead_nodes(rbtdb, node->locknum); - NODE_WEAKUNLOCK(&rbtdb->node_locks[node->locknum].lock, - isc_rwlocktype_write); - } - } - - NODE_STRONGUNLOCK(&rbtdb->node_locks[node->locknum].lock); - RWUNLOCK(&rbtdb->tree_lock, locktype); - - *nodep = (dns_dbnode_t *)node; - - return (ISC_R_SUCCESS); + add_empty_wildcards(rbtdb, name); + + if (dns_name_iswildcard(name)) { + result = add_wildcard_magic(rbtdb, name); + if (result != ISC_R_SUCCESS) { + RWUNLOCK(&rbtdb->tree_lock, locktype); + return (result); + } + } + } else if (result != ISC_R_EXISTS) { + RWUNLOCK(&rbtdb->tree_lock, locktype); + return (result); + } + } + NODE_STRONGLOCK(&rbtdb->node_locks[node->locknum].lock); + new_reference(rbtdb, node); + + /* + * If the node just found is in the deadnode list, we need to retrieve + * it from the list because we are going to use the node. There are + * other cases where a node is newly referenced, but this should be + * the only case where it can be in the deadnode list. Also, if we + * happen to hold a write lock on the tree, it's a good chance to purge + * dead nodes. + */ + need_relock = ISC_FALSE; + NODE_WEAKLOCK(&rbtdb->node_locks[node->locknum].lock, + isc_rwlocktype_read); + if (ISC_LINK_LINKED(node, deadlink) && isc_rwlocktype_write) + need_relock = ISC_TRUE; + else if (!ISC_LIST_EMPTY(rbtdb->deadnodes[node->locknum]) && + locktype == isc_rwlocktype_write) + need_relock = ISC_TRUE; + NODE_WEAKUNLOCK(&rbtdb->node_locks[node->locknum].lock, + isc_rwlocktype_read); + if (need_relock) { + NODE_WEAKLOCK(&rbtdb->node_locks[node->locknum].lock, + isc_rwlocktype_write); + if (ISC_LINK_LINKED(node, deadlink)) + ISC_LIST_UNLINK(rbtdb->deadnodes[node->locknum], + node, deadlink); + if (locktype == isc_rwlocktype_write) + cleanup_dead_nodes(rbtdb, node->locknum); + NODE_WEAKUNLOCK(&rbtdb->node_locks[node->locknum].lock, + isc_rwlocktype_write); + } + + NODE_STRONGUNLOCK(&rbtdb->node_locks[node->locknum].lock); + RWUNLOCK(&rbtdb->tree_lock, locktype); + + *nodep = (dns_dbnode_t *)node; + + return (ISC_R_SUCCESS); } static isc_result_t zone_zonecut_callback(dns_rbtnode_t *node, dns_name_t *name, void *arg) { - rbtdb_search_t *search = arg; - rdatasetheader_t *header, *header_next; - rdatasetheader_t *dname_header, *sigdname_header, *ns_header; - rdatasetheader_t *found; - isc_result_t result; - dns_rbtnode_t *onode; - - /* - * We only want to remember the topmost zone cut, since it's the one - * that counts, so we'll just continue if we've already found a - * zonecut. - */ - if (search->zonecut != NULL) - return (DNS_R_CONTINUE); - - found = NULL; - result = DNS_R_CONTINUE; - onode = search->rbtdb->origin_node; - - NODE_LOCK(&(search->rbtdb->node_locks[node->locknum].lock), - isc_rwlocktype_read); - - /* - * Look for an NS or DNAME rdataset active in our version. - */ - ns_header = NULL; - dname_header = NULL; - sigdname_header = NULL; - for (header = node->data; header != NULL; header = header_next) { - header_next = header->next; - if (header->type == dns_rdatatype_ns || - header->type == dns_rdatatype_dname || - header->type == RBTDB_RDATATYPE_SIGDNAME) { - do { - if (header->serial <= search->serial && - !IGNORE(header)) { - /* - * Is this a "this rdataset doesn't - * exist" record? - */ - if (NONEXISTENT(header)) - header = NULL; - break; - } else - header = header->down; - } while (header != NULL); - if (header != NULL) { - if (header->type == dns_rdatatype_dname) - dname_header = header; - else if (header->type == - RBTDB_RDATATYPE_SIGDNAME) - sigdname_header = header; - else if (node != onode || - IS_STUB(search->rbtdb)) { - /* - * We've found an NS rdataset that - * isn't at the origin node. We check - * that they're not at the origin node, - * because otherwise we'd erroneously - * treat the zone top as if it were - * a delegation. - */ - ns_header = header; - } - } - } - } - - /* - * Did we find anything? - */ - if (dname_header != NULL) { - /* - * Note that DNAME has precedence over NS if both exist. - */ - found = dname_header; - search->zonecut_sigrdataset = sigdname_header; - } else if (ns_header != NULL) { - found = ns_header; - search->zonecut_sigrdataset = NULL; - } - - if (found != NULL) { - /* - * We increment the reference count on node to ensure that - * search->zonecut_rdataset will still be valid later. - */ - new_reference(search->rbtdb, node); - search->zonecut = node; - search->zonecut_rdataset = found; - search->need_cleanup = ISC_TRUE; - /* - * Since we've found a zonecut, anything beneath it is - * glue and is not subject to wildcard matching, so we - * may clear search->wild. - */ - search->wild = ISC_FALSE; - if ((search->options & DNS_DBFIND_GLUEOK) == 0) { - /* - * If the caller does not want to find glue, then - * this is the best answer and the search should - * stop now. - */ - result = DNS_R_PARTIALMATCH; - } else { - dns_name_t *zcname; - - /* - * The search will continue beneath the zone cut. - * This may or may not be the best match. In case it - * is, we need to remember the node name. - */ - zcname = dns_fixedname_name(&search->zonecut_name); - RUNTIME_CHECK(dns_name_copy(name, zcname, NULL) == - ISC_R_SUCCESS); - search->copy_name = ISC_TRUE; - } - } else { - /* - * There is no zonecut at this node which is active in this - * version. - * - * If this is a "wild" node and the caller hasn't disabled - * wildcard matching, remember that we've seen a wild node - * in case we need to go searching for wildcard matches - * later on. - */ - if (node->wild && (search->options & DNS_DBFIND_NOWILD) == 0) - search->wild = ISC_TRUE; - } - - NODE_UNLOCK(&(search->rbtdb->node_locks[node->locknum].lock), - isc_rwlocktype_read); - - return (result); + rbtdb_search_t *search = arg; + rdatasetheader_t *header, *header_next; + rdatasetheader_t *dname_header, *sigdname_header, *ns_header; + rdatasetheader_t *found; + isc_result_t result; + dns_rbtnode_t *onode; + + /* + * We only want to remember the topmost zone cut, since it's the one + * that counts, so we'll just continue if we've already found a + * zonecut. + */ + if (search->zonecut != NULL) + return (DNS_R_CONTINUE); + + found = NULL; + result = DNS_R_CONTINUE; + onode = search->rbtdb->origin_node; + + NODE_LOCK(&(search->rbtdb->node_locks[node->locknum].lock), + isc_rwlocktype_read); + + /* + * Look for an NS or DNAME rdataset active in our version. + */ + ns_header = NULL; + dname_header = NULL; + sigdname_header = NULL; + for (header = node->data; header != NULL; header = header_next) { + header_next = header->next; + if (header->type == dns_rdatatype_ns || + header->type == dns_rdatatype_dname || + header->type == RBTDB_RDATATYPE_SIGDNAME) { + do { + if (header->serial <= search->serial && + !IGNORE(header)) { + /* + * Is this a "this rdataset doesn't + * exist" record? + */ + if (NONEXISTENT(header)) + header = NULL; + break; + } else + header = header->down; + } while (header != NULL); + if (header != NULL) { + if (header->type == dns_rdatatype_dname) + dname_header = header; + else if (header->type == + RBTDB_RDATATYPE_SIGDNAME) + sigdname_header = header; + else if (node != onode || + IS_STUB(search->rbtdb)) { + /* + * We've found an NS rdataset that + * isn't at the origin node. We check + * that they're not at the origin node, + * because otherwise we'd erroneously + * treat the zone top as if it were + * a delegation. + */ + ns_header = header; + } + } + } + } + + /* + * Did we find anything? + */ + if (dname_header != NULL) { + /* + * Note that DNAME has precedence over NS if both exist. + */ + found = dname_header; + search->zonecut_sigrdataset = sigdname_header; + } else if (ns_header != NULL) { + found = ns_header; + search->zonecut_sigrdataset = NULL; + } + + if (found != NULL) { + /* + * We increment the reference count on node to ensure that + * search->zonecut_rdataset will still be valid later. + */ + new_reference(search->rbtdb, node); + search->zonecut = node; + search->zonecut_rdataset = found; + search->need_cleanup = ISC_TRUE; + /* + * Since we've found a zonecut, anything beneath it is + * glue and is not subject to wildcard matching, so we + * may clear search->wild. + */ + search->wild = ISC_FALSE; + if ((search->options & DNS_DBFIND_GLUEOK) == 0) { + /* + * If the caller does not want to find glue, then + * this is the best answer and the search should + * stop now. + */ + result = DNS_R_PARTIALMATCH; + } else { + dns_name_t *zcname; + + /* + * The search will continue beneath the zone cut. + * This may or may not be the best match. In case it + * is, we need to remember the node name. + */ + zcname = dns_fixedname_name(&search->zonecut_name); + RUNTIME_CHECK(dns_name_copy(name, zcname, NULL) == + ISC_R_SUCCESS); + search->copy_name = ISC_TRUE; + } + } else { + /* + * There is no zonecut at this node which is active in this + * version. + * + * If this is a "wild" node and the caller hasn't disabled + * wildcard matching, remember that we've seen a wild node + * in case we need to go searching for wildcard matches + * later on. + */ + if (node->wild && (search->options & DNS_DBFIND_NOWILD) == 0) + search->wild = ISC_TRUE; + } + + NODE_UNLOCK(&(search->rbtdb->node_locks[node->locknum].lock), + isc_rwlocktype_read); + + return (result); } static inline void bind_rdataset(dns_rbtdb_t *rbtdb, dns_rbtnode_t *node, - rdatasetheader_t *header, isc_stdtime_t now, - dns_rdataset_t *rdataset) + rdatasetheader_t *header, isc_stdtime_t now, + dns_rdataset_t *rdataset) { - unsigned char *raw; /* RDATASLAB */ - - /* - * Caller must be holding the node reader lock. - * XXXJT: technically, we need a writer lock, since we'll increment - * the header count below. However, since the actual counter value - * doesn't matter, we prioritize performance here. (We may want to - * use atomic increment when available). - */ - - if (rdataset == NULL) - return; - - new_reference(rbtdb, node); - - INSIST(rdataset->methods == NULL); /* We must be disassociated. */ - - rdataset->methods = &rdataset_methods; - rdataset->rdclass = rbtdb->common.rdclass; - rdataset->type = RBTDB_RDATATYPE_BASE(header->type); - rdataset->covers = RBTDB_RDATATYPE_EXT(header->type); - rdataset->ttl = header->rdh_ttl - now; - rdataset->trust = header->trust; - if (NXDOMAIN(header)) - rdataset->attributes |= DNS_RDATASETATTR_NXDOMAIN; - rdataset->private1 = rbtdb; - rdataset->private2 = node; - raw = (unsigned char *)header + sizeof(*header); - rdataset->private3 = raw; - rdataset->count = header->count++; - if (rdataset->count == ISC_UINT32_MAX) - rdataset->count = 0; - - /* - * Reset iterator state. - */ - rdataset->privateuint4 = 0; - rdataset->private5 = NULL; - - /* - * Add noqname proof. - */ - rdataset->private6 = header->noqname; - if (rdataset->private6 != NULL) - rdataset->attributes |= DNS_RDATASETATTR_NOQNAME; + unsigned char *raw; /* RDATASLAB */ + + /* + * Caller must be holding the node reader lock. + * XXXJT: technically, we need a writer lock, since we'll increment + * the header count below. However, since the actual counter value + * doesn't matter, we prioritize performance here. (We may want to + * use atomic increment when available). + */ + + if (rdataset == NULL) + return; + + new_reference(rbtdb, node); + + INSIST(rdataset->methods == NULL); /* We must be disassociated. */ + + rdataset->methods = &rdataset_methods; + rdataset->rdclass = rbtdb->common.rdclass; + rdataset->type = RBTDB_RDATATYPE_BASE(header->type); + rdataset->covers = RBTDB_RDATATYPE_EXT(header->type); + rdataset->ttl = header->rdh_ttl - now; + rdataset->trust = header->trust; + if (NXDOMAIN(header)) + rdataset->attributes |= DNS_RDATASETATTR_NXDOMAIN; + rdataset->private1 = rbtdb; + rdataset->private2 = node; + raw = (unsigned char *)header + sizeof(*header); + rdataset->private3 = raw; + rdataset->count = header->count++; + if (rdataset->count == ISC_UINT32_MAX) + rdataset->count = 0; + + /* + * Reset iterator state. + */ + rdataset->privateuint4 = 0; + rdataset->private5 = NULL; + + /* + * Add noqname proof. + */ + rdataset->private6 = header->noqname; + if (rdataset->private6 != NULL) + rdataset->attributes |= DNS_RDATASETATTR_NOQNAME; } static inline isc_result_t setup_delegation(rbtdb_search_t *search, dns_dbnode_t **nodep, - dns_name_t *foundname, dns_rdataset_t *rdataset, - dns_rdataset_t *sigrdataset) + dns_name_t *foundname, dns_rdataset_t *rdataset, + dns_rdataset_t *sigrdataset) { - isc_result_t result; - dns_name_t *zcname; - rbtdb_rdatatype_t type; - dns_rbtnode_t *node; - - /* - * The caller MUST NOT be holding any node locks. - */ - - node = search->zonecut; - type = search->zonecut_rdataset->type; - - /* - * If we have to set foundname, we do it before anything else. - * If we were to set foundname after we had set nodep or bound the - * rdataset, then we'd have to undo that work if dns_name_copy() - * failed. By setting foundname first, there's nothing to undo if - * we have trouble. - */ - if (foundname != NULL && search->copy_name) { - zcname = dns_fixedname_name(&search->zonecut_name); - result = dns_name_copy(zcname, foundname, NULL); - if (result != ISC_R_SUCCESS) - return (result); - } - if (nodep != NULL) { - /* - * Note that we don't have to increment the node's reference - * count here because we're going to use the reference we - * already have in the search block. - */ - *nodep = node; - search->need_cleanup = ISC_FALSE; - } - if (rdataset != NULL) { - NODE_LOCK(&(search->rbtdb->node_locks[node->locknum].lock), - isc_rwlocktype_read); - bind_rdataset(search->rbtdb, node, search->zonecut_rdataset, - search->now, rdataset); - if (sigrdataset != NULL && search->zonecut_sigrdataset != NULL) - bind_rdataset(search->rbtdb, node, - search->zonecut_sigrdataset, - search->now, sigrdataset); - NODE_UNLOCK(&(search->rbtdb->node_locks[node->locknum].lock), - isc_rwlocktype_read); - } - - if (type == dns_rdatatype_dname) - return (DNS_R_DNAME); - return (DNS_R_DELEGATION); + isc_result_t result; + dns_name_t *zcname; + rbtdb_rdatatype_t type; + dns_rbtnode_t *node; + + /* + * The caller MUST NOT be holding any node locks. + */ + + node = search->zonecut; + type = search->zonecut_rdataset->type; + + /* + * If we have to set foundname, we do it before anything else. + * If we were to set foundname after we had set nodep or bound the + * rdataset, then we'd have to undo that work if dns_name_copy() + * failed. By setting foundname first, there's nothing to undo if + * we have trouble. + */ + if (foundname != NULL && search->copy_name) { + zcname = dns_fixedname_name(&search->zonecut_name); + result = dns_name_copy(zcname, foundname, NULL); + if (result != ISC_R_SUCCESS) + return (result); + } + if (nodep != NULL) { + /* + * Note that we don't have to increment the node's reference + * count here because we're going to use the reference we + * already have in the search block. + */ + *nodep = node; + search->need_cleanup = ISC_FALSE; + } + if (rdataset != NULL) { + NODE_LOCK(&(search->rbtdb->node_locks[node->locknum].lock), + isc_rwlocktype_read); + bind_rdataset(search->rbtdb, node, search->zonecut_rdataset, + search->now, rdataset); + if (sigrdataset != NULL && search->zonecut_sigrdataset != NULL) + bind_rdataset(search->rbtdb, node, + search->zonecut_sigrdataset, + search->now, sigrdataset); + NODE_UNLOCK(&(search->rbtdb->node_locks[node->locknum].lock), + isc_rwlocktype_read); + } + + if (type == dns_rdatatype_dname) + return (DNS_R_DNAME); + return (DNS_R_DELEGATION); } static inline isc_boolean_t valid_glue(rbtdb_search_t *search, dns_name_t *name, rbtdb_rdatatype_t type, - dns_rbtnode_t *node) + dns_rbtnode_t *node) { - unsigned char *raw; /* RDATASLAB */ - unsigned int count, size; - dns_name_t ns_name; - isc_boolean_t valid = ISC_FALSE; - dns_offsets_t offsets; - isc_region_t region; - rdatasetheader_t *header; - - /* - * No additional locking is required. - */ - - /* - * Valid glue types are A, AAAA, A6. NS is also a valid glue type - * if it occurs at a zone cut, but is not valid below it. - */ - if (type == dns_rdatatype_ns) { - if (node != search->zonecut) { - return (ISC_FALSE); - } - } else if (type != dns_rdatatype_a && - type != dns_rdatatype_aaaa && - type != dns_rdatatype_a6) { - return (ISC_FALSE); - } - - header = search->zonecut_rdataset; - raw = (unsigned char *)header + sizeof(*header); - count = raw[0] * 256 + raw[1]; + unsigned char *raw; /* RDATASLAB */ + unsigned int count, size; + dns_name_t ns_name; + isc_boolean_t valid = ISC_FALSE; + dns_offsets_t offsets; + isc_region_t region; + rdatasetheader_t *header; + + /* + * No additional locking is required. + */ + + /* + * Valid glue types are A, AAAA, A6. NS is also a valid glue type + * if it occurs at a zone cut, but is not valid below it. + */ + if (type == dns_rdatatype_ns) { + if (node != search->zonecut) { + return (ISC_FALSE); + } + } else if (type != dns_rdatatype_a && + type != dns_rdatatype_aaaa && + type != dns_rdatatype_a6) { + return (ISC_FALSE); + } + + header = search->zonecut_rdataset; + raw = (unsigned char *)header + sizeof(*header); + count = raw[0] * 256 + raw[1]; #if DNS_RDATASET_FIXED - raw += 2 + (4 * count); + raw += 2 + (4 * count); #else - raw += 2; + raw += 2; #endif - while (count > 0) { - count--; - size = raw[0] * 256 + raw[1]; + while (count > 0) { + count--; + size = raw[0] * 256 + raw[1]; #if DNS_RDATASET_FIXED - raw += 4; + raw += 4; #else - raw += 2; + raw += 2; #endif - region.base = raw; - region.length = size; - raw += size; - /* - * XXX Until we have rdata structures, we have no choice but - * to directly access the rdata format. - */ - dns_name_init(&ns_name, offsets); - dns_name_fromregion(&ns_name, ®ion); - if (dns_name_compare(&ns_name, name) == 0) { - valid = ISC_TRUE; - break; - } - } - - return (valid); + region.base = raw; + region.length = size; + raw += size; + /* + * XXX Until we have rdata structures, we have no choice but + * to directly access the rdata format. + */ + dns_name_init(&ns_name, offsets); + dns_name_fromregion(&ns_name, ®ion); + if (dns_name_compare(&ns_name, name) == 0) { + valid = ISC_TRUE; + break; + } + } + + return (valid); } static inline isc_boolean_t activeempty(rbtdb_search_t *search, dns_rbtnodechain_t *chain, - dns_name_t *name) + dns_name_t *name) { - dns_fixedname_t fnext; - dns_fixedname_t forigin; - dns_name_t *next; - dns_name_t *origin; - dns_name_t prefix; - dns_rbtdb_t *rbtdb; - dns_rbtnode_t *node; - isc_result_t result; - isc_boolean_t answer = ISC_FALSE; - rdatasetheader_t *header; - - rbtdb = search->rbtdb; - - dns_name_init(&prefix, NULL); - dns_fixedname_init(&fnext); - next = dns_fixedname_name(&fnext); - dns_fixedname_init(&forigin); - origin = dns_fixedname_name(&forigin); - - result = dns_rbtnodechain_next(chain, NULL, NULL); - while (result == ISC_R_SUCCESS || result == DNS_R_NEWORIGIN) { - node = NULL; - result = dns_rbtnodechain_current(chain, &prefix, - origin, &node); - if (result != ISC_R_SUCCESS) - break; - NODE_LOCK(&(rbtdb->node_locks[node->locknum].lock), - isc_rwlocktype_read); - for (header = node->data; - header != NULL; - header = header->next) { - if (header->serial <= search->serial && - !IGNORE(header) && EXISTS(header)) - break; - } - NODE_UNLOCK(&(rbtdb->node_locks[node->locknum].lock), - isc_rwlocktype_read); - if (header != NULL) - break; - result = dns_rbtnodechain_next(chain, NULL, NULL); - } - if (result == ISC_R_SUCCESS) - result = dns_name_concatenate(&prefix, origin, next, NULL); - if (result == ISC_R_SUCCESS && dns_name_issubdomain(next, name)) - answer = ISC_TRUE; - return (answer); + dns_fixedname_t fnext; + dns_fixedname_t forigin; + dns_name_t *next; + dns_name_t *origin; + dns_name_t prefix; + dns_rbtdb_t *rbtdb; + dns_rbtnode_t *node; + isc_result_t result; + isc_boolean_t answer = ISC_FALSE; + rdatasetheader_t *header; + + rbtdb = search->rbtdb; + + dns_name_init(&prefix, NULL); + dns_fixedname_init(&fnext); + next = dns_fixedname_name(&fnext); + dns_fixedname_init(&forigin); + origin = dns_fixedname_name(&forigin); + + result = dns_rbtnodechain_next(chain, NULL, NULL); + while (result == ISC_R_SUCCESS || result == DNS_R_NEWORIGIN) { + node = NULL; + result = dns_rbtnodechain_current(chain, &prefix, + origin, &node); + if (result != ISC_R_SUCCESS) + break; + NODE_LOCK(&(rbtdb->node_locks[node->locknum].lock), + isc_rwlocktype_read); + for (header = node->data; + header != NULL; + header = header->next) { + if (header->serial <= search->serial && + !IGNORE(header) && EXISTS(header)) + break; + } + NODE_UNLOCK(&(rbtdb->node_locks[node->locknum].lock), + isc_rwlocktype_read); + if (header != NULL) + break; + result = dns_rbtnodechain_next(chain, NULL, NULL); + } + if (result == ISC_R_SUCCESS) + result = dns_name_concatenate(&prefix, origin, next, NULL); + if (result == ISC_R_SUCCESS && dns_name_issubdomain(next, name)) + answer = ISC_TRUE; + return (answer); } static inline isc_boolean_t activeemtpynode(rbtdb_search_t *search, dns_name_t *qname, dns_name_t *wname) { - dns_fixedname_t fnext; - dns_fixedname_t forigin; - dns_fixedname_t fprev; - dns_name_t *next; - dns_name_t *origin; - dns_name_t *prev; - dns_name_t name; - dns_name_t rname; - dns_name_t tname; - dns_rbtdb_t *rbtdb; - dns_rbtnode_t *node; - dns_rbtnodechain_t chain; - isc_boolean_t check_next = ISC_TRUE; - isc_boolean_t check_prev = ISC_TRUE; - isc_boolean_t answer = ISC_FALSE; - isc_result_t result; - rdatasetheader_t *header; - unsigned int n; - - rbtdb = search->rbtdb; - - dns_name_init(&name, NULL); - dns_name_init(&tname, NULL); - dns_name_init(&rname, NULL); - dns_fixedname_init(&fnext); - next = dns_fixedname_name(&fnext); - dns_fixedname_init(&fprev); - prev = dns_fixedname_name(&fprev); - dns_fixedname_init(&forigin); - origin = dns_fixedname_name(&forigin); - - /* - * Find if qname is at or below a empty node. - * Use our own copy of the chain. - */ - - chain = search->chain; - do { - node = NULL; - result = dns_rbtnodechain_current(&chain, &name, - origin, &node); - if (result != ISC_R_SUCCESS) - break; - NODE_LOCK(&(rbtdb->node_locks[node->locknum].lock), - isc_rwlocktype_read); - for (header = node->data; - header != NULL; - header = header->next) { - if (header->serial <= search->serial && - !IGNORE(header) && EXISTS(header)) - break; - } - NODE_UNLOCK(&(rbtdb->node_locks[node->locknum].lock), - isc_rwlocktype_read); - if (header != NULL) - break; - result = dns_rbtnodechain_prev(&chain, NULL, NULL); - } while (result == ISC_R_SUCCESS || result == DNS_R_NEWORIGIN); - if (result == ISC_R_SUCCESS) - result = dns_name_concatenate(&name, origin, prev, NULL); - if (result != ISC_R_SUCCESS) - check_prev = ISC_FALSE; - - result = dns_rbtnodechain_next(&chain, NULL, NULL); - while (result == ISC_R_SUCCESS || result == DNS_R_NEWORIGIN) { - node = NULL; - result = dns_rbtnodechain_current(&chain, &name, - origin, &node); - if (result != ISC_R_SUCCESS) - break; - NODE_LOCK(&(rbtdb->node_locks[node->locknum].lock), - isc_rwlocktype_read); - for (header = node->data; - header != NULL; - header = header->next) { - if (header->serial <= search->serial && - !IGNORE(header) && EXISTS(header)) - break; - } - NODE_UNLOCK(&(rbtdb->node_locks[node->locknum].lock), - isc_rwlocktype_read); - if (header != NULL) - break; - result = dns_rbtnodechain_next(&chain, NULL, NULL); - } - if (result == ISC_R_SUCCESS) - result = dns_name_concatenate(&name, origin, next, NULL); - if (result != ISC_R_SUCCESS) - check_next = ISC_FALSE; - - dns_name_clone(qname, &rname); - - /* - * Remove the wildcard label to find the terminal name. - */ - n = dns_name_countlabels(wname); - dns_name_getlabelsequence(wname, 1, n - 1, &tname); - - do { - if ((check_prev && dns_name_issubdomain(prev, &rname)) || - (check_next && dns_name_issubdomain(next, &rname))) { - answer = ISC_TRUE; - break; - } - /* - * Remove the left hand label. - */ - n = dns_name_countlabels(&rname); - dns_name_getlabelsequence(&rname, 1, n - 1, &rname); - } while (!dns_name_equal(&rname, &tname)); - return (answer); + dns_fixedname_t fnext; + dns_fixedname_t forigin; + dns_fixedname_t fprev; + dns_name_t *next; + dns_name_t *origin; + dns_name_t *prev; + dns_name_t name; + dns_name_t rname; + dns_name_t tname; + dns_rbtdb_t *rbtdb; + dns_rbtnode_t *node; + dns_rbtnodechain_t chain; + isc_boolean_t check_next = ISC_TRUE; + isc_boolean_t check_prev = ISC_TRUE; + isc_boolean_t answer = ISC_FALSE; + isc_result_t result; + rdatasetheader_t *header; + unsigned int n; + + rbtdb = search->rbtdb; + + dns_name_init(&name, NULL); + dns_name_init(&tname, NULL); + dns_name_init(&rname, NULL); + dns_fixedname_init(&fnext); + next = dns_fixedname_name(&fnext); + dns_fixedname_init(&fprev); + prev = dns_fixedname_name(&fprev); + dns_fixedname_init(&forigin); + origin = dns_fixedname_name(&forigin); + + /* + * Find if qname is at or below a empty node. + * Use our own copy of the chain. + */ + + chain = search->chain; + do { + node = NULL; + result = dns_rbtnodechain_current(&chain, &name, + origin, &node); + if (result != ISC_R_SUCCESS) + break; + NODE_LOCK(&(rbtdb->node_locks[node->locknum].lock), + isc_rwlocktype_read); + for (header = node->data; + header != NULL; + header = header->next) { + if (header->serial <= search->serial && + !IGNORE(header) && EXISTS(header)) + break; + } + NODE_UNLOCK(&(rbtdb->node_locks[node->locknum].lock), + isc_rwlocktype_read); + if (header != NULL) + break; + result = dns_rbtnodechain_prev(&chain, NULL, NULL); + } while (result == ISC_R_SUCCESS || result == DNS_R_NEWORIGIN); + if (result == ISC_R_SUCCESS) + result = dns_name_concatenate(&name, origin, prev, NULL); + if (result != ISC_R_SUCCESS) + check_prev = ISC_FALSE; + + result = dns_rbtnodechain_next(&chain, NULL, NULL); + while (result == ISC_R_SUCCESS || result == DNS_R_NEWORIGIN) { + node = NULL; + result = dns_rbtnodechain_current(&chain, &name, + origin, &node); + if (result != ISC_R_SUCCESS) + break; + NODE_LOCK(&(rbtdb->node_locks[node->locknum].lock), + isc_rwlocktype_read); + for (header = node->data; + header != NULL; + header = header->next) { + if (header->serial <= search->serial && + !IGNORE(header) && EXISTS(header)) + break; + } + NODE_UNLOCK(&(rbtdb->node_locks[node->locknum].lock), + isc_rwlocktype_read); + if (header != NULL) + break; + result = dns_rbtnodechain_next(&chain, NULL, NULL); + } + if (result == ISC_R_SUCCESS) + result = dns_name_concatenate(&name, origin, next, NULL); + if (result != ISC_R_SUCCESS) + check_next = ISC_FALSE; + + dns_name_clone(qname, &rname); + + /* + * Remove the wildcard label to find the terminal name. + */ + n = dns_name_countlabels(wname); + dns_name_getlabelsequence(wname, 1, n - 1, &tname); + + do { + if ((check_prev && dns_name_issubdomain(prev, &rname)) || + (check_next && dns_name_issubdomain(next, &rname))) { + answer = ISC_TRUE; + break; + } + /* + * Remove the left hand label. + */ + n = dns_name_countlabels(&rname); + dns_name_getlabelsequence(&rname, 1, n - 1, &rname); + } while (!dns_name_equal(&rname, &tname)); + return (answer); } static inline isc_result_t find_wildcard(rbtdb_search_t *search, dns_rbtnode_t **nodep, - dns_name_t *qname) + dns_name_t *qname) { - unsigned int i, j; - dns_rbtnode_t *node, *level_node, *wnode; - rdatasetheader_t *header; - isc_result_t result = ISC_R_NOTFOUND; - dns_name_t name; - dns_name_t *wname; - dns_fixedname_t fwname; - dns_rbtdb_t *rbtdb; - isc_boolean_t done, wild, active; - dns_rbtnodechain_t wchain; - - /* - * Caller must be holding the tree lock and MUST NOT be holding - * any node locks. - */ - - /* - * Examine each ancestor level. If the level's wild bit - * is set, then construct the corresponding wildcard name and - * search for it. If the wildcard node exists, and is active in - * this version, we're done. If not, then we next check to see - * if the ancestor is active in this version. If so, then there - * can be no possible wildcard match and again we're done. If not, - * continue the search. - */ - - rbtdb = search->rbtdb; - i = search->chain.level_matches; - done = ISC_FALSE; - node = *nodep; - do { - NODE_LOCK(&(rbtdb->node_locks[node->locknum].lock), - isc_rwlocktype_read); - - /* - * First we try to figure out if this node is active in - * the search's version. We do this now, even though we - * may not need the information, because it simplifies the - * locking and code flow. - */ - for (header = node->data; - header != NULL; - header = header->next) { - if (header->serial <= search->serial && - !IGNORE(header) && EXISTS(header)) - break; - } - if (header != NULL) - active = ISC_TRUE; - else - active = ISC_FALSE; - - if (node->wild) - wild = ISC_TRUE; - else - wild = ISC_FALSE; - - NODE_UNLOCK(&(rbtdb->node_locks[node->locknum].lock), - isc_rwlocktype_read); - - if (wild) { - /* - * Construct the wildcard name for this level. - */ - dns_name_init(&name, NULL); - dns_rbt_namefromnode(node, &name); - dns_fixedname_init(&fwname); - wname = dns_fixedname_name(&fwname); - result = dns_name_concatenate(dns_wildcardname, &name, - wname, NULL); - j = i; - while (result == ISC_R_SUCCESS && j != 0) { - j--; - level_node = search->chain.levels[j]; - dns_name_init(&name, NULL); - dns_rbt_namefromnode(level_node, &name); - result = dns_name_concatenate(wname, - &name, - wname, - NULL); - } - if (result != ISC_R_SUCCESS) - break; - - wnode = NULL; - dns_rbtnodechain_init(&wchain, NULL); - result = dns_rbt_findnode(rbtdb->tree, wname, - NULL, &wnode, &wchain, - DNS_RBTFIND_EMPTYDATA, - NULL, NULL); - if (result == ISC_R_SUCCESS) { - nodelock_t *lock; - - /* - * We have found the wildcard node. If it - * is active in the search's version, we're - * done. - */ - lock = &rbtdb->node_locks[wnode->locknum].lock; - NODE_LOCK(lock, isc_rwlocktype_read); - for (header = wnode->data; - header != NULL; - header = header->next) { - if (header->serial <= search->serial && - !IGNORE(header) && EXISTS(header)) - break; - } - NODE_UNLOCK(lock, isc_rwlocktype_read); - if (header != NULL || - activeempty(search, &wchain, wname)) { - if (activeemtpynode(search, qname, - wname)) { - return (ISC_R_NOTFOUND); - } - /* - * The wildcard node is active! - * - * Note: result is still ISC_R_SUCCESS - * so we don't have to set it. - */ - *nodep = wnode; - break; - } - } else if (result != ISC_R_NOTFOUND && - result != DNS_R_PARTIALMATCH) { - /* - * An error has occurred. Bail out. - */ - break; - } - } - - if (active) { - /* - * The level node is active. Any wildcarding - * present at higher levels has no - * effect and we're done. - */ - result = ISC_R_NOTFOUND; - break; - } - - if (i > 0) { - i--; - node = search->chain.levels[i]; - } else - done = ISC_TRUE; - } while (!done); - - return (result); + unsigned int i, j; + dns_rbtnode_t *node, *level_node, *wnode; + rdatasetheader_t *header; + isc_result_t result = ISC_R_NOTFOUND; + dns_name_t name; + dns_name_t *wname; + dns_fixedname_t fwname; + dns_rbtdb_t *rbtdb; + isc_boolean_t done, wild, active; + dns_rbtnodechain_t wchain; + + /* + * Caller must be holding the tree lock and MUST NOT be holding + * any node locks. + */ + + /* + * Examine each ancestor level. If the level's wild bit + * is set, then construct the corresponding wildcard name and + * search for it. If the wildcard node exists, and is active in + * this version, we're done. If not, then we next check to see + * if the ancestor is active in this version. If so, then there + * can be no possible wildcard match and again we're done. If not, + * continue the search. + */ + + rbtdb = search->rbtdb; + i = search->chain.level_matches; + done = ISC_FALSE; + node = *nodep; + do { + NODE_LOCK(&(rbtdb->node_locks[node->locknum].lock), + isc_rwlocktype_read); + + /* + * First we try to figure out if this node is active in + * the search's version. We do this now, even though we + * may not need the information, because it simplifies the + * locking and code flow. + */ + for (header = node->data; + header != NULL; + header = header->next) { + if (header->serial <= search->serial && + !IGNORE(header) && EXISTS(header)) + break; + } + if (header != NULL) + active = ISC_TRUE; + else + active = ISC_FALSE; + + if (node->wild) + wild = ISC_TRUE; + else + wild = ISC_FALSE; + + NODE_UNLOCK(&(rbtdb->node_locks[node->locknum].lock), + isc_rwlocktype_read); + + if (wild) { + /* + * Construct the wildcard name for this level. + */ + dns_name_init(&name, NULL); + dns_rbt_namefromnode(node, &name); + dns_fixedname_init(&fwname); + wname = dns_fixedname_name(&fwname); + result = dns_name_concatenate(dns_wildcardname, &name, + wname, NULL); + j = i; + while (result == ISC_R_SUCCESS && j != 0) { + j--; + level_node = search->chain.levels[j]; + dns_name_init(&name, NULL); + dns_rbt_namefromnode(level_node, &name); + result = dns_name_concatenate(wname, + &name, + wname, + NULL); + } + if (result != ISC_R_SUCCESS) + break; + + wnode = NULL; + dns_rbtnodechain_init(&wchain, NULL); + result = dns_rbt_findnode(rbtdb->tree, wname, + NULL, &wnode, &wchain, + DNS_RBTFIND_EMPTYDATA, + NULL, NULL); + if (result == ISC_R_SUCCESS) { + nodelock_t *lock; + + /* + * We have found the wildcard node. If it + * is active in the search's version, we're + * done. + */ + lock = &rbtdb->node_locks[wnode->locknum].lock; + NODE_LOCK(lock, isc_rwlocktype_read); + for (header = wnode->data; + header != NULL; + header = header->next) { + if (header->serial <= search->serial && + !IGNORE(header) && EXISTS(header)) + break; + } + NODE_UNLOCK(lock, isc_rwlocktype_read); + if (header != NULL || + activeempty(search, &wchain, wname)) { + if (activeemtpynode(search, qname, + wname)) { + return (ISC_R_NOTFOUND); + } + /* + * The wildcard node is active! + * + * Note: result is still ISC_R_SUCCESS + * so we don't have to set it. + */ + *nodep = wnode; + break; + } + } else if (result != ISC_R_NOTFOUND && + result != DNS_R_PARTIALMATCH) { + /* + * An error has occurred. Bail out. + */ + break; + } + } + + if (active) { + /* + * The level node is active. Any wildcarding + * present at higher levels has no + * effect and we're done. + */ + result = ISC_R_NOTFOUND; + break; + } + + if (i > 0) { + i--; + node = search->chain.levels[i]; + } else + done = ISC_TRUE; + } while (!done); + + return (result); } static inline isc_result_t find_closest_nsec(rbtdb_search_t *search, dns_dbnode_t **nodep, - dns_name_t *foundname, dns_rdataset_t *rdataset, - dns_rdataset_t *sigrdataset, isc_boolean_t need_sig) + dns_name_t *foundname, dns_rdataset_t *rdataset, + dns_rdataset_t *sigrdataset, isc_boolean_t need_sig) { - dns_rbtnode_t *node; - rdatasetheader_t *header, *header_next, *found, *foundsig; - isc_boolean_t empty_node; - isc_result_t result; - dns_fixedname_t fname, forigin; - dns_name_t *name, *origin; - - do { - node = NULL; - dns_fixedname_init(&fname); - name = dns_fixedname_name(&fname); - dns_fixedname_init(&forigin); - origin = dns_fixedname_name(&forigin); - result = dns_rbtnodechain_current(&search->chain, name, - origin, &node); - if (result != ISC_R_SUCCESS) - return (result); - NODE_LOCK(&(search->rbtdb->node_locks[node->locknum].lock), - isc_rwlocktype_read); - found = NULL; - foundsig = NULL; - empty_node = ISC_TRUE; - for (header = node->data; - header != NULL; - header = header_next) { - header_next = header->next; - /* - * Look for an active, extant NSEC or RRSIG NSEC. - */ - do { - if (header->serial <= search->serial && - !IGNORE(header)) { - /* - * Is this a "this rdataset doesn't - * exist" record? - */ - if (NONEXISTENT(header)) - header = NULL; - break; - } else - header = header->down; - } while (header != NULL); - if (header != NULL) { - /* - * We now know that there is at least one - * active rdataset at this node. - */ - empty_node = ISC_FALSE; - if (header->type == dns_rdatatype_nsec) { - found = header; - if (foundsig != NULL) - break; - } else if (header->type == - RBTDB_RDATATYPE_SIGNSEC) { - foundsig = header; - if (found != NULL) - break; - } - } - } - if (!empty_node) { - if (found != NULL && - (foundsig != NULL || !need_sig)) - { - /* - * We've found the right NSEC record. - * - * Note: for this to really be the right - * NSEC record, it's essential that the NSEC - * records of any nodes obscured by a zone - * cut have been removed; we assume this is - * the case. - */ - result = dns_name_concatenate(name, origin, - foundname, NULL); - if (result == ISC_R_SUCCESS) { - if (nodep != NULL) { - new_reference(search->rbtdb, - node); - *nodep = node; - } - bind_rdataset(search->rbtdb, node, - found, search->now, - rdataset); - if (foundsig != NULL) - bind_rdataset(search->rbtdb, - node, - foundsig, - search->now, - sigrdataset); - } - } else if (found == NULL && foundsig == NULL) { - /* - * This node is active, but has no NSEC or - * RRSIG NSEC. That means it's glue or - * other obscured zone data that isn't - * relevant for our search. Treat the - * node as if it were empty and keep looking. - */ - empty_node = ISC_TRUE; - result = dns_rbtnodechain_prev(&search->chain, - NULL, NULL); - } else { - /* - * We found an active node, but either the - * NSEC or the RRSIG NSEC is missing. This - * shouldn't happen. - */ - result = DNS_R_BADDB; - } - } else { - /* - * This node isn't active. We've got to keep - * looking. - */ - result = dns_rbtnodechain_prev(&search->chain, NULL, - NULL); - } - NODE_UNLOCK(&(search->rbtdb->node_locks[node->locknum].lock), - isc_rwlocktype_read); - } while (empty_node && result == ISC_R_SUCCESS); - - /* - * If the result is ISC_R_NOMORE, then we got to the beginning of - * the database and didn't find a NSEC record. This shouldn't - * happen. - */ - if (result == ISC_R_NOMORE) - result = DNS_R_BADDB; - - return (result); + dns_rbtnode_t *node; + rdatasetheader_t *header, *header_next, *found, *foundsig; + isc_boolean_t empty_node; + isc_result_t result; + dns_fixedname_t fname, forigin; + dns_name_t *name, *origin; + + do { + node = NULL; + dns_fixedname_init(&fname); + name = dns_fixedname_name(&fname); + dns_fixedname_init(&forigin); + origin = dns_fixedname_name(&forigin); + result = dns_rbtnodechain_current(&search->chain, name, + origin, &node); + if (result != ISC_R_SUCCESS) + return (result); + NODE_LOCK(&(search->rbtdb->node_locks[node->locknum].lock), + isc_rwlocktype_read); + found = NULL; + foundsig = NULL; + empty_node = ISC_TRUE; + for (header = node->data; + header != NULL; + header = header_next) { + header_next = header->next; + /* + * Look for an active, extant NSEC or RRSIG NSEC. + */ + do { + if (header->serial <= search->serial && + !IGNORE(header)) { + /* + * Is this a "this rdataset doesn't + * exist" record? + */ + if (NONEXISTENT(header)) + header = NULL; + break; + } else + header = header->down; + } while (header != NULL); + if (header != NULL) { + /* + * We now know that there is at least one + * active rdataset at this node. + */ + empty_node = ISC_FALSE; + if (header->type == dns_rdatatype_nsec) { + found = header; + if (foundsig != NULL) + break; + } else if (header->type == + RBTDB_RDATATYPE_SIGNSEC) { + foundsig = header; + if (found != NULL) + break; + } + } + } + if (!empty_node) { + if (found != NULL && + (foundsig != NULL || !need_sig)) + { + /* + * We've found the right NSEC record. + * + * Note: for this to really be the right + * NSEC record, it's essential that the NSEC + * records of any nodes obscured by a zone + * cut have been removed; we assume this is + * the case. + */ + result = dns_name_concatenate(name, origin, + foundname, NULL); + if (result == ISC_R_SUCCESS) { + if (nodep != NULL) { + new_reference(search->rbtdb, + node); + *nodep = node; + } + bind_rdataset(search->rbtdb, node, + found, search->now, + rdataset); + if (foundsig != NULL) + bind_rdataset(search->rbtdb, + node, + foundsig, + search->now, + sigrdataset); + } + } else if (found == NULL && foundsig == NULL) { + /* + * This node is active, but has no NSEC or + * RRSIG NSEC. That means it's glue or + * other obscured zone data that isn't + * relevant for our search. Treat the + * node as if it were empty and keep looking. + */ + empty_node = ISC_TRUE; + result = dns_rbtnodechain_prev(&search->chain, + NULL, NULL); + } else { + /* + * We found an active node, but either the + * NSEC or the RRSIG NSEC is missing. This + * shouldn't happen. + */ + result = DNS_R_BADDB; + } + } else { + /* + * This node isn't active. We've got to keep + * looking. + */ + result = dns_rbtnodechain_prev(&search->chain, NULL, + NULL); + } + NODE_UNLOCK(&(search->rbtdb->node_locks[node->locknum].lock), + isc_rwlocktype_read); + } while (empty_node && result == ISC_R_SUCCESS); + + /* + * If the result is ISC_R_NOMORE, then we got to the beginning of + * the database and didn't find a NSEC record. This shouldn't + * happen. + */ + if (result == ISC_R_NOMORE) + result = DNS_R_BADDB; + + return (result); } static isc_result_t zone_find(dns_db_t *db, dns_name_t *name, dns_dbversion_t *version, - dns_rdatatype_t type, unsigned int options, isc_stdtime_t now, - dns_dbnode_t **nodep, dns_name_t *foundname, - dns_rdataset_t *rdataset, dns_rdataset_t *sigrdataset) + dns_rdatatype_t type, unsigned int options, isc_stdtime_t now, + dns_dbnode_t **nodep, dns_name_t *foundname, + dns_rdataset_t *rdataset, dns_rdataset_t *sigrdataset) { - dns_rbtnode_t *node = NULL; - isc_result_t result; - rbtdb_search_t search; - isc_boolean_t cname_ok = ISC_TRUE; - isc_boolean_t close_version = ISC_FALSE; - isc_boolean_t maybe_zonecut = ISC_FALSE; - isc_boolean_t at_zonecut = ISC_FALSE; - isc_boolean_t wild; - isc_boolean_t empty_node; - rdatasetheader_t *header, *header_next, *found, *nsecheader; - rdatasetheader_t *foundsig, *cnamesig, *nsecsig; - rbtdb_rdatatype_t sigtype; - isc_boolean_t active; - dns_rbtnodechain_t chain; - nodelock_t *lock; - - - search.rbtdb = (dns_rbtdb_t *)db; - - REQUIRE(VALID_RBTDB(search.rbtdb)); - - /* - * We don't care about 'now'. - */ - UNUSED(now); - - /* - * If the caller didn't supply a version, attach to the current - * version. - */ - if (version == NULL) { - currentversion(db, &version); - close_version = ISC_TRUE; - } - - search.rbtversion = version; - search.serial = search.rbtversion->serial; - search.options = options; - search.copy_name = ISC_FALSE; - search.need_cleanup = ISC_FALSE; - search.wild = ISC_FALSE; - search.zonecut = NULL; - dns_fixedname_init(&search.zonecut_name); - dns_rbtnodechain_init(&search.chain, search.rbtdb->common.mctx); - search.now = 0; - - /* - * 'wild' will be true iff. we've matched a wildcard. - */ - wild = ISC_FALSE; - - RWLOCK(&search.rbtdb->tree_lock, isc_rwlocktype_read); - - /* - * Search down from the root of the tree. If, while going down, we - * encounter a callback node, zone_zonecut_callback() will search the - * rdatasets at the zone cut for active DNAME or NS rdatasets. - */ - result = dns_rbt_findnode(search.rbtdb->tree, name, foundname, &node, - &search.chain, DNS_RBTFIND_EMPTYDATA, - zone_zonecut_callback, &search); - - if (result == DNS_R_PARTIALMATCH) { - partial_match: - if (search.zonecut != NULL) { - result = setup_delegation(&search, nodep, foundname, - rdataset, sigrdataset); - goto tree_exit; - } - - if (search.wild) { - /* - * At least one of the levels in the search chain - * potentially has a wildcard. For each such level, - * we must see if there's a matching wildcard active - * in the current version. - */ - result = find_wildcard(&search, &node, name); - if (result == ISC_R_SUCCESS) { - result = dns_name_copy(name, foundname, NULL); - if (result != ISC_R_SUCCESS) - goto tree_exit; - wild = ISC_TRUE; - goto found; - } - else if (result != ISC_R_NOTFOUND) - goto tree_exit; - } - - chain = search.chain; - active = activeempty(&search, &chain, name); - - /* - * If we're here, then the name does not exist, is not - * beneath a zonecut, and there's no matching wildcard. - */ - if (search.rbtdb->secure || - (search.options & DNS_DBFIND_FORCENSEC) != 0) - { - result = find_closest_nsec(&search, nodep, foundname, - rdataset, sigrdataset, - search.rbtdb->secure); - if (result == ISC_R_SUCCESS) - result = active ? DNS_R_EMPTYNAME : - DNS_R_NXDOMAIN; - } else - result = active ? DNS_R_EMPTYNAME : DNS_R_NXDOMAIN; - goto tree_exit; - } else if (result != ISC_R_SUCCESS) - goto tree_exit; + dns_rbtnode_t *node = NULL; + isc_result_t result; + rbtdb_search_t search; + isc_boolean_t cname_ok = ISC_TRUE; + isc_boolean_t close_version = ISC_FALSE; + isc_boolean_t maybe_zonecut = ISC_FALSE; + isc_boolean_t at_zonecut = ISC_FALSE; + isc_boolean_t wild; + isc_boolean_t empty_node; + rdatasetheader_t *header, *header_next, *found, *nsecheader; + rdatasetheader_t *foundsig, *cnamesig, *nsecsig; + rbtdb_rdatatype_t sigtype; + isc_boolean_t active; + dns_rbtnodechain_t chain; + nodelock_t *lock; + + + search.rbtdb = (dns_rbtdb_t *)db; + + REQUIRE(VALID_RBTDB(search.rbtdb)); + + /* + * We don't care about 'now'. + */ + UNUSED(now); + + /* + * If the caller didn't supply a version, attach to the current + * version. + */ + if (version == NULL) { + currentversion(db, &version); + close_version = ISC_TRUE; + } + + search.rbtversion = version; + search.serial = search.rbtversion->serial; + search.options = options; + search.copy_name = ISC_FALSE; + search.need_cleanup = ISC_FALSE; + search.wild = ISC_FALSE; + search.zonecut = NULL; + dns_fixedname_init(&search.zonecut_name); + dns_rbtnodechain_init(&search.chain, search.rbtdb->common.mctx); + search.now = 0; + + /* + * 'wild' will be true iff. we've matched a wildcard. + */ + wild = ISC_FALSE; + + RWLOCK(&search.rbtdb->tree_lock, isc_rwlocktype_read); + + /* + * Search down from the root of the tree. If, while going down, we + * encounter a callback node, zone_zonecut_callback() will search the + * rdatasets at the zone cut for active DNAME or NS rdatasets. + */ + result = dns_rbt_findnode(search.rbtdb->tree, name, foundname, &node, + &search.chain, DNS_RBTFIND_EMPTYDATA, + zone_zonecut_callback, &search); + + if (result == DNS_R_PARTIALMATCH) { + partial_match: + if (search.zonecut != NULL) { + result = setup_delegation(&search, nodep, foundname, + rdataset, sigrdataset); + goto tree_exit; + } + + if (search.wild) { + /* + * At least one of the levels in the search chain + * potentially has a wildcard. For each such level, + * we must see if there's a matching wildcard active + * in the current version. + */ + result = find_wildcard(&search, &node, name); + if (result == ISC_R_SUCCESS) { + result = dns_name_copy(name, foundname, NULL); + if (result != ISC_R_SUCCESS) + goto tree_exit; + wild = ISC_TRUE; + goto found; + } + else if (result != ISC_R_NOTFOUND) + goto tree_exit; + } + + chain = search.chain; + active = activeempty(&search, &chain, name); + + /* + * If we're here, then the name does not exist, is not + * beneath a zonecut, and there's no matching wildcard. + */ + if (search.rbtdb->secure || + (search.options & DNS_DBFIND_FORCENSEC) != 0) + { + result = find_closest_nsec(&search, nodep, foundname, + rdataset, sigrdataset, + search.rbtdb->secure); + if (result == ISC_R_SUCCESS) + result = active ? DNS_R_EMPTYNAME : + DNS_R_NXDOMAIN; + } else + result = active ? DNS_R_EMPTYNAME : DNS_R_NXDOMAIN; + goto tree_exit; + } else if (result != ISC_R_SUCCESS) + goto tree_exit; found: - /* - * We have found a node whose name is the desired name, or we - * have matched a wildcard. - */ - - if (search.zonecut != NULL) { - /* - * If we're beneath a zone cut, we don't want to look for - * CNAMEs because they're not legitimate zone glue. - */ - cname_ok = ISC_FALSE; - } else { - /* - * The node may be a zone cut itself. If it might be one, - * make sure we check for it later. - */ - if (node->find_callback && - (node != search.rbtdb->origin_node || - IS_STUB(search.rbtdb)) && - !dns_rdatatype_atparent(type)) - maybe_zonecut = ISC_TRUE; - } - - /* - * Certain DNSSEC types are not subject to CNAME matching - * (RFC4035, section 2.5 and RFC3007). - * - * We don't check for RRSIG, because we don't store RRSIG records - * directly. - */ - if (type == dns_rdatatype_key || type == dns_rdatatype_nsec) - cname_ok = ISC_FALSE; - - /* - * We now go looking for rdata... - */ - - NODE_LOCK(&(search.rbtdb->node_locks[node->locknum].lock), - isc_rwlocktype_read); - - found = NULL; - foundsig = NULL; - sigtype = RBTDB_RDATATYPE_VALUE(dns_rdatatype_rrsig, type); - nsecheader = NULL; - nsecsig = NULL; - cnamesig = NULL; - empty_node = ISC_TRUE; - for (header = node->data; header != NULL; header = header_next) { - header_next = header->next; - /* - * Look for an active, extant rdataset. - */ - do { - if (header->serial <= search.serial && - !IGNORE(header)) { - /* - * Is this a "this rdataset doesn't - * exist" record? - */ - if (NONEXISTENT(header)) - header = NULL; - break; - } else - header = header->down; - } while (header != NULL); - if (header != NULL) { - /* - * We now know that there is at least one active - * rdataset at this node. - */ - empty_node = ISC_FALSE; - - /* - * Do special zone cut handling, if requested. - */ - if (maybe_zonecut && - header->type == dns_rdatatype_ns) { - /* - * We increment the reference count on node to - * ensure that search->zonecut_rdataset will - * still be valid later. - */ - new_reference(search.rbtdb, node); - search.zonecut = node; - search.zonecut_rdataset = header; - search.zonecut_sigrdataset = NULL; - search.need_cleanup = ISC_TRUE; - maybe_zonecut = ISC_FALSE; - at_zonecut = ISC_TRUE; - /* - * It is not clear if KEY should still be - * allowed at the parent side of the zone - * cut or not. It is needed for RFC3007 - * validated updates. - */ - if ((search.options & DNS_DBFIND_GLUEOK) == 0 - && type != dns_rdatatype_nsec - && type != dns_rdatatype_key) { - /* - * Glue is not OK, but any answer we - * could return would be glue. Return - * the delegation. - */ - found = NULL; - break; - } - if (found != NULL && foundsig != NULL) - break; - } - - /* - * If we found a type we were looking for, - * remember it. - */ - if (header->type == type || - type == dns_rdatatype_any || - (header->type == dns_rdatatype_cname && - cname_ok)) { - /* - * We've found the answer! - */ - found = header; - if (header->type == dns_rdatatype_cname && - cname_ok) { - /* - * We may be finding a CNAME instead - * of the desired type. - * - * If we've already got the CNAME RRSIG, - * use it, otherwise change sigtype - * so that we find it. - */ - if (cnamesig != NULL) - foundsig = cnamesig; - else - sigtype = - RBTDB_RDATATYPE_SIGCNAME; - } - /* - * If we've got all we need, end the search. - */ - if (!maybe_zonecut && foundsig != NULL) - break; - } else if (header->type == sigtype) { - /* - * We've found the RRSIG rdataset for our - * target type. Remember it. - */ - foundsig = header; - /* - * If we've got all we need, end the search. - */ - if (!maybe_zonecut && found != NULL) - break; - } else if (header->type == dns_rdatatype_nsec) { - /* - * Remember a NSEC rdataset even if we're - * not specifically looking for it, because - * we might need it later. - */ - nsecheader = header; - } else if (header->type == RBTDB_RDATATYPE_SIGNSEC) { - /* - * If we need the NSEC rdataset, we'll also - * need its signature. - */ - nsecsig = header; - } else if (cname_ok && - header->type == RBTDB_RDATATYPE_SIGCNAME) { - /* - * If we get a CNAME match, we'll also need - * its signature. - */ - cnamesig = header; - } - } - } - - if (empty_node) { - /* - * We have an exact match for the name, but there are no - * active rdatasets in the desired version. That means that - * this node doesn't exist in the desired version, and that - * we really have a partial match. - */ - if (!wild) { - lock = &search.rbtdb->node_locks[node->locknum].lock; - NODE_UNLOCK(lock, isc_rwlocktype_read); - goto partial_match; - } - } - - /* - * If we didn't find what we were looking for... - */ - if (found == NULL) { - if (search.zonecut != NULL) { - /* - * We were trying to find glue at a node beneath a - * zone cut, but didn't. - * - * Return the delegation. - */ - lock = &search.rbtdb->node_locks[node->locknum].lock; - NODE_UNLOCK(lock, isc_rwlocktype_read); - result = setup_delegation(&search, nodep, foundname, - rdataset, sigrdataset); - goto tree_exit; - } - /* - * The desired type doesn't exist. - */ - result = DNS_R_NXRRSET; - if (search.rbtdb->secure && - (nsecheader == NULL || nsecsig == NULL)) { - /* - * The zone is secure but there's no NSEC, - * or the NSEC has no signature! - */ - if (!wild) { - result = DNS_R_BADDB; - goto node_exit; - } - - lock = &search.rbtdb->node_locks[node->locknum].lock; - NODE_UNLOCK(lock, isc_rwlocktype_read); - result = find_closest_nsec(&search, nodep, foundname, - rdataset, sigrdataset, - search.rbtdb->secure); - if (result == ISC_R_SUCCESS) - result = DNS_R_EMPTYWILD; - goto tree_exit; - } - if ((search.options & DNS_DBFIND_FORCENSEC) != 0 && - nsecheader == NULL) - { - /* - * There's no NSEC record, and we were told - * to find one. - */ - result = DNS_R_BADDB; - goto node_exit; - } - if (nodep != NULL) { - new_reference(search.rbtdb, node); - *nodep = node; - } - if (search.rbtdb->secure || - (search.options & DNS_DBFIND_FORCENSEC) != 0) - { - bind_rdataset(search.rbtdb, node, nsecheader, - 0, rdataset); - if (nsecsig != NULL) - bind_rdataset(search.rbtdb, node, - nsecsig, 0, sigrdataset); - } - if (wild) - foundname->attributes |= DNS_NAMEATTR_WILDCARD; - goto node_exit; - } - - /* - * We found what we were looking for, or we found a CNAME. - */ - - if (type != found->type && - type != dns_rdatatype_any && - found->type == dns_rdatatype_cname) { - /* - * We weren't doing an ANY query and we found a CNAME instead - * of the type we were looking for, so we need to indicate - * that result to the caller. - */ - result = DNS_R_CNAME; - } else if (search.zonecut != NULL) { - /* - * If we're beneath a zone cut, we must indicate that the - * result is glue, unless we're actually at the zone cut - * and the type is NSEC or KEY. - */ - if (search.zonecut == node) { - /* - * It is not clear if KEY should still be - * allowed at the parent side of the zone - * cut or not. It is needed for RFC3007 - * validated updates. - */ - if (type == dns_rdatatype_nsec || - type == dns_rdatatype_key) - result = ISC_R_SUCCESS; - else if (type == dns_rdatatype_any) - result = DNS_R_ZONECUT; - else - result = DNS_R_GLUE; - } else - result = DNS_R_GLUE; - /* - * We might have found data that isn't glue, but was occluded - * by a dynamic update. If the caller cares about this, they - * will have told us to validate glue. - * - * XXX We should cache the glue validity state! - */ - if (result == DNS_R_GLUE && - (search.options & DNS_DBFIND_VALIDATEGLUE) != 0 && - !valid_glue(&search, foundname, type, node)) { - lock = &search.rbtdb->node_locks[node->locknum].lock; - NODE_UNLOCK(lock, isc_rwlocktype_read); - result = setup_delegation(&search, nodep, foundname, - rdataset, sigrdataset); - goto tree_exit; - } - } else { - /* - * An ordinary successful query! - */ - result = ISC_R_SUCCESS; - } - - if (nodep != NULL) { - if (!at_zonecut) - new_reference(search.rbtdb, node); - else - search.need_cleanup = ISC_FALSE; - *nodep = node; - } - - if (type != dns_rdatatype_any) { - bind_rdataset(search.rbtdb, node, found, 0, rdataset); - if (foundsig != NULL) - bind_rdataset(search.rbtdb, node, foundsig, 0, - sigrdataset); - } - - if (wild) - foundname->attributes |= DNS_NAMEATTR_WILDCARD; + /* + * We have found a node whose name is the desired name, or we + * have matched a wildcard. + */ + + if (search.zonecut != NULL) { + /* + * If we're beneath a zone cut, we don't want to look for + * CNAMEs because they're not legitimate zone glue. + */ + cname_ok = ISC_FALSE; + } else { + /* + * The node may be a zone cut itself. If it might be one, + * make sure we check for it later. + */ + if (node->find_callback && + (node != search.rbtdb->origin_node || + IS_STUB(search.rbtdb)) && + !dns_rdatatype_atparent(type)) + maybe_zonecut = ISC_TRUE; + } + + /* + * Certain DNSSEC types are not subject to CNAME matching + * (RFC4035, section 2.5 and RFC3007). + * + * We don't check for RRSIG, because we don't store RRSIG records + * directly. + */ + if (type == dns_rdatatype_key || type == dns_rdatatype_nsec) + cname_ok = ISC_FALSE; + + /* + * We now go looking for rdata... + */ + + NODE_LOCK(&(search.rbtdb->node_locks[node->locknum].lock), + isc_rwlocktype_read); + + found = NULL; + foundsig = NULL; + sigtype = RBTDB_RDATATYPE_VALUE(dns_rdatatype_rrsig, type); + nsecheader = NULL; + nsecsig = NULL; + cnamesig = NULL; + empty_node = ISC_TRUE; + for (header = node->data; header != NULL; header = header_next) { + header_next = header->next; + /* + * Look for an active, extant rdataset. + */ + do { + if (header->serial <= search.serial && + !IGNORE(header)) { + /* + * Is this a "this rdataset doesn't + * exist" record? + */ + if (NONEXISTENT(header)) + header = NULL; + break; + } else + header = header->down; + } while (header != NULL); + if (header != NULL) { + /* + * We now know that there is at least one active + * rdataset at this node. + */ + empty_node = ISC_FALSE; + + /* + * Do special zone cut handling, if requested. + */ + if (maybe_zonecut && + header->type == dns_rdatatype_ns) { + /* + * We increment the reference count on node to + * ensure that search->zonecut_rdataset will + * still be valid later. + */ + new_reference(search.rbtdb, node); + search.zonecut = node; + search.zonecut_rdataset = header; + search.zonecut_sigrdataset = NULL; + search.need_cleanup = ISC_TRUE; + maybe_zonecut = ISC_FALSE; + at_zonecut = ISC_TRUE; + /* + * It is not clear if KEY should still be + * allowed at the parent side of the zone + * cut or not. It is needed for RFC3007 + * validated updates. + */ + if ((search.options & DNS_DBFIND_GLUEOK) == 0 + && type != dns_rdatatype_nsec + && type != dns_rdatatype_key) { + /* + * Glue is not OK, but any answer we + * could return would be glue. Return + * the delegation. + */ + found = NULL; + break; + } + if (found != NULL && foundsig != NULL) + break; + } + + /* + * If we found a type we were looking for, + * remember it. + */ + if (header->type == type || + type == dns_rdatatype_any || + (header->type == dns_rdatatype_cname && + cname_ok)) { + /* + * We've found the answer! + */ + found = header; + if (header->type == dns_rdatatype_cname && + cname_ok) { + /* + * We may be finding a CNAME instead + * of the desired type. + * + * If we've already got the CNAME RRSIG, + * use it, otherwise change sigtype + * so that we find it. + */ + if (cnamesig != NULL) + foundsig = cnamesig; + else + sigtype = + RBTDB_RDATATYPE_SIGCNAME; + } + /* + * If we've got all we need, end the search. + */ + if (!maybe_zonecut && foundsig != NULL) + break; + } else if (header->type == sigtype) { + /* + * We've found the RRSIG rdataset for our + * target type. Remember it. + */ + foundsig = header; + /* + * If we've got all we need, end the search. + */ + if (!maybe_zonecut && found != NULL) + break; + } else if (header->type == dns_rdatatype_nsec) { + /* + * Remember a NSEC rdataset even if we're + * not specifically looking for it, because + * we might need it later. + */ + nsecheader = header; + } else if (header->type == RBTDB_RDATATYPE_SIGNSEC) { + /* + * If we need the NSEC rdataset, we'll also + * need its signature. + */ + nsecsig = header; + } else if (cname_ok && + header->type == RBTDB_RDATATYPE_SIGCNAME) { + /* + * If we get a CNAME match, we'll also need + * its signature. + */ + cnamesig = header; + } + } + } + + if (empty_node) { + /* + * We have an exact match for the name, but there are no + * active rdatasets in the desired version. That means that + * this node doesn't exist in the desired version, and that + * we really have a partial match. + */ + if (!wild) { + lock = &search.rbtdb->node_locks[node->locknum].lock; + NODE_UNLOCK(lock, isc_rwlocktype_read); + goto partial_match; + } + } + + /* + * If we didn't find what we were looking for... + */ + if (found == NULL) { + if (search.zonecut != NULL) { + /* + * We were trying to find glue at a node beneath a + * zone cut, but didn't. + * + * Return the delegation. + */ + lock = &search.rbtdb->node_locks[node->locknum].lock; + NODE_UNLOCK(lock, isc_rwlocktype_read); + result = setup_delegation(&search, nodep, foundname, + rdataset, sigrdataset); + goto tree_exit; + } + /* + * The desired type doesn't exist. + */ + result = DNS_R_NXRRSET; + if (search.rbtdb->secure && + (nsecheader == NULL || nsecsig == NULL)) { + /* + * The zone is secure but there's no NSEC, + * or the NSEC has no signature! + */ + if (!wild) { + result = DNS_R_BADDB; + goto node_exit; + } + + lock = &search.rbtdb->node_locks[node->locknum].lock; + NODE_UNLOCK(lock, isc_rwlocktype_read); + result = find_closest_nsec(&search, nodep, foundname, + rdataset, sigrdataset, + search.rbtdb->secure); + if (result == ISC_R_SUCCESS) + result = DNS_R_EMPTYWILD; + goto tree_exit; + } + if ((search.options & DNS_DBFIND_FORCENSEC) != 0 && + nsecheader == NULL) + { + /* + * There's no NSEC record, and we were told + * to find one. + */ + result = DNS_R_BADDB; + goto node_exit; + } + if (nodep != NULL) { + new_reference(search.rbtdb, node); + *nodep = node; + } + if (search.rbtdb->secure || + (search.options & DNS_DBFIND_FORCENSEC) != 0) + { + bind_rdataset(search.rbtdb, node, nsecheader, + 0, rdataset); + if (nsecsig != NULL) + bind_rdataset(search.rbtdb, node, + nsecsig, 0, sigrdataset); + } + if (wild) + foundname->attributes |= DNS_NAMEATTR_WILDCARD; + goto node_exit; + } + + /* + * We found what we were looking for, or we found a CNAME. + */ + + if (type != found->type && + type != dns_rdatatype_any && + found->type == dns_rdatatype_cname) { + /* + * We weren't doing an ANY query and we found a CNAME instead + * of the type we were looking for, so we need to indicate + * that result to the caller. + */ + result = DNS_R_CNAME; + } else if (search.zonecut != NULL) { + /* + * If we're beneath a zone cut, we must indicate that the + * result is glue, unless we're actually at the zone cut + * and the type is NSEC or KEY. + */ + if (search.zonecut == node) { + /* + * It is not clear if KEY should still be + * allowed at the parent side of the zone + * cut or not. It is needed for RFC3007 + * validated updates. + */ + if (type == dns_rdatatype_nsec || + type == dns_rdatatype_key) + result = ISC_R_SUCCESS; + else if (type == dns_rdatatype_any) + result = DNS_R_ZONECUT; + else + result = DNS_R_GLUE; + } else + result = DNS_R_GLUE; + /* + * We might have found data that isn't glue, but was occluded + * by a dynamic update. If the caller cares about this, they + * will have told us to validate glue. + * + * XXX We should cache the glue validity state! + */ + if (result == DNS_R_GLUE && + (search.options & DNS_DBFIND_VALIDATEGLUE) != 0 && + !valid_glue(&search, foundname, type, node)) { + lock = &search.rbtdb->node_locks[node->locknum].lock; + NODE_UNLOCK(lock, isc_rwlocktype_read); + result = setup_delegation(&search, nodep, foundname, + rdataset, sigrdataset); + goto tree_exit; + } + } else { + /* + * An ordinary successful query! + */ + result = ISC_R_SUCCESS; + } + + if (nodep != NULL) { + if (!at_zonecut) + new_reference(search.rbtdb, node); + else + search.need_cleanup = ISC_FALSE; + *nodep = node; + } + + if (type != dns_rdatatype_any) { + bind_rdataset(search.rbtdb, node, found, 0, rdataset); + if (foundsig != NULL) + bind_rdataset(search.rbtdb, node, foundsig, 0, + sigrdataset); + } + + if (wild) + foundname->attributes |= DNS_NAMEATTR_WILDCARD; node_exit: - NODE_UNLOCK(&(search.rbtdb->node_locks[node->locknum].lock), - isc_rwlocktype_read); + NODE_UNLOCK(&(search.rbtdb->node_locks[node->locknum].lock), + isc_rwlocktype_read); tree_exit: - RWUNLOCK(&search.rbtdb->tree_lock, isc_rwlocktype_read); + RWUNLOCK(&search.rbtdb->tree_lock, isc_rwlocktype_read); - /* - * If we found a zonecut but aren't going to use it, we have to - * let go of it. - */ - if (search.need_cleanup) { - node = search.zonecut; - lock = &(search.rbtdb->node_locks[node->locknum].lock); + /* + * If we found a zonecut but aren't going to use it, we have to + * let go of it. + */ + if (search.need_cleanup) { + node = search.zonecut; + lock = &(search.rbtdb->node_locks[node->locknum].lock); - NODE_LOCK(lock, isc_rwlocktype_read); - decrement_reference(search.rbtdb, node, 0, - isc_rwlocktype_read, isc_rwlocktype_none); - NODE_UNLOCK(lock, isc_rwlocktype_read); - } + NODE_LOCK(lock, isc_rwlocktype_read); + decrement_reference(search.rbtdb, node, 0, + isc_rwlocktype_read, isc_rwlocktype_none); + NODE_UNLOCK(lock, isc_rwlocktype_read); + } - if (close_version) - closeversion(db, &version, ISC_FALSE); + if (close_version) + closeversion(db, &version, ISC_FALSE); - dns_rbtnodechain_reset(&search.chain); + dns_rbtnodechain_reset(&search.chain); - return (result); + return (result); } static isc_result_t zone_findzonecut(dns_db_t *db, dns_name_t *name, unsigned int options, - isc_stdtime_t now, dns_dbnode_t **nodep, - dns_name_t *foundname, - dns_rdataset_t *rdataset, dns_rdataset_t *sigrdataset) + isc_stdtime_t now, dns_dbnode_t **nodep, + dns_name_t *foundname, + dns_rdataset_t *rdataset, dns_rdataset_t *sigrdataset) { - UNUSED(db); - UNUSED(name); - UNUSED(options); - UNUSED(now); - UNUSED(nodep); - UNUSED(foundname); - UNUSED(rdataset); - UNUSED(sigrdataset); - - FATAL_ERROR(__FILE__, __LINE__, "zone_findzonecut() called!"); - - return (ISC_R_NOTIMPLEMENTED); + UNUSED(db); + UNUSED(name); + UNUSED(options); + UNUSED(now); + UNUSED(nodep); + UNUSED(foundname); + UNUSED(rdataset); + UNUSED(sigrdataset); + + FATAL_ERROR(__FILE__, __LINE__, "zone_findzonecut() called!"); + + return (ISC_R_NOTIMPLEMENTED); } static isc_result_t cache_zonecut_callback(dns_rbtnode_t *node, dns_name_t *name, void *arg) { - rbtdb_search_t *search = arg; - rdatasetheader_t *header, *header_prev, *header_next; - rdatasetheader_t *dname_header, *sigdname_header; - isc_result_t result; - nodelock_t *lock; - isc_rwlocktype_t locktype; - - /* XXX comment */ - - REQUIRE(search->zonecut == NULL); - - /* - * Keep compiler silent. - */ - UNUSED(name); - - lock = &(search->rbtdb->node_locks[node->locknum].lock); - locktype = isc_rwlocktype_read; - NODE_LOCK(lock, locktype); - - /* - * Look for a DNAME or RRSIG DNAME rdataset. - */ - dname_header = NULL; - sigdname_header = NULL; - header_prev = NULL; - for (header = node->data; header != NULL; header = header_next) { - header_next = header->next; - if (header->rdh_ttl <= search->now) { - /* - * This rdataset is stale. If no one else is - * using the node, we can clean it up right - * now, otherwise we mark it as stale, and - * the node as dirty, so it will get cleaned - * up later. - */ - if ((header->rdh_ttl <= search->now - RBTDB_VIRTUAL) && - (locktype == isc_rwlocktype_write || - NODE_TRYUPGRADE(lock) == ISC_R_SUCCESS)) { - /* - * We update the node's status only when we - * can get write access; otherwise, we leave - * others to this work. Periodical cleaning - * will eventually take the job as the last - * resort. - * We won't downgrade the lock, since other - * rdatasets are probably stale, too. - */ - locktype = isc_rwlocktype_write; - - if (dns_rbtnode_refcurrent(node) == 0) { - isc_mem_t *mctx; - - /* - * header->down can be non-NULL if the - * refcount has just decremented to 0 - * but decrement_reference() has not - * performed clean_cache_node(), in - * which case we need to purge the - * stale headers first. - */ - mctx = search->rbtdb->common.mctx; - clean_stale_headers(search->rbtdb, - mctx, - header); - if (header_prev != NULL) - header_prev->next = - header->next; - else - node->data = header->next; - free_rdataset(search->rbtdb, mctx, - header); - } else { - header->attributes |= - RDATASET_ATTR_STALE; - node->dirty = 1; - header_prev = header; - } - } else - header_prev = header; - } else if (header->type == dns_rdatatype_dname && - EXISTS(header)) { - dname_header = header; - header_prev = header; - } else if (header->type == RBTDB_RDATATYPE_SIGDNAME && - EXISTS(header)) { - sigdname_header = header; - header_prev = header; - } else - header_prev = header; - } - - if (dname_header != NULL && - (dname_header->trust != dns_trust_pending || - (search->options & DNS_DBFIND_PENDINGOK) != 0)) { - /* - * We increment the reference count on node to ensure that - * search->zonecut_rdataset will still be valid later. - */ - new_reference(search->rbtdb, node); - search->zonecut = node; - search->zonecut_rdataset = dname_header; - search->zonecut_sigrdataset = sigdname_header; - search->need_cleanup = ISC_TRUE; - result = DNS_R_PARTIALMATCH; - } else - result = DNS_R_CONTINUE; - - NODE_UNLOCK(lock, locktype); - - return (result); + rbtdb_search_t *search = arg; + rdatasetheader_t *header, *header_prev, *header_next; + rdatasetheader_t *dname_header, *sigdname_header; + isc_result_t result; + nodelock_t *lock; + isc_rwlocktype_t locktype; + + /* XXX comment */ + + REQUIRE(search->zonecut == NULL); + + /* + * Keep compiler silent. + */ + UNUSED(name); + + lock = &(search->rbtdb->node_locks[node->locknum].lock); + locktype = isc_rwlocktype_read; + NODE_LOCK(lock, locktype); + + /* + * Look for a DNAME or RRSIG DNAME rdataset. + */ + dname_header = NULL; + sigdname_header = NULL; + header_prev = NULL; + for (header = node->data; header != NULL; header = header_next) { + header_next = header->next; + if (header->rdh_ttl <= search->now) { + /* + * This rdataset is stale. If no one else is + * using the node, we can clean it up right + * now, otherwise we mark it as stale, and + * the node as dirty, so it will get cleaned + * up later. + */ + if ((header->rdh_ttl <= search->now - RBTDB_VIRTUAL) && + (locktype == isc_rwlocktype_write || + NODE_TRYUPGRADE(lock) == ISC_R_SUCCESS)) { + /* + * We update the node's status only when we + * can get write access; otherwise, we leave + * others to this work. Periodical cleaning + * will eventually take the job as the last + * resort. + * We won't downgrade the lock, since other + * rdatasets are probably stale, too. + */ + locktype = isc_rwlocktype_write; + + if (dns_rbtnode_refcurrent(node) == 0) { + isc_mem_t *mctx; + + /* + * header->down can be non-NULL if the + * refcount has just decremented to 0 + * but decrement_reference() has not + * performed clean_cache_node(), in + * which case we need to purge the + * stale headers first. + */ + mctx = search->rbtdb->common.mctx; + clean_stale_headers(search->rbtdb, + mctx, + header); + if (header_prev != NULL) + header_prev->next = + header->next; + else + node->data = header->next; + free_rdataset(search->rbtdb, mctx, + header); + } else { + header->attributes |= + RDATASET_ATTR_STALE; + node->dirty = 1; + header_prev = header; + } + } else + header_prev = header; + } else if (header->type == dns_rdatatype_dname && + EXISTS(header)) { + dname_header = header; + header_prev = header; + } else if (header->type == RBTDB_RDATATYPE_SIGDNAME && + EXISTS(header)) { + sigdname_header = header; + header_prev = header; + } else + header_prev = header; + } + + if (dname_header != NULL && + (dname_header->trust != dns_trust_pending || + (search->options & DNS_DBFIND_PENDINGOK) != 0)) { + /* + * We increment the reference count on node to ensure that + * search->zonecut_rdataset will still be valid later. + */ + new_reference(search->rbtdb, node); + search->zonecut = node; + search->zonecut_rdataset = dname_header; + search->zonecut_sigrdataset = sigdname_header; + search->need_cleanup = ISC_TRUE; + result = DNS_R_PARTIALMATCH; + } else + result = DNS_R_CONTINUE; + + NODE_UNLOCK(lock, locktype); + + return (result); } static inline isc_result_t find_deepest_zonecut(rbtdb_search_t *search, dns_rbtnode_t *node, - dns_dbnode_t **nodep, dns_name_t *foundname, - dns_rdataset_t *rdataset, dns_rdataset_t *sigrdataset) + dns_dbnode_t **nodep, dns_name_t *foundname, + dns_rdataset_t *rdataset, dns_rdataset_t *sigrdataset) { - unsigned int i; - dns_rbtnode_t *level_node; - rdatasetheader_t *header, *header_prev, *header_next; - rdatasetheader_t *found, *foundsig; - isc_result_t result = ISC_R_NOTFOUND; - dns_name_t name; - dns_rbtdb_t *rbtdb; - isc_boolean_t done; - nodelock_t *lock; - isc_rwlocktype_t locktype; - - /* - * Caller must be holding the tree lock. - */ - - rbtdb = search->rbtdb; - i = search->chain.level_matches; - done = ISC_FALSE; - do { - locktype = isc_rwlocktype_read; - lock = &rbtdb->node_locks[node->locknum].lock; - NODE_LOCK(lock, locktype); - - /* - * Look for NS and RRSIG NS rdatasets. - */ - found = NULL; - foundsig = NULL; - header_prev = NULL; - for (header = node->data; - header != NULL; - header = header_next) { - header_next = header->next; - if (header->rdh_ttl <= search->now) { - /* - * This rdataset is stale. If no one else is - * using the node, we can clean it up right - * now, otherwise we mark it as stale, and - * the node as dirty, so it will get cleaned - * up later. - */ - if ((header->rdh_ttl <= search->now - - RBTDB_VIRTUAL) && - (locktype == isc_rwlocktype_write || - NODE_TRYUPGRADE(lock) == ISC_R_SUCCESS)) { - /* - * We update the node's status only - * when we can get write access. - */ - locktype = isc_rwlocktype_write; - - if (dns_rbtnode_refcurrent(node) - == 0) { - isc_mem_t *m; - - m = search->rbtdb->common.mctx; - clean_stale_headers( - search->rbtdb, - m, header); - if (header_prev != NULL) - header_prev->next = - header->next; - else - node->data = - header->next; - free_rdataset(rbtdb, m, - header); - } else { - header->attributes |= - RDATASET_ATTR_STALE; - node->dirty = 1; - header_prev = header; - } - } else - header_prev = header; - } else if (EXISTS(header)) { - /* - * We've found an extant rdataset. See if - * we're interested in it. - */ - if (header->type == dns_rdatatype_ns) { - found = header; - if (foundsig != NULL) - break; - } else if (header->type == - RBTDB_RDATATYPE_SIGNS) { - foundsig = header; - if (found != NULL) - break; - } - header_prev = header; - } else - header_prev = header; - } - - if (found != NULL) { - /* - * If we have to set foundname, we do it before - * anything else. If we were to set foundname after - * we had set nodep or bound the rdataset, then we'd - * have to undo that work if dns_name_concatenate() - * failed. By setting foundname first, there's - * nothing to undo if we have trouble. - */ - if (foundname != NULL) { - dns_name_init(&name, NULL); - dns_rbt_namefromnode(node, &name); - result = dns_name_copy(&name, foundname, NULL); - while (result == ISC_R_SUCCESS && i > 0) { - i--; - level_node = search->chain.levels[i]; - dns_name_init(&name, NULL); - dns_rbt_namefromnode(level_node, - &name); - result = - dns_name_concatenate(foundname, - &name, - foundname, - NULL); - } - if (result != ISC_R_SUCCESS) { - *nodep = NULL; - goto node_exit; - } - } - result = DNS_R_DELEGATION; - if (nodep != NULL) { - new_reference(search->rbtdb, node); - *nodep = node; - } - bind_rdataset(search->rbtdb, node, found, search->now, - rdataset); - if (foundsig != NULL) - bind_rdataset(search->rbtdb, node, foundsig, - search->now, sigrdataset); - if (need_headerupdate(found, search->now) || - (foundsig != NULL && - need_headerupdate(foundsig, search->now))) { - if (locktype != isc_rwlocktype_write) { - NODE_UNLOCK(lock, locktype); - NODE_LOCK(lock, isc_rwlocktype_write); - locktype = isc_rwlocktype_write; - } - if (need_headerupdate(found, search->now)) - update_header(search->rbtdb, found, - search->now); - if (foundsig != NULL && - need_headerupdate(foundsig, search->now)) { - update_header(search->rbtdb, foundsig, - search->now); - } - } - } - - node_exit: - NODE_UNLOCK(lock, locktype); - - if (found == NULL && i > 0) { - i--; - node = search->chain.levels[i]; - } else - done = ISC_TRUE; - - } while (!done); - - return (result); + unsigned int i; + dns_rbtnode_t *level_node; + rdatasetheader_t *header, *header_prev, *header_next; + rdatasetheader_t *found, *foundsig; + isc_result_t result = ISC_R_NOTFOUND; + dns_name_t name; + dns_rbtdb_t *rbtdb; + isc_boolean_t done; + nodelock_t *lock; + isc_rwlocktype_t locktype; + + /* + * Caller must be holding the tree lock. + */ + + rbtdb = search->rbtdb; + i = search->chain.level_matches; + done = ISC_FALSE; + do { + locktype = isc_rwlocktype_read; + lock = &rbtdb->node_locks[node->locknum].lock; + NODE_LOCK(lock, locktype); + + /* + * Look for NS and RRSIG NS rdatasets. + */ + found = NULL; + foundsig = NULL; + header_prev = NULL; + for (header = node->data; + header != NULL; + header = header_next) { + header_next = header->next; + if (header->rdh_ttl <= search->now) { + /* + * This rdataset is stale. If no one else is + * using the node, we can clean it up right + * now, otherwise we mark it as stale, and + * the node as dirty, so it will get cleaned + * up later. + */ + if ((header->rdh_ttl <= search->now - + RBTDB_VIRTUAL) && + (locktype == isc_rwlocktype_write || + NODE_TRYUPGRADE(lock) == ISC_R_SUCCESS)) { + /* + * We update the node's status only + * when we can get write access. + */ + locktype = isc_rwlocktype_write; + + if (dns_rbtnode_refcurrent(node) + == 0) { + isc_mem_t *m; + + m = search->rbtdb->common.mctx; + clean_stale_headers( + search->rbtdb, + m, header); + if (header_prev != NULL) + header_prev->next = + header->next; + else + node->data = + header->next; + free_rdataset(rbtdb, m, + header); + } else { + header->attributes |= + RDATASET_ATTR_STALE; + node->dirty = 1; + header_prev = header; + } + } else + header_prev = header; + } else if (EXISTS(header)) { + /* + * We've found an extant rdataset. See if + * we're interested in it. + */ + if (header->type == dns_rdatatype_ns) { + found = header; + if (foundsig != NULL) + break; + } else if (header->type == + RBTDB_RDATATYPE_SIGNS) { + foundsig = header; + if (found != NULL) + break; + } + header_prev = header; + } else + header_prev = header; + } + + if (found != NULL) { + /* + * If we have to set foundname, we do it before + * anything else. If we were to set foundname after + * we had set nodep or bound the rdataset, then we'd + * have to undo that work if dns_name_concatenate() + * failed. By setting foundname first, there's + * nothing to undo if we have trouble. + */ + if (foundname != NULL) { + dns_name_init(&name, NULL); + dns_rbt_namefromnode(node, &name); + result = dns_name_copy(&name, foundname, NULL); + while (result == ISC_R_SUCCESS && i > 0) { + i--; + level_node = search->chain.levels[i]; + dns_name_init(&name, NULL); + dns_rbt_namefromnode(level_node, + &name); + result = + dns_name_concatenate(foundname, + &name, + foundname, + NULL); + } + if (result != ISC_R_SUCCESS) { + *nodep = NULL; + goto node_exit; + } + } + result = DNS_R_DELEGATION; + if (nodep != NULL) { + new_reference(search->rbtdb, node); + *nodep = node; + } + bind_rdataset(search->rbtdb, node, found, search->now, + rdataset); + if (foundsig != NULL) + bind_rdataset(search->rbtdb, node, foundsig, + search->now, sigrdataset); + if (need_headerupdate(found, search->now) || + (foundsig != NULL && + need_headerupdate(foundsig, search->now))) { + if (locktype != isc_rwlocktype_write) { + NODE_UNLOCK(lock, locktype); + NODE_LOCK(lock, isc_rwlocktype_write); + locktype = isc_rwlocktype_write; + } + if (need_headerupdate(found, search->now)) + update_header(search->rbtdb, found, + search->now); + if (foundsig != NULL && + need_headerupdate(foundsig, search->now)) { + update_header(search->rbtdb, foundsig, + search->now); + } + } + } + + node_exit: + NODE_UNLOCK(lock, locktype); + + if (found == NULL && i > 0) { + i--; + node = search->chain.levels[i]; + } else + done = ISC_TRUE; + + } while (!done); + + return (result); } static isc_result_t find_coveringnsec(rbtdb_search_t *search, dns_dbnode_t **nodep, - isc_stdtime_t now, dns_name_t *foundname, - dns_rdataset_t *rdataset, dns_rdataset_t *sigrdataset) + isc_stdtime_t now, dns_name_t *foundname, + dns_rdataset_t *rdataset, dns_rdataset_t *sigrdataset) { - dns_rbtnode_t *node; - rdatasetheader_t *header, *header_next, *header_prev; - rdatasetheader_t *found, *foundsig; - isc_boolean_t empty_node; - isc_result_t result; - dns_fixedname_t fname, forigin; - dns_name_t *name, *origin; - rbtdb_rdatatype_t matchtype, sigmatchtype; - nodelock_t *lock; - isc_rwlocktype_t locktype; - - matchtype = RBTDB_RDATATYPE_VALUE(dns_rdatatype_nsec, 0); - sigmatchtype = RBTDB_RDATATYPE_VALUE(dns_rdatatype_rrsig, - dns_rdatatype_nsec); - - do { - node = NULL; - dns_fixedname_init(&fname); - name = dns_fixedname_name(&fname); - dns_fixedname_init(&forigin); - origin = dns_fixedname_name(&forigin); - result = dns_rbtnodechain_current(&search->chain, name, - origin, &node); - if (result != ISC_R_SUCCESS) - return (result); - locktype = isc_rwlocktype_read; - lock = &(search->rbtdb->node_locks[node->locknum].lock); - NODE_LOCK(lock, locktype); - found = NULL; - foundsig = NULL; - empty_node = ISC_TRUE; - header_prev = NULL; - for (header = node->data; - header != NULL; - header = header_next) { - header_next = header->next; - if (header->rdh_ttl <= now) { - /* - * This rdataset is stale. If no one else is - * using the node, we can clean it up right - * now, otherwise we mark it as stale, and the - * node as dirty, so it will get cleaned up - * later. - */ - if ((header->rdh_ttl <= now - RBTDB_VIRTUAL) && - (locktype == isc_rwlocktype_write || - NODE_TRYUPGRADE(lock) == ISC_R_SUCCESS)) { - /* - * We update the node's status only - * when we can get write access. - */ - locktype = isc_rwlocktype_write; - - if (dns_rbtnode_refcurrent(node) - == 0) { - isc_mem_t *m; - - m = search->rbtdb->common.mctx; - clean_stale_headers( - search->rbtdb, - m, header); - if (header_prev != NULL) - header_prev->next = - header->next; - else - node->data = header->next; - free_rdataset(search->rbtdb, m, - header); - } else { - header->attributes |= - RDATASET_ATTR_STALE; - node->dirty = 1; - header_prev = header; - } - } else - header_prev = header; - continue; - } - if (NONEXISTENT(header) || - RBTDB_RDATATYPE_BASE(header->type) == 0) { - header_prev = header; - continue; - } - empty_node = ISC_FALSE; - if (header->type == matchtype) - found = header; - else if (header->type == sigmatchtype) - foundsig = header; - header_prev = header; - } - if (found != NULL) { - result = dns_name_concatenate(name, origin, - foundname, NULL); - if (result != ISC_R_SUCCESS) - goto unlock_node; - bind_rdataset(search->rbtdb, node, found, - now, rdataset); - if (foundsig != NULL) - bind_rdataset(search->rbtdb, node, foundsig, - now, sigrdataset); - new_reference(search->rbtdb, node); - *nodep = node; - result = DNS_R_COVERINGNSEC; - } else if (!empty_node) { - result = ISC_R_NOTFOUND; - } else - result = dns_rbtnodechain_prev(&search->chain, NULL, - NULL); + dns_rbtnode_t *node; + rdatasetheader_t *header, *header_next, *header_prev; + rdatasetheader_t *found, *foundsig; + isc_boolean_t empty_node; + isc_result_t result; + dns_fixedname_t fname, forigin; + dns_name_t *name, *origin; + rbtdb_rdatatype_t matchtype, sigmatchtype; + nodelock_t *lock; + isc_rwlocktype_t locktype; + + matchtype = RBTDB_RDATATYPE_VALUE(dns_rdatatype_nsec, 0); + sigmatchtype = RBTDB_RDATATYPE_VALUE(dns_rdatatype_rrsig, + dns_rdatatype_nsec); + + do { + node = NULL; + dns_fixedname_init(&fname); + name = dns_fixedname_name(&fname); + dns_fixedname_init(&forigin); + origin = dns_fixedname_name(&forigin); + result = dns_rbtnodechain_current(&search->chain, name, + origin, &node); + if (result != ISC_R_SUCCESS) + return (result); + locktype = isc_rwlocktype_read; + lock = &(search->rbtdb->node_locks[node->locknum].lock); + NODE_LOCK(lock, locktype); + found = NULL; + foundsig = NULL; + empty_node = ISC_TRUE; + header_prev = NULL; + for (header = node->data; + header != NULL; + header = header_next) { + header_next = header->next; + if (header->rdh_ttl <= now) { + /* + * This rdataset is stale. If no one else is + * using the node, we can clean it up right + * now, otherwise we mark it as stale, and the + * node as dirty, so it will get cleaned up + * later. + */ + if ((header->rdh_ttl <= now - RBTDB_VIRTUAL) && + (locktype == isc_rwlocktype_write || + NODE_TRYUPGRADE(lock) == ISC_R_SUCCESS)) { + /* + * We update the node's status only + * when we can get write access. + */ + locktype = isc_rwlocktype_write; + + if (dns_rbtnode_refcurrent(node) + == 0) { + isc_mem_t *m; + + m = search->rbtdb->common.mctx; + clean_stale_headers( + search->rbtdb, + m, header); + if (header_prev != NULL) + header_prev->next = + header->next; + else + node->data = header->next; + free_rdataset(search->rbtdb, m, + header); + } else { + header->attributes |= + RDATASET_ATTR_STALE; + node->dirty = 1; + header_prev = header; + } + } else + header_prev = header; + continue; + } + if (NONEXISTENT(header) || + RBTDB_RDATATYPE_BASE(header->type) == 0) { + header_prev = header; + continue; + } + empty_node = ISC_FALSE; + if (header->type == matchtype) + found = header; + else if (header->type == sigmatchtype) + foundsig = header; + header_prev = header; + } + if (found != NULL) { + result = dns_name_concatenate(name, origin, + foundname, NULL); + if (result != ISC_R_SUCCESS) + goto unlock_node; + bind_rdataset(search->rbtdb, node, found, + now, rdataset); + if (foundsig != NULL) + bind_rdataset(search->rbtdb, node, foundsig, + now, sigrdataset); + new_reference(search->rbtdb, node); + *nodep = node; + result = DNS_R_COVERINGNSEC; + } else if (!empty_node) { + result = ISC_R_NOTFOUND; + } else + result = dns_rbtnodechain_prev(&search->chain, NULL, + NULL); unlock_node: - NODE_UNLOCK(lock, locktype); - } while (empty_node && result == ISC_R_SUCCESS); - return (result); + NODE_UNLOCK(lock, locktype); + } while (empty_node && result == ISC_R_SUCCESS); + return (result); } static isc_result_t cache_find(dns_db_t *db, dns_name_t *name, dns_dbversion_t *version, - dns_rdatatype_t type, unsigned int options, isc_stdtime_t now, - dns_dbnode_t **nodep, dns_name_t *foundname, - dns_rdataset_t *rdataset, dns_rdataset_t *sigrdataset) + dns_rdatatype_t type, unsigned int options, isc_stdtime_t now, + dns_dbnode_t **nodep, dns_name_t *foundname, + dns_rdataset_t *rdataset, dns_rdataset_t *sigrdataset) { - dns_rbtnode_t *node = NULL; - isc_result_t result; - rbtdb_search_t search; - isc_boolean_t cname_ok = ISC_TRUE; - isc_boolean_t empty_node; - nodelock_t *lock; - isc_rwlocktype_t locktype; - rdatasetheader_t *header, *header_prev, *header_next; - rdatasetheader_t *found, *nsheader; - rdatasetheader_t *foundsig, *nssig, *cnamesig; - rdatasetheader_t *update, *updatesig; - rbtdb_rdatatype_t sigtype, negtype; - - UNUSED(version); - - search.rbtdb = (dns_rbtdb_t *)db; - - REQUIRE(VALID_RBTDB(search.rbtdb)); - REQUIRE(version == NULL); - - if (now == 0) - isc_stdtime_get(&now); - - search.rbtversion = NULL; - search.serial = 1; - search.options = options; - search.copy_name = ISC_FALSE; - search.need_cleanup = ISC_FALSE; - search.wild = ISC_FALSE; - search.zonecut = NULL; - dns_fixedname_init(&search.zonecut_name); - dns_rbtnodechain_init(&search.chain, search.rbtdb->common.mctx); - search.now = now; - update = NULL; - updatesig = NULL; - - RWLOCK(&search.rbtdb->tree_lock, isc_rwlocktype_read); - - /* - * Search down from the root of the tree. If, while going down, we - * encounter a callback node, cache_zonecut_callback() will search the - * rdatasets at the zone cut for a DNAME rdataset. - */ - result = dns_rbt_findnode(search.rbtdb->tree, name, foundname, &node, - &search.chain, DNS_RBTFIND_EMPTYDATA, - cache_zonecut_callback, &search); - - if (result == DNS_R_PARTIALMATCH) { - if ((search.options & DNS_DBFIND_COVERINGNSEC) != 0) { - result = find_coveringnsec(&search, nodep, now, - foundname, rdataset, - sigrdataset); - if (result == DNS_R_COVERINGNSEC) - goto tree_exit; - } - if (search.zonecut != NULL) { - result = setup_delegation(&search, nodep, foundname, - rdataset, sigrdataset); - goto tree_exit; - } else { - find_ns: - result = find_deepest_zonecut(&search, node, nodep, - foundname, rdataset, - sigrdataset); - goto tree_exit; - } - } else if (result != ISC_R_SUCCESS) - goto tree_exit; - - /* - * Certain DNSSEC types are not subject to CNAME matching - * (RFC4035, section 2.5 and RFC3007). - * - * We don't check for RRSIG, because we don't store RRSIG records - * directly. - */ - if (type == dns_rdatatype_key || type == dns_rdatatype_nsec) - cname_ok = ISC_FALSE; - - /* - * We now go looking for rdata... - */ - - lock = &(search.rbtdb->node_locks[node->locknum].lock); - locktype = isc_rwlocktype_read; - NODE_LOCK(lock, locktype); - - found = NULL; - foundsig = NULL; - sigtype = RBTDB_RDATATYPE_VALUE(dns_rdatatype_rrsig, type); - negtype = RBTDB_RDATATYPE_VALUE(0, type); - nsheader = NULL; - nssig = NULL; - cnamesig = NULL; - empty_node = ISC_TRUE; - header_prev = NULL; - for (header = node->data; header != NULL; header = header_next) { - header_next = header->next; - if (header->rdh_ttl <= now) { - /* - * This rdataset is stale. If no one else is using the - * node, we can clean it up right now, otherwise we - * mark it as stale, and the node as dirty, so it will - * get cleaned up later. - */ - if ((header->rdh_ttl <= now - RBTDB_VIRTUAL) && - (locktype == isc_rwlocktype_write || - NODE_TRYUPGRADE(lock) == ISC_R_SUCCESS)) { - /* - * We update the node's status only when we - * can get write access. - */ - locktype = isc_rwlocktype_write; - - if (dns_rbtnode_refcurrent(node) == 0) { - isc_mem_t *mctx; - - mctx = search.rbtdb->common.mctx; - clean_stale_headers(search.rbtdb, mctx, - header); - if (header_prev != NULL) - header_prev->next = - header->next; - else - node->data = header->next; - free_rdataset(search.rbtdb, mctx, - header); - } else { - header->attributes |= - RDATASET_ATTR_STALE; - node->dirty = 1; - header_prev = header; - } - } else - header_prev = header; - } else if (EXISTS(header)) { - /* - * We now know that there is at least one active - * non-stale rdataset at this node. - */ - empty_node = ISC_FALSE; - - /* - * If we found a type we were looking for, remember - * it. - */ - if (header->type == type || - (type == dns_rdatatype_any && - RBTDB_RDATATYPE_BASE(header->type) != 0) || - (cname_ok && header->type == - dns_rdatatype_cname)) { - /* - * We've found the answer. - */ - found = header; - if (header->type == dns_rdatatype_cname && - cname_ok && - cnamesig != NULL) { - /* - * If we've already got the CNAME RRSIG, - * use it, otherwise change sigtype - * so that we find it. - */ - if (cnamesig != NULL) - foundsig = cnamesig; - else - sigtype = - RBTDB_RDATATYPE_SIGCNAME; - foundsig = cnamesig; - } - } else if (header->type == sigtype) { - /* - * We've found the RRSIG rdataset for our - * target type. Remember it. - */ - foundsig = header; - } else if (header->type == RBTDB_RDATATYPE_NCACHEANY || - header->type == negtype) { - /* - * We've found a negative cache entry. - */ - found = header; - } else if (header->type == dns_rdatatype_ns) { - /* - * Remember a NS rdataset even if we're - * not specifically looking for it, because - * we might need it later. - */ - nsheader = header; - } else if (header->type == RBTDB_RDATATYPE_SIGNS) { - /* - * If we need the NS rdataset, we'll also - * need its signature. - */ - nssig = header; - } else if (cname_ok && - header->type == RBTDB_RDATATYPE_SIGCNAME) { - /* - * If we get a CNAME match, we'll also need - * its signature. - */ - cnamesig = header; - } - header_prev = header; - } else - header_prev = header; - } - - if (empty_node) { - /* - * We have an exact match for the name, but there are no - * extant rdatasets. That means that this node doesn't - * meaningfully exist, and that we really have a partial match. - */ - NODE_UNLOCK(lock, locktype); - goto find_ns; - } - - /* - * If we didn't find what we were looking for... - */ - if (found == NULL || - (found->trust == dns_trust_glue && - ((options & DNS_DBFIND_GLUEOK) == 0)) || - (found->trust == dns_trust_pending && - ((options & DNS_DBFIND_PENDINGOK) == 0))) { - /* - * If there is an NS rdataset at this node, then this is the - * deepest zone cut. - */ - if (nsheader != NULL) { - if (nodep != NULL) { - new_reference(search.rbtdb, node); - *nodep = node; - } - bind_rdataset(search.rbtdb, node, nsheader, search.now, - rdataset); - if (need_headerupdate(nsheader, search.now)) - update = nsheader; - if (nssig != NULL) { - bind_rdataset(search.rbtdb, node, nssig, - search.now, sigrdataset); - if (need_headerupdate(nssig, search.now)) - updatesig = nssig; - } - result = DNS_R_DELEGATION; - goto node_exit; - } - - /* - * Go find the deepest zone cut. - */ - NODE_UNLOCK(lock, locktype); - goto find_ns; - } - - /* - * We found what we were looking for, or we found a CNAME. - */ - - if (nodep != NULL) { - new_reference(search.rbtdb, node); - *nodep = node; - } - - if (RBTDB_RDATATYPE_BASE(found->type) == 0) { - /* - * We found a negative cache entry. - */ - if (NXDOMAIN(found)) - result = DNS_R_NCACHENXDOMAIN; - else - result = DNS_R_NCACHENXRRSET; - } else if (type != found->type && - type != dns_rdatatype_any && - found->type == dns_rdatatype_cname) { - /* - * We weren't doing an ANY query and we found a CNAME instead - * of the type we were looking for, so we need to indicate - * that result to the caller. - */ - result = DNS_R_CNAME; - } else { - /* - * An ordinary successful query! - */ - result = ISC_R_SUCCESS; - } - - if (type != dns_rdatatype_any || result == DNS_R_NCACHENXDOMAIN || - result == DNS_R_NCACHENXRRSET) { - bind_rdataset(search.rbtdb, node, found, search.now, - rdataset); - if (need_headerupdate(found, search.now)) - update = found; - if (foundsig != NULL) { - bind_rdataset(search.rbtdb, node, foundsig, search.now, - sigrdataset); - if (need_headerupdate(foundsig, search.now)) - updatesig = foundsig; - } - } + dns_rbtnode_t *node = NULL; + isc_result_t result; + rbtdb_search_t search; + isc_boolean_t cname_ok = ISC_TRUE; + isc_boolean_t empty_node; + nodelock_t *lock; + isc_rwlocktype_t locktype; + rdatasetheader_t *header, *header_prev, *header_next; + rdatasetheader_t *found, *nsheader; + rdatasetheader_t *foundsig, *nssig, *cnamesig; + rdatasetheader_t *update, *updatesig; + rbtdb_rdatatype_t sigtype, negtype; + + UNUSED(version); + + search.rbtdb = (dns_rbtdb_t *)db; + + REQUIRE(VALID_RBTDB(search.rbtdb)); + REQUIRE(version == NULL); + + if (now == 0) + isc_stdtime_get(&now); + + search.rbtversion = NULL; + search.serial = 1; + search.options = options; + search.copy_name = ISC_FALSE; + search.need_cleanup = ISC_FALSE; + search.wild = ISC_FALSE; + search.zonecut = NULL; + dns_fixedname_init(&search.zonecut_name); + dns_rbtnodechain_init(&search.chain, search.rbtdb->common.mctx); + search.now = now; + update = NULL; + updatesig = NULL; + + RWLOCK(&search.rbtdb->tree_lock, isc_rwlocktype_read); + + /* + * Search down from the root of the tree. If, while going down, we + * encounter a callback node, cache_zonecut_callback() will search the + * rdatasets at the zone cut for a DNAME rdataset. + */ + result = dns_rbt_findnode(search.rbtdb->tree, name, foundname, &node, + &search.chain, DNS_RBTFIND_EMPTYDATA, + cache_zonecut_callback, &search); + + if (result == DNS_R_PARTIALMATCH) { + if ((search.options & DNS_DBFIND_COVERINGNSEC) != 0) { + result = find_coveringnsec(&search, nodep, now, + foundname, rdataset, + sigrdataset); + if (result == DNS_R_COVERINGNSEC) + goto tree_exit; + } + if (search.zonecut != NULL) { + result = setup_delegation(&search, nodep, foundname, + rdataset, sigrdataset); + goto tree_exit; + } else { + find_ns: + result = find_deepest_zonecut(&search, node, nodep, + foundname, rdataset, + sigrdataset); + goto tree_exit; + } + } else if (result != ISC_R_SUCCESS) + goto tree_exit; + + /* + * Certain DNSSEC types are not subject to CNAME matching + * (RFC4035, section 2.5 and RFC3007). + * + * We don't check for RRSIG, because we don't store RRSIG records + * directly. + */ + if (type == dns_rdatatype_key || type == dns_rdatatype_nsec) + cname_ok = ISC_FALSE; + + /* + * We now go looking for rdata... + */ + + lock = &(search.rbtdb->node_locks[node->locknum].lock); + locktype = isc_rwlocktype_read; + NODE_LOCK(lock, locktype); + + found = NULL; + foundsig = NULL; + sigtype = RBTDB_RDATATYPE_VALUE(dns_rdatatype_rrsig, type); + negtype = RBTDB_RDATATYPE_VALUE(0, type); + nsheader = NULL; + nssig = NULL; + cnamesig = NULL; + empty_node = ISC_TRUE; + header_prev = NULL; + for (header = node->data; header != NULL; header = header_next) { + header_next = header->next; + if (header->rdh_ttl <= now) { + /* + * This rdataset is stale. If no one else is using the + * node, we can clean it up right now, otherwise we + * mark it as stale, and the node as dirty, so it will + * get cleaned up later. + */ + if ((header->rdh_ttl <= now - RBTDB_VIRTUAL) && + (locktype == isc_rwlocktype_write || + NODE_TRYUPGRADE(lock) == ISC_R_SUCCESS)) { + /* + * We update the node's status only when we + * can get write access. + */ + locktype = isc_rwlocktype_write; + + if (dns_rbtnode_refcurrent(node) == 0) { + isc_mem_t *mctx; + + mctx = search.rbtdb->common.mctx; + clean_stale_headers(search.rbtdb, mctx, + header); + if (header_prev != NULL) + header_prev->next = + header->next; + else + node->data = header->next; + free_rdataset(search.rbtdb, mctx, + header); + } else { + header->attributes |= + RDATASET_ATTR_STALE; + node->dirty = 1; + header_prev = header; + } + } else + header_prev = header; + } else if (EXISTS(header)) { + /* + * We now know that there is at least one active + * non-stale rdataset at this node. + */ + empty_node = ISC_FALSE; + + /* + * If we found a type we were looking for, remember + * it. + */ + if (header->type == type || + (type == dns_rdatatype_any && + RBTDB_RDATATYPE_BASE(header->type) != 0) || + (cname_ok && header->type == + dns_rdatatype_cname)) { + /* + * We've found the answer. + */ + found = header; + if (header->type == dns_rdatatype_cname && + cname_ok && + cnamesig != NULL) { + /* + * If we've already got the CNAME RRSIG, + * use it, otherwise change sigtype + * so that we find it. + */ + if (cnamesig != NULL) + foundsig = cnamesig; + else + sigtype = + RBTDB_RDATATYPE_SIGCNAME; + foundsig = cnamesig; + } + } else if (header->type == sigtype) { + /* + * We've found the RRSIG rdataset for our + * target type. Remember it. + */ + foundsig = header; + } else if (header->type == RBTDB_RDATATYPE_NCACHEANY || + header->type == negtype) { + /* + * We've found a negative cache entry. + */ + found = header; + } else if (header->type == dns_rdatatype_ns) { + /* + * Remember a NS rdataset even if we're + * not specifically looking for it, because + * we might need it later. + */ + nsheader = header; + } else if (header->type == RBTDB_RDATATYPE_SIGNS) { + /* + * If we need the NS rdataset, we'll also + * need its signature. + */ + nssig = header; + } else if (cname_ok && + header->type == RBTDB_RDATATYPE_SIGCNAME) { + /* + * If we get a CNAME match, we'll also need + * its signature. + */ + cnamesig = header; + } + header_prev = header; + } else + header_prev = header; + } + + if (empty_node) { + /* + * We have an exact match for the name, but there are no + * extant rdatasets. That means that this node doesn't + * meaningfully exist, and that we really have a partial match. + */ + NODE_UNLOCK(lock, locktype); + goto find_ns; + } + + /* + * If we didn't find what we were looking for... + */ + if (found == NULL || + (found->trust == dns_trust_glue && + ((options & DNS_DBFIND_GLUEOK) == 0)) || + (found->trust == dns_trust_pending && + ((options & DNS_DBFIND_PENDINGOK) == 0))) { + /* + * If there is an NS rdataset at this node, then this is the + * deepest zone cut. + */ + if (nsheader != NULL) { + if (nodep != NULL) { + new_reference(search.rbtdb, node); + *nodep = node; + } + bind_rdataset(search.rbtdb, node, nsheader, search.now, + rdataset); + if (need_headerupdate(nsheader, search.now)) + update = nsheader; + if (nssig != NULL) { + bind_rdataset(search.rbtdb, node, nssig, + search.now, sigrdataset); + if (need_headerupdate(nssig, search.now)) + updatesig = nssig; + } + result = DNS_R_DELEGATION; + goto node_exit; + } + + /* + * Go find the deepest zone cut. + */ + NODE_UNLOCK(lock, locktype); + goto find_ns; + } + + /* + * We found what we were looking for, or we found a CNAME. + */ + + if (nodep != NULL) { + new_reference(search.rbtdb, node); + *nodep = node; + } + + if (RBTDB_RDATATYPE_BASE(found->type) == 0) { + /* + * We found a negative cache entry. + */ + if (NXDOMAIN(found)) + result = DNS_R_NCACHENXDOMAIN; + else + result = DNS_R_NCACHENXRRSET; + } else if (type != found->type && + type != dns_rdatatype_any && + found->type == dns_rdatatype_cname) { + /* + * We weren't doing an ANY query and we found a CNAME instead + * of the type we were looking for, so we need to indicate + * that result to the caller. + */ + result = DNS_R_CNAME; + } else { + /* + * An ordinary successful query! + */ + result = ISC_R_SUCCESS; + } + + if (type != dns_rdatatype_any || result == DNS_R_NCACHENXDOMAIN || + result == DNS_R_NCACHENXRRSET) { + bind_rdataset(search.rbtdb, node, found, search.now, + rdataset); + if (need_headerupdate(found, search.now)) + update = found; + if (foundsig != NULL) { + bind_rdataset(search.rbtdb, node, foundsig, search.now, + sigrdataset); + if (need_headerupdate(foundsig, search.now)) + updatesig = foundsig; + } + } node_exit: - if ((update != NULL || updatesig != NULL) && - locktype != isc_rwlocktype_write) { - NODE_UNLOCK(lock, locktype); - NODE_LOCK(lock, isc_rwlocktype_write); - locktype = isc_rwlocktype_write; - } - if (update != NULL && need_headerupdate(update, search.now)) - update_header(search.rbtdb, update, search.now); - if (updatesig != NULL && need_headerupdate(updatesig, search.now)) - update_header(search.rbtdb, updatesig, search.now); - - NODE_UNLOCK(lock, locktype); + if ((update != NULL || updatesig != NULL) && + locktype != isc_rwlocktype_write) { + NODE_UNLOCK(lock, locktype); + NODE_LOCK(lock, isc_rwlocktype_write); + locktype = isc_rwlocktype_write; + } + if (update != NULL && need_headerupdate(update, search.now)) + update_header(search.rbtdb, update, search.now); + if (updatesig != NULL && need_headerupdate(updatesig, search.now)) + update_header(search.rbtdb, updatesig, search.now); + + NODE_UNLOCK(lock, locktype); tree_exit: - RWUNLOCK(&search.rbtdb->tree_lock, isc_rwlocktype_read); + RWUNLOCK(&search.rbtdb->tree_lock, isc_rwlocktype_read); - /* - * If we found a zonecut but aren't going to use it, we have to - * let go of it. - */ - if (search.need_cleanup) { - node = search.zonecut; - lock = &(search.rbtdb->node_locks[node->locknum].lock); + /* + * If we found a zonecut but aren't going to use it, we have to + * let go of it. + */ + if (search.need_cleanup) { + node = search.zonecut; + lock = &(search.rbtdb->node_locks[node->locknum].lock); - NODE_LOCK(lock, isc_rwlocktype_read); - decrement_reference(search.rbtdb, node, 0, - isc_rwlocktype_read, isc_rwlocktype_none); - NODE_UNLOCK(lock, isc_rwlocktype_read); - } + NODE_LOCK(lock, isc_rwlocktype_read); + decrement_reference(search.rbtdb, node, 0, + isc_rwlocktype_read, isc_rwlocktype_none); + NODE_UNLOCK(lock, isc_rwlocktype_read); + } - dns_rbtnodechain_reset(&search.chain); + dns_rbtnodechain_reset(&search.chain); - return (result); + return (result); } static isc_result_t cache_findzonecut(dns_db_t *db, dns_name_t *name, unsigned int options, - isc_stdtime_t now, dns_dbnode_t **nodep, - dns_name_t *foundname, - dns_rdataset_t *rdataset, dns_rdataset_t *sigrdataset) + isc_stdtime_t now, dns_dbnode_t **nodep, + dns_name_t *foundname, + dns_rdataset_t *rdataset, dns_rdataset_t *sigrdataset) { - dns_rbtnode_t *node = NULL; - nodelock_t *lock; - isc_result_t result; - rbtdb_search_t search; - rdatasetheader_t *header, *header_prev, *header_next; - rdatasetheader_t *found, *foundsig; - unsigned int rbtoptions = DNS_RBTFIND_EMPTYDATA; - isc_rwlocktype_t locktype; - - search.rbtdb = (dns_rbtdb_t *)db; - - REQUIRE(VALID_RBTDB(search.rbtdb)); - - if (now == 0) - isc_stdtime_get(&now); - - search.rbtversion = NULL; - search.serial = 1; - search.options = options; - search.copy_name = ISC_FALSE; - search.need_cleanup = ISC_FALSE; - search.wild = ISC_FALSE; - search.zonecut = NULL; - dns_fixedname_init(&search.zonecut_name); - dns_rbtnodechain_init(&search.chain, search.rbtdb->common.mctx); - search.now = now; - - if ((options & DNS_DBFIND_NOEXACT) != 0) - rbtoptions |= DNS_RBTFIND_NOEXACT; - - RWLOCK(&search.rbtdb->tree_lock, isc_rwlocktype_read); - - /* - * Search down from the root of the tree. - */ - result = dns_rbt_findnode(search.rbtdb->tree, name, foundname, &node, - &search.chain, rbtoptions, NULL, &search); - - if (result == DNS_R_PARTIALMATCH) { - find_ns: - result = find_deepest_zonecut(&search, node, nodep, foundname, - rdataset, sigrdataset); - goto tree_exit; - } else if (result != ISC_R_SUCCESS) - goto tree_exit; - - /* - * We now go looking for an NS rdataset at the node. - */ - - lock = &(search.rbtdb->node_locks[node->locknum].lock); - locktype = isc_rwlocktype_read; - NODE_LOCK(lock, locktype); - - found = NULL; - foundsig = NULL; - header_prev = NULL; - for (header = node->data; header != NULL; header = header_next) { - header_next = header->next; - if (header->rdh_ttl <= now) { - /* - * This rdataset is stale. If no one else is using the - * node, we can clean it up right now, otherwise we - * mark it as stale, and the node as dirty, so it will - * get cleaned up later. - */ - if ((header->rdh_ttl <= now - RBTDB_VIRTUAL) && - (locktype == isc_rwlocktype_write || - NODE_TRYUPGRADE(lock) == ISC_R_SUCCESS)) { - /* - * We update the node's status only when we - * can get write access. - */ - locktype = isc_rwlocktype_write; - - if (dns_rbtnode_refcurrent(node) == 0) { - isc_mem_t *mctx; - - mctx = search.rbtdb->common.mctx; - clean_stale_headers(search.rbtdb, mctx, - header); - if (header_prev != NULL) - header_prev->next = - header->next; - else - node->data = header->next; - free_rdataset(search.rbtdb, mctx, - header); - } else { - header->attributes |= - RDATASET_ATTR_STALE; - node->dirty = 1; - header_prev = header; - } - } else - header_prev = header; - } else if (EXISTS(header)) { - /* - * If we found a type we were looking for, remember - * it. - */ - if (header->type == dns_rdatatype_ns) { - /* - * Remember a NS rdataset even if we're - * not specifically looking for it, because - * we might need it later. - */ - found = header; - } else if (header->type == RBTDB_RDATATYPE_SIGNS) { - /* - * If we need the NS rdataset, we'll also - * need its signature. - */ - foundsig = header; - } - header_prev = header; - } else - header_prev = header; - } - - if (found == NULL) { - /* - * No NS records here. - */ - NODE_UNLOCK(lock, locktype); - goto find_ns; - } - - if (nodep != NULL) { - new_reference(search.rbtdb, node); - *nodep = node; - } - - bind_rdataset(search.rbtdb, node, found, search.now, rdataset); - if (foundsig != NULL) - bind_rdataset(search.rbtdb, node, foundsig, search.now, - sigrdataset); - - if (need_headerupdate(found, search.now) || - (foundsig != NULL && need_headerupdate(foundsig, search.now))) { - if (locktype != isc_rwlocktype_write) { - NODE_UNLOCK(lock, locktype); - NODE_LOCK(lock, isc_rwlocktype_write); - locktype = isc_rwlocktype_write; - } - if (need_headerupdate(found, search.now)) - update_header(search.rbtdb, found, search.now); - if (foundsig != NULL && - need_headerupdate(foundsig, search.now)) { - update_header(search.rbtdb, foundsig, search.now); - } - } - - NODE_UNLOCK(lock, locktype); + dns_rbtnode_t *node = NULL; + nodelock_t *lock; + isc_result_t result; + rbtdb_search_t search; + rdatasetheader_t *header, *header_prev, *header_next; + rdatasetheader_t *found, *foundsig; + unsigned int rbtoptions = DNS_RBTFIND_EMPTYDATA; + isc_rwlocktype_t locktype; + + search.rbtdb = (dns_rbtdb_t *)db; + + REQUIRE(VALID_RBTDB(search.rbtdb)); + + if (now == 0) + isc_stdtime_get(&now); + + search.rbtversion = NULL; + search.serial = 1; + search.options = options; + search.copy_name = ISC_FALSE; + search.need_cleanup = ISC_FALSE; + search.wild = ISC_FALSE; + search.zonecut = NULL; + dns_fixedname_init(&search.zonecut_name); + dns_rbtnodechain_init(&search.chain, search.rbtdb->common.mctx); + search.now = now; + + if ((options & DNS_DBFIND_NOEXACT) != 0) + rbtoptions |= DNS_RBTFIND_NOEXACT; + + RWLOCK(&search.rbtdb->tree_lock, isc_rwlocktype_read); + + /* + * Search down from the root of the tree. + */ + result = dns_rbt_findnode(search.rbtdb->tree, name, foundname, &node, + &search.chain, rbtoptions, NULL, &search); + + if (result == DNS_R_PARTIALMATCH) { + find_ns: + result = find_deepest_zonecut(&search, node, nodep, foundname, + rdataset, sigrdataset); + goto tree_exit; + } else if (result != ISC_R_SUCCESS) + goto tree_exit; + + /* + * We now go looking for an NS rdataset at the node. + */ + + lock = &(search.rbtdb->node_locks[node->locknum].lock); + locktype = isc_rwlocktype_read; + NODE_LOCK(lock, locktype); + + found = NULL; + foundsig = NULL; + header_prev = NULL; + for (header = node->data; header != NULL; header = header_next) { + header_next = header->next; + if (header->rdh_ttl <= now) { + /* + * This rdataset is stale. If no one else is using the + * node, we can clean it up right now, otherwise we + * mark it as stale, and the node as dirty, so it will + * get cleaned up later. + */ + if ((header->rdh_ttl <= now - RBTDB_VIRTUAL) && + (locktype == isc_rwlocktype_write || + NODE_TRYUPGRADE(lock) == ISC_R_SUCCESS)) { + /* + * We update the node's status only when we + * can get write access. + */ + locktype = isc_rwlocktype_write; + + if (dns_rbtnode_refcurrent(node) == 0) { + isc_mem_t *mctx; + + mctx = search.rbtdb->common.mctx; + clean_stale_headers(search.rbtdb, mctx, + header); + if (header_prev != NULL) + header_prev->next = + header->next; + else + node->data = header->next; + free_rdataset(search.rbtdb, mctx, + header); + } else { + header->attributes |= + RDATASET_ATTR_STALE; + node->dirty = 1; + header_prev = header; + } + } else + header_prev = header; + } else if (EXISTS(header)) { + /* + * If we found a type we were looking for, remember + * it. + */ + if (header->type == dns_rdatatype_ns) { + /* + * Remember a NS rdataset even if we're + * not specifically looking for it, because + * we might need it later. + */ + found = header; + } else if (header->type == RBTDB_RDATATYPE_SIGNS) { + /* + * If we need the NS rdataset, we'll also + * need its signature. + */ + foundsig = header; + } + header_prev = header; + } else + header_prev = header; + } + + if (found == NULL) { + /* + * No NS records here. + */ + NODE_UNLOCK(lock, locktype); + goto find_ns; + } + + if (nodep != NULL) { + new_reference(search.rbtdb, node); + *nodep = node; + } + + bind_rdataset(search.rbtdb, node, found, search.now, rdataset); + if (foundsig != NULL) + bind_rdataset(search.rbtdb, node, foundsig, search.now, + sigrdataset); + + if (need_headerupdate(found, search.now) || + (foundsig != NULL && need_headerupdate(foundsig, search.now))) { + if (locktype != isc_rwlocktype_write) { + NODE_UNLOCK(lock, locktype); + NODE_LOCK(lock, isc_rwlocktype_write); + locktype = isc_rwlocktype_write; + } + if (need_headerupdate(found, search.now)) + update_header(search.rbtdb, found, search.now); + if (foundsig != NULL && + need_headerupdate(foundsig, search.now)) { + update_header(search.rbtdb, foundsig, search.now); + } + } + + NODE_UNLOCK(lock, locktype); tree_exit: - RWUNLOCK(&search.rbtdb->tree_lock, isc_rwlocktype_read); + RWUNLOCK(&search.rbtdb->tree_lock, isc_rwlocktype_read); - INSIST(!search.need_cleanup); + INSIST(!search.need_cleanup); - dns_rbtnodechain_reset(&search.chain); + dns_rbtnodechain_reset(&search.chain); - if (result == DNS_R_DELEGATION) - result = ISC_R_SUCCESS; + if (result == DNS_R_DELEGATION) + result = ISC_R_SUCCESS; - return (result); + return (result); } static void attachnode(dns_db_t *db, dns_dbnode_t *source, dns_dbnode_t **targetp) { - dns_rbtdb_t *rbtdb = (dns_rbtdb_t *)db; - dns_rbtnode_t *node = (dns_rbtnode_t *)source; - unsigned int refs; + dns_rbtdb_t *rbtdb = (dns_rbtdb_t *)db; + dns_rbtnode_t *node = (dns_rbtnode_t *)source; + unsigned int refs; - REQUIRE(VALID_RBTDB(rbtdb)); - REQUIRE(targetp != NULL && *targetp == NULL); + REQUIRE(VALID_RBTDB(rbtdb)); + REQUIRE(targetp != NULL && *targetp == NULL); - NODE_STRONGLOCK(&rbtdb->node_locks[node->locknum].lock); - dns_rbtnode_refincrement(node, &refs); - INSIST(refs != 0); - NODE_STRONGUNLOCK(&rbtdb->node_locks[node->locknum].lock); + NODE_STRONGLOCK(&rbtdb->node_locks[node->locknum].lock); + dns_rbtnode_refincrement(node, &refs); + INSIST(refs != 0); + NODE_STRONGUNLOCK(&rbtdb->node_locks[node->locknum].lock); - *targetp = source; + *targetp = source; } static void detachnode(dns_db_t *db, dns_dbnode_t **targetp) { - dns_rbtdb_t *rbtdb = (dns_rbtdb_t *)db; - dns_rbtnode_t *node; - isc_boolean_t want_free = ISC_FALSE; - isc_boolean_t inactive = ISC_FALSE; - rbtdb_nodelock_t *nodelock; - - REQUIRE(VALID_RBTDB(rbtdb)); - REQUIRE(targetp != NULL && *targetp != NULL); - - node = (dns_rbtnode_t *)(*targetp); - nodelock = &rbtdb->node_locks[node->locknum]; - - NODE_LOCK(&nodelock->lock, isc_rwlocktype_read); - - if (decrement_reference(rbtdb, node, 0, isc_rwlocktype_read, - isc_rwlocktype_none)) { - if (isc_refcount_current(&nodelock->references) == 0 && - nodelock->exiting) { - inactive = ISC_TRUE; - } - } - - NODE_UNLOCK(&nodelock->lock, isc_rwlocktype_read); - - *targetp = NULL; - - if (inactive) { - RBTDB_LOCK(&rbtdb->lock, isc_rwlocktype_write); - rbtdb->active--; - if (rbtdb->active == 0) - want_free = ISC_TRUE; - RBTDB_UNLOCK(&rbtdb->lock, isc_rwlocktype_write); - if (want_free) { - char buf[DNS_NAME_FORMATSIZE]; - if (dns_name_dynamic(&rbtdb->common.origin)) - dns_name_format(&rbtdb->common.origin, buf, - sizeof(buf)); - else - strcpy(buf, ""); - isc_log_write(dns_lctx, DNS_LOGCATEGORY_DATABASE, - DNS_LOGMODULE_CACHE, ISC_LOG_DEBUG(1), - "calling free_rbtdb(%s)", buf); - free_rbtdb(rbtdb, ISC_TRUE, NULL); - } - } + dns_rbtdb_t *rbtdb = (dns_rbtdb_t *)db; + dns_rbtnode_t *node; + isc_boolean_t want_free = ISC_FALSE; + isc_boolean_t inactive = ISC_FALSE; + rbtdb_nodelock_t *nodelock; + + REQUIRE(VALID_RBTDB(rbtdb)); + REQUIRE(targetp != NULL && *targetp != NULL); + + node = (dns_rbtnode_t *)(*targetp); + nodelock = &rbtdb->node_locks[node->locknum]; + + NODE_LOCK(&nodelock->lock, isc_rwlocktype_read); + + if (decrement_reference(rbtdb, node, 0, isc_rwlocktype_read, + isc_rwlocktype_none)) { + if (isc_refcount_current(&nodelock->references) == 0 && + nodelock->exiting) { + inactive = ISC_TRUE; + } + } + + NODE_UNLOCK(&nodelock->lock, isc_rwlocktype_read); + + *targetp = NULL; + + if (inactive) { + RBTDB_LOCK(&rbtdb->lock, isc_rwlocktype_write); + rbtdb->active--; + if (rbtdb->active == 0) + want_free = ISC_TRUE; + RBTDB_UNLOCK(&rbtdb->lock, isc_rwlocktype_write); + if (want_free) { + char buf[DNS_NAME_FORMATSIZE]; + if (dns_name_dynamic(&rbtdb->common.origin)) + dns_name_format(&rbtdb->common.origin, buf, + sizeof(buf)); + else + strcpy(buf, ""); + isc_log_write(dns_lctx, DNS_LOGCATEGORY_DATABASE, + DNS_LOGMODULE_CACHE, ISC_LOG_DEBUG(1), + "calling free_rbtdb(%s)", buf); + free_rbtdb(rbtdb, ISC_TRUE, NULL); + } + } } static isc_result_t expirenode(dns_db_t *db, dns_dbnode_t *node, isc_stdtime_t now) { - dns_rbtdb_t *rbtdb = (dns_rbtdb_t *)db; - dns_rbtnode_t *rbtnode = node; - rdatasetheader_t *header; - isc_boolean_t force_expire = ISC_FALSE; - /* - * These are the category and module used by the cache cleaner. - */ - isc_boolean_t log = ISC_FALSE; - isc_logcategory_t *category = DNS_LOGCATEGORY_DATABASE; - isc_logmodule_t *module = DNS_LOGMODULE_CACHE; - int level = ISC_LOG_DEBUG(2); - char printname[DNS_NAME_FORMATSIZE]; - - REQUIRE(VALID_RBTDB(rbtdb)); - - /* - * Caller must hold a tree lock. - */ - - if (now == 0) - isc_stdtime_get(&now); - - if (rbtdb->overmem) { - isc_uint32_t val; - - isc_random_get(&val); - /* - * XXXDCL Could stand to have a better policy, like LRU. - */ - force_expire = ISC_TF(rbtnode->down == NULL && val % 4 == 0); - - /* - * Note that 'log' can be true IFF rbtdb->overmem is also true. - * rbtdb->ovemem can currently only be true for cache databases - * -- hence all of the "overmem cache" log strings. - */ - log = ISC_TF(isc_log_wouldlog(dns_lctx, level)); - if (log) - isc_log_write(dns_lctx, category, module, level, - "overmem cache: %s %s", - force_expire ? "FORCE" : "check", - dns_rbt_formatnodename(rbtnode, - printname, - sizeof(printname))); - } - - /* - * We may not need write access, but this code path is not performance - * sensitive, so it should be okay to always lock as a writer. - */ - NODE_LOCK(&rbtdb->node_locks[rbtnode->locknum].lock, - isc_rwlocktype_write); - - for (header = rbtnode->data; header != NULL; header = header->next) - if (header->rdh_ttl <= now - RBTDB_VIRTUAL) { - /* - * We don't check if refcurrent(rbtnode) == 0 and try - * to free like we do in cache_find(), because - * refcurrent(rbtnode) must be non-zero. This is so - * because 'node' is an argument to the function. - */ - header->attributes |= RDATASET_ATTR_STALE; - rbtnode->dirty = 1; - if (log) - isc_log_write(dns_lctx, category, module, - level, "overmem cache: stale %s", - printname); - } else if (force_expire) { - if (! RETAIN(header)) { - set_ttl(rbtdb, header, 0); - header->attributes |= RDATASET_ATTR_STALE; - rbtnode->dirty = 1; - } else if (log) { - isc_log_write(dns_lctx, category, module, - level, "overmem cache: " - "reprieve by RETAIN() %s", - printname); - } - } else if (rbtdb->overmem && log) - isc_log_write(dns_lctx, category, module, level, - "overmem cache: saved %s", printname); - - NODE_UNLOCK(&rbtdb->node_locks[rbtnode->locknum].lock, - isc_rwlocktype_write); - - return (ISC_R_SUCCESS); + dns_rbtdb_t *rbtdb = (dns_rbtdb_t *)db; + dns_rbtnode_t *rbtnode = node; + rdatasetheader_t *header; + isc_boolean_t force_expire = ISC_FALSE; + /* + * These are the category and module used by the cache cleaner. + */ + isc_boolean_t log = ISC_FALSE; + isc_logcategory_t *category = DNS_LOGCATEGORY_DATABASE; + isc_logmodule_t *module = DNS_LOGMODULE_CACHE; + int level = ISC_LOG_DEBUG(2); + char printname[DNS_NAME_FORMATSIZE]; + + REQUIRE(VALID_RBTDB(rbtdb)); + + /* + * Caller must hold a tree lock. + */ + + if (now == 0) + isc_stdtime_get(&now); + + if (rbtdb->overmem) { + isc_uint32_t val; + + isc_random_get(&val); + /* + * XXXDCL Could stand to have a better policy, like LRU. + */ + force_expire = ISC_TF(rbtnode->down == NULL && val % 4 == 0); + + /* + * Note that 'log' can be true IFF rbtdb->overmem is also true. + * rbtdb->ovemem can currently only be true for cache databases + * -- hence all of the "overmem cache" log strings. + */ + log = ISC_TF(isc_log_wouldlog(dns_lctx, level)); + if (log) + isc_log_write(dns_lctx, category, module, level, + "overmem cache: %s %s", + force_expire ? "FORCE" : "check", + dns_rbt_formatnodename(rbtnode, + printname, + sizeof(printname))); + } + + /* + * We may not need write access, but this code path is not performance + * sensitive, so it should be okay to always lock as a writer. + */ + NODE_LOCK(&rbtdb->node_locks[rbtnode->locknum].lock, + isc_rwlocktype_write); + + for (header = rbtnode->data; header != NULL; header = header->next) + if (header->rdh_ttl <= now - RBTDB_VIRTUAL) { + /* + * We don't check if refcurrent(rbtnode) == 0 and try + * to free like we do in cache_find(), because + * refcurrent(rbtnode) must be non-zero. This is so + * because 'node' is an argument to the function. + */ + header->attributes |= RDATASET_ATTR_STALE; + rbtnode->dirty = 1; + if (log) + isc_log_write(dns_lctx, category, module, + level, "overmem cache: stale %s", + printname); + } else if (force_expire) { + if (! RETAIN(header)) { + set_ttl(rbtdb, header, 0); + header->attributes |= RDATASET_ATTR_STALE; + rbtnode->dirty = 1; + } else if (log) { + isc_log_write(dns_lctx, category, module, + level, "overmem cache: " + "reprieve by RETAIN() %s", + printname); + } + } else if (rbtdb->overmem && log) + isc_log_write(dns_lctx, category, module, level, + "overmem cache: saved %s", printname); + + NODE_UNLOCK(&rbtdb->node_locks[rbtnode->locknum].lock, + isc_rwlocktype_write); + + return (ISC_R_SUCCESS); } static void overmem(dns_db_t *db, isc_boolean_t overmem) { - dns_rbtdb_t *rbtdb = (dns_rbtdb_t *)db; - -#ifdef LRU_DEBUG - /* XXX: see cache.c:timer_dump() */ - if ((int)overmem == -1) { - if (!IS_CACHE(rbtdb) || db->rdclass != dns_rdataclass_in) - return; /* for brevity */ - isc_log_write(dns_lctx, DNS_LOGCATEGORY_DATABASE, - DNS_LOGMODULE_CACHE, ISC_LOG_INFO, - "cache DB %p: mem inuse %lu, %u node, " - "%d/%u current/total cache, %d/%u neg, %d/%u A, %d/%u AAAA, " - "%d/%u NS, %d/%u PTR, %d/%u glue, " - "%d/%u additional, purge/scan=%u(%u expiry, %u lru)/%u, " - "overmem=%d", - rbtdb, - (unsigned long)isc_mem_inuse(rbtdb->common.mctx), - dns_rbt_nodecount(rbtdb->tree), - rbtdb->cachestat.cache_current, rbtdb->cachestat.cache_total, - rbtdb->cachestat.ncache_current, rbtdb->cachestat.ncache_total, - rbtdb->cachestat.a_current, rbtdb->cachestat.a_total, - rbtdb->cachestat.aaaa_current, rbtdb->cachestat.aaaa_total, - rbtdb->cachestat.ns_current, rbtdb->cachestat.ns_total, - rbtdb->cachestat.ptr_current, rbtdb->cachestat.ptr_total, - rbtdb->cachestat.glue_current, rbtdb->cachestat.glue_total, - rbtdb->cachestat.additional_current, - rbtdb->cachestat.additional_total, - rbtdb->cachestat.stale_purge, rbtdb->cachestat.stale_expire, - rbtdb->cachestat.stale_lru, rbtdb->cachestat.stale_scan, - rbtdb->overmem); - return; - } -#endif + dns_rbtdb_t *rbtdb = (dns_rbtdb_t *)db; - if (IS_CACHE(rbtdb)) { - rbtdb->overmem = overmem; - } + if (IS_CACHE(rbtdb)) + rbtdb->overmem = overmem; } static void printnode(dns_db_t *db, dns_dbnode_t *node, FILE *out) { - dns_rbtdb_t *rbtdb = (dns_rbtdb_t *)db; - dns_rbtnode_t *rbtnode = node; - isc_boolean_t first; - - REQUIRE(VALID_RBTDB(rbtdb)); - - NODE_LOCK(&rbtdb->node_locks[rbtnode->locknum].lock, - isc_rwlocktype_read); - - fprintf(out, "node %p, %u references, locknum = %u\n", - rbtnode, dns_rbtnode_refcurrent(rbtnode), - rbtnode->locknum); - if (rbtnode->data != NULL) { - rdatasetheader_t *current, *top_next; - - for (current = rbtnode->data; current != NULL; - current = top_next) { - top_next = current->next; - first = ISC_TRUE; - fprintf(out, "\ttype %u", current->type); - do { - if (!first) - fprintf(out, "\t"); - first = ISC_FALSE; - fprintf(out, - "\tserial = %lu, ttl = %u, " - "trust = %u, attributes = %u\n", - (unsigned long)current->serial, - current->rdh_ttl, - current->trust, - current->attributes); - current = current->down; - } while (current != NULL); - } - } else - fprintf(out, "(empty)\n"); - - NODE_UNLOCK(&rbtdb->node_locks[rbtnode->locknum].lock, - isc_rwlocktype_read); + dns_rbtdb_t *rbtdb = (dns_rbtdb_t *)db; + dns_rbtnode_t *rbtnode = node; + isc_boolean_t first; + + REQUIRE(VALID_RBTDB(rbtdb)); + + NODE_LOCK(&rbtdb->node_locks[rbtnode->locknum].lock, + isc_rwlocktype_read); + + fprintf(out, "node %p, %u references, locknum = %u\n", + rbtnode, dns_rbtnode_refcurrent(rbtnode), + rbtnode->locknum); + if (rbtnode->data != NULL) { + rdatasetheader_t *current, *top_next; + + for (current = rbtnode->data; current != NULL; + current = top_next) { + top_next = current->next; + first = ISC_TRUE; + fprintf(out, "\ttype %u", current->type); + do { + if (!first) + fprintf(out, "\t"); + first = ISC_FALSE; + fprintf(out, + "\tserial = %lu, ttl = %u, " + "trust = %u, attributes = %u\n", + (unsigned long)current->serial, + current->rdh_ttl, + current->trust, + current->attributes); + current = current->down; + } while (current != NULL); + } + } else + fprintf(out, "(empty)\n"); + + NODE_UNLOCK(&rbtdb->node_locks[rbtnode->locknum].lock, + isc_rwlocktype_read); } static isc_result_t createiterator(dns_db_t *db, isc_boolean_t relative_names, - dns_dbiterator_t **iteratorp) + dns_dbiterator_t **iteratorp) { - dns_rbtdb_t *rbtdb = (dns_rbtdb_t *)db; - rbtdb_dbiterator_t *rbtdbiter; - - REQUIRE(VALID_RBTDB(rbtdb)); - - rbtdbiter = isc_mem_get(rbtdb->common.mctx, sizeof(*rbtdbiter)); - if (rbtdbiter == NULL) - return (ISC_R_NOMEMORY); - - rbtdbiter->common.methods = &dbiterator_methods; - rbtdbiter->common.db = NULL; - dns_db_attach(db, &rbtdbiter->common.db); - rbtdbiter->common.relative_names = relative_names; - rbtdbiter->common.magic = DNS_DBITERATOR_MAGIC; - rbtdbiter->common.cleaning = ISC_FALSE; - rbtdbiter->paused = ISC_TRUE; - rbtdbiter->tree_locked = isc_rwlocktype_none; - rbtdbiter->result = ISC_R_SUCCESS; - dns_fixedname_init(&rbtdbiter->name); - dns_fixedname_init(&rbtdbiter->origin); - rbtdbiter->node = NULL; - rbtdbiter->delete = 0; - memset(rbtdbiter->deletions, 0, sizeof(rbtdbiter->deletions)); - dns_rbtnodechain_init(&rbtdbiter->chain, db->mctx); - - *iteratorp = (dns_dbiterator_t *)rbtdbiter; - - return (ISC_R_SUCCESS); + dns_rbtdb_t *rbtdb = (dns_rbtdb_t *)db; + rbtdb_dbiterator_t *rbtdbiter; + + REQUIRE(VALID_RBTDB(rbtdb)); + + rbtdbiter = isc_mem_get(rbtdb->common.mctx, sizeof(*rbtdbiter)); + if (rbtdbiter == NULL) + return (ISC_R_NOMEMORY); + + rbtdbiter->common.methods = &dbiterator_methods; + rbtdbiter->common.db = NULL; + dns_db_attach(db, &rbtdbiter->common.db); + rbtdbiter->common.relative_names = relative_names; + rbtdbiter->common.magic = DNS_DBITERATOR_MAGIC; + rbtdbiter->common.cleaning = ISC_FALSE; + rbtdbiter->paused = ISC_TRUE; + rbtdbiter->tree_locked = isc_rwlocktype_none; + rbtdbiter->result = ISC_R_SUCCESS; + dns_fixedname_init(&rbtdbiter->name); + dns_fixedname_init(&rbtdbiter->origin); + rbtdbiter->node = NULL; + rbtdbiter->delete = 0; + memset(rbtdbiter->deletions, 0, sizeof(rbtdbiter->deletions)); + dns_rbtnodechain_init(&rbtdbiter->chain, db->mctx); + + *iteratorp = (dns_dbiterator_t *)rbtdbiter; + + return (ISC_R_SUCCESS); } static isc_result_t zone_findrdataset(dns_db_t *db, dns_dbnode_t *node, dns_dbversion_t *version, - dns_rdatatype_t type, dns_rdatatype_t covers, - isc_stdtime_t now, dns_rdataset_t *rdataset, - dns_rdataset_t *sigrdataset) + dns_rdatatype_t type, dns_rdatatype_t covers, + isc_stdtime_t now, dns_rdataset_t *rdataset, + dns_rdataset_t *sigrdataset) { - dns_rbtdb_t *rbtdb = (dns_rbtdb_t *)db; - dns_rbtnode_t *rbtnode = (dns_rbtnode_t *)node; - rdatasetheader_t *header, *header_next, *found, *foundsig; - rbtdb_serial_t serial; - rbtdb_version_t *rbtversion = version; - isc_boolean_t close_version = ISC_FALSE; - rbtdb_rdatatype_t matchtype, sigmatchtype; - - REQUIRE(VALID_RBTDB(rbtdb)); - REQUIRE(type != dns_rdatatype_any); - - if (rbtversion == NULL) { - currentversion(db, (dns_dbversion_t **) (void *)(&rbtversion)); - close_version = ISC_TRUE; - } - serial = rbtversion->serial; - now = 0; - - NODE_LOCK(&rbtdb->node_locks[rbtnode->locknum].lock, - isc_rwlocktype_read); - - found = NULL; - foundsig = NULL; - matchtype = RBTDB_RDATATYPE_VALUE(type, covers); - if (covers == 0) - sigmatchtype = RBTDB_RDATATYPE_VALUE(dns_rdatatype_rrsig, type); - else - sigmatchtype = 0; - - for (header = rbtnode->data; header != NULL; header = header_next) { - header_next = header->next; - do { - if (header->serial <= serial && - !IGNORE(header)) { - /* - * Is this a "this rdataset doesn't - * exist" record? - */ - if (NONEXISTENT(header)) - header = NULL; - break; - } else - header = header->down; - } while (header != NULL); - if (header != NULL) { - /* - * We have an active, extant rdataset. If it's a - * type we're looking for, remember it. - */ - if (header->type == matchtype) { - found = header; - if (foundsig != NULL) - break; - } else if (header->type == sigmatchtype) { - foundsig = header; - if (found != NULL) - break; - } - } - } - if (found != NULL) { - bind_rdataset(rbtdb, rbtnode, found, now, rdataset); - if (foundsig != NULL) - bind_rdataset(rbtdb, rbtnode, foundsig, now, - sigrdataset); - } - - NODE_UNLOCK(&rbtdb->node_locks[rbtnode->locknum].lock, - isc_rwlocktype_read); - - if (close_version) - closeversion(db, (dns_dbversion_t **) (void *)(&rbtversion), - ISC_FALSE); - - if (found == NULL) - return (ISC_R_NOTFOUND); - - return (ISC_R_SUCCESS); + dns_rbtdb_t *rbtdb = (dns_rbtdb_t *)db; + dns_rbtnode_t *rbtnode = (dns_rbtnode_t *)node; + rdatasetheader_t *header, *header_next, *found, *foundsig; + rbtdb_serial_t serial; + rbtdb_version_t *rbtversion = version; + isc_boolean_t close_version = ISC_FALSE; + rbtdb_rdatatype_t matchtype, sigmatchtype; + + REQUIRE(VALID_RBTDB(rbtdb)); + REQUIRE(type != dns_rdatatype_any); + + if (rbtversion == NULL) { + currentversion(db, (dns_dbversion_t **) (void *)(&rbtversion)); + close_version = ISC_TRUE; + } + serial = rbtversion->serial; + now = 0; + + NODE_LOCK(&rbtdb->node_locks[rbtnode->locknum].lock, + isc_rwlocktype_read); + + found = NULL; + foundsig = NULL; + matchtype = RBTDB_RDATATYPE_VALUE(type, covers); + if (covers == 0) + sigmatchtype = RBTDB_RDATATYPE_VALUE(dns_rdatatype_rrsig, type); + else + sigmatchtype = 0; + + for (header = rbtnode->data; header != NULL; header = header_next) { + header_next = header->next; + do { + if (header->serial <= serial && + !IGNORE(header)) { + /* + * Is this a "this rdataset doesn't + * exist" record? + */ + if (NONEXISTENT(header)) + header = NULL; + break; + } else + header = header->down; + } while (header != NULL); + if (header != NULL) { + /* + * We have an active, extant rdataset. If it's a + * type we're looking for, remember it. + */ + if (header->type == matchtype) { + found = header; + if (foundsig != NULL) + break; + } else if (header->type == sigmatchtype) { + foundsig = header; + if (found != NULL) + break; + } + } + } + if (found != NULL) { + bind_rdataset(rbtdb, rbtnode, found, now, rdataset); + if (foundsig != NULL) + bind_rdataset(rbtdb, rbtnode, foundsig, now, + sigrdataset); + } + + NODE_UNLOCK(&rbtdb->node_locks[rbtnode->locknum].lock, + isc_rwlocktype_read); + + if (close_version) + closeversion(db, (dns_dbversion_t **) (void *)(&rbtversion), + ISC_FALSE); + + if (found == NULL) + return (ISC_R_NOTFOUND); + + return (ISC_R_SUCCESS); } static isc_result_t cache_findrdataset(dns_db_t *db, dns_dbnode_t *node, dns_dbversion_t *version, - dns_rdatatype_t type, dns_rdatatype_t covers, - isc_stdtime_t now, dns_rdataset_t *rdataset, - dns_rdataset_t *sigrdataset) + dns_rdatatype_t type, dns_rdatatype_t covers, + isc_stdtime_t now, dns_rdataset_t *rdataset, + dns_rdataset_t *sigrdataset) { - dns_rbtdb_t *rbtdb = (dns_rbtdb_t *)db; - dns_rbtnode_t *rbtnode = (dns_rbtnode_t *)node; - rdatasetheader_t *header, *header_next, *found, *foundsig; - rbtdb_rdatatype_t matchtype, sigmatchtype, negtype; - isc_result_t result; - nodelock_t *lock; - isc_rwlocktype_t locktype; - - REQUIRE(VALID_RBTDB(rbtdb)); - REQUIRE(type != dns_rdatatype_any); - - UNUSED(version); - - result = ISC_R_SUCCESS; - - if (now == 0) - isc_stdtime_get(&now); - - lock = &rbtdb->node_locks[rbtnode->locknum].lock; - locktype = isc_rwlocktype_read; - NODE_LOCK(lock, locktype); - - found = NULL; - foundsig = NULL; - matchtype = RBTDB_RDATATYPE_VALUE(type, covers); - negtype = RBTDB_RDATATYPE_VALUE(0, type); - if (covers == 0) - sigmatchtype = RBTDB_RDATATYPE_VALUE(dns_rdatatype_rrsig, type); - else - sigmatchtype = 0; - - for (header = rbtnode->data; header != NULL; header = header_next) { - header_next = header->next; - if (header->rdh_ttl <= now) { - if ((header->rdh_ttl <= now - RBTDB_VIRTUAL) && - (locktype == isc_rwlocktype_write || - NODE_TRYUPGRADE(lock) == ISC_R_SUCCESS)) { - /* - * We update the node's status only when we - * can get write access. - */ - locktype = isc_rwlocktype_write; - - /* - * We don't check if refcurrent(rbtnode) == 0 - * and try to free like we do in cache_find(), - * because refcurrent(rbtnode) must be - * non-zero. This is so because 'node' is an - * argument to the function. - */ - header->attributes |= RDATASET_ATTR_STALE; - rbtnode->dirty = 1; - } - } else if (EXISTS(header)) { - if (header->type == matchtype) - found = header; - else if (header->type == RBTDB_RDATATYPE_NCACHEANY || - header->type == negtype) - found = header; - else if (header->type == sigmatchtype) - foundsig = header; - } - } - if (found != NULL) { - bind_rdataset(rbtdb, rbtnode, found, now, rdataset); - if (foundsig != NULL) - bind_rdataset(rbtdb, rbtnode, foundsig, now, - sigrdataset); - } - - NODE_UNLOCK(lock, locktype); - - if (found == NULL) - return (ISC_R_NOTFOUND); - - if (RBTDB_RDATATYPE_BASE(found->type) == 0) { - /* - * We found a negative cache entry. - */ - if (NXDOMAIN(found)) - result = DNS_R_NCACHENXDOMAIN; - else - result = DNS_R_NCACHENXRRSET; - } - - return (result); + dns_rbtdb_t *rbtdb = (dns_rbtdb_t *)db; + dns_rbtnode_t *rbtnode = (dns_rbtnode_t *)node; + rdatasetheader_t *header, *header_next, *found, *foundsig; + rbtdb_rdatatype_t matchtype, sigmatchtype, negtype; + isc_result_t result; + nodelock_t *lock; + isc_rwlocktype_t locktype; + + REQUIRE(VALID_RBTDB(rbtdb)); + REQUIRE(type != dns_rdatatype_any); + + UNUSED(version); + + result = ISC_R_SUCCESS; + + if (now == 0) + isc_stdtime_get(&now); + + lock = &rbtdb->node_locks[rbtnode->locknum].lock; + locktype = isc_rwlocktype_read; + NODE_LOCK(lock, locktype); + + found = NULL; + foundsig = NULL; + matchtype = RBTDB_RDATATYPE_VALUE(type, covers); + negtype = RBTDB_RDATATYPE_VALUE(0, type); + if (covers == 0) + sigmatchtype = RBTDB_RDATATYPE_VALUE(dns_rdatatype_rrsig, type); + else + sigmatchtype = 0; + + for (header = rbtnode->data; header != NULL; header = header_next) { + header_next = header->next; + if (header->rdh_ttl <= now) { + if ((header->rdh_ttl <= now - RBTDB_VIRTUAL) && + (locktype == isc_rwlocktype_write || + NODE_TRYUPGRADE(lock) == ISC_R_SUCCESS)) { + /* + * We update the node's status only when we + * can get write access. + */ + locktype = isc_rwlocktype_write; + + /* + * We don't check if refcurrent(rbtnode) == 0 + * and try to free like we do in cache_find(), + * because refcurrent(rbtnode) must be + * non-zero. This is so because 'node' is an + * argument to the function. + */ + header->attributes |= RDATASET_ATTR_STALE; + rbtnode->dirty = 1; + } + } else if (EXISTS(header)) { + if (header->type == matchtype) + found = header; + else if (header->type == RBTDB_RDATATYPE_NCACHEANY || + header->type == negtype) + found = header; + else if (header->type == sigmatchtype) + foundsig = header; + } + } + if (found != NULL) { + bind_rdataset(rbtdb, rbtnode, found, now, rdataset); + if (foundsig != NULL) + bind_rdataset(rbtdb, rbtnode, foundsig, now, + sigrdataset); + } + + NODE_UNLOCK(lock, locktype); + + if (found == NULL) + return (ISC_R_NOTFOUND); + + if (RBTDB_RDATATYPE_BASE(found->type) == 0) { + /* + * We found a negative cache entry. + */ + if (NXDOMAIN(found)) + result = DNS_R_NCACHENXDOMAIN; + else + result = DNS_R_NCACHENXRRSET; + } + + return (result); } static isc_result_t allrdatasets(dns_db_t *db, dns_dbnode_t *node, dns_dbversion_t *version, - isc_stdtime_t now, dns_rdatasetiter_t **iteratorp) + isc_stdtime_t now, dns_rdatasetiter_t **iteratorp) { - dns_rbtdb_t *rbtdb = (dns_rbtdb_t *)db; - dns_rbtnode_t *rbtnode = (dns_rbtnode_t *)node; - rbtdb_version_t *rbtversion = version; - rbtdb_rdatasetiter_t *iterator; - unsigned int refs; - - REQUIRE(VALID_RBTDB(rbtdb)); - - iterator = isc_mem_get(rbtdb->common.mctx, sizeof(*iterator)); - if (iterator == NULL) - return (ISC_R_NOMEMORY); - - if ((db->attributes & DNS_DBATTR_CACHE) == 0) { - now = 0; - if (rbtversion == NULL) - currentversion(db, - (dns_dbversion_t **) (void *)(&rbtversion)); - else { - unsigned int refs; - - isc_refcount_increment(&rbtversion->references, - &refs); - INSIST(refs > 1); - } - } else { - if (now == 0) - isc_stdtime_get(&now); - rbtversion = NULL; - } - - iterator->common.magic = DNS_RDATASETITER_MAGIC; - iterator->common.methods = &rdatasetiter_methods; - iterator->common.db = db; - iterator->common.node = node; - iterator->common.version = (dns_dbversion_t *)rbtversion; - iterator->common.now = now; - - NODE_STRONGLOCK(&rbtdb->node_locks[rbtnode->locknum].lock); - - dns_rbtnode_refincrement(rbtnode, &refs); - INSIST(refs != 0); - - iterator->current = NULL; - - NODE_STRONGUNLOCK(&rbtdb->node_locks[rbtnode->locknum].lock); - - *iteratorp = (dns_rdatasetiter_t *)iterator; - - return (ISC_R_SUCCESS); + dns_rbtdb_t *rbtdb = (dns_rbtdb_t *)db; + dns_rbtnode_t *rbtnode = (dns_rbtnode_t *)node; + rbtdb_version_t *rbtversion = version; + rbtdb_rdatasetiter_t *iterator; + unsigned int refs; + + REQUIRE(VALID_RBTDB(rbtdb)); + + iterator = isc_mem_get(rbtdb->common.mctx, sizeof(*iterator)); + if (iterator == NULL) + return (ISC_R_NOMEMORY); + + if ((db->attributes & DNS_DBATTR_CACHE) == 0) { + now = 0; + if (rbtversion == NULL) + currentversion(db, + (dns_dbversion_t **) (void *)(&rbtversion)); + else { + unsigned int refs; + + isc_refcount_increment(&rbtversion->references, + &refs); + INSIST(refs > 1); + } + } else { + if (now == 0) + isc_stdtime_get(&now); + rbtversion = NULL; + } + + iterator->common.magic = DNS_RDATASETITER_MAGIC; + iterator->common.methods = &rdatasetiter_methods; + iterator->common.db = db; + iterator->common.node = node; + iterator->common.version = (dns_dbversion_t *)rbtversion; + iterator->common.now = now; + + NODE_STRONGLOCK(&rbtdb->node_locks[rbtnode->locknum].lock); + + dns_rbtnode_refincrement(rbtnode, &refs); + INSIST(refs != 0); + + iterator->current = NULL; + + NODE_STRONGUNLOCK(&rbtdb->node_locks[rbtnode->locknum].lock); + + *iteratorp = (dns_rdatasetiter_t *)iterator; + + return (ISC_R_SUCCESS); } static isc_boolean_t cname_and_other_data(dns_rbtnode_t *node, rbtdb_serial_t serial) { - rdatasetheader_t *header, *header_next; - isc_boolean_t cname, other_data; - dns_rdatatype_t rdtype; - - /* - * The caller must hold the node lock. - */ - - /* - * Look for CNAME and "other data" rdatasets active in our version. - */ - cname = ISC_FALSE; - other_data = ISC_FALSE; - for (header = node->data; header != NULL; header = header_next) { - header_next = header->next; - if (header->type == dns_rdatatype_cname) { - /* - * Look for an active extant CNAME. - */ - do { - if (header->serial <= serial && - !IGNORE(header)) { - /* - * Is this a "this rdataset doesn't - * exist" record? - */ - if (NONEXISTENT(header)) - header = NULL; - break; - } else - header = header->down; - } while (header != NULL); - if (header != NULL) - cname = ISC_TRUE; - } else { - /* - * Look for active extant "other data". - * - * "Other data" is any rdataset whose type is not - * KEY, RRSIG KEY, NSEC, RRSIG NSEC or RRSIG CNAME. - */ - rdtype = RBTDB_RDATATYPE_BASE(header->type); - if (rdtype == dns_rdatatype_rrsig || - rdtype == dns_rdatatype_sig) - rdtype = RBTDB_RDATATYPE_EXT(header->type); - if (rdtype != dns_rdatatype_nsec && - rdtype != dns_rdatatype_key && - rdtype != dns_rdatatype_cname) { - /* - * We've found a type that isn't - * NSEC, KEY, CNAME, or one of their - * signatures. Is it active and extant? - */ - do { - if (header->serial <= serial && - !IGNORE(header)) { - /* - * Is this a "this rdataset - * doesn't exist" record? - */ - if (NONEXISTENT(header)) - header = NULL; - break; - } else - header = header->down; - } while (header != NULL); - if (header != NULL) - other_data = ISC_TRUE; - } - } - } - - if (cname && other_data) - return (ISC_TRUE); - - return (ISC_FALSE); + rdatasetheader_t *header, *header_next; + isc_boolean_t cname, other_data; + dns_rdatatype_t rdtype; + + /* + * The caller must hold the node lock. + */ + + /* + * Look for CNAME and "other data" rdatasets active in our version. + */ + cname = ISC_FALSE; + other_data = ISC_FALSE; + for (header = node->data; header != NULL; header = header_next) { + header_next = header->next; + if (header->type == dns_rdatatype_cname) { + /* + * Look for an active extant CNAME. + */ + do { + if (header->serial <= serial && + !IGNORE(header)) { + /* + * Is this a "this rdataset doesn't + * exist" record? + */ + if (NONEXISTENT(header)) + header = NULL; + break; + } else + header = header->down; + } while (header != NULL); + if (header != NULL) + cname = ISC_TRUE; + } else { + /* + * Look for active extant "other data". + * + * "Other data" is any rdataset whose type is not + * KEY, RRSIG KEY, NSEC, RRSIG NSEC or RRSIG CNAME. + */ + rdtype = RBTDB_RDATATYPE_BASE(header->type); + if (rdtype == dns_rdatatype_rrsig || + rdtype == dns_rdatatype_sig) + rdtype = RBTDB_RDATATYPE_EXT(header->type); + if (rdtype != dns_rdatatype_nsec && + rdtype != dns_rdatatype_key && + rdtype != dns_rdatatype_cname) { + /* + * We've found a type that isn't + * NSEC, KEY, CNAME, or one of their + * signatures. Is it active and extant? + */ + do { + if (header->serial <= serial && + !IGNORE(header)) { + /* + * Is this a "this rdataset + * doesn't exist" record? + */ + if (NONEXISTENT(header)) + header = NULL; + break; + } else + header = header->down; + } while (header != NULL); + if (header != NULL) + other_data = ISC_TRUE; + } + } + } + + if (cname && other_data) + return (ISC_TRUE); + + return (ISC_FALSE); } -#ifdef LRU_DEBUG -static void -cachestat_update(dns_rbtdb_t *rbtdb, rdatasetheader_t *header) { - if ((header->attributes & RDATASET_ATTR_CACHE) == 0) - return; - - /* XXX: don't use lock for brevity */ - rbtdb->cachestat.cache_total++; - if (RBTDB_RDATATYPE_BASE(header->type) == 0) - rbtdb->cachestat.ncache_total++; - if (header->type == dns_rdatatype_a) - rbtdb->cachestat.a_total++; - else if (header->type == dns_rdatatype_aaaa) - rbtdb->cachestat.aaaa_total++; - else if (header->type == dns_rdatatype_ns) - rbtdb->cachestat.ns_total++; - else if (header->type == dns_rdatatype_ptr) - rbtdb->cachestat.ptr_total++; - - if (header->trust == dns_trust_glue && - (header->type == dns_rdatatype_a || - header->type == dns_rdatatype_aaaa)) { - rbtdb->cachestat.glue_total++; - } - if (header->trust == dns_trust_additional && - (header->type == dns_rdatatype_a || - header->type == dns_rdatatype_aaaa)) { - rbtdb->cachestat.additional_total++; - } -} -#endif - static isc_result_t add(dns_rbtdb_t *rbtdb, dns_rbtnode_t *rbtnode, rbtdb_version_t *rbtversion, rdatasetheader_t *newheader, unsigned int options, isc_boolean_t loading, dns_rdataset_t *addedrdataset, isc_stdtime_t now) { - rbtdb_changed_t *changed = NULL; - rdatasetheader_t *topheader, *topheader_prev, *header; - unsigned char *merged; - isc_result_t result; - isc_boolean_t header_nx; - isc_boolean_t newheader_nx; - isc_boolean_t merge; - dns_rdatatype_t rdtype, covers; - rbtdb_rdatatype_t negtype; - dns_trust_t trust; - - /* - * Add an rdatasetheader_t to a node. - */ - - /* - * Caller must be holding the node lock. - */ - - if ((options & DNS_DBADD_MERGE) != 0) { - REQUIRE(rbtversion != NULL); - merge = ISC_TRUE; - } else - merge = ISC_FALSE; - - if ((options & DNS_DBADD_FORCE) != 0) - trust = dns_trust_ultimate; - else - trust = newheader->trust; - - if (rbtversion != NULL && !loading) { - /* - * We always add a changed record, even if no changes end up - * being made to this node, because it's harmless and - * simplifies the code. - */ - changed = add_changed(rbtdb, rbtversion, rbtnode); - if (changed == NULL) { - free_rdataset(rbtdb, rbtdb->common.mctx, newheader); - return (ISC_R_NOMEMORY); - } - } - - newheader_nx = NONEXISTENT(newheader) ? ISC_TRUE : ISC_FALSE; - topheader_prev = NULL; - - negtype = 0; - if (rbtversion == NULL && !newheader_nx) { - rdtype = RBTDB_RDATATYPE_BASE(newheader->type); - if (rdtype == 0) { - /* - * We're adding a negative cache entry. - */ - covers = RBTDB_RDATATYPE_EXT(newheader->type); - if (covers == dns_rdatatype_any) { - /* - * We're adding an negative cache entry - * which covers all types (NXDOMAIN, - * NODATA(QTYPE=ANY)). - * - * We make all other data stale so that the - * only rdataset that can be found at this - * node is the negative cache entry. - */ - for (topheader = rbtnode->data; - topheader != NULL; - topheader = topheader->next) { - set_ttl(rbtdb, topheader, 0); - topheader->attributes |= - RDATASET_ATTR_STALE; - } - rbtnode->dirty = 1; - goto find_header; - } - negtype = RBTDB_RDATATYPE_VALUE(covers, 0); - } else { - /* - * We're adding something that isn't a - * negative cache entry. Look for an extant - * non-stale NXDOMAIN/NODATA(QTYPE=ANY) negative - * cache entry. - */ - for (topheader = rbtnode->data; - topheader != NULL; - topheader = topheader->next) { - if (topheader->type == - RBTDB_RDATATYPE_NCACHEANY) - break; - } - if (topheader != NULL && EXISTS(topheader) && - topheader->rdh_ttl > now) { - /* - * Found one. - */ - if (trust < topheader->trust) { - /* - * The NXDOMAIN/NODATA(QTYPE=ANY) - * is more trusted. - */ - /* set the flag for debug */ - newheader->attributes |= - RDATASET_ATTR_CANCELED; - free_rdataset(rbtdb, - rbtdb->common.mctx, - newheader); - if (addedrdataset != NULL) - bind_rdataset(rbtdb, rbtnode, - topheader, now, - addedrdataset); - return (DNS_R_UNCHANGED); - } - /* - * The new rdataset is better. Expire the - * NXDOMAIN/NODATA(QTYPE=ANY). - */ - set_ttl(rbtdb, topheader, 0); - topheader->attributes |= RDATASET_ATTR_STALE; - rbtnode->dirty = 1; - topheader = NULL; - goto find_header; - } - negtype = RBTDB_RDATATYPE_VALUE(0, rdtype); - } - } - - for (topheader = rbtnode->data; - topheader != NULL; - topheader = topheader->next) { - if (topheader->type == newheader->type || - topheader->type == negtype) - break; - topheader_prev = topheader; - } + rbtdb_changed_t *changed = NULL; + rdatasetheader_t *topheader, *topheader_prev, *header; + unsigned char *merged; + isc_result_t result; + isc_boolean_t header_nx; + isc_boolean_t newheader_nx; + isc_boolean_t merge; + dns_rdatatype_t rdtype, covers; + rbtdb_rdatatype_t negtype; + dns_trust_t trust; + + /* + * Add an rdatasetheader_t to a node. + */ + + /* + * Caller must be holding the node lock. + */ + + if ((options & DNS_DBADD_MERGE) != 0) { + REQUIRE(rbtversion != NULL); + merge = ISC_TRUE; + } else + merge = ISC_FALSE; + + if ((options & DNS_DBADD_FORCE) != 0) + trust = dns_trust_ultimate; + else + trust = newheader->trust; + + if (rbtversion != NULL && !loading) { + /* + * We always add a changed record, even if no changes end up + * being made to this node, because it's harmless and + * simplifies the code. + */ + changed = add_changed(rbtdb, rbtversion, rbtnode); + if (changed == NULL) { + free_rdataset(rbtdb, rbtdb->common.mctx, newheader); + return (ISC_R_NOMEMORY); + } + } + + newheader_nx = NONEXISTENT(newheader) ? ISC_TRUE : ISC_FALSE; + topheader_prev = NULL; + + negtype = 0; + if (rbtversion == NULL && !newheader_nx) { + rdtype = RBTDB_RDATATYPE_BASE(newheader->type); + if (rdtype == 0) { + /* + * We're adding a negative cache entry. + */ + covers = RBTDB_RDATATYPE_EXT(newheader->type); + if (covers == dns_rdatatype_any) { + /* + * We're adding an negative cache entry + * which covers all types (NXDOMAIN, + * NODATA(QTYPE=ANY)). + * + * We make all other data stale so that the + * only rdataset that can be found at this + * node is the negative cache entry. + */ + for (topheader = rbtnode->data; + topheader != NULL; + topheader = topheader->next) { + set_ttl(rbtdb, topheader, 0); + topheader->attributes |= + RDATASET_ATTR_STALE; + } + rbtnode->dirty = 1; + goto find_header; + } + negtype = RBTDB_RDATATYPE_VALUE(covers, 0); + } else { + /* + * We're adding something that isn't a + * negative cache entry. Look for an extant + * non-stale NXDOMAIN/NODATA(QTYPE=ANY) negative + * cache entry. + */ + for (topheader = rbtnode->data; + topheader != NULL; + topheader = topheader->next) { + if (topheader->type == + RBTDB_RDATATYPE_NCACHEANY) + break; + } + if (topheader != NULL && EXISTS(topheader) && + topheader->rdh_ttl > now) { + /* + * Found one. + */ + if (trust < topheader->trust) { + /* + * The NXDOMAIN/NODATA(QTYPE=ANY) + * is more trusted. + */ + free_rdataset(rbtdb, + rbtdb->common.mctx, + newheader); + if (addedrdataset != NULL) + bind_rdataset(rbtdb, rbtnode, + topheader, now, + addedrdataset); + return (DNS_R_UNCHANGED); + } + /* + * The new rdataset is better. Expire the + * NXDOMAIN/NODATA(QTYPE=ANY). + */ + set_ttl(rbtdb, topheader, 0); + topheader->attributes |= RDATASET_ATTR_STALE; + rbtnode->dirty = 1; + topheader = NULL; + goto find_header; + } + negtype = RBTDB_RDATATYPE_VALUE(0, rdtype); + } + } + + for (topheader = rbtnode->data; + topheader != NULL; + topheader = topheader->next) { + if (topheader->type == newheader->type || + topheader->type == negtype) + break; + topheader_prev = topheader; + } find_header: - /* - * If header isn't NULL, we've found the right type. There may be - * IGNORE rdatasets between the top of the chain and the first real - * data. We skip over them. - */ - header = topheader; - while (header != NULL && IGNORE(header)) - header = header->down; - if (header != NULL) { - header_nx = NONEXISTENT(header) ? ISC_TRUE : ISC_FALSE; - - /* - * Deleting an already non-existent rdataset has no effect. - */ - if (header_nx && newheader_nx) { - free_rdataset(rbtdb, rbtdb->common.mctx, newheader); - return (DNS_R_UNCHANGED); - } - - /* - * Trying to add an rdataset with lower trust to a cache DB - * has no effect, provided that the cache data isn't stale. - */ - if (rbtversion == NULL && trust < header->trust && - (header->rdh_ttl > now || header_nx)) { - newheader->attributes |= RDATASET_ATTR_CANCELED; - free_rdataset(rbtdb, rbtdb->common.mctx, newheader); - if (addedrdataset != NULL) - bind_rdataset(rbtdb, rbtnode, header, now, - addedrdataset); - return (DNS_R_UNCHANGED); - } - - /* - * Don't merge if a nonexistent rdataset is involved. - */ - if (merge && (header_nx || newheader_nx)) - merge = ISC_FALSE; - - /* - * If 'merge' is ISC_TRUE, we'll try to create a new rdataset - * that is the union of 'newheader' and 'header'. - */ - if (merge) { - unsigned int flags = 0; - INSIST(rbtversion->serial >= header->serial); - merged = NULL; - result = ISC_R_SUCCESS; - - if ((options & DNS_DBADD_EXACT) != 0) - flags |= DNS_RDATASLAB_EXACT; - if ((options & DNS_DBADD_EXACTTTL) != 0 && - newheader->rdh_ttl != header->rdh_ttl) - result = DNS_R_NOTEXACT; - else if (newheader->rdh_ttl != header->rdh_ttl) - flags |= DNS_RDATASLAB_FORCE; - if (result == ISC_R_SUCCESS) - result = dns_rdataslab_merge( - (unsigned char *)header, - (unsigned char *)newheader, - (unsigned int)(sizeof(*newheader)), - rbtdb->common.mctx, - rbtdb->common.rdclass, - (dns_rdatatype_t)header->type, - flags, &merged); - if (result == ISC_R_SUCCESS) { - /* - * If 'header' has the same serial number as - * we do, we could clean it up now if we knew - * that our caller had no references to it. - * We don't know this, however, so we leave it - * alone. It will get cleaned up when - * clean_zone_node() runs. - */ - free_rdataset(rbtdb, rbtdb->common.mctx, - newheader); - newheader = (rdatasetheader_t *)merged; - } else { - free_rdataset(rbtdb, rbtdb->common.mctx, - newheader); - return (result); - } - } - /* - * Don't replace existing NS, A and AAAA RRsets - * in the cache if they are already exist. This - * prevents named being locked to old servers. - * Don't lower trust of existing record if the - * update is forced. - */ - if (IS_CACHE(rbtdb) && header->rdh_ttl > now && - header->type == dns_rdatatype_ns && - !header_nx && !newheader_nx && - header->trust >= newheader->trust && - dns_rdataslab_equalx((unsigned char *)header, - (unsigned char *)newheader, - (unsigned int)(sizeof(*newheader)), - rbtdb->common.rdclass, - (dns_rdatatype_t)header->type)) { - /* - * Honour the new ttl if it is less than the - * older one. - */ - if (header->rdh_ttl > newheader->rdh_ttl) - set_ttl(rbtdb, header, newheader->rdh_ttl); - if (header->noqname == NULL && - newheader->noqname != NULL) { - header->noqname = newheader->noqname; - newheader->noqname = NULL; - } - newheader->attributes |= RDATASET_ATTR_CANCELED; - free_rdataset(rbtdb, rbtdb->common.mctx, newheader); - if (addedrdataset != NULL) - bind_rdataset(rbtdb, rbtnode, header, now, - addedrdataset); - return (ISC_R_SUCCESS); - } - if (IS_CACHE(rbtdb) && header->rdh_ttl > now && - (header->type == dns_rdatatype_a || - header->type == dns_rdatatype_aaaa) && - !header_nx && !newheader_nx && - header->trust >= newheader->trust && - dns_rdataslab_equal((unsigned char *)header, - (unsigned char *)newheader, - (unsigned int)(sizeof(*newheader)))) { - /* - * Honour the new ttl if it is less than the - * older one. - */ - if (header->rdh_ttl > newheader->rdh_ttl) - set_ttl(rbtdb, header, newheader->rdh_ttl); - if (header->noqname == NULL && - newheader->noqname != NULL) { - header->noqname = newheader->noqname; - newheader->noqname = NULL; - } - newheader->attributes |= RDATASET_ATTR_CANCELED; - free_rdataset(rbtdb, rbtdb->common.mctx, newheader); - if (addedrdataset != NULL) - bind_rdataset(rbtdb, rbtnode, header, now, - addedrdataset); - return (ISC_R_SUCCESS); - } - INSIST(rbtversion == NULL || - rbtversion->serial >= topheader->serial); - if (topheader_prev != NULL) - topheader_prev->next = newheader; - else - rbtnode->data = newheader; - newheader->next = topheader->next; - if (loading) { - /* - * There are no other references to 'header' when - * loading, so we MAY clean up 'header' now. - * Since we don't generate changed records when - * loading, we MUST clean up 'header' now. - */ - newheader->down = NULL; - free_rdataset(rbtdb, rbtdb->common.mctx, header); - } else { - newheader->down = topheader; - topheader->next = newheader; - rbtnode->dirty = 1; - if (changed != NULL) - changed->dirty = ISC_TRUE; - if (rbtversion == NULL) { - set_ttl(rbtdb, header, 0); - header->attributes |= RDATASET_ATTR_STALE; - } - if (IS_CACHE(rbtdb)) { - int idx = newheader->node->locknum; - - ISC_LIST_PREPEND(rbtdb->rdatasets[idx], - newheader, lru_link); - - /* - * XXXMLG We don't check the return value - * here. If it fails, we will not do TTL - * based expiry on this node. However, we - * will do it on the LRU side, so memory - * will not leak... for long. - */ - isc_heap_insert(rbtdb->heaps[idx], newheader); - } -#ifdef LRU_DEBUG - cachestat_update(rbtdb, newheader); -#endif - } - } else { - /* - * No non-IGNORED rdatasets of the given type exist at - * this node. - */ - - /* - * If we're trying to delete the type, don't bother. - */ - if (newheader_nx) { - free_rdataset(rbtdb, rbtdb->common.mctx, newheader); - return (DNS_R_UNCHANGED); - } - - if (topheader != NULL) { - /* - * We have an list of rdatasets of the given type, - * but they're all marked IGNORE. We simply insert - * the new rdataset at the head of the list. - * - * Ignored rdatasets cannot occur during loading, so - * we INSIST on it. - */ - INSIST(!loading); - INSIST(rbtversion == NULL || - rbtversion->serial >= topheader->serial); - if (topheader_prev != NULL) - topheader_prev->next = newheader; - else - rbtnode->data = newheader; - newheader->next = topheader->next; - newheader->down = topheader; - topheader->next = newheader; - rbtnode->dirty = 1; - if (changed != NULL) - changed->dirty = ISC_TRUE; - } else { - /* - * No rdatasets of the given type exist at the node. - */ - newheader->next = rbtnode->data; - newheader->down = NULL; - rbtnode->data = newheader; - } - if (IS_CACHE(rbtdb)) { - int idx = newheader->node->locknum; - ISC_LIST_PREPEND(rbtdb->rdatasets[idx], - newheader, lru_link); - isc_heap_insert(rbtdb->heaps[idx], newheader); - } -#ifdef LRU_DEBUG - cachestat_update(rbtdb, newheader); -#endif - } - - /* - * Check if the node now contains CNAME and other data. - */ - if (rbtversion != NULL && - cname_and_other_data(rbtnode, rbtversion->serial)) - return (DNS_R_CNAMEANDOTHER); - - if (addedrdataset != NULL) - bind_rdataset(rbtdb, rbtnode, newheader, now, addedrdataset); - - return (ISC_R_SUCCESS); + /* + * If header isn't NULL, we've found the right type. There may be + * IGNORE rdatasets between the top of the chain and the first real + * data. We skip over them. + */ + header = topheader; + while (header != NULL && IGNORE(header)) + header = header->down; + if (header != NULL) { + header_nx = NONEXISTENT(header) ? ISC_TRUE : ISC_FALSE; + + /* + * Deleting an already non-existent rdataset has no effect. + */ + if (header_nx && newheader_nx) { + free_rdataset(rbtdb, rbtdb->common.mctx, newheader); + return (DNS_R_UNCHANGED); + } + + /* + * Trying to add an rdataset with lower trust to a cache DB + * has no effect, provided that the cache data isn't stale. + */ + if (rbtversion == NULL && trust < header->trust && + (header->rdh_ttl > now || header_nx)) { + free_rdataset(rbtdb, rbtdb->common.mctx, newheader); + if (addedrdataset != NULL) + bind_rdataset(rbtdb, rbtnode, header, now, + addedrdataset); + return (DNS_R_UNCHANGED); + } + + /* + * Don't merge if a nonexistent rdataset is involved. + */ + if (merge && (header_nx || newheader_nx)) + merge = ISC_FALSE; + + /* + * If 'merge' is ISC_TRUE, we'll try to create a new rdataset + * that is the union of 'newheader' and 'header'. + */ + if (merge) { + unsigned int flags = 0; + INSIST(rbtversion->serial >= header->serial); + merged = NULL; + result = ISC_R_SUCCESS; + + if ((options & DNS_DBADD_EXACT) != 0) + flags |= DNS_RDATASLAB_EXACT; + if ((options & DNS_DBADD_EXACTTTL) != 0 && + newheader->rdh_ttl != header->rdh_ttl) + result = DNS_R_NOTEXACT; + else if (newheader->rdh_ttl != header->rdh_ttl) + flags |= DNS_RDATASLAB_FORCE; + if (result == ISC_R_SUCCESS) + result = dns_rdataslab_merge( + (unsigned char *)header, + (unsigned char *)newheader, + (unsigned int)(sizeof(*newheader)), + rbtdb->common.mctx, + rbtdb->common.rdclass, + (dns_rdatatype_t)header->type, + flags, &merged); + if (result == ISC_R_SUCCESS) { + /* + * If 'header' has the same serial number as + * we do, we could clean it up now if we knew + * that our caller had no references to it. + * We don't know this, however, so we leave it + * alone. It will get cleaned up when + * clean_zone_node() runs. + */ + free_rdataset(rbtdb, rbtdb->common.mctx, + newheader); + newheader = (rdatasetheader_t *)merged; + } else { + free_rdataset(rbtdb, rbtdb->common.mctx, + newheader); + return (result); + } + } + /* + * Don't replace existing NS, A and AAAA RRsets + * in the cache if they are already exist. This + * prevents named being locked to old servers. + * Don't lower trust of existing record if the + * update is forced. + */ + if (IS_CACHE(rbtdb) && header->rdh_ttl > now && + header->type == dns_rdatatype_ns && + !header_nx && !newheader_nx && + header->trust >= newheader->trust && + dns_rdataslab_equalx((unsigned char *)header, + (unsigned char *)newheader, + (unsigned int)(sizeof(*newheader)), + rbtdb->common.rdclass, + (dns_rdatatype_t)header->type)) { + /* + * Honour the new ttl if it is less than the + * older one. + */ + if (header->rdh_ttl > newheader->rdh_ttl) + set_ttl(rbtdb, header, newheader->rdh_ttl); + if (header->noqname == NULL && + newheader->noqname != NULL) { + header->noqname = newheader->noqname; + newheader->noqname = NULL; + } + free_rdataset(rbtdb, rbtdb->common.mctx, newheader); + if (addedrdataset != NULL) + bind_rdataset(rbtdb, rbtnode, header, now, + addedrdataset); + return (ISC_R_SUCCESS); + } + if (IS_CACHE(rbtdb) && header->rdh_ttl > now && + (header->type == dns_rdatatype_a || + header->type == dns_rdatatype_aaaa) && + !header_nx && !newheader_nx && + header->trust >= newheader->trust && + dns_rdataslab_equal((unsigned char *)header, + (unsigned char *)newheader, + (unsigned int)(sizeof(*newheader)))) { + /* + * Honour the new ttl if it is less than the + * older one. + */ + if (header->rdh_ttl > newheader->rdh_ttl) + set_ttl(rbtdb, header, newheader->rdh_ttl); + if (header->noqname == NULL && + newheader->noqname != NULL) { + header->noqname = newheader->noqname; + newheader->noqname = NULL; + } + free_rdataset(rbtdb, rbtdb->common.mctx, newheader); + if (addedrdataset != NULL) + bind_rdataset(rbtdb, rbtnode, header, now, + addedrdataset); + return (ISC_R_SUCCESS); + } + INSIST(rbtversion == NULL || + rbtversion->serial >= topheader->serial); + if (topheader_prev != NULL) + topheader_prev->next = newheader; + else + rbtnode->data = newheader; + newheader->next = topheader->next; + if (loading) { + /* + * There are no other references to 'header' when + * loading, so we MAY clean up 'header' now. + * Since we don't generate changed records when + * loading, we MUST clean up 'header' now. + */ + newheader->down = NULL; + free_rdataset(rbtdb, rbtdb->common.mctx, header); + } else { + newheader->down = topheader; + topheader->next = newheader; + rbtnode->dirty = 1; + if (changed != NULL) + changed->dirty = ISC_TRUE; + if (rbtversion == NULL) { + set_ttl(rbtdb, header, 0); + header->attributes |= RDATASET_ATTR_STALE; + } + if (IS_CACHE(rbtdb)) { + int idx = newheader->node->locknum; + + ISC_LIST_PREPEND(rbtdb->rdatasets[idx], + newheader, lru_link); + + /* + * XXXMLG We don't check the return value + * here. If it fails, we will not do TTL + * based expiry on this node. However, we + * will do it on the LRU side, so memory + * will not leak... for long. + */ + isc_heap_insert(rbtdb->heaps[idx], newheader); + } + } + } else { + /* + * No non-IGNORED rdatasets of the given type exist at + * this node. + */ + + /* + * If we're trying to delete the type, don't bother. + */ + if (newheader_nx) { + free_rdataset(rbtdb, rbtdb->common.mctx, newheader); + return (DNS_R_UNCHANGED); + } + + if (topheader != NULL) { + /* + * We have an list of rdatasets of the given type, + * but they're all marked IGNORE. We simply insert + * the new rdataset at the head of the list. + * + * Ignored rdatasets cannot occur during loading, so + * we INSIST on it. + */ + INSIST(!loading); + INSIST(rbtversion == NULL || + rbtversion->serial >= topheader->serial); + if (topheader_prev != NULL) + topheader_prev->next = newheader; + else + rbtnode->data = newheader; + newheader->next = topheader->next; + newheader->down = topheader; + topheader->next = newheader; + rbtnode->dirty = 1; + if (changed != NULL) + changed->dirty = ISC_TRUE; + } else { + /* + * No rdatasets of the given type exist at the node. + */ + newheader->next = rbtnode->data; + newheader->down = NULL; + rbtnode->data = newheader; + } + if (IS_CACHE(rbtdb)) { + int idx = newheader->node->locknum; + ISC_LIST_PREPEND(rbtdb->rdatasets[idx], + newheader, lru_link); + isc_heap_insert(rbtdb->heaps[idx], newheader); + } + } + + /* + * Check if the node now contains CNAME and other data. + */ + if (rbtversion != NULL && + cname_and_other_data(rbtnode, rbtversion->serial)) + return (DNS_R_CNAMEANDOTHER); + + if (addedrdataset != NULL) + bind_rdataset(rbtdb, rbtnode, newheader, now, addedrdataset); + + return (ISC_R_SUCCESS); } static inline isc_boolean_t delegating_type(dns_rbtdb_t *rbtdb, dns_rbtnode_t *node, - rbtdb_rdatatype_t type) + rbtdb_rdatatype_t type) { - if (IS_CACHE(rbtdb)) { - if (type == dns_rdatatype_dname) - return (ISC_TRUE); - else - return (ISC_FALSE); - } else if (type == dns_rdatatype_dname || - (type == dns_rdatatype_ns && - (node != rbtdb->origin_node || IS_STUB(rbtdb)))) - return (ISC_TRUE); - return (ISC_FALSE); + if (IS_CACHE(rbtdb)) { + if (type == dns_rdatatype_dname) + return (ISC_TRUE); + else + return (ISC_FALSE); + } else if (type == dns_rdatatype_dname || + (type == dns_rdatatype_ns && + (node != rbtdb->origin_node || IS_STUB(rbtdb)))) + return (ISC_TRUE); + return (ISC_FALSE); } static inline isc_result_t addnoqname(dns_rbtdb_t *rbtdb, rdatasetheader_t *newheader, - dns_rdataset_t *rdataset) + dns_rdataset_t *rdataset) { - struct noqname *noqname; - isc_mem_t *mctx = rbtdb->common.mctx; - dns_name_t name; - dns_rdataset_t nsec, nsecsig; - isc_result_t result; - isc_region_t r; - - dns_name_init(&name, NULL); - dns_rdataset_init(&nsec); - dns_rdataset_init(&nsecsig); - - result = dns_rdataset_getnoqname(rdataset, &name, &nsec, &nsecsig); - RUNTIME_CHECK(result == ISC_R_SUCCESS); - - noqname = isc_mem_get(mctx, sizeof(*noqname)); - if (noqname == NULL) { - result = ISC_R_NOMEMORY; - goto cleanup; - } - dns_name_init(&noqname->name, NULL); - noqname->nsec = NULL; - noqname->nsecsig = NULL; - result = dns_name_dup(&name, mctx, &noqname->name); - if (result != ISC_R_SUCCESS) - goto cleanup; - result = dns_rdataslab_fromrdataset(&nsec, mctx, &r, 0); - if (result != ISC_R_SUCCESS) - goto cleanup; - noqname->nsec = r.base; - result = dns_rdataslab_fromrdataset(&nsecsig, mctx, &r, 0); - if (result != ISC_R_SUCCESS) - goto cleanup; - noqname->nsecsig = r.base; - dns_rdataset_disassociate(&nsec); - dns_rdataset_disassociate(&nsecsig); - newheader->noqname = noqname; - return (ISC_R_SUCCESS); + struct noqname *noqname; + isc_mem_t *mctx = rbtdb->common.mctx; + dns_name_t name; + dns_rdataset_t nsec, nsecsig; + isc_result_t result; + isc_region_t r; + + dns_name_init(&name, NULL); + dns_rdataset_init(&nsec); + dns_rdataset_init(&nsecsig); + + result = dns_rdataset_getnoqname(rdataset, &name, &nsec, &nsecsig); + RUNTIME_CHECK(result == ISC_R_SUCCESS); + + noqname = isc_mem_get(mctx, sizeof(*noqname)); + if (noqname == NULL) { + result = ISC_R_NOMEMORY; + goto cleanup; + } + dns_name_init(&noqname->name, NULL); + noqname->nsec = NULL; + noqname->nsecsig = NULL; + result = dns_name_dup(&name, mctx, &noqname->name); + if (result != ISC_R_SUCCESS) + goto cleanup; + result = dns_rdataslab_fromrdataset(&nsec, mctx, &r, 0); + if (result != ISC_R_SUCCESS) + goto cleanup; + noqname->nsec = r.base; + result = dns_rdataslab_fromrdataset(&nsecsig, mctx, &r, 0); + if (result != ISC_R_SUCCESS) + goto cleanup; + noqname->nsecsig = r.base; + dns_rdataset_disassociate(&nsec); + dns_rdataset_disassociate(&nsecsig); + newheader->noqname = noqname; + return (ISC_R_SUCCESS); cleanup: - dns_rdataset_disassociate(&nsec); - dns_rdataset_disassociate(&nsecsig); - free_noqname(mctx, &noqname); - return(result); + dns_rdataset_disassociate(&nsec); + dns_rdataset_disassociate(&nsecsig); + free_noqname(mctx, &noqname); + return(result); } static isc_result_t addrdataset(dns_db_t *db, dns_dbnode_t *node, dns_dbversion_t *version, - isc_stdtime_t now, dns_rdataset_t *rdataset, unsigned int options, - dns_rdataset_t *addedrdataset) + isc_stdtime_t now, dns_rdataset_t *rdataset, unsigned int options, + dns_rdataset_t *addedrdataset) { - dns_rbtdb_t *rbtdb = (dns_rbtdb_t *)db; - dns_rbtnode_t *rbtnode = (dns_rbtnode_t *)node; - rbtdb_version_t *rbtversion = version; - isc_region_t region; - rdatasetheader_t *newheader; - isc_result_t result; - isc_boolean_t delegating; - isc_boolean_t tree_locked = ISC_FALSE; - - REQUIRE(VALID_RBTDB(rbtdb)); - - if (rbtversion == NULL) { - if (now == 0) - isc_stdtime_get(&now); - } else - now = 0; - - result = dns_rdataslab_fromrdataset(rdataset, rbtdb->common.mctx, - ®ion, - sizeof(rdatasetheader_t)); - if (result != ISC_R_SUCCESS) - return (result); - - newheader = (rdatasetheader_t *)region.base; - init_rdataset(rbtdb, newheader); - set_ttl(rbtdb, newheader, rdataset->ttl + now); - newheader->type = RBTDB_RDATATYPE_VALUE(rdataset->type, - rdataset->covers); - newheader->attributes = 0; - newheader->noqname = NULL; - newheader->count = init_count++; - newheader->trust = rdataset->trust; - newheader->additional_auth = NULL; - newheader->additional_glue = NULL; - newheader->last_used = now; - newheader->node = rbtnode; - if (rbtversion != NULL) { - newheader->serial = rbtversion->serial; - now = 0; - } else { - newheader->serial = 1; - if ((rdataset->attributes & DNS_RDATASETATTR_NXDOMAIN) != 0) - newheader->attributes |= RDATASET_ATTR_NXDOMAIN; - if ((rdataset->attributes & DNS_RDATASETATTR_NOQNAME) != 0) { - result = addnoqname(rbtdb, newheader, rdataset); - if (result != ISC_R_SUCCESS) { - free_rdataset(rbtdb, rbtdb->common.mctx, - newheader); - return (result); - } - } - } - - /* - * If we're adding a delegation type (e.g. NS or DNAME for a zone, - * just DNAME for the cache), then we need to set the callback bit - * on the node. - */ - if (delegating_type(rbtdb, rbtnode, rdataset->type)) - delegating = ISC_TRUE; - else - delegating = ISC_FALSE; - - /* - * If we're adding a delegation type or the DB is a cache in an overmem - * state, hold an exclusive lock on the tree. In the latter case - * the lock does not necessarily have to be acquired but it will help - * purge stale entries more effectively. - */ - if (delegating || (IS_CACHE(rbtdb) && rbtdb->overmem)) { - tree_locked = ISC_TRUE; - RWLOCK(&rbtdb->tree_lock, isc_rwlocktype_write); - } - - NODE_LOCK(&rbtdb->node_locks[rbtnode->locknum].lock, - isc_rwlocktype_write); - -#ifdef LRU_DEBUG - /* for debug: statistics update */ - if (IS_CACHE(rbtdb) && rdataset->rdclass == dns_rdataclass_in) { - /* XXX: don't use lock for brevity */ - newheader->attributes |= RDATASET_ATTR_CACHE; - rbtdb->cachestat.cache_total++; - rbtdb->cachestat.cache_current++; - if (rdataset->type == 0) { - rbtdb->cachestat.ncache_total++; - rbtdb->cachestat.ncache_current++; - } - if (rdataset->type == dns_rdatatype_a) { - rbtdb->cachestat.a_total++; - rbtdb->cachestat.a_current++; - } else if (rdataset->type == dns_rdatatype_aaaa) { - rbtdb->cachestat.aaaa_total++; - rbtdb->cachestat.aaaa_current++; - } else if (rdataset->type == dns_rdatatype_ns) { - rbtdb->cachestat.ns_total++; - rbtdb->cachestat.ns_current++; - } else if (rdataset->type == dns_rdatatype_ptr) { - rbtdb->cachestat.ptr_total++; - rbtdb->cachestat.ptr_current++; - } - if (rdataset->trust == dns_trust_glue && - (rdataset->type == dns_rdatatype_a || - rdataset->type == dns_rdatatype_aaaa)) { - rbtdb->cachestat.glue_total++; - rbtdb->cachestat.glue_current++; - } - if (rdataset->trust == dns_trust_additional && - (rdataset->type == dns_rdatatype_a || - rdataset->type == dns_rdatatype_aaaa)) { - rbtdb->cachestat.additional_total++; - rbtdb->cachestat.additional_current++; - } - } -#endif - - if (IS_CACHE(rbtdb)) { - if (tree_locked) - cleanup_dead_nodes(rbtdb, rbtnode->locknum); - check_stale_cache(rbtdb, rbtnode, now, tree_locked); - - /* - * If we've been holding a write lock on the tree just for - * cleaning, we can release it now. However, we still need the - * node lock. - */ - if (tree_locked && !delegating) { - RWUNLOCK(&rbtdb->tree_lock, isc_rwlocktype_write); - tree_locked = ISC_FALSE; - } - } - - result = add(rbtdb, rbtnode, rbtversion, newheader, options, ISC_FALSE, - addedrdataset, now); - if (result == ISC_R_SUCCESS && delegating) - rbtnode->find_callback = 1; - - NODE_UNLOCK(&rbtdb->node_locks[rbtnode->locknum].lock, - isc_rwlocktype_write); - - if (tree_locked) - RWUNLOCK(&rbtdb->tree_lock, isc_rwlocktype_write); - - /* - * Update the zone's secure status. If version is non-NULL - * this is defered until closeversion() is called. - */ - if (result == ISC_R_SUCCESS && version == NULL && !IS_CACHE(rbtdb)) - rbtdb->secure = iszonesecure(db, rbtdb->origin_node); - - return (result); + dns_rbtdb_t *rbtdb = (dns_rbtdb_t *)db; + dns_rbtnode_t *rbtnode = (dns_rbtnode_t *)node; + rbtdb_version_t *rbtversion = version; + isc_region_t region; + rdatasetheader_t *newheader; + isc_result_t result; + isc_boolean_t delegating; + isc_boolean_t tree_locked = ISC_FALSE; + + REQUIRE(VALID_RBTDB(rbtdb)); + + if (rbtversion == NULL) { + if (now == 0) + isc_stdtime_get(&now); + } else + now = 0; + + result = dns_rdataslab_fromrdataset(rdataset, rbtdb->common.mctx, + ®ion, + sizeof(rdatasetheader_t)); + if (result != ISC_R_SUCCESS) + return (result); + + newheader = (rdatasetheader_t *)region.base; + init_rdataset(rbtdb, newheader); + set_ttl(rbtdb, newheader, rdataset->ttl + now); + newheader->type = RBTDB_RDATATYPE_VALUE(rdataset->type, + rdataset->covers); + newheader->attributes = 0; + newheader->noqname = NULL; + newheader->count = init_count++; + newheader->trust = rdataset->trust; + newheader->additional_auth = NULL; + newheader->additional_glue = NULL; + newheader->last_used = now; + newheader->node = rbtnode; + if (rbtversion != NULL) { + newheader->serial = rbtversion->serial; + now = 0; + } else { + newheader->serial = 1; + if ((rdataset->attributes & DNS_RDATASETATTR_NXDOMAIN) != 0) + newheader->attributes |= RDATASET_ATTR_NXDOMAIN; + if ((rdataset->attributes & DNS_RDATASETATTR_NOQNAME) != 0) { + result = addnoqname(rbtdb, newheader, rdataset); + if (result != ISC_R_SUCCESS) { + free_rdataset(rbtdb, rbtdb->common.mctx, + newheader); + return (result); + } + } + } + + /* + * If we're adding a delegation type (e.g. NS or DNAME for a zone, + * just DNAME for the cache), then we need to set the callback bit + * on the node. + */ + if (delegating_type(rbtdb, rbtnode, rdataset->type)) + delegating = ISC_TRUE; + else + delegating = ISC_FALSE; + + /* + * If we're adding a delegation type or the DB is a cache in an overmem + * state, hold an exclusive lock on the tree. In the latter case + * the lock does not necessarily have to be acquired but it will help + * purge stale entries more effectively. + */ + if (delegating || (IS_CACHE(rbtdb) && rbtdb->overmem)) { + tree_locked = ISC_TRUE; + RWLOCK(&rbtdb->tree_lock, isc_rwlocktype_write); + } + + NODE_LOCK(&rbtdb->node_locks[rbtnode->locknum].lock, + isc_rwlocktype_write); + + if (rbtdb->rrsetstats != NULL) { + newheader->attributes |= RDATASET_ATTR_STATCOUNT; + update_rrsetstats(rbtdb, newheader, ISC_TRUE); + } + + if (IS_CACHE(rbtdb)) { + if (tree_locked) + cleanup_dead_nodes(rbtdb, rbtnode->locknum); + check_stale_cache(rbtdb, rbtnode, now, tree_locked); + + /* + * If we've been holding a write lock on the tree just for + * cleaning, we can release it now. However, we still need the + * node lock. + */ + if (tree_locked && !delegating) { + RWUNLOCK(&rbtdb->tree_lock, isc_rwlocktype_write); + tree_locked = ISC_FALSE; + } + } + + result = add(rbtdb, rbtnode, rbtversion, newheader, options, ISC_FALSE, + addedrdataset, now); + if (result == ISC_R_SUCCESS && delegating) + rbtnode->find_callback = 1; + + NODE_UNLOCK(&rbtdb->node_locks[rbtnode->locknum].lock, + isc_rwlocktype_write); + + if (tree_locked) + RWUNLOCK(&rbtdb->tree_lock, isc_rwlocktype_write); + + /* + * Update the zone's secure status. If version is non-NULL + * this is defered until closeversion() is called. + */ + if (result == ISC_R_SUCCESS && version == NULL && !IS_CACHE(rbtdb)) + rbtdb->secure = iszonesecure(db, rbtdb->origin_node); + + return (result); } static isc_result_t subtractrdataset(dns_db_t *db, dns_dbnode_t *node, dns_dbversion_t *version, - dns_rdataset_t *rdataset, unsigned int options, - dns_rdataset_t *newrdataset) + dns_rdataset_t *rdataset, unsigned int options, + dns_rdataset_t *newrdataset) { - dns_rbtdb_t *rbtdb = (dns_rbtdb_t *)db; - dns_rbtnode_t *rbtnode = (dns_rbtnode_t *)node; - rbtdb_version_t *rbtversion = version; - rdatasetheader_t *topheader, *topheader_prev, *header, *newheader; - unsigned char *subresult; - isc_region_t region; - isc_result_t result; - rbtdb_changed_t *changed; - - REQUIRE(VALID_RBTDB(rbtdb)); - - result = dns_rdataslab_fromrdataset(rdataset, rbtdb->common.mctx, - ®ion, - sizeof(rdatasetheader_t)); - if (result != ISC_R_SUCCESS) - return (result); - newheader = (rdatasetheader_t *)region.base; - init_rdataset(rbtdb, newheader); - set_ttl(rbtdb, newheader, rdataset->ttl); - newheader->type = RBTDB_RDATATYPE_VALUE(rdataset->type, - rdataset->covers); - newheader->attributes = 0; - newheader->serial = rbtversion->serial; - newheader->trust = 0; - newheader->noqname = NULL; - newheader->count = init_count++; - newheader->additional_auth = NULL; - newheader->additional_glue = NULL; - newheader->last_used = 0; - newheader->node = rbtnode; - - NODE_LOCK(&rbtdb->node_locks[rbtnode->locknum].lock, - isc_rwlocktype_write); - - changed = add_changed(rbtdb, rbtversion, rbtnode); - if (changed == NULL) { - free_rdataset(rbtdb, rbtdb->common.mctx, newheader); - NODE_UNLOCK(&rbtdb->node_locks[rbtnode->locknum].lock, - isc_rwlocktype_write); - return (ISC_R_NOMEMORY); - } - - topheader_prev = NULL; - for (topheader = rbtnode->data; - topheader != NULL; - topheader = topheader->next) { - if (topheader->type == newheader->type) - break; - topheader_prev = topheader; - } - /* - * If header isn't NULL, we've found the right type. There may be - * IGNORE rdatasets between the top of the chain and the first real - * data. We skip over them. - */ - header = topheader; - while (header != NULL && IGNORE(header)) - header = header->down; - if (header != NULL && EXISTS(header)) { - unsigned int flags = 0; - subresult = NULL; - result = ISC_R_SUCCESS; - if ((options & DNS_DBSUB_EXACT) != 0) { - flags |= DNS_RDATASLAB_EXACT; - if (newheader->rdh_ttl != header->rdh_ttl) - result = DNS_R_NOTEXACT; - } - if (result == ISC_R_SUCCESS) - result = dns_rdataslab_subtract( - (unsigned char *)header, - (unsigned char *)newheader, - (unsigned int)(sizeof(*newheader)), - rbtdb->common.mctx, - rbtdb->common.rdclass, - (dns_rdatatype_t)header->type, - flags, &subresult); - if (result == ISC_R_SUCCESS) { - free_rdataset(rbtdb, rbtdb->common.mctx, newheader); - newheader = (rdatasetheader_t *)subresult; - /* - * We have to set the serial since the rdataslab - * subtraction routine copies the reserved portion of - * header, not newheader. - */ - newheader->serial = rbtversion->serial; - /* - * XXXJT: dns_rdataslab_subtract() copied the pointers - * to additional info. We need to clear these fields - * to avoid having duplicated references. - */ - newheader->additional_auth = NULL; - newheader->additional_glue = NULL; - } else if (result == DNS_R_NXRRSET) { - /* - * This subtraction would remove all of the rdata; - * add a nonexistent header instead. - */ - free_rdataset(rbtdb, rbtdb->common.mctx, newheader); - newheader = new_rdataset(rbtdb, rbtdb->common.mctx); - if (newheader == NULL) { - result = ISC_R_NOMEMORY; - goto unlock; - } - set_ttl(rbtdb, newheader, 0); - newheader->type = topheader->type; - newheader->attributes = RDATASET_ATTR_NONEXISTENT; - newheader->trust = 0; - newheader->serial = rbtversion->serial; - newheader->noqname = NULL; - newheader->count = 0; - newheader->additional_auth = NULL; - newheader->additional_glue = NULL; - } else { - free_rdataset(rbtdb, rbtdb->common.mctx, newheader); - goto unlock; - } - - /* - * If we're here, we want to link newheader in front of - * topheader. - */ - INSIST(rbtversion->serial >= topheader->serial); - if (topheader_prev != NULL) - topheader_prev->next = newheader; - else - rbtnode->data = newheader; - newheader->next = topheader->next; - newheader->down = topheader; - topheader->next = newheader; - rbtnode->dirty = 1; - changed->dirty = ISC_TRUE; - } else { - /* - * The rdataset doesn't exist, so we don't need to do anything - * to satisfy the deletion request. - */ - free_rdataset(rbtdb, rbtdb->common.mctx, newheader); - if ((options & DNS_DBSUB_EXACT) != 0) - result = DNS_R_NOTEXACT; - else - result = DNS_R_UNCHANGED; - } - - if (result == ISC_R_SUCCESS && newrdataset != NULL) - bind_rdataset(rbtdb, rbtnode, newheader, 0, newrdataset); + dns_rbtdb_t *rbtdb = (dns_rbtdb_t *)db; + dns_rbtnode_t *rbtnode = (dns_rbtnode_t *)node; + rbtdb_version_t *rbtversion = version; + rdatasetheader_t *topheader, *topheader_prev, *header, *newheader; + unsigned char *subresult; + isc_region_t region; + isc_result_t result; + rbtdb_changed_t *changed; + + REQUIRE(VALID_RBTDB(rbtdb)); + + result = dns_rdataslab_fromrdataset(rdataset, rbtdb->common.mctx, + ®ion, + sizeof(rdatasetheader_t)); + if (result != ISC_R_SUCCESS) + return (result); + newheader = (rdatasetheader_t *)region.base; + init_rdataset(rbtdb, newheader); + set_ttl(rbtdb, newheader, rdataset->ttl); + newheader->type = RBTDB_RDATATYPE_VALUE(rdataset->type, + rdataset->covers); + newheader->attributes = 0; + newheader->serial = rbtversion->serial; + newheader->trust = 0; + newheader->noqname = NULL; + newheader->count = init_count++; + newheader->additional_auth = NULL; + newheader->additional_glue = NULL; + newheader->last_used = 0; + newheader->node = rbtnode; + + NODE_LOCK(&rbtdb->node_locks[rbtnode->locknum].lock, + isc_rwlocktype_write); + + changed = add_changed(rbtdb, rbtversion, rbtnode); + if (changed == NULL) { + free_rdataset(rbtdb, rbtdb->common.mctx, newheader); + NODE_UNLOCK(&rbtdb->node_locks[rbtnode->locknum].lock, + isc_rwlocktype_write); + return (ISC_R_NOMEMORY); + } + + topheader_prev = NULL; + for (topheader = rbtnode->data; + topheader != NULL; + topheader = topheader->next) { + if (topheader->type == newheader->type) + break; + topheader_prev = topheader; + } + /* + * If header isn't NULL, we've found the right type. There may be + * IGNORE rdatasets between the top of the chain and the first real + * data. We skip over them. + */ + header = topheader; + while (header != NULL && IGNORE(header)) + header = header->down; + if (header != NULL && EXISTS(header)) { + unsigned int flags = 0; + subresult = NULL; + result = ISC_R_SUCCESS; + if ((options & DNS_DBSUB_EXACT) != 0) { + flags |= DNS_RDATASLAB_EXACT; + if (newheader->rdh_ttl != header->rdh_ttl) + result = DNS_R_NOTEXACT; + } + if (result == ISC_R_SUCCESS) + result = dns_rdataslab_subtract( + (unsigned char *)header, + (unsigned char *)newheader, + (unsigned int)(sizeof(*newheader)), + rbtdb->common.mctx, + rbtdb->common.rdclass, + (dns_rdatatype_t)header->type, + flags, &subresult); + if (result == ISC_R_SUCCESS) { + free_rdataset(rbtdb, rbtdb->common.mctx, newheader); + newheader = (rdatasetheader_t *)subresult; + /* + * We have to set the serial since the rdataslab + * subtraction routine copies the reserved portion of + * header, not newheader. + */ + newheader->serial = rbtversion->serial; + /* + * XXXJT: dns_rdataslab_subtract() copied the pointers + * to additional info. We need to clear these fields + * to avoid having duplicated references. + */ + newheader->additional_auth = NULL; + newheader->additional_glue = NULL; + } else if (result == DNS_R_NXRRSET) { + /* + * This subtraction would remove all of the rdata; + * add a nonexistent header instead. + */ + free_rdataset(rbtdb, rbtdb->common.mctx, newheader); + newheader = new_rdataset(rbtdb, rbtdb->common.mctx); + if (newheader == NULL) { + result = ISC_R_NOMEMORY; + goto unlock; + } + set_ttl(rbtdb, newheader, 0); + newheader->type = topheader->type; + newheader->attributes = RDATASET_ATTR_NONEXISTENT; + newheader->trust = 0; + newheader->serial = rbtversion->serial; + newheader->noqname = NULL; + newheader->count = 0; + newheader->additional_auth = NULL; + newheader->additional_glue = NULL; + newheader->node = rbtnode; + newheader->last_used = 0; + } else { + free_rdataset(rbtdb, rbtdb->common.mctx, newheader); + goto unlock; + } + + /* + * If we're here, we want to link newheader in front of + * topheader. + */ + INSIST(rbtversion->serial >= topheader->serial); + if (topheader_prev != NULL) + topheader_prev->next = newheader; + else + rbtnode->data = newheader; + newheader->next = topheader->next; + newheader->down = topheader; + topheader->next = newheader; + rbtnode->dirty = 1; + changed->dirty = ISC_TRUE; + } else { + /* + * The rdataset doesn't exist, so we don't need to do anything + * to satisfy the deletion request. + */ + free_rdataset(rbtdb, rbtdb->common.mctx, newheader); + if ((options & DNS_DBSUB_EXACT) != 0) + result = DNS_R_NOTEXACT; + else + result = DNS_R_UNCHANGED; + } + + if (result == ISC_R_SUCCESS && newrdataset != NULL) + bind_rdataset(rbtdb, rbtnode, newheader, 0, newrdataset); unlock: - NODE_UNLOCK(&rbtdb->node_locks[rbtnode->locknum].lock, - isc_rwlocktype_write); + NODE_UNLOCK(&rbtdb->node_locks[rbtnode->locknum].lock, + isc_rwlocktype_write); - /* - * Update the zone's secure status. If version is non-NULL - * this is defered until closeversion() is called. - */ - if (result == ISC_R_SUCCESS && version == NULL && !IS_CACHE(rbtdb)) - rbtdb->secure = iszonesecure(db, rbtdb->origin_node); + /* + * Update the zone's secure status. If version is non-NULL + * this is defered until closeversion() is called. + */ + if (result == ISC_R_SUCCESS && version == NULL && !IS_CACHE(rbtdb)) + rbtdb->secure = iszonesecure(db, rbtdb->origin_node); - return (result); + return (result); } static isc_result_t deleterdataset(dns_db_t *db, dns_dbnode_t *node, dns_dbversion_t *version, - dns_rdatatype_t type, dns_rdatatype_t covers) + dns_rdatatype_t type, dns_rdatatype_t covers) { - dns_rbtdb_t *rbtdb = (dns_rbtdb_t *)db; - dns_rbtnode_t *rbtnode = (dns_rbtnode_t *)node; - rbtdb_version_t *rbtversion = version; - isc_result_t result; - rdatasetheader_t *newheader; - - REQUIRE(VALID_RBTDB(rbtdb)); - - if (type == dns_rdatatype_any) - return (ISC_R_NOTIMPLEMENTED); - if (type == dns_rdatatype_rrsig && covers == 0) - return (ISC_R_NOTIMPLEMENTED); - - newheader = new_rdataset(rbtdb, rbtdb->common.mctx); - if (newheader == NULL) - return (ISC_R_NOMEMORY); - set_ttl(rbtdb, newheader, 0); - newheader->type = RBTDB_RDATATYPE_VALUE(type, covers); - newheader->attributes = RDATASET_ATTR_NONEXISTENT; - newheader->trust = 0; - newheader->noqname = NULL; - newheader->additional_auth = NULL; - newheader->additional_glue = NULL; - if (rbtversion != NULL) - newheader->serial = rbtversion->serial; - else - newheader->serial = 0; - newheader->count = 0; - newheader->last_used = 0; - newheader->node = rbtnode; - - NODE_LOCK(&rbtdb->node_locks[rbtnode->locknum].lock, - isc_rwlocktype_write); - - result = add(rbtdb, rbtnode, rbtversion, newheader, DNS_DBADD_FORCE, - ISC_FALSE, NULL, 0); - - NODE_UNLOCK(&rbtdb->node_locks[rbtnode->locknum].lock, - isc_rwlocktype_write); - - /* - * Update the zone's secure status. If version is non-NULL - * this is defered until closeversion() is called. - */ - if (result == ISC_R_SUCCESS && version == NULL && !IS_CACHE(rbtdb)) - rbtdb->secure = iszonesecure(db, rbtdb->origin_node); - - return (result); + dns_rbtdb_t *rbtdb = (dns_rbtdb_t *)db; + dns_rbtnode_t *rbtnode = (dns_rbtnode_t *)node; + rbtdb_version_t *rbtversion = version; + isc_result_t result; + rdatasetheader_t *newheader; + + REQUIRE(VALID_RBTDB(rbtdb)); + + if (type == dns_rdatatype_any) + return (ISC_R_NOTIMPLEMENTED); + if (type == dns_rdatatype_rrsig && covers == 0) + return (ISC_R_NOTIMPLEMENTED); + + newheader = new_rdataset(rbtdb, rbtdb->common.mctx); + if (newheader == NULL) + return (ISC_R_NOMEMORY); + set_ttl(rbtdb, newheader, 0); + newheader->type = RBTDB_RDATATYPE_VALUE(type, covers); + newheader->attributes = RDATASET_ATTR_NONEXISTENT; + newheader->trust = 0; + newheader->noqname = NULL; + newheader->additional_auth = NULL; + newheader->additional_glue = NULL; + if (rbtversion != NULL) + newheader->serial = rbtversion->serial; + else + newheader->serial = 0; + newheader->count = 0; + newheader->last_used = 0; + newheader->node = rbtnode; + + NODE_LOCK(&rbtdb->node_locks[rbtnode->locknum].lock, + isc_rwlocktype_write); + + result = add(rbtdb, rbtnode, rbtversion, newheader, DNS_DBADD_FORCE, + ISC_FALSE, NULL, 0); + + NODE_UNLOCK(&rbtdb->node_locks[rbtnode->locknum].lock, + isc_rwlocktype_write); + + /* + * Update the zone's secure status. If version is non-NULL + * this is defered until closeversion() is called. + */ + if (result == ISC_R_SUCCESS && version == NULL && !IS_CACHE(rbtdb)) + rbtdb->secure = iszonesecure(db, rbtdb->origin_node); + + return (result); } static isc_result_t loading_addrdataset(void *arg, dns_name_t *name, dns_rdataset_t *rdataset) { - rbtdb_load_t *loadctx = arg; - dns_rbtdb_t *rbtdb = loadctx->rbtdb; - dns_rbtnode_t *node; - isc_result_t result; - isc_region_t region; - rdatasetheader_t *newheader; - - /* - * This routine does no node locking. See comments in - * 'load' below for more information on loading and - * locking. - */ - - - /* - * SOA records are only allowed at top of zone. - */ - if (rdataset->type == dns_rdatatype_soa && - !IS_CACHE(rbtdb) && !dns_name_equal(name, &rbtdb->common.origin)) - return (DNS_R_NOTZONETOP); - - add_empty_wildcards(rbtdb, name); - - if (dns_name_iswildcard(name)) { - /* - * NS record owners cannot legally be wild cards. - */ - if (rdataset->type == dns_rdatatype_ns) - return (DNS_R_INVALIDNS); - result = add_wildcard_magic(rbtdb, name); - if (result != ISC_R_SUCCESS) - return (result); - } - - node = NULL; - result = dns_rbt_addnode(rbtdb->tree, name, &node); - if (result != ISC_R_SUCCESS && result != ISC_R_EXISTS) - return (result); - if (result != ISC_R_EXISTS) { - dns_name_t foundname; - dns_name_init(&foundname, NULL); - dns_rbt_namefromnode(node, &foundname); + rbtdb_load_t *loadctx = arg; + dns_rbtdb_t *rbtdb = loadctx->rbtdb; + dns_rbtnode_t *node; + isc_result_t result; + isc_region_t region; + rdatasetheader_t *newheader; + + /* + * This routine does no node locking. See comments in + * 'load' below for more information on loading and + * locking. + */ + + + /* + * SOA records are only allowed at top of zone. + */ + if (rdataset->type == dns_rdatatype_soa && + !IS_CACHE(rbtdb) && !dns_name_equal(name, &rbtdb->common.origin)) + return (DNS_R_NOTZONETOP); + + add_empty_wildcards(rbtdb, name); + + if (dns_name_iswildcard(name)) { + /* + * NS record owners cannot legally be wild cards. + */ + if (rdataset->type == dns_rdatatype_ns) + return (DNS_R_INVALIDNS); + result = add_wildcard_magic(rbtdb, name); + if (result != ISC_R_SUCCESS) + return (result); + } + + node = NULL; + result = dns_rbt_addnode(rbtdb->tree, name, &node); + if (result != ISC_R_SUCCESS && result != ISC_R_EXISTS) + return (result); + if (result != ISC_R_EXISTS) { + dns_name_t foundname; + dns_name_init(&foundname, NULL); + dns_rbt_namefromnode(node, &foundname); #ifdef DNS_RBT_USEHASH - node->locknum = node->hashval % rbtdb->node_lock_count; + node->locknum = node->hashval % rbtdb->node_lock_count; #else - node->locknum = dns_name_hash(&foundname, ISC_TRUE) % - rbtdb->node_lock_count; + node->locknum = dns_name_hash(&foundname, ISC_TRUE) % + rbtdb->node_lock_count; #endif - } - - result = dns_rdataslab_fromrdataset(rdataset, rbtdb->common.mctx, - ®ion, - sizeof(rdatasetheader_t)); - if (result != ISC_R_SUCCESS) - return (result); - newheader = (rdatasetheader_t *)region.base; - init_rdataset(rbtdb, newheader); - set_ttl(rbtdb, newheader, - rdataset->ttl + loadctx->now); /* XXX overflow check */ - newheader->type = RBTDB_RDATATYPE_VALUE(rdataset->type, - rdataset->covers); - newheader->attributes = 0; - newheader->trust = rdataset->trust; - newheader->serial = 1; - newheader->noqname = NULL; - newheader->count = init_count++; - newheader->additional_auth = NULL; - newheader->additional_glue = NULL; - /* won't be used, but initialize anyway */ - newheader->last_used = 0; - newheader->node = node; - - result = add(rbtdb, node, rbtdb->current_version, newheader, - DNS_DBADD_MERGE, ISC_TRUE, NULL, 0); - if (result == ISC_R_SUCCESS && - delegating_type(rbtdb, node, rdataset->type)) - node->find_callback = 1; - else if (result == DNS_R_UNCHANGED) - result = ISC_R_SUCCESS; - - return (result); + } + + result = dns_rdataslab_fromrdataset(rdataset, rbtdb->common.mctx, + ®ion, + sizeof(rdatasetheader_t)); + if (result != ISC_R_SUCCESS) + return (result); + newheader = (rdatasetheader_t *)region.base; + init_rdataset(rbtdb, newheader); + set_ttl(rbtdb, newheader, + rdataset->ttl + loadctx->now); /* XXX overflow check */ + newheader->type = RBTDB_RDATATYPE_VALUE(rdataset->type, + rdataset->covers); + newheader->attributes = 0; + newheader->trust = rdataset->trust; + newheader->serial = 1; + newheader->noqname = NULL; + newheader->count = init_count++; + newheader->additional_auth = NULL; + newheader->additional_glue = NULL; + /* won't be used, but initialize anyway */ + newheader->last_used = 0; + newheader->node = node; + + result = add(rbtdb, node, rbtdb->current_version, newheader, + DNS_DBADD_MERGE, ISC_TRUE, NULL, 0); + if (result == ISC_R_SUCCESS && + delegating_type(rbtdb, node, rdataset->type)) + node->find_callback = 1; + else if (result == DNS_R_UNCHANGED) + result = ISC_R_SUCCESS; + + return (result); } static isc_result_t beginload(dns_db_t *db, dns_addrdatasetfunc_t *addp, dns_dbload_t **dbloadp) { - rbtdb_load_t *loadctx; - dns_rbtdb_t *rbtdb; + rbtdb_load_t *loadctx; + dns_rbtdb_t *rbtdb; - rbtdb = (dns_rbtdb_t *)db; + rbtdb = (dns_rbtdb_t *)db; - REQUIRE(VALID_RBTDB(rbtdb)); + REQUIRE(VALID_RBTDB(rbtdb)); - loadctx = isc_mem_get(rbtdb->common.mctx, sizeof(*loadctx)); - if (loadctx == NULL) - return (ISC_R_NOMEMORY); + loadctx = isc_mem_get(rbtdb->common.mctx, sizeof(*loadctx)); + if (loadctx == NULL) + return (ISC_R_NOMEMORY); - loadctx->rbtdb = rbtdb; - if (IS_CACHE(rbtdb)) - isc_stdtime_get(&loadctx->now); - else - loadctx->now = 0; + loadctx->rbtdb = rbtdb; + if (IS_CACHE(rbtdb)) + isc_stdtime_get(&loadctx->now); + else + loadctx->now = 0; - RBTDB_LOCK(&rbtdb->lock, isc_rwlocktype_write); + RBTDB_LOCK(&rbtdb->lock, isc_rwlocktype_write); - REQUIRE((rbtdb->attributes & (RBTDB_ATTR_LOADED|RBTDB_ATTR_LOADING)) - == 0); - rbtdb->attributes |= RBTDB_ATTR_LOADING; + REQUIRE((rbtdb->attributes & (RBTDB_ATTR_LOADED|RBTDB_ATTR_LOADING)) + == 0); + rbtdb->attributes |= RBTDB_ATTR_LOADING; - RBTDB_UNLOCK(&rbtdb->lock, isc_rwlocktype_write); + RBTDB_UNLOCK(&rbtdb->lock, isc_rwlocktype_write); - *addp = loading_addrdataset; - *dbloadp = loadctx; + *addp = loading_addrdataset; + *dbloadp = loadctx; - return (ISC_R_SUCCESS); + return (ISC_R_SUCCESS); } static isc_result_t endload(dns_db_t *db, dns_dbload_t **dbloadp) { - rbtdb_load_t *loadctx; - dns_rbtdb_t *rbtdb = (dns_rbtdb_t *)db; + rbtdb_load_t *loadctx; + dns_rbtdb_t *rbtdb = (dns_rbtdb_t *)db; - REQUIRE(VALID_RBTDB(rbtdb)); - REQUIRE(dbloadp != NULL); - loadctx = *dbloadp; - REQUIRE(loadctx->rbtdb == rbtdb); + REQUIRE(VALID_RBTDB(rbtdb)); + REQUIRE(dbloadp != NULL); + loadctx = *dbloadp; + REQUIRE(loadctx->rbtdb == rbtdb); - RBTDB_LOCK(&rbtdb->lock, isc_rwlocktype_write); + RBTDB_LOCK(&rbtdb->lock, isc_rwlocktype_write); - REQUIRE((rbtdb->attributes & RBTDB_ATTR_LOADING) != 0); - REQUIRE((rbtdb->attributes & RBTDB_ATTR_LOADED) == 0); + REQUIRE((rbtdb->attributes & RBTDB_ATTR_LOADING) != 0); + REQUIRE((rbtdb->attributes & RBTDB_ATTR_LOADED) == 0); - rbtdb->attributes &= ~RBTDB_ATTR_LOADING; - rbtdb->attributes |= RBTDB_ATTR_LOADED; + rbtdb->attributes &= ~RBTDB_ATTR_LOADING; + rbtdb->attributes |= RBTDB_ATTR_LOADED; - RBTDB_UNLOCK(&rbtdb->lock, isc_rwlocktype_write); + RBTDB_UNLOCK(&rbtdb->lock, isc_rwlocktype_write); - /* - * If there's a KEY rdataset at the zone origin containing a - * zone key, we consider the zone secure. - */ - if (! IS_CACHE(rbtdb)) - rbtdb->secure = iszonesecure(db, rbtdb->origin_node); + /* + * If there's a KEY rdataset at the zone origin containing a + * zone key, we consider the zone secure. + */ + if (! IS_CACHE(rbtdb)) + rbtdb->secure = iszonesecure(db, rbtdb->origin_node); - *dbloadp = NULL; + *dbloadp = NULL; - isc_mem_put(rbtdb->common.mctx, loadctx, sizeof(*loadctx)); + isc_mem_put(rbtdb->common.mctx, loadctx, sizeof(*loadctx)); - return (ISC_R_SUCCESS); + return (ISC_R_SUCCESS); } static isc_result_t dump(dns_db_t *db, dns_dbversion_t *version, const char *filename, dns_masterformat_t masterformat) { - dns_rbtdb_t *rbtdb; + dns_rbtdb_t *rbtdb; - rbtdb = (dns_rbtdb_t *)db; + rbtdb = (dns_rbtdb_t *)db; - REQUIRE(VALID_RBTDB(rbtdb)); + REQUIRE(VALID_RBTDB(rbtdb)); - return (dns_master_dump2(rbtdb->common.mctx, db, version, - &dns_master_style_default, - filename, masterformat)); + return (dns_master_dump2(rbtdb->common.mctx, db, version, + &dns_master_style_default, + filename, masterformat)); } static void delete_callback(void *data, void *arg) { - dns_rbtdb_t *rbtdb = arg; - rdatasetheader_t *current, *next; + dns_rbtdb_t *rbtdb = arg; + rdatasetheader_t *current, *next; - for (current = data; current != NULL; current = next) { - next = current->next; - free_rdataset(rbtdb, rbtdb->common.mctx, current); - } + for (current = data; current != NULL; current = next) { + next = current->next; + free_rdataset(rbtdb, rbtdb->common.mctx, current); + } } static isc_boolean_t issecure(dns_db_t *db) { - dns_rbtdb_t *rbtdb; - isc_boolean_t secure; + dns_rbtdb_t *rbtdb; + isc_boolean_t secure; - rbtdb = (dns_rbtdb_t *)db; + rbtdb = (dns_rbtdb_t *)db; - REQUIRE(VALID_RBTDB(rbtdb)); + REQUIRE(VALID_RBTDB(rbtdb)); - RWLOCK(&rbtdb->tree_lock, isc_rwlocktype_read); - secure = rbtdb->secure; - RWUNLOCK(&rbtdb->tree_lock, isc_rwlocktype_read); + RWLOCK(&rbtdb->tree_lock, isc_rwlocktype_read); + secure = rbtdb->secure; + RWUNLOCK(&rbtdb->tree_lock, isc_rwlocktype_read); - return (secure); + return (secure); } static unsigned int nodecount(dns_db_t *db) { - dns_rbtdb_t *rbtdb; - unsigned int count; + dns_rbtdb_t *rbtdb; + unsigned int count; - rbtdb = (dns_rbtdb_t *)db; + rbtdb = (dns_rbtdb_t *)db; - REQUIRE(VALID_RBTDB(rbtdb)); + REQUIRE(VALID_RBTDB(rbtdb)); - RWLOCK(&rbtdb->tree_lock, isc_rwlocktype_read); - count = dns_rbt_nodecount(rbtdb->tree); - RWUNLOCK(&rbtdb->tree_lock, isc_rwlocktype_read); + RWLOCK(&rbtdb->tree_lock, isc_rwlocktype_read); + count = dns_rbt_nodecount(rbtdb->tree); + RWUNLOCK(&rbtdb->tree_lock, isc_rwlocktype_read); - return (count); + return (count); } static void settask(dns_db_t *db, isc_task_t *task) { - dns_rbtdb_t *rbtdb; + dns_rbtdb_t *rbtdb; - rbtdb = (dns_rbtdb_t *)db; + rbtdb = (dns_rbtdb_t *)db; - REQUIRE(VALID_RBTDB(rbtdb)); + REQUIRE(VALID_RBTDB(rbtdb)); - RBTDB_LOCK(&rbtdb->lock, isc_rwlocktype_write); - if (rbtdb->task != NULL) - isc_task_detach(&rbtdb->task); - if (task != NULL) - isc_task_attach(task, &rbtdb->task); - RBTDB_UNLOCK(&rbtdb->lock, isc_rwlocktype_write); + RBTDB_LOCK(&rbtdb->lock, isc_rwlocktype_write); + if (rbtdb->task != NULL) + isc_task_detach(&rbtdb->task); + if (task != NULL) + isc_task_attach(task, &rbtdb->task); + RBTDB_UNLOCK(&rbtdb->lock, isc_rwlocktype_write); } static isc_boolean_t ispersistent(dns_db_t *db) { - UNUSED(db); - return (ISC_FALSE); + UNUSED(db); + return (ISC_FALSE); } static isc_result_t getoriginnode(dns_db_t *db, dns_dbnode_t **nodep) { - dns_rbtdb_t *rbtdb = (dns_rbtdb_t *)db; - dns_rbtnode_t *onode; - isc_result_t result = ISC_R_SUCCESS; - - REQUIRE(VALID_RBTDB(rbtdb)); - REQUIRE(nodep != NULL && *nodep == NULL); - - /* Note that the access to origin_node doesn't require a DB lock */ - onode = (dns_rbtnode_t *)rbtdb->origin_node; - if (onode != NULL) { - NODE_STRONGLOCK(&rbtdb->node_locks[onode->locknum].lock); - new_reference(rbtdb, onode); - NODE_STRONGUNLOCK(&rbtdb->node_locks[onode->locknum].lock); - - *nodep = rbtdb->origin_node; - } else { - INSIST(!IS_CACHE(rbtdb)); - result = ISC_R_NOTFOUND; - } - - return (result); + dns_rbtdb_t *rbtdb = (dns_rbtdb_t *)db; + dns_rbtnode_t *onode; + isc_result_t result = ISC_R_SUCCESS; + + REQUIRE(VALID_RBTDB(rbtdb)); + REQUIRE(nodep != NULL && *nodep == NULL); + + /* Note that the access to origin_node doesn't require a DB lock */ + onode = (dns_rbtnode_t *)rbtdb->origin_node; + if (onode != NULL) { + NODE_STRONGLOCK(&rbtdb->node_locks[onode->locknum].lock); + new_reference(rbtdb, onode); + NODE_STRONGUNLOCK(&rbtdb->node_locks[onode->locknum].lock); + + *nodep = rbtdb->origin_node; + } else { + INSIST(!IS_CACHE(rbtdb)); + result = ISC_R_NOTFOUND; + } + + return (result); +} + +static dns_stats_t * +getrrsetstats(dns_db_t *db) { + dns_rbtdb_t *rbtdb = (dns_rbtdb_t *)db; + + REQUIRE(VALID_RBTDB(rbtdb)); + REQUIRE(IS_CACHE(rbtdb)); /* current restriction */ + + return (rbtdb->rrsetstats); } static dns_dbmethods_t zone_methods = { - attach, - detach, - beginload, - endload, - dump, - currentversion, - newversion, - attachversion, - closeversion, - findnode, - zone_find, - zone_findzonecut, - attachnode, - detachnode, - expirenode, - printnode, - createiterator, - zone_findrdataset, - allrdatasets, - addrdataset, - subtractrdataset, - deleterdataset, - issecure, - nodecount, - ispersistent, - overmem, - settask, - getoriginnode, - NULL, + attach, + detach, + beginload, + endload, + dump, + currentversion, + newversion, + attachversion, + closeversion, + findnode, + zone_find, + zone_findzonecut, + attachnode, + detachnode, + expirenode, + printnode, + createiterator, + zone_findrdataset, + allrdatasets, + addrdataset, + subtractrdataset, + deleterdataset, + issecure, + nodecount, + ispersistent, + overmem, + settask, + getoriginnode, + NULL, + NULL }; static dns_dbmethods_t cache_methods = { - attach, - detach, - beginload, - endload, - dump, - currentversion, - newversion, - attachversion, - closeversion, - findnode, - cache_find, - cache_findzonecut, - attachnode, - detachnode, - expirenode, - printnode, - createiterator, - cache_findrdataset, - allrdatasets, - addrdataset, - subtractrdataset, - deleterdataset, - issecure, - nodecount, - ispersistent, - overmem, - settask, - getoriginnode, - NULL + attach, + detach, + beginload, + endload, + dump, + currentversion, + newversion, + attachversion, + closeversion, + findnode, + cache_find, + cache_findzonecut, + attachnode, + detachnode, + expirenode, + printnode, + createiterator, + cache_findrdataset, + allrdatasets, + addrdataset, + subtractrdataset, + deleterdataset, + issecure, + nodecount, + ispersistent, + overmem, + settask, + getoriginnode, + NULL, + getrrsetstats }; isc_result_t @@ -6087,263 +5913,268 @@ dns_rbtdb64_create #else dns_rbtdb_create #endif - (isc_mem_t *mctx, dns_name_t *origin, dns_dbtype_t type, - dns_rdataclass_t rdclass, unsigned int argc, char *argv[], - void *driverarg, dns_db_t **dbp) + (isc_mem_t *mctx, dns_name_t *origin, dns_dbtype_t type, + dns_rdataclass_t rdclass, unsigned int argc, char *argv[], + void *driverarg, dns_db_t **dbp) { - dns_rbtdb_t *rbtdb; - isc_result_t result; - int i; - dns_name_t name; - - /* Keep the compiler happy. */ - UNUSED(argc); - UNUSED(argv); - UNUSED(driverarg); - - rbtdb = isc_mem_get(mctx, sizeof(*rbtdb)); - if (rbtdb == NULL) - return (ISC_R_NOMEMORY); - - memset(rbtdb, '\0', sizeof(*rbtdb)); - dns_name_init(&rbtdb->common.origin, NULL); - rbtdb->common.attributes = 0; - if (type == dns_dbtype_cache) { - rbtdb->common.methods = &cache_methods; - rbtdb->common.attributes |= DNS_DBATTR_CACHE; - } else if (type == dns_dbtype_stub) { - rbtdb->common.methods = &zone_methods; - rbtdb->common.attributes |= DNS_DBATTR_STUB; - } else - rbtdb->common.methods = &zone_methods; - rbtdb->common.rdclass = rdclass; - rbtdb->common.mctx = NULL; - - result = RBTDB_INITLOCK(&rbtdb->lock); - if (result != ISC_R_SUCCESS) - goto cleanup_rbtdb; - - result = isc_rwlock_init(&rbtdb->tree_lock, 0, 0); - if (result != ISC_R_SUCCESS) - goto cleanup_lock; - - if (rbtdb->node_lock_count == 0) { - if (IS_CACHE(rbtdb)) - rbtdb->node_lock_count = DEFAULT_CACHE_NODE_LOCK_COUNT; - else - rbtdb->node_lock_count = DEFAULT_NODE_LOCK_COUNT; - } - INSIST(rbtdb->node_lock_count < (1 << DNS_RBT_LOCKLENGTH)); - rbtdb->node_locks = isc_mem_get(mctx, rbtdb->node_lock_count * - sizeof(rbtdb_nodelock_t)); - if (rbtdb->node_locks == NULL) { - result = ISC_R_NOMEMORY; - goto cleanup_tree_lock; - } - - if (IS_CACHE(rbtdb)) { - rbtdb->rdatasets = isc_mem_get(mctx, rbtdb->node_lock_count * - sizeof(rdatasetheaderlist_t)); - if (rbtdb->rdatasets == NULL) { - result = ISC_R_NOMEMORY; - goto cleanup_node_locks; - } - for (i = 0; i < (int)rbtdb->node_lock_count; i++) - ISC_LIST_INIT(rbtdb->rdatasets[i]); - - rbtdb->deadnodes = isc_mem_get(mctx, rbtdb->node_lock_count * - sizeof(rbtnodelist_t)); - if (rbtdb->deadnodes == NULL) { - result = ISC_R_NOMEMORY; - goto cleanup_rdatasets; - } - for (i = 0; i < (int)rbtdb->node_lock_count; i++) - ISC_LIST_INIT(rbtdb->deadnodes[i]); - - /* - * Create the heaps. - */ - rbtdb->heaps = isc_mem_get(mctx, rbtdb->node_lock_count * - sizeof(isc_heap_t *)); - if (rbtdb->heaps == NULL) { - result = ISC_R_NOMEMORY; - goto cleanup_deadnodes; - } - for (i = 0; i < (int)rbtdb->node_lock_count; i++) - rbtdb->heaps[i] = NULL; - for (i = 0; i < (int)rbtdb->node_lock_count; i++) { - result = isc_heap_create(mctx, ttl_sooner, - ttl_set_index, 0, - &rbtdb->heaps[i]); - if (result != ISC_R_SUCCESS) - goto cleanup_heaps; - } - } else { - rbtdb->rdatasets = NULL; - rbtdb->deadnodes = NULL; - rbtdb->heaps = NULL; - } - - rbtdb->active = rbtdb->node_lock_count; - - for (i = 0; i < (int)(rbtdb->node_lock_count); i++) { - result = NODE_INITLOCK(&rbtdb->node_locks[i].lock); - if (result == ISC_R_SUCCESS) { - result = isc_refcount_init(&rbtdb->node_locks[i].references, 0); - if (result != ISC_R_SUCCESS) - NODE_DESTROYLOCK(&rbtdb->node_locks[i].lock); - } - if (result != ISC_R_SUCCESS) { - while (i-- > 0) { - NODE_DESTROYLOCK(&rbtdb->node_locks[i].lock); - isc_refcount_decrement(&rbtdb->node_locks[i].references, NULL); - isc_refcount_destroy(&rbtdb->node_locks[i].references); - } - goto cleanup_heaps; - } - rbtdb->node_locks[i].exiting = ISC_FALSE; - } - - /* - * Attach to the mctx. The database will persist so long as there - * are references to it, and attaching to the mctx ensures that our - * mctx won't disappear out from under us. - */ - isc_mem_attach(mctx, &rbtdb->common.mctx); - - /* - * Must be initalized before free_rbtdb() is called. - */ - isc_ondestroy_init(&rbtdb->common.ondest); - - /* - * Make a copy of the origin name. - */ - result = dns_name_dupwithoffsets(origin, mctx, &rbtdb->common.origin); - if (result != ISC_R_SUCCESS) { - free_rbtdb(rbtdb, ISC_FALSE, NULL); - return (result); - } - - /* - * Make the Red-Black Tree. - */ - result = dns_rbt_create(mctx, delete_callback, rbtdb, &rbtdb->tree); - if (result != ISC_R_SUCCESS) { - free_rbtdb(rbtdb, ISC_FALSE, NULL); - return (result); - } - /* - * In order to set the node callback bit correctly in zone databases, - * we need to know if the node has the origin name of the zone. - * In loading_addrdataset() we could simply compare the new name - * to the origin name, but this is expensive. Also, we don't know the - * node name in addrdataset(), so we need another way of knowing the - * zone's top. - * - * We now explicitly create a node for the zone's origin, and then - * we simply remember the node's address. This is safe, because - * the top-of-zone node can never be deleted, nor can its address - * change. - */ - if (!IS_CACHE(rbtdb)) { - rbtdb->origin_node = NULL; - result = dns_rbt_addnode(rbtdb->tree, &rbtdb->common.origin, - &rbtdb->origin_node); - if (result != ISC_R_SUCCESS) { - INSIST(result != ISC_R_EXISTS); - free_rbtdb(rbtdb, ISC_FALSE, NULL); - return (result); - } - /* - * We need to give the origin node the right locknum. - */ - dns_name_init(&name, NULL); - dns_rbt_namefromnode(rbtdb->origin_node, &name); + dns_rbtdb_t *rbtdb; + isc_result_t result; + int i; + dns_name_t name; + + /* Keep the compiler happy. */ + UNUSED(argc); + UNUSED(argv); + UNUSED(driverarg); + + rbtdb = isc_mem_get(mctx, sizeof(*rbtdb)); + if (rbtdb == NULL) + return (ISC_R_NOMEMORY); + + memset(rbtdb, '\0', sizeof(*rbtdb)); + dns_name_init(&rbtdb->common.origin, NULL); + rbtdb->common.attributes = 0; + if (type == dns_dbtype_cache) { + rbtdb->common.methods = &cache_methods; + rbtdb->common.attributes |= DNS_DBATTR_CACHE; + } else if (type == dns_dbtype_stub) { + rbtdb->common.methods = &zone_methods; + rbtdb->common.attributes |= DNS_DBATTR_STUB; + } else + rbtdb->common.methods = &zone_methods; + rbtdb->common.rdclass = rdclass; + rbtdb->common.mctx = NULL; + + result = RBTDB_INITLOCK(&rbtdb->lock); + if (result != ISC_R_SUCCESS) + goto cleanup_rbtdb; + + result = isc_rwlock_init(&rbtdb->tree_lock, 0, 0); + if (result != ISC_R_SUCCESS) + goto cleanup_lock; + + if (rbtdb->node_lock_count == 0) { + if (IS_CACHE(rbtdb)) + rbtdb->node_lock_count = DEFAULT_CACHE_NODE_LOCK_COUNT; + else + rbtdb->node_lock_count = DEFAULT_NODE_LOCK_COUNT; + } + INSIST(rbtdb->node_lock_count < (1 << DNS_RBT_LOCKLENGTH)); + rbtdb->node_locks = isc_mem_get(mctx, rbtdb->node_lock_count * + sizeof(rbtdb_nodelock_t)); + if (rbtdb->node_locks == NULL) { + result = ISC_R_NOMEMORY; + goto cleanup_tree_lock; + } + + rbtdb->rrsetstats = NULL; + if (IS_CACHE(rbtdb)) { + result = dns_rdatasetstats_create(mctx, &rbtdb->rrsetstats); + if (result != ISC_R_SUCCESS) + goto cleanup_node_locks; + rbtdb->rdatasets = isc_mem_get(mctx, rbtdb->node_lock_count * + sizeof(rdatasetheaderlist_t)); + if (rbtdb->rdatasets == NULL) { + result = ISC_R_NOMEMORY; + goto cleanup_rrsetstats; + } + for (i = 0; i < (int)rbtdb->node_lock_count; i++) + ISC_LIST_INIT(rbtdb->rdatasets[i]); + + /* + * Create the heaps. + */ + rbtdb->heaps = isc_mem_get(mctx, rbtdb->node_lock_count * + sizeof(isc_heap_t *)); + if (rbtdb->heaps == NULL) { + result = ISC_R_NOMEMORY; + goto cleanup_rdatasets; + } + for (i = 0; i < (int)rbtdb->node_lock_count; i++) + rbtdb->heaps[i] = NULL; + for (i = 0; i < (int)rbtdb->node_lock_count; i++) { + result = isc_heap_create(mctx, ttl_sooner, + ttl_set_index, 0, + &rbtdb->heaps[i]); + if (result != ISC_R_SUCCESS) + goto cleanup_heaps; + } + } else { + rbtdb->rdatasets = NULL; + rbtdb->heaps = NULL; + } + + rbtdb->deadnodes = isc_mem_get(mctx, rbtdb->node_lock_count * + sizeof(rbtnodelist_t)); + if (rbtdb->deadnodes == NULL) { + result = ISC_R_NOMEMORY; + goto cleanup_heaps; + } + for (i = 0; i < (int)rbtdb->node_lock_count; i++) + ISC_LIST_INIT(rbtdb->deadnodes[i]); + + rbtdb->active = rbtdb->node_lock_count; + + for (i = 0; i < (int)(rbtdb->node_lock_count); i++) { + result = NODE_INITLOCK(&rbtdb->node_locks[i].lock); + if (result == ISC_R_SUCCESS) { + result = isc_refcount_init(&rbtdb->node_locks[i].references, 0); + if (result != ISC_R_SUCCESS) + NODE_DESTROYLOCK(&rbtdb->node_locks[i].lock); + } + if (result != ISC_R_SUCCESS) { + while (i-- > 0) { + NODE_DESTROYLOCK(&rbtdb->node_locks[i].lock); + isc_refcount_decrement(&rbtdb->node_locks[i].references, NULL); + isc_refcount_destroy(&rbtdb->node_locks[i].references); + } + goto cleanup_deadnodes; + } + rbtdb->node_locks[i].exiting = ISC_FALSE; + } + + /* + * Attach to the mctx. The database will persist so long as there + * are references to it, and attaching to the mctx ensures that our + * mctx won't disappear out from under us. + */ + isc_mem_attach(mctx, &rbtdb->common.mctx); + + /* + * Must be initalized before free_rbtdb() is called. + */ + isc_ondestroy_init(&rbtdb->common.ondest); + + /* + * Make a copy of the origin name. + */ + result = dns_name_dupwithoffsets(origin, mctx, &rbtdb->common.origin); + if (result != ISC_R_SUCCESS) { + free_rbtdb(rbtdb, ISC_FALSE, NULL); + return (result); + } + + /* + * Make the Red-Black Tree. + */ + result = dns_rbt_create(mctx, delete_callback, rbtdb, &rbtdb->tree); + if (result != ISC_R_SUCCESS) { + free_rbtdb(rbtdb, ISC_FALSE, NULL); + return (result); + } + /* + * In order to set the node callback bit correctly in zone databases, + * we need to know if the node has the origin name of the zone. + * In loading_addrdataset() we could simply compare the new name + * to the origin name, but this is expensive. Also, we don't know the + * node name in addrdataset(), so we need another way of knowing the + * zone's top. + * + * We now explicitly create a node for the zone's origin, and then + * we simply remember the node's address. This is safe, because + * the top-of-zone node can never be deleted, nor can its address + * change. + */ + if (!IS_CACHE(rbtdb)) { + rbtdb->origin_node = NULL; + result = dns_rbt_addnode(rbtdb->tree, &rbtdb->common.origin, + &rbtdb->origin_node); + if (result != ISC_R_SUCCESS) { + INSIST(result != ISC_R_EXISTS); + free_rbtdb(rbtdb, ISC_FALSE, NULL); + return (result); + } + /* + * We need to give the origin node the right locknum. + */ + dns_name_init(&name, NULL); + dns_rbt_namefromnode(rbtdb->origin_node, &name); #ifdef DNS_RBT_USEHASH - rbtdb->origin_node->locknum = - rbtdb->origin_node->hashval % - rbtdb->node_lock_count; + rbtdb->origin_node->locknum = + rbtdb->origin_node->hashval % + rbtdb->node_lock_count; #else - rbtdb->origin_node->locknum = - dns_name_hash(&name, ISC_TRUE) % - rbtdb->node_lock_count; + rbtdb->origin_node->locknum = + dns_name_hash(&name, ISC_TRUE) % + rbtdb->node_lock_count; #endif - } - - /* - * Misc. Initialization. - */ - result = isc_refcount_init(&rbtdb->references, 1); - if (result != ISC_R_SUCCESS) { - free_rbtdb(rbtdb, ISC_FALSE, NULL); - return (result); - } - rbtdb->attributes = 0; - rbtdb->secure = ISC_FALSE; - rbtdb->overmem = ISC_FALSE; - rbtdb->task = NULL; - - /* - * Version Initialization. - */ - rbtdb->current_serial = 1; - rbtdb->least_serial = 1; - rbtdb->next_serial = 2; - rbtdb->current_version = allocate_version(mctx, 1, 1, ISC_FALSE); - if (rbtdb->current_version == NULL) { - isc_refcount_decrement(&rbtdb->references, NULL); - isc_refcount_destroy(&rbtdb->references); - free_rbtdb(rbtdb, ISC_FALSE, NULL); - return (ISC_R_NOMEMORY); - } - rbtdb->future_version = NULL; - ISC_LIST_INIT(rbtdb->open_versions); - /* - * Keep the current version in the open list so that list operation - * won't happen in normal lookup operations. - */ - PREPEND(rbtdb->open_versions, rbtdb->current_version, link); - - rbtdb->common.magic = DNS_DB_MAGIC; - rbtdb->common.impmagic = RBTDB_MAGIC; - - *dbp = (dns_db_t *)rbtdb; - - return (ISC_R_SUCCESS); - - cleanup_heaps: - if (rbtdb->heaps != NULL) { - for (i = 0 ; i < (int)rbtdb->node_lock_count ; i++) - if (rbtdb->heaps[i] != NULL) - isc_heap_destroy(&rbtdb->heaps[i]); - isc_mem_put(mctx, rbtdb->heaps, - rbtdb->node_lock_count * sizeof(isc_heap_t *)); - } + } + + /* + * Misc. Initialization. + */ + result = isc_refcount_init(&rbtdb->references, 1); + if (result != ISC_R_SUCCESS) { + free_rbtdb(rbtdb, ISC_FALSE, NULL); + return (result); + } + rbtdb->attributes = 0; + rbtdb->secure = ISC_FALSE; + rbtdb->overmem = ISC_FALSE; + rbtdb->task = NULL; + + /* + * Version Initialization. + */ + rbtdb->current_serial = 1; + rbtdb->least_serial = 1; + rbtdb->next_serial = 2; + rbtdb->current_version = allocate_version(mctx, 1, 1, ISC_FALSE); + if (rbtdb->current_version == NULL) { + isc_refcount_decrement(&rbtdb->references, NULL); + isc_refcount_destroy(&rbtdb->references); + free_rbtdb(rbtdb, ISC_FALSE, NULL); + return (ISC_R_NOMEMORY); + } + rbtdb->future_version = NULL; + ISC_LIST_INIT(rbtdb->open_versions); + /* + * Keep the current version in the open list so that list operation + * won't happen in normal lookup operations. + */ + PREPEND(rbtdb->open_versions, rbtdb->current_version, link); + + rbtdb->common.magic = DNS_DB_MAGIC; + rbtdb->common.impmagic = RBTDB_MAGIC; + + *dbp = (dns_db_t *)rbtdb; + + return (ISC_R_SUCCESS); cleanup_deadnodes: - if (rbtdb->deadnodes != NULL) - isc_mem_put(mctx, rbtdb->deadnodes, - rbtdb->node_lock_count * sizeof(rbtnodelist_t)); + isc_mem_put(mctx, rbtdb->deadnodes, + rbtdb->node_lock_count * sizeof(rbtnodelist_t)); + + cleanup_heaps: + if (rbtdb->heaps != NULL) { + for (i = 0 ; i < (int)rbtdb->node_lock_count ; i++) + if (rbtdb->heaps[i] != NULL) + isc_heap_destroy(&rbtdb->heaps[i]); + isc_mem_put(mctx, rbtdb->heaps, + rbtdb->node_lock_count * sizeof(isc_heap_t *)); + } cleanup_rdatasets: - if (rbtdb->rdatasets != NULL) - isc_mem_put(mctx, rbtdb->rdatasets, rbtdb->node_lock_count * - sizeof(rdatasetheaderlist_t)); + if (rbtdb->rdatasets != NULL) + isc_mem_put(mctx, rbtdb->rdatasets, rbtdb->node_lock_count * + sizeof(rdatasetheaderlist_t)); + cleanup_rrsetstats: + if (rbtdb->rrsetstats != NULL) + dns_stats_detach(&rbtdb->rrsetstats); cleanup_node_locks: - isc_mem_put(mctx, rbtdb->node_locks, - rbtdb->node_lock_count * sizeof(rbtdb_nodelock_t)); + isc_mem_put(mctx, rbtdb->node_locks, + rbtdb->node_lock_count * sizeof(rbtdb_nodelock_t)); cleanup_tree_lock: - isc_rwlock_destroy(&rbtdb->tree_lock); + isc_rwlock_destroy(&rbtdb->tree_lock); cleanup_lock: - RBTDB_DESTROYLOCK(&rbtdb->lock); + RBTDB_DESTROYLOCK(&rbtdb->lock); cleanup_rbtdb: - isc_mem_put(mctx, rbtdb, sizeof(*rbtdb)); - return (result); + isc_mem_put(mctx, rbtdb, sizeof(*rbtdb)); + return (result); } @@ -6353,178 +6184,178 @@ dns_rbtdb_create static void rdataset_disassociate(dns_rdataset_t *rdataset) { - dns_db_t *db = rdataset->private1; - dns_dbnode_t *node = rdataset->private2; + dns_db_t *db = rdataset->private1; + dns_dbnode_t *node = rdataset->private2; - detachnode(db, &node); + detachnode(db, &node); } static isc_result_t rdataset_first(dns_rdataset_t *rdataset) { - unsigned char *raw = rdataset->private3; /* RDATASLAB */ - unsigned int count; + unsigned char *raw = rdataset->private3; /* RDATASLAB */ + unsigned int count; - count = raw[0] * 256 + raw[1]; - if (count == 0) { - rdataset->private5 = NULL; - return (ISC_R_NOMORE); - } + count = raw[0] * 256 + raw[1]; + if (count == 0) { + rdataset->private5 = NULL; + return (ISC_R_NOMORE); + } #if DNS_RDATASET_FIXED - if ((rdataset->attributes & DNS_RDATASETATTR_LOADORDER) == 0) - raw += 2 + (4 * count); - else + if ((rdataset->attributes & DNS_RDATASETATTR_LOADORDER) == 0) + raw += 2 + (4 * count); + else #endif - raw += 2; - - /* - * The privateuint4 field is the number of rdata beyond the - * cursor position, so we decrement the total count by one - * before storing it. - * - * If DNS_RDATASETATTR_LOADORDER is not set 'raw' points to the - * first record. If DNS_RDATASETATTR_LOADORDER is set 'raw' points - * to the first entry in the offset table. - */ - count--; - rdataset->privateuint4 = count; - rdataset->private5 = raw; - - return (ISC_R_SUCCESS); + raw += 2; + + /* + * The privateuint4 field is the number of rdata beyond the + * cursor position, so we decrement the total count by one + * before storing it. + * + * If DNS_RDATASETATTR_LOADORDER is not set 'raw' points to the + * first record. If DNS_RDATASETATTR_LOADORDER is set 'raw' points + * to the first entry in the offset table. + */ + count--; + rdataset->privateuint4 = count; + rdataset->private5 = raw; + + return (ISC_R_SUCCESS); } static isc_result_t rdataset_next(dns_rdataset_t *rdataset) { - unsigned int count; - unsigned int length; - unsigned char *raw; /* RDATASLAB */ - - count = rdataset->privateuint4; - if (count == 0) - return (ISC_R_NOMORE); - count--; - rdataset->privateuint4 = count; - - /* - * Skip forward one record (length + 4) or one offset (4). - */ - raw = rdataset->private5; + unsigned int count; + unsigned int length; + unsigned char *raw; /* RDATASLAB */ + + count = rdataset->privateuint4; + if (count == 0) + return (ISC_R_NOMORE); + count--; + rdataset->privateuint4 = count; + + /* + * Skip forward one record (length + 4) or one offset (4). + */ + raw = rdataset->private5; #if DNS_RDATASET_FIXED - if ((rdataset->attributes & DNS_RDATASETATTR_LOADORDER) == 0) { + if ((rdataset->attributes & DNS_RDATASETATTR_LOADORDER) == 0) { #endif - length = raw[0] * 256 + raw[1]; - raw += length; + length = raw[0] * 256 + raw[1]; + raw += length; #if DNS_RDATASET_FIXED - } - rdataset->private5 = raw + 4; /* length(2) + order(2) */ + } + rdataset->private5 = raw + 4; /* length(2) + order(2) */ #else - rdataset->private5 = raw + 2; /* length(2) */ + rdataset->private5 = raw + 2; /* length(2) */ #endif - return (ISC_R_SUCCESS); + return (ISC_R_SUCCESS); } static void rdataset_current(dns_rdataset_t *rdataset, dns_rdata_t *rdata) { - unsigned char *raw = rdataset->private5; /* RDATASLAB */ + unsigned char *raw = rdataset->private5; /* RDATASLAB */ #if DNS_RDATASET_FIXED - unsigned int offset; + unsigned int offset; #endif - isc_region_t r; + isc_region_t r; - REQUIRE(raw != NULL); + REQUIRE(raw != NULL); - /* - * Find the start of the record if not already in private5 - * then skip the length and order fields. - */ + /* + * Find the start of the record if not already in private5 + * then skip the length and order fields. + */ #if DNS_RDATASET_FIXED - if ((rdataset->attributes & DNS_RDATASETATTR_LOADORDER) != 0) { - offset = (raw[0] << 24) + (raw[1] << 16) + - (raw[2] << 8) + raw[3]; - raw = rdataset->private3; - raw += offset; - } + if ((rdataset->attributes & DNS_RDATASETATTR_LOADORDER) != 0) { + offset = (raw[0] << 24) + (raw[1] << 16) + + (raw[2] << 8) + raw[3]; + raw = rdataset->private3; + raw += offset; + } #endif - r.length = raw[0] * 256 + raw[1]; + r.length = raw[0] * 256 + raw[1]; #if DNS_RDATASET_FIXED - raw += 4; + raw += 4; #else - raw += 2; + raw += 2; #endif - r.base = raw; - dns_rdata_fromregion(rdata, rdataset->rdclass, rdataset->type, &r); + r.base = raw; + dns_rdata_fromregion(rdata, rdataset->rdclass, rdataset->type, &r); } static void rdataset_clone(dns_rdataset_t *source, dns_rdataset_t *target) { - dns_db_t *db = source->private1; - dns_dbnode_t *node = source->private2; - dns_dbnode_t *cloned_node = NULL; - - attachnode(db, node, &cloned_node); - *target = *source; - - /* - * Reset iterator state. - */ - target->privateuint4 = 0; - target->private5 = NULL; + dns_db_t *db = source->private1; + dns_dbnode_t *node = source->private2; + dns_dbnode_t *cloned_node = NULL; + + attachnode(db, node, &cloned_node); + *target = *source; + + /* + * Reset iterator state. + */ + target->privateuint4 = 0; + target->private5 = NULL; } static unsigned int rdataset_count(dns_rdataset_t *rdataset) { - unsigned char *raw = rdataset->private3; /* RDATASLAB */ - unsigned int count; + unsigned char *raw = rdataset->private3; /* RDATASLAB */ + unsigned int count; - count = raw[0] * 256 + raw[1]; + count = raw[0] * 256 + raw[1]; - return (count); + return (count); } static isc_result_t rdataset_getnoqname(dns_rdataset_t *rdataset, dns_name_t *name, - dns_rdataset_t *nsec, dns_rdataset_t *nsecsig) + dns_rdataset_t *nsec, dns_rdataset_t *nsecsig) { - dns_db_t *db = rdataset->private1; - dns_dbnode_t *node = rdataset->private2; - dns_dbnode_t *cloned_node; - struct noqname *noqname = rdataset->private6; - - cloned_node = NULL; - attachnode(db, node, &cloned_node); - nsec->methods = &rdataset_methods; - nsec->rdclass = db->rdclass; - nsec->type = dns_rdatatype_nsec; - nsec->covers = 0; - nsec->ttl = rdataset->ttl; - nsec->trust = rdataset->trust; - nsec->private1 = rdataset->private1; - nsec->private2 = rdataset->private2; - nsec->private3 = noqname->nsec; - nsec->privateuint4 = 0; - nsec->private5 = NULL; - nsec->private6 = NULL; - - cloned_node = NULL; - attachnode(db, node, &cloned_node); - nsecsig->methods = &rdataset_methods; - nsecsig->rdclass = db->rdclass; - nsecsig->type = dns_rdatatype_rrsig; - nsecsig->covers = dns_rdatatype_nsec; - nsecsig->ttl = rdataset->ttl; - nsecsig->trust = rdataset->trust; - nsecsig->private1 = rdataset->private1; - nsecsig->private2 = rdataset->private2; - nsecsig->private3 = noqname->nsecsig; - nsecsig->privateuint4 = 0; - nsecsig->private5 = NULL; - nsec->private6 = NULL; - - dns_name_clone(&noqname->name, name); - - return (ISC_R_SUCCESS); + dns_db_t *db = rdataset->private1; + dns_dbnode_t *node = rdataset->private2; + dns_dbnode_t *cloned_node; + struct noqname *noqname = rdataset->private6; + + cloned_node = NULL; + attachnode(db, node, &cloned_node); + nsec->methods = &rdataset_methods; + nsec->rdclass = db->rdclass; + nsec->type = dns_rdatatype_nsec; + nsec->covers = 0; + nsec->ttl = rdataset->ttl; + nsec->trust = rdataset->trust; + nsec->private1 = rdataset->private1; + nsec->private2 = rdataset->private2; + nsec->private3 = noqname->nsec; + nsec->privateuint4 = 0; + nsec->private5 = NULL; + nsec->private6 = NULL; + + cloned_node = NULL; + attachnode(db, node, &cloned_node); + nsecsig->methods = &rdataset_methods; + nsecsig->rdclass = db->rdclass; + nsecsig->type = dns_rdatatype_rrsig; + nsecsig->covers = dns_rdatatype_nsec; + nsecsig->ttl = rdataset->ttl; + nsecsig->trust = rdataset->trust; + nsecsig->private1 = rdataset->private1; + nsecsig->private2 = rdataset->private2; + nsecsig->private3 = noqname->nsecsig; + nsecsig->privateuint4 = 0; + nsecsig->private5 = NULL; + nsec->private6 = NULL; + + dns_name_clone(&noqname->name, name); + + return (ISC_R_SUCCESS); } /* @@ -6533,172 +6364,172 @@ rdataset_getnoqname(dns_rdataset_t *rdataset, dns_name_t *name, static void rdatasetiter_destroy(dns_rdatasetiter_t **iteratorp) { - rbtdb_rdatasetiter_t *rbtiterator; + rbtdb_rdatasetiter_t *rbtiterator; - rbtiterator = (rbtdb_rdatasetiter_t *)(*iteratorp); + rbtiterator = (rbtdb_rdatasetiter_t *)(*iteratorp); - if (rbtiterator->common.version != NULL) - closeversion(rbtiterator->common.db, - &rbtiterator->common.version, ISC_FALSE); - detachnode(rbtiterator->common.db, &rbtiterator->common.node); - isc_mem_put(rbtiterator->common.db->mctx, rbtiterator, - sizeof(*rbtiterator)); + if (rbtiterator->common.version != NULL) + closeversion(rbtiterator->common.db, + &rbtiterator->common.version, ISC_FALSE); + detachnode(rbtiterator->common.db, &rbtiterator->common.node); + isc_mem_put(rbtiterator->common.db->mctx, rbtiterator, + sizeof(*rbtiterator)); - *iteratorp = NULL; + *iteratorp = NULL; } static isc_result_t rdatasetiter_first(dns_rdatasetiter_t *iterator) { - rbtdb_rdatasetiter_t *rbtiterator = (rbtdb_rdatasetiter_t *)iterator; - dns_rbtdb_t *rbtdb = (dns_rbtdb_t *)(rbtiterator->common.db); - dns_rbtnode_t *rbtnode = rbtiterator->common.node; - rbtdb_version_t *rbtversion = rbtiterator->common.version; - rdatasetheader_t *header, *top_next; - rbtdb_serial_t serial; - isc_stdtime_t now; - - if (IS_CACHE(rbtdb)) { - serial = 1; - now = rbtiterator->common.now; - } else { - serial = rbtversion->serial; - now = 0; - } - - NODE_LOCK(&rbtdb->node_locks[rbtnode->locknum].lock, - isc_rwlocktype_read); - - for (header = rbtnode->data; header != NULL; header = top_next) { - top_next = header->next; - do { - if (header->serial <= serial && !IGNORE(header)) { - /* - * Is this a "this rdataset doesn't exist" - * record? Or is it too old in the cache? - * - * Note: unlike everywhere else, we - * check for now > header->ttl instead - * of now >= header->ttl. This allows - * ANY and RRSIG queries for 0 TTL - * rdatasets to work. - */ - if (NONEXISTENT(header) || - (now != 0 && now > header->rdh_ttl)) - header = NULL; - break; - } else - header = header->down; - } while (header != NULL); - if (header != NULL) - break; - } - - NODE_UNLOCK(&rbtdb->node_locks[rbtnode->locknum].lock, - isc_rwlocktype_read); - - rbtiterator->current = header; - - if (header == NULL) - return (ISC_R_NOMORE); - - return (ISC_R_SUCCESS); + rbtdb_rdatasetiter_t *rbtiterator = (rbtdb_rdatasetiter_t *)iterator; + dns_rbtdb_t *rbtdb = (dns_rbtdb_t *)(rbtiterator->common.db); + dns_rbtnode_t *rbtnode = rbtiterator->common.node; + rbtdb_version_t *rbtversion = rbtiterator->common.version; + rdatasetheader_t *header, *top_next; + rbtdb_serial_t serial; + isc_stdtime_t now; + + if (IS_CACHE(rbtdb)) { + serial = 1; + now = rbtiterator->common.now; + } else { + serial = rbtversion->serial; + now = 0; + } + + NODE_LOCK(&rbtdb->node_locks[rbtnode->locknum].lock, + isc_rwlocktype_read); + + for (header = rbtnode->data; header != NULL; header = top_next) { + top_next = header->next; + do { + if (header->serial <= serial && !IGNORE(header)) { + /* + * Is this a "this rdataset doesn't exist" + * record? Or is it too old in the cache? + * + * Note: unlike everywhere else, we + * check for now > header->ttl instead + * of now >= header->ttl. This allows + * ANY and RRSIG queries for 0 TTL + * rdatasets to work. + */ + if (NONEXISTENT(header) || + (now != 0 && now > header->rdh_ttl)) + header = NULL; + break; + } else + header = header->down; + } while (header != NULL); + if (header != NULL) + break; + } + + NODE_UNLOCK(&rbtdb->node_locks[rbtnode->locknum].lock, + isc_rwlocktype_read); + + rbtiterator->current = header; + + if (header == NULL) + return (ISC_R_NOMORE); + + return (ISC_R_SUCCESS); } static isc_result_t rdatasetiter_next(dns_rdatasetiter_t *iterator) { - rbtdb_rdatasetiter_t *rbtiterator = (rbtdb_rdatasetiter_t *)iterator; - dns_rbtdb_t *rbtdb = (dns_rbtdb_t *)(rbtiterator->common.db); - dns_rbtnode_t *rbtnode = rbtiterator->common.node; - rbtdb_version_t *rbtversion = rbtiterator->common.version; - rdatasetheader_t *header, *top_next; - rbtdb_serial_t serial; - isc_stdtime_t now; - rbtdb_rdatatype_t type, negtype; - dns_rdatatype_t rdtype, covers; - - header = rbtiterator->current; - if (header == NULL) - return (ISC_R_NOMORE); - - if (IS_CACHE(rbtdb)) { - serial = 1; - now = rbtiterator->common.now; - } else { - serial = rbtversion->serial; - now = 0; - } - - NODE_LOCK(&rbtdb->node_locks[rbtnode->locknum].lock, - isc_rwlocktype_read); - - type = header->type; - rdtype = RBTDB_RDATATYPE_BASE(header->type); - if (rdtype == 0) { - covers = RBTDB_RDATATYPE_EXT(header->type); - negtype = RBTDB_RDATATYPE_VALUE(covers, 0); - } else - negtype = RBTDB_RDATATYPE_VALUE(0, rdtype); - for (header = header->next; header != NULL; header = top_next) { - top_next = header->next; - /* - * If not walking back up the down list. - */ - if (header->type != type && header->type != negtype) { - do { - if (header->serial <= serial && - !IGNORE(header)) { - /* - * Is this a "this rdataset doesn't - * exist" record? - * - * Note: unlike everywhere else, we - * check for now > header->ttl instead - * of now >= header->ttl. This allows - * ANY and RRSIG queries for 0 TTL - * rdatasets to work. - */ - if ((header->attributes & - RDATASET_ATTR_NONEXISTENT) != 0 || - (now != 0 && now > header->rdh_ttl)) - header = NULL; - break; - } else - header = header->down; - } while (header != NULL); - if (header != NULL) - break; - } - } - - NODE_UNLOCK(&rbtdb->node_locks[rbtnode->locknum].lock, - isc_rwlocktype_read); - - rbtiterator->current = header; - - if (header == NULL) - return (ISC_R_NOMORE); - - return (ISC_R_SUCCESS); + rbtdb_rdatasetiter_t *rbtiterator = (rbtdb_rdatasetiter_t *)iterator; + dns_rbtdb_t *rbtdb = (dns_rbtdb_t *)(rbtiterator->common.db); + dns_rbtnode_t *rbtnode = rbtiterator->common.node; + rbtdb_version_t *rbtversion = rbtiterator->common.version; + rdatasetheader_t *header, *top_next; + rbtdb_serial_t serial; + isc_stdtime_t now; + rbtdb_rdatatype_t type, negtype; + dns_rdatatype_t rdtype, covers; + + header = rbtiterator->current; + if (header == NULL) + return (ISC_R_NOMORE); + + if (IS_CACHE(rbtdb)) { + serial = 1; + now = rbtiterator->common.now; + } else { + serial = rbtversion->serial; + now = 0; + } + + NODE_LOCK(&rbtdb->node_locks[rbtnode->locknum].lock, + isc_rwlocktype_read); + + type = header->type; + rdtype = RBTDB_RDATATYPE_BASE(header->type); + if (rdtype == 0) { + covers = RBTDB_RDATATYPE_EXT(header->type); + negtype = RBTDB_RDATATYPE_VALUE(covers, 0); + } else + negtype = RBTDB_RDATATYPE_VALUE(0, rdtype); + for (header = header->next; header != NULL; header = top_next) { + top_next = header->next; + /* + * If not walking back up the down list. + */ + if (header->type != type && header->type != negtype) { + do { + if (header->serial <= serial && + !IGNORE(header)) { + /* + * Is this a "this rdataset doesn't + * exist" record? + * + * Note: unlike everywhere else, we + * check for now > header->ttl instead + * of now >= header->ttl. This allows + * ANY and RRSIG queries for 0 TTL + * rdatasets to work. + */ + if ((header->attributes & + RDATASET_ATTR_NONEXISTENT) != 0 || + (now != 0 && now > header->rdh_ttl)) + header = NULL; + break; + } else + header = header->down; + } while (header != NULL); + if (header != NULL) + break; + } + } + + NODE_UNLOCK(&rbtdb->node_locks[rbtnode->locknum].lock, + isc_rwlocktype_read); + + rbtiterator->current = header; + + if (header == NULL) + return (ISC_R_NOMORE); + + return (ISC_R_SUCCESS); } static void rdatasetiter_current(dns_rdatasetiter_t *iterator, dns_rdataset_t *rdataset) { - rbtdb_rdatasetiter_t *rbtiterator = (rbtdb_rdatasetiter_t *)iterator; - dns_rbtdb_t *rbtdb = (dns_rbtdb_t *)(rbtiterator->common.db); - dns_rbtnode_t *rbtnode = rbtiterator->common.node; - rdatasetheader_t *header; + rbtdb_rdatasetiter_t *rbtiterator = (rbtdb_rdatasetiter_t *)iterator; + dns_rbtdb_t *rbtdb = (dns_rbtdb_t *)(rbtiterator->common.db); + dns_rbtnode_t *rbtnode = rbtiterator->common.node; + rdatasetheader_t *header; - header = rbtiterator->current; - REQUIRE(header != NULL); + header = rbtiterator->current; + REQUIRE(header != NULL); - NODE_LOCK(&rbtdb->node_locks[rbtnode->locknum].lock, - isc_rwlocktype_read); + NODE_LOCK(&rbtdb->node_locks[rbtnode->locknum].lock, + isc_rwlocktype_read); - bind_rdataset(rbtdb, rbtnode, header, rbtiterator->common.now, - rdataset); + bind_rdataset(rbtdb, rbtnode, header, rbtiterator->common.now, + rdataset); - NODE_UNLOCK(&rbtdb->node_locks[rbtnode->locknum].lock, - isc_rwlocktype_read); + NODE_UNLOCK(&rbtdb->node_locks[rbtnode->locknum].lock, + isc_rwlocktype_read); } @@ -6708,410 +6539,410 @@ rdatasetiter_current(dns_rdatasetiter_t *iterator, dns_rdataset_t *rdataset) { static inline void reference_iter_node(rbtdb_dbiterator_t *rbtdbiter) { - dns_rbtdb_t *rbtdb = (dns_rbtdb_t *)rbtdbiter->common.db; - dns_rbtnode_t *node = rbtdbiter->node; + dns_rbtdb_t *rbtdb = (dns_rbtdb_t *)rbtdbiter->common.db; + dns_rbtnode_t *node = rbtdbiter->node; - if (node == NULL) - return; + if (node == NULL) + return; - INSIST(rbtdbiter->tree_locked != isc_rwlocktype_none); - NODE_STRONGLOCK(&rbtdb->node_locks[node->locknum].lock); - new_reference(rbtdb, node); - NODE_STRONGUNLOCK(&rbtdb->node_locks[node->locknum].lock); + INSIST(rbtdbiter->tree_locked != isc_rwlocktype_none); + NODE_STRONGLOCK(&rbtdb->node_locks[node->locknum].lock); + new_reference(rbtdb, node); + NODE_STRONGUNLOCK(&rbtdb->node_locks[node->locknum].lock); } static inline void dereference_iter_node(rbtdb_dbiterator_t *rbtdbiter) { - dns_rbtdb_t *rbtdb = (dns_rbtdb_t *)rbtdbiter->common.db; - dns_rbtnode_t *node = rbtdbiter->node; - nodelock_t *lock; + dns_rbtdb_t *rbtdb = (dns_rbtdb_t *)rbtdbiter->common.db; + dns_rbtnode_t *node = rbtdbiter->node; + nodelock_t *lock; - if (node == NULL) - return; + if (node == NULL) + return; - lock = &rbtdb->node_locks[node->locknum].lock; - NODE_LOCK(lock, isc_rwlocktype_read); - decrement_reference(rbtdb, node, 0, isc_rwlocktype_read, - rbtdbiter->tree_locked); - NODE_UNLOCK(lock, isc_rwlocktype_read); + lock = &rbtdb->node_locks[node->locknum].lock; + NODE_LOCK(lock, isc_rwlocktype_read); + decrement_reference(rbtdb, node, 0, isc_rwlocktype_read, + rbtdbiter->tree_locked); + NODE_UNLOCK(lock, isc_rwlocktype_read); - rbtdbiter->node = NULL; + rbtdbiter->node = NULL; } static void flush_deletions(rbtdb_dbiterator_t *rbtdbiter) { - dns_rbtnode_t *node; - dns_rbtdb_t *rbtdb = (dns_rbtdb_t *)rbtdbiter->common.db; - isc_boolean_t was_read_locked = ISC_FALSE; - nodelock_t *lock; - int i; - - if (rbtdbiter->delete != 0) { - /* - * Note that "%d node of %d in tree" can report things like - * "flush_deletions: 59 nodes of 41 in tree". This means - * That some nodes appear on the deletions list more than - * once. Only the last occurence will actually be deleted. - */ - isc_log_write(dns_lctx, DNS_LOGCATEGORY_DATABASE, - DNS_LOGMODULE_CACHE, ISC_LOG_DEBUG(1), - "flush_deletions: %d nodes of %d in tree", - rbtdbiter->delete, - dns_rbt_nodecount(rbtdb->tree)); - - if (rbtdbiter->tree_locked == isc_rwlocktype_read) { - RWUNLOCK(&rbtdb->tree_lock, isc_rwlocktype_read); - was_read_locked = ISC_TRUE; - } - RWLOCK(&rbtdb->tree_lock, isc_rwlocktype_write); - rbtdbiter->tree_locked = isc_rwlocktype_write; - - for (i = 0; i < rbtdbiter->delete; i++) { - node = rbtdbiter->deletions[i]; - lock = &rbtdb->node_locks[node->locknum].lock; - - NODE_LOCK(lock, isc_rwlocktype_read); - decrement_reference(rbtdb, node, 0, - isc_rwlocktype_read, - rbtdbiter->tree_locked); - NODE_UNLOCK(lock, isc_rwlocktype_read); - } - - rbtdbiter->delete = 0; - - RWUNLOCK(&rbtdb->tree_lock, isc_rwlocktype_write); - if (was_read_locked) { - RWLOCK(&rbtdb->tree_lock, isc_rwlocktype_read); - rbtdbiter->tree_locked = isc_rwlocktype_read; - - } else { - rbtdbiter->tree_locked = isc_rwlocktype_none; - } - } + dns_rbtnode_t *node; + dns_rbtdb_t *rbtdb = (dns_rbtdb_t *)rbtdbiter->common.db; + isc_boolean_t was_read_locked = ISC_FALSE; + nodelock_t *lock; + int i; + + if (rbtdbiter->delete != 0) { + /* + * Note that "%d node of %d in tree" can report things like + * "flush_deletions: 59 nodes of 41 in tree". This means + * That some nodes appear on the deletions list more than + * once. Only the last occurence will actually be deleted. + */ + isc_log_write(dns_lctx, DNS_LOGCATEGORY_DATABASE, + DNS_LOGMODULE_CACHE, ISC_LOG_DEBUG(1), + "flush_deletions: %d nodes of %d in tree", + rbtdbiter->delete, + dns_rbt_nodecount(rbtdb->tree)); + + if (rbtdbiter->tree_locked == isc_rwlocktype_read) { + RWUNLOCK(&rbtdb->tree_lock, isc_rwlocktype_read); + was_read_locked = ISC_TRUE; + } + RWLOCK(&rbtdb->tree_lock, isc_rwlocktype_write); + rbtdbiter->tree_locked = isc_rwlocktype_write; + + for (i = 0; i < rbtdbiter->delete; i++) { + node = rbtdbiter->deletions[i]; + lock = &rbtdb->node_locks[node->locknum].lock; + + NODE_LOCK(lock, isc_rwlocktype_read); + decrement_reference(rbtdb, node, 0, + isc_rwlocktype_read, + rbtdbiter->tree_locked); + NODE_UNLOCK(lock, isc_rwlocktype_read); + } + + rbtdbiter->delete = 0; + + RWUNLOCK(&rbtdb->tree_lock, isc_rwlocktype_write); + if (was_read_locked) { + RWLOCK(&rbtdb->tree_lock, isc_rwlocktype_read); + rbtdbiter->tree_locked = isc_rwlocktype_read; + + } else { + rbtdbiter->tree_locked = isc_rwlocktype_none; + } + } } static inline void resume_iteration(rbtdb_dbiterator_t *rbtdbiter) { - dns_rbtdb_t *rbtdb = (dns_rbtdb_t *)rbtdbiter->common.db; + dns_rbtdb_t *rbtdb = (dns_rbtdb_t *)rbtdbiter->common.db; - REQUIRE(rbtdbiter->paused); - REQUIRE(rbtdbiter->tree_locked == isc_rwlocktype_none); + REQUIRE(rbtdbiter->paused); + REQUIRE(rbtdbiter->tree_locked == isc_rwlocktype_none); - RWLOCK(&rbtdb->tree_lock, isc_rwlocktype_read); - rbtdbiter->tree_locked = isc_rwlocktype_read; + RWLOCK(&rbtdb->tree_lock, isc_rwlocktype_read); + rbtdbiter->tree_locked = isc_rwlocktype_read; - rbtdbiter->paused = ISC_FALSE; + rbtdbiter->paused = ISC_FALSE; } static void dbiterator_destroy(dns_dbiterator_t **iteratorp) { - rbtdb_dbiterator_t *rbtdbiter = (rbtdb_dbiterator_t *)(*iteratorp); - dns_rbtdb_t *rbtdb = (dns_rbtdb_t *)rbtdbiter->common.db; - dns_db_t *db = NULL; + rbtdb_dbiterator_t *rbtdbiter = (rbtdb_dbiterator_t *)(*iteratorp); + dns_rbtdb_t *rbtdb = (dns_rbtdb_t *)rbtdbiter->common.db; + dns_db_t *db = NULL; - if (rbtdbiter->tree_locked == isc_rwlocktype_read) { - RWUNLOCK(&rbtdb->tree_lock, isc_rwlocktype_read); - rbtdbiter->tree_locked = isc_rwlocktype_none; - } else - INSIST(rbtdbiter->tree_locked == isc_rwlocktype_none); + if (rbtdbiter->tree_locked == isc_rwlocktype_read) { + RWUNLOCK(&rbtdb->tree_lock, isc_rwlocktype_read); + rbtdbiter->tree_locked = isc_rwlocktype_none; + } else + INSIST(rbtdbiter->tree_locked == isc_rwlocktype_none); - dereference_iter_node(rbtdbiter); + dereference_iter_node(rbtdbiter); - flush_deletions(rbtdbiter); + flush_deletions(rbtdbiter); - dns_db_attach(rbtdbiter->common.db, &db); - dns_db_detach(&rbtdbiter->common.db); + dns_db_attach(rbtdbiter->common.db, &db); + dns_db_detach(&rbtdbiter->common.db); - dns_rbtnodechain_reset(&rbtdbiter->chain); - isc_mem_put(db->mctx, rbtdbiter, sizeof(*rbtdbiter)); - dns_db_detach(&db); + dns_rbtnodechain_reset(&rbtdbiter->chain); + isc_mem_put(db->mctx, rbtdbiter, sizeof(*rbtdbiter)); + dns_db_detach(&db); - *iteratorp = NULL; + *iteratorp = NULL; } static isc_result_t dbiterator_first(dns_dbiterator_t *iterator) { - isc_result_t result; - rbtdb_dbiterator_t *rbtdbiter = (rbtdb_dbiterator_t *)iterator; - dns_rbtdb_t *rbtdb = (dns_rbtdb_t *)iterator->db; - dns_name_t *name, *origin; - - if (rbtdbiter->result != ISC_R_SUCCESS && - rbtdbiter->result != ISC_R_NOMORE) - return (rbtdbiter->result); - - if (rbtdbiter->paused) - resume_iteration(rbtdbiter); - - dereference_iter_node(rbtdbiter); - - name = dns_fixedname_name(&rbtdbiter->name); - origin = dns_fixedname_name(&rbtdbiter->origin); - dns_rbtnodechain_reset(&rbtdbiter->chain); - - result = dns_rbtnodechain_first(&rbtdbiter->chain, rbtdb->tree, name, - origin); - - if (result == ISC_R_SUCCESS || result == DNS_R_NEWORIGIN) { - result = dns_rbtnodechain_current(&rbtdbiter->chain, NULL, - NULL, &rbtdbiter->node); - if (result == ISC_R_SUCCESS) { - rbtdbiter->new_origin = ISC_TRUE; - reference_iter_node(rbtdbiter); - } - } else { - INSIST(result == ISC_R_NOTFOUND); - result = ISC_R_NOMORE; /* The tree is empty. */ - } - - rbtdbiter->result = result; - - return (result); + isc_result_t result; + rbtdb_dbiterator_t *rbtdbiter = (rbtdb_dbiterator_t *)iterator; + dns_rbtdb_t *rbtdb = (dns_rbtdb_t *)iterator->db; + dns_name_t *name, *origin; + + if (rbtdbiter->result != ISC_R_SUCCESS && + rbtdbiter->result != ISC_R_NOMORE) + return (rbtdbiter->result); + + if (rbtdbiter->paused) + resume_iteration(rbtdbiter); + + dereference_iter_node(rbtdbiter); + + name = dns_fixedname_name(&rbtdbiter->name); + origin = dns_fixedname_name(&rbtdbiter->origin); + dns_rbtnodechain_reset(&rbtdbiter->chain); + + result = dns_rbtnodechain_first(&rbtdbiter->chain, rbtdb->tree, name, + origin); + + if (result == ISC_R_SUCCESS || result == DNS_R_NEWORIGIN) { + result = dns_rbtnodechain_current(&rbtdbiter->chain, NULL, + NULL, &rbtdbiter->node); + if (result == ISC_R_SUCCESS) { + rbtdbiter->new_origin = ISC_TRUE; + reference_iter_node(rbtdbiter); + } + } else { + INSIST(result == ISC_R_NOTFOUND); + result = ISC_R_NOMORE; /* The tree is empty. */ + } + + rbtdbiter->result = result; + + return (result); } static isc_result_t dbiterator_last(dns_dbiterator_t *iterator) { - isc_result_t result; - rbtdb_dbiterator_t *rbtdbiter = (rbtdb_dbiterator_t *)iterator; - dns_rbtdb_t *rbtdb = (dns_rbtdb_t *)iterator->db; - dns_name_t *name, *origin; - - if (rbtdbiter->result != ISC_R_SUCCESS && - rbtdbiter->result != ISC_R_NOMORE) - return (rbtdbiter->result); - - if (rbtdbiter->paused) - resume_iteration(rbtdbiter); - - dereference_iter_node(rbtdbiter); - - name = dns_fixedname_name(&rbtdbiter->name); - origin = dns_fixedname_name(&rbtdbiter->origin); - dns_rbtnodechain_reset(&rbtdbiter->chain); - - result = dns_rbtnodechain_last(&rbtdbiter->chain, rbtdb->tree, name, - origin); - if (result == ISC_R_SUCCESS || result == DNS_R_NEWORIGIN) { - result = dns_rbtnodechain_current(&rbtdbiter->chain, NULL, - NULL, &rbtdbiter->node); - if (result == ISC_R_SUCCESS) { - rbtdbiter->new_origin = ISC_TRUE; - reference_iter_node(rbtdbiter); - } - } else { - INSIST(result == ISC_R_NOTFOUND); - result = ISC_R_NOMORE; /* The tree is empty. */ - } - - rbtdbiter->result = result; - - return (result); + isc_result_t result; + rbtdb_dbiterator_t *rbtdbiter = (rbtdb_dbiterator_t *)iterator; + dns_rbtdb_t *rbtdb = (dns_rbtdb_t *)iterator->db; + dns_name_t *name, *origin; + + if (rbtdbiter->result != ISC_R_SUCCESS && + rbtdbiter->result != ISC_R_NOMORE) + return (rbtdbiter->result); + + if (rbtdbiter->paused) + resume_iteration(rbtdbiter); + + dereference_iter_node(rbtdbiter); + + name = dns_fixedname_name(&rbtdbiter->name); + origin = dns_fixedname_name(&rbtdbiter->origin); + dns_rbtnodechain_reset(&rbtdbiter->chain); + + result = dns_rbtnodechain_last(&rbtdbiter->chain, rbtdb->tree, name, + origin); + if (result == ISC_R_SUCCESS || result == DNS_R_NEWORIGIN) { + result = dns_rbtnodechain_current(&rbtdbiter->chain, NULL, + NULL, &rbtdbiter->node); + if (result == ISC_R_SUCCESS) { + rbtdbiter->new_origin = ISC_TRUE; + reference_iter_node(rbtdbiter); + } + } else { + INSIST(result == ISC_R_NOTFOUND); + result = ISC_R_NOMORE; /* The tree is empty. */ + } + + rbtdbiter->result = result; + + return (result); } static isc_result_t dbiterator_seek(dns_dbiterator_t *iterator, dns_name_t *name) { - isc_result_t result; - rbtdb_dbiterator_t *rbtdbiter = (rbtdb_dbiterator_t *)iterator; - dns_rbtdb_t *rbtdb = (dns_rbtdb_t *)iterator->db; - dns_name_t *iname, *origin; + isc_result_t result; + rbtdb_dbiterator_t *rbtdbiter = (rbtdb_dbiterator_t *)iterator; + dns_rbtdb_t *rbtdb = (dns_rbtdb_t *)iterator->db; + dns_name_t *iname, *origin; - if (rbtdbiter->result != ISC_R_SUCCESS && - rbtdbiter->result != ISC_R_NOMORE) - return (rbtdbiter->result); + if (rbtdbiter->result != ISC_R_SUCCESS && + rbtdbiter->result != ISC_R_NOMORE) + return (rbtdbiter->result); - if (rbtdbiter->paused) - resume_iteration(rbtdbiter); + if (rbtdbiter->paused) + resume_iteration(rbtdbiter); - dereference_iter_node(rbtdbiter); + dereference_iter_node(rbtdbiter); - iname = dns_fixedname_name(&rbtdbiter->name); - origin = dns_fixedname_name(&rbtdbiter->origin); - dns_rbtnodechain_reset(&rbtdbiter->chain); + iname = dns_fixedname_name(&rbtdbiter->name); + origin = dns_fixedname_name(&rbtdbiter->origin); + dns_rbtnodechain_reset(&rbtdbiter->chain); - result = dns_rbt_findnode(rbtdb->tree, name, NULL, &rbtdbiter->node, - &rbtdbiter->chain, DNS_RBTFIND_EMPTYDATA, - NULL, NULL); - if (result == ISC_R_SUCCESS) { - result = dns_rbtnodechain_current(&rbtdbiter->chain, iname, - origin, NULL); - if (result == ISC_R_SUCCESS) { - rbtdbiter->new_origin = ISC_TRUE; - reference_iter_node(rbtdbiter); - } + result = dns_rbt_findnode(rbtdb->tree, name, NULL, &rbtdbiter->node, + &rbtdbiter->chain, DNS_RBTFIND_EMPTYDATA, + NULL, NULL); + if (result == ISC_R_SUCCESS) { + result = dns_rbtnodechain_current(&rbtdbiter->chain, iname, + origin, NULL); + if (result == ISC_R_SUCCESS) { + rbtdbiter->new_origin = ISC_TRUE; + reference_iter_node(rbtdbiter); + } - } else if (result == DNS_R_PARTIALMATCH) - result = ISC_R_NOTFOUND; + } else if (result == DNS_R_PARTIALMATCH) + result = ISC_R_NOTFOUND; - rbtdbiter->result = result; + rbtdbiter->result = result; - return (result); + return (result); } static isc_result_t dbiterator_prev(dns_dbiterator_t *iterator) { - isc_result_t result; - rbtdb_dbiterator_t *rbtdbiter = (rbtdb_dbiterator_t *)iterator; - dns_name_t *name, *origin; + isc_result_t result; + rbtdb_dbiterator_t *rbtdbiter = (rbtdb_dbiterator_t *)iterator; + dns_name_t *name, *origin; - REQUIRE(rbtdbiter->node != NULL); + REQUIRE(rbtdbiter->node != NULL); - if (rbtdbiter->result != ISC_R_SUCCESS) - return (rbtdbiter->result); + if (rbtdbiter->result != ISC_R_SUCCESS) + return (rbtdbiter->result); - if (rbtdbiter->paused) - resume_iteration(rbtdbiter); + if (rbtdbiter->paused) + resume_iteration(rbtdbiter); - name = dns_fixedname_name(&rbtdbiter->name); - origin = dns_fixedname_name(&rbtdbiter->origin); - result = dns_rbtnodechain_prev(&rbtdbiter->chain, name, origin); + name = dns_fixedname_name(&rbtdbiter->name); + origin = dns_fixedname_name(&rbtdbiter->origin); + result = dns_rbtnodechain_prev(&rbtdbiter->chain, name, origin); - dereference_iter_node(rbtdbiter); + dereference_iter_node(rbtdbiter); - if (result == DNS_R_NEWORIGIN || result == ISC_R_SUCCESS) { - rbtdbiter->new_origin = ISC_TF(result == DNS_R_NEWORIGIN); - result = dns_rbtnodechain_current(&rbtdbiter->chain, NULL, - NULL, &rbtdbiter->node); - } + if (result == DNS_R_NEWORIGIN || result == ISC_R_SUCCESS) { + rbtdbiter->new_origin = ISC_TF(result == DNS_R_NEWORIGIN); + result = dns_rbtnodechain_current(&rbtdbiter->chain, NULL, + NULL, &rbtdbiter->node); + } - if (result == ISC_R_SUCCESS) - reference_iter_node(rbtdbiter); + if (result == ISC_R_SUCCESS) + reference_iter_node(rbtdbiter); - rbtdbiter->result = result; + rbtdbiter->result = result; - return (result); + return (result); } static isc_result_t dbiterator_next(dns_dbiterator_t *iterator) { - isc_result_t result; - rbtdb_dbiterator_t *rbtdbiter = (rbtdb_dbiterator_t *)iterator; - dns_name_t *name, *origin; + isc_result_t result; + rbtdb_dbiterator_t *rbtdbiter = (rbtdb_dbiterator_t *)iterator; + dns_name_t *name, *origin; - REQUIRE(rbtdbiter->node != NULL); + REQUIRE(rbtdbiter->node != NULL); - if (rbtdbiter->result != ISC_R_SUCCESS) - return (rbtdbiter->result); + if (rbtdbiter->result != ISC_R_SUCCESS) + return (rbtdbiter->result); - if (rbtdbiter->paused) - resume_iteration(rbtdbiter); + if (rbtdbiter->paused) + resume_iteration(rbtdbiter); - name = dns_fixedname_name(&rbtdbiter->name); - origin = dns_fixedname_name(&rbtdbiter->origin); - result = dns_rbtnodechain_next(&rbtdbiter->chain, name, origin); + name = dns_fixedname_name(&rbtdbiter->name); + origin = dns_fixedname_name(&rbtdbiter->origin); + result = dns_rbtnodechain_next(&rbtdbiter->chain, name, origin); - dereference_iter_node(rbtdbiter); + dereference_iter_node(rbtdbiter); - if (result == DNS_R_NEWORIGIN || result == ISC_R_SUCCESS) { - rbtdbiter->new_origin = ISC_TF(result == DNS_R_NEWORIGIN); - result = dns_rbtnodechain_current(&rbtdbiter->chain, NULL, - NULL, &rbtdbiter->node); - } - if (result == ISC_R_SUCCESS) - reference_iter_node(rbtdbiter); + if (result == DNS_R_NEWORIGIN || result == ISC_R_SUCCESS) { + rbtdbiter->new_origin = ISC_TF(result == DNS_R_NEWORIGIN); + result = dns_rbtnodechain_current(&rbtdbiter->chain, NULL, + NULL, &rbtdbiter->node); + } + if (result == ISC_R_SUCCESS) + reference_iter_node(rbtdbiter); - rbtdbiter->result = result; + rbtdbiter->result = result; - return (result); + return (result); } static isc_result_t dbiterator_current(dns_dbiterator_t *iterator, dns_dbnode_t **nodep, - dns_name_t *name) + dns_name_t *name) { - dns_rbtdb_t *rbtdb = (dns_rbtdb_t *)iterator->db; - rbtdb_dbiterator_t *rbtdbiter = (rbtdb_dbiterator_t *)iterator; - dns_rbtnode_t *node = rbtdbiter->node; - isc_result_t result; - dns_name_t *nodename = dns_fixedname_name(&rbtdbiter->name); - dns_name_t *origin = dns_fixedname_name(&rbtdbiter->origin); - - REQUIRE(rbtdbiter->result == ISC_R_SUCCESS); - REQUIRE(rbtdbiter->node != NULL); - - if (rbtdbiter->paused) - resume_iteration(rbtdbiter); - - if (name != NULL) { - if (rbtdbiter->common.relative_names) - origin = NULL; - result = dns_name_concatenate(nodename, origin, name, NULL); - if (result != ISC_R_SUCCESS) - return (result); - if (rbtdbiter->common.relative_names && rbtdbiter->new_origin) - result = DNS_R_NEWORIGIN; - } else - result = ISC_R_SUCCESS; - - NODE_STRONGLOCK(&rbtdb->node_locks[node->locknum].lock); - new_reference(rbtdb, node); - NODE_STRONGUNLOCK(&rbtdb->node_locks[node->locknum].lock); - - *nodep = rbtdbiter->node; - - if (iterator->cleaning && result == ISC_R_SUCCESS) { - isc_result_t expire_result; - - /* - * If the deletion array is full, flush it before trying - * to expire the current node. The current node can't - * fully deleted while the iteration cursor is still on it. - */ - if (rbtdbiter->delete == DELETION_BATCH_MAX) - flush_deletions(rbtdbiter); - - expire_result = expirenode(iterator->db, *nodep, 0); - - /* - * expirenode() currently always returns success. - */ - if (expire_result == ISC_R_SUCCESS && node->down == NULL) { - unsigned int refs; - - rbtdbiter->deletions[rbtdbiter->delete++] = node; - NODE_STRONGLOCK(&rbtdb->node_locks[node->locknum].lock); - dns_rbtnode_refincrement(node, &refs); - INSIST(refs != 0); - NODE_STRONGUNLOCK(&rbtdb->node_locks[node->locknum].lock); - } - } - - return (result); + dns_rbtdb_t *rbtdb = (dns_rbtdb_t *)iterator->db; + rbtdb_dbiterator_t *rbtdbiter = (rbtdb_dbiterator_t *)iterator; + dns_rbtnode_t *node = rbtdbiter->node; + isc_result_t result; + dns_name_t *nodename = dns_fixedname_name(&rbtdbiter->name); + dns_name_t *origin = dns_fixedname_name(&rbtdbiter->origin); + + REQUIRE(rbtdbiter->result == ISC_R_SUCCESS); + REQUIRE(rbtdbiter->node != NULL); + + if (rbtdbiter->paused) + resume_iteration(rbtdbiter); + + if (name != NULL) { + if (rbtdbiter->common.relative_names) + origin = NULL; + result = dns_name_concatenate(nodename, origin, name, NULL); + if (result != ISC_R_SUCCESS) + return (result); + if (rbtdbiter->common.relative_names && rbtdbiter->new_origin) + result = DNS_R_NEWORIGIN; + } else + result = ISC_R_SUCCESS; + + NODE_STRONGLOCK(&rbtdb->node_locks[node->locknum].lock); + new_reference(rbtdb, node); + NODE_STRONGUNLOCK(&rbtdb->node_locks[node->locknum].lock); + + *nodep = rbtdbiter->node; + + if (iterator->cleaning && result == ISC_R_SUCCESS) { + isc_result_t expire_result; + + /* + * If the deletion array is full, flush it before trying + * to expire the current node. The current node can't + * fully deleted while the iteration cursor is still on it. + */ + if (rbtdbiter->delete == DELETION_BATCH_MAX) + flush_deletions(rbtdbiter); + + expire_result = expirenode(iterator->db, *nodep, 0); + + /* + * expirenode() currently always returns success. + */ + if (expire_result == ISC_R_SUCCESS && node->down == NULL) { + unsigned int refs; + + rbtdbiter->deletions[rbtdbiter->delete++] = node; + NODE_STRONGLOCK(&rbtdb->node_locks[node->locknum].lock); + dns_rbtnode_refincrement(node, &refs); + INSIST(refs != 0); + NODE_STRONGUNLOCK(&rbtdb->node_locks[node->locknum].lock); + } + } + + return (result); } static isc_result_t dbiterator_pause(dns_dbiterator_t *iterator) { - dns_rbtdb_t *rbtdb = (dns_rbtdb_t *)iterator->db; - rbtdb_dbiterator_t *rbtdbiter = (rbtdb_dbiterator_t *)iterator; + dns_rbtdb_t *rbtdb = (dns_rbtdb_t *)iterator->db; + rbtdb_dbiterator_t *rbtdbiter = (rbtdb_dbiterator_t *)iterator; - if (rbtdbiter->result != ISC_R_SUCCESS && - rbtdbiter->result != ISC_R_NOMORE) - return (rbtdbiter->result); + if (rbtdbiter->result != ISC_R_SUCCESS && + rbtdbiter->result != ISC_R_NOMORE) + return (rbtdbiter->result); - if (rbtdbiter->paused) - return (ISC_R_SUCCESS); + if (rbtdbiter->paused) + return (ISC_R_SUCCESS); - rbtdbiter->paused = ISC_TRUE; + rbtdbiter->paused = ISC_TRUE; - if (rbtdbiter->tree_locked != isc_rwlocktype_none) { - INSIST(rbtdbiter->tree_locked == isc_rwlocktype_read); - RWUNLOCK(&rbtdb->tree_lock, isc_rwlocktype_read); - rbtdbiter->tree_locked = isc_rwlocktype_none; - } + if (rbtdbiter->tree_locked != isc_rwlocktype_none) { + INSIST(rbtdbiter->tree_locked == isc_rwlocktype_read); + RWUNLOCK(&rbtdb->tree_lock, isc_rwlocktype_read); + rbtdbiter->tree_locked = isc_rwlocktype_none; + } - flush_deletions(rbtdbiter); + flush_deletions(rbtdbiter); - return (ISC_R_SUCCESS); + return (ISC_R_SUCCESS); } static isc_result_t dbiterator_origin(dns_dbiterator_t *iterator, dns_name_t *name) { - rbtdb_dbiterator_t *rbtdbiter = (rbtdb_dbiterator_t *)iterator; - dns_name_t *origin = dns_fixedname_name(&rbtdbiter->origin); + rbtdb_dbiterator_t *rbtdbiter = (rbtdb_dbiterator_t *)iterator; + dns_name_t *origin = dns_fixedname_name(&rbtdbiter->origin); - if (rbtdbiter->result != ISC_R_SUCCESS) - return (rbtdbiter->result); + if (rbtdbiter->result != ISC_R_SUCCESS) + return (rbtdbiter->result); - return (dns_name_copy(origin, name, NULL)); + return (dns_name_copy(origin, name, NULL)); } /*% @@ -7119,352 +6950,351 @@ dbiterator_origin(dns_dbiterator_t *iterator, dns_name_t *name) { */ static isc_result_t rdataset_getadditional(dns_rdataset_t *rdataset, dns_rdatasetadditional_t type, - dns_rdatatype_t qtype, dns_acache_t *acache, - dns_zone_t **zonep, dns_db_t **dbp, - dns_dbversion_t **versionp, dns_dbnode_t **nodep, - dns_name_t *fname, dns_message_t *msg, - isc_stdtime_t now) + dns_rdatatype_t qtype, dns_acache_t *acache, + dns_zone_t **zonep, dns_db_t **dbp, + dns_dbversion_t **versionp, dns_dbnode_t **nodep, + dns_name_t *fname, dns_message_t *msg, + isc_stdtime_t now) { - dns_rbtdb_t *rbtdb = rdataset->private1; - dns_rbtnode_t *rbtnode = rdataset->private2; - unsigned char *raw = rdataset->private3; /* RDATASLAB */ - unsigned int current_count = rdataset->privateuint4; - unsigned int count; - rdatasetheader_t *header; - nodelock_t *nodelock; - unsigned int total_count; - acachectl_t *acarray; - dns_acacheentry_t *entry; - isc_result_t result; - - UNUSED(qtype); /* we do not use this value at least for now */ - UNUSED(acache); - - header = (struct rdatasetheader *)(raw - sizeof(*header)); - - total_count = raw[0] * 256 + raw[1]; - INSIST(total_count > current_count); - count = total_count - current_count - 1; - - acarray = NULL; - - nodelock = &rbtdb->node_locks[rbtnode->locknum].lock; - NODE_LOCK(nodelock, isc_rwlocktype_read); - - switch (type) { - case dns_rdatasetadditional_fromauth: - acarray = header->additional_auth; - break; - case dns_rdatasetadditional_fromcache: - acarray = NULL; - break; - case dns_rdatasetadditional_fromglue: - acarray = header->additional_glue; - break; - default: - INSIST(0); - } - - if (acarray == NULL) { - if (type != dns_rdatasetadditional_fromcache) - dns_acache_countquerymiss(acache); - NODE_UNLOCK(nodelock, isc_rwlocktype_read); - return (ISC_R_NOTFOUND); - } - - if (acarray[count].entry == NULL) { - dns_acache_countquerymiss(acache); - NODE_UNLOCK(nodelock, isc_rwlocktype_read); - return (ISC_R_NOTFOUND); - } - - entry = NULL; - dns_acache_attachentry(acarray[count].entry, &entry); - - NODE_UNLOCK(nodelock, isc_rwlocktype_read); - - result = dns_acache_getentry(entry, zonep, dbp, versionp, - nodep, fname, msg, now); - - dns_acache_detachentry(&entry); - - return (result); + dns_rbtdb_t *rbtdb = rdataset->private1; + dns_rbtnode_t *rbtnode = rdataset->private2; + unsigned char *raw = rdataset->private3; /* RDATASLAB */ + unsigned int current_count = rdataset->privateuint4; + unsigned int count; + rdatasetheader_t *header; + nodelock_t *nodelock; + unsigned int total_count; + acachectl_t *acarray; + dns_acacheentry_t *entry; + isc_result_t result; + + UNUSED(qtype); /* we do not use this value at least for now */ + UNUSED(acache); + + header = (struct rdatasetheader *)(raw - sizeof(*header)); + + total_count = raw[0] * 256 + raw[1]; + INSIST(total_count > current_count); + count = total_count - current_count - 1; + + acarray = NULL; + + nodelock = &rbtdb->node_locks[rbtnode->locknum].lock; + NODE_LOCK(nodelock, isc_rwlocktype_read); + + switch (type) { + case dns_rdatasetadditional_fromauth: + acarray = header->additional_auth; + break; + case dns_rdatasetadditional_fromcache: + acarray = NULL; + break; + case dns_rdatasetadditional_fromglue: + acarray = header->additional_glue; + break; + default: + INSIST(0); + } + + if (acarray == NULL) { + if (type != dns_rdatasetadditional_fromcache) + dns_acache_countquerymiss(acache); + NODE_UNLOCK(nodelock, isc_rwlocktype_read); + return (ISC_R_NOTFOUND); + } + + if (acarray[count].entry == NULL) { + dns_acache_countquerymiss(acache); + NODE_UNLOCK(nodelock, isc_rwlocktype_read); + return (ISC_R_NOTFOUND); + } + + entry = NULL; + dns_acache_attachentry(acarray[count].entry, &entry); + + NODE_UNLOCK(nodelock, isc_rwlocktype_read); + + result = dns_acache_getentry(entry, zonep, dbp, versionp, + nodep, fname, msg, now); + + dns_acache_detachentry(&entry); + + return (result); } static void acache_callback(dns_acacheentry_t *entry, void **arg) { - dns_rbtdb_t *rbtdb; - dns_rbtnode_t *rbtnode; - nodelock_t *nodelock; - acachectl_t *acarray = NULL; - acache_cbarg_t *cbarg; - unsigned int count; - - REQUIRE(arg != NULL); - cbarg = *arg; - - /* - * The caller must hold the entry lock. - */ - - rbtdb = (dns_rbtdb_t *)cbarg->db; - rbtnode = (dns_rbtnode_t *)cbarg->node; - - nodelock = &rbtdb->node_locks[rbtnode->locknum].lock; - NODE_LOCK(nodelock, isc_rwlocktype_write); - - switch (cbarg->type) { - case dns_rdatasetadditional_fromauth: - acarray = cbarg->header->additional_auth; - break; - case dns_rdatasetadditional_fromglue: - acarray = cbarg->header->additional_glue; - break; - default: - INSIST(0); - } - - count = cbarg->count; - if (acarray[count].entry == entry) - acarray[count].entry = NULL; - INSIST(acarray[count].cbarg != NULL); - isc_mem_put(rbtdb->common.mctx, acarray[count].cbarg, - sizeof(acache_cbarg_t)); - acarray[count].cbarg = NULL; - - dns_acache_detachentry(&entry); - - NODE_UNLOCK(nodelock, isc_rwlocktype_write); - - dns_db_detachnode((dns_db_t *)rbtdb, (dns_dbnode_t **)(void*)&rbtnode); - dns_db_detach((dns_db_t **)(void*)&rbtdb); - - *arg = NULL; + dns_rbtdb_t *rbtdb; + dns_rbtnode_t *rbtnode; + nodelock_t *nodelock; + acachectl_t *acarray = NULL; + acache_cbarg_t *cbarg; + unsigned int count; + + REQUIRE(arg != NULL); + cbarg = *arg; + + /* + * The caller must hold the entry lock. + */ + + rbtdb = (dns_rbtdb_t *)cbarg->db; + rbtnode = (dns_rbtnode_t *)cbarg->node; + + nodelock = &rbtdb->node_locks[rbtnode->locknum].lock; + NODE_LOCK(nodelock, isc_rwlocktype_write); + + switch (cbarg->type) { + case dns_rdatasetadditional_fromauth: + acarray = cbarg->header->additional_auth; + break; + case dns_rdatasetadditional_fromglue: + acarray = cbarg->header->additional_glue; + break; + default: + INSIST(0); + } + + count = cbarg->count; + if (acarray != NULL && acarray[count].entry == entry) { + acarray[count].entry = NULL; + INSIST(acarray[count].cbarg == cbarg); + isc_mem_put(rbtdb->common.mctx, cbarg, sizeof(acache_cbarg_t)); + acarray[count].cbarg = NULL; + } else + isc_mem_put(rbtdb->common.mctx, cbarg, sizeof(acache_cbarg_t)); + + dns_acache_detachentry(&entry); + + NODE_UNLOCK(nodelock, isc_rwlocktype_write); + + dns_db_detachnode((dns_db_t *)rbtdb, (dns_dbnode_t **)(void*)&rbtnode); + dns_db_detach((dns_db_t **)(void*)&rbtdb); + + *arg = NULL; } static void acache_cancelentry(isc_mem_t *mctx, dns_acacheentry_t *entry, - acache_cbarg_t **cbargp) + acache_cbarg_t **cbargp) { - acache_cbarg_t *cbarg; + acache_cbarg_t *cbarg; - REQUIRE(mctx != NULL); - REQUIRE(entry != NULL); - REQUIRE(cbargp != NULL && *cbargp != NULL); + REQUIRE(mctx != NULL); + REQUIRE(entry != NULL); + REQUIRE(cbargp != NULL && *cbargp != NULL); - cbarg = *cbargp; + cbarg = *cbargp; - dns_acache_cancelentry(entry); - dns_db_detachnode(cbarg->db, &cbarg->node); - dns_db_detach(&cbarg->db); + dns_acache_cancelentry(entry); + dns_db_detachnode(cbarg->db, &cbarg->node); + dns_db_detach(&cbarg->db); - isc_mem_put(mctx, cbarg, sizeof(acache_cbarg_t)); + isc_mem_put(mctx, cbarg, sizeof(acache_cbarg_t)); - *cbargp = NULL; + *cbargp = NULL; } static isc_result_t rdataset_setadditional(dns_rdataset_t *rdataset, dns_rdatasetadditional_t type, - dns_rdatatype_t qtype, dns_acache_t *acache, - dns_zone_t *zone, dns_db_t *db, - dns_dbversion_t *version, dns_dbnode_t *node, - dns_name_t *fname) + dns_rdatatype_t qtype, dns_acache_t *acache, + dns_zone_t *zone, dns_db_t *db, + dns_dbversion_t *version, dns_dbnode_t *node, + dns_name_t *fname) { - dns_rbtdb_t *rbtdb = rdataset->private1; - dns_rbtnode_t *rbtnode = rdataset->private2; - unsigned char *raw = rdataset->private3; /* RDATASLAB */ - unsigned int current_count = rdataset->privateuint4; - rdatasetheader_t *header; - unsigned int total_count, count; - nodelock_t *nodelock; - isc_result_t result; - acachectl_t *acarray; - dns_acacheentry_t *newentry, *oldentry = NULL; - acache_cbarg_t *newcbarg, *oldcbarg = NULL; - - UNUSED(qtype); - - if (type == dns_rdatasetadditional_fromcache) - return (ISC_R_SUCCESS); - - header = (struct rdatasetheader *)(raw - sizeof(*header)); - - total_count = raw[0] * 256 + raw[1]; - INSIST(total_count > current_count); - count = total_count - current_count - 1; /* should be private data */ - - newcbarg = isc_mem_get(rbtdb->common.mctx, sizeof(*newcbarg)); - if (newcbarg == NULL) - return (ISC_R_NOMEMORY); - newcbarg->type = type; - newcbarg->count = count; - newcbarg->header = header; - newcbarg->db = NULL; - dns_db_attach((dns_db_t *)rbtdb, &newcbarg->db); - newcbarg->node = NULL; - dns_db_attachnode((dns_db_t *)rbtdb, (dns_dbnode_t *)rbtnode, - &newcbarg->node); - newentry = NULL; - result = dns_acache_createentry(acache, (dns_db_t *)rbtdb, - acache_callback, newcbarg, &newentry); - if (result != ISC_R_SUCCESS) - goto fail; - /* Set cache data in the new entry. */ - result = dns_acache_setentry(acache, newentry, zone, db, - version, node, fname); - if (result != ISC_R_SUCCESS) - goto fail; - - nodelock = &rbtdb->node_locks[rbtnode->locknum].lock; - NODE_LOCK(nodelock, isc_rwlocktype_write); - - acarray = NULL; - switch (type) { - case dns_rdatasetadditional_fromauth: - acarray = header->additional_auth; - break; - case dns_rdatasetadditional_fromglue: - acarray = header->additional_glue; - break; - default: - INSIST(0); - } - - if (acarray == NULL) { - unsigned int i; - - acarray = isc_mem_get(rbtdb->common.mctx, total_count * - sizeof(acachectl_t)); - - if (acarray == NULL) { - NODE_UNLOCK(nodelock, isc_rwlocktype_write); - goto fail; - } - - for (i = 0; i < total_count; i++) { - acarray[i].entry = NULL; - acarray[i].cbarg = NULL; - } - } - switch (type) { - case dns_rdatasetadditional_fromauth: - header->additional_auth = acarray; - break; - case dns_rdatasetadditional_fromglue: - header->additional_glue = acarray; - break; - default: - INSIST(0); - } - - if (acarray[count].entry != NULL) { - /* - * Swap the entry. Delay cleaning-up the old entry since - * it would require a node lock. - */ - oldentry = acarray[count].entry; - INSIST(acarray[count].cbarg != NULL); - oldcbarg = acarray[count].cbarg; - } - acarray[count].entry = newentry; - acarray[count].cbarg = newcbarg; - - NODE_UNLOCK(nodelock, isc_rwlocktype_write); - - if (oldentry != NULL) { - if (oldcbarg != NULL) - acache_cancelentry(rbtdb->common.mctx, oldentry, - &oldcbarg); - dns_acache_detachentry(&oldentry); - } - - return (ISC_R_SUCCESS); + dns_rbtdb_t *rbtdb = rdataset->private1; + dns_rbtnode_t *rbtnode = rdataset->private2; + unsigned char *raw = rdataset->private3; /* RDATASLAB */ + unsigned int current_count = rdataset->privateuint4; + rdatasetheader_t *header; + unsigned int total_count, count; + nodelock_t *nodelock; + isc_result_t result; + acachectl_t *acarray; + dns_acacheentry_t *newentry, *oldentry = NULL; + acache_cbarg_t *newcbarg, *oldcbarg = NULL; + + UNUSED(qtype); + + if (type == dns_rdatasetadditional_fromcache) + return (ISC_R_SUCCESS); + + header = (struct rdatasetheader *)(raw - sizeof(*header)); + + total_count = raw[0] * 256 + raw[1]; + INSIST(total_count > current_count); + count = total_count - current_count - 1; /* should be private data */ + + newcbarg = isc_mem_get(rbtdb->common.mctx, sizeof(*newcbarg)); + if (newcbarg == NULL) + return (ISC_R_NOMEMORY); + newcbarg->type = type; + newcbarg->count = count; + newcbarg->header = header; + newcbarg->db = NULL; + dns_db_attach((dns_db_t *)rbtdb, &newcbarg->db); + newcbarg->node = NULL; + dns_db_attachnode((dns_db_t *)rbtdb, (dns_dbnode_t *)rbtnode, + &newcbarg->node); + newentry = NULL; + result = dns_acache_createentry(acache, (dns_db_t *)rbtdb, + acache_callback, newcbarg, &newentry); + if (result != ISC_R_SUCCESS) + goto fail; + /* Set cache data in the new entry. */ + result = dns_acache_setentry(acache, newentry, zone, db, + version, node, fname); + if (result != ISC_R_SUCCESS) + goto fail; + + nodelock = &rbtdb->node_locks[rbtnode->locknum].lock; + NODE_LOCK(nodelock, isc_rwlocktype_write); + + acarray = NULL; + switch (type) { + case dns_rdatasetadditional_fromauth: + acarray = header->additional_auth; + break; + case dns_rdatasetadditional_fromglue: + acarray = header->additional_glue; + break; + default: + INSIST(0); + } + + if (acarray == NULL) { + unsigned int i; + + acarray = isc_mem_get(rbtdb->common.mctx, total_count * + sizeof(acachectl_t)); + + if (acarray == NULL) { + NODE_UNLOCK(nodelock, isc_rwlocktype_write); + goto fail; + } + + for (i = 0; i < total_count; i++) { + acarray[i].entry = NULL; + acarray[i].cbarg = NULL; + } + } + switch (type) { + case dns_rdatasetadditional_fromauth: + header->additional_auth = acarray; + break; + case dns_rdatasetadditional_fromglue: + header->additional_glue = acarray; + break; + default: + INSIST(0); + } + + if (acarray[count].entry != NULL) { + /* + * Swap the entry. Delay cleaning-up the old entry since + * it would require a node lock. + */ + oldentry = acarray[count].entry; + INSIST(acarray[count].cbarg != NULL); + oldcbarg = acarray[count].cbarg; + } + acarray[count].entry = newentry; + acarray[count].cbarg = newcbarg; + + NODE_UNLOCK(nodelock, isc_rwlocktype_write); + + if (oldentry != NULL) { + acache_cancelentry(rbtdb->common.mctx, oldentry, &oldcbarg); + dns_acache_detachentry(&oldentry); + } + + return (ISC_R_SUCCESS); fail: - if (newcbarg != NULL) { - if (newentry != NULL) { - acache_cancelentry(rbtdb->common.mctx, newentry, - &newcbarg); - dns_acache_detachentry(&newentry); - } else { - dns_db_detachnode((dns_db_t *)rbtdb, &newcbarg->node); - dns_db_detach(&newcbarg->db); - isc_mem_put(rbtdb->common.mctx, newcbarg, - sizeof(*newcbarg)); - } - } - - return (result); + if (newcbarg != NULL) { + if (newentry != NULL) { + acache_cancelentry(rbtdb->common.mctx, newentry, + &newcbarg); + dns_acache_detachentry(&newentry); + } else { + dns_db_detachnode((dns_db_t *)rbtdb, &newcbarg->node); + dns_db_detach(&newcbarg->db); + isc_mem_put(rbtdb->common.mctx, newcbarg, + sizeof(*newcbarg)); + } + } + + return (result); } static isc_result_t rdataset_putadditional(dns_acache_t *acache, dns_rdataset_t *rdataset, - dns_rdatasetadditional_t type, dns_rdatatype_t qtype) + dns_rdatasetadditional_t type, dns_rdatatype_t qtype) { - dns_rbtdb_t *rbtdb = rdataset->private1; - dns_rbtnode_t *rbtnode = rdataset->private2; - unsigned char *raw = rdataset->private3; /* RDATASLAB */ - unsigned int current_count = rdataset->privateuint4; - rdatasetheader_t *header; - nodelock_t *nodelock; - unsigned int total_count, count; - acachectl_t *acarray; - dns_acacheentry_t *entry; - acache_cbarg_t *cbarg; - - UNUSED(qtype); /* we do not use this value at least for now */ - UNUSED(acache); - - if (type == dns_rdatasetadditional_fromcache) - return (ISC_R_SUCCESS); - - header = (struct rdatasetheader *)(raw - sizeof(*header)); - - total_count = raw[0] * 256 + raw[1]; - INSIST(total_count > current_count); - count = total_count - current_count - 1; - - acarray = NULL; - entry = NULL; - - nodelock = &rbtdb->node_locks[rbtnode->locknum].lock; - NODE_LOCK(nodelock, isc_rwlocktype_write); - - switch (type) { - case dns_rdatasetadditional_fromauth: - acarray = header->additional_auth; - break; - case dns_rdatasetadditional_fromglue: - acarray = header->additional_glue; - break; - default: - INSIST(0); - } - - if (acarray == NULL) { - NODE_UNLOCK(nodelock, isc_rwlocktype_write); - return (ISC_R_NOTFOUND); - } - - entry = acarray[count].entry; - if (entry == NULL) { - NODE_UNLOCK(nodelock, isc_rwlocktype_write); - return (ISC_R_NOTFOUND); - } - - acarray[count].entry = NULL; - cbarg = acarray[count].cbarg; - acarray[count].cbarg = NULL; - - NODE_UNLOCK(nodelock, isc_rwlocktype_write); - - if (entry != NULL) { - if (cbarg != NULL) - acache_cancelentry(rbtdb->common.mctx, entry, &cbarg); - dns_acache_detachentry(&entry); - } - - return (ISC_R_SUCCESS); + dns_rbtdb_t *rbtdb = rdataset->private1; + dns_rbtnode_t *rbtnode = rdataset->private2; + unsigned char *raw = rdataset->private3; /* RDATASLAB */ + unsigned int current_count = rdataset->privateuint4; + rdatasetheader_t *header; + nodelock_t *nodelock; + unsigned int total_count, count; + acachectl_t *acarray; + dns_acacheentry_t *entry; + acache_cbarg_t *cbarg; + + UNUSED(qtype); /* we do not use this value at least for now */ + UNUSED(acache); + + if (type == dns_rdatasetadditional_fromcache) + return (ISC_R_SUCCESS); + + header = (struct rdatasetheader *)(raw - sizeof(*header)); + + total_count = raw[0] * 256 + raw[1]; + INSIST(total_count > current_count); + count = total_count - current_count - 1; + + acarray = NULL; + entry = NULL; + + nodelock = &rbtdb->node_locks[rbtnode->locknum].lock; + NODE_LOCK(nodelock, isc_rwlocktype_write); + + switch (type) { + case dns_rdatasetadditional_fromauth: + acarray = header->additional_auth; + break; + case dns_rdatasetadditional_fromglue: + acarray = header->additional_glue; + break; + default: + INSIST(0); + } + + if (acarray == NULL) { + NODE_UNLOCK(nodelock, isc_rwlocktype_write); + return (ISC_R_NOTFOUND); + } + + entry = acarray[count].entry; + if (entry == NULL) { + NODE_UNLOCK(nodelock, isc_rwlocktype_write); + return (ISC_R_NOTFOUND); + } + + acarray[count].entry = NULL; + cbarg = acarray[count].cbarg; + acarray[count].cbarg = NULL; + + NODE_UNLOCK(nodelock, isc_rwlocktype_write); + + if (entry != NULL) { + if (cbarg != NULL) + acache_cancelentry(rbtdb->common.mctx, entry, &cbarg); + dns_acache_detachentry(&entry); + } + + return (ISC_R_SUCCESS); } /*% @@ -7487,28 +7317,28 @@ rdataset_putadditional(dns_acache_t *acache, dns_rdataset_t *rdataset, */ static inline isc_boolean_t need_headerupdate(rdatasetheader_t *header, isc_stdtime_t now) { - if ((header->attributes & - (RDATASET_ATTR_NONEXISTENT|RDATASET_ATTR_STALE)) != 0) - return (ISC_FALSE); + if ((header->attributes & + (RDATASET_ATTR_NONEXISTENT|RDATASET_ATTR_STALE)) != 0) + return (ISC_FALSE); #ifdef ISC_PLATFORM_USETHREADS - if (header->type == dns_rdatatype_ns || - (header->trust == dns_trust_glue && - (header->type == dns_rdatatype_a || - header->type == dns_rdatatype_aaaa))) { - /* - * Glue records are updated if at least 60 seconds have passed - * since the previous update time. - */ - return (header->last_used + 60 <= now); - } - - /* Other records are updated if 5 minutes have passed. */ - return (header->last_used + 300 <= now); + if (header->type == dns_rdatatype_ns || + (header->trust == dns_trust_glue && + (header->type == dns_rdatatype_a || + header->type == dns_rdatatype_aaaa))) { + /* + * Glue records are updated if at least 60 seconds have passed + * since the previous update time. + */ + return (header->last_used + 60 <= now); + } + + /* Other records are updated if 5 minutes have passed. */ + return (header->last_used + 300 <= now); #else - UNUSED(now); + UNUSED(now); - return (ISC_TRUE); + return (ISC_TRUE); #endif } @@ -7522,16 +7352,16 @@ need_headerupdate(rdatasetheader_t *header, isc_stdtime_t now) { */ static void update_header(dns_rbtdb_t *rbtdb, rdatasetheader_t *header, - isc_stdtime_t now) + isc_stdtime_t now) { - /* To be checked: can we really assume this? XXXMLG */ - INSIST(ISC_LINK_LINKED(header, lru_link)); - - ISC_LIST_UNLINK(rbtdb->rdatasets[header->node->locknum], - header, lru_link); - header->last_used = now; - ISC_LIST_PREPEND(rbtdb->rdatasets[header->node->locknum], - header, lru_link); + /* To be checked: can we really assume this? XXXMLG */ + INSIST(ISC_LINK_LINKED(header, lru_link)); + + ISC_LIST_UNLINK(rbtdb->rdatasets[header->node->locknum], + header, lru_link); + header->last_used = now; + ISC_LIST_PREPEND(rbtdb->rdatasets[header->node->locknum], + header, lru_link); } /*% @@ -7549,83 +7379,65 @@ update_header(dns_rbtdb_t *rbtdb, rdatasetheader_t *header, */ static void check_stale_cache(dns_rbtdb_t *rbtdb, dns_rbtnode_t *rbtnode, - isc_stdtime_t now, isc_boolean_t tree_locked) + isc_stdtime_t now, isc_boolean_t tree_locked) { - rdatasetheader_t *victim; - isc_boolean_t overmem = rbtdb->overmem; - int scans = 0; /* for debug */ - int victims = 0; - - /* - * Check for TTL-based expiry. - */ - victim = isc_heap_element(rbtdb->heaps[rbtnode->locknum], 1); - if (victim != NULL && victim->rdh_ttl <= now - RBTDB_VIRTUAL) { - INSIST(victim->node->locknum == rbtnode->locknum); - -#ifdef LRU_DEBUG - /* for debug */ - rbtdb->cachestat.stale_expire++; -#endif - victims++; - - set_ttl(rbtdb, victim, 0); - victim->attributes |= RDATASET_ATTR_STALE; - victim->node->dirty = 1; - - if (dns_rbtnode_refcurrent(victim->node) == 0) { - INSIST(rbtnode != victim->node); - /* - * If no one else is using the node, we can - * clean it up now. We first need to gain - * a new reference to the node to meet a - * requirement of decrement_reference(). - */ - new_reference(rbtdb, victim->node); - decrement_reference(rbtdb, victim->node, 0, - isc_rwlocktype_write, - tree_locked ? isc_rwlocktype_write : - isc_rwlocktype_none); - } - } - - /* - * If we are over memory, delete the end entry from the LRU. - */ - victim = ISC_LIST_TAIL(rbtdb->rdatasets[rbtnode->locknum]); - if (victim != NULL && overmem) { - INSIST(victim->node->locknum == rbtnode->locknum); - -#ifdef LRU_DEBUG - /* for debug */ - rbtdb->cachestat.stale_lru++; -#endif - victims++; - scans++; - - set_ttl(rbtdb, victim, 0); - victim->attributes |= RDATASET_ATTR_STALE; - victim->node->dirty = 1; - - if (dns_rbtnode_refcurrent(victim->node) == 0) { - INSIST(rbtnode != victim->node); - /* - * If no one else is using the node, we can - * clean it up now. We first need to gain - * a new reference to the node to meet a - * requirement of decrement_reference(). - */ - new_reference(rbtdb, victim->node); - decrement_reference(rbtdb, victim->node, 0, - isc_rwlocktype_write, - tree_locked ? isc_rwlocktype_write : - isc_rwlocktype_none); - } - } - -#ifdef LRU_DEBUG - /* update statistics for debug (no lock for brevity) */ - rbtdb->cachestat.stale_scan += scans; - rbtdb->cachestat.stale_purge += victims; -#endif + rdatasetheader_t *victim; + isc_boolean_t overmem = rbtdb->overmem; + int victims = 0; + + /* + * Check for TTL-based expiry. + */ + victim = isc_heap_element(rbtdb->heaps[rbtnode->locknum], 1); + if (victim != NULL && victim->rdh_ttl <= now - RBTDB_VIRTUAL) { + INSIST(victim->node->locknum == rbtnode->locknum); + victims++; + + set_ttl(rbtdb, victim, 0); + victim->attributes |= RDATASET_ATTR_STALE; + victim->node->dirty = 1; + + if (dns_rbtnode_refcurrent(victim->node) == 0) { + INSIST(rbtnode != victim->node); + /* + * If no one else is using the node, we can + * clean it up now. We first need to gain + * a new reference to the node to meet a + * requirement of decrement_reference(). + */ + new_reference(rbtdb, victim->node); + decrement_reference(rbtdb, victim->node, 0, + isc_rwlocktype_write, + tree_locked ? isc_rwlocktype_write : + isc_rwlocktype_none); + } + } + + /* + * If we are over memory, delete the end entry from the LRU. + */ + victim = ISC_LIST_TAIL(rbtdb->rdatasets[rbtnode->locknum]); + if (victim != NULL && overmem) { + INSIST(victim->node->locknum == rbtnode->locknum); + victims++; + + set_ttl(rbtdb, victim, 0); + victim->attributes |= RDATASET_ATTR_STALE; + victim->node->dirty = 1; + + if (dns_rbtnode_refcurrent(victim->node) == 0) { + INSIST(rbtnode != victim->node); + /* + * If no one else is using the node, we can + * clean it up now. We first need to gain + * a new reference to the node to meet a + * requirement of decrement_reference(). + */ + new_reference(rbtdb, victim->node); + decrement_reference(rbtdb, victim->node, 0, + isc_rwlocktype_write, + tree_locked ? isc_rwlocktype_write : + isc_rwlocktype_none); + } + } } diff --git a/lib/dns/rdata/generic/txt_16.c b/lib/dns/rdata/generic/txt_16.c index 1d0a27a0..d3c9dc39 100644 --- a/lib/dns/rdata/generic/txt_16.c +++ b/lib/dns/rdata/generic/txt_16.c @@ -1,5 +1,5 @@ /* - * Copyright (C) 2004, 2007 Internet Systems Consortium, Inc. ("ISC") + * Copyright (C) 2004, 2007, 2008 Internet Systems Consortium, Inc. ("ISC") * Copyright (C) 1998-2002 Internet Software Consortium. * * Permission to use, copy, modify, and/or distribute this software for any @@ -15,7 +15,7 @@ * PERFORMANCE OF THIS SOFTWARE. */ -/* $Id: txt_16.c,v 1.43 2007/06/19 23:47:17 tbox Exp $ */ +/* $Id: txt_16.c,v 1.43.128.2 2008/02/15 23:46:22 tbox Exp $ */ /* Reviewed: Thu Mar 16 15:40:00 PST 2000 by bwelling */ @@ -142,7 +142,7 @@ fromstruct_txt(ARGS_FROMSTRUCT) { while (region.length > 0) { length = uint8_fromregion(®ion); isc_region_consume(®ion, 1); - if (region.length <= length) + if (region.length < length) return (ISC_R_UNEXPECTEDEND); isc_region_consume(®ion, length); } diff --git a/lib/dns/rdata/in_1/naptr_35.c b/lib/dns/rdata/in_1/naptr_35.c index 2b28711a..18ea614a 100644 --- a/lib/dns/rdata/in_1/naptr_35.c +++ b/lib/dns/rdata/in_1/naptr_35.c @@ -1,5 +1,5 @@ /* - * Copyright (C) 2004, 2005, 2007 Internet Systems Consortium, Inc. ("ISC") + * Copyright (C) 2004, 2005, 2007, 2008 Internet Systems Consortium, Inc. ("ISC") * Copyright (C) 1999-2001, 2003 Internet Software Consortium. * * Permission to use, copy, modify, and/or distribute this software for any @@ -15,7 +15,7 @@ * PERFORMANCE OF THIS SOFTWARE. */ -/* $Id: naptr_35.c,v 1.51 2007/06/19 23:47:17 tbox Exp $ */ +/* $Id: naptr_35.c,v 1.51.128.2 2008/02/15 23:46:22 tbox Exp $ */ /* Reviewed: Thu Mar 16 16:52:50 PST 2000 by bwelling */ @@ -154,7 +154,7 @@ totext_in_naptr(ARGS_TOTEXT) { static inline isc_result_t fromwire_in_naptr(ARGS_FROMWIRE) { - dns_name_t name; + dns_name_t name; isc_region_t sr; REQUIRE(type == 35); @@ -165,7 +165,7 @@ fromwire_in_naptr(ARGS_FROMWIRE) { dns_decompress_setmethods(dctx, DNS_COMPRESS_NONE); - dns_name_init(&name, NULL); + dns_name_init(&name, NULL); /* * Order, preference. @@ -321,8 +321,8 @@ fromstruct_in_naptr(ARGS_FROMSTRUCT) { REQUIRE(naptr->common.rdtype == type); REQUIRE(naptr->common.rdclass == rdclass); REQUIRE(naptr->flags != NULL || naptr->flags_len == 0); - REQUIRE(naptr->service != NULL && naptr->service_len == 0); - REQUIRE(naptr->regexp != NULL && naptr->regexp_len == 0); + REQUIRE(naptr->service != NULL || naptr->service_len == 0); + REQUIRE(naptr->regexp != NULL || naptr->regexp_len == 0); UNUSED(type); UNUSED(rdclass); diff --git a/lib/dns/rdatalist.c b/lib/dns/rdatalist.c index 4c775d2a..836d9974 100644 --- a/lib/dns/rdatalist.c +++ b/lib/dns/rdatalist.c @@ -1,5 +1,5 @@ /* - * Copyright (C) 2004, 2005, 2007 Internet Systems Consortium, Inc. ("ISC") + * Copyright (C) 2004, 2005, 2007, 2008 Internet Systems Consortium, Inc. ("ISC") * Copyright (C) 1999-2001, 2003 Internet Software Consortium. * * Permission to use, copy, modify, and/or distribute this software for any @@ -15,7 +15,7 @@ * PERFORMANCE OF THIS SOFTWARE. */ -/* $Id: rdatalist.c,v 1.33 2007/06/19 23:47:16 tbox Exp $ */ +/* $Id: rdatalist.c,v 1.33.128.2 2008/04/03 06:08:27 tbox Exp $ */ /*! \file */ @@ -88,6 +88,16 @@ dns_rdatalist_tordataset(dns_rdatalist_t *rdatalist, return (ISC_R_SUCCESS); } +isc_result_t +dns_rdatalist_fromrdataset(dns_rdataset_t *rdataset, + dns_rdatalist_t **rdatalist) +{ + REQUIRE(rdatalist != NULL && rdataset != NULL); + *rdatalist = rdataset->private1; + + return (ISC_R_SUCCESS); +} + void isc__rdatalist_disassociate(dns_rdataset_t *rdataset) { UNUSED(rdataset); diff --git a/lib/dns/rdataslab.c b/lib/dns/rdataslab.c index 6de77bac..5059a744 100644 --- a/lib/dns/rdataslab.c +++ b/lib/dns/rdataslab.c @@ -1,5 +1,5 @@ /* - * Copyright (C) 2004-2007 Internet Systems Consortium, Inc. ("ISC") + * Copyright (C) 2004-2008 Internet Systems Consortium, Inc. ("ISC") * Copyright (C) 1999-2003 Internet Software Consortium. * * Permission to use, copy, modify, and/or distribute this software for any @@ -15,7 +15,7 @@ * PERFORMANCE OF THIS SOFTWARE. */ -/* $Id: rdataslab.c,v 1.43 2007/06/18 23:47:41 tbox Exp $ */ +/* $Id: rdataslab.c,v 1.43.128.2 2008/04/23 23:46:29 tbox Exp $ */ /*! \file */ @@ -33,10 +33,6 @@ #include #include -#ifndef DNS_RDATASET_FIXED -#define DNS_RDATASET_FIXED 1 -#endif - /* * The rdataslab structure allows iteration to occur in both load order * and DNSSEC order. The structure is as follows: @@ -246,7 +242,7 @@ dns_rdataslab_fromrdataset(dns_rdataset_t *rdataset, isc_mem_t *mctx, result = ISC_R_NOMEMORY; goto free_rdatas; } - + #if DNS_RDATASET_FIXED /* Allocate temporary offset table. */ offsettable = isc_mem_get(mctx, nalloc * sizeof(unsigned int)); @@ -288,7 +284,7 @@ dns_rdataslab_fromrdataset(dns_rdataset_t *rdataset, isc_mem_t *mctx, memcpy(rawbuf, x[i].rdata.data, x[i].rdata.length); rawbuf += x[i].rdata.length; } - + #if DNS_RDATASET_FIXED fillin_offsets(offsetbase, offsettable, nalloc); isc_mem_put(mctx, offsettable, nalloc * sizeof(unsigned int)); @@ -368,7 +364,7 @@ rdataset_current(dns_rdataset_t *rdataset, dns_rdata_t *rdata) { raw += 4; #else raw += 2; -#endif +#endif r.base = raw; dns_rdata_fromregion(rdata, rdataset->rdclass, rdataset->type, &r); } @@ -511,7 +507,7 @@ rdata_in_slab(unsigned char *slab, unsigned int reservelen, for (i = 0; i < count; i++) { rdata_from_slab(¤t, rdclass, type, &trdata); - + n = dns_rdata_compare(&trdata, rdata); if (n == 0) return (ISC_TRUE); @@ -799,8 +795,8 @@ dns_rdataslab_subtract(unsigned char *mslab, unsigned char *sslab, #if DNS_RDATASET_FIXED unsigned char *offsetbase; unsigned int *offsettable; -#endif unsigned int order; +#endif REQUIRE(tslabp != NULL && *tslabp == NULL); REQUIRE(mslab != NULL && sslab != NULL); diff --git a/lib/dns/resolver.c b/lib/dns/resolver.c index e655686b..12a371d3 100644 --- a/lib/dns/resolver.c +++ b/lib/dns/resolver.c @@ -15,12 +15,13 @@ * PERFORMANCE OF THIS SOFTWARE. */ -/* $Id: resolver.c,v 1.355.12.4 2008/01/17 23:46:37 tbox Exp $ */ +/* $Id: resolver.c,v 1.355.12.15 2008/05/06 01:11:30 each Exp $ */ /*! \file */ #include +#include #include #include #include @@ -53,6 +54,7 @@ #include #include #include +#include #include #include @@ -222,7 +224,7 @@ struct fetchctx { /*% * Look aside state for DS lookups. */ - dns_name_t nsname; + dns_name_t nsname; dns_fetch_t * nsfetch; dns_rdataset_t nsrrset; @@ -351,11 +353,7 @@ struct dns_resolver { isc_timer_t * spillattimer; isc_boolean_t zero_no_soa_ttl; isc_timer_t * disppooltimer; -#ifdef LRU_DEBUG -#define DUMP_INTERVAL 30 /* seconds */ - isc_timer_t * dumptimer; - isc_time_t dump_time; -#endif + /* Locked by lock. */ unsigned int references; isc_boolean_t exiting; @@ -371,15 +369,6 @@ struct dns_resolver { /* Locked by poollock. */ dns_dispatch_t ** dispatchv4pool; dns_dispatch_t ** dispatchv6pool; - -#ifdef LRU_DEBUG - /* Unlocked: just for debug */ - unsigned int extqueries; - unsigned int extqueries_ns; - unsigned int extqueries_soa; - unsigned int extqueries_a; - unsigned int extqueries_aaaa; -#endif }; #define RES_MAGIC ISC_MAGIC('R', 'e', 's', '!') @@ -403,7 +392,7 @@ static void empty_bucket(dns_resolver_t *res); static isc_result_t resquery_send(resquery_t *query); static void resquery_response(isc_task_t *task, isc_event_t *event); static void resquery_connected(isc_task_t *task, isc_event_t *event); -static void fctx_try(fetchctx_t *fctx); +static void fctx_try(fetchctx_t *fctx, isc_boolean_t retrying); static isc_boolean_t fctx_destroy(fetchctx_t *fctx); static isc_result_t ncache_adderesult(dns_message_t *message, dns_db_t *cache, dns_dbnode_t *node, @@ -414,9 +403,14 @@ static isc_result_t ncache_adderesult(dns_message_t *message, static void validated(isc_task_t *task, isc_event_t *event); static void maybe_destroy(fetchctx_t *fctx); -#ifdef LRU_DEBUG -static void timer_dump(isc_task_t *task, isc_event_t *ev); -#endif +/*% + * Increment resolver-related statistics counters. + */ +static inline void +inc_stats(dns_resolver_t *res, dns_statscounter_t counter) { + if (res->view->resstats != NULL) + dns_generalstats_increment(res->view->resstats, counter); +} static isc_result_t valcreate(fetchctx_t *fctx, dns_adbaddrinfo_t *addrinfo, dns_name_t *name, @@ -444,6 +438,7 @@ valcreate(fetchctx_t *fctx, dns_adbaddrinfo_t *addrinfo, dns_name_t *name, valoptions, task, validated, valarg, &validator); if (result == ISC_R_SUCCESS) { + inc_stats(fctx->res, dns_resstatscounter_val); if ((valoptions & DNS_VALIDATOR_DEFER) == 0) { INSIST(fctx->validator == NULL); fctx->validator = validator; @@ -988,12 +983,13 @@ resquery_senddone(isc_task_t *task, isc_event_t *event) { if (result != ISC_R_SUCCESS) fctx_done(fctx, result); else - fctx_try(fctx); + fctx_try(fctx, ISC_TRUE); } } static inline isc_result_t -fctx_addopt(dns_message_t *message, unsigned int version, isc_uint16_t udpsize) +fctx_addopt(dns_message_t *message, unsigned int version, + isc_uint16_t udpsize, isc_boolean_t request_nsid) { dns_rdataset_t *rdataset; dns_rdatalist_t *rdatalist; @@ -1029,10 +1025,23 @@ fctx_addopt(dns_message_t *message, unsigned int version, isc_uint16_t udpsize) rdatalist->ttl |= DNS_MESSAGEEXTFLAG_DO; /* - * No EDNS options. + * Set EDNS options if applicable */ - rdata->data = NULL; - rdata->length = 0; + if (request_nsid) { + /* Send empty NSID option (RFC5001) */ + unsigned char data[4]; + isc_buffer_t buf; + + isc_buffer_init(&buf, data, sizeof(data)); + isc_buffer_putuint16(&buf, DNS_OPT_NSID); + isc_buffer_putuint16(&buf, 0); + rdata->data = data; + rdata->length = sizeof(data); + } else { + rdata->data = NULL; + rdata->length = 0; + } + rdata->rdclass = rdatalist->rdclass; rdata->type = rdatalist->type; rdata->flags = 0; @@ -1289,6 +1298,13 @@ fctx_query(fetchctx_t *fctx, dns_adbaddrinfo_t *addrinfo, ISC_LIST_APPEND(fctx->queries, query, link); query->fctx->nqueries++; + if (isc_sockaddr_pf(&addrinfo->sockaddr) == PF_INET) + inc_stats(res, dns_resstatscounter_queryv4); + else + inc_stats(res, dns_resstatscounter_queryv6); + if (res->view->resquerystats != NULL) + dns_rdatatypestats_increment(res->view->resquerystats, + fctx->type); return (ISC_R_SUCCESS); @@ -1548,6 +1564,7 @@ resquery_send(resquery_t *query) { unsigned int version = 0; /* Default version. */ unsigned int flags; isc_uint16_t udpsize = res->udpsize; + isc_boolean_t reqnsid = res->view->requestnsid; flags = query->addrinfo->flags; if ((flags & DNS_FETCHOPT_EDNSVERSIONSET) != 0) { @@ -1558,8 +1575,15 @@ resquery_send(resquery_t *query) { udpsize = 512; else if (peer != NULL) (void)dns_peer_getudpsize(peer, &udpsize); - result = fctx_addopt(fctx->qmessage, version, udpsize); - if (result != ISC_R_SUCCESS) { + + /* request NSID for current view or peer? */ + if (peer != NULL) + (void) dns_peer_getrequestnsid(peer, &reqnsid); + result = fctx_addopt(fctx->qmessage, version, + udpsize, reqnsid); + if (reqnsid && result == ISC_R_SUCCESS) { + query->options |= DNS_FETCHOPT_WANTNSID; + } else if (result != ISC_R_SUCCESS) { /* * We couldn't add the OPT, but we'll press on. * We're not using EDNS0, so set the NOEDNS0 @@ -1665,23 +1689,6 @@ resquery_send(resquery_t *query) { if (result != ISC_R_SUCCESS) goto cleanup_message; -#ifdef LRU_DEBUG - res->extqueries++; - switch (fctx->type) { - case dns_rdatatype_ns: - res->extqueries_ns++; - break; - case dns_rdatatype_soa: - res->extqueries_soa++; - break; - case dns_rdatatype_a: - res->extqueries_a++; - break; - case dns_rdatatype_aaaa: - res->extqueries_aaaa++; - break; - } -#endif query->sends++; QTRACE("sent"); @@ -1816,7 +1823,7 @@ resquery_connected(isc_task_t *task, isc_event_t *event) { if (result != ISC_R_SUCCESS) fctx_done(fctx, result); else - fctx_try(fctx); + fctx_try(fctx, ISC_TRUE); } } @@ -1875,7 +1882,7 @@ fctx_finddone(isc_task_t *task, isc_event_t *event) { dns_adb_destroyfind(&find); if (want_try) - fctx_try(fctx); + fctx_try(fctx, ISC_TRUE); else if (want_done) fctx_done(fctx, ISC_R_FAILURE); else if (bucket_empty) @@ -2270,6 +2277,13 @@ fctx_getaddresses(fetchctx_t *fctx) { } while (sa != NULL) { + if ((isc_sockaddr_pf(sa) == AF_INET && + fctx->res->dispatchv4 == NULL) || + (isc_sockaddr_pf(sa) == AF_INET6 && + fctx->res->dispatchv6 == NULL)) { + sa = ISC_LIST_NEXT(sa, link); + continue; + } ai = NULL; result = dns_adb_findaddrinfo(fctx->adb, sa, &ai, 0); /* XXXMLG */ @@ -2627,7 +2641,7 @@ fctx_nextaddress(fetchctx_t *fctx) { } static void -fctx_try(fetchctx_t *fctx) { +fctx_try(fetchctx_t *fctx, isc_boolean_t retrying) { isc_result_t result; dns_adbaddrinfo_t *addrinfo; @@ -2675,6 +2689,8 @@ fctx_try(fetchctx_t *fctx) { result = fctx_query(fctx, addrinfo, fctx->options); if (result != ISC_R_SUCCESS) fctx_done(fctx, result); + else if (retrying) + inc_stats(fctx->res, dns_resstatscounter_retry); } static isc_boolean_t @@ -2792,7 +2808,7 @@ fctx_timeout(isc_task_t *task, isc_event_t *event) { /* * Keep trying. */ - fctx_try(fctx); + fctx_try(fctx, ISC_TRUE); } isc_event_free(&event); @@ -2962,7 +2978,7 @@ fctx_start(isc_task_t *task, isc_event_t *event) { if (result != ISC_R_SUCCESS) fctx_done(fctx, result); else - fctx_try(fctx); + fctx_try(fctx, ISC_FALSE); } else if (bucket_empty) empty_bucket(res); } @@ -3565,6 +3581,7 @@ validated(isc_task_t *task, isc_event_t *event) { if (vevent->result != ISC_R_SUCCESS) { FCTXTRACE("validation failed"); + inc_stats(fctx->res, dns_resstatscounter_valfail); result = ISC_R_NOTFOUND; if (vevent->rdataset != NULL) result = dns_db_findnode(fctx->cache, vevent->name, @@ -3589,7 +3606,7 @@ validated(isc_task_t *task, isc_event_t *event) { } else if (sentresponse) fctx_done(fctx, result); /* Locks bucket. */ else - fctx_try(fctx); /* Locks bucket. */ + fctx_try(fctx, ISC_TRUE); /* Locks bucket. */ return; } @@ -3599,6 +3616,8 @@ validated(isc_task_t *task, isc_event_t *event) { dns_rdatatype_t covers; FCTXTRACE("nonexistence validation OK"); + inc_stats(fctx->res, dns_resstatscounter_valnegsuccess); + if (fctx->rmessage->rcode == dns_rcode_nxdomain) covers = dns_rdatatype_any; else @@ -3626,7 +3645,8 @@ validated(isc_task_t *task, isc_event_t *event) { if (result != ISC_R_SUCCESS) goto noanswer_response; goto answer_response; - } + } else + inc_stats(fctx->res, dns_resstatscounter_valsuccess); FCTXTRACE("validation OK"); @@ -5355,7 +5375,7 @@ resume_dslookup(isc_task_t *task, isc_event_t *event) { /* * Try again. */ - fctx_try(fctx); + fctx_try(fctx, ISC_TRUE); } else { unsigned int n; dns_rdataset_t *nsrdataset = NULL; @@ -5461,6 +5481,65 @@ checknames(dns_message_t *message) { checknamessection(message, DNS_SECTION_ADDITIONAL); } +/* + * Log server NSID at log level 'level' + */ +static isc_result_t +log_nsid(dns_rdataset_t *opt, resquery_t *query, int level, isc_mem_t *mctx) +{ + static const char hex[17] = "0123456789abcdef"; + char addrbuf[ISC_SOCKADDR_FORMATSIZE]; + isc_uint16_t optcode, nsid_len, buflen, i; + isc_result_t result; + isc_buffer_t nsidbuf; + dns_rdata_t rdata; + unsigned char *p, *buf, *nsid; + + /* Extract rdata from OPT rdataset */ + result = dns_rdataset_first(opt); + if (result != ISC_R_SUCCESS) + return (ISC_R_FAILURE); + + dns_rdata_init(&rdata); + dns_rdataset_current(opt, &rdata); + if (rdata.length < 4) + return (ISC_R_FAILURE); + + /* Check for NSID */ + isc_buffer_init(&nsidbuf, rdata.data, rdata.length); + isc_buffer_add(&nsidbuf, rdata.length); + optcode = isc_buffer_getuint16(&nsidbuf); + nsid_len = isc_buffer_getuint16(&nsidbuf); + if (optcode != DNS_OPT_NSID || nsid_len == 0) + return (ISC_R_FAILURE); + + /* Allocate buffer for storing hex version of the NSID */ + buflen = nsid_len * 2 + 1; + buf = isc_mem_get(mctx, buflen); + if (buf == NULL) + return (ISC_R_NOSPACE); + + /* Convert to hex */ + p = buf; + nsid = rdata.data + 4; + for (i = 0; i < nsid_len; i++) { + *p++ = hex[(nsid[0] >> 4) & 0xf]; + *p++ = hex[nsid[0] & 0xf]; + nsid++; + } + *p = '\0'; + + isc_sockaddr_format(&query->addrinfo->sockaddr, addrbuf, + sizeof(addrbuf)); + isc_log_write(dns_lctx, DNS_LOGCATEGORY_RESOLVER, + DNS_LOGMODULE_RESOLVER, level, + "received NSID '%s' from %s", buf, addrbuf); + + /* Clean up */ + isc_mem_put(mctx, buf, buflen); + return (ISC_R_SUCCESS); +} + static void log_packet(dns_message_t *message, int level, isc_mem_t *mctx) { isc_buffer_t buffer; @@ -5506,6 +5585,7 @@ resquery_response(isc_task_t *task, isc_event_t *event) { isc_boolean_t keep_trying, get_nameservers, resend; isc_boolean_t truncated; dns_message_t *message; + dns_rdataset_t *opt; fetchctx_t *fctx; dns_name_t *fname; dns_fixedname_t foundname; @@ -5524,6 +5604,11 @@ resquery_response(isc_task_t *task, isc_event_t *event) { QTRACE("response"); + if (isc_sockaddr_pf(&query->addrinfo->sockaddr) == PF_INET) + inc_stats(fctx->res, dns_resstatscounter_responsev4); + else + inc_stats(fctx->res, dns_resstatscounter_responsev6); + (void)isc_timer_touch(fctx->timer); keep_trying = ISC_FALSE; @@ -5625,6 +5710,8 @@ resquery_response(isc_task_t *task, isc_event_t *event) { query->addrinfo, DNS_FETCHOPT_NOEDNS0, DNS_FETCHOPT_NOEDNS0); + inc_stats(fctx->res, + dns_resstatscounter_edns0fail); } else { broken_server = result; keep_trying = ISC_TRUE; @@ -5653,6 +5740,8 @@ resquery_response(isc_task_t *task, isc_event_t *event) { query->addrinfo, DNS_FETCHOPT_NOEDNS0, DNS_FETCHOPT_NOEDNS0); + inc_stats(fctx->res, + dns_resstatscounter_edns0fail); } else { broken_server = DNS_R_UNEXPECTEDRCODE; keep_trying = ISC_TRUE; @@ -5666,11 +5755,20 @@ resquery_response(isc_task_t *task, isc_event_t *event) { } } + /* * Log the incoming packet. */ log_packet(message, ISC_LOG_DEBUG(10), fctx->res->mctx); + /* + * Did we request NSID? If so, and if the response contains + * NSID data, log it at INFO level. + */ + opt = dns_message_getopt(message); + if (opt != NULL && (query->options & DNS_FETCHOPT_WANTNSID) != 0) + log_nsid(opt, query, ISC_LOG_INFO, fctx->res->mctx); + /* * If the message is signed, check the signature. If not, this * returns success anyway. @@ -5699,6 +5797,7 @@ resquery_response(isc_task_t *task, isc_event_t *event) { truncated = ISC_TRUE; if (truncated) { + inc_stats(fctx->res, dns_resstatscounter_truncated); if ((options & DNS_FETCHOPT_TCP) != 0) { broken_server = DNS_R_TRUNCATEDTCP; keep_trying = ISC_TRUE; @@ -5719,6 +5818,26 @@ resquery_response(isc_task_t *task, isc_event_t *event) { goto done; } + /* + * Update statistics about erroneous responses. + */ + if (message->rcode != dns_rcode_noerror) { + switch (message->rcode) { + case dns_rcode_nxdomain: + inc_stats(fctx->res, dns_resstatscounter_nxdomain); + break; + case dns_rcode_servfail: + inc_stats(fctx->res, dns_resstatscounter_servfail); + break; + case dns_rcode_formerr: + inc_stats(fctx->res, dns_resstatscounter_formerr); + break; + default: + inc_stats(fctx->res, dns_resstatscounter_othererror); + break; + } + } + /* * Is the remote server broken, or does it dislike us? */ @@ -5744,6 +5863,7 @@ resquery_response(isc_task_t *task, isc_event_t *event) { dns_adb_changeflags(fctx->adb, query->addrinfo, DNS_FETCHOPT_NOEDNS0, DNS_FETCHOPT_NOEDNS0); + inc_stats(fctx->res, dns_resstatscounter_edns0fail); } else if (message->rcode == dns_rcode_formerr) { if (ISFORWARDER(query->addrinfo)) { /* @@ -5771,12 +5891,10 @@ resquery_response(isc_task_t *task, isc_event_t *event) { */ result = DNS_R_YXDOMAIN; } else if (message->rcode == dns_rcode_badvers) { - dns_rdataset_t *opt; unsigned int flags, mask; unsigned int version; resend = ISC_TRUE; - opt = dns_message_getopt(message); version = (opt->ttl >> 16) & 0xff; flags = (version << DNS_FETCHOPT_EDNSVERSIONSHIFT) | DNS_FETCHOPT_EDNSVERSIONSET; @@ -5819,6 +5937,7 @@ resquery_response(isc_task_t *task, isc_event_t *event) { */ if (fctx->res->lame_ttl != 0 && !ISFORWARDER(query->addrinfo) && is_lame(fctx)) { + inc_stats(fctx->res, dns_resstatscounter_lame); log_lame(fctx, query->addrinfo); result = dns_adb_marklame(fctx->adb, query->addrinfo, &fctx->name, fctx->type, @@ -6062,12 +6181,13 @@ resquery_response(isc_task_t *task, isc_event_t *event) { /* * Try again. */ - fctx_try(fctx); + fctx_try(fctx, !get_nameservers); } else if (resend) { /* * Resend (probably with changed options). */ FCTXTRACE("resend"); + inc_stats(fctx->res, dns_resstatscounter_retry); result = fctx_query(fctx, addrinfo, options); if (result != ISC_R_SUCCESS) fctx_done(fctx, result); @@ -6137,16 +6257,6 @@ destroy(dns_resolver_t *res) { INSIST(res->nfctx == 0); -#ifdef LRU_DEBUG - isc_log_write(dns_lctx, DNS_LOGCATEGORY_RESOLVER, - DNS_LOGMODULE_RESOLVER, ISC_LOG_INFO, - "destroying resolver %p: external queries " - "total/NS/SOA/A/AAAA=%u/%u/%u/%u/%u", - res, res->extqueries, res->extqueries_ns, - res->extqueries_soa, res->extqueries_a, - res->extqueries_aaaa); -#endif - RES_DESTROYLOCK(&res->poollock); DESTROYLOCK(&res->primelock); DESTROYLOCK(&res->nlock); @@ -6184,10 +6294,6 @@ destroy(dns_resolver_t *res) { } if (res->disppooltimer != NULL) isc_timer_detach(&res->disppooltimer); -#ifdef LRU_DEBUG - if (res->dumptimer != NULL) - isc_timer_detach(&res->dumptimer); -#endif dns_resolver_reset_algorithms(res); dns_resolver_resetmustbesecure(res); #if USE_ALGLOCK @@ -6321,15 +6427,6 @@ dns_resolver_create(dns_view_t *view, res->dispatchv4pool = NULL; res->dispatchv6pool = NULL; res->disppooltimer = NULL; -#ifdef LRU_DEBUG - res->dumptimer = NULL; - res->extqueries = 0; - res->extqueries_ns = 0; - res->extqueries_soa = 0; - res->extqueries_a = 0; - res->extqueries_aaaa = 0; -#endif - res->nbuckets = ntasks; res->activebuckets = ntasks; res->buckets = isc_mem_get(view->mctx, @@ -6349,13 +6446,23 @@ dns_resolver_create(dns_view_t *view, goto cleanup_buckets; } res->buckets[i].mctx = NULL; + snprintf(name, sizeof(name), "res%u", i); +#ifdef ISC_PLATFORM_USETHREADS + /* + * Use a separate memory context for each bucket to reduce + * contention among multiple threads. Do this only when + * enabling threads because it will be require more memory. + */ result = isc_mem_create(0, 0, &res->buckets[i].mctx); if (result != ISC_R_SUCCESS) { isc_task_detach(&res->buckets[i].task); DESTROYLOCK(&res->buckets[i].lock); goto cleanup_buckets; } - snprintf(name, sizeof(name), "res%u", i); + isc_mem_setname(res->buckets[i].mctx, name, NULL); +#else + isc_mem_attach(view->mctx, &res->buckets[i].mctx); +#endif isc_task_setname(res->buckets[i].task, name, res); ISC_LIST_INIT(res->buckets[i].fctxs); res->buckets[i].exiting = ISC_FALSE; @@ -6402,22 +6509,6 @@ dns_resolver_create(dns_view_t *view, result = isc_timer_create(timermgr, isc_timertype_inactive, NULL, NULL, task, spillattimer_countdown, res, &res->spillattimer); - -#ifdef LRU_DEBUG - { - isc_interval_t interval; - - interval.seconds = DUMP_INTERVAL; - interval.nanoseconds = 0; - RUNTIME_CHECK(isc_time_nowplusinterval(&res->dump_time, - &interval) == - ISC_R_SUCCESS); - - result = isc_timer_create(timermgr, isc_timertype_once, - &res->dump_time, NULL, task, - timer_dump, res, &res->dumptimer); - } -#endif isc_task_detach(&task); if (result != ISC_R_SUCCESS) goto cleanup_poollock; @@ -7605,38 +7696,3 @@ dns_resolver_createdispatchpool(dns_resolver_t *res, unsigned int ndisps, return (result); } - -#ifdef LRU_DEBUG -static void -timer_dump(isc_task_t *task, isc_event_t *ev) { - dns_resolver_t *res; - isc_interval_t interval; - isc_time_t nexttime; - - UNUSED(task); - - res = ev->ev_arg; - INSIST(VALID_RESOLVER(res)); - - if (res->extqueries > 0) { - isc_log_write(dns_lctx, DNS_LOGCATEGORY_RESOLVER, - DNS_LOGMODULE_RESOLVER, ISC_LOG_INFO, - "resolver dump %p: external queries " - "total/NS/SOA/A/AAAA=%u/%u/%u/%u/%u", - res, res->extqueries, res->extqueries_ns, - res->extqueries_soa, res->extqueries_a, - res->extqueries_aaaa); - } - - interval.seconds = DUMP_INTERVAL; - interval.nanoseconds = 0; - - RUNTIME_CHECK(isc_time_add(&res->dump_time, &interval, &nexttime) == - ISC_R_SUCCESS); /* XXX: this is not always true */ - res->dump_time = nexttime; - (void)isc_timer_reset(res->dumptimer, isc_timertype_once, - &res->dump_time, NULL, ISC_FALSE); - - isc_event_free(&ev); -} -#endif diff --git a/lib/dns/rootns.c b/lib/dns/rootns.c index b3c302bd..0121325f 100644 --- a/lib/dns/rootns.c +++ b/lib/dns/rootns.c @@ -1,5 +1,5 @@ /* - * Copyright (C) 2004, 2005, 2007 Internet Systems Consortium, Inc. ("ISC") + * Copyright (C) 2004, 2005, 2007, 2008 Internet Systems Consortium, Inc. ("ISC") * Copyright (C) 1999-2002 Internet Software Consortium. * * Permission to use, copy, modify, and/or distribute this software for any @@ -15,7 +15,7 @@ * PERFORMANCE OF THIS SOFTWARE. */ -/* $Id: rootns.c,v 1.32 2007/10/30 23:44:01 marka Exp $ */ +/* $Id: rootns.c,v 1.32.24.2 2008/02/05 23:46:39 tbox Exp $ */ /*! \file */ @@ -45,8 +45,6 @@ static char root_ns[] = ";\n" "; Internet Root Nameservers\n" ";\n" -"; Thu Sep 23 17:57:37 PDT 1999\n" -";\n" "$TTL 518400\n" ". 518400 IN NS A.ROOT-SERVERS.NET.\n" ". 518400 IN NS B.ROOT-SERVERS.NET.\n" @@ -62,25 +60,31 @@ static char root_ns[] = ". 518400 IN NS L.ROOT-SERVERS.NET.\n" ". 518400 IN NS M.ROOT-SERVERS.NET.\n" "A.ROOT-SERVERS.NET. 3600000 IN A 198.41.0.4\n" +"A.ROOT-SERVERS.NET. 3600000 IN AAAA 2001:503:BA3E::2:30\n" "B.ROOT-SERVERS.NET. 3600000 IN A 192.228.79.201\n" "C.ROOT-SERVERS.NET. 3600000 IN A 192.33.4.12\n" "D.ROOT-SERVERS.NET. 3600000 IN A 128.8.10.90\n" "E.ROOT-SERVERS.NET. 3600000 IN A 192.203.230.10\n" "F.ROOT-SERVERS.NET. 3600000 IN A 192.5.5.241\n" +"F.ROOT-SERVERS.NET. 3600000 IN AAAA 2001:500:2F::F\n" "G.ROOT-SERVERS.NET. 3600000 IN A 192.112.36.4\n" "H.ROOT-SERVERS.NET. 3600000 IN A 128.63.2.53\n" +"H.ROOT-SERVERS.NET. 3600000 IN AAAA 2001:500:1::803F:235\n" "I.ROOT-SERVERS.NET. 3600000 IN A 192.36.148.17\n" "J.ROOT-SERVERS.NET. 3600000 IN A 192.58.128.30\n" +"J.ROOT-SERVERS.NET. 3600000 IN AAAA 2001:503:C27::2:30\n" "K.ROOT-SERVERS.NET. 3600000 IN A 193.0.14.129\n" +"K.ROOT-SERVERS.NET. 3600000 IN AAAA 2001:7FD::1\n" "L.ROOT-SERVERS.NET. 3600000 IN A 199.7.83.42\n" -"M.ROOT-SERVERS.NET. 3600000 IN A 202.12.27.33\n"; +"M.ROOT-SERVERS.NET. 3600000 IN A 202.12.27.33\n" +"M.ROOT-SERVERS.NET. 3600000 IN AAAA 2001:DC3::35\n"; static isc_result_t in_rootns(dns_rdataset_t *rootns, dns_name_t *name) { isc_result_t result; dns_rdata_t rdata = DNS_RDATA_INIT; dns_rdata_ns_t ns; - + if (!dns_rdataset_isassociated(rootns)) return (ISC_R_NOTFOUND); @@ -99,7 +103,7 @@ in_rootns(dns_rdataset_t *rootns, dns_name_t *name) { return (result); } -static isc_result_t +static isc_result_t check_node(dns_rdataset_t *rootns, dns_name_t *name, dns_rdatasetiter_t *rdsiter) { isc_result_t result; @@ -227,7 +231,7 @@ dns_rootns_create(isc_mem_t *mctx, dns_rdataclass_t rdclass, * Default to using the Internet root servers. */ result = dns_master_loadbuffer(&source, &db->origin, - &db->origin, db->rdclass, + &db->origin, db->rdclass, DNS_MASTER_HINT, &callbacks, db->mctx); } else @@ -262,11 +266,11 @@ report(dns_view_t *view, dns_name_t *name, isc_boolean_t missing, isc_buffer_t buffer; isc_result_t result; - if (strcmp(view->name, "_bind") != 0 && - strcmp(view->name, "_default") != 0) { - viewname = view->name; - sep = ": view "; - } + if (strcmp(view->name, "_bind") != 0 && + strcmp(view->name, "_default") != 0) { + viewname = view->name; + sep = ": view "; + } dns_name_format(name, namebuf, sizeof(namebuf)); dns_rdatatype_format(rdata->type, typebuf, sizeof(typebuf)); @@ -346,7 +350,7 @@ check_address_records(dns_view_t *view, dns_db_t *hints, dns_db_t *db, report(view, name, ISC_FALSE, &rdata); result = dns_rdataset_next(&hintrrset); } - } + } if (hresult == ISC_R_NOTFOUND && (rresult == ISC_R_SUCCESS || rresult == DNS_R_GLUE)) { result = dns_rdataset_first(&rootrrset); @@ -387,7 +391,7 @@ check_address_records(dns_view_t *view, dns_db_t *hints, dns_db_t *db, dns_rdata_reset(&rdata); result = dns_rdataset_next(&hintrrset); } - } + } if (hresult == ISC_R_NOTFOUND && (rresult == ISC_R_SUCCESS || rresult == DNS_R_GLUE)) { result = dns_rdataset_first(&rootrrset); @@ -421,11 +425,11 @@ dns_root_checkhints(dns_view_t *view, dns_db_t *hints, dns_db_t *db) { isc_stdtime_get(&now); - if (strcmp(view->name, "_bind") != 0 && - strcmp(view->name, "_default") != 0) { - viewname = view->name; - sep = ": view "; - } + if (strcmp(view->name, "_bind") != 0 && + strcmp(view->name, "_default") != 0) { + viewname = view->name; + sep = ": view "; + } dns_rdataset_init(&hintns); dns_rdataset_init(&rootns); @@ -453,7 +457,7 @@ dns_root_checkhints(dns_view_t *view, dns_db_t *hints, dns_db_t *db) { dns_result_totext(result)); goto cleanup; } - + /* * Look for missing root NS names. */ @@ -472,7 +476,7 @@ dns_root_checkhints(dns_view_t *view, dns_db_t *hints, dns_db_t *db) { "checkhints%s%s: unable to find root " "NS '%s' in hints", sep, viewname, namebuf); - } else + } else check_address_records(view, hints, db, &ns.name, now); dns_rdata_reset(&rdata); result = dns_rdataset_next(&rootns); diff --git a/lib/dns/sdb.c b/lib/dns/sdb.c index 8c035ccd..2c3002bb 100644 --- a/lib/dns/sdb.c +++ b/lib/dns/sdb.c @@ -15,7 +15,7 @@ * PERFORMANCE OF THIS SOFTWARE. */ -/* $Id: sdb.c,v 1.59.94.3 2008/01/17 23:46:37 tbox Exp $ */ +/* $Id: sdb.c,v 1.59.94.5 2008/04/03 10:51:01 marka Exp $ */ /*! \file */ @@ -1247,6 +1247,7 @@ static dns_dbmethods_t sdb_methods = { overmem, settask, NULL, + NULL, NULL }; diff --git a/lib/dns/sdlz.c b/lib/dns/sdlz.c index 627ea2e1..5ab04834 100644 --- a/lib/dns/sdlz.c +++ b/lib/dns/sdlz.c @@ -1,5 +1,5 @@ /* - * Portions Copyright (C) 2005-2007 Internet Systems Consortium, Inc. ("ISC") + * Portions Copyright (C) 2005-2008 Internet Systems Consortium, Inc. ("ISC") * Portions Copyright (C) 1999-2001 Internet Software Consortium. * * Permission to use, copy, modify, and/or distribute this software for any @@ -50,7 +50,7 @@ * USE OR PERFORMANCE OF THIS SOFTWARE. */ -/* $Id: sdlz.c,v 1.14 2007/08/27 03:32:27 marka Exp $ */ +/* $Id: sdlz.c,v 1.14.94.3 2008/04/03 10:51:01 marka Exp $ */ /*! \file */ @@ -1051,6 +1051,7 @@ static dns_dbmethods_t sdlzdb_methods = { overmem, settask, NULL, + NULL, NULL }; @@ -1328,7 +1329,7 @@ dns_sdlzallowzonexfr(void *driverarg, void *dbdata, isc_mem_t *mctx, return (result); isc_buffer_putuint8(&b2, 0); - /* make sure strings are always lowercase */ + /* make sure strings are always lowercase */ dns_sdlz_tolower(namestr); dns_sdlz_tolower(clientstr); @@ -1441,7 +1442,7 @@ dns_sdlzfindzone(void *driverarg, void *dbdata, isc_mem_t *mctx, return (result); isc_buffer_putuint8(&b, 0); - /* make sure strings are always lowercase */ + /* make sure strings are always lowercase */ dns_sdlz_tolower(namestr); /* Call SDLZ driver's find zone method */ @@ -1572,7 +1573,7 @@ dns_sdlz_putrr(dns_sdlzlookup_t *lookup, const char *type, dns_ttl_t ttl, return (ISC_R_SUCCESS); failure: - if (rdatabuf != NULL) + if (rdatabuf != NULL) isc_buffer_free(&rdatabuf); if (lex != NULL) isc_lex_destroy(&lex); diff --git a/lib/dns/spnego.c b/lib/dns/spnego.c index 279d945f..cc61fd6e 100644 --- a/lib/dns/spnego.c +++ b/lib/dns/spnego.c @@ -1,5 +1,5 @@ /* - * Copyright (C) 2006, 2007 Internet Systems Consortium, Inc. ("ISC") + * Copyright (C) 2006-2008 Internet Systems Consortium, Inc. ("ISC") * * Permission to use, copy, modify, and/or distribute this software for any * purpose with or without fee is hereby granted, provided that the above @@ -14,7 +14,7 @@ * PERFORMANCE OF THIS SOFTWARE. */ -/* $Id: spnego.c,v 1.5 2007/06/19 23:47:16 tbox Exp $ */ +/* $Id: spnego.c,v 1.5.128.3 2008/04/03 06:08:27 tbox Exp $ */ /*! \file * \brief @@ -59,21 +59,21 @@ * Copyright (c) 2004 Masarykova universita * (Masaryk University, Brno, Czech Republic) * All rights reserved. - * + * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions are met: - * + * * 1. Redistributions of source code must retain the above copyright notice, * this list of conditions and the following disclaimer. - * + * * 2. Redistributions in binary form must reproduce the above copyright * notice, this list of conditions and the following disclaimer in the * documentation and/or other materials provided with the distribution. - * + * * 3. Neither the name of the University 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 @@ -89,35 +89,35 @@ * ---------------------------------------------------------------- * * Copyright (c) 1997 - 2003 Kungliga Tekniska Högskolan - * (Royal Institute of Technology, Stockholm, Sweden). - * All rights reserved. + * (Royal Institute of Technology, Stockholm, Sweden). + * All rights reserved. * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: + * 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. + * 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. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. * - * 3. Neither the name of the Institute nor the names of its contributors - * may be used to endorse or promote products derived from this software - * without specific prior written permission. + * 3. Neither the name of the Institute 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 INSTITUTE 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 INSTITUTE 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. + * THIS SOFTWARE IS PROVIDED BY THE INSTITUTE 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 INSTITUTE 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. */ /* @@ -169,88 +169,6 @@ */ #include "spnego.h" -/* - * The isc_mem function keep track of allocation sizes, but we can't - * get at that information, and we need to know sizes to implement a - * realloc() clone. So we use a little more memory to keep track of - * sizes allocated here. - * - * These functions follow Harbison & Steele, 4th edition, particularly - * with regard to realloc()'s behavior. - */ - -static void * -spnego_malloc(size_t size, const char *file, int line) -{ - char *p; - - if (size == 0) - return (NULL); - p = isc_mem_allocate(dst__memory_pool, size + sizeof(size_t)); - if (p == NULL) - return NULL; - *(size_t *)p = size; - p += sizeof(size_t); -#ifdef SPNEGO_ALLOC_DEBUG - printf("spnego_malloc(%lu) %lx %s %u\n", - (unsigned long) size, (unsigned long) p, file, line); -#else - (void)file; - (void)line; -#endif - return (p); -} - -static void -spnego_free(void *ptr, const char *file, int line) -{ - char *p = ptr; - - if (p == NULL) - return; -#ifdef SPNEGO_ALLOC_DEBUG - printf("spnego_free(%lx) %s %u\n", - (unsigned long) p, file, line); -#else - (void)file; - (void)line; -#endif - p -= sizeof(size_t); - isc_mem_free(dst__memory_pool, p); -} - -static void * -spnego_realloc(void *old_ptr, size_t new_size, const char *file, int line) -{ - size_t *old_size; - void *new_ptr; - - if (old_ptr == NULL) - return (spnego_malloc(new_size, file, line)); - - if (new_size == 0) { - spnego_free(old_ptr, file, line); - return (NULL); - } - - old_size = old_ptr; - old_size--; - if (*old_size >= new_size) - return (old_ptr); - - new_ptr = spnego_malloc(new_size, file, line); - if (new_ptr == NULL) - return (NULL); - - memcpy(new_ptr, old_ptr, *old_size); - spnego_free(old_ptr, file, line); - return (new_ptr); -} - -#define malloc(x) spnego_malloc(x, __FILE__, __LINE__) -#define free(x) spnego_free(x, __FILE__, __LINE__) -#define realloc(x,y) spnego_realloc(x, y, __FILE__, __LINE__) - /* asn1_err.h */ /* Generated from ../../../lib/asn1/asn1_err.et */ @@ -318,31 +236,31 @@ enum { #define ASN1_INDEFINITE 0xdce0deed -static int +static int der_get_length(const unsigned char *p, size_t len, size_t * val, size_t * size); -static int +static int der_get_octet_string(const unsigned char *p, size_t len, octet_string * data, size_t * size); -static int +static int der_get_oid(const unsigned char *p, size_t len, oid * data, size_t * size); -static int +static int der_get_tag(const unsigned char *p, size_t len, Der_class * class, Der_type * type, int *tag, size_t * size); -static int +static int der_match_tag(const unsigned char *p, size_t len, Der_class class, Der_type type, int tag, size_t * size); -static int +static int der_match_tag_and_length(const unsigned char *p, size_t len, Der_class class, Der_type type, int tag, size_t * length_ret, size_t * size); -static int +static int decode_oid(const unsigned char *p, size_t len, oid * k, size_t * size); @@ -359,27 +277,27 @@ der_put_int(unsigned char *p, size_t len, int val, size_t *); static int der_put_length(unsigned char *p, size_t len, size_t val, size_t *); -static int +static int der_put_octet_string(unsigned char *p, size_t len, const octet_string * data, size_t *); -static int +static int der_put_oid(unsigned char *p, size_t len, const oid * data, size_t * size); -static int +static int der_put_tag(unsigned char *p, size_t len, Der_class class, Der_type type, int tag, size_t *); -static int +static int der_put_length_and_tag(unsigned char *, size_t, size_t, Der_class, Der_type, int, size_t *); -static int +static int encode_enumerated(unsigned char *p, size_t len, const unsigned *data, size_t *); -static int +static int encode_octet_string(unsigned char *p, size_t len, const octet_string * k, size_t *); -static int +static int encode_oid(unsigned char *p, size_t len, const oid * k, size_t *); @@ -756,7 +674,7 @@ gss_accept_sec_context_spnego(OM_uint32 *minor_status, ot = &obuf; } ret = send_accept(&minor_status2, output_token, ot, pref); - if (ot != NULL) + if (ot != NULL && ot->length != 0) gss_release_buffer(&minor_status2, ot); return (ret); @@ -1485,8 +1403,11 @@ gssapi_spnego_encapsulate(OM_uint32 * minor_status, return (GSS_S_FAILURE); } p = gssapi_mech_make_header(output_token->value, len, mech); - if (p == NULL) + if (p == NULL) { + if (output_token->length != 0) + gss_release_buffer(minor_status, output_token); return (GSS_S_FAILURE); + } memcpy(p, buf, buf_size); return (GSS_S_COMPLETE); } @@ -1550,7 +1471,7 @@ gssapi_krb5_get_mech(const u_char *ptr, return (mech_len); } -static OM_uint32 +static OM_uint32 spnego_initial(OM_uint32 *minor_status, const gss_cred_id_t initiator_cred_handle, gss_ctx_id_t *context_handle, @@ -1659,16 +1580,16 @@ spnego_initial(OM_uint32 *minor_status, ret = gssapi_spnego_encapsulate(minor_status, buf + buf_size - len, len, output_token, GSS_SPNEGO_MECH); - - ret = major_status; + if (ret == GSS_S_COMPLETE) + ret = major_status; end: if (token_init.mechToken != NULL) { - free(token_init.mechToken); + free(token_init.mechToken); token_init.mechToken = NULL; } free_NegTokenInit(&token_init); - if (krb5_output_token.length > 0) + if (krb5_output_token.length != 0) gss_release_buffer(&minor_status2, &krb5_output_token); if (buf) free(buf); @@ -1711,7 +1632,7 @@ spnego_reply(OM_uint32 *minor_status, * SPNEGO doesn't include gss wrapping on SubsequentContextToken * like the Kerberos 5 mech does. But lets check for it anyway. */ - + mech_len = gssapi_krb5_get_mech(input_token->value, input_token->length, &p); @@ -1766,7 +1687,7 @@ spnego_reply(OM_uint32 *minor_status, free_NegTokenResp(&resp); return (GSS_S_BAD_MECH); } - + ret = der_put_oid(oidbuf + sizeof(oidbuf) - 1, sizeof(oidbuf), resp.supportedMech, @@ -1819,7 +1740,7 @@ spnego_reply(OM_uint32 *minor_status, -OM_uint32 +OM_uint32 gss_init_sec_context_spnego(OM_uint32 *minor_status, const gss_cred_id_t initiator_cred_handle, gss_ctx_id_t *context_handle, diff --git a/lib/dns/stats.c b/lib/dns/stats.c index 4144b21a..38eda3bd 100644 --- a/lib/dns/stats.c +++ b/lib/dns/stats.c @@ -15,7 +15,7 @@ * PERFORMANCE OF THIS SOFTWARE. */ -/* $Id: stats.c,v 1.12.128.2 2008/01/24 23:46:25 tbox Exp $ */ +/* $Id: stats.c,v 1.12.128.4 2008/04/03 06:20:34 tbox Exp $ */ /*! \file */ @@ -24,24 +24,48 @@ #include #include +#include +#include #include #include +#include #include #include +#include +#include #include -LIBDNS_EXTERNAL_DATA const char *dns_statscounter_names[DNS_STATS_NCOUNTERS] = - { - "success", - "referral", - "nxrrset", - "nxdomain", - "recursion", - "failure", - "duplicate", - "dropped" - }; +#define DNS_STATS_MAGIC ISC_MAGIC('D', 's', 't', 't') +#define DNS_STATS_VALID(x) ISC_MAGIC_VALID(x, DNS_STATS_MAGIC) + +/*% + * Statistics types. + */ +typedef enum { + dns_statstype_general = 0, + dns_statstype_rdtype = 1, + dns_statstype_rdataset = 2, + dns_statstype_opcode = 3 +} dns_statstype_t; + +/*% + * It doesn't make sense to have 2^16 counters for all possible types since + * most of them won't be used. We have counters for the first 256 types and + * those explicitly supported in the rdata implementation. + * XXXJT: this introduces tight coupling with the rdata implementation. + * Ideally, we should have rdata handle this type of details. + */ +enum { + /* For 0-255, we use the rdtype value as counter indices */ + rdtypecounter_dlv = 256, /* for dns_rdatatype_dlv */ + rdtypecounter_others = 257, /* anything else */ + rdtypecounter_max = 258, + /* The following are used for rdataset */ + rdtypenxcounter_max = rdtypecounter_max * 2, + rdtypecounter_nxdomain = rdtypenxcounter_max, + rdatasettypecounter_max = rdtypecounter_nxdomain + 1 +}; #ifndef DNS_STATS_USEMULTIFIELDS #if defined(ISC_RWLOCK_USEATOMIC) && defined(ISC_PLATFORM_HAVEXADD) && !defined(ISC_PLATFORM_HAVEXADDQ) @@ -61,15 +85,42 @@ typedef isc_uint64_t dns_stat_t; #endif struct dns_stats { - /* XXXJT: do we need a magic? */ + /*% Unlocked */ + unsigned int magic; + dns_statstype_t type; + isc_mem_t *mctx; + int ncounters; + + isc_mutex_t lock; + unsigned int references; /* locked by lock */ + + /*% + * Locked by counterlock or unlocked if efficient rwlock is not + * available. + */ #ifdef ISC_RWLOCK_USEATOMIC - isc_rwlock_t lock; + isc_rwlock_t counterlock; #endif - dns_stat_t counters[DNS_STATS_NCOUNTERS]; + dns_stat_t *counters; + + /*% + * We don't want to lock the counters while we are dumping, so we first + * copy the current counter values into a local array. This buffer + * will be used as the copy destination. It's allocated on creation + * of the stats structure so that the dump operation won't fail due + * to memory allocation failure. + * XXX: this approach is weird for non-threaded build because the + * additional memory and the copy overhead could be avoided. We prefer + * simplicity here, however, under the assumption that this function + * should be only rarely called. + */ + isc_uint64_t *copiedcounters; }; -isc_result_t -dns_stats_create(isc_mem_t *mctx, dns_stats_t **statsp) { +static isc_result_t +create_stats(isc_mem_t *mctx, dns_statstype_t type, int ncounters, + dns_stats_t **statsp) +{ dns_stats_t *stats; isc_result_t result = ISC_R_SUCCESS; @@ -79,50 +130,107 @@ dns_stats_create(isc_mem_t *mctx, dns_stats_t **statsp) { if (stats == NULL) return (ISC_R_NOMEMORY); -#ifdef ISC_RWLOCK_USEATOMIC - result = isc_rwlock_init(&stats->lock, 0, 0); - if (result != ISC_R_SUCCESS) { - isc_mem_put(mctx, stats, sizeof(*stats)); - return (result); + result = isc_mutex_init(&stats->lock); + if (result != ISC_R_SUCCESS) + goto clean_stats; + + stats->counters = isc_mem_get(mctx, sizeof(dns_stat_t) * ncounters); + if (stats->counters == NULL) { + result = ISC_R_NOMEMORY; + goto clean_mutex; } + stats->copiedcounters = isc_mem_get(mctx, + sizeof(isc_uint64_t) * ncounters); + if (stats->copiedcounters == NULL) { + result = ISC_R_NOMEMORY; + goto clean_counters; + } + +#ifdef ISC_RWLOCK_USEATOMIC + result = isc_rwlock_init(&stats->counterlock, 0, 0); + if (result != ISC_R_SUCCESS) + goto clean_copiedcounters; #endif - memset(stats->counters, 0, sizeof(dns_stat_t) * DNS_STATS_NCOUNTERS); + stats->type = type; + stats->references = 1; + memset(stats->counters, 0, sizeof(dns_stat_t) * ncounters); + stats->mctx = NULL; + isc_mem_attach(mctx, &stats->mctx); + stats->ncounters = ncounters; + stats->magic = DNS_STATS_MAGIC; *statsp = stats; return (result); + +clean_counters: + isc_mem_put(mctx, stats->counters, sizeof(dns_stat_t) * ncounters); + +#ifdef ISC_RWLOCK_USEATOMIC +clean_copiedcounters: + isc_mem_put(mctx, stats->copiedcounters, + sizeof(dns_stat_t) * ncounters); +#endif + +clean_mutex: + DESTROYLOCK(&stats->lock); + +clean_stats: + isc_mem_put(mctx, stats, sizeof(*stats)); + + return (result); +} + +void +dns_stats_attach(dns_stats_t *stats, dns_stats_t **statsp) { + REQUIRE(DNS_STATS_VALID(stats)); + REQUIRE(statsp != NULL && *statsp == NULL); + + LOCK(&stats->lock); + stats->references++; + UNLOCK(&stats->lock); + + *statsp = stats; } void -dns_stats_destroy(isc_mem_t *mctx, dns_stats_t **statsp) { +dns_stats_detach(dns_stats_t **statsp) { dns_stats_t *stats; - REQUIRE(statsp != NULL && *statsp != NULL); + REQUIRE(statsp != NULL && DNS_STATS_VALID(*statsp)); stats = *statsp; + *statsp = NULL; + LOCK(&stats->lock); + stats->references--; + UNLOCK(&stats->lock); + + if (stats->references == 0) { + isc_mem_put(stats->mctx, stats->copiedcounters, + sizeof(dns_stat_t) * stats->ncounters); + isc_mem_put(stats->mctx, stats->counters, + sizeof(dns_stat_t) * stats->ncounters); + DESTROYLOCK(&stats->lock); #ifdef ISC_RWLOCK_USEATOMIC - isc_rwlock_destroy(&stats->lock); + isc_rwlock_destroy(&stats->counterlock); #endif - isc_mem_put(mctx, stats, sizeof(*stats)); - - *statsp = NULL; + isc_mem_putanddetach(&stats->mctx, stats, sizeof(*stats)); + } } -void -dns_stats_incrementcounter(dns_stats_t *stats, dns_statscounter_t counter) { +static inline void +incrementcounter(dns_stats_t *stats, int counter) { isc_int32_t prev; - REQUIRE(counter < DNS_STATS_NCOUNTERS); - #ifdef ISC_RWLOCK_USEATOMIC /* * We use a "read" lock to prevent other threads from reading the * counter while we "writing" a counter field. The write access itself * is protected by the atomic operation. */ - isc_rwlock_lock(&stats->lock, isc_rwlocktype_read); + isc_rwlock_lock(&stats->counterlock, isc_rwlocktype_read); #endif #if DNS_STATS_USEMULTIFIELDS @@ -146,12 +254,38 @@ dns_stats_incrementcounter(dns_stats_t *stats, dns_statscounter_t counter) { #endif #ifdef ISC_RWLOCK_USEATOMIC - isc_rwlock_unlock(&stats->lock, isc_rwlocktype_read); + isc_rwlock_unlock(&stats->counterlock, isc_rwlocktype_read); #endif } -void -dns_stats_copy(dns_stats_t *src, isc_uint64_t *dst) { +static inline void +decrementcounter(dns_stats_t *stats, int counter) { + isc_int32_t prev; + +#ifdef ISC_RWLOCK_USEATOMIC + isc_rwlock_lock(&stats->counterlock, isc_rwlocktype_read); +#endif + +#if DNS_STATS_USEMULTIFIELDS + prev = isc_atomic_xadd((isc_int32_t *)&stats->counters[counter].lo, -1); + if (prev == 0) + isc_atomic_xadd((isc_int32_t *)&stats->counters[counter].hi, + -1); +#elif defined(ISC_PLATFORM_HAVEXADDQ) + UNUSED(prev); + isc_atomic_xaddq((isc_int64_t *)&stats->counters[counter], -1); +#else + UNUSED(prev); + stats->counters[counter]--; +#endif + +#ifdef ISC_RWLOCK_USEATOMIC + isc_rwlock_unlock(&stats->counterlock, isc_rwlocktype_read); +#endif +} + +static void +copy_counters(dns_stats_t *stats) { int i; #ifdef ISC_RWLOCK_USEATOMIC @@ -159,27 +293,257 @@ dns_stats_copy(dns_stats_t *src, isc_uint64_t *dst) { * We use a "write" lock before "reading" the statistics counters as * an exclusive lock. */ - isc_rwlock_lock(&src->lock, isc_rwlocktype_write); + isc_rwlock_lock(&stats->counterlock, isc_rwlocktype_write); #endif #if DNS_STATS_USEMULTIFIELDS - for (i = 0; i < DNS_STATS_NCOUNTERS; i++) { - dst[i] = ((isc_uint64_t)src->counters[i].hi) << 32 | - src->counters[i].lo; + for (i = 0; i < stats->ncounters; i++) { + stats->copiedcounters[i] = + (isc_uint64_t)(stats->counters[i].hi) << 32 | + stats->counters[i].lo; } #else UNUSED(i); - memcpy(dst, src->counters, DNS_STATS_NCOUNTERS * sizeof(dst[0])); + memcpy(stats->copiedcounters, stats->counters, + stats->ncounters * sizeof(dns_stat_t)); #endif #ifdef ISC_RWLOCK_USEATOMIC - isc_rwlock_unlock(&src->lock, isc_rwlocktype_write); + isc_rwlock_unlock(&stats->counterlock, isc_rwlocktype_write); #endif } +/*% + * Create methods + */ +isc_result_t +dns_generalstats_create(isc_mem_t *mctx, dns_stats_t **statsp, int ncounters) { + REQUIRE(statsp != NULL && *statsp == NULL); + + return (create_stats(mctx, dns_statstype_general, ncounters, statsp)); +} + +isc_result_t +dns_rdatatypestats_create(isc_mem_t *mctx, dns_stats_t **statsp) { + REQUIRE(statsp != NULL && *statsp == NULL); + + return (create_stats(mctx, dns_statstype_rdtype, rdtypecounter_max, + statsp)); +} + +isc_result_t +dns_rdatasetstats_create(isc_mem_t *mctx, dns_stats_t **statsp) { + REQUIRE(statsp != NULL && *statsp == NULL); + + return (create_stats(mctx, dns_statstype_rdataset, + (rdtypecounter_max * 2) + 1, statsp)); +} + +isc_result_t +dns_opcodestats_create(isc_mem_t *mctx, dns_stats_t **statsp) { + REQUIRE(statsp != NULL && *statsp == NULL); + + return (create_stats(mctx, dns_statstype_opcode, 16, statsp)); +} + +/*% + * Increment/Decrement methods + */ +void +dns_generalstats_increment(dns_stats_t *stats, dns_statscounter_t counter) { + REQUIRE(DNS_STATS_VALID(stats) && stats->type == dns_statstype_general); + REQUIRE(counter < stats->ncounters); + + incrementcounter(stats, (int)counter); +} + +void +dns_rdatatypestats_increment(dns_stats_t *stats, dns_rdatatype_t type) { + int counter; + + REQUIRE(DNS_STATS_VALID(stats) && stats->type == dns_statstype_rdtype); + + if (type == dns_rdatatype_dlv) + counter = rdtypecounter_dlv; + else if (type > dns_rdatatype_any) + counter = rdtypecounter_others; + else + counter = (int)type; + + incrementcounter(stats, counter); +} + +static inline void +update_rdatasetstats(dns_stats_t *stats, dns_rdatastatstype_t rrsettype, + isc_boolean_t increment) +{ + int counter; + dns_rdatatype_t rdtype; + + if ((DNS_RDATASTATSTYPE_ATTR(rrsettype) & + DNS_RDATASTATSTYPE_ATTR_NXDOMAIN) != 0) { + counter = rdtypecounter_nxdomain; + } else { + rdtype = DNS_RDATASTATSTYPE_BASE(rrsettype); + if (rdtype == dns_rdatatype_dlv) + counter = (int)rdtypecounter_dlv; + else if (rdtype > dns_rdatatype_any) + counter = (int)rdtypecounter_others; + else + counter = (int)rdtype; + + if ((DNS_RDATASTATSTYPE_ATTR(rrsettype) & + DNS_RDATASTATSTYPE_ATTR_NXRRSET) != 0) + counter += rdtypecounter_max; + } + + if (increment) + incrementcounter(stats, counter); + else + decrementcounter(stats, counter); +} + +void +dns_rdatasetstats_increment(dns_stats_t *stats, dns_rdatastatstype_t rrsettype) +{ + REQUIRE(DNS_STATS_VALID(stats) && + stats->type == dns_statstype_rdataset); + + update_rdatasetstats(stats, rrsettype, ISC_TRUE); +} + +void +dns_rdatasetstats_decrement(dns_stats_t *stats, dns_rdatastatstype_t rrsettype) +{ + REQUIRE(DNS_STATS_VALID(stats) && + stats->type == dns_statstype_rdataset); + + update_rdatasetstats(stats, rrsettype, ISC_FALSE); +} +void +dns_opcodestats_increment(dns_stats_t *stats, dns_opcode_t code) { + REQUIRE(DNS_STATS_VALID(stats) && stats->type == dns_statstype_opcode); + + incrementcounter(stats, (int)code); +} + +/*% + * Dump methods + */ +void +dns_generalstats_dump(dns_stats_t *stats, dns_generalstats_dumper_t dump_fn, + void *arg, unsigned int options) +{ + int i; + + REQUIRE(DNS_STATS_VALID(stats) && stats->type == dns_statstype_general); + + copy_counters(stats); + + for (i = 0; i < stats->ncounters; i++) { + if ((options & DNS_STATSDUMP_VERBOSE) == 0 && + stats->copiedcounters[i] == 0) + continue; + dump_fn(i, stats->copiedcounters[i], arg); + } +} + +static void +dump_rdentry(dns_stats_t *stats, int counter, int rdcounter, + dns_rdatastatstype_t attributes, + dns_rdatatypestats_dumper_t dump_fn, void * arg, + unsigned int options) +{ + dns_rdatatype_t rdtype = dns_rdatatype_none; /* sentinel */ + dns_rdatastatstype_t type; + + if ((options & DNS_STATSDUMP_VERBOSE) == 0 && + stats->copiedcounters[counter] == 0) + return; + if (rdcounter == rdtypecounter_others) + attributes |= DNS_RDATASTATSTYPE_ATTR_OTHERTYPE; + else { + if (rdcounter == rdtypecounter_dlv) + rdtype = dns_rdatatype_dlv; + else + rdtype = (dns_rdatatype_t)rdcounter; + } + type = DNS_RDATASTATSTYPE_VALUE((dns_rdatastatstype_t)rdtype, + attributes); + dump_fn(type, stats->copiedcounters[counter], arg); +} + +void +dns_rdatatypestats_dump(dns_stats_t *stats, dns_rdatatypestats_dumper_t dump_fn, + void *arg, unsigned int options) +{ + int i; + + REQUIRE(DNS_STATS_VALID(stats) && stats->type == dns_statstype_rdtype); + + copy_counters(stats); + + for (i = 0; i < stats->ncounters; i++) + dump_rdentry(stats, i, i, 0, dump_fn, arg, options); +} + +void +dns_rdatasetstats_dump(dns_stats_t *stats, dns_rdatatypestats_dumper_t dump_fn, + void *arg, unsigned int options) +{ + int i; + + REQUIRE(DNS_STATS_VALID(stats) && + stats->type == dns_statstype_rdataset); + + copy_counters(stats); + + for (i = 0; i < rdtypecounter_max; i++) + dump_rdentry(stats, i, i, 0, dump_fn, arg, options); + for (i = rdtypecounter_max; i < rdtypenxcounter_max; i++) { + dump_rdentry(stats, i, i - rdtypecounter_max, + DNS_RDATASTATSTYPE_ATTR_NXRRSET, + dump_fn, arg, options); + } + dump_rdentry(stats, rdtypecounter_nxdomain, 0, + DNS_RDATASTATSTYPE_ATTR_NXDOMAIN, dump_fn, arg, options); + + INSIST(i < stats->ncounters); +} + +void +dns_opcodestats_dump(dns_stats_t *stats, dns_opcodestats_dumper_t dump_fn, + void *arg, unsigned int options) +{ + int i; + + REQUIRE(DNS_STATS_VALID(stats) && stats->type == dns_statstype_opcode); + + copy_counters(stats); + + for (i = 0; i < stats->ncounters; i++) { + if ((options & DNS_STATSDUMP_VERBOSE) == 0 && + stats->copiedcounters[i] == 0) + continue; + dump_fn((dns_opcode_t)i, stats->copiedcounters[i], arg); + } +} + /*** - *** Obsolete functions follow + *** Obsolete variables and functions follow: ***/ +LIBDNS_EXTERNAL_DATA const char *dns_statscounter_names[DNS_STATS_NCOUNTERS] = + { + "success", + "referral", + "nxrrset", + "nxdomain", + "recursion", + "failure", + "duplicate", + "dropped" + }; + isc_result_t dns_stats_alloccounters(isc_mem_t *mctx, isc_uint64_t **ctrp) { int i; diff --git a/lib/dns/tkey.c b/lib/dns/tkey.c index 8ca3aeed..f94b3ae0 100644 --- a/lib/dns/tkey.c +++ b/lib/dns/tkey.c @@ -16,7 +16,7 @@ */ /* - * $Id: tkey.c,v 1.87.2.2 2008/01/17 23:46:37 tbox Exp $ + * $Id: tkey.c,v 1.87.2.3 2008/04/03 00:47:46 marka Exp $ */ /*! \file */ #include @@ -69,7 +69,7 @@ tkey_log(const char *fmt, ...) { static void _dns_tkey_dumpmessage(dns_message_t *msg) { isc_buffer_t outbuf; - unsigned char output[2048]; + unsigned char output[4096]; isc_result_t result; isc_buffer_init(&outbuf, output, sizeof(output)); @@ -846,7 +846,7 @@ buildquery(dns_message_t *msg, dns_name_t *name, dns_rdataset_makequestion(question, dns_rdataclass_any, dns_rdatatype_tkey); - RETERR(isc_buffer_allocate(msg->mctx, &dynbuf, 2048)); + RETERR(isc_buffer_allocate(msg->mctx, &dynbuf, 4096)); RETERR(dns_message_gettemprdata(msg, &rdata)); RETERR(dns_rdata_fromstruct(rdata, dns_rdataclass_any, @@ -984,7 +984,7 @@ dns_tkey_buildgssquery(dns_message_t *msg, dns_name_t *name, dns_name_t *gname, isc_result_t result; isc_stdtime_t now; isc_buffer_t token; - unsigned char array[2048]; + unsigned char array[4096]; UNUSED(intoken); diff --git a/lib/dns/validator.c b/lib/dns/validator.c index 93df96c9..7fea6a37 100644 --- a/lib/dns/validator.c +++ b/lib/dns/validator.c @@ -15,7 +15,7 @@ * PERFORMANCE OF THIS SOFTWARE. */ -/* $Id: validator.c,v 1.155.52.3 2008/01/17 23:46:37 tbox Exp $ */ +/* $Id: validator.c,v 1.155.52.5 2008/02/19 17:09:08 each Exp $ */ #include @@ -132,7 +132,8 @@ static isc_result_t nsecvalidate(dns_validator_t *val, isc_boolean_t resume); static isc_result_t -proveunsecure(dns_validator_t *val, isc_boolean_t resume); +proveunsecure(dns_validator_t *val, isc_boolean_t have_ds, + isc_boolean_t resume); static void validator_logv(dns_validator_t *val, isc_logcategory_t *category, @@ -363,7 +364,7 @@ dsfetched(isc_task_t *task, isc_event_t *event) { "falling back to insecurity proof (%s)", dns_result_totext(eresult)); val->attributes |= VALATTR_INSECURITY; - result = proveunsecure(val, ISC_FALSE); + result = proveunsecure(val, ISC_FALSE, ISC_FALSE); if (result != DNS_R_WAIT) validator_done(val, result); } else { @@ -442,7 +443,7 @@ dsfetched2(isc_task_t *task, isc_event_t *event) { validator_done(val, result); } } else { - result = proveunsecure(val, ISC_TRUE); + result = proveunsecure(val, ISC_FALSE, ISC_TRUE); if (result != DNS_R_WAIT) validator_done(val, result); } @@ -455,7 +456,8 @@ dsfetched2(isc_task_t *task, isc_event_t *event) { * In either case we are still in a secure zone resume * validation. */ - result = proveunsecure(val, ISC_TRUE); + result = proveunsecure(val, ISC_TF(eresult == ISC_R_SUCCESS), + ISC_TRUE); if (result != DNS_R_WAIT) validator_done(val, result); } else { @@ -556,7 +558,7 @@ dsvalidated(isc_task_t *task, isc_event_t *event) { validator_log(val, ISC_LOG_DEBUG(3), "dsset with trust %d", val->frdataset.trust); if ((val->attributes & VALATTR_INSECURITY) != 0) - result = proveunsecure(val, ISC_TRUE); + result = proveunsecure(val, ISC_TRUE, ISC_TRUE); else result = validatezonekey(val); if (result != DNS_R_WAIT) @@ -2222,7 +2224,7 @@ nsecvalidate(dns_validator_t *val, isc_boolean_t resume) { validator_log(val, ISC_LOG_DEBUG(3), "nonexistence proof(s) not found"); val->attributes |= VALATTR_INSECURITY; - return (proveunsecure(val, ISC_FALSE)); + return (proveunsecure(val, ISC_FALSE, ISC_FALSE)); } static isc_boolean_t @@ -2496,7 +2498,8 @@ finddlvsep(dns_validator_t *val, isc_boolean_t resume) { * \li DNS_R_NOTINSECURE */ static isc_result_t -proveunsecure(dns_validator_t *val, isc_boolean_t resume) { +proveunsecure(dns_validator_t *val, isc_boolean_t have_ds, isc_boolean_t resume) +{ isc_result_t result; dns_fixedname_t fixedsecroot; dns_name_t *secroot; @@ -2544,12 +2547,19 @@ proveunsecure(dns_validator_t *val, isc_boolean_t resume) { val->labels = dns_name_countlabels(secroot) + 1; } else { validator_log(val, ISC_LOG_DEBUG(3), "resuming proveunsecure"); - if (val->frdataset.trust >= dns_trust_secure && + /* + * If we have a DS rdataset and it is secure then check if + * the DS rdataset has a supported algorithm combination. + * If not this is a insecure delegation as far as this + * resolver is concerned. Fall back to DLV if available. + */ + if (have_ds && val->frdataset.trust >= dns_trust_secure && !check_ds(val, dns_fixedname_name(&val->fname), &val->frdataset)) { dns_name_format(dns_fixedname_name(&val->fname), namebuf, sizeof(namebuf)); - if (val->mustbesecure) { + if ((val->view->dlv == NULL || DLVTRIED(val)) && + val->mustbesecure) { validator_log(val, ISC_LOG_WARNING, "must be secure failure at '%s'", namebuf); @@ -2794,7 +2804,7 @@ validator_start(isc_task_t *task, isc_event_t *event) { validator_log(val, ISC_LOG_DEBUG(3), "falling back to insecurity proof"); val->attributes |= VALATTR_INSECURITY; - result = proveunsecure(val, ISC_FALSE); + result = proveunsecure(val, ISC_FALSE, ISC_FALSE); if (result == DNS_R_NOTINSECURE) result = saved_result; } @@ -2808,7 +2818,7 @@ validator_start(isc_task_t *task, isc_event_t *event) { "attempting insecurity proof"); val->attributes |= VALATTR_INSECURITY; - result = proveunsecure(val, ISC_FALSE); + result = proveunsecure(val, ISC_FALSE, ISC_FALSE); } else if (val->event->rdataset == NULL && val->event->sigrdataset == NULL) { diff --git a/lib/dns/view.c b/lib/dns/view.c index 762b1922..17966c21 100644 --- a/lib/dns/view.c +++ b/lib/dns/view.c @@ -1,5 +1,5 @@ /* - * Copyright (C) 2004-2007 Internet Systems Consortium, Inc. ("ISC") + * Copyright (C) 2004-2008 Internet Systems Consortium, Inc. ("ISC") * Copyright (C) 1999-2003 Internet Software Consortium. * * Permission to use, copy, modify, and/or distribute this software for any @@ -15,7 +15,7 @@ * PERFORMANCE OF THIS SOFTWARE. */ -/* $Id: view.c,v 1.143 2007/06/18 23:47:42 tbox Exp $ */ +/* $Id: view.c,v 1.143.128.3 2008/04/03 06:10:20 marka Exp $ */ /*! \file */ @@ -25,7 +25,6 @@ #include /* Required for HP/UX (and others?) */ #include #include -#include #include #include @@ -44,6 +43,7 @@ #include #include #include +#include #include #include #include @@ -152,6 +152,8 @@ dns_view_create(isc_mem_t *mctx, dns_rdataclass_t rdclass, view->delonly = NULL; view->rootdelonly = ISC_FALSE; view->rootexclude = NULL; + view->resstats = NULL; + view->resquerystats = NULL; /* * Initialize configuration data with default values. @@ -322,7 +324,7 @@ destroy(dns_view_t *view) { name = ISC_LIST_HEAD(view->rootexclude[i]); while (name != NULL) { ISC_LIST_UNLINK(view->rootexclude[i], - name, link); + name, link); dns_name_free(name, view->mctx); isc_mem_put(view->mctx, name, sizeof(*name)); name = ISC_LIST_HEAD(view->rootexclude[i]); @@ -332,6 +334,10 @@ destroy(dns_view_t *view) { sizeof(dns_namelist_t) * DNS_VIEW_DELONLYHASH); view->rootexclude = NULL; } + if (view->resstats != NULL) + dns_stats_detach(&view->resstats); + if (view->resquerystats != NULL) + dns_stats_detach(&view->resquerystats); dns_keytable_detach(&view->trustedkeys); dns_keytable_detach(&view->secroots); dns_fwdtable_destroy(&view->fwdtable); @@ -578,6 +584,7 @@ dns_view_createresolver(dns_view_t *view, } result = dns_adb_create(mctx, view, timermgr, taskmgr, &view->adb); + isc_mem_setname(mctx, "ADB", NULL); isc_mem_detach(&mctx); if (result != ISC_R_SUCCESS) { dns_resolver_shutdown(view->resolver); @@ -943,7 +950,7 @@ dns_view_simplefind(dns_view_t *view, dns_name_t *name, dns_rdatatype_t type, isc_result_t dns_view_findzonecut(dns_view_t *view, dns_name_t *name, dns_name_t *fname, isc_stdtime_t now, unsigned int options, - isc_boolean_t use_hints, + isc_boolean_t use_hints, dns_rdataset_t *rdataset, dns_rdataset_t *sigrdataset) { return(dns_view_findzonecut2(view, name, fname, now, options, @@ -1157,8 +1164,8 @@ dns_viewlist_findzone(dns_viewlist_t *list, dns_name_t *name, REQUIRE(list != NULL); for (view = ISC_LIST_HEAD(*list); - view != NULL; - view = ISC_LIST_NEXT(view, link)) { + view != NULL; + view = ISC_LIST_NEXT(view, link)) { if (allclasses == ISC_FALSE && view->rdclass != rdclass) continue; result = dns_zt_find(view->zonetable, name, 0, NULL, @@ -1389,7 +1396,7 @@ dns_view_isdelegationonly(dns_view_t *view, dns_name_t *name) { return (ISC_TRUE); } -void +void dns_view_setrootdelonly(dns_view_t *view, isc_boolean_t value) { REQUIRE(DNS_VIEW_VALID(view)); view->rootdelonly = value; @@ -1407,46 +1414,38 @@ dns_view_freezezones(dns_view_t *view, isc_boolean_t value) { return (dns_zt_freezezones(view->zonetable, value)); } -#ifdef HAVE_LIBXML2 - -struct xmlarg { - int flags; - xmlTextWriterPtr xml; -}; - -static isc_result_t -zone_xmlrender(dns_zone_t *zone, void *arg) { - struct xmlarg *xmlarg = arg; +void +dns_view_setresstats(dns_view_t *view, dns_stats_t *stats) { + REQUIRE(DNS_VIEW_VALID(view)); + REQUIRE(!view->frozen); + REQUIRE(view->resstats == NULL); - return (dns_zone_xmlrender(zone, xmlarg->xml, xmlarg->flags)); + dns_stats_attach(stats, &view->resstats); } -isc_result_t -dns_view_xmlrender(dns_view_t *view, xmlTextWriterPtr xml, int flags) -{ - struct xmlarg xmlargs; - - xmlargs.flags = flags; - xmlargs.xml = xml; - - /* XXXMLG render config data here */ +void +dns_view_getresstats(dns_view_t *view, dns_stats_t **statsp) { + REQUIRE(DNS_VIEW_VALID(view)); + REQUIRE(statsp != NULL && *statsp == NULL); - if ((flags & ISC_XML_RENDERSTATS) != 0) { - xmlTextWriterStartElement(xml, ISC_XMLCHAR "view"); + if (view->resstats != NULL) + dns_stats_attach(view->resstats, statsp); +} - xmlTextWriterStartElement(xml, ISC_XMLCHAR "name"); - xmlTextWriterWriteString(xml, ISC_XMLCHAR view->name); - xmlTextWriterEndElement(xml); +void +dns_view_setresquerystats(dns_view_t *view, dns_stats_t *stats) { + REQUIRE(DNS_VIEW_VALID(view)); + REQUIRE(!view->frozen); + REQUIRE(view->resquerystats == NULL); - xmlTextWriterStartElement(xml, ISC_XMLCHAR "zones"); - dns_zt_apply(view->zonetable, ISC_FALSE, zone_xmlrender, - &xmlargs); - xmlTextWriterEndElement(xml); + dns_stats_attach(stats, &view->resquerystats); +} - xmlTextWriterEndElement(xml); - } +void +dns_view_getresquerystats(dns_view_t *view, dns_stats_t **statsp) { + REQUIRE(DNS_VIEW_VALID(view)); + REQUIRE(statsp != NULL && *statsp == NULL); - return (ISC_R_SUCCESS); + if (view->resquerystats != NULL) + dns_stats_attach(view->resquerystats, statsp); } - -#endif /* HAVE_LIBXML2 */ diff --git a/lib/dns/win32/libdns.def b/lib/dns/win32/libdns.def index cc27de6b..3c833854 100644 --- a/lib/dns/win32/libdns.def +++ b/lib/dns/win32/libdns.def @@ -100,6 +100,7 @@ dns_db_findnode dns_db_findrdataset dns_db_findzonecut dns_db_getoriginnode +dns_db_getrrsetstats dns_db_getsoaserial dns_db_iscache dns_db_ispersistent @@ -172,6 +173,7 @@ dns_dispatchmgr_destroy dns_dispatchmgr_getblackhole dns_dispatchmgr_setblackhole dns_dispatchmgr_setblackportlist +dns_dispatchmgr_setstats dns_dlzallowzonexfr dns_dlzcreate dns_dlzdestroy @@ -194,6 +196,9 @@ dns_fwdtable_add dns_fwdtable_create dns_fwdtable_destroy dns_fwdtable_find +dns_generalstats_create +dns_generalstats_dump +dns_generalstats_increment dns_iptable_addprefix dns_iptable_attach dns_iptable_create @@ -348,6 +353,10 @@ dns_ncache_towire dns_nsec_build dns_nsec_buildrdata dns_nsec_typepresent +dns_opcode_totext +dns_opcodestats_create +dns_opcodestats_dump +dns_opcodestats_increment dns_order_add dns_order_attach dns_order_create @@ -360,6 +369,7 @@ dns_peer_getkey dns_peer_getmaxudp dns_peer_getprovideixfr dns_peer_getrequestixfr +dns_peer_getrequestnsid dns_peer_getsupportedns dns_peer_gettransferformat dns_peer_gettransfers @@ -373,6 +383,7 @@ dns_peer_setnotifysource dns_peer_setprovideixfr dns_peer_setquerysource dns_peer_setrequestixfr +dns_peer_setrequestnsid dns_peer_setsupportedns dns_peer_settransferformat dns_peer_settransfers @@ -434,6 +445,7 @@ dns_rdataclass_format dns_rdataclass_fromtext dns_rdataclass_ismeta dns_rdataclass_totext +dns_rdatalist_fromrdataset dns_rdatalist_init dns_rdatalist_tordataset dns_rdataset_additionaldata @@ -454,6 +466,10 @@ dns_rdataset_setadditional dns_rdataset_totext dns_rdataset_towire dns_rdataset_towiresorted +dns_rdatasetstats_create +dns_rdatasetstats_decrement +dns_rdatasetstats_dump +dns_rdatasetstats_increment dns_rdatasetiter_current dns_rdatasetiter_destroy dns_rdatasetiter_first @@ -475,6 +491,9 @@ dns_rdatatype_iszonecutauth dns_rdatatype_notquestion dns_rdatatype_questiononly dns_rdatatype_totext +dns_rdatatypestats_create +dns_rdatatypestats_dump +dns_rdatatypestats_increment dns_request_cancel dns_request_create dns_request_createraw @@ -548,11 +567,9 @@ dns_ssutable_checkrules dns_ssutable_create dns_ssutable_detach dns_stats_alloccounters -dns_stats_copy -dns_stats_create -dns_stats_destroy +dns_stats_attach +dns_stats_detach dns_stats_freecounters -dns_stats_incrementcounter dns_tcpmsg_cancelread dns_tcpmsg_init dns_tcpmsg_invalidate @@ -610,6 +627,8 @@ dns_view_flushname dns_view_freeze dns_view_freezezones dns_view_getpeertsig +dns_view_getresstats +dns_view_getresquerystats dns_view_gettsig dns_view_load dns_view_loadnew @@ -617,6 +636,8 @@ dns_view_setcache dns_view_setdstport dns_view_sethints dns_view_setkeyring +dns_view_setresstats +dns_view_setresquerystats dns_view_setrootdelonly dns_view_simplefind dns_view_weakattach @@ -667,9 +688,10 @@ dns_zone_getnotifysrc6 dns_zone_getoptions dns_zone_getorigin dns_zone_getqueryacl +dns_zone_getrequeststats +dns_zone_getserial dns_zone_getsigvalidityinterval dns_zone_getssutable -dns_zone_getstats dns_zone_getstatscounters dns_zone_gettask dns_zone_gettype @@ -731,8 +753,10 @@ dns_zone_setoption dns_zone_setorigin dns_zone_setqueryacl dns_zone_setqueryonacl +dns_zone_setrequeststats dns_zone_setsigvalidityinterval dns_zone_setssutable +dns_zone_setstats dns_zone_setstatistics dns_zone_settask dns_zone_settype diff --git a/lib/dns/zone.c b/lib/dns/zone.c index 87add9f6..8e489fc8 100644 --- a/lib/dns/zone.c +++ b/lib/dns/zone.c @@ -15,7 +15,7 @@ * PERFORMANCE OF THIS SOFTWARE. */ -/* $Id: zone.c,v 1.470.12.2 2008/01/24 23:46:25 tbox Exp $ */ +/* $Id: zone.c,v 1.470.12.5 2008/04/07 05:30:58 marka Exp $ */ /*! \file */ @@ -33,7 +33,6 @@ #include #include #include -#include #include #include @@ -249,9 +248,15 @@ struct dns_zone { ISC_LINK(dns_zone_t) statelink; dns_zonelist_t *statelist; /*% - * Optional per-zone statistics counters (NULL if not present). + * Statistics counters about zone management. */ - dns_stats_t *counters; + dns_stats_t *stats; + /*% + * Optional per-zone statistics counters. Counted outside of this + * module. + */ + isc_boolean_t requeststats_on; + dns_stats_t *requeststats; isc_uint32_t notifydelay; dns_isselffunc_t isself; void *isselfarg; @@ -547,6 +552,15 @@ static const char *dbargv_default[] = { "rbt" }; } \ } while (0) +/*% + * Increment resolver-related statistics counters. Zone must be locked. + */ +static inline void +inc_stats(dns_zone_t *zone, dns_statscounter_t counter) { + if (zone->stats != NULL) + dns_generalstats_increment(zone->stats, counter); +} + /*** *** Public functions. ***/ @@ -663,7 +677,9 @@ dns_zone_create(dns_zone_t **zonep, isc_mem_t *mctx) { zone->checkns = NULL; ISC_LINK_INIT(zone, statelink); zone->statelist = NULL; - zone->counters = NULL; + zone->stats = NULL; + zone->requeststats_on = ISC_FALSE; + zone->requeststats = NULL; zone->notifydelay = 5; zone->isself = NULL; zone->isselfarg = NULL; @@ -735,8 +751,10 @@ zone_free(dns_zone_t *zone) { if (zone->journal != NULL) isc_mem_free(zone->mctx, zone->journal); zone->journal = NULL; - if (zone->counters != NULL) - dns_stats_destroy(zone->mctx, &zone->counters); + if (zone->stats != NULL) + dns_stats_detach(&zone->stats); + if (zone->requeststats != NULL) + dns_stats_detach(&zone->requeststats); if (zone->db != NULL) zone_detachdb(zone); if (zone->acache != NULL) @@ -814,7 +832,7 @@ dns_zone_setclass(dns_zone_t *zone, dns_rdataclass_t rdclass) { } dns_rdataclass_t -dns_zone_getclass(dns_zone_t *zone){ +dns_zone_getclass(dns_zone_t *zone) { REQUIRE(DNS_ZONE_VALID(zone)); return (zone->rdclass); @@ -829,6 +847,19 @@ dns_zone_setnotifytype(dns_zone_t *zone, dns_notifytype_t notifytype) { UNLOCK_ZONE(zone); } +isc_uint32_t +dns_zone_getserial(dns_zone_t *zone) { + isc_uint32_t serial; + + REQUIRE(DNS_ZONE_VALID(zone)); + + LOCK_ZONE(zone); + serial = zone->serial; + UNLOCK_ZONE(zone); + + return (serial); +} + /* * Single shot. */ @@ -3850,6 +3881,16 @@ notify_send_toaddr(isc_task_t *task, isc_event_t *event) { timeout * 3, timeout, notify->zone->task, notify_done, notify, ¬ify->request); + if (result == ISC_R_SUCCESS) { + if (isc_sockaddr_pf(¬ify->dst) == AF_INET) { + inc_stats(notify->zone, + dns_zonestatscounter_notifyoutv4); + } else { + inc_stats(notify->zone, + dns_zonestatscounter_notifyoutv6); + } + } + cleanup_key: if (key != NULL) dns_tsigkey_detach(&key); @@ -4919,7 +4960,7 @@ create_query(dns_zone_t *zone, dns_rdatatype_t rdtype, } static isc_result_t -add_opt(dns_message_t *message, isc_uint16_t udpsize) { +add_opt(dns_message_t *message, isc_uint16_t udpsize, isc_boolean_t reqnsid) { dns_rdataset_t *rdataset = NULL; dns_rdatalist_t *rdatalist = NULL; dns_rdata_t *rdata = NULL; @@ -4949,11 +4990,21 @@ add_opt(dns_message_t *message, isc_uint16_t udpsize) { */ rdatalist->ttl = 0; - /* - * No EDNS options. - */ - rdata->data = NULL; - rdata->length = 0; + /* Set EDNS options if applicable */ + if (reqnsid) { + unsigned char data[4]; + isc_buffer_t buf; + + isc_buffer_init(&buf, data, sizeof(data)); + isc_buffer_putuint16(&buf, DNS_OPT_NSID); + isc_buffer_putuint16(&buf, 0); + rdata->data = data; + rdata->length = sizeof(data); + } else { + rdata->data = NULL; + rdata->length = 0; + } + rdata->rdclass = rdatalist->rdclass; rdata->type = rdatalist->type; rdata->flags = 0; @@ -4988,7 +5039,7 @@ soa_query(isc_task_t *task, isc_event_t *event) { isc_uint32_t options; isc_boolean_t cancel = ISC_TRUE; int timeout; - isc_boolean_t have_xfrsource; + isc_boolean_t have_xfrsource, reqnsid; isc_uint16_t udpsize = SEND_BUFFER_SIZE; REQUIRE(DNS_ZONE_VALID(zone)); @@ -5040,6 +5091,7 @@ soa_query(isc_task_t *task, isc_event_t *event) { (void)dns_view_getpeertsig(zone->view, &masterip, &key); have_xfrsource = ISC_FALSE; + reqnsid = zone->view->requestnsid; if (zone->view->peers != NULL) { dns_peer_t *peer = NULL; isc_boolean_t edns; @@ -5057,6 +5109,7 @@ soa_query(isc_task_t *task, isc_event_t *event) { udpsize = dns_resolver_getudpsize(zone->view->resolver); (void)dns_peer_getudpsize(peer, &udpsize); + (void)dns_peer_getrequestnsid(peer, &reqnsid); } } @@ -5088,7 +5141,7 @@ soa_query(isc_task_t *task, isc_event_t *event) { DNS_REQUESTOPT_TCP : 0; if (!DNS_ZONE_FLAG(zone, DNS_ZONEFLG_NOEDNS)) { - result = add_opt(message, udpsize); + result = add_opt(message, udpsize, reqnsid); if (result != ISC_R_SUCCESS) zone_debuglog(zone, me, 1, "unable to add opt record: %s", @@ -5110,6 +5163,11 @@ soa_query(isc_task_t *task, isc_event_t *event) { "dns_request_createvia2() failed: %s", dns_result_totext(result)); goto cleanup; + } else { + if (isc_sockaddr_pf(&zone->masteraddr) == PF_INET) + inc_stats(zone, dns_zonestatscounter_soaoutv4); + else + inc_stats(zone, dns_zonestatscounter_soaoutv6); } cancel = ISC_FALSE; @@ -5152,7 +5210,7 @@ ns_query(dns_zone_t *zone, dns_rdataset_t *soardataset, dns_stub_t *stub) { dns_tsigkey_t *key = NULL; dns_dbnode_t *node = NULL; int timeout; - isc_boolean_t have_xfrsource = ISC_FALSE; + isc_boolean_t have_xfrsource = ISC_FALSE, reqnsid; isc_uint16_t udpsize = SEND_BUFFER_SIZE; REQUIRE(DNS_ZONE_VALID(zone)); @@ -5264,6 +5322,7 @@ ns_query(dns_zone_t *zone, dns_rdataset_t *soardataset, dns_stub_t *stub) { if (key == NULL) (void)dns_view_getpeertsig(zone->view, &masterip, &key); + reqnsid = zone->view->requestnsid; if (zone->view->peers != NULL) { dns_peer_t *peer = NULL; isc_boolean_t edns; @@ -5281,11 +5340,12 @@ ns_query(dns_zone_t *zone, dns_rdataset_t *soardataset, dns_stub_t *stub) { udpsize = dns_resolver_getudpsize(zone->view->resolver); (void)dns_peer_getudpsize(peer, &udpsize); + (void)dns_peer_getrequestnsid(peer, &reqnsid); } } if (!DNS_ZONE_FLAG(zone, DNS_ZONEFLG_NOEDNS)) { - result = add_opt(message, udpsize); + result = add_opt(message, udpsize, reqnsid); if (result != ISC_R_SUCCESS) zone_debuglog(zone, me, 1, "unable to add opt record: %s", @@ -5750,6 +5810,10 @@ dns_zone_notifyreceive(dns_zone_t *zone, isc_sockaddr_t *from, * We only handle NOTIFY (SOA) at the present. */ LOCK_ZONE(zone); + if (isc_sockaddr_pf(from) == PF_INET) + inc_stats(zone, dns_zonestatscounter_notifyinv4); + else + inc_stats(zone, dns_zonestatscounter_notifyinv6); if (msg->counts[DNS_SECTION_QUESTION] == 0 || dns_message_findname(msg, DNS_SECTION_QUESTION, &zone->origin, dns_rdatatype_soa, dns_rdatatype_none, @@ -5804,6 +5868,7 @@ dns_zone_notifyreceive(dns_zone_t *zone, isc_sockaddr_t *from, UNLOCK_ZONE(zone); dns_zone_log(zone, ISC_LOG_INFO, "refused notify from non-master: %s", fromtext); + inc_stats(zone, dns_zonestatscounter_notifyrej); return (DNS_R_REFUSED); } @@ -6772,6 +6837,7 @@ zone_xfrdone(dns_zone_t *zone, isc_result_t result) { dns_result_totext(result)); } + inc_stats(zone, dns_zonestatscounter_xfrsuccess); break; case DNS_R_BADIXFR: @@ -6806,6 +6872,7 @@ zone_xfrdone(dns_zone_t *zone, isc_result_t result) { DNS_ZONE_SETFLAG(zone, DNS_ZONEFLG_REFRESH); again = ISC_TRUE; } + inc_stats(zone, dns_zonestatscounter_xfrfail); break; } zone_settimer(zone, &now); @@ -7095,6 +7162,21 @@ got_transfer_quota(isc_task_t *task, isc_event_t *event) { zone->tsigkey, zone->mctx, zone->zmgr->timermgr, zone->zmgr->socketmgr, zone->task, zone_xfrdone, &zone->xfr); + if (result == ISC_R_SUCCESS) { + LOCK_ZONE(zone); + if (xfrtype == dns_rdatatype_axfr) { + if (isc_sockaddr_pf(&masteraddr) == PF_INET) + inc_stats(zone, dns_zonestatscounter_axfrreqv4); + else + inc_stats(zone, dns_zonestatscounter_axfrreqv6); + } else if (xfrtype == dns_rdatatype_ixfr) { + if (isc_sockaddr_pf(&masteraddr) == PF_INET) + inc_stats(zone, dns_zonestatscounter_ixfrreqv4); + else + inc_stats(zone, dns_zonestatscounter_ixfrreqv6); + } + UNLOCK_ZONE(zone); + } cleanup: /* * Any failure in this function is handled like a failed @@ -8086,35 +8168,66 @@ dns_zone_isforced(dns_zone_t *zone) { isc_result_t dns_zone_setstatistics(dns_zone_t *zone, isc_boolean_t on) { - isc_result_t result = ISC_R_SUCCESS; - - LOCK_ZONE(zone); - if (on) { - if (zone->counters != NULL) - goto done; - result = dns_stats_create(zone->mctx, &zone->counters); - } else { - if (zone->counters == NULL) - goto done; - dns_stats_destroy(zone->mctx, &zone->counters); - } - done: - UNLOCK_ZONE(zone); - return (result); + /* + * This function is obsoleted. + */ + UNUSED(zone); + UNUSED(on); + return (ISC_R_NOTIMPLEMENTED); } isc_uint64_t * dns_zone_getstatscounters(dns_zone_t *zone) { /* - * This function is obsoleted by dns_zone_getstats(). + * This function is obsoleted. */ UNUSED(zone); return (NULL); } +void +dns_zone_setstats(dns_zone_t *zone, dns_stats_t *stats) { + REQUIRE(DNS_ZONE_VALID(zone)); + REQUIRE(zone->stats == NULL); + + LOCK_ZONE(zone); + zone->stats = NULL; + dns_stats_attach(stats, &zone->stats); + UNLOCK_ZONE(zone); +} + +void +dns_zone_setrequeststats(dns_zone_t *zone, dns_stats_t *stats) { + REQUIRE(DNS_ZONE_VALID(zone)); + + LOCK_ZONE(zone); + if (zone->requeststats_on && stats == NULL) + zone->requeststats_on = ISC_FALSE; + else if (!zone->requeststats_on && stats != NULL) { + if (zone->requeststats == NULL) { + dns_stats_attach(stats, &zone->requeststats); + zone->requeststats_on = ISC_TRUE; + } + } + UNLOCK_ZONE(zone); + + return; +} + dns_stats_t * -dns_zone_getstats(dns_zone_t *zone) { - return (zone->counters); +dns_zone_getrequeststats(dns_zone_t *zone) { + /* + * We don't lock zone for efficiency reason. This is not catastrophic + * because requeststats must always be valid when requeststats_on is + * true. + * Some counters may be incremented while requeststats_on is becoming + * false, or some cannot be incremented just after the statistics are + * installed, but it shouldn't matter much in practice. + */ + if (zone->requeststats_on) + return (zone->requeststats); + else + return (NULL); } void @@ -8325,50 +8438,3 @@ dns_zone_getnotifydelay(dns_zone_t *zone) { return (zone->notifydelay); } - -#ifdef HAVE_LIBXML2 - -isc_result_t -dns_zone_xmlrender(dns_zone_t *zone, xmlTextWriterPtr xml, int flags) -{ - int i; - - /* XXXMLG render config data here */ - - if ((flags & ISC_XML_RENDERSTATS) != 0) { - xmlTextWriterStartElement(xml, ISC_XMLCHAR "zone"); - - xmlTextWriterStartElement(xml, ISC_XMLCHAR "name"); - xmlTextWriterWriteString(xml, ISC_XMLCHAR zone->strname); - xmlTextWriterEndElement(xml); - - xmlTextWriterStartElement(xml, ISC_XMLCHAR "rdataclass"); - xmlTextWriterWriteString(xml, ISC_XMLCHAR zone->strrdclass); - xmlTextWriterEndElement(xml); - - xmlTextWriterStartElement(xml, ISC_XMLCHAR "serial"); - xmlTextWriterWriteFormatString(xml, "%u", zone->serial); - xmlTextWriterEndElement(xml); - - if (zone->counters != NULL) { - isc_uint64_t counters[DNS_STATS_NCOUNTERS]; - - xmlTextWriterStartElement(xml, ISC_XMLCHAR "counters"); - dns_stats_copy(zone->counters, counters); - for (i = 0 ; i < DNS_STATS_NCOUNTERS ; i++) { - xmlTextWriterStartElement(xml, - ISC_XMLCHAR dns_statscounter_names[i]); - xmlTextWriterWriteFormatString(xml, - "%" ISC_PRINT_QUADFORMAT "u", - counters[i]); - xmlTextWriterEndElement(xml); - } - xmlTextWriterEndElement(xml); /* counters */ - } - xmlTextWriterEndElement(xml); /* zone */ - } - - return (ISC_R_SUCCESS); -} - -#endif /* HAVE_LIBXML2 */ diff --git a/lib/isc/api b/lib/isc/api index 58fb9f89..d2b48eaa 100644 --- a/lib/isc/api +++ b/lib/isc/api @@ -1,3 +1,3 @@ -LIBINTERFACE = 41 +LIBINTERFACE = 42 LIBREVISION = 0 -LIBAGE = 0 +LIBAGE = 1 diff --git a/lib/isc/include/isc/mem.h b/lib/isc/include/isc/mem.h index ade0794a..37a83668 100644 --- a/lib/isc/include/isc/mem.h +++ b/lib/isc/include/isc/mem.h @@ -1,5 +1,5 @@ /* - * Copyright (C) 2004-2007 Internet Systems Consortium, Inc. ("ISC") + * Copyright (C) 2004-2008 Internet Systems Consortium, Inc. ("ISC") * Copyright (C) 1997-2001 Internet Software Consortium. * * Permission to use, copy, modify, and/or distribute this software for any @@ -15,7 +15,7 @@ * PERFORMANCE OF THIS SOFTWARE. */ -/* $Id: mem.h,v 1.72 2007/06/18 23:47:44 tbox Exp $ */ +/* $Id: mem.h,v 1.72.128.3 2008/03/31 05:06:47 marka Exp $ */ #ifndef ISC_MEM_H #define ISC_MEM_H 1 @@ -157,7 +157,7 @@ LIBISC_EXTERNAL_DATA extern unsigned int isc_mem_debugging; #define isc_mem_strdup(c, p) isc__mem_strdup((c), (p) _ISC_MEM_FILELINE) #define isc_mempool_get(c) isc__mempool_get((c) _ISC_MEM_FILELINE) -/*% +/*% * isc_mem_putanddetach() is a convienence function for use where you * have a structure with an attached memory context. * @@ -216,7 +216,7 @@ LIBISC_EXTERNAL_DATA extern unsigned int isc_mem_debugging; #endif /*@{*/ -isc_result_t +isc_result_t isc_mem_create(size_t max_size, size_t target_size, isc_mem_t **mctxp); @@ -224,12 +224,12 @@ isc_result_t isc_mem_create2(size_t max_size, size_t target_size, isc_mem_t **mctxp, unsigned int flags); -isc_result_t +isc_result_t isc_mem_createx(size_t max_size, size_t target_size, isc_memalloc_t memalloc, isc_memfree_t memfree, void *arg, isc_mem_t **mctxp); -isc_result_t +isc_result_t isc_mem_createx2(size_t max_size, size_t target_size, isc_memalloc_t memalloc, isc_memfree_t memfree, void *arg, isc_mem_t **mctxp, unsigned int flags); @@ -266,9 +266,9 @@ isc_mem_createx2(size_t max_size, size_t target_size, /*@}*/ /*@{*/ -void +void isc_mem_attach(isc_mem_t *, isc_mem_t **); -void +void isc_mem_detach(isc_mem_t **); /*!< * \brief Attach to / detach from a memory context. @@ -276,7 +276,7 @@ isc_mem_detach(isc_mem_t **); * This is intended for applications that use multiple memory contexts * in such a way that it is not obvious when the last allocations from * a given context has been freed and destroying the context is safe. - * + * * Most applications do not need to call these functions as they can * simply create a single memory context at the beginning of main() * and destroy it at the end of main(), thereby guaranteeing that it @@ -284,13 +284,13 @@ isc_mem_detach(isc_mem_t **); */ /*@}*/ -void +void isc_mem_destroy(isc_mem_t **); /*%< * Destroy a memory context. */ -isc_result_t +isc_result_t isc_mem_ondestroy(isc_mem_t *ctx, isc_task_t *task, isc_event_t **event); @@ -299,13 +299,13 @@ isc_mem_ondestroy(isc_mem_t *ctx, * been successfully destroyed. */ -void +void isc_mem_stats(isc_mem_t *mctx, FILE *out); /*%< * Print memory usage statistics for 'mctx' on the stream 'out'. */ -void +void isc_mem_setdestroycheck(isc_mem_t *mctx, isc_boolean_t on); /*%< @@ -314,9 +314,9 @@ isc_mem_setdestroycheck(isc_mem_t *mctx, */ /*@{*/ -void +void isc_mem_setquota(isc_mem_t *, size_t); -size_t +size_t isc_mem_getquota(isc_mem_t *); /*%< * Set/get the memory quota of 'mctx'. This is a hard limit @@ -325,7 +325,7 @@ isc_mem_getquota(isc_mem_t *); */ /*@}*/ -size_t +size_t isc_mem_inuse(isc_mem_t *mctx); /*%< * Get an estimate of the number of memory in use in 'mctx', in bytes. @@ -337,13 +337,29 @@ void isc_mem_setwater(isc_mem_t *mctx, isc_mem_water_t water, void *water_arg, size_t hiwater, size_t lowater); /*%< - * Set high and low water marks for this memory context. - * - * When the memory - * usage of 'mctx' exceeds 'hiwater', '(water)(water_arg, #ISC_MEM_HIWATER)' - * will be called. When the usage drops below 'lowater', 'water' will - * again be called, this time with #ISC_MEM_LOWATER. - * + * Set high and low water marks for this memory context. + * + * When the memory usage of 'mctx' exceeds 'hiwater', + * '(water)(water_arg, #ISC_MEM_HIWATER)' will be called. 'water' needs to + * call isc_mem_waterack() with #ISC_MEM_HIWATER to acknowlege the state + * change. 'water' may be called multiple times. + * + * When the usage drops below 'lowater', 'water' will again be called, this + * time with #ISC_MEM_LOWATER. 'water' need to calls isc_mem_waterack() with + * #ISC_MEM_LOWATER to acknowlege the change. + * + * static void + * water(void *arg, int mark) { + * struct foo *foo = arg; + * + * LOCK(&foo->marklock); + * if (foo->mark != mark) { + * foo->mark = mark; + * .... + * isc_mem_waterack(foo->mctx, mark); + * } + * UNLOCK(&foo->marklock); + * } * If 'water' is NULL then 'water_arg', 'hi_water' and 'lo_water' are * ignored and the state is reset. * @@ -353,6 +369,12 @@ isc_mem_setwater(isc_mem_t *mctx, isc_mem_water_t water, void *water_arg, * hi_water >= lo_water */ +void +isc_mem_waterack(isc_mem_t *ctx, int mark); +/*%< + * Called to acknowledge changes in signalled by calls to 'water'. + */ + void isc_mem_printactive(isc_mem_t *mctx, FILE *file); /*%< @@ -377,6 +399,59 @@ isc_mem_checkdestroyed(FILE *file); * Fatally fails if there are still active contexts. */ +void +isc_mem_setname(isc_mem_t *ctx, const char *name, void *tag); +/*%< + * Name 'ctx'. + * + * Notes: + * + *\li Only the first 15 characters of 'name' will be copied. + * + *\li 'tag' is for debugging purposes only. + * + * Requires: + * + *\li 'ctx' is a valid ctx. + */ + +const char * +isc_mem_getname(isc_mem_t *ctx); +/*%< + * Get the name of 'ctx', as previously set using isc_mem_setname(). + * + * Requires: + *\li 'ctx' is a valid ctx. + * + * Returns: + *\li A non-NULL pointer to a null-terminated string. + * If the ctx has not been named, the string is + * empty. + */ + +void * +isc_mem_gettag(isc_mem_t *ctx); +/*%< + * Get the tag value for 'task', as previously set using isc_mem_setname(). + * + * Requires: + *\li 'ctx' is a valid ctx. + * + * Notes: + *\li This function is for debugging purposes only. + * + * Requires: + *\li 'ctx' is a valid task. + */ + +#ifdef HAVE_LIBXML2 +void +isc_mem_renderxml(xmlTextWriterPtr writer); +/*%< + * Render all contexts' statistics and status in XML for writer. + */ +#endif /* HAVE_LIBXML2 */ + /* * Memory pools */ @@ -521,28 +596,23 @@ isc_mempool_setfillcount(isc_mempool_t *mpctx, unsigned int limit); /* * Pseudo-private functions for use via macros. Do not call directly. */ -void * +void * isc__mem_get(isc_mem_t *, size_t _ISC_MEM_FLARG); -void +void isc__mem_putanddetach(isc_mem_t **, void *, size_t _ISC_MEM_FLARG); -void +void isc__mem_put(isc_mem_t *, void *, size_t _ISC_MEM_FLARG); -void * +void * isc__mem_allocate(isc_mem_t *, size_t _ISC_MEM_FLARG); -void +void isc__mem_free(isc_mem_t *, void * _ISC_MEM_FLARG); -char * +char * isc__mem_strdup(isc_mem_t *, const char *_ISC_MEM_FLARG); -void * +void * isc__mempool_get(isc_mempool_t * _ISC_MEM_FLARG); -void -isc__mempool_put(isc_mempool_t *, void * _ISC_MEM_FLARG); - -#ifdef HAVE_LIBXML2 void -isc_mem_renderxml(isc_mem_t *mgr, xmlTextWriterPtr writer); -#endif /* HAVE_LIBXML2 */ +isc__mempool_put(isc_mempool_t *, void * _ISC_MEM_FLARG); ISC_LANG_ENDDECLS diff --git a/lib/isc/mem.c b/lib/isc/mem.c index 36b9a7b0..bf82ad56 100644 --- a/lib/isc/mem.c +++ b/lib/isc/mem.c @@ -1,5 +1,5 @@ /* - * Copyright (C) 2004-2007 Internet Systems Consortium, Inc. ("ISC") + * Copyright (C) 2004-2008 Internet Systems Consortium, Inc. ("ISC") * Copyright (C) 1997-2003 Internet Software Consortium. * * Permission to use, copy, modify, and/or distribute this software for any @@ -15,7 +15,7 @@ * PERFORMANCE OF THIS SOFTWARE. */ -/* $Id: mem.c,v 1.137 2007/11/26 04:27:19 marka Exp $ */ +/* $Id: mem.c,v 1.137.16.4 2008/03/31 23:46:42 tbox Exp $ */ /*! \file */ @@ -34,6 +34,7 @@ #include #include #include +#include #include #include @@ -113,6 +114,12 @@ static ISC_LIST(isc_mem_t) contexts; static isc_once_t once = ISC_ONCE_INIT; static isc_mutex_t lock; +/*% + * Total size of lost memory due to a bug of external library. + * Locked by the global lock. + */ +static isc_uint64_t totallost; + struct isc_mem { unsigned int magic; isc_ondestroy_t ondestroy; @@ -125,6 +132,8 @@ struct isc_mem { isc_boolean_t checkfree; struct stats * stats; unsigned int references; + char name[16]; + void * tag; size_t quota; size_t total; size_t inuse; @@ -135,6 +144,7 @@ struct isc_mem { isc_mem_water_t water; void * water_arg; ISC_LIST(isc_mempool_t) pools; + unsigned int poolcnt; /* ISC_MEMFLAG_INTERNAL */ size_t mem_target; @@ -148,6 +158,7 @@ struct isc_mem { #if ISC_MEM_TRACKLINES debuglist_t * debuglist; + unsigned int debuglistcnt; #endif unsigned int memalloc_failures; @@ -193,7 +204,7 @@ struct isc_mempool { if ((isc_mem_debugging & (ISC_MEM_DEBUGTRACE | \ ISC_MEM_DEBUGRECORD)) != 0 && \ b != NULL) \ - add_trace_entry(a, b, c, d, e); \ + add_trace_entry(a, b, c, d, e); \ } while (0) #define DELETE_TRACE(a, b, c, d, e) delete_trace_entry(a, b, c, d, e) @@ -259,6 +270,7 @@ add_trace_entry(isc_mem_t *mctx, const void *ptr, unsigned int size dl->count = 1; ISC_LIST_PREPEND(mctx->debuglist[size], dl, link); + mctx->debuglistcnt++; } static inline void @@ -314,7 +326,7 @@ delete_trace_entry(isc_mem_t *mctx, const void *ptr, unsigned int size, static inline size_t rmsize(size_t size) { /* - * round down to ALIGNMENT_SIZE + * round down to ALIGNMENT_SIZE */ return (size & (~(ALIGNMENT_SIZE - 1))); } @@ -603,7 +615,7 @@ mem_get(isc_mem_t *ctx, size_t size) { ret = (ctx->memalloc)(ctx->arg, size); if (ret == NULL) - ctx->memalloc_failures++; + ctx->memalloc_failures++; #if ISC_MEM_FILL if (ret != NULL) @@ -692,6 +704,7 @@ static void initialize_action(void) { RUNTIME_CHECK(isc_mutex_init(&lock) == ISC_R_SUCCESS); ISC_LIST_INIT(contexts); + totallost = 0; } /* @@ -705,7 +718,7 @@ isc_mem_createx(size_t init_max_size, size_t target_size, { return (isc_mem_createx2(init_max_size, target_size, memalloc, memfree, arg, ctxp, ISC_MEMFLAG_DEFAULT)); - + } isc_result_t @@ -742,6 +755,8 @@ isc_mem_createx2(size_t init_max_size, size_t target_size, ctx->max_size = init_max_size; ctx->flags = flags; ctx->references = 1; + memset(ctx->name, 0, sizeof(ctx->name)); + ctx->tag = NULL; ctx->quota = 0; ctx->total = 0; ctx->inuse = 0; @@ -760,8 +775,10 @@ isc_mem_createx2(size_t init_max_size, size_t target_size, ctx->checkfree = ISC_TRUE; #if ISC_MEM_TRACKLINES ctx->debuglist = NULL; + ctx->debuglistcnt = 0; #endif ISC_LIST_INIT(ctx->pools); + ctx->poolcnt = 0; ctx->freelists = NULL; ctx->basic_blocks = NULL; ctx->basic_table = NULL; @@ -862,6 +879,7 @@ destroy(isc_mem_t *ctx) { LOCK(&lock); ISC_LIST_UNLINK(contexts, ctx, link); + totallost += ctx->inuse; UNLOCK(&lock); INSIST(ISC_LIST_EMPTY(ctx->pools)); @@ -882,7 +900,7 @@ destroy(isc_mem_t *ctx) { dl != NULL; dl = ISC_LIST_HEAD(ctx->debuglist[i])) { ISC_LIST_UNLINK(ctx->debuglist[i], - dl, link); + dl, link); free(dl); } } @@ -1086,7 +1104,6 @@ isc__mem_get(isc_mem_t *ctx, size_t size FLARG) { ADD_TRACE(ctx, ptr, size, file, line); if (ctx->hi_water != 0U && !ctx->hi_called && ctx->inuse > ctx->hi_water) { - ctx->hi_called = ISC_TRUE; call_water = ISC_TRUE; } if (ctx->inuse > ctx->maxinuse) { @@ -1142,10 +1159,8 @@ isc__mem_put(isc_mem_t *ctx, void *ptr, size_t size FLARG) * when the context was pushed over hi_water but then had * isc_mem_setwater() called with 0 for hi_water and lo_water. */ - if (ctx->hi_called && + if (ctx->hi_called && (ctx->inuse < ctx->lo_water || ctx->lo_water == 0U)) { - ctx->hi_called = ISC_FALSE; - if (ctx->water != NULL) call_water = ISC_TRUE; } @@ -1155,6 +1170,18 @@ isc__mem_put(isc_mem_t *ctx, void *ptr, size_t size FLARG) (ctx->water)(ctx->water_arg, ISC_MEM_LOWATER); } +void +isc_mem_waterack(isc_mem_t *ctx, int flag) { + REQUIRE(VALID_CONTEXT(ctx)); + + MCTXLOCK(ctx, &ctx->lock); + if (flag == ISC_MEM_LOWATER) + ctx->hi_called = ISC_FALSE; + else if (flag == ISC_MEM_HIWATER) + ctx->hi_called = ISC_TRUE; + MCTXUNLOCK(ctx, &ctx->lock); +} + #if ISC_MEM_TRACKLINES static void print_active(isc_mem_t *mctx, FILE *out) { @@ -1170,11 +1197,11 @@ print_active(isc_mem_t *mctx, FILE *out) { "memory allocations:\n")); found = ISC_FALSE; format = isc_msgcat_get(isc_msgcat, ISC_MSGSET_MEM, - ISC_MSG_PTRFILELINE, + ISC_MSG_PTRFILELINE, "\tptr %p size %u file %s line %u\n"); for (i = 0; i <= mctx->max_size; i++) { dl = ISC_LIST_HEAD(mctx->debuglist[i]); - + if (dl != NULL) found = ISC_TRUE; @@ -1372,7 +1399,7 @@ isc__mem_free(isc_mem_t *ctx, void *ptr FLARG) { * when the context was pushed over hi_water but then had * isc_mem_setwater() called with 0 for hi_water and lo_water. */ - if (ctx->hi_called && + if (ctx->hi_called && (ctx->inuse < ctx->lo_water || ctx->lo_water == 0U)) { ctx->hi_called = ISC_FALSE; @@ -1462,7 +1489,7 @@ isc_mem_inuse(isc_mem_t *ctx) { void isc_mem_setwater(isc_mem_t *ctx, isc_mem_water_t water, void *water_arg, - size_t hiwater, size_t lowater) + size_t hiwater, size_t lowater) { isc_boolean_t callwater = ISC_FALSE; isc_mem_water_t oldwater; @@ -1493,11 +1520,36 @@ isc_mem_setwater(isc_mem_t *ctx, isc_mem_water_t water, void *water_arg, ctx->hi_called = ISC_FALSE; } MCTXUNLOCK(ctx, &ctx->lock); - + if (callwater && oldwater != NULL) (oldwater)(oldwater_arg, ISC_MEM_LOWATER); } +void +isc_mem_setname(isc_mem_t *ctx, const char *name, void *tag) { + REQUIRE(VALID_CONTEXT(ctx)); + + LOCK(&ctx->lock); + memset(ctx->name, 0, sizeof(ctx->name)); + strncpy(ctx->name, name, sizeof(ctx->name) - 1); + ctx->tag = tag; + UNLOCK(&ctx->lock); +} + +const char * +isc_mem_getname(isc_mem_t *ctx) { + REQUIRE(VALID_CONTEXT(ctx)); + + return (ctx->name); +} + +void * +isc_mem_gettag(isc_mem_t *ctx) { + REQUIRE(VALID_CONTEXT(ctx)); + + return (ctx->tag); +} + /* * Memory pool stuff */ @@ -1537,6 +1589,7 @@ isc_mempool_create(isc_mem_t *mctx, size_t size, isc_mempool_t **mpctxp) { MCTXLOCK(mctx, &mctx->lock); ISC_LIST_INITANDAPPEND(mctx->pools, mpctx, link); + mctx->poolcnt++; MCTXUNLOCK(mctx, &mctx->lock); return (ISC_R_SUCCESS); @@ -1611,6 +1664,7 @@ isc_mempool_destroy(isc_mempool_t **mpctxp) { */ MCTXLOCK(mctx, &mctx->lock); ISC_LIST_UNLINK(mctx->pools, mpctx, link); + mctx->poolcnt--; MCTXUNLOCK(mctx, &mctx->lock); mpctx->magic = 0; @@ -1932,7 +1986,7 @@ isc_mem_printallactive(FILE *file) { #endif } -void +void isc_mem_checkdestroyed(FILE *file) { RUNTIME_CHECK(isc_once_do(&once, initialize_action) == ISC_R_SUCCESS); @@ -1957,115 +2011,149 @@ isc_mem_checkdestroyed(FILE *file) { #ifdef HAVE_LIBXML2 -void -isc_mem_renderxml(isc_mem_t *ctx, xmlTextWriterPtr writer) -{ - size_t i; - const struct stats *s; - const isc_mempool_t *pool; +typedef struct summarystat { + isc_uint64_t total; + isc_uint64_t inuse; + isc_uint64_t blocksize; + isc_uint64_t contextsize; +} summarystat_t; +static void +renderctx(isc_mem_t *ctx, summarystat_t *summary, xmlTextWriterPtr writer) { REQUIRE(VALID_CONTEXT(ctx)); - MCTXLOCK(ctx, &ctx->lock); - xmlTextWriterStartElement(writer, ISC_XMLCHAR "references"); - xmlTextWriterWriteFormatString(writer, "%d", ctx->references); - xmlTextWriterEndElement(writer); + xmlTextWriterStartElement(writer, ISC_XMLCHAR "context"); - xmlTextWriterStartElement(writer, ISC_XMLCHAR "buckets"); - for (i = 0; i <= ctx->max_size; i++) { - s = &ctx->stats[i]; + xmlTextWriterStartElement(writer, ISC_XMLCHAR "id"); + xmlTextWriterWriteFormatString(writer, "%p", ctx); + xmlTextWriterEndElement(writer); /* id */ - if (s->totalgets == 0U && s->gets == 0U) - continue; + if (ctx->name[0] != 0) { + xmlTextWriterStartElement(writer, ISC_XMLCHAR "name"); + xmlTextWriterWriteFormatString(writer, "%s", ctx->name); + xmlTextWriterEndElement(writer); /* name */ + } - xmlTextWriterStartElement(writer, ISC_XMLCHAR "bucket"); + REQUIRE(VALID_CONTEXT(ctx)); + MCTXLOCK(ctx, &ctx->lock); - xmlTextWriterStartElement(writer, ISC_XMLCHAR "size"); - xmlTextWriterWriteFormatString(writer, "%ld", (long)i); - xmlTextWriterEndElement(writer); /* size */ + summary->contextsize += sizeof(*ctx) + + (ctx->max_size + 1) * sizeof(struct stats) + + ctx->max_size * sizeof(element *) + + ctx->basic_table_count * sizeof(char *); +#if ISC_MEM_TRACKLINES + if (ctx->debuglist != NULL) { + summary->contextsize += + (ctx->max_size + 1) * sizeof(debuglist_t) + + ctx->debuglistcnt * sizeof(debuglink_t); + } +#endif + xmlTextWriterStartElement(writer, ISC_XMLCHAR "references"); + xmlTextWriterWriteFormatString(writer, "%d", ctx->references); + xmlTextWriterEndElement(writer); /* references */ + + summary->total += ctx->total; + xmlTextWriterStartElement(writer, ISC_XMLCHAR "total"); + xmlTextWriterWriteFormatString(writer, "%" ISC_PRINT_QUADFORMAT "u", + (isc_uint64_t)ctx->total); + xmlTextWriterEndElement(writer); /* total */ + + summary->inuse += ctx->inuse; + xmlTextWriterStartElement(writer, ISC_XMLCHAR "inuse"); + xmlTextWriterWriteFormatString(writer, "%" ISC_PRINT_QUADFORMAT "u", + (isc_uint64_t)ctx->inuse); + xmlTextWriterEndElement(writer); /* inuse */ + + xmlTextWriterStartElement(writer, ISC_XMLCHAR "maxinuse"); + xmlTextWriterWriteFormatString(writer, "%" ISC_PRINT_QUADFORMAT "u", + (isc_uint64_t)ctx->maxinuse); + xmlTextWriterEndElement(writer); /* maxinuse */ + + xmlTextWriterStartElement(writer, ISC_XMLCHAR "blocksize"); + if ((ctx->flags & ISC_MEMFLAG_INTERNAL) != 0) { + summary->blocksize += ctx->basic_table_count * + NUM_BASIC_BLOCKS * ctx->mem_target; + xmlTextWriterWriteFormatString(writer, + "%" ISC_PRINT_QUADFORMAT "u", + (isc_uint64_t) + ctx->basic_table_count * + NUM_BASIC_BLOCKS * + ctx->mem_target); + } else + xmlTextWriterWriteFormatString(writer, "%s", "-"); + xmlTextWriterEndElement(writer); /* blocksize */ - xmlTextWriterStartElement(writer, ISC_XMLCHAR "totalgets"); - xmlTextWriterWriteFormatString(writer, "%lu", s->totalgets); - xmlTextWriterEndElement(writer); /* totalgets */ + xmlTextWriterStartElement(writer, ISC_XMLCHAR "pools"); + xmlTextWriterWriteFormatString(writer, "%u", ctx->poolcnt); + xmlTextWriterEndElement(writer); /* pools */ + summary->contextsize += ctx->poolcnt * sizeof(isc_mempool_t); - xmlTextWriterStartElement(writer, ISC_XMLCHAR "gets"); - xmlTextWriterWriteFormatString(writer, "%lu", s->gets); - xmlTextWriterEndElement(writer); /* gets */ + xmlTextWriterStartElement(writer, ISC_XMLCHAR "hiwater"); + xmlTextWriterWriteFormatString(writer, "%" ISC_PRINT_QUADFORMAT "u", + (isc_uint64_t)ctx->hi_water); + xmlTextWriterEndElement(writer); /* hiwater */ - if ((ctx->flags & ISC_MEMFLAG_INTERNAL) != 0 && - (s->blocks != 0U || s->freefrags != 0U)) { - xmlTextWriterStartElement(writer, - ISC_XMLCHAR "blocks"); - xmlTextWriterWriteFormatString(writer, "%lu", - s->blocks); - xmlTextWriterEndElement(writer); /* blocks */ - - xmlTextWriterStartElement(writer, - ISC_XMLCHAR "freefrags"); - xmlTextWriterWriteFormatString(writer, "%lu", - s->freefrags); - xmlTextWriterEndElement(writer); /* freefrags */ - } + xmlTextWriterStartElement(writer, ISC_XMLCHAR "lowater"); + xmlTextWriterWriteFormatString(writer, "%" ISC_PRINT_QUADFORMAT "u", + (isc_uint64_t)ctx->lo_water); + xmlTextWriterEndElement(writer); /* lowater */ - xmlTextWriterEndElement(writer); /* bucket */ - } - xmlTextWriterEndElement(writer); /* buckets */ + MCTXUNLOCK(ctx, &ctx->lock); - /* - * Note that since a pool can be locked now, these stats might be - * somewhat off if the pool is in active use at the time the stats - * are dumped. The link fields are protected by the isc_mem_t's - * lock, however, so walking this list and extracting integers from - * stats fields is always safe. - */ - xmlTextWriterStartElement(writer, ISC_XMLCHAR "pools"); - pool = ISC_LIST_HEAD(ctx->pools); - while (pool != NULL) { - xmlTextWriterStartElement(writer, ISC_XMLCHAR "pool"); + xmlTextWriterEndElement(writer); /* context */ +} + +void +isc_mem_renderxml(xmlTextWriterPtr writer) { + isc_mem_t *ctx; + summarystat_t summary; + isc_uint64_t lost; - xmlTextWriterWriteElement(writer, ISC_XMLCHAR "name", - ISC_XMLCHAR pool->name); + memset(&summary, 0, sizeof(summary)); - xmlTextWriterStartElement(writer, ISC_XMLCHAR "size"); - xmlTextWriterWriteFormatString(writer, "%ld", (long)pool->size); - xmlTextWriterEndElement(writer); /* size */ + xmlTextWriterStartElement(writer, ISC_XMLCHAR "contexts"); - xmlTextWriterStartElement(writer, ISC_XMLCHAR "maxalloc"); - xmlTextWriterWriteFormatString(writer, "%u", pool->maxalloc); - xmlTextWriterEndElement(writer); /* maxalloc */ + RUNTIME_CHECK(isc_once_do(&once, initialize_action) == ISC_R_SUCCESS); - xmlTextWriterStartElement(writer, ISC_XMLCHAR "allocated"); - xmlTextWriterWriteFormatString(writer, "%u", pool->allocated); - xmlTextWriterEndElement(writer); /* allocated */ + LOCK(&lock); + lost = totallost; + for (ctx = ISC_LIST_HEAD(contexts); + ctx != NULL; + ctx = ISC_LIST_NEXT(ctx, link)) { + renderctx(ctx, &summary, writer); + } + UNLOCK(&lock); - xmlTextWriterStartElement(writer, ISC_XMLCHAR "freecount"); - xmlTextWriterWriteFormatString(writer, "%u", pool->freecount); - xmlTextWriterEndElement(writer); /* freecount */ + xmlTextWriterEndElement(writer); /* contexts */ - xmlTextWriterStartElement(writer, ISC_XMLCHAR "freemax"); - xmlTextWriterWriteFormatString(writer, "%u", pool->freemax); - xmlTextWriterEndElement(writer); /* freemax */ + xmlTextWriterStartElement(writer, ISC_XMLCHAR "summary"); - xmlTextWriterStartElement(writer, ISC_XMLCHAR "fillcount"); - xmlTextWriterWriteFormatString(writer, "%u", pool->fillcount); - xmlTextWriterEndElement(writer); /* fillcount */ + xmlTextWriterStartElement(writer, ISC_XMLCHAR "TotalUse"); + xmlTextWriterWriteFormatString(writer, "%" ISC_PRINT_QUADFORMAT "u", + summary.total); + xmlTextWriterEndElement(writer); /* TotalUse */ - xmlTextWriterStartElement(writer, ISC_XMLCHAR "gets"); - xmlTextWriterWriteFormatString(writer, "%u", pool->gets); - xmlTextWriterEndElement(writer); /* gets */ + xmlTextWriterStartElement(writer, ISC_XMLCHAR "InUse"); + xmlTextWriterWriteFormatString(writer, "%" ISC_PRINT_QUADFORMAT "u", + summary.inuse); + xmlTextWriterEndElement(writer); /* InUse */ - xmlTextWriterStartElement(writer, ISC_XMLCHAR "locked"); - xmlTextWriterWriteFormatString(writer, "%s", - ((pool->lock == NULL) ? "No" : "Yes")); - xmlTextWriterEndElement(writer); /* locked */ + xmlTextWriterStartElement(writer, ISC_XMLCHAR "BlockSize"); + xmlTextWriterWriteFormatString(writer, "%" ISC_PRINT_QUADFORMAT "u", + summary.blocksize); + xmlTextWriterEndElement(writer); /* BlockSize */ - xmlTextWriterEndElement(writer); /* pool */ + xmlTextWriterStartElement(writer, ISC_XMLCHAR "ContextSize"); + xmlTextWriterWriteFormatString(writer, "%" ISC_PRINT_QUADFORMAT "u", + summary.contextsize); + xmlTextWriterEndElement(writer); /* ContextSize */ - pool = ISC_LIST_NEXT(pool, link); - } - xmlTextWriterEndElement(writer); /* pools */ + xmlTextWriterStartElement(writer, ISC_XMLCHAR "Lost"); + xmlTextWriterWriteFormatString(writer, "%" ISC_PRINT_QUADFORMAT "u", + lost); + xmlTextWriterEndElement(writer); /* Lost */ - MCTXUNLOCK(ctx, &ctx->lock); + xmlTextWriterEndElement(writer); /* summary */ } #endif /* HAVE_LIBXML2 */ diff --git a/lib/isc/print.c b/lib/isc/print.c index 26bf8e52..a64aaf53 100644 --- a/lib/isc/print.c +++ b/lib/isc/print.c @@ -1,5 +1,5 @@ /* - * Copyright (C) 2004-2007 Internet Systems Consortium, Inc. ("ISC") + * Copyright (C) 2004-2008 Internet Systems Consortium, Inc. ("ISC") * Copyright (C) 1999-2001, 2003 Internet Software Consortium. * * Permission to use, copy, modify, and/or distribute this software for any @@ -15,7 +15,7 @@ * PERFORMANCE OF THIS SOFTWARE. */ -/* $Id: print.c,v 1.33 2007/06/19 23:47:17 tbox Exp $ */ +/* $Id: print.c,v 1.33.128.2 2008/02/18 23:46:30 tbox Exp $ */ /*! \file */ @@ -246,8 +246,24 @@ isc_print_vsnprintf(char *str, size_t size, const char *format, va_list ap) { head = ""; tmpui = tmpi; } - sprintf(buf, "%" ISC_PRINT_QUADFORMAT "u", - tmpui); + if (tmpui <= 0xffffffffU) + sprintf(buf, "%lu", + (unsigned long)tmpui); + else { + unsigned long mid; + unsigned long lo; + unsigned long hi; + lo = tmpui % 1000000000; + tmpui /= 1000000000; + mid = tmpui % 1000000000; + hi = tmpui / 1000000000; + if (hi != 0) + sprintf(buf, "%lu", hi); + else + buf[0] = '\n'; + sprintf(buf + strlen(buf), "%lu", mid); + sprintf(buf + strlen(buf), "%lu", lo); + } goto printint; case 'o': if (q) @@ -256,10 +272,29 @@ isc_print_vsnprintf(char *str, size_t size, const char *format, va_list ap) { tmpui = va_arg(ap, long int); else tmpui = va_arg(ap, int); - sprintf(buf, - alt ? "%#" ISC_PRINT_QUADFORMAT "o" - : "%" ISC_PRINT_QUADFORMAT "o", - tmpui); + if (tmpui <= 0xffffffffU) + sprintf(buf, alt ? "%#lo" : "%lo", + (unsigned long)tmpui); + else { + unsigned long mid; + unsigned long lo; + unsigned long hi; + lo = tmpui % 010000000000; + tmpui /= 010000000000; + mid = tmpui % 010000000000; + hi = tmpui / 010000000000; + if (hi != 0) { + sprintf(buf, + alt ? "%#lo" : "%lo", + hi); + sprintf(buf + strlen(buf), + "%lo", mid); + } else + sprintf(buf, + alt ? "%#lo" : "%lo", + mid); + sprintf(buf + strlen(buf), "%lo", lo); + } goto printint; case 'u': if (q) @@ -268,8 +303,24 @@ isc_print_vsnprintf(char *str, size_t size, const char *format, va_list ap) { tmpui = va_arg(ap, unsigned long int); else tmpui = va_arg(ap, unsigned int); - sprintf(buf, "%" ISC_PRINT_QUADFORMAT "u", - tmpui); + if (tmpui <= 0xffffffffU) + sprintf(buf, "%lu", + (unsigned long)tmpui); + else { + unsigned long mid; + unsigned long lo; + unsigned long hi; + lo = tmpui % 1000000000; + tmpui /= 1000000000; + mid = tmpui % 1000000000; + hi = tmpui / 1000000000; + if (hi != 0) + sprintf(buf, "%lu", hi); + else + buf[0] = '\n'; + sprintf(buf + strlen(buf), "%lu", mid); + sprintf(buf + strlen(buf), "%lu", lo); + } goto printint; case 'x': if (q) @@ -283,8 +334,15 @@ isc_print_vsnprintf(char *str, size_t size, const char *format, va_list ap) { if (precision > 2) precision -= 2; } - sprintf(buf, "%" ISC_PRINT_QUADFORMAT "x", - tmpui); + if (tmpui <= 0xffffffffU) + sprintf(buf, "%lx", + (unsigned long)tmpui); + else { + unsigned long hi = tmpui>>32; + unsigned long lo = tmpui & 0xffffffff; + sprintf(buf, "%lx", hi); + sprintf(buf + strlen(buf), "%lx", lo); + } goto printint; case 'X': if (q) @@ -298,8 +356,15 @@ isc_print_vsnprintf(char *str, size_t size, const char *format, va_list ap) { if (precision > 2) precision -= 2; } - sprintf(buf, "%" ISC_PRINT_QUADFORMAT "X", - tmpui); + if (tmpui <= 0xffffffffU) + sprintf(buf, "%lX", + (unsigned long)tmpui); + else { + unsigned long hi = tmpui>>32; + unsigned long lo = tmpui & 0xffffffff; + sprintf(buf, "%lX", hi); + sprintf(buf + strlen(buf), "%lX", lo); + } goto printint; printint: if (precision != 0 || width != 0) { diff --git a/lib/isc/pthreads/mutex.c b/lib/isc/pthreads/mutex.c index c437343e..794803b2 100644 --- a/lib/isc/pthreads/mutex.c +++ b/lib/isc/pthreads/mutex.c @@ -1,5 +1,5 @@ /* - * Copyright (C) 2004, 2005, 2007 Internet Systems Consortium, Inc. ("ISC") + * Copyright (C) 2004, 2005, 2007, 2008 Internet Systems Consortium, Inc. ("ISC") * Copyright (C) 2000-2002 Internet Software Consortium. * * Permission to use, copy, modify, and/or distribute this software for any @@ -15,7 +15,7 @@ * PERFORMANCE OF THIS SOFTWARE. */ -/* $Id: mutex.c,v 1.14 2007/06/19 23:47:18 tbox Exp $ */ +/* $Id: mutex.c,v 1.14.128.2 2008/04/04 23:46:31 tbox Exp $ */ /*! \file */ @@ -36,23 +36,23 @@ /*% Operations on timevals; adapted from FreeBSD's sys/time.h */ #define timevalclear(tvp) ((tvp)->tv_sec = (tvp)->tv_usec = 0) #define timevaladd(vvp, uvp) \ - do { \ - (vvp)->tv_sec += (uvp)->tv_sec; \ - (vvp)->tv_usec += (uvp)->tv_usec; \ - if ((vvp)->tv_usec >= 1000000) { \ - (vvp)->tv_sec++; \ - (vvp)->tv_usec -= 1000000; \ - } \ - } while (0) + do { \ + (vvp)->tv_sec += (uvp)->tv_sec; \ + (vvp)->tv_usec += (uvp)->tv_usec; \ + if ((vvp)->tv_usec >= 1000000) { \ + (vvp)->tv_sec++; \ + (vvp)->tv_usec -= 1000000; \ + } \ + } while (0) #define timevalsub(vvp, uvp) \ - do { \ - (vvp)->tv_sec -= (uvp)->tv_sec; \ - (vvp)->tv_usec -= (uvp)->tv_usec; \ - if ((vvp)->tv_usec < 0) { \ - (vvp)->tv_sec--; \ - (vvp)->tv_usec += 1000000; \ - } \ - } while (0) + do { \ + (vvp)->tv_sec -= (uvp)->tv_sec; \ + (vvp)->tv_usec -= (uvp)->tv_usec; \ + if ((vvp)->tv_usec < 0) { \ + (vvp)->tv_sec--; \ + (vvp)->tv_usec += 1000000; \ + } \ + } while (0) /*@}*/ @@ -77,8 +77,11 @@ struct isc_mutexstats { isc_mutexlocker_t lockers[ISC_MUTEX_MAX_LOCKERS]; }; -#define TABLESIZE (8 * 1024) -static isc_mutexstats_t stats[TABLESIZE]; +#ifndef ISC_MUTEX_PROFTABLESIZE +#define ISC_MUTEX_PROFTABLESIZE (16 * 1024) +#endif +static isc_mutexstats_t stats[ISC_MUTEX_PROFTABLESIZE]; +static int stats_next = 0; static isc_boolean_t stats_init = ISC_FALSE; static pthread_mutex_t statslock = PTHREAD_MUTEX_INITIALIZER; @@ -95,21 +98,19 @@ isc_mutex_init_profile(isc_mutex_t *mp, const char *file, int line) { RUNTIME_CHECK(pthread_mutex_lock(&statslock) == 0); - if (stats_init == ISC_FALSE) { - for (i = 0; i < TABLESIZE; i++) { - stats[i].file = NULL; - } + if (stats_init == ISC_FALSE) stats_init = ISC_TRUE; - } - mp->stats = NULL; - for (i = 0; i < TABLESIZE; i++) { - if (stats[i].file == NULL) { - mp->stats = &stats[i]; - break; - } - } - RUNTIME_CHECK(mp->stats != NULL); + /* + * If all statistics entries have been used, give up and trigger an + * assertion failure. There would be no other way to deal with this + * because we'd like to keep record of all locks for the purpose of + * debugging and the number of necessary locks is unpredictable. + * If this failure is triggered while debugging, named should be + * rebuilt with an increased ISC_MUTEX_PROFTABLESIZE. + */ + RUNTIME_CHECK(stats_next < ISC_MUTEX_PROFTABLESIZE); + mp->stats = &stats[stats_next++]; RUNTIME_CHECK(pthread_mutex_unlock(&statslock) == 0); @@ -196,10 +197,9 @@ void isc_mutex_statsprofile(FILE *fp) { isc_mutexlocker_t *locker; int i, j; + fprintf(fp, "Mutex stats (in us)\n"); - for (i = 0; i < TABLESIZE; i++) { - if (stats[i].file == NULL) - continue; + for (i = 0; i < stats_next; i++) { fprintf(fp, "%-12s %4d: %10u %lu.%06lu %lu.%06lu\n", stats[i].file, stats[i].line, stats[i].count, stats[i].locked_total.tv_sec, @@ -236,7 +236,7 @@ isc_mutex_init_errcheck(isc_mutex_t *mp) if (pthread_mutexattr_settype(&attr, PTHREAD_MUTEX_ERRORCHECK) != 0) return (ISC_R_UNEXPECTED); - + err = pthread_mutex_init(mp, &attr) != 0) if (err == ENOMEM) return (ISC_R_NOMEMORY); @@ -251,6 +251,7 @@ pthread_mutexattr_t isc__mutex_attrs = { }; #endif +#if !(ISC_MUTEX_DEBUG && defined(PTHREAD_MUTEX_ERRORCHECK)) && !ISC_MUTEX_PROFILE isc_result_t isc__mutex_init(isc_mutex_t *mp, const char *file, unsigned int line) { char strbuf[ISC_STRERRORSIZE]; @@ -268,3 +269,4 @@ isc__mutex_init(isc_mutex_t *mp, const char *file, unsigned int line) { } return (result); } +#endif diff --git a/lib/isc/task.c b/lib/isc/task.c index e4b9b637..4b5a5a3c 100644 --- a/lib/isc/task.c +++ b/lib/isc/task.c @@ -1,5 +1,5 @@ /* - * Copyright (C) 2004-2007 Internet Systems Consortium, Inc. ("ISC") + * Copyright (C) 2004-2008 Internet Systems Consortium, Inc. ("ISC") * Copyright (C) 1998-2003 Internet Software Consortium. * * Permission to use, copy, modify, and/or distribute this software for any @@ -15,7 +15,7 @@ * PERFORMANCE OF THIS SOFTWARE. */ -/* $Id: task.c,v 1.105 2007/06/18 23:47:44 tbox Exp $ */ +/* $Id: task.c,v 1.105.128.2 2008/03/27 23:46:28 tbox Exp $ */ /*! \file * \author Principal Author: Bob Halley @@ -44,8 +44,6 @@ #include "task_p.h" #endif /* ISC_PLATFORM_USETHREADS */ -#define ISC_TASK_NAMES 1 - #ifdef ISC_TASK_TRACE #define XTRACE(m) fprintf(stderr, "task %p thread %lu: %s\n", \ task, isc_thread_self(), (m)) @@ -90,10 +88,8 @@ struct isc_task { unsigned int quantum; unsigned int flags; isc_stdtime_t now; -#ifdef ISC_TASK_NAMES char name[16]; void * tag; -#endif /* Locked by task manager lock. */ LINK(isc_task_t) link; LINK(isc_task_t) ready_link; @@ -203,10 +199,8 @@ isc_task_create(isc_taskmgr_t *manager, unsigned int quantum, task->quantum = quantum; task->flags = 0; task->now = 0; -#ifdef ISC_TASK_NAMES memset(task->name, 0, sizeof(task->name)); task->tag = NULL; -#endif INIT_LINK(task, link); INIT_LINK(task, ready_link); @@ -701,17 +695,11 @@ isc_task_setname(isc_task_t *task, const char *name, void *tag) { REQUIRE(VALID_TASK(task)); -#ifdef ISC_TASK_NAMES LOCK(&task->lock); memset(task->name, 0, sizeof(task->name)); strncpy(task->name, name, sizeof(task->name) - 1); task->tag = tag; UNLOCK(&task->lock); -#else - UNUSED(name); - UNUSED(tag); -#endif - } const char * @@ -813,9 +801,9 @@ dispatch(isc_taskmgr_t *manager) { * task lock. */ while ((EMPTY(manager->ready_tasks) || - manager->exclusive_requested) && - !FINISHED(manager)) - { + manager->exclusive_requested) && + !FINISHED(manager)) + { XTHREADTRACE(isc_msgcat_get(isc_msgcat, ISC_MSGSET_GENERAL, ISC_MSG_WAIT, "wait")); @@ -1028,7 +1016,7 @@ manager_free(isc_taskmgr_t *manager) { isc_mem_t *mctx; #ifdef ISC_PLATFORM_USETHREADS - (void)isc_condition_destroy(&manager->exclusive_granted); + (void)isc_condition_destroy(&manager->exclusive_granted); (void)isc_condition_destroy(&manager->work_available); isc_mem_free(manager->mctx, manager->threads); #endif /* ISC_PLATFORM_USETHREADS */ @@ -1270,19 +1258,19 @@ isc__taskmgr_dispatch(void) { isc_result_t isc_task_beginexclusive(isc_task_t *task) { -#ifdef ISC_PLATFORM_USETHREADS +#ifdef ISC_PLATFORM_USETHREADS isc_taskmgr_t *manager = task->manager; REQUIRE(task->state == task_state_running); LOCK(&manager->lock); if (manager->exclusive_requested) { - UNLOCK(&manager->lock); + UNLOCK(&manager->lock); return (ISC_R_LOCKBUSY); } manager->exclusive_requested = ISC_TRUE; while (manager->tasks_running > 1) { WAIT(&manager->exclusive_granted, &manager->lock); } - UNLOCK(&manager->lock); + UNLOCK(&manager->lock); #else UNUSED(task); #endif @@ -1291,7 +1279,7 @@ isc_task_beginexclusive(isc_task_t *task) { void isc_task_endexclusive(isc_task_t *task) { -#ifdef ISC_PLATFORM_USETHREADS +#ifdef ISC_PLATFORM_USETHREADS isc_taskmgr_t *manager = task->manager; REQUIRE(task->state == task_state_running); LOCK(&manager->lock); diff --git a/lib/isc/unix/socket.c b/lib/isc/unix/socket.c index 01ef8a5b..aebd825f 100644 --- a/lib/isc/unix/socket.c +++ b/lib/isc/unix/socket.c @@ -15,7 +15,7 @@ * PERFORMANCE OF THIS SOFTWARE. */ -/* $Id: socket.c,v 1.275.10.3 2008/01/27 02:06:46 marka Exp $ */ +/* $Id: socket.c,v 1.275.10.4 2008/03/27 21:10:24 jinmei Exp $ */ /*! \file */ @@ -65,12 +65,6 @@ #include "socket_p.h" #endif /* ISC_PLATFORM_USETHREADS */ -/* - * Support names for sockets. - */ -#define ISC_SOCKET_NAMES 1 - - #if defined(SO_BSDCOMPAT) && defined(__linux__) #include #endif @@ -166,11 +160,8 @@ struct isc_socket { unsigned int references; int fd; int pf; - -#ifdef ISC_SOCKET_NAMES char name[16]; void * tag; -#endif ISC_LIST(isc_socketevent_t) send_list; ISC_LIST(isc_socketevent_t) recv_list; @@ -1696,10 +1687,8 @@ isc_socket_create(isc_socketmgr_t *manager, int pf, isc_sockettype_t type, } #endif /* defined(USE_CMSG) || defined(SO_RCVBUF) */ -#ifdef ISC_SOCKET_NAMES memset(sock->name, 0, sizeof(sock->name)); sock->tag = NULL; -#endif sock->references = 1; *socketp = sock; @@ -4048,17 +4037,11 @@ isc_socket_setname(isc_socket_t *socket, const char *name, void *tag) { REQUIRE(VALID_SOCKET(socket)); -#ifdef ISC_SOCKET_NAMES LOCK(&socket->lock); memset(socket->name, 0, sizeof(socket->name)); strncpy(socket->name, name, sizeof(socket->name) - 1); socket->tag = tag; UNLOCK(&socket->lock); -#else - UNUSED(name); - UNUSED(tag); -#endif - } const char * diff --git a/lib/isc/unix/time.c b/lib/isc/unix/time.c index 70fd2e18..2697d836 100644 --- a/lib/isc/unix/time.c +++ b/lib/isc/unix/time.c @@ -1,5 +1,5 @@ /* - * Copyright (C) 2004-2007 Internet Systems Consortium, Inc. ("ISC") + * Copyright (C) 2004-2008 Internet Systems Consortium, Inc. ("ISC") * Copyright (C) 1998-2001, 2003 Internet Software Consortium. * * Permission to use, copy, modify, and/or distribute this software for any @@ -15,7 +15,7 @@ * PERFORMANCE OF THIS SOFTWARE. */ -/* $Id: time.c,v 1.54 2007/06/18 23:47:48 tbox Exp $ */ +/* $Id: time.c,v 1.54.128.2 2008/02/18 23:46:30 tbox Exp $ */ /*! \file */ @@ -227,7 +227,7 @@ isc_time_nowplusinterval(isc_time_t *t, const isc_interval_t *i) { t->seconds = tv.tv_sec + i->seconds; t->nanoseconds = tv.tv_usec * NS_PER_US + i->nanoseconds; - if (t->nanoseconds > NS_PER_S) { + if (t->nanoseconds >= NS_PER_S) { t->seconds++; t->nanoseconds -= NS_PER_S; } @@ -410,7 +410,7 @@ isc_time_formattimestamp(const isc_time_t *t, char *buf, unsigned int len) { snprintf(buf + flen, len - flen, ".%03u", t->nanoseconds / 1000000); else - snprintf(buf, len, "99-Bad-9999 99:99:99.999"); + snprintf(buf, len, "99-Bad-9999 99:99:99.999"); } void diff --git a/lib/isc/win32/include/isc/platform.h b/lib/isc/win32/include/isc/platform.h index cababbf6..2354306c 100644 --- a/lib/isc/win32/include/isc/platform.h +++ b/lib/isc/win32/include/isc/platform.h @@ -1,5 +1,5 @@ /* - * Copyright (C) 2004, 2005, 2007 Internet Systems Consortium, Inc. ("ISC") + * Copyright (C) 2004, 2005, 2007, 2008 Internet Systems Consortium, Inc. ("ISC") * Copyright (C) 2001 Internet Software Consortium. * * Permission to use, copy, modify, and/or distribute this software for any @@ -15,7 +15,7 @@ * PERFORMANCE OF THIS SOFTWARE. */ -/* $Id: platform.h,v 1.14 2007/06/19 23:47:20 tbox Exp $ */ +/* $Id: platform.h,v 1.14.128.2 2008/04/02 23:46:28 tbox Exp $ */ #ifndef ISC_PLATFORM_H #define ISC_PLATFORM_H 1 @@ -34,6 +34,7 @@ #if _MSC_VER > 1200 #define ISC_PLATFORM_HAVEIN6PKTINFO #endif +#define ISC_PLATFORM_HAVESCOPEID #define ISC_PLATFORM_NEEDPORTT #undef MSG_TRUNC #define ISC_PLATFORM_NEEDNTOP @@ -44,6 +45,8 @@ #define ISC_PLATFORM_NEEDSTRSEP #define ISC_PLATFORM_NEEDSTRLCPY +#define ISC_PLATFORM_NEEDSTRLCAT +#define ISC_PLATFORM_NEEDSTRLCPY /* * Used to control how extern data is linked; needed for Win32 platforms. @@ -68,19 +71,19 @@ #ifdef LIBISC_EXPORTS #define LIBISC_EXTERNAL_DATA __declspec(dllexport) #else -#define LIBISC_EXTERNAL_DATA __declspec(dllimport) +#define LIBISC_EXTERNAL_DATA __declspec(dllimport) #endif #ifdef LIBISCCFG_EXPORTS #define LIBISCCFG_EXTERNAL_DATA __declspec(dllexport) #else -#define LIBISCCFG_EXTERNAL_DATA __declspec(dllimport) +#define LIBISCCFG_EXTERNAL_DATA __declspec(dllimport) #endif #ifdef LIBISCCC_EXPORTS #define LIBISCCC_EXTERNAL_DATA __declspec(dllexport) #else -#define LIBISCCC_EXTERNAL_DATA __declspec(dllimport) +#define LIBISCCC_EXTERNAL_DATA __declspec(dllimport) #endif #ifdef LIBDNS_EXPORTS diff --git a/lib/isc/win32/interfaceiter.c b/lib/isc/win32/interfaceiter.c index d2505beb..ed74f6c9 100644 --- a/lib/isc/win32/interfaceiter.c +++ b/lib/isc/win32/interfaceiter.c @@ -1,5 +1,5 @@ /* - * Copyright (C) 2004, 2007 Internet Systems Consortium, Inc. ("ISC") + * Copyright (C) 2004, 2007, 2008 Internet Systems Consortium, Inc. ("ISC") * Copyright (C) 1999-2001 Internet Software Consortium. * * Permission to use, copy, modify, and/or distribute this software for any @@ -15,7 +15,7 @@ * PERFORMANCE OF THIS SOFTWARE. */ -/* $Id: interfaceiter.c,v 1.10 2007/06/18 23:47:49 tbox Exp $ */ +/* $Id: interfaceiter.c,v 1.10.128.3 2008/04/18 19:47:26 each Exp $ */ /* * Note that this code will need to be revisited to support IPv6 Interfaces. @@ -62,11 +62,13 @@ struct isc_interfaceiter { int socket; INTERFACE_INFO IFData; /* Current Interface Info */ int numIF; /* Current Interface count */ - int totalIF; /* Total Number - of Interfaces */ - INTERFACE_INFO *buf; /* Buffer for WSAIoctl data. */ - unsigned int bufsize; /* Bytes allocated. */ - INTERFACE_INFO *pos; /* Current offset in IF List */ + int v4IF; /* Number of IPv4 Interfaces */ + INTERFACE_INFO *buf4; /* Buffer for WSAIoctl data. */ + unsigned int buf4size; /* Bytes allocated. */ + INTERFACE_INFO *pos4; /* Current offset in IF List */ + SOCKET_ADDRESS_LIST *buf6; + unsigned int buf6size; /* Bytes allocated. */ + unsigned int pos6; isc_interface_t current; /* Current interface data. */ isc_result_t result; /* Last result code. */ }; @@ -94,6 +96,7 @@ get_addr(unsigned int family, isc_netaddr_t *dst, struct sockaddr *src) { memcpy(&dst->type.in6, &((struct sockaddr_in6 *) src)->sin6_addr, sizeof(struct in6_addr)); + dst->zone = ((struct sockaddr_in6 *) src)->sin6_scope_id; break; default: INSIST(0); @@ -103,7 +106,7 @@ get_addr(unsigned int family, isc_netaddr_t *dst, struct sockaddr *src) { isc_result_t isc_interfaceiter_create(isc_mem_t *mctx, isc_interfaceiter_t **iterp) { - char strbuf[ISC_STRERRORSIZE]; + char strbuf[ISC_STRERRORSIZE]; isc_interfaceiter_t *iter; isc_result_t result; int error; @@ -120,7 +123,15 @@ isc_interfaceiter_create(isc_mem_t *mctx, isc_interfaceiter_t **iterp) { InitSockets(); iter->mctx = mctx; - iter->buf = NULL; + iter->buf4 = NULL; + iter->buf6 = NULL; + iter->pos4 = NULL; + iter->pos6 = 0; + iter->buf6size = 0; + iter->buf4size = 0; + iter->result = ISC_R_FAILURE; + iter->numIF = 0; + iter->v4IF = 0; /* * Create an unbound datagram socket to do the @@ -128,6 +139,8 @@ isc_interfaceiter_create(isc_mem_t *mctx, isc_interfaceiter_t **iterp) { */ if ((iter->socket = socket(AF_INET, SOCK_DGRAM, 0)) < 0) { error = WSAGetLastError(); + if (error == WSAEAFNOSUPPORT) + goto inet6_only; isc__strerror(error, strbuf, sizeof(strbuf)); UNEXPECTED_ERROR(__FILE__, __LINE__, "making interface scan socket: %s", @@ -140,17 +153,17 @@ isc_interfaceiter_create(isc_mem_t *mctx, isc_interfaceiter_t **iterp) { * Get the interface configuration, allocating more memory if * necessary. */ - iter->bufsize = IFCONF_SIZE_INITIAL*sizeof(INTERFACE_INFO); + iter->buf4size = IFCONF_SIZE_INITIAL*sizeof(INTERFACE_INFO); for (;;) { - iter->buf = isc_mem_get(mctx, iter->bufsize); - if (iter->buf == NULL) { + iter->buf4 = isc_mem_get(mctx, iter->buf4size); + if (iter->buf4 == NULL) { result = ISC_R_NOMEMORY; goto alloc_failure; } if (WSAIoctl(iter->socket, SIO_GET_INTERFACE_LIST, - 0, 0, iter->buf, iter->bufsize, + 0, 0, iter->buf4, iter->buf4size, &bytesReturned, 0, 0) == SOCKET_ERROR) { error = WSAGetLastError(); @@ -174,19 +187,19 @@ isc_interfaceiter_create(isc_mem_t *mctx, isc_interfaceiter_t **iterp) { * case and retry. */ if (bytesReturned > 0 && - (bytesReturned < iter->bufsize)) + (bytesReturned < iter->buf4size)) break; } - if (iter->bufsize >= IFCONF_SIZE_MAX*sizeof(INTERFACE_INFO)) { + if (iter->buf4size >= IFCONF_SIZE_MAX*sizeof(INTERFACE_INFO)) { UNEXPECTED_ERROR(__FILE__, __LINE__, "get interface configuration: " "maximum buffer size exceeded"); result = ISC_R_UNEXPECTED; goto ioctl_failure; } - isc_mem_put(mctx, iter->buf, iter->bufsize); + isc_mem_put(mctx, iter->buf4, iter->buf4size); - iter->bufsize += IFCONF_SIZE_INCREMENT * + iter->buf4size += IFCONF_SIZE_INCREMENT * sizeof(INTERFACE_INFO); } @@ -194,23 +207,92 @@ isc_interfaceiter_create(isc_mem_t *mctx, isc_interfaceiter_t **iterp) { * A newly created iterator has an undefined position * until isc_interfaceiter_first() is called. */ - iter->pos = NULL; - iter->result = ISC_R_FAILURE; - iter->numIF = 0; - iter->totalIF = bytesReturned/sizeof(INTERFACE_INFO); + iter->v4IF = bytesReturned/sizeof(INTERFACE_INFO); + + /* We don't need the socket any more, so close it */ + closesocket(iter->socket); + inet6_only: + /* + * Create an unbound datagram socket to do the + * SIO_ADDRESS_LIST_QUERY WSAIoctl on. + */ + if ((iter->socket = socket(AF_INET6, SOCK_DGRAM, 0)) < 0) { + error = WSAGetLastError(); + if (error == WSAEAFNOSUPPORT) + goto inet_only; + isc__strerror(error, strbuf, sizeof(strbuf)); + UNEXPECTED_ERROR(__FILE__, __LINE__, + "making interface scan socket: %s", + strbuf); + result = ISC_R_UNEXPECTED; + goto ioctl_failure; + } + + /* + * Get the interface configuration, allocating more memory if + * necessary. + */ + iter->buf6size = sizeof(SOCKET_ADDRESS_LIST) + + IFCONF_SIZE_INITIAL*sizeof(SOCKET_ADDRESS); + + for (;;) { + iter->buf6 = isc_mem_get(mctx, iter->buf6size); + if (iter->buf6 == NULL) { + result = ISC_R_NOMEMORY; + goto ioctl_failure; + } + + if (WSAIoctl(iter->socket, SIO_ADDRESS_LIST_QUERY, + 0, 0, iter->buf6, iter->buf6size, + &bytesReturned, 0, 0) == SOCKET_ERROR) + { + error = WSAGetLastError(); + if (error != WSAEFAULT && error != WSAENOBUFS) { + errno = error; + isc__strerror(error, strbuf, sizeof(strbuf)); + UNEXPECTED_ERROR(__FILE__, __LINE__, + "sio address list query: %s", + strbuf); + result = ISC_R_UNEXPECTED; + goto ioctl6_failure; + } + /* + * EINVAL. Retry with a bigger buffer. + */ + } else + break; + + if (iter->buf6size >= IFCONF_SIZE_MAX*sizeof(SOCKET_ADDRESS)) { + UNEXPECTED_ERROR(__FILE__, __LINE__, + "get interface configuration: " + "maximum buffer size exceeded"); + result = ISC_R_UNEXPECTED; + goto ioctl6_failure; + } + isc_mem_put(mctx, iter->buf6, iter->buf6size); + + iter->buf6size += IFCONF_SIZE_INCREMENT * + sizeof(SOCKET_ADDRESS); + } + closesocket(iter->socket); + + inet_only: iter->magic = IFITER_MAGIC; *iterp = iter; - /* We don't need the socket any more, so close it */ - closesocket(iter->socket); return (ISC_R_SUCCESS); + ioctl6_failure: + isc_mem_put(mctx, iter->buf6, iter->buf6size); + ioctl_failure: - isc_mem_put(mctx, iter->buf, iter->bufsize); + if (iter->buf4 != NULL) + isc_mem_put(mctx, iter->buf4, iter->buf4size); alloc_failure: - (void) closesocket(iter->socket); + if (iter->socket >= 0) + (void) closesocket(iter->socket); socket_failure: isc_mem_put(mctx, iter, sizeof(*iter)); @@ -226,7 +308,7 @@ isc_interfaceiter_create(isc_mem_t *mctx, isc_interfaceiter_t **iterp) { */ static isc_result_t -internal_current(isc_interfaceiter_t *iter, int family) { +internal_current(isc_interfaceiter_t *iter) { BOOL ifNamed = FALSE; unsigned long flags; @@ -234,9 +316,9 @@ internal_current(isc_interfaceiter_t *iter, int family) { REQUIRE(iter->numIF >= 0); memset(&iter->current, 0, sizeof(iter->current)); - iter->current.af = family; + iter->current.af = AF_INET; - get_addr(family, &iter->current.address, + get_addr(AF_INET, &iter->current.address, (struct sockaddr *)&(iter->IFData.iiAddress)); /* @@ -266,7 +348,7 @@ internal_current(isc_interfaceiter_t *iter, int family) { * If the interface is point-to-point, get the destination address. */ if ((iter->current.flags & INTERFACE_F_POINTTOPOINT) != 0) { - get_addr(family, &iter->current.dstaddress, + get_addr(AF_INET, &iter->current.dstaddress, (struct sockaddr *)&(iter->IFData.iiBroadcastAddress)); } @@ -277,15 +359,40 @@ internal_current(isc_interfaceiter_t *iter, int family) { /* * Get the network mask. */ - switch (family) { - case AF_INET: - get_addr(family, &iter->current.netmask, - (struct sockaddr *)&(iter->IFData.iiNetmask)); - break; - case AF_INET6: - break; - } + get_addr(AF_INET, &iter->current.netmask, + (struct sockaddr *)&(iter->IFData.iiNetmask)); + + return (ISC_R_SUCCESS); +} + +static isc_result_t +internal_current6(isc_interfaceiter_t *iter) { + BOOL ifNamed = FALSE; + int i; + + REQUIRE(VALID_IFITER(iter)); + REQUIRE(iter->pos6 >= 0); + REQUIRE(iter->buf6 != 0); + + memset(&iter->current, 0, sizeof(iter->current)); + iter->current.af = AF_INET6; + + get_addr(AF_INET6, &iter->current.address, + iter->buf6->Address[iter->pos6].lpSockaddr); + + /* + * Get interface flags. + */ + + iter->current.flags = INTERFACE_F_UP; + + if (ifNamed == FALSE) + sprintf(iter->current.name, + "TCP/IPv6 Interface %d", iter->pos6 + 1); + for (i = 0; i< 16; i++) + iter->current.netmask.type.in6.s6_addr[i] = 0xff; + iter->current.netmask.family = AF_INET6; return (ISC_R_SUCCESS); } @@ -298,7 +405,7 @@ internal_current(isc_interfaceiter_t *iter, int family) { */ static isc_result_t internal_next(isc_interfaceiter_t *iter) { - if (iter->numIF >= iter->totalIF) + if (iter->numIF >= iter->v4IF) return (ISC_R_NOMORE); /* @@ -307,21 +414,29 @@ internal_next(isc_interfaceiter_t *iter) { * Microsoft's implementation is peculiar for returning * the list in reverse order */ - + if (iter->numIF == 0) - iter->pos = (INTERFACE_INFO *)(iter->buf + (iter->totalIF)); + iter->pos4 = (INTERFACE_INFO *)(iter->buf4 + (iter->v4IF)); - iter->pos--; - if (&(iter->pos) < &(iter->buf)) + iter->pos4--; + if (&(iter->pos4) < &(iter->buf4)) return (ISC_R_NOMORE); memset(&(iter->IFData), 0, sizeof(INTERFACE_INFO)); - memcpy(&(iter->IFData), iter->pos, sizeof(INTERFACE_INFO)); + memcpy(&(iter->IFData), iter->pos4, sizeof(INTERFACE_INFO)); iter->numIF++; return (ISC_R_SUCCESS); } +static isc_result_t +internal_next6(isc_interfaceiter_t *iter) { + if (iter->pos6 == 0) + return (ISC_R_NOMORE); + iter->pos6--; + return (ISC_R_SUCCESS); +} + isc_result_t isc_interfaceiter_current(isc_interfaceiter_t *iter, isc_interface_t *ifdata) { @@ -332,21 +447,13 @@ isc_interfaceiter_current(isc_interfaceiter_t *iter, isc_result_t isc_interfaceiter_first(isc_interfaceiter_t *iter) { - isc_result_t result; REQUIRE(VALID_IFITER(iter)); - iter->numIF = 0; - for (;;) { - result = internal_next(iter); - if (result != ISC_R_SUCCESS) - break; - result = internal_current(iter, AF_INET); - if (result != ISC_R_IGNORE) - break; - } - iter->result = result; - return (result); + if (iter->buf6 != NULL) + iter->pos6 = iter->buf6->iAddressCount; + iter->result = ISC_R_SUCCESS; + return (isc_interfaceiter_next(iter)); } isc_result_t @@ -358,9 +465,16 @@ isc_interfaceiter_next(isc_interfaceiter_t *iter) { for (;;) { result = internal_next(iter); - if (result != ISC_R_SUCCESS) + if (result == ISC_R_NOMORE) { + result = internal_next6(iter); + if (result != ISC_R_SUCCESS) + break; + result = internal_current6(iter); + if (result != ISC_R_IGNORE) + break; + } else if (result != ISC_R_SUCCESS) break; - result = internal_current(iter,AF_INET); + result = internal_current(iter); if (result != ISC_R_IGNORE) break; } @@ -375,10 +489,12 @@ isc_interfaceiter_destroy(isc_interfaceiter_t **iterp) { iter = *iterp; REQUIRE(VALID_IFITER(iter)); - isc_mem_put(iter->mctx, iter->buf, iter->bufsize); + if (iter->buf4 != NULL) + isc_mem_put(iter->mctx, iter->buf4, iter->buf4size); + if (iter->buf6 != NULL) + isc_mem_put(iter->mctx, iter->buf6, iter->buf6size); iter->magic = 0; isc_mem_put(iter->mctx, iter, sizeof(*iter)); *iterp = NULL; } - diff --git a/lib/isc/win32/libisc.def b/lib/isc/win32/libisc.def index 22822051..dda07ebf 100644 --- a/lib/isc/win32/libisc.def +++ b/lib/isc/win32/libisc.def @@ -247,13 +247,17 @@ isc_mem_createx isc_mem_createx2 isc_mem_destroy isc_mem_detach +isc_mem_getname isc_mem_getquota +isc_mem_gettag isc_mem_inuse isc_mem_ondestroy isc_mem_setdestroycheck +isc_mem_setname isc_mem_setquota isc_mem_setwater isc_mem_stats +isc_mem_waterack isc_mempool_associatelock isc_mempool_create isc_mempool_destroy diff --git a/lib/isc/win32/net.c b/lib/isc/win32/net.c index df561a07..37246882 100644 --- a/lib/isc/win32/net.c +++ b/lib/isc/win32/net.c @@ -1,5 +1,5 @@ /* - * Copyright (C) 2004, 2005, 2007 Internet Systems Consortium, Inc. ("ISC") + * Copyright (C) 2004, 2005, 2007, 2008 Internet Systems Consortium, Inc. ("ISC") * Copyright (C) 1999-2003 Internet Software Consortium. * * Permission to use, copy, modify, and/or distribute this software for any @@ -15,7 +15,7 @@ * PERFORMANCE OF THIS SOFTWARE. */ -/* $Id: net.c,v 1.14 2007/06/18 23:47:49 tbox Exp $ */ +/* $Id: net.c,v 1.14.128.2 2008/04/02 23:46:28 tbox Exp $ */ #include @@ -51,7 +51,7 @@ try_proto(int domain) { char strbuf[ISC_STRERRORSIZE]; int errval; - s = socket(domain, SOCK_STREAM, 0); + s = socket(domain, SOCK_STREAM, IPPROTO_TCP); if (s == INVALID_SOCKET) { errval = WSAGetLastError(); switch (errval) { @@ -72,53 +72,9 @@ try_proto(int domain) { } } -#ifdef ISC_PLATFORM_HAVEIPV6 -#ifdef WANT_IPV6 -#ifdef ISC_PLATFORM_HAVEIN6PKTINFO - if (domain == PF_INET6) { - struct sockaddr_in6 sin6; - unsigned int len; - - /* - * Check to see if IPv6 is broken, as is common on Linux. - */ - len = sizeof(sin6); - if (getsockname(s, (struct sockaddr *)&sin6, (void *)&len) < 0) - { - isc_log_write(isc_lctx, ISC_LOGCATEGORY_GENERAL, - ISC_LOGMODULE_SOCKET, ISC_LOG_ERROR, - "retrieving the address of an IPv6 " - "socket from the kernel failed."); - isc_log_write(isc_lctx, ISC_LOGCATEGORY_GENERAL, - ISC_LOGMODULE_SOCKET, ISC_LOG_ERROR, - "IPv6 support is disabled."); - result = ISC_R_NOTFOUND; - } else { - if (len == sizeof(struct sockaddr_in6)) - result = ISC_R_SUCCESS; - else { - isc_log_write(isc_lctx, - ISC_LOGCATEGORY_GENERAL, - ISC_LOGMODULE_SOCKET, - ISC_LOG_ERROR, - "IPv6 structures in kernel and " - "user space do not match."); - isc_log_write(isc_lctx, - ISC_LOGCATEGORY_GENERAL, - ISC_LOGMODULE_SOCKET, - ISC_LOG_ERROR, - "IPv6 support is disabled."); - result = ISC_R_NOTFOUND; - } - } - } -#endif -#endif -#endif - closesocket(s); - return (result); + return (ISC_R_SUCCESS); } static void @@ -198,7 +154,7 @@ try_ipv6only(void) { goto close; } - close(s); + closesocket(s); /* check for UDP sockets */ s = socket(PF_INET6, SOCK_DGRAM, 0); @@ -221,12 +177,10 @@ try_ipv6only(void) { goto close; } - close(s); - ipv6only_result = ISC_R_SUCCESS; close: - close(s); + closeocket(s); return; #endif /* IPV6_V6ONLY */ } @@ -252,7 +206,7 @@ try_ipv6pktinfo(void) { /* we only use this for UDP sockets */ s = socket(PF_INET6, SOCK_DGRAM, IPPROTO_UDP); - if (s == -1) { + if (s == INVALID_SOCKET) { isc__strerror(errno, strbuf, sizeof(strbuf)); UNEXPECTED_ERROR(__FILE__, __LINE__, "socket() %s: %s", @@ -276,11 +230,10 @@ try_ipv6pktinfo(void) { goto close; } - close(s); ipv6pktinfo_result = ISC_R_SUCCESS; close: - close(s); + closesocket(s); return; } diff --git a/lib/isc/win32/socket.c b/lib/isc/win32/socket.c index 5a4d6743..d80d593d 100644 --- a/lib/isc/win32/socket.c +++ b/lib/isc/win32/socket.c @@ -1,5 +1,5 @@ /* - * Copyright (C) 2004-2007 Internet Systems Consortium, Inc. ("ISC") + * Copyright (C) 2004-2008 Internet Systems Consortium, Inc. ("ISC") * Copyright (C) 2000-2003 Internet Software Consortium. * * Permission to use, copy, modify, and/or distribute this software for any @@ -15,7 +15,7 @@ * PERFORMANCE OF THIS SOFTWARE. */ -/* $Id: socket.c,v 1.52 2007/08/28 00:39:15 marka Exp $ */ +/* $Id: socket.c,v 1.52.94.2 2008/03/27 23:46:28 tbox Exp $ */ /* This code has been rewritten to take advantage of Windows Sockets * I/O Completion Ports and Events. I/O Completion Ports is ONLY @@ -92,8 +92,6 @@ #include "errno2result.h" -#define ISC_SOCKET_NAMES 1 - /* * Define this macro to control the behavior of connection * resets on UDP sockets. See Microsoft KnowledgeBase Article Q263823 @@ -186,16 +184,16 @@ typedef isc_event_t intev_t; struct msghdr { - void *msg_name; /* optional address */ - u_int msg_namelen; /* size of address */ - WSABUF *msg_iov; /* scatter/gather array */ - u_int msg_iovlen; /* # elements in msg_iov */ - void *msg_control; /* ancillary data, see below */ - u_int msg_controllen; /* ancillary data buffer len */ - int msg_flags; /* flags on received message */ + void *msg_name; /* optional address */ + u_int msg_namelen; /* size of address */ + WSABUF *msg_iov; /* scatter/gather array */ + u_int msg_iovlen; /* # elements in msg_iov */ + void *msg_control; /* ancillary data, see below */ + u_int msg_controllen; /* ancillary data buffer len */ + int msg_flags; /* flags on received message */ int msg_totallen; /* total length of this message */ } msghdr; - + /*% * The size to raise the recieve buffer to. */ @@ -226,11 +224,8 @@ struct isc_socket { unsigned int references; SOCKET fd; int pf; - -#ifdef ISC_SOCKET_NAMES char name[16]; void * tag; -#endif ISC_LIST(isc_socketevent_t) send_list; ISC_LIST(isc_socketevent_t) recv_list; @@ -510,7 +505,7 @@ iocompletionport_init(isc_socketmgr_t *manager) { /* * Worker threads for servicing the I/O - */ + */ iocompletionport_createthreads(manager->maxIOCPThreads, manager); } @@ -665,7 +660,7 @@ socket_eventlist_add(event_change_t *evchange, sock_event_list *evlist, */ isc_boolean_t socket_eventlist_delete(event_change_t *evchange, sock_event_list *evlist, - isc_socketmgr_t *manager) + isc_socketmgr_t *manager) { int i; WSAEVENT hEvent; @@ -948,7 +943,7 @@ initialise(void) { void InitSockets(void) { RUNTIME_CHECK(isc_once_do(&initialise_once, - initialise) == ISC_R_SUCCESS); + initialise) == ISC_R_SUCCESS); if (!initialised) exit(1); } @@ -3865,17 +3860,11 @@ isc_socket_setname(isc_socket_t *socket, const char *name, void *tag) { REQUIRE(VALID_SOCKET(socket)); -#ifdef ISC_SOCKET_NAMES LOCK(&socket->lock); memset(socket->name, 0, sizeof(socket->name)); strncpy(socket->name, name, sizeof(socket->name) - 1); socket->tag = tag; UNLOCK(&socket->lock); -#else - UNUSED(name); - UNUSED(tag); -#endif - } const char * diff --git a/lib/isccfg/api b/lib/isccfg/api index e1227550..f57ff8a1 100644 --- a/lib/isccfg/api +++ b/lib/isccfg/api @@ -1,3 +1,3 @@ LIBINTERFACE = 40 -LIBREVISION = 1 +LIBREVISION = 2 LIBAGE = 0 diff --git a/lib/isccfg/namedconf.c b/lib/isccfg/namedconf.c index 4ecc6c81..16317f29 100644 --- a/lib/isccfg/namedconf.c +++ b/lib/isccfg/namedconf.c @@ -15,7 +15,7 @@ * PERFORMANCE OF THIS SOFTWARE. */ -/* $Id: namedconf.c,v 1.78.46.4 2008/01/22 00:31:00 jinmei Exp $ */ +/* $Id: namedconf.c,v 1.78.46.6 2008/04/03 02:12:22 marka Exp $ */ /*! \file */ @@ -733,67 +733,68 @@ static cfg_type_t cfg_type_lookaside = { static cfg_clausedef_t view_clauses[] = { + { "acache-cleaning-interval", &cfg_type_uint32, 0 }, + { "acache-enable", &cfg_type_boolean, 0 }, + { "additional-from-auth", &cfg_type_boolean, 0 }, + { "additional-from-cache", &cfg_type_boolean, 0 }, { "allow-query-cache", &cfg_type_bracketed_aml, 0 }, { "allow-query-cache-on", &cfg_type_bracketed_aml, 0 }, { "allow-recursion", &cfg_type_bracketed_aml, 0 }, { "allow-recursion-on", &cfg_type_bracketed_aml, 0 }, { "allow-v6-synthesis", &cfg_type_bracketed_aml, CFG_CLAUSEFLAG_OBSOLETE }, - { "sortlist", &cfg_type_bracketed_aml, 0 }, - { "topology", &cfg_type_bracketed_aml, CFG_CLAUSEFLAG_NOTIMP }, { "auth-nxdomain", &cfg_type_boolean, CFG_CLAUSEFLAG_NEWDEFAULT }, - { "minimal-responses", &cfg_type_boolean, 0 }, - { "recursion", &cfg_type_boolean, 0 }, - { "rrset-order", &cfg_type_rrsetorder, 0 }, - { "provide-ixfr", &cfg_type_boolean, 0 }, - { "request-ixfr", &cfg_type_boolean, 0 }, - { "fetch-glue", &cfg_type_boolean, CFG_CLAUSEFLAG_OBSOLETE }, - { "rfc2308-type1", &cfg_type_boolean, CFG_CLAUSEFLAG_NYI }, - { "additional-from-auth", &cfg_type_boolean, 0 }, - { "additional-from-cache", &cfg_type_boolean, 0 }, - /* - * Note that the query-source option syntax is different - * from the other -source options. - */ - { "query-source", &cfg_type_querysource4, 0 }, - { "query-source-v6", &cfg_type_querysource6, 0 }, - { "cleaning-interval", &cfg_type_uint32, 0 }, - { "min-roots", &cfg_type_uint32, CFG_CLAUSEFLAG_NOTIMP }, - { "lame-ttl", &cfg_type_uint32, 0 }, - { "max-ncache-ttl", &cfg_type_uint32, 0 }, - { "max-cache-ttl", &cfg_type_uint32, 0 }, - { "transfer-format", &cfg_type_transferformat, 0 }, - { "max-cache-size", &cfg_type_size, 0 }, - { "check-names", &cfg_type_checknames, CFG_CLAUSEFLAG_MULTI }, { "cache-file", &cfg_type_qstring, 0 }, - { "suppress-initial-notify", &cfg_type_boolean, CFG_CLAUSEFLAG_NYI }, - { "preferred-glue", &cfg_type_astring, 0 }, - { "dual-stack-servers", &cfg_type_nameportiplist, 0 }, - { "edns-udp-size", &cfg_type_uint32, 0 }, - { "max-udp-size", &cfg_type_uint32, 0 }, - { "root-delegation-only", &cfg_type_optional_exclude, 0 }, + { "check-names", &cfg_type_checknames, CFG_CLAUSEFLAG_MULTI }, + { "cleaning-interval", &cfg_type_uint32, 0 }, + { "clients-per-query", &cfg_type_uint32, 0 }, { "disable-algorithms", &cfg_type_disablealgorithm, CFG_CLAUSEFLAG_MULTI }, + { "disable-empty-zone", &cfg_type_astring, CFG_CLAUSEFLAG_MULTI }, + { "dnssec-accept-expired", &cfg_type_boolean, 0 }, { "dnssec-enable", &cfg_type_boolean, 0 }, - { "dnssec-validation", &cfg_type_boolean, 0 }, { "dnssec-lookaside", &cfg_type_lookaside, CFG_CLAUSEFLAG_MULTI }, { "dnssec-must-be-secure", &cfg_type_mustbesecure, - CFG_CLAUSEFLAG_MULTI }, - { "dnssec-accept-expired", &cfg_type_boolean, 0 }, + CFG_CLAUSEFLAG_MULTI }, + { "dnssec-validation", &cfg_type_boolean, 0 }, + { "dual-stack-servers", &cfg_type_nameportiplist, 0 }, + { "edns-udp-size", &cfg_type_uint32, 0 }, + { "empty-contact", &cfg_type_astring, 0 }, + { "empty-server", &cfg_type_astring, 0 }, + { "empty-zones-enable", &cfg_type_boolean, 0 }, + { "fetch-glue", &cfg_type_boolean, CFG_CLAUSEFLAG_OBSOLETE }, { "ixfr-from-differences", &cfg_type_ixfrdifftype, 0 }, - { "acache-enable", &cfg_type_boolean, 0 }, - { "acache-cleaning-interval", &cfg_type_uint32, 0 }, + { "lame-ttl", &cfg_type_uint32, 0 }, { "max-acache-size", &cfg_type_sizenodefault, 0 }, - { "clients-per-query", &cfg_type_uint32, 0 }, + { "max-cache-size", &cfg_type_size, 0 }, + { "max-cache-ttl", &cfg_type_uint32, 0 }, { "max-clients-per-query", &cfg_type_uint32, 0 }, - { "empty-server", &cfg_type_astring, 0 }, - { "empty-contact", &cfg_type_astring, 0 }, - { "empty-zones-enable", &cfg_type_boolean, 0 }, - { "disable-empty-zone", &cfg_type_astring, CFG_CLAUSEFLAG_MULTI }, - { "zero-no-soa-ttl-cache", &cfg_type_boolean, 0 }, - { "use-queryport-pool", &cfg_type_boolean, 0 }, + { "max-ncache-ttl", &cfg_type_uint32, 0 }, + { "max-udp-size", &cfg_type_uint32, 0 }, + { "min-roots", &cfg_type_uint32, CFG_CLAUSEFLAG_NOTIMP }, + { "minimal-responses", &cfg_type_boolean, 0 }, + { "preferred-glue", &cfg_type_astring, 0 }, + { "provide-ixfr", &cfg_type_boolean, 0 }, + /* + * Note that the query-source option syntax is different + * from the other -source options. + */ + { "query-source", &cfg_type_querysource4, 0 }, + { "query-source-v6", &cfg_type_querysource6, 0 }, { "queryport-pool-ports", &cfg_type_uint32, 0 }, { "queryport-pool-updateinterval", &cfg_type_uint32, 0 }, + { "recursion", &cfg_type_boolean, 0 }, + { "request-ixfr", &cfg_type_boolean, 0 }, + { "request-nsid", &cfg_type_boolean, 0 }, + { "rfc2308-type1", &cfg_type_boolean, CFG_CLAUSEFLAG_NYI }, + { "root-delegation-only", &cfg_type_optional_exclude, 0 }, + { "rrset-order", &cfg_type_rrsetorder, 0 }, + { "sortlist", &cfg_type_bracketed_aml, 0 }, + { "suppress-initial-notify", &cfg_type_boolean, CFG_CLAUSEFLAG_NYI }, + { "topology", &cfg_type_bracketed_aml, CFG_CLAUSEFLAG_NOTIMP }, + { "transfer-format", &cfg_type_transferformat, 0 }, + { "use-queryport-pool", &cfg_type_boolean, 0 }, + { "zero-no-soa-ttl-cache", &cfg_type_boolean, 0 }, { NULL, NULL, 0 } }; @@ -1760,6 +1761,7 @@ static isc_result_t parse_logversions(cfg_parser_t *pctx, const cfg_type_t *type, cfg_obj_t **ret) { return (parse_enum_or_other(pctx, type, &cfg_type_uint32, ret)); } + static cfg_type_t cfg_type_logversions = { "logversions", parse_logversions, cfg_print_ustring, cfg_doc_terminal, &cfg_rep_string, logversions_enums @@ -1833,8 +1835,19 @@ print_logfile(cfg_printer_t *pctx, const cfg_obj_t *obj) { } } + +static void +doc_logfile(cfg_printer_t *pctx, const cfg_type_t *type) { + UNUSED(type); + cfg_print_cstr(pctx, ""); + cfg_print_chars(pctx, " ", 1); + cfg_print_cstr(pctx, "[ versions ( \"unlimited\" | ) ]"); + cfg_print_chars(pctx, " ", 1); + cfg_print_cstr(pctx, "[ size ]"); +} + static cfg_type_t cfg_type_logfile = { - "log_file", parse_logfile, print_logfile, cfg_doc_terminal, + "log_file", parse_logfile, print_logfile, doc_logfile, &cfg_rep_tuple, logfile_fields }; @@ -1865,8 +1878,8 @@ static cfg_type_t cfg_type_lwres_view = { }; static cfg_type_t cfg_type_lwres_searchlist = { - "lwres_searchlist", cfg_parse_bracketed_list, cfg_print_bracketed_list, cfg_doc_bracketed_list, - &cfg_rep_list, &cfg_type_astring }; + "lwres_searchlist", cfg_parse_bracketed_list, cfg_print_bracketed_list, + cfg_doc_bracketed_list, &cfg_rep_list, &cfg_type_astring }; static cfg_clausedef_t lwres_clauses[] = { @@ -1985,15 +1998,15 @@ doc_sockaddrnameport(cfg_printer_t *pctx, const cfg_type_t *type) { cfg_print_chars(pctx, "( ", 2); cfg_print_cstr(pctx, ""); cfg_print_chars(pctx, " ", 1); - cfg_print_cstr(pctx, "[port ]"); + cfg_print_cstr(pctx, "[ port ]"); cfg_print_chars(pctx, " | ", 3); cfg_print_cstr(pctx, ""); cfg_print_chars(pctx, " ", 1); - cfg_print_cstr(pctx, "[port ]"); + cfg_print_cstr(pctx, "[ port ]"); cfg_print_chars(pctx, " | ", 3); cfg_print_cstr(pctx, ""); cfg_print_chars(pctx, " ", 1); - cfg_print_cstr(pctx, "[port ]"); + cfg_print_cstr(pctx, "[ port ]"); cfg_print_chars(pctx, " )", 2); } @@ -2071,11 +2084,11 @@ doc_masterselement(cfg_printer_t *pctx, const cfg_type_t *type) { cfg_print_chars(pctx, " | ", 3); cfg_print_cstr(pctx, ""); cfg_print_chars(pctx, " ", 1); - cfg_print_cstr(pctx, "[port ]"); + cfg_print_cstr(pctx, "[ port ]"); cfg_print_chars(pctx, " | ", 3); cfg_print_cstr(pctx, ""); cfg_print_chars(pctx, " ", 1); - cfg_print_cstr(pctx, "[port ]"); + cfg_print_cstr(pctx, "[ port ]"); cfg_print_chars(pctx, " )", 2); } diff --git a/make/rules.in b/make/rules.in index 01f391af..6ffea9b3 100644 --- a/make/rules.in +++ b/make/rules.in @@ -1,4 +1,4 @@ -# Copyright (C) 2004-2007 Internet Systems Consortium, Inc. ("ISC") +# Copyright (C) 2004-2008 Internet Systems Consortium, Inc. ("ISC") # Copyright (C) 1998-2003 Internet Software Consortium. # # Permission to use, copy, modify, and/or distribute this software for any @@ -13,7 +13,7 @@ # OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR # PERFORMANCE OF THIS SOFTWARE. -# $Id: rules.in,v 1.62 2007/06/18 23:47:57 tbox Exp $ +# $Id: rules.in,v 1.62.128.2 2008/02/18 23:46:30 tbox Exp $ ### ### Common Makefile rules for BIND 9. @@ -104,7 +104,7 @@ STD_CWARNINGS = @STD_CWARNINGS@ BUILD_CC = @BUILD_CC@ BUILD_CFLAGS = @BUILD_CFLAGS@ BUILD_CPPFLAGS = @BUILD_CPPFLAGS@ -BUILD_LDFAGS = @BUILD_LDFAGS@ +BUILD_LDFLAGS = @BUILD_LDFLAGS@ BUILD_LIBS = @BUILD_LIBS@ .SUFFIXES: diff --git a/version b/version index 62319749..4bf2e757 100644 --- a/version +++ b/version @@ -1,4 +1,4 @@ -# $Id: version,v 1.39.18.1 2008/01/22 23:43:56 each Exp $ +# $Id: version,v 1.39.18.3 2008/05/06 01:47:41 each Exp $ # # This file must follow /bin/sh rules. It is imported directly via # configure. @@ -6,5 +6,5 @@ MAJORVER=9 MINORVER=5 PATCHVER=0 -RELEASETYPE=b -RELEASEVER=2 +RELEASETYPE=rc +RELEASEVER=1 -- cgit v1.2.3