diff options
author | Doug Barton <dougb@FreeBSD.org> | 2008-07-12 08:28:36 +0000 |
---|---|---|
committer | Doug Barton <dougb@FreeBSD.org> | 2008-07-12 08:28:36 +0000 |
commit | 218ea97b9e01d8e16190789f89493723232ae1f0 (patch) | |
tree | 6b71f5fa714ae5d1b0e548b08fe2025e1c5439ad | |
parent | cba78608de638f8cc6d1d48a2b3072e82386b70d (diff) |
Vendor import of BIND 9.3.5-P1vendor/bind9/9.3.5-P1
Notes
Notes:
svn path=/vendor/bind9/dist-9.3/; revision=180473
svn path=/vendor/bind9/9.3.5-P1/; revision=180474; tag=vendor/bind9/9.3.5-P1
-rw-r--r-- | CHANGES | 5 | ||||
-rw-r--r-- | bin/named/client.c | 10 | ||||
-rw-r--r-- | bin/named/server.c | 34 | ||||
-rw-r--r-- | doc/arm/Bv9ARM-book.xml | 12 | ||||
-rw-r--r-- | doc/arm/Bv9ARM.ch06.html | 12 | ||||
-rw-r--r-- | doc/arm/Bv9ARM.pdf | 1700 | ||||
-rw-r--r-- | lib/dns/api | 6 | ||||
-rw-r--r-- | lib/dns/dispatch.c | 707 | ||||
-rw-r--r-- | lib/dns/include/dns/dispatch.h | 13 | ||||
-rw-r--r-- | lib/dns/resolver.c | 43 | ||||
-rw-r--r-- | version | 6 |
11 files changed, 1176 insertions, 1372 deletions
@@ -1,3 +1,8 @@ + --- 9.3.5-P1 released --- + +2375. [security] Fully randomize UDP query ports to improve + forgery resilience. [RT #17949] + --- 9.3.5 released --- --- 9.3.5rc2 released --- diff --git a/bin/named/client.c b/bin/named/client.c index 6d4cc91a4e4c..3215c6e63732 100644 --- a/bin/named/client.c +++ b/bin/named/client.c @@ -15,7 +15,7 @@ * PERFORMANCE OF THIS SOFTWARE. */ -/* $Id: client.c,v 1.176.2.13.4.38 2007/08/28 07:19:08 tbox Exp $ */ +/* $Id: client.c,v 1.176.2.13.4.38.4.1 2008/05/22 21:11:13 each Exp $ */ #include <config.h> @@ -1349,14 +1349,6 @@ client_request(isc_task_t *task, isc_event_t *event) { } /* - * Hash the incoming request here as it is after - * dns_dispatch_importrecv(). - */ - dns_dispatch_hash(&client->now, sizeof(client->now)); - dns_dispatch_hash(isc_buffer_base(buffer), - isc_buffer_usedlength(buffer)); - - /* * It's a request. Parse it. */ result = dns_message_parse(client->message, buffer, 0); diff --git a/bin/named/server.c b/bin/named/server.c index a01e5e79cfe3..c705af0ddcb1 100644 --- a/bin/named/server.c +++ b/bin/named/server.c @@ -15,7 +15,7 @@ * PERFORMANCE OF THIS SOFTWARE. */ -/* $Id: server.c,v 1.339.2.15.2.78 2008/01/17 23:45:27 tbox Exp $ */ +/* $Id: server.c,v 1.339.2.15.2.78.4.1 2008/05/22 21:11:14 each Exp $ */ #include <config.h> @@ -485,6 +485,14 @@ get_view_querysource_dispatch(const cfg_obj_t **maps, attrs |= DNS_DISPATCHATTR_IPV6; break; } + + if (isc_sockaddr_getport(&sa) != 0) { + INSIST(obj != NULL); + cfg_obj_log(obj, ns_g_lctx, ISC_LOG_INFO, + "using specific query-source port suppresses port " + "randomization and can be insecure."); + } + attrmask = 0; attrmask |= DNS_DISPATCHATTR_UDP; attrmask |= DNS_DISPATCHATTR_TCP; @@ -494,7 +502,7 @@ get_view_querysource_dispatch(const cfg_obj_t **maps, disp = NULL; result = dns_dispatch_getudp(ns_g_dispatchmgr, ns_g_socketmgr, ns_g_taskmgr, &sa, 4096, - 1000, 32768, 16411, 16433, + 1024, 32768, 16411, 16433, attrs, attrmask, &disp); if (result != ISC_R_SUCCESS) { isc_sockaddr_t any; @@ -1866,7 +1874,9 @@ scan_interfaces(ns_server_t *server, isc_boolean_t verbose) { } static isc_result_t -add_listenelt(isc_mem_t *mctx, ns_listenlist_t *list, isc_sockaddr_t *addr) { +add_listenelt(isc_mem_t *mctx, ns_listenlist_t *list, isc_sockaddr_t *addr, + isc_boolean_t wcardport_ok) +{ ns_listenelt_t *lelt = NULL; dns_acl_t *src_acl = NULL; dns_aclelement_t aelt; @@ -1876,7 +1886,8 @@ add_listenelt(isc_mem_t *mctx, ns_listenlist_t *list, isc_sockaddr_t *addr) { REQUIRE(isc_sockaddr_pf(addr) == AF_INET6); isc_sockaddr_any6(&any_sa6); - if (!isc_sockaddr_equal(&any_sa6, addr)) { + if (!isc_sockaddr_equal(&any_sa6, addr) && + (wcardport_ok || isc_sockaddr_getport(addr) != 0)) { aelt.type = dns_aclelementtype_ipprefix; aelt.negative = ISC_FALSE; aelt.u.ip_prefix.prefixlen = 128; @@ -1935,7 +1946,16 @@ adjust_interfaces(ns_server_t *server, isc_mem_t *mctx) { result = dns_dispatch_getlocaladdress(dispatch6, &addr); if (result != ISC_R_SUCCESS) goto fail; - result = add_listenelt(mctx, list, &addr); + + /* + * We always add non-wildcard address regardless of whether + * the port is 'any' (the fourth arg is TRUE): if the port is + * specific, we need to add it since it may conflict with a + * listening interface; if it's zero, we'll dynamically open + * query ports, and some of them may override an existing + * wildcard IPv6 port. + */ + result = add_listenelt(mctx, list, &addr, ISC_TRUE); if (result != ISC_R_SUCCESS) goto fail; } @@ -1965,12 +1985,12 @@ adjust_interfaces(ns_server_t *server, isc_mem_t *mctx) { continue; addrp = dns_zone_getnotifysrc6(zone); - result = add_listenelt(mctx, list, addrp); + result = add_listenelt(mctx, list, addrp, ISC_FALSE); if (result != ISC_R_SUCCESS) goto fail; addrp = dns_zone_getxfrsource6(zone); - result = add_listenelt(mctx, list, addrp); + result = add_listenelt(mctx, list, addrp, ISC_FALSE); if (result != ISC_R_SUCCESS) goto fail; } diff --git a/doc/arm/Bv9ARM-book.xml b/doc/arm/Bv9ARM-book.xml index 67f8c8973624..710cd36c1d1d 100644 --- a/doc/arm/Bv9ARM-book.xml +++ b/doc/arm/Bv9ARM-book.xml @@ -18,7 +18,7 @@ - PERFORMANCE OF THIS SOFTWARE. --> -<!-- File: $Id: Bv9ARM-book.xml,v 1.155.2.27.2.88 2008/01/18 23:45:32 tbox Exp $ --> +<!-- File: $Id: Bv9ARM-book.xml,v 1.155.2.27.2.88.2.1 2008/05/22 21:11:14 each Exp $ --> <book> <title>BIND 9 Administrator Reference Manual</title> @@ -3732,7 +3732,15 @@ IPv6, there is a separate <command>query-source-v6</command> option. If <command>address</command> is <command>*</command> (asterisk) or is omitted, a wildcard IP address (<command>INADDR_ANY</command>) will be used. If <command>port</command> is <command>*</command> or is omitted, -a random unprivileged port will be used. The <command>avoid-v4-udp-ports</command> +a random unprivileged port number is picked up and will be +used for each query. +It is generally strongly discouraged to +specify a particular port for the +<command>query-source</command> or +<command>query-source-v6</command> options; +it implicitly disables the use of randomized port numbers +and leads to insecure operation. +The <command>avoid-v4-udp-ports</command> and <command>avoid-v6-udp-ports</command> options can be used to prevent named from selecting certain ports. The defaults are:</para> <programlisting>query-source address * port *; diff --git a/doc/arm/Bv9ARM.ch06.html b/doc/arm/Bv9ARM.ch06.html index dd8d8ca33f67..d59d9d198b61 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. --> -<!-- $Id: Bv9ARM.ch06.html,v 1.56.2.12.2.54 2008/01/19 01:52:14 marka Exp $ --> +<!-- $Id: Bv9ARM.ch06.html,v 1.56.2.12.2.54.2.1 2008/05/27 22:09:04 each Exp $ --> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"> @@ -1892,7 +1892,15 @@ IPv6, there is a separate <span><strong class="command">query-source-v6</strong> If <span><strong class="command">address</strong></span> is <span><strong class="command">*</strong></span> (asterisk) or is omitted, a wildcard IP address (<span><strong class="command">INADDR_ANY</strong></span>) will be used. If <span><strong class="command">port</strong></span> is <span><strong class="command">*</strong></span> or is omitted, -a random unprivileged port will be used. The <span><strong class="command">avoid-v4-udp-ports</strong></span> +a random unprivileged port number is picked up and will be +used for each query. +It is generally strongly discouraged to +specify a particular port for the +<span><strong class="command">query-source</strong></span> or +<span><strong class="command">query-source-v6</strong></span> options; +it implicitly disables the use of randomized port numbers +and leads to insecure operation. +The <span><strong class="command">avoid-v4-udp-ports</strong></span> and <span><strong class="command">avoid-v6-udp-ports</strong></span> options can be used to prevent named from selecting certain ports. The defaults are:</p> <pre class="programlisting">query-source address * port *; diff --git a/doc/arm/Bv9ARM.pdf b/doc/arm/Bv9ARM.pdf index 7c74c3935bc0..7b599bab06e6 100644 --- a/doc/arm/Bv9ARM.pdf +++ b/doc/arm/Bv9ARM.pdf @@ -889,8 +889,8 @@ endobj /Filter /FlateDecode >> stream -xڍ=O1[IV|$P6^I큎5P!<XM^_ zI -!)'͡Rf
}1j"c$ FcD~ᤊAbg02P@&S; M}RM_zv
|_$0I˃"$ocrQ3{u>:1qQUendstream +xڍ=O1[3l(pjR{HGzBeHl?TCt$M!:P}g\MTkM4B-1L~bp6à1A_8-%B +.o^&i-N4^aޏ}s|sm[clf?]"]N0P(GY?I,ϱQA6_>:۷/kPendstream endobj 594 0 obj << /Type /Page @@ -3225,22 +3225,19 @@ endobj /ProcSet [ /PDF /Text ] >> endobj 977 0 obj << -/Length 2580 +/Length 2662 /Filter /FlateDecode >> stream -xڵY_s8ϧ=}S+S6M{٦lvnnvAZS[r-9}Rl%]zәA -kA#~ѻϯ'xvyҵWp|9>Z?q5{pN6g(fR>V`g/Q+j5@XYhv}- ,g]M^Nrz\D(mST%xIqQWDi*|^,t wluYr -N3ii84~xM8/;90ģm,چ]^q,9 -[ D7dZ;(pڕCxacTr5Չ}Oį)U}%1L$C6SA։oN; i$$FLE(H$N&.f)5d☖(ܨe(2ڎlf|lu +#r A2l -mRܵ*r -zqMVoP熷96!yUMMT^_XihO_E-a'xV1 - -x'"Gʿ!໙89(78c -,.bAjVAg@S˔4i]w|i1E8JB/[q@:\;&CHbRG)=)"w-TMt "j*#C7ñOͰ>#z54v괝<RWK1oC1M4Tgtjh<M -V/h4bRvW非)9XY6P -aɨ/]ʜ;zsZU|ubI-[OCRf/3h
LZ> -v%{f;0\[ +xڭ]۶~T]DŽI|vEL'ONK,Rwv(bAb]' &~bb
*Փ$pa&<ܻqu_|IXƓC2n̗L~q~swIç1Ļn$og~Lt>pK7w77Fz)Yvz7V+/3Z3yDBŌV*@6?^̺c32ce2@hR+ +AW' O#EE@ǖAeCCb>>!=>`J%y
:+vXbA4ψzyBs4M8Ib?lu=dZbXk5,Yj7(OTzfb}"ڽI<_bRJLm4,Mn4Oq~'d +~u@]
6Y,FY5/u`6a.gMN!i 1u#
eOi-4B_Qv) +\R4uI]O=#$3 7ǝ]{ϱU8Q2"m8JRD(1D2h*]L@>#6 [G"vO\:G.v0G^r/Mfsè<lORү\/)d)wF5BJ +z +~Po|c`"~8ӭ\z&eQ/ӳɖ#彮džBĽm(L
z3Y 0Dp )G"hhV@o+bXkrwu2tﰢ2_{aD P
4u0l,Š{Ś{YC.Uܽ-Pպ*ѣ]DW +J9pdl'[,Z,ʵXmDHP/1':}Ae>X6rE
&_4"7Y+-DZǶuAsK;J
/J
귎p"aF +U&AD{%ExsڛSL;NӊXeOg/I7D"RUYXRkXhZ~Vk*jw",^Ӗ}kᓖQ?~|E4 +BD(hh߇ l0op}a.iSI9'SKu9-amե.}]5~z0}\wѪ)kA2#wiu endobj 976 0 obj << /Type /Page @@ -3253,10 +3250,10 @@ endobj /D [976 0 R /XYZ 85.0394 794.5015 null] >> endobj 370 0 obj << -/D [976 0 R /XYZ 85.0394 419.653 null] +/D [976 0 R /XYZ 85.0394 388.7711 null] >> endobj 979 0 obj << -/D [976 0 R /XYZ 85.0394 393.5443 null] +/D [976 0 R /XYZ 85.0394 358.9876 null] >> endobj 975 0 obj << /Font << /F62 638 0 R /F43 604 0 R /F42 601 0 R /F57 628 0 R /F84 802 0 R /F86 982 0 R >> @@ -3264,30 +3261,18 @@ endobj /ProcSet [ /PDF /Text ] >> endobj 985 0 obj << -/Length 3187 +/Length 2975 /Filter /FlateDecode >> stream -xZs6_35}l/k]Rbʒג7M(Kl7L ? hI*R"sHJ\CwyVi5⛷^8R.nFcY!U(Z,a~wr%Q߽/W&*zW?\
8*ח_o2^_墀e!q6Y<9^ĉIlL/>\kp -i%K`ώE$d14u".R%FZL! -{HX!"1TE7_GOCLgZʼnJ9C<#گ⛫Zia=ђ¸~E6p -L"RXkC[{`UreH"2o -"J橫rO5E[2DtݮXFE_3žxQܼU?(R#+n BmA:`
ۿgR@
Sjsf&5`\̨Td)e߶),R>orߍ%46yGĶ\o]5Tk
Ⱦ2uT>K)'a -MֲC]/:GQkܷ 2W<@[_Ul3mP>d)PMw۪XyU270mU]P?70}Ƀ4*y,tYa
[PF>9' fSmYmͼ>
Wq̘Ӕ:˥ 3uh%ϯqXp={}U;TGlxУBA]9TAXs觍gf7dB%ƍ7|-d@ -\HzIq&,PK2p͈2E&Ѥ4)#! h<X}uT 5 K
Ȃl:.fp): -[7hkJ_ -\5p7RjRSϋ2p2V -ʒ0=.S96U]HZyno -aSzG"dž]ƀr"M2bA -\, X\3L͕a22@H9WR^A9cW2`z{% [K/ߋ`0fi%ylzzPW{L~>/ -QÌ*xG͛*h,HO!DP7H0"*0 -OFCv'czX<3kw2*7YtfR#^\yS8s?ka6㪕KIK ng^rYA\GvMPżun72aB9kִ<oTT*4y_0*#gJ:ފs0;L>(ڈ4F2 -գ] -xfҒ1(9 xb΅ҿyfEf8W`3'<A3<ŝIjIJ[|B5ϐ=I6K(Ŵav:塉]w&W; odzˠDQhЀPo?P
gXf';Ԇg"ڊ5i8 p"VC|?f9ʀLƲk>qQefVZnHPk -Gg߶4J} m[@S{P[ -|#_J@P3y溦| "gýCY1;นXcoLՂߡTׁp"t?'!˛n!MNc0Rǽ~ל'P)еw\2I -sFTiAq/,YPGoXS]'jGc{W;Fg M NOAsWp&/~_gX{&o!Ċ-B -b4`BEN?endstream +xZs6_R3~ +-] UFBz!@'Q gO̳-)|˺.MDs;Qh)ڶ%sQ)b:_E3j|7mGW: }#ngqzTNX2JE&RFr| +.aSTgРe@e6Ժ"Qa]R.DheDNoZXG?K0R}U
d
6IaxUs۪XyY07ݏ0}vKԧC}pka滂'h,,1߶j峪We)8A^Q5l
65$h-w&~vʎSYKC`d>i!Ŷ$հ}.
wjN_IQ =rUtcm90obDpfrL&rM7 chPR@'dZ-NLW@OH +ܐg}ny{L.nÖf}WȊ]H1rlaP*DcLqɂj ͻh]('I1Zݞ׃y&
PPgnjsPJ6:Tн;*y(*cX]H#weuhn&$!u] PetUSPd
Y{8آv9ڲ7k,HY$(V@R4:I$$LXkqM2DSvMCI!:>FOZ}=:dYpMB.R#p)qZJOaKDuz\gN>Rp:WNWe%}eZV#ű*} h}"*R)Ou<ʉDJ72J3<\!qVb9vϨqM2WV#G!edr:+}D>^ɀ-$lCJ(X +gW5:$|=._2.>b<c` +0τL*jmw9Y.@=XUOR.oZ7^cM7$Y`ul.8=Նt.;XeP{sTPIA&ӖTJwnIUY}dzUEP?M^uS8!9$m@{-@3//@VޔhN+=lVq=tW,,pM\xuNET8N~,&9ZȧD7 m,=%_ 18Ȁ+.U8 JдVzF$('Ú' +qt&\J5ޒEY>#y&"6"!_y6hcN #Mp.O>Bq< +ۧNB0Hendstream endobj 984 0 obj << /Type /Page @@ -3300,34 +3285,29 @@ endobj /D [984 0 R /XYZ 56.6929 794.5015 null] >> endobj 374 0 obj << -/D [984 0 R /XYZ 56.6929 645.6366 null] +/D [984 0 R /XYZ 56.6929 573.6377 null] >> endobj 741 0 obj << -/D [984 0 R /XYZ 56.6929 622.1818 null] +/D [984 0 R /XYZ 56.6929 551.8981 null] >> endobj 983 0 obj << -/Font << /F62 638 0 R /F43 604 0 R /F84 802 0 R /F42 601 0 R >> +/Font << /F62 638 0 R /F43 604 0 R /F84 802 0 R /F86 982 0 R /F42 601 0 R >> /XObject << /Im1 795 0 R >> /ProcSet [ /PDF /Text ] >> endobj 989 0 obj << -/Length 3155 +/Length 3506 /Filter /FlateDecode >> stream -xڭ]s6ݿBo'D,>sr]JmN%R).ɍg -!"b-7w6-Ǿl6 -}?e W4>U rݾ-W'#VP7` f\| -B)3puA -#V*[yݞ6uLE5BFrb3kYA ؈(XNwcd,EeD`4o*OM }9˚@Zvt%bܡYZPPgJ(Yã_c6;˭5 ٫p+? -Xd89g{|Sm>4|#>Fπ3UGxta%;$/=)K<!KeLA/. >6(J7[p\:PFS -QhIϴ4X -4C| 0@OՊDhe0
6n>=*n}" -̑Q -?7䁡#5~ʧ#80=3τ!z"ŨPLϘ0}FCA|J,ٟtgQf7ꌎyl8Ow) -1-\_´ -+I?]tJJe-B46,h6V -aV[6b!Y-~OC:ݎDIDyU~LF`j^ +xڭ]s6ݿBo'D,?sMr9wn>Pes*Hub(ٙd,%X7'^MWf\O+6xę%Y17LV\Ɯ㓻wLh65L64yڪ4ngiߋㆠ?緟;KI<W&K8OW,tXƽ͕2J4?{1i2a=r2}fkES(xEeCyluӔuD-ly{iޛzUT욈ݧ=s#rwQqb/EYTr:߷Q] jmk%n8 2絘8ϼ +!0}B3*DZs6
w{싦m@P[h'MT$̋}S,{sLua1
2ר)k.KavXC)LjNQ:o.Sa18ᙵ svF$a9vHbY,<b]4p0B(\B<a54VҲ-AѵFC-|BBĘμ yW +]%]b wyULA/. >.RmN'(~Q -0t.dEy, +.cKȺl3@"n3cZb*/M$Z
0^%ugٽ< +^mHˉ6-s5҅L7DH_>cT4KA +\a!l?|a2RWV.%H-Fr]π!7En^!LXį\=;ڂ9;,2y̤6|rՌX7X9ASBaxQA쇊 ~+L1ǟI7T9.Mp量wC^X3F2LXIe,Je,㨌eRVaVю`te<>:5>'OG +Q3b-:֭g_zv0N^h`3߱7'i!|@8r +rՕ-2鈅d]Ϳn=W`1!?(DWcʻ?o%Yendstream endobj 988 0 obj << /Type /Page @@ -3340,23 +3320,23 @@ endobj /D [988 0 R /XYZ 85.0394 794.5015 null] >> endobj 987 0 obj << -/Font << /F62 638 0 R /F42 601 0 R /F43 604 0 R /F57 628 0 R /F84 802 0 R /F86 982 0 R >> +/Font << /F62 638 0 R /F43 604 0 R /F42 601 0 R /F57 628 0 R /F84 802 0 R /F86 982 0 R >> /XObject << /Im1 795 0 R >> /ProcSet [ /PDF /Text ] >> endobj 994 0 obj << -/Length 3150 +/Length 2914 /Filter /FlateDecode >> stream -xڭZs8_Ufj.E=u۴םݶdADWYZr_ -r(yL0L͠??ㇵm`CߒRŀ)4,u^ᛦʷ`&)˹Y5zE"TeUS65OHue}On|mtwx -LR-{.`(خѲ|a@;_~fdR`er5j3" 5 5UKpo`K:L$9~88}@sG#ph: B!KCqhD?=SYU4qD8gZ4z>a-PBfN$s8֖5Q,x.85;D&#< C~(ڂ&*MĀ,|չs͚&MzZ{f[86ȱΆNfr)QȢMB&vWT\~sWl§2ivTv4cIWS=n-]ݕEh,+VTx9Ϸb}^S~ϧ=iSls -r&&eEtr{,|w#]~hihPFM2Kyhh o(_55KJ+e^ycǼe9j*K1 -Xє.e@uR",b9+8M>T1L Rv\X7Puq}WKɽebҔoG/
)ݫg*YANb ]V^tRhz܇~_zqCy2ԡb*1ZK8jU& -"V$`WLͣXBY>&kC
dVP3<Jp@6LFQL7nB+@0ŵ}k)a4~M0Ls }Hh|nv@̡b+['0-9D8z҄ i$ rY -y?H4!wm1=c!MaԻ̔QC}:@j3<⍯͠lj5B$^}tJŲKix˄/\̕F*D]2gB</9MHVOV@7= 0e=JrObCzxrf!Ow3P{1*
K>ou2pΗ|؈ip!`\<^%2;RKȊ˺+5gO˅ E?R;S -DZmx[CjTí{wuuzh;Ť6DU8E8ӿ*'ΎG) +xڥZ_s8ϧ*35E=u۴nKO{ J,4 HY崽Ng* +8#
3Fi0,6g:F={q1 ~`lHH4:2)|(?!dJ"&?Vs`J_-v
'+mQwcOp2 +|\>(Z6\XQ/,s h+bO4le.[L<)WG=߭6s":8BYcXE![l#bIg$o;hhM0ei6W<x*<pNI+C(Iv:ε}MCWtЄs'^~aXE[BD#m`Q;֬ia4=mFu6tjc?Nʖfnb^i9s.iOyUN݈]
>I{v|}8V|5-UE}SSV}EF"'qBCXÿ=z*Tg!?nmNYDĺ]N`RߍtB
}(,YsaP~4X.*U3Jny Vj?ˉ]x扨pAL9>(Ot&0@Db5_oA1&L_m .Ue-L5W^8'qT +,JpRO59#{!N%욶F}y/b2(\kW#N(S(xԟ +BXp6yh%2C +{ 6bPhTc +
^0J]~()G FI5H0&E{`
Cink=x^a<.%rFĴP?
)ëgI:+xbH^0`ㆪcCb,
TMX +Q+_ԡ':VbW/Ǵ endobj 993 0 obj << /Type /Page @@ -3364,82 +3344,82 @@ endobj /Resources 992 0 R /MediaBox [0 0 595.2756 841.8898] /Parent 991 0 R -/Annots [ 998 0 R 1000 0 R ] +/Annots [ 998 0 R ] >> endobj 998 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] -/Rect [361.118 468.8579 409.8647 480.9176] +/Rect [361.118 436.2023 409.8647 448.2619] /Subtype /Link /A << /S /GoTo /D (configuration_file_elements) >> >> endobj -1000 0 obj << -/Type /Annot -/Border[0 0 0]/H/I/C[1 0 0] -/Rect [347.1258 85.4256 404.2417 97.4853] -/Subtype /Link -/A << /S /GoTo /D (journal) >> ->> endobj 995 0 obj << /D [993 0 R /XYZ 56.6929 794.5015 null] >> endobj 378 0 obj << -/D [993 0 R /XYZ 56.6929 647.7963 null] +/D [993 0 R /XYZ 56.6929 621.8163 null] >> endobj 996 0 obj << -/D [993 0 R /XYZ 56.6929 624.4206 null] +/D [993 0 R /XYZ 56.6929 597.0941 null] >> endobj 382 0 obj << -/D [993 0 R /XYZ 56.6929 550.3829 null] +/D [993 0 R /XYZ 56.6929 519.9904 null] >> endobj 997 0 obj << -/D [993 0 R /XYZ 56.6929 524.5365 null] +/D [993 0 R /XYZ 56.6929 492.7975 null] >> endobj 386 0 obj << -/D [993 0 R /XYZ 56.6929 216.2206 null] +/D [993 0 R /XYZ 56.6929 176.8325 null] >> endobj 999 0 obj << -/D [993 0 R /XYZ 56.6929 192.8449 null] +/D [993 0 R /XYZ 56.6929 152.1104 null] >> endobj 992 0 obj << /Font << /F62 638 0 R /F43 604 0 R /F84 802 0 R /F42 601 0 R /F57 628 0 R >> /XObject << /Im1 795 0 R >> /ProcSet [ /PDF /Text ] >> endobj -1003 0 obj << -/Length 2948 +1002 0 obj << +/Length 3192 /Filter /FlateDecode >> stream -xڥZKs6WtUA3O֩zlD۬HE8~ -{+gVRhmweەv89.Bx%z-Hn~5_x$hH].˘(Z"@r{ؒx}خ=
4ht u/iBt
1Wa/ŮgZ&wMX,5(,SJx*0W!)kjG^Q8,t9חOt,uD{)j_|)ړT.5< -ԌTH` -CHж0\uy]4N(lrص! -sy^jfIKN(̡Ӈ9= -sç_b'缋_a@tqԧ42X"U6r: f|a&.XR"X|\Q,4˔9i.K(0+fj
*Q!Kmsc(@}@'<$ Y8_<` -vTsvWn -F*2zx1ԯΧ+Rn{j$u!]EX*EP9PG^֠Qr%T\BM,/';ɭ-x>Nž.*nRȀe#@L,4&+Py =!2[!+mސAC+HAYȹ0ܼ7|C)e2< !^Yυmܽ -;x杜7:z)3w)1Q81nԸ˷ b&{<# ]5OMÞMqܩT:֙8g -'~xcߦ! -db:2jcc+fRe(q/Q,8 +xڥZKs6WtUAq2dJ=ds$E*"eF$(QrR) +9X9rB+oߖo]{yly155TZH3᧲a,)JUÖN+G={"bLWcLeʓ\6z?-6Su_
ic}2Selށ-N` +oXk?-JOu`RSpnMk"Iݮ\W(ػ/42ڭj^kMs_4]W16^S+?\v[պ76]ӿܶ/"9KhMXUoI<8X9YUu݀&=gzP|LFfDt!=Nv[BHMө +1+Buŝ&$m'!tBrOkqu4R6"--u2k{p
:+;. 0ACϨKej-73:r}wK\(םl&D|.\Taa4gNd$(&$9{aT4e{舋/|u +L
hՆ4H +jB^N=./и
<xN|m Cccr8 +vjp۽b"ü
;hRE +s_K1EGw]/- MdWl@f<ΈϠNfxśJοb*niq^I߆#}Hx/ٴ=r`| ^VP}awNU1ׅ0\W~U8uf&x*S-(320{xm:7Ez+4}EuԷ-]@w;{W82xIse=n27Lv ?c\nb7Ix|ľmU_}% +iFi=2JNu76:ӍցʆI4e?CIԹ"$KUfÝؼ 47/Oje)i,J݂QŭvO*|(g_p;ů{Ƚ#Q678F;ђ8wct16lpcOJ&zc?Dn\³n:(^I><:L>z}A/N>**??).U +d*Mn9)5+Woׂ%oL%cGCO-oəS-\D{ 6ֳj|i
Lb+J$b8/S#l*EY3?7J̇W.ќendstream endobj -1002 0 obj << +1001 0 obj << /Type /Page -/Contents 1003 0 R -/Resources 1001 0 R +/Contents 1002 0 R +/Resources 1000 0 R /MediaBox [0 0 595.2756 841.8898] /Parent 991 0 R +/Annots [ 1004 0 R ] >> endobj 1004 0 obj << -/D [1002 0 R /XYZ 85.0394 794.5015 null] +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [375.4723 755.8266 432.5882 767.8862] +/Subtype /Link +/A << /S /GoTo /D (journal) >> +>> endobj +1003 0 obj << +/D [1001 0 R /XYZ 85.0394 794.5015 null] >> endobj 390 0 obj << -/D [1002 0 R /XYZ 85.0394 449.5881 null] +/D [1001 0 R /XYZ 85.0394 427.5127 null] >> endobj 1005 0 obj << -/D [1002 0 R /XYZ 85.0394 421.8763 null] +/D [1001 0 R /XYZ 85.0394 402.5515 null] >> endobj -1001 0 obj << +1000 0 obj << /Font << /F62 638 0 R /F42 601 0 R /F43 604 0 R /F57 628 0 R /F84 802 0 R >> /XObject << /Im1 795 0 R >> /ProcSet [ /PDF /Text ] @@ -5335,7 +5315,7 @@ endobj stream xte\6 tݡ000 R"t ȋ>??w^Z75 rprtP(W琅CfL9g0] -{fXE +{fXE 0a֏Oo?x= a.Ab9Y
/z{x*2#Dj,8Ey;on
Aߋ(X>.3vmsW`gϨ" rn蚗ߡRw9_ҹ_8=e4%v>oFk(?`Lٽ`4&9[~;26cL|r)Sjl( b7Vh9,IRe߷R%=
t(%LǏ)>1٥^2O %>pjÕr{2w<g-j!3cakI,A$LƋJnUmމD3 @@ -5358,7 +5338,7 @@ $OŀD t=bw6"µ?JOP2RoQo+1)wdIZV͝(e "[vQFs(F$'qL /!
Hvk։hȉ؉o?a:qcg!_Q~W1aUGmYmn%Rr90q5/E(ړ,W$Lx|奕wZ|V,Od yG
3l4\T2ZAg.7#PveŦQLO\ ĵJ(3].*,M>Bx(S|Duޡ{:ґ2G9C{ɕ<|?K@F),w? ah%ٱo^{6@-%~jwXjz1i%u3^g`d+K[De]Y?>Hj,kѸh8v_
[J֮9m=?\k>ଇ*ѳ,Y
<uZ/ZV$S#mNO5M@r0H7&7[AOƧ5pE6~d^.xT1$74jG1po3QZ:N,0Zg)QX""0BvFA)Y9(YÖS|qbN.LX_¿%%|D>W7}C#ZR$`bGοa9gS%\/hC|?sg)m}vk.b&O +uqf`a,I㯽/ݛ'P6ߢH?ٹ9mHr7:pMRY# 'WKC|-mW躖nᲶ03=j-,nebi;Hl<)L.Yڷ)wL=(L|)='-@<Nr6Eʃ3dk%(kD~(_y;fO{&*yү9ۏBTd>.<SX3p7~"럽l˴DQf -*s"}Y
;҉{Y]pݯXo} +*s"}Y
;҉{Y]pݯXo} endobj 1195 0 obj << /Type /Font @@ -5367,14 +5347,14 @@ endobj /FirstChar 67 /LastChar 85 /Widths 1348 0 R -/BaseFont /FJYMCJ+URWPalladioL-Bold-Slant_167 +/BaseFont /UCTAZU+URWPalladioL-Bold-Slant_167 /FontDescriptor 1193 0 R >> endobj 1193 0 obj << /Ascent 708 /CapHeight 672 /Descent -266 -/FontName /FJYMCJ+URWPalladioL-Bold-Slant_167 +/FontName /UCTAZU+URWPalladioL-Bold-Slant_167 /ItalicAngle -9 /StemV 123 /XHeight 471 @@ -5394,13 +5374,15 @@ endobj /Filter /FlateDecode >> stream -xRkTSWRIzX%2yj @X0<!1ܒK/74*ʲ.yRaUZb/* - -G u]|!oǧ@0nT5$>iaQ*P SjXKP*4@)00H&odupg --1:Ɓ`NߊNJ QT
Lʷ8!A0J5P)4t%S:XH$8JF(2À{*&$l6$)iZ31 M\P@!x -z -!=a=XobJ;&W\y̞|dkm~^?xOQG9os9T2
REF/P9<rY[ڃ;Y7z?uksԑ5nz59TBI*;f/ϻEW'bU\_[wn;2
9l^AH[l+g/Sn6{e<wKsJbѣU(khCp}m -uXej=?yL7nʥkM&˞DF ѿ.p% )gny_mPZ[03$T-ip]7I8ԻE]x㋎}v$8rgQЖi};^b=iq}PT6#r_Zc8v瞊~PE+|ӳ6چ+ )L<>lK+'ƍܳl%8Pqo\cE3 ?/}u'T,njO؇;fi@?VE2Ϊ(#[]h?A+n4mr"n~/}ZM%U%1U|<5cBTTzZfƝcOJ^7oWD5s2R˙2M|o|UA9/tS>'/_65nF@٪۷_wlϏu۽SJ5-+;RV^11uCeBFecibǏc4xiTvòvp4Zsne+^psN"5%*WL' ~{!KĞ5T-/_jC4Uͭq^+kNۋyS/_'Z!mzڲ&B`!k{]yyҠF
~A
ԉs8yYbݬ]jqKҵ/G#w_ZX"X͛g4+p~.OPj`N`ZF7endstream +xRkTSWRIzX%2yj b,{CnIH@TeYF<EEJ- +SiaqU5̯YsΟM1DPar X*p<-!r@VkՀB +!O`,C#i*x'I| 8@*'TS 0gZ
MLς!& F8
A)IMT[fKex&) +xMɤR$j=`%#CjZfS5Z;dh Rqt:5~+N +CV3=+!jD!B0`pV2+Hf(HPR΄p+!$1QT2RD>?S1珘4 Gt d9$NӚQ!h|z +9Dd@PXG*f1Q +Hֺlx/p5'%ǩˈO-wVZ 1> +k]
GZǵ}M.|QYP]#1FD{9|V@,|n&|]j
p삸5ZQ;/-,zr1CNͳl|yZ7' +('0Oߌendstream endobj 1166 0 obj << /Type /Font @@ -5409,14 +5391,14 @@ endobj /FirstChar 60 /LastChar 62 /Widths 1350 0 R -/BaseFont /FQSFCW+CMMI10 +/BaseFont /MAGIUQ+CMMI10 /FontDescriptor 1164 0 R >> endobj 1164 0 obj << /Ascent 694 /CapHeight 683 /Descent -194 -/FontName /FQSFCW+CMMI10 +/FontName /MAGIUQ+CMMI10 /ItalicAngle -14.04 /StemV 72 /XHeight 431 @@ -5436,7 +5418,7 @@ endobj /Length1 1608 /Length2 6751 /Length3 532 -/Length 7596 +/Length 7597 /Filter /FlateDecode >> stream @@ -5445,30 +5427,32 @@ xtuT6J Cw RRRD fgpr;`I4pNP|0P-< 3> -jgh
O 4O?90h(V(|SmC ^-- -D>?O;\IXf=$-p6\R
G hQ?XU>>rWC#9.P%լǤޘ?3C%M(w<:rə\a:]cRd#_Pxu -VJyӥ:s&bWILM)9cF>(Їv;)s,7 -i ˯m}&q>?\K>gpz te9|_hXP8 "H>I -m3&R5`/ScFoΞ<IK2f#2:=2JYn*:jloJ>q.|X-0d,SA+HNӌ3U -k8XOfLrٌmX?O.+%`N]m/( -M((7ukݝ|~'ŅKcԸ"UE, -0
${Dl5u.
lQ"1WO6i$הHV}^+۵R|W̞.lRTו^_Q1j&/peG&h
ݥNjW&t'o:ɫL8tİ4lTI/\2<*;7:Uz &mĻx`T)5-()[fUƙZHuuU4Kk!b"-8Io+K?S]m7w,x8j&j_!4|&x#o'XLr<=;)hxbeS"G}Zh#rVe%<E>-HL荒;=ׅw{fՊsk5W"X洗-KPv{ZtIz縦Vc%W>z̏R6V'$ྚO9IKXbw9
O9-q.|J5$e"hlwN"i6CN ~QZ{8S\%LܽB{혪{^
S6w -KV\Jrn.3`E'[\.E
J$ܲzK 4 m;2\uʘ&SlQKK;|cfѯlg/Mʪ:E"5_<۹Z`<D|҄-u}9.UyZBه([3x|F^>/y"ϳZ>'7q'AQ5beVYƯx Hr2'~lF4R\?sDN$e[(UQ ݞWp5E'7xD"Q]AjN?}\ۻۨX $*D\JY<LI[>悝KVb=UgLn4]>uzj핫^=s6YvM:G!U:-J_.NJ?wrJxvQI - -&fԋR/\|Ea)EԫYsUĵ*}p'8*u.gvƽ3yiwɖ4v/((Ѭg泠3Bݿ"a:E6>sOB:=.% CʿtY(ee&35n:wSkm<"xɕ -E?yx` j$d}V]`[?z_.Cvxk7V6uUerIqݔ9?=ό-{m4<¡q*q:/S+{}P~T$k#w+kŪW6LT~n=͎X.
͇UY0ՂUQn7]f%#n]Ye/SUt7M{ݞiz') n1*&RR_H߽'8QEg#bLzk#&6MvB?@#˄![>=woo&4)1L6햘nj} c2[</8͵F54Q{z_זKZE4-٥WNL7>',|3ٖQSF9N!b|XH.f0 - -ʓ_cgaJ0˛J2lbO>^>@K:[I0,)q!1?::xsICA 3&p$Y@LKT ~p -9R}wݎq}9sh@ܷͬv/7K\/$D?$ ֩NWypwD]~<
&\'vAd&429xMCpX˅ -%mK -8mx1hDfTFCl+#~R $W1\5!*n&oç)+fs(aW+iwcf;=vԷu/Mm.4%2m뷨<6Dyg,q-7E+XY٘b6t# OKS4D4UL#zVY1
WZEE._G=lU?]h^N>ъV~$FbfQD}J ¥_K"!q]Kқݕ<F }`K!/fI#34:x<92&t9Lކr] m}MkedH;Mk]e6{4O2;&&N:`X^!ؠafʚ+\lGk_@^wAir!~{Ĝwu{Us_btd%}'7Auq`1Y5䒘1ʷ,3x5<i[-mP1dmHVf+iisQ5CŁո9 [mGo÷@ƥ&<4Zo=%s`[qc Cy>AQ=C
Gͩ&:)|+)eeG쭱GGxp"
ic -N?$LvZޚ2[3ZQiq2a#k̔SwLg]|=Gd9B8TN.R}߈1A8:zձFAq|I@Xs:;Bf -AQlj8 )ayᛶ8@ܼoXNVU`7^r1vx|e@ՇI!ԪC)
V3k -Fȅ5*.5wZ~&s`pIBl\"]X\-B{2I+.<u︊@NK(pf) -,NBhM -{ԱP$^N2
;7),!Sjfaeq0`$ΘLfXcW~v\jDngn -rECo4`hQ#S2I쯈g? -TKsr&gы[9ҽX.Wދ5/_ΉWj!Y@noz"Kɍhfċ[K[#VFKis#g\Dޓ=b;шbyw TSE;r?W)zL#Wt=}r]L;tF\8
#.:$Vb"Z_? +jgh
O 4O?90h(V(|SmC ^-- +{c*>od?s
cx6YX%grGLwWpV/:I|C
}(X)QgfkbO+r՛̋m_%-#3
7G7b62L@̱:
82ԷIfVN"4 L?ժ*Nsa GP<Db=5yyGDv'>Jlad/<Z EYmGc$}]v,[3hoߜj0GIѺEQª=Sj +a?"=;Y1a\'E2_rBebPy<55J+qD*ᄑC-n]y,%ԧ$=+:<L,Jdzo}7ō z/jI}|4lfc{0Y[FyD`; ٸ.RϰH +>:Br䣠sirdxarCV +Rrd
aAf|GA;R:?+C݂.v ܯFp-mP$Еh~)cEC' $]Z)͌j(H;KDldv`͠HSJcuTfL)>9{r`'-M07BP*dg9O9)*pĹa(_O\"U#;ҿN3vl|T)D<c=-g2e3cD>:atD +| +8T>A*^3fhC9d\<Uee*4Jj/֭Yvwr"/1^xx6"QJT9o +\
״m,zi=[mIjk)<4wo1q +cy5`j8Nq#(t.[q)M
,J5Jןlr!.6(!r˦-n_}Dtr])crLG36~
D--NaG^˻Gsn.p7mB(PN ++sJnvk}%I2#|8Vu-k 3gznoo~UM^{L|<k3ū_IGH狕Y.g% ɜ^J$=TH4He^"[` +S7p%Ph9ꓔ=znTEւprw{^a}fL s;xFuf9eqmob̺{r)Vf0%nv."[e[aTq&bn2
Sdw)*ꩵW^ jx̭Pf7sT0V*}g|+Ym|+E%) +dEu)dKbƛQ/.K
sfL +O[>`QfiXWowbWX!Ý|mqXZ$[+ڗҰۥDN}fVςPSu־[jHχQt\~LwBMR0<Qv + $\)e٣8nY?tԸMz;̊\t=:'W)zy uYuYulk|1ᓶeï(Z_j Wq[%q'Ǚ?tSN?3RܶX0)~қSƩkLdAQaE^;\ٌf'3QHwB"7;b4|/Ȟ7We`WVFOt-蚕tueq8c";OU͋ҥ4~]{xw{Fr(ݪbcĨKJ,d|!} +,lGEʏEblȃ25|\6Y \$J"/lܽKIsL'Ҡ8T3*[b'fgn +':N`JZa8\k?Q^"A<0,PYeKn~A=S}lul _"EzTpum-5I4swo +ai(3(O~K),of(ɰ!R@?cz +GoJEQEANo_ux3H3I%\4r~٫4H~.ΡP]4G9lTO{RޫU7ҔȰ"ߢ|ؼS;Qܨ]bg^dcҍ`&4>/MFĊ|T3[*g7f_iu`~|²VUZ_ wy;:D+[YEa(b$&P[wc~ +V.Lu-bHovWWp.Z㫞'q&<Șhx3y{ȭx>ty5
(ήm#UxG6Iwx?쬚;q$z>wcyŎr+gd`mvߣR+kHsm}A{}ɩ\&sY t@bWdIjSTq욾}})ƁldzKbJ(߲)m +ж>BŐ#5Z%o]E`Vvҗ$ovej
6e4jk-0́n_͎2;b?5F57ʻ輧uUE0~N6?dFdeG\-]?^j~Ӗsb0࿃&owRԶBcĈD^8K)ҽ}=;,'ǔ{}!EIgd<IfҔ|0zj,v,MwӲ%.]M;wnU+0:1d"21ۅk!zklDDkFѧɄ1SOqˢ2eu-4"4a{xP9HR#|#,v2SV&m#`bJ Q+EI$8<ꇡoerc8&[U>Tfx=-ͫW&P^Y4XzhjG +I/.^v#NqJKY}{!4RN_Bo TΨ<kK*04(fHZ+Ύʾ#Ζר noTX0-kÁ3'Mqpv
[`s$֮pSLXԽ*:-ɢPÑEC]pexa3-Q:X*;bSjOh@\j->~{Y_MNA"yZŻƈ!}vwRC%fB@GQc(Za}61[Ud5{ +v +ͶD=-zݸY,S-Ӻ@6WptLZJ:]eb\*(R;13W4 +*RBwx:&ˬ3$K6/RZHN)-JZ + *ƍ98c2a]]Uram9&*F/b3fr*ݾ90%azcDzN$粿"G'[DLUf(p^R +/QəE/nJ6cL\y/Ԙ0|:'_dAeUO鹊,&7/~.Co-GnCJRX)-yύ,9pyO:fMPF#ߡPMYȁRB\o3\)pue2A0.>sE>rN7hkvCd؛RZXj[# endobj 982 0 obj << /Type /Font @@ -5477,14 +5461,14 @@ endobj /FirstChar 36 /LastChar 121 /Widths 1351 0 R -/BaseFont /TSWFRI+NimbusSanL-Bold +/BaseFont /DOHFNV+NimbusSanL-Bold /FontDescriptor 980 0 R >> endobj 980 0 obj << /Ascent 722 /CapHeight 722 /Descent -217 -/FontName /TSWFRI+NimbusSanL-Bold +/FontName /DOHFNV+NimbusSanL-Bold /ItalicAngle 0 /StemV 141 /XHeight 532 @@ -5508,7 +5492,7 @@ xzeT\ݶ%ZRC B! Aܝ` A$MW8{Ϲ\{ͽΨ(v< х"]6P~e٣ AQ -P-{@(;'OH +P-{@(;'OH R9ݝrv ӷ8@@RsC۸#Asn_ [usxvU+Oɿ=W;^ БzyC4uͩntpI^NbfOP4s @@ -5540,7 +5524,7 @@ QLYv)-Gjzgh.&$RD LspJ'+*p-rsmD_.:.WlKe +o=(nn꽎,Y|{|cpQ'c7ҬzZtgEv!CK;>] zpsBѬ&*=Ʀ(IXRw*VJlfF}ˍ.G$="_dm-neul}hEG|d#±ՌfW4Е(Yq}Gkwu^I_ry*pt7AN gN7 _։:0h"Qo',E@jĀ"p.a{g(gpXo -&+[%BYZJ4A&3/JŭL8r?.Buu뷧@uQ5tΥ"K"az$&%#yx+xS"L=#x{.^7|Na9U<F'ZBK-BE~lQTJ3DYr<TϜy5Yq88gme
ЦqsR7Udn s 'kQ#ZygU?y; +&+[%BYZJ4A&3/JŭL8r?.Buu뷧@uQ5tΥ"K"az$&%#yx+xS"L=#x{.^7|Na9U<F'ZBK-BE~lQTJ3DYr<TϜy5Yq88gme
ЦqsR7Udn s 'kQ#ZygU?y; endobj 802 0 obj << /Type /Font @@ -5549,14 +5533,14 @@ endobj /FirstChar 2 /LastChar 151 /Widths 1352 0 R -/BaseFont /XOQSPH+NimbusSanL-Regu +/BaseFont /PNUUAQ+NimbusSanL-Regu /FontDescriptor 800 0 R >> endobj 800 0 obj << /Ascent 712 /CapHeight 712 /Descent -213 -/FontName /XOQSPH+NimbusSanL-Regu +/FontName /PNUUAQ+NimbusSanL-Regu /ItalicAngle 0 /StemV 85 /XHeight 523 @@ -5576,33 +5560,30 @@ endobj /Filter /FlateDecode >> stream -xWgP붦HޅAW$$^)*Ez -"]tH"3__wnfYYYߚ aQG1"² -@df0@Dddd -114/ן
uckG#q - -pbX2}H -HMZ&TԻگ|ùHU w^~wTS~l|ms^T
2^2';,i8c;;t)t%2Iv9ޜ|qANzLbʦ9i,v*:ԜfՁ@8sffO9ݢԟ#AW%J'WN_*Tˮ̛?ΞU7V) -s'e -jT+7"O mlA2*Z 4,^>fi
i6\@e[VY -~sΩ䘤;Kfb>x|509 -y%\֯5e՛E%X؞tᐧYQuV24ehJia6[G;0}H3d6r93:`H h~%`ӵa8"NKwEw|2{Jڜ9ښ|J9mjcpM!hr'ntk>a;:|K*M/x[#< -#xr>C]KpP݅qNIOuWC2tX!+5Iv|e7C}hW"]xN2R̮%dmղU}O.Q ws 3 s}f_,[<7W(yFٽJ)ţ%|TA"c
cZR<^N畋x{gcG$(S~GB
w8ae%m3-b?Q㩗2WxosL],[Mbh@F&1=gr49|1+-`|qfH+6HM5!w|zz_L}'DLeAl2E4[>}+[K7>(`cWߔz d^ByyȔ?UG'D0|Q~^qVAA
c3&".R[qicѭ - -.h+GUMd$Y@Hx|yGV3O}>;l^Tu?U!CިoM]_D \-qXj4ʪ[Jzxd}'u mQh.G$ZI -ٮ+}`KTQhQDn@Uvj
@T|z_j.jY$]~}vVx_Ux5T{歚3(do3tAٞrw̶t/u-Ό>#]v%Qvu' -<V4a$4.x8
BSPxJQ73
)O{F^j[PߜudcŵuF ?6E6k}͏Sf)hhZίFIŁ#a,k1t*qʒBp%v2fN=hS -&e}S -Y/;8Mr,Nys<d{$ƈ
7g0\
j+Tp&{[\9"`rv_7툗xab].xEz\]S$oZzq -_mgUc\Nɷ%bsG]!e1JE"ˡȍBknT|f<\ʋ.x#ϛqsƆI)_T;ʯrؼ|9R&rYG -.lo& -AlJ&$)=W
U}IJ^U'=&7B?ޣ,|
~(q٠%_x0 -qfbG?vCo[ᡃ垴;WC#$#}ר5FeJ:K^:)F{Nm⿔M59Rq9:)1H6fѫ -+ |H5OvqÒHG`!o?1[E; Ѣ^qj8e_PDF>MXeqJ@K]~-w^$C}jkz tc??Q54[f+N؋XZ\% -(ۼ6gbNeVw.e6*6ZѴ'rp~6}XGJ }5eZ9 3&58 VGh}uj - -|K -4v_yFR@64'mwwX^ʩM<##r@*gkdU͘xOYO
F@V27t(:?ŷj}<'"0KyqWd{baS3ec%sZ$(3[䚽! \(gB:endstream +xWgP붦tw! E@z/4^B {ޑ{Q ҥIW4)>uuf&}Ups +*8FPTHDuuEk#U0- +$ܪ(EՀA@ +\!~'D!XK@c `#O+6;%rUoKE1@(
@<0bB +7[x@@$ӟ `ǴtLCN;5vQda| +D_ZlEePݰ[ω-/Wam)<V[|T<MVۦ-\31Y]zo`Upqp8h[?-1)(]3euՋmčcޞ}/,ϟs˻]#wydn\>0DEj<9M4M}VB?j
VHCHi9{_kh?>
eϩ:ý|~)P+"r>r;,}ⴎ
(8WӥؕJ,pcaeJ>U3NU,=&*?u +R~]%動`+^M8~d`VC/l<˨oSZ>#nc``Yeq*.TOo-6/R$^!8ro8&yԺmc@چu:;PX5j!%#QZ߭gIK55fQ>fc43 BۥcJ)T|!܉Ju=37H +<}I-ې^ze츍ר"SskkO2ÍM-d]9QN5Lm/0Ufr5;.*iݽ LR655ܒߠ;YIORSbƯijL.Զ@۞~'1qvCYo+M-ЎI}g`Ofpăji9I̲{6_^IVH[u3ET=ݱfH#wϓlncn⑇lf`+fkQiS>Ps{RNAy˻o[Δh!et6a7"7P&&ƞSϗ_Wlݴ +I
_ծ"i<_Hǣ˭NvVxnmhm/U쟕wo媚"T"K)ICZ5[Lʄ1VD} +^ˇ,M!7<&Ruby9+oИ9U3z82Lߚ +ƣ)wCpLX/'zFCf"Sb)_qZkwm6HE#|6̑2nR.@fDJ^xj\E$7< ݚOُ-2tH^m>zkjoR}]G| #Xe%臈ϸjYJl
*8h-jh 6OLO&&&ߥ.c]$T:s0yi dzv5$+]k_xRj5çJј/!j#zdo`YB(wƪLIz~aMHMT. +Sqqzrnh^x뒚:
:[8~sAjeN9,+TK%Tur}7pp1$/~px듏ѫVZK4:0W5hu2ownx{_QR10ԅRG"%}P%_F㩪UpY|9¦3d9TZ̏{k+֟78%5BfuS}#g6\Q_OЏx@R@*;yjNf\T- +,Y:'`Ǎx<KRy: +>Qΰ s?Y|xFֳr%Z8Ai7 +4r?Ke7bC%Qx\pX);"Ow#;9O#oRb@?=yϜƬ#-WrHر Y+_~
opGC +nTh~5KBL c%[ˍT/K+հ3>xZ!r!% +ZlS-=vˌ9$w7씅-p8u>}P\ġݹSFC58UZ:P>Tymçț>0}9;#}kTr2-UK;iS_:N}A2/"Z=Kd?"WL`:%.-s|Fܯ%SvVz:RIQ~lIֈCfnDtқ$3i/MAp r:9ґkaO" V3e\mzqHrw_ʄ:\ +&U˰hɞw2R-聕SNX_'W;RIXud"})OnVQnj*J(EhkV;6NX5+̶G0!^sD2ЩR֩_ޝ1I8E{8LYኳSvb?VV+W:l(A͋OkvD"7x&ZSf48A^S*ڇ8e,uV7TUK[ka{fѯ=k +hqPh2"e=HΚZƝ#%&RO;hǹc)g,>}1bCnD +D=oE.9 6.ğS3U,{^nIb(5KqGQ13;+ [J߹{Mo-t}<scH)a"rt|x4ns%ҏ-FP +'qFm!b̎'ZޥtcrڰpGJ!;c*(b"rEAgkp>53 + 5uVҔ]pH2VKB>J["gx%{oh罶W #ӠO*sm|W1Ri!9wjrd2'3` m 0d)8;.zu陀w>ꡟKi+A&b3*?;s
(ZL6(V!?h"xNȥ6Sb,K/|@w#6%&p +?V,Y +|6Q$2۽Cmz)e&lx
Wv_zD:QD67'n+v3J:,?R&CQΑ|=_zS0{D5Vfjۄڃg# KY/mZ>X}}O橲8#]=x1(홟3LU3dјNR^+E=J.!f'o~H0g ʉ endobj 715 0 obj << /Type /Font @@ -5611,14 +5592,14 @@ endobj /FirstChar 46 /LastChar 122 /Widths 1353 0 R -/BaseFont /KQTSTM+NimbusMonL-BoldObli +/BaseFont /NXYYRQ+NimbusMonL-BoldObli /FontDescriptor 713 0 R >> endobj 713 0 obj << /Ascent 624 /CapHeight 552 /Descent -126 -/FontName /KQTSTM+NimbusMonL-BoldObli +/FontName /NXYYRQ+NimbusMonL-BoldObli /ItalicAngle -12 /StemV 103 /XHeight 439 @@ -5639,7 +5620,7 @@ endobj >> stream xweP-<Npw0 -rX_]9 +rX_]9 ٝA`ay\@Y~K㛖%! B(ֆػ
,b*w3m$ @}){wxˋD#^2jp[qR}Lӥ%'!*=wv*,Tˆ<vI"4P} @@ -5660,7 +5641,7 @@ K^{{D,kG+L nTJ< -ű2y V&rG\@2;pq1n#LrqY"*,0 ͕, 4[ed?ib!ZO;,0*jp细KLorͥ;\YqI ihx6Ŧl}Ki`YKq>X8% De)eZ=58@H,թcS-ό^z2gt_^)q;AQ3pv8%n.$'<Se9Vˠ09D0tkl+TIpE%K_ZSwSșEUOcm##%?>MWD<RvHJB4B1CPHxBv?s> A~XiZ`+p솭Ydu:}'F4ɯ2k~erBA|t#]v=~gWFAp)jK}*34W`/兓Dz/|8/m'*~V|sfbr]هI:SgԤ-D8fvR@ab&%dY7Gˣ ~%Hj7ޛi%S<PlM5k*B&ͲD 5wS~A}f
`sfkڋIP;Сv5e ZhҮ`q^kM75 Xw4<mcb<fFd=}"~a{./ ?*A/sP죙pL]Ձ-aP;yte`{ ,I0vIBqN^ Ų*[3QV婁6*%`"oβn`Q$I]wZ*mň -U%۸T?xhKd:ңw-D6 >QuO}*ڥ&v]ɚU^M%f+SϪs]̙
4" ?'%9}q]]k8xEkeEJ4Bۜ!¿E,~TS`$螺)Xw}gmZπwe6@MS7nDAُgu{\zoiC&RVdAW"MX]2P.YY.oiUkZl!9(1dawɾ Q19Dv2@&*AOXfήfv(xbmendstream +U%۸T?xhKd:ңw-D6 >QuO}*ڥ&v]ɚU^M%f+SϪs]̙
4" ?'%9}q]]k8xEkeEJ4Bۜ!¿E,~TS`$螺)Xw}gmZπwe6@MS7nDAُgu{\zoiC&RVdAW"MX]2P.YY.oiUkZl!9(1dawɾ Q19Dv2@&*AOXfήfv(bYendstream endobj 707 0 obj << /Type /Font @@ -5669,14 +5650,14 @@ endobj /FirstChar 40 /LastChar 122 /Widths 1354 0 R -/BaseFont /PYOUGV+NimbusMonL-ReguObli +/BaseFont /ZFUKPF+NimbusMonL-ReguObli /FontDescriptor 705 0 R >> endobj 705 0 obj << /Ascent 625 /CapHeight 557 /Descent -147 -/FontName /PYOUGV+NimbusMonL-ReguObli +/FontName /ZFUKPF+NimbusMonL-ReguObli /ItalicAngle -12 /StemV 43 /XHeight 426 @@ -5698,7 +5679,7 @@ endobj stream xUT]%kቻ;NZ;;Ztyω#N8YXQ^L΅hdccd W55Ñ8 -rpaKhltpͪ(*ouX؛47qgKE]v +rpaKhltpͪ(*ouX؛47qgKE]v V^Nc_iܐ槕Qъ+PYZ#6SS7C0DX>OƶalJҊuwh7n- }[w gנۭIZR
Yu#1t,CMMWMӖ$I]}}(+X{H=s]Ԑ<b57UCt# @
KCF50 ʩtNuT4F䂙ϸ:0z2.8"@b:(o`ԿkM.Z#2GYnplwm݆f[8")->",6#VE4 T X}F;yhȱx!:<?-py>sdaEG2iħ_,:I .^!Oz(~@ʨJ ()Iɒ![7O0 (/#?tsswgWW; @@ -5770,7 +5751,7 @@ PпܠST jDG@=0V23q8@RSxQk>֘Iۻn@+7 #xA& V2u="
}RpG0|v#ij3T(3Z]6$H.2r".Q}[(~a|g7Li GzBy,<ri5<Q"@X1pJ9{5XO!D-{||Ȕ;UFrE>%.cG3*ٺr.SZi"8[oitB!NMa3_#֑3?z25Q%TbS\ `D"һK$ WP-$"ta5.i"2a Eg|O-,'Ƥp|̔7r!v0By\qXkʀX;my(~a{|ob֭x=` 罦(h
85]CUu4 ?0 -ttq?p?'Lľ\m>endstream +ttq?p?'Lľ\m6endstream endobj 638 0 obj << /Type /Font @@ -5779,14 +5760,14 @@ endobj /FirstChar 40 /LastChar 90 /Widths 1355 0 R -/BaseFont /IKWPAS+URWPalladioL-Roma-Slant_167 +/BaseFont /DCPNPJ+URWPalladioL-Roma-Slant_167 /FontDescriptor 636 0 R >> endobj 636 0 obj << /Ascent 715 /CapHeight 680 /Descent -282 -/FontName /IKWPAS+URWPalladioL-Roma-Slant_167 +/FontName /DCPNPJ+URWPalladioL-Roma-Slant_167 /ItalicAngle -9 /StemV 84 /XHeight 469 @@ -5811,7 +5792,7 @@ xePeݲ% k䀣u9lŌ tW$Ll= -F6
csbl@76ۚFhlb03ۣlM [_-F +F6
csbl@76ۚFhlb03ۣlM [_-F ݡ$6; SF9Lq#7AOyk0\)ڊP_+WX4qW%3A pǂyNјhFHQv;0p]t~xd,x6m$baaQZCE{V>$zytgC ~^Z'4v̢Q(E$9>RvJr!VQ-
]k#L)N[ Y'L Ml%:Tid @@ -5856,7 +5837,7 @@ Sŕ?Uh~ܭF̽
`2;_ۥ%%B\aPbsxۊ͏P"2'\sa --T?שּׁ~Ig.s#IR1d0sl)wC5ZDA|aK]Q)эۥf-6wnԑZeKQ!ql;`j"Fd(%Х:Kj?0GL/smt7@F.v\`_@+߭'9/Q;*~\݂"@w> h;f&tYPX(ї*R͋MI.riAۏeBapX,&LFqOi/z-JَX!|{/l2L$yrtA3MT˹#_C%3(BNfMݱd[0ien,2>Q~ElчdK X SMkh_v.ZXY~dZqz3=p*Sᣍ.rY8xzm:fkl3Vyݪ"|pAq+K5X3SK8Xgy6VOn|@a\1-$jY6IQ.!" #k@n.MV5ҞpɾT L$*jsKkU3P"ǂ\e,ѶUeATI#DRfD4;"_u+E8崕.aMeəmbB_S,5L(lO,V"eŗ~,gq8Z}/'laSqt^HNwtaES<hpFEuF,p?8*z">lf~,Ni`ύgC@2|>6.W>ؓM+
$g;GޗEڧqkERc{ZZd;_Pt/QOIg%E:)7zztZ -9NөGn,:5=x=ZQGc]q_'(DZJI'_:HjDl,q`G\@ܪXQ<i8|#O(mm87rj"Ty
Z|APq
[3Vl
Vlb.۞F
oJ +9NөGn,:5=x=ZQGc]q_'(DZJI'_:HjDl,q`G\@ܪXQ<i8|#O(mm87rj"Ty
Z|APq
[3Vl
Vlb.۞F
oJ endobj 631 0 obj << /Type /Font @@ -5865,14 +5846,14 @@ endobj /FirstChar 34 /LastChar 125 /Widths 1356 0 R -/BaseFont /IQJBXB+NimbusMonL-Bold +/BaseFont /EGSTMX+NimbusMonL-Bold /FontDescriptor 629 0 R >> endobj 629 0 obj << /Ascent 624 /CapHeight 552 /Descent -126 -/FontName /IQJBXB+NimbusMonL-Bold +/FontName /EGSTMX+NimbusMonL-Bold /ItalicAngle 0 /StemV 101 /XHeight 439 @@ -5894,7 +5875,7 @@ endobj stream xڬcf%Y'UiVڶm?i۶]iҶmۨU_sckƌ؛XAN(fgLD1rqS tW($Ml= - + tFYQv65;^:
:4[[3LLwe/mP)*K0x olX:8=ڋeMѓ !+@N;A1\=zQfBQޤ^;tG?TdOH?0;QAjο'y깅;ģɉ%v@ǯZAބw~IGNKi#`n.ϓ$(zXu3?#49B.ӄ?7kE4 ]O8vCUkSMڇ02YZuHH7R$jD"$m|/K|ZT7蝳91u@vyVhx+20%3t%7!AZ|{ڏGP
_X"'y
o)8[̗3 !, h!k<Ll8}-44env@+ZFh??jbScjFאyx㰢B;^tlYH ǭ^=Dbx:3p=c#],qGĮk HfЖ ӓ|#9$|SWmMQ$TYZQ^PLR`!T|ބllFOSgc8FRS?߰l8DNޝly4ۭLK 4|Euﴀf @@ -5966,7 +5947,7 @@ d\xy> Mb@o1%Hy.y?.rnTpZ[4ɏHy#IHg1rweB?ɾjo[V3PTc=,r?s0):K+bJ'(gc?8Ⱦ<χų氅SvU'NmiGDQ
V|Qi-(P1Ws+ArlxHԆD# ZV
.u&̺E V|KoN69]?%:GI
miyY^\㿾ޫ`Q|i<{Dsѩ6&`WJܓ +W|S#3L+uۭ`DdhVd+{"o x$\D`}c͆\Z.[ۆ]DD1DSMC:-٦hj9 [JG)DUQG^D:!5ޫ e'7dch0ݔ}twֲ6qj%y?x`*OzmDg|[wP03ijnaTrļ[D -bi}j2s oHa)ycHi6a1Rm8 8%N "@9c}1 +bi}j2s oHa)ycHi6a1Rm8 8%N "@9c}1 endobj 628 0 obj << /Type /Font @@ -5975,14 +5956,14 @@ endobj /FirstChar 33 /LastChar 125 /Widths 1357 0 R -/BaseFont /YTDMMS+NimbusMonL-Regu +/BaseFont /SIBBBC+NimbusMonL-Regu /FontDescriptor 626 0 R >> endobj 626 0 obj << /Ascent 625 /CapHeight 557 /Descent -147 -/FontName /YTDMMS+NimbusMonL-Regu +/FontName /SIBBBC+NimbusMonL-Regu /ItalicAngle 0 /StemV 41 /XHeight 426 @@ -6004,7 +5985,7 @@ endobj stream xڬzSx]eTlcv%ضضmۨmbb6ӧ}}.~5ǜcbxɉM쌀bvL\ :T@5 ,))'SmPp10Xm -(g7%Me>$oE?qF!=ZZ 1 +(g7%Me>$oE?qF!=ZZ 1 Hk \P3ة%Qsy1*3W;7 KymZh\H|_D!)?or$q0>O<X) @@ -6087,7 +6068,7 @@ lş$f_dq_CC'O_͢z7Ͱ5A`EKࣃ>҄r:䗈֒"JK4N @o_U;e?Z*OͦcZ6z* mK1:<f:V.sFNEQgu,vz!uS,#\6KѯAI)SX1~<& ;]z)ZP=Nкg)Q}>z_#*s,bo&]Ҭ{xZ\.q5]_~wX~U"bg%̗bٶ¾V3a$!L;ENL[(z
:\odnjPn{:}*PDvw*[@9 0a[r%\q]|O-Fkދ'Q.Tq)RcDV5yLRwOͳƲxuj2a dMax]&e9};qmʳ $jV_y6W3RѹcEsN1}NjǞc!\1,,\XMDʟ&~9F='KJk -i<i?lendstream +i<i?oendstream endobj 622 0 obj << /Type /Font @@ -6096,14 +6077,14 @@ endobj /FirstChar 2 /LastChar 151 /Widths 1358 0 R -/BaseFont /XDWPTM+URWPalladioL-Ital +/BaseFont /ZCVAEP+URWPalladioL-Ital /FontDescriptor 620 0 R >> endobj 620 0 obj << /Ascent 722 /CapHeight 693 /Descent -261 -/FontName /XDWPTM+URWPalladioL-Ital +/FontName /ZCVAEP+URWPalladioL-Ital /ItalicAngle -9.5 /StemV 78 /XHeight 482 @@ -6119,19 +6100,18 @@ endobj /Length1 862 /Length2 1251 /Length3 532 -/Length 1861 +/Length 1860 /Filter /FlateDecode >> stream xUkTgnJ+ŀ -2@ ,K -#la6O"X2ra -`>3l^;!ePqG#h b?5߄, B[sx`X -p!)$:"sRݫWcPzKGW -Y'u_N^VTOm"#dk^Y2N|45|m{6lйƹn퍖',M7x>rqڸ;Y1xK4
>p" -+*Q}z&Tg>ҙXoi癩e|婅k2_-O$em4v3j{h}CQ0yzőZGS^47>/Bjr< -~~|FS˵@]w{3_jythQ%Wfec$MG|W@
.ry2<xZETegd偗kE%D%iG]}xX$#M/7j#WY6oԜt5YQz -Y89=B#ps^Rg3y2̎- cdVSqmŮRCHbLS*iA[͍J=鋸?&XB1rhB=7npLYP]flBK 9v'ց\S㲎05t=ejBfwDh?+V#pM{&?ԾT=rrǏjۚ}7<𬃮Q?tg/<e}KPd7WDBDk"[Ic2e,iԞ*GUM=u)0订c<y2^0YYO8s/'IkԵJ|U)S%Z2ڇ<dsVtJk3HocgRu㾊h{Fg:O~Ӽ71pjJ}(vOP1F+L;ǮBeJ|Ėk1}Z02BMftqqBI%@6\.$^6O&>-JhguIrrr<䗣șKbVr|qO%Q8ʨ!SvsN/VEkt)m]en52tUKoiAv) +2@ &X4;*(RLP +A@0PTZ)`bY#BAn\uإ?wٙ?>3Yyl$vEDHiAD2! $0
+ߢ}>n6oHzA|d_d߫k}e@ +2 +ݮ:Pǽ:Zwy
( ?4fugwɣ8zF}XK\_k7
F1w:X~usejqqZQfG'@=~8;9L5^q8JZrEv*3@i&9gtg2ҽ=jnM|(V6)~O<r`fR<KYll _wצ]f*춛:yIYɔs0;C?E[k!dM,=Wy:U{C"pΨ<M)mPǡ=(᱙GGͼ=Wt&|FWxh?+S^ઞvM|{9gԶ4kiwAoxqy;0пk^W{{q5~yn))[Tч7F7,$m3쀒\?j<#YWV+k璃a=e姴9ui$_cI"IzU"3)cT&ON봼69` fPVI4Tǝ}vqf/&sl^3Lv6?{ݦyyώkE'+ +5+Ԛ&aQbmA_=v"6
^o(q W Vo3*WW +e1:;4XV:'?|po? endobj 612 0 obj << /Type /Font @@ -6140,14 +6120,14 @@ endobj /FirstChar 13 /LastChar 110 /Widths 1360 0 R -/BaseFont /FHPWHM+CMSY10 +/BaseFont /AKTMYL+CMSY10 /FontDescriptor 610 0 R >> endobj 610 0 obj << /Ascent 750 /CapHeight 683 /Descent -194 -/FontName /FHPWHM+CMSY10 +/FontName /AKTMYL+CMSY10 /ItalicAngle -14.035 /StemV 85 /XHeight 431 @@ -6171,7 +6151,7 @@ endobj /Filter /FlateDecode >> stream -xڬc]%\].۶m۶m۶mvm}ܹ̯G8;v>'z2@NXƉ*oeodn+E`kkf"&t0w2w2 +xڬc]%\].۶m۶m۶mvm}ܹ̯G8;v>'z2@NXƉ*oeodn+E`kkf"&t0w2w2 V^MVO Y'ߑ+1.L/}j^NI-YЛ'6M7o1m'=Uf1Kw;9<~ |#W"*>w5 zѷ_?F#hzݕ뾬 Daܔ֖x3 4v_P?2քγ;,f'+@VyɁv(މ7Gf q}-W)/^ek*(|Ɛ)dP>,UD"w("ZQDxy.Մ0.'6h¬N&2S 5@Uc7VCNxaݻTE uFBj5̘PM{o e`ͰUɃ
Lerػ#J쏗U>!+xp|m-Z @@ -6282,7 +6262,7 @@ D});\lf>z@_96cQΫ5StW eI?1kNU~^sҤO2N#,>UQ?c"x KmA|X鰭DSZM*,^X䢨xp{M ]2bh7k<.`Llv w§;wxS(N51K|RJ7䠆!+[u;r+ i^jm3O3Ҥ/v+ECD+ō23W-CR*ݤ9d<[9xui$EyZ t0=&A_39M䮩gF@1Bz*. -4:ogt2+,d@w/-kl*!|3c7lS/ - +4:ogt2+,d@w/-kl*!|3c7lS/ - endobj 604 0 obj << /Type /Font @@ -6291,14 +6271,14 @@ endobj /FirstChar 2 /LastChar 216 /Widths 1361 0 R -/BaseFont /QLANNN+URWPalladioL-Roma +/BaseFont /PFLJOO+URWPalladioL-Roma /FontDescriptor 602 0 R >> endobj 602 0 obj << /Ascent 715 /CapHeight 680 /Descent -282 -/FontName /QLANNN+URWPalladioL-Roma +/FontName /PFLJOO+URWPalladioL-Roma /ItalicAngle 0 /StemV 84 /XHeight 469 @@ -6319,7 +6299,7 @@ endobj >> stream xڬzce߳eٶm˶m۶mWuٶm6.4f>ͼ'+WʽވCFL'hbod*foBD
PURW01415 ;XۉrMM -73u2(Xd,MM +73u2(Xd,MM |I wȻ8hN3/coeNJ? gXnP>; 7ƣw#5$O>L1<16:w>pKMO˯Z)ZL~ӑm{*RƢ)0=g\"nsY{s?iEvY9Η5{r=FaBLJ|uáqx&2r&G-H."]pY "+0TjkəyF @@ -6426,7 +6406,7 @@ L%Le̿+1-*0G70o2"d\gi7sqL7!ϝ{r%tCA@ 6_mq'2~=aFМ? Z._|;l[OXJ+QGiZɏP&Yyf2<rG753#zFF⨾F4N5c6Pe ku_KL*0MHCrT>㇟x FRB_!iN%$h]ts=n<YQKgF==3sCG!Y
Wa +Y]h!{#i"4bwZX2&.l=b, ,l<ar7')͋RQ.)2.яru)R\-C" {0eh饑@sV>AG5W0!BV\6ߥ;RЭ$v(@ICMv_/# 26w{0+/6A3CX ? -0jTq]'DY
.g¨;AJҴͭ[HaA@ ?JAtI%[ح$ҍ"ɾs? +0jTq]'DY
.g¨;AJҴͭ[HaA@ ?JAtI%[ح$ҍ"ɾs? endobj 601 0 obj << /Type /Font @@ -6435,14 +6415,14 @@ endobj /FirstChar 2 /LastChar 151 /Widths 1362 0 R -/BaseFont /INPKTB+URWPalladioL-Bold +/BaseFont /WEGQVN+URWPalladioL-Bold /FontDescriptor 599 0 R >> endobj 599 0 obj << /Ascent 708 /CapHeight 672 /Descent -266 -/FontName /INPKTB+URWPalladioL-Bold +/FontName /WEGQVN+URWPalladioL-Bold /ItalicAngle 0 /StemV 123 /XHeight 471 @@ -6506,7 +6486,7 @@ endobj /Type /Pages /Count 6 /Parent 1364 0 R -/Kids [988 0 R 993 0 R 1002 0 R 1007 0 R 1015 0 R 1022 0 R] +/Kids [988 0 R 993 0 R 1001 0 R 1007 0 R 1015 0 R 1022 0 R] >> endobj 1035 0 obj << /Type /Pages @@ -7631,7 +7611,7 @@ endobj /Count -4 >> endobj 1368 0 obj << -/Names [(Access_Control_Lists) 1185 0 R (Bv9ARM.ch01) 617 0 R (Bv9ARM.ch02) 671 0 R (Bv9ARM.ch03) 686 0 R (Bv9ARM.ch04) 734 0 R (Bv9ARM.ch05) 819 0 R (Bv9ARM.ch06) 831 0 R (Bv9ARM.ch07) 1184 0 R (Bv9ARM.ch08) 1203 0 R (Bv9ARM.ch09) 1218 0 R (Configuration_File_Grammar) 855 0 R (DNSSEC) 787 0 R (Doc-Start) 598 0 R (Setting_TTLs) 1152 0 R (access_control) 970 0 R (acl) 863 0 R (address_match_lists) 836 0 R (admin_tools) 708 0 R (appendix.A) 558 0 R (bibliography) 1234 0 R (boolean_options) 740 0 R (builtin) 1031 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) 514 0 R (chapter.8) 538 0 R (cite.RFC1034) 1244 0 R (cite.RFC1035) 1246 0 R (cite.RFC1101) 1302 0 R (cite.RFC1123) 1304 0 R (cite.RFC1183) 1286 0 R (cite.RFC1464) 1322 0 R (cite.RFC1535) 1273 0 R (cite.RFC1536) 1275 0 R (cite.RFC1537) 1312 0 R (cite.RFC1591) 1306 0 R (cite.RFC1706) 1288 0 R (cite.RFC1712) 1336 0 R (cite.RFC1713) 1324 0 R (cite.RFC1794) 1326 0 R (cite.RFC1876) 1290 0 R (cite.RFC1886) 1265 0 R (cite.RFC1912) 1314 0 R (cite.RFC1982) 1277 0 R (cite.RFC1995) 1251 0 R (cite.RFC1996) 1253 0 R (cite.RFC2010) 1316 0 R (cite.RFC2052) 1292 0 R (cite.RFC2065) 1267 0 R (cite.RFC2136) 1255 0 R (cite.RFC2137) 1269 0 R (cite.RFC2163) 1294 0 R (cite.RFC2168) 1296 0 R (cite.RFC2181) 1257 0 R (cite.RFC2219) 1318 0 R (cite.RFC2230) 1298 0 R (cite.RFC2240) 1328 0 R (cite.RFC2308) 1259 0 R (cite.RFC2317) 1308 0 R (cite.RFC2345) 1330 0 R (cite.RFC2352) 1332 0 R (cite.RFC2845) 1261 0 R (cite.RFC974) 1248 0 R (cite.id2492151) 1345 0 R (configuration_file_elements) 832 0 R (controls_statement_definition_and_usage) 722 0 R (diagnostic_tools) 659 0 R (dynamic_update) 738 0 R (dynamic_update_policies) 779 0 R (dynamic_update_security) 974 0 R (historical_dns_information) 1225 0 R (id2465952) 643 0 R (id2466044) 619 0 R (id2466730) 623 0 R (id2466739) 624 0 R (id2466914) 639 0 R (id2467034) 618 0 R (id2467398) 641 0 R (id2467418) 642 0 R (id2467436) 996 0 R (id2467452) 997 0 R (id2467554) 999 0 R (id2467742) 646 0 R (id2467817) 653 0 R (id2467840) 656 0 R (id2467861) 657 0 R (id2467880) 658 0 R (id2467977) 664 0 R (id2468009) 665 0 R (id2468035) 666 0 R (id2468135) 672 0 R (id2468160) 673 0 R (id2468170) 674 0 R (id2468184) 675 0 R (id2468193) 681 0 R (id2468224) 688 0 R (id2468240) 689 0 R (id2468330) 694 0 R (id2468346) 695 0 R (id2468613) 698 0 R (id2468618) 699 0 R (id2469880) 727 0 R (id2469892) 728 0 R (id2470305) 749 0 R (id2470322) 750 0 R (id2470869) 766 0 R (id2470885) 767 0 R (id2470919) 768 0 R (id2470935) 774 0 R (id2470944) 775 0 R (id2470983) 776 0 R (id2471035) 777 0 R (id2471147) 784 0 R (id2471161) 785 0 R (id2471210) 786 0 R (id2471413) 792 0 R (id2471480) 793 0 R (id2471623) 794 0 R (id2471692) 810 0 R (id2471819) 812 0 R (id2471840) 813 0 R (id2471940) 820 0 R (id2472078) 833 0 R (id2472779) 841 0 R (id2472806) 842 0 R (id2472968) 847 0 R (id2472983) 848 0 R (id2473012) 849 0 R (id2473089) 856 0 R (id2473658) 862 0 R (id2473700) 864 0 R (id2473827) 866 0 R (id2474104) 874 0 R (id2474121) 875 0 R (id2474144) 876 0 R (id2474167) 877 0 R (id2474238) 886 0 R (id2474433) 887 0 R (id2474553) 888 0 R (id2475111) 903 0 R (id2475571) 909 0 R (id2475643) 910 0 R (id2475774) 918 0 R (id2475818) 919 0 R (id2475833) 920 0 R (id2477449) 940 0 R (id2478728) 962 0 R (id2478778) 964 0 R (id2478957) 973 0 R (id2479114) 979 0 R (id2482003) 1005 0 R (id2482477) 1019 0 R (id2482944) 1033 0 R (id2483640) 1048 0 R (id2483690) 1049 0 R (id2483774) 1055 0 R (id2484992) 1068 0 R (id2484998) 1069 0 R (id2485002) 1070 0 R (id2485236) 1077 0 R (id2485403) 1078 0 R (id2486371) 1115 0 R (id2486530) 1117 0 R (id2486548) 1118 0 R (id2486569) 1121 0 R (id2486777) 1127 0 R (id2487428) 1133 0 R (id2487537) 1135 0 R (id2487558) 1141 0 R (id2487915) 1143 0 R (id2488030) 1145 0 R (id2488049) 1146 0 R (id2488354) 1153 0 R (id2488528) 1155 0 R (id2488541) 1156 0 R (id2488633) 1158 0 R (id2488652) 1159 0 R (id2488708) 1167 0 R (id2488771) 1168 0 R (id2488802) 1169 0 R (id2488862) 1174 0 R (id2489260) 1196 0 R (id2489336) 1197 0 R (id2489394) 1198 0 R (id2489601) 1204 0 R (id2489606) 1205 0 R (id2489618) 1206 0 R (id2489635) 1207 0 R (id2489833) 1219 0 R (id2489838) 1220 0 R (id2489972) 1226 0 R (id2490352) 1228 0 R (id2490628) 1240 0 R (id2490630) 1242 0 R (id2490638) 1247 0 R (id2490730) 1243 0 R (id2490754) 1245 0 R (id2490791) 1256 0 R (id2490817) 1258 0 R (id2490842) 1250 0 R (id2490867) 1252 0 R (id2490890) 1254 0 R (id2490946) 1260 0 R (id2491006) 1263 0 R (id2491021) 1264 0 R (id2491060) 1266 0 R (id2491099) 1268 0 R (id2491127) 1271 0 R (id2491136) 1272 0 R (id2491161) 1274 0 R (id2491228) 1276 0 R (id2491265) 1284 0 R (id2491270) 1285 0 R (id2491328) 1287 0 R (id2491365) 1295 0 R (id2491400) 1289 0 R (id2491454) 1291 0 R (id2491494) 1293 0 R (id2491521) 1297 0 R (id2491547) 1300 0 R (id2491555) 1301 0 R (id2491580) 1303 0 R (id2491604) 1305 0 R (id2491625) 1307 0 R (id2491740) 1310 0 R (id2491748) 1311 0 R (id2491773) 1313 0 R (id2491800) 1315 0 R (id2491836) 1317 0 R (id2491876) 1320 0 R (id2491896) 1321 0 R (id2491918) 1323 0 R (id2491943) 1325 0 R (id2491968) 1327 0 R (id2491990) 1329 0 R (id2492036) 1331 0 R (id2492060) 1334 0 R (id2492067) 1335 0 R (id2492139) 1342 0 R (id2492149) 1344 0 R (id2492151) 1346 0 R (incremental_zone_transfers) 746 0 R (internet_drafts) 1341 0 R (ipv6addresses) 814 0 R (journal) 739 0 R (lwresd) 821 0 R (notify) 735 0 R (options) 929 0 R (page.1) 597 0 R (page.10) 693 0 R (page.11) 704 0 R (page.12) 712 0 R (page.13) 719 0 R (page.14) 726 0 R (page.15) 733 0 R (page.16) 745 0 R (page.17) 755 0 R (page.18) 760 0 R (page.19) 764 0 R (page.2) 609 0 R (page.20) 773 0 R (page.21) 783 0 R (page.22) 791 0 R (page.23) 799 0 R (page.24) 809 0 R (page.25) 818 0 R (page.26) 826 0 R (page.27) 830 0 R (page.28) 840 0 R (page.29) 846 0 R (page.3) 616 0 R (page.30) 854 0 R (page.31) 861 0 R (page.32) 871 0 R (page.33) 885 0 R (page.34) 892 0 R (page.35) 896 0 R (page.36) 902 0 R (page.37) 908 0 R (page.38) 917 0 R (page.39) 924 0 R (page.4) 635 0 R (page.40) 928 0 R (page.41) 933 0 R (page.42) 939 0 R (page.43) 945 0 R (page.44) 955 0 R (page.45) 961 0 R (page.46) 969 0 R (page.47) 978 0 R (page.48) 986 0 R (page.49) 990 0 R (page.5) 652 0 R (page.50) 995 0 R (page.51) 1004 0 R (page.52) 1009 0 R (page.53) 1017 0 R (page.54) 1024 0 R (page.55) 1030 0 R (page.56) 1040 0 R (page.57) 1045 0 R (page.58) 1054 0 R (page.59) 1059 0 R (page.6) 663 0 R (page.60) 1063 0 R (page.61) 1067 0 R (page.62) 1076 0 R (page.63) 1088 0 R (page.64) 1098 0 R (page.65) 1114 0 R (page.66) 1126 0 R (page.67) 1132 0 R (page.68) 1140 0 R (page.69) 1151 0 R (page.7) 670 0 R (page.70) 1163 0 R (page.71) 1173 0 R (page.72) 1179 0 R (page.73) 1183 0 R (page.74) 1192 0 R (page.75) 1202 0 R (page.76) 1213 0 R (page.77) 1217 0 R (page.78) 1224 0 R (page.79) 1233 0 R (page.8) 680 0 R (page.80) 1282 0 R (page.81) 1340 0 R (page.9) 685 0 R (proposed_standards) 751 0 R (rfcs) 648 0 R (rndc) 881 0 R (rrset_ordering) 700 0 R (sample_configuration) 687 0 R (section*.1) 1239 0 R (section*.10) 1333 0 R (section*.11) 1343 0 R (section*.2) 1241 0 R (section*.3) 1249 0 R (section*.4) 1262 0 R (section*.5) 1270 0 R (section*.6) 1283 0 R (section*.7) 1299 0 R (section*.8) 1309 0 R (section*.9) 1319 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) 466 0 R (section.7.1) 518 0 R (section.7.2) 522 0 R (section.7.3) 534 0 R (section.8.1) 542 0 R (section.8.2) 550 0 R (section.8.3) 554 0 R (section.A.1) 562 0 R (section.A.2) 570 0 R (section.A.3) 578 0 R (server_statement_definition_and_usage) 951 0 R (server_statement_grammar) 1041 0 R (statsfile) 935 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) 418 0 R (subsection.6.2.18) 422 0 R (subsection.6.2.19) 426 0 R (subsection.6.2.2) 282 0 R (subsection.6.2.20) 430 0 R (subsection.6.2.21) 434 0 R (subsection.6.2.22) 438 0 R (subsection.6.2.23) 442 0 R (subsection.6.2.24) 446 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) 470 0 R (subsection.6.3.2) 482 0 R (subsection.6.3.3) 486 0 R (subsection.6.3.4) 490 0 R (subsection.6.3.5) 494 0 R (subsection.6.3.6) 510 0 R (subsection.7.2.1) 526 0 R (subsection.7.2.2) 530 0 R (subsection.8.1.1) 546 0 R (subsection.A.1.1) 566 0 R (subsection.A.2.1) 574 0 R (subsection.A.3.1) 582 0 R (subsection.A.3.2) 586 0 R (subsection.A.3.3) 590 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.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) 450 0 R (subsubsection.6.2.24.2) 454 0 R (subsubsection.6.2.24.3) 458 0 R (subsubsection.6.2.24.4) 462 0 R (subsubsection.6.3.1.1) 474 0 R (subsubsection.6.3.1.2) 478 0 R (subsubsection.6.3.5.1) 498 0 R (subsubsection.6.3.5.2) 502 0 R (subsubsection.6.3.5.3) 506 0 R (table.1.1) 625 0 R (table.1.2) 640 0 R (table.3.1) 696 0 R (table.3.2) 729 0 R (table.6.1) 834 0 R (table.6.10) 1122 0 R (table.6.11) 1128 0 R (table.6.12) 1134 0 R (table.6.13) 1142 0 R (table.6.14) 1144 0 R (table.6.15) 1147 0 R (table.6.16) 1154 0 R (table.6.17) 1157 0 R (table.6.18) 1175 0 R (table.6.2) 857 0 R (table.6.3) 865 0 R (table.6.4) 904 0 R (table.6.5) 941 0 R (table.6.6) 1020 0 R (table.6.7) 1034 0 R (table.6.8) 1071 0 R (table.6.9) 1116 0 R (table.A.1) 1227 0 R (table.A.2) 1229 0 R (the_category_phrase) 898 0 R (the_sortlist_statement) 1011 0 R (topology) 1010 0 R (tsig) 765 0 R (tuning) 1025 0 R (types_of_resource_records_and_when_to_use_them) 647 0 R (view_statement_grammar) 1036 0 R (zone_statement_grammar) 965 0 R (zone_transfers) 741 0 R] +/Names [(Access_Control_Lists) 1185 0 R (Bv9ARM.ch01) 617 0 R (Bv9ARM.ch02) 671 0 R (Bv9ARM.ch03) 686 0 R (Bv9ARM.ch04) 734 0 R (Bv9ARM.ch05) 819 0 R (Bv9ARM.ch06) 831 0 R (Bv9ARM.ch07) 1184 0 R (Bv9ARM.ch08) 1203 0 R (Bv9ARM.ch09) 1218 0 R (Configuration_File_Grammar) 855 0 R (DNSSEC) 787 0 R (Doc-Start) 598 0 R (Setting_TTLs) 1152 0 R (access_control) 970 0 R (acl) 863 0 R (address_match_lists) 836 0 R (admin_tools) 708 0 R (appendix.A) 558 0 R (bibliography) 1234 0 R (boolean_options) 740 0 R (builtin) 1031 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) 514 0 R (chapter.8) 538 0 R (cite.RFC1034) 1244 0 R (cite.RFC1035) 1246 0 R (cite.RFC1101) 1302 0 R (cite.RFC1123) 1304 0 R (cite.RFC1183) 1286 0 R (cite.RFC1464) 1322 0 R (cite.RFC1535) 1273 0 R (cite.RFC1536) 1275 0 R (cite.RFC1537) 1312 0 R (cite.RFC1591) 1306 0 R (cite.RFC1706) 1288 0 R (cite.RFC1712) 1336 0 R (cite.RFC1713) 1324 0 R (cite.RFC1794) 1326 0 R (cite.RFC1876) 1290 0 R (cite.RFC1886) 1265 0 R (cite.RFC1912) 1314 0 R (cite.RFC1982) 1277 0 R (cite.RFC1995) 1251 0 R (cite.RFC1996) 1253 0 R (cite.RFC2010) 1316 0 R (cite.RFC2052) 1292 0 R (cite.RFC2065) 1267 0 R (cite.RFC2136) 1255 0 R (cite.RFC2137) 1269 0 R (cite.RFC2163) 1294 0 R (cite.RFC2168) 1296 0 R (cite.RFC2181) 1257 0 R (cite.RFC2219) 1318 0 R (cite.RFC2230) 1298 0 R (cite.RFC2240) 1328 0 R (cite.RFC2308) 1259 0 R (cite.RFC2317) 1308 0 R (cite.RFC2345) 1330 0 R (cite.RFC2352) 1332 0 R (cite.RFC2845) 1261 0 R (cite.RFC974) 1248 0 R (cite.id2492088) 1345 0 R (configuration_file_elements) 832 0 R (controls_statement_definition_and_usage) 722 0 R (diagnostic_tools) 659 0 R (dynamic_update) 738 0 R (dynamic_update_policies) 779 0 R (dynamic_update_security) 974 0 R (historical_dns_information) 1225 0 R (id2465952) 643 0 R (id2466044) 619 0 R (id2466730) 623 0 R (id2466739) 624 0 R (id2466914) 639 0 R (id2467034) 618 0 R (id2467398) 641 0 R (id2467418) 642 0 R (id2467442) 996 0 R (id2467458) 997 0 R (id2467559) 999 0 R (id2467742) 646 0 R (id2467817) 653 0 R (id2467840) 656 0 R (id2467861) 657 0 R (id2467880) 658 0 R (id2467977) 664 0 R (id2468009) 665 0 R (id2468035) 666 0 R (id2468135) 672 0 R (id2468160) 673 0 R (id2468170) 674 0 R (id2468184) 675 0 R (id2468193) 681 0 R (id2468224) 688 0 R (id2468240) 689 0 R (id2468330) 694 0 R (id2468346) 695 0 R (id2468613) 698 0 R (id2468618) 699 0 R (id2469880) 727 0 R (id2469892) 728 0 R (id2470305) 749 0 R (id2470322) 750 0 R (id2470869) 766 0 R (id2470885) 767 0 R (id2470919) 768 0 R (id2470935) 774 0 R (id2470944) 775 0 R (id2470983) 776 0 R (id2471035) 777 0 R (id2471147) 784 0 R (id2471161) 785 0 R (id2471210) 786 0 R (id2471413) 792 0 R (id2471480) 793 0 R (id2471623) 794 0 R (id2471692) 810 0 R (id2471819) 812 0 R (id2471840) 813 0 R (id2471940) 820 0 R (id2472078) 833 0 R (id2472779) 841 0 R (id2472806) 842 0 R (id2472968) 847 0 R (id2472983) 848 0 R (id2473012) 849 0 R (id2473089) 856 0 R (id2473658) 862 0 R (id2473700) 864 0 R (id2473827) 866 0 R (id2474104) 874 0 R (id2474121) 875 0 R (id2474144) 876 0 R (id2474167) 877 0 R (id2474238) 886 0 R (id2474433) 887 0 R (id2474553) 888 0 R (id2475111) 903 0 R (id2475571) 909 0 R (id2475643) 910 0 R (id2475774) 918 0 R (id2475818) 919 0 R (id2475833) 920 0 R (id2477449) 940 0 R (id2478728) 962 0 R (id2478778) 964 0 R (id2478957) 973 0 R (id2479114) 979 0 R (id2482008) 1005 0 R (id2482414) 1019 0 R (id2482881) 1033 0 R (id2483577) 1048 0 R (id2483627) 1049 0 R (id2483712) 1055 0 R (id2484997) 1068 0 R (id2485003) 1069 0 R (id2485008) 1070 0 R (id2485309) 1077 0 R (id2485477) 1078 0 R (id2486444) 1115 0 R (id2486603) 1117 0 R (id2486621) 1118 0 R (id2486643) 1121 0 R (id2486782) 1127 0 R (id2487433) 1133 0 R (id2487542) 1135 0 R (id2487563) 1141 0 R (id2487921) 1143 0 R (id2488036) 1145 0 R (id2488054) 1146 0 R (id2488359) 1153 0 R (id2488465) 1155 0 R (id2488478) 1156 0 R (id2488570) 1158 0 R (id2488589) 1159 0 R (id2488645) 1167 0 R (id2488708) 1168 0 R (id2488739) 1169 0 R (id2488800) 1174 0 R (id2489197) 1196 0 R (id2489410) 1197 0 R (id2489467) 1198 0 R (id2489606) 1204 0 R (id2489611) 1205 0 R (id2489623) 1206 0 R (id2489640) 1207 0 R (id2489702) 1219 0 R (id2489707) 1220 0 R (id2490045) 1226 0 R (id2490357) 1228 0 R (id2490633) 1240 0 R (id2490635) 1242 0 R (id2490644) 1247 0 R (id2490667) 1243 0 R (id2490691) 1245 0 R (id2490728) 1256 0 R (id2490754) 1258 0 R (id2490779) 1250 0 R (id2490804) 1252 0 R (id2490827) 1254 0 R (id2490883) 1260 0 R (id2490944) 1263 0 R (id2490958) 1264 0 R (id2490997) 1266 0 R (id2491036) 1268 0 R (id2491064) 1271 0 R (id2491073) 1272 0 R (id2491098) 1274 0 R (id2491165) 1276 0 R (id2491202) 1284 0 R (id2491207) 1285 0 R (id2491265) 1287 0 R (id2491302) 1295 0 R (id2491337) 1289 0 R (id2491392) 1291 0 R (id2491431) 1293 0 R (id2491458) 1297 0 R (id2491484) 1300 0 R (id2491492) 1301 0 R (id2491517) 1303 0 R (id2491541) 1305 0 R (id2491562) 1307 0 R (id2491677) 1310 0 R (id2491685) 1311 0 R (id2491710) 1313 0 R (id2491737) 1315 0 R (id2491773) 1317 0 R (id2491813) 1320 0 R (id2491833) 1321 0 R (id2491856) 1323 0 R (id2491880) 1325 0 R (id2491905) 1327 0 R (id2491927) 1329 0 R (id2491973) 1331 0 R (id2491997) 1334 0 R (id2492004) 1335 0 R (id2492076) 1342 0 R (id2492086) 1344 0 R (id2492088) 1346 0 R (incremental_zone_transfers) 746 0 R (internet_drafts) 1341 0 R (ipv6addresses) 814 0 R (journal) 739 0 R (lwresd) 821 0 R (notify) 735 0 R (options) 929 0 R (page.1) 597 0 R (page.10) 693 0 R (page.11) 704 0 R (page.12) 712 0 R (page.13) 719 0 R (page.14) 726 0 R (page.15) 733 0 R (page.16) 745 0 R (page.17) 755 0 R (page.18) 760 0 R (page.19) 764 0 R (page.2) 609 0 R (page.20) 773 0 R (page.21) 783 0 R (page.22) 791 0 R (page.23) 799 0 R (page.24) 809 0 R (page.25) 818 0 R (page.26) 826 0 R (page.27) 830 0 R (page.28) 840 0 R (page.29) 846 0 R (page.3) 616 0 R (page.30) 854 0 R (page.31) 861 0 R (page.32) 871 0 R (page.33) 885 0 R (page.34) 892 0 R (page.35) 896 0 R (page.36) 902 0 R (page.37) 908 0 R (page.38) 917 0 R (page.39) 924 0 R (page.4) 635 0 R (page.40) 928 0 R (page.41) 933 0 R (page.42) 939 0 R (page.43) 945 0 R (page.44) 955 0 R (page.45) 961 0 R (page.46) 969 0 R (page.47) 978 0 R (page.48) 986 0 R (page.49) 990 0 R (page.5) 652 0 R (page.50) 995 0 R (page.51) 1003 0 R (page.52) 1009 0 R (page.53) 1017 0 R (page.54) 1024 0 R (page.55) 1030 0 R (page.56) 1040 0 R (page.57) 1045 0 R (page.58) 1054 0 R (page.59) 1059 0 R (page.6) 663 0 R (page.60) 1063 0 R (page.61) 1067 0 R (page.62) 1076 0 R (page.63) 1088 0 R (page.64) 1098 0 R (page.65) 1114 0 R (page.66) 1126 0 R (page.67) 1132 0 R (page.68) 1140 0 R (page.69) 1151 0 R (page.7) 670 0 R (page.70) 1163 0 R (page.71) 1173 0 R (page.72) 1179 0 R (page.73) 1183 0 R (page.74) 1192 0 R (page.75) 1202 0 R (page.76) 1213 0 R (page.77) 1217 0 R (page.78) 1224 0 R (page.79) 1233 0 R (page.8) 680 0 R (page.80) 1282 0 R (page.81) 1340 0 R (page.9) 685 0 R (proposed_standards) 751 0 R (rfcs) 648 0 R (rndc) 881 0 R (rrset_ordering) 700 0 R (sample_configuration) 687 0 R (section*.1) 1239 0 R (section*.10) 1333 0 R (section*.11) 1343 0 R (section*.2) 1241 0 R (section*.3) 1249 0 R (section*.4) 1262 0 R (section*.5) 1270 0 R (section*.6) 1283 0 R (section*.7) 1299 0 R (section*.8) 1309 0 R (section*.9) 1319 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) 466 0 R (section.7.1) 518 0 R (section.7.2) 522 0 R (section.7.3) 534 0 R (section.8.1) 542 0 R (section.8.2) 550 0 R (section.8.3) 554 0 R (section.A.1) 562 0 R (section.A.2) 570 0 R (section.A.3) 578 0 R (server_statement_definition_and_usage) 951 0 R (server_statement_grammar) 1041 0 R (statsfile) 935 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) 418 0 R (subsection.6.2.18) 422 0 R (subsection.6.2.19) 426 0 R (subsection.6.2.2) 282 0 R (subsection.6.2.20) 430 0 R (subsection.6.2.21) 434 0 R (subsection.6.2.22) 438 0 R (subsection.6.2.23) 442 0 R (subsection.6.2.24) 446 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) 470 0 R (subsection.6.3.2) 482 0 R (subsection.6.3.3) 486 0 R (subsection.6.3.4) 490 0 R (subsection.6.3.5) 494 0 R (subsection.6.3.6) 510 0 R (subsection.7.2.1) 526 0 R (subsection.7.2.2) 530 0 R (subsection.8.1.1) 546 0 R (subsection.A.1.1) 566 0 R (subsection.A.2.1) 574 0 R (subsection.A.3.1) 582 0 R (subsection.A.3.2) 586 0 R (subsection.A.3.3) 590 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.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) 450 0 R (subsubsection.6.2.24.2) 454 0 R (subsubsection.6.2.24.3) 458 0 R (subsubsection.6.2.24.4) 462 0 R (subsubsection.6.3.1.1) 474 0 R (subsubsection.6.3.1.2) 478 0 R (subsubsection.6.3.5.1) 498 0 R (subsubsection.6.3.5.2) 502 0 R (subsubsection.6.3.5.3) 506 0 R (table.1.1) 625 0 R (table.1.2) 640 0 R (table.3.1) 696 0 R (table.3.2) 729 0 R (table.6.1) 834 0 R (table.6.10) 1122 0 R (table.6.11) 1128 0 R (table.6.12) 1134 0 R (table.6.13) 1142 0 R (table.6.14) 1144 0 R (table.6.15) 1147 0 R (table.6.16) 1154 0 R (table.6.17) 1157 0 R (table.6.18) 1175 0 R (table.6.2) 857 0 R (table.6.3) 865 0 R (table.6.4) 904 0 R (table.6.5) 941 0 R (table.6.6) 1020 0 R (table.6.7) 1034 0 R (table.6.8) 1071 0 R (table.6.9) 1116 0 R (table.A.1) 1227 0 R (table.A.2) 1229 0 R (the_category_phrase) 898 0 R (the_sortlist_statement) 1011 0 R (topology) 1010 0 R (tsig) 765 0 R (tuning) 1025 0 R (types_of_resource_records_and_when_to_use_them) 647 0 R (view_statement_grammar) 1036 0 R (zone_statement_grammar) 965 0 R (zone_transfers) 741 0 R] /Limits [(Access_Control_Lists) (zone_transfers)] >> endobj 1369 0 obj << @@ -7650,7 +7630,7 @@ endobj >> endobj 1372 0 obj << /Author()/Title()/Subject()/Creator(LaTeX with hyperref package)/Producer(pdfeTeX-1.21a)/Keywords() -/CreationDate (D:20080403035022Z) +/CreationDate (D:20080527222349Z) /PTEX.Fullbanner (This is pdfeTeX, Version 3.141592-1.21a-2.2 (Web2C 7.5.4) kpathsea version 3.5.4) >> endobj xref @@ -7662,591 +7642,591 @@ xref 0000000000 00000 f 0000000009 00000 n 0000018969 00000 n -0000491464 00000 n +0000491721 00000 n 0000000054 00000 n 0000000086 00000 n 0000019093 00000 n -0000491392 00000 n +0000491649 00000 n 0000000133 00000 n 0000000173 00000 n 0000019218 00000 n -0000491306 00000 n +0000491563 00000 n 0000000221 00000 n 0000000273 00000 n 0000019343 00000 n -0000491220 00000 n +0000491477 00000 n 0000000321 00000 n 0000000377 00000 n 0000023633 00000 n -0000491110 00000 n +0000491367 00000 n 0000000425 00000 n 0000000478 00000 n 0000023758 00000 n -0000491036 00000 n +0000491293 00000 n 0000000531 00000 n 0000000572 00000 n 0000023883 00000 n -0000490949 00000 n +0000491206 00000 n 0000000625 00000 n 0000000674 00000 n 0000024008 00000 n -0000490862 00000 n +0000491119 00000 n 0000000727 00000 n 0000000757 00000 n 0000028318 00000 n -0000490738 00000 n +0000490995 00000 n 0000000810 00000 n 0000000861 00000 n 0000028443 00000 n -0000490664 00000 n +0000490921 00000 n 0000000919 00000 n 0000000964 00000 n 0000028568 00000 n -0000490577 00000 n +0000490834 00000 n 0000001022 00000 n 0000001062 00000 n 0000028693 00000 n -0000490503 00000 n +0000490760 00000 n 0000001120 00000 n 0000001162 00000 n 0000031606 00000 n -0000490379 00000 n +0000490636 00000 n 0000001215 00000 n 0000001260 00000 n 0000031731 00000 n -0000490318 00000 n +0000490575 00000 n 0000001318 00000 n 0000001355 00000 n 0000031856 00000 n -0000490244 00000 n +0000490501 00000 n 0000001408 00000 n 0000001463 00000 n 0000034244 00000 n -0000490119 00000 n +0000490376 00000 n 0000001509 00000 n 0000001556 00000 n 0000034369 00000 n -0000490045 00000 n +0000490302 00000 n 0000001604 00000 n 0000001648 00000 n 0000034494 00000 n -0000489958 00000 n +0000490215 00000 n 0000001696 00000 n 0000001735 00000 n 0000034617 00000 n -0000489871 00000 n +0000490128 00000 n 0000001783 00000 n 0000001825 00000 n 0000034741 00000 n -0000489784 00000 n +0000490041 00000 n 0000001873 00000 n 0000001936 00000 n 0000035777 00000 n -0000489710 00000 n +0000489967 00000 n 0000001984 00000 n 0000002034 00000 n 0000037455 00000 n -0000489582 00000 n +0000489839 00000 n 0000002080 00000 n 0000002126 00000 n 0000037579 00000 n -0000489469 00000 n +0000489726 00000 n 0000002174 00000 n 0000002218 00000 n 0000037704 00000 n -0000489393 00000 n +0000489650 00000 n 0000002271 00000 n 0000002323 00000 n 0000037829 00000 n -0000489316 00000 n +0000489573 00000 n 0000002377 00000 n 0000002436 00000 n 0000040461 00000 n -0000489225 00000 n +0000489482 00000 n 0000002485 00000 n 0000002523 00000 n 0000040712 00000 n -0000489108 00000 n +0000489365 00000 n 0000002572 00000 n 0000002618 00000 n 0000040838 00000 n -0000488990 00000 n +0000489247 00000 n 0000002672 00000 n 0000002739 00000 n 0000044023 00000 n -0000488911 00000 n +0000489168 00000 n 0000002798 00000 n 0000002842 00000 n 0000044149 00000 n -0000488832 00000 n +0000489089 00000 n 0000002901 00000 n 0000002949 00000 n 0000054288 00000 n -0000488753 00000 n +0000489010 00000 n 0000003003 00000 n 0000003036 00000 n 0000057561 00000 n -0000488621 00000 n +0000488878 00000 n 0000003083 00000 n 0000003126 00000 n 0000057687 00000 n -0000488542 00000 n +0000488799 00000 n 0000003175 00000 n 0000003205 00000 n 0000057813 00000 n -0000488410 00000 n +0000488667 00000 n 0000003254 00000 n 0000003292 00000 n 0000057938 00000 n -0000488345 00000 n +0000488602 00000 n 0000003346 00000 n 0000003388 00000 n 0000062257 00000 n -0000488252 00000 n +0000488509 00000 n 0000003437 00000 n 0000003496 00000 n 0000062383 00000 n -0000488120 00000 n +0000488377 00000 n 0000003545 00000 n 0000003578 00000 n 0000062509 00000 n -0000488055 00000 n +0000488312 00000 n 0000003632 00000 n 0000003681 00000 n 0000069370 00000 n -0000487923 00000 n +0000488180 00000 n 0000003730 00000 n 0000003758 00000 n 0000069496 00000 n -0000487805 00000 n +0000488062 00000 n 0000003812 00000 n 0000003881 00000 n 0000069621 00000 n -0000487726 00000 n +0000487983 00000 n 0000003940 00000 n 0000003988 00000 n 0000069747 00000 n -0000487647 00000 n +0000487904 00000 n 0000004047 00000 n 0000004092 00000 n 0000072749 00000 n -0000487554 00000 n +0000487811 00000 n 0000004146 00000 n 0000004214 00000 n 0000072875 00000 n -0000487461 00000 n +0000487718 00000 n 0000004268 00000 n 0000004338 00000 n 0000073001 00000 n -0000487368 00000 n +0000487625 00000 n 0000004392 00000 n 0000004455 00000 n 0000073127 00000 n -0000487275 00000 n +0000487532 00000 n 0000004509 00000 n 0000004564 00000 n 0000076860 00000 n -0000487196 00000 n +0000487453 00000 n 0000004618 00000 n 0000004650 00000 n 0000076986 00000 n -0000487103 00000 n +0000487360 00000 n 0000004699 00000 n 0000004727 00000 n 0000077111 00000 n -0000487010 00000 n +0000487267 00000 n 0000004776 00000 n 0000004808 00000 n 0000077237 00000 n -0000486878 00000 n +0000487135 00000 n 0000004857 00000 n 0000004887 00000 n 0000080688 00000 n -0000486799 00000 n +0000487056 00000 n 0000004941 00000 n 0000004982 00000 n 0000080813 00000 n -0000486706 00000 n +0000486963 00000 n 0000005036 00000 n 0000005078 00000 n 0000080939 00000 n -0000486627 00000 n +0000486884 00000 n 0000005132 00000 n 0000005177 00000 n 0000088379 00000 n -0000486509 00000 n +0000486766 00000 n 0000005226 00000 n 0000005272 00000 n 0000088505 00000 n -0000486430 00000 n +0000486687 00000 n 0000005326 00000 n 0000005386 00000 n 0000088631 00000 n -0000486351 00000 n +0000486608 00000 n 0000005440 00000 n 0000005509 00000 n 0000091066 00000 n -0000486218 00000 n +0000486475 00000 n 0000005556 00000 n 0000005609 00000 n 0000091192 00000 n -0000486139 00000 n +0000486396 00000 n 0000005658 00000 n 0000005714 00000 n 0000091318 00000 n -0000486060 00000 n +0000486317 00000 n 0000005763 00000 n 0000005812 00000 n 0000095439 00000 n -0000485927 00000 n +0000486184 00000 n 0000005859 00000 n 0000005911 00000 n 0000095565 00000 n -0000485809 00000 n +0000486066 00000 n 0000005960 00000 n 0000006011 00000 n 0000099709 00000 n -0000485691 00000 n +0000485948 00000 n 0000006065 00000 n 0000006110 00000 n 0000099834 00000 n -0000485612 00000 n +0000485869 00000 n 0000006169 00000 n 0000006203 00000 n 0000099959 00000 n -0000485533 00000 n +0000485790 00000 n 0000006262 00000 n 0000006310 00000 n 0000103241 00000 n -0000485415 00000 n +0000485672 00000 n 0000006364 00000 n 0000006404 00000 n 0000103367 00000 n -0000485336 00000 n +0000485593 00000 n 0000006463 00000 n 0000006497 00000 n 0000103493 00000 n -0000485257 00000 n +0000485514 00000 n 0000006556 00000 n 0000006604 00000 n 0000107219 00000 n -0000485124 00000 n +0000485381 00000 n 0000006653 00000 n 0000006703 00000 n 0000111057 00000 n -0000485045 00000 n +0000485302 00000 n 0000006757 00000 n 0000006804 00000 n 0000111183 00000 n -0000484952 00000 n +0000485209 00000 n 0000006858 00000 n 0000006918 00000 n 0000111433 00000 n -0000484859 00000 n +0000485116 00000 n 0000006972 00000 n 0000007024 00000 n 0000111559 00000 n -0000484766 00000 n +0000485023 00000 n 0000007078 00000 n 0000007143 00000 n 0000116189 00000 n -0000484673 00000 n +0000484930 00000 n 0000007197 00000 n 0000007248 00000 n 0000116315 00000 n -0000484580 00000 n +0000484837 00000 n 0000007302 00000 n 0000007366 00000 n 0000116441 00000 n -0000484487 00000 n +0000484744 00000 n 0000007420 00000 n 0000007467 00000 n 0000116567 00000 n -0000484394 00000 n +0000484651 00000 n 0000007521 00000 n 0000007581 00000 n 0000119509 00000 n -0000484301 00000 n +0000484558 00000 n 0000007635 00000 n 0000007686 00000 n 0000119635 00000 n -0000484169 00000 n +0000484426 00000 n 0000007741 00000 n 0000007806 00000 n 0000119761 00000 n -0000484090 00000 n +0000484347 00000 n 0000007866 00000 n 0000007913 00000 n 0000130170 00000 n -0000484011 00000 n +0000484268 00000 n 0000007973 00000 n 0000008021 00000 n 0000133886 00000 n -0000483918 00000 n +0000484175 00000 n 0000008076 00000 n 0000008126 00000 n 0000134012 00000 n -0000483825 00000 n +0000484082 00000 n 0000008181 00000 n 0000008244 00000 n 0000135742 00000 n -0000483732 00000 n +0000483989 00000 n 0000008299 00000 n 0000008351 00000 n 0000135868 00000 n -0000483639 00000 n +0000483896 00000 n 0000008406 00000 n 0000008471 00000 n 0000135994 00000 n -0000483546 00000 n +0000483803 00000 n 0000008526 00000 n 0000008578 00000 n 0000141175 00000 n -0000483413 00000 n +0000483670 00000 n 0000008633 00000 n 0000008698 00000 n 0000145209 00000 n -0000483334 00000 n +0000483591 00000 n 0000008758 00000 n 0000008802 00000 n 0000162726 00000 n -0000483241 00000 n +0000483498 00000 n 0000008862 00000 n 0000008901 00000 n 0000162852 00000 n -0000483148 00000 n +0000483405 00000 n 0000008961 00000 n 0000009008 00000 n 0000166993 00000 n -0000483055 00000 n +0000483312 00000 n 0000009068 00000 n 0000009111 00000 n 0000167119 00000 n -0000482962 00000 n +0000483219 00000 n 0000009171 00000 n 0000009210 00000 n -0000170214 00000 n -0000482869 00000 n +0000170296 00000 n +0000483126 00000 n 0000009270 00000 n 0000009312 00000 n -0000173956 00000 n -0000482776 00000 n +0000173827 00000 n +0000483033 00000 n 0000009372 00000 n 0000009415 00000 n -0000181576 00000 n -0000482683 00000 n +0000181413 00000 n +0000482940 00000 n 0000009475 00000 n 0000009522 00000 n -0000181702 00000 n -0000482590 00000 n +0000181539 00000 n +0000482847 00000 n 0000009582 00000 n 0000009643 00000 n -0000181828 00000 n -0000482497 00000 n +0000181665 00000 n +0000482754 00000 n 0000009704 00000 n 0000009756 00000 n -0000185325 00000 n -0000482404 00000 n +0000185582 00000 n +0000482661 00000 n 0000009817 00000 n 0000009870 00000 n -0000189658 00000 n -0000482311 00000 n +0000189915 00000 n +0000482568 00000 n 0000009931 00000 n 0000009969 00000 n -0000189787 00000 n -0000482218 00000 n +0000190044 00000 n +0000482475 00000 n 0000010030 00000 n 0000010082 00000 n -0000192689 00000 n -0000482125 00000 n +0000192946 00000 n +0000482382 00000 n 0000010143 00000 n 0000010187 00000 n -0000196435 00000 n -0000482032 00000 n +0000196692 00000 n +0000482289 00000 n 0000010248 00000 n 0000010284 00000 n -0000200400 00000 n -0000481939 00000 n +0000200657 00000 n +0000482196 00000 n 0000010345 00000 n 0000010408 00000 n -0000200529 00000 n -0000481860 00000 n +0000200786 00000 n +0000482117 00000 n 0000010469 00000 n 0000010518 00000 n -0000204050 00000 n -0000481767 00000 n +0000204307 00000 n +0000482024 00000 n 0000010573 00000 n 0000010624 00000 n -0000204177 00000 n -0000481674 00000 n +0000204434 00000 n +0000481931 00000 n 0000010679 00000 n 0000010743 00000 n -0000208304 00000 n -0000481581 00000 n +0000208561 00000 n +0000481838 00000 n 0000010798 00000 n 0000010855 00000 n -0000208431 00000 n -0000481488 00000 n +0000208688 00000 n +0000481745 00000 n 0000010910 00000 n 0000010980 00000 n -0000208559 00000 n -0000481395 00000 n +0000208816 00000 n +0000481652 00000 n 0000011035 00000 n 0000011084 00000 n -0000211978 00000 n -0000481302 00000 n +0000212235 00000 n +0000481559 00000 n 0000011139 00000 n 0000011201 00000 n -0000213555 00000 n -0000481209 00000 n +0000213812 00000 n +0000481466 00000 n 0000011256 00000 n 0000011305 00000 n -0000218410 00000 n -0000481091 00000 n +0000218667 00000 n +0000481348 00000 n 0000011360 00000 n 0000011422 00000 n -0000218539 00000 n -0000481012 00000 n +0000218796 00000 n +0000481269 00000 n 0000011482 00000 n 0000011521 00000 n -0000223490 00000 n -0000480919 00000 n +0000223747 00000 n +0000481176 00000 n 0000011581 00000 n 0000011615 00000 n -0000223619 00000 n -0000480826 00000 n +0000223876 00000 n +0000481083 00000 n 0000011675 00000 n 0000011716 00000 n -0000233806 00000 n -0000480747 00000 n +0000234063 00000 n +0000481004 00000 n 0000011776 00000 n 0000011828 00000 n -0000237977 00000 n -0000480629 00000 n +0000238234 00000 n +0000480886 00000 n 0000011877 00000 n 0000011910 00000 n -0000238106 00000 n -0000480511 00000 n +0000238363 00000 n +0000480768 00000 n 0000011964 00000 n 0000012036 00000 n -0000238234 00000 n -0000480432 00000 n +0000238491 00000 n +0000480689 00000 n 0000012095 00000 n 0000012139 00000 n -0000245968 00000 n -0000480353 00000 n +0000246225 00000 n +0000480610 00000 n 0000012198 00000 n 0000012251 00000 n -0000249552 00000 n -0000480260 00000 n +0000249809 00000 n +0000480517 00000 n 0000012305 00000 n 0000012355 00000 n -0000252912 00000 n -0000480167 00000 n +0000253169 00000 n +0000480424 00000 n 0000012409 00000 n 0000012447 00000 n -0000253170 00000 n -0000480074 00000 n +0000253427 00000 n +0000480331 00000 n 0000012501 00000 n 0000012550 00000 n -0000253428 00000 n -0000479942 00000 n +0000253685 00000 n +0000480199 00000 n 0000012604 00000 n 0000012656 00000 n -0000253557 00000 n -0000479863 00000 n +0000253814 00000 n +0000480120 00000 n 0000012715 00000 n 0000012767 00000 n -0000256438 00000 n -0000479770 00000 n +0000256695 00000 n +0000480027 00000 n 0000012826 00000 n 0000012879 00000 n -0000256567 00000 n -0000479691 00000 n +0000256824 00000 n +0000479948 00000 n 0000012938 00000 n 0000012987 00000 n -0000256696 00000 n -0000479612 00000 n +0000256953 00000 n +0000479869 00000 n 0000013041 00000 n 0000013121 00000 n -0000262565 00000 n -0000479479 00000 n +0000262822 00000 n +0000479736 00000 n 0000013168 00000 n 0000013220 00000 n -0000262694 00000 n -0000479400 00000 n +0000262951 00000 n +0000479657 00000 n 0000013269 00000 n 0000013313 00000 n -0000266427 00000 n -0000479268 00000 n +0000266684 00000 n +0000479525 00000 n 0000013362 00000 n 0000013424 00000 n -0000266556 00000 n -0000479189 00000 n +0000266813 00000 n +0000479446 00000 n 0000013478 00000 n 0000013526 00000 n -0000266685 00000 n -0000479110 00000 n +0000266942 00000 n +0000479367 00000 n 0000013580 00000 n 0000013631 00000 n -0000266814 00000 n -0000479031 00000 n +0000267071 00000 n +0000479288 00000 n 0000013680 00000 n 0000013727 00000 n -0000269731 00000 n -0000478898 00000 n +0000269988 00000 n +0000479155 00000 n 0000013774 00000 n 0000013811 00000 n -0000269860 00000 n -0000478780 00000 n +0000270117 00000 n +0000479037 00000 n 0000013860 00000 n 0000013899 00000 n -0000269989 00000 n -0000478715 00000 n +0000270246 00000 n +0000478972 00000 n 0000013953 00000 n 0000014031 00000 n -0000270118 00000 n -0000478622 00000 n +0000270375 00000 n +0000478879 00000 n 0000014080 00000 n 0000014147 00000 n -0000270247 00000 n -0000478543 00000 n +0000270504 00000 n +0000478800 00000 n 0000014196 00000 n 0000014241 00000 n -0000273741 00000 n -0000478424 00000 n +0000273998 00000 n +0000478681 00000 n 0000014289 00000 n 0000014321 00000 n -0000273870 00000 n -0000478306 00000 n +0000274127 00000 n +0000478563 00000 n 0000014370 00000 n 0000014409 00000 n -0000273999 00000 n -0000478241 00000 n +0000274256 00000 n +0000478498 00000 n 0000014463 00000 n 0000014524 00000 n -0000277498 00000 n -0000478109 00000 n +0000277755 00000 n +0000478366 00000 n 0000014573 00000 n 0000014630 00000 n -0000277627 00000 n -0000478044 00000 n +0000277884 00000 n +0000478301 00000 n 0000014684 00000 n 0000014733 00000 n -0000281814 00000 n -0000477926 00000 n +0000282071 00000 n +0000478183 00000 n 0000014782 00000 n 0000014844 00000 n -0000281943 00000 n -0000477847 00000 n +0000282200 00000 n +0000478104 00000 n 0000014898 00000 n 0000014953 00000 n -0000292558 00000 n -0000477754 00000 n +0000292815 00000 n +0000478011 00000 n 0000015007 00000 n 0000015048 00000 n -0000292687 00000 n -0000477675 00000 n +0000292944 00000 n +0000477932 00000 n 0000015102 00000 n 0000015154 00000 n 0000015507 00000 n @@ -8254,20 +8234,20 @@ xref 0000015207 00000 n 0000015629 00000 n 0000015692 00000 n -0000474516 00000 n -0000448852 00000 n -0000474342 00000 n -0000447664 00000 n -0000421504 00000 n -0000447490 00000 n -0000475521 00000 n +0000474773 00000 n +0000449109 00000 n +0000474599 00000 n +0000447921 00000 n +0000421761 00000 n +0000447747 00000 n +0000475778 00000 n 0000016419 00000 n 0000016234 00000 n 0000015840 00000 n 0000016356 00000 n -0000420819 00000 n -0000418674 00000 n -0000420655 00000 n +0000421076 00000 n +0000418932 00000 n +0000420912 00000 n 0000019594 00000 n 0000018784 00000 n 0000016504 00000 n @@ -8275,25 +8255,25 @@ xref 0000019030 00000 n 0000019155 00000 n 0000019280 00000 n -0000417820 00000 n -0000397462 00000 n -0000417646 00000 n +0000418078 00000 n +0000397720 00000 n +0000417904 00000 n 0000019405 00000 n 0000019468 00000 n 0000019531 00000 n -0000396513 00000 n -0000376761 00000 n -0000396340 00000 n -0000376034 00000 n -0000359650 00000 n -0000375861 00000 n +0000396771 00000 n +0000377019 00000 n +0000396598 00000 n +0000376292 00000 n +0000359908 00000 n +0000376119 00000 n 0000024132 00000 n 0000022950 00000 n 0000019718 00000 n 0000023444 00000 n -0000359115 00000 n -0000342198 00000 n -0000358931 00000 n +0000359373 00000 n +0000342456 00000 n +0000359189 00000 n 0000023507 00000 n 0000023570 00000 n 0000023695 00000 n @@ -8302,8 +8282,8 @@ xref 0000023100 00000 n 0000023293 00000 n 0000024070 00000 n -0000238170 00000 n -0000282007 00000 n +0000238427 00000 n +0000282264 00000 n 0000028818 00000 n 0000027783 00000 n 0000024256 00000 n @@ -8331,7 +8311,7 @@ xref 0000034556 00000 n 0000034678 00000 n 0000034803 00000 n -0000475639 00000 n +0000475896 00000 n 0000035902 00000 n 0000035592 00000 n 0000034951 00000 n @@ -8355,28 +8335,28 @@ xref 0000040239 00000 n 0000040775 00000 n 0000040901 00000 n -0000192753 00000 n +0000193010 00000 n 0000044275 00000 n 0000043838 00000 n 0000041075 00000 n 0000043960 00000 n -0000341671 00000 n -0000332362 00000 n -0000341494 00000 n +0000341929 00000 n +0000332620 00000 n +0000341752 00000 n 0000044212 00000 n 0000047975 00000 n 0000047790 00000 n 0000044399 00000 n 0000047912 00000 n -0000331919 00000 n -0000325120 00000 n -0000331742 00000 n +0000332177 00000 n +0000325378 00000 n +0000332000 00000 n 0000052340 00000 n 0000051949 00000 n 0000048138 00000 n 0000052277 00000 n 0000052091 00000 n -0000475757 00000 n +0000476014 00000 n 0000111622 00000 n 0000054540 00000 n 0000054103 00000 n @@ -8396,7 +8376,7 @@ xref 0000057875 00000 n 0000058001 00000 n 0000145272 00000 n -0000174019 00000 n +0000173890 00000 n 0000062635 00000 n 0000061718 00000 n 0000058162 00000 n @@ -8406,7 +8386,7 @@ xref 0000062033 00000 n 0000062446 00000 n 0000062572 00000 n -0000282786 00000 n +0000283043 00000 n 0000065550 00000 n 0000065178 00000 n 0000062785 00000 n @@ -8424,7 +8404,7 @@ xref 0000069559 00000 n 0000069684 00000 n 0000069810 00000 n -0000475875 00000 n +0000476132 00000 n 0000073253 00000 n 0000072376 00000 n 0000070010 00000 n @@ -8434,7 +8414,7 @@ xref 0000073064 00000 n 0000073190 00000 n 0000072518 00000 n -0000233870 00000 n +0000234127 00000 n 0000077362 00000 n 0000076675 00000 n 0000073390 00000 n @@ -8455,9 +8435,9 @@ xref 0000083942 00000 n 0000081187 00000 n 0000085700 00000 n -0000324285 00000 n -0000315425 00000 n -0000324113 00000 n +0000324543 00000 n +0000315683 00000 n +0000324371 00000 n 0000085532 00000 n 0000085589 00000 n 0000085678 00000 n @@ -8469,7 +8449,7 @@ xref 0000088157 00000 n 0000088568 00000 n 0000088694 00000 n -0000277691 00000 n +0000277948 00000 n 0000091444 00000 n 0000090881 00000 n 0000088881 00000 n @@ -8477,7 +8457,7 @@ xref 0000091129 00000 n 0000091255 00000 n 0000091381 00000 n -0000475993 00000 n +0000476250 00000 n 0000091876 00000 n 0000091691 00000 n 0000091542 00000 n @@ -8522,7 +8502,7 @@ xref 0000111307 00000 n 0000111370 00000 n 0000111496 00000 n -0000476111 00000 n +0000476368 00000 n 0000116693 00000 n 0000115127 00000 n 0000111796 00000 n @@ -8536,7 +8516,7 @@ xref 0000115609 00000 n 0000115760 00000 n 0000115944 00000 n -0000293201 00000 n +0000293458 00000 n 0000119887 00000 n 0000119324 00000 n 0000116830 00000 n @@ -8568,7 +8548,7 @@ xref 0000134075 00000 n 0000133520 00000 n 0000133671 00000 n -0000476229 00000 n +0000476486 00000 n 0000136120 00000 n 0000135557 00000 n 0000134249 00000 n @@ -8590,7 +8570,7 @@ xref 0000141425 00000 n 0000145146 00000 n 0000144991 00000 n -0000200593 00000 n +0000200850 00000 n 0000149374 00000 n 0000149063 00000 n 0000145458 00000 n @@ -8605,8 +8585,8 @@ xref 0000153392 00000 n 0000153548 00000 n 0000153730 00000 n -0000476347 00000 n -0000204241 00000 n +0000476604 00000 n +0000204498 00000 n 0000158684 00000 n 0000158103 00000 n 0000154129 00000 n @@ -8620,7 +8600,7 @@ xref 0000162789 00000 n 0000162495 00000 n 0000162915 00000 n -0000213619 00000 n +0000213876 00000 n 0000167245 00000 n 0000166445 00000 n 0000163102 00000 n @@ -8629,412 +8609,412 @@ xref 0000166595 00000 n 0000166760 00000 n 0000167182 00000 n -0000266877 00000 n -0000170339 00000 n -0000170029 00000 n +0000267134 00000 n +0000170422 00000 n +0000170111 00000 n 0000167369 00000 n -0000170151 00000 n -0000170276 00000 n -0000314899 00000 n -0000307009 00000 n -0000314726 00000 n -0000174082 00000 n -0000173771 00000 n -0000170504 00000 n -0000173893 00000 n -0000177641 00000 n -0000177456 00000 n -0000174221 00000 n -0000177578 00000 n -0000476465 00000 n -0000181954 00000 n -0000181036 00000 n -0000177806 00000 n -0000181513 00000 n -0000181639 00000 n -0000181765 00000 n -0000181187 00000 n -0000181891 00000 n -0000181360 00000 n -0000185454 00000 n -0000185135 00000 n -0000182106 00000 n -0000185260 00000 n -0000185389 00000 n -0000189915 00000 n -0000189121 00000 n -0000185607 00000 n -0000189593 00000 n -0000189722 00000 n +0000170233 00000 n +0000170359 00000 n +0000315157 00000 n +0000307266 00000 n +0000314984 00000 n +0000173953 00000 n +0000173642 00000 n +0000170587 00000 n +0000173764 00000 n +0000177876 00000 n +0000177691 00000 n +0000174105 00000 n +0000177813 00000 n +0000476722 00000 n +0000181791 00000 n +0000181035 00000 n +0000178041 00000 n +0000181350 00000 n +0000181476 00000 n +0000181602 00000 n +0000181177 00000 n +0000181728 00000 n +0000185711 00000 n +0000185216 00000 n +0000181943 00000 n +0000185517 00000 n +0000185362 00000 n +0000185646 00000 n +0000190172 00000 n +0000189378 00000 n +0000185864 00000 n 0000189850 00000 n -0000189276 00000 n -0000189438 00000 n -0000192947 00000 n -0000192309 00000 n -0000190081 00000 n -0000192624 00000 n -0000192455 00000 n -0000192817 00000 n -0000192882 00000 n -0000196563 00000 n -0000196062 00000 n -0000193059 00000 n -0000196370 00000 n -0000196499 00000 n -0000196208 00000 n -0000200787 00000 n -0000200020 00000 n -0000196742 00000 n -0000200335 00000 n -0000200464 00000 n -0000200167 00000 n -0000200657 00000 n -0000200722 00000 n -0000476587 00000 n +0000189979 00000 n +0000190107 00000 n +0000189533 00000 n +0000189695 00000 n +0000193204 00000 n +0000192566 00000 n +0000190338 00000 n +0000192881 00000 n +0000192712 00000 n +0000193074 00000 n +0000193139 00000 n +0000196820 00000 n +0000196319 00000 n +0000193316 00000 n +0000196627 00000 n +0000196756 00000 n +0000196465 00000 n +0000201044 00000 n +0000200277 00000 n +0000196999 00000 n +0000200592 00000 n +0000200721 00000 n +0000200424 00000 n +0000200914 00000 n +0000200979 00000 n +0000476844 00000 n +0000208880 00000 n +0000204561 00000 n +0000204116 00000 n +0000201156 00000 n +0000204242 00000 n +0000204371 00000 n +0000208945 00000 n +0000207865 00000 n +0000204673 00000 n +0000208496 00000 n +0000208030 00000 n +0000208181 00000 n 0000208623 00000 n -0000204304 00000 n -0000203859 00000 n -0000200899 00000 n -0000203985 00000 n -0000204114 00000 n -0000208688 00000 n -0000207608 00000 n -0000204416 00000 n -0000208239 00000 n -0000207773 00000 n -0000207924 00000 n -0000208366 00000 n -0000208494 00000 n -0000208085 00000 n -0000212106 00000 n -0000211787 00000 n -0000208800 00000 n -0000211913 00000 n -0000212042 00000 n -0000213683 00000 n -0000213364 00000 n -0000212218 00000 n -0000213490 00000 n -0000215059 00000 n -0000214868 00000 n -0000213795 00000 n -0000214994 00000 n -0000218796 00000 n -0000218219 00000 n -0000215158 00000 n -0000218345 00000 n -0000218474 00000 n -0000218603 00000 n -0000218668 00000 n -0000218733 00000 n -0000476712 00000 n -0000223748 00000 n -0000222246 00000 n -0000218908 00000 n -0000223425 00000 n -0000223554 00000 n -0000223683 00000 n -0000222438 00000 n -0000222600 00000 n -0000222762 00000 n -0000222924 00000 n -0000223095 00000 n -0000223265 00000 n -0000228568 00000 n -0000227339 00000 n -0000223860 00000 n -0000228503 00000 n -0000227531 00000 n -0000227694 00000 n -0000227856 00000 n -0000228018 00000 n -0000228178 00000 n -0000228340 00000 n -0000233934 00000 n -0000231575 00000 n -0000228693 00000 n -0000233741 00000 n -0000231821 00000 n -0000231974 00000 n -0000232136 00000 n -0000232298 00000 n -0000232460 00000 n -0000232622 00000 n -0000232784 00000 n -0000232946 00000 n -0000233108 00000 n -0000233262 00000 n -0000233423 00000 n -0000233578 00000 n -0000238491 00000 n -0000237294 00000 n -0000234059 00000 n -0000237782 00000 n -0000237847 00000 n -0000237912 00000 n -0000238041 00000 n +0000208751 00000 n +0000208342 00000 n +0000212363 00000 n +0000212044 00000 n +0000209057 00000 n +0000212170 00000 n +0000212299 00000 n +0000213940 00000 n +0000213621 00000 n +0000212475 00000 n +0000213747 00000 n +0000215316 00000 n +0000215125 00000 n +0000214052 00000 n +0000215251 00000 n +0000219053 00000 n +0000218476 00000 n +0000215415 00000 n +0000218602 00000 n +0000218731 00000 n +0000218860 00000 n +0000218925 00000 n +0000218990 00000 n +0000476969 00000 n +0000224005 00000 n +0000222503 00000 n +0000219165 00000 n +0000223682 00000 n +0000223811 00000 n +0000223940 00000 n +0000222695 00000 n +0000222857 00000 n +0000223019 00000 n +0000223181 00000 n +0000223352 00000 n +0000223522 00000 n +0000228825 00000 n +0000227596 00000 n +0000224117 00000 n +0000228760 00000 n +0000227788 00000 n +0000227951 00000 n +0000228113 00000 n +0000228275 00000 n +0000228435 00000 n +0000228597 00000 n +0000234191 00000 n +0000231832 00000 n +0000228950 00000 n +0000233998 00000 n +0000232078 00000 n +0000232231 00000 n +0000232393 00000 n +0000232555 00000 n +0000232717 00000 n +0000232879 00000 n +0000233041 00000 n +0000233203 00000 n +0000233365 00000 n +0000233519 00000 n +0000233680 00000 n +0000233835 00000 n +0000238748 00000 n +0000237551 00000 n +0000234316 00000 n +0000238039 00000 n +0000238104 00000 n +0000238169 00000 n 0000238298 00000 n -0000237450 00000 n -0000237620 00000 n -0000238363 00000 n -0000238427 00000 n -0000242086 00000 n -0000241765 00000 n -0000238616 00000 n -0000241891 00000 n -0000241956 00000 n -0000242021 00000 n -0000246097 00000 n -0000245647 00000 n -0000242185 00000 n -0000245773 00000 n -0000245838 00000 n -0000245903 00000 n -0000246032 00000 n -0000476837 00000 n -0000249811 00000 n -0000249101 00000 n -0000246222 00000 n -0000249227 00000 n -0000249292 00000 n -0000249357 00000 n -0000249422 00000 n -0000249487 00000 n -0000249616 00000 n -0000249681 00000 n -0000249746 00000 n -0000253684 00000 n -0000252721 00000 n -0000249936 00000 n -0000252847 00000 n -0000252976 00000 n -0000253041 00000 n -0000253106 00000 n -0000253234 00000 n +0000238555 00000 n +0000237707 00000 n +0000237877 00000 n +0000238620 00000 n +0000238684 00000 n +0000242343 00000 n +0000242022 00000 n +0000238873 00000 n +0000242148 00000 n +0000242213 00000 n +0000242278 00000 n +0000246354 00000 n +0000245904 00000 n +0000242442 00000 n +0000246030 00000 n +0000246095 00000 n +0000246160 00000 n +0000246289 00000 n +0000477094 00000 n +0000250068 00000 n +0000249358 00000 n +0000246479 00000 n +0000249484 00000 n +0000249549 00000 n +0000249614 00000 n +0000249679 00000 n +0000249744 00000 n +0000249873 00000 n +0000249938 00000 n +0000250003 00000 n +0000253941 00000 n +0000252978 00000 n +0000250193 00000 n +0000253104 00000 n +0000253233 00000 n 0000253298 00000 n 0000253363 00000 n -0000253492 00000 n +0000253491 00000 n +0000253555 00000 n 0000253620 00000 n -0000256825 00000 n -0000256247 00000 n -0000253876 00000 n -0000256373 00000 n -0000306654 00000 n -0000304656 00000 n -0000306489 00000 n -0000256502 00000 n -0000256631 00000 n -0000256760 00000 n -0000259788 00000 n -0000259467 00000 n -0000257018 00000 n -0000259593 00000 n -0000259658 00000 n -0000259723 00000 n -0000260241 00000 n -0000260050 00000 n -0000259900 00000 n -0000260176 00000 n -0000262822 00000 n -0000261914 00000 n -0000260283 00000 n -0000262500 00000 n -0000262629 00000 n -0000262758 00000 n -0000262070 00000 n -0000262285 00000 n -0000476962 00000 n -0000266941 00000 n -0000266236 00000 n -0000262948 00000 n -0000266362 00000 n -0000304335 00000 n -0000295122 00000 n -0000304149 00000 n -0000266491 00000 n -0000266620 00000 n -0000266749 00000 n -0000270375 00000 n -0000269149 00000 n -0000267106 00000 n -0000269666 00000 n -0000269795 00000 n -0000269924 00000 n -0000270053 00000 n -0000270182 00000 n -0000270311 00000 n -0000269305 00000 n -0000269477 00000 n -0000270829 00000 n -0000270638 00000 n -0000270488 00000 n -0000270764 00000 n -0000274128 00000 n -0000273550 00000 n -0000270871 00000 n -0000273676 00000 n -0000273805 00000 n -0000273934 00000 n -0000274063 00000 n -0000278014 00000 n -0000277307 00000 n -0000274214 00000 n -0000277433 00000 n -0000277562 00000 n -0000277755 00000 n -0000277820 00000 n -0000277884 00000 n -0000277949 00000 n -0000284668 00000 n -0000280868 00000 n -0000278140 00000 n -0000281749 00000 n -0000281878 00000 n -0000281042 00000 n -0000281221 00000 n -0000281398 00000 n -0000281573 00000 n -0000282071 00000 n -0000282136 00000 n -0000282201 00000 n -0000282266 00000 n -0000282331 00000 n -0000282396 00000 n -0000282461 00000 n -0000282526 00000 n -0000282591 00000 n -0000282656 00000 n -0000282721 00000 n -0000282850 00000 n -0000282915 00000 n -0000282980 00000 n -0000283045 00000 n -0000283110 00000 n -0000283175 00000 n -0000283240 00000 n -0000283305 00000 n -0000283370 00000 n -0000283435 00000 n -0000283500 00000 n -0000283565 00000 n -0000283630 00000 n -0000283695 00000 n -0000283760 00000 n -0000283825 00000 n -0000283890 00000 n -0000283955 00000 n -0000284020 00000 n -0000284085 00000 n -0000284150 00000 n -0000284215 00000 n -0000284280 00000 n -0000284345 00000 n -0000284410 00000 n -0000284475 00000 n -0000284540 00000 n -0000284604 00000 n -0000477087 00000 n -0000291179 00000 n -0000287484 00000 n -0000284820 00000 n -0000287610 00000 n -0000287675 00000 n -0000287740 00000 n -0000287805 00000 n -0000287870 00000 n -0000287935 00000 n -0000288000 00000 n -0000288065 00000 n -0000288129 00000 n -0000288194 00000 n -0000288259 00000 n -0000288324 00000 n -0000288389 00000 n -0000288454 00000 n -0000288519 00000 n -0000288584 00000 n -0000288648 00000 n -0000288713 00000 n -0000288778 00000 n -0000288843 00000 n -0000288908 00000 n -0000288973 00000 n -0000289038 00000 n -0000289103 00000 n -0000289168 00000 n -0000289233 00000 n -0000289298 00000 n -0000289363 00000 n -0000289428 00000 n -0000289493 00000 n -0000289558 00000 n -0000289623 00000 n -0000289688 00000 n -0000289753 00000 n -0000289818 00000 n -0000289883 00000 n -0000289948 00000 n -0000290013 00000 n -0000290078 00000 n -0000290143 00000 n -0000290208 00000 n -0000290273 00000 n -0000290338 00000 n -0000290403 00000 n -0000290468 00000 n -0000290533 00000 n -0000290598 00000 n -0000290663 00000 n -0000290728 00000 n -0000290793 00000 n -0000290858 00000 n -0000290923 00000 n -0000290987 00000 n -0000291051 00000 n +0000253749 00000 n +0000253877 00000 n +0000257082 00000 n +0000256504 00000 n +0000254133 00000 n +0000256630 00000 n +0000306911 00000 n +0000304913 00000 n +0000306746 00000 n +0000256759 00000 n +0000256888 00000 n +0000257017 00000 n +0000260045 00000 n +0000259724 00000 n +0000257275 00000 n +0000259850 00000 n +0000259915 00000 n +0000259980 00000 n +0000260498 00000 n +0000260307 00000 n +0000260157 00000 n +0000260433 00000 n +0000263079 00000 n +0000262171 00000 n +0000260540 00000 n +0000262757 00000 n +0000262886 00000 n +0000263015 00000 n +0000262327 00000 n +0000262542 00000 n +0000477219 00000 n +0000267198 00000 n +0000266493 00000 n +0000263205 00000 n +0000266619 00000 n +0000304592 00000 n +0000295379 00000 n +0000304406 00000 n +0000266748 00000 n +0000266877 00000 n +0000267006 00000 n +0000270632 00000 n +0000269406 00000 n +0000267363 00000 n +0000269923 00000 n +0000270052 00000 n +0000270181 00000 n +0000270310 00000 n +0000270439 00000 n +0000270568 00000 n +0000269562 00000 n +0000269734 00000 n +0000271086 00000 n +0000270895 00000 n +0000270745 00000 n +0000271021 00000 n +0000274385 00000 n +0000273807 00000 n +0000271128 00000 n +0000273933 00000 n +0000274062 00000 n +0000274191 00000 n +0000274320 00000 n +0000278271 00000 n +0000277564 00000 n +0000274471 00000 n +0000277690 00000 n +0000277819 00000 n +0000278012 00000 n +0000278077 00000 n +0000278141 00000 n +0000278206 00000 n +0000284925 00000 n +0000281125 00000 n +0000278397 00000 n +0000282006 00000 n +0000282135 00000 n +0000281299 00000 n +0000281478 00000 n +0000281655 00000 n +0000281830 00000 n +0000282328 00000 n +0000282393 00000 n +0000282458 00000 n +0000282523 00000 n +0000282588 00000 n +0000282653 00000 n +0000282718 00000 n +0000282783 00000 n +0000282848 00000 n +0000282913 00000 n +0000282978 00000 n +0000283107 00000 n +0000283172 00000 n +0000283237 00000 n +0000283302 00000 n +0000283367 00000 n +0000283432 00000 n +0000283497 00000 n +0000283562 00000 n +0000283627 00000 n +0000283692 00000 n +0000283757 00000 n +0000283822 00000 n +0000283887 00000 n +0000283952 00000 n +0000284017 00000 n +0000284082 00000 n +0000284147 00000 n +0000284212 00000 n +0000284277 00000 n +0000284342 00000 n +0000284407 00000 n +0000284472 00000 n +0000284537 00000 n +0000284602 00000 n +0000284667 00000 n +0000284732 00000 n +0000284797 00000 n +0000284861 00000 n +0000477344 00000 n +0000291436 00000 n +0000287741 00000 n +0000285077 00000 n +0000287867 00000 n +0000287932 00000 n +0000287997 00000 n +0000288062 00000 n +0000288127 00000 n +0000288192 00000 n +0000288257 00000 n +0000288322 00000 n +0000288386 00000 n +0000288451 00000 n +0000288516 00000 n +0000288581 00000 n +0000288646 00000 n +0000288711 00000 n +0000288776 00000 n +0000288841 00000 n +0000288905 00000 n +0000288970 00000 n +0000289035 00000 n +0000289100 00000 n +0000289165 00000 n +0000289230 00000 n +0000289295 00000 n +0000289360 00000 n +0000289425 00000 n +0000289490 00000 n +0000289555 00000 n +0000289620 00000 n +0000289685 00000 n +0000289750 00000 n +0000289815 00000 n +0000289880 00000 n +0000289945 00000 n +0000290010 00000 n +0000290075 00000 n +0000290140 00000 n +0000290205 00000 n +0000290270 00000 n +0000290335 00000 n +0000290400 00000 n +0000290465 00000 n +0000290530 00000 n +0000290595 00000 n +0000290660 00000 n +0000290725 00000 n +0000290790 00000 n +0000290855 00000 n +0000290920 00000 n +0000290985 00000 n +0000291050 00000 n 0000291115 00000 n -0000293076 00000 n -0000292367 00000 n -0000291291 00000 n -0000292493 00000 n -0000292622 00000 n -0000292751 00000 n -0000292816 00000 n -0000292881 00000 n -0000292946 00000 n -0000293011 00000 n -0000293233 00000 n -0000304577 00000 n -0000306901 00000 n -0000306870 00000 n -0000315174 00000 n -0000324690 00000 n -0000332161 00000 n -0000341957 00000 n -0000359455 00000 n -0000376442 00000 n -0000397081 00000 n -0000418224 00000 n -0000421306 00000 n -0000421076 00000 n -0000448225 00000 n -0000475035 00000 n -0000477185 00000 n -0000477305 00000 n -0000477428 00000 n -0000477517 00000 n -0000477599 00000 n -0000491574 00000 n -0000503622 00000 n -0000503663 00000 n -0000503703 00000 n -0000503837 00000 n +0000291180 00000 n +0000291244 00000 n +0000291308 00000 n +0000291372 00000 n +0000293333 00000 n +0000292624 00000 n +0000291548 00000 n +0000292750 00000 n +0000292879 00000 n +0000293008 00000 n +0000293073 00000 n +0000293138 00000 n +0000293203 00000 n +0000293268 00000 n +0000293490 00000 n +0000304834 00000 n +0000307158 00000 n +0000307127 00000 n +0000315432 00000 n +0000324948 00000 n +0000332419 00000 n +0000342215 00000 n +0000359713 00000 n +0000376700 00000 n +0000397339 00000 n +0000418482 00000 n +0000421563 00000 n +0000421333 00000 n +0000448482 00000 n +0000475292 00000 n +0000477442 00000 n +0000477562 00000 n +0000477685 00000 n +0000477774 00000 n +0000477856 00000 n +0000491831 00000 n +0000503879 00000 n +0000503920 00000 n +0000503960 00000 n +0000504094 00000 n trailer << /Size 1373 /Root 1371 0 R /Info 1372 0 R -/ID [<B146BB689FDC064660D3C5269A4887DD> <B146BB689FDC064660D3C5269A4887DD>] +/ID [<01CCFD1E5FBF13DF94A8F939D2FB9838> <01CCFD1E5FBF13DF94A8F939D2FB9838>] >> startxref -504095 +504352 %%EOF diff --git a/lib/dns/api b/lib/dns/api index 520c3c3a52d3..1b3fb8d5a269 100644 --- a/lib/dns/api +++ b/lib/dns/api @@ -1,3 +1,3 @@ -LIBINTERFACE = 24 -LIBREVISION = 2 -LIBAGE = 2 +LIBINTERFACE = 25 +LIBREVISION = 0 +LIBAGE = 0 diff --git a/lib/dns/dispatch.c b/lib/dns/dispatch.c index 869fd7bba01c..207432d5f357 100644 --- a/lib/dns/dispatch.c +++ b/lib/dns/dispatch.c @@ -15,7 +15,7 @@ * PERFORMANCE OF THIS SOFTWARE. */ -/* $Id: dispatch.c,v 1.101.2.6.2.21 2007/08/28 07:19:13 tbox Exp $ */ +/* $Id: dispatch.c,v 1.101.2.6.2.21.4.1 2008/05/22 21:11:15 each Exp $ */ #include <config.h> @@ -27,6 +27,7 @@ #include <isc/mem.h> #include <isc/mutex.h> #include <isc/print.h> +#include <isc/random.h> #include <isc/string.h> #include <isc/task.h> #include <isc/time.h> @@ -43,25 +44,22 @@ 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; - 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_displist_t *qid_table; /* the table itself */ } dns_qid_t; +/* ARC4 Random generator state */ +typedef struct arc4ctx { + isc_uint8_t i; + isc_uint8_t j; + isc_uint8_t s[256]; + int count; +} arc4ctx_t; + struct dns_dispatchmgr { /* Unlocked. */ unsigned int magic; @@ -74,6 +72,10 @@ struct dns_dispatchmgr { unsigned int state; ISC_LIST(dns_dispatch_t) list; + /* Locked by arc4_lock. */ + isc_mutex_t arc4_lock; + arc4ctx_t arc4ctx; /*%< ARC4 context for QID */ + /* locked by buffer lock */ dns_qid_t *qid; isc_mutex_t buffer_lock; @@ -100,6 +102,7 @@ struct dns_dispentry { unsigned int magic; dns_dispatch_t *disp; dns_messageid_t id; + in_port_t port; unsigned int bucket; isc_sockaddr_t host; isc_task_t *task; @@ -119,6 +122,7 @@ struct dns_dispatch { isc_task_t *task; /* internal task */ isc_socket_t *socket; /* isc socket attached to */ isc_sockaddr_t local; /* local address */ + in_port_t localport; /* local UDP port */ unsigned int maxrequests; /* max requests */ isc_event_t *ctlevent; @@ -161,14 +165,14 @@ struct dns_dispatch { * Statics. */ static dns_dispentry_t *bucket_search(dns_qid_t *, isc_sockaddr_t *, - dns_messageid_t, unsigned int); + dns_messageid_t, in_port_t, unsigned int); static isc_boolean_t destroy_disp_ok(dns_dispatch_t *); 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 isc_uint32_t dns_hash(dns_qid_t *, isc_sockaddr_t *, dns_messageid_t); +static isc_uint32_t dns_hash(dns_qid_t *, isc_sockaddr_t *, dns_messageid_t, + in_port_t); static void free_buffer(dns_dispatch_t *disp, void *buf, unsigned int len); static void *allocate_udp_buffer(dns_dispatch_t *disp); static inline void free_event(dns_dispatch_t *disp, dns_dispatchevent_t *ev); @@ -188,12 +192,8 @@ static isc_result_t dispatch_createudp(dns_dispatchmgr_t *mgr, static isc_boolean_t destroy_mgr_ok(dns_dispatchmgr_t *mgr); static void destroy_mgr(dns_dispatchmgr_t **mgrp); static isc_result_t qid_allocate(dns_dispatchmgr_t *mgr, unsigned int buckets, - unsigned int increment, isc_boolean_t usepool, - dns_qid_t **qidp); + unsigned int increment, 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); #define LVL(x) ISC_LOG_DEBUG(x) @@ -274,26 +274,152 @@ request_log(dns_dispatch_t *disp, dns_dispentry_t *resp, } /* - * Return an unpredictable message ID. + * ARC4 random number generator obtained from OpenBSD */ -static dns_messageid_t -dns_randomid(dns_nsid_t *nsid) { - isc_uint32_t id; +static void +dispatch_arc4init(arc4ctx_t *actx) { + int n; + for (n = 0; n < 256; n++) + actx->s[n] = n; + actx->i = 0; + actx->j = 0; + actx->count = 0; +} + +static void +dispatch_arc4addrandom(arc4ctx_t *actx, unsigned char *dat, int datlen) { + int n; + isc_uint8_t si; + + actx->i--; + for (n = 0; n < 256; n++) { + actx->i = (actx->i + 1); + si = actx->s[actx->i]; + actx->j = (actx->j + si + dat[n % datlen]); + actx->s[actx->i] = actx->s[actx->j]; + actx->s[actx->j] = si; + } + actx->j = actx->i; +} + +static inline isc_uint8_t +dispatch_arc4get8(arc4ctx_t *actx) { + isc_uint8_t si, sj; + + actx->i = (actx->i + 1); + si = actx->s[actx->i]; + actx->j = (actx->j + si); + sj = actx->s[actx->j]; + actx->s[actx->i] = sj; + actx->s[actx->j] = si; + + return (actx->s[(si + sj) & 0xff]); +} + +static inline isc_uint16_t +dispatch_arc4get16(arc4ctx_t *actx) { + isc_uint16_t val; + + val = dispatch_arc4get8(actx) << 8; + val |= dispatch_arc4get8(actx); + + return (val); +} - id = nsid_next(nsid); +static void +dispatch_arc4stir(dns_dispatchmgr_t *mgr) { + int i; + union { + unsigned char rnd[128]; + isc_uint32_t rnd32[32]; + } rnd; + isc_result_t result; - return ((dns_messageid_t)id); + if (mgr->entropy != NULL) { + /* + * We accept any quality of random data to avoid blocking. + */ + result = isc_entropy_getdata(mgr->entropy, rnd.rnd, + sizeof(rnd), NULL, 0); + RUNTIME_CHECK(result == ISC_R_SUCCESS); + } else { + for (i = 0; i < 32; i++) + isc_random_get(&rnd.rnd32[i]); + } + dispatch_arc4addrandom(&mgr->arc4ctx, rnd.rnd, sizeof(rnd.rnd)); + + /* + * Discard early keystream, as per recommendations in: + * http://www.wisdom.weizmann.ac.il/~itsik/RC4/Papers/Rc4_ksa.ps + */ + for (i = 0; i < 256; i++) + (void)dispatch_arc4get8(&mgr->arc4ctx); + + /* + * Derived from OpenBSD's implementation. The rationale is not clear, + * but should be conservative enough in safety, and reasonably large + * for efficiency. + */ + mgr->arc4ctx.count = 1600000; +} + +static isc_uint16_t +dispatch_arc4random(dns_dispatchmgr_t *mgr) { + isc_uint16_t result; + + LOCK(&mgr->arc4_lock); + mgr->arc4ctx.count -= sizeof(isc_uint16_t); + if (mgr->arc4ctx.count <= 0) + dispatch_arc4stir(mgr); + result = dispatch_arc4get16(&mgr->arc4ctx); + UNLOCK(&mgr->arc4_lock); + return (result); +} + +static isc_uint16_t +dispatch_arc4uniformrandom(dns_dispatchmgr_t *mgr, isc_uint16_t upper_bound) { + isc_uint16_t min, r; + /* The caller must hold the manager lock. */ + + if (upper_bound < 2) + return (0); + + /* + * Ensure the range of random numbers [min, 0xffff] be a multiple of + * upper_bound and contain at least a half of the 16 bit range. + */ + + if (upper_bound > 0x8000) + min = 1 + ~upper_bound; /* 0x8000 - upper_bound */ + else + min = (isc_uint16_t)(0x10000 % (isc_uint32_t)upper_bound); + + /* + * This could theoretically loop forever but each retry has + * p > 0.5 (worst case, usually far better) of selecting a + * number inside the range we need, so it should rarely need + * to re-roll. + */ + for (;;) { + r = dispatch_arc4random(mgr); + if (r >= min) + break; + } + + return (r % upper_bound); } /* * Return a hash of the destination and message id. */ static isc_uint32_t -dns_hash(dns_qid_t *qid, isc_sockaddr_t *dest, dns_messageid_t id) { +dns_hash(dns_qid_t *qid, isc_sockaddr_t *dest, dns_messageid_t id, + in_port_t port) +{ unsigned int ret; ret = isc_sockaddr_hash(dest, ISC_TRUE); - ret ^= id; + ret ^= (id << 16) | port; ret %= qid->qid_nbuckets; INSIST(ret < qid->qid_nbuckets); @@ -410,7 +536,7 @@ destroy_disp(isc_task_t *task, isc_event_t *event) { */ static dns_dispentry_t * bucket_search(dns_qid_t *qid, isc_sockaddr_t *dest, dns_messageid_t id, - unsigned int bucket) + in_port_t port, unsigned int bucket) { dns_dispentry_t *res; @@ -419,8 +545,10 @@ bucket_search(dns_qid_t *qid, isc_sockaddr_t *dest, dns_messageid_t id, res = ISC_LIST_HEAD(qid->qid_table[bucket]); while (res != NULL) { - if ((res->id == id) && isc_sockaddr_equal(dest, &res->host)) + if ((res->id == id) && isc_sockaddr_equal(dest, &res->host) && + res->port == port) { return (res); + } res = ISC_LIST_NEXT(res, link); } @@ -622,13 +750,10 @@ udp_recv(isc_task_t *task, isc_event_t *ev_in) { goto restart; } - dns_dispatch_hash(&ev->timestamp, sizeof(&ev->timestamp)); - dns_dispatch_hash(ev->region.base, ev->region.length); - /* response */ - bucket = dns_hash(qid, &ev->address, id); + bucket = dns_hash(qid, &ev->address, id, disp->localport); LOCK(&qid->lock); - resp = bucket_search(qid, &ev->address, id, bucket); + resp = bucket_search(qid, &ev->address, id, disp->localport, bucket); dispatch_log(disp, LVL(90), "search for response in bucket %d: %s", bucket, (resp == NULL ? "not found" : "found")); @@ -859,14 +984,13 @@ tcp_recv(isc_task_t *task, isc_event_t *ev_in) { goto restart; } - dns_dispatch_hash(tcpmsg->buffer.base, tcpmsg->buffer.length); - /* * Response. */ - bucket = dns_hash(qid, &tcpmsg->address, id); + bucket = dns_hash(qid, &tcpmsg->address, id, disp->localport); LOCK(&qid->lock); - resp = bucket_search(qid, &tcpmsg->address, id, bucket); + resp = bucket_search(qid, &tcpmsg->address, id, disp->localport, + bucket); dispatch_log(disp, LVL(90), "search for response in bucket %d: %s", bucket, (resp == NULL ? "not found" : "found")); @@ -1015,6 +1139,8 @@ destroy_mgr(dns_dispatchmgr_t **mgrp) { DESTROYLOCK(&mgr->lock); mgr->state = 0; + DESTROYLOCK(&mgr->arc4_lock); + isc_mempool_destroy(&mgr->epool); isc_mempool_destroy(&mgr->rpool); isc_mempool_destroy(&mgr->dpool); @@ -1093,10 +1219,14 @@ dns_dispatchmgr_create(isc_mem_t *mctx, isc_entropy_t *entropy, if (result != ISC_R_SUCCESS) goto deallocate; - result = isc_mutex_init(&mgr->buffer_lock); + result = isc_mutex_init(&mgr->arc4_lock); if (result != ISC_R_SUCCESS) goto kill_lock; + result = isc_mutex_init(&mgr->buffer_lock); + if (result != ISC_R_SUCCESS) + goto kill_arc4_lock; + result = isc_mutex_init(&mgr->pool_lock); if (result != ISC_R_SUCCESS) goto kill_buffer_lock; @@ -1147,6 +1277,8 @@ dns_dispatchmgr_create(isc_mem_t *mctx, isc_entropy_t *entropy, if (entropy != NULL) isc_entropy_attach(entropy, &mgr->entropy); + dispatch_arc4init(&mgr->arc4ctx); + *mgrp = mgr; return (ISC_R_SUCCESS); @@ -1158,6 +1290,8 @@ dns_dispatchmgr_create(isc_mem_t *mctx, isc_entropy_t *entropy, DESTROYLOCK(&mgr->pool_lock); kill_buffer_lock: DESTROYLOCK(&mgr->buffer_lock); + kill_arc4_lock: + DESTROYLOCK(&mgr->arc4_lock); kill_lock: DESTROYLOCK(&mgr->lock); deallocate: @@ -1245,7 +1379,7 @@ dns_dispatchmgr_setudp(dns_dispatchmgr_t *mgr, isc_mempool_setmaxalloc(mgr->bpool, maxbuffers); isc_mempool_associatelock(mgr->bpool, &mgr->pool_lock); - result = qid_allocate(mgr, buckets, increment, ISC_TRUE, &mgr->qid); + result = qid_allocate(mgr, buckets, increment, &mgr->qid); if (result != ISC_R_SUCCESS) goto cleanup; @@ -1284,20 +1418,27 @@ dns_dispatchmgr_destroy(dns_dispatchmgr_t **mgrp) { } static isc_boolean_t -blacklisted(dns_dispatchmgr_t *mgr, isc_socket_t *sock) { +blacklisted(dns_dispatchmgr_t *mgr, isc_socket_t *sock, + isc_sockaddr_t *sockaddrp) +{ isc_sockaddr_t sockaddr; isc_result_t result; + REQUIRE(sock != NULL || sockaddrp != NULL); + if (mgr->portlist == NULL) return (ISC_FALSE); - result = isc_socket_getsockname(sock, &sockaddr); - if (result != ISC_R_SUCCESS) - return (ISC_FALSE); + if (sock != NULL) { + sockaddrp = &sockaddr; + result = isc_socket_getsockname(sock, sockaddrp); + if (result != ISC_R_SUCCESS) + return (ISC_FALSE); + } if (mgr->portlist != NULL && - dns_portlist_match(mgr->portlist, isc_sockaddr_pf(&sockaddr), - isc_sockaddr_getport(&sockaddr))) + dns_portlist_match(mgr->portlist, isc_sockaddr_pf(sockaddrp), + isc_sockaddr_getport(sockaddrp))) return (ISC_TRUE); return (ISC_FALSE); } @@ -1318,7 +1459,7 @@ local_addr_match(dns_dispatch_t *disp, isc_sockaddr_t *addr) { if (disp->mgr->portlist != NULL && isc_sockaddr_getport(addr) == 0 && isc_sockaddr_getport(&disp->local) == 0 && - blacklisted(disp->mgr, disp->socket)) + blacklisted(disp->mgr, disp->socket, NULL)) return (ISC_FALSE); /* @@ -1391,7 +1532,7 @@ dispatch_find(dns_dispatchmgr_t *mgr, isc_sockaddr_t *local, static isc_result_t qid_allocate(dns_dispatchmgr_t *mgr, unsigned int buckets, - unsigned int increment, isc_boolean_t usepool, dns_qid_t **qidp) + unsigned int increment, dns_qid_t **qidp) { dns_qid_t *qid; unsigned int i; @@ -1412,16 +1553,8 @@ qid_allocate(dns_dispatchmgr_t *mgr, unsigned int buckets, return (ISC_R_NOMEMORY); } - if (nsid_init(mgr->mctx, &qid->nsid, usepool) != ISC_R_SUCCESS) { - isc_mem_put(mgr->mctx, qid->qid_table, - buckets * sizeof(dns_displist_t)); - isc_mem_put(mgr->mctx, qid, sizeof(*qid)); - return (ISC_R_NOMEMORY); - } - if (isc_mutex_init(&qid->lock) != ISC_R_SUCCESS) { UNEXPECTED_ERROR(__FILE__, __LINE__, "isc_mutex_init failed"); - nsid_destroy(mgr->mctx, &qid->nsid); isc_mem_put(mgr->mctx, qid->qid_table, buckets * sizeof(dns_displist_t)); isc_mem_put(mgr->mctx, qid, sizeof(*qid)); @@ -1449,7 +1582,6 @@ qid_destroy(isc_mem_t *mctx, dns_qid_t **qidp) { *qidp = NULL; qid->magic = 0; - nsid_destroy(mctx, &qid->nsid); isc_mem_put(mctx, qid->qid_table, qid->qid_nbuckets * sizeof(dns_displist_t)); DESTROYLOCK(&qid->lock); @@ -1486,6 +1618,7 @@ dispatch_allocate(dns_dispatchmgr_t *mgr, unsigned int maxrequests, disp->refcount = 1; disp->recv_pending = 0; memset(&disp->local, 0, sizeof(disp->local)); + disp->localport = 0; disp->shutting_down = 0; disp->shutdown_out = 0; disp->connected = 0; @@ -1593,7 +1726,7 @@ dns_dispatch_createtcp(dns_dispatchmgr_t *mgr, isc_socket_t *sock, return (result); } - result = qid_allocate(mgr, buckets, increment, ISC_FALSE, &disp->qid); + result = qid_allocate(mgr, buckets, increment, &disp->qid); if (result != ISC_R_SUCCESS) goto deallocate_dispatch; @@ -1660,7 +1793,7 @@ dns_dispatch_getudp(dns_dispatchmgr_t *mgr, isc_socketmgr_t *sockmgr, dns_dispatch_t **dispp) { isc_result_t result; - dns_dispatch_t *disp; + dns_dispatch_t *disp = NULL; REQUIRE(VALID_DISPATCHMGR(mgr)); REQUIRE(sockmgr != NULL); @@ -1680,6 +1813,11 @@ dns_dispatch_getudp(dns_dispatchmgr_t *mgr, isc_socketmgr_t *sockmgr, LOCK(&mgr->lock); + if ((attributes & DNS_DISPATCHATTR_RANDOMPORT) != 0) { + REQUIRE(isc_sockaddr_getport(localaddr) == 0); + goto createudp; + } + /* * First, see if we have a dispatcher that matches. */ @@ -1708,6 +1846,7 @@ dns_dispatch_getudp(dns_dispatchmgr_t *mgr, isc_socketmgr_t *sockmgr, return (ISC_R_SUCCESS); } + createudp: /* * Nope, create one. */ @@ -1743,7 +1882,9 @@ dispatch_createudp(dns_dispatchmgr_t *mgr, isc_socketmgr_t *sockmgr, dns_dispatch_t *disp; isc_socket_t *sock = NULL; isc_socket_t *held[DNS_DISPATCH_HELD]; - unsigned int i = 0, j = 0; + unsigned int i = 0, j = 0, k = 0; + isc_sockaddr_t localaddr_bound; + in_port_t localport = 0; /* * dispatch_allocate() checks mgr for us. @@ -1759,11 +1900,34 @@ dispatch_createudp(dns_dispatchmgr_t *mgr, isc_socketmgr_t *sockmgr, * from returning the same port to us too quickly. */ memset(held, 0, sizeof(held)); + localaddr_bound = *localaddr; getsocket: - result = create_socket(sockmgr, localaddr, &sock); + if ((attributes & DNS_DISPATCHATTR_RANDOMPORT) != 0) { + in_port_t prt; + + /* XXX: should the range be configurable? */ + prt = 1024 + dispatch_arc4uniformrandom(mgr, 65535 - 1023); + isc_sockaddr_setport(&localaddr_bound, prt); + if (blacklisted(mgr, NULL, &localaddr_bound)) { + if (++k == 1024) + attributes &= ~DNS_DISPATCHATTR_RANDOMPORT; + goto getsocket; + } + result = create_socket(sockmgr, &localaddr_bound, &sock); + if (result == ISC_R_ADDRINUSE) { + if (++k == 1024) + attributes &= ~DNS_DISPATCHATTR_RANDOMPORT; + goto getsocket; + } + localport = prt; + } else + result = create_socket(sockmgr, localaddr, &sock); if (result != ISC_R_SUCCESS) goto deallocate_dispatch; - if (isc_sockaddr_getport(localaddr) == 0 && blacklisted(mgr, sock)) { + if ((attributes & DNS_DISPATCHATTR_RANDOMPORT) == 0 && + isc_sockaddr_getport(localaddr) == 0 && + blacklisted(mgr, sock, NULL)) + { if (held[i] != NULL) isc_socket_detach(&held[i]); held[i++] = sock; @@ -1784,6 +1948,7 @@ dispatch_createudp(dns_dispatchmgr_t *mgr, isc_socketmgr_t *sockmgr, disp->socktype = isc_sockettype_udp; disp->socket = sock; disp->local = *localaddr; + disp->localport = localport; disp->task = NULL; result = isc_task_create(taskmgr, 0, &disp->task); @@ -1916,19 +2081,20 @@ dns_dispatch_addresponse(dns_dispatch_t *disp, isc_sockaddr_t *dest, /* * Try somewhat hard to find an unique ID. */ + id = (dns_messageid_t)dispatch_arc4random(disp->mgr); qid = DNS_QID(disp); LOCK(&qid->lock); - id = dns_randomid(&qid->nsid); - bucket = dns_hash(qid, dest, id); + bucket = dns_hash(qid, dest, id, disp->localport); ok = ISC_FALSE; for (i = 0; i < 64; i++) { - if (bucket_search(qid, dest, id, bucket) == NULL) { + if (bucket_search(qid, dest, id, disp->localport, bucket) == + NULL) { ok = ISC_TRUE; break; } id += qid->qid_increment; id &= 0x0000ffff; - bucket = dns_hash(qid, dest, id); + bucket = dns_hash(qid, dest, id, disp->localport); } if (!ok) { @@ -1950,6 +2116,7 @@ dns_dispatch_addresponse(dns_dispatch_t *disp, isc_sockaddr_t *dest, isc_task_attach(task, &res->task); res->disp = disp; res->id = id; + res->port = disp->localport; res->bucket = bucket; res->host = *dest; res->action = action; @@ -2261,409 +2428,3 @@ dns_dispatchmgr_dump(dns_dispatchmgr_t *mgr) { } } #endif - -/* - * Allow the user to pick one of two ID randomization algorithms. - * - * The first algorithm is an adaptation of the sequence shuffling - * algorithm discovered by Carter Bays and S. D. Durham [ACM Trans. Math. - * Software 2 (1976), 59-64], as documented as Algorithm B in Chapter - * 3.2.2 in Volume 2 of Knuth's "The Art of Computer Programming". We use - * a randomly selected linear congruential random number generator with a - * modulus of 2^16, whose increment is a randomly picked odd number, and - * whose multiplier is picked from a set which meets the following - * criteria: - * Is of the form 8*n+5, which ensures "high potency" according to - * principle iii in the summary chapter 3.6. This form also has a - * gcd(a-1,m) of 4 which is good according to principle iv. - * - * Is between 0.01 and 0.99 times the modulus as specified by - * principle iv. - * - * Passes the spectral test "with flying colors" (ut >= 1) in - * dimensions 2 through 6 as calculated by Algorithm S in Chapter - * 3.3.4 and the ratings calculated by formula 35 in section E. - * - * Of the multipliers that pass this test, pick the set that is - * best according to the theoretical bounds of the serial - * correlation test. This was calculated using a simplified - * version of Knuth's Theorem K in Chapter 3.3.3. - * - * These criteria may not be important for this use, but we might as well - * pick from the best generators since there are so many possible ones and - * we don't have that many random bits to do the picking. - * - * We use a modulus of 2^16 instead of something bigger so that we will - * tend to cycle through all the possible IDs before repeating any, - * however the shuffling will perturb this somewhat. Theoretically there - * is no minimimum interval between two uses of the same ID, but in - * practice it seems to be >64000. - * - * Our adaptatation of Algorithm B mixes the hash state which has - * captured various random events into the shuffler to perturb the - * sequence. - * - * One disadvantage of this algorithm is that if the generator parameters - * were to be guessed, it would be possible to mount a limited brute force - * attack on the ID space since the IDs are only shuffled within a limited - * range. - * - * The second algorithm uses the same random number generator to populate - * a pool of 65536 IDs. The hash state is used to pick an ID from a window - * of 4096 IDs in this pool, then the chosen ID is swapped with the ID - * at the beginning of the window and the window position is advanced. - * This means that the interval between uses of the ID will be no less - * than 65536-4096. The ID sequence in the pool will become more random - * over time. - * - * For both algorithms, two more linear congruential random number generators - * are selected. The ID from the first part of algorithm is used to seed - * the first of these generators, and its output is used to seed the second. - * The strategy is use these generators as 1 to 1 hashes to obfuscate the - * properties of the generator used in the first part of either algorithm. - * - * The first algorithm may be suitable for use in a client resolver since - * its memory requirements are fairly low and it's pretty random out of - * the box. It is somewhat succeptible to a limited brute force attack, - * so the second algorithm is probably preferable for a longer running - * program that issues a large number of queries and has time to randomize - * the pool. - */ - -#define NSID_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))) - -static isc_uint32_t nsid_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) { - unsigned char *p = data; - /* - * Hash function similar to the one we use for hashing names. - * We don't fold case or toss the upper bit here, though. - * This hash doesn't do much interesting when fed binary zeros, - * so there may be a better hash function. - * This function doesn't need to be very strong since we're - * only using it to stir the pool, but it should be reasonably - * fast. - */ - /* - * We don't care about locking access to nsid_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++; - } -} - -/* - * Table of good linear congruential multipliers for modulus 2^16 - * in order of increasing serial correlation bounds (so trim from - * the end). - */ -static const isc_uint16_t nsid_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, - 11317, 11789, 12045, 12413, 14277, 14821, 14917, 18989, - 19821, 23005, 23533, 23573, 23693, 27549, 27709, 28461, - 29365, 35605, 37693, 37757, 38309, 41285, 45261, 47061, - 47269, 48133, 48597, 50277, 50717, 50757, 50805, 51341, - 51413, 51581, 51597, 53445, 11493, 14229, 20365, 20653, - 23485, 25541, 27429, 29421, 30173, 35445, 35653, 36789, - 36797, 37109, 37157, 37669, 38661, 39773, 40397, 41837, - 41877, 45293, 47277, 47845, 49853, 51085, 51349, 54085, - 56933, 8877, 8973, 9885, 11365, 11813, 13581, 13589, - 13613, 14109, 14317, 15765, 15789, 16925, 17069, 17205, - 17621, 17941, 19077, 19381, 20245, 22845, 23733, 24869, - 25453, 27213, 28381, 28965, 29245, 29997, 30733, 30901, - 34877, 35485, 35613, 36133, 36661, 36917, 38597, 40285, - 40693, 41413, 41541, 41637, 42053, 42349, 45245, 45469, - 46493, 48205, 48613, 50861, 51861, 52877, 53933, 54397, - 55669, 56453, 56965, 58021, 7757, 7781, 8333, 9661, - 12229, 14373, 14453, 17549, 18141, 19085, 20773, 23701, - 24205, 24333, 25261, 25317, 27181, 30117, 30477, 34757, - 34885, 35565, 35885, 36541, 37957, 39733, 39813, 41157, - 41893, 42317, 46621, 48117, 48181, 49525, 55261, 55389, - 56845, 7045, 7749, 7965, 8469, 9133, 9549, 9789, - 10173, 11181, 11285, 12253, 13453, 13533, 13757, 14477, - 15053, 16901, 17213, 17269, 17525, 17629, 18605, 19013, - 19829, 19933, 20069, 20093, 23261, 23333, 24949, 25309, - 27613, 28453, 28709, 29301, 29541, 34165, 34413, 37301, - 37773, 38045, 38405, 41077, 41781, 41925, 42717, 44437, - 44525, 44613, 45933, 45941, 47077, 50077, 50893, 52117, - 5293, 55069, 55989, 58125, 59205, 6869, 14685, 15453, - 16821, 17045, 17613, 18437, 21029, 22773, 22909, 25445, - 25757, 26541, 30709, 30909, 31093, 31149, 37069, 37725, - 37925, 38949, 39637, 39701, 40765, 40861, 42965, 44813, - 45077, 45733, 47045, 50093, 52861, 52957, 54181, 56325, - 56365, 56381, 56877, 57013, 5741, 58101, 58669, 8613, - 10045, 10261, 10653, 10733, 11461, 12261, 14069, 15877, - 17757, 21165, 23885, 24701, 26429, 26645, 27925, 28765, - 29197, 30189, 31293, 39781, 39909, 40365, 41229, 41453, - 41653, 42165, 42365, 47421, 48029, 48085, 52773, 5573, - 57037, 57637, 58341, 58357, 58901, 6357, 7789, 9093, - 10125, 10709, 10765, 11957, 12469, 13437, 13509, 14773, - 15437, 15773, 17813, 18829, 19565, 20237, 23461, 23685, - 23725, 23941, 24877, 25461, 26405, 29509, 30285, 35181, - 37229, 37893, 38565, 40293, 44189, 44581, 45701, 47381, - 47589, 48557, 4941, 51069, 5165, 52797, 53149, 5341, - 56301, 56765, 58581, 59493, 59677, 6085, 6349, 8293, - 8501, 8517, 11597, 11709, 12589, 12693, 13517, 14909, - 17397, 18085, 21101, 21269, 22717, 25237, 25661, 29189, - 30101, 31397, 33933, 34213, 34661, 35533, 36493, 37309, - 40037, 4189, 42909, 44309, 44357, 44389, 4541, 45461, - 46445, 48237, 54149, 55301, 55853, 56621, 56717, 56901, - 5813, 58437, 12493, 15365, 15989, 17829, 18229, 19341, - 21013, 21357, 22925, 24885, 26053, 27581, 28221, 28485, - 30605, 30613, 30789, 35437, 36285, 37189, 3941, 41797, - 4269, 42901, 43293, 44645, 45221, 46893, 4893, 50301, - 50325, 5189, 52109, 53517, 54053, 54485, 5525, 55949, - 56973, 59069, 59421, 60733, 61253, 6421, 6701, 6709, - 7101, 8669, 15797, 19221, 19837, 20133, 20957, 21293, - 21461, 22461, 29085, 29861, 30869, 34973, 36469, 37565, - 38125, 38829, 39469, 40061, 40117, 44093, 47429, 48341, - 50597, 51757, 5541, 57629, 58405, 59621, 59693, 59701, - 61837, 7061, 10421, 11949, 15405, 20861, 25397, 25509, - 25893, 26037, 28629, 28869, 29605, 30213, 34205, 35637, - 36365, 37285, 3773, 39117, 4021, 41061, 42653, 44509, - 4461, 44829, 4725, 5125, 52269, 56469, 59085, 5917, - 60973, 8349, 17725, 18637, 19773, 20293, 21453, 22533, - 24285, 26333, 26997, 31501, 34541, 34805, 37509, 38477, - 41333, 44125, 46285, 46997, 47637, 48173, 4925, 50253, - 50381, 50917, 51205, 51325, 52165, 52229, 5253, 5269, - 53509, 56253, 56341, 5821, 58373, 60301, 61653, 61973, - 62373, 8397, 11981, 14341, 14509, 15077, 22261, 22429, - 24261, 28165, 28685, 30661, 34021, 34445, 39149, 3917, - 43013, 43317, 44053, 44101, 4533, 49541, 49981, 5277, - 54477, 56357, 57261, 57765, 58573, 59061, 60197, 61197, - 62189, 7725, 8477, 9565, 10229, 11437, 14613, 14709, - 16813, 20029, 20677, 31445, 3165, 31957, 3229, 33541, - 36645, 3805, 38973, 3965, 4029, 44293, 44557, 46245, - 48917, 4909, 51749, 53709, 55733, 56445, 5925, 6093, - 61053, 62637, 8661, 9109, 10821, 11389, 13813, 14325, - 15501, 16149, 18845, 22669, 26437, 29869, 31837, 33709, - 33973, 34173, 3677, 3877, 3981, 39885, 42117, 4421, - 44221, 44245, 44693, 46157, 47309, 5005, 51461, 52037, - 55333, 55693, 56277, 58949, 6205, 62141, 62469, 6293, - 10101, 12509, 14029, 17997, 20469, 21149, 25221, 27109, - 2773, 2877, 29405, 31493, 31645, 4077, 42005, 42077, - 42469, 42501, 44013, 48653, 49349, 4997, 50101, 55405, - 56957, 58037, 59429, 60749, 61797, 62381, 62837, 6605, - 10541, 23981, 24533, 2701, 27333, 27341, 31197, 33805, - 3621, 37381, 3749, 3829, 38533, 42613, 44381, 45901, - 48517, 51269, 57725, 59461, 60045, 62029, 13805, 14013, - 15461, 16069, 16157, 18573, 2309, 23501, 28645, 3077, - 31541, 36357, 36877, 3789, 39429, 39805, 47685, 47949, - 49413, 5485, 56757, 57549, 57805, 58317, 59549, 62213, - 62613, 62853, 62933, 8909, 12941, 16677, 20333, 21541, - 24429, 26077, 26421, 2885, 31269, 33381, 3661, 40925, - 42925, 45173, 4525, 4709, 53133, 55941, 57413, 57797, - 62125, 62237, 62733, 6773, 12317, 13197, 16533, 16933, - 18245, 2213, 2477, 29757, 33293, 35517, 40133, 40749, - 4661, 49941, 62757, 7853, 8149, 8573, 11029, 13421, - 21549, 22709, 22725, 24629, 2469, 26125, 2669, 34253, - 36709, 41013, 45597, 46637, 52285, 52333, 54685, 59013, - 60997, 61189, 61981, 62605, 62821, 7077, 7525, 8781, - 10861, 15277, 2205, 22077, 28517, 28949, 32109, 33493, - 4661, 49941, 62757, 7853, 8149, 8573, 11029, 13421, - 21549, 22709, 22725, 24629, 2469, 26125, 2669, 34253, - 36709, 41013, 45597, 46637, 52285, 52333, 54685, 59013, - 60997, 61189, 61981, 62605, 62821, 7077, 7525, 8781, - 10861, 15277, 2205, 22077, 28517, 28949, 32109, 33493, - 3685, 39197, 39869, 42621, 44997, 48565, 5221, 57381, - 61749, 62317, 63245, 63381, 23149, 2549, 28661, 31653, - 33885, 36341, 37053, 39517, 42805, 45853, 48997, 59349, - 60053, 62509, 63069, 6525, 1893, 20181, 2365, 24893, - 27397, 31357, 32277, 33357, 34437, 36677, 37661, 43469, - 43917, 50997, 53869, 5653, 13221, 16741, 17893, 2157, - 28653, 31789, 35301, 35821, 61613, 62245, 12405, 14517, - 17453, 18421, 3149, 3205, 40341, 4109, 43941, 46869, - 48837, 50621, 57405, 60509, 62877, 8157, 12933, 12957, - 16501, 19533, 3461, 36829, 52357, 58189, 58293, 63053, - 17109, 1933, 32157, 37701, 59005, 61621, 13029, 15085, - 16493, 32317, 35093, 5061, 51557, 62221, 20765, 24613, - 2629, 30861, 33197, 33749, 35365, 37933, 40317, 48045, - 56229, 61157, 63797, 7917, 17965, 1917, 1973, 20301, - 2253, 33157, 58629, 59861, 61085, 63909, 8141, 9221, - 14757, 1581, 21637, 26557, 33869, 34285, 35733, 40933, - 42517, 43501, 53653, 61885, 63805, 7141, 21653, 54973, - 31189, 60061, 60341, 63357, 16045, 2053, 26069, 33997, - 43901, 54565, 63837, 8949, 17909, 18693, 32349, 33125, - 37293, 48821, 49053, 51309, 64037, 7117, 1445, 20405, - 23085, 26269, 26293, 27349, 32381, 33141, 34525, 36461, - 37581, 43525, 4357, 43877, 5069, 55197, 63965, 9845, - 12093, 2197, 2229, 32165, 33469, 40981, 42397, 8749, - 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 - -static isc_uint16_t -nsid_next(dns_nsid_t *nsid) { - 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++; - } else { - /* - * This is the original Algorithm B - * j = ((u_long) NSID_SHUFFLE_TABLE_SIZE * nsid_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; - } - - /* 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; - - 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; - - 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) - 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; - } - } else { - nsid->nsid_vtable = isc_mem_get(mctx, NSID_SHUFFLE_TABLE_SIZE * - (sizeof(isc_uint16_t)) ); - if (nsid->nsid_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; - } - nsid->nsid_state2 = nsid->nsid_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, - 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)); -} - -void -dns_dispatch_hash(void *data, size_t len) { - nsid_hash(data, len); -} diff --git a/lib/dns/include/dns/dispatch.h b/lib/dns/include/dns/dispatch.h index 29dd7f806385..806ab880f3cc 100644 --- a/lib/dns/include/dns/dispatch.h +++ b/lib/dns/include/dns/dispatch.h @@ -15,7 +15,7 @@ * PERFORMANCE OF THIS SOFTWARE. */ -/* $Id: dispatch.h,v 1.45.2.2.4.5 2007/08/28 07:19:14 tbox Exp $ */ +/* $Id: dispatch.h,v 1.45.2.2.4.5.4.1 2008/05/22 21:11:16 each Exp $ */ #ifndef DNS_DISPATCH_H #define DNS_DISPATCH_H 1 @@ -112,6 +112,9 @@ struct dns_dispatchevent { * _MAKEQUERY * The dispatcher can be used to issue queries to other servers, and * accept replies from them. + * + * _RANDOMPORT + * Allocate UDP port randomly. */ #define DNS_DISPATCHATTR_PRIVATE 0x00000001U #define DNS_DISPATCHATTR_TCP 0x00000002U @@ -121,6 +124,7 @@ struct dns_dispatchevent { #define DNS_DISPATCHATTR_NOLISTEN 0x00000020U #define DNS_DISPATCHATTR_MAKEQUERY 0x00000040U #define DNS_DISPATCHATTR_CONNECTED 0x00000080U +#define DNS_DISPATCHATTR_RANDOMPORT 0x00000100U isc_result_t dns_dispatchmgr_create(isc_mem_t *mctx, isc_entropy_t *entropy, @@ -437,13 +441,6 @@ dns_dispatch_importrecv(dns_dispatch_t *disp, isc_event_t *event); * event != NULL */ -void -dns_dispatch_hash(void *data, size_t len); -/*%< - * Feed 'data' to the dispatch query id generator where 'len' is the size - * of 'data'. - */ - ISC_LANG_ENDDECLS #endif /* DNS_DISPATCH_H */ diff --git a/lib/dns/resolver.c b/lib/dns/resolver.c index 16d22e08b332..93f10f5dd3e3 100644 --- a/lib/dns/resolver.c +++ b/lib/dns/resolver.c @@ -15,7 +15,7 @@ * PERFORMANCE OF THIS SOFTWARE. */ -/* $Id: resolver.c,v 1.218.2.18.4.77 2008/01/17 23:45:27 tbox Exp $ */ +/* $Id: resolver.c,v 1.218.2.18.4.77.2.1 2008/05/22 21:11:15 each Exp $ */ #include <config.h> @@ -1070,17 +1070,50 @@ fctx_query(fetchctx_t *fctx, dns_adbaddrinfo_t *addrinfo, * A dispatch will be created once the connect succeeds. */ } else { + isc_sockaddr_t localaddr; + unsigned int attrs, attrmask; + dns_dispatch_t *disp_base; + + attrs = 0; + attrs |= DNS_DISPATCHATTR_UDP; + attrs |= DNS_DISPATCHATTR_RANDOMPORT; + + attrmask = 0; + attrmask |= DNS_DISPATCHATTR_UDP; + attrmask |= DNS_DISPATCHATTR_TCP; + attrmask |= DNS_DISPATCHATTR_IPV4; + attrmask |= DNS_DISPATCHATTR_IPV6; + switch (isc_sockaddr_pf(&addrinfo->sockaddr)) { - case PF_INET: - dns_dispatch_attach(res->dispatchv4, &query->dispatch); + case AF_INET: + disp_base = res->dispatchv4; + attrs |= DNS_DISPATCHATTR_IPV4; break; - case PF_INET6: - dns_dispatch_attach(res->dispatchv6, &query->dispatch); + case AF_INET6: + disp_base = res->dispatchv6; + attrs |= DNS_DISPATCHATTR_IPV6; break; default: result = ISC_R_NOTIMPLEMENTED; goto cleanup_query; } + + result = dns_dispatch_getlocaladdress(disp_base, &localaddr); + if (result != ISC_R_SUCCESS) + goto cleanup_query; + if (isc_sockaddr_getport(&localaddr) == 0) { + result = dns_dispatch_getudp(res->dispatchmgr, + res->socketmgr, + res->taskmgr, + &localaddr, + 4096, 1000, 32768, + 16411, 16433, + attrs, attrmask, + &query->dispatch); + if (result != ISC_R_SUCCESS) + goto cleanup_query; + } else + dns_dispatch_attach(disp_base, &query->dispatch); /* * We should always have a valid dispatcher here. If we * don't support a protocol family, then its dispatcher @@ -1,4 +1,4 @@ -# $Id: version,v 1.26.2.17.2.31 2008/04/03 00:22:17 each Exp $ +# $Id: version,v 1.26.2.17.2.31.4.1 2008/05/22 21:11:13 each Exp $ # # This file must follow /bin/sh rules. It is imported directly via # configure. @@ -6,5 +6,5 @@ MAJORVER=9 MINORVER=3 PATCHVER=5 -RELEASETYPE= -RELEASEVER= +RELEASETYPE=-P +RELEASEVER=1 |