diff --git a/CHANGES b/CHANGES index f07ffbcb4b..90831d5187 100644 --- a/CHANGES +++ b/CHANGES @@ -1,3 +1,10 @@ + --- 9.10.0 released --- + +3806. [test] Improved system test portability. [RT #35625] + +3805. [contrib] Added contrib/perftcpdns, a performance testing tool + for DNS over TCP. [RT #35710] + --- 9.10.0rc1 released --- 3804. [bug] Corrected a race condition in dispatch.c in which diff --git a/bin/dnssec/Makefile.in b/bin/dnssec/Makefile.in index 28ced23f11..4f1bf9095d 100644 --- a/bin/dnssec/Makefile.in +++ b/bin/dnssec/Makefile.in @@ -56,12 +56,12 @@ SRCS = dnssec-dsfromkey.c dnssec-keyfromlabel.c dnssec-keygen.c \ MANPAGES = dnssec-dsfromkey.8 dnssec-keyfromlabel.8 dnssec-keygen.8 \ dnssec-revoke.8 dnssec-settime.8 dnssec-signzone.8 \ - dnssec-verify.8 + dnssec-verify.8 dnssec-importkey.8 HTMLPAGES = dnssec-dsfromkey.html dnssec-keyfromlabel.html \ dnssec-keygen.html dnssec-revoke.html \ dnssec-settime.html dnssec-signzone.html \ - dnssec-verify.html + dnssec-verify.html dnssec-importkey.html MANOBJS = ${MANPAGES} ${HTMLPAGES} diff --git a/bin/dnssec/dnssec-importkey.8 b/bin/dnssec/dnssec-importkey.8 index a7b3126107..7b51956d71 100644 --- a/bin/dnssec/dnssec-importkey.8 +++ b/bin/dnssec/dnssec-importkey.8 @@ -16,97 +16,100 @@ .\" .hy 0 .ad l -'\" t -.\" Title: dnssec-importkey -.\" Author: [see the "AUTHOR" section] -.\" Generator: DocBook XSL Stylesheets v1.78.1 -.\" Date: August 30, 2013 +.\" Title: dnssec\-importkey +.\" Author: +.\" Generator: DocBook XSL Stylesheets v1.71.1 +.\" Date: February 20, 2014 .\" Manual: BIND9 .\" Source: BIND9 -.\" Language: English .\" -.TH "DNSSEC\-IMPORTKEY" "8" "August 30, 2013" "BIND9" "BIND9" -.\" ----------------------------------------------------------------- -.\" * Define some portability stuff -.\" ----------------------------------------------------------------- -.\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -.\" http://bugs.debian.org/507673 -.\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html -.\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -.ie \n(.g .ds Aq \(aq -.el .ds Aq ' -.\" ----------------------------------------------------------------- -.\" * set default formatting -.\" ----------------------------------------------------------------- +.TH "DNSSEC\-IMPORTKEY" "8" "February 20, 2014" "BIND9" "BIND9" .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l -.\" ----------------------------------------------------------------- -.\" * MAIN CONTENT STARTS HERE * -.\" ----------------------------------------------------------------- .SH "NAME" -dnssec-importkey \- Import DNSKEY records from external systems so they can be managed\&. +dnssec\-importkey \- Import DNSKEY records from external systems so they can be managed. .SH "SYNOPSIS" .HP 17 -\fBdnssec\-importkey\fR [\fB\-f\ \fR\fB\fIfilename\fR\fR] [\fB\-K\ \fR\fB\fIdirectory\fR\fR] [\fB\-P\ \fR\fB\fIdate/offset\fR\fR] [\fB\-D\ \fR\fB\fIdate/offset\fR\fR] [\fB\-h\fR] [\fB\-v\ \fR\fB\fIlevel\fR\fR] [\fBkeyname\fR] +\fBdnssec\-importkey\fR [\fB\-K\ \fR\fB\fIdirectory\fR\fR] [\fB\-L\ \fR\fB\fIttl\fR\fR] [\fB\-P\ \fR\fB\fIdate/offset\fR\fR] [\fB\-D\ \fR\fB\fIdate/offset\fR\fR] [\fB\-h\fR] [\fB\-v\ \fR\fB\fIlevel\fR\fR] {\fBkeyfile\fR} +.HP 17 +\fBdnssec\-importkey\fR {\fB\-f\ \fR\fB\fIfilename\fR\fR} [\fB\-K\ \fR\fB\fIdirectory\fR\fR] [\fB\-L\ \fR\fB\fIttl\fR\fR] [\fB\-P\ \fR\fB\fIdate/offset\fR\fR] [\fB\-D\ \fR\fB\fIdate/offset\fR\fR] [\fB\-h\fR] [\fB\-v\ \fR\fB\fIlevel\fR\fR] [\fBdnsname\fR] .SH "DESCRIPTION" .PP \fBdnssec\-importkey\fR -read a DNSKEY record and generated a \&.key/\&.private key pair\&. Publication (\fB\-P\fR) and deletions (\fB\-D\fR) times can be set for the key\&. +reads a public DNSKEY record and generates a pair of .key/.private files. The DNSKEY record may be read from an existing .key file, in which case a corresponding .private file will be generated, or it may be read from any other file or from the standard input, in which case both .key and .private files will be generated. +.PP +The newly\-created .private file does +\fInot\fR +contain private key data, and cannot be used for signing. However, having a .private file makes it possible to set publication (\fB\-P\fR) and deletion (\fB\-D\fR) times for the key, which means the public key can be added to and removed from the DNSKEY RRset on schedule even if the true private key is stored offline. .SH "OPTIONS" .PP \-f \fIfilename\fR .RS 4 -Filename to read the key from\&. +Zone file mode: instead of a public keyfile name, the argument is the DNS domain name of a zone master file, which can be read from +\fBfile\fR. If the domain name is the same as +\fBfile\fR, then it may be omitted. +.sp +If +\fBfile\fR +is set to +"\-", then the zone data is read from the standard input. .RE .PP \-K \fIdirectory\fR .RS 4 -Sets the directory in which the key files are to reside\&. +Sets the directory in which the key files are to reside. .RE .PP \-L \fIttl\fR .RS 4 -Sets the default TTL to use for this key when it is converted into a DNSKEY RR\&. If the key is imported into a zone, this is the TTL that will be used for it, unless there was already a DNSKEY RRset in place, in which case the existing TTL would take precedence\&. importkey the default TTL to +Sets the default TTL to use for this key when it is converted into a DNSKEY RR. If the key is imported into a zone, this is the TTL that will be used for it, unless there was already a DNSKEY RRset in place, in which case the existing TTL would take precedence. Setting the default TTL to 0 or none -removes it\&. +removes it. .RE .PP \-h .RS 4 -Emit usage message and exit\&. +Emit usage message and exit. .RE .PP \-v \fIlevel\fR .RS 4 -Sets the debugging level\&. +Sets the debugging level. .RE .SH "TIMING OPTIONS" .PP -Dates can be expressed in the format YYYYMMDD or YYYYMMDDHHMMSS\&. If the argument begins with a \*(Aq+\*(Aq or \*(Aq\-\*(Aq, it is interpreted as an offset from the present time\&. For convenience, if such an offset is followed by one of the suffixes \*(Aqy\*(Aq, \*(Aqmo\*(Aq, \*(Aqw\*(Aq, \*(Aqd\*(Aq, \*(Aqh\*(Aq, or \*(Aqmi\*(Aq, then the offset is computed in years (defined as 365 24\-hour days, ignoring leap years), months (defined as 30 24\-hour days), weeks, days, hours, or minutes, respectively\&. Without a suffix, the offset is computed in seconds\&. To unset a date, use \*(Aqnone\*(Aq\&. +Dates can be expressed in the format YYYYMMDD or YYYYMMDDHHMMSS. If the argument begins with a '+' or '\-', it is interpreted as an offset from the present time. For convenience, if such an offset is followed by one of the suffixes 'y', 'mo', 'w', 'd', 'h', or 'mi', then the offset is computed in years (defined as 365 24\-hour days, ignoring leap years), months (defined as 30 24\-hour days), weeks, days, hours, or minutes, respectively. Without a suffix, the offset is computed in seconds. To explicitly prevent a date from being set, use 'none' or 'never'. .PP \-P \fIdate/offset\fR .RS 4 -Sets the date on which a key is to be published to the zone\&. After that date, the key will be included in the zone but will not be used to sign it\&. +Sets the date on which a key is to be published to the zone. After that date, the key will be included in the zone but will not be used to sign it. .RE .PP \-D \fIdate/offset\fR .RS 4 -Sets the date on which the key is to be deleted\&. After that date, the key will no longer be included in the zone\&. (It may remain in the key repository, however\&.) +Sets the date on which the key is to be deleted. After that date, the key will no longer be included in the zone. (It may remain in the key repository, however.) .RE +.SH "FILES" +.PP +A keyfile can be designed by the key identification +\fIKnnnn.+aaa+iiiii\fR +or the full file name +\fIKnnnn.+aaa+iiiii.key\fR +as generated by +dnssec\-keygen(8). .SH "SEE ALSO" .PP -\fBdnssec-keygen\fR(8), -\fBdnssec-signzone\fR(8), +\fBdnssec\-keygen\fR(8), +\fBdnssec\-signzone\fR(8), BIND 9 Administrator Reference Manual, -RFC 5011\&. +RFC 5011. .SH "AUTHOR" .PP Internet Systems Consortium .SH "COPYRIGHT" -.br -Copyright \(co 2013 Internet Systems Consortium, Inc. ("ISC") +Copyright \(co 2013, 2014 Internet Systems Consortium, Inc. ("ISC") .br diff --git a/bin/dnssec/dnssec-importkey.html b/bin/dnssec/dnssec-importkey.html index 55729ba56b..3b1c922acb 100644 --- a/bin/dnssec/dnssec-importkey.html +++ b/bin/dnssec/dnssec-importkey.html @@ -19,9 +19,9 @@ dnssec-importkey - + -
+

Name

@@ -29,23 +29,45 @@

Synopsis

-

dnssec-importkey [-f filename] [-K directory] [-P date/offset] [-D date/offset] [-h] [-v level] [keyname]

+

dnssec-importkey [-K directory] [-L ttl] [-P date/offset] [-D date/offset] [-h] [-v level] {keyfile}

+

dnssec-importkey {-f filename} [-K directory] [-L ttl] [-P date/offset] [-D date/offset] [-h] [-v level] [dnsname]

-
-

DESCRIPTION

-

dnssec-importkey - read a DNSKEY record and generated a .key/.private key pair. - Publication (-P) and deletions (-D) - times can be set for the key. +

+

DESCRIPTION

+

dnssec-importkey + reads a public DNSKEY record and generates a pair of + .key/.private files. The DNSKEY record may be read from an + existing .key file, in which case a corresponding .private file + will be generated, or it may be read from any other file or + from the standard input, in which case both .key and .private + files will be generated. +

+

+ The newly-created .private file does not + contain private key data, and cannot be used for signing. + However, having a .private file makes it possible to set + publication (-P) and deletion + (-D) times for the key, which means the + public key can be added to and removed from the DNSKEY RRset + on schedule even if the true private key is stored offline.

-
-

OPTIONS

-
+
+

OPTIONS

+
-f filename
-

- Filename to read the key from. -

+
+

+ Zone file mode: instead of a public keyfile name, the argument + is the DNS domain name of a zone master file, which can be read + from file. If the domain name is the same as + file, then it may be omitted. +

+

+ If file is set to "-", then + the zone data is read from the standard input. +

+
-K directory

Sets the directory in which the key files are to reside. @@ -56,7 +78,7 @@ into a DNSKEY RR. If the key is imported into a zone, this is the TTL that will be used for it, unless there was already a DNSKEY RRset in place, in which case the existing TTL - would take precedence. importkey the default TTL to + would take precedence. Setting the default TTL to 0 or none removes it.

-h
@@ -69,8 +91,8 @@

-
-

TIMING OPTIONS

+
+

TIMING OPTIONS

Dates can be expressed in the format YYYYMMDD or YYYYMMDDHHMMSS. If the argument begins with a '+' or '-', it is interpreted as @@ -79,9 +101,10 @@ then the offset is computed in years (defined as 365 24-hour days, ignoring leap years), months (defined as 30 24-hour days), weeks, days, hours, or minutes, respectively. Without a suffix, the offset - is computed in seconds. To unset a date, use 'none'. + is computed in seconds. To explicitly prevent a date from being + set, use 'none' or 'never'.

-
+
-P date/offset

Sets the date on which a key is to be published to the zone. @@ -96,16 +119,25 @@

-
-

SEE ALSO

+
+

FILES

+

+ A keyfile can be designed by the key identification + Knnnn.+aaa+iiiii or the full file name + Knnnn.+aaa+iiiii.key as generated by + dnssec-keygen(8). +

+
+
+

SEE ALSO

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

-
-

AUTHOR

+
+

AUTHOR

Internet Systems Consortium

diff --git a/bin/tests/system/autosign/setup.sh b/bin/tests/system/autosign/setup.sh index 39c655cea9..50c0048911 100644 --- a/bin/tests/system/autosign/setup.sh +++ b/bin/tests/system/autosign/setup.sh @@ -19,7 +19,7 @@ SYSTEMTESTTOP=.. . ./clean.sh -test -e $RANDFILE || $GENRANDOM 400 $RANDFILE +test -r $RANDFILE || $GENRANDOM 400 $RANDFILE echo "I:generating keys and preparing zones" cd ns1 && sh keygen.sh diff --git a/bin/tests/system/dlv/setup.sh b/bin/tests/system/dlv/setup.sh index ceb3e80a36..c75b00cae1 100644 --- a/bin/tests/system/dlv/setup.sh +++ b/bin/tests/system/dlv/setup.sh @@ -17,6 +17,6 @@ SYSTEMTESTTOP=.. . $SYSTEMTESTTOP/conf.sh -test -e $RANDFILE || $GENRANDOM 400 $RANDFILE +test -r $RANDFILE || $GENRANDOM 400 $RANDFILE (cd ns1 && sh -e sign.sh) diff --git a/bin/tests/system/dlvauto/setup.sh b/bin/tests/system/dlvauto/setup.sh index 39cba4cfef..774050079a 100644 --- a/bin/tests/system/dlvauto/setup.sh +++ b/bin/tests/system/dlvauto/setup.sh @@ -19,6 +19,6 @@ SYSTEMTESTTOP=.. sh clean.sh -test -e $RANDFILE || $GENRANDOM 400 $RANDFILE +test -r $RANDFILE || $GENRANDOM 400 $RANDFILE cd ns1 && sh sign.sh diff --git a/bin/tests/system/dlzexternal/setup.sh b/bin/tests/system/dlzexternal/setup.sh index f90301193f..38a51aea03 100644 --- a/bin/tests/system/dlzexternal/setup.sh +++ b/bin/tests/system/dlzexternal/setup.sh @@ -17,6 +17,6 @@ SYSTEMTESTTOP=.. . $SYSTEMTESTTOP/conf.sh -test -e $RANDFILE || $GENRANDOM 400 $RANDFILE +test -r $RANDFILE || $GENRANDOM 400 $RANDFILE $DDNSCONFGEN -q -r $RANDFILE -z example.nil > ns1/ddns.key diff --git a/bin/tests/system/dns64/setup.sh b/bin/tests/system/dns64/setup.sh index 854c8ee95a..f9700cdde6 100644 --- a/bin/tests/system/dns64/setup.sh +++ b/bin/tests/system/dns64/setup.sh @@ -19,6 +19,6 @@ sh clean.sh SYSTEMTESTTOP=.. . $SYSTEMTESTTOP/conf.sh -test -e $RANDFILE || $GENRANDOM 400 $RANDFILE +test -r $RANDFILE || $GENRANDOM 400 $RANDFILE cd ns1 && sh sign.sh diff --git a/bin/tests/system/dnssec/setup.sh b/bin/tests/system/dnssec/setup.sh index 983c716d8f..4d5ee498e5 100644 --- a/bin/tests/system/dnssec/setup.sh +++ b/bin/tests/system/dnssec/setup.sh @@ -20,7 +20,7 @@ SYSTEMTESTTOP=.. sh clean.sh -test -e $RANDFILE || $GENRANDOM 400 $RANDFILE +test -r $RANDFILE || $GENRANDOM 400 $RANDFILE cd ns1 && sh sign.sh diff --git a/bin/tests/system/dsdigest/setup.sh b/bin/tests/system/dsdigest/setup.sh index 998f9b43dc..74b5270e7d 100644 --- a/bin/tests/system/dsdigest/setup.sh +++ b/bin/tests/system/dsdigest/setup.sh @@ -17,6 +17,6 @@ SYSTEMTESTTOP=.. . $SYSTEMTESTTOP/conf.sh -test -e $RANDFILE || $GENRANDOM 400 $RANDFILE +test -r $RANDFILE || $GENRANDOM 400 $RANDFILE cd ns1 && sh sign.sh diff --git a/bin/tests/system/ecdsa/setup.sh b/bin/tests/system/ecdsa/setup.sh index 998f9b43dc..74b5270e7d 100644 --- a/bin/tests/system/ecdsa/setup.sh +++ b/bin/tests/system/ecdsa/setup.sh @@ -17,6 +17,6 @@ SYSTEMTESTTOP=.. . $SYSTEMTESTTOP/conf.sh -test -e $RANDFILE || $GENRANDOM 400 $RANDFILE +test -r $RANDFILE || $GENRANDOM 400 $RANDFILE cd ns1 && sh sign.sh diff --git a/bin/tests/system/filter-aaaa/setup.sh b/bin/tests/system/filter-aaaa/setup.sh index 63752a17e8..f86f4dc6b6 100644 --- a/bin/tests/system/filter-aaaa/setup.sh +++ b/bin/tests/system/filter-aaaa/setup.sh @@ -19,7 +19,7 @@ sh clean.sh SYSTEMTESTTOP=.. . $SYSTEMTESTTOP/conf.sh -test -e $RANDFILE || $GENRANDOM 400 $RANDFILE +test -r $RANDFILE || $GENRANDOM 400 $RANDFILE cp ns1/named1.conf ns1/named.conf cp ns2/named1.conf ns2/named.conf diff --git a/bin/tests/system/gost/setup.sh b/bin/tests/system/gost/setup.sh index 20633c8640..de5e80acb1 100644 --- a/bin/tests/system/gost/setup.sh +++ b/bin/tests/system/gost/setup.sh @@ -17,6 +17,6 @@ SYSTEMTESTTOP=.. . $SYSTEMTESTTOP/conf.sh -test -e $RANDFILE || $GENRANDOM 400 $RANDFILE +test -r $RANDFILE || $GENRANDOM 400 $RANDFILE cd ns1 && sh sign.sh diff --git a/bin/tests/system/inline/setup.sh b/bin/tests/system/inline/setup.sh index 2448f11e93..dea15961ac 100644 --- a/bin/tests/system/inline/setup.sh +++ b/bin/tests/system/inline/setup.sh @@ -17,7 +17,7 @@ sh clean.sh SYSTEMTESTTOP=.. . $SYSTEMTESTTOP/conf.sh -test -e $RANDFILE || $GENRANDOM 400 $RANDFILE +test -r $RANDFILE || $GENRANDOM 400 $RANDFILE cp ns1/root.db.in ns1/root.db rm -f ns1/root.db.signed diff --git a/bin/tests/system/masterformat/setup.sh b/bin/tests/system/masterformat/setup.sh index 039a7cced1..aa6f9e0a4f 100755 --- a/bin/tests/system/masterformat/setup.sh +++ b/bin/tests/system/masterformat/setup.sh @@ -15,7 +15,7 @@ SYSTEMTESTTOP=.. . $SYSTEMTESTTOP/conf.sh -test -e $RANDFILE || $GENRANDOM 400 $RANDFILE +test -r $RANDFILE || $GENRANDOM 400 $RANDFILE rm -f named-compilezone ln -s $CHECKZONE named-compilezone diff --git a/bin/tests/system/metadata/setup.sh b/bin/tests/system/metadata/setup.sh index 9fc08e9ff1..95e03e54a3 100644 --- a/bin/tests/system/metadata/setup.sh +++ b/bin/tests/system/metadata/setup.sh @@ -18,7 +18,7 @@ SYSTEMTESTTOP=.. . $SYSTEMTESTTOP/conf.sh sh ./clean.sh -test -e $RANDFILE || $GENRANDOM 400 $RANDFILE +test -r $RANDFILE || $GENRANDOM 400 $RANDFILE pzone=parent.nil czone=child.parent.nil diff --git a/bin/tests/system/nsupdate/setup.sh b/bin/tests/system/nsupdate/setup.sh index 93c6e7166e..31d1562345 100644 --- a/bin/tests/system/nsupdate/setup.sh +++ b/bin/tests/system/nsupdate/setup.sh @@ -18,7 +18,7 @@ SYSTEMTESTTOP=.. . $SYSTEMTESTTOP/conf.sh -test -e $RANDFILE || $GENRANDOM 400 $RANDFILE +test -r $RANDFILE || $GENRANDOM 400 $RANDFILE # # jnl and database files MUST be removed before we start diff --git a/bin/tests/system/pending/setup.sh b/bin/tests/system/pending/setup.sh index 3c3d53fb15..d1111ae1b6 100644 --- a/bin/tests/system/pending/setup.sh +++ b/bin/tests/system/pending/setup.sh @@ -17,6 +17,6 @@ SYSTEMTESTTOP=.. . $SYSTEMTESTTOP/conf.sh -test -e $RANDFILE || $GENRANDOM 400 $RANDFILE +test -r $RANDFILE || $GENRANDOM 400 $RANDFILE cd ns1 && sh -e sign.sh diff --git a/bin/tests/system/redirect/setup.sh b/bin/tests/system/redirect/setup.sh index fd40110b8c..d134b1c5ac 100644 --- a/bin/tests/system/redirect/setup.sh +++ b/bin/tests/system/redirect/setup.sh @@ -20,7 +20,7 @@ SYSTEMTESTTOP=.. sh clean.sh -test -e $RANDFILE || $GENRANDOM 400 $RANDFILE +test -r $RANDFILE || $GENRANDOM 400 $RANDFILE cp ns2/redirect.db.in ns2/redirect.db cp ns2/example.db.in ns2/example.db diff --git a/bin/tests/system/resolver/setup.sh b/bin/tests/system/resolver/setup.sh index 838842987e..f4c19d7dac 100644 --- a/bin/tests/system/resolver/setup.sh +++ b/bin/tests/system/resolver/setup.sh @@ -17,7 +17,7 @@ SYSTEMTESTTOP=.. . $SYSTEMTESTTOP/conf.sh -test -e $RANDFILE || $GENRANDOM 400 $RANDFILE +test -r $RANDFILE || $GENRANDOM 400 $RANDFILE cp ns4/tld1.db ns4/tld.db cp ns6/to-be-removed.tld.db.in ns6/to-be-removed.tld.db diff --git a/bin/tests/system/rndc/setup.sh b/bin/tests/system/rndc/setup.sh index fd0ad4c0a4..459a4f4744 100644 --- a/bin/tests/system/rndc/setup.sh +++ b/bin/tests/system/rndc/setup.sh @@ -21,7 +21,7 @@ SYSTEMTESTTOP=.. sh clean.sh -test -e $RANDFILE || $GENRANDOM 400 $RANDFILE +test -r $RANDFILE || $GENRANDOM 400 $RANDFILE sh ../genzone.sh 2 >ns2/nil.db sh ../genzone.sh 2 >ns2/other.db diff --git a/bin/tests/system/rpz/setup.sh b/bin/tests/system/rpz/setup.sh index 46690aff0f..9355c649e5 100644 --- a/bin/tests/system/rpz/setup.sh +++ b/bin/tests/system/rpz/setup.sh @@ -37,7 +37,7 @@ for NM in '' -2 -given -disabled -passthru -no-op -nodata -nxdomain -cname -wild done # sign the root and a zone in ns2 -test -e $RANDFILE || $GENRANDOM 400 $RANDFILE +test -r $RANDFILE || $GENRANDOM 400 $RANDFILE # $1=directory, $2=domain name, $3=input zone file, $4=output file signzone () { diff --git a/bin/tests/system/rsabigexponent/prereq.sh b/bin/tests/system/rsabigexponent/prereq.sh index 8203514908..cfb5183470 100644 --- a/bin/tests/system/rsabigexponent/prereq.sh +++ b/bin/tests/system/rsabigexponent/prereq.sh @@ -17,7 +17,7 @@ SYSTEMTESTTOP=.. . $SYSTEMTESTTOP/conf.sh -test -e $RANDFILE || $GENRANDOM 400 $RANDFILE +test -r $RANDFILE || $GENRANDOM 400 $RANDFILE if ./bigkey > /dev/null 2>&1 then diff --git a/bin/tests/system/rsabigexponent/setup.sh b/bin/tests/system/rsabigexponent/setup.sh index 90e504788c..f1f51433cb 100644 --- a/bin/tests/system/rsabigexponent/setup.sh +++ b/bin/tests/system/rsabigexponent/setup.sh @@ -19,6 +19,6 @@ sh clean.sh SYSTEMTESTTOP=.. . $SYSTEMTESTTOP/conf.sh -test -e $RANDFILE || $GENRANDOM 400 $RANDFILE +test -r $RANDFILE || $GENRANDOM 400 $RANDFILE cd ns1 && sh -e sign.sh diff --git a/bin/tests/system/smartsign/setup.sh b/bin/tests/system/smartsign/setup.sh index 8ef4f9811e..33c13101e3 100644 --- a/bin/tests/system/smartsign/setup.sh +++ b/bin/tests/system/smartsign/setup.sh @@ -18,4 +18,4 @@ SYSTEMTESTTOP=.. . $SYSTEMTESTTOP/conf.sh sh clean.sh -test -e $RANDFILE || $GENRANDOM 400 $RANDFILE +test -r $RANDFILE || $GENRANDOM 400 $RANDFILE diff --git a/bin/tests/system/staticstub/setup.sh b/bin/tests/system/staticstub/setup.sh index dba0b29b4d..ae552e6324 100755 --- a/bin/tests/system/staticstub/setup.sh +++ b/bin/tests/system/staticstub/setup.sh @@ -21,6 +21,6 @@ sed 's/SERVER_CONFIG_PLACEHOLDER/server-names { "ns.example.net"; };/' ns2/named sed 's/EXAMPLE_ZONE_PLACEHOLDER/zone "example" { type master; file "example.db.signed"; };/' ns3/named.conf.in > ns3/named.conf -test -e $RANDFILE || $GENRANDOM 400 $RANDFILE +test -r $RANDFILE || $GENRANDOM 400 $RANDFILE cd ns3 && sh -e sign.sh diff --git a/bin/tests/system/testcrypto.sh b/bin/tests/system/testcrypto.sh index c86966f9af..4cec7f4834 100644 --- a/bin/tests/system/testcrypto.sh +++ b/bin/tests/system/testcrypto.sh @@ -17,7 +17,7 @@ SYSTEMTESTTOP=${SYSTEMTESTTOP:=..} . $SYSTEMTESTTOP/conf.sh -test -e $RANDFILE || $GENRANDOM 400 $RANDFILE +test -r $RANDFILE || $GENRANDOM 400 $RANDFILE prog=$0 diff --git a/bin/tests/system/tkey/setup.sh b/bin/tests/system/tkey/setup.sh index 7a0cc1c387..488b5952e1 100644 --- a/bin/tests/system/tkey/setup.sh +++ b/bin/tests/system/tkey/setup.sh @@ -20,6 +20,6 @@ SYSTEMTESTTOP=.. sh clean.sh -test -e $RANDFILE || $GENRANDOM 400 $RANDFILE +test -r $RANDFILE || $GENRANDOM 400 $RANDFILE cd ns1 && sh setup.sh diff --git a/bin/tests/system/tsiggss/setup.sh b/bin/tests/system/tsiggss/setup.sh index 84f9a1d6c5..765334d713 100644 --- a/bin/tests/system/tsiggss/setup.sh +++ b/bin/tests/system/tsiggss/setup.sh @@ -19,7 +19,7 @@ SYSTEMTESTTOP=.. . $SYSTEMTESTTOP/conf.sh -test -e $RANDFILE || $GENRANDOM 400 $RANDFILE +test -r $RANDFILE || $GENRANDOM 400 $RANDFILE rm -f ns1/*.jnl ns1/K*.key ns1/K*.private ns1/_default.tsigkeys diff --git a/bin/tests/system/unknown/setup.sh b/bin/tests/system/unknown/setup.sh index 415e896c34..ea635f44f2 100644 --- a/bin/tests/system/unknown/setup.sh +++ b/bin/tests/system/unknown/setup.sh @@ -16,6 +16,6 @@ SYSTEMTESTTOP=.. . $SYSTEMTESTTOP/conf.sh sh clean.sh -test -e $RANDFILE || $GENRANDOM 400 $RANDFILE +test -r $RANDFILE || $GENRANDOM 400 $RANDFILE (cd ns3; sh -e sign.sh) diff --git a/bin/tests/system/verify/setup.sh b/bin/tests/system/verify/setup.sh index 5931aa314b..01a9643e4c 100644 --- a/bin/tests/system/verify/setup.sh +++ b/bin/tests/system/verify/setup.sh @@ -18,6 +18,6 @@ SYSTEMTESTTOP=.. . $SYSTEMTESTTOP/conf.sh sh clean.sh -test -e $RANDFILE || $GENRANDOM 400 $RANDFILE +test -r $RANDFILE || $GENRANDOM 400 $RANDFILE (cd zones && sh genzones.sh) diff --git a/bin/tests/system/wildcard/setup.sh b/bin/tests/system/wildcard/setup.sh index c21d1af605..1720521e39 100644 --- a/bin/tests/system/wildcard/setup.sh +++ b/bin/tests/system/wildcard/setup.sh @@ -17,6 +17,6 @@ SYSTEMTESTTOP=.. . $SYSTEMTESTTOP/conf.sh -test -e $RANDFILE || $GENRANDOM 400 $RANDFILE +test -r $RANDFILE || $GENRANDOM 400 $RANDFILE (cd ns1 && sh -e sign.sh) diff --git a/bin/tests/system/zonechecks/setup.sh b/bin/tests/system/zonechecks/setup.sh index 977cc3be27..713903270b 100644 --- a/bin/tests/system/zonechecks/setup.sh +++ b/bin/tests/system/zonechecks/setup.sh @@ -18,7 +18,7 @@ SYSTEMTESTTOP=.. . $SYSTEMTESTTOP/conf.sh sh clean.sh -test -e $RANDFILE || $GENRANDOM 400 $RANDFILE +test -r $RANDFILE || $GENRANDOM 400 $RANDFILE sh ../genzone.sh 1 > ns1/master.db cd ns1 diff --git a/contrib/README b/contrib/README index b6f1b3e21b..c70397255d 100644 --- a/contrib/README +++ b/contrib/README @@ -11,6 +11,10 @@ and other useful additions to BIND 9. It includes: A DNS query performance testing tool + - perftcpdns/ + + A performance testing tool for DNS over TCP + - dane/ mkdane.sh generates TLSA records for use with DNS-based diff --git a/contrib/perftcpdns/Makefile.in b/contrib/perftcpdns/Makefile.in new file mode 100644 index 0000000000..96b8019a7e --- /dev/null +++ b/contrib/perftcpdns/Makefile.in @@ -0,0 +1,21 @@ +# Copyright (C) 2014 Internet Systems Consortium, Inc. ("ISC") + +CC = @CC@ +LIBOBJS = @LIBOBJS@ +LIBS = @LIBS@ +DEFS = @DEFS@ + +perftcpdns: perftcpdns.o $(LIBOBJS) + $(CC) $(CFLAGS) $(DEFS) $(LDFLAGS) perftcpdns.o $(LIBOBJS) $(LIBS) -o perftcpdns + +perftcpdns.o: perftcpdns.c + $(CC) $(CFLAGS) $(DEFS) -c perftcpdns.c + +clean: + rm -f *.o perftcpdns + +distclean: clean + rm -f config.log + rm -f config.cache + rm -f config.status + rm -f Makefile diff --git a/contrib/perftcpdns/configure b/contrib/perftcpdns/configure new file mode 100755 index 0000000000..b533420be2 --- /dev/null +++ b/contrib/perftcpdns/configure @@ -0,0 +1,4270 @@ +#! /bin/sh +# Guess values for system-dependent variables and create Makefiles. +# Generated by GNU Autoconf 2.69. +# +# +# Copyright (C) 1992-1996, 1998-2012 Free Software Foundation, Inc. +# +# +# This configure script is free software; the Free Software Foundation +# gives unlimited permission to copy, distribute and modify it. +## -------------------- ## +## M4sh Initialization. ## +## -------------------- ## + +# Be more Bourne compatible +DUALCASE=1; export DUALCASE # for MKS sh +if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then : + emulate sh + NULLCMD=: + # Pre-4.2 versions of Zsh do word splitting on ${1+"$@"}, which + # is contrary to our usage. Disable this feature. + alias -g '${1+"$@"}'='"$@"' + setopt NO_GLOB_SUBST +else + case `(set -o) 2>/dev/null` in #( + *posix*) : + set -o posix ;; #( + *) : + ;; +esac +fi + + +as_nl=' +' +export as_nl +# Printing a long string crashes Solaris 7 /usr/bin/printf. +as_echo='\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\' +as_echo=$as_echo$as_echo$as_echo$as_echo$as_echo +as_echo=$as_echo$as_echo$as_echo$as_echo$as_echo$as_echo +# Prefer a ksh shell builtin over an external printf program on Solaris, +# but without wasting forks for bash or zsh. +if test -z "$BASH_VERSION$ZSH_VERSION" \ + && (test "X`print -r -- $as_echo`" = "X$as_echo") 2>/dev/null; then + as_echo='print -r --' + as_echo_n='print -rn --' +elif (test "X`printf %s $as_echo`" = "X$as_echo") 2>/dev/null; then + as_echo='printf %s\n' + as_echo_n='printf %s' +else + if test "X`(/usr/ucb/echo -n -n $as_echo) 2>/dev/null`" = "X-n $as_echo"; then + as_echo_body='eval /usr/ucb/echo -n "$1$as_nl"' + as_echo_n='/usr/ucb/echo -n' + else + as_echo_body='eval expr "X$1" : "X\\(.*\\)"' + as_echo_n_body='eval + arg=$1; + case $arg in #( + *"$as_nl"*) + expr "X$arg" : "X\\(.*\\)$as_nl"; + arg=`expr "X$arg" : ".*$as_nl\\(.*\\)"`;; + esac; + expr "X$arg" : "X\\(.*\\)" | tr -d "$as_nl" + ' + export as_echo_n_body + as_echo_n='sh -c $as_echo_n_body as_echo' + fi + export as_echo_body + as_echo='sh -c $as_echo_body as_echo' +fi + +# The user is always right. +if test "${PATH_SEPARATOR+set}" != set; then + PATH_SEPARATOR=: + (PATH='/bin;/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 && { + (PATH='/bin:/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 || + PATH_SEPARATOR=';' + } +fi + + +# IFS +# We need space, tab and new line, in precisely that order. Quoting is +# there to prevent editors from complaining about space-tab. +# (If _AS_PATH_WALK were called with IFS unset, it would disable word +# splitting by setting IFS to empty value.) +IFS=" "" $as_nl" + +# Find who we are. Look in the path if we contain no directory separator. +as_myself= +case $0 in #(( + *[\\/]* ) as_myself=$0 ;; + *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + test -r "$as_dir/$0" && as_myself=$as_dir/$0 && break + done +IFS=$as_save_IFS + + ;; +esac +# We did not find ourselves, most probably we were run as `sh COMMAND' +# in which case we are not to be found in the path. +if test "x$as_myself" = x; then + as_myself=$0 +fi +if test ! -f "$as_myself"; then + $as_echo "$as_myself: error: cannot find myself; rerun with an absolute file name" >&2 + exit 1 +fi + +# Unset variables that we do not need and which cause bugs (e.g. in +# pre-3.0 UWIN ksh). But do not cause bugs in bash 2.01; the "|| exit 1" +# suppresses any "Segmentation fault" message there. '((' could +# trigger a bug in pdksh 5.2.14. +for as_var in BASH_ENV ENV MAIL MAILPATH +do eval test x\${$as_var+set} = xset \ + && ( (unset $as_var) || exit 1) >/dev/null 2>&1 && unset $as_var || : +done +PS1='$ ' +PS2='> ' +PS4='+ ' + +# NLS nuisances. +LC_ALL=C +export LC_ALL +LANGUAGE=C +export LANGUAGE + +# CDPATH. +(unset CDPATH) >/dev/null 2>&1 && unset CDPATH + +# Use a proper internal environment variable to ensure we don't fall + # into an infinite loop, continuously re-executing ourselves. + if test x"${_as_can_reexec}" != xno && test "x$CONFIG_SHELL" != x; then + _as_can_reexec=no; export _as_can_reexec; + # We cannot yet assume a decent shell, so we have to provide a +# neutralization value for shells without unset; and this also +# works around shells that cannot unset nonexistent variables. +# Preserve -v and -x to the replacement shell. +BASH_ENV=/dev/null +ENV=/dev/null +(unset BASH_ENV) >/dev/null 2>&1 && unset BASH_ENV ENV +case $- in # (((( + *v*x* | *x*v* ) as_opts=-vx ;; + *v* ) as_opts=-v ;; + *x* ) as_opts=-x ;; + * ) as_opts= ;; +esac +exec $CONFIG_SHELL $as_opts "$as_myself" ${1+"$@"} +# Admittedly, this is quite paranoid, since all the known shells bail +# out after a failed `exec'. +$as_echo "$0: could not re-execute with $CONFIG_SHELL" >&2 +as_fn_exit 255 + fi + # We don't want this to propagate to other subprocesses. + { _as_can_reexec=; unset _as_can_reexec;} +if test "x$CONFIG_SHELL" = x; then + as_bourne_compatible="if test -n \"\${ZSH_VERSION+set}\" && (emulate sh) >/dev/null 2>&1; then : + emulate sh + NULLCMD=: + # Pre-4.2 versions of Zsh do word splitting on \${1+\"\$@\"}, which + # is contrary to our usage. Disable this feature. + alias -g '\${1+\"\$@\"}'='\"\$@\"' + setopt NO_GLOB_SUBST +else + case \`(set -o) 2>/dev/null\` in #( + *posix*) : + set -o posix ;; #( + *) : + ;; +esac +fi +" + as_required="as_fn_return () { (exit \$1); } +as_fn_success () { as_fn_return 0; } +as_fn_failure () { as_fn_return 1; } +as_fn_ret_success () { return 0; } +as_fn_ret_failure () { return 1; } + +exitcode=0 +as_fn_success || { exitcode=1; echo as_fn_success failed.; } +as_fn_failure && { exitcode=1; echo as_fn_failure succeeded.; } +as_fn_ret_success || { exitcode=1; echo as_fn_ret_success failed.; } +as_fn_ret_failure && { exitcode=1; echo as_fn_ret_failure succeeded.; } +if ( set x; as_fn_ret_success y && test x = \"\$1\" ); then : + +else + exitcode=1; echo positional parameters were not saved. +fi +test x\$exitcode = x0 || exit 1 +test -x / || exit 1" + as_suggested=" as_lineno_1=";as_suggested=$as_suggested$LINENO;as_suggested=$as_suggested" as_lineno_1a=\$LINENO + as_lineno_2=";as_suggested=$as_suggested$LINENO;as_suggested=$as_suggested" as_lineno_2a=\$LINENO + eval 'test \"x\$as_lineno_1'\$as_run'\" != \"x\$as_lineno_2'\$as_run'\" && + test \"x\`expr \$as_lineno_1'\$as_run' + 1\`\" = \"x\$as_lineno_2'\$as_run'\"' || exit 1" + if (eval "$as_required") 2>/dev/null; then : + as_have_required=yes +else + as_have_required=no +fi + if test x$as_have_required = xyes && (eval "$as_suggested") 2>/dev/null; then : + +else + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +as_found=false +for as_dir in /bin$PATH_SEPARATOR/usr/bin$PATH_SEPARATOR$PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + as_found=: + case $as_dir in #( + /*) + for as_base in sh bash ksh sh5; do + # Try only shells that exist, to save several forks. + as_shell=$as_dir/$as_base + if { test -f "$as_shell" || test -f "$as_shell.exe"; } && + { $as_echo "$as_bourne_compatible""$as_required" | as_run=a "$as_shell"; } 2>/dev/null; then : + CONFIG_SHELL=$as_shell as_have_required=yes + if { $as_echo "$as_bourne_compatible""$as_suggested" | as_run=a "$as_shell"; } 2>/dev/null; then : + break 2 +fi +fi + done;; + esac + as_found=false +done +$as_found || { if { test -f "$SHELL" || test -f "$SHELL.exe"; } && + { $as_echo "$as_bourne_compatible""$as_required" | as_run=a "$SHELL"; } 2>/dev/null; then : + CONFIG_SHELL=$SHELL as_have_required=yes +fi; } +IFS=$as_save_IFS + + + if test "x$CONFIG_SHELL" != x; then : + export CONFIG_SHELL + # We cannot yet assume a decent shell, so we have to provide a +# neutralization value for shells without unset; and this also +# works around shells that cannot unset nonexistent variables. +# Preserve -v and -x to the replacement shell. +BASH_ENV=/dev/null +ENV=/dev/null +(unset BASH_ENV) >/dev/null 2>&1 && unset BASH_ENV ENV +case $- in # (((( + *v*x* | *x*v* ) as_opts=-vx ;; + *v* ) as_opts=-v ;; + *x* ) as_opts=-x ;; + * ) as_opts= ;; +esac +exec $CONFIG_SHELL $as_opts "$as_myself" ${1+"$@"} +# Admittedly, this is quite paranoid, since all the known shells bail +# out after a failed `exec'. +$as_echo "$0: could not re-execute with $CONFIG_SHELL" >&2 +exit 255 +fi + + if test x$as_have_required = xno; then : + $as_echo "$0: This script requires a shell more modern than all" + $as_echo "$0: the shells that I found on your system." + if test x${ZSH_VERSION+set} = xset ; then + $as_echo "$0: In particular, zsh $ZSH_VERSION has bugs and should" + $as_echo "$0: be upgraded to zsh 4.3.4 or later." + else + $as_echo "$0: Please tell bug-autoconf@gnu.org about your system, +$0: including any error possibly output before this +$0: message. Then install a modern shell, or manually run +$0: the script under such a shell if you do have one." + fi + exit 1 +fi +fi +fi +SHELL=${CONFIG_SHELL-/bin/sh} +export SHELL +# Unset more variables known to interfere with behavior of common tools. +CLICOLOR_FORCE= GREP_OPTIONS= +unset CLICOLOR_FORCE GREP_OPTIONS + +## --------------------- ## +## M4sh Shell Functions. ## +## --------------------- ## +# as_fn_unset VAR +# --------------- +# Portably unset VAR. +as_fn_unset () +{ + { eval $1=; unset $1;} +} +as_unset=as_fn_unset + +# as_fn_set_status STATUS +# ----------------------- +# Set $? to STATUS, without forking. +as_fn_set_status () +{ + return $1 +} # as_fn_set_status + +# as_fn_exit STATUS +# ----------------- +# Exit the shell with STATUS, even in a "trap 0" or "set -e" context. +as_fn_exit () +{ + set +e + as_fn_set_status $1 + exit $1 +} # as_fn_exit + +# as_fn_mkdir_p +# ------------- +# Create "$as_dir" as a directory, including parents if necessary. +as_fn_mkdir_p () +{ + + case $as_dir in #( + -*) as_dir=./$as_dir;; + esac + test -d "$as_dir" || eval $as_mkdir_p || { + as_dirs= + while :; do + case $as_dir in #( + *\'*) as_qdir=`$as_echo "$as_dir" | sed "s/'/'\\\\\\\\''/g"`;; #'( + *) as_qdir=$as_dir;; + esac + as_dirs="'$as_qdir' $as_dirs" + as_dir=`$as_dirname -- "$as_dir" || +$as_expr X"$as_dir" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ + X"$as_dir" : 'X\(//\)[^/]' \| \ + X"$as_dir" : 'X\(//\)$' \| \ + X"$as_dir" : 'X\(/\)' \| . 2>/dev/null || +$as_echo X"$as_dir" | + sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ + s//\1/ + q + } + /^X\(\/\/\)[^/].*/{ + s//\1/ + q + } + /^X\(\/\/\)$/{ + s//\1/ + q + } + /^X\(\/\).*/{ + s//\1/ + q + } + s/.*/./; q'` + test -d "$as_dir" && break + done + test -z "$as_dirs" || eval "mkdir $as_dirs" + } || test -d "$as_dir" || as_fn_error $? "cannot create directory $as_dir" + + +} # as_fn_mkdir_p + +# as_fn_executable_p FILE +# ----------------------- +# Test if FILE is an executable regular file. +as_fn_executable_p () +{ + test -f "$1" && test -x "$1" +} # as_fn_executable_p +# as_fn_append VAR VALUE +# ---------------------- +# Append the text in VALUE to the end of the definition contained in VAR. Take +# advantage of any shell optimizations that allow amortized linear growth over +# repeated appends, instead of the typical quadratic growth present in naive +# implementations. +if (eval "as_var=1; as_var+=2; test x\$as_var = x12") 2>/dev/null; then : + eval 'as_fn_append () + { + eval $1+=\$2 + }' +else + as_fn_append () + { + eval $1=\$$1\$2 + } +fi # as_fn_append + +# as_fn_arith ARG... +# ------------------ +# Perform arithmetic evaluation on the ARGs, and store the result in the +# global $as_val. Take advantage of shells that can avoid forks. The arguments +# must be portable across $(()) and expr. +if (eval "test \$(( 1 + 1 )) = 2") 2>/dev/null; then : + eval 'as_fn_arith () + { + as_val=$(( $* )) + }' +else + as_fn_arith () + { + as_val=`expr "$@" || test $? -eq 1` + } +fi # as_fn_arith + + +# as_fn_error STATUS ERROR [LINENO LOG_FD] +# ---------------------------------------- +# Output "`basename $0`: error: ERROR" to stderr. If LINENO and LOG_FD are +# provided, also output the error to LOG_FD, referencing LINENO. Then exit the +# script with STATUS, using 1 if that was 0. +as_fn_error () +{ + as_status=$1; test $as_status -eq 0 && as_status=1 + if test "$4"; then + as_lineno=${as_lineno-"$3"} as_lineno_stack=as_lineno_stack=$as_lineno_stack + $as_echo "$as_me:${as_lineno-$LINENO}: error: $2" >&$4 + fi + $as_echo "$as_me: error: $2" >&2 + as_fn_exit $as_status +} # as_fn_error + +if expr a : '\(a\)' >/dev/null 2>&1 && + test "X`expr 00001 : '.*\(...\)'`" = X001; then + as_expr=expr +else + as_expr=false +fi + +if (basename -- /) >/dev/null 2>&1 && test "X`basename -- / 2>&1`" = "X/"; then + as_basename=basename +else + as_basename=false +fi + +if (as_dir=`dirname -- /` && test "X$as_dir" = X/) >/dev/null 2>&1; then + as_dirname=dirname +else + as_dirname=false +fi + +as_me=`$as_basename -- "$0" || +$as_expr X/"$0" : '.*/\([^/][^/]*\)/*$' \| \ + X"$0" : 'X\(//\)$' \| \ + X"$0" : 'X\(/\)' \| . 2>/dev/null || +$as_echo X/"$0" | + sed '/^.*\/\([^/][^/]*\)\/*$/{ + s//\1/ + q + } + /^X\/\(\/\/\)$/{ + s//\1/ + q + } + /^X\/\(\/\).*/{ + s//\1/ + q + } + s/.*/./; q'` + +# Avoid depending upon Character Ranges. +as_cr_letters='abcdefghijklmnopqrstuvwxyz' +as_cr_LETTERS='ABCDEFGHIJKLMNOPQRSTUVWXYZ' +as_cr_Letters=$as_cr_letters$as_cr_LETTERS +as_cr_digits='0123456789' +as_cr_alnum=$as_cr_Letters$as_cr_digits + + + as_lineno_1=$LINENO as_lineno_1a=$LINENO + as_lineno_2=$LINENO as_lineno_2a=$LINENO + eval 'test "x$as_lineno_1'$as_run'" != "x$as_lineno_2'$as_run'" && + test "x`expr $as_lineno_1'$as_run' + 1`" = "x$as_lineno_2'$as_run'"' || { + # Blame Lee E. McMahon (1931-1989) for sed's syntax. :-) + sed -n ' + p + /[$]LINENO/= + ' <$as_myself | + sed ' + s/[$]LINENO.*/&-/ + t lineno + b + :lineno + N + :loop + s/[$]LINENO\([^'$as_cr_alnum'_].*\n\)\(.*\)/\2\1\2/ + t loop + s/-\n.*// + ' >$as_me.lineno && + chmod +x "$as_me.lineno" || + { $as_echo "$as_me: error: cannot create $as_me.lineno; rerun with a POSIX shell" >&2; as_fn_exit 1; } + + # If we had to re-execute with $CONFIG_SHELL, we're ensured to have + # already done that, so ensure we don't try to do so again and fall + # in an infinite loop. This has already happened in practice. + _as_can_reexec=no; export _as_can_reexec + # Don't try to exec as it changes $[0], causing all sort of problems + # (the dirname of $[0] is not the place where we might find the + # original and so on. Autoconf is especially sensitive to this). + . "./$as_me.lineno" + # Exit status is that of the last command. + exit +} + +ECHO_C= ECHO_N= ECHO_T= +case `echo -n x` in #((((( +-n*) + case `echo 'xy\c'` in + *c*) ECHO_T=' ';; # ECHO_T is single tab character. + xy) ECHO_C='\c';; + *) echo `echo ksh88 bug on AIX 6.1` > /dev/null + ECHO_T=' ';; + esac;; +*) + ECHO_N='-n';; +esac + +rm -f conf$$ conf$$.exe conf$$.file +if test -d conf$$.dir; then + rm -f conf$$.dir/conf$$.file +else + rm -f conf$$.dir + mkdir conf$$.dir 2>/dev/null +fi +if (echo >conf$$.file) 2>/dev/null; then + if ln -s conf$$.file conf$$ 2>/dev/null; then + as_ln_s='ln -s' + # ... but there are two gotchas: + # 1) On MSYS, both `ln -s file dir' and `ln file dir' fail. + # 2) DJGPP < 2.04 has no symlinks; `ln -s' creates a wrapper executable. + # In both cases, we have to default to `cp -pR'. + ln -s conf$$.file conf$$.dir 2>/dev/null && test ! -f conf$$.exe || + as_ln_s='cp -pR' + elif ln conf$$.file conf$$ 2>/dev/null; then + as_ln_s=ln + else + as_ln_s='cp -pR' + fi +else + as_ln_s='cp -pR' +fi +rm -f conf$$ conf$$.exe conf$$.dir/conf$$.file conf$$.file +rmdir conf$$.dir 2>/dev/null + +if mkdir -p . 2>/dev/null; then + as_mkdir_p='mkdir -p "$as_dir"' +else + test -d ./-p && rmdir ./-p + as_mkdir_p=false +fi + +as_test_x='test -x' +as_executable_p=as_fn_executable_p + +# Sed expression to map a string onto a valid CPP name. +as_tr_cpp="eval sed 'y%*$as_cr_letters%P$as_cr_LETTERS%;s%[^_$as_cr_alnum]%_%g'" + +# Sed expression to map a string onto a valid variable name. +as_tr_sh="eval sed 'y%*+%pp%;s%[^_$as_cr_alnum]%_%g'" + + +test -n "$DJDIR" || exec 7<&0 &1 + +# Name of the host. +# hostname on some systems (SVR3.2, old GNU/Linux) returns a bogus exit status, +# so uname gets run too. +ac_hostname=`(hostname || uname -n) 2>/dev/null | sed 1q` + +# +# Initializations. +# +ac_default_prefix=/usr/local +ac_clean_files= +ac_config_libobj_dir=. +LIBOBJS= +cross_compiling=no +subdirs= +MFLAGS= +MAKEFLAGS= + +# Identity of this package. +PACKAGE_NAME= +PACKAGE_TARNAME= +PACKAGE_VERSION= +PACKAGE_STRING= +PACKAGE_BUGREPORT= +PACKAGE_URL= + +ac_unique_file="perftcpdns.c" +ac_subst_vars='LTLIBOBJS +LIBOBJS +OBJEXT +EXEEXT +ac_ct_CC +CPPFLAGS +LDFLAGS +CFLAGS +CC +target_alias +host_alias +build_alias +LIBS +ECHO_T +ECHO_N +ECHO_C +DEFS +mandir +localedir +libdir +psdir +pdfdir +dvidir +htmldir +infodir +docdir +oldincludedir +includedir +localstatedir +sharedstatedir +sysconfdir +datadir +datarootdir +libexecdir +sbindir +bindir +program_transform_name +prefix +exec_prefix +PACKAGE_URL +PACKAGE_BUGREPORT +PACKAGE_STRING +PACKAGE_VERSION +PACKAGE_TARNAME +PACKAGE_NAME +PATH_SEPARATOR +SHELL' +ac_subst_files='' +ac_user_opts=' +enable_option_checking +' + ac_precious_vars='build_alias +host_alias +target_alias +CC +CFLAGS +LDFLAGS +LIBS +CPPFLAGS' + + +# Initialize some variables set by options. +ac_init_help= +ac_init_version=false +ac_unrecognized_opts= +ac_unrecognized_sep= +# The variables have the same names as the options, with +# dashes changed to underlines. +cache_file=/dev/null +exec_prefix=NONE +no_create= +no_recursion= +prefix=NONE +program_prefix=NONE +program_suffix=NONE +program_transform_name=s,x,x, +silent= +site= +srcdir= +verbose= +x_includes=NONE +x_libraries=NONE + +# Installation directory options. +# These are left unexpanded so users can "make install exec_prefix=/foo" +# and all the variables that are supposed to be based on exec_prefix +# by default will actually change. +# Use braces instead of parens because sh, perl, etc. also accept them. +# (The list follows the same order as the GNU Coding Standards.) +bindir='${exec_prefix}/bin' +sbindir='${exec_prefix}/sbin' +libexecdir='${exec_prefix}/libexec' +datarootdir='${prefix}/share' +datadir='${datarootdir}' +sysconfdir='${prefix}/etc' +sharedstatedir='${prefix}/com' +localstatedir='${prefix}/var' +includedir='${prefix}/include' +oldincludedir='/usr/include' +docdir='${datarootdir}/doc/${PACKAGE}' +infodir='${datarootdir}/info' +htmldir='${docdir}' +dvidir='${docdir}' +pdfdir='${docdir}' +psdir='${docdir}' +libdir='${exec_prefix}/lib' +localedir='${datarootdir}/locale' +mandir='${datarootdir}/man' + +ac_prev= +ac_dashdash= +for ac_option +do + # If the previous option needs an argument, assign it. + if test -n "$ac_prev"; then + eval $ac_prev=\$ac_option + ac_prev= + continue + fi + + case $ac_option in + *=?*) ac_optarg=`expr "X$ac_option" : '[^=]*=\(.*\)'` ;; + *=) ac_optarg= ;; + *) ac_optarg=yes ;; + esac + + # Accept the important Cygnus configure options, so we can diagnose typos. + + case $ac_dashdash$ac_option in + --) + ac_dashdash=yes ;; + + -bindir | --bindir | --bindi | --bind | --bin | --bi) + ac_prev=bindir ;; + -bindir=* | --bindir=* | --bindi=* | --bind=* | --bin=* | --bi=*) + bindir=$ac_optarg ;; + + -build | --build | --buil | --bui | --bu) + ac_prev=build_alias ;; + -build=* | --build=* | --buil=* | --bui=* | --bu=*) + build_alias=$ac_optarg ;; + + -cache-file | --cache-file | --cache-fil | --cache-fi \ + | --cache-f | --cache- | --cache | --cach | --cac | --ca | --c) + ac_prev=cache_file ;; + -cache-file=* | --cache-file=* | --cache-fil=* | --cache-fi=* \ + | --cache-f=* | --cache-=* | --cache=* | --cach=* | --cac=* | --ca=* | --c=*) + cache_file=$ac_optarg ;; + + --config-cache | -C) + cache_file=config.cache ;; + + -datadir | --datadir | --datadi | --datad) + ac_prev=datadir ;; + -datadir=* | --datadir=* | --datadi=* | --datad=*) + datadir=$ac_optarg ;; + + -datarootdir | --datarootdir | --datarootdi | --datarootd | --dataroot \ + | --dataroo | --dataro | --datar) + ac_prev=datarootdir ;; + -datarootdir=* | --datarootdir=* | --datarootdi=* | --datarootd=* \ + | --dataroot=* | --dataroo=* | --dataro=* | --datar=*) + datarootdir=$ac_optarg ;; + + -disable-* | --disable-*) + ac_useropt=`expr "x$ac_option" : 'x-*disable-\(.*\)'` + # Reject names that are not valid shell variable names. + expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null && + as_fn_error $? "invalid feature name: $ac_useropt" + ac_useropt_orig=$ac_useropt + ac_useropt=`$as_echo "$ac_useropt" | sed 's/[-+.]/_/g'` + case $ac_user_opts in + *" +"enable_$ac_useropt" +"*) ;; + *) ac_unrecognized_opts="$ac_unrecognized_opts$ac_unrecognized_sep--disable-$ac_useropt_orig" + ac_unrecognized_sep=', ';; + esac + eval enable_$ac_useropt=no ;; + + -docdir | --docdir | --docdi | --doc | --do) + ac_prev=docdir ;; + -docdir=* | --docdir=* | --docdi=* | --doc=* | --do=*) + docdir=$ac_optarg ;; + + -dvidir | --dvidir | --dvidi | --dvid | --dvi | --dv) + ac_prev=dvidir ;; + -dvidir=* | --dvidir=* | --dvidi=* | --dvid=* | --dvi=* | --dv=*) + dvidir=$ac_optarg ;; + + -enable-* | --enable-*) + ac_useropt=`expr "x$ac_option" : 'x-*enable-\([^=]*\)'` + # Reject names that are not valid shell variable names. + expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null && + as_fn_error $? "invalid feature name: $ac_useropt" + ac_useropt_orig=$ac_useropt + ac_useropt=`$as_echo "$ac_useropt" | sed 's/[-+.]/_/g'` + case $ac_user_opts in + *" +"enable_$ac_useropt" +"*) ;; + *) ac_unrecognized_opts="$ac_unrecognized_opts$ac_unrecognized_sep--enable-$ac_useropt_orig" + ac_unrecognized_sep=', ';; + esac + eval enable_$ac_useropt=\$ac_optarg ;; + + -exec-prefix | --exec_prefix | --exec-prefix | --exec-prefi \ + | --exec-pref | --exec-pre | --exec-pr | --exec-p | --exec- \ + | --exec | --exe | --ex) + ac_prev=exec_prefix ;; + -exec-prefix=* | --exec_prefix=* | --exec-prefix=* | --exec-prefi=* \ + | --exec-pref=* | --exec-pre=* | --exec-pr=* | --exec-p=* | --exec-=* \ + | --exec=* | --exe=* | --ex=*) + exec_prefix=$ac_optarg ;; + + -gas | --gas | --ga | --g) + # Obsolete; use --with-gas. + with_gas=yes ;; + + -help | --help | --hel | --he | -h) + ac_init_help=long ;; + -help=r* | --help=r* | --hel=r* | --he=r* | -hr*) + ac_init_help=recursive ;; + -help=s* | --help=s* | --hel=s* | --he=s* | -hs*) + ac_init_help=short ;; + + -host | --host | --hos | --ho) + ac_prev=host_alias ;; + -host=* | --host=* | --hos=* | --ho=*) + host_alias=$ac_optarg ;; + + -htmldir | --htmldir | --htmldi | --htmld | --html | --htm | --ht) + ac_prev=htmldir ;; + -htmldir=* | --htmldir=* | --htmldi=* | --htmld=* | --html=* | --htm=* \ + | --ht=*) + htmldir=$ac_optarg ;; + + -includedir | --includedir | --includedi | --included | --include \ + | --includ | --inclu | --incl | --inc) + ac_prev=includedir ;; + -includedir=* | --includedir=* | --includedi=* | --included=* | --include=* \ + | --includ=* | --inclu=* | --incl=* | --inc=*) + includedir=$ac_optarg ;; + + -infodir | --infodir | --infodi | --infod | --info | --inf) + ac_prev=infodir ;; + -infodir=* | --infodir=* | --infodi=* | --infod=* | --info=* | --inf=*) + infodir=$ac_optarg ;; + + -libdir | --libdir | --libdi | --libd) + ac_prev=libdir ;; + -libdir=* | --libdir=* | --libdi=* | --libd=*) + libdir=$ac_optarg ;; + + -libexecdir | --libexecdir | --libexecdi | --libexecd | --libexec \ + | --libexe | --libex | --libe) + ac_prev=libexecdir ;; + -libexecdir=* | --libexecdir=* | --libexecdi=* | --libexecd=* | --libexec=* \ + | --libexe=* | --libex=* | --libe=*) + libexecdir=$ac_optarg ;; + + -localedir | --localedir | --localedi | --localed | --locale) + ac_prev=localedir ;; + -localedir=* | --localedir=* | --localedi=* | --localed=* | --locale=*) + localedir=$ac_optarg ;; + + -localstatedir | --localstatedir | --localstatedi | --localstated \ + | --localstate | --localstat | --localsta | --localst | --locals) + ac_prev=localstatedir ;; + -localstatedir=* | --localstatedir=* | --localstatedi=* | --localstated=* \ + | --localstate=* | --localstat=* | --localsta=* | --localst=* | --locals=*) + localstatedir=$ac_optarg ;; + + -mandir | --mandir | --mandi | --mand | --man | --ma | --m) + ac_prev=mandir ;; + -mandir=* | --mandir=* | --mandi=* | --mand=* | --man=* | --ma=* | --m=*) + mandir=$ac_optarg ;; + + -nfp | --nfp | --nf) + # Obsolete; use --without-fp. + with_fp=no ;; + + -no-create | --no-create | --no-creat | --no-crea | --no-cre \ + | --no-cr | --no-c | -n) + no_create=yes ;; + + -no-recursion | --no-recursion | --no-recursio | --no-recursi \ + | --no-recurs | --no-recur | --no-recu | --no-rec | --no-re | --no-r) + no_recursion=yes ;; + + -oldincludedir | --oldincludedir | --oldincludedi | --oldincluded \ + | --oldinclude | --oldinclud | --oldinclu | --oldincl | --oldinc \ + | --oldin | --oldi | --old | --ol | --o) + ac_prev=oldincludedir ;; + -oldincludedir=* | --oldincludedir=* | --oldincludedi=* | --oldincluded=* \ + | --oldinclude=* | --oldinclud=* | --oldinclu=* | --oldincl=* | --oldinc=* \ + | --oldin=* | --oldi=* | --old=* | --ol=* | --o=*) + oldincludedir=$ac_optarg ;; + + -prefix | --prefix | --prefi | --pref | --pre | --pr | --p) + ac_prev=prefix ;; + -prefix=* | --prefix=* | --prefi=* | --pref=* | --pre=* | --pr=* | --p=*) + prefix=$ac_optarg ;; + + -program-prefix | --program-prefix | --program-prefi | --program-pref \ + | --program-pre | --program-pr | --program-p) + ac_prev=program_prefix ;; + -program-prefix=* | --program-prefix=* | --program-prefi=* \ + | --program-pref=* | --program-pre=* | --program-pr=* | --program-p=*) + program_prefix=$ac_optarg ;; + + -program-suffix | --program-suffix | --program-suffi | --program-suff \ + | --program-suf | --program-su | --program-s) + ac_prev=program_suffix ;; + -program-suffix=* | --program-suffix=* | --program-suffi=* \ + | --program-suff=* | --program-suf=* | --program-su=* | --program-s=*) + program_suffix=$ac_optarg ;; + + -program-transform-name | --program-transform-name \ + | --program-transform-nam | --program-transform-na \ + | --program-transform-n | --program-transform- \ + | --program-transform | --program-transfor \ + | --program-transfo | --program-transf \ + | --program-trans | --program-tran \ + | --progr-tra | --program-tr | --program-t) + ac_prev=program_transform_name ;; + -program-transform-name=* | --program-transform-name=* \ + | --program-transform-nam=* | --program-transform-na=* \ + | --program-transform-n=* | --program-transform-=* \ + | --program-transform=* | --program-transfor=* \ + | --program-transfo=* | --program-transf=* \ + | --program-trans=* | --program-tran=* \ + | --progr-tra=* | --program-tr=* | --program-t=*) + program_transform_name=$ac_optarg ;; + + -pdfdir | --pdfdir | --pdfdi | --pdfd | --pdf | --pd) + ac_prev=pdfdir ;; + -pdfdir=* | --pdfdir=* | --pdfdi=* | --pdfd=* | --pdf=* | --pd=*) + pdfdir=$ac_optarg ;; + + -psdir | --psdir | --psdi | --psd | --ps) + ac_prev=psdir ;; + -psdir=* | --psdir=* | --psdi=* | --psd=* | --ps=*) + psdir=$ac_optarg ;; + + -q | -quiet | --quiet | --quie | --qui | --qu | --q \ + | -silent | --silent | --silen | --sile | --sil) + silent=yes ;; + + -sbindir | --sbindir | --sbindi | --sbind | --sbin | --sbi | --sb) + ac_prev=sbindir ;; + -sbindir=* | --sbindir=* | --sbindi=* | --sbind=* | --sbin=* \ + | --sbi=* | --sb=*) + sbindir=$ac_optarg ;; + + -sharedstatedir | --sharedstatedir | --sharedstatedi \ + | --sharedstated | --sharedstate | --sharedstat | --sharedsta \ + | --sharedst | --shareds | --shared | --share | --shar \ + | --sha | --sh) + ac_prev=sharedstatedir ;; + -sharedstatedir=* | --sharedstatedir=* | --sharedstatedi=* \ + | --sharedstated=* | --sharedstate=* | --sharedstat=* | --sharedsta=* \ + | --sharedst=* | --shareds=* | --shared=* | --share=* | --shar=* \ + | --sha=* | --sh=*) + sharedstatedir=$ac_optarg ;; + + -site | --site | --sit) + ac_prev=site ;; + -site=* | --site=* | --sit=*) + site=$ac_optarg ;; + + -srcdir | --srcdir | --srcdi | --srcd | --src | --sr) + ac_prev=srcdir ;; + -srcdir=* | --srcdir=* | --srcdi=* | --srcd=* | --src=* | --sr=*) + srcdir=$ac_optarg ;; + + -sysconfdir | --sysconfdir | --sysconfdi | --sysconfd | --sysconf \ + | --syscon | --sysco | --sysc | --sys | --sy) + ac_prev=sysconfdir ;; + -sysconfdir=* | --sysconfdir=* | --sysconfdi=* | --sysconfd=* | --sysconf=* \ + | --syscon=* | --sysco=* | --sysc=* | --sys=* | --sy=*) + sysconfdir=$ac_optarg ;; + + -target | --target | --targe | --targ | --tar | --ta | --t) + ac_prev=target_alias ;; + -target=* | --target=* | --targe=* | --targ=* | --tar=* | --ta=* | --t=*) + target_alias=$ac_optarg ;; + + -v | -verbose | --verbose | --verbos | --verbo | --verb) + verbose=yes ;; + + -version | --version | --versio | --versi | --vers | -V) + ac_init_version=: ;; + + -with-* | --with-*) + ac_useropt=`expr "x$ac_option" : 'x-*with-\([^=]*\)'` + # Reject names that are not valid shell variable names. + expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null && + as_fn_error $? "invalid package name: $ac_useropt" + ac_useropt_orig=$ac_useropt + ac_useropt=`$as_echo "$ac_useropt" | sed 's/[-+.]/_/g'` + case $ac_user_opts in + *" +"with_$ac_useropt" +"*) ;; + *) ac_unrecognized_opts="$ac_unrecognized_opts$ac_unrecognized_sep--with-$ac_useropt_orig" + ac_unrecognized_sep=', ';; + esac + eval with_$ac_useropt=\$ac_optarg ;; + + -without-* | --without-*) + ac_useropt=`expr "x$ac_option" : 'x-*without-\(.*\)'` + # Reject names that are not valid shell variable names. + expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null && + as_fn_error $? "invalid package name: $ac_useropt" + ac_useropt_orig=$ac_useropt + ac_useropt=`$as_echo "$ac_useropt" | sed 's/[-+.]/_/g'` + case $ac_user_opts in + *" +"with_$ac_useropt" +"*) ;; + *) ac_unrecognized_opts="$ac_unrecognized_opts$ac_unrecognized_sep--without-$ac_useropt_orig" + ac_unrecognized_sep=', ';; + esac + eval with_$ac_useropt=no ;; + + --x) + # Obsolete; use --with-x. + with_x=yes ;; + + -x-includes | --x-includes | --x-include | --x-includ | --x-inclu \ + | --x-incl | --x-inc | --x-in | --x-i) + ac_prev=x_includes ;; + -x-includes=* | --x-includes=* | --x-include=* | --x-includ=* | --x-inclu=* \ + | --x-incl=* | --x-inc=* | --x-in=* | --x-i=*) + x_includes=$ac_optarg ;; + + -x-libraries | --x-libraries | --x-librarie | --x-librari \ + | --x-librar | --x-libra | --x-libr | --x-lib | --x-li | --x-l) + ac_prev=x_libraries ;; + -x-libraries=* | --x-libraries=* | --x-librarie=* | --x-librari=* \ + | --x-librar=* | --x-libra=* | --x-libr=* | --x-lib=* | --x-li=* | --x-l=*) + x_libraries=$ac_optarg ;; + + -*) as_fn_error $? "unrecognized option: \`$ac_option' +Try \`$0 --help' for more information" + ;; + + *=*) + ac_envvar=`expr "x$ac_option" : 'x\([^=]*\)='` + # Reject names that are not valid shell variable names. + case $ac_envvar in #( + '' | [0-9]* | *[!_$as_cr_alnum]* ) + as_fn_error $? "invalid variable name: \`$ac_envvar'" ;; + esac + eval $ac_envvar=\$ac_optarg + export $ac_envvar ;; + + *) + # FIXME: should be removed in autoconf 3.0. + $as_echo "$as_me: WARNING: you should use --build, --host, --target" >&2 + expr "x$ac_option" : ".*[^-._$as_cr_alnum]" >/dev/null && + $as_echo "$as_me: WARNING: invalid host type: $ac_option" >&2 + : "${build_alias=$ac_option} ${host_alias=$ac_option} ${target_alias=$ac_option}" + ;; + + esac +done + +if test -n "$ac_prev"; then + ac_option=--`echo $ac_prev | sed 's/_/-/g'` + as_fn_error $? "missing argument to $ac_option" +fi + +if test -n "$ac_unrecognized_opts"; then + case $enable_option_checking in + no) ;; + fatal) as_fn_error $? "unrecognized options: $ac_unrecognized_opts" ;; + *) $as_echo "$as_me: WARNING: unrecognized options: $ac_unrecognized_opts" >&2 ;; + esac +fi + +# Check all directory arguments for consistency. +for ac_var in exec_prefix prefix bindir sbindir libexecdir datarootdir \ + datadir sysconfdir sharedstatedir localstatedir includedir \ + oldincludedir docdir infodir htmldir dvidir pdfdir psdir \ + libdir localedir mandir +do + eval ac_val=\$$ac_var + # Remove trailing slashes. + case $ac_val in + */ ) + ac_val=`expr "X$ac_val" : 'X\(.*[^/]\)' \| "X$ac_val" : 'X\(.*\)'` + eval $ac_var=\$ac_val;; + esac + # Be sure to have absolute directory names. + case $ac_val in + [\\/$]* | ?:[\\/]* ) continue;; + NONE | '' ) case $ac_var in *prefix ) continue;; esac;; + esac + as_fn_error $? "expected an absolute directory name for --$ac_var: $ac_val" +done + +# There might be people who depend on the old broken behavior: `$host' +# used to hold the argument of --host etc. +# FIXME: To remove some day. +build=$build_alias +host=$host_alias +target=$target_alias + +# FIXME: To remove some day. +if test "x$host_alias" != x; then + if test "x$build_alias" = x; then + cross_compiling=maybe + elif test "x$build_alias" != "x$host_alias"; then + cross_compiling=yes + fi +fi + +ac_tool_prefix= +test -n "$host_alias" && ac_tool_prefix=$host_alias- + +test "$silent" = yes && exec 6>/dev/null + + +ac_pwd=`pwd` && test -n "$ac_pwd" && +ac_ls_di=`ls -di .` && +ac_pwd_ls_di=`cd "$ac_pwd" && ls -di .` || + as_fn_error $? "working directory cannot be determined" +test "X$ac_ls_di" = "X$ac_pwd_ls_di" || + as_fn_error $? "pwd does not report name of working directory" + + +# Find the source files, if location was not specified. +if test -z "$srcdir"; then + ac_srcdir_defaulted=yes + # Try the directory containing this script, then the parent directory. + ac_confdir=`$as_dirname -- "$as_myself" || +$as_expr X"$as_myself" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ + X"$as_myself" : 'X\(//\)[^/]' \| \ + X"$as_myself" : 'X\(//\)$' \| \ + X"$as_myself" : 'X\(/\)' \| . 2>/dev/null || +$as_echo X"$as_myself" | + sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ + s//\1/ + q + } + /^X\(\/\/\)[^/].*/{ + s//\1/ + q + } + /^X\(\/\/\)$/{ + s//\1/ + q + } + /^X\(\/\).*/{ + s//\1/ + q + } + s/.*/./; q'` + srcdir=$ac_confdir + if test ! -r "$srcdir/$ac_unique_file"; then + srcdir=.. + fi +else + ac_srcdir_defaulted=no +fi +if test ! -r "$srcdir/$ac_unique_file"; then + test "$ac_srcdir_defaulted" = yes && srcdir="$ac_confdir or .." + as_fn_error $? "cannot find sources ($ac_unique_file) in $srcdir" +fi +ac_msg="sources are in $srcdir, but \`cd $srcdir' does not work" +ac_abs_confdir=`( + cd "$srcdir" && test -r "./$ac_unique_file" || as_fn_error $? "$ac_msg" + pwd)` +# When building in place, set srcdir=. +if test "$ac_abs_confdir" = "$ac_pwd"; then + srcdir=. +fi +# Remove unnecessary trailing slashes from srcdir. +# Double slashes in file names in object file debugging info +# mess up M-x gdb in Emacs. +case $srcdir in +*/) srcdir=`expr "X$srcdir" : 'X\(.*[^/]\)' \| "X$srcdir" : 'X\(.*\)'`;; +esac +for ac_var in $ac_precious_vars; do + eval ac_env_${ac_var}_set=\${${ac_var}+set} + eval ac_env_${ac_var}_value=\$${ac_var} + eval ac_cv_env_${ac_var}_set=\${${ac_var}+set} + eval ac_cv_env_${ac_var}_value=\$${ac_var} +done + +# +# Report the --help message. +# +if test "$ac_init_help" = "long"; then + # Omit some internal or obsolete options to make the list less imposing. + # This message is too long to be a string in the A/UX 3.1 sh. + cat <<_ACEOF +\`configure' configures this package to adapt to many kinds of systems. + +Usage: $0 [OPTION]... [VAR=VALUE]... + +To assign environment variables (e.g., CC, CFLAGS...), specify them as +VAR=VALUE. See below for descriptions of some of the useful variables. + +Defaults for the options are specified in brackets. + +Configuration: + -h, --help display this help and exit + --help=short display options specific to this package + --help=recursive display the short help of all the included packages + -V, --version display version information and exit + -q, --quiet, --silent do not print \`checking ...' messages + --cache-file=FILE cache test results in FILE [disabled] + -C, --config-cache alias for \`--cache-file=config.cache' + -n, --no-create do not create output files + --srcdir=DIR find the sources in DIR [configure dir or \`..'] + +Installation directories: + --prefix=PREFIX install architecture-independent files in PREFIX + [$ac_default_prefix] + --exec-prefix=EPREFIX install architecture-dependent files in EPREFIX + [PREFIX] + +By default, \`make install' will install all the files in +\`$ac_default_prefix/bin', \`$ac_default_prefix/lib' etc. You can specify +an installation prefix other than \`$ac_default_prefix' using \`--prefix', +for instance \`--prefix=\$HOME'. + +For better control, use the options below. + +Fine tuning of the installation directories: + --bindir=DIR user executables [EPREFIX/bin] + --sbindir=DIR system admin executables [EPREFIX/sbin] + --libexecdir=DIR program executables [EPREFIX/libexec] + --sysconfdir=DIR read-only single-machine data [PREFIX/etc] + --sharedstatedir=DIR modifiable architecture-independent data [PREFIX/com] + --localstatedir=DIR modifiable single-machine data [PREFIX/var] + --libdir=DIR object code libraries [EPREFIX/lib] + --includedir=DIR C header files [PREFIX/include] + --oldincludedir=DIR C header files for non-gcc [/usr/include] + --datarootdir=DIR read-only arch.-independent data root [PREFIX/share] + --datadir=DIR read-only architecture-independent data [DATAROOTDIR] + --infodir=DIR info documentation [DATAROOTDIR/info] + --localedir=DIR locale-dependent data [DATAROOTDIR/locale] + --mandir=DIR man documentation [DATAROOTDIR/man] + --docdir=DIR documentation root [DATAROOTDIR/doc/PACKAGE] + --htmldir=DIR html documentation [DOCDIR] + --dvidir=DIR dvi documentation [DOCDIR] + --pdfdir=DIR pdf documentation [DOCDIR] + --psdir=DIR ps documentation [DOCDIR] +_ACEOF + + cat <<\_ACEOF +_ACEOF +fi + +if test -n "$ac_init_help"; then + + cat <<\_ACEOF + +Some influential environment variables: + CC C compiler command + CFLAGS C compiler flags + LDFLAGS linker flags, e.g. -L if you have libraries in a + nonstandard directory + LIBS libraries to pass to the linker, e.g. -l + CPPFLAGS (Objective) C/C++ preprocessor flags, e.g. -I if + you have headers in a nonstandard directory + +Use these variables to override the choices made by `configure' or to help +it to find libraries and programs with nonstandard names/locations. + +Report bugs to the package provider. +_ACEOF +ac_status=$? +fi + +if test "$ac_init_help" = "recursive"; then + # If there are subdirs, report their specific --help. + for ac_dir in : $ac_subdirs_all; do test "x$ac_dir" = x: && continue + test -d "$ac_dir" || + { cd "$srcdir" && ac_pwd=`pwd` && srcdir=. && test -d "$ac_dir"; } || + continue + ac_builddir=. + +case "$ac_dir" in +.) ac_dir_suffix= ac_top_builddir_sub=. ac_top_build_prefix= ;; +*) + ac_dir_suffix=/`$as_echo "$ac_dir" | sed 's|^\.[\\/]||'` + # A ".." for each directory in $ac_dir_suffix. + ac_top_builddir_sub=`$as_echo "$ac_dir_suffix" | sed 's|/[^\\/]*|/..|g;s|/||'` + case $ac_top_builddir_sub in + "") ac_top_builddir_sub=. ac_top_build_prefix= ;; + *) ac_top_build_prefix=$ac_top_builddir_sub/ ;; + esac ;; +esac +ac_abs_top_builddir=$ac_pwd +ac_abs_builddir=$ac_pwd$ac_dir_suffix +# for backward compatibility: +ac_top_builddir=$ac_top_build_prefix + +case $srcdir in + .) # We are building in place. + ac_srcdir=. + ac_top_srcdir=$ac_top_builddir_sub + ac_abs_top_srcdir=$ac_pwd ;; + [\\/]* | ?:[\\/]* ) # Absolute name. + ac_srcdir=$srcdir$ac_dir_suffix; + ac_top_srcdir=$srcdir + ac_abs_top_srcdir=$srcdir ;; + *) # Relative name. + ac_srcdir=$ac_top_build_prefix$srcdir$ac_dir_suffix + ac_top_srcdir=$ac_top_build_prefix$srcdir + ac_abs_top_srcdir=$ac_pwd/$srcdir ;; +esac +ac_abs_srcdir=$ac_abs_top_srcdir$ac_dir_suffix + + cd "$ac_dir" || { ac_status=$?; continue; } + # Check for guested configure. + if test -f "$ac_srcdir/configure.gnu"; then + echo && + $SHELL "$ac_srcdir/configure.gnu" --help=recursive + elif test -f "$ac_srcdir/configure"; then + echo && + $SHELL "$ac_srcdir/configure" --help=recursive + else + $as_echo "$as_me: WARNING: no configuration information is in $ac_dir" >&2 + fi || ac_status=$? + cd "$ac_pwd" || { ac_status=$?; break; } + done +fi + +test -n "$ac_init_help" && exit $ac_status +if $ac_init_version; then + cat <<\_ACEOF +configure +generated by GNU Autoconf 2.69 + +Copyright (C) 2012 Free Software Foundation, Inc. +This configure script is free software; the Free Software Foundation +gives unlimited permission to copy, distribute and modify it. +_ACEOF + exit +fi + +## ------------------------ ## +## Autoconf initialization. ## +## ------------------------ ## + +# ac_fn_c_try_compile LINENO +# -------------------------- +# Try to compile conftest.$ac_ext, and return whether this succeeded. +ac_fn_c_try_compile () +{ + as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack + rm -f conftest.$ac_objext + if { { ac_try="$ac_compile" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" +$as_echo "$ac_try_echo"; } >&5 + (eval "$ac_compile") 2>conftest.err + ac_status=$? + if test -s conftest.err; then + grep -v '^ *+' conftest.err >conftest.er1 + cat conftest.er1 >&5 + mv -f conftest.er1 conftest.err + fi + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; } && { + test -z "$ac_c_werror_flag" || + test ! -s conftest.err + } && test -s conftest.$ac_objext; then : + ac_retval=0 +else + $as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + ac_retval=1 +fi + eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno + as_fn_set_status $ac_retval + +} # ac_fn_c_try_compile + +# ac_fn_c_try_link LINENO +# ----------------------- +# Try to link conftest.$ac_ext, and return whether this succeeded. +ac_fn_c_try_link () +{ + as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack + rm -f conftest.$ac_objext conftest$ac_exeext + if { { ac_try="$ac_link" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" +$as_echo "$ac_try_echo"; } >&5 + (eval "$ac_link") 2>conftest.err + ac_status=$? + if test -s conftest.err; then + grep -v '^ *+' conftest.err >conftest.er1 + cat conftest.er1 >&5 + mv -f conftest.er1 conftest.err + fi + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; } && { + test -z "$ac_c_werror_flag" || + test ! -s conftest.err + } && test -s conftest$ac_exeext && { + test "$cross_compiling" = yes || + test -x conftest$ac_exeext + }; then : + ac_retval=0 +else + $as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + ac_retval=1 +fi + # Delete the IPA/IPO (Inter Procedural Analysis/Optimization) information + # created by the PGI compiler (conftest_ipa8_conftest.oo), as it would + # interfere with the next link command; also delete a directory that is + # left behind by Apple's compiler. We do this before executing the actions. + rm -rf conftest.dSYM conftest_ipa8_conftest.oo + eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno + as_fn_set_status $ac_retval + +} # ac_fn_c_try_link +cat >config.log <<_ACEOF +This file contains any messages produced by compilers while +running configure, to aid debugging if configure makes a mistake. + +It was created by $as_me, which was +generated by GNU Autoconf 2.69. Invocation command line was + + $ $0 $@ + +_ACEOF +exec 5>>config.log +{ +cat <<_ASUNAME +## --------- ## +## Platform. ## +## --------- ## + +hostname = `(hostname || uname -n) 2>/dev/null | sed 1q` +uname -m = `(uname -m) 2>/dev/null || echo unknown` +uname -r = `(uname -r) 2>/dev/null || echo unknown` +uname -s = `(uname -s) 2>/dev/null || echo unknown` +uname -v = `(uname -v) 2>/dev/null || echo unknown` + +/usr/bin/uname -p = `(/usr/bin/uname -p) 2>/dev/null || echo unknown` +/bin/uname -X = `(/bin/uname -X) 2>/dev/null || echo unknown` + +/bin/arch = `(/bin/arch) 2>/dev/null || echo unknown` +/usr/bin/arch -k = `(/usr/bin/arch -k) 2>/dev/null || echo unknown` +/usr/convex/getsysinfo = `(/usr/convex/getsysinfo) 2>/dev/null || echo unknown` +/usr/bin/hostinfo = `(/usr/bin/hostinfo) 2>/dev/null || echo unknown` +/bin/machine = `(/bin/machine) 2>/dev/null || echo unknown` +/usr/bin/oslevel = `(/usr/bin/oslevel) 2>/dev/null || echo unknown` +/bin/universe = `(/bin/universe) 2>/dev/null || echo unknown` + +_ASUNAME + +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + $as_echo "PATH: $as_dir" + done +IFS=$as_save_IFS + +} >&5 + +cat >&5 <<_ACEOF + + +## ----------- ## +## Core tests. ## +## ----------- ## + +_ACEOF + + +# Keep a trace of the command line. +# Strip out --no-create and --no-recursion so they do not pile up. +# Strip out --silent because we don't want to record it for future runs. +# Also quote any args containing shell meta-characters. +# Make two passes to allow for proper duplicate-argument suppression. +ac_configure_args= +ac_configure_args0= +ac_configure_args1= +ac_must_keep_next=false +for ac_pass in 1 2 +do + for ac_arg + do + case $ac_arg in + -no-create | --no-c* | -n | -no-recursion | --no-r*) continue ;; + -q | -quiet | --quiet | --quie | --qui | --qu | --q \ + | -silent | --silent | --silen | --sile | --sil) + continue ;; + *\'*) + ac_arg=`$as_echo "$ac_arg" | sed "s/'/'\\\\\\\\''/g"` ;; + esac + case $ac_pass in + 1) as_fn_append ac_configure_args0 " '$ac_arg'" ;; + 2) + as_fn_append ac_configure_args1 " '$ac_arg'" + if test $ac_must_keep_next = true; then + ac_must_keep_next=false # Got value, back to normal. + else + case $ac_arg in + *=* | --config-cache | -C | -disable-* | --disable-* \ + | -enable-* | --enable-* | -gas | --g* | -nfp | --nf* \ + | -q | -quiet | --q* | -silent | --sil* | -v | -verb* \ + | -with-* | --with-* | -without-* | --without-* | --x) + case "$ac_configure_args0 " in + "$ac_configure_args1"*" '$ac_arg' "* ) continue ;; + esac + ;; + -* ) ac_must_keep_next=true ;; + esac + fi + as_fn_append ac_configure_args " '$ac_arg'" + ;; + esac + done +done +{ ac_configure_args0=; unset ac_configure_args0;} +{ ac_configure_args1=; unset ac_configure_args1;} + +# When interrupted or exit'd, cleanup temporary files, and complete +# config.log. We remove comments because anyway the quotes in there +# would cause problems or look ugly. +# WARNING: Use '\'' to represent an apostrophe within the trap. +# WARNING: Do not start the trap code with a newline, due to a FreeBSD 4.0 bug. +trap 'exit_status=$? + # Save into config.log some information that might help in debugging. + { + echo + + $as_echo "## ---------------- ## +## Cache variables. ## +## ---------------- ##" + echo + # The following way of writing the cache mishandles newlines in values, +( + for ac_var in `(set) 2>&1 | sed -n '\''s/^\([a-zA-Z_][a-zA-Z0-9_]*\)=.*/\1/p'\''`; do + eval ac_val=\$$ac_var + case $ac_val in #( + *${as_nl}*) + case $ac_var in #( + *_cv_*) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: cache variable $ac_var contains a newline" >&5 +$as_echo "$as_me: WARNING: cache variable $ac_var contains a newline" >&2;} ;; + esac + case $ac_var in #( + _ | IFS | as_nl) ;; #( + BASH_ARGV | BASH_SOURCE) eval $ac_var= ;; #( + *) { eval $ac_var=; unset $ac_var;} ;; + esac ;; + esac + done + (set) 2>&1 | + case $as_nl`(ac_space='\'' '\''; set) 2>&1` in #( + *${as_nl}ac_space=\ *) + sed -n \ + "s/'\''/'\''\\\\'\'''\''/g; + s/^\\([_$as_cr_alnum]*_cv_[_$as_cr_alnum]*\\)=\\(.*\\)/\\1='\''\\2'\''/p" + ;; #( + *) + sed -n "/^[_$as_cr_alnum]*_cv_[_$as_cr_alnum]*=/p" + ;; + esac | + sort +) + echo + + $as_echo "## ----------------- ## +## Output variables. ## +## ----------------- ##" + echo + for ac_var in $ac_subst_vars + do + eval ac_val=\$$ac_var + case $ac_val in + *\'\''*) ac_val=`$as_echo "$ac_val" | sed "s/'\''/'\''\\\\\\\\'\'''\''/g"`;; + esac + $as_echo "$ac_var='\''$ac_val'\''" + done | sort + echo + + if test -n "$ac_subst_files"; then + $as_echo "## ------------------- ## +## File substitutions. ## +## ------------------- ##" + echo + for ac_var in $ac_subst_files + do + eval ac_val=\$$ac_var + case $ac_val in + *\'\''*) ac_val=`$as_echo "$ac_val" | sed "s/'\''/'\''\\\\\\\\'\'''\''/g"`;; + esac + $as_echo "$ac_var='\''$ac_val'\''" + done | sort + echo + fi + + if test -s confdefs.h; then + $as_echo "## ----------- ## +## confdefs.h. ## +## ----------- ##" + echo + cat confdefs.h + echo + fi + test "$ac_signal" != 0 && + $as_echo "$as_me: caught signal $ac_signal" + $as_echo "$as_me: exit $exit_status" + } >&5 + rm -f core *.core core.conftest.* && + rm -f -r conftest* confdefs* conf$$* $ac_clean_files && + exit $exit_status +' 0 +for ac_signal in 1 2 13 15; do + trap 'ac_signal='$ac_signal'; as_fn_exit 1' $ac_signal +done +ac_signal=0 + +# confdefs.h avoids OS command line length limits that DEFS can exceed. +rm -f -r conftest* confdefs.h + +$as_echo "/* confdefs.h */" > confdefs.h + +# Predefined preprocessor variables. + +cat >>confdefs.h <<_ACEOF +#define PACKAGE_NAME "$PACKAGE_NAME" +_ACEOF + +cat >>confdefs.h <<_ACEOF +#define PACKAGE_TARNAME "$PACKAGE_TARNAME" +_ACEOF + +cat >>confdefs.h <<_ACEOF +#define PACKAGE_VERSION "$PACKAGE_VERSION" +_ACEOF + +cat >>confdefs.h <<_ACEOF +#define PACKAGE_STRING "$PACKAGE_STRING" +_ACEOF + +cat >>confdefs.h <<_ACEOF +#define PACKAGE_BUGREPORT "$PACKAGE_BUGREPORT" +_ACEOF + +cat >>confdefs.h <<_ACEOF +#define PACKAGE_URL "$PACKAGE_URL" +_ACEOF + + +# Let the site file select an alternate cache file if it wants to. +# Prefer an explicitly selected file to automatically selected ones. +ac_site_file1=NONE +ac_site_file2=NONE +if test -n "$CONFIG_SITE"; then + # We do not want a PATH search for config.site. + case $CONFIG_SITE in #(( + -*) ac_site_file1=./$CONFIG_SITE;; + */*) ac_site_file1=$CONFIG_SITE;; + *) ac_site_file1=./$CONFIG_SITE;; + esac +elif test "x$prefix" != xNONE; then + ac_site_file1=$prefix/share/config.site + ac_site_file2=$prefix/etc/config.site +else + ac_site_file1=$ac_default_prefix/share/config.site + ac_site_file2=$ac_default_prefix/etc/config.site +fi +for ac_site_file in "$ac_site_file1" "$ac_site_file2" +do + test "x$ac_site_file" = xNONE && continue + if test /dev/null != "$ac_site_file" && test -r "$ac_site_file"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: loading site script $ac_site_file" >&5 +$as_echo "$as_me: loading site script $ac_site_file" >&6;} + sed 's/^/| /' "$ac_site_file" >&5 + . "$ac_site_file" \ + || { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 +$as_echo "$as_me: error: in \`$ac_pwd':" >&2;} +as_fn_error $? "failed to load site script $ac_site_file +See \`config.log' for more details" "$LINENO" 5; } + fi +done + +if test -r "$cache_file"; then + # Some versions of bash will fail to source /dev/null (special files + # actually), so we avoid doing that. DJGPP emulates it as a regular file. + if test /dev/null != "$cache_file" && test -f "$cache_file"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: loading cache $cache_file" >&5 +$as_echo "$as_me: loading cache $cache_file" >&6;} + case $cache_file in + [\\/]* | ?:[\\/]* ) . "$cache_file";; + *) . "./$cache_file";; + esac + fi +else + { $as_echo "$as_me:${as_lineno-$LINENO}: creating cache $cache_file" >&5 +$as_echo "$as_me: creating cache $cache_file" >&6;} + >$cache_file +fi + +# Check that the precious variables saved in the cache have kept the same +# value. +ac_cache_corrupted=false +for ac_var in $ac_precious_vars; do + eval ac_old_set=\$ac_cv_env_${ac_var}_set + eval ac_new_set=\$ac_env_${ac_var}_set + eval ac_old_val=\$ac_cv_env_${ac_var}_value + eval ac_new_val=\$ac_env_${ac_var}_value + case $ac_old_set,$ac_new_set in + set,) + { $as_echo "$as_me:${as_lineno-$LINENO}: error: \`$ac_var' was set to \`$ac_old_val' in the previous run" >&5 +$as_echo "$as_me: error: \`$ac_var' was set to \`$ac_old_val' in the previous run" >&2;} + ac_cache_corrupted=: ;; + ,set) + { $as_echo "$as_me:${as_lineno-$LINENO}: error: \`$ac_var' was not set in the previous run" >&5 +$as_echo "$as_me: error: \`$ac_var' was not set in the previous run" >&2;} + ac_cache_corrupted=: ;; + ,);; + *) + if test "x$ac_old_val" != "x$ac_new_val"; then + # differences in whitespace do not lead to failure. + ac_old_val_w=`echo x $ac_old_val` + ac_new_val_w=`echo x $ac_new_val` + if test "$ac_old_val_w" != "$ac_new_val_w"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: error: \`$ac_var' has changed since the previous run:" >&5 +$as_echo "$as_me: error: \`$ac_var' has changed since the previous run:" >&2;} + ac_cache_corrupted=: + else + { $as_echo "$as_me:${as_lineno-$LINENO}: warning: ignoring whitespace changes in \`$ac_var' since the previous run:" >&5 +$as_echo "$as_me: warning: ignoring whitespace changes in \`$ac_var' since the previous run:" >&2;} + eval $ac_var=\$ac_old_val + fi + { $as_echo "$as_me:${as_lineno-$LINENO}: former value: \`$ac_old_val'" >&5 +$as_echo "$as_me: former value: \`$ac_old_val'" >&2;} + { $as_echo "$as_me:${as_lineno-$LINENO}: current value: \`$ac_new_val'" >&5 +$as_echo "$as_me: current value: \`$ac_new_val'" >&2;} + fi;; + esac + # Pass precious variables to config.status. + if test "$ac_new_set" = set; then + case $ac_new_val in + *\'*) ac_arg=$ac_var=`$as_echo "$ac_new_val" | sed "s/'/'\\\\\\\\''/g"` ;; + *) ac_arg=$ac_var=$ac_new_val ;; + esac + case " $ac_configure_args " in + *" '$ac_arg' "*) ;; # Avoid dups. Use of quotes ensures accuracy. + *) as_fn_append ac_configure_args " '$ac_arg'" ;; + esac + fi +done +if $ac_cache_corrupted; then + { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 +$as_echo "$as_me: error: in \`$ac_pwd':" >&2;} + { $as_echo "$as_me:${as_lineno-$LINENO}: error: changes in the environment can compromise the build" >&5 +$as_echo "$as_me: error: changes in the environment can compromise the build" >&2;} + as_fn_error $? "run \`make distclean' and/or \`rm $cache_file' and start over" "$LINENO" 5 +fi +## -------------------- ## +## Main body of script. ## +## -------------------- ## + +ac_ext=c +ac_cpp='$CPP $CPPFLAGS' +ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' +ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' +ac_compiler_gnu=$ac_cv_c_compiler_gnu + + + + + +ac_ext=c +ac_cpp='$CPP $CPPFLAGS' +ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' +ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' +ac_compiler_gnu=$ac_cv_c_compiler_gnu +if test -n "$ac_tool_prefix"; then + # Extract the first word of "${ac_tool_prefix}gcc", so it can be a program name with args. +set dummy ${ac_tool_prefix}gcc; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_CC+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$CC"; then + ac_cv_prog_CC="$CC" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_prog_CC="${ac_tool_prefix}gcc" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +CC=$ac_cv_prog_CC +if test -n "$CC"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CC" >&5 +$as_echo "$CC" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + +fi +if test -z "$ac_cv_prog_CC"; then + ac_ct_CC=$CC + # Extract the first word of "gcc", so it can be a program name with args. +set dummy gcc; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_ac_ct_CC+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$ac_ct_CC"; then + ac_cv_prog_ac_ct_CC="$ac_ct_CC" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_prog_ac_ct_CC="gcc" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +ac_ct_CC=$ac_cv_prog_ac_ct_CC +if test -n "$ac_ct_CC"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_CC" >&5 +$as_echo "$ac_ct_CC" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + if test "x$ac_ct_CC" = x; then + CC="" + else + case $cross_compiling:$ac_tool_warned in +yes:) +{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 +$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} +ac_tool_warned=yes ;; +esac + CC=$ac_ct_CC + fi +else + CC="$ac_cv_prog_CC" +fi + +if test -z "$CC"; then + if test -n "$ac_tool_prefix"; then + # Extract the first word of "${ac_tool_prefix}cc", so it can be a program name with args. +set dummy ${ac_tool_prefix}cc; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_CC+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$CC"; then + ac_cv_prog_CC="$CC" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_prog_CC="${ac_tool_prefix}cc" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +CC=$ac_cv_prog_CC +if test -n "$CC"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CC" >&5 +$as_echo "$CC" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + + fi +fi +if test -z "$CC"; then + # Extract the first word of "cc", so it can be a program name with args. +set dummy cc; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_CC+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$CC"; then + ac_cv_prog_CC="$CC" # Let the user override the test. +else + ac_prog_rejected=no +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + if test "$as_dir/$ac_word$ac_exec_ext" = "/usr/ucb/cc"; then + ac_prog_rejected=yes + continue + fi + ac_cv_prog_CC="cc" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +if test $ac_prog_rejected = yes; then + # We found a bogon in the path, so make sure we never use it. + set dummy $ac_cv_prog_CC + shift + if test $# != 0; then + # We chose a different compiler from the bogus one. + # However, it has the same basename, so the bogon will be chosen + # first if we set CC to just the basename; use the full file name. + shift + ac_cv_prog_CC="$as_dir/$ac_word${1+' '}$@" + fi +fi +fi +fi +CC=$ac_cv_prog_CC +if test -n "$CC"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CC" >&5 +$as_echo "$CC" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + +fi +if test -z "$CC"; then + if test -n "$ac_tool_prefix"; then + for ac_prog in cl.exe + do + # Extract the first word of "$ac_tool_prefix$ac_prog", so it can be a program name with args. +set dummy $ac_tool_prefix$ac_prog; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_CC+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$CC"; then + ac_cv_prog_CC="$CC" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_prog_CC="$ac_tool_prefix$ac_prog" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +CC=$ac_cv_prog_CC +if test -n "$CC"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CC" >&5 +$as_echo "$CC" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + + test -n "$CC" && break + done +fi +if test -z "$CC"; then + ac_ct_CC=$CC + for ac_prog in cl.exe +do + # Extract the first word of "$ac_prog", so it can be a program name with args. +set dummy $ac_prog; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_ac_ct_CC+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$ac_ct_CC"; then + ac_cv_prog_ac_ct_CC="$ac_ct_CC" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_prog_ac_ct_CC="$ac_prog" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +ac_ct_CC=$ac_cv_prog_ac_ct_CC +if test -n "$ac_ct_CC"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_CC" >&5 +$as_echo "$ac_ct_CC" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + + test -n "$ac_ct_CC" && break +done + + if test "x$ac_ct_CC" = x; then + CC="" + else + case $cross_compiling:$ac_tool_warned in +yes:) +{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 +$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} +ac_tool_warned=yes ;; +esac + CC=$ac_ct_CC + fi +fi + +fi + + +test -z "$CC" && { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 +$as_echo "$as_me: error: in \`$ac_pwd':" >&2;} +as_fn_error $? "no acceptable C compiler found in \$PATH +See \`config.log' for more details" "$LINENO" 5; } + +# Provide some information about the compiler. +$as_echo "$as_me:${as_lineno-$LINENO}: checking for C compiler version" >&5 +set X $ac_compile +ac_compiler=$2 +for ac_option in --version -v -V -qversion; do + { { ac_try="$ac_compiler $ac_option >&5" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" +$as_echo "$ac_try_echo"; } >&5 + (eval "$ac_compiler $ac_option >&5") 2>conftest.err + ac_status=$? + if test -s conftest.err; then + sed '10a\ +... rest of stderr output deleted ... + 10q' conftest.err >conftest.er1 + cat conftest.er1 >&5 + fi + rm -f conftest.er1 conftest.err + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; } +done + +cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +int +main () +{ + + ; + return 0; +} +_ACEOF +ac_clean_files_save=$ac_clean_files +ac_clean_files="$ac_clean_files a.out a.out.dSYM a.exe b.out" +# Try to create an executable without -o first, disregard a.out. +# It will help us diagnose broken compilers, and finding out an intuition +# of exeext. +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether the C compiler works" >&5 +$as_echo_n "checking whether the C compiler works... " >&6; } +ac_link_default=`$as_echo "$ac_link" | sed 's/ -o *conftest[^ ]*//'` + +# The possible output files: +ac_files="a.out conftest.exe conftest a.exe a_out.exe b.out conftest.*" + +ac_rmfiles= +for ac_file in $ac_files +do + case $ac_file in + *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.dSYM | *.o | *.obj ) ;; + * ) ac_rmfiles="$ac_rmfiles $ac_file";; + esac +done +rm -f $ac_rmfiles + +if { { ac_try="$ac_link_default" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" +$as_echo "$ac_try_echo"; } >&5 + (eval "$ac_link_default") 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; then : + # Autoconf-2.13 could set the ac_cv_exeext variable to `no'. +# So ignore a value of `no', otherwise this would lead to `EXEEXT = no' +# in a Makefile. We should not override ac_cv_exeext if it was cached, +# so that the user can short-circuit this test for compilers unknown to +# Autoconf. +for ac_file in $ac_files '' +do + test -f "$ac_file" || continue + case $ac_file in + *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.dSYM | *.o | *.obj ) + ;; + [ab].out ) + # We found the default executable, but exeext='' is most + # certainly right. + break;; + *.* ) + if test "${ac_cv_exeext+set}" = set && test "$ac_cv_exeext" != no; + then :; else + ac_cv_exeext=`expr "$ac_file" : '[^.]*\(\..*\)'` + fi + # We set ac_cv_exeext here because the later test for it is not + # safe: cross compilers may not add the suffix if given an `-o' + # argument, so we may need to know it at that point already. + # Even if this section looks crufty: it has the advantage of + # actually working. + break;; + * ) + break;; + esac +done +test "$ac_cv_exeext" = no && ac_cv_exeext= + +else + ac_file='' +fi +if test -z "$ac_file"; then : + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +$as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + +{ { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 +$as_echo "$as_me: error: in \`$ac_pwd':" >&2;} +as_fn_error 77 "C compiler cannot create executables +See \`config.log' for more details" "$LINENO" 5; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +$as_echo "yes" >&6; } +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for C compiler default output file name" >&5 +$as_echo_n "checking for C compiler default output file name... " >&6; } +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_file" >&5 +$as_echo "$ac_file" >&6; } +ac_exeext=$ac_cv_exeext + +rm -f -r a.out a.out.dSYM a.exe conftest$ac_cv_exeext b.out +ac_clean_files=$ac_clean_files_save +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for suffix of executables" >&5 +$as_echo_n "checking for suffix of executables... " >&6; } +if { { ac_try="$ac_link" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" +$as_echo "$ac_try_echo"; } >&5 + (eval "$ac_link") 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; then : + # If both `conftest.exe' and `conftest' are `present' (well, observable) +# catch `conftest.exe'. For instance with Cygwin, `ls conftest' will +# work properly (i.e., refer to `conftest.exe'), while it won't with +# `rm'. +for ac_file in conftest.exe conftest conftest.*; do + test -f "$ac_file" || continue + case $ac_file in + *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.dSYM | *.o | *.obj ) ;; + *.* ) ac_cv_exeext=`expr "$ac_file" : '[^.]*\(\..*\)'` + break;; + * ) break;; + esac +done +else + { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 +$as_echo "$as_me: error: in \`$ac_pwd':" >&2;} +as_fn_error $? "cannot compute suffix of executables: cannot compile and link +See \`config.log' for more details" "$LINENO" 5; } +fi +rm -f conftest conftest$ac_cv_exeext +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_exeext" >&5 +$as_echo "$ac_cv_exeext" >&6; } + +rm -f conftest.$ac_ext +EXEEXT=$ac_cv_exeext +ac_exeext=$EXEEXT +cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#include +int +main () +{ +FILE *f = fopen ("conftest.out", "w"); + return ferror (f) || fclose (f) != 0; + + ; + return 0; +} +_ACEOF +ac_clean_files="$ac_clean_files conftest.out" +# Check that the compiler produces executables we can run. If not, either +# the compiler is broken, or we cross compile. +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether we are cross compiling" >&5 +$as_echo_n "checking whether we are cross compiling... " >&6; } +if test "$cross_compiling" != yes; then + { { ac_try="$ac_link" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" +$as_echo "$ac_try_echo"; } >&5 + (eval "$ac_link") 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; } + if { ac_try='./conftest$ac_cv_exeext' + { { case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" +$as_echo "$ac_try_echo"; } >&5 + (eval "$ac_try") 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; }; then + cross_compiling=no + else + if test "$cross_compiling" = maybe; then + cross_compiling=yes + else + { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 +$as_echo "$as_me: error: in \`$ac_pwd':" >&2;} +as_fn_error $? "cannot run C compiled programs. +If you meant to cross compile, use \`--host'. +See \`config.log' for more details" "$LINENO" 5; } + fi + fi +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $cross_compiling" >&5 +$as_echo "$cross_compiling" >&6; } + +rm -f conftest.$ac_ext conftest$ac_cv_exeext conftest.out +ac_clean_files=$ac_clean_files_save +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for suffix of object files" >&5 +$as_echo_n "checking for suffix of object files... " >&6; } +if ${ac_cv_objext+:} false; then : + $as_echo_n "(cached) " >&6 +else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +int +main () +{ + + ; + return 0; +} +_ACEOF +rm -f conftest.o conftest.obj +if { { ac_try="$ac_compile" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" +$as_echo "$ac_try_echo"; } >&5 + (eval "$ac_compile") 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; then : + for ac_file in conftest.o conftest.obj conftest.*; do + test -f "$ac_file" || continue; + case $ac_file in + *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.dSYM ) ;; + *) ac_cv_objext=`expr "$ac_file" : '.*\.\(.*\)'` + break;; + esac +done +else + $as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + +{ { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 +$as_echo "$as_me: error: in \`$ac_pwd':" >&2;} +as_fn_error $? "cannot compute suffix of object files: cannot compile +See \`config.log' for more details" "$LINENO" 5; } +fi +rm -f conftest.$ac_cv_objext conftest.$ac_ext +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_objext" >&5 +$as_echo "$ac_cv_objext" >&6; } +OBJEXT=$ac_cv_objext +ac_objext=$OBJEXT +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether we are using the GNU C compiler" >&5 +$as_echo_n "checking whether we are using the GNU C compiler... " >&6; } +if ${ac_cv_c_compiler_gnu+:} false; then : + $as_echo_n "(cached) " >&6 +else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +int +main () +{ +#ifndef __GNUC__ + choke me +#endif + + ; + return 0; +} +_ACEOF +if ac_fn_c_try_compile "$LINENO"; then : + ac_compiler_gnu=yes +else + ac_compiler_gnu=no +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +ac_cv_c_compiler_gnu=$ac_compiler_gnu + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_c_compiler_gnu" >&5 +$as_echo "$ac_cv_c_compiler_gnu" >&6; } +if test $ac_compiler_gnu = yes; then + GCC=yes +else + GCC= +fi +ac_test_CFLAGS=${CFLAGS+set} +ac_save_CFLAGS=$CFLAGS +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $CC accepts -g" >&5 +$as_echo_n "checking whether $CC accepts -g... " >&6; } +if ${ac_cv_prog_cc_g+:} false; then : + $as_echo_n "(cached) " >&6 +else + ac_save_c_werror_flag=$ac_c_werror_flag + ac_c_werror_flag=yes + ac_cv_prog_cc_g=no + CFLAGS="-g" + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +int +main () +{ + + ; + return 0; +} +_ACEOF +if ac_fn_c_try_compile "$LINENO"; then : + ac_cv_prog_cc_g=yes +else + CFLAGS="" + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +int +main () +{ + + ; + return 0; +} +_ACEOF +if ac_fn_c_try_compile "$LINENO"; then : + +else + ac_c_werror_flag=$ac_save_c_werror_flag + CFLAGS="-g" + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +int +main () +{ + + ; + return 0; +} +_ACEOF +if ac_fn_c_try_compile "$LINENO"; then : + ac_cv_prog_cc_g=yes +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext + ac_c_werror_flag=$ac_save_c_werror_flag +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cc_g" >&5 +$as_echo "$ac_cv_prog_cc_g" >&6; } +if test "$ac_test_CFLAGS" = set; then + CFLAGS=$ac_save_CFLAGS +elif test $ac_cv_prog_cc_g = yes; then + if test "$GCC" = yes; then + CFLAGS="-g -O2" + else + CFLAGS="-g" + fi +else + if test "$GCC" = yes; then + CFLAGS="-O2" + else + CFLAGS= + fi +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $CC option to accept ISO C89" >&5 +$as_echo_n "checking for $CC option to accept ISO C89... " >&6; } +if ${ac_cv_prog_cc_c89+:} false; then : + $as_echo_n "(cached) " >&6 +else + ac_cv_prog_cc_c89=no +ac_save_CC=$CC +cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#include +#include +struct stat; +/* Most of the following tests are stolen from RCS 5.7's src/conf.sh. */ +struct buf { int x; }; +FILE * (*rcsopen) (struct buf *, struct stat *, int); +static char *e (p, i) + char **p; + int i; +{ + return p[i]; +} +static char *f (char * (*g) (char **, int), char **p, ...) +{ + char *s; + va_list v; + va_start (v,p); + s = g (p, va_arg (v,int)); + va_end (v); + return s; +} + +/* OSF 4.0 Compaq cc is some sort of almost-ANSI by default. It has + function prototypes and stuff, but not '\xHH' hex character constants. + These don't provoke an error unfortunately, instead are silently treated + as 'x'. The following induces an error, until -std is added to get + proper ANSI mode. Curiously '\x00'!='x' always comes out true, for an + array size at least. It's necessary to write '\x00'==0 to get something + that's true only with -std. */ +int osf4_cc_array ['\x00' == 0 ? 1 : -1]; + +/* IBM C 6 for AIX is almost-ANSI by default, but it replaces macro parameters + inside strings and character constants. */ +#define FOO(x) 'x' +int xlc6_cc_array[FOO(a) == 'x' ? 1 : -1]; + +int test (int i, double x); +struct s1 {int (*f) (int a);}; +struct s2 {int (*f) (double a);}; +int pairnames (int, char **, FILE *(*)(struct buf *, struct stat *, int), int, int); +int argc; +char **argv; +int +main () +{ +return f (e, argv, 0) != argv[0] || f (e, argv, 1) != argv[1]; + ; + return 0; +} +_ACEOF +for ac_arg in '' -qlanglvl=extc89 -qlanglvl=ansi -std \ + -Ae "-Aa -D_HPUX_SOURCE" "-Xc -D__EXTENSIONS__" +do + CC="$ac_save_CC $ac_arg" + if ac_fn_c_try_compile "$LINENO"; then : + ac_cv_prog_cc_c89=$ac_arg +fi +rm -f core conftest.err conftest.$ac_objext + test "x$ac_cv_prog_cc_c89" != "xno" && break +done +rm -f conftest.$ac_ext +CC=$ac_save_CC + +fi +# AC_CACHE_VAL +case "x$ac_cv_prog_cc_c89" in + x) + { $as_echo "$as_me:${as_lineno-$LINENO}: result: none needed" >&5 +$as_echo "none needed" >&6; } ;; + xno) + { $as_echo "$as_me:${as_lineno-$LINENO}: result: unsupported" >&5 +$as_echo "unsupported" >&6; } ;; + *) + CC="$CC $ac_cv_prog_cc_c89" + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cc_c89" >&5 +$as_echo "$ac_cv_prog_cc_c89" >&6; } ;; +esac +if test "x$ac_cv_prog_cc_c89" != xno; then : + +fi + +ac_ext=c +ac_cpp='$CPP $CPPFLAGS' +ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' +ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' +ac_compiler_gnu=$ac_cv_c_compiler_gnu + + + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for sqrt in -lm" >&5 +$as_echo_n "checking for sqrt in -lm... " >&6; } +if ${ac_cv_lib_m_sqrt+:} false; then : + $as_echo_n "(cached) " >&6 +else + ac_check_lib_save_LIBS=$LIBS +LIBS="-lm $LIBS" +cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +/* Override any GCC internal prototype to avoid an error. + Use char because int might match the return type of a GCC + builtin and then its argument prototype would still apply. */ +#ifdef __cplusplus +extern "C" +#endif +char sqrt (); +int +main () +{ +return sqrt (); + ; + return 0; +} +_ACEOF +if ac_fn_c_try_link "$LINENO"; then : + ac_cv_lib_m_sqrt=yes +else + ac_cv_lib_m_sqrt=no +fi +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext +LIBS=$ac_check_lib_save_LIBS +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_m_sqrt" >&5 +$as_echo "$ac_cv_lib_m_sqrt" >&6; } +if test "x$ac_cv_lib_m_sqrt" = xyes; then : + cat >>confdefs.h <<_ACEOF +#define HAVE_LIBM 1 +_ACEOF + + LIBS="-lm $LIBS" + +fi + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for clock_gettime in -lrt" >&5 +$as_echo_n "checking for clock_gettime in -lrt... " >&6; } +if ${ac_cv_lib_rt_clock_gettime+:} false; then : + $as_echo_n "(cached) " >&6 +else + ac_check_lib_save_LIBS=$LIBS +LIBS="-lrt $LIBS" +cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +/* Override any GCC internal prototype to avoid an error. + Use char because int might match the return type of a GCC + builtin and then its argument prototype would still apply. */ +#ifdef __cplusplus +extern "C" +#endif +char clock_gettime (); +int +main () +{ +return clock_gettime (); + ; + return 0; +} +_ACEOF +if ac_fn_c_try_link "$LINENO"; then : + ac_cv_lib_rt_clock_gettime=yes +else + ac_cv_lib_rt_clock_gettime=no +fi +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext +LIBS=$ac_check_lib_save_LIBS +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_rt_clock_gettime" >&5 +$as_echo "$ac_cv_lib_rt_clock_gettime" >&6; } +if test "x$ac_cv_lib_rt_clock_gettime" = xyes; then : + cat >>confdefs.h <<_ACEOF +#define HAVE_LIBRT 1 +_ACEOF + + LIBS="-lrt $LIBS" + +fi + + +case "$host" in + *-freebsd*) + # We don't want to set -lpthread as that break + # the ability to choose threads library at final + # link time and is not valid for all architectures. + + PTHREAD= + if test "X$GCC" = "Xyes"; then + saved_cc="$CC" + CC="$CC -pthread" + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for gcc -pthread support" >&5 +$as_echo_n "checking for gcc -pthread support... " >&6; }; + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#include +int +main () +{ +printf("%x\n", pthread_create); + ; + return 0; +} +_ACEOF +if ac_fn_c_try_link "$LINENO"; then : + PTHREAD="yes" + { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +$as_echo "yes" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext + CC="$saved_cc" + fi + if test "X$PTHREAD" != "Xyes"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for pthread_create in -lpthread" >&5 +$as_echo_n "checking for pthread_create in -lpthread... " >&6; } +if ${ac_cv_lib_pthread_pthread_create+:} false; then : + $as_echo_n "(cached) " >&6 +else + ac_check_lib_save_LIBS=$LIBS +LIBS="-lpthread $LIBS" +cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +/* Override any GCC internal prototype to avoid an error. + Use char because int might match the return type of a GCC + builtin and then its argument prototype would still apply. */ +#ifdef __cplusplus +extern "C" +#endif +char pthread_create (); +int +main () +{ +return pthread_create (); + ; + return 0; +} +_ACEOF +if ac_fn_c_try_link "$LINENO"; then : + ac_cv_lib_pthread_pthread_create=yes +else + ac_cv_lib_pthread_pthread_create=no +fi +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext +LIBS=$ac_check_lib_save_LIBS +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_pthread_pthread_create" >&5 +$as_echo "$ac_cv_lib_pthread_pthread_create" >&6; } +if test "x$ac_cv_lib_pthread_pthread_create" = xyes; then : + cat >>confdefs.h <<_ACEOF +#define HAVE_LIBPTHREAD 1 +_ACEOF + + LIBS="-lpthread $LIBS" + +else + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for thread_create in -lthr" >&5 +$as_echo_n "checking for thread_create in -lthr... " >&6; } +if ${ac_cv_lib_thr_thread_create+:} false; then : + $as_echo_n "(cached) " >&6 +else + ac_check_lib_save_LIBS=$LIBS +LIBS="-lthr $LIBS" +cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +/* Override any GCC internal prototype to avoid an error. + Use char because int might match the return type of a GCC + builtin and then its argument prototype would still apply. */ +#ifdef __cplusplus +extern "C" +#endif +char thread_create (); +int +main () +{ +return thread_create (); + ; + return 0; +} +_ACEOF +if ac_fn_c_try_link "$LINENO"; then : + ac_cv_lib_thr_thread_create=yes +else + ac_cv_lib_thr_thread_create=no +fi +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext +LIBS=$ac_check_lib_save_LIBS +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_thr_thread_create" >&5 +$as_echo "$ac_cv_lib_thr_thread_create" >&6; } +if test "x$ac_cv_lib_thr_thread_create" = xyes; then : + cat >>confdefs.h <<_ACEOF +#define HAVE_LIBTHR 1 +_ACEOF + + LIBS="-lthr $LIBS" + +else + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for pthread_create in -lc_r" >&5 +$as_echo_n "checking for pthread_create in -lc_r... " >&6; } +if ${ac_cv_lib_c_r_pthread_create+:} false; then : + $as_echo_n "(cached) " >&6 +else + ac_check_lib_save_LIBS=$LIBS +LIBS="-lc_r $LIBS" +cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +/* Override any GCC internal prototype to avoid an error. + Use char because int might match the return type of a GCC + builtin and then its argument prototype would still apply. */ +#ifdef __cplusplus +extern "C" +#endif +char pthread_create (); +int +main () +{ +return pthread_create (); + ; + return 0; +} +_ACEOF +if ac_fn_c_try_link "$LINENO"; then : + ac_cv_lib_c_r_pthread_create=yes +else + ac_cv_lib_c_r_pthread_create=no +fi +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext +LIBS=$ac_check_lib_save_LIBS +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_c_r_pthread_create" >&5 +$as_echo "$ac_cv_lib_c_r_pthread_create" >&6; } +if test "x$ac_cv_lib_c_r_pthread_create" = xyes; then : + cat >>confdefs.h <<_ACEOF +#define HAVE_LIBC_R 1 +_ACEOF + + LIBS="-lc_r $LIBS" + +else + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for pthread_create in -lc" >&5 +$as_echo_n "checking for pthread_create in -lc... " >&6; } +if ${ac_cv_lib_c_pthread_create+:} false; then : + $as_echo_n "(cached) " >&6 +else + ac_check_lib_save_LIBS=$LIBS +LIBS="-lc $LIBS" +cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +/* Override any GCC internal prototype to avoid an error. + Use char because int might match the return type of a GCC + builtin and then its argument prototype would still apply. */ +#ifdef __cplusplus +extern "C" +#endif +char pthread_create (); +int +main () +{ +return pthread_create (); + ; + return 0; +} +_ACEOF +if ac_fn_c_try_link "$LINENO"; then : + ac_cv_lib_c_pthread_create=yes +else + ac_cv_lib_c_pthread_create=no +fi +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext +LIBS=$ac_check_lib_save_LIBS +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_c_pthread_create" >&5 +$as_echo "$ac_cv_lib_c_pthread_create" >&6; } +if test "x$ac_cv_lib_c_pthread_create" = xyes; then : + cat >>confdefs.h <<_ACEOF +#define HAVE_LIBC 1 +_ACEOF + + LIBS="-lc $LIBS" + +else + as_fn_error $? "\"could not find thread libraries\"" "$LINENO" 5 +fi + +fi + +fi + +fi + + fi + ;; + *) + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for pthread_create in -lpthread" >&5 +$as_echo_n "checking for pthread_create in -lpthread... " >&6; } +if ${ac_cv_lib_pthread_pthread_create+:} false; then : + $as_echo_n "(cached) " >&6 +else + ac_check_lib_save_LIBS=$LIBS +LIBS="-lpthread $LIBS" +cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +/* Override any GCC internal prototype to avoid an error. + Use char because int might match the return type of a GCC + builtin and then its argument prototype would still apply. */ +#ifdef __cplusplus +extern "C" +#endif +char pthread_create (); +int +main () +{ +return pthread_create (); + ; + return 0; +} +_ACEOF +if ac_fn_c_try_link "$LINENO"; then : + ac_cv_lib_pthread_pthread_create=yes +else + ac_cv_lib_pthread_pthread_create=no +fi +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext +LIBS=$ac_check_lib_save_LIBS +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_pthread_pthread_create" >&5 +$as_echo "$ac_cv_lib_pthread_pthread_create" >&6; } +if test "x$ac_cv_lib_pthread_pthread_create" = xyes; then : + cat >>confdefs.h <<_ACEOF +#define HAVE_LIBPTHREAD 1 +_ACEOF + + LIBS="-lpthread $LIBS" + +else + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for __pthread_create in -lpthread" >&5 +$as_echo_n "checking for __pthread_create in -lpthread... " >&6; } +if ${ac_cv_lib_pthread___pthread_create+:} false; then : + $as_echo_n "(cached) " >&6 +else + ac_check_lib_save_LIBS=$LIBS +LIBS="-lpthread $LIBS" +cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +/* Override any GCC internal prototype to avoid an error. + Use char because int might match the return type of a GCC + builtin and then its argument prototype would still apply. */ +#ifdef __cplusplus +extern "C" +#endif +char __pthread_create (); +int +main () +{ +return __pthread_create (); + ; + return 0; +} +_ACEOF +if ac_fn_c_try_link "$LINENO"; then : + ac_cv_lib_pthread___pthread_create=yes +else + ac_cv_lib_pthread___pthread_create=no +fi +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext +LIBS=$ac_check_lib_save_LIBS +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_pthread___pthread_create" >&5 +$as_echo "$ac_cv_lib_pthread___pthread_create" >&6; } +if test "x$ac_cv_lib_pthread___pthread_create" = xyes; then : + cat >>confdefs.h <<_ACEOF +#define HAVE_LIBPTHREAD 1 +_ACEOF + + LIBS="-lpthread $LIBS" + +else + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for __pthread_create_system in -lpthread" >&5 +$as_echo_n "checking for __pthread_create_system in -lpthread... " >&6; } +if ${ac_cv_lib_pthread___pthread_create_system+:} false; then : + $as_echo_n "(cached) " >&6 +else + ac_check_lib_save_LIBS=$LIBS +LIBS="-lpthread $LIBS" +cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +/* Override any GCC internal prototype to avoid an error. + Use char because int might match the return type of a GCC + builtin and then its argument prototype would still apply. */ +#ifdef __cplusplus +extern "C" +#endif +char __pthread_create_system (); +int +main () +{ +return __pthread_create_system (); + ; + return 0; +} +_ACEOF +if ac_fn_c_try_link "$LINENO"; then : + ac_cv_lib_pthread___pthread_create_system=yes +else + ac_cv_lib_pthread___pthread_create_system=no +fi +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext +LIBS=$ac_check_lib_save_LIBS +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_pthread___pthread_create_system" >&5 +$as_echo "$ac_cv_lib_pthread___pthread_create_system" >&6; } +if test "x$ac_cv_lib_pthread___pthread_create_system" = xyes; then : + cat >>confdefs.h <<_ACEOF +#define HAVE_LIBPTHREAD 1 +_ACEOF + + LIBS="-lpthread $LIBS" + +else + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for pthread_create in -lc_r" >&5 +$as_echo_n "checking for pthread_create in -lc_r... " >&6; } +if ${ac_cv_lib_c_r_pthread_create+:} false; then : + $as_echo_n "(cached) " >&6 +else + ac_check_lib_save_LIBS=$LIBS +LIBS="-lc_r $LIBS" +cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +/* Override any GCC internal prototype to avoid an error. + Use char because int might match the return type of a GCC + builtin and then its argument prototype would still apply. */ +#ifdef __cplusplus +extern "C" +#endif +char pthread_create (); +int +main () +{ +return pthread_create (); + ; + return 0; +} +_ACEOF +if ac_fn_c_try_link "$LINENO"; then : + ac_cv_lib_c_r_pthread_create=yes +else + ac_cv_lib_c_r_pthread_create=no +fi +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext +LIBS=$ac_check_lib_save_LIBS +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_c_r_pthread_create" >&5 +$as_echo "$ac_cv_lib_c_r_pthread_create" >&6; } +if test "x$ac_cv_lib_c_r_pthread_create" = xyes; then : + cat >>confdefs.h <<_ACEOF +#define HAVE_LIBC_R 1 +_ACEOF + + LIBS="-lc_r $LIBS" + +else + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for pthread_create in -lc" >&5 +$as_echo_n "checking for pthread_create in -lc... " >&6; } +if ${ac_cv_lib_c_pthread_create+:} false; then : + $as_echo_n "(cached) " >&6 +else + ac_check_lib_save_LIBS=$LIBS +LIBS="-lc $LIBS" +cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +/* Override any GCC internal prototype to avoid an error. + Use char because int might match the return type of a GCC + builtin and then its argument prototype would still apply. */ +#ifdef __cplusplus +extern "C" +#endif +char pthread_create (); +int +main () +{ +return pthread_create (); + ; + return 0; +} +_ACEOF +if ac_fn_c_try_link "$LINENO"; then : + ac_cv_lib_c_pthread_create=yes +else + ac_cv_lib_c_pthread_create=no +fi +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext +LIBS=$ac_check_lib_save_LIBS +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_c_pthread_create" >&5 +$as_echo "$ac_cv_lib_c_pthread_create" >&6; } +if test "x$ac_cv_lib_c_pthread_create" = xyes; then : + cat >>confdefs.h <<_ACEOF +#define HAVE_LIBC 1 +_ACEOF + + LIBS="-lc $LIBS" + +else + as_fn_error $? "\"could not find thread libraries\"" "$LINENO" 5 +fi + +fi + +fi + +fi + +fi + + ;; +esac + +ac_config_files="$ac_config_files Makefile" + +cat >confcache <<\_ACEOF +# This file is a shell script that caches the results of configure +# tests run on this system so they can be shared between configure +# scripts and configure runs, see configure's option --config-cache. +# It is not useful on other systems. If it contains results you don't +# want to keep, you may remove or edit it. +# +# config.status only pays attention to the cache file if you give it +# the --recheck option to rerun configure. +# +# `ac_cv_env_foo' variables (set or unset) will be overridden when +# loading this file, other *unset* `ac_cv_foo' will be assigned the +# following values. + +_ACEOF + +# The following way of writing the cache mishandles newlines in values, +# but we know of no workaround that is simple, portable, and efficient. +# So, we kill variables containing newlines. +# Ultrix sh set writes to stderr and can't be redirected directly, +# and sets the high bit in the cache file unless we assign to the vars. +( + for ac_var in `(set) 2>&1 | sed -n 's/^\([a-zA-Z_][a-zA-Z0-9_]*\)=.*/\1/p'`; do + eval ac_val=\$$ac_var + case $ac_val in #( + *${as_nl}*) + case $ac_var in #( + *_cv_*) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: cache variable $ac_var contains a newline" >&5 +$as_echo "$as_me: WARNING: cache variable $ac_var contains a newline" >&2;} ;; + esac + case $ac_var in #( + _ | IFS | as_nl) ;; #( + BASH_ARGV | BASH_SOURCE) eval $ac_var= ;; #( + *) { eval $ac_var=; unset $ac_var;} ;; + esac ;; + esac + done + + (set) 2>&1 | + case $as_nl`(ac_space=' '; set) 2>&1` in #( + *${as_nl}ac_space=\ *) + # `set' does not quote correctly, so add quotes: double-quote + # substitution turns \\\\ into \\, and sed turns \\ into \. + sed -n \ + "s/'/'\\\\''/g; + s/^\\([_$as_cr_alnum]*_cv_[_$as_cr_alnum]*\\)=\\(.*\\)/\\1='\\2'/p" + ;; #( + *) + # `set' quotes correctly as required by POSIX, so do not add quotes. + sed -n "/^[_$as_cr_alnum]*_cv_[_$as_cr_alnum]*=/p" + ;; + esac | + sort +) | + sed ' + /^ac_cv_env_/b end + t clear + :clear + s/^\([^=]*\)=\(.*[{}].*\)$/test "${\1+set}" = set || &/ + t end + s/^\([^=]*\)=\(.*\)$/\1=${\1=\2}/ + :end' >>confcache +if diff "$cache_file" confcache >/dev/null 2>&1; then :; else + if test -w "$cache_file"; then + if test "x$cache_file" != "x/dev/null"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: updating cache $cache_file" >&5 +$as_echo "$as_me: updating cache $cache_file" >&6;} + if test ! -f "$cache_file" || test -h "$cache_file"; then + cat confcache >"$cache_file" + else + case $cache_file in #( + */* | ?:*) + mv -f confcache "$cache_file"$$ && + mv -f "$cache_file"$$ "$cache_file" ;; #( + *) + mv -f confcache "$cache_file" ;; + esac + fi + fi + else + { $as_echo "$as_me:${as_lineno-$LINENO}: not updating unwritable cache $cache_file" >&5 +$as_echo "$as_me: not updating unwritable cache $cache_file" >&6;} + fi +fi +rm -f confcache + +test "x$prefix" = xNONE && prefix=$ac_default_prefix +# Let make expand exec_prefix. +test "x$exec_prefix" = xNONE && exec_prefix='${prefix}' + +# Transform confdefs.h into DEFS. +# Protect against shell expansion while executing Makefile rules. +# Protect against Makefile macro expansion. +# +# If the first sed substitution is executed (which looks for macros that +# take arguments), then branch to the quote section. Otherwise, +# look for a macro that doesn't take arguments. +ac_script=' +:mline +/\\$/{ + N + s,\\\n,, + b mline +} +t clear +:clear +s/^[ ]*#[ ]*define[ ][ ]*\([^ (][^ (]*([^)]*)\)[ ]*\(.*\)/-D\1=\2/g +t quote +s/^[ ]*#[ ]*define[ ][ ]*\([^ ][^ ]*\)[ ]*\(.*\)/-D\1=\2/g +t quote +b any +:quote +s/[ `~#$^&*(){}\\|;'\''"<>?]/\\&/g +s/\[/\\&/g +s/\]/\\&/g +s/\$/$$/g +H +:any +${ + g + s/^\n// + s/\n/ /g + p +} +' +DEFS=`sed -n "$ac_script" confdefs.h` + + +ac_libobjs= +ac_ltlibobjs= +U= +for ac_i in : $LIBOBJS; do test "x$ac_i" = x: && continue + # 1. Remove the extension, and $U if already installed. + ac_script='s/\$U\././;s/\.o$//;s/\.obj$//' + ac_i=`$as_echo "$ac_i" | sed "$ac_script"` + # 2. Prepend LIBOBJDIR. When used with automake>=1.10 LIBOBJDIR + # will be set to the directory where LIBOBJS objects are built. + as_fn_append ac_libobjs " \${LIBOBJDIR}$ac_i\$U.$ac_objext" + as_fn_append ac_ltlibobjs " \${LIBOBJDIR}$ac_i"'$U.lo' +done +LIBOBJS=$ac_libobjs + +LTLIBOBJS=$ac_ltlibobjs + + + +: "${CONFIG_STATUS=./config.status}" +ac_write_fail=0 +ac_clean_files_save=$ac_clean_files +ac_clean_files="$ac_clean_files $CONFIG_STATUS" +{ $as_echo "$as_me:${as_lineno-$LINENO}: creating $CONFIG_STATUS" >&5 +$as_echo "$as_me: creating $CONFIG_STATUS" >&6;} +as_write_fail=0 +cat >$CONFIG_STATUS <<_ASEOF || as_write_fail=1 +#! $SHELL +# Generated by $as_me. +# Run this file to recreate the current configuration. +# Compiler output produced by configure, useful for debugging +# configure, is in config.log if it exists. + +debug=false +ac_cs_recheck=false +ac_cs_silent=false + +SHELL=\${CONFIG_SHELL-$SHELL} +export SHELL +_ASEOF +cat >>$CONFIG_STATUS <<\_ASEOF || as_write_fail=1 +## -------------------- ## +## M4sh Initialization. ## +## -------------------- ## + +# Be more Bourne compatible +DUALCASE=1; export DUALCASE # for MKS sh +if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then : + emulate sh + NULLCMD=: + # Pre-4.2 versions of Zsh do word splitting on ${1+"$@"}, which + # is contrary to our usage. Disable this feature. + alias -g '${1+"$@"}'='"$@"' + setopt NO_GLOB_SUBST +else + case `(set -o) 2>/dev/null` in #( + *posix*) : + set -o posix ;; #( + *) : + ;; +esac +fi + + +as_nl=' +' +export as_nl +# Printing a long string crashes Solaris 7 /usr/bin/printf. +as_echo='\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\' +as_echo=$as_echo$as_echo$as_echo$as_echo$as_echo +as_echo=$as_echo$as_echo$as_echo$as_echo$as_echo$as_echo +# Prefer a ksh shell builtin over an external printf program on Solaris, +# but without wasting forks for bash or zsh. +if test -z "$BASH_VERSION$ZSH_VERSION" \ + && (test "X`print -r -- $as_echo`" = "X$as_echo") 2>/dev/null; then + as_echo='print -r --' + as_echo_n='print -rn --' +elif (test "X`printf %s $as_echo`" = "X$as_echo") 2>/dev/null; then + as_echo='printf %s\n' + as_echo_n='printf %s' +else + if test "X`(/usr/ucb/echo -n -n $as_echo) 2>/dev/null`" = "X-n $as_echo"; then + as_echo_body='eval /usr/ucb/echo -n "$1$as_nl"' + as_echo_n='/usr/ucb/echo -n' + else + as_echo_body='eval expr "X$1" : "X\\(.*\\)"' + as_echo_n_body='eval + arg=$1; + case $arg in #( + *"$as_nl"*) + expr "X$arg" : "X\\(.*\\)$as_nl"; + arg=`expr "X$arg" : ".*$as_nl\\(.*\\)"`;; + esac; + expr "X$arg" : "X\\(.*\\)" | tr -d "$as_nl" + ' + export as_echo_n_body + as_echo_n='sh -c $as_echo_n_body as_echo' + fi + export as_echo_body + as_echo='sh -c $as_echo_body as_echo' +fi + +# The user is always right. +if test "${PATH_SEPARATOR+set}" != set; then + PATH_SEPARATOR=: + (PATH='/bin;/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 && { + (PATH='/bin:/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 || + PATH_SEPARATOR=';' + } +fi + + +# IFS +# We need space, tab and new line, in precisely that order. Quoting is +# there to prevent editors from complaining about space-tab. +# (If _AS_PATH_WALK were called with IFS unset, it would disable word +# splitting by setting IFS to empty value.) +IFS=" "" $as_nl" + +# Find who we are. Look in the path if we contain no directory separator. +as_myself= +case $0 in #(( + *[\\/]* ) as_myself=$0 ;; + *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + test -r "$as_dir/$0" && as_myself=$as_dir/$0 && break + done +IFS=$as_save_IFS + + ;; +esac +# We did not find ourselves, most probably we were run as `sh COMMAND' +# in which case we are not to be found in the path. +if test "x$as_myself" = x; then + as_myself=$0 +fi +if test ! -f "$as_myself"; then + $as_echo "$as_myself: error: cannot find myself; rerun with an absolute file name" >&2 + exit 1 +fi + +# Unset variables that we do not need and which cause bugs (e.g. in +# pre-3.0 UWIN ksh). But do not cause bugs in bash 2.01; the "|| exit 1" +# suppresses any "Segmentation fault" message there. '((' could +# trigger a bug in pdksh 5.2.14. +for as_var in BASH_ENV ENV MAIL MAILPATH +do eval test x\${$as_var+set} = xset \ + && ( (unset $as_var) || exit 1) >/dev/null 2>&1 && unset $as_var || : +done +PS1='$ ' +PS2='> ' +PS4='+ ' + +# NLS nuisances. +LC_ALL=C +export LC_ALL +LANGUAGE=C +export LANGUAGE + +# CDPATH. +(unset CDPATH) >/dev/null 2>&1 && unset CDPATH + + +# as_fn_error STATUS ERROR [LINENO LOG_FD] +# ---------------------------------------- +# Output "`basename $0`: error: ERROR" to stderr. If LINENO and LOG_FD are +# provided, also output the error to LOG_FD, referencing LINENO. Then exit the +# script with STATUS, using 1 if that was 0. +as_fn_error () +{ + as_status=$1; test $as_status -eq 0 && as_status=1 + if test "$4"; then + as_lineno=${as_lineno-"$3"} as_lineno_stack=as_lineno_stack=$as_lineno_stack + $as_echo "$as_me:${as_lineno-$LINENO}: error: $2" >&$4 + fi + $as_echo "$as_me: error: $2" >&2 + as_fn_exit $as_status +} # as_fn_error + + +# as_fn_set_status STATUS +# ----------------------- +# Set $? to STATUS, without forking. +as_fn_set_status () +{ + return $1 +} # as_fn_set_status + +# as_fn_exit STATUS +# ----------------- +# Exit the shell with STATUS, even in a "trap 0" or "set -e" context. +as_fn_exit () +{ + set +e + as_fn_set_status $1 + exit $1 +} # as_fn_exit + +# as_fn_unset VAR +# --------------- +# Portably unset VAR. +as_fn_unset () +{ + { eval $1=; unset $1;} +} +as_unset=as_fn_unset +# as_fn_append VAR VALUE +# ---------------------- +# Append the text in VALUE to the end of the definition contained in VAR. Take +# advantage of any shell optimizations that allow amortized linear growth over +# repeated appends, instead of the typical quadratic growth present in naive +# implementations. +if (eval "as_var=1; as_var+=2; test x\$as_var = x12") 2>/dev/null; then : + eval 'as_fn_append () + { + eval $1+=\$2 + }' +else + as_fn_append () + { + eval $1=\$$1\$2 + } +fi # as_fn_append + +# as_fn_arith ARG... +# ------------------ +# Perform arithmetic evaluation on the ARGs, and store the result in the +# global $as_val. Take advantage of shells that can avoid forks. The arguments +# must be portable across $(()) and expr. +if (eval "test \$(( 1 + 1 )) = 2") 2>/dev/null; then : + eval 'as_fn_arith () + { + as_val=$(( $* )) + }' +else + as_fn_arith () + { + as_val=`expr "$@" || test $? -eq 1` + } +fi # as_fn_arith + + +if expr a : '\(a\)' >/dev/null 2>&1 && + test "X`expr 00001 : '.*\(...\)'`" = X001; then + as_expr=expr +else + as_expr=false +fi + +if (basename -- /) >/dev/null 2>&1 && test "X`basename -- / 2>&1`" = "X/"; then + as_basename=basename +else + as_basename=false +fi + +if (as_dir=`dirname -- /` && test "X$as_dir" = X/) >/dev/null 2>&1; then + as_dirname=dirname +else + as_dirname=false +fi + +as_me=`$as_basename -- "$0" || +$as_expr X/"$0" : '.*/\([^/][^/]*\)/*$' \| \ + X"$0" : 'X\(//\)$' \| \ + X"$0" : 'X\(/\)' \| . 2>/dev/null || +$as_echo X/"$0" | + sed '/^.*\/\([^/][^/]*\)\/*$/{ + s//\1/ + q + } + /^X\/\(\/\/\)$/{ + s//\1/ + q + } + /^X\/\(\/\).*/{ + s//\1/ + q + } + s/.*/./; q'` + +# Avoid depending upon Character Ranges. +as_cr_letters='abcdefghijklmnopqrstuvwxyz' +as_cr_LETTERS='ABCDEFGHIJKLMNOPQRSTUVWXYZ' +as_cr_Letters=$as_cr_letters$as_cr_LETTERS +as_cr_digits='0123456789' +as_cr_alnum=$as_cr_Letters$as_cr_digits + +ECHO_C= ECHO_N= ECHO_T= +case `echo -n x` in #((((( +-n*) + case `echo 'xy\c'` in + *c*) ECHO_T=' ';; # ECHO_T is single tab character. + xy) ECHO_C='\c';; + *) echo `echo ksh88 bug on AIX 6.1` > /dev/null + ECHO_T=' ';; + esac;; +*) + ECHO_N='-n';; +esac + +rm -f conf$$ conf$$.exe conf$$.file +if test -d conf$$.dir; then + rm -f conf$$.dir/conf$$.file +else + rm -f conf$$.dir + mkdir conf$$.dir 2>/dev/null +fi +if (echo >conf$$.file) 2>/dev/null; then + if ln -s conf$$.file conf$$ 2>/dev/null; then + as_ln_s='ln -s' + # ... but there are two gotchas: + # 1) On MSYS, both `ln -s file dir' and `ln file dir' fail. + # 2) DJGPP < 2.04 has no symlinks; `ln -s' creates a wrapper executable. + # In both cases, we have to default to `cp -pR'. + ln -s conf$$.file conf$$.dir 2>/dev/null && test ! -f conf$$.exe || + as_ln_s='cp -pR' + elif ln conf$$.file conf$$ 2>/dev/null; then + as_ln_s=ln + else + as_ln_s='cp -pR' + fi +else + as_ln_s='cp -pR' +fi +rm -f conf$$ conf$$.exe conf$$.dir/conf$$.file conf$$.file +rmdir conf$$.dir 2>/dev/null + + +# as_fn_mkdir_p +# ------------- +# Create "$as_dir" as a directory, including parents if necessary. +as_fn_mkdir_p () +{ + + case $as_dir in #( + -*) as_dir=./$as_dir;; + esac + test -d "$as_dir" || eval $as_mkdir_p || { + as_dirs= + while :; do + case $as_dir in #( + *\'*) as_qdir=`$as_echo "$as_dir" | sed "s/'/'\\\\\\\\''/g"`;; #'( + *) as_qdir=$as_dir;; + esac + as_dirs="'$as_qdir' $as_dirs" + as_dir=`$as_dirname -- "$as_dir" || +$as_expr X"$as_dir" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ + X"$as_dir" : 'X\(//\)[^/]' \| \ + X"$as_dir" : 'X\(//\)$' \| \ + X"$as_dir" : 'X\(/\)' \| . 2>/dev/null || +$as_echo X"$as_dir" | + sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ + s//\1/ + q + } + /^X\(\/\/\)[^/].*/{ + s//\1/ + q + } + /^X\(\/\/\)$/{ + s//\1/ + q + } + /^X\(\/\).*/{ + s//\1/ + q + } + s/.*/./; q'` + test -d "$as_dir" && break + done + test -z "$as_dirs" || eval "mkdir $as_dirs" + } || test -d "$as_dir" || as_fn_error $? "cannot create directory $as_dir" + + +} # as_fn_mkdir_p +if mkdir -p . 2>/dev/null; then + as_mkdir_p='mkdir -p "$as_dir"' +else + test -d ./-p && rmdir ./-p + as_mkdir_p=false +fi + + +# as_fn_executable_p FILE +# ----------------------- +# Test if FILE is an executable regular file. +as_fn_executable_p () +{ + test -f "$1" && test -x "$1" +} # as_fn_executable_p +as_test_x='test -x' +as_executable_p=as_fn_executable_p + +# Sed expression to map a string onto a valid CPP name. +as_tr_cpp="eval sed 'y%*$as_cr_letters%P$as_cr_LETTERS%;s%[^_$as_cr_alnum]%_%g'" + +# Sed expression to map a string onto a valid variable name. +as_tr_sh="eval sed 'y%*+%pp%;s%[^_$as_cr_alnum]%_%g'" + + +exec 6>&1 +## ----------------------------------- ## +## Main body of $CONFIG_STATUS script. ## +## ----------------------------------- ## +_ASEOF +test $as_write_fail = 0 && chmod +x $CONFIG_STATUS || ac_write_fail=1 + +cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 +# Save the log message, to keep $0 and so on meaningful, and to +# report actual input values of CONFIG_FILES etc. instead of their +# values after options handling. +ac_log=" +This file was extended by $as_me, which was +generated by GNU Autoconf 2.69. Invocation command line was + + CONFIG_FILES = $CONFIG_FILES + CONFIG_HEADERS = $CONFIG_HEADERS + CONFIG_LINKS = $CONFIG_LINKS + CONFIG_COMMANDS = $CONFIG_COMMANDS + $ $0 $@ + +on `(hostname || uname -n) 2>/dev/null | sed 1q` +" + +_ACEOF + +case $ac_config_files in *" +"*) set x $ac_config_files; shift; ac_config_files=$*;; +esac + + + +cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 +# Files that config.status was made for. +config_files="$ac_config_files" + +_ACEOF + +cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 +ac_cs_usage="\ +\`$as_me' instantiates files and other configuration actions +from templates according to the current configuration. Unless the files +and actions are specified as TAGs, all are instantiated by default. + +Usage: $0 [OPTION]... [TAG]... + + -h, --help print this help, then exit + -V, --version print version number and configuration settings, then exit + --config print configuration, then exit + -q, --quiet, --silent + do not print progress messages + -d, --debug don't remove temporary files + --recheck update $as_me by reconfiguring in the same conditions + --file=FILE[:TEMPLATE] + instantiate the configuration file FILE + +Configuration files: +$config_files + +Report bugs to the package provider." + +_ACEOF +cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 +ac_cs_config="`$as_echo "$ac_configure_args" | sed 's/^ //; s/[\\""\`\$]/\\\\&/g'`" +ac_cs_version="\\ +config.status +configured by $0, generated by GNU Autoconf 2.69, + with options \\"\$ac_cs_config\\" + +Copyright (C) 2012 Free Software Foundation, Inc. +This config.status script is free software; the Free Software Foundation +gives unlimited permission to copy, distribute and modify it." + +ac_pwd='$ac_pwd' +srcdir='$srcdir' +test -n "\$AWK" || AWK=awk +_ACEOF + +cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 +# The default lists apply if the user does not specify any file. +ac_need_defaults=: +while test $# != 0 +do + case $1 in + --*=?*) + ac_option=`expr "X$1" : 'X\([^=]*\)='` + ac_optarg=`expr "X$1" : 'X[^=]*=\(.*\)'` + ac_shift=: + ;; + --*=) + ac_option=`expr "X$1" : 'X\([^=]*\)='` + ac_optarg= + ac_shift=: + ;; + *) + ac_option=$1 + ac_optarg=$2 + ac_shift=shift + ;; + esac + + case $ac_option in + # Handling of the options. + -recheck | --recheck | --rechec | --reche | --rech | --rec | --re | --r) + ac_cs_recheck=: ;; + --version | --versio | --versi | --vers | --ver | --ve | --v | -V ) + $as_echo "$ac_cs_version"; exit ;; + --config | --confi | --conf | --con | --co | --c ) + $as_echo "$ac_cs_config"; exit ;; + --debug | --debu | --deb | --de | --d | -d ) + debug=: ;; + --file | --fil | --fi | --f ) + $ac_shift + case $ac_optarg in + *\'*) ac_optarg=`$as_echo "$ac_optarg" | sed "s/'/'\\\\\\\\''/g"` ;; + '') as_fn_error $? "missing file argument" ;; + esac + as_fn_append CONFIG_FILES " '$ac_optarg'" + ac_need_defaults=false;; + --he | --h | --help | --hel | -h ) + $as_echo "$ac_cs_usage"; exit ;; + -q | -quiet | --quiet | --quie | --qui | --qu | --q \ + | -silent | --silent | --silen | --sile | --sil | --si | --s) + ac_cs_silent=: ;; + + # This is an error. + -*) as_fn_error $? "unrecognized option: \`$1' +Try \`$0 --help' for more information." ;; + + *) as_fn_append ac_config_targets " $1" + ac_need_defaults=false ;; + + esac + shift +done + +ac_configure_extra_args= + +if $ac_cs_silent; then + exec 6>/dev/null + ac_configure_extra_args="$ac_configure_extra_args --silent" +fi + +_ACEOF +cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 +if \$ac_cs_recheck; then + set X $SHELL '$0' $ac_configure_args \$ac_configure_extra_args --no-create --no-recursion + shift + \$as_echo "running CONFIG_SHELL=$SHELL \$*" >&6 + CONFIG_SHELL='$SHELL' + export CONFIG_SHELL + exec "\$@" +fi + +_ACEOF +cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 +exec 5>>config.log +{ + echo + sed 'h;s/./-/g;s/^.../## /;s/...$/ ##/;p;x;p;x' <<_ASBOX +## Running $as_me. ## +_ASBOX + $as_echo "$ac_log" +} >&5 + +_ACEOF +cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 +_ACEOF + +cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 + +# Handling of arguments. +for ac_config_target in $ac_config_targets +do + case $ac_config_target in + "Makefile") CONFIG_FILES="$CONFIG_FILES Makefile" ;; + + *) as_fn_error $? "invalid argument: \`$ac_config_target'" "$LINENO" 5;; + esac +done + + +# If the user did not use the arguments to specify the items to instantiate, +# then the envvar interface is used. Set only those that are not. +# We use the long form for the default assignment because of an extremely +# bizarre bug on SunOS 4.1.3. +if $ac_need_defaults; then + test "${CONFIG_FILES+set}" = set || CONFIG_FILES=$config_files +fi + +# Have a temporary directory for convenience. Make it in the build tree +# simply because there is no reason against having it here, and in addition, +# creating and moving files from /tmp can sometimes cause problems. +# Hook for its removal unless debugging. +# Note that there is a small window in which the directory will not be cleaned: +# after its creation but before its name has been assigned to `$tmp'. +$debug || +{ + tmp= ac_tmp= + trap 'exit_status=$? + : "${ac_tmp:=$tmp}" + { test ! -d "$ac_tmp" || rm -fr "$ac_tmp"; } && exit $exit_status +' 0 + trap 'as_fn_exit 1' 1 2 13 15 +} +# Create a (secure) tmp directory for tmp files. + +{ + tmp=`(umask 077 && mktemp -d "./confXXXXXX") 2>/dev/null` && + test -d "$tmp" +} || +{ + tmp=./conf$$-$RANDOM + (umask 077 && mkdir "$tmp") +} || as_fn_error $? "cannot create a temporary directory in ." "$LINENO" 5 +ac_tmp=$tmp + +# Set up the scripts for CONFIG_FILES section. +# No need to generate them if there are no CONFIG_FILES. +# This happens for instance with `./config.status config.h'. +if test -n "$CONFIG_FILES"; then + + +ac_cr=`echo X | tr X '\015'` +# On cygwin, bash can eat \r inside `` if the user requested igncr. +# But we know of no other shell where ac_cr would be empty at this +# point, so we can use a bashism as a fallback. +if test "x$ac_cr" = x; then + eval ac_cr=\$\'\\r\' +fi +ac_cs_awk_cr=`$AWK 'BEGIN { print "a\rb" }' /dev/null` +if test "$ac_cs_awk_cr" = "a${ac_cr}b"; then + ac_cs_awk_cr='\\r' +else + ac_cs_awk_cr=$ac_cr +fi + +echo 'BEGIN {' >"$ac_tmp/subs1.awk" && +_ACEOF + + +{ + echo "cat >conf$$subs.awk <<_ACEOF" && + echo "$ac_subst_vars" | sed 's/.*/&!$&$ac_delim/' && + echo "_ACEOF" +} >conf$$subs.sh || + as_fn_error $? "could not make $CONFIG_STATUS" "$LINENO" 5 +ac_delim_num=`echo "$ac_subst_vars" | grep -c '^'` +ac_delim='%!_!# ' +for ac_last_try in false false false false false :; do + . ./conf$$subs.sh || + as_fn_error $? "could not make $CONFIG_STATUS" "$LINENO" 5 + + ac_delim_n=`sed -n "s/.*$ac_delim\$/X/p" conf$$subs.awk | grep -c X` + if test $ac_delim_n = $ac_delim_num; then + break + elif $ac_last_try; then + as_fn_error $? "could not make $CONFIG_STATUS" "$LINENO" 5 + else + ac_delim="$ac_delim!$ac_delim _$ac_delim!! " + fi +done +rm -f conf$$subs.sh + +cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 +cat >>"\$ac_tmp/subs1.awk" <<\\_ACAWK && +_ACEOF +sed -n ' +h +s/^/S["/; s/!.*/"]=/ +p +g +s/^[^!]*!// +:repl +t repl +s/'"$ac_delim"'$// +t delim +:nl +h +s/\(.\{148\}\)..*/\1/ +t more1 +s/["\\]/\\&/g; s/^/"/; s/$/\\n"\\/ +p +n +b repl +:more1 +s/["\\]/\\&/g; s/^/"/; s/$/"\\/ +p +g +s/.\{148\}// +t nl +:delim +h +s/\(.\{148\}\)..*/\1/ +t more2 +s/["\\]/\\&/g; s/^/"/; s/$/"/ +p +b +:more2 +s/["\\]/\\&/g; s/^/"/; s/$/"\\/ +p +g +s/.\{148\}// +t delim +' >$CONFIG_STATUS || ac_write_fail=1 +rm -f conf$$subs.awk +cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 +_ACAWK +cat >>"\$ac_tmp/subs1.awk" <<_ACAWK && + for (key in S) S_is_set[key] = 1 + FS = "" + +} +{ + line = $ 0 + nfields = split(line, field, "@") + substed = 0 + len = length(field[1]) + for (i = 2; i < nfields; i++) { + key = field[i] + keylen = length(key) + if (S_is_set[key]) { + value = S[key] + line = substr(line, 1, len) "" value "" substr(line, len + keylen + 3) + len += length(value) + length(field[++i]) + substed = 1 + } else + len += 1 + keylen + } + + print line +} + +_ACAWK +_ACEOF +cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 +if sed "s/$ac_cr//" < /dev/null > /dev/null 2>&1; then + sed "s/$ac_cr\$//; s/$ac_cr/$ac_cs_awk_cr/g" +else + cat +fi < "$ac_tmp/subs1.awk" > "$ac_tmp/subs.awk" \ + || as_fn_error $? "could not setup config files machinery" "$LINENO" 5 +_ACEOF + +# VPATH may cause trouble with some makes, so we remove sole $(srcdir), +# ${srcdir} and @srcdir@ entries from VPATH if srcdir is ".", strip leading and +# trailing colons and then remove the whole line if VPATH becomes empty +# (actually we leave an empty line to preserve line numbers). +if test "x$srcdir" = x.; then + ac_vpsub='/^[ ]*VPATH[ ]*=[ ]*/{ +h +s/// +s/^/:/ +s/[ ]*$/:/ +s/:\$(srcdir):/:/g +s/:\${srcdir}:/:/g +s/:@srcdir@:/:/g +s/^:*// +s/:*$// +x +s/\(=[ ]*\).*/\1/ +G +s/\n// +s/^[^=]*=[ ]*$// +}' +fi + +cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 +fi # test -n "$CONFIG_FILES" + + +eval set X " :F $CONFIG_FILES " +shift +for ac_tag +do + case $ac_tag in + :[FHLC]) ac_mode=$ac_tag; continue;; + esac + case $ac_mode$ac_tag in + :[FHL]*:*);; + :L* | :C*:*) as_fn_error $? "invalid tag \`$ac_tag'" "$LINENO" 5;; + :[FH]-) ac_tag=-:-;; + :[FH]*) ac_tag=$ac_tag:$ac_tag.in;; + esac + ac_save_IFS=$IFS + IFS=: + set x $ac_tag + IFS=$ac_save_IFS + shift + ac_file=$1 + shift + + case $ac_mode in + :L) ac_source=$1;; + :[FH]) + ac_file_inputs= + for ac_f + do + case $ac_f in + -) ac_f="$ac_tmp/stdin";; + *) # Look for the file first in the build tree, then in the source tree + # (if the path is not absolute). The absolute path cannot be DOS-style, + # because $ac_f cannot contain `:'. + test -f "$ac_f" || + case $ac_f in + [\\/$]*) false;; + *) test -f "$srcdir/$ac_f" && ac_f="$srcdir/$ac_f";; + esac || + as_fn_error 1 "cannot find input file: \`$ac_f'" "$LINENO" 5;; + esac + case $ac_f in *\'*) ac_f=`$as_echo "$ac_f" | sed "s/'/'\\\\\\\\''/g"`;; esac + as_fn_append ac_file_inputs " '$ac_f'" + done + + # Let's still pretend it is `configure' which instantiates (i.e., don't + # use $as_me), people would be surprised to read: + # /* config.h. Generated by config.status. */ + configure_input='Generated from '` + $as_echo "$*" | sed 's|^[^:]*/||;s|:[^:]*/|, |g' + `' by configure.' + if test x"$ac_file" != x-; then + configure_input="$ac_file. $configure_input" + { $as_echo "$as_me:${as_lineno-$LINENO}: creating $ac_file" >&5 +$as_echo "$as_me: creating $ac_file" >&6;} + fi + # Neutralize special characters interpreted by sed in replacement strings. + case $configure_input in #( + *\&* | *\|* | *\\* ) + ac_sed_conf_input=`$as_echo "$configure_input" | + sed 's/[\\\\&|]/\\\\&/g'`;; #( + *) ac_sed_conf_input=$configure_input;; + esac + + case $ac_tag in + *:-:* | *:-) cat >"$ac_tmp/stdin" \ + || as_fn_error $? "could not create $ac_file" "$LINENO" 5 ;; + esac + ;; + esac + + ac_dir=`$as_dirname -- "$ac_file" || +$as_expr X"$ac_file" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ + X"$ac_file" : 'X\(//\)[^/]' \| \ + X"$ac_file" : 'X\(//\)$' \| \ + X"$ac_file" : 'X\(/\)' \| . 2>/dev/null || +$as_echo X"$ac_file" | + sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ + s//\1/ + q + } + /^X\(\/\/\)[^/].*/{ + s//\1/ + q + } + /^X\(\/\/\)$/{ + s//\1/ + q + } + /^X\(\/\).*/{ + s//\1/ + q + } + s/.*/./; q'` + as_dir="$ac_dir"; as_fn_mkdir_p + ac_builddir=. + +case "$ac_dir" in +.) ac_dir_suffix= ac_top_builddir_sub=. ac_top_build_prefix= ;; +*) + ac_dir_suffix=/`$as_echo "$ac_dir" | sed 's|^\.[\\/]||'` + # A ".." for each directory in $ac_dir_suffix. + ac_top_builddir_sub=`$as_echo "$ac_dir_suffix" | sed 's|/[^\\/]*|/..|g;s|/||'` + case $ac_top_builddir_sub in + "") ac_top_builddir_sub=. ac_top_build_prefix= ;; + *) ac_top_build_prefix=$ac_top_builddir_sub/ ;; + esac ;; +esac +ac_abs_top_builddir=$ac_pwd +ac_abs_builddir=$ac_pwd$ac_dir_suffix +# for backward compatibility: +ac_top_builddir=$ac_top_build_prefix + +case $srcdir in + .) # We are building in place. + ac_srcdir=. + ac_top_srcdir=$ac_top_builddir_sub + ac_abs_top_srcdir=$ac_pwd ;; + [\\/]* | ?:[\\/]* ) # Absolute name. + ac_srcdir=$srcdir$ac_dir_suffix; + ac_top_srcdir=$srcdir + ac_abs_top_srcdir=$srcdir ;; + *) # Relative name. + ac_srcdir=$ac_top_build_prefix$srcdir$ac_dir_suffix + ac_top_srcdir=$ac_top_build_prefix$srcdir + ac_abs_top_srcdir=$ac_pwd/$srcdir ;; +esac +ac_abs_srcdir=$ac_abs_top_srcdir$ac_dir_suffix + + + case $ac_mode in + :F) + # + # CONFIG_FILE + # + +_ACEOF + +cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 +# If the template does not know about datarootdir, expand it. +# FIXME: This hack should be removed a few years after 2.60. +ac_datarootdir_hack=; ac_datarootdir_seen= +ac_sed_dataroot=' +/datarootdir/ { + p + q +} +/@datadir@/p +/@docdir@/p +/@infodir@/p +/@localedir@/p +/@mandir@/p' +case `eval "sed -n \"\$ac_sed_dataroot\" $ac_file_inputs"` in +*datarootdir*) ac_datarootdir_seen=yes;; +*@datadir@*|*@docdir@*|*@infodir@*|*@localedir@*|*@mandir@*) + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $ac_file_inputs seems to ignore the --datarootdir setting" >&5 +$as_echo "$as_me: WARNING: $ac_file_inputs seems to ignore the --datarootdir setting" >&2;} +_ACEOF +cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 + ac_datarootdir_hack=' + s&@datadir@&$datadir&g + s&@docdir@&$docdir&g + s&@infodir@&$infodir&g + s&@localedir@&$localedir&g + s&@mandir@&$mandir&g + s&\\\${datarootdir}&$datarootdir&g' ;; +esac +_ACEOF + +# Neutralize VPATH when `$srcdir' = `.'. +# Shell code in configure.ac might set extrasub. +# FIXME: do we really want to maintain this feature? +cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 +ac_sed_extra="$ac_vpsub +$extrasub +_ACEOF +cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 +:t +/@[a-zA-Z_][a-zA-Z_0-9]*@/!b +s|@configure_input@|$ac_sed_conf_input|;t t +s&@top_builddir@&$ac_top_builddir_sub&;t t +s&@top_build_prefix@&$ac_top_build_prefix&;t t +s&@srcdir@&$ac_srcdir&;t t +s&@abs_srcdir@&$ac_abs_srcdir&;t t +s&@top_srcdir@&$ac_top_srcdir&;t t +s&@abs_top_srcdir@&$ac_abs_top_srcdir&;t t +s&@builddir@&$ac_builddir&;t t +s&@abs_builddir@&$ac_abs_builddir&;t t +s&@abs_top_builddir@&$ac_abs_top_builddir&;t t +$ac_datarootdir_hack +" +eval sed \"\$ac_sed_extra\" "$ac_file_inputs" | $AWK -f "$ac_tmp/subs.awk" \ + >$ac_tmp/out || as_fn_error $? "could not create $ac_file" "$LINENO" 5 + +test -z "$ac_datarootdir_hack$ac_datarootdir_seen" && + { ac_out=`sed -n '/\${datarootdir}/p' "$ac_tmp/out"`; test -n "$ac_out"; } && + { ac_out=`sed -n '/^[ ]*datarootdir[ ]*:*=/p' \ + "$ac_tmp/out"`; test -z "$ac_out"; } && + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $ac_file contains a reference to the variable \`datarootdir' +which seems to be undefined. Please make sure it is defined" >&5 +$as_echo "$as_me: WARNING: $ac_file contains a reference to the variable \`datarootdir' +which seems to be undefined. Please make sure it is defined" >&2;} + + rm -f "$ac_tmp/stdin" + case $ac_file in + -) cat "$ac_tmp/out" && rm -f "$ac_tmp/out";; + *) rm -f "$ac_file" && mv "$ac_tmp/out" "$ac_file";; + esac \ + || as_fn_error $? "could not create $ac_file" "$LINENO" 5 + ;; + + + + esac + +done # for ac_tag + + +as_fn_exit 0 +_ACEOF +ac_clean_files=$ac_clean_files_save + +test $ac_write_fail = 0 || + as_fn_error $? "write failure creating $CONFIG_STATUS" "$LINENO" 5 + + +# configure is writing to config.log, and then calls config.status. +# config.status does its own redirection, appending to config.log. +# Unfortunately, on DOS this fails, as config.log is still kept open +# by configure, so config.status won't be able to write to it; its +# output is simply discarded. So we exec the FD to /dev/null, +# effectively closing config.log, so it can be properly (re)opened and +# appended to by config.status. When coming back to configure, we +# need to make the FD available again. +if test "$no_create" != yes; then + ac_cs_success=: + ac_config_status_args= + test "$silent" = yes && + ac_config_status_args="$ac_config_status_args --quiet" + exec 5>/dev/null + $SHELL $CONFIG_STATUS $ac_config_status_args || ac_cs_success=false + exec 5>>config.log + # Use ||, not &&, to avoid exiting from the if with $? = 1, which + # would make configure fail if this is the last instruction. + $ac_cs_success || as_fn_exit 1 +fi +if test -n "$ac_unrecognized_opts" && test "$enable_option_checking" != no; then + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: unrecognized options: $ac_unrecognized_opts" >&5 +$as_echo "$as_me: WARNING: unrecognized options: $ac_unrecognized_opts" >&2;} +fi + diff --git a/contrib/perftcpdns/configure.in b/contrib/perftcpdns/configure.in new file mode 100644 index 0000000000..62ee7a736c --- /dev/null +++ b/contrib/perftcpdns/configure.in @@ -0,0 +1,62 @@ +# Copyright (C) 2014 Internet Systems Consortium, Inc. ("ISC") +# +# Permission to use, copy, modify, and distribute this software for any +# purpose with or without fee is hereby granted, provided that the above +# copyright notice and this permission notice appear in all copies. +# +# THE SOFTWARE IS PROVIDED "AS IS" AND INTERNET SOFTWARE CONSORTIUM +# DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL +# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL +# INTERNET SOFTWARE CONSORTIUM BE LIABLE FOR ANY SPECIAL, DIRECT, +# INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING +# FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, +# NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION +# WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. +# + +AC_INIT(perftcpdns.c) + +AC_PREREQ(2.13) + +AC_PROG_CC + +AC_CHECK_LIB(m, sqrt) +AC_CHECK_LIB(rt, clock_gettime) + +case "$host" in + *-freebsd*) + # We don't want to set -lpthread as that break + # the ability to choose threads library at final + # link time and is not valid for all architectures. + + PTHREAD= + if test "X$GCC" = "Xyes"; then + saved_cc="$CC" + CC="$CC -pthread" + AC_MSG_CHECKING(for gcc -pthread support); + AC_TRY_LINK([#include ], + [printf("%x\n", pthread_create);], + PTHREAD="yes" + AC_MSG_RESULT(yes), + AC_MSG_RESULT(no)) + CC="$saved_cc" + fi + if test "X$PTHREAD" != "Xyes"; then + AC_CHECK_LIB(pthread, pthread_create,, + AC_CHECK_LIB(thr, thread_create,, + AC_CHECK_LIB(c_r, pthread_create,, + AC_CHECK_LIB(c, pthread_create,, + AC_MSG_ERROR("could not find thread libraries"))))) + fi + ;; + *) + AC_CHECK_LIB(pthread, pthread_create,, + AC_CHECK_LIB(pthread, __pthread_create,, + AC_CHECK_LIB(pthread, __pthread_create_system,, + AC_CHECK_LIB(c_r, pthread_create,, + AC_CHECK_LIB(c, pthread_create,, + AC_MSG_ERROR("could not find thread libraries")))))) + ;; +esac + +AC_OUTPUT(Makefile) diff --git a/contrib/perftcpdns/perftcpdns.c b/contrib/perftcpdns/perftcpdns.c new file mode 100644 index 0000000000..b5730dbf22 --- /dev/null +++ b/contrib/perftcpdns/perftcpdns.c @@ -0,0 +1,2476 @@ +/* + * Copyright (C) 2013 Internet Systems Consortium, Inc. ("ISC") + * + * Permission to use, copy, modify, and/or distribute this software for any + * purpose with or without fee is hereby granted, provided that the above + * copyright notice and this permission notice appear in all copies. + * + * THE SOFTWARE IS PROVIDED "AS IS" AND ISC DISCLAIMS ALL WARRANTIES WITH + * REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY + * AND FITNESS. IN NO EVENT SHALL ISC BE LIABLE FOR ANY SPECIAL, DIRECT, + * INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM + * LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE + * OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR + * PERFORMANCE OF THIS SOFTWARE. + */ + +/* + * TCP DNS perf tool + * + * main parameters are -r and + * standard options are 4|6 (IPv4|IPv6), rate computations, terminaisons, + * EDNS0, NOERROR|NXDOMAIN, template (for your own query), diags, + * alternate server port and UDP version. + * + * To help to crush kernels (unfortunately both client and server :-) + * this version of the tool is multi-threaded: + * - the master thread inits, monitors the activity each millisecond, + * and report results when finished + * - the connecting thread computes the date of the next connection, + * creates a socket, makes it non blocking, binds it if wanted, + * connects it and pushes it on the output epoll queue + * - the sending thread gets by epoll connected sockets, timeouts + * embryonic connections, sends queries and pushes sockets on + * the input epoll queue + * - the receiving thread gets by epoll sockets with a pending + * response, receives responses, timeouts unanswered queries, + * and recycles (by closing them) all sockets. + * + * Rate computation details: + * - the target rate is in query+response per second. + * - rating is done by the connecting thread. + * - of course the tool is always late so the target rate is never + * reached. BTW there is no attempt to internally adjust the + * effective rate to the target one: this must be by tuning + * the rate related parameters, first the -r itself. + * - at the beginning of the connecting thread iteration loop + * (second "loops" counter) the date of the due (aka next) connect() + * call is computed from the last one with 101% of the rate. + * - the due date is compared with the current date (aka now). + * - if the due is before, lateconn counter is incremented, else + * the thread sleeps for the difference, + * - the next step is to reget the current date, if it is still + * before the due date (e.g., because the sleep was interrupted) + * the first shortwait counter is incremented. + * - if it is after (common case) the number of connect calls is + * computed from the difference between now and due divided by rate, + * rounded to the next number, + * - this number of connect() calls is bounded by the -a + * parameter to avoid too many back to back new connection attempts. + * - the compconn counter is incremented, errors (other than EINPROGRESS + * from not blocking connect()) are printed. When an error is + * related to a local limit (e.g., EMFILE, EADDRNOTAVAIL or the + * internal ENOMEM) the locallimit counter is incremented. + */ + +#ifdef __linux__ +#define _GNU_SOURCE +#endif + +#include +#include +#include +#include +#include +#include + +#include +#include + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +/* DNS defines */ + +#define NS_TYPE_A 1 +#define NS_TYPE_NS 2 +#define NS_TYPE_CNAME 5 +#define NS_TYPE_SOA 6 +#define NS_TYPE_NULL 10 +#define NS_TYPE_PTR 12 +#define NS_TYPE_MX 15 +#define NS_TYPE_TXT 16 +#define NS_TYPE_AAAA 28 +#define NS_TYPE_OPT 41 +#define NS_TYPE_DS 43 +#define NS_TYPE_RRSIG 46 +#define NS_TYPE_NSEC 47 +#define NS_TYPE_DNSKEY 48 +#define NS_TYPE_NSEC3 50 +#define NS_TYPE_NSEC3PARAM 51 +#define NS_TYPE_TSIG 250 +#define NS_TYPE_IXFR 251 +#define NS_TYPE_AXFR 252 +#define NS_TYPE_ANY 255 + +#define NS_CLASS_IN 1 +#define NS_CLASS_ANY 255 + +#define NS_OFF_ID 0 +#define NS_OFF_FLAGS 2 +#define NS_OFF_QDCOUNT 4 +#define NS_OFF_ANCOUNT 6 +#define NS_OFF_NSCOUNT 8 +#define NS_OFF_ARCOUNT 10 +#define NS_OFF_QUESTION 12 + +#define NS_FLAG_QR 0x8000U +#define NS_FLAG_AA 0x0400U +#define NS_FLAG_TC 0x0200U +#define NS_FLAG_RD 0x0100U +#define NS_FLAG_RA 0x0080U +#define NS_FLAG_AD 0x0020U +#define NS_FLAG_CD 0x0010U + +#define NS_XFLAG_DO 0x8000U + +#define NS_OPCODE_MASK 0x7000U +#define NS_OPCODE_QUERY 0 + +#define NS_RCODE_MASK 0x000fU +#define NS_RCODE_NOERROR 0 +#define NS_RCODE_FORMERR 1 +#define NS_RCODE_SERVFAIL 2 +#define NS_RCODE_NXDOMAIN 3 +#define NS_RCODE_NOIMP 4 +#define NS_RCODE_REFUSED 5 +#define NS_RCODE_LAST 6 + +/* chaining macros */ + +#define ISC_INIT(head, headl) do { \ + (head) = -1; \ + (headl) = &(head); \ +} while (0) + +#define ISC_INSERT(head, headl, elm) do { \ + (elm)->next = -1; \ + (elm)->prev = (headl); \ + *(headl) = (elm) - xlist; \ + (headl) = &((elm)->next); \ +} while (0) + +#define ISC_REMOVE(headl, elm) do { \ + if ((elm)->next != -1) \ + xlist[(elm)->next].prev = (elm)->prev; \ + else \ + (headl) = (elm)->prev; \ + *(elm)->prev = (elm)->next; \ +} while (0) + +/* + * Data structures + */ + +/* + * exchange: + * - per exchange values: + * * order (for debugging) + * * id + * * random (for debugging) + * * time-stamps + * + * sent/rcvd chain, "next to be received" on entry cache. + */ + +struct exchange { /* per exchange structure */ + int sock; /* socket descriptor */ + int next, *prev; /* chaining */ +#define X_FREE 0 +#define X_CONN 1 +#define X_READY 2 +#define X_SENT 3 + int state; /* state */ + uint16_t id; /* ID */ + uint64_t order; /* number of this exchange */ + struct timespec ts0, ts1, ts2, ts3; /* timespecs */ +}; +struct exchange *xlist; /* exchange list */ +int xlast; /* number of exchanges */ +int xconn, *xconnl; /* connecting list */ +int xready, *xreadyl; /* connected list */ +int xsent, *xsentl; /* sent list */ +int xfree, *xfreel; /* free list */ +int xused; /* next to be used list */ +pthread_mutex_t mtxconn, mtxsent, mtxfree; /* mutexes */ +uint64_t xccount; /* connected counters */ +uint64_t xscount; /* sent counters */ +uint64_t xrcount; /* received counters */ + +/* + * statictics counters and accumulators + */ + +uint64_t recverr, tooshort, locallimit; /* error counters */ +uint64_t loops[4], shortwait[3]; /* rate stats */ +uint64_t lateconn, compconn; /* rate stats (cont) */ +uint64_t badconn, collconn, badsent, collsent; /* rate stats (cont) */ +uint64_t badid, notresp; /* bad response counters */ +uint64_t rcodes[NS_RCODE_LAST + 1]; /* rcode counters */ +double dmin = 999999999.; /* minimum delay */ +double dmax = 0.; /* maximum delay */ +double dsum = 0.; /* delay sum */ +double dsumsq = 0.; /* square delay sum */ + +/* + * command line parameters + */ + +int edns0; /* EDNS0 DO flag */ +int ipversion = 0; /* IP version */ +int rate; /* rate in connections per second */ +int noreport; /* disable auto reporting */ +int report; /* delay between two reports */ +uint32_t range; /* randomization range */ +uint32_t maxrandom; /* maximum random value */ +int basecnt; /* base count */ +char *base[2]; /* bases */ +int gotnumreq = -1; /* numreq[0] was set */ +int numreq[2]; /* number of exchanges */ +int period; /* test period */ +int gotlosttime = -1; /* losttime[0] was set */ +double losttime[2] = {.5, 1.}; /* delay for a timeout */ +int gotmaxloss = -1; /* max{p}loss[0] was set */ +int maxloss[2]; /* maximum number of losses */ +double maxploss[2] = {0., 0.}; /* maximum percentage */ +char *localname; /* local address or interface */ +int aggressiveness = 1; /* back to back connections */ +int seeded; /* is a seed provided */ +unsigned int seed; /* randomization seed */ +char *templatefile; /* template file name */ +int rndoffset = -1; /* template offset (random) */ +char *diags; /* diagnostic selectors */ +char *servername; /* server */ +int ixann; /* ixann NXDOMAIN */ +int udp; /* use UDP in place of TCP */ +int minport, maxport, curport; /* port range */ + +/* + * global variables + */ + +struct sockaddr_storage localaddr; /* local socket address */ +struct sockaddr_storage serveraddr; /* server socket address */ +in_port_t port = 53; /* server socket port */ + +int epoll_ifd, epoll_ofd; /* epoll file descriptors */ +#ifndef EVENTS_CNT +#define EVENTS_CNT 16 +#endif +struct epoll_event ievents[EVENTS_CNT]; /* polled input events */ +struct epoll_event oevents[EVENTS_CNT]; /* polled output events */ +int interrupted, fatal; /* to finish flags */ + +uint8_t obuf[4098], ibuf[4098]; /* I/O buffers */ +char tbuf[4098]; /* template buffer */ + +struct timespec boot; /* the date of boot */ +struct timespec last; /* the date of last connect */ +struct timespec due; /* the date of next connect */ +struct timespec dreport; /* the date of next reporting */ +struct timespec finished; /* the date of finish */ + +/* + * template + */ + +size_t length_query; +uint8_t template_query[4096]; +size_t random_query; + +/* + * threads + */ + +pthread_t master, connector, sender, receiver; + +/* + * initialize data structures handling exchanges + */ + +void +inits(void) +{ + int idx; + + ISC_INIT(xconn, xconnl); + ISC_INIT(xready, xreadyl); + ISC_INIT(xsent, xsentl); + ISC_INIT(xfree, xfreel); + + if ((pthread_mutex_init(&mtxconn, NULL) != 0) || + (pthread_mutex_init(&mtxsent, NULL) != 0) || + (pthread_mutex_init(&mtxfree, NULL) != 0)) { + fprintf(stderr, "pthread_mutex_init failed\n"); + exit(1); + } + + epoll_ifd = epoll_create(EVENTS_CNT); + if (epoll_ifd < 0) { + perror("epoll_create(input)"); + exit(1); + } + epoll_ofd = epoll_create(EVENTS_CNT); + if (epoll_ofd < 0) { + perror("epoll_create(output)"); + exit(1); + } + + xlist = (struct exchange *) malloc(xlast * sizeof(struct exchange)); + if (xlist == NULL) { + perror("malloc(exchanges)"); + exit(1); + } + memset(xlist, 0, xlast * sizeof(struct exchange)); + + for (idx = 0; idx < xlast; idx++) + xlist[idx].sock = xlist[idx].next = -1; +} + +/* + * build a TCP DNS QUERY + */ + +void +build_template_query(void) +{ + uint8_t *p = template_query; + uint16_t v; + + /* flags */ + p += NS_OFF_FLAGS; + v = NS_FLAG_RD; + *p++ = v >> 8; + *p++ = v & 0xff; + /* qdcount */ + v = 1; + *p++ = v >> 8; + *p++ = v & 0xff; + /* ancount */ + v = 0; + *p++ = v >> 8; + *p++ = v & 0xff; + /* nscount */ + v = 0; + *p++ = v >> 8; + *p++ = v & 0xff; + /* arcount */ + v = edns0; + *p++ = v >> 8; + *p++ = v & 0xff; + /* icann.link (or ixann.link) */ + *p++ = 5; + *p++ = 'i'; + if (ixann == 0) + *p++ = 'c'; + else + *p++ = 'x'; + *p++ = 'a'; + *p++ = 'n'; + *p++ = 'n'; + *p++ = 4; + *p++ = 'l'; + *p++ = 'i'; + *p++ = 'n'; + *p++ = 'k'; + *p++ = 0; + /* type A/AAAA */ + if (ipversion == 4) + v = NS_TYPE_A; + else + v = NS_TYPE_AAAA; + *p++ = v >> 8; + *p++ = v & 0xff; + /* class IN */ + v = NS_CLASS_IN; + *p++ = v >> 8; + *p++ = v & 0xff; + /* EDNS0 OPT with DO */ + if (edns0) { + /* root name */ + *p++ = 0; + /* type OPT */ + v = NS_TYPE_OPT; + *p++ = v >> 8; + *p++ = v & 0xff; + /* class UDP length */ + v = 4096; + *p++ = v >> 8; + *p++ = v & 0xff; + /* extended rcode 0 */ + *p++ = 0; + /* version 0 */ + *p++ = 0; + /* extended flags DO */ + v = NS_XFLAG_DO; + *p++ = v >> 8; + *p++ = v & 0xff; + /* rdlength */ + v = 0; + *p++ = v >> 8; + *p++ = v & 0xff; + } + /* length */ + length_query = p - template_query; +} + +/* + * get a TCP DNS client QUERY template + * from the file given in the command line (-T) + * and rnd offset (-O) + */ + +void +get_template_query(void) +{ + uint8_t *p = template_query; + int fd, cc, i, j; + + fd = open(templatefile, O_RDONLY); + if (fd < 0) { + fprintf(stderr, "open(%s): %s\n", + templatefile, strerror(errno)); + exit(2); + } + cc = read(fd, tbuf, sizeof(tbuf)); + (void) close(fd); + if (cc < 0) { + fprintf(stderr, "read(%s): %s\n", + templatefile, strerror(errno)); + exit(1); + } + if (cc < NS_OFF_QUESTION + 6) { + fprintf(stderr,"file '%s' too small\n", templatefile); + exit(2); + } + if (cc > 4096) { + fprintf(stderr,"file '%s' too large\n", templatefile); + exit(2); + } + j = 0; + for (i = 0; i < cc; i++) { + if (isspace((int) tbuf[i])) + continue; + if (!isxdigit((int) tbuf[i])) { + fprintf(stderr, + "illegal char[%d]='%c' in file '%s'\n", + i, (int) tbuf[i], templatefile); + exit(2); + } + tbuf[j] = tbuf[i]; + j++; + } + cc = j; + if ((cc & 1) != 0) { + fprintf(stderr, + "odd number of hexadecimal digits in file '%s'\n", + templatefile); + exit(2); + } + length_query = cc >> 1; + for (i = 0; i < cc; i += 2) + (void) sscanf(tbuf + i, "%02hhx", &p[i >> 1]); + if (rndoffset >= 0) + random_query = (size_t) rndoffset; + if (random_query > length_query) { + fprintf(stderr, + "random (at %zu) outside the template (length %zu)?\n", + random_query, length_query); + exit(2); + } +} + +#if 0 +/* + * randomize the value of the given field: + * - offset of the field + * - random seed (used as it when suitable) + * - returns the random value which was used + */ + +uint32_t +randomize(size_t offset, uint32_t r) +{ + uint32_t v; + + if (range == 0) + return 0; + if (range == UINT32_MAX) + return r; + if (maxrandom != 0) + while (r >= maxrandom) + r = (uint32_t) random(); + r %= range + 1; + v = r; + v += obuf[offset]; + obuf[offset] = v; + if (v < 256) + return r; + v >>= 8; + v += obuf[offset - 1]; + obuf[offset - 1] = v; + if (v < 256) + return r; + v >>= 8; + v += obuf[offset - 2]; + obuf[offset - 2] = v; + if (v < 256) + return r; + v >>= 8; + v += obuf[offset - 3]; + obuf[offset - 3] = v; + return r; +} +#endif + +/* + * flush/timeout connect + */ + +void +flushconnect(void) +{ + struct exchange *x; + struct timespec now; + int idx = xconn; + int cnt = 10; + double waited; + + if (clock_gettime(CLOCK_REALTIME, &now) < 0) { + perror("clock_gettime(flushconnect)"); + fatal = 1; + (void) pthread_kill(master, SIGTERM); + return; + } + + while (--cnt >= 0) { + if (idx < 0) + return; + x = xlist + idx; + idx = x->next; + if (x->state != X_CONN) + abort(); + /* check for a timed-out connection */ + waited = now.tv_sec - x->ts0.tv_sec; + waited += (now.tv_nsec - x->ts0.tv_nsec) / 1e9; + if (waited < losttime[0]) + return; + /* garbage collect timed-out connections */ + if (pthread_mutex_lock(&mtxconn) != 0) { + fprintf(stderr, "pthread_mutex_lock(flushconnect)"); + fatal = 1; + (void) pthread_kill(master, SIGTERM); + return; + } + ISC_REMOVE(xconnl, x); + if (pthread_mutex_unlock(&mtxconn) != 0) { + fprintf(stderr, "pthread_mutex_unlock(flushconnect)"); + fatal = 1; + (void) pthread_kill(master, SIGTERM); + return; + } + (void) close(x->sock); + x->sock = -1; + collconn++; + if (pthread_mutex_lock(&mtxfree) != 0) { + fprintf(stderr, "pthread_mutex_lock(flushconnect)"); + fatal = 1; + (void) pthread_kill(master, SIGTERM); + return; + } + x->state = X_FREE; + ISC_INSERT(xfree, xfreel, x); + if (pthread_mutex_unlock(&mtxfree) != 0) { + fprintf(stderr, "pthread_mutex_unlock(flushconnect)"); + fatal = 1; + (void) pthread_kill(master, SIGTERM); + return; + } + } +} + +/* + * poll connected + */ + +void +pollconnect(int topoll) +{ + struct exchange *x; + int evn, idx, err; + socklen_t len = sizeof(int); + + for (evn = 0; evn < topoll; evn++) { + idx = oevents[evn].data.fd; + x = xlist + idx; + if (x->state != X_CONN) + continue; + if (oevents[evn].events == 0) + continue; + if (pthread_mutex_lock(&mtxconn) != 0) { + fprintf(stderr, "pthread_mutex_lock(pollconnect)"); + fatal = 1; + (void) pthread_kill(master, SIGTERM); + return; + } + ISC_REMOVE(xconnl, x); + if (pthread_mutex_unlock(&mtxconn) != 0) { + fprintf(stderr, "pthread_mutex_unlock(pollconnect)"); + fatal = 1; + (void) pthread_kill(master, SIGTERM); + return; + } + oevents[evn].events = 0; + if ((getsockopt(x->sock, SOL_SOCKET, SO_ERROR, + &err, &len) < 0) || + (err != 0)) { + (void) close(x->sock); + x->sock = -1; + badconn++; + if (pthread_mutex_lock(&mtxfree) != 0) { + fprintf(stderr, + "pthread_mutex_lock(pollconnect)"); + fatal = 1; + (void) pthread_kill(master, SIGTERM); + return; + } + x->state = X_FREE; + ISC_INSERT(xfree, xfreel, x); + if (pthread_mutex_unlock(&mtxfree) != 0) { + fprintf(stderr, + "pthread_mutex_unlock(pollconnect)"); + fatal = 1; + (void) pthread_kill(master, SIGTERM); + return; + } + continue; + } + x->state = X_READY; + ISC_INSERT(xready, xreadyl, x); + } +} + +/* + * send the TCP DNS QUERY + */ + +int +sendquery(struct exchange *x) +{ + ssize_t ret; + size_t off; + + if (udp) + off = 0; + else { + off = 2; + /* message length */ + obuf[0] = length_query >> 8; + obuf[1]= length_query & 0xff; + } + /* message from template */ + memcpy(obuf + off, template_query, length_query); + /* ID */ + memcpy(obuf + off + NS_OFF_ID, &x->id, 2); +#if 0 + /* random */ + if (random_query > 0) + x->rnd = randomize(random_query + off, x->rnd); +#endif + /* timestamp */ + errno = 0; + ret = clock_gettime(CLOCK_REALTIME, &x->ts2); + if (ret < 0) { + perror("clock_gettime(send)"); + fatal = 1; + (void) pthread_kill(master, SIGTERM); + return -errno; + } + ret = send(x->sock, obuf, length_query + off, 0); + if ((size_t) ret == length_query + off) + return 0; + return -errno; +} + +/* + * poll ready and send + */ + +void +pollsend(void) +{ + struct exchange *x; + int idx = xready; + struct epoll_event ev; + + memset(&ev, 0, sizeof(ev)); + ev.events = EPOLLIN | EPOLLET | EPOLLONESHOT; + for (;;) { + if (idx < 0) + return; + x = xlist + idx; + ev.data.fd = idx; + idx = x->next; + ISC_REMOVE(xreadyl, x); + if (sendquery(x) < 0) { + (void) close(x->sock); + x->sock = -1; + badsent++; + if (pthread_mutex_lock(&mtxfree) != 0) { + fprintf(stderr, + "pthread_mutex_lock(pollsend)"); + fatal = 1; + (void) pthread_kill(master, SIGTERM); + return; + } + x->state = X_FREE; + ISC_INSERT(xfree, xfreel, x); + if (pthread_mutex_unlock(&mtxfree) != 0) { + fprintf(stderr, + "pthread_mutex_unlock(pollsend)"); + fatal = 1; + (void) pthread_kill(master, SIGTERM); + return; + } + continue; + } + xscount++; + if (pthread_mutex_lock(&mtxsent) != 0) { + fprintf(stderr, "pthread_mutex_lock(pollsend)"); + fatal = 1; + (void) pthread_kill(master, SIGTERM); + return; + } + x->state = X_SENT; + ISC_INSERT(xsent, xsentl, x); + if (pthread_mutex_unlock(&mtxsent) != 0) { + fprintf(stderr, "pthread_mutex_unlock(pollsend)"); + fatal = 1; + (void) pthread_kill(master, SIGTERM); + return; + } + if (epoll_ctl(epoll_ifd, EPOLL_CTL_ADD, x->sock, &ev) < 0) { + perror("epoll_ctl(add input)"); + fatal = 1; + (void) pthread_kill(master, SIGTERM); + return; + } + } +} + +/* + * receive a TCP DNS RESPONSE + */ + +void +receiveresp(struct exchange *x) +{ + struct timespec now; + ssize_t cc; + size_t off; + uint16_t v; + double delta; + + cc = recv(x->sock, ibuf, sizeof(ibuf), 0); + if (cc < 0) { + if ((errno == EAGAIN) || + (errno == EWOULDBLOCK) || + (errno == EINTR) || + (errno == ECONNRESET)) { + recverr++; + return; + } + perror("recv"); + fatal = 1; + (void) pthread_kill(master, SIGTERM); + return; + } + if (udp) + off = 0; + else + off = 2; + /* enforce a reasonable length */ + if ((size_t) cc < length_query + off) { + tooshort++; + return; + } + /* must match the ID */ + if (memcmp(ibuf + off + NS_OFF_ID, &x->id, 2) != 0) { + badid++; + return; + } + /* must be a response */ + memcpy(&v, ibuf + off + NS_OFF_FLAGS, 2); + v = ntohs(v); + if ((v & NS_FLAG_QR) == 0) { + notresp++; + return; + } + if (clock_gettime(CLOCK_REALTIME, &now) < 0) { + perror("clock_gettime(receive)"); + fatal = 1; + (void) pthread_kill(master, SIGTERM); + return; + } + /* got it: update stats */ + xrcount++; + x->ts3 = now; + delta = x->ts3.tv_sec - x->ts2.tv_sec; + delta += (x->ts3.tv_nsec - x->ts2.tv_nsec) / 1e9; + if (delta < dmin) + dmin = delta; + if (delta > dmax) + dmax = delta; + dsum += delta; + dsumsq += delta * delta; + v &= NS_RCODE_MASK; + if (v >= NS_RCODE_LAST) + v = NS_RCODE_LAST; + rcodes[v] += 1; +} + +/* + * flush/timeout receive + */ + +void +flushrecv(void) +{ + struct exchange *x; + struct timespec now; + int idx = xsent; + int cnt = 5; + double waited; + + if (clock_gettime(CLOCK_REALTIME, &now) < 0) { + perror("clock_gettime(receive)"); + fatal = 1; + (void) pthread_kill(master, SIGTERM); + return; + } + + while (--cnt >= 0) { + if (idx < 0) + return; + x = xlist + idx; + idx = x->next; + if (x->state != X_SENT) + abort(); + /* check for a timed-out exchange */ + waited = now.tv_sec - x->ts2.tv_sec; + waited += (now.tv_nsec - x->ts2.tv_nsec) / 1e9; + if (waited < losttime[1]) + return; + /* garbage collect timed-out exchange */ + if (pthread_mutex_lock(&mtxsent) != 0) { + fprintf(stderr, "pthread_mutex_lock(flushrecv)"); + fatal = 1; + (void) pthread_kill(master, SIGTERM); + return; + } + ISC_REMOVE(xsentl, x); + if (pthread_mutex_unlock(&mtxsent) != 0) { + fprintf(stderr, "pthread_mutex_unlock(flushrecv)"); + fatal = 1; + (void) pthread_kill(master, SIGTERM); + return; + } + (void) close(x->sock); + x->sock = -1; + collsent++; + if (pthread_mutex_lock(&mtxfree) != 0) { + fprintf(stderr, "pthread_mutex_lock(flushrecv)"); + fatal = 1; + (void) pthread_kill(master, SIGTERM); + return; + } + x->state = X_FREE; + ISC_INSERT(xfree, xfreel, x); + if (pthread_mutex_unlock(&mtxfree) != 0) { + fprintf(stderr, "pthread_mutex_unlock(flushrecv)"); + fatal = 1; + (void) pthread_kill(master, SIGTERM); + return; + } + } +} + +/* + * poll receive + */ + +void +pollrecv(int topoll) +{ + struct exchange *x; + int evn, idx; + + for (evn = 0; evn < topoll; evn++) { + idx = ievents[evn].data.fd; + x = xlist + idx; + if (x->state != X_SENT) + continue; + if (ievents[evn].events == 0) + continue; + if (pthread_mutex_lock(&mtxsent) != 0) { + fprintf(stderr, "pthread_mutex_lock(pollrecv)"); + fatal = 1; + (void) pthread_kill(master, SIGTERM); + return; + } + ISC_REMOVE(xsentl, x); + if (pthread_mutex_unlock(&mtxsent) != 0) { + fprintf(stderr, "pthread_mutex_unlock(pollrecv)"); + fatal = 1; + (void) pthread_kill(master, SIGTERM); + return; + } + receiveresp(x); + ievents[evn].events = 0; + (void) close(x->sock); + x->sock = -1; + if (pthread_mutex_lock(&mtxfree) != 0) { + fprintf(stderr, "pthread_mutex_lock(pollrecv)"); + fatal = 1; + (void) pthread_kill(master, SIGTERM); + return; + } + x->state = X_FREE; + ISC_INSERT(xfree, xfreel, x); + if (pthread_mutex_unlock(&mtxfree) != 0) { + fprintf(stderr, "pthread_mutex_unlock(pollrecv)"); + fatal = 1; + (void) pthread_kill(master, SIGTERM); + return; + } + } +} + +/* + * get the TCP DNS socket descriptor (IPv4) + */ + +int +getsock4(void) +{ + int sock; + int flags; + + errno = 0; + if (udp) + sock = socket(PF_INET, SOCK_DGRAM, IPPROTO_UDP); + else + sock = socket(PF_INET, SOCK_STREAM, IPPROTO_TCP); + if (sock < 0) + return -errno; + + /* make the socket descriptor not blocking */ + flags = fcntl(sock, F_GETFL, 0); + if (flags == -1) { + (void) close(sock); + return -errno; + } + if (fcntl(sock, F_SETFL, flags | O_NONBLOCK) == -1) { + (void) close(sock); + return -errno; + } + + /* bind if wanted */ + if (localname != NULL) { + if (curport) { + struct sockaddr_in *l4; + + l4 = (struct sockaddr_in *) &localaddr; + l4->sin_port = htons((uint16_t) curport); + curport++; + if (curport > maxport) + curport = minport; + } + if (bind(sock, + (struct sockaddr *) &localaddr, + sizeof(struct sockaddr_in)) < 0) { + (void) close(sock); + return -errno; + } + } + + /* connect */ + if (connect(sock, + (struct sockaddr *) &serveraddr, + sizeof(struct sockaddr_in)) < 0) { + if (errno != EINPROGRESS) { + (void) close(sock); + return -errno; + } + } + return sock; +} + +/* + * connect the TCP DNS QUERY (IPv4) + */ + +int +connect4(void) +{ + struct exchange *x; + int ret; + int idx; + struct epoll_event ev; + + ret = clock_gettime(CLOCK_REALTIME, &last); + if (ret < 0) { + perror("clock_gettime(connect)"); + fatal = 1; + (void) pthread_kill(master, SIGTERM); + return -errno; + } + + if (xfree >= 0) { + idx = xfree; + x = xlist + idx; + ret = pthread_mutex_lock(&mtxfree); + if (ret != 0) { + fprintf(stderr, "pthread_mutex_lock(connect4)"); + fatal = 1; + (void) pthread_kill(master, SIGTERM); + return -ret; + } + ISC_REMOVE(xfreel, x); + ret = pthread_mutex_unlock(&mtxfree); + if (ret != 0) { + fprintf(stderr, "pthread_mutex_unlock(connect4)"); + fatal = 1; + (void) pthread_kill(master, SIGTERM); + return -ret; + } + } else if (xused < xlast) { + idx = xused; + x = xlist + idx; + xused++; + } else + return -ENOMEM; + + if ((x->state != X_FREE) || (x->sock != -1)) + abort(); + + memset(x, 0, sizeof(*x)); + memset(&ev, 0, sizeof(ev)); + x->next = -1; + x->prev = NULL; + x->ts0 = last; + x->sock = getsock4(); + if (x->sock < 0) { + int result = x->sock; + + x->sock = -1; + ret = pthread_mutex_lock(&mtxfree); + if (ret != 0) { + fprintf(stderr, "pthread_mutex_lock(connect4)"); + fatal = 1; + (void) pthread_kill(master, SIGTERM); + return -ret; + } + ISC_INSERT(xfree, xfreel, x); + ret = pthread_mutex_unlock(&mtxfree); + if (ret != 0) { + fprintf(stderr, "pthread_mutex_unlock(connect4)"); + fatal = 1; + (void) pthread_kill(master, SIGTERM); + return -ret; + } + return result; + } + ret = pthread_mutex_lock(&mtxconn); + if (ret != 0) { + fprintf(stderr, "pthread_mutex_lock(connect4)"); + fatal = 1; + (void) pthread_kill(master, SIGTERM); + return -ret; + } + x->state = X_CONN; + ISC_INSERT(xconn, xconnl, x); + ret = pthread_mutex_unlock(&mtxconn); + if (ret != 0) { + fprintf(stderr, "pthread_mutex_unlock(connect4)"); + fatal = 1; + (void) pthread_kill(master, SIGTERM); + return -ret; + } + ev.events = EPOLLOUT | EPOLLET | EPOLLONESHOT; + ev.data.fd = idx; + if (epoll_ctl(epoll_ofd, EPOLL_CTL_ADD, x->sock, &ev) < 0) { + perror("epoll_ctl(add output)"); + fatal = 1; + (void) pthread_kill(master, SIGTERM); + return -errno; + } + x->order = xccount++; + x->id = (uint16_t) random(); +#if 0 + if (random_query > 0) + x->rnd = (uint32_t) random(); +#endif + return idx; +} + +/* + * get the TCP DNS socket descriptor (IPv6) + */ + +int +getsock6(void) +{ + int sock; + int flags; + + errno = 0; + if (udp) + sock = socket(PF_INET6, SOCK_DGRAM, IPPROTO_UDP); + else + sock = socket(PF_INET6, SOCK_STREAM, IPPROTO_TCP); + if (sock < 0) + return -errno; + + /* make the socket descriptor not blocking */ + flags = fcntl(sock, F_GETFL, 0); + if (flags == -1) { + (void) close(sock); + return -errno; + } + if (fcntl(sock, F_SETFL, flags | O_NONBLOCK) == -1) { + (void) close(sock); + return -errno; + } + + /* bind if wanted */ + if (localname != NULL) { + if (curport) { + struct sockaddr_in6 *l6; + + l6 = (struct sockaddr_in6 *) &localaddr; + l6->sin6_port = htons((uint16_t) curport); + curport++; + if (curport > maxport) + curport = minport; + } + if (bind(sock, + (struct sockaddr *) &localaddr, + sizeof(struct sockaddr_in6)) < 0) { + (void) close(sock); + return -errno; + } + } + + /* connect */ + if (connect(sock, + (struct sockaddr *) &serveraddr, + sizeof(struct sockaddr_in6)) < 0) { + if (errno != EINPROGRESS) { + (void) close(sock); + return -errno; + } + } + return sock; +} + +/* + * connect the TCP DNS QUERY (IPv6) + */ + +int +connect6(void) +{ + struct exchange *x; + int ret; + int idx; + struct epoll_event ev; + + ret = clock_gettime(CLOCK_REALTIME, &last); + if (ret < 0) { + perror("clock_gettime(connect)"); + fatal = 1; + (void) pthread_kill(master, SIGTERM); + return -errno; + } + + if (xfree >= 0) { + idx = xfree; + x = xlist + idx; + ret = pthread_mutex_lock(&mtxfree); + if (ret != 0) { + fprintf(stderr, "pthread_mutex_lock(connect6)"); + fatal = 1; + (void) pthread_kill(master, SIGTERM); + return -ret; + } + ISC_REMOVE(xfreel, x); + ret = pthread_mutex_unlock(&mtxfree); + if (ret != 0) { + fprintf(stderr, "pthread_mutex_unlock(connect6)"); + fatal = 1; + (void) pthread_kill(master, SIGTERM); + return -ret; + } + } else if (xused < xlast) { + idx = xused; + x = xlist + idx; + xused++; + } else + return -ENOMEM; + + memset(x, 0, sizeof(*x)); + memset(&ev, 0, sizeof(ev)); + x->next = -1; + x->prev = NULL; + x->ts0 = last; + x->sock = getsock6(); + if (x->sock < 0) { + int result = x->sock; + + x->sock = -1; + ret = pthread_mutex_lock(&mtxfree); + if (ret != 0) { + fprintf(stderr, "pthread_mutex_lock(connect6)"); + fatal = 1; + (void) pthread_kill(master, SIGTERM); + return -ret; + } + ISC_INSERT(xfree, xfreel, x); + ret = pthread_mutex_unlock(&mtxfree); + if (ret != 0) { + fprintf(stderr, "pthread_mutex_unlock(connect6)"); + fatal = 1; + (void) pthread_kill(master, SIGTERM); + return -ret; + } + return result; + } + ret = pthread_mutex_lock(&mtxconn); + if (ret != 0) { + fprintf(stderr, "pthread_mutex_lock(connect6)"); + fatal = 1; + (void) pthread_kill(master, SIGTERM); + return -ret; + } + x->state = X_CONN; + ISC_INSERT(xconn, xconnl, x); + ret = pthread_mutex_unlock(&mtxconn); + if (ret != 0) { + fprintf(stderr, "pthread_mutex_unlock(connect6)"); + fatal = 1; + (void) pthread_kill(master, SIGTERM); + return -ret; + } + ev.events = EPOLLOUT | EPOLLET | EPOLLONESHOT; + ev.data.fd = idx; + if (epoll_ctl(epoll_ofd, EPOLL_CTL_ADD, x->sock, &ev) < 0) { + perror("epoll_ctl(add output)"); + fatal = 1; + (void) pthread_kill(master, SIGTERM); + return -errno; + } + x->order = xccount++; + x->id = (uint16_t) random(); +#if 0 + if (random_query > 0) + x->rnd = (uint32_t) random(); +#endif + return idx; +} + +/* + * connector working routine + */ + +void * +connecting(void *dummy) +{ + struct timespec now, ts; + int ret; + int i; + char name[16]; + + dummy = dummy; + + /* set conn-name */ + memset(name, 0, sizeof(name)); + ret = prctl(PR_GET_NAME, name, 0, 0, 0); + if (ret < 0) + perror("prctl(PR_GET_NAME)"); + else { + memmove(name + 5, name, 11); + memcpy(name, "conn-", 5); + ret = prctl(PR_SET_NAME, name, 0, 0, 0); + if (ret < 0) + perror("prctl(PR_SET_NAME"); + } + + for (;;) { + if (fatal) + break; + + loops[1]++; + + /* compute the delay for the next connection */ + if (clock_gettime(CLOCK_REALTIME, &now) < 0) { + perror("clock_gettime(connecting)"); + fatal = 1; + (void) pthread_kill(master, SIGTERM); + break; + } + + due = last; + if (rate == 1) + due.tv_sec += 1; + else + due.tv_nsec += 1010000000 / rate; + while (due.tv_nsec >= 1000000000) { + due.tv_sec += 1; + due.tv_nsec -= 1000000000; + } + ts = due; + ts.tv_sec -= now.tv_sec; + ts.tv_nsec -= now.tv_nsec; + while (ts.tv_nsec < 0) { + ts.tv_sec -= 1; + ts.tv_nsec += 1000000000; + } + /* the connection was already due? */ + if (ts.tv_sec < 0) { + ts.tv_sec = ts.tv_nsec = 0; + lateconn++; + } else { + /* wait until */ + ret = clock_nanosleep(CLOCK_REALTIME, 0, &ts, NULL); + if (ret < 0) { + if (errno == EINTR) + continue; + perror("clock_nanosleep"); + fatal = 1; + (void) pthread_kill(master, SIGTERM); + break; + } + } + + /* compute how many connections to open */ + if (clock_gettime(CLOCK_REALTIME, &now) < 0) { + perror("clock_gettime(connecting)"); + fatal = 1; + (void) pthread_kill(master, SIGTERM); + break; + } + + if ((now.tv_sec > due.tv_sec) || + ((now.tv_sec == due.tv_sec) && + (now.tv_nsec >= due.tv_nsec))) { + double toconnect; + + toconnect = (now.tv_nsec - due.tv_nsec) / 1e9; + toconnect += now.tv_sec - due.tv_sec; + toconnect *= rate; + toconnect++; + if (toconnect > (double) aggressiveness) + i = aggressiveness; + else + i = (int) toconnect; + compconn += i; + /* open connections */ + while (i-- > 0) { + if (ipversion == 4) + ret = connect4(); + else + ret = connect6(); + if (ret < 0) { + if ((ret == -EAGAIN) || + (ret == -EWOULDBLOCK) || + (ret == -ENOBUFS) || + (ret == -ENFILE) || + (ret == -EMFILE) || + (ret == -EADDRNOTAVAIL) || + (ret == -ENOMEM)) + locallimit++; + fprintf(stderr, + "connect: %s\n", + strerror(-ret)); + break; + } + } + } else + /* there was no connection to open */ + shortwait[0]++; + } + + return NULL; +} + +/* + * sender working routine + */ + +void * +sending(void *dummy) +{ + int ret; + int nfds; + char name[16]; + + dummy = dummy; + + /* set send-name */ + memset(name, 0, sizeof(name)); + ret = prctl(PR_GET_NAME, name, 0, 0, 0); + if (ret < 0) + perror("prctl(PR_GET_NAME)"); + else { + memmove(name + 5, name, 11); + memcpy(name, "send-", 5); + ret = prctl(PR_SET_NAME, name, 0, 0, 0); + if (ret < 0) + perror("prctl(PR_SET_NAME"); + } + + for (;;) { + if (fatal) + break; + + loops[2]++; + + /* epoll_wait() */ + memset(oevents, 0, sizeof(oevents)); + nfds = epoll_wait(epoll_ofd, oevents, EVENTS_CNT, 1); + if (nfds < 0) { + if (errno == EINTR) + continue; + perror("epoll_wait(output)"); + fatal = 1; + (void) pthread_kill(master, SIGTERM); + break; + } + + /* connection(s) to finish */ + if (nfds == 0) + shortwait[1]++; + else + pollconnect(nfds); + if (fatal) + break; + flushconnect(); + if (fatal) + break; + + /* packet(s) to send */ + pollsend(); + if (fatal) + break; + } + + return NULL; +} + +/* + * receiver working routine + */ + +void * +receiving(void *dummy) +{ + int ret; + int nfds; + char name[16]; + + dummy = dummy; + + /* set recv-name */ + memset(name, 0, sizeof(name)); + ret = prctl(PR_GET_NAME, name, 0, 0, 0); + if (ret < 0) + perror("prctl(PR_GET_NAME)"); + else { + memmove(name + 5, name, 11); + memcpy(name, "recv-", 5); + ret = prctl(PR_SET_NAME, name, 0, 0, 0); + if (ret < 0) + perror("prctl(PR_SET_NAME"); + } + + for (;;) { + if (fatal) + break; + + loops[3]++; + + /* epoll_wait() */ + memset(ievents, 0, sizeof(ievents)); + nfds = epoll_wait(epoll_ifd, ievents, EVENTS_CNT, 1); + if (nfds < 0) { + if (errno == EINTR) + continue; + perror("epoll_wait(input)"); + fatal = 1; + (void) pthread_kill(master, SIGTERM); + break; + } + + /* packet(s) to receive */ + if (nfds == 0) + shortwait[2]++; + else + pollrecv(nfds); + if (fatal) + break; + flushrecv(); + if (fatal) + break; + } + + return NULL; +} + +/* + * get the server socket address from the command line: + * - flags: inherited from main, 0 or AI_NUMERICHOST (for literals) + */ + +void +getserveraddr(const int flags) +{ + struct addrinfo hints, *res; + int ret; + + memset(&hints, 0, sizeof(hints)); + if (ipversion == 4) + hints.ai_family = AF_INET; + else + hints.ai_family = AF_INET6; + if (udp) { + hints.ai_socktype = SOCK_DGRAM; + hints.ai_protocol = IPPROTO_UDP; + } else { + hints.ai_socktype = SOCK_STREAM; + hints.ai_protocol = IPPROTO_TCP; + } + hints.ai_flags = AI_ADDRCONFIG | flags; + + ret = getaddrinfo(servername, NULL, &hints, &res); + if (ret != 0) { + fprintf(stderr, "bad server=%s: %s\n", + servername, gai_strerror(ret)); + exit(2); + } + if (res->ai_next != NULL) { + fprintf(stderr, "ambiguous server=%s\n", servername); + exit(2); + } + memcpy(&serveraddr, res->ai_addr, res->ai_addrlen); + freeaddrinfo(res); + if (ipversion == 4) + ((struct sockaddr_in *)&serveraddr)->sin_port = htons(port); + else + ((struct sockaddr_in6 *)&serveraddr)->sin6_port = htons(port); +} + +/* + * get the local socket address from the command line + */ + +void +getlocaladdr(void) +{ + struct addrinfo hints, *res; + int ret; + + memset(&hints, 0, sizeof(hints)); + if (ipversion == 4) + hints.ai_family = AF_INET; + else + hints.ai_family = AF_INET6; + if (udp) { + hints.ai_socktype = SOCK_DGRAM; + hints.ai_protocol = IPPROTO_UDP; + } else { + hints.ai_socktype = SOCK_STREAM; + hints.ai_protocol = IPPROTO_TCP; + } + hints.ai_flags = AI_ADDRCONFIG; + + ret = getaddrinfo(localname, NULL, &hints, &res); + if (ret != 0) { + fprintf(stderr, + "bad -l: %s\n", + localname, + gai_strerror(ret)); + exit(2); + } + /* refuse multiple addresses */ + if (res->ai_next != NULL) { + fprintf(stderr, + "ambiguous -l\n", + localname); + exit(2); + } + memcpy(&localaddr, res->ai_addr, res->ai_addrlen); + freeaddrinfo(res); +} + +/* + * intermediate reporting + * (note: an in-transit packet can be reported as lost) + */ + +void +reporting(void) +{ + dreport.tv_sec += report; + + if (xccount != 0) { + printf("connect: %llu, sent: %llu, received: %llu " + "(embryonics: %lld, drops: %lld)", + (unsigned long long) xccount, + (unsigned long long) xscount, + (unsigned long long) xrcount, + (long long) (xccount - xscount), + (long long) (xscount - xrcount)); + if (xrcount != 0) { + double avg; + + avg = dsum / xrcount; + printf(" average: %.3f ms", avg * 1e3); + } + } + printf("\n"); +} + +/* + * SIGCHLD handler + */ + +void +reapchild(int sig) +{ + int status; + + sig = sig; + while (wait3(&status, WNOHANG, NULL) > 0) + /* continue */; +} + +/* + * SIGINT handler + */ + +void +interrupt(int sig) +{ + sig = sig; + interrupted = 1; +} + +/* + * SIGTERM handler + */ + +void +terminate(int sig) +{ + sig = sig; + fatal = 1; +} + +/* + * '-v' handler + */ + +void +version(void) +{ + fprintf(stderr, "version 0.01\n"); +} + +/* + * usage (from the wiki) + */ + +void +usage(void) +{ + fprintf(stderr, "%s", +"perftcpdns [-huvX0] [-4|-6] [-r] [-t] [-p]\n" +" [-n]* [-d]* [-D]* [-T]\n" +" [-l] [-L]* [-a] [-s]\n" +" [-M] [-x] [-P] server\n" +"\f\n" +"The server argument is the name/address of the DNS server to contact.\n" +"\n" +"Options:\n" +"-0: Add EDNS0 option with DO flag.\n" +"-4: TCP/IPv4 operation (default). This is incompatible with the -6 option.\n" +"-6: TCP/IPv6 operation. This is incompatible with the -4 option.\n" +"-a: When the target sending rate is not yet reached,\n" +" control how many connections are initiated before the next pause.\n" +"-d: Specify the time after which a connection or a query is\n" +" treated as having been lost. The value is given in seconds and\n" +" may contain a fractional component. The default is 1 second.\n" +"-h: Print this help.\n" +"-l: Specify the local hostname/address to use when\n" +" communicating with the server.\n" +"-L: Specify the (minimal and maximal) local port number\n" +"-M: Size of the tables (default 60000)\n" +"-P: Specify an alternate (i.e., not 53) port\n" +"-r: Initiate TCP DNS connections per second. A periodic\n" +" report is generated showing the number of exchanges which were not\n" +" completed, as well as the average response latency. The program\n" +" continues until interrupted, at which point a final report is\n" +" generated.\n" +"-s: Specify the seed for randomization, making it repeatable.\n" +"-t: Delay in seconds between two periodic reports.\n" +"-T: The name of a file containing the template to use\n" +" as a stream of hexadecimal digits.\n" +"-u: Use UDP in place of TCP.\n" +"-v: Report the version number of this program.\n" +"-X: change default template to get NXDOMAIN responses.\n" +"-x: Include extended diagnostics in the output.\n" +" is a string of single-keywords specifying\n" +" the operations for which verbose output is desired. The selector\n" +" keyletters are:\n" +" * 'a': print the decoded command line arguments\n" +" * 'e': print the exit reason\n" +" * 'i': print rate processing details\n" +" * 'T': when finished, print templates\n" +"\n" +"Stopping conditions:\n" +"-D: Abort the test if more than connections or\n" +" queries have been lost. If includes the suffix '%', it\n" +" specifies a maximum percentage of losses before stopping.\n" +" In this case, testing of the threshold begins after 10\n" +" connections/responses have been expected to be accepted/received.\n" +"-n: Initiate transactions. No report is\n" +" generated until all transactions have been initiated/waited-for,\n" +" after which a report is generated and the program terminates.\n" +"-p: Send requests for the given test period, which is\n" +" specified in the same manner as -d. This can be used as an\n" +" alternative to -n, or both options can be given, in which case the\n" +" testing is completed when either limit is reached.\n" +"\n" +"Errors:\n" +"- locallimit: reached to local system limits when sending a message.\n" +"- badconn: connection failed (from getsockopt(SO_ERROR))\n" +"- collconn: connect() timed out\n" +"- badsent: send() failed\n" +"- callsent: timed out waiting from a response\n" +"- recverr: recv() system call failed\n" +"- tooshort: received a too short message\n" +"- badid: the id mismatches between the query and the response\n" +"- notresp: doesn't receive a response\n" +"Rate stats:\n" +"- loops: number of thread loop iterations\n" +"- shortwait: no direct activity in a thread iteration\n" +"- compconn: computed number of connect() calls\n" +"- lateconn: connect() already dued when computing delay to the next one\n" +"\n" +"Exit status:\n" +"The exit status is:\n" +"0 on complete success.\n" +"1 for a general error.\n" +"2 if an error is found in the command line arguments.\n" +"3 if there are no general failures in operation, but one or more\n" +" exchanges are not successfully completed.\n"); +} + +/* + * main function / entry point + */ + +int +main(const int argc, char * const argv[]) +{ + int opt, flags = 0, ret, i; + long long r; + char *pc; + double d; + extern char *optarg; + extern int optind; + +#define OPTIONS "hv46u0XM:r:t:R:b:n:p:d:D:l:L:a:s:T:O:x:P:" + + /* decode options */ + while ((opt = getopt(argc, argv, OPTIONS)) != -1) + switch (opt) { + case 'h': + usage(); + exit(0); + + case 'u': + udp = 1; + break; + + case 'v': + version(); + exit(0); + + case '0': + edns0 = 1; + break; + + case '4': + if (ipversion == 6) { + fprintf(stderr, "IP version already set to 6\n"); + usage(); + exit(2); + } + ipversion = 4; + break; + + case '6': + if (ipversion == 4) { + fprintf(stderr, "IP version already set to 4\n"); + usage(); + exit(2); + } + ipversion = 6; + break; + + case 'X': + ixann = 1; + break; + + case 'M': + xlast = atoi(optarg); + if (xlast <= 1000) { + fprintf(stderr, "memory must be greater than 1000\n"); + usage(); + exit(2); + } + break; + + case 'r': + rate = atoi(optarg); + if (rate <= 0) { + fprintf(stderr, "rate must be a positive integer\n"); + usage(); + exit(2); + } + break; + + case 't': + report = atoi(optarg); + if (report <= 0) { + fprintf(stderr, "report must be a positive integer\n"); + usage(); + exit(2); + } + break; + + case 'R': + r = atoll(optarg); + if (r < 0) { + fprintf(stderr, + "range must not be a negative integer\n"); + usage(); + exit(2); + } + range = (uint32_t) r; + if ((range != 0) && (range != UINT32_MAX)) { + uint32_t s = range + 1; + uint64_t b = UINT32_MAX + 1, m; + + m = (b / s) * s; + if (m == b) + maxrandom = 0; + else + maxrandom = (uint32_t) m; + } + break; + + case 'b': + if (basecnt > 1) { + fprintf(stderr, "too many bases\n"); + usage(); + exit(2); + } + base[basecnt] = optarg; + /* decodebase(); */ + basecnt++; + break; + + case 'n': + noreport = 1; + gotnumreq++; + if (gotnumreq > 1) { + fprintf(stderr, "too many num-request's\n"); + usage(); + exit(2); + } + numreq[gotnumreq] = atoi(optarg); + if ((numreq[gotnumreq] < 0) || + ((numreq[gotnumreq] == 0) && (gotnumreq == 1))) { + fprintf(stderr, + "num-request must be a positive integer\n"); + usage(); + exit(2); + } + break; + + case 'p': + noreport = 1; + period = atoi(optarg); + if (period <= 0) { + fprintf(stderr, + "test-period must be a positive integer\n"); + usage(); + exit(2); + } + break; + + case 'd': + gotlosttime++; + if (gotlosttime > 1) { + fprintf(stderr, "too many lost-time's\n"); + usage(); + exit(2); + } + d = atof(optarg); + if ((d < 0.) || ((d == 0.) && (gotlosttime == 1))) { + fprintf(stderr, + "lost-time must be a positive number\n"); + usage(); + exit(2); + } + if (d > 0.) + losttime[gotlosttime] = d; + break; + + case 'D': + noreport = 1; + gotmaxloss++; + if (gotmaxloss > 1) { + fprintf(stderr, "too many max-loss's\n"); + usage(); + exit(2); + } + pc = strchr(optarg, '%'); + if (pc != NULL) { + *pc = '\0'; + maxploss[gotmaxloss] = atof(optarg); + if ((maxploss[gotmaxloss] < 0) || + (maxploss[gotmaxloss] >= 100)) { + fprintf(stderr, + "invalid max-loss percentage\n"); + usage(); + exit(2); + } + } else { + maxloss[gotmaxloss] = atoi(optarg); + if ((maxloss[gotmaxloss] < 0) || + ((maxloss[gotmaxloss] == 0) && + (gotmaxloss == 1))) { + fprintf(stderr, + "max-loss must be a " + "positive integer\n"); + usage(); + exit(2); + } + } + break; + + case 'l': + localname = optarg; + break; + + case 'L': + i = atoi(optarg); + if ((i <= 0) || (i >65535)) { + fprintf(stderr, + "local-port must be a small positive integer\n"); + usage(); + exit(2); + } + if (maxport != 0) { + fprintf(stderr, "too many local-port's\n"); + usage(); + exit(2); + } + if (curport == 0) + minport = curport = i; + else + maxport = i; + break; + + case 'a': + aggressiveness = atoi(optarg); + if (aggressiveness <= 0) { + fprintf(stderr, + "aggressiveness must be a positive integer\n"); + usage(); + exit(2); + } + break; + + case 's': + seeded = 1; + seed = (unsigned int) atol(optarg); + break; + + case 'T': + if (templatefile != NULL) { + fprintf(stderr, "template-file is already set\n"); + usage(); + exit(2); + } + templatefile = optarg; + break; + + case 'O': + rndoffset = atoi(optarg); + if (rndoffset < 14) { + fprintf(stderr, + "random-offset must be greater than 14\n"); + usage(); + exit(2); + } + break; + + case 'x': + diags = optarg; + break; + + case 'P': + i = atoi(optarg); + if ((i <= 0) || (i > 65535)) { + fprintf(stderr, + "port must be a positive short integer\n"); + usage(); + exit(2); + } + port = (in_port_t) i; + break; + + default: + usage(); + exit(2); + } + + /* adjust some global variables */ + if (ipversion == 0) + ipversion = 4; + if (rate == 0) + rate = 100; + if (xlast == 0) + xlast = 60000; + if (noreport == 0) + report = 1; + if ((curport != 0) && (maxport == 0)) + maxport = 65535; + + /* when required, print the internal view of the command line */ + if ((diags != NULL) && (strchr(diags, 'a') != NULL)) { + if (udp) + printf("UDP "); + printf("IPv%d", ipversion); + printf(" rate=%d", rate); + if (edns0 != 0) + printf(" EDNS0"); + if (report != 0) + printf(" report=%d", report); + if (range != 0) { + if (strchr(diags, 'r') != NULL) + printf(" range=0..%d [0x%x]", + range, + (unsigned int) maxrandom); + else + printf(" range=0..%d", range); + } + if (basecnt != 0) + for (i = 0; i < basecnt; i++) + printf(" base[%d]='%s'", i, base[i]); + if (gotnumreq >= 0) { + if ((numreq[0] == 0) && (numreq[1] != 0)) + printf(" num-request=*,%d", numreq[1]); + if ((numreq[0] != 0) && (numreq[1] == 0)) + printf(" num-request=%d,*", numreq[0]); + if ((numreq[0] != 0) && (numreq[1] != 0)) + printf(" num-request=%d,%d", + numreq[0], numreq[1]); + } + if (period != 0) + printf(" test-period=%d", period); + printf(" lost-time=%g,%g", losttime[0], losttime[1]); + if (gotmaxloss == 0) { + if (maxloss[0] != 0) + printf(" max-loss=%d,*", maxloss[0]); + if (maxploss[0] != 0.) + printf(" max-loss=%2.2f%%,*", maxploss[0]); + } else if (gotmaxloss == 1) { + if (maxloss[0] != 0) + printf(" max-loss=%d,", maxloss[0]); + else if (maxploss[0] != 0.) + printf(" max-loss=%2.2f%%,", maxploss[0]); + else + printf(" max-loss=*,"); + if (maxloss[1] != 0) + printf("%d", maxloss[1]); + else if (maxploss[1] != 0.) + printf("%2.2f%%", maxploss[1]); + else + printf("*"); + } + printf(" aggressiveness=%d", aggressiveness); + if (seeded) + printf(" seed=%u", seed); + if (templatefile != NULL) + printf(" template-file='%s'", templatefile); + else if (ixann != 0) + printf(" Xflag"); + if (rndoffset >= 0) + printf(" rnd-offset=%d", rndoffset); + printf(" diagnotic-selectors='%s'", diags); + printf("\n"); + } + + /* check local address options */ + if ((localname == NULL) && (curport != 0)) { + fprintf(stderr, + "-l must be set to use -L\n"); + usage(); + exit(2); + } + + /* check template file options */ + if ((templatefile == NULL) && (rndoffset >= 0)) { + fprintf(stderr, + "-T must be set to " + "use -O\n"); + usage(); + exit(2); + } + + /* check various template file(s) and other condition(s) options */ + if ((templatefile != NULL) && (range > 0) && (rndoffset < 0)) { + fprintf(stderr, + "-O must be set when " + "-T and -R are used\n"); + usage(); + exit(2); + } + + /* get the server argument */ + if (optind < argc - 1) { + fprintf(stderr, "extra arguments?\n"); + usage(); + exit(2); + } + if (optind == argc - 1) + servername = argv[optind]; + + /* handle the local '-l' address/interface */ + if (localname != NULL) { + /* given */ + getlocaladdr(); + if ((diags != NULL) && (strchr(diags, 'a') != NULL)) { + printf("local-addr='%s'", localname); + if (curport != 0) + printf(" local-port='%d..%d'", + minport, maxport); + printf("\n"); + } + } + + /* get the server socket address */ + if (servername == NULL) { + fprintf(stderr, "server is required\n"); + usage(); + exit(2); + } + getserveraddr(flags); + + /* finish local/server socket address stuff and print it */ + if ((diags != NULL) && (strchr(diags, 'a') != NULL)) + printf("server='%s'\n", servername); + if ((localname != NULL) && + (diags != NULL) && (strchr(diags, 'a') != NULL)) { + char addr[NI_MAXHOST]; + + ret = getnameinfo((struct sockaddr *) &localaddr, + sizeof(localaddr), + addr, + NI_MAXHOST, + NULL, + 0, + NI_NUMERICHOST); + if (ret != 0) { + fprintf(stderr, + "can't get the local address: %s\n", + gai_strerror(ret)); + exit(1); + } + printf("local address='%s'\n", addr); + } + + /* initialize exchange structures */ + inits(); + + /* get the socket descriptor and template(s) */ + if (templatefile == NULL) + build_template_query(); + else + get_template_query(); + + /* boot is done! */ + if (clock_gettime(CLOCK_REALTIME, &boot) < 0) { + perror("clock_gettime(boot)"); + exit(1); + } + + /* compute the next intermediate reporting date */ + if (report != 0) { + dreport.tv_sec = boot.tv_sec + report; + dreport.tv_nsec = boot.tv_nsec; + } + + /* seed the random generator */ + if (seeded == 0) + seed = (unsigned int) (boot.tv_sec + boot.tv_nsec); + srandom(seed); + + /* required only before the interrupted flag check */ + (void) signal(SIGINT, interrupt); + (void) signal(SIGTERM, terminate); + + /* threads */ + master = pthread_self(); + ret = pthread_create(&connector, NULL, connecting, NULL); + if (ret != 0) { + fprintf(stderr, "pthread_create: %s\n", strerror(ret)); + exit(1); + } + ret = pthread_create(&sender, NULL, sending, NULL); + if (ret != 0) { + fprintf(stderr, "pthread_create: %s\n", strerror(ret)); + exit(1); + } + ret = pthread_create(&receiver, NULL, receiving, NULL); + if (ret != 0) { + fprintf(stderr, "pthread_create: %s\n", strerror(ret)); + exit(1); + } + + /* main loop */ + for (;;) { + struct timespec now, ts; + + /* immediate loop exit conditions */ + if (interrupted) { + if ((diags != NULL) && (strchr(diags, 'e') != NULL)) + printf("interrupted\n"); + break; + } + if (fatal) { + if ((diags != NULL) && (strchr(diags, 'e') != NULL)) + printf("got a fatal error\n"); + break; + } + + loops[0]++; + + /* get the date and use it */ + if (clock_gettime(CLOCK_REALTIME, &now) < 0) { + perror("clock_gettime(now)"); + fatal = 1; + continue; + } + if ((period != 0) && + ((boot.tv_sec + period < now.tv_sec) || + ((boot.tv_sec + period == now.tv_sec) && + (boot.tv_nsec < now.tv_nsec)))) { + if ((diags != NULL) && (strchr(diags, 'e') != NULL)) + printf("reached test-period\n"); + break; + } + if ((report != 0) && + ((dreport.tv_sec < now.tv_sec) || + ((dreport.tv_sec == now.tv_sec) && + (dreport.tv_nsec < now.tv_nsec)))) + reporting(); + + /* check receive loop exit conditions */ + if ((numreq[0] != 0) && ((int) xccount >= numreq[0])) { + if ((diags != NULL) && (strchr(diags, 'e') != NULL)) + printf("reached num-connection\n"); + break; + } + if ((numreq[1] != 0) && ((int) xscount >= numreq[1])) { + if ((diags != NULL) && (strchr(diags, 'e') != NULL)) + printf("reached num-query\n"); + break; + } + if ((maxloss[0] != 0) && + ((int) (xccount - xscount) > maxloss[0])) { + if ((diags != NULL) && (strchr(diags, 'e') != NULL)) + printf("reached max-loss " + "(connection/absolute)\n"); + break; + } + if ((maxloss[1] != 0) && + ((int) (xscount - xrcount) > maxloss[1])) { + if ((diags != NULL) && (strchr(diags, 'e') != NULL)) + printf("reached max-loss " + "(query/absolute)\n"); + break; + } + if ((maxploss[0] != 0.) && + (xccount > 10) && + (((100. * (xccount - xscount)) / xccount) > maxploss[1])) { + if ((diags != NULL) && (strchr(diags, 'e') != NULL)) + printf("reached max-loss " + "(connection/percent)\n"); + break; + } + if ((maxploss[1] != 0.) && + (xscount > 10) && + (((100. * (xscount - xrcount)) / xscount) > maxploss[1])) { + if ((diags != NULL) && (strchr(diags, 'e') != NULL)) + printf("reached max-loss " + "(query/percent)\n"); + break; + } + + /* waiting 1ms */ + memset(&ts, 0, sizeof(ts)); + ts.tv_nsec = 1000000; + (void) clock_nanosleep(CLOCK_REALTIME, 0, &ts, NULL); + } + + /* after main loop: finished */ + if (clock_gettime(CLOCK_REALTIME, &finished) < 0) + perror("clock_gettime(finished)"); + + /* threads */ + (void) pthread_cancel(connector); + (void) pthread_cancel(sender); + (void) pthread_cancel(receiver); + + /* main statictics */ + printf("connect: %llu, sent: %llu, received: %llu\n", + (unsigned long long) xccount, + (unsigned long long) xscount, + (unsigned long long) xrcount); + printf("embryonics: %lld (%.1f%%)\n", + (long long) (xccount - xscount), + (100. * (xccount - xscount)) / xccount); + printf("drops: %lld (%.1f%%)\n", + (long long) (xscount - xrcount), + (100. * (xscount - xrcount)) / xscount); + printf("total losses: %lld (%.1f%%)\n", + (long long) (xccount - xrcount), + (100. * (xccount - xrcount)) / xccount); + printf("local limits: %llu, bad connects: %llu, " + "connect timeouts: %llu\n", + (unsigned long long) locallimit, + (unsigned long long) badconn, + (unsigned long long) collconn); + printf("bad sends: %llu, bad recvs: %llu, recv timeouts: %llu\n", + (unsigned long long) badsent, + (unsigned long long) recverr, + (unsigned long long) collsent); + printf("too shorts: %llu, bad IDs: %llu, not responses: %llu\n", + (unsigned long long) tooshort, + (unsigned long long) badid, + (unsigned long long) notresp); + printf("rcode counters:\n noerror: %llu, formerr: %llu, " + "servfail: %llu\n " + "nxdomain: %llu, noimp: %llu, refused: %llu, others: %llu\n", + (unsigned long long) rcodes[NS_RCODE_NOERROR], + (unsigned long long) rcodes[NS_RCODE_FORMERR], + (unsigned long long) rcodes[NS_RCODE_SERVFAIL], + (unsigned long long) rcodes[NS_RCODE_NXDOMAIN], + (unsigned long long) rcodes[NS_RCODE_NOIMP], + (unsigned long long) rcodes[NS_RCODE_REFUSED], + (unsigned long long) rcodes[NS_RCODE_LAST]); + + /* print the rates */ + if (finished.tv_sec != 0) { + double dall, erate[3]; + + dall = (finished.tv_nsec - boot.tv_nsec) / 1e9; + dall += finished.tv_sec - boot.tv_sec; + erate[0] = xccount / dall; + erate[1] = xscount / dall; + erate[2] = xrcount / dall; + printf("rates: %.0f,%.0f,%.0f (target %d)\n", + erate[0], erate[1], erate[2], rate); + } + + /* rate processing instrumentation */ + if ((diags != NULL) && (strchr(diags, 'i') != NULL)) { + printf("loops: %llu,%llu,%llu,%llu\n", + (unsigned long long) loops[0], + (unsigned long long) loops[1], + (unsigned long long) loops[2], + (unsigned long long) loops[3]); + printf("shortwait: %llu,%llu,%llu\n", + (unsigned long long) shortwait[0], + (unsigned long long) shortwait[1], + (unsigned long long) shortwait[2]); + printf("compconn: %llu, lateconn: %llu\n", + (unsigned long long) compconn, + (unsigned long long) lateconn); + printf("badconn: %llu, collconn: %llu, " + "recverr: %llu, collsent: %llu\n", + (unsigned long long) badconn, + (unsigned long long) collconn, + (unsigned long long) recverr, + (unsigned long long) collsent); + printf("memory: used(%d) / allocated(%d)\n", + xused, xlast); + } + + /* round-time trip statistics */ + if (xrcount != 0) { + double avg, stddev; + + avg = dsum / xrcount; + stddev = sqrt(dsumsq / xrcount - avg * avg); + printf("RTT: min/avg/max/stddev: %.3f/%.3f/%.3f/%.3f ms\n", + dmin * 1e3, avg * 1e3, dmax * 1e3, stddev * 1e3); + } + printf("\n"); + + /* template(s) */ + if ((diags != NULL) && (strchr(diags, 'T') != NULL)) { + size_t n; + + printf("length = 0x%zx\n", length_query); + if (random_query > 0) + printf("random offset = %zu\n", random_query); + printf("content:\n"); + for (n = 0; n < length_query; n++) { + printf("%s%02hhx", + (n & 15) == 0 ? "" : " ", + template_query[n]); + if ((n & 15) == 15) + printf("\n"); + } + if ((n & 15) != 15) + printf("\n"); + printf("\n"); + } + + /* compute the exit code (and exit) */ + if (fatal) + exit(1); + else if ((xccount == xscount) && (xscount == xrcount)) + exit(0); + else + exit(3); +} diff --git a/doc/arm/Bv9ARM.pdf b/doc/arm/Bv9ARM.pdf index 6d5feae030..0f94470071 100644 --- a/doc/arm/Bv9ARM.pdf +++ b/doc/arm/Bv9ARM.pdf @@ -14653,7 +14653,7 @@ endobj stream xte\6 tݡ0 00 R"t ȋ>??w^Z׺75 rpr tP(W琅CfL9g0]#5@ xDDD0rp'/g+_.+ .[ ;9a@=0j@`YIPC@` `w@:@p5\8d\@y {N!v l0f[G3{$ӆ!NǬtypGOk8`4+s=]!.NPcG2'gn.@gk(wuuO= ' .` '&cNcn[ lnN -{fXE0lɥ w}L `u?@# ܿ,vNjxcߏs:B^F4;Wc!d` (B<W} SL70};A`?6x.mcC5erA˂GP9pro:# ?de^7=*7tux^psr?Fr~sOo4 +{fXE0lɥ w}L `u?@# ܿ,vNjxcߏs:B^F4;Wc!d` (B<W} SL70};A`?6x.=U=}rA˂GP9pro:# ?de^7=*7tux^psr?Fr~sOo4 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{2wBx(S|Duޡ{:ґ2G9C{ɕ<|?K@F),w? ah%ٱo^{6 @-%~jwXjz1i%u3^g`d+K[De]Y?>Hj,kѸh8 v_ [J֮9m=?\k>ଇ*ѳ,Y W7}C#ZR$`bGοa9gS%\/hC|?s ؅g)m}vk.b&O +uqf`a,I㯽/ݛ'P6ߢH?ٹ9mHr7:pMRY# 'WKC|-mW躖nᲶ03=j-,nebi;Hl<)L.Yڷ)wL=(L|)='-@.Y[a-Zypx9>穾*|,4 = a{ZwLVqCo,H;_7Gg[Gx dD*~JS/ *FjQjw ]_-q;,1t2ߥƐ{:֧o$c-Nߍ tz"t'>(hSM]ۅ0 SPKDdOj n|KHtޑ+㢟S'@6iC,g3BpΡφn;ɦc _7T,Q1TiHBWL8 ,. u2)=Oڴ, Aqr^T!12)N\)Rb6Cb5ޛ;mHL^Ȭݸ {>m@zN׻B]@)p[j6덶BSHQר.ثN`Gz^n)?892x%3ZJ]\^SXAr}[(0@elmiEW9QѲCۯA=g>MF{Q=*k+ki@ħW:x<"}<=ѥ䃏DKXx( {jdqXPvπiA;@y*oLOxOc -@YUʳ;BiM.\r;UR')眄 @i/_ Ar0FxYjCĞjbnU?uW#,MߥJBQlX-ebtx]s<:XQw-N;N?VlvG,%9'bη9|1.!]D=RԌݬIg=h_5r/  tv;0endstream +*s"}Y ;҉{Y]pݯXo}UZ: h)8fEDsqTM:ùɸX!l ΄,17bg&fܽY'jeAt ]wV^%RtΏl阦jϸ3m>YjCĞjbnU?uW#,MߥJBQlX-ebtx]s<:XQw-N;N?VlvG,%9'bη9|1.!]D=RԌݬIg=h_5r/  tv;0.endstream endobj 2243 0 obj << /Type /Font @@ -14685,14 +14685,14 @@ endobj /FirstChar 67 /LastChar 85 /Widths 3000 0 R -/BaseFont /PXAVKH+URWPalladioL-Bold-Slant_167 +/BaseFont /QASJST+URWPalladioL-Bold-Slant_167 /FontDescriptor 2241 0 R >> endobj 2241 0 obj << /Ascent 708 /CapHeight 672 /Descent -266 -/FontName /PXAVKH+URWPalladioL-Bold-Slant_167 +/FontName /QASJST+URWPalladioL-Bold-Slant_167 /ItalicAngle -9 /StemV 123 /XHeight 471 @@ -14716,25 +14716,29 @@ x yaha pJH( @B0Y $DB@ #H CXnxX9rYzD"0̓;!o(ׁZi@! u %5Hf@ 0dw9qYa_!n b xZAA gyA [W H8 -rt%n-~tݐiH+ ɪ!+NWnmn"o"ΪHW'Ȉth`Vp_{Y߬? `+7Wכ ~o -{!O`zn%l"5\\:߿(Rf~QU;(z5|̶Aܞ ˣg}O4N}-lZU/{LeP[wm_i=;>WSVz|Rg_"*ʔyzUJW8bL.ٔO uJߪݎ;Bbubï<_^˿`iKyyc@'\;$Q;S-s/, 9D#,9ƦKvS꿻%-]3ݓ][ClL5ؽr3ܰDSj)W8*ܟ螓3@'}~+ϝ6\p<zu>AbPبLbZa3YEV= {^2<}5aq_5>$C}XjiG/d-!j;6#܊.Oc$zI(/ Wj"K{LHhԻ:iFRF<g] 39}F8|0"G$ I΃ .􋵟ECqQmoi\7ymJ0:nƁ Xe`_j셔rOD6xͷolP*5$8d#iWtuG= koH]:3Ng}?& -bayKܣ%tTca֍F˨?B: 3ZP Ɗ} fφTUJj:ϋN)/ E^g^/k&67%"-ήQ͓ Ƒr'#LwDEЙ}`?$-`C5Շ 93XʺUFC:ׇT<ez&Ċ @!- ڽcEҼο2hY#SjzaT x^9%5Fy ױl2$g$?{v,nDfGSH4S"N^t!+nX#guW }ceScZBF%# S=bFp%& @{§ F$ -HvoVy糳j՟,_h^p/#ӄH焻[ʻB8Ҭ%P #&}7uo(u95?c8,:f.41h3):;c,Y:N5uQE r!&.Y ;$`yme~b@{3* g`iD՘|)1I\jΙ+&jw{-G3*Um֭, !Oly?MǾ팼sx!X>IٻX,EA;%]"N?v6n$W0OW4ƗNQI>qz#Q3] -pBkj0ĵj]ZٟB dU -I9䂷߽n^(h7C2K~V')^}zTu?F-!z_/Uog4.NEhÔL^ѽfCPI^Lʸ/\S ή0ڷO%p1A?P(.g> -l^)e3Pp[dbVҳ4+΍&VBԠeCuO邿# U9fiCl\rzW6b1~iE5 AќN=< lyIj%i(xW|nڸ '#5C&g=O(mb6̶˲G8Uc]ͼ7A]u 0L2+m>us*6ωl]"N9vN{iūHv!Y %=]8¶7R8v4wts`h j-"TB XBN -d%JWܽT$$H~@&jMI.ywBۊFgp7s&RD(p3gL)\beu19a0i l]dNww T甼T31&"q {tjIO#uU/qAS[7o4^ԙQLz9QT1q}caK"Qv[,P.d¡:FR=Y@A -L900#}>)fb7sӿ}׊g?FІIPk22|֧[WBMt<:28;Xf1SE&00d5Ť4|yl@rl@}}\"Sd5kp 3ʇ -+^h&9I3\qa)&JNBb0N`.'394^g(}*v -d :w.5%Ss?g:S &t|E4sFCAgd'geߺhghj34>\=JYQ$]ܕ~D7_ko6=:sNra?{>J^(%ZR`W[s|-:Q`qX d= ҷeQ;)1*7عn`.{_Ι$6c $Gy2@~HDXv tƟ|fOcQ?U?N|bk t)MA稴NJ%*N3z 90´~܊Og`.%kK2j/z};ZтtZzD NZVBE -LT{iG3ȥ"y+3[cͽ<Q@+}0D%fL7SD neF cφ=jхfA^HèPP@S5D7˃o64ҎY]l_o%аSAhUyvSD=OxaI;։doLd<~gpzձ5*212B`G8n^{bhރ1KVZg"2eFA4TxzrA?]K>/oA,ߚ72%AjL#!elqϝpja"pȮp_۰~Y$/]>7W*CGž0#,4)j-o-|?-&IBhE,T͌d+pY[[r#.NkLK z?|ì"*#; /ufxAxL1-YaKᰬ%= \\ɨ*)s,]!;ypQ40QoyAyuUCC؇o+鼡 !Wcq-s:f4#Wz]!{ׄwET yLF׆ab-d&נ -bǍ 9+&읏[8Y)+TD> B٘cE,L0+;nrHN[=dWNPtic "`{(f.Xtrih8pK\Ǭ(oύO5wʙ)w\d? $ ?(r>9u '8YҧhZ؃wl"Wi8_7WlِLE /u&}\GuA+Ŏ/E`yʽJ;z o8˨zjI*C,M3noW0-56ڞMnrUq - xJ60>y$7An_Z+i5Ň) {iR`FFSa%eu*9 ||,Hn_%iÍ'+c% ݍ@;zu@ f#[2aPSI1tbMg+k:SRc;EKZjUziRR2 ~9hKI<ORd*AYp0j<8KgQ$`d4|ȥ*S妽.R+Մu4Z]5í9p"GA۲x]}㴄Is ӚUE|5 Yf?Nl srOXfP~XW轢I!q;['@9Bi}&ŋ7<$QjA\}Nmr2~/^=1m"$RB"haH&ۀ;&K<v|oϬAF/ܟwF< vJ\~ntG9%Mx5ܶ?óۙ]_~l? 7`NK)a;]%س^Sx5OuyKEߏ -(Z`~VpEaAzyUwJs?|: }Hag)o}=rrM3v-@ 'pXҖ -B\h~8$7!g;ɥ\cf>}7Zس֖^-U&( -ӻIFSOV_hn- -X{$@rlZɞˊ1o(mI]_- 'zTn76Gت& IĆ7ԉfu3;)EO4,Źk&l#ٶ hiF] x'fb\{?=3XTW*\Eex@Dz:!XK G>c{BC0Uռݕ5xfUNhZ$8훎Б;߾2~%~Q*|6ο.H&l][%κƬ!rOx!.BzuW,r9TCH֑_e:5r3.4vW][)݈HS+fS4Hzy*/%͠8m'7\K)8@b\ʂ[g5֡'̥g<8Tq_U =#f*6*\oi`lj[W*2(tp{6]}>{?'C5zE&v dYcL8uGݚtVe&KჃoS*.m8WQ3Dj OpHYf>׼_Ƥ|E=PzXD%+C1_=AY:&Aa;U*XJ=1<,|# O'CM]fS4AMjҷkxG,92¬ ߸gp0o9)M&ChVF=VvŞTv(ʴ7jz䭠6]EڟeIGOI&+Z Sl -`cGLs:Jθ OX9B,\p' WxDyendstream +rt%n-~tݐiH+ ɪ!+NWnmn5# YE/k'ĹFu/5|Q2vPk|rUm̑=GC>hZ ش?^ R3Ӣ{w| 'V)o_=h!E\U)a􄹫cOwٯp1"])ʕUwĂ_)x :7D/P'ƀ,? NvIn+\}Z(^XrLGXrMߗdcwK +e[ă4f)ƻ'c*2uMׁE;k"{!6ga1.Զ3S?pU!?='g$NV;;l"=+jy4&}ʡ QĴf'8{@|[n.\ex~jS jrk}6KiIs=Z9;/7[;_N[BrwmF][hy;I|P_(\{Er},4JШw5Z!tҦ(2x<κgr>0.;2qaZ.EL_GHx5tՍ;T1\,k?nҸnT +at̋]%2{ )>#l6o;^LUjIp(FӮ~}=z8>ߐ0?u>gv[? 3Mĺ??6GK让Qtȡf8 ?; {=tvWuR^.ȋzYt+@^V^MloJfE([]'#|'OF֡3~.IZH)Ljrg=utq,x3-pL܉'AC0[&{C iNJy)>eLc%/FTU¨5 +sJk "C 3cU4eHH~0+EOY^݈F͎TUhDǝ8I{BDWRFVfʦqǴLJGЧzTł뗍JM ;2N6OH vzygg)Ղ?YѼN-f_6G w8IwpY%K:-@2GrM 4oP-*ksj#}Ǫq.!ŝpY2 t( ]C;hbЀ16gRtVw>o;#mY0zuk +> >-eCL\7wI:HR*gTrI(J҈1!Rb>`13W@M335,G 'V? 9ZfjW]U۬[Y@CLAj*+5~j}y]缁cvˋ Bxi9]'|w/2X8w^+KD~$l݂IJ5`Vipw/6 +} Fgtsng]|`ks8;ϻ?&@!*54[*/so?87S){=ܼP+holMe$NR3(c4.~FZBY5_hd%\N+2Ûˇ){s9͆ߡ q 'N_c%}#0~?3fSw2]ao1J(c~P ʽ]HϨ}KU0Q[Svg"hY/giWeMAGr,ԇnV]mb&jLsN97{x4():J Qɉ4Qx6w|:T$ܽʷ +ц19^DqfEKƢb+o-.4u˱A֎\߷$&H=~v^f-pYSD=A5bX GzV| qFOxFkdMV{Pz`%lmeYqXty_o*`8dWLUe|l Ult|Dl3֣=͝sh./xK,,AaӬ)WtBJ*={!fRqmo5phrd0&y[P-qΓ `B!aa`Wf +pRL\(hGMuf}ZEV".J<{kIIdL2:H]z))|'µotMQg^ +V1-S`_3%6Bb rta*غ0ɼu)y@[gbL)?D*ԒꟲGI_R>noߢi!L<35$2MIwsb< V–DT"Y\FCu9TcIzҳ*ls$a`F  (X | |S +5 oȯg.%~2 ͓603eieO3KGl:gyud6pD+vbN fMha>.`.kIi"S0җbjD䧠jgV0MrfJ-.%.SL2 `47\N>friPT,9@^'Mu\ kJj^ 12tLV>i猆#ZVO8ʾuѶfh=}m{Ip-+ZCKon?mzt9e/Օ*}6QK&Z]u`zߥo~wRbUoxsaKk ]̝3I/m,KgwǖI=fev>&6\/A#$?)֣͞~~$:|!S@Qi7KAU f1As`i[Ĺzҍ]Kd8^w:* c V녊4B'4\fKEVg$Oƚ{y %W8nya%?:K͘ro\؉>Ǎ_ { ؃k b91-k2n_ߜ7lh6ؾJaI5R?wڧXz&ev3&)xb'.\ ,P'8ckUPecne&Vp ʽ> +c$S50Edʌ0h(Iڻ :2!<|^ނX2/5obdKw՘MG0C&j;+=EXr#]Cg "}Y.aYI/^Y}$oί8 lU=O'aFX9hRԤ[[~[rM~jeUλGw^} 2$ +cZיb[D۳>&՗aY K{@QeUSX6Cvǣha1((-ԱVyCC..& + +7/[\ctFqhF4zB E #Ś[ +MA)ŎArjgWL;'p +RV |r1PY1abWw:N$j{ɮ,V;CQDd'RG/*8V_<"{[w (FVqQ߼qQ vՒTw͇\Ydf>O9aZjm=!>Q3ٹԫ^ 9@"F/h>l`|\Ih=nL'kf9VjtS~Ҥ&T'$3!5vJ# UO+8sXh[ݾKn1gyOjWJu%,#vlFd /A=3&c6 ^$oφWִuݧ4vLATIժBU! Z<1dAZ}483r:Amіx3ȢU +ƃ>;'u`:?+x`qvIr= +ȘiK1 cɅ9UM{]\fW O7hk[s*(DطeQyУnX>9B?&X^`ڭT}组i R(5c3魋j>] )&R̤0[W>{EOC6Q vnO0%rT嫅҄(.M!UoH!yHJ{'ERmS5D)*e^lzbE$IإEP7LwMx#'Y"_?揄jy@ +]N5yn rJpHz/DWk-4m^gq3л((y|@n (/&|SvJKg߽v9j:#"n &>PD"]6‚Z3~h{5?t@vu}Rf{jfZO'-|UpRIyyo1oBvK \|n6=gǃ-Z/l4nlU-oMٓ o:|y7MT{ =i3RVHA9jQr3a3X_dhE/O\KɬO_ &$ubsAytN.`.bʥ܆6l}g|wRhXsL84G} 1Ymgzӌ$9Nh͔ŸXsm{g"'HRU\O<>lS" + t.CB|(z?п)|8csa4y=~U+j*8ӓ&w?,Ip7o#qw}eJUl]RmLغ=kKJ;uY8:B.C\0&Xs;2`#"tkg\i.(TR-ɳ/%|qWru?̦hΑ7U^K:%į vA7p1tOn4 ++`Rp36FŊݹ%:b0&Swj VC%#N^ۙKuy,Eq&8{D LG8UTm5leU?666!-+T(wu9eQ:Jm4 _}~NOkڋֻM}ɲưq`+5׭d[%˦[M#ߦT\*wqg$d]|y9?)#Iiw%z:3KzWFcm={8uLwY|U&n{ebL=Xy*wSY"FNj'> endobj 2227 0 obj << /Ascent 728 /CapHeight 669 /Descent -256 -/FontName /PSWFBF+URWPalladioL-BoldItal +/FontName /AKAVHF+URWPalladioL-BoldItal /ItalicAngle -9.9 /StemV 114 /XHeight 469 @@ -14766,18 +14770,23 @@ endobj /Length1 771 /Length2 1151 /Length3 532 -/Length 1713 +/Length 1712 /Filter /FlateDecode >> stream -xRkTSWRIzX%2yj   b( 7^zD|PIUEltST -@}0|VXT`]]?g~͚slG!p( #Rͦh8  QpZVy| - cIU+>IRd Bd 4nFXgx& 1)%6©JaMj* .]*3HQkJ&"! (HZi4 -d)WhwM0tj,VvzVB(4Rj`dWőPDCQTBO0 -MWB7)yS(цt`OŜ?b$у6Dr;%Mk&F -W(9A!X`=D1Hgr -), 1:9{{_鍌\V앾c8SC.V!0ML}䊫:3lm?ُ9ro)7mΟ"ǝJF"aA*^(b8[e*g\.kk@{p=F?{>y޾n}:R8WOr6uY_ Tci9(~h˂]ˍڝM1t֞8o>(:v_񚈚Zc8v瞊~PE+bӳ6چ+ )L<>lK+'ƍܳl%8Pqo\cE3 ?/}u'L,njO؇;fi@ ?VepUF&޻ж5Wjkh E"u^4ïNVY=Nxk*lf͌;3Ǟ>7o(ޮZ?Z1kBze3+*ޔ,s^VSWr}0kO_r:mjl3DA٪۷_w.wr -G:)\M~֍ׅy)+]/{mnݶ,0WҨl7XY\F+n'oY=,k8a:knA;7xYs9{..RPrɡ"q{?|g2IYsaAubNѭ=.MSui 9n"俻Y8uu©nR8!ݦGa-k H u5Nn^ #kNUÉc fjߥT.[|9v'5EO*b(Uݼy֍OWQkDVUiƌendstream +xRkTSWRIzX%2yj   b,{CnIH@TeYF7oޮ\?Z9{Bze3+JDlk^vsw +]0kO _r:mll3_+Uulz5c|ֺ&Bb!k\FT)Acdԉs81Ybݬ]Mqk/Gv_ZYbXÛg4;pA5n. OPa9N`9N7ӌendstream endobj 1504 0 obj << /Type /Font @@ -14786,14 +14795,14 @@ endobj /FirstChar 60 /LastChar 62 /Widths 3003 0 R -/BaseFont /PHWNVS+CMMI10 +/BaseFont /QBXSPI+CMMI10 /FontDescriptor 1502 0 R >> endobj 1502 0 obj << /Ascent 694 /CapHeight 683 /Descent -194 -/FontName /PHWNVS+CMMI10 +/FontName /QBXSPI+CMMI10 /ItalicAngle -14.04 /StemV 72 /XHeight 431 @@ -14813,27 +14822,19 @@ endobj /Length1 1199 /Length2 2269 /Length3 544 -/Length 3059 +/Length 3057 /Filter /FlateDecode >> stream -xWi_?_9<2&` -8KE -3"BM3݊IcF#@ -%|orS\PЗ8b s dR~Jj$(t& r%) K0fC:}9)(۞JJ țm?kAg!Ef'귫Svy/m"ۿQ0-ELfĭ~1 ST(u6]Htgĺ`a-8t`¾<~-jNYʯQܽd;8il ԅb;Bty $XYw| -ֲ505/k4@j2Oyyf<>1)SǔB-U; v牔IWu<\ZcFqݸ 5wWC$,r%9Ҍ탥Sni8{Zy'1 /txl{[>3<6Zm|0'#\vhҕqdZTAUW.FJ.ڦB3=Qn*x}M1-Z35)L΄w'zp5+RrqT4Ş!/"3u^ v_jTƝY+K%WS7\!;Z^4`2wQI`qTHlִPDq;[mŊoßʏU~>AZwS9T Ӥg.k;pep~_O2*>!ifNϧayjy=>aƓTjsuk/_`ROH)㠝)m46IJ4`N{|p(\o-½@:A$a"_10>1*{Ͳ5ת͉Tt>s #Hl -v8kT*᏾坑^J;ooPWMMɞTEUgԍ%[]'LHN5Yv`U~kҚ@,P!0Ym@E_hxo-uRY\{N獊%⟘b][+^L,,vD)$V0 7u=r0lOF|Ru8˗X3V"^9wLj|vm`tΎsc|I8#zķ]l  wD{֋Jaj?C3VYL-Pt6a?:%ƪٶ whAear3Əv y>B[RA酒z3, 1.--B*" -rXIhúPƖGz & ֛x؂8 syim{{t9|sp -o oJCmZ؉fׅ>>M?t0v`lߒ["A#iJ=$?c=6KxtOS 夷.D/XjhjQ#m޹ritp횕[KD-1+yJ=|yD'-'5I'Ce]]?>5(;y$K9 B?D㈌t5ēQ^sF%bģn`ۯ[z$|UNܑmh{.ؽMI~E\xYn/#„]_9_K"Y`׮ ģ.(bNtOY/\Ò^{W#ʠ;6[-6;sX޴?[d<,ɸ&uWF &|nD))Y.8]Bᙒm.\h;"^+e.v־Cȱd5IHݝNFp[H:X6*uMcԨlD;T\ӳD<4ãyuTPv9*a42^x(my17ՏnqO/<<<7J]2"*uc^K!^Ć440SOpH -otnK)b). -}]`#,*וktqhf~UNM+\ -Ho&83EB ,mSvtunvQ皤je.e6#[Z0SdoIV?N֨^UN*ڬ KzE`KO "Ug5"E|)NUrtV@ICOH|5jCfh=jH_a|' 3@ -&QlP.I@endstream +xWiχ羯uP@Ўah,L D6=7u4 ڰ@"d= 8Y>hS!Z 92YXϢ2c<YtpL7dpܰ0: $l&EXÙ 3,Eq 8M2Mhҙa +{˾x +іL, 80, +F! ɦ   k 0C ep4HFJ3KBcG憡<p.;2ب 0BЦQ rj0 Y60f@!`<Bx,w;8i$R#A׽âE~h$vpL=31PGίim̈́h0&!@}]oZ|≴kEtdPז -Ь/ ߙɡ@cFhhCs;.EWIH6 XV]eeh"ѿ z!nŠA@HcѢ@2!}or\PdӖ8b sB dJj 14 p% 0bA:}9)(۞BJ(3I7iY8mAg!<.0pT4,5+ểV:HV0 1nEJtHSx<DS!g|AKkoU|4mz% L _Kk]^ k.&qq'baym8tpo}+j^U2`hQT{8]O bPU3e4/h}goڬuK>%콻Z,M{sgwJ[ۅd5Accgu/ZBuV"_VgM7>NgdZe#u-.VSX׾S:ɫVF{sgqH*7+ʅ lSo- T!<~;UV|RϱvM '$Si64iaZ^ktўz``A$f"PX5}rlKiEo[u9nFǗS t;z 7+%9o!phQ[ݯZwTbK3"P6mewD"Q. #>b|Ѫ<pgӺ`P!8UmHud@xho"-=uҙӥUJew=6C%.>)]!./*$1 g`vݻ)ge<=]2qBmߋsLJ*$Syi!Zy, F3:s;9ޟӋs08 bGHlzQs&0Ocm};EjtIxF,Dx n fqc"Ƒw{nͯ9T(}Α1 _O`Kڽ37(=WrxwLIi!A[\&"D(p1ox3ؒޯs`"_npM~'h-萑JxVkǮ&|*h-~sGS=xUZoC+Xfv?}}y,r!n`op lؖ_&E%jK?(81;}8G`Nᡅ~vO1י '>\|]ČDG<¼.EY|(x]Lԕkh3}ž ]G9#/"][PS"ip1 j&Ʌ}0gqRߟ0E]%eqzgAmZ|CnjXNIؽ>ճ mvgDŽ[R"]D|C#;*ܶ¥Fˢ"KPb?H~ zV)[nIJt*zc1@EǸUmQj1DBxKiEnbI JnÇ +YٙUPy*T +vnRNvuىO.?$=TvJ}JۺX/f  "nO)%NKZ" n,dw ow(bɓ +鿿{]d#(.ח@^R,=W']fDD%-"ezh(ٵL/mNEA!/OB~|gdZb9 :?> endobj 1491 0 obj << /Ascent 712 /CapHeight 712 /Descent -213 -/FontName /HFDAQH+NimbusSanL-ReguItal +/FontName /SUISRX+NimbusSanL-ReguItal /ItalicAngle -12 /StemV 88 /XHeight 523 @@ -14865,53 +14866,55 @@ endobj /Length1 1624 /Length2 11252 /Length3 532 -/Length 12119 +/Length 12120 /Filter /FlateDecode >> stream -xxeP& ڸ;[p485 Npwwww AϜ{n_SUYYȔTDLl@`3+@Q,$jkmhdmx>!QQ9 [8hL c;; - fk`afЪh100K -ț@ !o׆ bZXbJZ -___@`1@vLm8m&%@of c_#`c p9@l`ck'x훆Fdq4v޼*K#N9oG7`kibkWJco4o(hv@@.|&v@7odvh6WFWu'?evo6eFbci ymfFbkX6M9._3Cl -0"(B\h?4{%tVڼ ? m_ m,] W#ҿ!6{k ;3?. % 9hV`տ fo{o;r)Yu)Uj65W;є5_<.w&.6;7_x_gy x_'ۚ53 mClݿo[<= iqerZ -/k`T\@]QZ~wmWroSUs/f#ݡ4" -\UVn]_"ԔcpuXm.VQe'x_)sq(**gLV醤oӟz 4Lm`o.W9|ʍv. Լ~kLMWrki~K Kwϟ }^沗Bԫ<_g-w CRk޵Tu)unG%E=")%K_&%*9, ֶvkE8ha4-㊚*F+̈I\˘ess׷!2c7a"!Ѕtgc|LD\YXswexSb+:3iCIA(Om9_- 㮰sɻxJ9$cQRak5rk (qO^X# -%oR *یةTZ"r~FO,B=+hӔ2$JE ɘzGY~YwD"ג J+lk.-!bW.t{>l,wDT44p.rwD7)5VK݇x'K#ʮ֙":㠆X/_rI6jMGh QMԸKl6u ZF@KՃQ/(=XyYr?)p8mu*Eۍc [v NGuPX-P1)B` 4Aoz8-!8K)Sc.ߛH|4~m -D<.2)=Z%W\tõ߮9t֕ gu7ќǐD'0 -y+8pf$J ?&NT%< 0&u [?Jܮ' -BD?7O4CEsqa yٵ+S&3Dl:sn wOYe/RB#cјc׹\ .MJ)6 x_ Q (3,>)qC!#Ht8MeS߇L4,w#q@ĵYduiI>o2cTBRU!gKL2>cnVgͳ/=藧.WE^[,Pضd4\3Za{)vSK&:M#ͩt,ЦDu}f?q7Z0-o)*LGt5T -_G4 _N9@4@d^qŁ*ʍ(_-ǥʃbĻ@e 6]a{# e%p}M'Q]ց @YlY ՆvBF^+1m$"0?L +I)ղs} -i/Wk\'ΫF}Is]|WON$`\}>ܽ6lETǴ뭺8U'4ikOOLV_"REZ{ &L%+O)Wc:^:ǟVF6:O;e^b d?bg>!e\: `%LYuyϧ1IIER7_>'@C2v*7o*%ip<0w6<"Ma$QkyR.]d"H%kayg^I|D#SŚDPO5DK(gC ۂkި>;k xj/9[`lJ%= HKƷѮ#5 -peIj8YnU Ψk=<rc:3~e|@{ %k,ٗbmI H)8`Y*1W؜چ>!.DSwcYgdж:FݝAzN8U.Iil'I3j;r}z>1# L(|ET6;S: ݣSz-ۘ2߄:`_őq -bXܮ[krYګA(ړ4U>,3M|x T7tu`71'31}A/+]%]w>Dg9ͧxF3$甃*/_ks>sr.$r~@4rtÑfbNzEl7) Nl:Kbɋī_A%3*ȇH0oO혙}Nv;367 #BŮh H)@rsz]$Wy{?΃KSb+R$\eWgo)ړY㚴7q#IU:'.r@ hGRWy@2 ATbr"u -Ψ+b7k8B4E7$Ji *AQ@kRQ=D=who7U {>e'o߹,tկr!Ǘ҇ޝ4C~H}NY?H$_!YzVJDlnˋ1P~ƞ|);Rg1FS8;Yܾdp پ]"Ņj=p-iCM(YΌO+SnF6![{Nʺ+#/FP*-.2.v y#cKp CGu '{݌'vt_.t~><䵂涁s%ӆtE/Ԫg'6glQ;x)L[!םYt*^CPQhh̄ha} -9݈[lgas6w ظYAbܴڇF,ǧfvXԂIXc?A eɗ - ƛ#M r|gZ}u(ASJ؇1NRM9VyL×]O5@vx|gt ^މA6(T#EqITŢ2{H* -hH) # - ۬xw-g\<%~`/\?b+xJ2NLSsc>nmT2?d]>t;!J~)|hWΖISt:5Nom9lo|:oJhY=#.O(*/dĒci ͷlM[C_0T=ϼP/O+b-bCFgS7ru]~Lj:ĔII{B(E&Td@X#qK|-[n_0MH`ӆZ. J܅[ǧBsB>w=$*kƸ+mIpr Y;5t>5:OjQ { -?v;~Jr^"}0HZ2=&seD|qxL\XWL'[x!? qiGUiv9KPAIԍ#ʫk}gߵj\l\e5w.,b/ -Hؙ|,zlVz7dx7Cvߠ1YniI y%"=bԜ">'=yeUDIZ\pcLicL%]?;!& #VI⠔_gJY}!6VɇB:ÛƷlw= r1J:˱F &I2dFdן)" BWGO.1{4EC>>*{نŦH3r~W!IۙD5Ѐ}'+ mo!1j 0O%nuݥ4^-!ioIwJ՝T5 -lʩ4@Ta vX-ctDS4 14:6_!ì.ս"}n0feT e"|:?wV>c¬^ۭPDsSda"VIyl-иȱ:s0ʝu\M%$Xi!?S=L IHԎ.2;]U P_a.ʅdp7 -k-.9L&G6?^SMbc7 %g,~ģ>NiEGlkۉf'^Q/~17RhԘ-<~HL4va2'#==u*f12\UK b"o{wC>22yoTX'<P$kM=J-gBYErcϨr'Ψ -+=>sΡԋBgW~{井TgKWs]gƦ;&Y s\~ڎ&yDoC˒,JKAŵrQF4t5aFD5^}Te!MەK}֤_P{~197"^.dlMqzs\%}jv ,Db"); cgj=pK0˯3 }4&bNfjQMs!;WwԄFA fnjX-Ӥk }zgmons_a#}AЖWWWWׂo(u uK˩KiT28"Ʌ酹nHb#~}M*3з ?R0LAuHAe*d\Y~4OL6^" Ξä#Dl6 ]_7̮D -__O0ePTNT޵]wX%7-2ݛ|%8P ߔPL{=;H4O5) ఔߧQn"ZaT24ك,ֈR;w&;w~gC,Ѱ0tp:_,"ˏ Dϲ -&`lWw{oF=C{z'ք+!=Ro֘˛2w>ӱcŪdqLCy $=B+Z[GkZJ]faOLc?n׏Lږ.54!enhRauUt̑n;lY\گ_Q9?hէ*:}Al1b pfn;PEur2 ˟[7.!J*cqD_5yX~^FM%Ha:F)%[.6R& -.ד J8*)v9k!^hգcmୁ~(8vf=2c4>huK1,EB|ji-)ħ|1!Ml&ONԧH[:eVTACgɩLynCBKm.=k l@ܥ6I']㭲 ӕ' OtBHpn[=ڱ׺s~3LB>x00A6 -zĀC|j>*fϟd$ " s T}(Xn~}B- m|b`1XVϞB{ ;7\L`o -8jL_y|9gf#ϪO C+cIB Y~,{TN*ewB|m>B,1eQn]毶ƶ-W5i%$ b]u v!GmSH>tl@z ɜdGW$<_w >Gok@}0ޣay9إDz -*<57ޫ_P^wq?ˎaœ_uwFA*eh}SF60ņ tm*_\u:;,kH'w6Kŋ<_rCrO;_O1wG5$ƻ8mNtEZhO=а3F+Ti {֕oMH?ن!GonYCCOYFg)h;3C -xu4C+ݥ?hz2AzoUx.3O,]*]4OHʢն.ynr%#cumfYM,f6t29ЩTg1Q)Eq*(#Un?OCka\FXޝ$mvIvH,D84$"Wd9kFK#?cP`EAs4)RmE`ybcZ2g{#M>r3+0 S0Іcwdq< eRp_\:ۣ^2IiT FÝ<3/ZB+Ȇ^NQVJ˽mCk% inP^ӑtPLMk؇1̏mu"*8˘aD'}H|Dc9^b|t̽ZexN R(Ej?3By'.[>ܕ{ɉ&X)coX`/8 /N24tdOSmA oe.*ܯ'|mN+޴F` b[ʢӶA+!}4t0WYB v+ -5.]>, -\ybvۮ-.ڌ?2< -)<-ňFV^V% Q+`@=? &ܒ?XT~ _EGmx9[PzPdR\Oʁcwh@Ҭ-DkO=p4)OC XUd-A&ӅݞJ-Ɲ5uv䅋FRIũZ7/k7!Tꃵ=K;]d+gOW;}; -eѦ4kޱHH +fc <}^iRRz.AeJotW1aψ9K]m(ލ,唘?Qwb. HZ[NN*W +,VUCz@ϏFA#\K6L'H~^*[P0NBъ㼑$dtUVd5m<z {K T ɒ {g \)Q Y7Þi  Wlj'N՗[Z6i잿vNB,C-\yUwO $"[. l3SJ'[( :vLUɩ/LH3`'&A Wc{BFWyEZb!6H^w~z{w=ô~7p}QWߎAS՝i_Z{`{k͹x)z G5n N#R[)~+|c&'fh)B830nnencd2"W6E up~~% MQ{>VOhXKkswh/*2^ ЊȌMXg>%X^ =<$A-L5}Hy| T&4 -fMLh 9lgi> "G"~D&]4nB ɻs^.t6>MkZzH~w`VU:w G Dӯ@#{?&z ݥ-"kFQv[vYf&v%Gȷ#H~:_$U!'n2` -}zzArq{I*_9nOd|jz--eIm|krjnLRF*8oA%$RC:ߘy~ ꅍJ'B#^}W)吼n>ĘjBv91b -K7g"֪0=">*"( }3jc7{r15YIG`|=Gâj( e eD5ΧG{lD)5Ue2F>aW!Mdj((ɱ(ԉXcZ̮gAn$Jen^%HXtH-'إMkdrMv^vٻްTŰ@d e{9w24*!aD|5R4a!L>]CG\&V?~U19V?E@·U;'e/r3=&7Z֓΢:A+sݟ`w" Knl' ۥV &/:N(wXB6Y{#V;l]\OZ8󝗤>@%΅Nj,[2ZJeNn0[7ױWJgl@ {\n9'g*ak)vF&v2ei9.n3+gQnd -7LHmt.`_Dg3ިܮ,=P:>tsuL*$siyi6#93}3$<>Utf'HF #Kw$bBe([85=.Ј3,,;|yD$3uԷy|4Ml U{q(Pj3ί_۽>ؔI_ЈeɂO(yT}7CllX{fWa.zb5BzN ;ג6/ ۵Ϣ\zk5~ O@u/brɎOZsG 7ٵ(6 lY ^q͵Im ٵMtCu ¨J ;s:&5IutJɰߋ~qH7q{a\&xhacֲMZg[{eg6Qսכzآ M̔@e°h1_ږ`iH'o/;PG!~q3[ҡķ冉7px(ԉA- -Y9`4k;`ȃ#v5*r>chwNkC3.SÍ|0dAE\H,vYs_>˹fPw&B;lf6{č g\7-j԰i~>u6r-ihp 4u{ˏXnEYl<ޫ`[MMg]_KοywAJT놰ND;fP2 yXm#6j;`V_Ai@g>G͐SK̶U-ReM\)L-I:l^>kg<\F-U:DqEQUBw18ɌžyJZu5u}%9(Q5{ↀ{&H+R$Oi~|YWPKKx<ٓ5瞧 ]Dz=9$HN$y}L,{!6XM^mlR') ->눎ExWޤ0m܄uTyí"ƣ]C;kXO5:X!//{endstream +xxeP& ڸ;i!Hp. %>su{MMWugg黪"SVc13Iځ!Ll̬|EK[cg';<% DE%B,@2L6^^^$*@E/_*c"oN`ۃ Q_@`fi))k(Jh5R 0hPv~K oi;fv&v`S˿Rsb~qN 73 /`rtrz{X:`[ vK_M {#Ss88ZCo^%'˷ 3{43q+77; W_ASK'{ۛ72{G˿pv+F#hjrrzy:۸mm` q٘1#46#5,2`3;?\@{ hjq̐X o.w]fk@G?^sGwSK:(mKe E ?l6nտ+j_d@obK'IKW%`yr ) z}3be7LW?M=F9j6u7{R3_ye/hTqyZT;m9>=ּke!G!v>1WSJzDSZ'Ks #L@KTrX- + +"m$F 2qaw3iZ5S ҋW,]'* 258o)_/WS/Ch Je oMEB4E߱ ,soIM$o*k#6Wu$#)UMFP^:(s<9]a#NSp7I,D Ľ sb=IƲJ6޺]m0>ya%(DgHuh/:3crie?0Z~brQxGD$6W +,*o\(Lp=L{,uۂ_g8+t3@o&k,wx]<yͫ ʺ3|bJs/H*}C}/ܳxΆ  Ru?WlJT+X.ujm,xp<~_RV*+Zg4Bc ||9"$ +ڨ:t0Di5e~ClR/t=4h- AD,LbBeANL \CR;blūn7-|r,X:Qya1bL@жh,TҠ5mbl.9BY~o*jѸ)hbC8|C|h|q ~"0EO&ȁՍ#FkC"pgl8іWi(¸813STy;,5`LAJܮ +^bD?7O,CUkqa y٭д+S&;Ll6snwOEerB#cc׹\.MJ))x_ q (&3)qC!#Hl8ML,ܽ6\eTǴ뭆8U'4ikOOLV_."ReZ{ &oLF%!+O)Wafc^:şVF6L:eb J:d^?bmf>!e\: `%LK Ӝ fZ7lP>'@C2v*7o*%iH<0w6<"Ma=$QkE:RϮF]d"FH%k>NygI|D#SVZDPO5DK(C ۂkި>; xjg)-0v%>^\%hݚ? X$5, BgG5^?[91zt蛼2q>Ž5a`~VFnE+rjN hmÁdW")3O32xS JXMFN"[kp'ǃ*u{d4铤^pg ߝ{Npv>D=~e nY&y*MPG)^-kLoBfL^pȸwPRvn׭uw.P ~_\CKfHr\&><*`K9јɠX _;I"SQC#,V.ve=qB^۶KT͍EMij Ŷ*)A +''YX]+!`uqp**ŗ釱mw:^'ter +*W.,BbV{/7>TUb6^EaB{ MC=!͍+Jj"~iz[ f-Vu4Qmr]d= p&+G@ƶXi$@9LW'< +V9` + ڮ\ ɶ\$7qd;/?g]<BbJ?.hmS<͒}b3|%Dy +a.,S;ffޯ]ΌM "눤صm0Bpnn"+/c>w y\z ziZ.PvYW +Zt-E{1u\|5I|$0J'E,ML.3[! +ZNQN䢮Y7ܢ]{yG`mG#P)EE +31h +YUT"Jsr'xJ!}'d;V.90SоӔFt)+_  2$1Kϊ܈s-xVR{?*:WT !eGճ.;Ȓ߻q +c'Kv3\w Wsn fL8^6@Ӌ3F|9g}ސ54$MshɂN}|bnK-u_>P|`2"pܔ }mW7ۊ2?E}\)mRm4|9%0T0 QWL8Qk7`pWMq]H@]l B&FE1]!T]M,*ѝV1DFb9)h?‰ɨZ{GN{ڒ.xVS76F>!CcN3',HeJn`IJ~kkQg{s؟y3*'q_qG8D!Py!{'[c?F'OJ2";'4pB)^6&{^/pzL$k9=BubD6%Mj,\(in +! u ZLn%1JㄬӴ]E ٫y/щ|RmػWSpD]%"6[.cďxczB _H;jnʫ0YBL'M+n`V^ݢ;b(p TP{aWFCnһ!'|&!MBqKST7NM),* ?+-@F6$JMBcJ?`** 6Y g]"O=SFb5=I>M}0D gSYQM^5'71OBT(&7%Li9y~tm9Ӣ) H T'.<6|EbSl*I$& $p= c\1_|{ QG y"'_, t!ͧjaHs}KS|Ơ:ή~Y`[N +WaH +lG&* }e$ֽE<ڿ }On}YGvA7k"jD/+lCIf=~š"8sxj(] Y'p]J–cgmSGFÇQ|ǭf1d(%J %ğdjnXݕe,CL(F2HvtWF XXa}6ѳd)zt^#j5$6q3+BAI_wl5o1ZxG{=0^wiUy|;ͳ}MH;3/ LTVIiĴL WJs|2]Snb6{AeQt r &iw'?r.#SGGezxTw@} G)ХLH6HB.}X$T YbA s/Nh" )Q\#xY(gUr-0y1FO ,nnN2V51]M7uє蕖Ew kB:{ +P]ZJq/{@qQ@͢1r͜麲H'tGN31> jū;m@q&Ȗ`P-ZThoYr¿6.sqϊɜtXaX$ʒUw` G^Gffۧ͆C(ZE56[ tHDD%|tע%+UyU|7#ޝk?MXxaʊڑBzcq(>I83hJ#8|{s,3x];Uij4n,M\`NVI;K?CW:I-$Ғnqqi(.m9z AsMQr6bYdvR5޷_L?($kTCK(j[8/Â4y !!TiHy +%{5%W򙆾deI?71gШ޹{U;mjBac`%qNx7i5<CiR5!߫677 9Ưޑ>`h˫+k!7|z*Fԉzԥ!܎\:p7$1{?VFŦd[kwew@E~oh%:ŲAQnI2eb?zSCgH7&MHTuv@i*,%!} C)u]7.+Qw9Sz>LY6S(Uwm!06fEM˷L%m5_/Ԃ7?%Fu~j}StMs{J8,mm)qԓH,PXV<=Uѷy"Md?G7 gǭ5^QK4l ]6MTsNq~HYVT ݊nͨ[O~/oZp%d2'B՚pySֱ3@wq:vlX 63YRdgXO˜?HpXK,W>[|g INJN&1McM*?ʰj݂9m:3-{Ǡ[Mp4zkSqf?AbL'oBy +֋KâRX?WM)yVx=c~y-q·QN^SpVORI`Bxm]Qy5\Zz]搁t/o4Q16X ;p1LZBEY%"y!>4 +[^&6t//[pb2/*JàT<7YN֐ńz +h5 +qyCd~-V~[N&!4u8pF]f7-h4HwL,o$\k=wN&!irx>WAK"fdPUb! +9|^n_ +tA3Z2zԹH*yȃ>R,XN6>1}Mgj#gwaM ̷sΜ*s5?<Ιd4r)vh%rHb6cяpjINTUظMG>l 0_٭V"~ `^L].$m +ޗW}A>s8t+ 'mCf?L;O=gS4\V]^'F{51 .g1Lkn8_uHAQ04/rcJHhJU oQ7mC"9.qqrAqiT5H>7,/'4swTӁMb[TQOIS ;o?{?Ku&a]ִƻt;3maR~߭Jvh)ڪ?,9Ty%}]neth6OQ/Z1-;/¥|FEZ sRţUYÓ5oҝQUcd̀y:m,,=}\pf}{q3@&Y8:,b2f3*EMNAcH=iX-,3)w'(n]+"M OSU?l_UD)YZQRϘ4Q- +T;;!?"D㾳ؘV̙D^HjJ)|Ǯ/|=<߱<:82)/qQ/֤4*}FÝ<˳(ZB+ȆYNQVN˽kCk% mn^ӑtPLMk:3̏mu"*8˚cE|&I|Ecm9^bt-|Zex΁ (EJ?3ºy'.[>ܕ{ɋ&XcoXdP(8 0(N22< ++>{-ňFU^V% Q+`@?8| !ڒ?XT~vrVI2BǥѐdCQӵYGցLgh0Rdm ۫ZL [ XM:/k :SQo^ n"C4k{wU4Ξbůwu M#9j-$c;ȭ)D@W Mͺ7_,W}j';&%RR6(~Hcb=HÞm{P3X)1qύ`Sfֵ܏p-gU^XřymGmlO +Sa6ry#I:&ǭjx,h=}υ۩(#D !ώrF%gt{I3P9X8@NiٴE{c`'!NX=9&[nm 7:(2 :)# PRYD+E)],AVsfyh]UD|1fd@<uvT s`H|NP~At8s_Tg&Om$:ٯRwvE6ͮz 3|Cl0\p$zin>= +w֮1KOASR*Z"ޝg3DVL(qOb_"҄"3qjg'`6J me8uEům=[M+b J^+֛3[!A1H}^ІV6le<߫T dy(C+k}*e κ,/K;x7,{x.I*Z4jƹ/x@OLVihXUqۘP[l V}|Tm E>DLzhTgI΅ w]l|Z״ += +t,H{f_G!/K L.K[D.׌L셷MwKnn,=PtsuL$siy|6'93{3$<>Utf'HF #Ow"bz85=.Ј3"7ryD$3u̯y|4]l {q(Pj3ί_۽ؔIRs hD!_r|{d!'ݼLj~2vJiά=wpx+0d_O!'ĝkI 㗆:2gQnyRRx$ 21iz#8'ӧV]tbem|{^q͵I} ٭Mtcu ¨Ҹj ;s:&uI tJߋqH7q{\xhac6rMg[{egArQכzآ -̔ eh1_:VF`iH'o/;0Gq3[2aķF7px(4A- Y9a]ܵk;vȃv5*r>cγh7N#3SÍ|0dE\H,YsRi>˻ePw%B;ne6M g\/ti~> +u:br9-iHhheQx|VvZδ{gy%u;h$ aO/0wFK8P6 }Xm#1n;`XAi@g>G͐SO̶S-RcM\%L#I:^>kg2\F-]:DqEIuBO18ɜyZu5u}%9(Q5[ↀ{&H+R$Oi~BYWPKy>$'{:U;)U{rjAI95YxP'%YҷBl +''OۥSTei}#l+rkɯxc?YO\ %NG'1P 9g(i k6 Mb-vqIՍڒ3t7Mcex ӸV0Z.NXER唗6GE}_* Xo3.~sP M_=^1:;l6 +ejN'"eD,Y=q]>n=xxBVUC.oV; \2cލ\_شSf D,= +kQ GGQK?àƒ\% =yٝJ}}HaYs>׵Wn4\o3X 'Ll@@G-{endstream endobj 1430 0 obj << /Type /Font @@ -14920,14 +14923,14 @@ endobj /FirstChar 35 /LastChar 122 /Widths 3005 0 R -/BaseFont /HKURHS+NimbusMonL-BoldObli +/BaseFont /BZNGIX+NimbusMonL-BoldObli /FontDescriptor 1428 0 R >> endobj 1428 0 obj << /Ascent 624 /CapHeight 552 /Descent -126 -/FontName /HKURHS+NimbusMonL-BoldObli +/FontName /BZNGIX+NimbusMonL-BoldObli /ItalicAngle -12 /StemV 103 /XHeight 439 @@ -14943,50 +14946,49 @@ endobj /Length1 1608 /Length2 7939 /Length3 532 -/Length 8790 +/Length 8789 /Filter /FlateDecode >> stream -xvgPTݶ-HPPIhrMirNlZ,Q@ 9G%#A2H9d C{ιUj9s9ZYtyd K"Ѐ[:tj<8pk&`aCBhA>B!y@@%`!ݑ0[4]_ǐ_!Kxnw`6(hu@B7B-` CrZ %>@ E-gK8 -:kkB8@`KCbɠ`ju:vqH{ -u 6Hh`w&pkF!DFn(4 - sDnj+m F΍ݺHwI|0^4n߹, sDpFlŀڀ8ݝ oՃv#D ­y 9зm`|`Cs"4pܒCpwjM@ߦTω?"Dy;3. ~1W,w74߁68JRA!Z0- Zi#(,7-wӟqA g~+|*Fj\MDiݪsw%_u# \ƐEjD~er%e>w$J$k|XA\9[GowWg1N: Wz$> 6!kS:~ge.0clKP>1yՒ d Sլn9|e>'CfЛqY8$fSRo@* ʹAguG*|eB;}v]6y}sx/GjT$JH QB~RlE1w.*br|}$nևGs]> ?V1x+w\9eІإv7N/.&)0Pk R -^8&sݱ|cկ E=.}(pc8hXeMpefI| -8xώo LUjq*'yJA@"]1\j-L3wذ`,>aZo-~ nQQNq5% zh)#*l\/(YfYwJtoQTH{=ә5 -R!1r<;$g2įCǥsϹE#29[eb BÇ;q4y,'X.^m}l3S@+'YW[ZTayR#Wew3a\&E"g>1do։gs<!4% i%-#`h-GwX8n^]>WipUIdxӄLvN8|x|BSP߮g ԢJm9}/@cH/Jh_ܧ^nK?71$ՎbRm:^5c ZDQ%qީ39;*XgEvb#i.RLj;U9elbZq5SvPCYd42ʥXHC{TT{bjݴ?k)eXrWTblGN1^NdVZ,ZagD- -7=s`[zޕMMEuGh+KI9Z3h#`+]J淚4 G5ɦ /~ 2I%R*ȹ壟CS[m&,^l03F!2gȺYz^X@͛#dQ ?'ty,bx_•DC}F0j|{\s}8$QinA$o<Re#"UerމK =`GS"Hbʘ#6W?+ -I{QeY:Bb>:_/!@Ȭu3+Lnqq`Um'aeG-3rk o=m[b "E;A{<1g `F;ExS>EGt 62j"hkI5IU:Mn"AW( -qE*+nƗ;OeY:*g'\7"klq'9TgeixqVV^nOil&h1n o-R!~x葷yo4{\4X ϴ/坵N%{;4u)!="3М`0f6 -#vl|g՚:qyN3-yŖU${L6Rə?"Z\Q>Ȕ {7l]K*;]RE4[Nh|j"l\#$,4c2"S%OZ5-=_~/Lre7/4w_3-_g$L&{[.46ʈ~1rtBPҗD7Si1N@se{>w -mtW?eRXݟ qNb%2t)( -֧9Aɚ2;Njf:9NʜT)=l'v!V7?њ\k=򆺦^-2~Us.o˪aMfs%W2b+ -(̰?6|K86<6zlD)VsFGfZJ P!HlO}>ݧgF;YuQT tDfP{sc޷+J .>xiȦ{3Ś~d@aķk887KpRXCѰTEQ^w~@GK3rNKjYiFFQGQKV1W-]uӣD'4s^%͇aT{L7^8c6S(¸Zɀ`2$=ݛ4n%5&ȇrPjjV J%8#/+tt:Wc0jMZaC7۾!-6گ66j~Sis?S`%6hSSrNQ_sucUiG1ԇ < ,7%b>/7d^쐱/:zoW7~f:7TWx1RT}<}wD>߭+=f7'Z׫@='EM)TSw-l:mG;r/*f-xz -}~Lct> N$c=nƩng IE^֊dh&|݃tmp6QYM㩩S;h./v6Dz~:K&$sfrXՇ6Y|CȜHR=<3S=U%6?QVxiAL+[~KIo&2j4+,~7RQV$L|<ɜzo0T2chʛ -!dF /pI^ݩ([|Fv/fH/>_!ocG% s5n5ZݟJ\U [22QxsثPU XxnO -Iǐ v 4 CihTޏ f%2l}^#-hC|7iжr QHd.ld1(_wiN3O^Us5@p.0}W -Oy|g܇;h#1|6gU rk_wj!:/*¼_Ԧ S+(#>pKs%hjN -\Ou.h8˵[%-n&o{,OJk $4sz!b7ڇvem5HcWuTO7 ;BȆ"dUt[0!<ڗ(U>9;ր7ޭ:ղy 7T}ICQ\W3ýZ&hlK\o`~~t!('tq Yb4r3DZa[_> (E7 bO;8<084;ժ>*Vu?+hH~qx/}$+V8|!ّ`ǩMQ'e^JY7:?ksqWfa4>Z'y];_GdR ȕbnf\Q17^vo4-מywE$-;k3j"kEļSǻ7Έ1ɜ#,9Ӭ1OmunPZ}7L$*1eP mC gVGG=9"fٰRx;^,zOir>׳wc?!wFNy/^(S̗y`LŔQwѳ.砲7Lm-c\ E>`X|Z-3!lq׃큌frMaKxRn{D?&FT%ɘZ8U6 -3<Ȉ h=`C-Z*3J`+>p;w c\坵df؆:VQ -Lڱ{i CD87.4=N~AYQ -;dY.3m -'OܧZMkEAøVF+\7Hًs -A7?151"yUFIfw*Q;1WGWG9 -dϡ6h| R/?jVttf=]mXCh-E`?|(躃w]R跸[O^'^m[4]ađ95QĔbcőn"]GF&< 3dR% .ӵWQmw)GDaelNA|ZҽLE}b\L&pgr[ߞzd - Zpn|˨) 2xqS=wÆ jI6a6.OSy]Soaԫ̱⣊51r%ob2pȈE&IpVNiXԲ A$e$D{D';,gk\ Gi3qQL99]/9(C쯆IV-u $#?(%<~^nspPpmJ7'y,YEjlw‹h> ;KoŲ"hum:n=NJXN7Ǟߍi1zUL-f+OGŎF*v|FO]vGٟ>?$$.pHS 41,V;"mLWOtou_݄fhJ#ʯ\C¹)O!iSD3J6IYW;9#%Uԅ@KDFjc=sˋN|ݑm*RPh< ;w5y]# -X"b3]ub7夨-sK>< !!=j b](it9 -K.Ha+-Ε[xCiif|-is\|6m=1`K^!y9IjXXHO~L쫜F7v")@W[zb4*L0z$/{>UiOE5t=; -4?tsTe!4J%hQ:yӴ(kYM>X sqir8!SS$ŭ$RѕamP$?g˟Vd[1iO<_%yZ.eX*I{()_W x}kVԳI͵'EGiV;Ͽ6+$ɝ {T"1М5v-V$lޯbݦ)oS6hLG,v%uI~]%)}2 oJ]^RӠHm;d핈`)ڔdv -8>fN-ӥ]rp4 w0N+.f4f /7rCOp%\.̕{ނmݒmp7睎Q}⥜McFnHHD^{D ^HҜ.xØY^$NRK'^钲td?I}ߩfxa(K M*Sih %b**W(#]VmN+mnA9X#@g\? =3$Zk з)3s"$'5o{ ko p{àjw M 1w 4 6R e`nP me o{Ǯ"0譖ͧg sb\Pߙ71HH([zu䟋rr7'/PT+$ z{bb^& `4x~[Oke7E+Ui-?CAL!^&$(2>hI ^+zq]W9}r3r8{s< ֋5[(?yaҮacmtC BH.پ,DV d+1rvvb~?gl>i]Ngw&d uJ6/t|m jZ9&Zl*-V#=Ud}hq~3!P?Kvg"H~j=VmفꂇJnY@32ĝATokw|9|#5Q Uʤ(KEa?i;vc19>>7ۣ. YɲChCEfr:NN\r{Dԗ|Ernµ2 ܏mS{.9zV>O׉E}N΃輶2 c@ +6BNVz9S,nq2BY_+s`n'.@b%iZwJs {^CHW Z v,!ie1O[oFyۢAx@SeMIZ| +J<.%s J?ANy2}o[+Bz1ហ`tftwώx){qsn!L|ŖjٵXPN:i#V :~k{|t63p5Eu.F/5|m>?d]=R6L"jl zКYw* uFRψP +.& .:%%+rdx ~j}vɱWVf֍>AJi +E *\5ʵnݥvհ@<|USCZЁni0q~x3Xn͌z;{憏k89WK`3jrB(͊vII-.X ~Jx?e(ɧ$kUS_+3k:8e!-ZhɴN>"S[l {G^-dŔ;VGMjr|XP" :@7Q0{N8u :, p\m|11vsThypk@m?O"*NAܱt:%QMsjfZWW /YVMO.}wpY3aY\?J\eAF#J4H;O5kVMc BX. OpG%>}XDfKKJ|΢5xJ'IB7W8pɘ ?l,h*;DK\^JٵղA(U +5լg-=`8Z4~iN6@}!k)CO,PE}/:o4QhBlg˔O1 Qϗ= G2$"ĂB5Gmޜ!kʀF9+TdG"6ld&Ze{4BQۣx +,g!Op,镨/+UN\_H;2@rzPƜ5,Ov^=Ўr`ҝdU'/,&z _'z8^!OU:Ve|BVv0+0Ӷ,V J,^S+kNs8 f[wOR.FFMl-?f$i*Zg-@$G3V;eWwk0B9lZ3 x?j߷E=_a^u(vЕA0U#-aSL +-g蟖IkZK +,񭺓 U@Xr};w`D.3\lb񃥂UM̜JWkh jqDKz瑳B|G\Ca+*ʁ~G٧}ΪJ WH>a4 N$YY_W+vqS: 0Za[%s{d?z7~s3M{i17ւ\"Ge3m7 +Kygm/Ś\qbO;z -4'+k=~(6hL<6yj^"xNLݐ%3jz˾e2fĺE>_(uy{!4l"QtIEu nGˈ }c>]':w%زXd܆X[ +?yw G$<2tϢ} @yIGbcKꝷH| xx2_M+=~d/tvLFd*ľb&} /2 ?"B,|B1楛kf}gIy8 .ͲmhF`Nƺʨj=wuu?Tӈ~.%2_()5e-hxlS+\dޢd=bfFO!3"6'jCX]*BwKihn"dg쎓`p'UJfaf[]͏z&$ZifGLzb\d격|X\sɕ+ fܟ|>%H`=6"P9#\ #3z-R|%$Gc^M]{'_D1*,θGgLMa2B ƻ*+M[Tϕlm2!7VԈn摒pj7>"$X:{^u^9̒DW9%%^ ,W0߲ݙZ/{>/"Dkm0_>WTxƹ +z-%OL5V,z>&wrY6ǗJwG *A5 +SSi*z~{OrzMl|P"iWO'gbbQb 3.kBdilw_cŒ, x? Xǟ8 u7W~\EDZ~+;蚖!a{3Ϥ>ݚp{["tRj.94~sGA =bB@Tm87.YkTc,Sy߯N-~R>H9i m8њS$ "OsjpQ0+΋7r ӄr.Ibc7:n'vE[ +&tGϾ2(v'. +0t +sobrvE /WRu/wx h6ʳ(.h(wbsF)qIRP1+ШU">{ɦ3F*+nz4LW`zItR@8QZ|Fgt3(k@:ac1K" &AٽqK3(&>M\\`jB! Fj͠T♁3BbKGsiQ +ݑo~~Hj=߂4fA|N瓞@D2J fv_Q`TU`@Yi"=Mgմ1:Uпfh l`NsklbhL:g6(皊KQ}]j+7,IL$< y1Ӭ^Ubs=-_"/X)"7h=@ + s!q?OGW̳)HnoFA{Ǒ8jUu;W+A;X;{w}x" ƚ=×Nnc}& y[~ h©"̋Em`; +Lj + +̠Q=w¾?6~dxW/aۋC\Uf~ +HN2HB8G+zq(6|}h`wXn֭\d0֟9yEQl84Gh(1#Tl8\^/J\H՞r2Σ}RջY|C|i xCݪZ-0JL՗D9dkΞu !!}U?9ܫeiҍF̦wNRi~qzeh )M# M.?%a5L]tًCMSꣲl^ځf'7bqG2Kj? v:ۤ~ ^~}>[6ԑUi!~{?Gywuj>S8CD?{L"X?P̭|/*_6ffwFڳH2tgm&T-wVu䓘zMQ_q3/Hl̵-@j +=R>jv)y[G5)wArqsV +Ц^o{^PŧrȈ=2ldD4kw3\Wd@$B}vmwK&#?e6*I*iQɿAFd@+yjR魬V{)yK *%36qOVz +PdՎKc" ק߸|: aAff~G+Mk{g1ۻtO)0ʜڲʐ.Zlvpkg[FMI0깳vhPK x!vyڳe?ufK+>X'[&&Sm"~ʏ\m$ G-Jo%dyJ-ۼ`~D]FBAxx`}fZ%r6_f h2jTRw@2B]Bc m򛋦BkSUھ9Qϣg*R^DjYzEl/F{4Qo r+a]:0A S>G<5\c>3ך<;gb}=uMo(!!M'̋b8.X$*1]_>-ӽUo}Ut)(ruާP:(LQϲIz_ϪlZ ة1).TZ +&2PuI[^|ul0xp(%m/ sqo]>51[oLp8e.*-0U'~+TNZR:W(`)""ѣF ~߅R,vK󑯈Tֻ\U)-tK3kI \Z4km3mWL![ +QfNúCzgg_D6qIF2v֦PgUu䂱~#Uz$J{/FQ73!qW|* P.AOĽtzک͛EEmZ\N ί~ D`'(n%[j&9>|Ĵz$xEH8&x*-ɋ ˜ht,c'8PIC)W\Uׅ_[ްNj=.8J /ž\ IL맊$kif~]U 6O=UDcz/? `+ɕHMs*Mĕe0@Sz%j%hDDk^'Ц$S0sj>*4Li\w,>u8[`lU3R膋$zLugt$0o@ rGEVm##jBw:0*%vBW?3ZVegM+>K}9i6 s"ЊYklęJm%:J+ M{N5( FYdR:XdSblҘ~P2LEKd,E5GT&X2G鲒LΚ\$ 62̭ ~^n{{]j(͎(XHᛝ6 }`蝅i?tUIyo\u:ƾ`~3|4}2ϟ +_ iv==%!d2KVB'P0#fV)endstream endobj 1414 0 obj << /Type /Font @@ -14995,14 +14997,14 @@ endobj /FirstChar 36 /LastChar 121 /Widths 3006 0 R -/BaseFont /KOMJXL+NimbusSanL-Bold +/BaseFont /MYIKXC+NimbusSanL-Bold /FontDescriptor 1412 0 R >> endobj 1412 0 obj << /Ascent 722 /CapHeight 722 /Descent -217 -/FontName /KOMJXL+NimbusSanL-Bold +/FontName /MYIKXC+NimbusSanL-Bold /ItalicAngle 0 /StemV 141 /XHeight 532 @@ -15025,7 +15027,7 @@ stream xzUX]m$na.m-=8-݂&,x}snC5Ƭ1k難Pdt48B,@ U ĢvfH44Z`=?WBd;B̠@|c ?]j.`Go rC^))G 7dYj\\,@וgV  -e`bb0!ׁ;L uіŪYI[ B؜@+ecx]4R/W<,^bw ˿dĦ ;+Bf @~  yZذR 7/ b2w@$W3w߉>CbgX-s6KY}lu{ @ ;ϑZ:BbjJJ3{p|dapqvʫ"?7+Ӌ7T _KRb{9>$wko [jC 7k^cK7l!fo7WnW/G\#l?wAGjfX& dZ]!HIse\]_obo)!`5@ڕf.-\\^u 'iyB0ض6Z؃ewGō )6+L +e`bb0!ׁ;L uіŪYI[ B؜@+ecx]4R/W<,^bw ˿dĦ ;+Bf @~  yZذR 7/ b2w@$W3w߉>CbgX-s6KY}lu{ @ ;ϑZ:Bb)Kkj2{p|dapqvʫ"?7+Ӌ7T _KRb{9>$wko [jC 7k^cK7l!fo7WnW/G\#l?wAGjfX& dZ]!HIse\]_obo)!`5@ڕf.-\\^u 'iyB0ض6Z؃ewGō )6+L ] 1W5_rwJXeطq1vﱰC`"NXTP.}D9^rge7hD$DZ4CqHUT ,0=RWx77) KEVjSGn<Ů2_@ E֞(x)mzq*V4rZe(D5.7D/3cK(Av["Lnqx׵4,~D[o]1?vC֧ÙQeYkB> kV'j[ӈ7vyz>+0t8qL&|Ց ^iȸVmFeV|ӶeХy=&khu 2)MˆȺ9֘(Qz/ws^:!/o+"2k "H` i6&|;@+G\VÊxx#C(Bes%AvrUVgR1&s5Ԭ"1E$pÎXIKvpk%"v' ݢ!rE MFa}0kҤ9+jckٟ&^TOD 2/Sͦ>\([>¨J`,;느&w AU?, AbF6WFFX1CS>8m;S7C&v%36y%4!`|2'3"s"4K _[\793!sv"Y2l Zԟ^ SI3+l)p9]PvXinw87KB0L8,6 )쒺x|nN25OvR'*{< , 4׶NoECu6cqXn9t) @@ -15051,7 +15053,7 @@ f y# |LwFif8g@$Szqj$|ɇ.| ߅%2 YO|ڲqXB\ 20t"R5vTT5ߦzO%ns?,aRI*Q5QJXhKߘEѴ8ep<,դ?#O2CT}9; '}xMD׹̕66*pHpTmmTL$SXB0=4WHcez8c2LS֓]pɵ x Ti;z,R Xs+!'ω'9Q://̪͘ok&n:xDgOm(0~wY&<pbYQ\n>֕ v[d `Ô/=rW W22٠|UDݳuSg Y6۪@7ٽ"ϰjƴSt~XMB^$>2)B9 iPh ?w-H?˄,?ú[ (@^^RA7jiVV'#kt1d VH=:g RABD`:d ڎٮXHM͙DF> endobj 1409 0 obj << /Ascent 712 /CapHeight 712 /Descent -213 -/FontName /WSCCWA+NimbusSanL-Regu +/FontName /PMCZSS+NimbusSanL-Regu /ItalicAngle 0 /StemV 85 /XHeight 523 @@ -15090,58 +15092,56 @@ stream xueT-NN ݡƝ[ $Cp{pw|ߙ353VzU]o5 ' ,ѕ]` rTbQvS1$)+(mj)жH[89H4)hm Tf`bb/׿#.@kG=jc [TTu?~ `h 6bP[:X2@`?s\X߹$\'Ks{_3tqy]`SG;pnn]\\]@'W{VUijcWn; Y{Zjou5:\-=]ef 8ٛz~'s.h `KkS;;_>{S''{A{G @WK{+V$﹭Hl ӿc/ax/hBbr}O '+?_5O/}WjY7{%x2 =co -k,0Sږ(w5} GwaX88Ya=--T6+S;ۮha :Zk a4sK@Z\Ϧڰ{O%h+,$`q98pl -zY9_hdAM'WSGa_{~{--=-͑@B!Y5=]NEU΀ &ա ク^^vw:,OI 0Wi[v،JQ3c|faxٵv7GԍJH[gw T8ԷNhum X5hn~ w^v3#àF:i~dچ%N5Ų:}H 1S栩qߖU$]}&5@*ڻo&χ=xL _Mv#K֋ukva"tYr>8߾#v37_,]?Ё^/h5?}d{P5maHfd$|璔6X%JWUTqBIl3/4yKSe+l(Y|Bo%NW,xL3\@6MTѤw?Wj] &c ؕ ȨצeرNh9r|4QvXF)q8,E*an_SpR.,k8}UР}>?{Ջ={JG~uo'1ߜ}7V S`ƹZӆqrXQM6$H3k Am5kt}1dc’txv~ -k8y!lőd$vQH?"ˊfSN2%0fKF^N,G;K:ǁv/,*sWUDMp: H% wS`[r^fx -H~J'O=铫=/W<]&r\a:wҧ/YP8iFO"`e dipzOsekrv~D0!4*^C; M˺~ၘu7`3^r9pv'sx+I'|1r*?+0ȍYL}ѵȼjW.dfH~=~# RR{Tq g *< -OYS0XmsŻC&?EUtھBirDm0;{ADwm;N5zbLm= iu=^r)wM'" >,(vks\<}zeCx 朮yX쳈 ->sB+)p(;veME~.Czؓ2giIoҋ2A{!d:X\jᴅ0ibb‡i8I9m7"A9;G坋Z?qq3:,wy%ɐ(M0l -GTtлG9/MHFaΌ7sLQ=Pfnjfdj_YiwV"Q0XRyah!e5Ŷ'^VȈ=L> =_ϧHU+"W-6 c)Wai}2ec tMs#&Ix Z ڙOJMe=WCT*b4_3)'8ݭH\$`}[5yӸ7ڹ4L;N5<GbPfQ`ax!0HQ7ܟKEnSO"n78Sxuke({5{.i?dد_nmq=LV55eh;|  -(*L׋v[=q;߃} .~OEk.}q|eK"ܧPWp74bE&_JHֿ 9GO5Dz_.rxy_²/#Xn W J?ߜcN~l͆M=nL9V\ - ~``}rjgB},'E/Ak!r9K.\~B˾OI#CpqC2sC|~GiaQM^}}KcozjuE"Ū 1DKEq<[c7'f*vEJt²P="e/DLix4G[ï9ͬݡz(<r!.Sb8ls81xa-Fah @Uoq2!~ -2Ǘ.vBglI˗:A -lLC{1*4uHa16C޹ ^$>N-OsHibO:Zۄe%,0XȝMas*K%] &@ -ѝe+v}%D!BrAT^U脲@7~G]d)$ƆJmR#i$3Q6z/;\dA k5CfZ\`#&EnK);3_[9a|~ }pmMR[|+?q雄tݑ81po g.XQ?{<׸v"V^#FÐlb6GNLҦԜ1t/XUuw0$R֎i|&Pe^DMQó':B)4|=I%4=Oeqxlj T2h I0ڂd @ =r"f4fi!s:UP9t6 D:Wt=n\\sWm7 -+T)P) ĒE:(>Ӑ6q'z-ǹM-E2׽:R%?5袪*I FvPeH`_ tޕX@+"03|7ڢIW?_q0k}؆K]e_cg 1WF) hcr;hLkܓtd20_.=M*iR l`5'^]8Z:Zh#=7 QOָ{Zu>YR,t"6!(g %QMeb4^.œBOQk&8W(Ε7Fѱ& )+,X]ђS#ȅTzg^@4j.G܄5)pAOƟ#TZ]B"Q{OPV>Ѥ/gDZtǸpxm\-w=O#z~$ܹia](T{`WXhjG&ʾ"7b ֹ},:O%L)lzVUr0qe?ީn[pHѩ9(ol[NQ%2xMo| , GM漗h8"s3B5LRX0/K zcU4Jds=z`/sse6@ۙYVN4#M@ ٤%S*Y&LwevcU! XGsu 4u?TrkՑP3<1lydQŲ$zXq{Ӧ.0ի<$>fӫt -FAF-+PY$m7 LQ(xsQ vDHϦ3"ŷTҸFA K4FJlJ,*F k}nE}NOG|1sbhhKԆ -%۰1"m2̷TY -eaBY tL,WFO̓=e[Э9 -dSk37js>wlhO\L 4wد+Zzv#-}lW+oh˹}s!Jl|x{fY*0#Ostmn"N^0V@_=XuN`%S EzBq[*-K ǻ,eAuQ74l qoTWH\zL%^u|T_olؖ75I _>alb@0=Rں!&OvRh0Ί -8J;xr~I -D2=7\}f{2vχ{!YDj 4)JT4a Jʄ E0/U -bkJ~,ZLA҂*jXQh{5AN<|1*T DMA2qQ.'>ļtH8 ԀN -C=aޱ -z}:?QXS+83u6Dx@[[-^IԸzZBPEf䧓H#?zßMÜ۩'oLH)^/F"xA,e(k.^d4Z&&HgCGrZHńo=+n -(Qlezm*RYA2pSvqhtJhc'3vMUtr^Ҫk;K9G֞5g roB0Dz/񆡿8)vVy9H\9=Xi.h%e.vynP_#Їl-07lw&OX1lDTM#8ndꕎAa,towjsI9]+ECJ_53<>%o \=6WRi O[Gv̍쏳.FeBQD] 04q:~#Cdskܲc哇z_|ÞPc-=! Wq5{* -+{M%-ghѤ~hT۾, -‡Ͻ.bbm`);ٝ=)P cuӞ!t/׫ q(|b6V ̴"tpZFH"x].+}Vڧ[u1I 1ea53|}vke\\W? wDS~18> -#ppėskyʣz ]Z$spvU'tc1B#֬K8̲McG=D´fKy2 l=kMu˪YQQi8r>]&P;rWz]t}B 깬>G[qCsTE-f+Jy:#'a1V8ʑGP!"w0v3=[i<:}d!9?:rj775b2+(W{SЅe=z1O)?^t7TRX:%DW6O8c$IxnƷ|TYCitJ[F8 !}-(* džNIOKDSX{qI`ghj.sX㗳OIb\ tYfڲCh}mzw=>v40 ؁Y_e$gO$⻈3Mf;o-DhQu>QfCR+"'afC -j*c#$}AbLLw՟zZӜ"!uS+zs  .c=夐H!Ȇ?&73lA* #]dJ4hO]pq3\zrMj&DSXyD Hލ: e`}1K-$\r^IzM$9gPBC ʆ?z>,n̿th^Wsǰ -!'wMPk&&Q}Qvf/S:K\oh4PQsbז<(sU8tB{KiFě)d:u5Nc6SDO)WQjuU0~ZrI4*9/k[C#YDj8#J85LbE'v~]TѕxZE6l9 Ўy:V"owmDP -86֯!u@}Y_W$5by}{a`9"2(/D8U@]!ny(ESrK (Lm(h5n FrHKjIIR{'\X -Jb^*@vEXck3W3F0;Ʒ:dײ2Q"W[b)瘙{Ib-kJ J WJ}U[jt#y`pYb4Pz r\7BcqRItbNC ԾJW)o5q?# ޚ=@UZ(7߾ag F*&f"b I1b 5(+pGh߾Un4P48@!Lnnxs8dA7ˑ D2+oqeS+V5K"%Gl0:?1 Z ;b~EH=!?s|*sM;s&/ -_mm ->:%thA(E,FKr#5>"E9$dfGp&/yT/s mS;+d}% ΐղZTR:cef_y+9ru!i}̦A25_6ĊZ*ў4GD -οF8oc$<;l"*fSށuw$(+8T͕o٭Uk,U8LborD <(Lcv\xncEkzh?.{(IipIwM9FJQrg"PgxOp8kۇ6 K(c4MɴҬ*C-ayY0D#iPZ;h3]&?"4g5OZ'2g_uE(l #:=~V[jE%zJX8Ÿ7ZK؟ffך7wp#J R3z`:M Hdk#pDlbP[Fǹ!;@eJFw8 q5Zˑɒ;4{.~KB TyxY!e{E[.9UW)\SO6^OX8멶t1C4bwfLq0#u~䄠rBw\,K1q0V _g_q[2"iJ,Wg͹Ur]ƈːu25Hf^bjj5t2vljU?~4e~.fvOgß@W/)( )ryr2LպcE[6 JfH$ /Wj3W<7b#}Eg=g RJeLۃ3 _6J}᧘~[IܞQKxmJB2)GMG{n~LSW2&?/}-1ثXm^ǓN( >_̕ -50;vVʭ\=LJŻ/8n.RzD"$$3mXiB%#nu|#? 8K-fkXӓ 2+t٬c xJKUtL,qt/(djy$q3-]ZG|":R`/ ۨB,U8 knϾ8JԆ]i&8>kCnD0O K|,KPc~5%D5=gP7l r]%!E]H(FH?pp8(3G goa9t Z&,tD΀ qP(8XӉDO'69bAfaQu`272`)CMCi8`D&nT&e@yF&]gbOe7r:7m:?aN0Z$rfK\ ¤'Tgɶ嘘ٝNvio9/WaFOUc \!PI{?݄Fd0吅} X0ꏦ$d@_߅76u)*Hu6Cc,5#d(oEq m|+ ]]*Oߑ@ |37qv]ĵYWal[af/'ow9~ۅWjh;+ 0M4xRXo垳\Q%Ź$8NĞ?rs#ds]tP 8aF-Pt/ rt PaG82?qOKW921B\M܇nF@YIgp}!i]. /8q1IgWKvPP)AO_S G櫨 -F}UZ6lRtá:HOGdc :bT͓V֬4|ռI~rt'aJ@I&3mgm RHt?W"*V=?vҘUmbݏ٪C9RkJ@#yJ sAn#@0'.G&ak -B,tKA U؀7ڗ긍d|%Qߐ6qoW.,}U/) Ұ= Pjca}V_[Q`9ӿ # ڄ6|-I}jl%"h/6s%Fk/Bp]O{IO摻"8 uۜ O̟o8ѷMTt8JbD?Oڅ(󸢔s%~Le..SR+ 2- |G6G8(̗WNk90 -w8!w0an? '-M SU] endstream +k,0Sږ(w5} GwaX88Ya=--T6+S;ۮha :Zk a4sK@Z\Ϧ.#_mؿ=U'UoiAqGR apr~Eƿi8yV6u=d/42 &瓫/ ~?=Hs sیL܁Qi.Pz*Pg@FĆwPֆqf?N/; +]xti$~T |LAlFG1>g3J0zZjF%p\`;@*@['4x6?Gwt}C;/`wriaPis4D2mCu'bY>}Θ)SsԸo]ڮPbtmۚE qUݷECbsÞI|wLYA/Mek &%źܵu;0`[,9 XQmo/bf~@/@Hmuϟ>=(ޚW0Br}i3DHS~@kkTsIJmcL@*|8ˤO +fy_e׼[˲X6, +!`Ssw]BEĞ=A#]}7 oξ{Ib+j@)0\si{ʸM9Z^4(ޥs>wWgqg/7KyyZL~alâTJ$Ta bew KˠD؜p6>;b'kO/AҰػƕ{8PK8OJͨS s&8faOߕğaEԄ +~{c]JQw eE^@XQ^ZKt$)?s]?HmPah)؍gB|"Wub:O +2)Pf*.֌>[-~➒hܙ6TQ:V]x/duս 狪KSW'!d='\N.ug/I:?~%nwr'MS}ޮ0a6Mhh5&^!9u;6,z%?>bTφcLqGSi,5{G!_MxޫLULH,FɣȽ[i. l/QM5~+cq(m+n ]"99;z9W96Te(.jq,M8ߗauJR=zM/mɳb>g a(Gx˵ŵD]~ ISd1aI:<;Y?dW Hh2Ua(eE3)' ]3%#/'%@ ;ۗ`TҹNHc *"ʦ^8D$J|N넻)-9jMZSH$T?%՞Y.Fz0;g}¬m (L4i4g8'q繲5 9~;?M B?/ޡÄe]czR~@܍: 0/cGy ~Dؓ鹿z>@Wd9?yJއTƍ +,PRid^+^2m}PGGFcqaXD`*튆T),ڶPƒ9]ŏ!?*:m_h96K= @ O=P`&6Xഺh΁CϿ/RٻʦA`}PLMD5 q g.sD>Ȳ!XsNW<,tYDȹGXXS8Mz R Iز&"Qb?_=I37c@yڈX,.apBS411W C4?󜶛L ȣECT ZƻdZ|&\6#*]ė&dQXn0gFֹr&(؞K(3cFU325N/FEӴ;+(?Rӱ&m$?p ۉ'բ5p S2%QGw_ӊRAs]CPlyh/%w`~׆# H"/}o9AN ʉk9nRfD_ >E^ 5cxORn.?eҤqm8¡Sع!># д&>PqQ^"bUwS?"ޥ"8ml-ױ3T;ߢL G ua I(ǃ +֞CJGM"&4<#`DYWfV Ml=xU 9Zk1C9VOqIh?yª8N?PKG;G3K F6fǡ=WHmٺU$Ȱ^!u/Jr̖Чa`մeY K'hJmB2,m9%ˁB.u^t WWUﲕTcy */X*tBtBYv Jl#.fkfcC%6)ꑴXəWX@.5՚ߡx3|.0\b"x⭜0 >?>6&aMBD:HA +iKU=\k\dhYo;gh+RM^ aHi61P'&i j:UK;ueR)`kGnw\c> 2]/{EΊR wm}RNJ$Ҳ8D< 6gC4Y܅$m]2]XT ƅ p|3o49y*(~E]:|YU"+JRU7..D9 ˫r\T~RsK@SbclUBրgUgymif8Җ&w"^rҟtQU$~Z;_2$d:x, nhmmQW$ʫ8jP޾xlAĥ3y+HωP?QD v&5I:2j/&\4eXPɮa +VSfgw-4 +EܞQaYnk\=:,)BL b3(&2kvwr/F +aNjg!rէ(YB5 l+^IQJԛx#XXIhɩaBA*qk3/i5#nšpOiOґsA-\.v! rݨɧW(+hRzM }q3QH-T:ic\8I.g=u@a}4Ѱ.y +g*=\ ++,B4f{5#Re_S1هi>|6=p9DuT}bT-kgA76pިl<7y>GQ؅ƣ&sK4D9sumU&t,b\HH%2Jƹ=O2~ H,+'ϑT^΄l~_E)wл2;1̪,G͉#jfӺ*9pm}wtS(`Z_r}dm fW e=]iӀxxkNr3Ud:~E UP@d(,a +_&(x(;YKm gl[z*Vi\l%{#w%W^#ӄsȾP7բ>#E9i1Wiޥlj斒mؘuֶ^msMrylƲ0 :&~ s'AeꞲ-d v59KPk'N.tWWBE-=Ј|cb}+~w7@{>rԹf%6>Ygv=~' V67xVT~'/ckQ/uA:R'0 "C=Jݸ-V8Љ7ة;RLZJuٜ68}\Ǽ{Zx ^q%]в:̈wԨWM6hx7+k [z.=:>*/}76cl˛$ۯiE0k + + )mݐ';p4OugEbgW1[fZthmd}-#ɕ޾vB~+~Ň-l:ؘØ0A_o4UNbGt%qp;I27v ñ]Ͽ92U(~D0!7OKx^a,8e&M[xp0t~լohDқ O~%@|Do(Aی C~(^'O= +7YEæOO?q #rϭA[]Pݦ;?JIq', {XVJg)r:u +hVw^7ߐ8p+`r`G. f9IkPOMw] Xw 2Ωfv^=$M:%LļKOx,Q&:.`٧#ރEzdf9K09UDJ?FzÖ?LIF/u&}S;^S@M~䋧I elpD"Ā}ri&~nª*8G|cf @t:olu0w:\E-;OAw-)$"F ?I8%-f?)[5@M1CL8 E\J*,/y?ɺd%+4c'uwXK9!Nsfxv^ꏹ xu="T6j`?h9#͟ZNFm:@c=\7s$4[BKKi~mz5c mufq0FH@ WnSĺUN zkRPd_٫LhO}3 ",QTҒJ#-G1Y}>5Zy..+}{؟S|;)RJl~Hߊ8w8K +V˹BFIܵ<\]M=톮 -wOW:GӱI!vk%[d{fԦ1#VyYtk"aZ<k:q +e,4x9 aLîz͏qqpy(B+T.> q\V89 +<d ]0\OH#(Sa;ԙDfrN>2d된Mz?51IUCBbמp'Ӈ *]),"B'1XY7[zꬡ :%y-t#䐾pl  +Lcd^g)Q=8$3D[59Y'$]h.,3m١o6IL[ ;j{ojd;3!towhڰ\ #9Ecl넾E8sѭqyn&NrBIlEfNfPFl&}"w{,]nWvGܐ0>qDay9}&:`%dƯdY?5˥@+U4}H\OTJT)skז ə mZςb|z9ر0SVJJVٛP>xtֈ7`ۙ:;>fQ8/ Z"_:i[8&b@,/W2'uc]ę&g̝NŖC"P +\\(kE(3!S)HWʰz3!5J|_ _1&Dw&_э;QЃO^VύiNpނIp]]{׍OrRHAddv6ˠZV.2p%a'ʮp.=9̦5M")YlvO,[8VM?ǁEd #OxG+`u]qWZl쁯ugAUCc5'^_BJ D~,Y#ػqd#NzCXAmjח2Uja6cao:| zdOLǂLvY+#6XOeo W"WqyxM {ӹG]>&9 +RQytO@/6XI 4pr W" #%`T Y{]^} k2# +X<9^{ex2¾q W]gjY +*g)Hp2^e/ƼS}FGQi4Sz\7{B1ÃViPS@iQL0zwmNSL#YOmHkSf}S'CȣmުDlĵU_;#ֈ#ڍJ!Q N.alN[,?.d"Q]ϷxJJl݃K;.1uqRIJpz=mJܝ|."!#(rQ~& , nDG;Rw~|GqƲuۄ(Q٣s)k=K}A`4YܾfvfS /^bE-hh@# "P iԷ1_ ~[fj6 XYTh3X)gxhCwmtʷ*5B*n&7׏gSzE"EZ +1;X.ϘmUb~6IE'bTJJ +;+DN7SJYnj)=m"H]64i7p:Y> T%VŖfЌ5W?Ul1<*:uh&8}g5<{GL j.#N>|)HmT! *G5g_pnjîbhgmd@!i쿌tl"'%>{|1}iS[ښ 3I6L֒RW叐".qs$#Z$8D8wD#70kyU-|Y _Bs +^h{hzg( n^]0pᨿ:|0k{}H0Q\&^!`4pCg0"cl7V*MBr[v u<#31x'2960o'~ js9SKpaғA*avd`rLNi';}䷜0[ϧ*1tdn.(=InBXb#2rB̾EhYEGSvk/wIt:tKy1@ƑE2m~lǷ 86~߮.'Hu 8?M;.aZ,BI+0g6Y-|0H7_;H+ 5yvؕ]g&Nw@F<)~VSvrYx.FB( \VFKbOXpRN.MMv M#F(H9Ei: +0Έ# Q8ۧϫTM I!wC|7#,38.sM 8?D$ȳ+%MH(B(֯)dC;yD>R8El,Gw6kea$!iE d`Wg̑GjMnh* ɧ!G6#p uUTk~*-Yx 6m PΧ]#2 Gp*PIrkh+kV@>j$t?~n 9U:A0%$r]c陶3)ro$Yu:ҫS m iClwi̪6lU!}5r% Ǒ<%R k EX#5SHo{|zzpo% *B}lKCQuFr(oH\ၸvEgmiX(0>-(HVm`>B~K[5Qrq9#EWQA!j8ߧJ콤'J]tsqSdxmN'7e&x*: %1f'fy\Q9Bf +MON \]ܘ>L:slCyhs1^n)j!pq!V̀Drʇ ,U1 Ԑp|VZՋu;P$./g\ϞYmX +>`FTdw潚ZpX +spy~kdsS6"V3CZ ]X'EB /~>gq"էt~U̶5IwSD£a8#wy@ylF|U1_AVo{ {ވjGc!:6'$`1o.#Z5#tXme?ly3?ZD$ SlOf]VDS9,^Z&Cߠv=\_ ;,O?])Z%H%WjOdcyA9c!U3koMwǩÅc~5*xw;(&eKuc﬎Pvv[VO?U&2[}u@)N +DD#fjK+aHC; o^SMYp0Cc~?`W)¦ endstream endobj 1378 0 obj << /Type /Font @@ -15150,14 +15150,14 @@ endobj /FirstChar 34 /LastChar 122 /Widths 3008 0 R -/BaseFont /OMTYJG+NimbusMonL-ReguObli +/BaseFont /OREHOP+NimbusMonL-ReguObli /FontDescriptor 1376 0 R >> endobj 1376 0 obj << /Ascent 625 /CapHeight 557 /Descent -147 -/FontName /OMTYJG+NimbusMonL-ReguObli +/FontName /OREHOP+NimbusMonL-ReguObli /ItalicAngle -12 /StemV 43 /XHeight 426 @@ -15177,7 +15177,7 @@ endobj /Filter /FlateDecode >> stream -xڬstf_&m۶qrǶmݝ1:ӱ33盿f?ZgWվꪺju%: (rtcdeb(8*@FNJJq Q Z$66+///%@bceTӦg/?!3@hrr:ިܬK{ @\YEWVI@# :]L*f6s+` r{09ZS+_,QW) hnwtqquqX:`hnnvKп9F8S8fU7O7kSru@#-@/_^7SGW\f@\lE0\V.@W׿0 ߪ7urnп7W%+ߜns[8"03( +˿NtWhڿ$L-@ %oJL}"7H"oF!= -nodw}0 ;k`c@m@dLA,L,6ڸJx-Tḽ{/W> ks;o?_5u6W_4u(, 11ap ֊n.6^%?`$AL_..Y[\kā@/9Ȝ?6+7ۭphBBW/+PFPO`Vp)6S}9^{ E1?9m_ &U7AW?q +xڬstf_&m۶qrǶmݝ1:ӱ33盿f?ZgWվꪺju%: (rtcdeb(8*@FNJJq Q Z$66+///%@bceTӦg/?!3@hrr:ިܬK{ @\YEWVI@# :]L*f6s+` r{09ZS+_,QW) hnwtqquqX:`hnnvKп9F8S8fU7O7kSru@#-@/_^7SGW\f@\lE0\V.@W׿0 ߪ7urnп7W%+ߜns[8"03( +˿NtWhڿ$L-@ %oJL}"7H"oF!= -nodw}0 ;k`c@m@dLA,L,6ڸJx-Tḽ{/W> ks;o?_tu6W_4u(, 11ap ֊n.6^%?`$AL_..Y[\kā@/9Ȝ?6+7ۭphBBW/+PFPO`Vp)6S}9^{ E1?9m_ &U7AW?q Pz\,ZjFo0DS.pA%AXN( ؝hM`uRF{ )=b 4F-MaZb1{sL8 R"u?s K HdIEzS%z.wjLƎv,UdT7/W/uMLf<5 +2Z=/MIKQmLƃͻ/* &gvID)zPm*y&NiMP΃{q`mF~u'a}ɞ9a}LCSWomT&wH'ÊoiaL9~ǂPZ.+CꅫЏz0 6m>/?H`?"`}JR'-&&e1Ɠ)̡7:#ch ۦ) Wrso'}_vm1AxgΓ!=]?(l{͙Y)pa08pWtuxd&}*TE 9 q2b/X.$i'ېѝ=âL{ykMdA`V1jvbSZ/XZCz &vw!H8=THD Ց^B ?P߆0C0y1S F~<5 @@ -15248,7 +15248,7 @@ V O"=?en"#@sV+Cс;&&8Kg!չF1~og# 58 bQn^;(\D,*u#u.9-.z:ٳAB-IK,qǀ7=$֫0sdU[wcF),riu|bދx6tK .Z^Ne+92(GE$>~@QQӴNyV{1K䧘9Și!*Zv5w x2yQwsxmzP ;LsY3>AuQ_eH@, ,b#ReGOQvc7"]y%h^ 2E ,@(g#45?nSkk|z@8#!Ä~?NGrJS7L^]TdY_;tGύW sj]tڛ0u TJfm_S7]ڣd}>iN )>/T-Z%`"qӴC'Tb'}sF9T-w輻A`_v֭nȪtT#_K>VPMioj's~`xKy5QzKMwqN LkcG]e bbzs26+KڽNT%Kġ4fhQ).JTltd.w`GG t)&1#HQr Ro]e ]QwXoL9*=<v1Oߢ F׋WFn_q7ԏq9ўڱuϒ.(Щ>"p@gcZVˤoIٯlsoct[cAU^8Jԫ+b@wJIz]!G\s"JL+3o=dy@ -V; }y V7wF܇mS6J_CF|TWKI4IV)Nmۣgp?eb<}E(8_?xbƆp#Lhendstream +V; }y V7wF܇mS6J_CF|TWKI4IV)Nmۣgp?eb<}E(8_?xbƆp%SLoendstream endobj 1303 0 obj << /Type /Font @@ -15257,14 +15257,14 @@ endobj /FirstChar 34 /LastChar 125 /Widths 3009 0 R -/BaseFont /STWNOX+NimbusMonL-Bold +/BaseFont /RZYYJR+NimbusMonL-Bold /FontDescriptor 1301 0 R >> endobj 1301 0 obj << /Ascent 624 /CapHeight 552 /Descent -126 -/FontName /STWNOX+NimbusMonL-Bold +/FontName /RZYYJR+NimbusMonL-Bold /ItalicAngle 0 /StemV 101 /XHeight 439 @@ -15288,7 +15288,7 @@ xڬ wNpwwnsqn?}5Ƴ5ךkQJ f&@ {;FfYNAh kduČ]<M@ h `epssSD<@.juM::0 ;׿n@{[_DU b lQE%miI:@ht2(؀Lr S3`n`jog5gƿXc7 a -tEp:ق~@ 'c;3pLm\!nn/BN#l);8:\*I?A{f/_^c3O- `c_0'пh:,= hadftv W{ce+q8mYX4u[dϢHۙXm7su>7ӿD%alfog 03)ػ- SO[ovpQ0~`_{7nl ?$g&$?p]C ̌6%@@3%%eW3:ـ0 ,SZ3zvfIH$&#Ao꿢jhEx3 8 r|?T ]@ݿ-3ۙڛ+.vfq:9U_7oE= Vi.u8cb,! jE5]~ia[ܕFo!<=OdhmRiz +tEp:ق~@ 'c;3pLm\!nn/BN#l);8:\*I?A{f/_^c3O- `c_0'пh:,= hadftv W{ce+q8mYX4u[dϢHۙXm7su>7ӿD%alfog 03)ػ- SO[ovpQ0~`_{7nl ?$g&$?p]C ̌6%@@3%%eW3:ـ0 ,SZ3zvfIH$!,Jo꿢jhEx3 8 r|?T ]@ݿ-3ۙڛ+.vfq:9U_7oE= Vi.u8cb,! jE5]~ia[ܕFo!<=OdhmRiz ֿq2"jFy_mBp0ko)M}s|'w+Ǥxp@5MՎ^Wxr5@5t]NJ^7(9:40M׭$yr/J+vroI魂|NR-{UZW3|‰ӹ8|MA7SA?!{ülkh_zsg'K7Q23 V!88Sz-ZʲbUlt%/{`ENcj,UooU{L,ے`>8[—;1"d6k$T0c=8l2B-NE>VQ?S׊_ZjcxSHk_G'c ~5ر3=͒9C[X? Cz!YGgzD7 8(GDH%.fjM #: YN oFp=)I%&.ٙJk<6K#Rcx @@ -15363,7 +15363,7 @@ M _7Kbͤ\?MαI9Sf͢qcUDR&P8qpS쭧@K2y4, nz~Bw8X7ՅVƶ /Hۇ84[;[ ]άT HoRUqX }S`Yd2yԾ\1?a#uT!ZG=Q]c9/dҜi Z64Lv+ /{Vs;5ދɁٓKq@-UJ;ѐnU/"%<{Fq+ xQga+q%[Fe$M%r@]C"pI:%?0FX_fN1ήH\Y2{!"ʭ6fBO00H^4WagUv;֗FIzY`5CPW2ssFHzS汕˳ͤ }<.iD{\̣9! zד!0V;&K(MV}QcL3AT×&'gVƴFytc-yfgAzTz-:y@\"?PVWE3 lDK\$Uw>rߩD%<Wv\ӌJRdɢ7v:.Q;/D']ew7Q -A}[L#G_aͿKHh ,_&oypB7vKNhO1_rD91)sTAc5?͂.y;4/"psxe煤&qPendstream +A}[L#G_aͿKHh ,_&oypB7vKNhO1_rD91)sTAc5?͂.y;4/"psxe煤2qKendstream endobj 1283 0 obj << /Type /Font @@ -15372,14 +15372,14 @@ endobj /FirstChar 33 /LastChar 125 /Widths 3010 0 R -/BaseFont /HRTLZF+NimbusMonL-Regu +/BaseFont /CVMQKS+NimbusMonL-Regu /FontDescriptor 1281 0 R >> endobj 1281 0 obj << /Ascent 625 /CapHeight 557 /Descent -147 -/FontName /HRTLZF+NimbusMonL-Regu +/FontName /CVMQKS+NimbusMonL-Regu /ItalicAngle 0 /StemV 41 /XHeight 426 @@ -15395,100 +15395,72 @@ endobj /Length1 1620 /Length2 20276 /Length3 532 -/Length 21186 +/Length 21185 /Filter /FlateDecode >> stream -xڬeTo.[qwV.)Nqww+šH睙Ȯd-זk;Z"WRe17JہYXx*J66f {9Fi ௘J h ۉM@h -ÃDwpYX41hK ?4=Av/\6@;_kGU A6@FJA :-Bd -휁s{'ͿS{;3?93qn@wS?*rX8ہlٙڸ_rpkaWLlrFUw`Kc?A{f./_Z1el= W. ;ʀ0v2:;OwNRǿe9@s&$֯cƶ!13*vV\C -tWhڿIx̀H -!4w,3ϑ?@#9_u;-_Ncr.fnl ?9wKM࿳TZ;wE,2o)Y4SM-6{/d `deao:5K? -hgKӿgVQ&O߫S?XhۛQQ{w#+ ]<vVCYr0N F쟉Qۙ6uqroq׸@Se{S` p^n/+pCYZq}_zO[mS4Gҙ h/ uO*؇cKa AJƹf6'At?k?GT_Ӵ8N&̺/I'Oԃc#C=7}DqT|0(_st+%_&FG-ބs)A6?bsӢ^YȃMڿ%F-Jq:X{F-~Zf>ڶw;k3drvr]̲ͦ9]W w2H&&xM\I(CĐHiH,@<"6:j0 {wJvy]sm\ð!=aS<q˳OcBl\eXa{%FlF}x?[GB?e!AƘcN~H_.HI5+lhZ9F veFxO!(@W?OiBCeUKѕư&'"y -SMf-HsQ)ڙ?҄f6 /p펟7Wf'<2͹fOgX(+B7g1Z]R,[ܠP3ɡ]yO$Cȗaʗk4ýF.f܌Z=f⼱nMpYc&uQ-xc4apT 1-0QSeaOk &+ -I 2h+ G2dEO>83:{aث$/Y_h-QnGq|:H&*G!;пfVi*/&EcWSI ~Oo%^ WeUt~.oÝҴb.$'cΝ^ ;w {_sYmaIYnl0gP)lghz!lhDT摐O9\u@nRI.9I[0ƀϻSJ9otE*br) n -vZ!\,R1Ey=<Ģ'䓆J1&8A;]Kr9"/e!;=cy]HJj" 9@!(z:+f+wd%HN,D0H3@6R-bY.‘wƹj+%0x6.iN"Ϥ2Se4h&;0r]gvFPXV#wjnjtX)Y8hduݏD?=+es51*;4q'[$Ϥ^4/erW(j)yYPO4zKN['1:T܈BL!wg`i.ު{O'Ǯ -'u`- gWrK-<7ⷶ@vѺc\`:*SSB:mjaй_,UL4c'men1o56(HYΙߓռ= ig|d Ak>'$j|I_.;VyMmCNצ -K%.ц24#BQ^g*u469];!tm[Q50svPWL__:^P3\gQMRC8j@~B>Ze#}z+sÇ -XsWdv|hpso5UYɍ4|`y:qWJf#FZaO\ch^GHC+B ,1YZ:S01`]|^(juwόWTRY0{OhaJb8+HZݎvfrKLlhg]!8g۴ +}nVZ -il5Nܙ)oA?/٫/[L{/`^qOJ4$:YvzX\(X+e^k/(gHJR@܉pLfD~s-wsRjV|Bݩ7'Q ]%e`_\䖾8iͽHp%@U|R܊lLtYu#{9U?N-Q$N|OT÷HJ;6mTʈWӡXȅHxdht5`/'I/ZhITZ6>-Nk<3f/|˔_Iڔ§5cY|TZ4:4xkxVUUC/9|*\Ե9 -(ن\h<),)^ -3/"TN v#m&+KB# 45mZQ(ȎSD4{tF><| wdBGC:LzI-je؎I ݳlLoruxUZqэ;1*ɥku K6,c5@On_gpym8?FŴZU I*^q%|^XIao81A@N¸-YߔfsXmw;Ssa {lRe+J/nM-rZr+]u*%Яy-XD+-vٸGL4,i/"؝"Q cD$^F -K7B\EAcwtƀC/|ﲉ,\H> 9^_fKierVY󏙹A:ew|rJ&NjE^/Lh#oG1ewX5b^__-nn>ԓ}KһEt:edRwk#u I.6rJ d`ϔLxe[/jHv-EI}_zQT;dW+20X!SVn?iG''Yu91 {nX8{%ןa}*#4|b0 㹾[olz7--cqv]ґo|t1mdMupdÇ5+ Yb: -1 -r]jSc2}föϷ8VH4=}Ƀ Hև`㵋O|||1yM!17jz&4F aEq #a>KWC_l>;tʊoNr<\f_ G bRON]{56]cA=_kO]U_+V[d&Y_sbJL< lPĮϛfM6'!.ꕦoݵ[+*?W7=]vi[vJGw;d5`SXðlEkeGRf@^]uC( q䙸ݟgdgH$K1pLG6Ψ?.lYuw+Ms00GY4X%ig(7ZB||8HZ 9eJ+kV!"."aw]T>oN|ak+AQυUq&ESqs=@jrj< ye)%׌&b*mAit UewȂuOmohֹYL^>$XO|>ֱ袇B;}Ag&ێ\`/=cֳ<QtA"!^9ʹOׯJSbHjOJEs#eLD*+X=4D&-_jvlkH:_e34N@֟˴9'[&Q$Ly<7ʤ mUHnhN ;Ɋ3ѵ%GߕrX= @cp,`{5-{Դ:sEp_>00g|3`R e L2Ϛ`▱^2u='1A7rpq]k#e/B\4Tqj8ͩ=@,MBs-_UCkaU 2Dj6d%0.+{&9׬%Qzcs5iSD2Ržǻ ڸ ˨PAU0Ylji[,;_/='gg'X 4̧$@,b9L>,{B*0)aŢMO6H xOwnOH9-}FZdlҩ=D -Uq>laH¨,6:鉳|.]Z 3 }HS8uz`4O=Jp}\i~!D\Xb q"%0 -0)9z^5>HX)8rYCl}IMi0@Sz { Cs-f_وݓ&T܄P ͌WU Cʄ<&$!@%`7lXO iadsArSSZ$8.\Ɇie8Y** &݌^AdE< -e~+ֱQ9 ɛ.Po8 -U)3+`|#nwp'9*$!!LثSC gp?H ̴ҋVt.}8Z#sU$;]c WJP9@>nC'T=;&nJJE\#M+\jlM"#Nvrة}> |S+ -,ճ~KHc \fmcBg?ZBE)A"fE6fNza oh L$&'~uC:``a>3z-ɃyK#6Bz¼;NmĖ⺷J8GoSe+&!2HbfXznQK5L?0l=5avZ35D@U Ĺz&1[*Vaƥi:}9b;UvyR,KB׋>yst5&HZUX?YؽeDع"l8J"[?↹ń4Gaevu|DH E8^ CQP`_yփ5ӕSYKM\ sxxMo1MQ};f**Z4vN~f\B`EK/E5b:_Q?:Sĝ/Sp`'-wG6Au{SE74!lԭc.JȼZ՚9+} i4廬H"v2 -mݏ)x{ 6mc/ -5rtCaI\~,)rdنG9:" ~TU -ktx(鼙|^y~m]CqZkQ7- c.>Xhhu~ymc9\' $ Q6^=UZτu;$PuaWJX -;NV& @9*gؔ{) N:t,M_wqRR>cĄoI |kQmXC.u1e|.1R!WSG*qvMt/y?q+Ҳ!]y'֗& 4/`IcϜA.vJ>LU"|w$4)eTKwbT^m{ x;{jlf3o7^Jܬȯ1vJ؜;5'b|mU1O9K%(;yK>8>4a)k -6O׫F|Fug/ -% -BW -ICU,9N*Xe} -(M'\$t\Ȇ!umݗ-չSh") 'E>6 ʸucسM!D4/  ěkFl Fo?e -PN0QwnٿJ!/)R9Sr}.cͳERfD>fnF7h,ҔءEZ }v -%y^&dC"seT^L`hvQ.yISiޔt -P:w.ܬ -Zam6’bXQFᑴ/ ƒPVpxGldY[!PH1}7z%mQ1=z"P0~~Rt_$7\T?LaOȒ2ThI|T(0K6"XfE5rvAN)c908VDYD^g&|1CΌhY!t,ÿȼ]8g}1U;X6X̳7P.!]|^Ud}>y-#V:F;*ջRH̗b`3Mi:,n# Rj׏ս֠+2p'5i -lp )[hhf .xB)쳊ƬW` 5&.q`-P+vpy1 swv)lQNP?BՈW"Vii_k8ڽ,lN17^(Z wO< 64`b-99kӦ*)a[$SC_'e 0ȝ̿|r(iձ_^J{AJ(N&0HOY(Z0. >U-Ka+B.+XCFk[}8+uz 1mXHN-ObLrk: ?_uFK@)Vy% 1To쉩9ǩsW̔MZ}̳|ѡPJ$ -75;7UypѸp!XeCs5=# r7K0cCN6$rDҕXy^b7*5DZD=FǶiϛ3f1` 5Ń֡ńԧKtz/&m-n7VS/=ei2>Hk,0 q-uԈ?&ƲqYj{8z>~B h?rn.js"7FZ>?`4" UҽPkqLD.[x඲"cĭ`R <]=CwuS48,HQ|ΌH5zIxsfρ$_98 %`227b<Ǣ2F(7h{%aqN>XB3\toe:7a{DX]^8:a~N|]zZ8DF8+@3h3v[^2RHAq,@.gw$,WS]Yp=9b~$ɻzMpǟTAaq6'tXa45:?vZrtmzn*vG0gҭ(C,T4:.X J1)o"[*@^ʔ ')R -s6S/7S5H۴3N2f4p<8XxZǦj [ZvU!$ Z|a09WgiO}4^`*JĈj %!}=|ZIJ8Wk70wjRL ވ A7`Ẻ$IMpx/rwEҳ@-d]:KI(N=n -8uT՘ ^2lpbäamUh%6?(Յ:2 -'ɻ;㝭BӚ)ux#LqO vx_-i9g&)N%QC6OCY菱l5S=)??sB7nE)Ia2V˽)XqMCD({sل4 qnm}%}X.,jߝW5aICe9M\+zW~A_gnh+MYl@Ra']>'%t>xK|DidcyQ}vsvFmU~I(K=B~8?Iìg3"p˽y1Uhj= -veUFJg$/H@c dTiE8Bk?d4[XTu3 ]YhY|WOiUE-BDUYjddM;/S̖̋SM8I3+̎.xΦF<A/u 8Bt󱎥2?d9cY |nk$M [`Q:{p.!DaOxhUy ΜiUn2^6س3ԁ_|colr9,o(;JC`]w&3Tkf7hr&@7"65&PZ;iR%zCV޴MOxTe詄R ʕ18̃TzBn҃8`dXcwd{ǩN o lt~:uq+Ajw|+qAȑI}^xad!8u,-ZϊDEdrMeҖO 7"]Ǝ~_wvٚGVYWw/fƩ&id#/zر^t!rV#]i$x4^¢L]|3 I6jeT=TDAdLu!W T׻QTlIXO0e(8aϸ°`a4B3\C[ϚߟF=#B|$?PΐVv,UBT'eW0uxC ~ʽgKny")=Mk2vj4eR9h^zK]< -0ؼ0.3~sMj6%\y1f#+hƾlsL,);+=Dj {|ݼD4zP;PP;c8uS%-،'pJd -Hƚ^WO@ZS/  -ᅓJۨpF\{2{&oo2RiflEܧB/]V`0~+֛f":ؓgUw{ȑ&Bm -Y(][Hq;}p?x}{ya - BN.j2f [AHt*@xM:Q`?_* -˧ -o஀OB͛2*1z%"ߢN*2y|<x_/ H_IѲp?O=ﵸӢi I]p/j22IQ-;C q>]R1oO'cg5U>2<2V-9\*OچlRۘZ }b۽ *G냁8fB o6tw|\td&CYUeU'I֜دԙIP'ט󁸏+>H'eWmxcS4kArAxVxYz-U}fy;S͸LE>csq%Iw -O|3ڐHs_yT%U(/_"2;Fj\Y?INdP~ iKfL fZGChs1Q1jsp律WŰ4f:Z^!Ǜ<7]~֮Tiqr$4YHyly!*5!!I -ׇ{pڪ4s:6Cj;D!9$]pY!?ho181&J\'R;NE$>~(BkRr(6 Wy;Ck!Ď$>4Aބk)^ʞ5q. -Rq+5 -)մ$ n[)z{H:UM,ߙklH^)*s4mrX 9Fj%7]32յ8'&X@˱̧̛̀I7es}y;_EC]|k].MKn}SKJ5z5ViB,eL k"1 _u1Y)]}х̄ܒD8Wk-i:JfCp']ߴoB]^42TzuA^k ZiQTcv>].AW3c]Wb(Q/cI]\jl4ᓲT sId;QF܄9l矚nGkx>5~)o΋=dxg |>&zhv+WK@F*:{YN/C#bm-sce - ܈KCB-}Q8Q_gA6>tC"(d 4#fʳ|n}.f@ xm7oRQ -Wׂ奄ZR(\0=,Q?ufv`a}YBba~S(Kbu>%380HM˫K4*ߑU?|QAP݇Os5Q3މ|WRz((<ÿˤڢK Ju'rLZie'0,_~ӎbn2[ԓH 6חE -{@!,V0~wd8(|*qt)x1& x횢y=y<oDqiĒ엢 JTSoJn](Mۑ3acONZ󕪰=WśQ+I܀4zg׺”XC݄)2]*^w6/_X&3gv2?`CwhN4D`Hb t" ! QXS%A +xڬeTo.[qw.KpwwwwS݊Cq(ҷyg99!Y{˵NVȕTEMv`FV&>^Qll+DwAv` @hHTq{'%@$LU@;_<7Ui5 Y^_j@DS?ٻYY,r" `';@?^uo0_LU!O?jS'k;4EZ[7J OJB85VՆ05M}y,9P +}(i +16tp2dkF{]/mphN*Lw;!\?Sc~t@5MkDo+:;tH=862Tydlvf23 #>#>'`zuG£U?e!AƘcN~H_.HI5+lh^9F veFxO!(@W?HiBCeUKѕư.'"y +SMf-HsQY)Y ҄f6 /p펟7Wf'2yfOgX(+B7g1Z]R,KXܠP0ɡ]yO$CȗaHʗk4ýF.f܌Z=f⼱nMp[c&uQ-xc4apT 1-0QSeaOk&+ +I 2h+ G2dEO183:{aث$/Y_h-QnGq|:H&&G);пfVi*/.EsWSI0~Oo%^ WeMxя*:?G/NiZ1ɓ1N'ń/96Ǥ,V|76y+a3l6OkT摰O9\u`nRI.9I[0ƀϻSJ9_tE*br) n +vZ!\,R1Ey=<Ģ'䓆J1&8A;]Kr9"/e!;=cykԮE.rVBH/tV!WJyxq`a Gf$llZŲi\#!s#=ծWKaWm\ P D`Wq/hIOa#e2h,G334Mva\.*!IҭFՎNH=#h?JI Iib5 _ZI宯· P\R,h`U*O@c,tGBL-&ykx#+e+{-ֻطZ J. +)S'&j|I_.;VyMmCNצ +K%.C e>iF<*^+Th9BmVpN{~`#pthA| Q}^}2P~|[4xRަq ɲÒBAlZ0(]`^`GHB>CRVF&.Nc>(877*G>dk; D6АRwVc bNu91J@ +--X. ?r%ʼnDNhE|+yT#V|fcͪȩ,}umi'wK?~ݝvGt=wGݑh#`RFeĂD.4DrTί&KG뤫{9HzxBsk87Ԓ8mqZs癱7}}ԾXLv֦$/>*=ףlBIաn)>1U~dicPʧruL]mȅF].;ٚU0qX0*Bdn1Ҧ n!4L-\3ȍ%xL4HGg#K_o pG6,LUX"i텕V3+(Y쯞Pi $$2j?6ÚlC[c*]P*qkxn#xD:r_ҭTѰ,,<<~l!L}']pgovO.3Zffi `I{L'v'!2VXqr=( +36|G~Ç~MefFxhIny2^\"DO+G6\` ұ/CuW29^f.zaFS};)úgQrhrmusXb,ӡ/#[ɨcHrUj$Kvd+x1cWE9݌X +(82*3pZ͡SAo? +*Qx>[ ^'P_?,c@kv| VeM9o0Y8\Uo(ի ^5mqN<ΘgJnB; d$O[J*A5r*`;F +xSͩھ=~I>4C Mjj1N ѽ-24nY&!t:W[]lab˜RҴZNQH29re匕 X2n`Y[wwnmb)J<vwo?ㅅ >FVkF]P}Ј@-UpsD0m`Ӹu.w˹_۝(G{YK(0g{H :9x 5T7A6NKbx!7wfQ[E_%;&[ɍzP5\|;mK gx[mxvSvɂgVd'aDB07,~>s юKLNoN|ak+AQυUq&ESqs=`jrj< ye)%&b*Wۂ| ӑA.*īs I4t!cECۗNw #Bd,M;w4^{, gyx^CIL|"r?QGJ/4KdcDbBe6*$74R'sRd# ݊=wi9/VO\,6! ^ p5%<#0 Lp 35BwBqxq&xdE釱 h] /ad |M`⇜8]\hayH7 #U-Nmsj>KPGa2 uWygk= *A3AH1\mWƥPzeD#皵9Kbp&mʐmG奇D F$E,y{ߗeOATf;%շ2p+/d3Klc[v 5DhSnb6¤zClo˴W6bm 0!;!o3xIeBTgipq , 4m 0W~29 x-MN +dC~K,D DnF^h@K(A1K{LF;J<8}ntߕ(vXy:u1$]{yPUY5 z)m 3GcPܱ ",YAdzi% F)dRGH=eYt)hbqar8ĉsVQ 8}fs3:QEÂa`J^_@kcqy]_8 rf{;L?/#6}?qKpL|kad$k^CD[U|tiI u-#NKNe7Rf^Jυ]EAw }td\|\C_K.yiMXnɅRXl6JOGn=g7 +ђkW$'G< 3On \ i2{ "n2ب M(NUϷT0;Q8ZCUrqWζ~%*79iay]Fq,W}C +Wq{t=6s+ CJRi %+)se6s!58 Bb.0]#wmFhs),ҷsy*@|B+6r{#Fǽ^2(^O|9>|ir\AU`[@(\.6k7BP4=Yg,: N)6(1R!Z 'yH~86÷BAԙ@-S.98*g1 /qlƴb, /nʸ~89+QS?OmȾ\|X $=R<3޴t9Ռ)ծ#ixvW\$[zfG'{sD>L9Is(>xdl,_-ķPCt@@41)h~=(+oSYzՊ70ׄIZ|oaB ldN1k6BcXܬi_bRO_IW9I,uv ]/s絒{DbϩU iUa1߻`da~A?Tw+n0*~{{1#aD"%{ E&CcQf{k+%+軗jW54GЛ kX 9vq ݟmq,.(O)׈\XKuF xLQwHLÙ_:ȃj3s.@ l#d[2KWƇFՏ$M3ժx%i1] M#o_XhnAYX/zOB"ϝ{0Dq?Cf##V"5ҾEp?uD}=]wv-n$H5cS/3t7 ',ұ41a}=BCHIZSxqGnc q ŔQב +qɗm 2;^A3P4jȫ4 [q*"{WLIRFt7,O镑߶Gw&:hp#e˭͊c7DyQSz?!}:VđcQIo]TGIj/F`GY[$}joQwX2͠Pq)t>T˒#/Ugz4xJE2K'eklRזN}rP9&qxRc{nk\7= tx7~@TIR qP؋Aaȶ(kS yayѡ"(s8E)'X2{<[$e? +mJot)>ySp2/<(MZ$PgPeLv4/nn+?N0]M9D6Qlu9Qᒗ)<ܑMjJeNai~'Rͪ 2|xkb2| m}wGO4z5`J;d# +ׄ@XGB+i|_O3!$x܅;JE?ȸ "\ a +ˍ3LBFЖO-w_;Bq!e\4;/k oʔ>Hˁqaз'':3[rfEJhcET?s!%h̺z`PcBWH +5zB`hzgs/?a{A0GmbK/>L8 s*TG%b6Eqύsrsb0~ģ`Oyj&ւû)8m_mkdjW૰<6yY4:!OiP42T ‰ۤ) j%age>"[#7l^7w%}VBZzOI +q=HUknŀ6a,aw 's& Fd5i[K6ݥ#@J*`kBd+[e0Gb*{q3eS{al;|tY$c_p ʍO;`}CZJg=tZgbUX46|*_Zh1kՆrxÁ/}NDpVԸ:,JPtvWoBI`^~ZVꊗzEh09C+7 3N2SD~'-c~FAvk!pml<1v*zOHFz"kqSð\z#>S<oZQLO}1}L'2Fzzi?%C^!iRGcJm,w5v' c!Wf01~q rsjMcFK#2P% &\DHun+Z-=F +!m/#% 8P38t78]w;E3\̂dKa9PU̸qTYX7aKڪKOƵd6 #s#6]s,*c[|*XJ;˹W=3%4E7fXy }Os6![uB!u>/6"v0YѨEebr|^F +#gr93#8fJ"X=h%-NkB8̿ +Cæ:ަZ ࡩL(ϐksS(ƒC<9/1nDzgYfd8VTpa/*QƈۧDŊlΟz+Sws&Hus(HO燾(L n8ɘhQci?-n{aHV.0fkKmts\ݟ>9Hzn2ӂ+(5#$)i%)){LJ\[aĥA?ouuoI6&D0%^+;gAm{[utPҝ\{JgqN먪1;TOe<&Izۘ6#JlxQ ud˷s.nww;[75S/uGϛ㞬xT[6/s`L+F!S+4 JPA{/d'/P+7&fK1e+j6{*S~"|y 9nԋR*!#M!meۻ{SL ⚆8Q ײ i"J]"YԾ;#D9k’ +sO҃ ,%V' + H' NP| #OJ|։.l>^*2*Q>zq~8YfD{fmEcA%b4z-&}z>g=.U7/4iόI_bc354ދ)q*h>fDR͗:ăo 9H33ԫU2m[ω4$Ȭdw^-"ߙTOYqf=Vk]M7xH=^I08qRcK{}e~r!᱙cY ~ik$K [`Q:{.!DaOxh_&ʫdmpdgϿRv?.rZP8ե uNM6fnLLToDm$k+MZUguwӤKV_ %ifeV j1;S r+kc8p2REI -bm2S;͇'QI~#1t]EC$<#G&\Eiԅh=+b]7QK[>/޸w;>γ7 ]^SM@'{F^ +op` +@G $|bU |w|voޔT+i.n-Wu2T|3k}a8GdNZ[',/xD͟%= lLvhH7ìQ?Oi +LPI풲X1~{ʘ =;2F=1j޿WQ|B6`<6鋿mPIH̗VtRg&@ߟ^c"4>Vr]#]iՏM)ӬisICzECXI g~TL5߫2\I{gz^tV +)(m8N{c8GhH-4SޘR3,r?vfEu:ap-bKΟ![U_*PgY,vJFhҬnN] 9z>eKYxp޻S3ŒO3Ja1T >NVj(j(l;MIe[!ژuK |H/Cz+Qn[s9>Mi-or'L50%4v~4ֻ195I&4O2VppS#gTiU#ٖVC +:^x[}fC?p2B_i(oG5v{Xg 0wj96Rʢ`Irz'fO6N]2fj0Ӛť,> +2TV1U6w WxU KZIsmá%ZyIsK.Yѥ^{{oJ֑ INL8鋖vx~Rp}'᭭*K3h#(loRC!b  $UNAոAk} &,Ή11*2>q*&C!=ZbCoi8V=$ީnoZ# $~$m&l]8HU5~!͌s1hP +Ĉ^Z0[MKҨ aŚS%(|RɱfeB;9G&_ڐi49&Zr9 +0#0X]7X~"j2j |˼ \9T|[P 0g'j'&E%_HwiZr_샞ZRzALЫJb~-;fJ ]II( J5՗p.@rolk^.d&t HƹZkIQ2F#?}3 j\h J*u jXΠtJ^$G-+t%wAp9.SB؆O.n7S /rE3%D䰗jp;|ᝉ2Iڭ_,Z-sg9 ũY8R*08[Mr˗[FH΂l}REPt6@8hXGVͪw͛`\!̀lڄonߤ/H[7'DSYR(\0=,Q?ufv`a}YBba~S(Obu>KfqakWr+Sci&ߑU?|QAP݇Ok5Q3މ|WRz($2#ˤڢK Ju'rLZie'8,_~ӎbn2[ԓh 6חE +{@,V0~wd8(|*A t)Nxq& x횢y=y<oDqiĒ엢 QJTSoJn](Mۑ3acONZE򕪰=WśQ+I܀4{g׺”XC݄)2]*^w6/_X&3Efv2?`CwhN4D`Hb t" ! QXS%A ^ ѿ.oRؼ57. -GEbP=PoV&b<x͓/sȱ _)N ejL ?D#Y=>²/)${ɼ[4ۛ~Perpj0 S9 - ֹ3~/wo2t⹷W@"~+i# (sshf ~yYaV:5|\jrԖ -r XI6 7L1Էg&N)&ό !6[U#D3jcugи/F B G^ȯI2bN JT&Tz}qLWIŊq^̨!ݨɒU`3Vm0N5+s)I -1|jҒgwPʘbYXuQ9 H, jtFtE [A,6a?6gm"m,Ah8 v?FX$Q֨M+{? #*5o-؆xOdÌTi2ąB{2rJ$2a[v6Ȣ 9v  -DϨ-er -<v[OR!0#0mjM\b(GP[Aa1Z`h 3.]wM>RkY9z[]3Fw.Ǩ'ׁo*g͵<#$1/Mo^>vi6_:(d$Pׇu$z|Ø0a'JQ!Q!eۆ=+Rڪ—E,tbL31h\e<.Bj q LZrG+ s j8 N]0Wc1&qltN3Nw3twa:y=?G$Μفۻ7x`y2N!y%.DPlJF=Z!-ǘEmi;mFK]}cvcШp)Z(pz}ΰۿ\ی) -,qK`߁9ez2Ac'>\&MAIP`6|@Ny4CTyG3Ib$Up<*?|oT&|k5v&`QB M::GU⿵MJk,"xSʠ2 X;_n6beσ[&2&}ZUQ4A=;4҂YptUg8^,GOqoֹ;lbkz#28?gVu^ 9_:ĭ>(CEn"6^=t~0kxlRw <4A zd_ed&rBiYWJ -edMm@p`[3T]lO.&.(F0#qND:eHp}s2)Vg؍.Fm5Mc.I7 '}D5 p/LͯP J;]njU1W1yl!I5piGFvnJ`Ht=v\]iW8P$-_``dD@+Y*LmA`n}v%dcV-U]/|t; -q$2>b~1$a5{3;hIǪ*M"G1.4ׄBR\k86:I@B4|#uH&1[kųn'lPg]4gSW={aVs$E!Of^&ÒbMiqa `&hD -J^}l8E3x05kYG5HTsV-|e*j%͈*)2Ԁ>Ax+ks)8;ijqV=Xg#> -i⌼E,DNUfCRW$g..4rube{V<<ǯ{7Ys$XQy) Qqgڢ>e+N(WS}LduG[70A]wDԐz:(Ю'+RhCgKh9@OAMOۜ$L_Sͬ<*%E'aW}q fD/#P4H[ox2OS"eY`KvdFS@q~<,;-}zo<ȣfy=WǜC-QyfwIAO-gĪF&:#bVh߹+D/)Q񾪾51e_77\<$ 1 ^ Dv@Λ=DJ(x?Kmr`F9ܝ Ɇq_n ՕYWd`H S :i> yCi^=\~U厲m7Y ֬-Ex.OVoGM[>]w%<c%8B0ܮN ]ULaY\?ik%cwAP1z$ 0eo@t#$P^Ej󩅣ϦTȊQ_݉j --/e"ToQ&  ^ț]_ GNJK%DѫF(G4uF+6Y}KwV)!cRPza7ފD󖥸en(3ڷDEѺ8,"WSmiՐ?,̳bDGEr(rR97$KU}&uf\/BRAɷyñFc -+WЅ-MClV#fad"S 9)χƈjC[-Scd`x(!lK.+t,}FkiB2q]/C $*ݪO['* [.י?"l][Gb$2>̡(OCOfta lWZ},?֬+JgR=9{`ь$fOk4[;K^)>V -k3gB'5 {7؆E߬@&w#gݯGNC(y;;G6dD\R`J)\ xgȦ8쨉1TI{!{aښpޖ퇴.VR -EK4FWṊG:M*Dtp!6e_W/fE -<3VM|%a8$jtǭCWmR[a?ߦUl [@.T/M( P=`֍[N(_[;(e![e[^ʤ3d4SJsWzTCe^K\_Y % Y V5]G1 ѬG?`:E|Ft0Q}wǣS.eRp -8p&ÿ\==ӤMs̽ zwӄҜWվ 8b:ǀ^g-gkP 6JWmFf ApH0ȿ#9}=5Y4%y$$D gf\9pmU_hgLۏJcpǭJH#Hrpх9DüƱA7e*27Is|WecxB5Ֆy7$eB\/孝j|Ib*UWo諝jfmbRNgN]ՉpW_.0sg{ tendstream +GEbGP=PoV &b<x͛/sȹ _)N cb3GHG Na9ܗd]-cMSG(b98m5PXc_~Mb̩ÍMe܀T;7:J[_ bB [p94GE,0`fl+ +>Si59ojK]9n,$ψe`&Lmp[[3\| gXRL^n~]Īz&b} n04r04qK8e䁁Q$‘`5-IU\iA)y<ʄJZZ㽯p= +>iԻXQ;׋}15Y +nߪ if!|.0 R!UMZ2RcVL7 K2"@.4G1řaX8Y7UQՙd5&FLMxql* T& }N[yлij4wm "57R'=?4C/{vȎkĚ<j'rۜ~4>iJn|ö\rQLX \~hB@"oR27bvrp p۝U0}9 } ȸ -]ڨa봍}ŗ +& G^?0&)au kpCQT\O!ngX뉱zdfTHٶ!!hJ*ewF+ X)Sv?L (hoYz'odĺ0%CB.!\Q{J\3CSpaz3y6}'gLww3L3&g?|{^xɬ3gv #Xz 'SHE} ;G6F;wr1kQ[&.FRWߘ4*|'"g~3//6ABG#ww`NeLhX }!W6ISglҟ A+U"AQ0)$%yL@1I8'4ϥʃ"*U8 Zp Xs|" Frsf=F0@diӦQU-omR00AgW$`uqL7[oHRl \Z6]twWFWڕ/I)ا*8+*'Giz +AvJ+S[P74X[D5EU&K*wCƋ/+έB e%̽O4؇l IX:@ތ%jnZJ9fs 75aD! yS{h:e 9 \i]XY-އ#++|0M}V`mb0I|3VTG^ +Ham噶ByJsJpA/Y9iQ֍4L`dW559N>'Ɋbl=#ǐÙ0,cSGfrD6' DWT3+OJAb/tIkoa_)$QaƋT" >9޼ 8{SyY:Ē$Tƃ(=%PFOh1K#af_vo^'1g|z+8lKTh",pfPS QNdo;w +}QKJTonM !!9zYhxM'6-":O)<~ Hc5Q+0ekgؼcc9w`'a\[Due;9TaN:Eچ$.CPt8_Ul aւ5kK)^˓x呸GSVzOEɷ=ϧ?B|=4P8 +3CgSቚ_d 'mݒZ֚i"f/Pz"KQmH|G;XRwwHͤS$TI +!o=k./m''-mA{X'~SvB6^ay$P|? 5)|O< 5x`q_<`0s>ѝh$эy#1Ou}cb@OfZCc]T̀ށ( )C.@ LF7.ū+ %F!|jd)9Eh,cwwB x dFu{6ȁd_ѱ9pI:QQQ>M]?5ѭ~zVpߒUJȁo ^FpM"Ѽe)nj[* L-{rQ$N>˧Քm[Z5Ƅ: 1QܪTNō-ɩRUIY<ዐTP-|F{p,JaU))55{/Ovx8a!}ϲAOM‚J35c2>(oLVhL4F'Fz;qc[X[9VΠ0Ǽ1zl}hFVU|p \-m=#b7^mUZEvԪe{d%}QX쓻γprرkiԇwzj{$ixuF>tqtq} FȔ/ftN1bЖE+Ԙj'JjH[s璋J2/K߅ZP̣6OHΨj؜nT:x3[9%s4P`!ݐcʭɰOBۿe1QWG מi0k 0ot׌ɓuTi%}Q/>޽>)7eyQb.Z&{xcn]Z%ULN ;Q~cjo{Q(#Xkc[LR ]'&-Z*4gӍoXUgl0Ἡ} B">O.Oxaͷ3heh>酮amJ0 R:d}׷6{x0U#7ɡ#^LU9?cq`uo1E[;Kb3A/2>S gp9+\H-Pv-;cn7}k ) JljAjEɅ/Jr–ufϥ[W} 8 s4 +ÓG,]B$>.d95YcuAƽo}X4#MNiW@`9~$DBڌ8™IM|B+o!!w7:YGah;vNꑣMG1-)'m.%Ĩdq+Մ:s+QGӳ)Q"\ꁍiՋ-EF3w*jI#n=Nh:#qP@U۵T4GOi=..z<4> ioS3J?T.>kup6JVNe+%JYȭVٖ2i MTA"|悍dfU۹YFBnf@3>#wΦ|jx s$MI7I(>s?ao[rW7$#$RrX(q顒#"Ĉ#tOKֺjk?TCu8Ն&Lpބ|IQ/nzxWna:FPkm0gys`_O o7A(#F9yÍ{QIt/L`l(c1L {> endobj 1218 0 obj << /Ascent 722 /CapHeight 693 /Descent -261 -/FontName /YQZSHM+URWPalladioL-Ital +/FontName /HSITDK+URWPalladioL-Ital /ItalicAngle -9.5 /StemV 78 /XHeight 482 @@ -15529,7 +15501,7 @@ xڬ R)u-@h ۻ,>L̀\ͅ/ hn fajp4w}]=9fnz)9\L ߬Jde ' / pi`ϕ.\&3*ho_0-l]\;uOv{cGG[E;?k\m-X4m G`gTd-,:f3306s[ 0+8?'#O};crmlwOMm_9y8xXx ]$fJ@oeW73wڛ_07L -hjcO9 ۛUE$ʨjw Yw@jNS?:xYl<_@6V/%X,o rztYXXXO4? +hjcO9 ۛꙕ5եdʨjw Yw@jNS?:xYl<_@6V/%X,o rztYXXXO4? 27;ni6uuv6_onan`b c u,mT+* qψ4z ejh\>s|?Fw4ևcKݛf~З'U'7QA)rfՒޔA L'3#m[aŃ#izC<Qt7h,r" k{8tO/;of%&x)FW  HUDR˅W]jA\*2̘Hcc.7ۢ9!FglrjU N STHi~|wkq~6c#'X~k|ajXՕlbm6 E٧5:YPߊj})ދ/h22c#}?\a[CB>+4k:JV/?㉤0r$gF9&LJuk^3?:d$wW]%*1!18| s~ pc-VuM/lTwb?^Zs?[%J8.WB#c5bM#0*giIKke:o1{r$v/-!ĒDT¦劗f!Qlz-㵡8}uM#E}:>p"b)9 R>7@yXCu\. Q鶙6\ǭԒBZTt9殢%s3)#_J >k"(ߵ쬆7!Av8\L-E>Lk9wÙX@[I fZyuLt5 BwO)C췟W [C|Ijͱ,#75D;q0Q℺$Gx4oY13@dLG;QBĒ)EM_zwp^mn|a=$RWˮfkCRKxl,H3V(n:s]'-\PkaI2PN?e? Z܎'B$f0 45ZgXJ1#$jӫ5e?2%ISb۫.^*W4X"*d9F$uY?SxaY-_{b]}*lm-,=qm'}J/Wqk xJzRRI-n iKxH6uxs7)2~v fA)KyH)ԒD,/oEI[t5Gsɏ~YL"F,c`K3]9udϣCs!>L0g;r5EfwHDnVd/rp2d  Lck}xMATᳶǦC P5HL5>gF9@PMG-*?ɦ]$HZk]>:,%) %Ay=NXv'a-SR6o(4ZQ&'x_!B4 @@ -15583,7 +15555,7 @@ T Oq9U $=6|Hs%nS,{&ʒ8$c6p[x7j\k@? "<4s=3aB_Z0h^IӡgDF"O,v}V%t Hif4A [%!r{& 'Q݉s$ V<3i`+zвBye5m^[yaSa()ޟ=7w3VMd& 咽TeeQh αg>6g(>\Pkov8HZR(rs7Rs×Lz! U[ղ69Q.[6hSWsedbfyIdFbN%gG,br(%+' lg"urC`Wro15Cȅp]sGOnrqZI=M})CQ~ !Dz9%e!,,>׿blGrs RV0' uV) ɠ;^%!#ㆹ"ȓi4͠p#o_%!`(`ix={Pr {[3*\vve~0{zJ"ɮc _~ Uw6oJO7E?m]~D?,$c2ߋM|&p{Ӎ\ e :sCrr[G^_x[?'ܬ kv5Gl뽺>Q5󆅼~َ  vn|*aݥ^=tn֕_xPdCߕbRwWbgJ?~rοC[BdƯ{hwӉ'}2~]6ٌ9 &N`lu)G2O=EC[ -ϙws@MMXvEu9~ۤk ?yg{;O۫Y$3i#n8ov7}?sȩp.`fOaK> endobj 1076 0 obj << /Ascent 715 /CapHeight 680 /Descent -282 -/FontName /OSYAEY+URWPalladioL-Roma-Slant_167 +/FontName /PDWUGI+URWPalladioL-Roma-Slant_167 /ItalicAngle -9 /StemV 84 /XHeight 469 @@ -15620,13 +15592,16 @@ endobj >> stream xUkTgnJ+ŀ -2@ , Ʉ L P -A@0PTZ)`r1 7 Vzҟ̟y,̼| .l$vCbHi D2!10 AET@iTGrdA`ǂ$  ,>F#a6pO#-8b9%oHa+'fQH9oZM{B)<~"a@0*\.ylDe!>" #mKOƓl/8_/Ⱀ -ߢ^oOafFzXJ(O -d2 W>6OPP;AXEb@'dRbID!"ƖX4G -$ea AHX 2PaΟa7, `58:(GMȒ(,/M,5 0 ӅB+b?;wH:/Z+5=Li9>z(3˩ WҊMn_|Tbl+sZ,y9VPkItwg3>uii\q5EgVCreFV=>Jٵw]0^ѷ_y2+c):N/d,_-* *?H;V22&i!W`9ޱʺyΠLޫgݧʊ6P*A6rU8MT>kU9׉]ϵR2?zUTfA态lƚN^%Lwoř=Աe͘21Q'gޓ4|zL+&E>TD' ^֜2 ݓV -깣P<)ZcŎyfߖ4LRYeҴwo*@o-0$X%4GxvJrrr<嗣əKb^9;撨kmZxG:L߹ F+b{t+k;[n8\Ց[l - ҵ%"f9c][ d&q9cꃙc4C qH9>X1sodXw6iim];'z?ꛕL*eۡq$G}zd܂A= bDa/\endstream +2@ , Ʉ L P. (`PrRZ/ĊgiL@rtcgg<~# ++{*1}zS4Tr +Lzao5w2Kf5ӯܑ%P6=f.$3ge 2=Pw׽^笗EZ7Yi ?c~evDZ% +hfedz{׈?Ғ\{Q9clK☯:qBrpjJ8MUjh_jt)t8^P 7~tqRr8Sia2~7~@n˙q38Yyw)76!ڏ%FQirrSMN}(G#L<5t=*WjBVwDX?SLpM{&?־\=rjOjX]VЃ隃dzA$o~WGU>e܇Mel2b}[k2 A>!UlKU{8^ucLx\JRަL< +(#yEe񸺹~>5hPSTJG\+&h5*btzS7I/4r_zutV!A=霕%RF7ܱ=w7}q_ERwH3c?mSFLlOZp_J>mN/ #_}W25e>rK]->om~d6tqIBi@6\.$^>O1'>/Nl6%ˮD!%~r +|IOea8ڨ1_u{Nk(Vht)Օ/Աvu r%i o 36܌rؼ|x< VASA_$$ɏDUU_U_tgWo\$rjn‰]9'蟓iNcu6ؠ=9RNڠ޼J:DP‡0ܿfendstream endobj 1016 0 obj << /Type /Font @@ -15635,14 +15610,14 @@ endobj /FirstChar 13 /LastChar 110 /Widths 3014 0 R -/BaseFont /TQNIBI+CMSY10 +/BaseFont /TCBKSZ+CMSY10 /FontDescriptor 1014 0 R >> endobj 1014 0 obj << /Ascent 750 /CapHeight 683 /Descent -194 -/FontName /TQNIBI+CMSY10 +/FontName /TCBKSZ+CMSY10 /ItalicAngle -14.035 /StemV 85 /XHeight 431 @@ -15666,7 +15641,7 @@ endobj /Filter /FlateDecode >> stream -xڬc[%흙m۶J۶m۶mTڶWܾ}{_[f̈V-b9Ej~#[c[Gjz:>௙XXFHјjl2600١vnf䔔Te'`;Mm$lmB_oT468Ḽr22Qe@ enhl`L0X`hkcdOi4;cCی] qQ>6{h 01r2_mFXupt07s*'$<` 5idkOI:8]e` 02ww/4mLT/__umo``leBE7ܦ6Pq[=؍llo93IXMhelߩLN?/}"NVV2nH26[)G#Vۘ?"Fr掆f}}׮lcdloencW[ o>%3sCK.cD2UTTQTgqrwTrK"mk?غ&I+?N lڹj6 NOF{gr_"|__Ovpކ)1@Hg$ 'Oc#C=`}ؔ1ĜΠ$y5˅+[TZz4Y E>%d2G|Fʓ,Ƹ~g}SopZMjq'oϢ܄7=LDUo⽉ޠ|Gnc<2cYиU௙XXFHјjl2600١vnf䔔Te'`;Mm$lmB_oT468Ḽr22Qe@ enhl`L0X`hkcdOi4;cCی] qQ>6{h 01r2_mFXupt07s*'$<` 5idkOI:8]e` 02ww/4mLT/__umo``leBE7ܦ6Pq[=؍llo93IXMhelߩLN?/}"NVV2nH26[)G#Vۘ?"Fr掆f}}׮lcdloencW[ o>%3sCK.cD2UUgqrwTrK"mk?غ&I+?N lڹj6 NOF{gr_"|__Ovpކ)1@Hg$ 'Oc#C=`}ؔ1ĜΠ$y5˅+[TZz4Y E>%d2G|Fʓ,Ƹ~g}SopZMjq'oϢ܄7=LDUo⽉ޠ|Gnc<2cYиU+iaFwF\֬n2QR]BltMRﲮYkuO~&)أ|uۨ27Y#2„rBbx/n1Ӈ75醽Zu>U:(}դ[^ OEOdi]Qnb$j iRUsq`-Bι8'+>_^;X\D!jL5U/yՌb]1c9{*!(!NHW-SײJ9/mX8aq=lu88{<9Y_`T={;*pa !T!~xٝe3B ZdWG{")TW2bA-ZYg&70>U1,tSgQe.-uγ3 eoS砎LaL="leB$4.1yiM3`iYj pAsm.\2?I ť?M8Փ^2:ަOu`ʩ Sf?ʬNe KS]ޱBM62c;L=~pŞZD?RUZS$t& @@ -15765,7 +15740,7 @@ P yE.=I(XY-{N JA#'ttbmqZ yRX/!5 RT9j?fziz+m]VpK"噤"_j? -}HB8C$+A D݂'b 23*r"g!X^?!#jQX{@g\==O^}-YM/NJ~*odʦݲw2oxjfpb6i~FA"$)pe>?N)E#ghUO k&n]۠_m,Rh=ID `}DsIzc#`[sC5iS|w0쩁~CF3\9'u9zi˱+f 7G{;E}endstream +}HB8C$+A D݂'b 23*r"g!X^?!#jQX{@g\==O^}-YM/NJ~*odʦݲw2oxjfpb6i~FA"$)pe>?N)E#ghUO k&n]۠_m,Rh=ID `}DsIzc#`[sC5iS|w0쩁~CF3\9'u9zi˱+f 7G{; [endstream endobj 1013 0 obj << /Type /Font @@ -15774,14 +15749,14 @@ endobj /FirstChar 2 /LastChar 216 /Widths 3015 0 R -/BaseFont /SSWFSV+URWPalladioL-Roma +/BaseFont /OSFGGT+URWPalladioL-Roma /FontDescriptor 1011 0 R >> endobj 1011 0 obj << /Ascent 715 /CapHeight 680 /Descent -282 -/FontName /SSWFSV+URWPalladioL-Roma +/FontName /OSFGGT+URWPalladioL-Roma /ItalicAngle 0 /StemV 84 /XHeight 469 @@ -15802,7 +15777,7 @@ endobj >> stream xڬzcte߳ml9avұm۶mIǶٱmN^Wo>w?15kVZk3&#W034uec(X[[I -YYaȄM -l Mj&a# dghaf AIMM_B@/F%  $'!!+Uؚ8X] -F&N&S;G-FvDK `p71 ; `h`v [#k`vNNF΀YE?,v#\)_0Ngwr- < fh/.Nfŀhbfhlm/?:[m`dbmJ7f0.s5qW(ʿ$ l=&0vS(T@GkߡE]e lL w @%XX{{ɿqH8m_1h$jnb,old05ۥUlM-lMFhOS+пӫʫȪjR7*aڿW"cgP^LZfƿ/NfVK1Z;)ߟZ7[#;fEx_Uu ڲwe :Ia^FF]Jiv?TG?zRM|H( +YYaȄM -l Mj&a# dghaf AIMM_B@/F%  $'!!+Uؚ8X] -F&N&S;G-FvDK `p71 ; `h`v [#k`vNNF΀YE?,v#\)_0Ngwr- < fh/.Nfŀhbfhlm/?:[m`dbmJ7f0.s5qW(ʿ$ l=&0vS(T@GkߡE]e lL w @%XX{{ɿqH8m_1h$jnb,old05ۥUlM-lMFhOS+пk)I*R7*aڿW"cgP^LZfƿ/NfVK1Z;)ߟZ7[#;fEx_Uu ڲwe :Ia^FF]Jiv?TG?zRM|H( ;ةuK3բw4T&uK> ;)I\ H|;P '>?;ĥΉ&v'wTjjύ29xhY*e֐ڀ5K*>/vƽ:Ju˰Q=Ql?eМ{aBLB|yӾa x* \輏4» =o :DdzhtM~+]:nyZ6QMl'^aސzLq&74)^}YEq)v`,< bè9hFv2 %2w - "7n&3x"ypfxo,o#jO;09uR>g.F?U3_00q89!D^endstream + "7n&3x"ypfxo,o#jO;09uR>g.F?U3_00q89!.^endstream endobj 990 0 obj << /Type /Font @@ -15900,14 +15875,14 @@ endobj /FirstChar 2 /LastChar 151 /Widths 3016 0 R -/BaseFont /VPUNVZ+URWPalladioL-Bold +/BaseFont /ZOTOJR+URWPalladioL-Bold /FontDescriptor 988 0 R >> endobj 988 0 obj << /Ascent 708 /CapHeight 672 /Descent -266 -/FontName /VPUNVZ+URWPalladioL-Bold +/FontName /ZOTOJR+URWPalladioL-Bold /ItalicAngle 0 /StemV 123 /XHeight 471 @@ -17954,7 +17929,7 @@ endobj >> endobj 3029 0 obj << /Author()/Title()/Subject()/Creator(LaTeX with hyperref package)/Producer(pdfeTeX-1.21a)/Keywords() -/CreationDate (D:20140404010519Z) +/CreationDate (D:20140410033644Z) /PTEX.Fullbanner (This is pdfeTeX, Version 3.141592-1.21a-2.2 (Web2C 7.5.4) kpathsea version 3.5.4) >> endobj xref @@ -17966,979 +17941,979 @@ xref 0000000000 00000 f 0000000009 00000 n 0000352811 00000 n -0001306694 00000 n +0001306690 00000 n 0000000054 00000 n 0000000086 00000 n 0000352938 00000 n -0001306622 00000 n +0001306618 00000 n 0000000133 00000 n 0000000173 00000 n 0000353066 00000 n -0001306536 00000 n +0001306532 00000 n 0000000221 00000 n 0000000273 00000 n 0000353194 00000 n -0001306450 00000 n +0001306446 00000 n 0000000321 00000 n 0000000377 00000 n 0000357481 00000 n -0001306340 00000 n +0001306336 00000 n 0000000425 00000 n 0000000478 00000 n 0000357608 00000 n -0001306266 00000 n +0001306262 00000 n 0000000531 00000 n 0000000572 00000 n 0000357736 00000 n -0001306179 00000 n +0001306175 00000 n 0000000625 00000 n 0000000674 00000 n 0000357863 00000 n -0001306092 00000 n +0001306088 00000 n 0000000727 00000 n 0000000757 00000 n 0000362161 00000 n -0001305968 00000 n +0001305964 00000 n 0000000810 00000 n 0000000861 00000 n 0000362289 00000 n -0001305894 00000 n +0001305890 00000 n 0000000919 00000 n 0000000964 00000 n 0000362417 00000 n -0001305807 00000 n +0001305803 00000 n 0000001022 00000 n 0000001062 00000 n 0000362545 00000 n -0001305733 00000 n +0001305729 00000 n 0000001120 00000 n 0000001162 00000 n 0000365531 00000 n -0001305609 00000 n +0001305605 00000 n 0000001215 00000 n 0000001260 00000 n 0000365659 00000 n -0001305548 00000 n +0001305544 00000 n 0000001318 00000 n 0000001355 00000 n 0000365787 00000 n -0001305474 00000 n +0001305470 00000 n 0000001408 00000 n 0000001463 00000 n 0000368735 00000 n -0001305349 00000 n +0001305345 00000 n 0000001509 00000 n 0000001556 00000 n 0000368863 00000 n -0001305275 00000 n +0001305271 00000 n 0000001604 00000 n 0000001648 00000 n 0000368991 00000 n -0001305188 00000 n +0001305184 00000 n 0000001696 00000 n 0000001735 00000 n 0000369119 00000 n -0001305101 00000 n +0001305097 00000 n 0000001783 00000 n 0000001825 00000 n 0000369246 00000 n -0001305014 00000 n +0001305010 00000 n 0000001873 00000 n 0000001936 00000 n 0000370324 00000 n -0001304940 00000 n +0001304936 00000 n 0000001984 00000 n 0000002034 00000 n 0000371984 00000 n -0001304812 00000 n +0001304808 00000 n 0000002080 00000 n 0000002126 00000 n 0000372111 00000 n -0001304699 00000 n +0001304695 00000 n 0000002174 00000 n 0000002218 00000 n 0000372239 00000 n -0001304623 00000 n +0001304619 00000 n 0000002271 00000 n 0000002323 00000 n 0000372367 00000 n -0001304546 00000 n +0001304542 00000 n 0000002377 00000 n 0000002436 00000 n 0000374817 00000 n -0001304455 00000 n +0001304451 00000 n 0000002485 00000 n 0000002523 00000 n 0000378156 00000 n -0001304338 00000 n +0001304334 00000 n 0000002572 00000 n 0000002618 00000 n 0000378284 00000 n -0001304220 00000 n +0001304216 00000 n 0000002672 00000 n 0000002739 00000 n 0000378412 00000 n -0001304141 00000 n +0001304137 00000 n 0000002798 00000 n 0000002842 00000 n 0000378541 00000 n -0001304062 00000 n +0001304058 00000 n 0000002901 00000 n 0000002949 00000 n 0000385601 00000 n -0001303983 00000 n +0001303979 00000 n 0000003003 00000 n 0000003036 00000 n 0000391228 00000 n -0001303850 00000 n +0001303846 00000 n 0000003083 00000 n 0000003126 00000 n 0000391357 00000 n -0001303771 00000 n +0001303767 00000 n 0000003175 00000 n 0000003205 00000 n 0000391486 00000 n -0001303639 00000 n +0001303635 00000 n 0000003254 00000 n 0000003292 00000 n 0000396008 00000 n -0001303574 00000 n +0001303570 00000 n 0000003346 00000 n 0000003388 00000 n 0000396137 00000 n -0001303481 00000 n +0001303477 00000 n 0000003437 00000 n 0000003496 00000 n 0000396266 00000 n -0001303349 00000 n +0001303345 00000 n 0000003545 00000 n 0000003578 00000 n 0000399988 00000 n -0001303284 00000 n +0001303280 00000 n 0000003632 00000 n 0000003681 00000 n 0000403145 00000 n -0001303152 00000 n +0001303148 00000 n 0000003730 00000 n 0000003758 00000 n 0000406091 00000 n -0001303034 00000 n +0001303030 00000 n 0000003812 00000 n 0000003881 00000 n 0000406220 00000 n -0001302955 00000 n +0001302951 00000 n 0000003940 00000 n 0000003988 00000 n 0000406349 00000 n -0001302876 00000 n +0001302872 00000 n 0000004047 00000 n 0000004092 00000 n 0000406478 00000 n -0001302783 00000 n +0001302779 00000 n 0000004146 00000 n 0000004214 00000 n 0000406607 00000 n -0001302690 00000 n +0001302686 00000 n 0000004268 00000 n 0000004338 00000 n 0000410071 00000 n -0001302597 00000 n +0001302593 00000 n 0000004392 00000 n 0000004455 00000 n 0000410200 00000 n -0001302504 00000 n +0001302500 00000 n 0000004509 00000 n 0000004564 00000 n 0000410329 00000 n -0001302425 00000 n +0001302421 00000 n 0000004618 00000 n 0000004650 00000 n 0000410458 00000 n -0001302332 00000 n +0001302328 00000 n 0000004699 00000 n 0000004727 00000 n 0000414320 00000 n -0001302239 00000 n +0001302235 00000 n 0000004776 00000 n 0000004808 00000 n 0000414449 00000 n -0001302107 00000 n +0001302103 00000 n 0000004857 00000 n 0000004887 00000 n 0000414577 00000 n -0001302028 00000 n +0001302024 00000 n 0000004941 00000 n 0000004982 00000 n 0000418481 00000 n -0001301935 00000 n +0001301931 00000 n 0000005036 00000 n 0000005078 00000 n 0000418609 00000 n -0001301856 00000 n +0001301852 00000 n 0000005132 00000 n 0000005177 00000 n 0000423751 00000 n -0001301723 00000 n +0001301719 00000 n 0000005226 00000 n 0000005294 00000 n 0000423880 00000 n -0001301644 00000 n +0001301640 00000 n 0000005348 00000 n 0000005408 00000 n 0000427855 00000 n -0001301551 00000 n +0001301547 00000 n 0000005462 00000 n 0000005513 00000 n 0000427984 00000 n -0001301458 00000 n +0001301454 00000 n 0000005567 00000 n 0000005621 00000 n 0000430947 00000 n -0001301365 00000 n +0001301361 00000 n 0000005675 00000 n 0000005721 00000 n 0000431076 00000 n -0001301272 00000 n +0001301268 00000 n 0000005775 00000 n 0000005817 00000 n 0000431205 00000 n -0001301179 00000 n +0001301175 00000 n 0000005871 00000 n 0000005922 00000 n 0000434274 00000 n -0001301086 00000 n +0001301082 00000 n 0000005976 00000 n 0000006025 00000 n 0000434403 00000 n -0001300993 00000 n +0001300989 00000 n 0000006079 00000 n 0000006136 00000 n 0000434532 00000 n -0001300900 00000 n +0001300896 00000 n 0000006190 00000 n 0000006245 00000 n 0000434661 00000 n -0001300807 00000 n +0001300803 00000 n 0000006300 00000 n 0000006356 00000 n 0000434790 00000 n -0001300714 00000 n +0001300710 00000 n 0000006411 00000 n 0000006472 00000 n 0000434919 00000 n -0001300621 00000 n +0001300617 00000 n 0000006527 00000 n 0000006573 00000 n 0000435048 00000 n -0001300542 00000 n +0001300538 00000 n 0000006628 00000 n 0000006671 00000 n 0000438902 00000 n -0001300410 00000 n +0001300406 00000 n 0000006721 00000 n 0000006777 00000 n 0000439031 00000 n -0001300331 00000 n +0001300327 00000 n 0000006832 00000 n 0000006878 00000 n 0000439160 00000 n -0001300252 00000 n +0001300248 00000 n 0000006933 00000 n 0000006980 00000 n 0000442496 00000 n -0001300120 00000 n +0001300116 00000 n 0000007030 00000 n 0000007086 00000 n 0000442625 00000 n -0001300041 00000 n +0001300037 00000 n 0000007141 00000 n 0000007181 00000 n 0000442754 00000 n -0001299948 00000 n +0001299944 00000 n 0000007236 00000 n 0000007280 00000 n 0000442883 00000 n -0001299816 00000 n +0001299812 00000 n 0000007335 00000 n 0000007386 00000 n 0000445915 00000 n -0001299737 00000 n +0001299733 00000 n 0000007446 00000 n 0000007491 00000 n 0000448647 00000 n -0001299644 00000 n +0001299640 00000 n 0000007551 00000 n 0000007624 00000 n 0000448776 00000 n -0001299551 00000 n +0001299547 00000 n 0000007684 00000 n 0000007757 00000 n 0000448905 00000 n -0001299458 00000 n +0001299454 00000 n 0000007817 00000 n 0000007874 00000 n 0000451429 00000 n -0001299365 00000 n +0001299361 00000 n 0000007934 00000 n 0000008011 00000 n 0000454236 00000 n -0001299272 00000 n +0001299268 00000 n 0000008071 00000 n 0000008148 00000 n 0000454365 00000 n -0001299193 00000 n +0001299189 00000 n 0000008208 00000 n 0000008267 00000 n 0000454494 00000 n -0001299100 00000 n +0001299096 00000 n 0000008322 00000 n 0000008365 00000 n 0000454623 00000 n -0001299007 00000 n +0001299003 00000 n 0000008420 00000 n 0000008460 00000 n 0000460390 00000 n -0001298914 00000 n +0001298910 00000 n 0000008515 00000 n 0000008583 00000 n 0000460519 00000 n -0001298835 00000 n +0001298831 00000 n 0000008638 00000 n 0000008709 00000 n 0000465100 00000 n -0001298703 00000 n +0001298699 00000 n 0000008759 00000 n 0000008818 00000 n 0000465228 00000 n -0001298624 00000 n +0001298620 00000 n 0000008873 00000 n 0000008915 00000 n 0000468555 00000 n -0001298545 00000 n +0001298541 00000 n 0000008970 00000 n 0000009014 00000 n 0000468684 00000 n -0001298427 00000 n +0001298423 00000 n 0000009064 00000 n 0000009111 00000 n 0000470561 00000 n -0001298348 00000 n +0001298344 00000 n 0000009166 00000 n 0000009227 00000 n 0000470689 00000 n -0001298269 00000 n +0001298265 00000 n 0000009282 00000 n 0000009352 00000 n 0000473501 00000 n -0001298136 00000 n +0001298132 00000 n 0000009399 00000 n 0000009452 00000 n 0000473630 00000 n -0001298057 00000 n +0001298053 00000 n 0000009501 00000 n 0000009557 00000 n 0000473759 00000 n -0001297978 00000 n +0001297974 00000 n 0000009606 00000 n 0000009655 00000 n 0000478031 00000 n -0001297845 00000 n +0001297841 00000 n 0000009702 00000 n 0000009754 00000 n 0000478160 00000 n -0001297727 00000 n +0001297723 00000 n 0000009803 00000 n 0000009854 00000 n 0000486672 00000 n -0001297609 00000 n +0001297605 00000 n 0000009908 00000 n 0000009953 00000 n 0000486801 00000 n -0001297530 00000 n +0001297526 00000 n 0000010012 00000 n 0000010046 00000 n 0000486930 00000 n -0001297451 00000 n +0001297447 00000 n 0000010105 00000 n 0000010153 00000 n 0000487059 00000 n -0001297333 00000 n +0001297329 00000 n 0000010207 00000 n 0000010247 00000 n 0000489594 00000 n -0001297254 00000 n +0001297250 00000 n 0000010306 00000 n 0000010340 00000 n 0000489723 00000 n -0001297175 00000 n +0001297171 00000 n 0000010399 00000 n 0000010447 00000 n 0000489852 00000 n -0001297042 00000 n +0001297038 00000 n 0000010496 00000 n 0000010546 00000 n 0000493264 00000 n -0001296963 00000 n +0001296959 00000 n 0000010600 00000 n 0000010647 00000 n 0000493392 00000 n -0001296870 00000 n +0001296866 00000 n 0000010701 00000 n 0000010761 00000 n 0000496874 00000 n -0001296777 00000 n +0001296773 00000 n 0000010815 00000 n 0000010867 00000 n 0000497003 00000 n -0001296684 00000 n +0001296680 00000 n 0000010921 00000 n 0000010986 00000 n 0000501853 00000 n -0001296591 00000 n +0001296587 00000 n 0000011040 00000 n 0000011091 00000 n 0000501982 00000 n -0001296498 00000 n +0001296494 00000 n 0000011145 00000 n 0000011209 00000 n 0000502111 00000 n -0001296405 00000 n +0001296401 00000 n 0000011263 00000 n 0000011310 00000 n 0000505877 00000 n -0001296312 00000 n +0001296308 00000 n 0000011364 00000 n 0000011424 00000 n 0000506006 00000 n -0001296219 00000 n +0001296215 00000 n 0000011478 00000 n 0000011529 00000 n 0000506135 00000 n -0001296087 00000 n +0001296083 00000 n 0000011584 00000 n 0000011649 00000 n 0000510565 00000 n -0001296008 00000 n +0001296004 00000 n 0000011709 00000 n 0000011756 00000 n 0000517082 00000 n -0001295915 00000 n +0001295911 00000 n 0000011816 00000 n 0000011864 00000 n 0000523974 00000 n -0001295836 00000 n +0001295832 00000 n 0000011924 00000 n 0000011978 00000 n 0000527392 00000 n -0001295743 00000 n +0001295739 00000 n 0000012033 00000 n 0000012083 00000 n 0000527521 00000 n -0001295650 00000 n +0001295646 00000 n 0000012138 00000 n 0000012201 00000 n 0000529929 00000 n -0001295557 00000 n +0001295553 00000 n 0000012256 00000 n 0000012308 00000 n 0000530058 00000 n -0001295464 00000 n +0001295460 00000 n 0000012363 00000 n 0000012428 00000 n 0000530187 00000 n -0001295371 00000 n +0001295367 00000 n 0000012483 00000 n 0000012535 00000 n 0000537359 00000 n -0001295238 00000 n +0001295234 00000 n 0000012590 00000 n 0000012655 00000 n 0000557847 00000 n -0001295159 00000 n +0001295155 00000 n 0000012715 00000 n 0000012759 00000 n 0000583480 00000 n -0001295066 00000 n +0001295062 00000 n 0000012819 00000 n 0000012858 00000 n 0000587481 00000 n -0001294973 00000 n +0001294969 00000 n 0000012918 00000 n 0000012965 00000 n 0000587610 00000 n -0001294880 00000 n +0001294876 00000 n 0000013025 00000 n 0000013068 00000 n 0000595718 00000 n -0001294787 00000 n +0001294783 00000 n 0000013128 00000 n 0000013167 00000 n 0000599392 00000 n -0001294694 00000 n +0001294690 00000 n 0000013227 00000 n 0000013269 00000 n 0000602441 00000 n -0001294601 00000 n +0001294597 00000 n 0000013329 00000 n 0000013372 00000 n 0000609571 00000 n -0001294508 00000 n +0001294504 00000 n 0000013432 00000 n 0000013475 00000 n 0000613983 00000 n -0001294415 00000 n +0001294411 00000 n 0000013535 00000 n 0000013596 00000 n 0000614111 00000 n -0001294322 00000 n +0001294318 00000 n 0000013657 00000 n 0000013709 00000 n 0000617862 00000 n -0001294229 00000 n +0001294225 00000 n 0000013770 00000 n 0000013823 00000 n 0000621812 00000 n -0001294136 00000 n +0001294132 00000 n 0000013884 00000 n 0000013922 00000 n 0000621941 00000 n -0001294043 00000 n +0001294039 00000 n 0000013983 00000 n 0000014035 00000 n 0000625103 00000 n -0001293950 00000 n +0001293946 00000 n 0000014096 00000 n 0000014140 00000 n 0000628510 00000 n -0001293857 00000 n +0001293853 00000 n 0000014201 00000 n 0000014237 00000 n 0000641327 00000 n -0001293764 00000 n +0001293760 00000 n 0000014298 00000 n 0000014361 00000 n 0000643763 00000 n -0001293671 00000 n +0001293667 00000 n 0000014422 00000 n 0000014472 00000 n 0000651312 00000 n -0001293578 00000 n +0001293574 00000 n 0000014533 00000 n 0000014589 00000 n 0000655798 00000 n -0001293485 00000 n +0001293481 00000 n 0000014650 00000 n 0000014697 00000 n 0000659877 00000 n -0001293392 00000 n +0001293388 00000 n 0000014758 00000 n 0000014826 00000 n 0000670635 00000 n -0001293313 00000 n +0001293309 00000 n 0000014887 00000 n 0000014939 00000 n 0000682309 00000 n -0001293220 00000 n +0001293216 00000 n 0000014994 00000 n 0000015045 00000 n 0000682438 00000 n -0001293127 00000 n +0001293123 00000 n 0000015100 00000 n 0000015164 00000 n 0000687029 00000 n -0001293034 00000 n +0001293030 00000 n 0000015219 00000 n 0000015283 00000 n 0000695675 00000 n -0001292941 00000 n +0001292937 00000 n 0000015338 00000 n 0000015415 00000 n 0000695804 00000 n -0001292848 00000 n +0001292844 00000 n 0000015470 00000 n 0000015527 00000 n 0000699983 00000 n -0001292755 00000 n +0001292751 00000 n 0000015582 00000 n 0000015652 00000 n 0000700111 00000 n -0001292662 00000 n +0001292658 00000 n 0000015707 00000 n 0000015764 00000 n 0000700240 00000 n -0001292569 00000 n +0001292565 00000 n 0000015819 00000 n 0000015889 00000 n 0000704474 00000 n -0001292476 00000 n +0001292472 00000 n 0000015944 00000 n 0000015993 00000 n 0000704602 00000 n -0001292383 00000 n +0001292379 00000 n 0000016048 00000 n 0000016110 00000 n 0000706880 00000 n -0001292290 00000 n +0001292286 00000 n 0000016165 00000 n 0000016214 00000 n 0000714907 00000 n -0001292172 00000 n +0001292168 00000 n 0000016269 00000 n 0000016331 00000 n 0000715036 00000 n -0001292093 00000 n +0001292089 00000 n 0000016391 00000 n 0000016430 00000 n 0000722285 00000 n -0001292000 00000 n +0001291996 00000 n 0000016490 00000 n 0000016524 00000 n 0000722413 00000 n -0001291907 00000 n +0001291903 00000 n 0000016584 00000 n 0000016625 00000 n 0000744309 00000 n -0001291814 00000 n +0001291810 00000 n 0000016685 00000 n 0000016737 00000 n 0000753985 00000 n -0001291735 00000 n +0001291731 00000 n 0000016797 00000 n 0000016840 00000 n 0000757815 00000 n -0001291603 00000 n +0001291599 00000 n 0000016889 00000 n 0000016922 00000 n 0000757944 00000 n -0001291485 00000 n +0001291481 00000 n 0000016976 00000 n 0000017048 00000 n 0000758073 00000 n -0001291406 00000 n +0001291402 00000 n 0000017107 00000 n 0000017151 00000 n 0000765524 00000 n -0001291327 00000 n +0001291323 00000 n 0000017210 00000 n 0000017263 00000 n 0000769243 00000 n -0001291234 00000 n +0001291230 00000 n 0000017317 00000 n 0000017367 00000 n 0000772756 00000 n -0001291141 00000 n +0001291137 00000 n 0000017421 00000 n 0000017459 00000 n 0000773014 00000 n -0001291048 00000 n +0001291044 00000 n 0000017513 00000 n 0000017562 00000 n 0000773272 00000 n -0001290916 00000 n +0001290912 00000 n 0000017616 00000 n 0000017668 00000 n 0000773400 00000 n -0001290837 00000 n +0001290833 00000 n 0000017727 00000 n 0000017772 00000 n 0000776347 00000 n -0001290744 00000 n +0001290740 00000 n 0000017831 00000 n 0000017883 00000 n 0000776476 00000 n -0001290651 00000 n +0001290647 00000 n 0000017942 00000 n 0000017995 00000 n 0000776605 00000 n -0001290572 00000 n +0001290568 00000 n 0000018054 00000 n 0000018103 00000 n 0000776734 00000 n -0001290479 00000 n +0001290475 00000 n 0000018157 00000 n 0000018237 00000 n 0000783713 00000 n -0001290400 00000 n +0001290396 00000 n 0000018291 00000 n 0000018340 00000 n 0000783842 00000 n -0001290282 00000 n +0001290278 00000 n 0000018389 00000 n 0000018429 00000 n 0000787279 00000 n -0001290203 00000 n +0001290199 00000 n 0000018488 00000 n 0000018535 00000 n 0000787408 00000 n -0001290085 00000 n +0001290081 00000 n 0000018589 00000 n 0000018634 00000 n 0000787536 00000 n -0001290006 00000 n +0001290002 00000 n 0000018693 00000 n 0000018752 00000 n 0000793732 00000 n -0001289913 00000 n +0001289909 00000 n 0000018811 00000 n 0000018875 00000 n 0000793991 00000 n -0001289820 00000 n +0001289816 00000 n 0000018934 00000 n 0000018990 00000 n 0000798179 00000 n -0001289727 00000 n +0001289723 00000 n 0000019049 00000 n 0000019107 00000 n 0000800082 00000 n -0001289648 00000 n +0001289644 00000 n 0000019166 00000 n 0000019228 00000 n 0000801867 00000 n -0001289515 00000 n +0001289511 00000 n 0000019275 00000 n 0000019327 00000 n 0000801995 00000 n -0001289436 00000 n +0001289432 00000 n 0000019376 00000 n 0000019420 00000 n 0000805795 00000 n -0001289304 00000 n +0001289300 00000 n 0000019469 00000 n 0000019510 00000 n 0000805924 00000 n -0001289225 00000 n +0001289221 00000 n 0000019564 00000 n 0000019612 00000 n 0000806053 00000 n -0001289146 00000 n +0001289142 00000 n 0000019666 00000 n 0000019717 00000 n 0000806181 00000 n -0001289067 00000 n +0001289063 00000 n 0000019766 00000 n 0000019813 00000 n 0000810442 00000 n -0001288934 00000 n +0001288930 00000 n 0000019860 00000 n 0000019897 00000 n 0000810571 00000 n -0001288816 00000 n +0001288812 00000 n 0000019946 00000 n 0000019985 00000 n 0000810700 00000 n -0001288751 00000 n +0001288747 00000 n 0000020039 00000 n 0000020117 00000 n 0000810829 00000 n -0001288658 00000 n +0001288654 00000 n 0000020166 00000 n 0000020233 00000 n 0000810958 00000 n -0001288579 00000 n +0001288575 00000 n 0000020282 00000 n 0000020327 00000 n 0000814400 00000 n -0001288446 00000 n +0001288442 00000 n 0000020375 00000 n 0000020407 00000 n 0000814529 00000 n -0001288328 00000 n +0001288324 00000 n 0000020456 00000 n 0000020495 00000 n 0000814658 00000 n -0001288263 00000 n +0001288259 00000 n 0000020549 00000 n 0000020610 00000 n 0000818341 00000 n -0001288131 00000 n +0001288127 00000 n 0000020659 00000 n 0000020716 00000 n 0000818470 00000 n -0001288066 00000 n +0001288062 00000 n 0000020770 00000 n 0000020819 00000 n 0000818599 00000 n -0001287934 00000 n +0001287930 00000 n 0000020868 00000 n 0000020930 00000 n 0000818728 00000 n -0001287855 00000 n +0001287851 00000 n 0000020984 00000 n 0000021039 00000 n 0000843574 00000 n -0001287762 00000 n +0001287758 00000 n 0000021093 00000 n 0000021134 00000 n 0000843703 00000 n -0001287683 00000 n +0001287679 00000 n 0000021188 00000 n 0000021240 00000 n 0000844092 00000 n -0001287565 00000 n +0001287561 00000 n 0000021289 00000 n 0000021339 00000 n 0000846915 00000 n -0001287486 00000 n +0001287482 00000 n 0000021393 00000 n 0000021431 00000 n 0000847044 00000 n -0001287393 00000 n +0001287389 00000 n 0000021485 00000 n 0000021522 00000 n 0000847173 00000 n -0001287300 00000 n +0001287296 00000 n 0000021576 00000 n 0000021614 00000 n 0000847302 00000 n -0001287207 00000 n +0001287203 00000 n 0000021668 00000 n 0000021720 00000 n 0000850540 00000 n -0001287114 00000 n +0001287110 00000 n 0000021774 00000 n 0000021817 00000 n 0000850668 00000 n -0001286982 00000 n +0001286978 00000 n 0000021871 00000 n 0000021916 00000 n 0000850796 00000 n -0001286903 00000 n +0001286899 00000 n 0000021975 00000 n 0000022041 00000 n 0000853783 00000 n -0001286810 00000 n +0001286806 00000 n 0000022100 00000 n 0000022188 00000 n 0000853912 00000 n -0001286717 00000 n +0001286713 00000 n 0000022247 00000 n 0000022322 00000 n 0000854041 00000 n -0001286624 00000 n +0001286620 00000 n 0000022381 00000 n 0000022466 00000 n 0000856950 00000 n -0001286531 00000 n +0001286527 00000 n 0000022525 00000 n 0000022606 00000 n 0000859413 00000 n -0001286452 00000 n +0001286448 00000 n 0000022665 00000 n 0000022749 00000 n 0000859542 00000 n -0001286373 00000 n +0001286369 00000 n 0000022803 00000 n 0000022847 00000 n 0000862454 00000 n -0001286253 00000 n +0001286249 00000 n 0000022895 00000 n 0000022929 00000 n 0000862583 00000 n -0001286174 00000 n +0001286170 00000 n 0000022978 00000 n 0000023005 00000 n 0000884624 00000 n -0001286081 00000 n +0001286077 00000 n 0000023054 00000 n 0000023082 00000 n 0000892015 00000 n -0001285988 00000 n +0001285984 00000 n 0000023131 00000 n 0000023160 00000 n 0000906426 00000 n -0001285895 00000 n +0001285891 00000 n 0000023209 00000 n 0000023247 00000 n 0000909784 00000 n -0001285802 00000 n +0001285798 00000 n 0000023296 00000 n 0000023335 00000 n 0000913248 00000 n -0001285709 00000 n +0001285705 00000 n 0000023384 00000 n 0000023424 00000 n 0000919338 00000 n -0001285616 00000 n +0001285612 00000 n 0000023473 00000 n 0000023513 00000 n 0000925801 00000 n -0001285523 00000 n +0001285519 00000 n 0000023562 00000 n 0000023605 00000 n 0000936505 00000 n -0001285430 00000 n +0001285426 00000 n 0000023654 00000 n 0000023691 00000 n 0000950379 00000 n -0001285337 00000 n +0001285333 00000 n 0000023741 00000 n 0000023779 00000 n 0000953486 00000 n -0001285244 00000 n +0001285240 00000 n 0000023829 00000 n 0000023868 00000 n 0000960331 00000 n -0001285151 00000 n +0001285147 00000 n 0000023918 00000 n 0000023958 00000 n 0000978208 00000 n -0001285058 00000 n +0001285054 00000 n 0000024008 00000 n 0000024046 00000 n 0000981687 00000 n -0001284965 00000 n +0001284961 00000 n 0000024096 00000 n 0000024136 00000 n 0000987813 00000 n -0001284872 00000 n +0001284868 00000 n 0000024186 00000 n 0000024226 00000 n 0000994738 00000 n -0001284779 00000 n +0001284775 00000 n 0000024276 00000 n 0000024306 00000 n 0001006556 00000 n -0001284686 00000 n +0001284682 00000 n 0000024356 00000 n 0000024399 00000 n 0001007010 00000 n -0001284593 00000 n +0001284589 00000 n 0000024449 00000 n 0000024489 00000 n 0001009961 00000 n -0001284500 00000 n +0001284496 00000 n 0000024539 00000 n 0000024572 00000 n 0001024426 00000 n -0001284407 00000 n +0001284403 00000 n 0000024622 00000 n 0000024651 00000 n 0001043672 00000 n -0001284314 00000 n +0001284310 00000 n 0000024701 00000 n 0000024735 00000 n 0001049341 00000 n -0001284221 00000 n +0001284217 00000 n 0000024785 00000 n 0000024822 00000 n 0001052514 00000 n -0001284128 00000 n +0001284124 00000 n 0000024872 00000 n 0000024909 00000 n 0001058344 00000 n -0001284035 00000 n +0001284031 00000 n 0000024959 00000 n 0000024992 00000 n 0001058798 00000 n -0001283942 00000 n +0001283938 00000 n 0000025042 00000 n 0000025076 00000 n 0001061617 00000 n -0001283849 00000 n +0001283845 00000 n 0000025126 00000 n 0000025165 00000 n 0001064075 00000 n -0001283770 00000 n +0001283766 00000 n 0000025215 00000 n 0000025249 00000 n 0000025622 00000 n @@ -18947,10 +18922,10 @@ xref 0000025302 00000 n 0000290433 00000 n 0000290496 00000 n -0001277298 00000 n -0001251023 00000 n -0001277124 00000 n -0001278348 00000 n +0001277294 00000 n +0001251019 00000 n +0001277120 00000 n +0001278344 00000 n 0000027053 00000 n 0000027246 00000 n 0000027326 00000 n @@ -18970,12 +18945,12 @@ xref 0000291816 00000 n 0000290659 00000 n 0000291941 00000 n -0001249773 00000 n -0001222797 00000 n -0001249597 00000 n -0001222110 00000 n -0001219962 00000 n -0001221944 00000 n +0001249769 00000 n +0001222793 00000 n +0001249593 00000 n +0001222106 00000 n +0001219958 00000 n +0001221940 00000 n 0000303822 00000 n 0000295060 00000 n 0000292094 00000 n @@ -19035,9 +19010,9 @@ xref 0000307266 00000 n 0000303909 00000 n 0000317271 00000 n -0001219374 00000 n -0001201953 00000 n -0001219188 00000 n +0001219370 00000 n +0001201949 00000 n +0001219184 00000 n 0000307916 00000 n 0000308080 00000 n 0000308244 00000 n @@ -19177,9 +19152,9 @@ xref 0000337699 00000 n 0000337867 00000 n 0000338033 00000 n -0001201049 00000 n -0001179564 00000 n -0001200873 00000 n +0001201045 00000 n +0001179561 00000 n +0001200869 00000 n 0000338201 00000 n 0000338369 00000 n 0000338525 00000 n @@ -19240,9 +19215,9 @@ xref 0000348675 00000 n 0000348834 00000 n 0000348991 00000 n -0001178585 00000 n -0001158458 00000 n -0001178410 00000 n +0001178582 00000 n +0001158455 00000 n +0001178407 00000 n 0000349150 00000 n 0000349309 00000 n 0000349468 00000 n @@ -19250,7 +19225,7 @@ xref 0000349786 00000 n 0000349944 00000 n 0000350103 00000 n -0001278471 00000 n +0001278467 00000 n 0000353452 00000 n 0000352685 00000 n 0000350429 00000 n @@ -19260,9 +19235,9 @@ xref 0000353257 00000 n 0000353322 00000 n 0000353387 00000 n -0001157604 00000 n -0001138380 00000 n -0001157429 00000 n +0001157601 00000 n +0001138377 00000 n +0001157426 00000 n 0000357990 00000 n 0000356849 00000 n 0000353581 00000 n @@ -19311,7 +19286,7 @@ xref 0000369461 00000 n 0000370259 00000 n 0000370387 00000 n -0001278596 00000 n +0001278592 00000 n 0000372496 00000 n 0000371793 00000 n 0000370553 00000 n @@ -19335,9 +19310,9 @@ xref 0000378091 00000 n 0000378220 00000 n 0000378347 00000 n -0001137658 00000 n -0001124281 00000 n -0001137479 00000 n +0001137655 00000 n +0001124278 00000 n +0001137476 00000 n 0000378605 00000 n 0000383614 00000 n 0000383053 00000 n @@ -19358,7 +19333,7 @@ xref 0000386138 00000 n 0000385988 00000 n 0000386264 00000 n -0001278721 00000 n +0001278717 00000 n 0000389025 00000 n 0000391615 00000 n 0000388860 00000 n @@ -19368,12 +19343,12 @@ xref 0000391421 00000 n 0000390668 00000 n 0000390830 00000 n -0001123364 00000 n -0001113170 00000 n -0001123190 00000 n -0001112606 00000 n -0001103519 00000 n -0001112431 00000 n +0001123361 00000 n +0001113167 00000 n +0001123187 00000 n +0001112603 00000 n +0001103517 00000 n +0001112428 00000 n 0000391550 00000 n 0000390992 00000 n 0000390497 00000 n @@ -19387,9 +19362,9 @@ xref 0000391787 00000 n 0000395943 00000 n 0000396072 00000 n -0001102918 00000 n -0001090497 00000 n -0001102739 00000 n +0001102916 00000 n +0001090494 00000 n +0001102737 00000 n 0000396201 00000 n 0000395616 00000 n 0000395781 00000 n @@ -19419,7 +19394,7 @@ xref 0000406413 00000 n 0000406542 00000 n 0000406671 00000 n -0001278846 00000 n +0001278842 00000 n 0000410586 00000 n 0000409689 00000 n 0000406879 00000 n @@ -19450,9 +19425,9 @@ xref 0000423560 00000 n 0000420841 00000 n 0000423686 00000 n -0001090222 00000 n -0001086862 00000 n -0001090043 00000 n +0001090219 00000 n +0001086861 00000 n +0001090040 00000 n 0000423815 00000 n 0000423944 00000 n 0000428113 00000 n @@ -19461,12 +19436,12 @@ xref 0000427790 00000 n 0000427919 00000 n 0000428048 00000 n -0001086507 00000 n +0001086506 00000 n 0001084508 00000 n -0001086342 00000 n +0001086341 00000 n 0000427461 00000 n 0000427625 00000 n -0001278971 00000 n +0001278967 00000 n 0000936569 00000 n 0000953550 00000 n 0000431333 00000 n @@ -19516,7 +19491,7 @@ xref 0000448711 00000 n 0000448840 00000 n 0000448969 00000 n -0001279096 00000 n +0001279092 00000 n 0000451558 00000 n 0000451238 00000 n 0000449149 00000 n @@ -19555,7 +19530,7 @@ xref 0000468490 00000 n 0000468619 00000 n 0000468748 00000 n -0001279221 00000 n +0001279217 00000 n 0000470818 00000 n 0000470188 00000 n 0000468956 00000 n @@ -19593,7 +19568,7 @@ xref 0000483009 00000 n 0000478519 00000 n 0000483135 00000 n -0001279346 00000 n +0001279342 00000 n 0000487188 00000 n 0000486481 00000 n 0000483343 00000 n @@ -19643,7 +19618,7 @@ xref 0000505628 00000 n 0000506070 00000 n 0000506199 00000 n -0001279471 00000 n +0001279467 00000 n 0000510694 00000 n 0000510374 00000 n 0000506393 00000 n @@ -19680,7 +19655,7 @@ xref 0000527585 00000 n 0000527026 00000 n 0000527178 00000 n -0001279596 00000 n +0001279592 00000 n 0000530316 00000 n 0000529738 00000 n 0000527765 00000 n @@ -19709,7 +19684,7 @@ xref 0000540758 00000 n 0000537617 00000 n 0000540884 00000 n -0001279721 00000 n +0001279717 00000 n 0000545514 00000 n 0000544966 00000 n 0000541078 00000 n @@ -19743,7 +19718,7 @@ xref 0000562112 00000 n 0000566143 00000 n 0000565989 00000 n -0001279846 00000 n +0001279842 00000 n 0000571016 00000 n 0000570048 00000 n 0000566337 00000 n @@ -19783,7 +19758,7 @@ xref 0000591847 00000 n 0000591506 00000 n 0000591676 00000 n -0001279971 00000 n +0001279967 00000 n 0000806245 00000 n 0000595847 00000 n 0000595527 00000 n @@ -19817,7 +19792,7 @@ xref 0000613589 00000 n 0000614175 00000 n 0000613763 00000 n -0001280096 00000 n +0001280092 00000 n 0000617991 00000 n 0000617671 00000 n 0000614355 00000 n @@ -19853,7 +19828,7 @@ xref 0000632920 00000 n 0000637155 00000 n 0000636993 00000 n -0001280221 00000 n +0001280217 00000 n 0000783777 00000 n 0000641456 00000 n 0000640946 00000 n @@ -19885,7 +19860,7 @@ xref 0000655733 00000 n 0000655862 00000 n 0000655529 00000 n -0001280346 00000 n +0001280342 00000 n 0000660006 00000 n 0000659686 00000 n 0000656056 00000 n @@ -19912,7 +19887,7 @@ xref 0000678995 00000 n 0000674238 00000 n 0000679121 00000 n -0001280471 00000 n +0001280467 00000 n 0000682567 00000 n 0000682118 00000 n 0000679301 00000 n @@ -19968,7 +19943,7 @@ xref 0000706689 00000 n 0000704874 00000 n 0000706815 00000 n -0001280596 00000 n +0001280592 00000 n 0000708638 00000 n 0000708447 00000 n 0000707124 00000 n @@ -20003,7 +19978,7 @@ xref 0000721739 00000 n 0000721899 00000 n 0000722060 00000 n -0001280721 00000 n +0001280717 00000 n 0001065454 00000 n 0000728557 00000 n 0000725958 00000 n @@ -20075,7 +20050,7 @@ xref 0000751133 00000 n 0000748692 00000 n 0000751259 00000 n -0001280846 00000 n +0001280842 00000 n 0000754113 00000 n 0000753794 00000 n 0000751483 00000 n @@ -20127,7 +20102,7 @@ xref 0000773207 00000 n 0000773336 00000 n 0000773464 00000 n -0001280971 00000 n +0001280967 00000 n 0000776862 00000 n 0000776156 00000 n 0000773728 00000 n @@ -20174,7 +20149,7 @@ xref 0000794055 00000 n 0000794120 00000 n 0000794185 00000 n -0001281096 00000 n +0001281092 00000 n 0000798438 00000 n 0000797988 00000 n 0000794365 00000 n @@ -20214,7 +20189,7 @@ xref 0000807581 00000 n 0000807431 00000 n 0000807707 00000 n -0001281221 00000 n +0001281217 00000 n 0000811086 00000 n 0000809860 00000 n 0000807814 00000 n @@ -20362,7 +20337,7 @@ xref 0000832332 00000 n 0000832397 00000 n 0000832461 00000 n -0001281346 00000 n +0001281342 00000 n 0000838701 00000 n 0000835263 00000 n 0000832640 00000 n @@ -20480,7 +20455,7 @@ xref 0000854285 00000 n 0000856885 00000 n 0000857014 00000 n -0001281471 00000 n +0001281467 00000 n 0000859671 00000 n 0000859222 00000 n 0000857251 00000 n @@ -20515,7 +20490,7 @@ xref 0000874302 00000 n 0000871168 00000 n 0000874428 00000 n -0001281596 00000 n +0001281592 00000 n 0000877930 00000 n 0000877739 00000 n 0000874622 00000 n @@ -20558,7 +20533,7 @@ xref 0000892531 00000 n 0000896225 00000 n 0000896290 00000 n -0001281721 00000 n +0001281717 00000 n 0000900263 00000 n 0000900007 00000 n 0000896540 00000 n @@ -20606,7 +20581,7 @@ xref 0000916438 00000 n 0000916503 00000 n 0000916568 00000 n -0001281846 00000 n +0001281842 00000 n 0000919662 00000 n 0000918887 00000 n 0000916789 00000 n @@ -20656,7 +20631,7 @@ xref 0000936699 00000 n 0000936764 00000 n 0000936829 00000 n -0001281971 00000 n +0001281967 00000 n 0000940573 00000 n 0000940382 00000 n 0000937051 00000 n @@ -20698,7 +20673,7 @@ xref 0000954032 00000 n 0000957302 00000 n 0000957367 00000 n -0001282096 00000 n +0001282092 00000 n 0000960655 00000 n 0000959945 00000 n 0000957561 00000 n @@ -20739,7 +20714,7 @@ xref 0000978402 00000 n 0000978467 00000 n 0000978532 00000 n -0001282221 00000 n +0001282217 00000 n 0000981945 00000 n 0000981366 00000 n 0000978767 00000 n @@ -20787,7 +20762,7 @@ xref 0000998258 00000 n 0000998323 00000 n 0000998388 00000 n -0001282346 00000 n +0001282342 00000 n 0001001406 00000 n 0001001215 00000 n 0000998596 00000 n @@ -20833,7 +20808,7 @@ xref 0001015238 00000 n 0001018685 00000 n 0001018750 00000 n -0001282471 00000 n +0001282467 00000 n 0001021718 00000 n 0001021462 00000 n 0001018944 00000 n @@ -20869,7 +20844,7 @@ xref 0001039940 00000 n 0001040005 00000 n 0001040069 00000 n -0001282596 00000 n +0001282592 00000 n 0001043995 00000 n 0001043416 00000 n 0001040304 00000 n @@ -20927,7 +20902,7 @@ xref 0001058861 00000 n 0001058925 00000 n 0001058990 00000 n -0001282721 00000 n +0001282717 00000 n 0001061941 00000 n 0001061166 00000 n 0001059197 00000 n @@ -20961,41 +20936,41 @@ xref 0001065520 00000 n 0001076864 00000 n 0001084453 00000 n -0001086754 00000 n -0001086723 00000 n -0001090442 00000 n -0001103238 00000 n -0001112905 00000 n -0001123821 00000 n -0001138069 00000 n -0001158105 00000 n -0001179177 00000 n -0001201489 00000 n -0001219747 00000 n -0001222599 00000 n -0001222369 00000 n -0001250386 00000 n -0001277852 00000 n -0001282828 00000 n -0001282953 00000 n -0001283079 00000 n -0001283205 00000 n -0001283331 00000 n -0001283457 00000 n -0001283583 00000 n -0001283693 00000 n -0001306804 00000 n -0001333221 00000 n -0001333262 00000 n -0001333302 00000 n -0001333436 00000 n +0001086753 00000 n +0001086722 00000 n +0001090439 00000 n +0001103236 00000 n +0001112902 00000 n +0001123818 00000 n +0001138066 00000 n +0001158102 00000 n +0001179174 00000 n +0001201485 00000 n +0001219743 00000 n +0001222595 00000 n +0001222365 00000 n +0001250382 00000 n +0001277848 00000 n +0001282824 00000 n +0001282949 00000 n +0001283075 00000 n +0001283201 00000 n +0001283327 00000 n +0001283453 00000 n +0001283579 00000 n +0001283689 00000 n +0001306800 00000 n +0001333217 00000 n +0001333258 00000 n +0001333298 00000 n +0001333432 00000 n trailer << /Size 3030 /Root 3028 0 R /Info 3029 0 R -/ID [<2333F62927A56EAA4D6BA3713B616381> <2333F62927A56EAA4D6BA3713B616381>] +/ID [<228C33F8686D3AC08AB34D15966FA62D> <228C33F8686D3AC08AB34D15966FA62D>] >> startxref -1333694 +1333690 %%EOF diff --git a/util/copyrights b/util/copyrights index e31b759258..d13d97e68c 100644 --- a/util/copyrights +++ b/util/copyrights @@ -2443,6 +2443,10 @@ ./contrib/nslint-3.0a2/savestr.h X 2001,2014 ./contrib/nslint-3.0a2/strerror.c X 2001,2014 ./contrib/nslint-3.0a2/version.h X 2014 +./contrib/perftcpdns/Makefile.in MAKE 2014 +./contrib/perftcpdns/configure X 2014 +./contrib/perftcpdns/configure.in SH 2014 +./contrib/perftcpdns/perftcpdns.c C 2013,2014 ./contrib/query-loc-0.4.0/ADDRESSES X 2008 ./contrib/query-loc-0.4.0/ALGO X 2008 ./contrib/query-loc-0.4.0/INSTALL X 2008 diff --git a/version b/version index 72d2969144..e32cc67249 100644 --- a/version +++ b/version @@ -6,6 +6,6 @@ DESCRIPTION= MAJORVER=9 MINORVER=10 PATCHVER=0 -RELEASETYPE=rc -RELEASEVER=1 +RELEASETYPE= +RELEASEVER= EXTENSIONS=