From ae1912cb0d494b48d514d937826c9fe83ec96c4d Mon Sep 17 00:00:00 2001 From: Daniel Stenberg Date: Wed, 29 Dec 1999 14:20:26 +0000 Subject: [PATCH] Initial revision --- CHANGES | 1656 ++++++++++++++++++ CONTRIBUTE | 68 + FAQ | 31 + FEATURES | 72 + FILES | 47 + INSTALL | 195 +++ LEGAL | 21 + MPL-1.0.txt | 360 ++++ Makefile | 426 +++++ Makefile.am | 13 + Makefile.dist | 78 + Makefile.in | 426 +++++ README | 28 + README.curl | 611 +++++++ README.libcurl | 108 ++ RESOURCES | 62 + TODO | 87 + acconfig.h | 12 + aclocal.m4 | 127 ++ config-win32.h | 168 ++ config.cache | 86 + config.guess | 997 +++++++++++ config.guess-991124 | 900 ++++++++++ config.h | 220 +++ config.h.in | 219 +++ config.log | 90 + config.status | 492 ++++++ config.sub | 979 +++++++++++ config.sub-991124 | 952 +++++++++++ configure | 3091 ++++++++++++++++++++++++++++++++++ configure.in | 210 +++ curl-6.3.1.tar.gz | Bin 0 -> 242680 bytes curl-ssl.spec | 52 + curl.1 | 402 +++++ curl.beos-patch | 695 ++++++++ curl.spec | 52 + curl_631_general.patch | 1265 ++++++++++++++ curl_63_form.patch | 92 + curl_63_partialdl.patch | 106 ++ head | 7 + include/README | 15 + include/curl/curl.beos-patch | 46 + include/curl/curl.h | 434 +++++ include/curl/getdate.h | 0 include/curl/mprintf.h | 93 + include/curl/stdcheaders.h | 53 + install-sh | 250 +++ lib/Makefile | 282 ++++ lib/Makefile.am | 31 + lib/Makefile.in | 282 ++++ lib/Makefile.m32 | 67 + lib/Makefile.vc6 | 315 ++++ lib/arpa_telnet.h | 319 ++++ lib/base64.c | 94 ++ lib/base64.h | 44 + lib/cookie.c | 457 +++++ lib/cookie.h | 45 + lib/dict.c | 245 +++ lib/dict.h | 45 + lib/download.c | 484 ++++++ lib/download.h | 50 + lib/escape.c | 111 ++ lib/escape.h | 49 + lib/file.c | 175 ++ lib/file.h | 45 + lib/formdata | Bin 0 -> 23808 bytes lib/formdata.c | 617 +++++++ lib/formdata.h | 103 ++ lib/ftp.c | 1046 ++++++++++++ lib/ftp.h | 52 + lib/getdate.c | 2101 +++++++++++++++++++++++ lib/getdate.h | 46 + lib/getdate.y | 1051 ++++++++++++ lib/getenv.c | 95 ++ lib/getenv.h | 71 + lib/getpass.c | 185 ++ lib/getpass.h | 1 + lib/hostip.c | 111 ++ lib/hostip.h | 46 + lib/http.c | 381 +++++ lib/http.h | 45 + lib/if2ip.c | 110 ++ lib/if2ip.h | 50 + lib/ldap.c | 226 +++ lib/ldap.h | 45 + lib/mprintf.c | 1253 ++++++++++++++ lib/netrc.c | 182 ++ lib/netrc.h | 70 + lib/progress.c | 221 +++ lib/progress.h | 54 + lib/sendf.c | 115 ++ lib/sendf.h | 47 + lib/setup.h | 169 ++ lib/speedcheck.c | 81 + lib/speedcheck.h | 50 + lib/ssluse.c | 265 +++ lib/ssluse.h | 46 + lib/sta01005 | Bin 0 -> 1024 bytes lib/sta18057 | Bin 0 -> 461824 bytes lib/telnet.c | 937 +++++++++++ lib/telnet.h | 45 + lib/timeval.c | 93 + lib/timeval.h | 64 + lib/upload.c | 178 ++ lib/upload.h | 46 + lib/url.c | 1181 +++++++++++++ lib/url.h | 0 lib/urldata.h | 212 +++ lib/version.c | 86 + maketgz | 152 ++ missing | 188 +++ mkinstalldirs | 40 + perl/README | 33 + perl/checklinks.pl | 336 ++++ perl/checklinks.pl.in | 336 ++++ perl/formfind.pl | 273 +++ perl/formfind.pl.in | 273 +++ perl/getlinks.pl | 261 +++ perl/getlinks.pl.in | 261 +++ perl/recursiveftpget.pl | 67 + perl/recursiveftpget.pl.in | 67 + reconf | 16 + src/Makefile | 334 ++++ src/Makefile.am | 27 + src/Makefile.in | 334 ++++ src/Makefile.m32 | 65 + src/Makefile.vc6 | 68 + src/config-win32.h | 12 + src/config.h | 13 + src/config.h.in | 12 + src/curl | Bin 0 -> 1830293 bytes src/hugehelp.c | 1049 ++++++++++++ src/main.c | 1154 +++++++++++++ src/mkhelp.pl | 85 + src/setup.h | 91 + src/stamp-h2 | 1 + src/stamp-h2.in | 1 + src/urlglob.c | 332 ++++ src/urlglob.h | 74 + src/version.h | 3 + stamp-h | 1 + stamp-h.in | 1 + stamp-h1 | 1 + stamp-h1.in | 1 + 144 files changed, 37273 insertions(+) create mode 100644 CHANGES create mode 100644 CONTRIBUTE create mode 100644 FAQ create mode 100644 FEATURES create mode 100644 FILES create mode 100644 INSTALL create mode 100644 LEGAL create mode 100644 MPL-1.0.txt create mode 100644 Makefile create mode 100644 Makefile.am create mode 100644 Makefile.dist create mode 100644 Makefile.in create mode 100644 README create mode 100644 README.curl create mode 100644 README.libcurl create mode 100644 RESOURCES create mode 100644 TODO create mode 100644 acconfig.h create mode 100644 aclocal.m4 create mode 100644 config-win32.h create mode 100644 config.cache create mode 100755 config.guess create mode 100755 config.guess-991124 create mode 100644 config.h create mode 100644 config.h.in create mode 100644 config.log create mode 100755 config.status create mode 100755 config.sub create mode 100755 config.sub-991124 create mode 100755 configure create mode 100644 configure.in create mode 100644 curl-6.3.1.tar.gz create mode 100644 curl-ssl.spec create mode 100644 curl.1 create mode 100644 curl.beos-patch create mode 100644 curl.spec create mode 100644 curl_631_general.patch create mode 100644 curl_63_form.patch create mode 100644 curl_63_partialdl.patch create mode 100644 head create mode 100644 include/README create mode 100644 include/curl/curl.beos-patch create mode 100644 include/curl/curl.h create mode 100644 include/curl/getdate.h create mode 100644 include/curl/mprintf.h create mode 100644 include/curl/stdcheaders.h create mode 100755 install-sh create mode 100644 lib/Makefile create mode 100644 lib/Makefile.am create mode 100644 lib/Makefile.in create mode 100644 lib/Makefile.m32 create mode 100644 lib/Makefile.vc6 create mode 100644 lib/arpa_telnet.h create mode 100644 lib/base64.c create mode 100644 lib/base64.h create mode 100644 lib/cookie.c create mode 100644 lib/cookie.h create mode 100644 lib/dict.c create mode 100644 lib/dict.h create mode 100644 lib/download.c create mode 100644 lib/download.h create mode 100644 lib/escape.c create mode 100644 lib/escape.h create mode 100644 lib/file.c create mode 100644 lib/file.h create mode 100755 lib/formdata create mode 100644 lib/formdata.c create mode 100644 lib/formdata.h create mode 100644 lib/ftp.c create mode 100644 lib/ftp.h create mode 100644 lib/getdate.c create mode 100644 lib/getdate.h create mode 100644 lib/getdate.y create mode 100644 lib/getenv.c create mode 100644 lib/getenv.h create mode 100644 lib/getpass.c create mode 100644 lib/getpass.h create mode 100644 lib/hostip.c create mode 100644 lib/hostip.h create mode 100644 lib/http.c create mode 100644 lib/http.h create mode 100644 lib/if2ip.c create mode 100644 lib/if2ip.h create mode 100644 lib/ldap.c create mode 100644 lib/ldap.h create mode 100644 lib/mprintf.c create mode 100644 lib/netrc.c create mode 100644 lib/netrc.h create mode 100644 lib/progress.c create mode 100644 lib/progress.h create mode 100644 lib/sendf.c create mode 100644 lib/sendf.h create mode 100644 lib/setup.h create mode 100644 lib/speedcheck.c create mode 100644 lib/speedcheck.h create mode 100644 lib/ssluse.c create mode 100644 lib/ssluse.h create mode 100644 lib/sta01005 create mode 100644 lib/sta18057 create mode 100644 lib/telnet.c create mode 100644 lib/telnet.h create mode 100644 lib/timeval.c create mode 100644 lib/timeval.h create mode 100644 lib/upload.c create mode 100644 lib/upload.h create mode 100644 lib/url.c create mode 100644 lib/url.h create mode 100644 lib/urldata.h create mode 100644 lib/version.c create mode 100755 maketgz create mode 100755 missing create mode 100755 mkinstalldirs create mode 100644 perl/README create mode 100644 perl/checklinks.pl create mode 100755 perl/checklinks.pl.in create mode 100644 perl/formfind.pl create mode 100755 perl/formfind.pl.in create mode 100644 perl/getlinks.pl create mode 100755 perl/getlinks.pl.in create mode 100644 perl/recursiveftpget.pl create mode 100755 perl/recursiveftpget.pl.in create mode 100755 reconf create mode 100644 src/Makefile create mode 100644 src/Makefile.am create mode 100644 src/Makefile.in create mode 100644 src/Makefile.m32 create mode 100644 src/Makefile.vc6 create mode 100644 src/config-win32.h create mode 100644 src/config.h create mode 100644 src/config.h.in create mode 100755 src/curl create mode 100644 src/hugehelp.c create mode 100644 src/main.c create mode 100644 src/mkhelp.pl create mode 100644 src/setup.h create mode 100644 src/stamp-h2 create mode 100644 src/stamp-h2.in create mode 100644 src/urlglob.c create mode 100644 src/urlglob.h create mode 100644 src/version.h create mode 100644 stamp-h create mode 100644 stamp-h.in create mode 100644 stamp-h1 create mode 100644 stamp-h1.in diff --git a/CHANGES b/CHANGES new file mode 100644 index 000000000..34cc7bf83 --- /dev/null +++ b/CHANGES @@ -0,0 +1,1656 @@ + _ _ ____ _ + ___| | | | _ \| | + / __| | | | |_) | | + | (__| |_| | _ <| |___ + \___|\___/|_| \_\_____| + + History of Changes + + +Version 6.4 + +Daniel (28 December 1999): + - Tim Verhoeven correctly identified that curl + doesn't support URL formatted file names when getting ftp. Now, there's a + problem with getting very weird file names off FTP servers. RFC 959 defines + that the file name syntax to use should be the same as in the native OS of + the server. Since we don't know the peer server system we currently just + translate the URL syntax into plain letters. It is still better and with + the solaris 2.6-supplied ftp server it works with spaces in the file names. + +Daniel (27 December 1999): + - When curl parsed cookies straight off a remote site, it corrupted the input + data, which, if the downloaded headers were stored made very odd characters + in the saved data. Correctfully identified and reported by Paul Harrington + . + +Daniel (13 December 1999): + - General cleanups in the library interface. There had been some bad kludges + added during times of stress and I did my best to clean them off. It was + both regarding the lib API as well as include file confusions. + +Daniel (3 December 1999): + - A small --stderr bug was reported by Eetu Ojanen ... + + - who also brought the suggestion of extending the -X flag to ftp list as + well. So, now it is and the long option is now --request instead. It is + only for ftp list for now (and the former http stuff too of course). + +Lars J. Aas (24 November 1999): + - Patched curl to compile and build under BeOS. Doesn't work yet though! + + - Corrected the Makefile.am files to allow putting object files in + different directories than the sources. + +Version 6.3.1 + +Daniel (23 November 1999): + - I've had this major disk crash. My good old trust-worthy source disk died + along with the machine that hosted it. Thank goodness most of all the + things I've done are either backed up elsewhere or stored in this CVS + server! + + - Michael S. Steuer pointed out a bug in the -F handling + that made curl hang if you posted an empty variable such as '-F name='. It + was one of those old bugs that never have worked properly... + + - Jason Baietto pointed out a general flaw in the HTTP + download. Curl didn't complain if it was prematurely aborted before the + entire download was completed. It does now. + +Daniel (19 November 1999): + - Chris Maltby very accurately criticized the lack of + return code checks on the fwrite() calls. I did a thorough check for all + occurrences and corrected this. + +Daniel (17 November 1999): + - Paul Harrington pointed out that the -m/--max-time option + doesn't work for the slow system calls like gethostbyname()... I don't have + any good fix yet, just a slightly less bad one that makes curl exit hard + when the timeout is reached. + + - Bjorn Reese helped me point out a possible problem that might be the reason + why Thomas Hurst experience problems in his Amiga version. + + Daniel (12 November 1999): + - I found a crash in the new cookie file parser. It crashed when you gave + a plain http header file as input... + +Version 6.3 + + Daniel (10 November 1999): + - I kind of found out that the HTTP time-conditional GETs (-z) aren't always + respected by the web server and the document is therefore sent in whole + again, even though it doesn't match the requested condition. After reading + section 13.3.4 of RFC 2616, I think I'm doing the right thing now when I do + my own check as well. If curl thinks the condition isn't met, the transfer + is aborted prematurely (after all the headers have been received). + + - After comments from Robert Linden I + also rewrote some parts of the man page to better describe how the -F + works. + + - Michael Anti put up a new curl download mirror in + China: http://www.pshowing.com/curl/ + + - I added the list of download mirrors to the README file + + - I did add more explanations to the man page + + Daniel (8 November 1999): + - I made the -b/--cookie option capable of reading netscape formatted cookie + files as well as normal http-header files. It should be able to + transparantly figure out what kind of file it got as input. + + Daniel (29 October 1999): + - Another one of Sebastiaan van Erk's ideas (that has been requested before + but I seem to have forgotten who it was), is to add support for ranges in + FTP downloads. As usual, one request is just a request, when they're two + it is a demand. I've added simple support for X-Y style fetches. X has to + be the lower number, though you may omit one of the numbers. Use the -r/ + --range switch (previously HTTP-only). + + - Sebastiaan van Erk suggested that curl should be + able to show the file size of a specified file. I think this is a splendid + idea and the -I flag is now working for FTP. It displays the file size in + this manner: + Content-Length: XXXX + As it resembles normal headers, and leaves us the opportunity to add more + info in that display if we can come up with more in the future! It also + makes sense since if you access ftp through a HTTP proxy, you'd get the + file size the same way. + + I changed the order of the QUOTE command execusions. They're now executed + just after the login and before any other command. I made this to enable + quote commands to run before the -I stuff is done too. + + - I found out that -D/--dump-header and -V/--version weren't documented in + the man page. + + - Many HTTP/1.1 servers do not support ranges. Don't ask me why. I did add + some text about this in the man page for the range option. The thread in + the mailing list that started this was initiated by Michael Anti + . + + - I get reports about nroff crashes on solaris 2.6+ when displaying the curl + man page. Switch to gnroff instead, it is reported to work(!). Adam Barclay + reported and brought the suggestion. + + - In a dialogue with Johannes G. Kristinsson we came + up with the idea to let -H/--header specified headers replace the + internally generated headers, if you happened to select to add a header + that curl normally uses by itself. The advantage with this is not entirely + obvious, but in Johannes' case it means that he can use another Host: than + the one curl would set. + + Daniel (27 October 1999): + - Jongki Suwandi brought a nice patch for + (yet another) crash when following a location:. This time you had to + follow a https:// server's redirect to get the core. + +Version 6.2 + + Daniel (21 October 1999): + - I think I managed to remove the suspicious (nil) that has been seen just + before the "Host:" in HTTP requests when -v was used. + - I found out that if you followed a location: when using a proxy, without + having specified http:// in the URL, the protocol part was added once again + when moving to the next URL! (The protocol part has to be added to the + URL when going through a proxy since it has no protocol-guessing system + such as curl has.) + - Benjamin Ritcey reported a core dump under solaris 2.6 + with OpenSSL 0.9.4. It turned out this was due to a bad free() in main.c + that occurred after the download was done and completed. + - Benjamin found ftp downloads to show the first line of the download meter + to get written twice, and I removed that problem. It was introduced with + the multiple URL support. + - Dan Zitter correctly pointed out that curl 6.1 and + earlier versions didn't honor RFC 2616 chapter 4 section 2, "Message + Headers": "...Field names are case-insensitive..." + HTTP header parsing assumed a certain casing. Dan also provided me with + a patch that corrected this, which I took the liberty of editing slightly. + - Dan Zitter also provided a nice patch for config.guess to better recognize + the Mac OS X + - Dan also corrected a minor problem in the lib/Makefile that caused linking + to fail on OS X. + + Daniel (19 October 1999): + - Len Marinaccio came up with some problems with curl. + Since Windows has a crippled shell, it can't redirect stderr and that + causes trouble. I added --stderr today which allows the user to redirect + the stderr stream to a file or stdout. + + Daniel (18 October 1999): + - The configure script now understands the '--without-ssl' flag, which now + totally disable SSL/https support. Previously it wasn't possible to force + the configure script to leave SSL alone. The previous functionality has + been retained. Troy Engel helped test this new one. + +Version 6.1 + + Daniel (17 October 1999): + - I ifdef'ed or commented all the zlib stuff in the sources and configure + script. It turned out we needed to mock more with zlib than I initially + thought, to make it capable of downloading compressed HTTP documents and + uncompress them on the fly. I didn't mean the zlib parts of curl to become + more than minor so this means I halt the zlib expedition for now and wait + until someone either writes the code or zlib gets updated and better + adjusted for this kind of usage. I won't get into details here, but a + short a summary is suitable: + - zlib can't automatically detect whether to use zlib or gzip + decompression methods. + - zlib is very neat for reading gzipped files from a file descriptor, + although not as nice for reading buffer-based data such as we would + want it. + - there are still some problems with the win32 version when reading from + a file descriptor if that is a socket + + Daniel (14 October 1999): + - Moved the (external) include files for libcurl into a subdirectory named + curl and adjusted all #include lines to use to maintain a + better name space and control of the headers. This has been requested. + + Daniel (12 October 1999): + - I modified the 'maketgz' script to perform a 'make' too before a release + archive is put together in an attempt to make the time stamps better and + hopefully avoid the double configure-running that use to occur. + + Daniel (11 October 1999): + - Applied Jörn's patches that fixes zlib for mingw32 compiles as well as + some other missing zlib #ifdef and more text on the multiple URL docs in + the man page. + +Version 6.1beta + + Daniel (6 October 1999): + - Douglas E. Wegscheid sent me a patch that made the + exact same thing as I just made: the -d switch is now capable of reading + post data from a named file or stdin. Use it similarly to the -F. To read + the post data from a given file: + + curl -d @path/to/filename www.postsite.com + + or let curl read it out from stdin: + + curl -d @- www.postit.com + + Jörn Hartroth (3 October 1999): + - Brought some more patches for multiple URL functionality. The MIME + separation ideas are almost scrapped now, and a custom separator is being + used instead. This is still compile-time "flagged". + + Daniel + - Updated curl.1 with multiple URL info. + + Daniel (30 September 1999): + - Felix von Leitner brought openssl-check fixes + for configure.in to work out-of-the-box when the openssl files are + installed in the system default dirs. + + Daniel (28 September 1999) + - Added libz functionality. This should enable decompressing gzip, compress + or deflate encoding HTTP documents. It also makes curl send an accept that + it accepts that kind of encoding. Compressed contents usually shortens + download time. I *need* someone to tell me a site that uses compressed HTTP + documents so that I can test this out properly. + + - As a result of the adding of zlib awareness, I changed the version string + a little. I plan to add openldap version reporting in there too. + + Daniel (17 September 1999) + - Made the -F option allow stdin when specifying files. By using '-' instead + of file name, the data will be read from stdin. + +Version 6.0 + + Daniel (13 September 1999) + - Added -X/--http-request to enable any HTTP command to be sent. + Do not that your server has to support the exact string you enter. This + should possibly a string like DELETE or TRACE. + + - Applied Douglas' mingw32-fixes for the makefiles. + + Daniel (10 September 1999) + - Douglas E. Wegscheid pointed out a problem. Curl + didn't check the FTP servers return code properly after the --quote + commands were issued. It took anything non 200 as an error, when all 2XX + codes should be accepted as OK. + + - Sending cookies to the same site in multiple lines like curl used to do + turned out to be bad and breaking the cookie specs. Curl now sends all + cookies on a single Cookie: line. Curl is not yet RFC 2109 compliant, but I + doubt that many servers do use that syntax (yet). + + Daniel (8 September 1999) + - Jörn helped me make sure it still compiles nicely with mingw32 under win32. + + Daniel (7 September 1999) + - FTP upload through proxy is now turned into a HTTP PUT. Requested by + Stefan Kanthak . + + - Added the ldap files to the .m32 makefile. + + Daniel (3 September 1999) + - Made cookie matching work while using HTTP proxy. + + Bjorn Reese (31 August 1999) + - Passed his ldap:// patch. Note that this requires the openldap shared + library to be installed and that LD_LIBRARY_PATH points to the + directory where the lib will be found when curl is run with a + ldap:// URL. + + Jörn Hartroth (31 August 1999) + - Made the Mingw32 makefiles into single files. + - Made file:// work for Win32. The same code is now used for unix as well for + performance reasons. + + Douglas E. Wegscheid (30 August 1999) + - Patched the Mingw32 makefiles for SSL builds. + + Matthew Clarke (30 August 1999) + - Made a cool patch for configure.in to allow --with-ssl to specify the + root dir of the openssl installation, as in + + ./configure --with-ssl=/usr/ssl_here + + - Corrected the 'reconf' script to work better with some shells. + + Jörn Hartroth (26 August 1999) + - Fixed the Mingw32 makefiles in lib/ and corrected the file.c for win32 + compiles. + +Version 5.11 + + Daniel (25 August 1999) + - John Weismiller pointed out a bug in the header-line + realloc() system in download.c. + + - I added lib/file.[ch] to offer a first, simple, file:// support. It + probably won't do much good on win32 system at this point, but I see it + as a start. + + - Made the release archives get a Makefile in the root dir, which can be + used to start the compiling/building process easier. I haven't really + changed any INSTALL text yet, I wanted to get some feed-back on this + first. + + Daniel (17 August 1999) + - Another Location: bug. Curl didn't do proper relative locations if the + original URL had cgi-parameters that contained a slash. Nusu's page + again. + + - Corrected the NO_PROXY usage. It is a list of substrings that if one of + them matches the tail of the host name it should connect to, curl should + not use a proxy to connect there. Pointed out to me by Douglas E. Wegscheid + . I also changed the README text a little regarding + this. + + Daniel (16 August 1999) + - Fixed a memory bug with http-servers that sent Location: to a Location: + page. Nusu's page showed this too. + + - Made cookies work a lot better. Setting the same cookie name several times + used to add more cookies instead of replacing the former one which it + should've. Nusu brought me an URL that made this + painfully visible... + + Troy (15 August 1999) + - Brought new .spec files as well as a patch for configure.in that lets the + configure script find the openssl files better, even when the include + files are in /usr/include/openssl + +Version 5.10 + + Daniel (13 August 1999) + - SSL_CTX_set_default_passwd_cb() has been modified in the 0.9.4 version of + OpenSSL. Now why couldn't they simply add a *new* function instead of + modifying the parameters of an already existing function? This way, we get + a compiler warning if compiling with 0.9.4 but not with earlier. So, I had + to come up with a #if contruction that deals with this... + + - Made curl output the SSL version number get displayed properly with 0.9.4. + + Troy (12 August 1999) + - Added MingW32 (GCC-2.95) support under Win32. The INSTALL file was also + a bit rearranged. + + Daniel (12 August 1999) + - I had to copy a good include file into the curl source + tree to enable the silly win32 systems to compile. The distribution rights + allows us to do that as long as the file remains unmodified. + + - I corrected a few minor things that made the compiler complain when + -Wall -pedantic was used. + + - I'm moving the official curl web page to http://curl.haxx.nu. I think it + will make it easier to remember as it is a lot shorter and less cryptic. + The old one still works and shows the same info. + + Daniel (11 August 1999) + - Albert Chin-A-Young mailed me another correction for NROFF in the + configure.in that is supposed to be better for IRIX users. + + Daniel (10 August 1999) + - Albert Chin-A-Young helped me with some stupid + Makefile things, as well as some fiddling with the getdate.c + stuff that he had problems with under HP-UX v10. getdate.y will now be + compiled into getdate.c if the appropriate yacc or bison is found by the + configure script. Since this is slightly new, we need to test the output + getdate.c with win32 systems to make sure it still compiles there. + + Daniel (5 August 1999) + - I've just setup a new mailing list with the intention to keep discussions + around libcurl development in it. I mainly expect it to be for thoughts and + brainstorming around a "next generation" library, rather than nitpicking + about the current implementation or details in the current libcurl. + + To join our happy bunch of future-looking geeks, enter 'subscribe +
' in the body of a mail and send it to + libcurl-request@listserv.fts.frontec.se. Curl bug reports, the usual curl + talk and everything else should still be kept in this mailing list. I've + started to archive this mailing list and have put the libcurl web page at + www.fts.frontec.se/~dast/libcurl/. + + - Stefan Kanthak contacted me regarding a + few problems in the configure script which he discovered when trying to + make curl compile and build under Siemens SINIX-Z V5.42B2004! + + - Marcus Klein very accurately informed me that + src/version.h was not present in the CVS repository. Oh, how silly... + + - Linus Nielsen rewrote the telnet:// part and + now curl offers limited telnet support. If you run curl like 'curl + telnet://host' you'll get all output on the screen and curl will read input + from stdin. You'll be able to login and run commands etc, but since the + output is buffered, expect to get a little weird output. + + This is still in its infancy and it might get changed. We need your + feed-back and input in how this is best done. + + WIN32 NOTE: I bet we'll get problems when trying to compile the current + lib/telnet.c on win32, but I think we can sort them out in time. + + - David Sanderson reported that FORCE_ALLOCA_H or + HAVE_ALLOCA_H must be defined for getdate.c to compile properly on HP-UX + 11.0. I updated the configure script to check for alloca.h which should + make it. + + Daniel (4 August 1999) + - I finally got to understand Marcus Klein's ftp download resume problem, + which turns out to be due to different outputs from different ftp + servers. It makes ftp download resuming a little trickier, but I've made + some modifications I really believe will work for most ftp servers and I do + hope you report if you have problems with this! + + - Added text about file transfer resuming to README.curl. + + Daniel (2 August 1999) + - Applied a progress-bar patch from Lars J. Aas . It offers + a new styled progress bar enabled with -#/--progress-bar. + + T. Yamada (30 July 1999) + - It breaks with segfault when 1) curl is using .netrc to obtain + username/password (option '-n'), and 2) is auto-matically redirected to + another location (option '-L'). + + There is a small bug in lib/url.c (block starting from line 641), which + tries to take out username/password from user- supplied command-line + argument ('-u' option). This block is never executed on first attempt since + CONF_USERPWD bit isn't set at first, but curl later turns it on when it + checks for CONF_NETRC bit. So when curl tries to redo everything due to + redirection, it segfaults trying to access *data->userpwd. + +Version 5.9.1 + + Daniel (30 July 1999) + - Steve Walch pointed out that there is a memory leak in + the formdata functions. I added a FormFree() function that is now used and + supposed to correct this flaw. + + - Mark Wotton reported: + 'curl -L https://www.cwa.com.au/' core dumps. I managed to cure this by + correcting the cleanup procedure. The bug seems to be gone with my OpenSSL + 0.9.2b, although still occurs when I run the ~100 years old SSLeay 0.8.0. I + don't know whether it is curl or SSLeay that is to blame for that. + + - Marcus Klein : + Reported an FTP upload resume bug that I really can't repeat nor understand. + I leave it here so that it won't be forgotten. + + Daniel (29 July 1999) + - Costya Shulyupin suggested support for longer URLs + when following Location: and I could only agree and fix it! + + - Leigh Purdie found a problem in the upload/POST + department. It turned out that http.c accidentaly cleared the pointer + instead of the byte counter when supposed to. + + - Costya Shulyupin pointed out a problem with port + numbers and Location:. If you had a server at a non-standard port that + redirected to an URL using a standard port number, curl still used that + first port number. + + - Ralph Beckmann pointed out a problem when using both + CONF_FOLLOWLOCATION and CONF_FAILONERROR simultaneously. Since the + CONF_FAILONERROR exits on the 302-code that the follow location header + outputs it will never show any html on location: pages. I have now made it + look for >=400 codes if CONF_FOLLOWLOCATION is set. + + - 'struct slist' is now renamed to 'struct curl_slist' (as suggested by Ralph + Beckmann). + + - Joshua Swink and Rick Welykochy + were the first to point out to me that the latest OpenSSL package now have + moved the standard include path. It is now in + /usr/local/ssl/include/openssl and I have now modified the --enable-ssl + option for the configure script to use that as the primary path, and I + leave the former path too to work with older packages of OpenSSL too. + + Daniel (9 June 1999) + - I finally understood the IRIX problem and now it seem to compile on it! + I am gonna remove those #define strcasecmp() things once and for all now. + + Daniel (4 June 1999) + - I adjusted the FTP reply 227 parser to make the PASV command work better + with more ftp servers. Appearantly the Roxen Challanger server replied + something curl 5.9 could deal with! :-( Reported by Ashley Reid-Montanaro + and Mark Butler brought a + solution for it. + + Daniel (26 May 1999) + - Rearranged. README is new, the old one is now README.curl and I added a + README.libcurl with text I got from Ralph Beckmann . + + - I also updated the INSTALL text. + + Daniel (25 May 1999) + - David Jonathan Lowsky correctly pointed out + that curl didn't properly deal with form posting where the variable + shouldn't have any content, as in curl -F "form=" www.site.com. It was + now fixed. + +Version 5.9 + + Daniel (22 May 1999) + - I've got a bug report from Aaron Scarisbrick in + which he states he has some problems with -L under FreeBSD 3.0. I have + previously got another bug report from Stefan Grether + which points at an error with similar sympthoms + when using win32. I made the allocation of the new url string a bit faster + and different, don't know if it actually improves anything though... + + Daniel (20 May 1999) + - Made the cookie parser deal with CRLF newlines too. + + Daniel (19 May 1999) + - Download() didn't properly deal with failing return codes from the + sread() function. Adam Coyne found the problem in the + win32 version, and Troy Engel helped me out isolating it. + + Daniel (16 May 1999) + - Richard Adams pointed out a bug I introduced in + 5.8. --dump-header doesn't work anymore! :-/ I fixed it now. + + - After a suggestion by Joshua Swink I added -S / + --show-error to force curl to display the error message in case of an + error, even if -s/--silent was used. + + Daniel (10 May 1999) + - I moved the stuff concerning HTTP, DICT and TELNET it their own source + files now. It is a beginning on my clean-up of the sources to make them + layer all those protocols better to enable more to be added easier in the + future! + + - Leon Breedt sent me some files I've not put into the main + curl archive. They're for creating the Debian package thingie. He also sent + me a debian package that I've made available for download at the web page + + Daniel (9 May 1999) + - Made it compile on cygwin too. + + Troy Engel (7 May 1999) + - Brought a series of patches to allow curl to compile smoothly on MSVC++ 6 + again! + + Daniel (6 May 1999) + - I changed the #ifdef HAVE_STRFTIME placement for the -z code so that it + will be easier to discover systems that don't have that function and thus + can't use -z successfully. Made the strftime() get used if WIN32 is defined + too. + +Version 5.8 + + Daniel (5 May 1999) + - I've had it with this autoconf/automake mess. It seems to work allright + for most people who don't have automake installed, but for those who have + there are problems all over. + + I've got like five different bug reports on this only the last + week... Claudio Neves and Federico Bianchi + and root are + some of them reporting this. + + Currently, I have no really good fix since I want to use automake myself to + generate the Makefile.in files. I've found out that the @SHELL@-problems + can often be fixed by manually invoking 'automake' in the archive root + before you run ./configure... I've hacked my maketgz script now to fiddle + a bit with this and my tests seem to work better than before at least! + + Daniel (4 May 1999) + - mkhelp.pl has been doing badly lately. I corrected a case problem in + the regexes. + + - I've now remade the -o option to not touch the file unless it needs to. + I had to do this to make -z option really fine, since now you can make a + curl fetch and use a local copy's time when downloading to that file, as + in: + + curl -z dump -o dump remote.site.com/file.html + + This will only get the file if the remote one is newer than the local. + I'm aware that this alters previous behaviour a little. Some scripts out + there may depend on that the file is always touched... + + - Corrected a bug in the SSLv2/v3 selection. + + - Felix von Leitner requested that curl should + be able to send "If-Modified-Since" headers, which indeed is a fair idea. + I implemented it right away! Try -z where expression is a full + GNU date expression or a file name to get the date from! + + Stephan Lagerholm (30 Apr 1999) + - Pointed out a problem with the src/Makefile for FreeBSD. The RM variable + isn't set and causes the make to fail. + + Daniel (26 April 1999) + - Am I silly or what? pointed out to me that the + curl version number was not set properly. Hasn't been since 5.6. This was + due to a bug in my maketgz script! + + David Eriksson (25 Apr 1999) + - Found a bug in cookies.c that made it crash at times. + +Version 5.7.1 + + Doug Kaufman (23 Apr 1999) + - Brought two sunos 4 fixes. One of them being the hostip.c fix mentioned + below and the other one a correction in include/stdcheaders.h + + - Added a paragraph about compiling with the US-version of openssl to the + INSTALL file. + + Daniel + - New mailing list address. Info updated on the web page as well as in the + README file + + Greg Onufer (20 Apr 1999) + - hostip.c didn't compile properly on SunOS 5.5.1. + It needs an #include + +Version 5.7 + + Daniel (Apr 20 1999) + - Decided to upload a non-beta version right now! + + - Made curl support any-length HTTP headers. The destination buffer is now + simply enlarged every time it turns out to be too small! + + - Added the FAQ file to the archive. Still a bit smallish, but it is a + start. + + Eric Thelin (15 Apr 1999) + - Made -D accept '-' instead of filename to write to stdout. + +Version 5.6.3beta + + Daniel (Apr 12 1999) + + - Changed two #ifdef WIN32 to better #ifdef when connect()ing + in url.c and ftp.c. Makes cygwin32 deal with them better too. We should + try to get some decent win32-replacement there. Anyone? + + - The old -3/--crlf option is now ONLY --crlf! + + - I changed the "SSL fix" to a more lame one, but that doesn't remove as + much functionality. Now I've enabled the lib to select what SSL version it + should try first. Appearantly some older SSL-servers don't like when you + talk v3 with them so you need to be able to force curl to talk v2 from the + start. The fix dated April 6 and posted on the mailing list forced curl to + use v2 at all times using a modern OpenSSL version, but we don't really + want such a crippled solution. + + - Marc Boucher sent me a patch that corrected a math error + for the "Curr.Speed" progress meter. + + - Eric Thelin sent me a patch that enables '-K -' + to read a config file from stdin. + + - I found out we didn't close the file properly before so I added it! + + Daniel (Apr 9 1999) + - Yu Xin pointed out a problem with ftp download resume. + It didn't work at all! ;-O + + Daniel (Apr 6 1999) + - Corrected the version string part generated for the SSL version. + + - I found a way to make some other SSL page work with openssl 0.9.1+ that + previously didn't (ssleay 0.8.0 works with it though!). Trying to get + some real info from the OpenSSL guys to see how I should do to behave the + best way. SSLeay 0.8.0 shouldn't be that much in use anyway these days! + +Version 5.6.2beta + + Daniel (Apr 4 1999) + - Finally have curl more cookie "aware". Now read carefully. This is how + it works. + To make curl read cookies from an already existing file, in plain header- + format (like from the headers of a previous fetch) invoke curl with the + -b flag like: + + curl -b file http://site/foo.html + + Curl will then use all cookies it finds matching. The old style that sets + a single cookie with -b is still supported and is used if the string + following -b includes a '=' letter, as in "-b name=daniel". + + To make curl read the cookies sent in combination with a location: (which + sites often do) point curl to read a non-existing file at first (i.e + to start with no existing cookies), like: + + curl -b nowhere http://site/setcookieandrelocate.html + + - Added a paragraph in the TODO file about the SSL problems recently + reported. Evidently, some kind of SSL-problem curl may need to address. + + - Better "Location:" following. + + Douglas E. Wegscheid (Tue, 30 Mar 1999) + - A subsecond display patch. + + Daniel (Mar 14 1999) + - I've separated the version number of libcurl and curl now. To make + things a little easier, I decided to start the curl numbering from + 5.6 and the former version number known as "curl" is now the one + set for libcurl. + + - Removed the 'enable-no-pass' from configure, I doubt anyone wanted + that. + + - Made lots of tiny adjustments to compile smoothly with cygwin under + win32. It's a killer for porting this to win32, bye bye VC++! ;-) + Compiles and builds out-of-the-box now. See the new wordings in + INSTALL for details. + + - Beginning experiments with downloading multiple document from a http + server while remaining connected. + +Version 5.6beta + + Daniel (Mar 13 1999) + - Since I've changed so much, I thought I'd just go ahead and implement + the suggestion from Douglas E. Wegscheid . -D or + --dump-header is now storing HTTP headers separately in the specified + file. + + - Added new text to INSTALL on what to do to build this on win32 now. + + - Aaargh. I had to take a step back and prefix the shared #include files + in the sources with "../include/" to please VC++... + + Daniel (Mar 12 1999) + - Split the url.c source into many tiny sources for better readability + and smaller size. + + Daniel (Mar 11 1999) + - Started to change stuff for a move to make libcurl and a more separate + curl application that uses the libcurl. Made the libcurl sources into + the new lib directory while the curl application will remain in src as + before. New makefiles, adjusted configure script and so. + + libcurl.a built quickly and easily. I better make a better interface to + the lib functions though. + + The new root dir include/ is supposed to contain the public information + about the new libcurl. It is a little ugly so far :-) + + + Daniel (Mar 1 1999) + - Todd Kaufmann sent me a good link to Netscape's + cookie spec as well as the info that RFC 2109 specifies how to use them. + The link is now in the README and the RFC in the RESOURCES. + + Daniel (Feb 23 1999) + - Finally made configure accept --with-ssl to look for SSL libs and includes + in the "standard" place /usr/local/ssl... + + Daniel (Feb 22 1999) + - Verified that curl linked fine with OpenSSL 0.9.1c which seems to be + the most recent. + + Henri Gomez (Fri Feb 5 1999) + - Sent in an updated curl-ssl.spec. I still miss the script that builds an + RPM automatically... + +Version 5.5.1 + + Mark Butler (27 Jan 1999) + - Corrected problems in Download(). + + Danitel Stenberg (25 Jan 1999) + - Jeremie Petit pointed out a few flaws in the + source that prevented it from compile warning free with the native + compiler under Digital Unix v4.0d. + +Version 5.5 + + Daniel Stenberg (15 Jan 1999) + - Added Bjorns small text to the README about the DICT protocol. + + Daniel Stenberg (11 Jan 1999) + - reported about the win32-versioin: "Doesn't use + ALL_PROXY environment variable". Turned out to be because of the static- + buffer nature of the win32 environment variable calls! + + Bjorn Reese (10 Jan 1999) + - I have attached a simple addition for the DICT protocol (RFC 2229). + It performs dictionary lookups. The output still needs to be better + formatted. + + To test it try (the exact format, and more examples are described in + the RFC) + + dict://dict.org/m:hello + dict://dict.org/m:hello::soundex + + + Vicente Garcia (10 Jan 1999) + - Corrected the progress meter for files larger than 20MB. + + Daniel Stenberg (7 Jan 1999) + - Corrected the -t and -T help texts. They claimed to be FTP only. + +Version 5.4 + + Daniel Stenberg + (7 Jan 1999) + - reported that curl -s didn't always supress the + progress reporting. It was the form post that autoamtically always switched + it on again. This is now corrected! + + (4 Jan 1999) + - Andreas Kostyrka suggested I'd add PUT and he helped me + out to test it. If you use -t or -T now on a http or https server, PUT will + be used for file upload. + + I removed the former use of -T with HTTP. I doubt anyone ever really used + that. + + (4 Jan 1999) + - Erik Jacobsen found a width bug in the mprintf() function. + I corrected it now. + + (4 Jan 1999) + - As John V. Chow pointed out to me, curl + accepted very limited URL sizes. It should now accept path parts that are + up to at least 4096 bytes. + + - Somehow I screwed up when applying the AIX fix from Gilbert Ramirez, so + I redid that now. + +Version 5.3a (win32 only) + + Troy Engel + - Corrected a win32 bug in the environment variable part. + +Version 5.3 + + Gilbert Ramirez Jr. (21 Dec 1998) + - I have implemented the "quote" function of FTP clients. It allows you to + send arbitrary commands to the remote FTP server. I chose the -Q/--quote + command-line arguments. + + You can have more than one quoted string, and curl will apply them in + order. This is what I use for my MVS upload: + + curl -B --crlf -Q "site lrecl=80" -Q "site blk=8000" -T file ftp://os390/test + + Curl will send the two quoted "site" commands in the proper order. + + - Made it compile smoothly on AIX. + + Gilbert Ramirez Jr. (18 Dec 1998) + - Brought an MVS patch: -3/--mvs, for ftp upload to the MVS ftp server. + + Troy Engel (17 Dec 1998) + - Brought a correction that fixes the win32 curl bug. + + Daniel Stenberg + - A bug, pointed out to me by Dr H. T. Leung , caused + curl to crash on the -A flag on certain systems. Actually, all systems + should've! + + - Added a few defines to make directories/file names get build nicer (with _ + instead of . and \ instead of / in win32). + + - steve reported a weird bug that occured if the + ftp server response line had a parenthesis on the line before the (size) + info. I hope it works better now! + +Version 5.2.1 + + Steven G. Johnson (Dec 14, 1998) + - Brought a fix that corrected a crash in 5.2 due to bad treatment of the + environment variables. + +Version 5.2 + + Daniel Stenberg (Dec 14, 1998) + - Rewrote the mkhelp script and now, the mkhelp.pl script generates the + hugehelp.c file from the README *and* the man page file curl.1. By using + both files, I no longer need to have double information in both the man + page and the README as well. So, win32-users will only have the hugehelp.c + file for all info, but then, they download the plain binary most times + anyway. + + - gcc2.8.1 with the -Wall flag complaints a lot on subscript has type `char' + if I don't explicitly typecast the argument to isdigit() or isspace() to + int. So I did to compile warning free with that too. + + - Added checks for 'long double' and 'long long' in the configure script. I + need those for the mprintf.c source to compile well on non long long + comforming systems! + +Version 5.1 (not publicly released) + + Daniel Stenberg (Dec 10, 1998) + - I got a request for a pre-compiled NT Alpha version. Anyone? + + - Added Lynx/CERN www lib proxy environment variable support. That means curl + now reads and understands the following environment variables: + + HTTP_PROXY, HTTPS_PROXY, FTP_PROXY, GOPHER_PROXY + + They should be set for protocol-specific proxies. General proxy should be + set with + + ALL_PROXY + + And a comma-separated list of host names that shouldn't go through any + proxy is set in (only an asterisk, '*' matches all hosts). + + NO_PROXY + + The usage of the -x/--proxy flag overrides the environment variables. + + - Proxy can now be specified with a procotol:// prefix. + + - Wrote the curl.1 man page. + + - Introduced a whole new dynamic buffer system for all sprintf()s. It is + based on the *printf() package by yours truly and Bjorn Reese. Hopefully, + there aren't that many buffer overflow risks left now. + + - Ah, I should mention I've compiled and built curl successfully under + solaris 2.6 with gcc now, gcc 2.7.2 won't work but 2.8.1 did ok. + + Oren Tirosh (Dec 3, 1998) + - Brought two .spec files, to use when creating (Linux) Redhat style RPM + packages. They're named curl.spec and curl-ssl.spec. + + Troy Engel + - Supplied the src/Makefile.vc6 for easy compiling with VC++ under Win32. + +Version 5.0 + + Daniel Stenberg (Dec 1, 1998) + - Not a single bug report in ages. + - Corrected getpass.c and main.c to compile warning and error free with the + Win32 VC++ crap. + +Version 5.0 beta 24 + + Daniel Stenberg (Nov 20, 1998) + + HOW TO BUILD A RELEASE ARCHIVE: + + * Pre-requisite software: + What To build what Reads data from + ==== ============= =============== + GNU automake Makefile.in, aclocal.m4 configure.in + GNU make(1) - " - + GNU gcc(1) - " - + GNU autoconf configure configure.in + GNU autoheader(2) config.h.in configure.in, acconfig.h + + * Make sure all files that should be part of the archive are put in FILES. + + * Run './maketgz' and enter version number of the new to become archive. + + maketgz does: + + - Enters the newly created version number in url.h. + - (If you don't have automake, this script will warn about that, but unless + you have changed the Makefile.am files, that is nothing to care about.) + If you have it, it'll run it. + - If you have autoconf, the configure.in will be edited to get the newly + created version number and autoconf will be run. + - Creates a new directory named curl-. (Actually, it uses the base + name of the current directory up to the first '-'.) + - Copies all files mentioned in FILES to the new directory. Saving + permissions and directory structure. + - Uses tar to create an archive of it all, named curl-.tar.gz + - gzips the archive + - Removes the new directory and all its contents. + + * When done, you have an archive stored in your directory named + curl-.tar.gz. + + Done! + + (1) They're required to make automake run properly. + (2) It is distributed as a part of the GNU autoconf archive. + + Daniel Stenberg (Nov 18, 1998) + - I changed the TAG-system. If you ever used urlget() from this package in + another product, you need to recompile with the new headers. I did this + new stuff to better deal with different compilers and system with different + variable sizes. I think it makes it a little more portable. This proves + to compile warning free with the problematic IRIX compiler! + - Win32 compiled with a silly error. Corrected now. + - Brian Chaplin reported yet another problem in + multiline FTP responses. I've tried to correct it. I mailed him a new + version and I hope he gets back soon with positive feedback! + - Improved the 'maketgz' to create a temporary directory tree which it makes + an archive from instead of the previous renaming of the current one. + - Mailing list opened (see README). + - Made -v more verbose on the PASV section of ftp transfers. Now it tells + host name and IP of the new host (and port number). I also added a section + about PORT vs PASV in the README. + +Version 5.0 beta 21 + + Angus Mackay (Nov 15, 1998) + - Introduced automake stuff. + + Daniel Stenberg (Nov 13, 1998) + - Just made a successful GET of a document from an SSL-server using my own + private certificate for authentication! The certificate has to be in PEM + format. You do that the easiest way (although not *that* easy) by + downloading the SSLyeay PKCS#12-patch by Dr Stephen N. Henson from his site + at: http://www.drh-consultancy.demon.co.uk/. Using his tool, you can + convert any modern Netscape or (even) MSIE certificate to PEM-format. Use + it with 'curl -E https://site.com'. If this isn't a + cool feature, then I don't know what cool features look like! ;-) + - Working slowly on telnet connections. #define TRY_TELNET to try it out. + (curl -u user:passwd "telnet://host.com/cat .login" is one example) I do + have problem to define how it should work. The prime purpose for this must + be to get (8bit clean) files via telnet, and it really isn't that easy to + get files this way. Still having problems with \n being converted to \r\n. + + Angus Mackay (Nov 12, 1998) + - Corrected another bug in the long parameter name parser. + - Modified getpass.c (NOTE: see the special licensing in the top of that + source file). + + Daniel Stenberg (Nov 12, 1998) + - We may have removed the silly warnings from url.c when compiled under IRIX. + Thanks again to Bjorn Reese and Martin Staael + . + - Wrote formfind.pl which is a new perl script intended to help you find out + how a FORM submission should be done. This needs a little more work to get + really good. + + Daniel Stenberg (Nov 11, 1998) + - Made the HTTP header-checker accept white spaces before the HTTP/1.? line. + Appearantly some proxies/sites add such at times (my test proxy did when I + downloaded a gopher page with it)! + - Moved the former -h to -M and made -h show the short help text instead. I + had to enable a forced help text option. Now an even shorter help text will + be presented when an unknown option and similar, is used. + - stdcheaders.h didn't work with IRIX 6.4 native cc compiler. I hope my + changes don't make other versions go nuts instead. + + Daniel Stenberg (Nov 10, 1998) + - Added a weird check in the configure script to check for the silly AIX + warnings about my #define strcasecmp() stuff. I do that define to prevent + me and other contributors to accidentaly use that function name instead + of strequal()... + - I bugfixed Angus's getpass.c very little. + - Fixed the verbose flag names to getopt-style, i.e 'curl --loc' will be + sufficient instead of --location as "loc" is a unique prefix. Also, anything + after a '--' is treated as an URL. So if you do have a host with a weeeird + name you can do 'curl -- -host.com'. + - Another getopt-adjust; curl now accepts flags after the URL on the command + line. 'curl www.foo.com -O' is perfectly valid. + - Corrected the .curlrc parser so that strtok() is no longer used and I + believe it works better. Even URLs can be specified in it now. + + Angus Mackay (Nov 9, 1998) + - Replaced getpass.c with a newly written one, not under GPL license + - Changed OS to a #define in config.h instead of compiler flag + - Makefile now uses -DHAVE_CONFIG_H + + Daniel Stenberg (Nov 9, 1998) + - Ok, I expanded the tgz-target to update the version string on each occation + I build a release archive! + - I reacted on Angus Mackay's initiative and remade the parameter parser to + be more getopt compliant. Curl now supports "merged" flags as in + curl -lsv ftp.site.com + Do note that I had to move three short-names of the options. Parameters + that needs an additional string such as -x must be stand-alone or the + last in a merged sequence: + curl -lsx my-proxy ftp.site.com + is ok, but using the flags in a different order like '-lxs' would cause + unexpected results (as the 's' option would be skipped). + - I've changed the headers in all files that are subject to the MozPL + license, as they are supposed to look like when conforming. + - Made the configure script make the config.h. The former config.h is now + setup.h. + - The RESOURCES and TODO files have been added to the archive. + + Angus Mackay (Nov 5, 1998) + - Fixed getpass.c and various configure stuff + + Daniel Stenberg (Nov 3, 1998) + - Use -H/--header for custom HTTP-headers. Lets you pass on your own + specified headers to the remote server. I wouldn't recommend trying to use + a header with a defined usage according to standards. Use this flag once + for every custom header you want to add. + - Use -B/--ftp-ascii to force ftp to use ASCII mode when transfering files. + - Corrected the 'getlinks.pl' script, I accidentally left my silly proxy + usage in there! Since the introduction of the .curlrc file, it is easier to + write scripts that use curl since proxies and stuff should be in the + .curlrc file anyway. + - Introducing the new -F flag for HTTP POST. It supports multipart/form-data + which means it is gonna be possible to upload files etc through HTTP POST. + Shiraz Kanga asked for the feature and my brother, + Björn Stenberg helped me design the user + interface for this beast. This feature requires quite some docs, + since it has turned out not only quite capable, but also complicated! :-) + - A note here, since I've received mail about it. SSLeay versions prior to + 0.8 will *not* work with curl! + - Wil Langford reported a bug that occurred since curl + did not properly use CRLF when issuing ftp commands. I fixed it. + - Rearranged the order config files are read. .curlrc is now *always* read + first and before the command line flags. -K config files then act as + additional config items. + - Use -q AS THE FIRST OPTION specified to prevent .curlrc from being read. + - You can now disable a proxy by using -x "". Useful if the .curlrc file + specifies a proxy and you wanna fetch something without going through + that. + - I'm thinking of dropping the -p support. Its really not useful since ports + could (and should?) be specified as : appended on the host name + instead, both in URLs and to proxy host names. + - Martin Staael reports curl -L bugs under Windows NT + (test with URL http://come.to/scsde). This bug is not present in this + version anymore. + - Added support for the weird FTP URL type= thing. You can download a file + using ASCII transfer by appending ";type=A" to the right of it. Other + available types are type=D for dir-list (NLST) and type=I for binary + transfer. I can't say I've ever seen anyone use this kind of URL though! + :-) + - Troy Engel pointed out a bug in my getenv("HOME") + usage for win32 systems. I introduce getenv.c to better cope with + this. Mr Engel helps me with the details around that... + - A little note to myself and others, I should make the win32-binary built + with SSL support... + - r-y-a-n/n-e-l-s-o-n sent me comments about building curl + with SSL under FreeBSD. See the Makefile for details. Using the configure + script, it should work better and automatically now... + - Cleaned up in the port number mess in the source. No longer stores and uses + proxy port number separate from normal port number. + - 'configure' script working. Confirmed compiles on: + Host SSL Compiler + SunOS 5.5 no gcc + SunOS 5.5.1 yes gcc + SunOS 5.6 no cc (with gcc, it has the "gcc include files" problem) + SunOS 4.1.3 no gcc (without ANSI C headers) + SunOS 4.1.2 no gcc (native compiler failed) + Linux 2.0.18 no gcc + Linux 2.0.32 yes gcc + Linux 2.0.35 no gcc (with glibc) + IRIX 6.2 no gcc (cc compiles generate a few warnings) + IRIX 6.4 no cc (generated warnings though) + Win32 no Borland + OSF4.0 no ? + + - Ooops. The 5beta (and 4.10) under win32 failed if the HOME variable wasn't + set. + - When using a proxy, curl now guesses and uses the protocol part in cases + like: + curl -x proxy:80 www.site.com + Proxies normally go nuts unless http:// is prepended to the host name, so + if curl is used like this, it guesses protocol and appends the protocol + string before passing it to the proxy. It already did this when used + without proxy. + - Better port usage with SSL through proxy now. If you specified a different + https-port when accessing through a proxy, it didn't use that number + correctly. I also rewrote the code that parses the stuff read from the + proxy when you wanna connect through it with SSL. + - Bjorn Reese helped me work around one of the compiler + warnings on IRIX native cc compiles. + +Version 4.10 (Oct 26, 1998) + Daniel Stenberg + - John A. Bristor suggested a config file switch, + and since I've been having that idea kind of in the background for a long + time I rewrote the parameter parsing function a little and now I introduce + the -K/--config flag. I also made curl *always* (unless -K is used) try to + load the .curlrc file for command line parameters. The syntax for the + config file is the standard command line argument style. Details in 'curl + -h' or the README. + - I removed the -k option. Keep-alive isn't really anything anyone would + want to enable with curl anyway. + - Martin Staael helped me add the 'irix' target. Now + "make irix" should build curl successfully on non-gcc SGI machines. + - Single switches now toggle behaviours. I.e if you use -v -v the second + will switch off the verbose mode the first one enabled. This is so that + you can disable a default setting a .curlrc file enables etc. + +Version 4.9 (Oct 7, 1998) + Daniel Stenberg + - Martin Staael suggested curl would support cookies. + I added -b/--cookie to enable free-text cookie data to be passed. There's + also a little blurb about general cookie stuff in the README/help text. + - dmh suggested HTTP resume capabilities. Although you could + manually get curl to resume HTTP documents, I made the -c resume flag work + for HTTP too (unless -r is used too, which would be very odd anyway). + - Added checklinks.pl to the archive. It is a still experimental perl script + that checks all links of a web page by using curl. + - Rearranged the archive hierarchy a little. Build the executable in the + src/ dir from now on! + - Version 4.9 and hereafter, is no longer released under the GPL license. + I have now updated the LEGAL file etc and now this is released using the + Mozilla Public License to avoid the plague known as "the GPL virus". You + must make the source available if you decide to change and/or redistribute + curl, but if you decide to use curl within something else you do not need + to offer the world the source to that too. + - Curl did not like HTTP servers that sent no headers at all on a GET + request. It is a violation of RFC2068 but appearantly some servers do + that anyway. Thanks to Gordon Beaton for the + report! + - -L/--location was added after a suggestion from Martin Staael + . This makes curl ATTEMPT to follow the Location: + redirect if one is present in the HTTP headers. If -i or -I is used with + this flag, you will see headers from all sites the Location: points to. Do + note that the first server can point to a second that points to a third + etc. It seems the Location: parameter (said to be an AbsoluteURI in + RFC2068) isn't always absolute.. :-/ Anyway, I've made curl ATTEMPT to do + the best it can to deal with the reality. + - Added getlinks.pl to the archive. getlinks.pl selectively downloads + files that a web page links to. + +Version 4.8.4 + Daniel Stenberg + - As Julian Romero Nieto reported, curl reported wrong + version number. + - As Teemu Yli-Elsila pointed out, + the win32 version of 4.8 (and probably all other versions for win32) + didn't work with binary files since I'm too used to the UNIX style + fopen() where binary and text don't differ... + - Ralph Beckmann brought me some changes that lets + curl compile error and warning free with -Wall -pedantic with + g++. I also took the opportunity to clean off some unused variables + and similar. + - Ralph Beckmann made me aware of a really odd bug + now corrected. When curl read a set of headers from a HTTP server, divided + into more than one read and the first read showed a full line *exactly* + (i.e ending with a newline), curl did not behave well. + +Version 4.8.3 + Daniel Stenberg + - I was too quick to release 4.8.2 with too little testing. One of the + changes is now reverted slightly to the 4.8.1 way since 4.8.2 couldn't + upload files. I still think both problems corrected in 4.8.2 remain + corrected. Reported by Julian Romero Nieto . + +Version 4.8.2 + Daniel Stenberg + - Bernhard Iselborn reported two FTP protocol + errors curl did. They're now corrected. Both appeared when getting files + from a MS FTP server! :-) + +Version 4.8.1 + Daniel Stenberg + - Added a last update of the progress meter when the transfer is done. The + final output on the screen didn't have to be the final size transfered + which made it sometimes look odd. + - Thanks to David Long I got rid of a silly + bug that happened if a HTTP-page had nothing but header. Appearantly + Solaris deals with negative sizes in fwrite() calls a lot better than + Linux does... =B-] + +Version 4.8 + Daniel Stenberg + - Continue FTP file transfer. -c is the switch. Note that you need to + specify a file name if you wanna resume a download (you can't resume a + download sent to stdout). Resuming upload may be limited by the server + since curl is then using the non-RFC959 command SIZE to get the size of + the target file before upload begins (to figure out which offset to + use). Use -C to specify the offset yourself! -C is handy if you're doing + the output to something else but a plain file or when you just want to get + the end of a file. + - recursiveftpget.pl now features a maximum recursive level argument. + +Version 4.7 + Daniel Stenberg + - Added support to abort a download if the speed is below a certain amount + (speed-limit) bytes per second for a certain (speed-time) time. + - Wrote a perl script 'recursiveftpget.pl' to recursively use curl to get a + whole ftp directory tree. It is meant as an example of how curl can be + used. I agree it isn't the wisest thing to do to make a separate new + connection for each file and directory for this. + +Version 4.6 + Daniel Stenberg + - Added a first attempt to optionally parse the .netrc file for login user + and password. If used with http, it enables user authentication. -n is + the new switch. + - Removed the extra newlines on the default user-agent string. + - Corrected the missing ftp upload error messages when it failed without the + verbose flag set. Gary W. Swearingen found it. + - Now using alarm() to enable second-precision timeout even on the name + resolving/connecting phase. The timeout is although reset after that first + sequence. (This should be corrected.) Gary W. Swearingen + reported. + - Now spells "Unknown" properly, as in "Unknown option 'z'"... :-) + - Added bug report email address in the README. + - Added a "current speed" field to the progress meter. It shows the average + speed the last 5 seconds. The other speed field shows the average speed of + the entire transfer so far. + +Version 4.5.1 + Linas Vepstas + - SSL through proxy fix + - Added -A to allow User-Agent: changes + + Daniel Stenberg + - Made the -A work when SSL-through-proxy. + +Version 4.5 + Linas Vepstas + - More SSL corrections + - I've added a port to AIX. + - running SSL through a proxy causes a chunk of code to be executred twice. + one of those blocks needs to be deleted. + + Daniel Stenberg + - Made -i and -I work again + +Version 4.4 + Linas Vepstas + - -x can now also specify proxyport when used as in 'proxyhost:proxyport' + - SSL fixes + +Version 4.3 + Daniel Stenberg + - Adjusted to compile under win32 (VisualC++ 5). The -P switch does not + support network interface names in win32. I couldn't figure out how! + +Version 4.2 + Linas Vepstas / Sampo Kellomaki + - Added SSL / SSLeay support (https://) + - Added the -T usage for HTTP POST. + + Daniel Stenberg + - Bugfixed the SSL implementation. + - Made -P a lot better to use other IP addresses. It now accepts a following + parameter that can be either + interface - i.e "eth0" to specify which interface's IP address you + want to use + IP address - i.e "192.168.10.1" to specify exact IP number + host name - i.e "my.host.domain" to specify machine + "-" - (any single-letter string) to make it pick the machine's + default + - The Makefile is now ready to compile for solaris, sunos4 and linux right + out of the box. + - Better generated version string seen with 'curl -V' + +Version 4.1 + Daniel Stenberg + - The IP number returned by the ftp server as a reply to PASV does no longer + have to DNS resolve. In fact, no IP-number-only addresses have to anymore. + - Binds better to available port when -P is used. + - Now LISTs ./ instead of / when used as in ftp://ftp.funet.fi/. The reason + for this is that exactly that site, ftp.funet.fi, does not allow LIST / + while LIST ./ is fine. Any objections? + +Version 4 (1998-03-20) + Daniel Stenberg + - I took another huge step and changed both version number and project name! + The reason for the new name is that there are just one too many programs + named urlget already and this program already can a lot more than merely + getting URLs, and the reason for the version number is that I did add the + pretty big change in -P and since I changed name I wanted to start with + something fresh! + - The --style flags are working better now. + - Listing directories with FTP often reported that the file transfer was + incomplete. Wrong assumptions were too common for directories, why no + size will be attempted to get compared on them from now on. + - Implemented the -P flag that let's the ftp control issue a PORT command + instead of the standard PASV. + - -a for appending FTP uploads works. + +*************************************************************************** + +Version 3.12 + Daniel Stenberg + - End-of-header tracking still lacked support for \r\n or just \n at the + end of the last header line. + Sergio Barresi + - Added PROXY authentication. + Rafael Sagula + - Fixed some little bugs. + +Version 3.11 + Daniel Stenberg + - The header parsing was still not correct since the 3.2 modification... + +Version 3.10 + Daniel Stenberg + - 3.7 and 3.9 were simultaneously developed and merged into this version. + - FTP upload did not work correctly since 3.2. + +Version 3.9 + Rafael Sagula + - Added the "-e / --referer " option where we can specify + the referer page. Obviously, this is necessary only to fool the + server, but... + +Version 3.7 + Daniel Stenberg + - Now checks the last error code sent from the ftp server after a file has + been received or uploaded. Wasn't done previously. + - When 'urlget ' is used without a 'protocol://' first in the host part, + it now checks for host names starting with ftp or gopher and if it does, + it uses that protocol by default instead of http. + +Version 3.6 + Daniel Stenberg + - Silly mistake made the POST bug. This has now also been tested to work with + proxy. + +Version 3.5 + Daniel Stenberg + - Highly inspired by Rafael Sagula's changes to the 3.1 that added an almost + functional POST, I applied his changes into this version and made them work. + (It seems POST requires the Content-Type and Content-Length headers.) It is + now usable with the -d switch. + +Version 3.3 - 3.4 + Passed to avoid confusions + +Version 3.2 + Daniel Stenberg + - Major rewrite of two crucial parts of this code: upload and download. + They are both now using a select() switch, that allows much better + progress meter and time control. + - alarm() usage removed completely + - FTP get can now list directory contents if the path ends with a slash '/'. + Urlget on a ftp-path that doesn't end with a slash means urlget will + attempt getting it as a file name. + - FTP directory view supports -l for "list-only" which lists the file names + only. + - All operations support -m for max time usage in seconds allowed. + - FTP upload now allows the size of the uploaded file to be provided, and + thus it can better check it actually uploaded the whole file. It also + makes the progress meter for uploads much better! + - Made the parameter parsing fail in cases like 'urlget -r 900' which + previously tried to connect to the host named '900'. + +Version 3.1 + Kjell Ericson + - Pointed out how to correct the 3 warnings in win32-compiles. + + Daniel Stenberg + - Removed all calls to exit(). + - Made the short help text get written to stdout instead of stderr. + - Made this file instead of keeping these comments in the source. + - Made two callback hooks, that enable external programs to use urlget() + easier and to grab the output/offer the input easier. + - It is evident that Win32-compiles are painful. I watched the output from + the Borland C++ v5 and it was awful. Just ignore all those warnings. + +Version 3.0 + Daniel Stenberg + - Added FTP upload capabilities. The name urlget gets a bit silly now + when we can put too... =) + - Restructured the source quite a lot. + Changed the urlget() interface. This way, we will survive changes much + better. New features can come and old can be removed without us needing + to change the interface. I've written a small explanation in urlget.h + that explains it. + - New flags include -t, -T, -O and -h. The -h text is generated by the new + mkhelp script. + +Version 2.9 + Remco van Hooff + - Added a fix to make it compile smoothly on Amiga using the SAS/C + compiler. + + Daniel Stenberg + - Believe it or not, but the STUPID Novell web server seems to require + that the Host: keyword is used, so well I use it and I (re-introduce) the + urlget User-Agent:. I still have to check that this Host: usage works with + proxies... 'Host:' is required for HTTP/1.1 GET according to RFC2068. + +Version 2.8 + Rafael Sagula + - some little modifications + +Version 2.7 + Daniel Stenberg + - Removed the -l option and introduced the -f option instead. Now I'll + rewrite the former -l kludge in an external script that'll use urlget to + fetch multipart files like that. + - '-f' is introduced, it means Fail without output in case of HTTP server + errors (return code >=300). + - Added support for -r, ranges. Specify which part of a document you + want, and only that part is returned. Only with HTTP/1.1-servers. + - Split up the source in 3 parts. Now all pure URL functions are in + urlget.c and stuff that deals with the stand-alone program is in main.c. + - I took a few minutes and wrote an embryo of a README file to explain + a few things. + +Version 2.6 + Daniel Stenberg + - Made the -l (loop) thing use the new CONF_FAILONERROR which makes + urlget() return error code if non-successful. It also won't output anything + then. Now finally removed the HTTP 1.0 and error 404 dependencies. + - Added -I which uses the HEAD request to get the header only from a + http-server. + +Version 2.5 + Rafael Sagula + - Made the progress meter use HHH:MM:SS instead of only seconds. + +Version 2.4 + Daniel Stenberg + - Added progress meter. It appears when downloading > BUFFER SIZE and + mute is not selected. I found out that when downloading large files from + really really slow sites, it is desirable to know the status of the + download. Do note that some downloads are done unawaring of the size, which + makes the progress meter less thrilling ;) If the output is sent to a tty, + the progress meter is shut off. + - Increased buffer size used for reading. + - Added length checks in the user+passwd parsing. + - Made it grok user+passwd for HTTP fetches. The trick is to base64 + encode the user+passwd and send an extra header line. Read chapter 11.1 in + RFC2068 for details. I added it to be used just like the ftp one. To get a + http document from a place that requires user and password, use an URL + like: + + http://user:passwd@www.site.to.leach/doc.html + + I also added the -u flag, since WHEN USING A PROXY YOU CAN'T SPECIFY THE + USER AND PASSWORD WITH HTTP LIKE THAT. The -u flag works for ftp too, but + not if used with proxy. To do the same as the above one, you can invoke: + + urlget -u user:passwd http://www.site.to.leach/doc.html + +Version 2.3 + Rafael Sagula + - Added "-o" option (output file) + - Added URG_HTTP_NOT_FOUND return code. + (Daniel's note:) + Perhaps we should detect all kinds of errors and instead of writing that + custom string for the particular 404-error, use the error text we actually + get from the server. See further details in RFC2068 (HTTP 1.1 + definition). The current way also relies on a HTTP/1.0 reply, which newer + servers might not do. + - Looping mode ("-l" option). It's easier to get various split files. + (Daniel's note:) + Use it like 'urlget -l 1 http://from.this.site/file%d.html', which will + make urlget to attempt to fetch all files named file1.html, file2.html etc + until no more files are found. This is only a modification of the + STAND_ALONE part, nothing in the urlget() function was modfified for this. + Daniel Stenberg + - Changed the -h to be -i instead. -h should be preserved to help use. + - Bjorn Reese indicated that Borland _might_ use '_WIN32' instead of the + VC++ WIN32 define and therefore I added a little fix for that. + +Version 2.2 + Johan Andersson + - The urlget function didn't set the path to url when using proxy. + - Fixed bug with IMC proxy. Now using (almost) complete GET command. + + Daniel Stenberg + - Made it compile on Solaris. Had to reorganize the includes a bit. + (so Win32, Linux, SunOS 4 and Solaris 2 compile fine.) + - Made Johan's keepalive keyword optional with the -k flag (since it + makes a lot of urlgets take a lot longer time). + - Made a '-h' switch in case you want the HTTP-header in the output. + +Version 2.1 + Daniel Stenberg and Kjell Ericson + - Win32-compilable + - No more global variables + - Mute option (no output at all to stderr) + - Full range of return codes from urlget(), which is now written to be a + function for easy-to-use in [other] programs. + - Define STAND_ALONE to compile the stand alone urlget program + - Now compiles with gcc options -ansi -Wall -pedantic ;) + +Version 2.0 + - Introducing ftp GET support. The FTP URL type is recognized and used. + - Renamed the project to 'urlget'. + - Supports the user+passwd in the FTP URL (otherwise it tries anonymous + login with a weird email address as password). + +Version 1.5 + Daniel Stenberg + - The skip_header() crap messed it up big-time. By simply removing that + one we can all of a sudden download anything ;) + - No longer requires a trailing slash on the URLs. + - If the given URL isn't prefixed with 'http://', HTTP is assumed and + given a try! + - 'void main()' is history. + +Version 1.4 + Daniel Stenberg + - The gopher source used the ppath variable instead of path which could + lead to disaster. + +Version 1.3 + Daniel Stenberg + - Well, I added a lame text about the time it took to get the data. I also + fought against Johan to prevent his -f option (to specify a file name + that should be written instead of stdout)! =) + - Made it write 'connection refused' for that particular connect() + problem. + - Renumbered the version. Let's not make silly 1.0.X versions, this is + a plain 1.3 instead. + +Version 1.2 + Johan Andersson + - Discovered and fixed the problem with getting binary files. puts() is + now replaced with fwrite(). (Daniel's note: this also fixed the buffer + overwrite problem I found in the previous version.) + + Rafael Sagula + - Let "-p" before "-x". + + Daniel Stenberg + - Bugfixed the proxy usage. It should *NOT* use nor strip the port number + from the URL but simply pass that information to the proxy. This also + made the user/password fields possible to use in proxy [ftp-] URLs. + (like in ftp://user:password@ftp.my.site:8021/README) + + Johan Andersson + - Implemented HTTP proxy support. + - Receive byte counter added. + + Bjorn Reese + - Implemented URLs (and skipped the old syntax). + - Output is written to stdout, so to achieve the above example, do: + httpget http://143.54.10.6/info_logo.gif > test.gif + +Version 1.1 + Daniel Stenberg + - Adjusted it slightly to accept named hosts on the command line. We + wouldn't wanna use IP numbers for the rest of our lifes, would we? + +Version 1.0 + Rafael Sagula + - Wrote the initial httpget, which started all this! diff --git a/CONTRIBUTE b/CONTRIBUTE new file mode 100644 index 000000000..e268d4e21 --- /dev/null +++ b/CONTRIBUTE @@ -0,0 +1,68 @@ + Date: 1999-08-04 + +To Think About When Contributing Source Code + + This document is intended to offer some guidelines that can be useful to + keep in mind when you decide to write a contribution to the project. This + concerns new features as well as corrections to existing flaws or bugs. + +Naming + + Try using a non-confusing naming scheme for your new functions and variable + names. It doesn't necessarily have to mean that you should use the same as + in other places of the code, just that the names should be logical, + understandable and be named according to what they're used for. + +Indenting + + Please try using the same indenting levels and bracing method as all the + other code already does. It makes the source code a lot easier to follow if + all of it is written using the same style. I don't ask you to like it, I + just ask you to follow the tradition! ;-) + +Commenting + + Comment your source code extensively. I don't see myself as a very good + source commenter, but I try to become one. Commented code is quality code + and enables future modifications much more. Uncommented code much more risk + being completely replaced when someone wants to extend things, since other + persons' source code can get quite hard to read. + +General Style + + Keep your functions small. If they're small you avoid a lot of mistakes and + you don't accidentaly mix up variables. + +Non-clobbering All Over + + When you write new functionality or fix bugs, it is important that you + don't fiddle all over the source files and functions. Remember that it is + likely that other people have done changes in the same source files as you + have and possibly even in the same functions. If you bring completely new + functionality, try writing it in a new source file. If you fix bugs, try to + fix one bug at a time and send them as separate patches. + +Separate Patches Doing Different Things + + It is annoying when you get a huge patch from someone that is said to fix 511 + odd problems, but discussions and opinions don't agree with 510 of them - or + 509 of them were already fixed in a different way. Then the patcher needs to + extract the single interesting patch from somewhere within the huge pile of + source, and that gives a lot of extra work. Preferably, all fixes that + correct different problems should be in their own patch with an attached + description exactly what they correct so that all patches can be selectively + applied by the maintainer or other interested parties. + +Document + + Writing docs is dead boring and one of the big problems with many open + source projects. Someone's gotta do it. It makes it a lot easier if you + submit a small description of your fix or your new features with every + contribution so that it can be swiftly added to the package documentation. + +Write Access to CVS Repository + + If you are a frequent contributor, or have another good reason, you can of + course get write access to the CVS repository and then you'll be able to + check-in all your changes straight into the CVS tree instead of sending all + changes by mail as patches. Just ask if this is what you'd want. diff --git a/FAQ b/FAQ new file mode 100644 index 000000000..dea807e96 --- /dev/null +++ b/FAQ @@ -0,0 +1,31 @@ +Date: 19 November 1999 + + Frequently Asked Questions about Curl + +1. Problems connecting to SSL servers. + + It took a very long time before I could sort out why curl had problems + to connect to certain SSL servers when using SSLeay or OpenSSL v0.9+. + The error sometimes showed up similar to: + + 16570:error:1407D071:SSL routines:SSL2_READ:bad mac decode:s2_pkt.c:233: + + It turned out to be because many older SSL servers don't deal with SSLv3 + requests properly. To correct this problem, tell curl to select SSLv2 from + the command line (-2/--sslv2). + + I have also seen examples where the remote server didn't like the SSLv2 + request and instead you had to force curl to use SSLv3 with -3/--sslv3. + +2. Does curl support resume? + + Yes. Both ways on FTP, download ways on HTTP. + +3. Is libcurl thread safe? + + Yes, as far as curl's own code goes. It does use system calls that often + aren't thread safe in most environments, such as gethostbyname(). + + I am very interested in once and for all getting some kind of report or + README file from those who have used libcurl in a threaded environment, + since I haven't and I get this question more and more frequently! diff --git a/FEATURES b/FEATURES new file mode 100644 index 000000000..18d3d3d44 --- /dev/null +++ b/FEATURES @@ -0,0 +1,72 @@ +Misc + - full URL syntax + - custom maximum download time + - custom least download speed acceptable + - multiple URLs + - guesses protocol from host name unless specified + - uses .netrc + - progress bar/time specs while downloading + - PROXY environment variables support + - config file support + - compiles on win32 + +HTTP + - GET + - PUT + - HEAD + - POST + - multipart POST + - authentication + - resume + - follow redirects + - custom HTTP request + - cookie get/send + - custom headers (that can replace internally generated headers) + - custom user-agent string + - custom referer string + - range + - proxy authentication + - time conditions + - via http-proxy + +HTTPS (*1) + - (all the HTTP features) + - using certificates + - via http-proxy + +FTP + - download + - authentication + - PORT or PASV + - single file size information (compare to HTTP HEAD) + - 'type=' URL support + - dir listing + - dir listing names-only + - upload + - upload append + - upload via http-proxy as HTTP PUT + - download resume + - upload resume + - QUOT commands + - simple "range" support + - via http-proxy + +TELNET + - connection negotiation + - stdin/stdout I/O + +LDAP (*2) + - full LDAP URL support + +DICT + - extended DICT URL support + +GOPHER + - GET + - via http-proxy + +FILE + - URL support + + *1 = requires OpenSSL + *2 = requires OpenLDAP diff --git a/FILES b/FILES new file mode 100644 index 000000000..d26a3c01f --- /dev/null +++ b/FILES @@ -0,0 +1,47 @@ +CHANGES +CONTRIBUTE +FEATURES +FAQ +FILES +INSTALL +LEGAL +MPL-1.0.txt +README +README.curl +README.libcurl +curl.1 +*spec +RESOURCES +TODO +maketgz +Makefile.in +Makefile.am +acconfig.h +aclocal.m4 +config.guess +config.h.in +config.sub +configure +configure.in +install-sh +missing +mkinstalldirs +reconf +stamp-h.in +perl/README +perl/*.pl.in +src/*.[ch] +src/*in +src/*am +src/mkhelp.pl +src/Makefile.vc6 +src/*m32 +lib/getdate.y +lib/*.[ch] +lib/*in +lib/*am +lib/Makefile.vc6 +lib/*m32 +include/README +include/curl/*.h + diff --git a/INSTALL b/INSTALL new file mode 100644 index 000000000..a2e389433 --- /dev/null +++ b/INSTALL @@ -0,0 +1,195 @@ + _ _ ____ _ + ___| | | | _ \| | + / __| | | | |_) | | + | (__| |_| | _ <| |___ + \___|\___/|_| \_\_____| + + How To Compile + +UNIX +==== + + The configure script *always* tries to find a working SSL library unless + explicitely told not to. If you have SSLeay or OpenSSL installed in the + default search path for your compiler/linker, you don't need to do anything + special. + + If you have SSLeay or OpenSSL installed in /usr/local/ssl, you can + run configure like so: + + ./configure --with-ssl + + If you have SSLeay or OpenSSL installed somewhere else (for example, + /opt/OpenSSL,) you can run configure like this: + + ./configure --with-ssl=/opt/OpenSSL + + If you insist on forcing a build *without* SSL support, even though you may + have it installed in your system, you can run configure like this: + + ./configure --without-ssl + + If you have SSLeay or OpenSSL installed, but with the libraries in + one place and the header files somewhere else, you'll have to set the + LDFLAGS and CPPFLAGS environment variables prior to running configure. + Something like this should work: + + (with the Bourne shell and its clones): + + CPPFLAGS="-I/path/to/ssl/include" LDFLAGS="-L/path/to/ssl/lib" \ + ./configure + + (with csh, tcsh and their clones): + + env CPPFLAGS="-I/path/to/ssl/include" LDFLAGS="-L/path/to/ssl/lib" \ + ./configure + + If your SSL library was compiled with rsaref (usually for use in + the United States), you may also need to set: + + LIBS=-lRSAglue -lrsaref + (from Doug Kaufman ) + + Without SSL support, just run: + + ./configure + + Then run: + + make + + Use the executable `curl` in src/ directory. + + 'make install' copies the curl file to /usr/local/bin/ (or $prefix/bin + if you used the --prefix option to configure) and copies the curl.1 + man page to a suitable place too. + + KNOWN PROBLEMS + + If you happen to have autoconf installed, but a version older than + 2.12 you will get into trouble. Then you can still build curl by + issuing these commands: (from Ralph Beckmann ) + + ./configure [...] + cd lib; make; cd .. + cd src; make; cd .. + cp src/curl elsewhere/bin/ + + OPTIONS + + Remember, to force configure to use the standard cc compiler if both + cc and gcc are present, run configure like + + CC=cc ./configure + or + env Cc=cc ./configure + + +Win32 +===== + + Without SSL: + + MingW32 (GCC-2.95) style + ------------------------ + Run the 'mingw32.bat' file to get the proper environment variables + set, then run 'make -f Makefile.m32' in the lib/ dir and then + 'make -f Makefile.m32' in the src/ dir. + + If you have any problems linking libraries or finding header files, + be sure to look at the provided "Makefile.m32" files for the proper + paths, and adjust as necessary. + + Cygwin style + ------------ + Almost identical to the unix installation. Run the configure script + in the curl root with 'sh configure'. Make sure you have the sh + executable in /bin/ or you'll see the configure fail towards the + end. + + Run 'make' + + Microsoft command line style + ---------------------------- + Run the 'vcvars32.bat' file to get the proper environment variables + set, then run 'nmake -f Makefile.vc6' in the lib/ dir and then + 'nmake -f Makefile.vc6' in the src/ dir. + + IDE-style + ------------------------- + If you use VC++, Borland or similar compilers. Include all lib source + files in a static lib "project" (all .c and .h files that is). + (you should name it libcurl or similar) + + Make the sources in the src/ drawer be a "win32 console application" + project. Name it curl. + + With VC++, add 'wsock32.lib' to the link libs when you build curl! + Borland seems to do that itself magically. Of course you have to + make sure it links with the libcurl too! + + For VC++ 6, there's an included Makefile.vc6 that should be possible + to use out-of-the-box. + + Microsoft note: add /Zm200 to the compiler options, as the hugehelp.c + won't compile otherwise due to "too long puts string" or something + like that! + + + With SSL: + + MingW32 (GCC-2.95) style + ------------------------ + Run the 'mingw32.bat' file to get the proper environment variables + set, then run 'make -f Makefile.m32 SSL=1' in the lib/ dir and then + 'make -f Makefile.m32 SSL=1' in the src/ dir. + + If you have any problems linking libraries or finding header files, + be sure to look at the provided "Makefile.m32" files for the proper + paths, and adjust as necessary. + + Cygwin style + ------------ + + Haven't done, nor got any reports on how to do. It should although be + identical to the unix setup for the same purpose. See above. + + Microsoft command line style + ---------------------------- + Run the 'vcvars32.bat' file to get the proper environment variables + set, then run 'nmake -f Makefile.vc6 release-ssl' in the lib/ dir and + then 'nmake -f Makefile.vc6' in the src/ dir. + + Microsoft / Borland style + ------------------------- + If you have OpenSSL/SSLeay, and want curl to take advantage of it, + edit your project properties to use the SSL include path, link with + the SSL libs and define the USE_SSLEAY symbol. + + +OpenSSL/SSLeay +============== + + You'll find OpenSSL information at: + + http://www.openssl.org + + +MingW32/Cygwin +============== + + You'll find MingW32 and Cygwin information at: + + http://www.xraylith.wisc.edu/~khan/software/gnu-win32/index.html + +OpenLDAP +======== + + You'll find OpenLDAP information at: + + http://www.openldap.org + + You need to install it with shared libraries, which is enabled when running + the ldap configure script with "--enable-shared". With my linux 2.0.36 + kernel I also had to disable using threads (with --without-threads), + because the configure script couldn't figure out my system. diff --git a/LEGAL b/LEGAL new file mode 100644 index 000000000..cc1143c7d --- /dev/null +++ b/LEGAL @@ -0,0 +1,21 @@ +Part of this software is distributed under the Mozilla Public License +version 1.0, which is part of this distribution (MPL-1.0.txt) and +available on-line at http://www.mozilla.org/MPL/ + +The terminology used here is described in the Mozilla Public License. + +In accordance with section "4. Inability to Comply Due to Statute or +Regulation" the following exemptions apply to this software: + + * The Initial Developer has the right, regardless of the citizenship + of any involved party, to choose the location for settling disputes + as refered to under section "11. Miscellaneous" of the Mozilla Public + License. + +Initial Developers of this software are: + + Daniel Stenberg + Rafael Linden Sagula + +Curl is Copyright (C) 1996-1998 Daniel Stenberg and Rafael Linden Sagula + \ No newline at end of file diff --git a/MPL-1.0.txt b/MPL-1.0.txt new file mode 100644 index 000000000..f7f2ff185 --- /dev/null +++ b/MPL-1.0.txt @@ -0,0 +1,360 @@ + MOZILLA PUBLIC LICENSE + Version 1.0 + + ---------------- + +1. Definitions. + + 1.1. ``Contributor'' means each entity that creates or contributes to + the creation of Modifications. + + 1.2. ``Contributor Version'' means the combination of the Original + Code, prior Modifications used by a Contributor, and the Modifications + made by that particular Contributor. + + 1.3. ``Covered Code'' means the Original Code or Modifications or the + combination of the Original Code and Modifications, in each case + including portions thereof. + + 1.4. ``Electronic Distribution Mechanism'' means a mechanism generally + accepted in the software development community for the electronic + transfer of data. + + 1.5. ``Executable'' means Covered Code in any form other than Source + Code. + + 1.6. ``Initial Developer'' means the individual or entity identified as + the Initial Developer in the Source Code notice required by Exhibit A. + + 1.7. ``Larger Work'' means a work which combines Covered Code or + portions thereof with code not governed by the terms of this License. + + 1.8. ``License'' means this document. + + 1.9. ``Modifications'' means any addition to or deletion from the + substance or structure of either the Original Code or any previous + Modifications. When Covered Code is released as a series of files, a + Modification is: + + A. Any addition to or deletion from the contents of a file + containing Original Code or previous Modifications. + + B. Any new file that contains any part of the Original Code or + previous Modifications. + + 1.10. ``Original Code'' means Source Code of computer software code + which is described in the Source Code notice required by Exhibit A as + Original Code, and which, at the time of its release under this License + is not already Covered Code governed by this License. + + 1.11. ``Source Code'' means the preferred form of the Covered Code for + making modifications to it, including all modules it contains, plus any + associated interface definition files, scripts used to control + compilation and installation of an Executable, or a list of source code + differential comparisons against either the Original Code or another + well known, available Covered Code of the Contributor's choice. The + Source Code can be in a compressed or archival form, provided the + appropriate decompression or de-archiving software is widely available + for no charge. + + 1.12. ``You'' means an individual or a legal entity exercising rights + under, and complying with all of the terms of, this License or a future + version of this License issued under Section 6.1. For legal entities, + ``You'' includes any entity which controls, is controlled by, or is + under common control with You. For purposes of this definition, + ``control'' means (a) the power, direct or indirect, to cause the + direction or management of such entity, whether by contract or + otherwise, or (b) ownership of fifty percent (50%) or more of the + outstanding shares or beneficial ownership of such entity. + +2. Source Code License. + + 2.1. The Initial Developer Grant. + The Initial Developer hereby grants You a world-wide, royalty-free, + non-exclusive license, subject to third party intellectual property + claims: + + (a) to use, reproduce, modify, display, perform, sublicense and + distribute the Original Code (or portions thereof) with or without + Modifications, or as part of a Larger Work; and + + (b) under patents now or hereafter owned or controlled by Initial + Developer, to make, have made, use and sell (``Utilize'') the + Original Code (or portions thereof), but solely to the extent that + any such patent is reasonably necessary to enable You to Utilize + the Original Code (or portions thereof) and not to any greater + extent that may be necessary to Utilize further Modifications or + combinations. + + 2.2. Contributor Grant. + Each Contributor hereby grants You a world-wide, royalty-free, + non-exclusive license, subject to third party intellectual property + claims: + + (a) to use, reproduce, modify, display, perform, sublicense and + distribute the Modifications created by such Contributor (or + portions thereof) either on an unmodified basis, with other + Modifications, as Covered Code or as part of a Larger Work; and + + (b) under patents now or hereafter owned or controlled by + Contributor, to Utilize the Contributor Version (or portions + thereof), but solely to the extent that any such patent is + reasonably necessary to enable You to Utilize the Contributor + Version (or portions thereof), and not to any greater extent that + may be necessary to Utilize further Modifications or combinations. + +3. Distribution Obligations. + + 3.1. Application of License. + The Modifications which You create or to which You contribute are + governed by the terms of this License, including without limitation + Section 2.2. The Source Code version of Covered Code may be distributed + only under the terms of this License or a future version of this + License released under Section 6.1, and You must include a copy of this + License with every copy of the Source Code You distribute. You may not + offer or impose any terms on any Source Code version that alters or + restricts the applicable version of this License or the recipients' + rights hereunder. However, You may include an additional document + offering the additional rights described in Section 3.5. + + 3.2. Availability of Source Code. + Any Modification which You create or to which You contribute must be + made available in Source Code form under the terms of this License + either on the same media as an Executable version or via an accepted + Electronic Distribution Mechanism to anyone to whom you made an + Executable version available; and if made available via Electronic + Distribution Mechanism, must remain available for at least twelve (12) + months after the date it initially became available, or at least six + (6) months after a subsequent version of that particular Modification + has been made available to such recipients. You are responsible for + ensuring that the Source Code version remains available even if the + Electronic Distribution Mechanism is maintained by a third party. + + 3.3. Description of Modifications. + You must cause all Covered Code to which you contribute to contain a + file documenting the changes You made to create that Covered Code and + the date of any change. You must include a prominent statement that the + Modification is derived, directly or indirectly, from Original Code + provided by the Initial Developer and including the name of the Initial + Developer in (a) the Source Code, and (b) in any notice in an + Executable version or related documentation in which You describe the + origin or ownership of the Covered Code. + + 3.4. Intellectual Property Matters + + (a) Third Party Claims. + If You have knowledge that a party claims an intellectual property + right in particular functionality or code (or its utilization + under this License), you must include a text file with the source + code distribution titled ``LEGAL'' which describes the claim and + the party making the claim in sufficient detail that a recipient + will know whom to contact. If you obtain such knowledge after You + make Your Modification available as described in Section 3.2, You + shall promptly modify the LEGAL file in all copies You make + available thereafter and shall take other steps (such as notifying + appropriate mailing lists or newsgroups) reasonably calculated to + inform those who received the Covered Code that new knowledge has + been obtained. + + (b) Contributor APIs. + If Your Modification is an application programming interface and + You own or control patents which are reasonably necessary to + implement that API, you must also include this information in the + LEGAL file. + + 3.5. Required Notices. + You must duplicate the notice in Exhibit A in each file of the Source + Code, and this License in any documentation for the Source Code, where + You describe recipients' rights relating to Covered Code. If You + created one or more Modification(s), You may add your name as a + Contributor to the notice described in Exhibit A. If it is not possible + to put such notice in a particular Source Code file due to its + structure, then you must include such notice in a location (such as a + relevant directory file) where a user would be likely to look for such + a notice. You may choose to offer, and to charge a fee for, warranty, + support, indemnity or liability obligations to one or more recipients + of Covered Code. However, You may do so only on Your own behalf, and + not on behalf of the Initial Developer or any Contributor. You must + make it absolutely clear than any such warranty, support, indemnity or + liability obligation is offered by You alone, and You hereby agree to + indemnify the Initial Developer and every Contributor for any liability + incurred by the Initial Developer or such Contributor as a result of + warranty, support, indemnity or liability terms You offer. + + 3.6. Distribution of Executable Versions. + You may distribute Covered Code in Executable form only if the + requirements of Section 3.1-3.5 have been met for that Covered Code, + and if You include a notice stating that the Source Code version of the + Covered Code is available under the terms of this License, including a + description of how and where You have fulfilled the obligations of + Section 3.2. The notice must be conspicuously included in any notice in + an Executable version, related documentation or collateral in which You + describe recipients' rights relating to the Covered Code. You may + distribute the Executable version of Covered Code under a license of + Your choice, which may contain terms different from this License, + provided that You are in compliance with the terms of this License and + that the license for the Executable version does not attempt to limit + or alter the recipient's rights in the Source Code version from the + rights set forth in this License. If You distribute the Executable + version under a different license You must make it absolutely clear + that any terms which differ from this License are offered by You alone, + not by the Initial Developer or any Contributor. You hereby agree to + indemnify the Initial Developer and every Contributor for any liability + incurred by the Initial Developer or such Contributor as a result of + any such terms You offer. + + 3.7. Larger Works. + You may create a Larger Work by combining Covered Code with other code + not governed by the terms of this License and distribute the Larger + Work as a single product. In such a case, You must make sure the + requirements of this License are fulfilled for the Covered Code. + +4. Inability to Comply Due to Statute or Regulation. + + If it is impossible for You to comply with any of the terms of this + License with respect to some or all of the Covered Code due to statute + or regulation then You must: (a) comply with the terms of this License + to the maximum extent possible; and (b) describe the limitations and + the code they affect. Such description must be included in the LEGAL + file described in Section 3.4 and must be included with all + distributions of the Source Code. Except to the extent prohibited by + statute or regulation, such description must be sufficiently detailed + for a recipient of ordinary skill to be able to understand it. + +5. Application of this License. + + This License applies to code to which the Initial Developer has + attached the notice in Exhibit A, and to related Covered Code. + +6. Versions of the License. + + 6.1. New Versions. + Netscape Communications Corporation (``Netscape'') may publish revised + and/or new versions of the License from time to time. Each version will + be given a distinguishing version number. + + 6.2. Effect of New Versions. + Once Covered Code has been published under a particular version of the + License, You may always continue to use it under the terms of that + version. You may also choose to use such Covered Code under the terms + of any subsequent version of the License published by Netscape. No one + other than Netscape has the right to modify the terms applicable to + Covered Code created under this License. + + 6.3. Derivative Works. + If you create or use a modified version of this License (which you may + only do in order to apply it to code which is not already Covered Code + governed by this License), you must (a) rename Your license so that the + phrases ``Mozilla'', ``MOZILLAPL'', ``MOZPL'', ``Netscape'', ``NPL'' or + any confusingly similar phrase do not appear anywhere in your license + and (b) otherwise make it clear that your version of the license + contains terms which differ from the Mozilla Public License and + Netscape Public License. (Filling in the name of the Initial Developer, + Original Code or Contributor in the notice described in Exhibit A shall + not of themselves be deemed to be modifications of this License.) + +7. DISCLAIMER OF WARRANTY. + + COVERED CODE IS PROVIDED UNDER THIS LICENSE ON AN ``AS IS'' BASIS, + WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, + WITHOUT LIMITATION, WARRANTIES THAT THE COVERED CODE IS FREE OF + DEFECTS, MERCHANTABLE, FIT FOR A PARTICULAR PURPOSE OR NON-INFRINGING. + THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE COVERED CODE + IS WITH YOU. SHOULD ANY COVERED CODE PROVE DEFECTIVE IN ANY RESPECT, + YOU (NOT THE INITIAL DEVELOPER OR ANY OTHER CONTRIBUTOR) ASSUME THE + COST OF ANY NECESSARY SERVICING, REPAIR OR CORRECTION. THIS DISCLAIMER + OF WARRANTY CONSTITUTES AN ESSENTIAL PART OF THIS LICENSE. NO USE OF + ANY COVERED CODE IS AUTHORIZED HEREUNDER EXCEPT UNDER THIS DISCLAIMER. + +8. TERMINATION. + + This License and the rights granted hereunder will terminate + automatically if You fail to comply with terms herein and fail to cure + such breach within 30 days of becoming aware of the breach. All + sublicenses to the Covered Code which are properly granted shall + survive any termination of this License. Provisions which, by their + nature, must remain in effect beyond the termination of this License + shall survive. + +9. LIMITATION OF LIABILITY. + + UNDER NO CIRCUMSTANCES AND UNDER NO LEGAL THEORY, WHETHER TORT + (INCLUDING NEGLIGENCE), CONTRACT, OR OTHERWISE, SHALL THE INITIAL + DEVELOPER, ANY OTHER CONTRIBUTOR, OR ANY DISTRIBUTOR OF COVERED CODE, + OR ANY SUPPLIER OF ANY OF SUCH PARTIES, BE LIABLE TO YOU OR ANY OTHER + PERSON FOR ANY INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES + OF ANY CHARACTER INCLUDING, WITHOUT LIMITATION, DAMAGES FOR LOSS OF + GOODWILL, WORK STOPPAGE, COMPUTER FAILURE OR MALFUNCTION, OR ANY AND + ALL OTHER COMMERCIAL DAMAGES OR LOSSES, EVEN IF SUCH PARTY SHALL HAVE + BEEN INFORMED OF THE POSSIBILITY OF SUCH DAMAGES. THIS LIMITATION OF + LIABILITY SHALL NOT APPLY TO LIABILITY FOR DEATH OR PERSONAL INJURY + RESULTING FROM SUCH PARTY'S NEGLIGENCE TO THE EXTENT APPLICABLE LAW + PROHIBITS SUCH LIMITATION. SOME JURISDICTIONS DO NOT ALLOW THE + EXCLUSION OR LIMITATION OF INCIDENTAL OR CONSEQUENTIAL DAMAGES, SO THAT + EXCLUSION AND LIMITATION MAY NOT APPLY TO YOU. + +10. U.S. GOVERNMENT END USERS. + + The Covered Code is a ``commercial item,'' as that term is defined in + 48 C.F.R. 2.101 (Oct. 1995), consisting of ``commercial computer + software'' and ``commercial computer software documentation,'' as such + terms are used in 48 C.F.R. 12.212 (Sept. 1995). Consistent with 48 + C.F.R. 12.212 and 48 C.F.R. 227.7202-1 through 227.7202-4 (June 1995), + all U.S. Government End Users acquire Covered Code with only those + rights set forth herein. + +11. MISCELLANEOUS. + + This License represents the complete agreement concerning subject + matter hereof. If any provision of this License is held to be + unenforceable, such provision shall be reformed only to the extent + necessary to make it enforceable. This License shall be governed by + California law provisions (except to the extent applicable law, if any, + provides otherwise), excluding its conflict-of-law provisions. With + respect to disputes in which at least one party is a citizen of, or an + entity chartered or registered to do business in, the United States of + America: (a) unless otherwise agreed in writing, all disputes relating + to this License (excepting any dispute relating to intellectual + property rights) shall be subject to final and binding arbitration, + with the losing party paying all costs of arbitration; (b) any + arbitration relating to this Agreement shall be held in Santa Clara + County, California, under the auspices of JAMS/EndDispute; and (c) any + litigation relating to this Agreement shall be subject to the + jurisdiction of the Federal Courts of the Northern District of + California, with venue lying in Santa Clara County, California, with + the losing party responsible for costs, including without limitation, + court costs and reasonable attorneys fees and expenses. The application + of the United Nations Convention on Contracts for the International + Sale of Goods is expressly excluded. Any law or regulation which + provides that the language of a contract shall be construed against the + drafter shall not apply to this License. + +12. RESPONSIBILITY FOR CLAIMS. + + Except in cases where another Contributor has failed to comply with + Section 3.4, You are responsible for damages arising, directly or + indirectly, out of Your utilization of rights under this License, based + on the number of copies of Covered Code you made available, the + revenues you received from utilizing such rights, and other relevant + factors. You agree to work with affected parties to distribute + responsibility on an equitable basis. + +EXHIBIT A. + + ``The contents of this file are subject to the Mozilla Public License + Version 1.0 (the "License"); you may not use this file except in + compliance with the License. You may obtain a copy of the License at + http://www.mozilla.org/MPL/ + + Software distributed under the License is distributed on an "AS IS" + basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See the + License for the specific language governing rights and limitations + under the License. + + The Original Code is ______________________________________. + + The Initial Developer of the Original Code is ________________________. + Portions created by ______________________ are Copyright (C) ______ + _______________________. All Rights Reserved. + + Contributor(s): ______________________________________.'' diff --git a/Makefile b/Makefile new file mode 100644 index 000000000..0eaf99620 --- /dev/null +++ b/Makefile @@ -0,0 +1,426 @@ +# Generated automatically from Makefile.in by configure. +# Makefile.in generated automatically by automake 1.4 from Makefile.am + +# Copyright (C) 1994, 1995-8, 1999 Free Software Foundation, Inc. +# This Makefile.in is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY, to the extent permitted by law; without +# even the implied warranty of MERCHANTABILITY or FITNESS FOR A +# PARTICULAR PURPOSE. + +# +# $Id$ +# + + +SHELL = /bin/sh + +srcdir = . +top_srcdir = . +prefix = /usr/local +exec_prefix = ${prefix} + +bindir = ${exec_prefix}/bin +sbindir = ${exec_prefix}/sbin +libexecdir = ${exec_prefix}/libexec +datadir = ${prefix}/share +sysconfdir = ${prefix}/etc +sharedstatedir = ${prefix}/com +localstatedir = ${prefix}/var +libdir = ${exec_prefix}/lib +infodir = ${prefix}/info +mandir = ${prefix}/man +includedir = ${prefix}/include +oldincludedir = /usr/include + +DESTDIR = + +pkgdatadir = $(datadir)/curl +pkglibdir = $(libdir)/curl +pkgincludedir = $(includedir)/curl + +top_builddir = . + +ACLOCAL = aclocal +AUTOCONF = autoconf +AUTOMAKE = automake +AUTOHEADER = autoheader + +INSTALL = ./install-sh -c +INSTALL_PROGRAM = ${INSTALL} $(AM_INSTALL_PROGRAM_FLAGS) +INSTALL_DATA = ${INSTALL} -m 644 +INSTALL_SCRIPT = ${INSTALL_PROGRAM} +transform = s,x,x, + +NORMAL_INSTALL = : +PRE_INSTALL = : +POST_INSTALL = : +NORMAL_UNINSTALL = : +PRE_UNINSTALL = : +POST_UNINSTALL = : +host_alias = sparc-sun-solaris2.6 +host_triplet = sparc-sun-solaris2.6 +CC = gcc +MAKEINFO = makeinfo +NROFF = /bin/nroff +PACKAGE = curl +PERL = /usr/local/bin/perl +RANLIB = ranlib +VERSION = 6.3.1 +YACC = bison -y + +AUTOMAKE_OPTIONS = foreign no-dependencies + +man_MANS = curl.1 + +EXTRA_DIST = $(man_MANS) + +SUBDIRS = lib src +ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 +mkinstalldirs = $(SHELL) $(top_srcdir)/mkinstalldirs +CONFIG_HEADER = config.h ./src/config.h +CONFIG_CLEAN_FILES = +man1dir = $(mandir)/man1 +MANS = $(man_MANS) +DIST_COMMON = README ./stamp-h1.in INSTALL Makefile.am Makefile.in TODO \ +acconfig.h aclocal.m4 config.guess config.h.in config.sub configure \ +configure.in install-sh missing mkinstalldirs src/config.h.in \ +src/stamp-h2.in + + +DISTFILES = $(DIST_COMMON) $(SOURCES) $(HEADERS) $(TEXINFOS) $(EXTRA_DIST) + +TAR = tar +GZIP_ENV = --best +all: all-redirect +.SUFFIXES: +$(srcdir)/Makefile.in: Makefile.am $(top_srcdir)/configure.in $(ACLOCAL_M4) + cd $(top_srcdir) && $(AUTOMAKE) --foreign Makefile + +Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status + cd $(top_builddir) \ + && CONFIG_FILES=$@ CONFIG_HEADERS= $(SHELL) ./config.status + +$(ACLOCAL_M4): configure.in + cd $(srcdir) && $(ACLOCAL) + +config.status: $(srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) + $(SHELL) ./config.status --recheck +$(srcdir)/configure: $(srcdir)/configure.in $(ACLOCAL_M4) $(CONFIGURE_DEPENDENCIES) + cd $(srcdir) && $(AUTOCONF) + +config.h: stamp-h1 + @if test ! -f $@; then \ + rm -f stamp-h1; \ + $(MAKE) stamp-h1; \ + else :; fi +stamp-h1: $(srcdir)/config.h.in $(top_builddir)/config.status + cd $(top_builddir) \ + && CONFIG_FILES= CONFIG_HEADERS=config.h \ + $(SHELL) ./config.status + @echo timestamp > stamp-h1 2> /dev/null +$(srcdir)/config.h.in: $(srcdir)/stamp-h1.in + @if test ! -f $@; then \ + rm -f $(srcdir)/stamp-h1.in; \ + $(MAKE) $(srcdir)/stamp-h1.in; \ + else :; fi +$(srcdir)/stamp-h1.in: $(top_srcdir)/configure.in $(ACLOCAL_M4) acconfig.h + cd $(top_srcdir) && $(AUTOHEADER) + @echo timestamp > $(srcdir)/stamp-h1.in 2> /dev/null + +src/config.h: src/stamp-h2 + @if test ! -f $@; then \ + rm -f src/stamp-h2; \ + $(MAKE) src/stamp-h2; \ + else :; fi +src/stamp-h2: $(srcdir)/src/config.h.in $(top_builddir)/config.status + cd $(top_builddir) \ + && CONFIG_FILES= CONFIG_HEADERS=src/config.h \ + $(SHELL) ./config.status + @echo timestamp > src/stamp-h2 2> /dev/null +$(srcdir)/src/config.h.in: $(srcdir)/src/stamp-h2.in + @if test ! -f $@; then \ + rm -f $(srcdir)/src/stamp-h2.in; \ + $(MAKE) $(srcdir)/src/stamp-h2.in; \ + else :; fi +$(srcdir)/src/stamp-h2.in: $(top_srcdir)/configure.in $(ACLOCAL_M4) acconfig.h + cd $(top_srcdir) && $(AUTOHEADER) + @echo timestamp > $(srcdir)/src/stamp-h2.in 2> /dev/null + +mostlyclean-hdr: + +clean-hdr: + +distclean-hdr: + -rm -f config.h src/config.h + +maintainer-clean-hdr: + +install-man1: + $(mkinstalldirs) $(DESTDIR)$(man1dir) + @list='$(man1_MANS)'; \ + l2='$(man_MANS)'; for i in $$l2; do \ + case "$$i" in \ + *.1*) list="$$list $$i" ;; \ + esac; \ + done; \ + for i in $$list; do \ + if test -f $(srcdir)/$$i; then file=$(srcdir)/$$i; \ + else file=$$i; fi; \ + ext=`echo $$i | sed -e 's/^.*\\.//'`; \ + inst=`echo $$i | sed -e 's/\\.[0-9a-z]*$$//'`; \ + inst=`echo $$inst | sed '$(transform)'`.$$ext; \ + echo " $(INSTALL_DATA) $$file $(DESTDIR)$(man1dir)/$$inst"; \ + $(INSTALL_DATA) $$file $(DESTDIR)$(man1dir)/$$inst; \ + done + +uninstall-man1: + @list='$(man1_MANS)'; \ + l2='$(man_MANS)'; for i in $$l2; do \ + case "$$i" in \ + *.1*) list="$$list $$i" ;; \ + esac; \ + done; \ + for i in $$list; do \ + ext=`echo $$i | sed -e 's/^.*\\.//'`; \ + inst=`echo $$i | sed -e 's/\\.[0-9a-z]*$$//'`; \ + inst=`echo $$inst | sed '$(transform)'`.$$ext; \ + echo " rm -f $(DESTDIR)$(man1dir)/$$inst"; \ + rm -f $(DESTDIR)$(man1dir)/$$inst; \ + done +install-man: $(MANS) + @$(NORMAL_INSTALL) + $(MAKE) $(AM_MAKEFLAGS) install-man1 +uninstall-man: + @$(NORMAL_UNINSTALL) + $(MAKE) $(AM_MAKEFLAGS) uninstall-man1 + +# This directory's subdirectories are mostly independent; you can cd +# into them and run `make' without going through this Makefile. +# To change the values of `make' variables: instead of editing Makefiles, +# (1) if the variable is set in `config.status', edit `config.status' +# (which will cause the Makefiles to be regenerated when you run `make'); +# (2) otherwise, pass the desired values on the `make' command line. + + + +all-recursive install-data-recursive install-exec-recursive \ +installdirs-recursive install-recursive uninstall-recursive \ +check-recursive installcheck-recursive info-recursive dvi-recursive: + @set fnord $(MAKEFLAGS); amf=$$2; \ + dot_seen=no; \ + target=`echo $@ | sed s/-recursive//`; \ + list='$(SUBDIRS)'; for subdir in $$list; do \ + echo "Making $$target in $$subdir"; \ + if test "$$subdir" = "."; then \ + dot_seen=yes; \ + local_target="$$target-am"; \ + else \ + local_target="$$target"; \ + fi; \ + (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \ + || case "$$amf" in *=*) exit 1;; *k*) fail=yes;; *) exit 1;; esac; \ + done; \ + if test "$$dot_seen" = "no"; then \ + $(MAKE) $(AM_MAKEFLAGS) "$$target-am" || exit 1; \ + fi; test -z "$$fail" + +mostlyclean-recursive clean-recursive distclean-recursive \ +maintainer-clean-recursive: + @set fnord $(MAKEFLAGS); amf=$$2; \ + dot_seen=no; \ + rev=''; list='$(SUBDIRS)'; for subdir in $$list; do \ + rev="$$subdir $$rev"; \ + test "$$subdir" = "." && dot_seen=yes; \ + done; \ + test "$$dot_seen" = "no" && rev=". $$rev"; \ + target=`echo $@ | sed s/-recursive//`; \ + for subdir in $$rev; do \ + echo "Making $$target in $$subdir"; \ + if test "$$subdir" = "."; then \ + local_target="$$target-am"; \ + else \ + local_target="$$target"; \ + fi; \ + (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \ + || case "$$amf" in *=*) exit 1;; *k*) fail=yes;; *) exit 1;; esac; \ + done && test -z "$$fail" +tags-recursive: + list='$(SUBDIRS)'; for subdir in $$list; do \ + test "$$subdir" = . || (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) tags); \ + done + +tags: TAGS + +ID: $(HEADERS) $(SOURCES) $(LISP) + list='$(SOURCES) $(HEADERS)'; \ + unique=`for i in $$list; do echo $$i; done | \ + awk ' { files[$$0] = 1; } \ + END { for (i in files) print i; }'`; \ + here=`pwd` && cd $(srcdir) \ + && mkid -f$$here/ID $$unique $(LISP) + +TAGS: tags-recursive $(HEADERS) $(SOURCES) config.h.in $(TAGS_DEPENDENCIES) $(LISP) + tags=; \ + here=`pwd`; \ + list='$(SUBDIRS)'; for subdir in $$list; do \ + if test "$$subdir" = .; then :; else \ + test -f $$subdir/TAGS && tags="$$tags -i $$here/$$subdir/TAGS"; \ + fi; \ + done; \ + list='$(SOURCES) $(HEADERS)'; \ + unique=`for i in $$list; do echo $$i; done | \ + awk ' { files[$$0] = 1; } \ + END { for (i in files) print i; }'`; \ + test -z "$(ETAGS_ARGS)config.h.in$$unique$(LISP)$$tags" \ + || (cd $(srcdir) && etags $(ETAGS_ARGS) $$tags config.h.in $$unique $(LISP) -o $$here/TAGS) + +mostlyclean-tags: + +clean-tags: + +distclean-tags: + -rm -f TAGS ID + +maintainer-clean-tags: + +distdir = $(PACKAGE)-$(VERSION) +top_distdir = $(distdir) + +# This target untars the dist file and tries a VPATH configuration. Then +# it guarantees that the distribution is self-contained by making another +# tarfile. +distcheck: dist + -rm -rf $(distdir) + GZIP=$(GZIP_ENV) $(TAR) zxf $(distdir).tar.gz + mkdir $(distdir)/=build + mkdir $(distdir)/=inst + dc_install_base=`cd $(distdir)/=inst && pwd`; \ + cd $(distdir)/=build \ + && ../configure --srcdir=.. --prefix=$$dc_install_base \ + && $(MAKE) $(AM_MAKEFLAGS) \ + && $(MAKE) $(AM_MAKEFLAGS) dvi \ + && $(MAKE) $(AM_MAKEFLAGS) check \ + && $(MAKE) $(AM_MAKEFLAGS) install \ + && $(MAKE) $(AM_MAKEFLAGS) installcheck \ + && $(MAKE) $(AM_MAKEFLAGS) dist + -rm -rf $(distdir) + @banner="$(distdir).tar.gz is ready for distribution"; \ + dashes=`echo "$$banner" | sed s/./=/g`; \ + echo "$$dashes"; \ + echo "$$banner"; \ + echo "$$dashes" +dist: distdir + -chmod -R a+r $(distdir) + GZIP=$(GZIP_ENV) $(TAR) chozf $(distdir).tar.gz $(distdir) + -rm -rf $(distdir) +dist-all: distdir + -chmod -R a+r $(distdir) + GZIP=$(GZIP_ENV) $(TAR) chozf $(distdir).tar.gz $(distdir) + -rm -rf $(distdir) +distdir: $(DISTFILES) + -rm -rf $(distdir) + mkdir $(distdir) + -chmod 777 $(distdir) + @for file in $(DISTFILES); do \ + d=$(srcdir); \ + if test -d $$d/$$file; then \ + cp -pr $$/$$file $(distdir)/$$file; \ + else \ + test -f $(distdir)/$$file \ + || ln $$d/$$file $(distdir)/$$file 2> /dev/null \ + || cp -p $$d/$$file $(distdir)/$$file || :; \ + fi; \ + done + for subdir in $(SUBDIRS); do \ + if test "$$subdir" = .; then :; else \ + test -d $(distdir)/$$subdir \ + || mkdir $(distdir)/$$subdir \ + || exit 1; \ + chmod 777 $(distdir)/$$subdir; \ + (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) top_distdir=../$(distdir) distdir=../$(distdir)/$$subdir distdir) \ + || exit 1; \ + fi; \ + done +info-am: +info: info-recursive +dvi-am: +dvi: dvi-recursive +check-am: all-am +check: check-recursive +installcheck-am: +installcheck: installcheck-recursive +all-recursive-am: config.h + $(MAKE) $(AM_MAKEFLAGS) all-recursive + +install-exec-am: +install-exec: install-exec-recursive + +install-data-am: install-man +install-data: install-data-recursive + +install-am: all-am + @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am +install: install-recursive +uninstall-am: uninstall-man +uninstall: uninstall-recursive +all-am: Makefile $(MANS) config.h +all-redirect: all-recursive-am +install-strip: + $(MAKE) $(AM_MAKEFLAGS) AM_INSTALL_PROGRAM_FLAGS=-s install +installdirs: installdirs-recursive +installdirs-am: + $(mkinstalldirs) $(DESTDIR)$(mandir)/man1 + + +mostlyclean-generic: + +clean-generic: + +distclean-generic: + -rm -f Makefile $(CONFIG_CLEAN_FILES) + -rm -f config.cache config.log stamp-h stamp-h[0-9]* + +maintainer-clean-generic: +mostlyclean-am: mostlyclean-hdr mostlyclean-tags mostlyclean-generic + +mostlyclean: mostlyclean-recursive + +clean-am: clean-hdr clean-tags clean-generic mostlyclean-am + +clean: clean-recursive + +distclean-am: distclean-hdr distclean-tags distclean-generic clean-am + +distclean: distclean-recursive + -rm -f config.status + +maintainer-clean-am: maintainer-clean-hdr maintainer-clean-tags \ + maintainer-clean-generic distclean-am + @echo "This command is intended for maintainers to use;" + @echo "it deletes files that may require special tools to rebuild." + +maintainer-clean: maintainer-clean-recursive + -rm -f config.status + +.PHONY: mostlyclean-hdr distclean-hdr clean-hdr maintainer-clean-hdr \ +install-man1 uninstall-man1 install-man uninstall-man \ +install-data-recursive uninstall-data-recursive install-exec-recursive \ +uninstall-exec-recursive installdirs-recursive uninstalldirs-recursive \ +all-recursive check-recursive installcheck-recursive info-recursive \ +dvi-recursive mostlyclean-recursive distclean-recursive clean-recursive \ +maintainer-clean-recursive tags tags-recursive mostlyclean-tags \ +distclean-tags clean-tags maintainer-clean-tags distdir info-am info \ +dvi-am dvi check check-am installcheck-am installcheck all-recursive-am \ +install-exec-am install-exec install-data-am install-data install-am \ +install uninstall-am uninstall all-redirect all-am all installdirs-am \ +installdirs mostlyclean-generic distclean-generic clean-generic \ +maintainer-clean-generic clean mostlyclean distclean maintainer-clean + + +# Tell versions [3.59,3.63) of GNU make to not export all variables. +# Otherwise a system limit (for SysV at least) may be exceeded. +.NOEXPORT: diff --git a/Makefile.am b/Makefile.am new file mode 100644 index 000000000..b5b81a564 --- /dev/null +++ b/Makefile.am @@ -0,0 +1,13 @@ +# +# $Id$ +# + +AUTOMAKE_OPTIONS = foreign no-dependencies + +man_MANS = curl.1 + +EXTRA_DIST = $(man_MANS) + +SUBDIRS = lib src + + diff --git a/Makefile.dist b/Makefile.dist new file mode 100644 index 000000000..843091df0 --- /dev/null +++ b/Makefile.dist @@ -0,0 +1,78 @@ +############################################################################ +# _ _ ____ _ +# Project ___| | | | _ \| | +# / __| | | | |_) | | +# | (__| |_| | _ <| |___ +# \___|\___/|_| \_\_____| +# +# The contents of this file are subject to the Mozilla Public License +# Version 1.0 (the "License"); you may not use this file except in +# compliance with the License. You may obtain a copy of the License at +# http://www.mozilla.org/MPL/ +# +# Software distributed under the License is distributed on an "AS IS" +# basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See the +# License for the specific language governing rights and limitations +# under the License. +# +# The Original Code is Curl. +# +# The Initial Developer of the Original Code is Daniel Stenberg. +# +# Portions created by the Initial Developer are Copyright (C) 1999. +# All Rights Reserved. +# +# ------------------------------------------------------------ +# Main author: +# - Daniel Stenberg +# +# http://curl.haxx.nu +# +# $Source$ +# $Revision$ +# $Date$ +# $Author$ +# $State$ +# $Locker$ +# +# ------------------------------------------------------------ +# +# In a normal unix-setup, this file will become overwritten. +# +############################################################################ + +all: + ./configure + make + +ssl: + ./configure --with-ssl + make + +mingw32: + cd lib; make -f Makefile.m32 + cd src; make -f Makefile.m32 + +mingw32-ssl: + cd lib; make -f Makefile.m32 SSL=1 + cd src; make -f Makefile.m32 SSL=1 + +vc: + cd lib; nmake -f Makefile.vc6 + cd src; nmake -f Makefile.vc6 + +cygwin: + ./configure + make + +cygwin-ssl: + ./configure --with-ssl + make + +unix: all + +unix-ssl: ssl + +linux: all + +linux-ssl: ssl diff --git a/Makefile.in b/Makefile.in new file mode 100644 index 000000000..18fa70152 --- /dev/null +++ b/Makefile.in @@ -0,0 +1,426 @@ +# Makefile.in generated automatically by automake 1.4 from Makefile.am + +# Copyright (C) 1994, 1995-8, 1999 Free Software Foundation, Inc. +# This Makefile.in is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY, to the extent permitted by law; without +# even the implied warranty of MERCHANTABILITY or FITNESS FOR A +# PARTICULAR PURPOSE. + +# +# $Id$ +# + + +SHELL = @SHELL@ + +srcdir = @srcdir@ +top_srcdir = @top_srcdir@ +VPATH = @srcdir@ +prefix = @prefix@ +exec_prefix = @exec_prefix@ + +bindir = @bindir@ +sbindir = @sbindir@ +libexecdir = @libexecdir@ +datadir = @datadir@ +sysconfdir = @sysconfdir@ +sharedstatedir = @sharedstatedir@ +localstatedir = @localstatedir@ +libdir = @libdir@ +infodir = @infodir@ +mandir = @mandir@ +includedir = @includedir@ +oldincludedir = /usr/include + +DESTDIR = + +pkgdatadir = $(datadir)/@PACKAGE@ +pkglibdir = $(libdir)/@PACKAGE@ +pkgincludedir = $(includedir)/@PACKAGE@ + +top_builddir = . + +ACLOCAL = @ACLOCAL@ +AUTOCONF = @AUTOCONF@ +AUTOMAKE = @AUTOMAKE@ +AUTOHEADER = @AUTOHEADER@ + +INSTALL = @INSTALL@ +INSTALL_PROGRAM = @INSTALL_PROGRAM@ $(AM_INSTALL_PROGRAM_FLAGS) +INSTALL_DATA = @INSTALL_DATA@ +INSTALL_SCRIPT = @INSTALL_SCRIPT@ +transform = @program_transform_name@ + +NORMAL_INSTALL = : +PRE_INSTALL = : +POST_INSTALL = : +NORMAL_UNINSTALL = : +PRE_UNINSTALL = : +POST_UNINSTALL = : +host_alias = @host_alias@ +host_triplet = @host@ +CC = @CC@ +MAKEINFO = @MAKEINFO@ +NROFF = @NROFF@ +PACKAGE = @PACKAGE@ +PERL = @PERL@ +RANLIB = @RANLIB@ +VERSION = @VERSION@ +YACC = @YACC@ + +AUTOMAKE_OPTIONS = foreign no-dependencies + +man_MANS = curl.1 + +EXTRA_DIST = $(man_MANS) + +SUBDIRS = lib src +ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 +mkinstalldirs = $(SHELL) $(top_srcdir)/mkinstalldirs +CONFIG_HEADER = config.h ./src/config.h +CONFIG_CLEAN_FILES = +man1dir = $(mandir)/man1 +MANS = $(man_MANS) +DIST_COMMON = README ./stamp-h1.in INSTALL Makefile.am Makefile.in TODO \ +acconfig.h aclocal.m4 config.guess config.h.in config.sub configure \ +configure.in install-sh missing mkinstalldirs src/config.h.in \ +src/stamp-h2.in + + +DISTFILES = $(DIST_COMMON) $(SOURCES) $(HEADERS) $(TEXINFOS) $(EXTRA_DIST) + +TAR = tar +GZIP_ENV = --best +all: all-redirect +.SUFFIXES: +$(srcdir)/Makefile.in: Makefile.am $(top_srcdir)/configure.in $(ACLOCAL_M4) + cd $(top_srcdir) && $(AUTOMAKE) --foreign Makefile + +Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status + cd $(top_builddir) \ + && CONFIG_FILES=$@ CONFIG_HEADERS= $(SHELL) ./config.status + +$(ACLOCAL_M4): configure.in + cd $(srcdir) && $(ACLOCAL) + +config.status: $(srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) + $(SHELL) ./config.status --recheck +$(srcdir)/configure: $(srcdir)/configure.in $(ACLOCAL_M4) $(CONFIGURE_DEPENDENCIES) + cd $(srcdir) && $(AUTOCONF) + +config.h: stamp-h1 + @if test ! -f $@; then \ + rm -f stamp-h1; \ + $(MAKE) stamp-h1; \ + else :; fi +stamp-h1: $(srcdir)/config.h.in $(top_builddir)/config.status + cd $(top_builddir) \ + && CONFIG_FILES= CONFIG_HEADERS=config.h \ + $(SHELL) ./config.status + @echo timestamp > stamp-h1 2> /dev/null +$(srcdir)/config.h.in: $(srcdir)/stamp-h1.in + @if test ! -f $@; then \ + rm -f $(srcdir)/stamp-h1.in; \ + $(MAKE) $(srcdir)/stamp-h1.in; \ + else :; fi +$(srcdir)/stamp-h1.in: $(top_srcdir)/configure.in $(ACLOCAL_M4) acconfig.h + cd $(top_srcdir) && $(AUTOHEADER) + @echo timestamp > $(srcdir)/stamp-h1.in 2> /dev/null + +src/config.h: src/stamp-h2 + @if test ! -f $@; then \ + rm -f src/stamp-h2; \ + $(MAKE) src/stamp-h2; \ + else :; fi +src/stamp-h2: $(srcdir)/src/config.h.in $(top_builddir)/config.status + cd $(top_builddir) \ + && CONFIG_FILES= CONFIG_HEADERS=src/config.h \ + $(SHELL) ./config.status + @echo timestamp > src/stamp-h2 2> /dev/null +$(srcdir)/src/config.h.in: $(srcdir)/src/stamp-h2.in + @if test ! -f $@; then \ + rm -f $(srcdir)/src/stamp-h2.in; \ + $(MAKE) $(srcdir)/src/stamp-h2.in; \ + else :; fi +$(srcdir)/src/stamp-h2.in: $(top_srcdir)/configure.in $(ACLOCAL_M4) acconfig.h + cd $(top_srcdir) && $(AUTOHEADER) + @echo timestamp > $(srcdir)/src/stamp-h2.in 2> /dev/null + +mostlyclean-hdr: + +clean-hdr: + +distclean-hdr: + -rm -f config.h src/config.h + +maintainer-clean-hdr: + +install-man1: + $(mkinstalldirs) $(DESTDIR)$(man1dir) + @list='$(man1_MANS)'; \ + l2='$(man_MANS)'; for i in $$l2; do \ + case "$$i" in \ + *.1*) list="$$list $$i" ;; \ + esac; \ + done; \ + for i in $$list; do \ + if test -f $(srcdir)/$$i; then file=$(srcdir)/$$i; \ + else file=$$i; fi; \ + ext=`echo $$i | sed -e 's/^.*\\.//'`; \ + inst=`echo $$i | sed -e 's/\\.[0-9a-z]*$$//'`; \ + inst=`echo $$inst | sed '$(transform)'`.$$ext; \ + echo " $(INSTALL_DATA) $$file $(DESTDIR)$(man1dir)/$$inst"; \ + $(INSTALL_DATA) $$file $(DESTDIR)$(man1dir)/$$inst; \ + done + +uninstall-man1: + @list='$(man1_MANS)'; \ + l2='$(man_MANS)'; for i in $$l2; do \ + case "$$i" in \ + *.1*) list="$$list $$i" ;; \ + esac; \ + done; \ + for i in $$list; do \ + ext=`echo $$i | sed -e 's/^.*\\.//'`; \ + inst=`echo $$i | sed -e 's/\\.[0-9a-z]*$$//'`; \ + inst=`echo $$inst | sed '$(transform)'`.$$ext; \ + echo " rm -f $(DESTDIR)$(man1dir)/$$inst"; \ + rm -f $(DESTDIR)$(man1dir)/$$inst; \ + done +install-man: $(MANS) + @$(NORMAL_INSTALL) + $(MAKE) $(AM_MAKEFLAGS) install-man1 +uninstall-man: + @$(NORMAL_UNINSTALL) + $(MAKE) $(AM_MAKEFLAGS) uninstall-man1 + +# This directory's subdirectories are mostly independent; you can cd +# into them and run `make' without going through this Makefile. +# To change the values of `make' variables: instead of editing Makefiles, +# (1) if the variable is set in `config.status', edit `config.status' +# (which will cause the Makefiles to be regenerated when you run `make'); +# (2) otherwise, pass the desired values on the `make' command line. + +@SET_MAKE@ + +all-recursive install-data-recursive install-exec-recursive \ +installdirs-recursive install-recursive uninstall-recursive \ +check-recursive installcheck-recursive info-recursive dvi-recursive: + @set fnord $(MAKEFLAGS); amf=$$2; \ + dot_seen=no; \ + target=`echo $@ | sed s/-recursive//`; \ + list='$(SUBDIRS)'; for subdir in $$list; do \ + echo "Making $$target in $$subdir"; \ + if test "$$subdir" = "."; then \ + dot_seen=yes; \ + local_target="$$target-am"; \ + else \ + local_target="$$target"; \ + fi; \ + (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \ + || case "$$amf" in *=*) exit 1;; *k*) fail=yes;; *) exit 1;; esac; \ + done; \ + if test "$$dot_seen" = "no"; then \ + $(MAKE) $(AM_MAKEFLAGS) "$$target-am" || exit 1; \ + fi; test -z "$$fail" + +mostlyclean-recursive clean-recursive distclean-recursive \ +maintainer-clean-recursive: + @set fnord $(MAKEFLAGS); amf=$$2; \ + dot_seen=no; \ + rev=''; list='$(SUBDIRS)'; for subdir in $$list; do \ + rev="$$subdir $$rev"; \ + test "$$subdir" = "." && dot_seen=yes; \ + done; \ + test "$$dot_seen" = "no" && rev=". $$rev"; \ + target=`echo $@ | sed s/-recursive//`; \ + for subdir in $$rev; do \ + echo "Making $$target in $$subdir"; \ + if test "$$subdir" = "."; then \ + local_target="$$target-am"; \ + else \ + local_target="$$target"; \ + fi; \ + (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \ + || case "$$amf" in *=*) exit 1;; *k*) fail=yes;; *) exit 1;; esac; \ + done && test -z "$$fail" +tags-recursive: + list='$(SUBDIRS)'; for subdir in $$list; do \ + test "$$subdir" = . || (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) tags); \ + done + +tags: TAGS + +ID: $(HEADERS) $(SOURCES) $(LISP) + list='$(SOURCES) $(HEADERS)'; \ + unique=`for i in $$list; do echo $$i; done | \ + awk ' { files[$$0] = 1; } \ + END { for (i in files) print i; }'`; \ + here=`pwd` && cd $(srcdir) \ + && mkid -f$$here/ID $$unique $(LISP) + +TAGS: tags-recursive $(HEADERS) $(SOURCES) config.h.in $(TAGS_DEPENDENCIES) $(LISP) + tags=; \ + here=`pwd`; \ + list='$(SUBDIRS)'; for subdir in $$list; do \ + if test "$$subdir" = .; then :; else \ + test -f $$subdir/TAGS && tags="$$tags -i $$here/$$subdir/TAGS"; \ + fi; \ + done; \ + list='$(SOURCES) $(HEADERS)'; \ + unique=`for i in $$list; do echo $$i; done | \ + awk ' { files[$$0] = 1; } \ + END { for (i in files) print i; }'`; \ + test -z "$(ETAGS_ARGS)config.h.in$$unique$(LISP)$$tags" \ + || (cd $(srcdir) && etags $(ETAGS_ARGS) $$tags config.h.in $$unique $(LISP) -o $$here/TAGS) + +mostlyclean-tags: + +clean-tags: + +distclean-tags: + -rm -f TAGS ID + +maintainer-clean-tags: + +distdir = $(PACKAGE)-$(VERSION) +top_distdir = $(distdir) + +# This target untars the dist file and tries a VPATH configuration. Then +# it guarantees that the distribution is self-contained by making another +# tarfile. +distcheck: dist + -rm -rf $(distdir) + GZIP=$(GZIP_ENV) $(TAR) zxf $(distdir).tar.gz + mkdir $(distdir)/=build + mkdir $(distdir)/=inst + dc_install_base=`cd $(distdir)/=inst && pwd`; \ + cd $(distdir)/=build \ + && ../configure --srcdir=.. --prefix=$$dc_install_base \ + && $(MAKE) $(AM_MAKEFLAGS) \ + && $(MAKE) $(AM_MAKEFLAGS) dvi \ + && $(MAKE) $(AM_MAKEFLAGS) check \ + && $(MAKE) $(AM_MAKEFLAGS) install \ + && $(MAKE) $(AM_MAKEFLAGS) installcheck \ + && $(MAKE) $(AM_MAKEFLAGS) dist + -rm -rf $(distdir) + @banner="$(distdir).tar.gz is ready for distribution"; \ + dashes=`echo "$$banner" | sed s/./=/g`; \ + echo "$$dashes"; \ + echo "$$banner"; \ + echo "$$dashes" +dist: distdir + -chmod -R a+r $(distdir) + GZIP=$(GZIP_ENV) $(TAR) chozf $(distdir).tar.gz $(distdir) + -rm -rf $(distdir) +dist-all: distdir + -chmod -R a+r $(distdir) + GZIP=$(GZIP_ENV) $(TAR) chozf $(distdir).tar.gz $(distdir) + -rm -rf $(distdir) +distdir: $(DISTFILES) + -rm -rf $(distdir) + mkdir $(distdir) + -chmod 777 $(distdir) + @for file in $(DISTFILES); do \ + d=$(srcdir); \ + if test -d $$d/$$file; then \ + cp -pr $$/$$file $(distdir)/$$file; \ + else \ + test -f $(distdir)/$$file \ + || ln $$d/$$file $(distdir)/$$file 2> /dev/null \ + || cp -p $$d/$$file $(distdir)/$$file || :; \ + fi; \ + done + for subdir in $(SUBDIRS); do \ + if test "$$subdir" = .; then :; else \ + test -d $(distdir)/$$subdir \ + || mkdir $(distdir)/$$subdir \ + || exit 1; \ + chmod 777 $(distdir)/$$subdir; \ + (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) top_distdir=../$(distdir) distdir=../$(distdir)/$$subdir distdir) \ + || exit 1; \ + fi; \ + done +info-am: +info: info-recursive +dvi-am: +dvi: dvi-recursive +check-am: all-am +check: check-recursive +installcheck-am: +installcheck: installcheck-recursive +all-recursive-am: config.h + $(MAKE) $(AM_MAKEFLAGS) all-recursive + +install-exec-am: +install-exec: install-exec-recursive + +install-data-am: install-man +install-data: install-data-recursive + +install-am: all-am + @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am +install: install-recursive +uninstall-am: uninstall-man +uninstall: uninstall-recursive +all-am: Makefile $(MANS) config.h +all-redirect: all-recursive-am +install-strip: + $(MAKE) $(AM_MAKEFLAGS) AM_INSTALL_PROGRAM_FLAGS=-s install +installdirs: installdirs-recursive +installdirs-am: + $(mkinstalldirs) $(DESTDIR)$(mandir)/man1 + + +mostlyclean-generic: + +clean-generic: + +distclean-generic: + -rm -f Makefile $(CONFIG_CLEAN_FILES) + -rm -f config.cache config.log stamp-h stamp-h[0-9]* + +maintainer-clean-generic: +mostlyclean-am: mostlyclean-hdr mostlyclean-tags mostlyclean-generic + +mostlyclean: mostlyclean-recursive + +clean-am: clean-hdr clean-tags clean-generic mostlyclean-am + +clean: clean-recursive + +distclean-am: distclean-hdr distclean-tags distclean-generic clean-am + +distclean: distclean-recursive + -rm -f config.status + +maintainer-clean-am: maintainer-clean-hdr maintainer-clean-tags \ + maintainer-clean-generic distclean-am + @echo "This command is intended for maintainers to use;" + @echo "it deletes files that may require special tools to rebuild." + +maintainer-clean: maintainer-clean-recursive + -rm -f config.status + +.PHONY: mostlyclean-hdr distclean-hdr clean-hdr maintainer-clean-hdr \ +install-man1 uninstall-man1 install-man uninstall-man \ +install-data-recursive uninstall-data-recursive install-exec-recursive \ +uninstall-exec-recursive installdirs-recursive uninstalldirs-recursive \ +all-recursive check-recursive installcheck-recursive info-recursive \ +dvi-recursive mostlyclean-recursive distclean-recursive clean-recursive \ +maintainer-clean-recursive tags tags-recursive mostlyclean-tags \ +distclean-tags clean-tags maintainer-clean-tags distdir info-am info \ +dvi-am dvi check check-am installcheck-am installcheck all-recursive-am \ +install-exec-am install-exec install-data-am install-data install-am \ +install uninstall-am uninstall all-redirect all-am all installdirs-am \ +installdirs mostlyclean-generic distclean-generic clean-generic \ +maintainer-clean-generic clean mostlyclean distclean maintainer-clean + + +# Tell versions [3.59,3.63) of GNU make to not export all variables. +# Otherwise a system limit (for SysV at least) may be exceeded. +.NOEXPORT: diff --git a/README b/README new file mode 100644 index 000000000..e7754b592 --- /dev/null +++ b/README @@ -0,0 +1,28 @@ + _ _ ____ _ + ___| | | | _ \| | + / __| | | | |_) | | + | (__| |_| | _ <| |___ + \___|\___/|_| \_\_____| + +README + + Curl is a command line tool for transfering data specified with URL + syntax. Find out how to use Curl by reading the curl.1 man page or the + README.curl document. Find out how to install Curl by reading the INSTALL + document. + + libcurl is a link-library that Curl is using to to its job. It is readily + available to be used by your software. Read the README.libcurl document to + find out how! + + You find answers to the most frequent questions we get in the FAQ document. + + Always try the Curl web site for the latest news: + + http://curl.haxx.nu + + The official download mirror sites are: + + Sweden -- ftp://ftp.sunet.se/pub/www/utilities/curl/ + Germany -- ftp://ftp.fu-berlin.de/pub/unix/network/curl/ + China -- http://www.pshowing.com/curl/ diff --git a/README.curl b/README.curl new file mode 100644 index 000000000..00f685e41 --- /dev/null +++ b/README.curl @@ -0,0 +1,611 @@ +LATEST VERSION + + You always find news about what's going on as well as the latest versions + from the curl web pages, located at: + + http://curl.haxx.nu + +SIMPLE USAGE + + Get the main page from netscape's web-server: + + curl http://www.netscape.com/ + + Get the root README file from funet's ftp-server: + + curl ftp://ftp.funet.fi/README + + Get a gopher document from funet's gopher server: + + curl gopher://gopher.funet.fi + + Get a web page from a server using port 8000: + + curl http://www.weirdserver.com:8000/ + + Get a list of the root directory of an FTP site: + + curl ftp://ftp.fts.frontec.se/ + + Get the definition of curl from a dictionary: + + curl dict://dict.org/m:curl + +DOWNLOAD TO A FILE + + Get a web page and store in a local file: + + curl -o thatpage.html http://www.netscape.com/ + + Get a web page and store in a local file, make the local file get the name + of the remote document (if no file name part is specified in the URL, this + will fail): + + curl -O http://www.netscape.com/index.html + +USING PASSWORDS + + FTP + + To ftp files using name+passwd, include them in the URL like: + + curl ftp://name:passwd@machine.domain:port/full/path/to/file + + or specify them with the -u flag like + + curl -u name:passwd ftp://machine.domain:port/full/path/to/file + + HTTP + + The HTTP URL doesn't support user and password in the URL string. Curl + does support that anyway to provide a ftp-style interface and thus you can + pick a file like: + + curl http://name:passwd@machine.domain/full/path/to/file + + or specify user and password separately like in + + curl -u name:passwd http://machine.domain/full/path/to/file + + NOTE! Since HTTP URLs don't support user and password, you can't use that + style when using Curl via a proxy. You _must_ use the -u style fetch + during such circumstances. + + HTTPS + + Probably most commonly used with private certificates, as explained below. + + GOPHER + + Curl features no password support for gopher. + +PROXY + + Get an ftp file using a proxy named my-proxy that uses port 888: + + curl -x my-proxy:888 ftp://ftp.leachsite.com/README + + Get a file from a HTTP server that requires user and password, using the + same proxy as above: + + curl -u user:passwd -x my-proxy:888 http://www.get.this/ + + Some proxies require special authentication. Specify by using -U as above: + + curl -U user:passwd -x my-proxy:888 http://www.get.this/ + + See also the environment variables Curl support that offer further proxy + control. + +RANGES + + With HTTP 1.1 byte-ranges were introduced. Using this, a client can request + to get only one or more subparts of a specified document. Curl supports + this with the -r flag. + + Get the first 100 bytes of a document: + + curl -r 0-99 http://www.get.this/ + + Get the last 500 bytes of a document: + + curl -r -500 http://www.get.this/ + + Curl also supports simple ranges for FTP files as well. Then you can only + specify start and stop position. + + Get the first 100 bytes of a document using FTP: + + curl -r 0-99 ftp://www.get.this/README + +UPLOADING + + FTP + + Upload all data on stdin to a specified ftp site: + + curl -t ftp://ftp.upload.com/myfile + + Upload data from a specified file, login with user and password: + + curl -T uploadfile -u user:passwd ftp://ftp.upload.com/myfile + + Upload a local file to the remote site, and use the local file name remote + too: + + curl -T uploadfile -u user:passwd ftp://ftp.upload.com/ + + NOTE: Curl is not currently supporing ftp upload through a proxy! The reason + for this is simply that proxies are seldomly configured to allow this and + that no author has supplied code that makes it possible! + + HTTP + + Upload all data on stdin to a specified http site: + + curl -t http://www.upload.com/myfile + + Note that the http server must've been configured to accept PUT before this + can be done successfully. + + For other ways to do http data upload, see the POST section below. + +VERBOSE / DEBUG + + If curl fails where it isn't supposed to, if the servers don't let you + in, if you can't understand the responses: use the -v flag to get VERBOSE + fetching. Curl will output lots of info and all data it sends and + receives in order to let the user see all client-server interaction. + + curl -v ftp://ftp.upload.com/ + +DETAILED INFORMATION + + Different protocols provide different ways of getting detailed information + about specific files/documents. To get curl to show detailed information + about a single file, you should use -I/--head option. It displays all + available info on a single file for HTTP and FTP. The HTTP information is a + lot more extensive. + + For HTTP, you can get the header information (the same as -I would show) + shown before the data by using -i/--include. Curl understands the + -D/--dump-header option when getting files from both FTP and HTTP, and it + will then store the headers in the specified file. + + Store the HTTP headers in a separate file: + + curl --dump-header headers.txt curl.haxx.nu + + Note that headers stored in a separate file can be very useful at a later + time if you want curl to use cookies sent by the server. More about that in + the cookies section. + +POST (HTTP) + + It's easy to post data using curl. This is done using the -d + option. The post data must be urlencoded. + + Post a simple "name" and "phone" guestbook. + + curl -d "name=Rafael%20Sagula&phone=3320780" \ + http://www.where.com/guest.cgi + + While -d uses the application/x-www-form-urlencoded mime-type, generally + understood by CGI's and similar, curl also supports the more capable + multipart/form-data type. This latter type supports things like file upload. + + -F accepts parameters like -F "name=contents". If you want the contents to + be read from a file, use <@filename> as contents. When specifying a file, + you can also specify which content type the file is, by appending + ';type=' to the file name. You can also post contents of several + files in one field. So that the field name 'coolfiles' can be sent three + files with different content types in a manner similar to: + + curl -F "coolfiles=@fil1.gif;type=image/gif,fil2.txt,fil3.html" \ + http://www.post.com/postit.cgi + + If content-type is not specified, curl will try to guess from the extension + (it only knows a few), or use the previously specified type (from an earlier + file if several files are specified in a list) or finally using the default + type 'text/plain'. + + Emulate a fill-in form with -F. Let's say you fill in three fields in a + form. One field is a file name which to post, one field is your name and one + field is a file description. We want to post the file we have written named + "cooltext.txt". To let curl do the posting of this data instead of your + favourite browser, you have to check out the HTML of the form page to get to + know the names of the input fields. In our example, the input field names are + 'file', 'yourname' and 'filedescription'. + + curl -F "file=@cooltext.txt" -F "yourname=Daniel" \ + -F "filedescription=Cool text file with cool text inside" \ + http://www.post.com/postit.cgi + + So, to send two files in one post you can do it in two ways: + + 1. Send multiple files in a single "field" with a single field name: + + curl -F "pictures=@dog.gif,cat.gif" + + 2. Send two fields with two field names: + + curl -F "docpicture=@dog.gif" -F "catpicture=@cat.gif" + +REFERER + + A HTTP request has the option to include information about which address + that referred to actual page, and curl allows the user to specify that + referrer to get specified on the command line. It is especially useful to + fool or trick stupid servers or CGI scripts that rely on that information + being available or contain certain data. + + curl -e www.coolsite.com http://www.showme.com/ + +USER AGENT + + A HTTP request has the option to include information about the browser + that generated the request. Curl allows it to be specified on the command + line. It is especially useful to fool or trick stupid servers or CGI + scripts that only accept certain browsers. + + Example: + + curl -A 'Mozilla/3.0 (Win95; I)' http://www.nationsbank.com/ + + Other common strings: + 'Mozilla/3.0 (Win95; I)' Netscape Version 3 for Windows 95 + 'Mozilla/3.04 (Win95; U)' Netscape Version 3 for Windows 95 + 'Mozilla/2.02 (OS/2; U)' Netscape Version 2 for OS/2 + 'Mozilla/4.04 [en] (X11; U; AIX 4.2; Nav)' NS for AIX + 'Mozilla/4.05 [en] (X11; U; Linux 2.0.32 i586)' NS for Linux + + Note that Internet Explorer tries hard to be compatible in every way: + 'Mozilla/4.0 (compatible; MSIE 4.01; Windows 95)' MSIE for W95 + + Mozilla is not the only possible User-Agent name: + 'Konqueror/1.0' KDE File Manager desktop client + 'Lynx/2.7.1 libwww-FM/2.14' Lynx command line browser + +COOKIES + + Cookies are generally used by web servers to keep state information at the + client's side. The server sets cookies by sending a response line in the + headers that looks like 'Set-Cookie: ' where the data part then + typically contains a set of NAME=VALUE pairs (separated by semicolons ';' + like "NAME1=VALUE1; NAME2=VALUE2;"). The server can also specify for what + path the "cookie" should be used for (by specifying "path=value"), when the + cookie should expire ("expire=DATE"), for what domain to use it + ("domain=NAME") and if it should be used on secure connections only + ("secure"). + + If you've received a page from a server that contains a header like: + Set-Cookie: sessionid=boo123; path="/foo"; + + it means the server wants that first pair passed on when we get anything in + a path beginning with "/foo". + + Example, get a page that wants my name passed in a cookie: + + curl -b "name=Daniel" www.sillypage.com + + Curl also has the ability to use previously received cookies in following + sessions. If you get cookies from a server and store them in a file in a + manner similar to: + + curl --dump-header headers www.example.com + + ... you can then in a second connect to that (or another) site, use the + cookies from the 'headers' file like: + + curl -b headers www.example.com + + Note that by specifying -b you enable the "cookie awareness" and with -L + you can make curl follow a location: (which often is used in combination + with cookies). So that if a site sends cookies and a location, you can + use a non-existing file to trig the cookie awareness like: + + curl -L -b empty-file www.example.com + + The file to read cookies from must be formatted using plain HTTP headers OR + as netscape's cookie file. Curl will determine what kind it is based on the + file contents. + +PROGRESS METER + + The progress meter was introduced to better show a user that something + actually is happening. The different fields in the output have the following + meaning: + + % Received Total Speed Time left Total Curr.Speed + 13 524140 3841536 4296 0:12:52 0:14:54 292 + + From left-to-right: + - The first column, is the percentage of the file currently transfered. + - Received means the total number of bytes that has been transfered. + - Total is the total number of bytes expected to transfer. + - Speed is average speed in bytes per second for the whole transfer so far. + - Time left is the estimated time left for this transfer to finnish if the + current average speed will remain steady. + - Total is the estimated total transfer time. + - Curr.Speed is the average transfer speed the last 5 seconds (the first + 5 seconds of a transfer is based on less time of course.) + + NOTE: Much of the output is based on the fact that the size of the transfer + is known before it takes place. If it isn't, a much less fancy display will + be used. + +SPEED LIMIT + + Curl offers the user to set conditions regarding transfer speed that must + be met to let the transfer keep going. By using the switch -y and -Y you + can make curl abort transfers if the transfer speed doesn't exceed your + given lowest limit for a specified time. + + To let curl abandon downloading this page if its slower than 3000 bytes per + second for 1 minute, run: + + curl -y 3000 -Y 60 www.far-away-site.com + + This can very well be used in combination with the overall time limit, so + that the above operatioin must be completed in whole within 30 minutes: + + curl -m 1800 -y 3000 -Y 60 www.far-away-site.com + +CONFIG FILE + + Curl automatically tries to read the .curlrc file (or _curlrc file on win32 + systems) from the user's home dir on startup. The config file should be + made up with normal command line switches. Comments can be used within the + file. If the first letter on a line is a '#'-letter the rest of the line + is treated as a comment. + + Example, set default time out and proxy in a config file: + + # We want a 30 minute timeout: + -m 1800 + # ... and we use a proxy for all accesses: + -x proxy.our.domain.com:8080 + + White spaces ARE significant at the end of lines, but all white spaces + leading up to the first characters of each line are ignored. + + Prevent curl from reading the default file by using -q as the first command + line parameter, like: + + curl -q www.thatsite.com + + Force curl to get and display a local help page in case it is invoked + without URL by making a config file similar to: + + # default url to get + http://help.with.curl.com/curlhelp.html + + You can specify another config file to be read by using the -K/--config + flag. If you set config file name to "-" it'll read the config from stdin, + which can be handy if you want to hide options from being visible in process + tables etc: + + echo "-u user:passwd" | curl -K - http://that.secret.site.com + +EXTRA HEADERS + + When using curl in your own very special programs, you may end up needing + to pass on your own custom headers when getting a web page. You can do + this by using the -H flag. + + Example, send the header "X-you-and-me: yes" to the server when getting a + page: + + curl -H "X-you-and-me: yes" www.love.com + + This can also be useful in case you want curl to send a different text in + a header than it normally does. The -H header you specify then replaces the + header curl would normally send. + +FTP and PATH NAMES + + Do note that when getting files with the ftp:// URL, the given path is + relative the directory you enter. To get the file 'README' from your home + directory at your ftp site, do: + + curl ftp://user:passwd@my.site.com/README + + But if you want the README file from the root directory of that very same + site, you need to specify the absolute file name: + + curl ftp://user:passwd@my.site.com//README + + (I.e with an extra slash in front of the file name.) + +FTP and firewalls + + The FTP protocol requires one of the involved parties to open a second + connction as soon as data is about to get transfered. There are two ways to + do this. + + The default way for curl is to issue the PASV command which causes the + server to open another port and await another connection performed by the + client. This is good if the client is behind a firewall that don't allow + incoming connections. + + curl ftp.download.com + + If the server for example, is behind a firewall that don't allow connections + on other ports than 21 (or if it just doesn't support the PASV command), the + other way to do it is to use the PORT command and instruct the server to + connect to the client on the given (as parameters to the PORT command) IP + number and port. + + The -P flag to curl allows for different options. Your machine may have + several IP-addresses and/or network interfaces and curl allows you to select + which of them to use. Default address can also be used: + + curl -P - ftp.download.com + + Download with PORT but use the IP address of our 'le0' interface: + + curl -P le0 ftp.download.com + + Download with PORT but use 192.168.0.10 as our IP address to use: + + curl -P 192.168.0.10 ftp.download.com + +HTTPS + + Secure HTTP requires SSLeay to be installed and used when curl is built. If + that is done, curl is capable of retrieving and posting documents using the + HTTPS procotol. + + Example: + + curl https://www.secure-site.com + + Curl is also capable of using your personal certificates to get/post files + from sites that require valid certificates. The only drawback is that the + certificate needs to be in PEM-format. PEM is a standard and open format to + store certificates with, but it is not used by the most commonly used + browsers (Netscape and MSEI both use the so called PKCS#12 format). If you + want curl to use the certificates you use with your (favourite) browser, you + may need to download/compile a converter that can convert your browser's + formatted certificates to PEM formatted ones. Dr Stephen N. Henson has + written a patch for SSLeay that adds this functionality. You can get his + patch (that requires an SSLeay installation) from his site at: + http://www.drh-consultancy.demon.co.uk/ + + Example on how to automatically retrieve a document using a certificate with + a personal password: + + curl -E /path/to/cert.pem:password https://secure.site.com/ + + If you neglect to specify the password on the command line, you will be + prompted for the correct password before any data can be received. + + Many older SSL-servers have problems with SSLv3 or TLS, that newer versions + of OpenSSL etc is using, therefore it is sometimes useful to specify what + SSL-version curl should use. Use -3 or -2 to specify that exact SSL version + to use: + + curl -2 https://secure.site.com/ + + Otherwise, curl will first attempt to use v3 and then v2. + +RESUMING FILE TRANSFERS + + To continue a file transfer where it was previously aborted, curl supports + resume on http(s) downloads as well as ftp uploads and downloads. + + Continue downloading a document: + + curl -c -o file ftp://ftp.server.com/path/file + + Continue uploading a document(*1): + + curl -c -T file ftp://ftp.server.com/path/file + + Continue downloading a document from a web server(*2): + + curl -c -o file http://www.server.com/ + + (*1) = This requires that the ftp server supports the non-standard command + SIZE. If it doesn't, curl will say so. + + (*2) = This requires that the wb server supports at least HTTP/1.1. If it + doesn't, curl will say so. + +TIME CONDITIONS + + HTTP allows a client to specify a time condition for the document it + requests. It is If-Modified-Since or If-Unmodified-Since. Curl allow you to + specify them with the -z/--time-cond flag. + + For example, you can easily make a download that only gets performed if the + remote file is newer than a local copy. It would be made like: + + curl -z local.html http://remote.server.com/remote.html + + Or you can download a file only if the local file is newer than the remote + one. Do this by prepending the date string with a '-', as in: + + curl -z -local.html http://remote.server.com/remote.html + + You can specify a "free text" date as condition. Tell curl to only download + the file if it was updated since yesterday: + + curl -z yesterday http://remote.server.com/remote.html + + Curl will then accept a wide range of date formats. You always make the date + check the other way around by prepending it with a dash '-'. + +DICT + + For fun try + + curl dict://dict.org/m:curl + curl dict://dict.org/d:heisenbug:jargon + curl dict://dict.org/d:daniel:web1913 + + Aliases for 'm' are 'match' and 'find', and aliases for 'd' are 'define' + and 'lookup'. For example, + + curl dict://dict.org/find:curl + + Commands that break the URL description of the RFC (but not the DICT + protocol) are + + curl dict://dict.org/show:db + curl dict://dict.org/show:strat + + Authentication is still missing (but this is not required by the RFC) + +LDAP + + If you have installed the OpenLDAP library, curl can take advantage of it + and offer ldap:// support. + + LDAP is a complex thing and writing an LDAP query is not an easy task. I do + advice you to dig up the syntax description for that elsewhere, RFC 1959 if + no other place is better. + + To show you an example, this is now I can get all people from my local LDAP + server that has a certain sub-domain in their email address: + + curl -B "ldap://ldap.frontec.se/o=frontec??sub?mail=*sth.frontec.se" + + If I want the same info in HTML format, I can get it by not using the -B + (enforce ASCII) flag. + +ENVIRONMENT VARIABLES + + Curl reads and understands the following environment variables: + + HTTP_PROXY, HTTPS_PROXY, FTP_PROXY, GOPHER_PROXY + + They should be set for protocol-specific proxies. General proxy should be + set with + + ALL_PROXY + + A comma-separated list of host names that shouldn't go through any proxy is + set in (only an asterisk, '*' matches all hosts) + + NO_PROXY + + If a tail substring of the domain-path for a host matches one of these + strings, transactions with that node will not be proxied. + + + The usage of the -x/--proxy flag overrides the environment variables. + +MAILING LIST + + We have an open mailing list to discuss curl, its development and things + relevant to this. + + To subscribe, mail curl-request@contactor.se with "subscribe " in the body. + + To post to the list, mail curl@contactor.se. + + To unsubcribe, mail curl-request@contactor.se with "unsubscribe " in the body. + diff --git a/README.libcurl b/README.libcurl new file mode 100644 index 000000000..ccec76150 --- /dev/null +++ b/README.libcurl @@ -0,0 +1,108 @@ + _ _ _ _ + | (_) |__ ___ _ _ _ __| | + | | | '_ \ / __| | | | '__| | + | | | |_) | (__| |_| | | | | + |_|_|_.__/ \___|\__,_|_| |_| + + + How To Use Libcurl In Your Program: + (by Ralph Beckmann ) + +NOTE: If you plan to use libcurl.a in Threads under Linux, do not use the old +gcc-2.7.x because the function 'gethostbyname' seems not to be thread-safe, +that is to say an unavoidable SEGMENTATION FAULT might occur. + + +1. a) In a C-Program: + #include "curl.h" + + b) In a C++-Program: + extern "C" { + #include "curl.h" + } + +2. char *url="http://www.domain.com"; + curl_urlget (URGTAG_URL, url, + URGTAG_FLAGS, CONF_NOPROGRESS, + URGTAG_ERRORBUFFER, errorBuffer, + URGTAG_WRITEFUNCTION, (size_t (*)(void *, int, int, FILE +*))handle_data, + URGTAG_TIMEOUT, 30, /* or anything You want */ + ... + URGTAG_DONE); + +3. size_t handle_data (const void *ptr, size_t size, size_t nitems, + FILE *stream) + { + (void)stream; /* stop complaining using g++ -Wall */ + if ((int)nitems <= 0) { + return (size_t)0; + } + fprintf(stdout, (char *)ptr); /* or do anything else with it */ + return nitems; + } + +4. Compile Your Program with -I$(CURL_DIR)/include + +5. Link Your Program together with $(CURL_DIR)/lib/libcurl.a + + Small Example of How To Use libcurl + +---------------------------------------------------------------------- +/* Full example that uses libcurl.a to fetch web pages. */ +/* curlthreads.c */ +/* - Test-Program by Ralph Beckmann for using curl in POSIX-Threads */ +/* Change *url1 and *url2 to textual long and slow non-FRAMESET websites! */ +/* + 1. Compile with gcc or g++ as $(CC): + $(CC) -c -Wall -pedantic curlthreads.c -I$(CURL_DIR)/include + + 2. Link with: + - Linux: + $(CC) -o curlthreads curlthreads.o $(CURL_DIR)/lib/libcurl.a -lpthread +-lm + - Solaris: + $(CC) -o curlthreads curlthreads.o $(CURL_DIR)/lib/libcurl.a -lpthread +-lm -lsocket -lnsl +*/ + +#include +#include +#ifdef __cplusplus +extern "C" { +#include "curl.h" +} +#else +#include "curl.h" +#endif + +size_t storedata (const void *ptr, size_t size, size_t nitems, FILE *stream) { + (void)ptr; (void)stream; /* just to stop g++ -Wall complaining */ + fprintf(stdout, "Thread #%i reads %i Bytes.\n", + (int)pthread_self(), (int)(nitems*size)); + return (nitems); +} + +void *urlfetcher(void *url) { + curl_urlget (URGTAG_URL, url, + URGTAG_FLAGS, CONF_NOPROGRESS | CONF_FAILONERROR, + URGTAG_WRITEFUNCTION, (size_t (*)(void *, int, int, FILE +*))storedata, + URGTAG_DONE); + return NULL; +} + +int main(void) { + char *url1="www.sun.com"; + char *url2="www.microsoft.com"; + + pthread_t thread_id1, thread_id2; + pthread_create(&thread_id1, NULL, urlfetcher, (void *)url1); + pthread_create(&thread_id2, NULL, urlfetcher, (void *)url2); + pthread_join(thread_id1, NULL); + pthread_join(thread_id2, NULL); + + fprintf(stdout, "Ready.\n"); + + return 0; +} diff --git a/RESOURCES b/RESOURCES new file mode 100644 index 000000000..92b25ce45 --- /dev/null +++ b/RESOURCES @@ -0,0 +1,62 @@ + _ _ ____ _ + Project ___| | | | _ \| | + / __| | | | |_) | | + | (__| |_| | _ <| |___ + \___|\___/|_| \_\_____| + + +This document has been introduced in order to let you find documents that +specify standards used by curl, software that extends curl and web pages with +"competing" utilities. + +Standards + + RFC 959 - Defines how FTP works + RFC 1738 - Uniform Resource Locators + RFC 1777 - defines the LDAP protocol + RFC 1808 - Relative Uniform Resource Locators + RFC 1867 - Form-based File Upload in HTML + + RFC 1950 - ZLIB Compressed Data Format Specification + RFC 1951 - DEFLATE Compressed Data Format Specification + RFC 1952 - gzip compression format + + RFC 1959 - LDAP URL syntax + RFC 2045-2049 - Everything you need to know about MIME! (needed for form + based upload) + RFC 2068 - HTTP 1.1 (obsoleted by RFC 2616) + RFC 2109 - HTTP State Management Mechanism (cookie stuff) + - Also, read Netscape's specification at + http://www.netscape.com/newsref/std/cookie_spec.html + RFC 2183 - "The Content-Disposition Header Field" + RFC 2229 - "A Dictionary Server Protocol" + RFC 2231 - "MIME Parameter Value and Encoded Word Extensions: + Character Sets, Languages, and Continuations" + RFC 2388 - "Returning Values from Forms: multipart/form-data" + Use this as an addition to the 1867 + RFC 2396 - "Uniform Resource Identifiers: Generic Syntax and Semantics" + This one obsoletes 1738, but since 1738 is often mentioned I've left it + in this list. + RFC 2428 - "FTP Extensions for IPv6 and NATs" + This should be considered when introducing IPv6 awareness. + RFC 2616 - HTTP 1.1 + RFC 2617 - HTTP Authentication + +Compilers + + MingW32 - http://www.xraylith.wisc.edu/~khan/software/gnu-win32/index.html + +Software + + OpenSSL - http://www.openssl.org + OpenLDAP - http://www.openldap.org + zlib - http://www.cdrom.com/pub/infozip/zlib/ + +Competitors + + wget - ftp://prep.ai.mit.edu/pub/gnu/ + snarf - http://www.xach.com/snarf/ + lynx - http://lynx.browser.org/ (well at least when -dump is used) + swebget - http://www.uni-hildesheim.de/~smol0075/swebget/ + fetch - ? + diff --git a/TODO b/TODO new file mode 100644 index 000000000..6ff69fc3f --- /dev/null +++ b/TODO @@ -0,0 +1,87 @@ + _ _ ____ _ + ___| | | | _ \| | + / __| | | | |_) | | + | (__| |_| | _ <| |___ + \___|\___/|_| \_\_____| + +TODO + + Ok, this is what I wanna do with Curl. Please tell me what you think, and + please don't hesitate to contribute and send me patches that improve this + product! (Yes, you may add things not mentioned here, these are just a + few teasers...) + + * rtsp:// support -- "Real Time Streaming Protocol" + + RFC 2326 + + * "Content-Encoding: compress/gzip/zlib" + + HTTP 1.1 clearly defines how to get and decode compressed documents. There + is the zlib that is pretty good at decompressing stuff. This work was + started in October 1999 but halted again since it proved more work than we + thought. It is still a good idea to implement though. + + * HTTP Pipelining/persistant connections + + - I'm gonna introduce HTTP "pipelining". Curl should be able + to request for several HTTP documents in one connect. It is the beginning + for supporing more advanced functions in the future, like web site + mirroring. This will require that the urlget() function supports several + documents from a single HTTP server, which it doesn't today. + + - When curl supports fetching several documents from the same + server using pipelining, I'd like to offer that function to the command + line. Anyone has a good idea how? The current way of specifying one URL + with the output sent to the stdout or a file gets in the way. Imagine a + syntax that supports "additional documents from the same server" in a way + similar to: + + curl
--more-doc --more-doc + + where --more-doc specifies another document on the same server. Where are + the output files gonna be put and how should they be named? Should each + "--more-doc" parameter require a local file name to store the result in? + Like "--more-file" as in: + + curl --more-doc --more-file + + * RFC2617 compliance, "Digest Access Authentication" + A valid test page seem to exist at: + http://hopf.math.nwu.edu/testpage/digest/ + And some friendly person's server source code is available at + http://hopf.math.nwu.edu/digestauth/index.html + + Then there's the Apache mod_digest source code too of course. + It seems as if Netscape doesn't support this, and not many servers + do. Although this is a lot better authentication method than the more + common "Basic". Basic sends the password in cleartext over the network, + this "Digest" method uses a challange-response protocol which increases + security quite a lot. + + * Different FTP Upload Through Web Proxy + I don't know any web proxies that allow CONNECT through on port 21, but + that would be the best way to do ftp upload. All we would need to do would + be to 'CONNECT : HTTP/1.0\r\n\r\n' and then do business as + usual. I least I think so. It would be fun if someone tried this... + + * Multiple Proxies? + Is there anyone that actually uses serial-proxies? I mean, send CONNECT to + the first proxy to connect to the second proxy to which you send CONNECT to + connect to the remote host (or even more iterations). Is there anyone + wanting curl to support it? (Not that it would be hard, just confusing...) + + * Other proxies + Ftp-kind proxy, Socks5, whatever kind of proxies are there? + + * IPv6 Awareness + Where ever it would fit. I am not that into v6 yet to fully grasp what we + would need to do, but letting the autoconf search for v6-versions of a few + functions and then use them instead is of course the first thing to do... + RFC 2428 "FTP Extensions for IPv6 and NATs" will be interesting. PORT + should be replaced with EPRT for IPv6, and EPSV instead of PASV. + + * An automatic RPM package maker + Please, write me a script that makes it. It'd make my day. + + * SSL for more protocols, like SSL-FTP... diff --git a/acconfig.h b/acconfig.h new file mode 100644 index 000000000..616cc069a --- /dev/null +++ b/acconfig.h @@ -0,0 +1,12 @@ +/* Name of this package! */ +#undef PACKAGE + +/* Version number of this archive. */ +#undef VERSION + +/* Define if you have the getpass function. */ +#undef HAVE_GETPASS + +/* Define cpu-machine-OS */ +#undef OS + diff --git a/aclocal.m4 b/aclocal.m4 new file mode 100644 index 000000000..bd4779c71 --- /dev/null +++ b/aclocal.m4 @@ -0,0 +1,127 @@ +dnl aclocal.m4 generated automatically by aclocal 1.4 + +dnl Copyright (C) 1994, 1995-8, 1999 Free Software Foundation, Inc. +dnl This file is free software; the Free Software Foundation +dnl gives unlimited permission to copy and/or distribute it, +dnl with or without modifications, as long as this notice is preserved. + +dnl This program is distributed in the hope that it will be useful, +dnl but WITHOUT ANY WARRANTY, to the extent permitted by law; without +dnl even the implied warranty of MERCHANTABILITY or FITNESS FOR A +dnl PARTICULAR PURPOSE. + +# Like AC_CONFIG_HEADER, but automatically create stamp file. + +AC_DEFUN(AM_CONFIG_HEADER, +[AC_PREREQ([2.12]) +AC_CONFIG_HEADER([$1]) +dnl When config.status generates a header, we must update the stamp-h file. +dnl This file resides in the same directory as the config header +dnl that is generated. We must strip everything past the first ":", +dnl and everything past the last "/". +AC_OUTPUT_COMMANDS(changequote(<<,>>)dnl +ifelse(patsubst(<<$1>>, <<[^ ]>>, <<>>), <<>>, +<>CONFIG_HEADERS" || echo timestamp > patsubst(<<$1>>, <<^\([^:]*/\)?.*>>, <<\1>>)stamp-h<<>>dnl>>, +<>; do + case " <<$>>CONFIG_HEADERS " in + *" <<$>>am_file "*<<)>> + echo timestamp > `echo <<$>>am_file | sed -e 's%:.*%%' -e 's%[^/]*$%%'`stamp-h$am_indx + ;; + esac + am_indx=`expr "<<$>>am_indx" + 1` +done<<>>dnl>>) +changequote([,]))]) + +# Do all the work for Automake. This macro actually does too much -- +# some checks are only needed if your package does certain things. +# But this isn't really a big deal. + +# serial 1 + +dnl Usage: +dnl AM_INIT_AUTOMAKE(package,version, [no-define]) + +AC_DEFUN(AM_INIT_AUTOMAKE, +[AC_REQUIRE([AC_PROG_INSTALL]) +PACKAGE=[$1] +AC_SUBST(PACKAGE) +VERSION=[$2] +AC_SUBST(VERSION) +dnl test to see if srcdir already configured +if test "`cd $srcdir && pwd`" != "`pwd`" && test -f $srcdir/config.status; then + AC_MSG_ERROR([source directory already configured; run "make distclean" there first]) +fi +ifelse([$3],, +AC_DEFINE_UNQUOTED(PACKAGE, "$PACKAGE", [Name of package]) +AC_DEFINE_UNQUOTED(VERSION, "$VERSION", [Version number of package])) +AC_REQUIRE([AM_SANITY_CHECK]) +AC_REQUIRE([AC_ARG_PROGRAM]) +dnl FIXME This is truly gross. +missing_dir=`cd $ac_aux_dir && pwd` +AM_MISSING_PROG(ACLOCAL, aclocal, $missing_dir) +AM_MISSING_PROG(AUTOCONF, autoconf, $missing_dir) +AM_MISSING_PROG(AUTOMAKE, automake, $missing_dir) +AM_MISSING_PROG(AUTOHEADER, autoheader, $missing_dir) +AM_MISSING_PROG(MAKEINFO, makeinfo, $missing_dir) +AC_REQUIRE([AC_PROG_MAKE_SET])]) + +# +# Check to make sure that the build environment is sane. +# + +AC_DEFUN(AM_SANITY_CHECK, +[AC_MSG_CHECKING([whether build environment is sane]) +# Just in case +sleep 1 +echo timestamp > conftestfile +# Do `set' in a subshell so we don't clobber the current shell's +# arguments. Must try -L first in case configure is actually a +# symlink; some systems play weird games with the mod time of symlinks +# (eg FreeBSD returns the mod time of the symlink's containing +# directory). +if ( + set X `ls -Lt $srcdir/configure conftestfile 2> /dev/null` + if test "[$]*" = "X"; then + # -L didn't work. + set X `ls -t $srcdir/configure conftestfile` + fi + if test "[$]*" != "X $srcdir/configure conftestfile" \ + && test "[$]*" != "X conftestfile $srcdir/configure"; then + + # If neither matched, then we have a broken ls. This can happen + # if, for instance, CONFIG_SHELL is bash and it inherits a + # broken ls alias from the environment. This has actually + # happened. Such a system could not be considered "sane". + AC_MSG_ERROR([ls -t appears to fail. Make sure there is not a broken +alias in your environment]) + fi + + test "[$]2" = conftestfile + ) +then + # Ok. + : +else + AC_MSG_ERROR([newly created file is older than distributed files! +Check your system clock]) +fi +rm -f conftest* +AC_MSG_RESULT(yes)]) + +dnl AM_MISSING_PROG(NAME, PROGRAM, DIRECTORY) +dnl The program must properly implement --version. +AC_DEFUN(AM_MISSING_PROG, +[AC_MSG_CHECKING(for working $2) +# Run test in a subshell; some versions of sh will print an error if +# an executable is not found, even if stderr is redirected. +# Redirect stdin to placate older versions of autoconf. Sigh. +if ($2 --version) < /dev/null > /dev/null 2>&1; then + $1=$2 + AC_MSG_RESULT(found) +else + $1="$3/missing $2" + AC_MSG_RESULT(missing) +fi +AC_SUBST($1)]) + diff --git a/config-win32.h b/config-win32.h new file mode 100644 index 000000000..8fe85e8aa --- /dev/null +++ b/config-win32.h @@ -0,0 +1,168 @@ +/* config.h. Generated automatically by configure. */ +/* config.h.in. Generated automatically from configure.in by autoheader. */ + +/* Define if on AIX 3. + System headers sometimes define this. + We just want to avoid a redefinition error message. */ +#ifndef _ALL_SOURCE +/* #undef _ALL_SOURCE */ +#endif + +/* Define to empty if the keyword does not work. */ +/* #undef const */ + +/* Define if you don't have vprintf but do have _doprnt. */ +/* #undef HAVE_DOPRNT */ + +/* Define if you have the vprintf function. */ +#define HAVE_VPRINTF 1 + +/* Define as the return type of signal handlers (int or void). */ +/*#define RETSIGTYPE void */ + +/* Define to `unsigned' if doesn't define. */ +/* #undef size_t */ + +/* Define if you have the ANSI C header files. */ +#define STDC_HEADERS 1 + +/* Define if you can safely include both and . */ +/* #define TIME_WITH_SYS_TIME 1 */ + +/* Define cpu-machine-OS */ +#define OS "win32" + +/* The number of bytes in a long double. */ +#define SIZEOF_LONG_DOUBLE 16 + +/* The number of bytes in a long long. */ +#define SIZEOF_LONG_LONG 8 + +/* Define if you have the gethostbyaddr function. */ +#define HAVE_GETHOSTBYADDR 1 + +/* Define if you have the gethostname function. */ +#define HAVE_GETHOSTNAME 1 + +/* Define if you have the getpass function. */ +/*#define HAVE_GETPASS 1*/ + +/* Define if you have the getservbyname function. */ +#define HAVE_GETSERVBYNAME 1 + +/* Define if you have the gettimeofday function. */ +#define HAVE_GETTIMEOFDAY 1 + +/* Define if you have the inet_addr function. */ +#define HAVE_INET_ADDR 1 + +/* Define if you have the inet_ntoa function. */ +#define HAVE_INET_NTOA 1 + +/* Define if you have the perror function. */ +#define HAVE_PERROR 1 + +/* Define if you have the select function. */ +#define HAVE_SELECT 1 + +/* Define if you have the socket function. */ +#define HAVE_SOCKET 1 + +/* Define if you have the strcasecmp function. */ +/*#define HAVE_STRCASECMP 1*/ + +/* Define if you have the strdup function. */ +#define HAVE_STRDUP 1 + +/* Define if you have the strftime function. */ +#define HAVE_STRFTIME 1 + +/* Define if you have the strstr function. */ +#define HAVE_STRSTR 1 + +/* Define if you have the tcgetattr function. */ +/*#define HAVE_TCGETATTR 1*/ + +/* Define if you have the tcsetattr function. */ +/*#define HAVE_TCSETATTR 1*/ + +/* Define if you have the uname function. */ +#define HAVE_UNAME 1 + +/* Define if you have the header file. */ +/*#define HAVE_ALLOCA_H 1*/ + +/* Define if you have the header file. */ +#define HAVE_ARPA_INET_H 1 + +/* Define if you have the header file. */ +/* #undef HAVE_CRYPTO_H */ + +/* Define if you have the header file. */ +/*#define HAVE_DLFCN_H 1*/ + +/* Define if you have the header file. */ +/* #undef HAVE_ERR_H */ + +/* Define if you have the header file. */ +#define HAVE_FCNTL_H 1 + +/* Define if you have the header file. */ +/* #undef HAVE_GETOPT_H */ + +/* Define if you have the header file. */ +#define HAVE_NETDB_H 1 + +/* Define if you have the header file. */ +#define HAVE_NETINET_IN_H 1 + +/* Define if you have the header file. */ +/*#define HAVE_SGTTY_H 1*/ + +/* Define if you have the header file. */ +/* #undef HAVE_SSL_H */ + +/* Define if you have the header file. */ +/*#define HAVE_SYS_PARAM_H 1*/ + +/* Define if you have the header file. */ +#define HAVE_SYS_SELECT_H 1 + +/* Define if you have the header file. */ +/*#define HAVE_SYS_SOCKET_H 1*/ + +/* Define if you have the header file. */ +#define HAVE_SYS_SOCKIO_H 1 + +/* Define if you have the header file. */ +#define HAVE_SYS_STAT_H 1 + +/* Define if you have the header file. */ +#define HAVE_SYS_TYPES_H 1 + +/* Define if you have the header file. */ +#define HAVE_TERMIO_H 1 + +/* Define if you have the header file. */ +#define HAVE_TERMIOS_H 1 + +/* Define if you have the header file. */ +#define HAVE_UNISTD_H 1 + +/* Name of package */ +#define PACKAGE "curl" + +/* Version number of package */ +#define VERSION "6.3.1" + +/* Define if you have the header file. */ +#define HAVE_IO_H 1 + +/* Define if you have the header file. */ +#define HAVE_TIME_H 1 + +/* Define if you have the header file. */ +#define HAVE_WINSOCK_H 1 + +/* Define if you have the closesocket function. */ +#define HAVE_CLOSESOCKET 1 diff --git a/config.cache b/config.cache new file mode 100644 index 000000000..ba8353a0d --- /dev/null +++ b/config.cache @@ -0,0 +1,86 @@ +# 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. It is not useful on other systems. +# If it contains results you don't want to keep, you may remove or edit it. +# +# By default, configure uses ./config.cache as the cache file, +# creating it if it does not exist already. You can give configure +# the --cache-file=FILE option to use a different cache file; that is +# what configure does when it calls configure scripts in +# subdirectories, so they share the cache. +# Giving --cache-file=/dev/null disables caching, for debugging configure. +# config.status only pays attention to the cache file if you give it the +# --recheck option to rerun configure. +# +ac_cv_c_const=${ac_cv_c_const='yes'} +ac_cv_func_closesocket=${ac_cv_func_closesocket='no'} +ac_cv_func_connect=${ac_cv_func_connect='no'} +ac_cv_func_dlopen=${ac_cv_func_dlopen='no'} +ac_cv_func_gethostbyaddr=${ac_cv_func_gethostbyaddr='yes'} +ac_cv_func_gethostbyname=${ac_cv_func_gethostbyname='no'} +ac_cv_func_gethostname=${ac_cv_func_gethostname='yes'} +ac_cv_func_getpass=${ac_cv_func_getpass='yes'} +ac_cv_func_getservbyname=${ac_cv_func_getservbyname='yes'} +ac_cv_func_gettimeofday=${ac_cv_func_gettimeofday='yes'} +ac_cv_func_inet_addr=${ac_cv_func_inet_addr='yes'} +ac_cv_func_inet_ntoa=${ac_cv_func_inet_ntoa='yes'} +ac_cv_func_perror=${ac_cv_func_perror='yes'} +ac_cv_func_select=${ac_cv_func_select='yes'} +ac_cv_func_socket=${ac_cv_func_socket='yes'} +ac_cv_func_strcasecmp=${ac_cv_func_strcasecmp='yes'} +ac_cv_func_strdup=${ac_cv_func_strdup='yes'} +ac_cv_func_strftime=${ac_cv_func_strftime='yes'} +ac_cv_func_strstr=${ac_cv_func_strstr='yes'} +ac_cv_func_tcgetattr=${ac_cv_func_tcgetattr='yes'} +ac_cv_func_tcsetattr=${ac_cv_func_tcsetattr='yes'} +ac_cv_func_uname=${ac_cv_func_uname='yes'} +ac_cv_func_vprintf=${ac_cv_func_vprintf='yes'} +ac_cv_header_alloca_h=${ac_cv_header_alloca_h='yes'} +ac_cv_header_arpa_inet_h=${ac_cv_header_arpa_inet_h='yes'} +ac_cv_header_dlfcn_h=${ac_cv_header_dlfcn_h='yes'} +ac_cv_header_fcntl_h=${ac_cv_header_fcntl_h='yes'} +ac_cv_header_getopt_h=${ac_cv_header_getopt_h='no'} +ac_cv_header_io_h=${ac_cv_header_io_h='no'} +ac_cv_header_net_if_h=${ac_cv_header_net_if_h='yes'} +ac_cv_header_netdb_h=${ac_cv_header_netdb_h='yes'} +ac_cv_header_netinet_in_h=${ac_cv_header_netinet_in_h='yes'} +ac_cv_header_openssl_crypto_h=${ac_cv_header_openssl_crypto_h='yes'} +ac_cv_header_openssl_err_h=${ac_cv_header_openssl_err_h='yes'} +ac_cv_header_openssl_pem_h=${ac_cv_header_openssl_pem_h='yes'} +ac_cv_header_openssl_rsa_h=${ac_cv_header_openssl_rsa_h='yes'} +ac_cv_header_openssl_ssl_h=${ac_cv_header_openssl_ssl_h='yes'} +ac_cv_header_openssl_x509_h=${ac_cv_header_openssl_x509_h='yes'} +ac_cv_header_sgtty_h=${ac_cv_header_sgtty_h='yes'} +ac_cv_header_stdc=${ac_cv_header_stdc='yes'} +ac_cv_header_sys_param_h=${ac_cv_header_sys_param_h='yes'} +ac_cv_header_sys_select_h=${ac_cv_header_sys_select_h='yes'} +ac_cv_header_sys_socket_h=${ac_cv_header_sys_socket_h='yes'} +ac_cv_header_sys_sockio_h=${ac_cv_header_sys_sockio_h='yes'} +ac_cv_header_sys_stat_h=${ac_cv_header_sys_stat_h='yes'} +ac_cv_header_sys_types_h=${ac_cv_header_sys_types_h='yes'} +ac_cv_header_termio_h=${ac_cv_header_termio_h='yes'} +ac_cv_header_termios_h=${ac_cv_header_termios_h='yes'} +ac_cv_header_time=${ac_cv_header_time='yes'} +ac_cv_header_time_h=${ac_cv_header_time_h='yes'} +ac_cv_header_unistd_h=${ac_cv_header_unistd_h='yes'} +ac_cv_header_winsock_h=${ac_cv_header_winsock_h='no'} +ac_cv_lib_crypto_CRYPTO_lock=${ac_cv_lib_crypto_CRYPTO_lock='yes'} +ac_cv_lib_dl_dlopen=${ac_cv_lib_dl_dlopen='yes'} +ac_cv_lib_nsl_gethostbyname=${ac_cv_lib_nsl_gethostbyname='yes'} +ac_cv_lib_socket_connect=${ac_cv_lib_socket_connect='yes'} +ac_cv_lib_ssl_SSL_connect=${ac_cv_lib_ssl_SSL_connect='yes'} +ac_cv_path_NROFF=${ac_cv_path_NROFF='/bin/nroff'} +ac_cv_path_PERL=${ac_cv_path_PERL='/usr/local/bin/perl'} +ac_cv_prog_CC=${ac_cv_prog_CC='gcc'} +ac_cv_prog_CPP=${ac_cv_prog_CPP='gcc -E'} +ac_cv_prog_RANLIB=${ac_cv_prog_RANLIB='ranlib'} +ac_cv_prog_YACC=${ac_cv_prog_YACC='bison -y'} +ac_cv_prog_cc_cross=${ac_cv_prog_cc_cross='no'} +ac_cv_prog_cc_g=${ac_cv_prog_cc_g='yes'} +ac_cv_prog_cc_works=${ac_cv_prog_cc_works='yes'} +ac_cv_prog_gcc=${ac_cv_prog_gcc='yes'} +ac_cv_prog_make_make_set=${ac_cv_prog_make_make_set='yes'} +ac_cv_sizeof_long_double=${ac_cv_sizeof_long_double='16'} +ac_cv_sizeof_long_long=${ac_cv_sizeof_long_long='8'} +ac_cv_type_signal=${ac_cv_type_signal='void'} +ac_cv_type_size_t=${ac_cv_type_size_t='yes'} diff --git a/config.guess b/config.guess new file mode 100755 index 000000000..1d27287d5 --- /dev/null +++ b/config.guess @@ -0,0 +1,997 @@ +#! /bin/sh +# Attempt to guess a canonical system name. +# Copyright (C) 1992, 93, 94, 95, 96, 97, 1998 Free Software Foundation, Inc. +# +# This file is free software; you can redistribute it and/or modify it +# under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 2 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, but +# WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +# General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software +# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. +# +# As a special exception to the GNU General Public License, if you +# distribute this file as part of a program that contains a +# configuration script generated by Autoconf, you may include it under +# the same distribution terms that you use for the rest of that program. + +# Written by Per Bothner . +# The master version of this file is at the FSF in /home/gd/gnu/lib. +# Please send patches to the Autoconf mailing list . +# +# This script attempts to guess a canonical system name similar to +# config.sub. If it succeeds, it prints the system name on stdout, and +# exits with 0. Otherwise, it exits with 1. +# +# The plan is that this can be called by configure scripts if you +# don't specify an explicit system type (host/target name). +# +# Only a few systems have been added to this list; please add others +# (but try to keep the structure clean). +# + +# This is needed to find uname on a Pyramid OSx when run in the BSD universe. +# (ghazi@noc.rutgers.edu 8/24/94.) +if (test -f /.attbin/uname) >/dev/null 2>&1 ; then + PATH=$PATH:/.attbin ; export PATH +fi + +UNAME_MACHINE=`(uname -m) 2>/dev/null` || UNAME_MACHINE=unknown +UNAME_RELEASE=`(uname -r) 2>/dev/null` || UNAME_RELEASE=unknown +UNAME_SYSTEM=`(uname -s) 2>/dev/null` || UNAME_SYSTEM=unknown +UNAME_VERSION=`(uname -v) 2>/dev/null` || UNAME_VERSION=unknown + +dummy=dummy-$$ +trap 'rm -f $dummy.c $dummy.o $dummy; exit 1' 1 2 15 + +# Note: order is significant - the case branches are not exclusive. + +case "${UNAME_MACHINE}:${UNAME_SYSTEM}:${UNAME_RELEASE}:${UNAME_VERSION}" in + alpha:OSF1:*:*) + if test $UNAME_RELEASE = "V4.0"; then + UNAME_RELEASE=`/usr/sbin/sizer -v | awk '{print $3}'` + fi + # A Vn.n version is a released version. + # A Tn.n version is a released field test version. + # A Xn.n version is an unreleased experimental baselevel. + # 1.2 uses "1.2" for uname -r. + cat <$dummy.s + .globl main + .ent main +main: + .frame \$30,0,\$26,0 + .prologue 0 + .long 0x47e03d80 # implver $0 + lda \$2,259 + .long 0x47e20c21 # amask $2,$1 + srl \$1,8,\$2 + sll \$2,2,\$2 + sll \$0,3,\$0 + addl \$1,\$0,\$0 + addl \$2,\$0,\$0 + ret \$31,(\$26),1 + .end main +EOF + ${CC-cc} $dummy.s -o $dummy 2>/dev/null + if test "$?" = 0 ; then + ./$dummy + case "$?" in + 7) + UNAME_MACHINE="alpha" + ;; + 15) + UNAME_MACHINE="alphaev5" + ;; + 14) + UNAME_MACHINE="alphaev56" + ;; + 10) + UNAME_MACHINE="alphapca56" + ;; + 16) + UNAME_MACHINE="alphaev6" + ;; + esac + fi + rm -f $dummy.s $dummy + echo ${UNAME_MACHINE}-dec-osf`echo ${UNAME_RELEASE} | sed -e 's/^[VTX]//' | tr [[A-Z]] [[a-z]]` + exit 0 ;; + 21064:Windows_NT:50:3) + echo alpha-dec-winnt3.5 + exit 0 ;; + Amiga*:UNIX_System_V:4.0:*) + echo m68k-cbm-sysv4 + exit 0;; + amiga:NetBSD:*:*) + echo m68k-cbm-netbsd${UNAME_RELEASE} + exit 0 ;; + amiga:OpenBSD:*:*) + echo m68k-unknown-openbsd${UNAME_RELEASE} + exit 0 ;; + *:[Aa]miga[Oo][Ss]:*:*) + echo ${UNAME_MACHINE}-unknown-amigaos + exit 0 ;; + arc64:OpenBSD:*:*) + echo mips64el-unknown-openbsd${UNAME_RELEASE} + exit 0 ;; + arc:OpenBSD:*:*) + echo mipsel-unknown-openbsd${UNAME_RELEASE} + exit 0 ;; + hkmips:OpenBSD:*:*) + echo mips-unknown-openbsd${UNAME_RELEASE} + exit 0 ;; + pmax:OpenBSD:*:*) + echo mipsel-unknown-openbsd${UNAME_RELEASE} + exit 0 ;; + sgi:OpenBSD:*:*) + echo mips-unknown-openbsd${UNAME_RELEASE} + exit 0 ;; + wgrisc:OpenBSD:*:*) + echo mipsel-unknown-openbsd${UNAME_RELEASE} + exit 0 ;; + arm:RISC*:1.[012]*:*|arm:riscix:1.[012]*:*) + echo arm-acorn-riscix${UNAME_RELEASE} + exit 0;; + arm32:NetBSD:*:*) + echo arm-unknown-netbsd`echo ${UNAME_RELEASE}|sed -e 's/[-_].*/\./'` + exit 0 ;; + SR2?01:HI-UX/MPP:*:*) + echo hppa1.1-hitachi-hiuxmpp + exit 0;; + Pyramid*:OSx*:*:*|MIS*:OSx*:*:*|MIS*:SMP_DC-OSx*:*:*) + # akee@wpdis03.wpafb.af.mil (Earle F. Ake) contributed MIS and NILE. + if test "`(/bin/universe) 2>/dev/null`" = att ; then + echo pyramid-pyramid-sysv3 + else + echo pyramid-pyramid-bsd + fi + exit 0 ;; + NILE*:*:*:dcosx) + echo pyramid-pyramid-svr4 + exit 0 ;; + sun4H:SunOS:5.*:*) + echo sparc-hal-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'` + exit 0 ;; + sun4*:SunOS:5.*:* | tadpole*:SunOS:5.*:*) + echo sparc-sun-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'` + exit 0 ;; + i86pc:SunOS:5.*:*) + echo i386-pc-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'` + exit 0 ;; + sun4*:SunOS:6*:*) + # According to config.sub, this is the proper way to canonicalize + # SunOS6. Hard to guess exactly what SunOS6 will be like, but + # it's likely to be more like Solaris than SunOS4. + echo sparc-sun-solaris3`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'` + exit 0 ;; + sun4*:SunOS:*:*) + case "`/usr/bin/arch -k`" in + Series*|S4*) + UNAME_RELEASE=`uname -v` + ;; + esac + # Japanese Language versions have a version number like `4.1.3-JL'. + echo sparc-sun-sunos`echo ${UNAME_RELEASE}|sed -e 's/-/_/'` + exit 0 ;; + sun3*:SunOS:*:*) + echo m68k-sun-sunos${UNAME_RELEASE} + exit 0 ;; + sun*:*:4.2BSD:*) + UNAME_RELEASE=`(head -1 /etc/motd | awk '{print substr($5,1,3)}') 2>/dev/null` + test "x${UNAME_RELEASE}" = "x" && UNAME_RELEASE=3 + case "`/bin/arch`" in + sun3) + echo m68k-sun-sunos${UNAME_RELEASE} + ;; + sun4) + echo sparc-sun-sunos${UNAME_RELEASE} + ;; + esac + exit 0 ;; + aushp:SunOS:*:*) + echo sparc-auspex-sunos${UNAME_RELEASE} + exit 0 ;; + atari*:NetBSD:*:*) + echo m68k-atari-netbsd${UNAME_RELEASE} + exit 0 ;; + atari*:OpenBSD:*:*) + echo m68k-unknown-openbsd${UNAME_RELEASE} + exit 0 ;; + sun3*:NetBSD:*:*) + echo m68k-sun-netbsd${UNAME_RELEASE} + exit 0 ;; + sun3*:OpenBSD:*:*) + echo m68k-unknown-openbsd${UNAME_RELEASE} + exit 0 ;; + mac68k:NetBSD:*:*) + echo m68k-apple-netbsd${UNAME_RELEASE} + exit 0 ;; + mac68k:OpenBSD:*:*) + echo m68k-unknown-openbsd${UNAME_RELEASE} + exit 0 ;; + mvme68k:OpenBSD:*:*) + echo m68k-unknown-openbsd${UNAME_RELEASE} + exit 0 ;; + mvme88k:OpenBSD:*:*) + echo m88k-unknown-openbsd${UNAME_RELEASE} + exit 0 ;; + powerpc:machten:*:*) + echo powerpc-apple-machten${UNAME_RELEASE} + exit 0 ;; + macppc:NetBSD:*:*) + echo powerpc-apple-netbsd${UNAME_RELEASE} + exit 0 ;; + RISC*:Mach:*:*) + echo mips-dec-mach_bsd4.3 + exit 0 ;; + RISC*:ULTRIX:*:*) + echo mips-dec-ultrix${UNAME_RELEASE} + exit 0 ;; + VAX*:ULTRIX*:*:*) + echo vax-dec-ultrix${UNAME_RELEASE} + exit 0 ;; + 2020:CLIX:*:*) + echo clipper-intergraph-clix${UNAME_RELEASE} + exit 0 ;; + mips:*:*:UMIPS | mips:*:*:RISCos) + sed 's/^ //' << EOF >$dummy.c +#ifdef __cplusplus + int main (int argc, char *argv[]) { +#else + int main (argc, argv) int argc; char *argv[]; { +#endif + #if defined (host_mips) && defined (MIPSEB) + #if defined (SYSTYPE_SYSV) + printf ("mips-mips-riscos%ssysv\n", argv[1]); exit (0); + #endif + #if defined (SYSTYPE_SVR4) + printf ("mips-mips-riscos%ssvr4\n", argv[1]); exit (0); + #endif + #if defined (SYSTYPE_BSD43) || defined(SYSTYPE_BSD) + printf ("mips-mips-riscos%sbsd\n", argv[1]); exit (0); + #endif + #endif + exit (-1); + } +EOF + ${CC-cc} $dummy.c -o $dummy \ + && ./$dummy `echo "${UNAME_RELEASE}" | sed -n 's/\([0-9]*\).*/\1/p'` \ + && rm $dummy.c $dummy && exit 0 + rm -f $dummy.c $dummy + echo mips-mips-riscos${UNAME_RELEASE} + exit 0 ;; + Night_Hawk:Power_UNIX:*:*) + echo powerpc-harris-powerunix + exit 0 ;; + m88k:CX/UX:7*:*) + echo m88k-harris-cxux7 + exit 0 ;; + m88k:*:4*:R4*) + echo m88k-motorola-sysv4 + exit 0 ;; + m88k:*:3*:R3*) + echo m88k-motorola-sysv3 + exit 0 ;; + AViiON:dgux:*:*) + # DG/UX returns AViiON for all architectures + UNAME_PROCESSOR=`/usr/bin/uname -p` + if [ $UNAME_PROCESSOR = mc88100 -o $UNAME_PROCESSOR = mc88110 ] ; then + if [ ${TARGET_BINARY_INTERFACE}x = m88kdguxelfx \ + -o ${TARGET_BINARY_INTERFACE}x = x ] ; then + echo m88k-dg-dgux${UNAME_RELEASE} + else + echo m88k-dg-dguxbcs${UNAME_RELEASE} + fi + else echo i586-dg-dgux${UNAME_RELEASE} + fi + exit 0 ;; + M88*:DolphinOS:*:*) # DolphinOS (SVR3) + echo m88k-dolphin-sysv3 + exit 0 ;; + M88*:*:R3*:*) + # Delta 88k system running SVR3 + echo m88k-motorola-sysv3 + exit 0 ;; + XD88*:*:*:*) # Tektronix XD88 system running UTekV (SVR3) + echo m88k-tektronix-sysv3 + exit 0 ;; + Tek43[0-9][0-9]:UTek:*:*) # Tektronix 4300 system running UTek (BSD) + echo m68k-tektronix-bsd + exit 0 ;; + *:IRIX*:*:*) + echo mips-sgi-irix`echo ${UNAME_RELEASE}|sed -e 's/-/_/g'` + exit 0 ;; + ????????:AIX?:[12].1:2) # AIX 2.2.1 or AIX 2.1.1 is RT/PC AIX. + echo romp-ibm-aix # uname -m gives an 8 hex-code CPU id + exit 0 ;; # Note that: echo "'`uname -s`'" gives 'AIX ' + i?86:AIX:*:*) + echo i386-ibm-aix + exit 0 ;; + *:AIX:2:3) + if grep bos325 /usr/include/stdio.h >/dev/null 2>&1; then + sed 's/^ //' << EOF >$dummy.c + #include + + main() + { + if (!__power_pc()) + exit(1); + puts("powerpc-ibm-aix3.2.5"); + exit(0); + } +EOF + ${CC-cc} $dummy.c -o $dummy && ./$dummy && rm $dummy.c $dummy && exit 0 + rm -f $dummy.c $dummy + echo rs6000-ibm-aix3.2.5 + elif grep bos324 /usr/include/stdio.h >/dev/null 2>&1; then + echo rs6000-ibm-aix3.2.4 + else + echo rs6000-ibm-aix3.2 + fi + exit 0 ;; + *:AIX:*:4) + IBM_CPU_ID=`/usr/sbin/lsdev -C -c processor -S available | head -1 | awk '{ print $1 }'` + if /usr/sbin/lsattr -EHl ${IBM_CPU_ID} | grep POWER >/dev/null 2>&1; then + IBM_ARCH=rs6000 + else + IBM_ARCH=powerpc + fi + if [ -x /usr/bin/oslevel ] ; then + IBM_REV=`/usr/bin/oslevel` + else + IBM_REV=4.${UNAME_RELEASE} + fi + echo ${IBM_ARCH}-ibm-aix${IBM_REV} + exit 0 ;; + *:AIX:*:*) + echo rs6000-ibm-aix + exit 0 ;; + ibmrt:4.4BSD:*|romp-ibm:BSD:*) + echo romp-ibm-bsd4.4 + exit 0 ;; + ibmrt:*BSD:*|romp-ibm:BSD:*) # covers RT/PC NetBSD and + echo romp-ibm-bsd${UNAME_RELEASE} # 4.3 with uname added to + exit 0 ;; # report: romp-ibm BSD 4.3 + *:BOSX:*:*) + echo rs6000-bull-bosx + exit 0 ;; + DPX/2?00:B.O.S.:*:*) + echo m68k-bull-sysv3 + exit 0 ;; + 9000/[34]??:4.3bsd:1.*:*) + echo m68k-hp-bsd + exit 0 ;; + hp300:4.4BSD:*:* | 9000/[34]??:4.3bsd:2.*:*) + echo m68k-hp-bsd4.4 + exit 0 ;; + 9000/[34678]??:HP-UX:*:*) + case "${UNAME_MACHINE}" in + 9000/31? ) HP_ARCH=m68000 ;; + 9000/[34]?? ) HP_ARCH=m68k ;; + 9000/6?? | 9000/7?? | 9000/80[024] | 9000/8?[136790] | 9000/892 ) + sed 's/^ //' << EOF >$dummy.c + #include + #include + + int main () + { + #if defined(_SC_KERNEL_BITS) + long bits = sysconf(_SC_KERNEL_BITS); + #endif + long cpu = sysconf (_SC_CPU_VERSION); + + switch (cpu) + { + case CPU_PA_RISC1_0: puts ("hppa1.0"); break; + case CPU_PA_RISC1_1: puts ("hppa1.1"); break; + case CPU_PA_RISC2_0: + #if defined(_SC_KERNEL_BITS) + switch (bits) + { + case 64: puts ("hppa2.0w"); break; + case 32: puts ("hppa2.0n"); break; + default: puts ("hppa2.0"); break; + } break; + #else /* !defined(_SC_KERNEL_BITS) */ + puts ("hppa2.0"); break; + #endif + default: puts ("hppa1.0"); break; + } + exit (0); + } +EOF + (${CC-cc} $dummy.c -o $dummy 2>/dev/null ) && HP_ARCH=`./$dummy` + rm -f $dummy.c $dummy + esac + HPUX_REV=`echo ${UNAME_RELEASE}|sed -e 's/[^.]*.[0B]*//'` + echo ${HP_ARCH}-hp-hpux${HPUX_REV} + exit 0 ;; + 3050*:HI-UX:*:*) + sed 's/^ //' << EOF >$dummy.c + #include + int + main () + { + long cpu = sysconf (_SC_CPU_VERSION); + /* The order matters, because CPU_IS_HP_MC68K erroneously returns + true for CPU_PA_RISC1_0. CPU_IS_PA_RISC returns correct + results, however. */ + if (CPU_IS_PA_RISC (cpu)) + { + switch (cpu) + { + case CPU_PA_RISC1_0: puts ("hppa1.0-hitachi-hiuxwe2"); break; + case CPU_PA_RISC1_1: puts ("hppa1.1-hitachi-hiuxwe2"); break; + case CPU_PA_RISC2_0: puts ("hppa2.0-hitachi-hiuxwe2"); break; + default: puts ("hppa-hitachi-hiuxwe2"); break; + } + } + else if (CPU_IS_HP_MC68K (cpu)) + puts ("m68k-hitachi-hiuxwe2"); + else puts ("unknown-hitachi-hiuxwe2"); + exit (0); + } +EOF + ${CC-cc} $dummy.c -o $dummy && ./$dummy && rm $dummy.c $dummy && exit 0 + rm -f $dummy.c $dummy + echo unknown-hitachi-hiuxwe2 + exit 0 ;; + 9000/7??:4.3bsd:*:* | 9000/8?[79]:4.3bsd:*:* ) + echo hppa1.1-hp-bsd + exit 0 ;; + 9000/8??:4.3bsd:*:*) + echo hppa1.0-hp-bsd + exit 0 ;; + *9??*:MPE*:*:*) + echo hppa1.0-hp-mpeix + exit 0 ;; + *9??*:MPE*:*:*) + echo hppa1.0-hp-mpeix + exit 0 ;; + hp7??:OSF1:*:* | hp8?[79]:OSF1:*:* ) + echo hppa1.1-hp-osf + exit 0 ;; + hp8??:OSF1:*:*) + echo hppa1.0-hp-osf + exit 0 ;; + i?86:OSF1:*:*) + if [ -x /usr/sbin/sysversion ] ; then + echo ${UNAME_MACHINE}-unknown-osf1mk + else + echo ${UNAME_MACHINE}-unknown-osf1 + fi + exit 0 ;; + parisc*:Lites*:*:*) + echo hppa1.1-hp-lites + exit 0 ;; + C1*:ConvexOS:*:* | convex:ConvexOS:C1*:*) + echo c1-convex-bsd + exit 0 ;; + C2*:ConvexOS:*:* | convex:ConvexOS:C2*:*) + if getsysinfo -f scalar_acc + then echo c32-convex-bsd + else echo c2-convex-bsd + fi + exit 0 ;; + C34*:ConvexOS:*:* | convex:ConvexOS:C34*:*) + echo c34-convex-bsd + exit 0 ;; + C38*:ConvexOS:*:* | convex:ConvexOS:C38*:*) + echo c38-convex-bsd + exit 0 ;; + C4*:ConvexOS:*:* | convex:ConvexOS:C4*:*) + echo c4-convex-bsd + exit 0 ;; + CRAY*X-MP:*:*:*) + echo xmp-cray-unicos + exit 0 ;; + CRAY*Y-MP:*:*:*) + echo ymp-cray-unicos${UNAME_RELEASE} + exit 0 ;; + CRAY*[A-Z]90:*:*:*) + echo ${UNAME_MACHINE}-cray-unicos${UNAME_RELEASE} \ + | sed -e 's/CRAY.*\([A-Z]90\)/\1/' \ + -e y/ABCDEFGHIJKLMNOPQRSTUVWXYZ/abcdefghijklmnopqrstuvwxyz/ + exit 0 ;; + CRAY*TS:*:*:*) + echo t90-cray-unicos${UNAME_RELEASE} + exit 0 ;; + CRAY*T3E:*:*:*) + echo t3e-cray-unicosmk${UNAME_RELEASE} + exit 0 ;; + CRAY-2:*:*:*) + echo cray2-cray-unicos + exit 0 ;; + F300:UNIX_System_V:*:*) + FUJITSU_SYS=`uname -p | tr [A-Z] [a-z] | sed -e 's/\///'` + FUJITSU_REL=`echo ${UNAME_RELEASE} | sed -e 's/ /_/'` + echo "f300-fujitsu-${FUJITSU_SYS}${FUJITSU_REL}" + exit 0 ;; + F301:UNIX_System_V:*:*) + echo f301-fujitsu-uxpv`echo $UNAME_RELEASE | sed 's/ .*//'` + exit 0 ;; + hp3[0-9][05]:NetBSD:*:*) + echo m68k-hp-netbsd${UNAME_RELEASE} + exit 0 ;; + hp300:OpenBSD:*:*) + echo m68k-unknown-openbsd${UNAME_RELEASE} + exit 0 ;; + sparc*:BSD/OS:*:*) + echo sparc-unknown-bsdi${UNAME_RELEASE} + exit 0 ;; + i?86:BSD/386:*:* | i?86:BSD/OS:*:*) + echo ${UNAME_MACHINE}-pc-bsdi${UNAME_RELEASE} + exit 0 ;; + *:BSD/OS:*:*) + echo ${UNAME_MACHINE}-unknown-bsdi${UNAME_RELEASE} + exit 0 ;; + *:FreeBSD:*:*) + if test -x /usr/bin/objformat; then + if test "elf" = "`/usr/bin/objformat`"; then + echo ${UNAME_MACHINE}-unknown-freebsdelf`echo ${UNAME_RELEASE}|sed -e 's/[-_].*//'` + exit 0 + fi + fi + echo ${UNAME_MACHINE}-unknown-freebsd`echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'` + exit 0 ;; + *:NetBSD:*:*) + echo ${UNAME_MACHINE}-unknown-netbsd`echo ${UNAME_RELEASE}|sed -e 's/[-_].*/\./'` + exit 0 ;; + *:OpenBSD:*:*) + echo ${UNAME_MACHINE}-unknown-openbsd`echo ${UNAME_RELEASE}|sed -e 's/[-_].*/\./'` + exit 0 ;; + i*:CYGWIN*:*) + echo ${UNAME_MACHINE}-pc-cygwin + exit 0 ;; + i*:MINGW*:*) + echo ${UNAME_MACHINE}-pc-mingw32 + exit 0 ;; + p*:CYGWIN*:*) + echo powerpcle-unknown-cygwin + exit 0 ;; + prep*:SunOS:5.*:*) + echo powerpcle-unknown-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'` + exit 0 ;; + *:GNU:*:*) + echo `echo ${UNAME_MACHINE}|sed -e 's,[-/].*$,,'`-unknown-gnu`echo ${UNAME_RELEASE}|sed -e 's,/.*$,,'` + exit 0 ;; + *:Linux:*:*) +# # uname on the ARM produces all sorts of strangeness, and we need to +# # filter it out. +# case "$UNAME_MACHINE" in +# armv*) UNAME_MACHINE=$UNAME_MACHINE ;; +# arm* | sa110*) UNAME_MACHINE="arm" ;; +# esac + + # The BFD linker knows what the default object file format is, so + # first see if it will tell us. + ld_help_string=`ld --help 2>&1` + ld_supported_emulations=`echo $ld_help_string \ + | sed -ne '/supported emulations:/!d + s/[ ][ ]*/ /g + s/.*supported emulations: *// + s/ .*// + p'` + case "$ld_supported_emulations" in + i?86linux) echo "${UNAME_MACHINE}-pc-linux-gnuaout" ; exit 0 ;; + i?86coff) echo "${UNAME_MACHINE}-pc-linux-gnucoff" ; exit 0 ;; + sparclinux) echo "${UNAME_MACHINE}-unknown-linux-gnuaout" ; exit 0 ;; + armlinux) echo "${UNAME_MACHINE}-unknown-linux-gnuaout" ; exit 0 ;; + m68klinux) echo "${UNAME_MACHINE}-unknown-linux-gnuaout" ; exit 0 ;; + elf32arm) echo "${UNAME_MACHINE}-unknown-linux-gnu" ; exit 0 ;; + elf32ppc) echo "powerpc-unknown-linux-gnu" ; exit 0 ;; + esac + + if test "${UNAME_MACHINE}" = "alpha" ; then + sed 's/^ //' <$dummy.s + .globl main + .ent main + main: + .frame \$30,0,\$26,0 + .prologue 0 + .long 0x47e03d80 # implver $0 + lda \$2,259 + .long 0x47e20c21 # amask $2,$1 + srl \$1,8,\$2 + sll \$2,2,\$2 + sll \$0,3,\$0 + addl \$1,\$0,\$0 + addl \$2,\$0,\$0 + ret \$31,(\$26),1 + .end main +EOF + LIBC="" + ${CC-cc} $dummy.s -o $dummy 2>/dev/null + if test "$?" = 0 ; then + ./$dummy + case "$?" in + 7) + UNAME_MACHINE="alpha" + ;; + 15) + UNAME_MACHINE="alphaev5" + ;; + 14) + UNAME_MACHINE="alphaev56" + ;; + 10) + UNAME_MACHINE="alphapca56" + ;; + 16) + UNAME_MACHINE="alphaev6" + ;; + esac + + objdump --private-headers $dummy | \ + grep ld.so.1 > /dev/null + if test "$?" = 0 ; then + LIBC="libc1" + fi + fi + rm -f $dummy.s $dummy + echo ${UNAME_MACHINE}-unknown-linux-gnu${LIBC} ; exit 0 + elif test "${UNAME_MACHINE}" = "mips" ; then + cat >$dummy.c </dev/null && ./$dummy "${UNAME_MACHINE}" && rm $dummy.c $dummy && exit 0 + rm -f $dummy.c $dummy + else + # Either a pre-BFD a.out linker (linux-gnuoldld) + # or one that does not give us useful --help. + # GCC wants to distinguish between linux-gnuoldld and linux-gnuaout. + # If ld does not provide *any* "supported emulations:" + # that means it is gnuoldld. + echo "$ld_help_string" | grep >/dev/null 2>&1 "supported emulations:" + test $? != 0 && echo "${UNAME_MACHINE}-pc-linux-gnuoldld" && exit 0 + + case "${UNAME_MACHINE}" in + i?86) + VENDOR=pc; + ;; + *) + VENDOR=unknown; + ;; + esac + # Determine whether the default compiler is a.out or elf + cat >$dummy.c < +#ifdef __cplusplus + int main (int argc, char *argv[]) { +#else + int main (argc, argv) int argc; char *argv[]; { +#endif +#ifdef __ELF__ +# ifdef __GLIBC__ +# if __GLIBC__ >= 2 + printf ("%s-${VENDOR}-linux-gnu\n", argv[1]); +# else + printf ("%s-${VENDOR}-linux-gnulibc1\n", argv[1]); +# endif +# else + printf ("%s-${VENDOR}-linux-gnulibc1\n", argv[1]); +# endif +#else + printf ("%s-${VENDOR}-linux-gnuaout\n", argv[1]); +#endif + return 0; +} +EOF + ${CC-cc} $dummy.c -o $dummy 2>/dev/null && ./$dummy "${UNAME_MACHINE}" && rm $dummy.c $dummy && exit 0 + rm -f $dummy.c $dummy + fi ;; +# ptx 4.0 does uname -s correctly, with DYNIX/ptx in there. earlier versions +# are messed up and put the nodename in both sysname and nodename. + i?86:DYNIX/ptx:4*:*) + echo i386-sequent-sysv4 + exit 0 ;; + i?86:UNIX_SV:4.2MP:2.*) + # Unixware is an offshoot of SVR4, but it has its own version + # number series starting with 2... + # I am not positive that other SVR4 systems won't match this, + # I just have to hope. -- rms. + # Use sysv4.2uw... so that sysv4* matches it. + echo ${UNAME_MACHINE}-pc-sysv4.2uw${UNAME_VERSION} + exit 0 ;; + i?86:*:4.*:* | i?86:SYSTEM_V:4.*:*) + if grep Novell /usr/include/link.h >/dev/null 2>/dev/null; then + echo ${UNAME_MACHINE}-univel-sysv${UNAME_RELEASE} + else + echo ${UNAME_MACHINE}-pc-sysv${UNAME_RELEASE} + fi + exit 0 ;; + i?86:*:3.2:*) + if test -f /usr/options/cb.name; then + UNAME_REL=`sed -n 's/.*Version //p' /dev/null >/dev/null ; then + UNAME_REL=`(/bin/uname -X|egrep Release|sed -e 's/.*= //')` + (/bin/uname -X|egrep i80486 >/dev/null) && UNAME_MACHINE=i486 + (/bin/uname -X|egrep '^Machine.*Pentium' >/dev/null) \ + && UNAME_MACHINE=i586 + echo ${UNAME_MACHINE}-pc-sco$UNAME_REL + else + echo ${UNAME_MACHINE}-pc-sysv32 + fi + exit 0 ;; + i?86:UnixWare:*:*) + if /bin/uname -X 2>/dev/null >/dev/null ; then + (/bin/uname -X|egrep '^Machine.*Pentium' >/dev/null) \ + && UNAME_MACHINE=i586 + fi + echo ${UNAME_MACHINE}-unixware-${UNAME_RELEASE}-${UNAME_VERSION} + exit 0 ;; + pc:*:*:*) + # uname -m prints for DJGPP always 'pc', but it prints nothing about + # the processor, so we play safe by assuming i386. + echo i386-pc-msdosdjgpp + exit 0 ;; + Intel:Mach:3*:*) + echo i386-pc-mach3 + exit 0 ;; + paragon:*:*:*) + echo i860-intel-osf1 + exit 0 ;; + i860:*:4.*:*) # i860-SVR4 + if grep Stardent /usr/include/sys/uadmin.h >/dev/null 2>&1 ; then + echo i860-stardent-sysv${UNAME_RELEASE} # Stardent Vistra i860-SVR4 + else # Add other i860-SVR4 vendors below as they are discovered. + echo i860-unknown-sysv${UNAME_RELEASE} # Unknown i860-SVR4 + fi + exit 0 ;; + mini*:CTIX:SYS*5:*) + # "miniframe" + echo m68010-convergent-sysv + exit 0 ;; + M68*:*:R3V[567]*:*) + test -r /sysV68 && echo 'm68k-motorola-sysv' && exit 0 ;; + 3[34]??:*:4.0:3.0 | 3[34]??,*:*:4.0:3.0 | 4850:*:4.0:3.0) + OS_REL='' + test -r /etc/.relid \ + && OS_REL=.`sed -n 's/[^ ]* [^ ]* \([0-9][0-9]\).*/\1/p' < /etc/.relid` + /bin/uname -p 2>/dev/null | grep 86 >/dev/null \ + && echo i486-ncr-sysv4.3${OS_REL} && exit 0 + /bin/uname -p 2>/dev/null | /bin/grep entium >/dev/null \ + && echo i586-ncr-sysv4.3${OS_REL} && exit 0 ;; + 3[34]??:*:4.0:* | 3[34]??,*:*:4.0:*) + /bin/uname -p 2>/dev/null | grep 86 >/dev/null \ + && echo i486-ncr-sysv4 && exit 0 ;; + m68*:LynxOS:2.*:*) + echo m68k-unknown-lynxos${UNAME_RELEASE} + exit 0 ;; + mc68030:UNIX_System_V:4.*:*) + echo m68k-atari-sysv4 + exit 0 ;; + i?86:LynxOS:2.*:* | i?86:LynxOS:3.[01]*:*) + echo i386-unknown-lynxos${UNAME_RELEASE} + exit 0 ;; + TSUNAMI:LynxOS:2.*:*) + echo sparc-unknown-lynxos${UNAME_RELEASE} + exit 0 ;; + rs6000:LynxOS:2.*:* | PowerPC:LynxOS:2.*:*) + echo rs6000-unknown-lynxos${UNAME_RELEASE} + exit 0 ;; + SM[BE]S:UNIX_SV:*:*) + echo mips-dde-sysv${UNAME_RELEASE} + exit 0 ;; + RM*:ReliantUNIX-*:*:*) + echo mips-sni-sysv4 + exit 0 ;; + RM*:SINIX-*:*:*) + echo mips-sni-sysv4 + exit 0 ;; + *:SINIX-*:*:*) + if uname -p 2>/dev/null >/dev/null ; then + UNAME_MACHINE=`(uname -p) 2>/dev/null` + echo ${UNAME_MACHINE}-sni-sysv4 + else + echo ns32k-sni-sysv + fi + exit 0 ;; + PENTIUM:CPunix:4.0*:*) # Unisys `ClearPath HMP IX 4000' SVR4/MP effort + # says + echo i586-unisys-sysv4 + exit 0 ;; + *:UNIX_System_V:4*:FTX*) + # From Gerald Hewes . + # How about differentiating between stratus architectures? -djm + echo hppa1.1-stratus-sysv4 + exit 0 ;; + *:*:*:FTX*) + # From seanf@swdc.stratus.com. + echo i860-stratus-sysv4 + exit 0 ;; + mc68*:A/UX:*:*) + echo m68k-apple-aux${UNAME_RELEASE} + exit 0 ;; + news*:NEWS-OS:*:6*) + echo mips-sony-newsos6 + exit 0 ;; + R[34]000:*System_V*:*:* | R4000:UNIX_SYSV:*:* | R4000:UNIX_SV:*:*) + if [ -d /usr/nec ]; then + echo mips-nec-sysv${UNAME_RELEASE} + else + echo mips-unknown-sysv${UNAME_RELEASE} + fi + exit 0 ;; + BeBox:BeOS:*:*) # BeOS running on hardware made by Be, PPC only. + echo powerpc-be-beos + exit 0 ;; + BeMac:BeOS:*:*) # BeOS running on Mac or Mac clone, PPC only. + echo powerpc-apple-beos + exit 0 ;; + BePC:BeOS:*:*) # BeOS running on Intel PC compatible. + echo i586-pc-beos + exit 0 ;; + SX-4:SUPER-UX:*:*) + echo sx4-nec-superux${UNAME_RELEASE} + exit 0 ;; + SX-5:SUPER-UX:*:*) + echo sx5-nec-superux${UNAME_RELEASE} + exit 0 ;; + Power*:Rhapsody:*:*) + echo powerpc-apple-rhapsody${UNAME_RELEASE} + exit 0 ;; + *:Rhapsody:*:*) + echo ${UNAME_MACHINE}-apple-rhapsody${UNAME_RELEASE} + exit 0 ;; +esac + +#echo '(No uname command or uname output not recognized.)' 1>&2 +#echo "${UNAME_MACHINE}:${UNAME_SYSTEM}:${UNAME_RELEASE}:${UNAME_VERSION}" 1>&2 + +cat >$dummy.c < +# include +#endif +main () +{ +#if defined (sony) +#if defined (MIPSEB) + /* BFD wants "bsd" instead of "newsos". Perhaps BFD should be changed, + I don't know.... */ + printf ("mips-sony-bsd\n"); exit (0); +#else +#include + printf ("m68k-sony-newsos%s\n", +#ifdef NEWSOS4 + "4" +#else + "" +#endif + ); exit (0); +#endif +#endif + +#if defined (__arm) && defined (__acorn) && defined (__unix) + printf ("arm-acorn-riscix"); exit (0); +#endif + +#if defined (hp300) && !defined (hpux) + printf ("m68k-hp-bsd\n"); exit (0); +#endif + +#if defined (NeXT) +#if !defined (__ARCHITECTURE__) +#define __ARCHITECTURE__ "m68k" +#endif + int version; + version=`(hostinfo | sed -n 's/.*NeXT Mach \([0-9]*\).*/\1/p') 2>/dev/null`; + if (version < 4) + printf ("%s-next-nextstep%d\n", __ARCHITECTURE__, version); + else + printf ("%s-next-openstep%d\n", __ARCHITECTURE__, version); + exit (0); +#endif + +#if defined (MULTIMAX) || defined (n16) +#if defined (UMAXV) + printf ("ns32k-encore-sysv\n"); exit (0); +#else +#if defined (CMU) + printf ("ns32k-encore-mach\n"); exit (0); +#else + printf ("ns32k-encore-bsd\n"); exit (0); +#endif +#endif +#endif + +#if defined (__386BSD__) + printf ("i386-pc-bsd\n"); exit (0); +#endif + +#if defined (sequent) +#if defined (i386) + printf ("i386-sequent-dynix\n"); exit (0); +#endif +#if defined (ns32000) + printf ("ns32k-sequent-dynix\n"); exit (0); +#endif +#endif + +#if defined (_SEQUENT_) + struct utsname un; + + uname(&un); + + if (strncmp(un.version, "V2", 2) == 0) { + printf ("i386-sequent-ptx2\n"); exit (0); + } + if (strncmp(un.version, "V1", 2) == 0) { /* XXX is V1 correct? */ + printf ("i386-sequent-ptx1\n"); exit (0); + } + printf ("i386-sequent-ptx\n"); exit (0); + +#endif + +#if defined (vax) +#if !defined (ultrix) + printf ("vax-dec-bsd\n"); exit (0); +#else + printf ("vax-dec-ultrix\n"); exit (0); +#endif +#endif + +#if defined (alliant) && defined (i860) + printf ("i860-alliant-bsd\n"); exit (0); +#endif + + exit (1); +} +EOF + +${CC-cc} $dummy.c -o $dummy 2>/dev/null && ./$dummy && rm $dummy.c $dummy && exit 0 +rm -f $dummy.c $dummy + +# Apollos put the system type in the environment. + +test -d /usr/apollo && { echo ${ISP}-apollo-${SYSTYPE}; exit 0; } + +# Convex versions that predate uname can use getsysinfo(1) + +if [ -x /usr/convex/getsysinfo ] +then + case `getsysinfo -f cpu_type` in + c1*) + echo c1-convex-bsd + exit 0 ;; + c2*) + if getsysinfo -f scalar_acc + then echo c32-convex-bsd + else echo c2-convex-bsd + fi + exit 0 ;; + c34*) + echo c34-convex-bsd + exit 0 ;; + c38*) + echo c38-convex-bsd + exit 0 ;; + c4*) + echo c4-convex-bsd + exit 0 ;; + esac +fi + +#echo '(Unable to guess system type)' 1>&2 + +exit 1 diff --git a/config.guess-991124 b/config.guess-991124 new file mode 100755 index 000000000..58670decb --- /dev/null +++ b/config.guess-991124 @@ -0,0 +1,900 @@ +#! /bin/sh +# Attempt to guess a canonical system name. +# Copyright (C) 1992, 93, 94, 95, 96, 97, 1998 Free Software Foundation, Inc. +# +# This file is free software; you can redistribute it and/or modify it +# under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 2 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, but +# WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +# General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software +# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. +# +# As a special exception to the GNU General Public License, if you +# distribute this file as part of a program that contains a +# configuration script generated by Autoconf, you may include it under +# the same distribution terms that you use for the rest of that program. + +# Written by Per Bothner . +# The master version of this file is at the FSF in /home/gd/gnu/lib. +# +# This script attempts to guess a canonical system name similar to +# config.sub. If it succeeds, it prints the system name on stdout, and +# exits with 0. Otherwise, it exits with 1. +# +# The plan is that this can be called by configure scripts if you +# don't specify an explicit system type (host/target name). +# +# Only a few systems have been added to this list; please add others +# (but try to keep the structure clean). +# + +# This is needed to find uname on a Pyramid OSx when run in the BSD universe. +# (ghazi@noc.rutgers.edu 8/24/94.) +if (test -f /.attbin/uname) >/dev/null 2>&1 ; then + PATH=$PATH:/.attbin ; export PATH +fi + +UNAME_MACHINE=`(uname -m) 2>/dev/null` || UNAME_MACHINE=unknown +UNAME_RELEASE=`(uname -r) 2>/dev/null` || UNAME_RELEASE=unknown +UNAME_SYSTEM=`(uname -s) 2>/dev/null` || UNAME_SYSTEM=unknown +UNAME_VERSION=`(uname -v) 2>/dev/null` || UNAME_VERSION=unknown + +trap 'rm -f dummy.c dummy.o dummy; exit 1' 1 2 15 + +# Note: order is significant - the case branches are not exclusive. + +case "${UNAME_MACHINE}:${UNAME_SYSTEM}:${UNAME_RELEASE}:${UNAME_VERSION}" in + alpha:OSF1:*:*) + if test $UNAME_RELEASE = "V4.0"; then + UNAME_RELEASE=`/usr/sbin/sizer -v | awk '{print $3}'` + fi + # A Vn.n version is a released version. + # A Tn.n version is a released field test version. + # A Xn.n version is an unreleased experimental baselevel. + # 1.2 uses "1.2" for uname -r. + cat <dummy.s + .globl main + .ent main +main: + .frame \$30,0,\$26,0 + .prologue 0 + .long 0x47e03d80 # implver $0 + lda \$2,259 + .long 0x47e20c21 # amask $2,$1 + srl \$1,8,\$2 + sll \$2,2,\$2 + sll \$0,3,\$0 + addl \$1,\$0,\$0 + addl \$2,\$0,\$0 + ret \$31,(\$26),1 + .end main +EOF + ${CC-cc} dummy.s -o dummy 2>/dev/null + if test "$?" = 0 ; then + ./dummy + case "$?" in + 7) + UNAME_MACHINE="alpha" + ;; + 15) + UNAME_MACHINE="alphaev5" + ;; + 14) + UNAME_MACHINE="alphaev56" + ;; + 10) + UNAME_MACHINE="alphapca56" + ;; + 16) + UNAME_MACHINE="alphaev6" + ;; + esac + fi + rm -f dummy.s dummy + echo ${UNAME_MACHINE}-dec-osf`echo ${UNAME_RELEASE} | sed -e 's/^[VTX]//' | tr [[A-Z]] [[a-z]]` + exit 0 ;; + 21064:Windows_NT:50:3) + echo alpha-dec-winnt3.5 + exit 0 ;; + Amiga*:UNIX_System_V:4.0:*) + echo m68k-cbm-sysv4 + exit 0;; + amiga:NetBSD:*:*) + echo m68k-cbm-netbsd${UNAME_RELEASE} + exit 0 ;; + amiga:OpenBSD:*:*) + echo m68k-unknown-openbsd${UNAME_RELEASE} + exit 0 ;; + arc64:OpenBSD:*:*) + echo mips64el-unknown-openbsd${UNAME_RELEASE} + exit 0 ;; + arc:OpenBSD:*:*) + echo mipsel-unknown-openbsd${UNAME_RELEASE} + exit 0 ;; + hkmips:OpenBSD:*:*) + echo mips-unknown-openbsd${UNAME_RELEASE} + exit 0 ;; + pmax:OpenBSD:*:*) + echo mipsel-unknown-openbsd${UNAME_RELEASE} + exit 0 ;; + sgi:OpenBSD:*:*) + echo mips-unknown-openbsd${UNAME_RELEASE} + exit 0 ;; + wgrisc:OpenBSD:*:*) + echo mipsel-unknown-openbsd${UNAME_RELEASE} + exit 0 ;; + arm:RISC*:1.[012]*:*|arm:riscix:1.[012]*:*) + echo arm-acorn-riscix${UNAME_RELEASE} + exit 0;; + arm32:NetBSD:*:*) + echo arm-unknown-netbsd`echo ${UNAME_RELEASE}|sed -e 's/[-_].*/\./'` + exit 0 ;; + SR2?01:HI-UX/MPP:*:*) + echo hppa1.1-hitachi-hiuxmpp + exit 0;; + Pyramid*:OSx*:*:*|MIS*:OSx*:*:*) + # akee@wpdis03.wpafb.af.mil (Earle F. Ake) contributed MIS and NILE. + if test "`(/bin/universe) 2>/dev/null`" = att ; then + echo pyramid-pyramid-sysv3 + else + echo pyramid-pyramid-bsd + fi + exit 0 ;; + NILE:*:*:dcosx) + echo pyramid-pyramid-svr4 + exit 0 ;; + sun4*:SunOS:5.*:* | tadpole*:SunOS:5.*:*) + echo sparc-sun-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'` + exit 0 ;; + i86pc:SunOS:5.*:*) + echo i386-pc-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'` + exit 0 ;; + sun4*:SunOS:6*:*) + # According to config.sub, this is the proper way to canonicalize + # SunOS6. Hard to guess exactly what SunOS6 will be like, but + # it's likely to be more like Solaris than SunOS4. + echo sparc-sun-solaris3`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'` + exit 0 ;; + sun4*:SunOS:*:*) + case "`/usr/bin/arch -k`" in + Series*|S4*) + UNAME_RELEASE=`uname -v` + ;; + esac + # Japanese Language versions have a version number like `4.1.3-JL'. + echo sparc-sun-sunos`echo ${UNAME_RELEASE}|sed -e 's/-/_/'` + exit 0 ;; + sun3*:SunOS:*:*) + echo m68k-sun-sunos${UNAME_RELEASE} + exit 0 ;; + sun*:*:4.2BSD:*) + UNAME_RELEASE=`(head -1 /etc/motd | awk '{print substr($5,1,3)}') 2>/dev/null` + test "x${UNAME_RELEASE}" = "x" && UNAME_RELEASE=3 + case "`/bin/arch`" in + sun3) + echo m68k-sun-sunos${UNAME_RELEASE} + ;; + sun4) + echo sparc-sun-sunos${UNAME_RELEASE} + ;; + esac + exit 0 ;; + aushp:SunOS:*:*) + echo sparc-auspex-sunos${UNAME_RELEASE} + exit 0 ;; + atari*:NetBSD:*:*) + echo m68k-atari-netbsd${UNAME_RELEASE} + exit 0 ;; + atari*:OpenBSD:*:*) + echo m68k-unknown-openbsd${UNAME_RELEASE} + exit 0 ;; + sun3*:NetBSD:*:*) + echo m68k-sun-netbsd${UNAME_RELEASE} + exit 0 ;; + sun3*:OpenBSD:*:*) + echo m68k-unknown-openbsd${UNAME_RELEASE} + exit 0 ;; + mac68k:NetBSD:*:*) + echo m68k-apple-netbsd${UNAME_RELEASE} + exit 0 ;; + mac68k:OpenBSD:*:*) + echo m68k-unknown-openbsd${UNAME_RELEASE} + exit 0 ;; + mvme68k:OpenBSD:*:*) + echo m68k-unknown-openbsd${UNAME_RELEASE} + exit 0 ;; + mvme88k:OpenBSD:*:*) + echo m88k-unknown-openbsd${UNAME_RELEASE} + exit 0 ;; + powerpc:machten:*:*) + echo powerpc-apple-machten${UNAME_RELEASE} + exit 0 ;; + RISC*:Mach:*:*) + echo mips-dec-mach_bsd4.3 + exit 0 ;; + RISC*:ULTRIX:*:*) + echo mips-dec-ultrix${UNAME_RELEASE} + exit 0 ;; + VAX*:ULTRIX*:*:*) + echo vax-dec-ultrix${UNAME_RELEASE} + exit 0 ;; + 2020:CLIX:*:*) + echo clipper-intergraph-clix${UNAME_RELEASE} + exit 0 ;; + mips:*:*:UMIPS | mips:*:*:RISCos) + sed 's/^ //' << EOF >dummy.c + int main (argc, argv) int argc; char **argv; { + #if defined (host_mips) && defined (MIPSEB) + #if defined (SYSTYPE_SYSV) + printf ("mips-mips-riscos%ssysv\n", argv[1]); exit (0); + #endif + #if defined (SYSTYPE_SVR4) + printf ("mips-mips-riscos%ssvr4\n", argv[1]); exit (0); + #endif + #if defined (SYSTYPE_BSD43) || defined(SYSTYPE_BSD) + printf ("mips-mips-riscos%sbsd\n", argv[1]); exit (0); + #endif + #endif + exit (-1); + } +EOF + ${CC-cc} dummy.c -o dummy \ + && ./dummy `echo "${UNAME_RELEASE}" | sed -n 's/\([0-9]*\).*/\1/p'` \ + && rm dummy.c dummy && exit 0 + rm -f dummy.c dummy + echo mips-mips-riscos${UNAME_RELEASE} + exit 0 ;; + Night_Hawk:Power_UNIX:*:*) + echo powerpc-harris-powerunix + exit 0 ;; + m88k:CX/UX:7*:*) + echo m88k-harris-cxux7 + exit 0 ;; + m88k:*:4*:R4*) + echo m88k-motorola-sysv4 + exit 0 ;; + m88k:*:3*:R3*) + echo m88k-motorola-sysv3 + exit 0 ;; + AViiON:dgux:*:*) + # DG/UX returns AViiON for all architectures + UNAME_PROCESSOR=`/usr/bin/uname -p` + if [ $UNAME_PROCESSOR = mc88100 -o $UNAME_PROCESSOR = mc88110 ] ; then + if [ ${TARGET_BINARY_INTERFACE}x = m88kdguxelfx \ + -o ${TARGET_BINARY_INTERFACE}x = x ] ; then + echo m88k-dg-dgux${UNAME_RELEASE} + else + echo m88k-dg-dguxbcs${UNAME_RELEASE} + fi + else echo i586-dg-dgux${UNAME_RELEASE} + fi + exit 0 ;; + M88*:DolphinOS:*:*) # DolphinOS (SVR3) + echo m88k-dolphin-sysv3 + exit 0 ;; + M88*:*:R3*:*) + # Delta 88k system running SVR3 + echo m88k-motorola-sysv3 + exit 0 ;; + XD88*:*:*:*) # Tektronix XD88 system running UTekV (SVR3) + echo m88k-tektronix-sysv3 + exit 0 ;; + Tek43[0-9][0-9]:UTek:*:*) # Tektronix 4300 system running UTek (BSD) + echo m68k-tektronix-bsd + exit 0 ;; + *:IRIX*:*:*) + echo mips-sgi-irix`echo ${UNAME_RELEASE}|sed -e 's/-/_/g'` + exit 0 ;; + ????????:AIX?:[12].1:2) # AIX 2.2.1 or AIX 2.1.1 is RT/PC AIX. + echo romp-ibm-aix # uname -m gives an 8 hex-code CPU id + exit 0 ;; # Note that: echo "'`uname -s`'" gives 'AIX ' + i?86:AIX:*:*) + echo i386-ibm-aix + exit 0 ;; + *:AIX:2:3) + if grep bos325 /usr/include/stdio.h >/dev/null 2>&1; then + sed 's/^ //' << EOF >dummy.c + #include + + main() + { + if (!__power_pc()) + exit(1); + puts("powerpc-ibm-aix3.2.5"); + exit(0); + } +EOF + ${CC-cc} dummy.c -o dummy && ./dummy && rm dummy.c dummy && exit 0 + rm -f dummy.c dummy + echo rs6000-ibm-aix3.2.5 + elif grep bos324 /usr/include/stdio.h >/dev/null 2>&1; then + echo rs6000-ibm-aix3.2.4 + else + echo rs6000-ibm-aix3.2 + fi + exit 0 ;; + *:AIX:*:4) + if /usr/sbin/lsattr -EHl proc0 | grep POWER >/dev/null 2>&1; then + IBM_ARCH=rs6000 + else + IBM_ARCH=powerpc + fi + if [ -x /usr/bin/oslevel ] ; then + IBM_REV=`/usr/bin/oslevel` + else + IBM_REV=4.${UNAME_RELEASE} + fi + echo ${IBM_ARCH}-ibm-aix${IBM_REV} + exit 0 ;; + *:AIX:*:*) + echo rs6000-ibm-aix + exit 0 ;; + ibmrt:4.4BSD:*|romp-ibm:BSD:*) + echo romp-ibm-bsd4.4 + exit 0 ;; + ibmrt:*BSD:*|romp-ibm:BSD:*) # covers RT/PC NetBSD and + echo romp-ibm-bsd${UNAME_RELEASE} # 4.3 with uname added to + exit 0 ;; # report: romp-ibm BSD 4.3 + *:BOSX:*:*) + echo rs6000-bull-bosx + exit 0 ;; + DPX/2?00:B.O.S.:*:*) + echo m68k-bull-sysv3 + exit 0 ;; + 9000/[34]??:4.3bsd:1.*:*) + echo m68k-hp-bsd + exit 0 ;; + hp300:4.4BSD:*:* | 9000/[34]??:4.3bsd:2.*:*) + echo m68k-hp-bsd4.4 + exit 0 ;; + 9000/[3478]??:HP-UX:*:*) + case "${UNAME_MACHINE}" in + 9000/31? ) HP_ARCH=m68000 ;; + 9000/[34]?? ) HP_ARCH=m68k ;; + 9000/7?? | 9000/8?[1679] ) HP_ARCH=hppa1.1 ;; + 9000/8?? ) HP_ARCH=hppa1.0 ;; + esac + HPUX_REV=`echo ${UNAME_RELEASE}|sed -e 's/[^.]*.[0B]*//'` + echo ${HP_ARCH}-hp-hpux${HPUX_REV} + exit 0 ;; + 3050*:HI-UX:*:*) + sed 's/^ //' << EOF >dummy.c + #include + int + main () + { + long cpu = sysconf (_SC_CPU_VERSION); + /* The order matters, because CPU_IS_HP_MC68K erroneously returns + true for CPU_PA_RISC1_0. CPU_IS_PA_RISC returns correct + results, however. */ + if (CPU_IS_PA_RISC (cpu)) + { + switch (cpu) + { + case CPU_PA_RISC1_0: puts ("hppa1.0-hitachi-hiuxwe2"); break; + case CPU_PA_RISC1_1: puts ("hppa1.1-hitachi-hiuxwe2"); break; + case CPU_PA_RISC2_0: puts ("hppa2.0-hitachi-hiuxwe2"); break; + default: puts ("hppa-hitachi-hiuxwe2"); break; + } + } + else if (CPU_IS_HP_MC68K (cpu)) + puts ("m68k-hitachi-hiuxwe2"); + else puts ("unknown-hitachi-hiuxwe2"); + exit (0); + } +EOF + ${CC-cc} dummy.c -o dummy && ./dummy && rm dummy.c dummy && exit 0 + rm -f dummy.c dummy + echo unknown-hitachi-hiuxwe2 + exit 0 ;; + 9000/7??:4.3bsd:*:* | 9000/8?[79]:4.3bsd:*:* ) + echo hppa1.1-hp-bsd + exit 0 ;; + 9000/8??:4.3bsd:*:*) + echo hppa1.0-hp-bsd + exit 0 ;; + hp7??:OSF1:*:* | hp8?[79]:OSF1:*:* ) + echo hppa1.1-hp-osf + exit 0 ;; + hp8??:OSF1:*:*) + echo hppa1.0-hp-osf + exit 0 ;; + i?86:OSF1:*:*) + if [ -x /usr/sbin/sysversion ] ; then + echo ${UNAME_MACHINE}-unknown-osf1mk + else + echo ${UNAME_MACHINE}-unknown-osf1 + fi + exit 0 ;; + parisc*:Lites*:*:*) + echo hppa1.1-hp-lites + exit 0 ;; + C1*:ConvexOS:*:* | convex:ConvexOS:C1*:*) + echo c1-convex-bsd + exit 0 ;; + C2*:ConvexOS:*:* | convex:ConvexOS:C2*:*) + if getsysinfo -f scalar_acc + then echo c32-convex-bsd + else echo c2-convex-bsd + fi + exit 0 ;; + C34*:ConvexOS:*:* | convex:ConvexOS:C34*:*) + echo c34-convex-bsd + exit 0 ;; + C38*:ConvexOS:*:* | convex:ConvexOS:C38*:*) + echo c38-convex-bsd + exit 0 ;; + C4*:ConvexOS:*:* | convex:ConvexOS:C4*:*) + echo c4-convex-bsd + exit 0 ;; + CRAY*X-MP:*:*:*) + echo xmp-cray-unicos + exit 0 ;; + CRAY*Y-MP:*:*:*) + echo ymp-cray-unicos${UNAME_RELEASE} + exit 0 ;; + CRAY*[A-Z]90:*:*:*) + echo ${UNAME_MACHINE}-cray-unicos${UNAME_RELEASE} \ + | sed -e 's/CRAY.*\([A-Z]90\)/\1/' \ + -e y/ABCDEFGHIJKLMNOPQRSTUVWXYZ/abcdefghijklmnopqrstuvwxyz/ + exit 0 ;; + CRAY*TS:*:*:*) + echo t90-cray-unicos${UNAME_RELEASE} + exit 0 ;; + CRAY-2:*:*:*) + echo cray2-cray-unicos + exit 0 ;; + F300:UNIX_System_V:*:*) + FUJITSU_SYS=`uname -p | tr [A-Z] [a-z] | sed -e 's/\///'` + FUJITSU_REL=`echo ${UNAME_RELEASE} | sed -e 's/ /_/'` + echo "f300-fujitsu-${FUJITSU_SYS}${FUJITSU_REL}" + exit 0 ;; + F301:UNIX_System_V:*:*) + echo f301-fujitsu-uxpv`echo $UNAME_RELEASE | sed 's/ .*//'` + exit 0 ;; + hp3[0-9][05]:NetBSD:*:*) + echo m68k-hp-netbsd${UNAME_RELEASE} + exit 0 ;; + hp300:OpenBSD:*:*) + echo m68k-unknown-openbsd${UNAME_RELEASE} + exit 0 ;; + i?86:BSD/386:*:* | *:BSD/OS:*:*) + echo ${UNAME_MACHINE}-pc-bsdi${UNAME_RELEASE} + exit 0 ;; + *:FreeBSD:*:*) + echo ${UNAME_MACHINE}-unknown-freebsd`echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'` + exit 0 ;; + *:NetBSD:*:*) + echo ${UNAME_MACHINE}-unknown-netbsd`echo ${UNAME_RELEASE}|sed -e 's/[-_].*/\./'` + exit 0 ;; + *:OpenBSD:*:*) + echo ${UNAME_MACHINE}-unknown-openbsd`echo ${UNAME_RELEASE}|sed -e 's/[-_].*/\./'` + exit 0 ;; + i*:CYGWIN*:*) + echo ${UNAME_MACHINE}-pc-cygwin32 + exit 0 ;; + i*:MINGW*:*) + echo ${UNAME_MACHINE}-pc-mingw32 + exit 0 ;; + p*:CYGWIN*:*) + echo powerpcle-unknown-cygwin32 + exit 0 ;; + prep*:SunOS:5.*:*) + echo powerpcle-unknown-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'` + exit 0 ;; + *:GNU:*:*) + echo `echo ${UNAME_MACHINE}|sed -e 's,[-/].*$,,'`-unknown-gnu`echo ${UNAME_RELEASE}|sed -e 's,/.*$,,'` + exit 0 ;; + *:Linux:*:*) + # uname on the ARM produces all sorts of strangeness, and we need to + # filter it out. + case "$UNAME_MACHINE" in + arm* | sa110*) UNAME_MACHINE="arm" ;; + esac + + # The BFD linker knows what the default object file format is, so + # first see if it will tell us. + ld_help_string=`ld --help 2>&1` + ld_supported_emulations=`echo $ld_help_string \ + | sed -ne '/supported emulations:/!d + s/[ ][ ]*/ /g + s/.*supported emulations: *// + s/ .*// + p'` + case "$ld_supported_emulations" in + i?86linux) echo "${UNAME_MACHINE}-pc-linux-gnuaout" ; exit 0 ;; + i?86coff) echo "${UNAME_MACHINE}-pc-linux-gnucoff" ; exit 0 ;; + sparclinux) echo "${UNAME_MACHINE}-unknown-linux-gnuaout" ; exit 0 ;; + armlinux) echo "${UNAME_MACHINE}-unknown-linux-gnuaout" ; exit 0 ;; + m68klinux) echo "${UNAME_MACHINE}-unknown-linux-gnuaout" ; exit 0 ;; + elf32ppc) echo "powerpc-unknown-linux-gnu" ; exit 0 ;; + esac + + if test "${UNAME_MACHINE}" = "alpha" ; then + sed 's/^ //' <dummy.s + .globl main + .ent main + main: + .frame \$30,0,\$26,0 + .prologue 0 + .long 0x47e03d80 # implver $0 + lda \$2,259 + .long 0x47e20c21 # amask $2,$1 + srl \$1,8,\$2 + sll \$2,2,\$2 + sll \$0,3,\$0 + addl \$1,\$0,\$0 + addl \$2,\$0,\$0 + ret \$31,(\$26),1 + .end main +EOF + LIBC="" + ${CC-cc} dummy.s -o dummy 2>/dev/null + if test "$?" = 0 ; then + ./dummy + case "$?" in + 7) + UNAME_MACHINE="alpha" + ;; + 15) + UNAME_MACHINE="alphaev5" + ;; + 14) + UNAME_MACHINE="alphaev56" + ;; + 10) + UNAME_MACHINE="alphapca56" + ;; + 16) + UNAME_MACHINE="alphaev6" + ;; + esac + + objdump --private-headers dummy | \ + grep ld.so.1 > /dev/null + if test "$?" = 0 ; then + LIBC="libc1" + fi + fi + rm -f dummy.s dummy + echo ${UNAME_MACHINE}-unknown-linux-gnu${LIBC} ; exit 0 + elif test "${UNAME_MACHINE}" = "mips" ; then + cat >dummy.c </dev/null && ./dummy "${UNAME_MACHINE}" && rm dummy.c dummy && exit 0 + rm -f dummy.c dummy + else + # Either a pre-BFD a.out linker (linux-gnuoldld) + # or one that does not give us useful --help. + # GCC wants to distinguish between linux-gnuoldld and linux-gnuaout. + # If ld does not provide *any* "supported emulations:" + # that means it is gnuoldld. + echo "$ld_help_string" | grep >/dev/null 2>&1 "supported emulations:" + test $? != 0 && echo "${UNAME_MACHINE}-pc-linux-gnuoldld" && exit 0 + + case "${UNAME_MACHINE}" in + i?86) + VENDOR=pc; + ;; + *) + VENDOR=unknown; + ;; + esac + # Determine whether the default compiler is a.out or elf + cat >dummy.c < +main(argc, argv) + int argc; + char *argv[]; +{ +#ifdef __ELF__ +# ifdef __GLIBC__ +# if __GLIBC__ >= 2 + printf ("%s-${VENDOR}-linux-gnu\n", argv[1]); +# else + printf ("%s-${VENDOR}-linux-gnulibc1\n", argv[1]); +# endif +# else + printf ("%s-${VENDOR}-linux-gnulibc1\n", argv[1]); +# endif +#else + printf ("%s-${VENDOR}-linux-gnuaout\n", argv[1]); +#endif + return 0; +} +EOF + ${CC-cc} dummy.c -o dummy 2>/dev/null && ./dummy "${UNAME_MACHINE}" && rm dummy.c dummy && exit 0 + rm -f dummy.c dummy + fi ;; +# ptx 4.0 does uname -s correctly, with DYNIX/ptx in there. earlier versions +# are messed up and put the nodename in both sysname and nodename. + i?86:DYNIX/ptx:4*:*) + echo i386-sequent-sysv4 + exit 0 ;; + i?86:UNIX_SV:4.2MP:2.*) + # Unixware is an offshoot of SVR4, but it has its own version + # number series starting with 2... + # I am not positive that other SVR4 systems won't match this, + # I just have to hope. -- rms. + # Use sysv4.2uw... so that sysv4* matches it. + echo ${UNAME_MACHINE}-pc-sysv4.2uw${UNAME_VERSION} + exit 0 ;; + i?86:*:4.*:* | i?86:SYSTEM_V:4.*:*) + if grep Novell /usr/include/link.h >/dev/null 2>/dev/null; then + echo ${UNAME_MACHINE}-univel-sysv${UNAME_RELEASE} + else + echo ${UNAME_MACHINE}-pc-sysv${UNAME_RELEASE} + fi + exit 0 ;; + i?86:*:3.2:*) + if test -f /usr/options/cb.name; then + UNAME_REL=`sed -n 's/.*Version //p' /dev/null >/dev/null ; then + UNAME_REL=`(/bin/uname -X|egrep Release|sed -e 's/.*= //')` + (/bin/uname -X|egrep i80486 >/dev/null) && UNAME_MACHINE=i486 + (/bin/uname -X|egrep '^Machine.*Pentium' >/dev/null) \ + && UNAME_MACHINE=i586 + echo ${UNAME_MACHINE}-pc-sco$UNAME_REL + else + echo ${UNAME_MACHINE}-pc-sysv32 + fi + exit 0 ;; + pc:*:*:*) + # uname -m prints for DJGPP always 'pc', but it prints nothing about + # the processor, so we play safe by assuming i386. + echo i386-pc-msdosdjgpp + exit 0 ;; + Intel:Mach:3*:*) + echo i386-pc-mach3 + exit 0 ;; + paragon:*:*:*) + echo i860-intel-osf1 + exit 0 ;; + i860:*:4.*:*) # i860-SVR4 + if grep Stardent /usr/include/sys/uadmin.h >/dev/null 2>&1 ; then + echo i860-stardent-sysv${UNAME_RELEASE} # Stardent Vistra i860-SVR4 + else # Add other i860-SVR4 vendors below as they are discovered. + echo i860-unknown-sysv${UNAME_RELEASE} # Unknown i860-SVR4 + fi + exit 0 ;; + mini*:CTIX:SYS*5:*) + # "miniframe" + echo m68010-convergent-sysv + exit 0 ;; + M68*:*:R3V[567]*:*) + test -r /sysV68 && echo 'm68k-motorola-sysv' && exit 0 ;; + 3[34]??:*:4.0:3.0 | 3[34]??,*:*:4.0:3.0 | 4850:*:4.0:3.0) + OS_REL='' + test -r /etc/.relid \ + && OS_REL=.`sed -n 's/[^ ]* [^ ]* \([0-9][0-9]\).*/\1/p' < /etc/.relid` + /bin/uname -p 2>/dev/null | grep 86 >/dev/null \ + && echo i486-ncr-sysv4.3${OS_REL} && exit 0 + /bin/uname -p 2>/dev/null | /bin/grep entium >/dev/null \ + && echo i586-ncr-sysv4.3${OS_REL} && exit 0 ;; + 3[34]??:*:4.0:* | 3[34]??,*:*:4.0:*) + /bin/uname -p 2>/dev/null | grep 86 >/dev/null \ + && echo i486-ncr-sysv4 && exit 0 ;; + m68*:LynxOS:2.*:*) + echo m68k-unknown-lynxos${UNAME_RELEASE} + exit 0 ;; + mc68030:UNIX_System_V:4.*:*) + echo m68k-atari-sysv4 + exit 0 ;; + i?86:LynxOS:2.*:*) + echo i386-unknown-lynxos${UNAME_RELEASE} + exit 0 ;; + TSUNAMI:LynxOS:2.*:*) + echo sparc-unknown-lynxos${UNAME_RELEASE} + exit 0 ;; + rs6000:LynxOS:2.*:* | PowerPC:LynxOS:2.*:*) + echo rs6000-unknown-lynxos${UNAME_RELEASE} + exit 0 ;; + SM[BE]S:UNIX_SV:*:*) + echo mips-dde-sysv${UNAME_RELEASE} + exit 0 ;; + RM*:SINIX-*:*:*) + echo mips-sni-sysv4 + exit 0 ;; + *:SINIX-*:*:*) + if uname -p 2>/dev/null >/dev/null ; then + UNAME_MACHINE=`(uname -p) 2>/dev/null` + echo ${UNAME_MACHINE}-sni-sysv4 + else + echo ns32k-sni-sysv + fi + exit 0 ;; + PENTIUM:CPunix:4.0*:*) # Unisys `ClearPath HMP IX 4000' SVR4/MP effort + # says + echo i586-unisys-sysv4 + exit 0 ;; + *:UNIX_System_V:4*:FTX*) + # From Gerald Hewes . + # How about differentiating between stratus architectures? -djm + echo hppa1.1-stratus-sysv4 + exit 0 ;; + *:*:*:FTX*) + # From seanf@swdc.stratus.com. + echo i860-stratus-sysv4 + exit 0 ;; + mc68*:A/UX:*:*) + echo m68k-apple-aux${UNAME_RELEASE} + exit 0 ;; + news*:NEWS-OS:*:6*) + echo mips-sony-newsos6 + exit 0 ;; + R3000:*System_V*:*:* | R4000:UNIX_SYSV:*:*) + if [ -d /usr/nec ]; then + echo mips-nec-sysv${UNAME_RELEASE} + else + echo mips-unknown-sysv${UNAME_RELEASE} + fi + exit 0 ;; +esac + +#echo '(No uname command or uname output not recognized.)' 1>&2 +#echo "${UNAME_MACHINE}:${UNAME_SYSTEM}:${UNAME_RELEASE}:${UNAME_VERSION}" 1>&2 + +cat >dummy.c < +# include +#endif +main () +{ +#if defined (sony) +#if defined (MIPSEB) + /* BFD wants "bsd" instead of "newsos". Perhaps BFD should be changed, + I don't know.... */ + printf ("mips-sony-bsd\n"); exit (0); +#else +#include + printf ("m68k-sony-newsos%s\n", +#ifdef NEWSOS4 + "4" +#else + "" +#endif + ); exit (0); +#endif +#endif + +#if defined (__arm) && defined (__acorn) && defined (__unix) + printf ("arm-acorn-riscix"); exit (0); +#endif + +#if defined (hp300) && !defined (hpux) + printf ("m68k-hp-bsd\n"); exit (0); +#endif + +#if defined (NeXT) +#if !defined (__ARCHITECTURE__) +#define __ARCHITECTURE__ "m68k" +#endif + int version; + version=`(hostinfo | sed -n 's/.*NeXT Mach \([0-9]*\).*/\1/p') 2>/dev/null`; + printf ("%s-next-nextstep%d\n", __ARCHITECTURE__, version); + exit (0); +#endif + +#if defined(__APPLE__) +#if !defined (__ARCHITECTURE__) +#define __ARCHITECTURE__ "m68k" +#endif + int version; + version=`(hostinfo | sed -n 's/.*Kernel Release \([0-9]*\).*/\1/p') 2>/dev/null`; + printf ("%s-next-nextstep%d\n", __ARCHITECTURE__, version); + exit (0); +#endif + +#if defined (MULTIMAX) || defined (n16) +#if defined (UMAXV) + printf ("ns32k-encore-sysv\n"); exit (0); +#else +#if defined (CMU) + printf ("ns32k-encore-mach\n"); exit (0); +#else + printf ("ns32k-encore-bsd\n"); exit (0); +#endif +#endif +#endif + +#if defined (__386BSD__) + printf ("i386-pc-bsd\n"); exit (0); +#endif + +#if defined (sequent) +#if defined (i386) + printf ("i386-sequent-dynix\n"); exit (0); +#endif +#if defined (ns32000) + printf ("ns32k-sequent-dynix\n"); exit (0); +#endif +#endif + +#if defined (_SEQUENT_) + struct utsname un; + + uname(&un); + + if (strncmp(un.version, "V2", 2) == 0) { + printf ("i386-sequent-ptx2\n"); exit (0); + } + if (strncmp(un.version, "V1", 2) == 0) { /* XXX is V1 correct? */ + printf ("i386-sequent-ptx1\n"); exit (0); + } + printf ("i386-sequent-ptx\n"); exit (0); + +#endif + +#if defined (vax) +#if !defined (ultrix) + printf ("vax-dec-bsd\n"); exit (0); +#else + printf ("vax-dec-ultrix\n"); exit (0); +#endif +#endif + +#if defined (alliant) && defined (i860) + printf ("i860-alliant-bsd\n"); exit (0); +#endif + + exit (1); +} +EOF + +${CC-cc} dummy.c -o dummy 2>/dev/null && ./dummy && rm dummy.c dummy && exit 0 +rm -f dummy.c dummy + +# Apollos put the system type in the environment. + +test -d /usr/apollo && { echo ${ISP}-apollo-${SYSTYPE}; exit 0; } + +# Convex versions that predate uname can use getsysinfo(1) + +if [ -x /usr/convex/getsysinfo ] +then + case `getsysinfo -f cpu_type` in + c1*) + echo c1-convex-bsd + exit 0 ;; + c2*) + if getsysinfo -f scalar_acc + then echo c32-convex-bsd + else echo c2-convex-bsd + fi + exit 0 ;; + c34*) + echo c34-convex-bsd + exit 0 ;; + c38*) + echo c38-convex-bsd + exit 0 ;; + c4*) + echo c4-convex-bsd + exit 0 ;; + esac +fi + +#echo '(Unable to guess system type)' 1>&2 + +exit 1 diff --git a/config.h b/config.h new file mode 100644 index 000000000..195afa8ba --- /dev/null +++ b/config.h @@ -0,0 +1,220 @@ +/* config.h. Generated automatically by configure. */ +/* config.h.in. Generated automatically from configure.in by autoheader. */ + +/* Define if on AIX 3. + System headers sometimes define this. + We just want to avoid a redefinition error message. */ +#ifndef _ALL_SOURCE +/* #undef _ALL_SOURCE */ +#endif + +/* Define to empty if the keyword does not work. */ +/* #undef const */ + +/* Define if you don't have vprintf but do have _doprnt. */ +/* #undef HAVE_DOPRNT */ + +/* Define if you have the vprintf function. */ +#define HAVE_VPRINTF 1 + +/* Define as the return type of signal handlers (int or void). */ +#define RETSIGTYPE void + +/* Define to `unsigned' if doesn't define. */ +/* #undef size_t */ + +/* Define if you have the ANSI C header files. */ +#define STDC_HEADERS 1 + +/* Define if you can safely include both and . */ +#define TIME_WITH_SYS_TIME 1 + +/* Define cpu-machine-OS */ +#define OS "sparc-sun-solaris2.6" + +/* The number of bytes in a long double. */ +#define SIZEOF_LONG_DOUBLE 16 + +/* The number of bytes in a long long. */ +#define SIZEOF_LONG_LONG 8 + +/* Define if you have the closesocket function. */ +/* #undef HAVE_CLOSESOCKET */ + +/* Define if you have the gethostbyaddr function. */ +#define HAVE_GETHOSTBYADDR 1 + +/* Define if you have the gethostname function. */ +#define HAVE_GETHOSTNAME 1 + +/* Define if you have the getpass function. */ +#define HAVE_GETPASS 1 + +/* Define if you have the getservbyname function. */ +#define HAVE_GETSERVBYNAME 1 + +/* Define if you have the gettimeofday function. */ +#define HAVE_GETTIMEOFDAY 1 + +/* Define if you have the inet_addr function. */ +#define HAVE_INET_ADDR 1 + +/* Define if you have the inet_ntoa function. */ +#define HAVE_INET_NTOA 1 + +/* Define if you have the perror function. */ +#define HAVE_PERROR 1 + +/* Define if you have the select function. */ +#define HAVE_SELECT 1 + +/* Define if you have the socket function. */ +#define HAVE_SOCKET 1 + +/* Define if you have the strcasecmp function. */ +#define HAVE_STRCASECMP 1 + +/* Define if you have the strdup function. */ +#define HAVE_STRDUP 1 + +/* Define if you have the strftime function. */ +#define HAVE_STRFTIME 1 + +/* Define if you have the strstr function. */ +#define HAVE_STRSTR 1 + +/* Define if you have the tcgetattr function. */ +#define HAVE_TCGETATTR 1 + +/* Define if you have the tcsetattr function. */ +#define HAVE_TCSETATTR 1 + +/* Define if you have the uname function. */ +#define HAVE_UNAME 1 + +/* Define if you have the header file. */ +#define HAVE_ALLOCA_H 1 + +/* Define if you have the header file. */ +#define HAVE_ARPA_INET_H 1 + +/* Define if you have the header file. */ +/* #undef HAVE_CRYPTO_H */ + +/* Define if you have the header file. */ +#define HAVE_DLFCN_H 1 + +/* Define if you have the header file. */ +/* #undef HAVE_ERR_H */ + +/* Define if you have the header file. */ +#define HAVE_FCNTL_H 1 + +/* Define if you have the header file. */ +/* #undef HAVE_GETOPT_H */ + +/* Define if you have the header file. */ +/* #undef HAVE_IO_H */ + +/* Define if you have the header file. */ +#define HAVE_NET_IF_H 1 + +/* Define if you have the header file. */ +#define HAVE_NETDB_H 1 + +/* Define if you have the header file. */ +#define HAVE_NETINET_IN_H 1 + +/* Define if you have the header file. */ +#define HAVE_OPENSSL_CRYPTO_H 1 + +/* Define if you have the header file. */ +#define HAVE_OPENSSL_ERR_H 1 + +/* Define if you have the header file. */ +#define HAVE_OPENSSL_PEM_H 1 + +/* Define if you have the header file. */ +#define HAVE_OPENSSL_RSA_H 1 + +/* Define if you have the header file. */ +#define HAVE_OPENSSL_SSL_H 1 + +/* Define if you have the header file. */ +#define HAVE_OPENSSL_X509_H 1 + +/* Define if you have the header file. */ +/* #undef HAVE_PEM_H */ + +/* Define if you have the header file. */ +/* #undef HAVE_RSA_H */ + +/* Define if you have the header file. */ +#define HAVE_SGTTY_H 1 + +/* Define if you have the header file. */ +/* #undef HAVE_SSL_H */ + +/* Define if you have the header file. */ +#define HAVE_SYS_PARAM_H 1 + +/* Define if you have the header file. */ +#define HAVE_SYS_SELECT_H 1 + +/* Define if you have the header file. */ +#define HAVE_SYS_SOCKET_H 1 + +/* Define if you have the header file. */ +#define HAVE_SYS_SOCKIO_H 1 + +/* Define if you have the header file. */ +#define HAVE_SYS_STAT_H 1 + +/* Define if you have the header file. */ +#define HAVE_SYS_TYPES_H 1 + +/* Define if you have the header file. */ +#define HAVE_TERMIO_H 1 + +/* Define if you have the header file. */ +#define HAVE_TERMIOS_H 1 + +/* Define if you have the header file. */ +#define HAVE_TIME_H 1 + +/* Define if you have the header file. */ +#define HAVE_UNISTD_H 1 + +/* Define if you have the header file. */ +/* #undef HAVE_WINSOCK_H */ + +/* Define if you have the header file. */ +/* #undef HAVE_X509_H */ + +/* Define if you have the crypto library (-lcrypto). */ +#define HAVE_LIBCRYPTO 1 + +/* Define if you have the dl library (-ldl). */ +#define HAVE_LIBDL 1 + +/* Define if you have the nsl library (-lnsl). */ +#define HAVE_LIBNSL 1 + +/* Define if you have the resolve library (-lresolve). */ +/* #undef HAVE_LIBRESOLVE */ + +/* Define if you have the socket library (-lsocket). */ +#define HAVE_LIBSOCKET 1 + +/* Define if you have the ssl library (-lssl). */ +#define HAVE_LIBSSL 1 + +/* Define if you have the ucb library (-lucb). */ +/* #undef HAVE_LIBUCB */ + +/* Name of package */ +#define PACKAGE "curl" + +/* Version number of package */ +#define VERSION "6.3.1" + diff --git a/config.h.in b/config.h.in new file mode 100644 index 000000000..9c5e11013 --- /dev/null +++ b/config.h.in @@ -0,0 +1,219 @@ +/* config.h.in. Generated automatically from configure.in by autoheader. */ + +/* Define if on AIX 3. + System headers sometimes define this. + We just want to avoid a redefinition error message. */ +#ifndef _ALL_SOURCE +#undef _ALL_SOURCE +#endif + +/* Define to empty if the keyword does not work. */ +#undef const + +/* Define if you don't have vprintf but do have _doprnt. */ +#undef HAVE_DOPRNT + +/* Define if you have the vprintf function. */ +#undef HAVE_VPRINTF + +/* Define as the return type of signal handlers (int or void). */ +#undef RETSIGTYPE + +/* Define to `unsigned' if doesn't define. */ +#undef size_t + +/* Define if you have the ANSI C header files. */ +#undef STDC_HEADERS + +/* Define if you can safely include both and . */ +#undef TIME_WITH_SYS_TIME + +/* Define cpu-machine-OS */ +#undef OS + +/* The number of bytes in a long double. */ +#undef SIZEOF_LONG_DOUBLE + +/* The number of bytes in a long long. */ +#undef SIZEOF_LONG_LONG + +/* Define if you have the closesocket function. */ +#undef HAVE_CLOSESOCKET + +/* Define if you have the gethostbyaddr function. */ +#undef HAVE_GETHOSTBYADDR + +/* Define if you have the gethostname function. */ +#undef HAVE_GETHOSTNAME + +/* Define if you have the getpass function. */ +#undef HAVE_GETPASS + +/* Define if you have the getservbyname function. */ +#undef HAVE_GETSERVBYNAME + +/* Define if you have the gettimeofday function. */ +#undef HAVE_GETTIMEOFDAY + +/* Define if you have the inet_addr function. */ +#undef HAVE_INET_ADDR + +/* Define if you have the inet_ntoa function. */ +#undef HAVE_INET_NTOA + +/* Define if you have the perror function. */ +#undef HAVE_PERROR + +/* Define if you have the select function. */ +#undef HAVE_SELECT + +/* Define if you have the socket function. */ +#undef HAVE_SOCKET + +/* Define if you have the strcasecmp function. */ +#undef HAVE_STRCASECMP + +/* Define if you have the strdup function. */ +#undef HAVE_STRDUP + +/* Define if you have the strftime function. */ +#undef HAVE_STRFTIME + +/* Define if you have the strstr function. */ +#undef HAVE_STRSTR + +/* Define if you have the tcgetattr function. */ +#undef HAVE_TCGETATTR + +/* Define if you have the tcsetattr function. */ +#undef HAVE_TCSETATTR + +/* Define if you have the uname function. */ +#undef HAVE_UNAME + +/* Define if you have the header file. */ +#undef HAVE_ALLOCA_H + +/* Define if you have the header file. */ +#undef HAVE_ARPA_INET_H + +/* Define if you have the header file. */ +#undef HAVE_CRYPTO_H + +/* Define if you have the header file. */ +#undef HAVE_DLFCN_H + +/* Define if you have the header file. */ +#undef HAVE_ERR_H + +/* Define if you have the header file. */ +#undef HAVE_FCNTL_H + +/* Define if you have the header file. */ +#undef HAVE_GETOPT_H + +/* Define if you have the header file. */ +#undef HAVE_IO_H + +/* Define if you have the header file. */ +#undef HAVE_NET_IF_H + +/* Define if you have the header file. */ +#undef HAVE_NETDB_H + +/* Define if you have the header file. */ +#undef HAVE_NETINET_IN_H + +/* Define if you have the header file. */ +#undef HAVE_OPENSSL_CRYPTO_H + +/* Define if you have the header file. */ +#undef HAVE_OPENSSL_ERR_H + +/* Define if you have the header file. */ +#undef HAVE_OPENSSL_PEM_H + +/* Define if you have the header file. */ +#undef HAVE_OPENSSL_RSA_H + +/* Define if you have the header file. */ +#undef HAVE_OPENSSL_SSL_H + +/* Define if you have the header file. */ +#undef HAVE_OPENSSL_X509_H + +/* Define if you have the header file. */ +#undef HAVE_PEM_H + +/* Define if you have the header file. */ +#undef HAVE_RSA_H + +/* Define if you have the header file. */ +#undef HAVE_SGTTY_H + +/* Define if you have the header file. */ +#undef HAVE_SSL_H + +/* Define if you have the header file. */ +#undef HAVE_SYS_PARAM_H + +/* Define if you have the header file. */ +#undef HAVE_SYS_SELECT_H + +/* Define if you have the header file. */ +#undef HAVE_SYS_SOCKET_H + +/* Define if you have the header file. */ +#undef HAVE_SYS_SOCKIO_H + +/* Define if you have the header file. */ +#undef HAVE_SYS_STAT_H + +/* Define if you have the header file. */ +#undef HAVE_SYS_TYPES_H + +/* Define if you have the header file. */ +#undef HAVE_TERMIO_H + +/* Define if you have the header file. */ +#undef HAVE_TERMIOS_H + +/* Define if you have the header file. */ +#undef HAVE_TIME_H + +/* Define if you have the header file. */ +#undef HAVE_UNISTD_H + +/* Define if you have the header file. */ +#undef HAVE_WINSOCK_H + +/* Define if you have the header file. */ +#undef HAVE_X509_H + +/* Define if you have the crypto library (-lcrypto). */ +#undef HAVE_LIBCRYPTO + +/* Define if you have the dl library (-ldl). */ +#undef HAVE_LIBDL + +/* Define if you have the nsl library (-lnsl). */ +#undef HAVE_LIBNSL + +/* Define if you have the resolve library (-lresolve). */ +#undef HAVE_LIBRESOLVE + +/* Define if you have the socket library (-lsocket). */ +#undef HAVE_LIBSOCKET + +/* Define if you have the ssl library (-lssl). */ +#undef HAVE_LIBSSL + +/* Define if you have the ucb library (-lucb). */ +#undef HAVE_LIBUCB + +/* Name of package */ +#undef PACKAGE + +/* Version number of package */ +#undef VERSION + diff --git a/config.log b/config.log new file mode 100644 index 000000000..ac13614e4 --- /dev/null +++ b/config.log @@ -0,0 +1,90 @@ +This file contains any messages produced by compilers while +running configure, to aid debugging if configure makes a mistake. + +configure:562: checking for a BSD compatible install +configure:615: checking whether build environment is sane +configure:672: checking whether make sets ${MAKE} +configure:718: checking for working aclocal +configure:731: checking for working autoconf +configure:744: checking for working automake +configure:757: checking for working autoheader +configure:770: checking for working makeinfo +configure:787: checking for gcc +configure:900: checking whether the C compiler (gcc ) works +configure:916: gcc -o conftest conftest.c 1>&5 +configure:942: checking whether the C compiler (gcc ) is a cross-compiler +configure:947: checking whether we are using GNU C +configure:975: checking whether gcc accepts -g +configure:1018: checking for a BSD compatible install +configure:1071: checking whether make sets ${MAKE} +configure:1099: checking how to run the C preprocessor +configure:1179: checking for AIX +configure:1205: checking for gethostbyname +configure:1251: checking for gethostbyname in -lnsl +configure:1301: checking for strcasecmp +configure:1397: checking for connect +configure:1443: checking for connect in -lsocket +configure:1493: checking for gethostname +configure:1589: checking for dlopen +configure:1635: checking for dlopen in -ldl +configure:1701: checking where to look for SSL +configure:1713: checking for CRYPTO_lock in -lcrypto +configure:1762: checking for SSL_connect in -lssl +configure:1813: checking for openssl/x509.h +configure:1813: checking for openssl/rsa.h +configure:1813: checking for openssl/crypto.h +configure:1813: checking for openssl/pem.h +configure:1813: checking for openssl/ssl.h +configure:1813: checking for openssl/err.h +configure:1903: checking for ANSI C header files +configure:2032: checking for unistd.h +configure:2032: checking for arpa/inet.h +configure:2032: checking for net/if.h +configure:2032: checking for netinet/in.h +configure:2032: checking for netdb.h +configure:2032: checking for sys/select.h +configure:2032: checking for sys/socket.h +configure:2032: checking for sys/sockio.h +configure:2032: checking for sys/stat.h +configure:2032: checking for sys/types.h +configure:2032: checking for getopt.h +configure:2032: checking for sys/param.h +configure:2032: checking for termios.h +configure:2032: checking for termio.h +configure:2032: checking for sgtty.h +configure:2032: checking for fcntl.h +configure:2032: checking for dlfcn.h +configure:2032: checking for alloca.h +configure:2032: checking for winsock.h +configure:2032: checking for time.h +configure:2032: checking for io.h +configure:2071: checking for working const +configure:2146: checking for size_t +configure:2179: checking whether time.h and sys/time.h may both be included +configure:2218: checking size of long double +configure:2258: checking size of long long +configure:2304: checking host system type +configure:2330: checking return type of signal handlers +configure:2371: checking for vprintf +configure:2496: checking for socket +configure:2496: checking for select +configure:2496: checking for strdup +configure:2496: checking for strstr +configure:2496: checking for strftime +configure:2496: checking for uname +configure:2496: checking for strcasecmp +configure:2496: checking for gethostname +configure:2496: checking for gethostbyaddr +configure:2496: checking for getservbyname +configure:2496: checking for gettimeofday +configure:2496: checking for inet_addr +configure:2496: checking for inet_ntoa +configure:2496: checking for tcsetattr +configure:2496: checking for tcgetattr +configure:2496: checking for perror +configure:2496: checking for getpass +configure:2496: checking for closesocket +configure:2554: checking for perl +configure:2593: checking for nroff +configure:2633: checking for ranlib +configure:2665: checking for bison diff --git a/config.status b/config.status new file mode 100755 index 000000000..8c3de4b68 --- /dev/null +++ b/config.status @@ -0,0 +1,492 @@ +#! /bin/sh +# Generated automatically by configure. +# Run this file to recreate the current configuration. +# This directory was configured as follows, +# on host pm1: +# +# ./configure --with-ssl=/home/dast +# +# Compiler output produced by configure, useful for debugging +# configure, is in ./config.log if it exists. + +ac_cs_usage="Usage: ./config.status [--recheck] [--version] [--help]" +for ac_option +do + case "$ac_option" in + -recheck | --recheck | --rechec | --reche | --rech | --rec | --re | --r) + echo "running ${CONFIG_SHELL-/bin/sh} ./configure --with-ssl=/home/dast --no-create --no-recursion" + exec ${CONFIG_SHELL-/bin/sh} ./configure --with-ssl=/home/dast --no-create --no-recursion ;; + -version | --version | --versio | --versi | --vers | --ver | --ve | --v) + echo "./config.status generated by autoconf version 2.13" + exit 0 ;; + -help | --help | --hel | --he | --h) + echo "$ac_cs_usage"; exit 0 ;; + *) echo "$ac_cs_usage"; exit 1 ;; + esac +done + +ac_given_srcdir=. +ac_given_INSTALL="./install-sh -c" + +trap 'rm -fr Makefile src/Makefile lib/Makefile perl/checklinks.pl perl/getlinks.pl perl/formfind.pl perl/recursiveftpget.pl config.h src/config.h conftest*; exit 1' 1 2 15 + +# Protect against being on the right side of a sed subst in config.status. +sed 's/%@/@@/; s/@%/@@/; s/%g$/@g/; /@g$/s/[\\&%]/\\&/g; + s/@@/%@/; s/@@/@%/; s/@g$/%g/' > conftest.subs <<\CEOF +/^[ ]*VPATH[ ]*=[^:]*$/d + +s%@SHELL@%/bin/sh%g +s%@CFLAGS@%-g -O2%g +s%@CPPFLAGS@% -I/home/dast/include/openssl -I/home/dast/include%g +s%@CXXFLAGS@%%g +s%@FFLAGS@%%g +s%@DEFS@%-DHAVE_CONFIG_H%g +s%@LDFLAGS@%%g +s%@LIBS@%-lssl -lcrypto -ldl -lsocket -lnsl -L/home/dast/lib%g +s%@exec_prefix@%${prefix}%g +s%@prefix@%/usr/local%g +s%@program_transform_name@%s,x,x,%g +s%@bindir@%${exec_prefix}/bin%g +s%@sbindir@%${exec_prefix}/sbin%g +s%@libexecdir@%${exec_prefix}/libexec%g +s%@datadir@%${prefix}/share%g +s%@sysconfdir@%${prefix}/etc%g +s%@sharedstatedir@%${prefix}/com%g +s%@localstatedir@%${prefix}/var%g +s%@libdir@%${exec_prefix}/lib%g +s%@includedir@%${prefix}/include%g +s%@oldincludedir@%/usr/include%g +s%@infodir@%${prefix}/info%g +s%@mandir@%${prefix}/man%g +s%@INSTALL_PROGRAM@%${INSTALL}%g +s%@INSTALL_SCRIPT@%${INSTALL_PROGRAM}%g +s%@INSTALL_DATA@%${INSTALL} -m 644%g +s%@PACKAGE@%curl%g +s%@VERSION@%6.3.1%g +s%@ACLOCAL@%aclocal%g +s%@AUTOCONF@%autoconf%g +s%@AUTOMAKE@%automake%g +s%@AUTOHEADER@%autoheader%g +s%@MAKEINFO@%makeinfo%g +s%@SET_MAKE@%%g +s%@CC@%gcc%g +s%@CPP@%gcc -E%g +s%@host@%sparc-sun-solaris2.6%g +s%@host_alias@%sparc-sun-solaris2.6%g +s%@host_cpu@%sparc%g +s%@host_vendor@%sun%g +s%@host_os@%solaris2.6%g +s%@PERL@%/usr/local/bin/perl%g +s%@NROFF@%/bin/nroff%g +s%@RANLIB@%ranlib%g +s%@YACC@%bison -y%g + +CEOF + +# Split the substitutions into bite-sized pieces for seds with +# small command number limits, like on Digital OSF/1 and HP-UX. +ac_max_sed_cmds=90 # Maximum number of lines to put in a sed script. +ac_file=1 # Number of current file. +ac_beg=1 # First line for current file. +ac_end=$ac_max_sed_cmds # Line after last line for current file. +ac_more_lines=: +ac_sed_cmds="" +while $ac_more_lines; do + if test $ac_beg -gt 1; then + sed "1,${ac_beg}d; ${ac_end}q" conftest.subs > conftest.s$ac_file + else + sed "${ac_end}q" conftest.subs > conftest.s$ac_file + fi + if test ! -s conftest.s$ac_file; then + ac_more_lines=false + rm -f conftest.s$ac_file + else + if test -z "$ac_sed_cmds"; then + ac_sed_cmds="sed -f conftest.s$ac_file" + else + ac_sed_cmds="$ac_sed_cmds | sed -f conftest.s$ac_file" + fi + ac_file=`expr $ac_file + 1` + ac_beg=$ac_end + ac_end=`expr $ac_end + $ac_max_sed_cmds` + fi +done +if test -z "$ac_sed_cmds"; then + ac_sed_cmds=cat +fi + +CONFIG_FILES=${CONFIG_FILES-"Makefile src/Makefile lib/Makefile perl/checklinks.pl perl/getlinks.pl perl/formfind.pl perl/recursiveftpget.pl "} +for ac_file in .. $CONFIG_FILES; do if test "x$ac_file" != x..; then + # Support "outfile[:infile[:infile...]]", defaulting infile="outfile.in". + case "$ac_file" in + *:*) ac_file_in=`echo "$ac_file"|sed 's%[^:]*:%%'` + ac_file=`echo "$ac_file"|sed 's%:.*%%'` ;; + *) ac_file_in="${ac_file}.in" ;; + esac + + # Adjust a relative srcdir, top_srcdir, and INSTALL for subdirectories. + + # Remove last slash and all that follows it. Not all systems have dirname. + ac_dir=`echo $ac_file|sed 's%/[^/][^/]*$%%'` + if test "$ac_dir" != "$ac_file" && test "$ac_dir" != .; then + # The file is in a subdirectory. + test ! -d "$ac_dir" && mkdir "$ac_dir" + ac_dir_suffix="/`echo $ac_dir|sed 's%^\./%%'`" + # A "../" for each directory in $ac_dir_suffix. + ac_dots=`echo $ac_dir_suffix|sed 's%/[^/]*%../%g'` + else + ac_dir_suffix= ac_dots= + fi + + case "$ac_given_srcdir" in + .) srcdir=. + if test -z "$ac_dots"; then top_srcdir=. + else top_srcdir=`echo $ac_dots|sed 's%/$%%'`; fi ;; + /*) srcdir="$ac_given_srcdir$ac_dir_suffix"; top_srcdir="$ac_given_srcdir" ;; + *) # Relative path. + srcdir="$ac_dots$ac_given_srcdir$ac_dir_suffix" + top_srcdir="$ac_dots$ac_given_srcdir" ;; + esac + + case "$ac_given_INSTALL" in + [/$]*) INSTALL="$ac_given_INSTALL" ;; + *) INSTALL="$ac_dots$ac_given_INSTALL" ;; + esac + + echo creating "$ac_file" + rm -f "$ac_file" + configure_input="Generated automatically from `echo $ac_file_in|sed 's%.*/%%'` by configure." + case "$ac_file" in + *Makefile*) ac_comsub="1i\\ +# $configure_input" ;; + *) ac_comsub= ;; + esac + + ac_file_inputs=`echo $ac_file_in|sed -e "s%^%$ac_given_srcdir/%" -e "s%:% $ac_given_srcdir/%g"` + sed -e "$ac_comsub +s%@configure_input@%$configure_input%g +s%@srcdir@%$srcdir%g +s%@top_srcdir@%$top_srcdir%g +s%@INSTALL@%$INSTALL%g +" $ac_file_inputs | (eval "$ac_sed_cmds") > $ac_file +fi; done +rm -f conftest.s* + +# These sed commands are passed to sed as "A NAME B NAME C VALUE D", where +# NAME is the cpp macro being defined and VALUE is the value it is being given. +# +# ac_d sets the value in "#define NAME VALUE" lines. +ac_dA='s%^\([ ]*\)#\([ ]*define[ ][ ]*\)' +ac_dB='\([ ][ ]*\)[^ ]*%\1#\2' +ac_dC='\3' +ac_dD='%g' +# ac_u turns "#undef NAME" with trailing blanks into "#define NAME VALUE". +ac_uA='s%^\([ ]*\)#\([ ]*\)undef\([ ][ ]*\)' +ac_uB='\([ ]\)%\1#\2define\3' +ac_uC=' ' +ac_uD='\4%g' +# ac_e turns "#undef NAME" without trailing blanks into "#define NAME VALUE". +ac_eA='s%^\([ ]*\)#\([ ]*\)undef\([ ][ ]*\)' +ac_eB='$%\1#\2define\3' +ac_eC=' ' +ac_eD='%g' + +if test "${CONFIG_HEADERS+set}" != set; then + CONFIG_HEADERS="config.h src/config.h" +fi +for ac_file in .. $CONFIG_HEADERS; do if test "x$ac_file" != x..; then + # Support "outfile[:infile[:infile...]]", defaulting infile="outfile.in". + case "$ac_file" in + *:*) ac_file_in=`echo "$ac_file"|sed 's%[^:]*:%%'` + ac_file=`echo "$ac_file"|sed 's%:.*%%'` ;; + *) ac_file_in="${ac_file}.in" ;; + esac + + echo creating $ac_file + + rm -f conftest.frag conftest.in conftest.out + ac_file_inputs=`echo $ac_file_in|sed -e "s%^%$ac_given_srcdir/%" -e "s%:% $ac_given_srcdir/%g"` + cat $ac_file_inputs > conftest.in + + cat > conftest.frag < conftest.out + rm -f conftest.in + mv conftest.out conftest.in + + cat > conftest.frag < conftest.out + rm -f conftest.in + mv conftest.out conftest.in + + cat > conftest.frag < conftest.out + rm -f conftest.in + mv conftest.out conftest.in + + cat > conftest.frag < conftest.out + rm -f conftest.in + mv conftest.out conftest.in + + cat > conftest.frag < conftest.out + rm -f conftest.in + mv conftest.out conftest.in + + cat > conftest.frag < conftest.out + rm -f conftest.in + mv conftest.out conftest.in + + cat > conftest.frag < conftest.out + rm -f conftest.in + mv conftest.out conftest.in + + cat > conftest.frag < conftest.out + rm -f conftest.in + mv conftest.out conftest.in + + cat > conftest.frag < conftest.out + rm -f conftest.in + mv conftest.out conftest.in + + cat > conftest.frag < conftest.out + rm -f conftest.in + mv conftest.out conftest.in + + cat > conftest.frag < conftest.out + rm -f conftest.in + mv conftest.out conftest.in + + cat > conftest.frag < conftest.out + rm -f conftest.in + mv conftest.out conftest.in + + cat > conftest.frag < conftest.out + rm -f conftest.in + mv conftest.out conftest.in + + cat > conftest.frag < conftest.out + rm -f conftest.in + mv conftest.out conftest.in + + rm -f conftest.frag conftest.h + echo "/* $ac_file. Generated automatically by configure. */" > conftest.h + cat conftest.in >> conftest.h + rm -f conftest.in + if cmp -s $ac_file conftest.h 2>/dev/null; then + echo "$ac_file is unchanged" + rm -f conftest.h + else + # Remove last slash and all that follows it. Not all systems have dirname. + ac_dir=`echo $ac_file|sed 's%/[^/][^/]*$%%'` + if test "$ac_dir" != "$ac_file" && test "$ac_dir" != .; then + # The file is in a subdirectory. + test ! -d "$ac_dir" && mkdir "$ac_dir" + fi + rm -f $ac_file + mv conftest.h $ac_file + fi +fi; done + + + +am_indx=1 +for am_file in config.h src/config.h; do + case " $CONFIG_HEADERS " in + *" $am_file "*) + echo timestamp > `echo $am_file | sed -e 's%:.*%%' -e 's%[^/]*$%%'`stamp-h$am_indx + ;; + esac + am_indx=`expr "$am_indx" + 1` +done + +exit 0 diff --git a/config.sub b/config.sub new file mode 100755 index 000000000..ecf770cea --- /dev/null +++ b/config.sub @@ -0,0 +1,979 @@ +#! /bin/sh +# Configuration validation subroutine script, version 1.1. +# Copyright (C) 1991, 92-97, 1998 Free Software Foundation, Inc. +# This file is (in principle) common to ALL GNU software. +# The presence of a machine in this file suggests that SOME GNU software +# can handle that machine. It does not imply ALL GNU software can. +# +# This file is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 2 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software +# Foundation, Inc., 59 Temple Place - Suite 330, +# Boston, MA 02111-1307, USA. + +# As a special exception to the GNU General Public License, if you +# distribute this file as part of a program that contains a +# configuration script generated by Autoconf, you may include it under +# the same distribution terms that you use for the rest of that program. + +# Configuration subroutine to validate and canonicalize a configuration type. +# Supply the specified configuration type as an argument. +# If it is invalid, we print an error message on stderr and exit with code 1. +# Otherwise, we print the canonical config type on stdout and succeed. + +# This file is supposed to be the same for all GNU packages +# and recognize all the CPU types, system types and aliases +# that are meaningful with *any* GNU software. +# Each package is responsible for reporting which valid configurations +# it does not support. The user should be able to distinguish +# a failure to support a valid configuration from a meaningless +# configuration. + +# The goal of this file is to map all the various variations of a given +# machine specification into a single specification in the form: +# CPU_TYPE-MANUFACTURER-OPERATING_SYSTEM +# or in some cases, the newer four-part form: +# CPU_TYPE-MANUFACTURER-KERNEL-OPERATING_SYSTEM +# It is wrong to echo any other type of specification. + +if [ x$1 = x ] +then + echo Configuration name missing. 1>&2 + echo "Usage: $0 CPU-MFR-OPSYS" 1>&2 + echo "or $0 ALIAS" 1>&2 + echo where ALIAS is a recognized configuration type. 1>&2 + exit 1 +fi + +# First pass through any local machine types. +case $1 in + *local*) + echo $1 + exit 0 + ;; + *) + ;; +esac + +# Separate what the user gave into CPU-COMPANY and OS or KERNEL-OS (if any). +# Here we must recognize all the valid KERNEL-OS combinations. +maybe_os=`echo $1 | sed 's/^\(.*\)-\([^-]*-[^-]*\)$/\2/'` +case $maybe_os in + linux-gnu*) + os=-$maybe_os + basic_machine=`echo $1 | sed 's/^\(.*\)-\([^-]*-[^-]*\)$/\1/'` + ;; + *) + basic_machine=`echo $1 | sed 's/-[^-]*$//'` + if [ $basic_machine != $1 ] + then os=`echo $1 | sed 's/.*-/-/'` + else os=; fi + ;; +esac + +### Let's recognize common machines as not being operating systems so +### that things like config.sub decstation-3100 work. We also +### recognize some manufacturers as not being operating systems, so we +### can provide default operating systems below. +case $os in + -sun*os*) + # Prevent following clause from handling this invalid input. + ;; + -dec* | -mips* | -sequent* | -encore* | -pc532* | -sgi* | -sony* | \ + -att* | -7300* | -3300* | -delta* | -motorola* | -sun[234]* | \ + -unicom* | -ibm* | -next | -hp | -isi* | -apollo | -altos* | \ + -convergent* | -ncr* | -news | -32* | -3600* | -3100* | -hitachi* |\ + -c[123]* | -convex* | -sun | -crds | -omron* | -dg | -ultra | -tti* | \ + -harris | -dolphin | -highlevel | -gould | -cbm | -ns | -masscomp | \ + -apple) + os= + basic_machine=$1 + ;; + -hiux*) + os=-hiuxwe2 + ;; + -sco5) + os=sco3.2v5 + basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` + ;; + -sco4) + os=-sco3.2v4 + basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` + ;; + -sco3.2.[4-9]*) + os=`echo $os | sed -e 's/sco3.2./sco3.2v/'` + basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` + ;; + -sco3.2v[4-9]*) + # Don't forget version if it is 3.2v4 or newer. + basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` + ;; + -sco*) + os=-sco3.2v2 + basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` + ;; + -isc) + os=-isc2.2 + basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` + ;; + -clix*) + basic_machine=clipper-intergraph + ;; + -isc*) + basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` + ;; + -lynx*) + os=-lynxos + ;; + -ptx*) + basic_machine=`echo $1 | sed -e 's/86-.*/86-sequent/'` + ;; + -windowsnt*) + os=`echo $os | sed -e 's/windowsnt/winnt/'` + ;; + -psos*) + os=-psos + ;; +esac + +# Decode aliases for certain CPU-COMPANY combinations. +case $basic_machine in + # Recognize the basic CPU types without company name. + # Some are omitted here because they have special meanings below. + tahoe | i860 | m32r | m68k | m68000 | m88k | ns32k | arc | arm \ + | arme[lb] | pyramid | mn10200 | mn10300 | tron | a29k \ + | 580 | i960 | h8300 | hppa | hppa1.0 | hppa1.1 | hppa2.0 \ + | hppa2.0w \ + | alpha | alphaev5 | alphaev56 | we32k | ns16k | clipper \ + | i370 | sh | powerpc | powerpcle | 1750a | dsp16xx | pdp11 \ + | mips64 | mipsel | mips64el | mips64orion | mips64orionel \ + | mipstx39 | mipstx39el | armv[34][lb] \ + | sparc | sparclet | sparclite | sparc64 | v850) + basic_machine=$basic_machine-unknown + ;; + # We use `pc' rather than `unknown' + # because (1) that's what they normally are, and + # (2) the word "unknown" tends to confuse beginning users. + i[34567]86) + basic_machine=$basic_machine-pc + ;; + # Object if more than one company name word. + *-*-*) + echo Invalid configuration \`$1\': machine \`$basic_machine\' not recognized 1>&2 + exit 1 + ;; + # Recognize the basic CPU types with company name. + vax-* | tahoe-* | i[34567]86-* | i860-* | m32r-* | m68k-* | m68000-* \ + | m88k-* | sparc-* | ns32k-* | fx80-* | arc-* | arm-* | c[123]* \ + | mips-* | pyramid-* | tron-* | a29k-* | romp-* | rs6000-* \ + | power-* | none-* | 580-* | cray2-* | h8300-* | i960-* \ + | xmp-* | ymp-* | hppa-* | hppa1.0-* | hppa1.1-* | hppa2.0-* \ + | hppa2.0w-* \ + | alpha-* | alphaev5-* | alphaev56-* | we32k-* | cydra-* \ + | ns16k-* | pn-* | np1-* | xps100-* | clipper-* | orion-* \ + | sparclite-* | pdp11-* | sh-* | powerpc-* | powerpcle-* \ + | sparc64-* | mips64-* | mipsel-* | armv[34][lb]-*\ + | mips64el-* | mips64orion-* | mips64orionel-* \ + | mipstx39-* | mipstx39el-* \ + | f301-* | armv*-*) + ;; + # Recognize the various machine names and aliases which stand + # for a CPU type and a company and sometimes even an OS. + 3b1 | 7300 | 7300-att | att-7300 | pc7300 | safari | unixpc) + basic_machine=m68000-att + ;; + 3b*) + basic_machine=we32k-att + ;; + alliant | fx80) + basic_machine=fx80-alliant + ;; + altos | altos3068) + basic_machine=m68k-altos + ;; + am29k) + basic_machine=a29k-none + os=-bsd + ;; + amdahl) + basic_machine=580-amdahl + os=-sysv + ;; + amiga | amiga-*) + basic_machine=m68k-cbm + ;; + amigaos | amigados) + basic_machine=m68k-cbm + os=-amigaos + ;; + amigaunix | amix) + basic_machine=m68k-cbm + os=-sysv4 + ;; + apollo68) + basic_machine=m68k-apollo + os=-sysv + ;; + aux) + basic_machine=m68k-apple + os=-aux + ;; + balance) + basic_machine=ns32k-sequent + os=-dynix + ;; + convex-c1) + basic_machine=c1-convex + os=-bsd + ;; + convex-c2) + basic_machine=c2-convex + os=-bsd + ;; + convex-c32) + basic_machine=c32-convex + os=-bsd + ;; + convex-c34) + basic_machine=c34-convex + os=-bsd + ;; + convex-c38) + basic_machine=c38-convex + os=-bsd + ;; + cray | ymp) + basic_machine=ymp-cray + os=-unicos + ;; + cray2) + basic_machine=cray2-cray + os=-unicos + ;; + [ctj]90-cray) + basic_machine=c90-cray + os=-unicos + ;; + crds | unos) + basic_machine=m68k-crds + ;; + da30 | da30-*) + basic_machine=m68k-da30 + ;; + decstation | decstation-3100 | pmax | pmax-* | pmin | dec3100 | decstatn) + basic_machine=mips-dec + ;; + delta | 3300 | motorola-3300 | motorola-delta \ + | 3300-motorola | delta-motorola) + basic_machine=m68k-motorola + ;; + delta88) + basic_machine=m88k-motorola + os=-sysv3 + ;; + dpx20 | dpx20-*) + basic_machine=rs6000-bull + os=-bosx + ;; + dpx2* | dpx2*-bull) + basic_machine=m68k-bull + os=-sysv3 + ;; + ebmon29k) + basic_machine=a29k-amd + os=-ebmon + ;; + elxsi) + basic_machine=elxsi-elxsi + os=-bsd + ;; + encore | umax | mmax) + basic_machine=ns32k-encore + ;; + fx2800) + basic_machine=i860-alliant + ;; + genix) + basic_machine=ns32k-ns + ;; + gmicro) + basic_machine=tron-gmicro + os=-sysv + ;; + h3050r* | hiux*) + basic_machine=hppa1.1-hitachi + os=-hiuxwe2 + ;; + h8300hms) + basic_machine=h8300-hitachi + os=-hms + ;; + harris) + basic_machine=m88k-harris + os=-sysv3 + ;; + hp300-*) + basic_machine=m68k-hp + ;; + hp300bsd) + basic_machine=m68k-hp + os=-bsd + ;; + hp300hpux) + basic_machine=m68k-hp + os=-hpux + ;; + hp9k2[0-9][0-9] | hp9k31[0-9]) + basic_machine=m68000-hp + ;; + hp9k3[2-9][0-9]) + basic_machine=m68k-hp + ;; + hp9k7[0-9][0-9] | hp7[0-9][0-9] | hp9k8[0-9]7 | hp8[0-9]7) + basic_machine=hppa1.1-hp + ;; + hp9k8[0-9][0-9] | hp8[0-9][0-9]) + basic_machine=hppa1.0-hp + ;; + hppa-next) + os=-nextstep3 + ;; + hp3k9[0-9][0-9] | hp9[0-9][0-9]) + basic_machine=hppa1.0-hp + os=-mpeix + ;; + hp3k9[0-9][0-9] | hp9[0-9][0-9]) + basic_machine=hppa1.0-hp + os=-mpeix + ;; + i370-ibm* | ibm*) + basic_machine=i370-ibm + os=-mvs + ;; +# I'm not sure what "Sysv32" means. Should this be sysv3.2? + i[34567]86v32) + basic_machine=`echo $1 | sed -e 's/86.*/86-pc/'` + os=-sysv32 + ;; + i[34567]86v4*) + basic_machine=`echo $1 | sed -e 's/86.*/86-pc/'` + os=-sysv4 + ;; + i[34567]86v) + basic_machine=`echo $1 | sed -e 's/86.*/86-pc/'` + os=-sysv + ;; + i[34567]86sol2) + basic_machine=`echo $1 | sed -e 's/86.*/86-pc/'` + os=-solaris2 + ;; + iris | iris4d) + basic_machine=mips-sgi + case $os in + -irix*) + ;; + *) + os=-irix4 + ;; + esac + ;; + isi68 | isi) + basic_machine=m68k-isi + os=-sysv + ;; + m88k-omron*) + basic_machine=m88k-omron + ;; + magnum | m3230) + basic_machine=mips-mips + os=-sysv + ;; + merlin) + basic_machine=ns32k-utek + os=-sysv + ;; + miniframe) + basic_machine=m68000-convergent + ;; + mipsel*-linux*) + basic_machine=mipsel-unknown + os=-linux-gnu + ;; + mips*-linux*) + basic_machine=mips-unknown + os=-linux-gnu + ;; + mips3*-*) + basic_machine=`echo $basic_machine | sed -e 's/mips3/mips64/'` + ;; + mips3*) + basic_machine=`echo $basic_machine | sed -e 's/mips3/mips64/'`-unknown + ;; + ncr3000) + basic_machine=i486-ncr + os=-sysv4 + ;; + netwinder) + basic_machine=armv4l-corel + os=-linux + ;; + news | news700 | news800 | news900) + basic_machine=m68k-sony + os=-newsos + ;; + news1000) + basic_machine=m68030-sony + os=-newsos + ;; + news-3600 | risc-news) + basic_machine=mips-sony + os=-newsos + ;; + next | m*-next ) + basic_machine=m68k-next + case $os in + -nextstep* ) + ;; + -ns2*) + os=-nextstep2 + ;; + *) + os=-nextstep3 + ;; + esac + ;; + nh3000) + basic_machine=m68k-harris + os=-cxux + ;; + nh[45]000) + basic_machine=m88k-harris + os=-cxux + ;; + nindy960) + basic_machine=i960-intel + os=-nindy + ;; + np1) + basic_machine=np1-gould + ;; + pa-hitachi) + basic_machine=hppa1.1-hitachi + os=-hiuxwe2 + ;; + paragon) + basic_machine=i860-intel + os=-osf + ;; + pbd) + basic_machine=sparc-tti + ;; + pbb) + basic_machine=m68k-tti + ;; + pc532 | pc532-*) + basic_machine=ns32k-pc532 + ;; + pentium | p5 | k5 | nexen) + basic_machine=i586-pc + ;; + pentiumpro | p6 | k6 | 6x86) + basic_machine=i686-pc + ;; + pentiumii | pentium2) + basic_machine=i786-pc + ;; + pentium-* | p5-* | k5-* | nexen-*) + basic_machine=i586-`echo $basic_machine | sed 's/^[^-]*-//'` + ;; + pentiumpro-* | p6-* | k6-* | 6x86-*) + basic_machine=i686-`echo $basic_machine | sed 's/^[^-]*-//'` + ;; + pentiumii-* | pentium2-*) + basic_machine=i786-`echo $basic_machine | sed 's/^[^-]*-//'` + ;; + pn) + basic_machine=pn-gould + ;; + power) basic_machine=rs6000-ibm + ;; + ppc) basic_machine=powerpc-unknown + ;; + ppc-*) basic_machine=powerpc-`echo $basic_machine | sed 's/^[^-]*-//'` + ;; + ppcle | powerpclittle | ppc-le | powerpc-little) + basic_machine=powerpcle-unknown + ;; + ppcle-* | powerpclittle-*) + basic_machine=powerpcle-`echo $basic_machine | sed 's/^[^-]*-//'` + ;; + ps2) + basic_machine=i386-ibm + ;; + rm[46]00) + basic_machine=mips-siemens + ;; + rtpc | rtpc-*) + basic_machine=romp-ibm + ;; + sequent) + basic_machine=i386-sequent + ;; + sh) + basic_machine=sh-hitachi + os=-hms + ;; + sps7) + basic_machine=m68k-bull + os=-sysv2 + ;; + spur) + basic_machine=spur-unknown + ;; + sun2) + basic_machine=m68000-sun + ;; + sun2os3) + basic_machine=m68000-sun + os=-sunos3 + ;; + sun2os4) + basic_machine=m68000-sun + os=-sunos4 + ;; + sun3os3) + basic_machine=m68k-sun + os=-sunos3 + ;; + sun3os4) + basic_machine=m68k-sun + os=-sunos4 + ;; + sun4os3) + basic_machine=sparc-sun + os=-sunos3 + ;; + sun4os4) + basic_machine=sparc-sun + os=-sunos4 + ;; + sun4sol2) + basic_machine=sparc-sun + os=-solaris2 + ;; + sun3 | sun3-*) + basic_machine=m68k-sun + ;; + sun4) + basic_machine=sparc-sun + ;; + sun386 | sun386i | roadrunner) + basic_machine=i386-sun + ;; + symmetry) + basic_machine=i386-sequent + os=-dynix + ;; + tx39) + basic_machine=mipstx39-unknown + ;; + tx39el) + basic_machine=mipstx39el-unknown + ;; + tower | tower-32) + basic_machine=m68k-ncr + ;; + udi29k) + basic_machine=a29k-amd + os=-udi + ;; + ultra3) + basic_machine=a29k-nyu + os=-sym1 + ;; + vaxv) + basic_machine=vax-dec + os=-sysv + ;; + vms) + basic_machine=vax-dec + os=-vms + ;; + vpp*|vx|vx-*) + basic_machine=f301-fujitsu + ;; + vxworks960) + basic_machine=i960-wrs + os=-vxworks + ;; + vxworks68) + basic_machine=m68k-wrs + os=-vxworks + ;; + vxworks29k) + basic_machine=a29k-wrs + os=-vxworks + ;; + xmp) + basic_machine=xmp-cray + os=-unicos + ;; + xps | xps100) + basic_machine=xps100-honeywell + ;; + none) + basic_machine=none-none + os=-none + ;; + +# Here we handle the default manufacturer of certain CPU types. It is in +# some cases the only manufacturer, in others, it is the most popular. + mips) + if [ x$os = x-linux-gnu ]; then + basic_machine=mips-unknown + else + basic_machine=mips-mips + fi + ;; + romp) + basic_machine=romp-ibm + ;; + rs6000) + basic_machine=rs6000-ibm + ;; + vax) + basic_machine=vax-dec + ;; + pdp11) + basic_machine=pdp11-dec + ;; + we32k) + basic_machine=we32k-att + ;; + sparc) + basic_machine=sparc-sun + ;; + cydra) + basic_machine=cydra-cydrome + ;; + orion) + basic_machine=orion-highlevel + ;; + orion105) + basic_machine=clipper-highlevel + ;; + *) + echo Invalid configuration \`$1\': machine \`$basic_machine\' not recognized 1>&2 + exit 1 + ;; +esac + +# Here we canonicalize certain aliases for manufacturers. +case $basic_machine in + *-digital*) + basic_machine=`echo $basic_machine | sed 's/digital.*/dec/'` + ;; + *-commodore*) + basic_machine=`echo $basic_machine | sed 's/commodore.*/cbm/'` + ;; + *) + ;; +esac + +# Decode manufacturer-specific aliases for certain operating systems. + +if [ x"$os" != x"" ] +then +case $os in + # First match some system type aliases + # that might get confused with valid system types. + # -solaris* is a basic system type, with this one exception. + -solaris1 | -solaris1.*) + os=`echo $os | sed -e 's|solaris1|sunos4|'` + ;; + -solaris) + os=-solaris2 + ;; + -svr4*) + os=-sysv4 + ;; + -unixware*) + os=-sysv4.2uw + ;; + -gnu/linux*) + os=`echo $os | sed -e 's|gnu/linux|linux-gnu|'` + ;; + # First accept the basic system types. + # The portable systems comes first. + # Each alternative MUST END IN A *, to match a version number. + # -sysv* is not here because it comes later, after sysvr4. + -gnu* | -bsd* | -mach* | -minix* | -genix* | -ultrix* | -irix* \ + | -*vms* | -sco* | -esix* | -isc* | -aix* | -sunos | -sunos[34]*\ + | -hpux* | -unos* | -osf* | -luna* | -dgux* | -solaris* | -sym* \ + | -amigaos* | -amigados* | -msdos* | -newsos* | -unicos* | -aof* \ + | -aos* \ + | -nindy* | -vxsim* | -vxworks* | -ebmon* | -hms* | -mvs* \ + | -clix* | -riscos* | -uniplus* | -iris* | -rtu* | -xenix* \ + | -hiux* | -386bsd* | -netbsd* | -openbsd* | -freebsd* | -riscix* \ + | -lynxos* | -bosx* | -nextstep* | -cxux* | -aout* | -elf* \ + | -ptx* | -coff* | -ecoff* | -winnt* | -domain* | -vsta* \ + | -udi* | -eabi* | -lites* | -ieee* | -go32* | -aux* \ + | -cygwin* | -pe* | -psos* | -moss* | -proelf* | -rtems* \ + | -mingw32* | -linux-gnu* | -uxpv* | -beos* | -rhapsody* \ + | -openstep* | -mpeix* | -oskit*) + # Remember, each alternative MUST END IN *, to match a version number. + ;; + -linux*) + os=`echo $os | sed -e 's|linux|linux-gnu|'` + ;; + -sunos5*) + os=`echo $os | sed -e 's|sunos5|solaris2|'` + ;; + -sunos6*) + os=`echo $os | sed -e 's|sunos6|solaris3|'` + ;; + -osfrose*) + os=-osfrose + ;; + -osf*) + os=-osf + ;; + -utek*) + os=-bsd + ;; + -dynix*) + os=-bsd + ;; + -acis*) + os=-aos + ;; + -ctix* | -uts*) + os=-sysv + ;; + -ns2 ) + os=-nextstep2 + ;; + # Preserve the version number of sinix5. + -sinix5.*) + os=`echo $os | sed -e 's|sinix|sysv|'` + ;; + -sinix*) + os=-sysv4 + ;; + -triton*) + os=-sysv3 + ;; + -oss*) + os=-sysv3 + ;; + -svr4) + os=-sysv4 + ;; + -svr3) + os=-sysv3 + ;; + -sysvr4) + os=-sysv4 + ;; + # This must come after -sysvr4. + -sysv*) + ;; + -xenix) + os=-xenix + ;; + -none) + ;; + *) + # Get rid of the `-' at the beginning of $os. + os=`echo $os | sed 's/[^-]*-//'` + echo Invalid configuration \`$1\': system \`$os\' not recognized 1>&2 + exit 1 + ;; +esac +else + +# Here we handle the default operating systems that come with various machines. +# The value should be what the vendor currently ships out the door with their +# machine or put another way, the most popular os provided with the machine. + +# Note that if you're going to try to match "-MANUFACTURER" here (say, +# "-sun"), then you have to tell the case statement up towards the top +# that MANUFACTURER isn't an operating system. Otherwise, code above +# will signal an error saying that MANUFACTURER isn't an operating +# system, and we'll never get to this point. + +case $basic_machine in + *-acorn) + os=-riscix1.2 + ;; + arm*-corel) + os=-linux + ;; + arm*-semi) + os=-aout + ;; + pdp11-*) + os=-none + ;; + *-dec | vax-*) + os=-ultrix4.2 + ;; + m68*-apollo) + os=-domain + ;; + i386-sun) + os=-sunos4.0.2 + ;; + m68000-sun) + os=-sunos3 + # This also exists in the configure program, but was not the + # default. + # os=-sunos4 + ;; + *-tti) # must be before sparc entry or we get the wrong os. + os=-sysv3 + ;; + sparc-* | *-sun) + os=-sunos4.1.1 + ;; + *-be) + os=-beos + ;; + *-ibm) + os=-aix + ;; + *-hp) + os=-hpux + ;; + *-hitachi) + os=-hiux + ;; + i860-* | *-att | *-ncr | *-altos | *-motorola | *-convergent) + os=-sysv + ;; + *-cbm) + os=-amigaos + ;; + *-dg) + os=-dgux + ;; + *-dolphin) + os=-sysv3 + ;; + m68k-ccur) + os=-rtu + ;; + m88k-omron*) + os=-luna + ;; + *-next ) + os=-nextstep + ;; + *-sequent) + os=-ptx + ;; + *-crds) + os=-unos + ;; + *-ns) + os=-genix + ;; + i370-*) + os=-mvs + ;; + *-next) + os=-nextstep3 + ;; + *-gould) + os=-sysv + ;; + *-highlevel) + os=-bsd + ;; + *-encore) + os=-bsd + ;; + *-sgi) + os=-irix + ;; + *-siemens) + os=-sysv4 + ;; + *-masscomp) + os=-rtu + ;; + f301-fujitsu) + os=-uxpv + ;; + *) + os=-none + ;; +esac +fi + +# Here we handle the case where we know the os, and the CPU type, but not the +# manufacturer. We pick the logical manufacturer. +vendor=unknown +case $basic_machine in + *-unknown) + case $os in + -riscix*) + vendor=acorn + ;; + -sunos*) + vendor=sun + ;; + -aix*) + vendor=ibm + ;; + -hpux*) + vendor=hp + ;; + -mpeix*) + vendor=hp + ;; + -mpeix*) + vendor=hp + ;; + -hiux*) + vendor=hitachi + ;; + -unos*) + vendor=crds + ;; + -dgux*) + vendor=dg + ;; + -luna*) + vendor=omron + ;; + -genix*) + vendor=ns + ;; + -mvs*) + vendor=ibm + ;; + -ptx*) + vendor=sequent + ;; + -vxsim* | -vxworks*) + vendor=wrs + ;; + -aux*) + vendor=apple + ;; + esac + basic_machine=`echo $basic_machine | sed "s/unknown/$vendor/"` + ;; +esac + +echo $basic_machine$os diff --git a/config.sub-991124 b/config.sub-991124 new file mode 100755 index 000000000..e24b85041 --- /dev/null +++ b/config.sub-991124 @@ -0,0 +1,952 @@ +#! /bin/sh +# Configuration validation subroutine script, version 1.1. +# Copyright (C) 1991, 92-97, 1998 Free Software Foundation, Inc. +# This file is (in principle) common to ALL GNU software. +# The presence of a machine in this file suggests that SOME GNU software +# can handle that machine. It does not imply ALL GNU software can. +# +# This file is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 2 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software +# Foundation, Inc., 59 Temple Place - Suite 330, +# Boston, MA 02111-1307, USA. + +# As a special exception to the GNU General Public License, if you +# distribute this file as part of a program that contains a +# configuration script generated by Autoconf, you may include it under +# the same distribution terms that you use for the rest of that program. + +# Configuration subroutine to validate and canonicalize a configuration type. +# Supply the specified configuration type as an argument. +# If it is invalid, we print an error message on stderr and exit with code 1. +# Otherwise, we print the canonical config type on stdout and succeed. + +# This file is supposed to be the same for all GNU packages +# and recognize all the CPU types, system types and aliases +# that are meaningful with *any* GNU software. +# Each package is responsible for reporting which valid configurations +# it does not support. The user should be able to distinguish +# a failure to support a valid configuration from a meaningless +# configuration. + +# The goal of this file is to map all the various variations of a given +# machine specification into a single specification in the form: +# CPU_TYPE-MANUFACTURER-OPERATING_SYSTEM +# or in some cases, the newer four-part form: +# CPU_TYPE-MANUFACTURER-KERNEL-OPERATING_SYSTEM +# It is wrong to echo any other type of specification. + +if [ x$1 = x ] +then + echo Configuration name missing. 1>&2 + echo "Usage: $0 CPU-MFR-OPSYS" 1>&2 + echo "or $0 ALIAS" 1>&2 + echo where ALIAS is a recognized configuration type. 1>&2 + exit 1 +fi + +# First pass through any local machine types. +case $1 in + *local*) + echo $1 + exit 0 + ;; + *) + ;; +esac + +# Separate what the user gave into CPU-COMPANY and OS or KERNEL-OS (if any). +# Here we must recognize all the valid KERNEL-OS combinations. +maybe_os=`echo $1 | sed 's/^\(.*\)-\([^-]*-[^-]*\)$/\2/'` +case $maybe_os in + linux-gnu*) + os=-$maybe_os + basic_machine=`echo $1 | sed 's/^\(.*\)-\([^-]*-[^-]*\)$/\1/'` + ;; + *) + basic_machine=`echo $1 | sed 's/-[^-]*$//'` + if [ $basic_machine != $1 ] + then os=`echo $1 | sed 's/.*-/-/'` + else os=; fi + ;; +esac + +### Let's recognize common machines as not being operating systems so +### that things like config.sub decstation-3100 work. We also +### recognize some manufacturers as not being operating systems, so we +### can provide default operating systems below. +case $os in + -sun*os*) + # Prevent following clause from handling this invalid input. + ;; + -dec* | -mips* | -sequent* | -encore* | -pc532* | -sgi* | -sony* | \ + -att* | -7300* | -3300* | -delta* | -motorola* | -sun[234]* | \ + -unicom* | -ibm* | -next | -hp | -isi* | -apollo | -altos* | \ + -convergent* | -ncr* | -news | -32* | -3600* | -3100* | -hitachi* |\ + -c[123]* | -convex* | -sun | -crds | -omron* | -dg | -ultra | -tti* | \ + -harris | -dolphin | -highlevel | -gould | -cbm | -ns | -masscomp | \ + -apple) + os= + basic_machine=$1 + ;; + -hiux*) + os=-hiuxwe2 + ;; + -sco5) + os=sco3.2v5 + basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` + ;; + -sco4) + os=-sco3.2v4 + basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` + ;; + -sco3.2.[4-9]*) + os=`echo $os | sed -e 's/sco3.2./sco3.2v/'` + basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` + ;; + -sco3.2v[4-9]*) + # Don't forget version if it is 3.2v4 or newer. + basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` + ;; + -sco*) + os=-sco3.2v2 + basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` + ;; + -isc) + os=-isc2.2 + basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` + ;; + -clix*) + basic_machine=clipper-intergraph + ;; + -isc*) + basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` + ;; + -lynx*) + os=-lynxos + ;; + -ptx*) + basic_machine=`echo $1 | sed -e 's/86-.*/86-sequent/'` + ;; + -windowsnt*) + os=`echo $os | sed -e 's/windowsnt/winnt/'` + ;; + -psos*) + os=-psos + ;; +esac + +# Decode aliases for certain CPU-COMPANY combinations. +case $basic_machine in + # Recognize the basic CPU types without company name. + # Some are omitted here because they have special meanings below. + tahoe | i860 | m32r | m68k | m68000 | m88k | ns32k | arc | arm \ + | arme[lb] | pyramid | mn10200 | mn10300 \ + | tron | a29k | 580 | i960 | h8300 | hppa | hppa1.0 | hppa1.1 \ + | alpha | alphaev5 | alphaev56 | we32k | ns16k | clipper \ + | i370 | sh | powerpc | powerpcle | 1750a | dsp16xx | pdp11 \ + | mips64 | mipsel | mips64el | mips64orion | mips64orionel \ + | mipstx39 | mipstx39el \ + | sparc | sparclet | sparclite | sparc64 | v850) + basic_machine=$basic_machine-unknown + ;; + # We use `pc' rather than `unknown' + # because (1) that's what they normally are, and + # (2) the word "unknown" tends to confuse beginning users. + i[34567]86) + basic_machine=$basic_machine-pc + ;; + # Object if more than one company name word. + *-*-*) + echo Invalid configuration \`$1\': machine \`$basic_machine\' not recognized 1>&2 + exit 1 + ;; + # Recognize the basic CPU types with company name. + vax-* | tahoe-* | i[34567]86-* | i860-* | m32r-* | m68k-* | m68000-* \ + | m88k-* | sparc-* | ns32k-* | fx80-* | arc-* | arm-* | c[123]* \ + | mips-* | pyramid-* | tron-* | a29k-* | romp-* | rs6000-* \ + | power-* | none-* | 580-* | cray2-* | h8300-* | i960-* \ + | xmp-* | ymp-* | hppa-* | hppa1.0-* | hppa1.1-* \ + | alpha-* | alphaev5-* | alphaev56-* | we32k-* | cydra-* \ + | ns16k-* | pn-* | np1-* | xps100-* | clipper-* | orion-* \ + | sparclite-* | pdp11-* | sh-* | powerpc-* | powerpcle-* \ + | sparc64-* | mips64-* | mipsel-* \ + | mips64el-* | mips64orion-* | mips64orionel-* \ + | mipstx39-* | mipstx39el-* \ + | f301-*) + ;; + # Recognize the various machine names and aliases which stand + # for a CPU type and a company and sometimes even an OS. + 3b1 | 7300 | 7300-att | att-7300 | pc7300 | safari | unixpc) + basic_machine=m68000-att + ;; + 3b*) + basic_machine=we32k-att + ;; + alliant | fx80) + basic_machine=fx80-alliant + ;; + altos | altos3068) + basic_machine=m68k-altos + ;; + am29k) + basic_machine=a29k-none + os=-bsd + ;; + amdahl) + basic_machine=580-amdahl + os=-sysv + ;; + amiga | amiga-*) + basic_machine=m68k-cbm + ;; + amigaos | amigados) + basic_machine=m68k-cbm + os=-amigaos + ;; + amigaunix | amix) + basic_machine=m68k-cbm + os=-sysv4 + ;; + apollo68) + basic_machine=m68k-apollo + os=-sysv + ;; + aux) + basic_machine=m68k-apple + os=-aux + ;; + balance) + basic_machine=ns32k-sequent + os=-dynix + ;; + convex-c1) + basic_machine=c1-convex + os=-bsd + ;; + convex-c2) + basic_machine=c2-convex + os=-bsd + ;; + convex-c32) + basic_machine=c32-convex + os=-bsd + ;; + convex-c34) + basic_machine=c34-convex + os=-bsd + ;; + convex-c38) + basic_machine=c38-convex + os=-bsd + ;; + cray | ymp) + basic_machine=ymp-cray + os=-unicos + ;; + cray2) + basic_machine=cray2-cray + os=-unicos + ;; + [ctj]90-cray) + basic_machine=c90-cray + os=-unicos + ;; + crds | unos) + basic_machine=m68k-crds + ;; + da30 | da30-*) + basic_machine=m68k-da30 + ;; + decstation | decstation-3100 | pmax | pmax-* | pmin | dec3100 | decstatn) + basic_machine=mips-dec + ;; + delta | 3300 | motorola-3300 | motorola-delta \ + | 3300-motorola | delta-motorola) + basic_machine=m68k-motorola + ;; + delta88) + basic_machine=m88k-motorola + os=-sysv3 + ;; + dpx20 | dpx20-*) + basic_machine=rs6000-bull + os=-bosx + ;; + dpx2* | dpx2*-bull) + basic_machine=m68k-bull + os=-sysv3 + ;; + ebmon29k) + basic_machine=a29k-amd + os=-ebmon + ;; + elxsi) + basic_machine=elxsi-elxsi + os=-bsd + ;; + encore | umax | mmax) + basic_machine=ns32k-encore + ;; + fx2800) + basic_machine=i860-alliant + ;; + genix) + basic_machine=ns32k-ns + ;; + gmicro) + basic_machine=tron-gmicro + os=-sysv + ;; + h3050r* | hiux*) + basic_machine=hppa1.1-hitachi + os=-hiuxwe2 + ;; + h8300hms) + basic_machine=h8300-hitachi + os=-hms + ;; + harris) + basic_machine=m88k-harris + os=-sysv3 + ;; + hp300-*) + basic_machine=m68k-hp + ;; + hp300bsd) + basic_machine=m68k-hp + os=-bsd + ;; + hp300hpux) + basic_machine=m68k-hp + os=-hpux + ;; + hp9k2[0-9][0-9] | hp9k31[0-9]) + basic_machine=m68000-hp + ;; + hp9k3[2-9][0-9]) + basic_machine=m68k-hp + ;; + hp9k7[0-9][0-9] | hp7[0-9][0-9] | hp9k8[0-9]7 | hp8[0-9]7) + basic_machine=hppa1.1-hp + ;; + hp9k8[0-9][0-9] | hp8[0-9][0-9]) + basic_machine=hppa1.0-hp + ;; + hppa-next) + os=-nextstep3 + ;; + i370-ibm* | ibm*) + basic_machine=i370-ibm + os=-mvs + ;; +# I'm not sure what "Sysv32" means. Should this be sysv3.2? + i[34567]86v32) + basic_machine=`echo $1 | sed -e 's/86.*/86-pc/'` + os=-sysv32 + ;; + i[34567]86v4*) + basic_machine=`echo $1 | sed -e 's/86.*/86-pc/'` + os=-sysv4 + ;; + i[34567]86v) + basic_machine=`echo $1 | sed -e 's/86.*/86-pc/'` + os=-sysv + ;; + i[34567]86sol2) + basic_machine=`echo $1 | sed -e 's/86.*/86-pc/'` + os=-solaris2 + ;; + iris | iris4d) + basic_machine=mips-sgi + case $os in + -irix*) + ;; + *) + os=-irix4 + ;; + esac + ;; + isi68 | isi) + basic_machine=m68k-isi + os=-sysv + ;; + m88k-omron*) + basic_machine=m88k-omron + ;; + magnum | m3230) + basic_machine=mips-mips + os=-sysv + ;; + merlin) + basic_machine=ns32k-utek + os=-sysv + ;; + miniframe) + basic_machine=m68000-convergent + ;; + mipsel*-linux*) + basic_machine=mipsel-unknown + os=-linux-gnu + ;; + mips*-linux*) + basic_machine=mips-unknown + os=-linux-gnu + ;; + mips3*-*) + basic_machine=`echo $basic_machine | sed -e 's/mips3/mips64/'` + ;; + mips3*) + basic_machine=`echo $basic_machine | sed -e 's/mips3/mips64/'`-unknown + ;; + ncr3000) + basic_machine=i486-ncr + os=-sysv4 + ;; + news | news700 | news800 | news900) + basic_machine=m68k-sony + os=-newsos + ;; + news1000) + basic_machine=m68030-sony + os=-newsos + ;; + news-3600 | risc-news) + basic_machine=mips-sony + os=-newsos + ;; + next | m*-next ) + basic_machine=m68k-next + case $os in + -nextstep* ) + ;; + -ns2*) + os=-nextstep2 + ;; + *) + os=-nextstep3 + ;; + esac + ;; + nh3000) + basic_machine=m68k-harris + os=-cxux + ;; + nh[45]000) + basic_machine=m88k-harris + os=-cxux + ;; + nindy960) + basic_machine=i960-intel + os=-nindy + ;; + np1) + basic_machine=np1-gould + ;; + pa-hitachi) + basic_machine=hppa1.1-hitachi + os=-hiuxwe2 + ;; + paragon) + basic_machine=i860-intel + os=-osf + ;; + pbd) + basic_machine=sparc-tti + ;; + pbb) + basic_machine=m68k-tti + ;; + pc532 | pc532-*) + basic_machine=ns32k-pc532 + ;; + pentium | p5 | k5 | nexen) + basic_machine=i586-pc + ;; + pentiumpro | p6 | k6 | 6x86) + basic_machine=i686-pc + ;; + pentiumii | pentium2) + basic_machine=i786-pc + ;; + pentium-* | p5-* | k5-* | nexen-*) + basic_machine=i586-`echo $basic_machine | sed 's/^[^-]*-//'` + ;; + pentiumpro-* | p6-* | k6-* | 6x86-*) + basic_machine=i686-`echo $basic_machine | sed 's/^[^-]*-//'` + ;; + pentiumii-* | pentium2-*) + basic_machine=i786-`echo $basic_machine | sed 's/^[^-]*-//'` + ;; + pn) + basic_machine=pn-gould + ;; + power) basic_machine=rs6000-ibm + ;; + ppc) basic_machine=powerpc-unknown + ;; + ppc-*) basic_machine=powerpc-`echo $basic_machine | sed 's/^[^-]*-//'` + ;; + ppcle | powerpclittle | ppc-le | powerpc-little) + basic_machine=powerpcle-unknown + ;; + ppcle-* | powerpclittle-*) + basic_machine=powerpcle-`echo $basic_machine | sed 's/^[^-]*-//'` + ;; + ps2) + basic_machine=i386-ibm + ;; + rm[46]00) + basic_machine=mips-siemens + ;; + rtpc | rtpc-*) + basic_machine=romp-ibm + ;; + sequent) + basic_machine=i386-sequent + ;; + sh) + basic_machine=sh-hitachi + os=-hms + ;; + sps7) + basic_machine=m68k-bull + os=-sysv2 + ;; + spur) + basic_machine=spur-unknown + ;; + sun2) + basic_machine=m68000-sun + ;; + sun2os3) + basic_machine=m68000-sun + os=-sunos3 + ;; + sun2os4) + basic_machine=m68000-sun + os=-sunos4 + ;; + sun3os3) + basic_machine=m68k-sun + os=-sunos3 + ;; + sun3os4) + basic_machine=m68k-sun + os=-sunos4 + ;; + sun4os3) + basic_machine=sparc-sun + os=-sunos3 + ;; + sun4os4) + basic_machine=sparc-sun + os=-sunos4 + ;; + sun4sol2) + basic_machine=sparc-sun + os=-solaris2 + ;; + sun3 | sun3-*) + basic_machine=m68k-sun + ;; + sun4) + basic_machine=sparc-sun + ;; + sun386 | sun386i | roadrunner) + basic_machine=i386-sun + ;; + symmetry) + basic_machine=i386-sequent + os=-dynix + ;; + tx39) + basic_machine=mipstx39-unknown + ;; + tx39el) + basic_machine=mipstx39el-unknown + ;; + tower | tower-32) + basic_machine=m68k-ncr + ;; + udi29k) + basic_machine=a29k-amd + os=-udi + ;; + ultra3) + basic_machine=a29k-nyu + os=-sym1 + ;; + vaxv) + basic_machine=vax-dec + os=-sysv + ;; + vms) + basic_machine=vax-dec + os=-vms + ;; + vpp*|vx|vx-*) + basic_machine=f301-fujitsu + ;; + vxworks960) + basic_machine=i960-wrs + os=-vxworks + ;; + vxworks68) + basic_machine=m68k-wrs + os=-vxworks + ;; + vxworks29k) + basic_machine=a29k-wrs + os=-vxworks + ;; + xmp) + basic_machine=xmp-cray + os=-unicos + ;; + xps | xps100) + basic_machine=xps100-honeywell + ;; + none) + basic_machine=none-none + os=-none + ;; + +# Here we handle the default manufacturer of certain CPU types. It is in +# some cases the only manufacturer, in others, it is the most popular. + mips) + if [ x$os = x-linux-gnu ]; then + basic_machine=mips-unknown + else + basic_machine=mips-mips + fi + ;; + romp) + basic_machine=romp-ibm + ;; + rs6000) + basic_machine=rs6000-ibm + ;; + vax) + basic_machine=vax-dec + ;; + pdp11) + basic_machine=pdp11-dec + ;; + we32k) + basic_machine=we32k-att + ;; + sparc) + basic_machine=sparc-sun + ;; + cydra) + basic_machine=cydra-cydrome + ;; + orion) + basic_machine=orion-highlevel + ;; + orion105) + basic_machine=clipper-highlevel + ;; + *) + echo Invalid configuration \`$1\': machine \`$basic_machine\' not recognized 1>&2 + exit 1 + ;; +esac + +# Here we canonicalize certain aliases for manufacturers. +case $basic_machine in + *-digital*) + basic_machine=`echo $basic_machine | sed 's/digital.*/dec/'` + ;; + *-commodore*) + basic_machine=`echo $basic_machine | sed 's/commodore.*/cbm/'` + ;; + *) + ;; +esac + +# Decode manufacturer-specific aliases for certain operating systems. + +if [ x"$os" != x"" ] +then +case $os in + # First match some system type aliases + # that might get confused with valid system types. + # -solaris* is a basic system type, with this one exception. + -solaris1 | -solaris1.*) + os=`echo $os | sed -e 's|solaris1|sunos4|'` + ;; + -solaris) + os=-solaris2 + ;; + -svr4*) + os=-sysv4 + ;; + -unixware*) + os=-sysv4.2uw + ;; + -gnu/linux*) + os=`echo $os | sed -e 's|gnu/linux|linux-gnu|'` + ;; + # First accept the basic system types. + # The portable systems comes first. + # Each alternative MUST END IN A *, to match a version number. + # -sysv* is not here because it comes later, after sysvr4. + -gnu* | -bsd* | -mach* | -minix* | -genix* | -ultrix* | -irix* \ + | -*vms* | -sco* | -esix* | -isc* | -aix* | -sunos | -sunos[34]*\ + | -hpux* | -unos* | -osf* | -luna* | -dgux* | -solaris* | -sym* \ + | -amigaos* | -amigados* | -msdos* | -newsos* | -unicos* | -aof* \ + | -aos* \ + | -nindy* | -vxsim* | -vxworks* | -ebmon* | -hms* | -mvs* \ + | -clix* | -riscos* | -uniplus* | -iris* | -rtu* | -xenix* \ + | -hiux* | -386bsd* | -netbsd* | -openbsd* | -freebsd* | -riscix* \ + | -lynxos* | -bosx* | -nextstep* | -cxux* | -aout* | -elf* \ + | -ptx* | -coff* | -ecoff* | -winnt* | -domain* | -vsta* \ + | -udi* | -eabi* | -lites* | -ieee* | -go32* | -aux* \ + | -cygwin32* | -pe* | -psos* | -moss* | -proelf* | -rtems* \ + | -mingw32* | -linux-gnu* | -uxpv*) + # Remember, each alternative MUST END IN *, to match a version number. + ;; + -linux*) + os=`echo $os | sed -e 's|linux|linux-gnu|'` + ;; + -sunos5*) + os=`echo $os | sed -e 's|sunos5|solaris2|'` + ;; + -sunos6*) + os=`echo $os | sed -e 's|sunos6|solaris3|'` + ;; + -osfrose*) + os=-osfrose + ;; + -osf*) + os=-osf + ;; + -utek*) + os=-bsd + ;; + -dynix*) + os=-bsd + ;; + -acis*) + os=-aos + ;; + -ctix* | -uts*) + os=-sysv + ;; + -ns2 ) + os=-nextstep2 + ;; + # Preserve the version number of sinix5. + -sinix5.*) + os=`echo $os | sed -e 's|sinix|sysv|'` + ;; + -sinix*) + os=-sysv4 + ;; + -triton*) + os=-sysv3 + ;; + -oss*) + os=-sysv3 + ;; + -svr4) + os=-sysv4 + ;; + -svr3) + os=-sysv3 + ;; + -sysvr4) + os=-sysv4 + ;; + # This must come after -sysvr4. + -sysv*) + ;; + -xenix) + os=-xenix + ;; + -none) + ;; + *) + # Get rid of the `-' at the beginning of $os. + os=`echo $os | sed 's/[^-]*-//'` + echo Invalid configuration \`$1\': system \`$os\' not recognized 1>&2 + exit 1 + ;; +esac +else + +# Here we handle the default operating systems that come with various machines. +# The value should be what the vendor currently ships out the door with their +# machine or put another way, the most popular os provided with the machine. + +# Note that if you're going to try to match "-MANUFACTURER" here (say, +# "-sun"), then you have to tell the case statement up towards the top +# that MANUFACTURER isn't an operating system. Otherwise, code above +# will signal an error saying that MANUFACTURER isn't an operating +# system, and we'll never get to this point. + +case $basic_machine in + *-acorn) + os=-riscix1.2 + ;; + arm*-semi) + os=-aout + ;; + pdp11-*) + os=-none + ;; + *-dec | vax-*) + os=-ultrix4.2 + ;; + m68*-apollo) + os=-domain + ;; + i386-sun) + os=-sunos4.0.2 + ;; + m68000-sun) + os=-sunos3 + # This also exists in the configure program, but was not the + # default. + # os=-sunos4 + ;; + *-tti) # must be before sparc entry or we get the wrong os. + os=-sysv3 + ;; + sparc-* | *-sun) + os=-sunos4.1.1 + ;; + *-ibm) + os=-aix + ;; + *-hp) + os=-hpux + ;; + *-hitachi) + os=-hiux + ;; + i860-* | *-att | *-ncr | *-altos | *-motorola | *-convergent) + os=-sysv + ;; + *-cbm) + os=-amigaos + ;; + *-dg) + os=-dgux + ;; + *-dolphin) + os=-sysv3 + ;; + m68k-ccur) + os=-rtu + ;; + m88k-omron*) + os=-luna + ;; + *-next ) + os=-nextstep + ;; + *-sequent) + os=-ptx + ;; + *-crds) + os=-unos + ;; + *-ns) + os=-genix + ;; + i370-*) + os=-mvs + ;; + *-next) + os=-nextstep3 + ;; + *-gould) + os=-sysv + ;; + *-highlevel) + os=-bsd + ;; + *-encore) + os=-bsd + ;; + *-sgi) + os=-irix + ;; + *-siemens) + os=-sysv4 + ;; + *-masscomp) + os=-rtu + ;; + f301-fujitsu) + os=-uxpv + ;; + *) + os=-none + ;; +esac +fi + +# Here we handle the case where we know the os, and the CPU type, but not the +# manufacturer. We pick the logical manufacturer. +vendor=unknown +case $basic_machine in + *-unknown) + case $os in + -riscix*) + vendor=acorn + ;; + -sunos*) + vendor=sun + ;; + -aix*) + vendor=ibm + ;; + -hpux*) + vendor=hp + ;; + -hiux*) + vendor=hitachi + ;; + -unos*) + vendor=crds + ;; + -dgux*) + vendor=dg + ;; + -luna*) + vendor=omron + ;; + -genix*) + vendor=ns + ;; + -mvs*) + vendor=ibm + ;; + -ptx*) + vendor=sequent + ;; + -vxsim* | -vxworks*) + vendor=wrs + ;; + -aux*) + vendor=apple + ;; + esac + basic_machine=`echo $basic_machine | sed "s/unknown/$vendor/"` + ;; +esac + +echo $basic_machine$os diff --git a/configure b/configure new file mode 100755 index 000000000..51b1b3dad --- /dev/null +++ b/configure @@ -0,0 +1,3091 @@ +#! /bin/sh + +# Guess values for system-dependent variables and create Makefiles. +# Generated automatically using autoconf version 2.13 +# Copyright (C) 1992, 93, 94, 95, 96 Free Software Foundation, Inc. +# +# This configure script is free software; the Free Software Foundation +# gives unlimited permission to copy, distribute and modify it. + +# Defaults: +ac_help= +ac_default_prefix=/usr/local +# Any additions from configure.in: +ac_help="$ac_help + --with-ssl[=DIR] where to look for SSL [compiler/linker default paths] + DIR points to the SSL installation [/usr/local/ssl]" + +# Initialize some variables set by options. +# The variables have the same names as the options, with +# dashes changed to underlines. +build=NONE +cache_file=./config.cache +exec_prefix=NONE +host=NONE +no_create= +nonopt=NONE +no_recursion= +prefix=NONE +program_prefix=NONE +program_suffix=NONE +program_transform_name=s,x,x, +silent= +site= +srcdir= +target=NONE +verbose= +x_includes=NONE +x_libraries=NONE +bindir='${exec_prefix}/bin' +sbindir='${exec_prefix}/sbin' +libexecdir='${exec_prefix}/libexec' +datadir='${prefix}/share' +sysconfdir='${prefix}/etc' +sharedstatedir='${prefix}/com' +localstatedir='${prefix}/var' +libdir='${exec_prefix}/lib' +includedir='${prefix}/include' +oldincludedir='/usr/include' +infodir='${prefix}/info' +mandir='${prefix}/man' + +# Initialize some other variables. +subdirs= +MFLAGS= MAKEFLAGS= +SHELL=${CONFIG_SHELL-/bin/sh} +# Maximum number of lines to put in a shell here document. +ac_max_here_lines=12 + +ac_prev= +for ac_option +do + + # If the previous option needs an argument, assign it. + if test -n "$ac_prev"; then + eval "$ac_prev=\$ac_option" + ac_prev= + continue + fi + + case "$ac_option" in + -*=*) ac_optarg=`echo "$ac_option" | sed 's/[-_a-zA-Z0-9]*=//'` ;; + *) ac_optarg= ;; + esac + + # Accept the important Cygnus configure options, so we can diagnose typos. + + case "$ac_option" in + + -bindir | --bindir | --bindi | --bind | --bin | --bi) + ac_prev=bindir ;; + -bindir=* | --bindir=* | --bindi=* | --bind=* | --bin=* | --bi=*) + bindir="$ac_optarg" ;; + + -build | --build | --buil | --bui | --bu) + ac_prev=build ;; + -build=* | --build=* | --buil=* | --bui=* | --bu=*) + build="$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" ;; + + -datadir | --datadir | --datadi | --datad | --data | --dat | --da) + ac_prev=datadir ;; + -datadir=* | --datadir=* | --datadi=* | --datad=* | --data=* | --dat=* \ + | --da=*) + datadir="$ac_optarg" ;; + + -disable-* | --disable-*) + ac_feature=`echo $ac_option|sed -e 's/-*disable-//'` + # Reject names that are not valid shell variable names. + if test -n "`echo $ac_feature| sed 's/[-a-zA-Z0-9_]//g'`"; then + { echo "configure: error: $ac_feature: invalid feature name" 1>&2; exit 1; } + fi + ac_feature=`echo $ac_feature| sed 's/-/_/g'` + eval "enable_${ac_feature}=no" ;; + + -enable-* | --enable-*) + ac_feature=`echo $ac_option|sed -e 's/-*enable-//' -e 's/=.*//'` + # Reject names that are not valid shell variable names. + if test -n "`echo $ac_feature| sed 's/[-_a-zA-Z0-9]//g'`"; then + { echo "configure: error: $ac_feature: invalid feature name" 1>&2; exit 1; } + fi + ac_feature=`echo $ac_feature| sed 's/-/_/g'` + case "$ac_option" in + *=*) ;; + *) ac_optarg=yes ;; + esac + eval "enable_${ac_feature}='$ac_optarg'" ;; + + -exec-prefix | --exec_prefix | --exec-prefix | --exec-prefi \ + | --exec-pref | --exec-pre | --exec-pr | --exec-p | --exec- \ + | --exec | --exe | --ex) + ac_prev=exec_prefix ;; + -exec-prefix=* | --exec_prefix=* | --exec-prefix=* | --exec-prefi=* \ + | --exec-pref=* | --exec-pre=* | --exec-pr=* | --exec-p=* | --exec-=* \ + | --exec=* | --exe=* | --ex=*) + exec_prefix="$ac_optarg" ;; + + -gas | --gas | --ga | --g) + # Obsolete; use --with-gas. + with_gas=yes ;; + + -help | --help | --hel | --he) + # 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 << EOF +Usage: configure [options] [host] +Options: [defaults in brackets after descriptions] +Configuration: + --cache-file=FILE cache test results in FILE + --help print this message + --no-create do not create output files + --quiet, --silent do not print \`checking...' messages + --version print the version of autoconf that created configure +Directory and file names: + --prefix=PREFIX install architecture-independent files in PREFIX + [$ac_default_prefix] + --exec-prefix=EPREFIX install architecture-dependent files in EPREFIX + [same as prefix] + --bindir=DIR user executables in DIR [EPREFIX/bin] + --sbindir=DIR system admin executables in DIR [EPREFIX/sbin] + --libexecdir=DIR program executables in DIR [EPREFIX/libexec] + --datadir=DIR read-only architecture-independent data in DIR + [PREFIX/share] + --sysconfdir=DIR read-only single-machine data in DIR [PREFIX/etc] + --sharedstatedir=DIR modifiable architecture-independent data in DIR + [PREFIX/com] + --localstatedir=DIR modifiable single-machine data in DIR [PREFIX/var] + --libdir=DIR object code libraries in DIR [EPREFIX/lib] + --includedir=DIR C header files in DIR [PREFIX/include] + --oldincludedir=DIR C header files for non-gcc in DIR [/usr/include] + --infodir=DIR info documentation in DIR [PREFIX/info] + --mandir=DIR man documentation in DIR [PREFIX/man] + --srcdir=DIR find the sources in DIR [configure dir or ..] + --program-prefix=PREFIX prepend PREFIX to installed program names + --program-suffix=SUFFIX append SUFFIX to installed program names + --program-transform-name=PROGRAM + run sed PROGRAM on installed program names +EOF + cat << EOF +Host type: + --build=BUILD configure for building on BUILD [BUILD=HOST] + --host=HOST configure for HOST [guessed] + --target=TARGET configure for TARGET [TARGET=HOST] +Features and packages: + --disable-FEATURE do not include FEATURE (same as --enable-FEATURE=no) + --enable-FEATURE[=ARG] include FEATURE [ARG=yes] + --with-PACKAGE[=ARG] use PACKAGE [ARG=yes] + --without-PACKAGE do not use PACKAGE (same as --with-PACKAGE=no) + --x-includes=DIR X include files are in DIR + --x-libraries=DIR X library files are in DIR +EOF + if test -n "$ac_help"; then + echo "--enable and --with options recognized:$ac_help" + fi + exit 0 ;; + + -host | --host | --hos | --ho) + ac_prev=host ;; + -host=* | --host=* | --hos=* | --ho=*) + host="$ac_optarg" ;; + + -includedir | --includedir | --includedi | --included | --include \ + | --includ | --inclu | --incl | --inc) + ac_prev=includedir ;; + -includedir=* | --includedir=* | --includedi=* | --included=* | --include=* \ + | --includ=* | --inclu=* | --incl=* | --inc=*) + includedir="$ac_optarg" ;; + + -infodir | --infodir | --infodi | --infod | --info | --inf) + ac_prev=infodir ;; + -infodir=* | --infodir=* | --infodi=* | --infod=* | --info=* | --inf=*) + infodir="$ac_optarg" ;; + + -libdir | --libdir | --libdi | --libd) + ac_prev=libdir ;; + -libdir=* | --libdir=* | --libdi=* | --libd=*) + libdir="$ac_optarg" ;; + + -libexecdir | --libexecdir | --libexecdi | --libexecd | --libexec \ + | --libexe | --libex | --libe) + ac_prev=libexecdir ;; + -libexecdir=* | --libexecdir=* | --libexecdi=* | --libexecd=* | --libexec=* \ + | --libexe=* | --libex=* | --libe=*) + libexecdir="$ac_optarg" ;; + + -localstatedir | --localstatedir | --localstatedi | --localstated \ + | --localstate | --localstat | --localsta | --localst \ + | --locals | --local | --loca | --loc | --lo) + ac_prev=localstatedir ;; + -localstatedir=* | --localstatedir=* | --localstatedi=* | --localstated=* \ + | --localstate=* | --localstat=* | --localsta=* | --localst=* \ + | --locals=* | --local=* | --loca=* | --loc=* | --lo=*) + localstatedir="$ac_optarg" ;; + + -mandir | --mandir | --mandi | --mand | --man | --ma | --m) + ac_prev=mandir ;; + -mandir=* | --mandir=* | --mandi=* | --mand=* | --man=* | --ma=* | --m=*) + mandir="$ac_optarg" ;; + + -nfp | --nfp | --nf) + # Obsolete; use --without-fp. + with_fp=no ;; + + -no-create | --no-create | --no-creat | --no-crea | --no-cre \ + | --no-cr | --no-c) + no_create=yes ;; + + -no-recursion | --no-recursion | --no-recursio | --no-recursi \ + | --no-recurs | --no-recur | --no-recu | --no-rec | --no-re | --no-r) + no_recursion=yes ;; + + -oldincludedir | --oldincludedir | --oldincludedi | --oldincluded \ + | --oldinclude | --oldinclud | --oldinclu | --oldincl | --oldinc \ + | --oldin | --oldi | --old | --ol | --o) + ac_prev=oldincludedir ;; + -oldincludedir=* | --oldincludedir=* | --oldincludedi=* | --oldincluded=* \ + | --oldinclude=* | --oldinclud=* | --oldinclu=* | --oldincl=* | --oldinc=* \ + | --oldin=* | --oldi=* | --old=* | --ol=* | --o=*) + oldincludedir="$ac_optarg" ;; + + -prefix | --prefix | --prefi | --pref | --pre | --pr | --p) + ac_prev=prefix ;; + -prefix=* | --prefix=* | --prefi=* | --pref=* | --pre=* | --pr=* | --p=*) + prefix="$ac_optarg" ;; + + -program-prefix | --program-prefix | --program-prefi | --program-pref \ + | --program-pre | --program-pr | --program-p) + ac_prev=program_prefix ;; + -program-prefix=* | --program-prefix=* | --program-prefi=* \ + | --program-pref=* | --program-pre=* | --program-pr=* | --program-p=*) + program_prefix="$ac_optarg" ;; + + -program-suffix | --program-suffix | --program-suffi | --program-suff \ + | --program-suf | --program-su | --program-s) + ac_prev=program_suffix ;; + -program-suffix=* | --program-suffix=* | --program-suffi=* \ + | --program-suff=* | --program-suf=* | --program-su=* | --program-s=*) + program_suffix="$ac_optarg" ;; + + -program-transform-name | --program-transform-name \ + | --program-transform-nam | --program-transform-na \ + | --program-transform-n | --program-transform- \ + | --program-transform | --program-transfor \ + | --program-transfo | --program-transf \ + | --program-trans | --program-tran \ + | --progr-tra | --program-tr | --program-t) + ac_prev=program_transform_name ;; + -program-transform-name=* | --program-transform-name=* \ + | --program-transform-nam=* | --program-transform-na=* \ + | --program-transform-n=* | --program-transform-=* \ + | --program-transform=* | --program-transfor=* \ + | --program-transfo=* | --program-transf=* \ + | --program-trans=* | --program-tran=* \ + | --progr-tra=* | --program-tr=* | --program-t=*) + program_transform_name="$ac_optarg" ;; + + -q | -quiet | --quiet | --quie | --qui | --qu | --q \ + | -silent | --silent | --silen | --sile | --sil) + silent=yes ;; + + -sbindir | --sbindir | --sbindi | --sbind | --sbin | --sbi | --sb) + ac_prev=sbindir ;; + -sbindir=* | --sbindir=* | --sbindi=* | --sbind=* | --sbin=* \ + | --sbi=* | --sb=*) + sbindir="$ac_optarg" ;; + + -sharedstatedir | --sharedstatedir | --sharedstatedi \ + | --sharedstated | --sharedstate | --sharedstat | --sharedsta \ + | --sharedst | --shareds | --shared | --share | --shar \ + | --sha | --sh) + ac_prev=sharedstatedir ;; + -sharedstatedir=* | --sharedstatedir=* | --sharedstatedi=* \ + | --sharedstated=* | --sharedstate=* | --sharedstat=* | --sharedsta=* \ + | --sharedst=* | --shareds=* | --shared=* | --share=* | --shar=* \ + | --sha=* | --sh=*) + sharedstatedir="$ac_optarg" ;; + + -site | --site | --sit) + ac_prev=site ;; + -site=* | --site=* | --sit=*) + site="$ac_optarg" ;; + + -srcdir | --srcdir | --srcdi | --srcd | --src | --sr) + ac_prev=srcdir ;; + -srcdir=* | --srcdir=* | --srcdi=* | --srcd=* | --src=* | --sr=*) + srcdir="$ac_optarg" ;; + + -sysconfdir | --sysconfdir | --sysconfdi | --sysconfd | --sysconf \ + | --syscon | --sysco | --sysc | --sys | --sy) + ac_prev=sysconfdir ;; + -sysconfdir=* | --sysconfdir=* | --sysconfdi=* | --sysconfd=* | --sysconf=* \ + | --syscon=* | --sysco=* | --sysc=* | --sys=* | --sy=*) + sysconfdir="$ac_optarg" ;; + + -target | --target | --targe | --targ | --tar | --ta | --t) + ac_prev=target ;; + -target=* | --target=* | --targe=* | --targ=* | --tar=* | --ta=* | --t=*) + target="$ac_optarg" ;; + + -v | -verbose | --verbose | --verbos | --verbo | --verb) + verbose=yes ;; + + -version | --version | --versio | --versi | --vers) + echo "configure generated by autoconf version 2.13" + exit 0 ;; + + -with-* | --with-*) + ac_package=`echo $ac_option|sed -e 's/-*with-//' -e 's/=.*//'` + # Reject names that are not valid shell variable names. + if test -n "`echo $ac_package| sed 's/[-_a-zA-Z0-9]//g'`"; then + { echo "configure: error: $ac_package: invalid package name" 1>&2; exit 1; } + fi + ac_package=`echo $ac_package| sed 's/-/_/g'` + case "$ac_option" in + *=*) ;; + *) ac_optarg=yes ;; + esac + eval "with_${ac_package}='$ac_optarg'" ;; + + -without-* | --without-*) + ac_package=`echo $ac_option|sed -e 's/-*without-//'` + # Reject names that are not valid shell variable names. + if test -n "`echo $ac_package| sed 's/[-a-zA-Z0-9_]//g'`"; then + { echo "configure: error: $ac_package: invalid package name" 1>&2; exit 1; } + fi + ac_package=`echo $ac_package| sed 's/-/_/g'` + eval "with_${ac_package}=no" ;; + + --x) + # Obsolete; use --with-x. + with_x=yes ;; + + -x-includes | --x-includes | --x-include | --x-includ | --x-inclu \ + | --x-incl | --x-inc | --x-in | --x-i) + ac_prev=x_includes ;; + -x-includes=* | --x-includes=* | --x-include=* | --x-includ=* | --x-inclu=* \ + | --x-incl=* | --x-inc=* | --x-in=* | --x-i=*) + x_includes="$ac_optarg" ;; + + -x-libraries | --x-libraries | --x-librarie | --x-librari \ + | --x-librar | --x-libra | --x-libr | --x-lib | --x-li | --x-l) + ac_prev=x_libraries ;; + -x-libraries=* | --x-libraries=* | --x-librarie=* | --x-librari=* \ + | --x-librar=* | --x-libra=* | --x-libr=* | --x-lib=* | --x-li=* | --x-l=*) + x_libraries="$ac_optarg" ;; + + -*) { echo "configure: error: $ac_option: invalid option; use --help to show usage" 1>&2; exit 1; } + ;; + + *) + if test -n "`echo $ac_option| sed 's/[-a-z0-9.]//g'`"; then + echo "configure: warning: $ac_option: invalid host type" 1>&2 + fi + if test "x$nonopt" != xNONE; then + { echo "configure: error: can only configure for one host and one target at a time" 1>&2; exit 1; } + fi + nonopt="$ac_option" + ;; + + esac +done + +if test -n "$ac_prev"; then + { echo "configure: error: missing argument to --`echo $ac_prev | sed 's/_/-/g'`" 1>&2; exit 1; } +fi + +trap 'rm -fr conftest* confdefs* core core.* *.core $ac_clean_files; exit 1' 1 2 15 + +# File descriptor usage: +# 0 standard input +# 1 file creation +# 2 errors and warnings +# 3 some systems may open it to /dev/tty +# 4 used on the Kubota Titan +# 6 checking for... messages and results +# 5 compiler messages saved in config.log +if test "$silent" = yes; then + exec 6>/dev/null +else + exec 6>&1 +fi +exec 5>./config.log + +echo "\ +This file contains any messages produced by compilers while +running configure, to aid debugging if configure makes a mistake. +" 1>&5 + +# Strip out --no-create and --no-recursion so they do not pile up. +# Also quote any args containing shell metacharacters. +ac_configure_args= +for ac_arg +do + case "$ac_arg" in + -no-create | --no-create | --no-creat | --no-crea | --no-cre \ + | --no-cr | --no-c) ;; + -no-recursion | --no-recursion | --no-recursio | --no-recursi \ + | --no-recurs | --no-recur | --no-recu | --no-rec | --no-re | --no-r) ;; + *" "*|*" "*|*[\[\]\~\#\$\^\&\*\(\)\{\}\\\|\;\<\>\?]*) + ac_configure_args="$ac_configure_args '$ac_arg'" ;; + *) ac_configure_args="$ac_configure_args $ac_arg" ;; + esac +done + +# NLS nuisances. +# Only set these to C if already set. These must not be set unconditionally +# because not all systems understand e.g. LANG=C (notably SCO). +# Fixing LC_MESSAGES prevents Solaris sh from translating var values in `set'! +# Non-C LC_CTYPE values break the ctype check. +if test "${LANG+set}" = set; then LANG=C; export LANG; fi +if test "${LC_ALL+set}" = set; then LC_ALL=C; export LC_ALL; fi +if test "${LC_MESSAGES+set}" = set; then LC_MESSAGES=C; export LC_MESSAGES; fi +if test "${LC_CTYPE+set}" = set; then LC_CTYPE=C; export LC_CTYPE; fi + +# confdefs.h avoids OS command line length limits that DEFS can exceed. +rm -rf conftest* confdefs.h +# AIX cpp loses on an empty file, so make sure it contains at least a newline. +echo > confdefs.h + +# A filename unique to this package, relative to the directory that +# configure is in, which we can look for to find out if srcdir is correct. +ac_unique_file=lib/urldata.h + +# Find the source files, if location was not specified. +if test -z "$srcdir"; then + ac_srcdir_defaulted=yes + # Try the directory containing this script, then its parent. + ac_prog=$0 + ac_confdir=`echo $ac_prog|sed 's%/[^/][^/]*$%%'` + test "x$ac_confdir" = "x$ac_prog" && ac_confdir=. + srcdir=$ac_confdir + if test ! -r $srcdir/$ac_unique_file; then + srcdir=.. + fi +else + ac_srcdir_defaulted=no +fi +if test ! -r $srcdir/$ac_unique_file; then + if test "$ac_srcdir_defaulted" = yes; then + { echo "configure: error: can not find sources in $ac_confdir or .." 1>&2; exit 1; } + else + { echo "configure: error: can not find sources in $srcdir" 1>&2; exit 1; } + fi +fi +srcdir=`echo "${srcdir}" | sed 's%\([^/]\)/*$%\1%'` + +# Prefer explicitly selected file to automatically selected ones. +if test -z "$CONFIG_SITE"; then + if test "x$prefix" != xNONE; then + CONFIG_SITE="$prefix/share/config.site $prefix/etc/config.site" + else + CONFIG_SITE="$ac_default_prefix/share/config.site $ac_default_prefix/etc/config.site" + fi +fi +for ac_site_file in $CONFIG_SITE; do + if test -r "$ac_site_file"; then + echo "loading site script $ac_site_file" + . "$ac_site_file" + fi +done + +if test -r "$cache_file"; then + echo "loading cache $cache_file" + . $cache_file +else + echo "creating cache $cache_file" + > $cache_file +fi + +ac_ext=c +# CFLAGS is not in ac_cpp because -g, -O, etc. are not valid cpp options. +ac_cpp='$CPP $CPPFLAGS' +ac_compile='${CC-cc} -c $CFLAGS $CPPFLAGS conftest.$ac_ext 1>&5' +ac_link='${CC-cc} -o conftest${ac_exeext} $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS 1>&5' +cross_compiling=$ac_cv_prog_cc_cross + +ac_exeext= +ac_objext=o +if (echo "testing\c"; echo 1,2,3) | grep c >/dev/null; then + # Stardent Vistra SVR4 grep lacks -e, says ghazi@caip.rutgers.edu. + if (echo -n testing; echo 1,2,3) | sed s/-n/xn/ | grep xn >/dev/null; then + ac_n= ac_c=' +' ac_t=' ' + else + ac_n=-n ac_c= ac_t= + fi +else + ac_n= ac_c='\c' ac_t= +fi + + + + + +ac_aux_dir= +for ac_dir in $srcdir $srcdir/.. $srcdir/../..; do + if test -f $ac_dir/install-sh; then + ac_aux_dir=$ac_dir + ac_install_sh="$ac_aux_dir/install-sh -c" + break + elif test -f $ac_dir/install.sh; then + ac_aux_dir=$ac_dir + ac_install_sh="$ac_aux_dir/install.sh -c" + break + fi +done +if test -z "$ac_aux_dir"; then + { echo "configure: error: can not find install-sh or install.sh in $srcdir $srcdir/.. $srcdir/../.." 1>&2; exit 1; } +fi +ac_config_guess=$ac_aux_dir/config.guess +ac_config_sub=$ac_aux_dir/config.sub +ac_configure=$ac_aux_dir/configure # This should be Cygnus configure. + +# Find a good install program. We prefer a C program (faster), +# so one script is as good as another. But avoid the broken or +# incompatible versions: +# SysV /etc/install, /usr/sbin/install +# SunOS /usr/etc/install +# IRIX /sbin/install +# AIX /bin/install +# AIX 4 /usr/bin/installbsd, which doesn't work without a -g flag +# AFS /usr/afsws/bin/install, which mishandles nonexistent args +# SVR4 /usr/ucb/install, which tries to use the nonexistent group "staff" +# ./install, which can be erroneously created by make from ./install.sh. +echo $ac_n "checking for a BSD compatible install""... $ac_c" 1>&6 +echo "configure:562: checking for a BSD compatible install" >&5 +if test -z "$INSTALL"; then +if eval "test \"`echo '$''{'ac_cv_path_install'+set}'`\" = set"; then + echo $ac_n "(cached) $ac_c" 1>&6 +else + IFS="${IFS= }"; ac_save_IFS="$IFS"; IFS=":" + for ac_dir in $PATH; do + # Account for people who put trailing slashes in PATH elements. + case "$ac_dir/" in + /|./|.//|/etc/*|/usr/sbin/*|/usr/etc/*|/sbin/*|/usr/afsws/bin/*|/usr/ucb/*) ;; + *) + # OSF1 and SCO ODT 3.0 have their own names for install. + # Don't use installbsd from OSF since it installs stuff as root + # by default. + for ac_prog in ginstall scoinst install; do + if test -f $ac_dir/$ac_prog; then + if test $ac_prog = install && + grep dspmsg $ac_dir/$ac_prog >/dev/null 2>&1; then + # AIX install. It has an incompatible calling convention. + : + else + ac_cv_path_install="$ac_dir/$ac_prog -c" + break 2 + fi + fi + done + ;; + esac + done + IFS="$ac_save_IFS" + +fi + if test "${ac_cv_path_install+set}" = set; then + INSTALL="$ac_cv_path_install" + else + # As a last resort, use the slow shell script. We don't cache a + # path for INSTALL within a source directory, because that will + # break other packages using the cache if that directory is + # removed, or if the path is relative. + INSTALL="$ac_install_sh" + fi +fi +echo "$ac_t""$INSTALL" 1>&6 + +# Use test -z because SunOS4 sh mishandles braces in ${var-val}. +# It thinks the first close brace ends the variable substitution. +test -z "$INSTALL_PROGRAM" && INSTALL_PROGRAM='${INSTALL}' + +test -z "$INSTALL_SCRIPT" && INSTALL_SCRIPT='${INSTALL_PROGRAM}' + +test -z "$INSTALL_DATA" && INSTALL_DATA='${INSTALL} -m 644' + +echo $ac_n "checking whether build environment is sane""... $ac_c" 1>&6 +echo "configure:615: checking whether build environment is sane" >&5 +# Just in case +sleep 1 +echo timestamp > conftestfile +# Do `set' in a subshell so we don't clobber the current shell's +# arguments. Must try -L first in case configure is actually a +# symlink; some systems play weird games with the mod time of symlinks +# (eg FreeBSD returns the mod time of the symlink's containing +# directory). +if ( + set X `ls -Lt $srcdir/configure conftestfile 2> /dev/null` + if test "$*" = "X"; then + # -L didn't work. + set X `ls -t $srcdir/configure conftestfile` + fi + if test "$*" != "X $srcdir/configure conftestfile" \ + && test "$*" != "X conftestfile $srcdir/configure"; then + + # If neither matched, then we have a broken ls. This can happen + # if, for instance, CONFIG_SHELL is bash and it inherits a + # broken ls alias from the environment. This has actually + # happened. Such a system could not be considered "sane". + { echo "configure: error: ls -t appears to fail. Make sure there is not a broken +alias in your environment" 1>&2; exit 1; } + fi + + test "$2" = conftestfile + ) +then + # Ok. + : +else + { echo "configure: error: newly created file is older than distributed files! +Check your system clock" 1>&2; exit 1; } +fi +rm -f conftest* +echo "$ac_t""yes" 1>&6 +if test "$program_transform_name" = s,x,x,; then + program_transform_name= +else + # Double any \ or $. echo might interpret backslashes. + cat <<\EOF_SED > conftestsed +s,\\,\\\\,g; s,\$,$$,g +EOF_SED + program_transform_name="`echo $program_transform_name|sed -f conftestsed`" + rm -f conftestsed +fi +test "$program_prefix" != NONE && + program_transform_name="s,^,${program_prefix},; $program_transform_name" +# Use a double $ so make ignores it. +test "$program_suffix" != NONE && + program_transform_name="s,\$\$,${program_suffix},; $program_transform_name" + +# sed with no file args requires a program. +test "$program_transform_name" = "" && program_transform_name="s,x,x," + +echo $ac_n "checking whether ${MAKE-make} sets \${MAKE}""... $ac_c" 1>&6 +echo "configure:672: checking whether ${MAKE-make} sets \${MAKE}" >&5 +set dummy ${MAKE-make}; ac_make=`echo "$2" | sed 'y%./+-%__p_%'` +if eval "test \"`echo '$''{'ac_cv_prog_make_${ac_make}_set'+set}'`\" = set"; then + echo $ac_n "(cached) $ac_c" 1>&6 +else + cat > conftestmake <<\EOF +all: + @echo 'ac_maketemp="${MAKE}"' +EOF +# GNU make sometimes prints "make[1]: Entering...", which would confuse us. +eval `${MAKE-make} -f conftestmake 2>/dev/null | grep temp=` +if test -n "$ac_maketemp"; then + eval ac_cv_prog_make_${ac_make}_set=yes +else + eval ac_cv_prog_make_${ac_make}_set=no +fi +rm -f conftestmake +fi +if eval "test \"`echo '$ac_cv_prog_make_'${ac_make}_set`\" = yes"; then + echo "$ac_t""yes" 1>&6 + SET_MAKE= +else + echo "$ac_t""no" 1>&6 + SET_MAKE="MAKE=${MAKE-make}" +fi + + +PACKAGE=curl + +VERSION="6.3.1" + +if test "`cd $srcdir && pwd`" != "`pwd`" && test -f $srcdir/config.status; then + { echo "configure: error: source directory already configured; run "make distclean" there first" 1>&2; exit 1; } +fi +cat >> confdefs.h <> confdefs.h <&6 +echo "configure:718: checking for working aclocal" >&5 +# Run test in a subshell; some versions of sh will print an error if +# an executable is not found, even if stderr is redirected. +# Redirect stdin to placate older versions of autoconf. Sigh. +if (aclocal --version) < /dev/null > /dev/null 2>&1; then + ACLOCAL=aclocal + echo "$ac_t""found" 1>&6 +else + ACLOCAL="$missing_dir/missing aclocal" + echo "$ac_t""missing" 1>&6 +fi + +echo $ac_n "checking for working autoconf""... $ac_c" 1>&6 +echo "configure:731: checking for working autoconf" >&5 +# Run test in a subshell; some versions of sh will print an error if +# an executable is not found, even if stderr is redirected. +# Redirect stdin to placate older versions of autoconf. Sigh. +if (autoconf --version) < /dev/null > /dev/null 2>&1; then + AUTOCONF=autoconf + echo "$ac_t""found" 1>&6 +else + AUTOCONF="$missing_dir/missing autoconf" + echo "$ac_t""missing" 1>&6 +fi + +echo $ac_n "checking for working automake""... $ac_c" 1>&6 +echo "configure:744: checking for working automake" >&5 +# Run test in a subshell; some versions of sh will print an error if +# an executable is not found, even if stderr is redirected. +# Redirect stdin to placate older versions of autoconf. Sigh. +if (automake --version) < /dev/null > /dev/null 2>&1; then + AUTOMAKE=automake + echo "$ac_t""found" 1>&6 +else + AUTOMAKE="$missing_dir/missing automake" + echo "$ac_t""missing" 1>&6 +fi + +echo $ac_n "checking for working autoheader""... $ac_c" 1>&6 +echo "configure:757: checking for working autoheader" >&5 +# Run test in a subshell; some versions of sh will print an error if +# an executable is not found, even if stderr is redirected. +# Redirect stdin to placate older versions of autoconf. Sigh. +if (autoheader --version) < /dev/null > /dev/null 2>&1; then + AUTOHEADER=autoheader + echo "$ac_t""found" 1>&6 +else + AUTOHEADER="$missing_dir/missing autoheader" + echo "$ac_t""missing" 1>&6 +fi + +echo $ac_n "checking for working makeinfo""... $ac_c" 1>&6 +echo "configure:770: checking for working makeinfo" >&5 +# Run test in a subshell; some versions of sh will print an error if +# an executable is not found, even if stderr is redirected. +# Redirect stdin to placate older versions of autoconf. Sigh. +if (makeinfo --version) < /dev/null > /dev/null 2>&1; then + MAKEINFO=makeinfo + echo "$ac_t""found" 1>&6 +else + MAKEINFO="$missing_dir/missing makeinfo" + echo "$ac_t""missing" 1>&6 +fi + + + +# Extract the first word of "gcc", so it can be a program name with args. +set dummy gcc; ac_word=$2 +echo $ac_n "checking for $ac_word""... $ac_c" 1>&6 +echo "configure:787: checking for $ac_word" >&5 +if eval "test \"`echo '$''{'ac_cv_prog_CC'+set}'`\" = set"; then + echo $ac_n "(cached) $ac_c" 1>&6 +else + if test -n "$CC"; then + ac_cv_prog_CC="$CC" # Let the user override the test. +else + IFS="${IFS= }"; ac_save_ifs="$IFS"; IFS=":" + ac_dummy="$PATH" + for ac_dir in $ac_dummy; do + test -z "$ac_dir" && ac_dir=. + if test -f $ac_dir/$ac_word; then + ac_cv_prog_CC="gcc" + break + fi + done + IFS="$ac_save_ifs" +fi +fi +CC="$ac_cv_prog_CC" +if test -n "$CC"; then + echo "$ac_t""$CC" 1>&6 +else + echo "$ac_t""no" 1>&6 +fi + +if test -z "$CC"; then + # Extract the first word of "cc", so it can be a program name with args. +set dummy cc; ac_word=$2 +echo $ac_n "checking for $ac_word""... $ac_c" 1>&6 +echo "configure:817: checking for $ac_word" >&5 +if eval "test \"`echo '$''{'ac_cv_prog_CC'+set}'`\" = set"; then + echo $ac_n "(cached) $ac_c" 1>&6 +else + if test -n "$CC"; then + ac_cv_prog_CC="$CC" # Let the user override the test. +else + IFS="${IFS= }"; ac_save_ifs="$IFS"; IFS=":" + ac_prog_rejected=no + ac_dummy="$PATH" + for ac_dir in $ac_dummy; do + test -z "$ac_dir" && ac_dir=. + if test -f $ac_dir/$ac_word; then + if test "$ac_dir/$ac_word" = "/usr/ucb/cc"; then + ac_prog_rejected=yes + continue + fi + ac_cv_prog_CC="cc" + break + fi + done + IFS="$ac_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 $# -gt 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 + set dummy "$ac_dir/$ac_word" "$@" + shift + ac_cv_prog_CC="$@" + fi +fi +fi +fi +CC="$ac_cv_prog_CC" +if test -n "$CC"; then + echo "$ac_t""$CC" 1>&6 +else + echo "$ac_t""no" 1>&6 +fi + + if test -z "$CC"; then + case "`uname -s`" in + *win32* | *WIN32*) + # Extract the first word of "cl", so it can be a program name with args. +set dummy cl; ac_word=$2 +echo $ac_n "checking for $ac_word""... $ac_c" 1>&6 +echo "configure:868: checking for $ac_word" >&5 +if eval "test \"`echo '$''{'ac_cv_prog_CC'+set}'`\" = set"; then + echo $ac_n "(cached) $ac_c" 1>&6 +else + if test -n "$CC"; then + ac_cv_prog_CC="$CC" # Let the user override the test. +else + IFS="${IFS= }"; ac_save_ifs="$IFS"; IFS=":" + ac_dummy="$PATH" + for ac_dir in $ac_dummy; do + test -z "$ac_dir" && ac_dir=. + if test -f $ac_dir/$ac_word; then + ac_cv_prog_CC="cl" + break + fi + done + IFS="$ac_save_ifs" +fi +fi +CC="$ac_cv_prog_CC" +if test -n "$CC"; then + echo "$ac_t""$CC" 1>&6 +else + echo "$ac_t""no" 1>&6 +fi + ;; + esac + fi + test -z "$CC" && { echo "configure: error: no acceptable cc found in \$PATH" 1>&2; exit 1; } +fi + +echo $ac_n "checking whether the C compiler ($CC $CFLAGS $LDFLAGS) works""... $ac_c" 1>&6 +echo "configure:900: checking whether the C compiler ($CC $CFLAGS $LDFLAGS) works" >&5 + +ac_ext=c +# CFLAGS is not in ac_cpp because -g, -O, etc. are not valid cpp options. +ac_cpp='$CPP $CPPFLAGS' +ac_compile='${CC-cc} -c $CFLAGS $CPPFLAGS conftest.$ac_ext 1>&5' +ac_link='${CC-cc} -o conftest${ac_exeext} $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS 1>&5' +cross_compiling=$ac_cv_prog_cc_cross + +cat > conftest.$ac_ext << EOF + +#line 911 "configure" +#include "confdefs.h" + +main(){return(0);} +EOF +if { (eval echo configure:916: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then + ac_cv_prog_cc_works=yes + # If we can't run a trivial program, we are probably using a cross compiler. + if (./conftest; exit) 2>/dev/null; then + ac_cv_prog_cc_cross=no + else + ac_cv_prog_cc_cross=yes + fi +else + echo "configure: failed program was:" >&5 + cat conftest.$ac_ext >&5 + ac_cv_prog_cc_works=no +fi +rm -fr conftest* +ac_ext=c +# CFLAGS is not in ac_cpp because -g, -O, etc. are not valid cpp options. +ac_cpp='$CPP $CPPFLAGS' +ac_compile='${CC-cc} -c $CFLAGS $CPPFLAGS conftest.$ac_ext 1>&5' +ac_link='${CC-cc} -o conftest${ac_exeext} $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS 1>&5' +cross_compiling=$ac_cv_prog_cc_cross + +echo "$ac_t""$ac_cv_prog_cc_works" 1>&6 +if test $ac_cv_prog_cc_works = no; then + { echo "configure: error: installation or configuration problem: C compiler cannot create executables." 1>&2; exit 1; } +fi +echo $ac_n "checking whether the C compiler ($CC $CFLAGS $LDFLAGS) is a cross-compiler""... $ac_c" 1>&6 +echo "configure:942: checking whether the C compiler ($CC $CFLAGS $LDFLAGS) is a cross-compiler" >&5 +echo "$ac_t""$ac_cv_prog_cc_cross" 1>&6 +cross_compiling=$ac_cv_prog_cc_cross + +echo $ac_n "checking whether we are using GNU C""... $ac_c" 1>&6 +echo "configure:947: checking whether we are using GNU C" >&5 +if eval "test \"`echo '$''{'ac_cv_prog_gcc'+set}'`\" = set"; then + echo $ac_n "(cached) $ac_c" 1>&6 +else + cat > conftest.c <&5; (eval $ac_try) 2>&5; }; } | egrep yes >/dev/null 2>&1; then + ac_cv_prog_gcc=yes +else + ac_cv_prog_gcc=no +fi +fi + +echo "$ac_t""$ac_cv_prog_gcc" 1>&6 + +if test $ac_cv_prog_gcc = yes; then + GCC=yes +else + GCC= +fi + +ac_test_CFLAGS="${CFLAGS+set}" +ac_save_CFLAGS="$CFLAGS" +CFLAGS= +echo $ac_n "checking whether ${CC-cc} accepts -g""... $ac_c" 1>&6 +echo "configure:975: checking whether ${CC-cc} accepts -g" >&5 +if eval "test \"`echo '$''{'ac_cv_prog_cc_g'+set}'`\" = set"; then + echo $ac_n "(cached) $ac_c" 1>&6 +else + echo 'void f(){}' > conftest.c +if test -z "`${CC-cc} -g -c conftest.c 2>&1`"; then + ac_cv_prog_cc_g=yes +else + ac_cv_prog_cc_g=no +fi +rm -f conftest* + +fi + +echo "$ac_t""$ac_cv_prog_cc_g" 1>&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 + +# Find a good install program. We prefer a C program (faster), +# so one script is as good as another. But avoid the broken or +# incompatible versions: +# SysV /etc/install, /usr/sbin/install +# SunOS /usr/etc/install +# IRIX /sbin/install +# AIX /bin/install +# AIX 4 /usr/bin/installbsd, which doesn't work without a -g flag +# AFS /usr/afsws/bin/install, which mishandles nonexistent args +# SVR4 /usr/ucb/install, which tries to use the nonexistent group "staff" +# ./install, which can be erroneously created by make from ./install.sh. +echo $ac_n "checking for a BSD compatible install""... $ac_c" 1>&6 +echo "configure:1018: checking for a BSD compatible install" >&5 +if test -z "$INSTALL"; then +if eval "test \"`echo '$''{'ac_cv_path_install'+set}'`\" = set"; then + echo $ac_n "(cached) $ac_c" 1>&6 +else + IFS="${IFS= }"; ac_save_IFS="$IFS"; IFS=":" + for ac_dir in $PATH; do + # Account for people who put trailing slashes in PATH elements. + case "$ac_dir/" in + /|./|.//|/etc/*|/usr/sbin/*|/usr/etc/*|/sbin/*|/usr/afsws/bin/*|/usr/ucb/*) ;; + *) + # OSF1 and SCO ODT 3.0 have their own names for install. + # Don't use installbsd from OSF since it installs stuff as root + # by default. + for ac_prog in ginstall scoinst install; do + if test -f $ac_dir/$ac_prog; then + if test $ac_prog = install && + grep dspmsg $ac_dir/$ac_prog >/dev/null 2>&1; then + # AIX install. It has an incompatible calling convention. + : + else + ac_cv_path_install="$ac_dir/$ac_prog -c" + break 2 + fi + fi + done + ;; + esac + done + IFS="$ac_save_IFS" + +fi + if test "${ac_cv_path_install+set}" = set; then + INSTALL="$ac_cv_path_install" + else + # As a last resort, use the slow shell script. We don't cache a + # path for INSTALL within a source directory, because that will + # break other packages using the cache if that directory is + # removed, or if the path is relative. + INSTALL="$ac_install_sh" + fi +fi +echo "$ac_t""$INSTALL" 1>&6 + +# Use test -z because SunOS4 sh mishandles braces in ${var-val}. +# It thinks the first close brace ends the variable substitution. +test -z "$INSTALL_PROGRAM" && INSTALL_PROGRAM='${INSTALL}' + +test -z "$INSTALL_SCRIPT" && INSTALL_SCRIPT='${INSTALL_PROGRAM}' + +test -z "$INSTALL_DATA" && INSTALL_DATA='${INSTALL} -m 644' + +echo $ac_n "checking whether ${MAKE-make} sets \${MAKE}""... $ac_c" 1>&6 +echo "configure:1071: checking whether ${MAKE-make} sets \${MAKE}" >&5 +set dummy ${MAKE-make}; ac_make=`echo "$2" | sed 'y%./+-%__p_%'` +if eval "test \"`echo '$''{'ac_cv_prog_make_${ac_make}_set'+set}'`\" = set"; then + echo $ac_n "(cached) $ac_c" 1>&6 +else + cat > conftestmake <<\EOF +all: + @echo 'ac_maketemp="${MAKE}"' +EOF +# GNU make sometimes prints "make[1]: Entering...", which would confuse us. +eval `${MAKE-make} -f conftestmake 2>/dev/null | grep temp=` +if test -n "$ac_maketemp"; then + eval ac_cv_prog_make_${ac_make}_set=yes +else + eval ac_cv_prog_make_${ac_make}_set=no +fi +rm -f conftestmake +fi +if eval "test \"`echo '$ac_cv_prog_make_'${ac_make}_set`\" = yes"; then + echo "$ac_t""yes" 1>&6 + SET_MAKE= +else + echo "$ac_t""no" 1>&6 + SET_MAKE="MAKE=${MAKE-make}" +fi + + +echo $ac_n "checking how to run the C preprocessor""... $ac_c" 1>&6 +echo "configure:1099: checking how to run the C preprocessor" >&5 +# On Suns, sometimes $CPP names a directory. +if test -n "$CPP" && test -d "$CPP"; then + CPP= +fi +if test -z "$CPP"; then +if eval "test \"`echo '$''{'ac_cv_prog_CPP'+set}'`\" = set"; then + echo $ac_n "(cached) $ac_c" 1>&6 +else + # This must be in double quotes, not single quotes, because CPP may get + # substituted into the Makefile and "${CC-cc}" will confuse make. + CPP="${CC-cc} -E" + # On the NeXT, cc -E runs the code through the compiler's parser, + # not just through cpp. + cat > conftest.$ac_ext < +Syntax Error +EOF +ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out" +{ (eval echo configure:1120: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } +ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"` +if test -z "$ac_err"; then + : +else + echo "$ac_err" >&5 + echo "configure: failed program was:" >&5 + cat conftest.$ac_ext >&5 + rm -rf conftest* + CPP="${CC-cc} -E -traditional-cpp" + cat > conftest.$ac_ext < +Syntax Error +EOF +ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out" +{ (eval echo configure:1137: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } +ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"` +if test -z "$ac_err"; then + : +else + echo "$ac_err" >&5 + echo "configure: failed program was:" >&5 + cat conftest.$ac_ext >&5 + rm -rf conftest* + CPP="${CC-cc} -nologo -E" + cat > conftest.$ac_ext < +Syntax Error +EOF +ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out" +{ (eval echo configure:1154: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } +ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"` +if test -z "$ac_err"; then + : +else + echo "$ac_err" >&5 + echo "configure: failed program was:" >&5 + cat conftest.$ac_ext >&5 + rm -rf conftest* + CPP=/lib/cpp +fi +rm -f conftest* +fi +rm -f conftest* +fi +rm -f conftest* + ac_cv_prog_CPP="$CPP" +fi + CPP="$ac_cv_prog_CPP" +else + ac_cv_prog_CPP="$CPP" +fi +echo "$ac_t""$CPP" 1>&6 + +echo $ac_n "checking for AIX""... $ac_c" 1>&6 +echo "configure:1179: checking for AIX" >&5 +cat > conftest.$ac_ext <&5 | + egrep "yes" >/dev/null 2>&1; then + rm -rf conftest* + echo "$ac_t""yes" 1>&6; cat >> confdefs.h <<\EOF +#define _ALL_SOURCE 1 +EOF + +else + rm -rf conftest* + echo "$ac_t""no" 1>&6 +fi +rm -f conftest* + + + + +echo $ac_n "checking for gethostbyname""... $ac_c" 1>&6 +echo "configure:1205: checking for gethostbyname" >&5 +if eval "test \"`echo '$''{'ac_cv_func_gethostbyname'+set}'`\" = set"; then + echo $ac_n "(cached) $ac_c" 1>&6 +else + cat > conftest.$ac_ext < +/* Override any gcc2 internal prototype to avoid an error. */ +/* We use char because int might match the return type of a gcc2 + builtin and then its argument prototype would still apply. */ +char gethostbyname(); + +int main() { + +/* The GNU C library defines this for functions which it implements + to always fail with ENOSYS. Some functions are actually named + something starting with __ and the normal name is an alias. */ +#if defined (__stub_gethostbyname) || defined (__stub___gethostbyname) +choke me +#else +gethostbyname(); +#endif + +; return 0; } +EOF +if { (eval echo configure:1233: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then + rm -rf conftest* + eval "ac_cv_func_gethostbyname=yes" +else + echo "configure: failed program was:" >&5 + cat conftest.$ac_ext >&5 + rm -rf conftest* + eval "ac_cv_func_gethostbyname=no" +fi +rm -f conftest* +fi + +if eval "test \"`echo '$ac_cv_func_'gethostbyname`\" = yes"; then + echo "$ac_t""yes" 1>&6 + : +else + echo "$ac_t""no" 1>&6 +echo $ac_n "checking for gethostbyname in -lnsl""... $ac_c" 1>&6 +echo "configure:1251: checking for gethostbyname in -lnsl" >&5 +ac_lib_var=`echo nsl'_'gethostbyname | sed 'y%./+-%__p_%'` +if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then + echo $ac_n "(cached) $ac_c" 1>&6 +else + ac_save_LIBS="$LIBS" +LIBS="-lnsl $LIBS" +cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then + rm -rf conftest* + eval "ac_cv_lib_$ac_lib_var=yes" +else + echo "configure: failed program was:" >&5 + cat conftest.$ac_ext >&5 + rm -rf conftest* + eval "ac_cv_lib_$ac_lib_var=no" +fi +rm -f conftest* +LIBS="$ac_save_LIBS" + +fi +if eval "test \"`echo '$ac_cv_lib_'$ac_lib_var`\" = yes"; then + echo "$ac_t""yes" 1>&6 + ac_tr_lib=HAVE_LIB`echo nsl | sed -e 's/^a-zA-Z0-9_/_/g' \ + -e 'y/abcdefghijklmnopqrstuvwxyz/ABCDEFGHIJKLMNOPQRSTUVWXYZ/'` + cat >> confdefs.h <&6 +fi + +fi + + +echo $ac_n "checking for strcasecmp""... $ac_c" 1>&6 +echo "configure:1301: checking for strcasecmp" >&5 +if eval "test \"`echo '$''{'ac_cv_func_strcasecmp'+set}'`\" = set"; then + echo $ac_n "(cached) $ac_c" 1>&6 +else + cat > conftest.$ac_ext < +/* Override any gcc2 internal prototype to avoid an error. */ +/* We use char because int might match the return type of a gcc2 + builtin and then its argument prototype would still apply. */ +char strcasecmp(); + +int main() { + +/* The GNU C library defines this for functions which it implements + to always fail with ENOSYS. Some functions are actually named + something starting with __ and the normal name is an alias. */ +#if defined (__stub_strcasecmp) || defined (__stub___strcasecmp) +choke me +#else +strcasecmp(); +#endif + +; return 0; } +EOF +if { (eval echo configure:1329: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then + rm -rf conftest* + eval "ac_cv_func_strcasecmp=yes" +else + echo "configure: failed program was:" >&5 + cat conftest.$ac_ext >&5 + rm -rf conftest* + eval "ac_cv_func_strcasecmp=no" +fi +rm -f conftest* +fi + +if eval "test \"`echo '$ac_cv_func_'strcasecmp`\" = yes"; then + echo "$ac_t""yes" 1>&6 + : +else + echo "$ac_t""no" 1>&6 +echo $ac_n "checking for strcasecmp in -lresolve""... $ac_c" 1>&6 +echo "configure:1347: checking for strcasecmp in -lresolve" >&5 +ac_lib_var=`echo resolve'_'strcasecmp | sed 'y%./+-%__p_%'` +if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then + echo $ac_n "(cached) $ac_c" 1>&6 +else + ac_save_LIBS="$LIBS" +LIBS="-lresolve $LIBS" +cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then + rm -rf conftest* + eval "ac_cv_lib_$ac_lib_var=yes" +else + echo "configure: failed program was:" >&5 + cat conftest.$ac_ext >&5 + rm -rf conftest* + eval "ac_cv_lib_$ac_lib_var=no" +fi +rm -f conftest* +LIBS="$ac_save_LIBS" + +fi +if eval "test \"`echo '$ac_cv_lib_'$ac_lib_var`\" = yes"; then + echo "$ac_t""yes" 1>&6 + ac_tr_lib=HAVE_LIB`echo resolve | sed -e 's/^a-zA-Z0-9_/_/g' \ + -e 'y/abcdefghijklmnopqrstuvwxyz/ABCDEFGHIJKLMNOPQRSTUVWXYZ/'` + cat >> confdefs.h <&6 +fi + +fi + + +echo $ac_n "checking for connect""... $ac_c" 1>&6 +echo "configure:1397: checking for connect" >&5 +if eval "test \"`echo '$''{'ac_cv_func_connect'+set}'`\" = set"; then + echo $ac_n "(cached) $ac_c" 1>&6 +else + cat > conftest.$ac_ext < +/* Override any gcc2 internal prototype to avoid an error. */ +/* We use char because int might match the return type of a gcc2 + builtin and then its argument prototype would still apply. */ +char connect(); + +int main() { + +/* The GNU C library defines this for functions which it implements + to always fail with ENOSYS. Some functions are actually named + something starting with __ and the normal name is an alias. */ +#if defined (__stub_connect) || defined (__stub___connect) +choke me +#else +connect(); +#endif + +; return 0; } +EOF +if { (eval echo configure:1425: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then + rm -rf conftest* + eval "ac_cv_func_connect=yes" +else + echo "configure: failed program was:" >&5 + cat conftest.$ac_ext >&5 + rm -rf conftest* + eval "ac_cv_func_connect=no" +fi +rm -f conftest* +fi + +if eval "test \"`echo '$ac_cv_func_'connect`\" = yes"; then + echo "$ac_t""yes" 1>&6 + : +else + echo "$ac_t""no" 1>&6 +echo $ac_n "checking for connect in -lsocket""... $ac_c" 1>&6 +echo "configure:1443: checking for connect in -lsocket" >&5 +ac_lib_var=`echo socket'_'connect | sed 'y%./+-%__p_%'` +if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then + echo $ac_n "(cached) $ac_c" 1>&6 +else + ac_save_LIBS="$LIBS" +LIBS="-lsocket $LIBS" +cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then + rm -rf conftest* + eval "ac_cv_lib_$ac_lib_var=yes" +else + echo "configure: failed program was:" >&5 + cat conftest.$ac_ext >&5 + rm -rf conftest* + eval "ac_cv_lib_$ac_lib_var=no" +fi +rm -f conftest* +LIBS="$ac_save_LIBS" + +fi +if eval "test \"`echo '$ac_cv_lib_'$ac_lib_var`\" = yes"; then + echo "$ac_t""yes" 1>&6 + ac_tr_lib=HAVE_LIB`echo socket | sed -e 's/^a-zA-Z0-9_/_/g' \ + -e 'y/abcdefghijklmnopqrstuvwxyz/ABCDEFGHIJKLMNOPQRSTUVWXYZ/'` + cat >> confdefs.h <&6 +fi + +fi + + +echo $ac_n "checking for gethostname""... $ac_c" 1>&6 +echo "configure:1493: checking for gethostname" >&5 +if eval "test \"`echo '$''{'ac_cv_func_gethostname'+set}'`\" = set"; then + echo $ac_n "(cached) $ac_c" 1>&6 +else + cat > conftest.$ac_ext < +/* Override any gcc2 internal prototype to avoid an error. */ +/* We use char because int might match the return type of a gcc2 + builtin and then its argument prototype would still apply. */ +char gethostname(); + +int main() { + +/* The GNU C library defines this for functions which it implements + to always fail with ENOSYS. Some functions are actually named + something starting with __ and the normal name is an alias. */ +#if defined (__stub_gethostname) || defined (__stub___gethostname) +choke me +#else +gethostname(); +#endif + +; return 0; } +EOF +if { (eval echo configure:1521: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then + rm -rf conftest* + eval "ac_cv_func_gethostname=yes" +else + echo "configure: failed program was:" >&5 + cat conftest.$ac_ext >&5 + rm -rf conftest* + eval "ac_cv_func_gethostname=no" +fi +rm -f conftest* +fi + +if eval "test \"`echo '$ac_cv_func_'gethostname`\" = yes"; then + echo "$ac_t""yes" 1>&6 + : +else + echo "$ac_t""no" 1>&6 +echo $ac_n "checking for gethostname in -lucb""... $ac_c" 1>&6 +echo "configure:1539: checking for gethostname in -lucb" >&5 +ac_lib_var=`echo ucb'_'gethostname | sed 'y%./+-%__p_%'` +if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then + echo $ac_n "(cached) $ac_c" 1>&6 +else + ac_save_LIBS="$LIBS" +LIBS="-lucb $LIBS" +cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then + rm -rf conftest* + eval "ac_cv_lib_$ac_lib_var=yes" +else + echo "configure: failed program was:" >&5 + cat conftest.$ac_ext >&5 + rm -rf conftest* + eval "ac_cv_lib_$ac_lib_var=no" +fi +rm -f conftest* +LIBS="$ac_save_LIBS" + +fi +if eval "test \"`echo '$ac_cv_lib_'$ac_lib_var`\" = yes"; then + echo "$ac_t""yes" 1>&6 + ac_tr_lib=HAVE_LIB`echo ucb | sed -e 's/^a-zA-Z0-9_/_/g' \ + -e 'y/abcdefghijklmnopqrstuvwxyz/ABCDEFGHIJKLMNOPQRSTUVWXYZ/'` + cat >> confdefs.h <&6 +fi + +fi + + +echo $ac_n "checking for dlopen""... $ac_c" 1>&6 +echo "configure:1589: checking for dlopen" >&5 +if eval "test \"`echo '$''{'ac_cv_func_dlopen'+set}'`\" = set"; then + echo $ac_n "(cached) $ac_c" 1>&6 +else + cat > conftest.$ac_ext < +/* Override any gcc2 internal prototype to avoid an error. */ +/* We use char because int might match the return type of a gcc2 + builtin and then its argument prototype would still apply. */ +char dlopen(); + +int main() { + +/* The GNU C library defines this for functions which it implements + to always fail with ENOSYS. Some functions are actually named + something starting with __ and the normal name is an alias. */ +#if defined (__stub_dlopen) || defined (__stub___dlopen) +choke me +#else +dlopen(); +#endif + +; return 0; } +EOF +if { (eval echo configure:1617: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then + rm -rf conftest* + eval "ac_cv_func_dlopen=yes" +else + echo "configure: failed program was:" >&5 + cat conftest.$ac_ext >&5 + rm -rf conftest* + eval "ac_cv_func_dlopen=no" +fi +rm -f conftest* +fi + +if eval "test \"`echo '$ac_cv_func_'dlopen`\" = yes"; then + echo "$ac_t""yes" 1>&6 + : +else + echo "$ac_t""no" 1>&6 +echo $ac_n "checking for dlopen in -ldl""... $ac_c" 1>&6 +echo "configure:1635: checking for dlopen in -ldl" >&5 +ac_lib_var=`echo dl'_'dlopen | sed 'y%./+-%__p_%'` +if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then + echo $ac_n "(cached) $ac_c" 1>&6 +else + ac_save_LIBS="$LIBS" +LIBS="-ldl $LIBS" +cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then + rm -rf conftest* + eval "ac_cv_lib_$ac_lib_var=yes" +else + echo "configure: failed program was:" >&5 + cat conftest.$ac_ext >&5 + rm -rf conftest* + eval "ac_cv_lib_$ac_lib_var=no" +fi +rm -f conftest* +LIBS="$ac_save_LIBS" + +fi +if eval "test \"`echo '$ac_cv_lib_'$ac_lib_var`\" = yes"; then + echo "$ac_t""yes" 1>&6 + ac_tr_lib=HAVE_LIB`echo dl | sed -e 's/^a-zA-Z0-9_/_/g' \ + -e 'y/abcdefghijklmnopqrstuvwxyz/ABCDEFGHIJKLMNOPQRSTUVWXYZ/'` + cat >> confdefs.h <&6 +fi + +fi + + + +OPT_SSL=off +# Check whether --with-ssl or --without-ssl was given. +if test "${with_ssl+set}" = set; then + withval="$with_ssl" + OPT_SSL=$withval + +fi + + +if test X"$OPT_SSL" = Xno +then + echo "configure: warning: SSL/https support disabled" 1>&2 +else + + + echo $ac_n "checking where to look for SSL""... $ac_c" 1>&6 +echo "configure:1701: checking where to look for SSL" >&5 + if test X"$OPT_SSL" = Xoff + then + echo "$ac_t""defaults (or given in environment)" 1>&6 + else + test X"$OPT_SSL" = Xyes && OPT_SSL=/usr/local/ssl + LIBS="$LIBS -L$OPT_SSL/lib" + CPPFLAGS="$CPPFLAGS -I$OPT_SSL/include/openssl -I$OPT_SSL/include" + echo "$ac_t""$OPT_SSL" 1>&6 + fi + + echo $ac_n "checking for CRYPTO_lock in -lcrypto""... $ac_c" 1>&6 +echo "configure:1713: checking for CRYPTO_lock in -lcrypto" >&5 +ac_lib_var=`echo crypto'_'CRYPTO_lock | sed 'y%./+-%__p_%'` +if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then + echo $ac_n "(cached) $ac_c" 1>&6 +else + ac_save_LIBS="$LIBS" +LIBS="-lcrypto $LIBS" +cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then + rm -rf conftest* + eval "ac_cv_lib_$ac_lib_var=yes" +else + echo "configure: failed program was:" >&5 + cat conftest.$ac_ext >&5 + rm -rf conftest* + eval "ac_cv_lib_$ac_lib_var=no" +fi +rm -f conftest* +LIBS="$ac_save_LIBS" + +fi +if eval "test \"`echo '$ac_cv_lib_'$ac_lib_var`\" = yes"; then + echo "$ac_t""yes" 1>&6 + ac_tr_lib=HAVE_LIB`echo crypto | sed -e 's/[^a-zA-Z0-9_]/_/g' \ + -e 'y/abcdefghijklmnopqrstuvwxyz/ABCDEFGHIJKLMNOPQRSTUVWXYZ/'` + cat >> confdefs.h <&6 +fi + + + if test $ac_cv_lib_crypto_CRYPTO_lock = yes; then + echo $ac_n "checking for SSL_connect in -lssl""... $ac_c" 1>&6 +echo "configure:1762: checking for SSL_connect in -lssl" >&5 +ac_lib_var=`echo ssl'_'SSL_connect | sed 'y%./+-%__p_%'` +if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then + echo $ac_n "(cached) $ac_c" 1>&6 +else + ac_save_LIBS="$LIBS" +LIBS="-lssl $LIBS" +cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then + rm -rf conftest* + eval "ac_cv_lib_$ac_lib_var=yes" +else + echo "configure: failed program was:" >&5 + cat conftest.$ac_ext >&5 + rm -rf conftest* + eval "ac_cv_lib_$ac_lib_var=no" +fi +rm -f conftest* +LIBS="$ac_save_LIBS" + +fi +if eval "test \"`echo '$ac_cv_lib_'$ac_lib_var`\" = yes"; then + echo "$ac_t""yes" 1>&6 + ac_tr_lib=HAVE_LIB`echo ssl | sed -e 's/[^a-zA-Z0-9_]/_/g' \ + -e 'y/abcdefghijklmnopqrstuvwxyz/ABCDEFGHIJKLMNOPQRSTUVWXYZ/'` + cat >> confdefs.h <&6 +fi + + + for ac_hdr in openssl/x509.h openssl/rsa.h openssl/crypto.h openssl/pem.h openssl/ssl.h openssl/err.h +do +ac_safe=`echo "$ac_hdr" | sed 'y%./+-%__p_%'` +echo $ac_n "checking for $ac_hdr""... $ac_c" 1>&6 +echo "configure:1813: checking for $ac_hdr" >&5 +if eval "test \"`echo '$''{'ac_cv_header_$ac_safe'+set}'`\" = set"; then + echo $ac_n "(cached) $ac_c" 1>&6 +else + cat > conftest.$ac_ext < +EOF +ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out" +{ (eval echo configure:1823: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } +ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"` +if test -z "$ac_err"; then + rm -rf conftest* + eval "ac_cv_header_$ac_safe=yes" +else + echo "$ac_err" >&5 + echo "configure: failed program was:" >&5 + cat conftest.$ac_ext >&5 + rm -rf conftest* + eval "ac_cv_header_$ac_safe=no" +fi +rm -f conftest* +fi +if eval "test \"`echo '$ac_cv_header_'$ac_safe`\" = yes"; then + echo "$ac_t""yes" 1>&6 + ac_tr_hdr=HAVE_`echo $ac_hdr | sed 'y%abcdefghijklmnopqrstuvwxyz./-%ABCDEFGHIJKLMNOPQRSTUVWXYZ___%'` + cat >> confdefs.h <&6 +fi +done + + + if test $ac_cv_header_openssl_x509_h = no; then + for ac_hdr in x509.h rsa.h crypto.h pem.h ssl.h err.h +do +ac_safe=`echo "$ac_hdr" | sed 'y%./+-%__p_%'` +echo $ac_n "checking for $ac_hdr""... $ac_c" 1>&6 +echo "configure:1855: checking for $ac_hdr" >&5 +if eval "test \"`echo '$''{'ac_cv_header_$ac_safe'+set}'`\" = set"; then + echo $ac_n "(cached) $ac_c" 1>&6 +else + cat > conftest.$ac_ext < +EOF +ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out" +{ (eval echo configure:1865: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } +ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"` +if test -z "$ac_err"; then + rm -rf conftest* + eval "ac_cv_header_$ac_safe=yes" +else + echo "$ac_err" >&5 + echo "configure: failed program was:" >&5 + cat conftest.$ac_ext >&5 + rm -rf conftest* + eval "ac_cv_header_$ac_safe=no" +fi +rm -f conftest* +fi +if eval "test \"`echo '$ac_cv_header_'$ac_safe`\" = yes"; then + echo "$ac_t""yes" 1>&6 + ac_tr_hdr=HAVE_`echo $ac_hdr | sed 'y%abcdefghijklmnopqrstuvwxyz./-%ABCDEFGHIJKLMNOPQRSTUVWXYZ___%'` + cat >> confdefs.h <&6 +fi +done + + fi + + fi +fi + + + + + + + +echo $ac_n "checking for ANSI C header files""... $ac_c" 1>&6 +echo "configure:1903: checking for ANSI C header files" >&5 +if eval "test \"`echo '$''{'ac_cv_header_stdc'+set}'`\" = set"; then + echo $ac_n "(cached) $ac_c" 1>&6 +else + cat > conftest.$ac_ext < +#include +#include +#include +EOF +ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out" +{ (eval echo configure:1916: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } +ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"` +if test -z "$ac_err"; then + rm -rf conftest* + ac_cv_header_stdc=yes +else + echo "$ac_err" >&5 + echo "configure: failed program was:" >&5 + cat conftest.$ac_ext >&5 + rm -rf conftest* + ac_cv_header_stdc=no +fi +rm -f conftest* + +if test $ac_cv_header_stdc = yes; then + # SunOS 4.x string.h does not declare mem*, contrary to ANSI. +cat > conftest.$ac_ext < +EOF +if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | + egrep "memchr" >/dev/null 2>&1; then + : +else + rm -rf conftest* + ac_cv_header_stdc=no +fi +rm -f conftest* + +fi + +if test $ac_cv_header_stdc = yes; then + # ISC 2.0.2 stdlib.h does not declare free, contrary to ANSI. +cat > conftest.$ac_ext < +EOF +if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | + egrep "free" >/dev/null 2>&1; then + : +else + rm -rf conftest* + ac_cv_header_stdc=no +fi +rm -f conftest* + +fi + +if test $ac_cv_header_stdc = yes; then + # /bin/cc in Irix-4.0.5 gets non-ANSI ctype macros unless using -ansi. +if test "$cross_compiling" = yes; then + : +else + cat > conftest.$ac_ext < +#define ISLOWER(c) ('a' <= (c) && (c) <= 'z') +#define TOUPPER(c) (ISLOWER(c) ? 'A' + ((c) - 'a') : (c)) +#define XOR(e, f) (((e) && !(f)) || (!(e) && (f))) +int main () { int i; for (i = 0; i < 256; i++) +if (XOR (islower (i), ISLOWER (i)) || toupper (i) != TOUPPER (i)) exit(2); +exit (0); } + +EOF +if { (eval echo configure:1983: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null +then + : +else + echo "configure: failed program was:" >&5 + cat conftest.$ac_ext >&5 + rm -fr conftest* + ac_cv_header_stdc=no +fi +rm -fr conftest* +fi + +fi +fi + +echo "$ac_t""$ac_cv_header_stdc" 1>&6 +if test $ac_cv_header_stdc = yes; then + cat >> confdefs.h <<\EOF +#define STDC_HEADERS 1 +EOF + +fi + +for ac_hdr in \ + unistd.h \ + arpa/inet.h \ + net/if.h \ + netinet/in.h \ + netdb.h \ + sys/select.h \ + sys/socket.h \ + sys/sockio.h \ + sys/stat.h \ + sys/types.h \ + getopt.h \ + sys/param.h \ + termios.h \ + termio.h \ + sgtty.h \ + fcntl.h \ + dlfcn.h \ + alloca.h \ + winsock.h \ + time.h \ + io.h \ + +do +ac_safe=`echo "$ac_hdr" | sed 'y%./+-%__p_%'` +echo $ac_n "checking for $ac_hdr""... $ac_c" 1>&6 +echo "configure:2032: checking for $ac_hdr" >&5 +if eval "test \"`echo '$''{'ac_cv_header_$ac_safe'+set}'`\" = set"; then + echo $ac_n "(cached) $ac_c" 1>&6 +else + cat > conftest.$ac_ext < +EOF +ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out" +{ (eval echo configure:2042: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } +ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"` +if test -z "$ac_err"; then + rm -rf conftest* + eval "ac_cv_header_$ac_safe=yes" +else + echo "$ac_err" >&5 + echo "configure: failed program was:" >&5 + cat conftest.$ac_ext >&5 + rm -rf conftest* + eval "ac_cv_header_$ac_safe=no" +fi +rm -f conftest* +fi +if eval "test \"`echo '$ac_cv_header_'$ac_safe`\" = yes"; then + echo "$ac_t""yes" 1>&6 + ac_tr_hdr=HAVE_`echo $ac_hdr | sed 'y%abcdefghijklmnopqrstuvwxyz./-%ABCDEFGHIJKLMNOPQRSTUVWXYZ___%'` + cat >> confdefs.h <&6 +fi +done + + + +echo $ac_n "checking for working const""... $ac_c" 1>&6 +echo "configure:2071: checking for working const" >&5 +if eval "test \"`echo '$''{'ac_cv_c_const'+set}'`\" = set"; then + echo $ac_n "(cached) $ac_c" 1>&6 +else + cat > conftest.$ac_ext <j = 5; +} +{ /* ULTRIX-32 V3.1 (Rev 9) vcc rejects this */ + const int foo = 10; +} + +; return 0; } +EOF +if { (eval echo configure:2125: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then + rm -rf conftest* + ac_cv_c_const=yes +else + echo "configure: failed program was:" >&5 + cat conftest.$ac_ext >&5 + rm -rf conftest* + ac_cv_c_const=no +fi +rm -f conftest* +fi + +echo "$ac_t""$ac_cv_c_const" 1>&6 +if test $ac_cv_c_const = no; then + cat >> confdefs.h <<\EOF +#define const +EOF + +fi + +echo $ac_n "checking for size_t""... $ac_c" 1>&6 +echo "configure:2146: checking for size_t" >&5 +if eval "test \"`echo '$''{'ac_cv_type_size_t'+set}'`\" = set"; then + echo $ac_n "(cached) $ac_c" 1>&6 +else + cat > conftest.$ac_ext < +#if STDC_HEADERS +#include +#include +#endif +EOF +if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | + egrep "(^|[^a-zA-Z_0-9])size_t[^a-zA-Z_0-9]" >/dev/null 2>&1; then + rm -rf conftest* + ac_cv_type_size_t=yes +else + rm -rf conftest* + ac_cv_type_size_t=no +fi +rm -f conftest* + +fi +echo "$ac_t""$ac_cv_type_size_t" 1>&6 +if test $ac_cv_type_size_t = no; then + cat >> confdefs.h <<\EOF +#define size_t unsigned +EOF + +fi + +echo $ac_n "checking whether time.h and sys/time.h may both be included""... $ac_c" 1>&6 +echo "configure:2179: checking whether time.h and sys/time.h may both be included" >&5 +if eval "test \"`echo '$''{'ac_cv_header_time'+set}'`\" = set"; then + echo $ac_n "(cached) $ac_c" 1>&6 +else + cat > conftest.$ac_ext < +#include +#include +int main() { +struct tm *tp; +; return 0; } +EOF +if { (eval echo configure:2193: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then + rm -rf conftest* + ac_cv_header_time=yes +else + echo "configure: failed program was:" >&5 + cat conftest.$ac_ext >&5 + rm -rf conftest* + ac_cv_header_time=no +fi +rm -f conftest* +fi + +echo "$ac_t""$ac_cv_header_time" 1>&6 +if test $ac_cv_header_time = yes; then + cat >> confdefs.h <<\EOF +#define TIME_WITH_SYS_TIME 1 +EOF + +fi + + +# mprintf() checks: + +# check for 'long double' +echo $ac_n "checking size of long double""... $ac_c" 1>&6 +echo "configure:2218: checking size of long double" >&5 +if eval "test \"`echo '$''{'ac_cv_sizeof_long_double'+set}'`\" = set"; then + echo $ac_n "(cached) $ac_c" 1>&6 +else + if test "$cross_compiling" = yes; then + ac_cv_sizeof_long_double=8 +else + cat > conftest.$ac_ext < +main() +{ + FILE *f=fopen("conftestval", "w"); + if (!f) exit(1); + fprintf(f, "%d\n", sizeof(long double)); + exit(0); +} +EOF +if { (eval echo configure:2237: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null +then + ac_cv_sizeof_long_double=`cat conftestval` +else + echo "configure: failed program was:" >&5 + cat conftest.$ac_ext >&5 + rm -fr conftest* + ac_cv_sizeof_long_double=0 +fi +rm -fr conftest* +fi + +fi +echo "$ac_t""$ac_cv_sizeof_long_double" 1>&6 +cat >> confdefs.h <&6 +echo "configure:2258: checking size of long long" >&5 +if eval "test \"`echo '$''{'ac_cv_sizeof_long_long'+set}'`\" = set"; then + echo $ac_n "(cached) $ac_c" 1>&6 +else + if test "$cross_compiling" = yes; then + ac_cv_sizeof_long_long=4 +else + cat > conftest.$ac_ext < +main() +{ + FILE *f=fopen("conftestval", "w"); + if (!f) exit(1); + fprintf(f, "%d\n", sizeof(long long)); + exit(0); +} +EOF +if { (eval echo configure:2277: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null +then + ac_cv_sizeof_long_long=`cat conftestval` +else + echo "configure: failed program was:" >&5 + cat conftest.$ac_ext >&5 + rm -fr conftest* + ac_cv_sizeof_long_long=0 +fi +rm -fr conftest* +fi + +fi +echo "$ac_t""$ac_cv_sizeof_long_long" 1>&6 +cat >> confdefs.h </dev/null 2>&1; then : +else { echo "configure: error: can not run $ac_config_sub" 1>&2; exit 1; } +fi + +echo $ac_n "checking host system type""... $ac_c" 1>&6 +echo "configure:2304: checking host system type" >&5 + +host_alias=$host +case "$host_alias" in +NONE) + case $nonopt in + NONE) + if host_alias=`${CONFIG_SHELL-/bin/sh} $ac_config_guess`; then : + else { echo "configure: error: can not guess host type; you must specify one" 1>&2; exit 1; } + fi ;; + *) host_alias=$nonopt ;; + esac ;; +esac + +host=`${CONFIG_SHELL-/bin/sh} $ac_config_sub $host_alias` +host_cpu=`echo $host | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\1/'` +host_vendor=`echo $host | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\2/'` +host_os=`echo $host | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\3/'` +echo "$ac_t""$host" 1>&6 + +cat >> confdefs.h <&6 +echo "configure:2330: checking return type of signal handlers" >&5 +if eval "test \"`echo '$''{'ac_cv_type_signal'+set}'`\" = set"; then + echo $ac_n "(cached) $ac_c" 1>&6 +else + cat > conftest.$ac_ext < +#include +#ifdef signal +#undef signal +#endif +#ifdef __cplusplus +extern "C" void (*signal (int, void (*)(int)))(int); +#else +void (*signal ()) (); +#endif + +int main() { +int i; +; return 0; } +EOF +if { (eval echo configure:2352: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then + rm -rf conftest* + ac_cv_type_signal=void +else + echo "configure: failed program was:" >&5 + cat conftest.$ac_ext >&5 + rm -rf conftest* + ac_cv_type_signal=int +fi +rm -f conftest* +fi + +echo "$ac_t""$ac_cv_type_signal" 1>&6 +cat >> confdefs.h <&6 +echo "configure:2371: checking for vprintf" >&5 +if eval "test \"`echo '$''{'ac_cv_func_vprintf'+set}'`\" = set"; then + echo $ac_n "(cached) $ac_c" 1>&6 +else + cat > conftest.$ac_ext < +/* Override any gcc2 internal prototype to avoid an error. */ +/* We use char because int might match the return type of a gcc2 + builtin and then its argument prototype would still apply. */ +char vprintf(); + +int main() { + +/* The GNU C library defines this for functions which it implements + to always fail with ENOSYS. Some functions are actually named + something starting with __ and the normal name is an alias. */ +#if defined (__stub_vprintf) || defined (__stub___vprintf) +choke me +#else +vprintf(); +#endif + +; return 0; } +EOF +if { (eval echo configure:2399: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then + rm -rf conftest* + eval "ac_cv_func_vprintf=yes" +else + echo "configure: failed program was:" >&5 + cat conftest.$ac_ext >&5 + rm -rf conftest* + eval "ac_cv_func_vprintf=no" +fi +rm -f conftest* +fi + +if eval "test \"`echo '$ac_cv_func_'vprintf`\" = yes"; then + echo "$ac_t""yes" 1>&6 + cat >> confdefs.h <<\EOF +#define HAVE_VPRINTF 1 +EOF + +else + echo "$ac_t""no" 1>&6 +fi + +if test "$ac_cv_func_vprintf" != yes; then +echo $ac_n "checking for _doprnt""... $ac_c" 1>&6 +echo "configure:2423: checking for _doprnt" >&5 +if eval "test \"`echo '$''{'ac_cv_func__doprnt'+set}'`\" = set"; then + echo $ac_n "(cached) $ac_c" 1>&6 +else + cat > conftest.$ac_ext < +/* Override any gcc2 internal prototype to avoid an error. */ +/* We use char because int might match the return type of a gcc2 + builtin and then its argument prototype would still apply. */ +char _doprnt(); + +int main() { + +/* The GNU C library defines this for functions which it implements + to always fail with ENOSYS. Some functions are actually named + something starting with __ and the normal name is an alias. */ +#if defined (__stub__doprnt) || defined (__stub____doprnt) +choke me +#else +_doprnt(); +#endif + +; return 0; } +EOF +if { (eval echo configure:2451: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then + rm -rf conftest* + eval "ac_cv_func__doprnt=yes" +else + echo "configure: failed program was:" >&5 + cat conftest.$ac_ext >&5 + rm -rf conftest* + eval "ac_cv_func__doprnt=no" +fi +rm -f conftest* +fi + +if eval "test \"`echo '$ac_cv_func_'_doprnt`\" = yes"; then + echo "$ac_t""yes" 1>&6 + cat >> confdefs.h <<\EOF +#define HAVE_DOPRNT 1 +EOF + +else + echo "$ac_t""no" 1>&6 +fi + +fi + +for ac_func in socket \ + select \ + strdup \ + strstr \ + strftime \ + uname \ + strcasecmp \ + gethostname \ + gethostbyaddr \ + getservbyname \ + gettimeofday \ + inet_addr \ + inet_ntoa \ + tcsetattr \ + tcgetattr \ + perror \ + getpass \ + closesocket + +do +echo $ac_n "checking for $ac_func""... $ac_c" 1>&6 +echo "configure:2496: checking for $ac_func" >&5 +if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then + echo $ac_n "(cached) $ac_c" 1>&6 +else + cat > conftest.$ac_ext < +/* Override any gcc2 internal prototype to avoid an error. */ +/* We use char because int might match the return type of a gcc2 + builtin and then its argument prototype would still apply. */ +char $ac_func(); + +int main() { + +/* The GNU C library defines this for functions which it implements + to always fail with ENOSYS. Some functions are actually named + something starting with __ and the normal name is an alias. */ +#if defined (__stub_$ac_func) || defined (__stub___$ac_func) +choke me +#else +$ac_func(); +#endif + +; return 0; } +EOF +if { (eval echo configure:2524: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then + rm -rf conftest* + eval "ac_cv_func_$ac_func=yes" +else + echo "configure: failed program was:" >&5 + cat conftest.$ac_ext >&5 + rm -rf conftest* + eval "ac_cv_func_$ac_func=no" +fi +rm -f conftest* +fi + +if eval "test \"`echo '$ac_cv_func_'$ac_func`\" = yes"; then + echo "$ac_t""yes" 1>&6 + ac_tr_func=HAVE_`echo $ac_func | tr 'abcdefghijklmnopqrstuvwxyz' 'ABCDEFGHIJKLMNOPQRSTUVWXYZ'` + cat >> confdefs.h <&6 +fi +done + + + + +# Extract the first word of "perl", so it can be a program name with args. +set dummy perl; ac_word=$2 +echo $ac_n "checking for $ac_word""... $ac_c" 1>&6 +echo "configure:2554: checking for $ac_word" >&5 +if eval "test \"`echo '$''{'ac_cv_path_PERL'+set}'`\" = set"; then + echo $ac_n "(cached) $ac_c" 1>&6 +else + case "$PERL" in + /*) + ac_cv_path_PERL="$PERL" # Let the user override the test with a path. + ;; + ?:/*) + ac_cv_path_PERL="$PERL" # Let the user override the test with a dos path. + ;; + *) + IFS="${IFS= }"; ac_save_ifs="$IFS"; IFS=":" + ac_dummy="$PATH:/usr/local/bin/perl:/usr/bin/:/usr/local/bin " + for ac_dir in $ac_dummy; do + test -z "$ac_dir" && ac_dir=. + if test -f $ac_dir/$ac_word; then + ac_cv_path_PERL="$ac_dir/$ac_word" + break + fi + done + IFS="$ac_save_ifs" + ;; +esac +fi +PERL="$ac_cv_path_PERL" +if test -n "$PERL"; then + echo "$ac_t""$PERL" 1>&6 +else + echo "$ac_t""no" 1>&6 +fi + + + +for ac_prog in nroff gnroff +do +# Extract the first word of "$ac_prog", so it can be a program name with args. +set dummy $ac_prog; ac_word=$2 +echo $ac_n "checking for $ac_word""... $ac_c" 1>&6 +echo "configure:2593: checking for $ac_word" >&5 +if eval "test \"`echo '$''{'ac_cv_path_NROFF'+set}'`\" = set"; then + echo $ac_n "(cached) $ac_c" 1>&6 +else + case "$NROFF" in + /*) + ac_cv_path_NROFF="$NROFF" # Let the user override the test with a path. + ;; + ?:/*) + ac_cv_path_NROFF="$NROFF" # Let the user override the test with a dos path. + ;; + *) + IFS="${IFS= }"; ac_save_ifs="$IFS"; IFS=":" + ac_dummy="$PATH:/usr/bin/:/usr/local/bin " + for ac_dir in $ac_dummy; do + test -z "$ac_dir" && ac_dir=. + if test -f $ac_dir/$ac_word; then + ac_cv_path_NROFF="$ac_dir/$ac_word" + break + fi + done + IFS="$ac_save_ifs" + ;; +esac +fi +NROFF="$ac_cv_path_NROFF" +if test -n "$NROFF"; then + echo "$ac_t""$NROFF" 1>&6 +else + echo "$ac_t""no" 1>&6 +fi + +test -n "$NROFF" && break +done + + + +# Extract the first word of "ranlib", so it can be a program name with args. +set dummy ranlib; ac_word=$2 +echo $ac_n "checking for $ac_word""... $ac_c" 1>&6 +echo "configure:2633: checking for $ac_word" >&5 +if eval "test \"`echo '$''{'ac_cv_prog_RANLIB'+set}'`\" = set"; then + echo $ac_n "(cached) $ac_c" 1>&6 +else + if test -n "$RANLIB"; then + ac_cv_prog_RANLIB="$RANLIB" # Let the user override the test. +else + IFS="${IFS= }"; ac_save_ifs="$IFS"; IFS=":" + ac_dummy="$PATH" + for ac_dir in $ac_dummy; do + test -z "$ac_dir" && ac_dir=. + if test -f $ac_dir/$ac_word; then + ac_cv_prog_RANLIB="ranlib" + break + fi + done + IFS="$ac_save_ifs" + test -z "$ac_cv_prog_RANLIB" && ac_cv_prog_RANLIB=":" +fi +fi +RANLIB="$ac_cv_prog_RANLIB" +if test -n "$RANLIB"; then + echo "$ac_t""$RANLIB" 1>&6 +else + echo "$ac_t""no" 1>&6 +fi + +for ac_prog in 'bison -y' byacc +do +# Extract the first word of "$ac_prog", so it can be a program name with args. +set dummy $ac_prog; ac_word=$2 +echo $ac_n "checking for $ac_word""... $ac_c" 1>&6 +echo "configure:2665: checking for $ac_word" >&5 +if eval "test \"`echo '$''{'ac_cv_prog_YACC'+set}'`\" = set"; then + echo $ac_n "(cached) $ac_c" 1>&6 +else + if test -n "$YACC"; then + ac_cv_prog_YACC="$YACC" # Let the user override the test. +else + IFS="${IFS= }"; ac_save_ifs="$IFS"; IFS=":" + ac_dummy="$PATH" + for ac_dir in $ac_dummy; do + test -z "$ac_dir" && ac_dir=. + if test -f $ac_dir/$ac_word; then + ac_cv_prog_YACC="$ac_prog" + break + fi + done + IFS="$ac_save_ifs" +fi +fi +YACC="$ac_cv_prog_YACC" +if test -n "$YACC"; then + echo "$ac_t""$YACC" 1>&6 +else + echo "$ac_t""no" 1>&6 +fi + +test -n "$YACC" && break +done +test -n "$YACC" || YACC="yacc" + + + +trap '' 1 2 15 +cat > confcache <<\EOF +# 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. It is not useful on other systems. +# If it contains results you don't want to keep, you may remove or edit it. +# +# By default, configure uses ./config.cache as the cache file, +# creating it if it does not exist already. You can give configure +# the --cache-file=FILE option to use a different cache file; that is +# what configure does when it calls configure scripts in +# subdirectories, so they share the cache. +# Giving --cache-file=/dev/null disables caching, for debugging configure. +# config.status only pays attention to the cache file if you give it the +# --recheck option to rerun configure. +# +EOF +# The following way of writing the cache mishandles newlines in values, +# but we know of no workaround that is simple, portable, and efficient. +# So, don't put newlines in cache variables' values. +# Ultrix sh set writes to stderr and can't be redirected directly, +# and sets the high bit in the cache file unless we assign to the vars. +(set) 2>&1 | + case `(ac_space=' '; set | grep ac_space) 2>&1` in + *ac_space=\ *) + # `set' does not quote correctly, so add quotes (double-quote substitution + # turns \\\\ into \\, and sed turns \\ into \). + sed -n \ + -e "s/'/'\\\\''/g" \ + -e "s/^\\([a-zA-Z0-9_]*_cv_[a-zA-Z0-9_]*\\)=\\(.*\\)/\\1=\${\\1='\\2'}/p" + ;; + *) + # `set' quotes correctly as required by POSIX, so do not add quotes. + sed -n -e 's/^\([a-zA-Z0-9_]*_cv_[a-zA-Z0-9_]*\)=\(.*\)/\1=${\1=\2}/p' + ;; + esac >> confcache +if cmp -s $cache_file confcache; then + : +else + if test -w $cache_file; then + echo "updating cache $cache_file" + cat confcache > $cache_file + else + echo "not updating unwritable cache $cache_file" + fi +fi +rm -f confcache + +trap 'rm -fr conftest* confdefs* core core.* *.core $ac_clean_files; exit 1' 1 2 15 + +test "x$prefix" = xNONE && prefix=$ac_default_prefix +# Let make expand exec_prefix. +test "x$exec_prefix" = xNONE && exec_prefix='${prefix}' + +# Any assignment to VPATH causes Sun make to only execute +# the first set of double-colon rules, so remove it if not needed. +# If there is a colon in the path, we need to keep it. +if test "x$srcdir" = x.; then + ac_vpsub='/^[ ]*VPATH[ ]*=[^:]*$/d' +fi + +trap 'rm -f $CONFIG_STATUS conftest*; exit 1' 1 2 15 + +DEFS=-DHAVE_CONFIG_H + +# Without the "./", some shells look in PATH for config.status. +: ${CONFIG_STATUS=./config.status} + +echo creating $CONFIG_STATUS +rm -f $CONFIG_STATUS +cat > $CONFIG_STATUS </dev/null | sed 1q`: +# +# $0 $ac_configure_args +# +# Compiler output produced by configure, useful for debugging +# configure, is in ./config.log if it exists. + +ac_cs_usage="Usage: $CONFIG_STATUS [--recheck] [--version] [--help]" +for ac_option +do + case "\$ac_option" in + -recheck | --recheck | --rechec | --reche | --rech | --rec | --re | --r) + echo "running \${CONFIG_SHELL-/bin/sh} $0 $ac_configure_args --no-create --no-recursion" + exec \${CONFIG_SHELL-/bin/sh} $0 $ac_configure_args --no-create --no-recursion ;; + -version | --version | --versio | --versi | --vers | --ver | --ve | --v) + echo "$CONFIG_STATUS generated by autoconf version 2.13" + exit 0 ;; + -help | --help | --hel | --he | --h) + echo "\$ac_cs_usage"; exit 0 ;; + *) echo "\$ac_cs_usage"; exit 1 ;; + esac +done + +ac_given_srcdir=$srcdir +ac_given_INSTALL="$INSTALL" + +trap 'rm -fr `echo "Makefile \ + src/Makefile \ + lib/Makefile \ + perl/checklinks.pl \ + perl/getlinks.pl \ + perl/formfind.pl \ + perl/recursiveftpget.pl config.h src/config.h" | sed "s/:[^ ]*//g"` conftest*; exit 1' 1 2 15 +EOF +cat >> $CONFIG_STATUS < conftest.subs <<\\CEOF +$ac_vpsub +$extrasub +s%@SHELL@%$SHELL%g +s%@CFLAGS@%$CFLAGS%g +s%@CPPFLAGS@%$CPPFLAGS%g +s%@CXXFLAGS@%$CXXFLAGS%g +s%@FFLAGS@%$FFLAGS%g +s%@DEFS@%$DEFS%g +s%@LDFLAGS@%$LDFLAGS%g +s%@LIBS@%$LIBS%g +s%@exec_prefix@%$exec_prefix%g +s%@prefix@%$prefix%g +s%@program_transform_name@%$program_transform_name%g +s%@bindir@%$bindir%g +s%@sbindir@%$sbindir%g +s%@libexecdir@%$libexecdir%g +s%@datadir@%$datadir%g +s%@sysconfdir@%$sysconfdir%g +s%@sharedstatedir@%$sharedstatedir%g +s%@localstatedir@%$localstatedir%g +s%@libdir@%$libdir%g +s%@includedir@%$includedir%g +s%@oldincludedir@%$oldincludedir%g +s%@infodir@%$infodir%g +s%@mandir@%$mandir%g +s%@INSTALL_PROGRAM@%$INSTALL_PROGRAM%g +s%@INSTALL_SCRIPT@%$INSTALL_SCRIPT%g +s%@INSTALL_DATA@%$INSTALL_DATA%g +s%@PACKAGE@%$PACKAGE%g +s%@VERSION@%$VERSION%g +s%@ACLOCAL@%$ACLOCAL%g +s%@AUTOCONF@%$AUTOCONF%g +s%@AUTOMAKE@%$AUTOMAKE%g +s%@AUTOHEADER@%$AUTOHEADER%g +s%@MAKEINFO@%$MAKEINFO%g +s%@SET_MAKE@%$SET_MAKE%g +s%@CC@%$CC%g +s%@CPP@%$CPP%g +s%@host@%$host%g +s%@host_alias@%$host_alias%g +s%@host_cpu@%$host_cpu%g +s%@host_vendor@%$host_vendor%g +s%@host_os@%$host_os%g +s%@PERL@%$PERL%g +s%@NROFF@%$NROFF%g +s%@RANLIB@%$RANLIB%g +s%@YACC@%$YACC%g + +CEOF +EOF + +cat >> $CONFIG_STATUS <<\EOF + +# Split the substitutions into bite-sized pieces for seds with +# small command number limits, like on Digital OSF/1 and HP-UX. +ac_max_sed_cmds=90 # Maximum number of lines to put in a sed script. +ac_file=1 # Number of current file. +ac_beg=1 # First line for current file. +ac_end=$ac_max_sed_cmds # Line after last line for current file. +ac_more_lines=: +ac_sed_cmds="" +while $ac_more_lines; do + if test $ac_beg -gt 1; then + sed "1,${ac_beg}d; ${ac_end}q" conftest.subs > conftest.s$ac_file + else + sed "${ac_end}q" conftest.subs > conftest.s$ac_file + fi + if test ! -s conftest.s$ac_file; then + ac_more_lines=false + rm -f conftest.s$ac_file + else + if test -z "$ac_sed_cmds"; then + ac_sed_cmds="sed -f conftest.s$ac_file" + else + ac_sed_cmds="$ac_sed_cmds | sed -f conftest.s$ac_file" + fi + ac_file=`expr $ac_file + 1` + ac_beg=$ac_end + ac_end=`expr $ac_end + $ac_max_sed_cmds` + fi +done +if test -z "$ac_sed_cmds"; then + ac_sed_cmds=cat +fi +EOF + +cat >> $CONFIG_STATUS <> $CONFIG_STATUS <<\EOF +for ac_file in .. $CONFIG_FILES; do if test "x$ac_file" != x..; then + # Support "outfile[:infile[:infile...]]", defaulting infile="outfile.in". + case "$ac_file" in + *:*) ac_file_in=`echo "$ac_file"|sed 's%[^:]*:%%'` + ac_file=`echo "$ac_file"|sed 's%:.*%%'` ;; + *) ac_file_in="${ac_file}.in" ;; + esac + + # Adjust a relative srcdir, top_srcdir, and INSTALL for subdirectories. + + # Remove last slash and all that follows it. Not all systems have dirname. + ac_dir=`echo $ac_file|sed 's%/[^/][^/]*$%%'` + if test "$ac_dir" != "$ac_file" && test "$ac_dir" != .; then + # The file is in a subdirectory. + test ! -d "$ac_dir" && mkdir "$ac_dir" + ac_dir_suffix="/`echo $ac_dir|sed 's%^\./%%'`" + # A "../" for each directory in $ac_dir_suffix. + ac_dots=`echo $ac_dir_suffix|sed 's%/[^/]*%../%g'` + else + ac_dir_suffix= ac_dots= + fi + + case "$ac_given_srcdir" in + .) srcdir=. + if test -z "$ac_dots"; then top_srcdir=. + else top_srcdir=`echo $ac_dots|sed 's%/$%%'`; fi ;; + /*) srcdir="$ac_given_srcdir$ac_dir_suffix"; top_srcdir="$ac_given_srcdir" ;; + *) # Relative path. + srcdir="$ac_dots$ac_given_srcdir$ac_dir_suffix" + top_srcdir="$ac_dots$ac_given_srcdir" ;; + esac + + case "$ac_given_INSTALL" in + [/$]*) INSTALL="$ac_given_INSTALL" ;; + *) INSTALL="$ac_dots$ac_given_INSTALL" ;; + esac + + echo creating "$ac_file" + rm -f "$ac_file" + configure_input="Generated automatically from `echo $ac_file_in|sed 's%.*/%%'` by configure." + case "$ac_file" in + *Makefile*) ac_comsub="1i\\ +# $configure_input" ;; + *) ac_comsub= ;; + esac + + ac_file_inputs=`echo $ac_file_in|sed -e "s%^%$ac_given_srcdir/%" -e "s%:% $ac_given_srcdir/%g"` + sed -e "$ac_comsub +s%@configure_input@%$configure_input%g +s%@srcdir@%$srcdir%g +s%@top_srcdir@%$top_srcdir%g +s%@INSTALL@%$INSTALL%g +" $ac_file_inputs | (eval "$ac_sed_cmds") > $ac_file +fi; done +rm -f conftest.s* + +# These sed commands are passed to sed as "A NAME B NAME C VALUE D", where +# NAME is the cpp macro being defined and VALUE is the value it is being given. +# +# ac_d sets the value in "#define NAME VALUE" lines. +ac_dA='s%^\([ ]*\)#\([ ]*define[ ][ ]*\)' +ac_dB='\([ ][ ]*\)[^ ]*%\1#\2' +ac_dC='\3' +ac_dD='%g' +# ac_u turns "#undef NAME" with trailing blanks into "#define NAME VALUE". +ac_uA='s%^\([ ]*\)#\([ ]*\)undef\([ ][ ]*\)' +ac_uB='\([ ]\)%\1#\2define\3' +ac_uC=' ' +ac_uD='\4%g' +# ac_e turns "#undef NAME" without trailing blanks into "#define NAME VALUE". +ac_eA='s%^\([ ]*\)#\([ ]*\)undef\([ ][ ]*\)' +ac_eB='$%\1#\2define\3' +ac_eC=' ' +ac_eD='%g' + +if test "${CONFIG_HEADERS+set}" != set; then +EOF +cat >> $CONFIG_STATUS <> $CONFIG_STATUS <<\EOF +fi +for ac_file in .. $CONFIG_HEADERS; do if test "x$ac_file" != x..; then + # Support "outfile[:infile[:infile...]]", defaulting infile="outfile.in". + case "$ac_file" in + *:*) ac_file_in=`echo "$ac_file"|sed 's%[^:]*:%%'` + ac_file=`echo "$ac_file"|sed 's%:.*%%'` ;; + *) ac_file_in="${ac_file}.in" ;; + esac + + echo creating $ac_file + + rm -f conftest.frag conftest.in conftest.out + ac_file_inputs=`echo $ac_file_in|sed -e "s%^%$ac_given_srcdir/%" -e "s%:% $ac_given_srcdir/%g"` + cat $ac_file_inputs > conftest.in + +EOF + +# Transform confdefs.h into a sed script conftest.vals that substitutes +# the proper values into config.h.in to produce config.h. And first: +# Protect against being on the right side of a sed subst in config.status. +# Protect against being in an unquoted here document in config.status. +rm -f conftest.vals +cat > conftest.hdr <<\EOF +s/[\\&%]/\\&/g +s%[\\$`]%\\&%g +s%#define \([A-Za-z_][A-Za-z0-9_]*\) *\(.*\)%${ac_dA}\1${ac_dB}\1${ac_dC}\2${ac_dD}%gp +s%ac_d%ac_u%gp +s%ac_u%ac_e%gp +EOF +sed -n -f conftest.hdr confdefs.h > conftest.vals +rm -f conftest.hdr + +# This sed command replaces #undef with comments. This is necessary, for +# example, in the case of _POSIX_SOURCE, which is predefined and required +# on some systems where configure will not decide to define it. +cat >> conftest.vals <<\EOF +s%^[ ]*#[ ]*undef[ ][ ]*[a-zA-Z_][a-zA-Z_0-9]*%/* & */% +EOF + +# Break up conftest.vals because some shells have a limit on +# the size of here documents, and old seds have small limits too. + +rm -f conftest.tail +while : +do + ac_lines=`grep -c . conftest.vals` + # grep -c gives empty output for an empty file on some AIX systems. + if test -z "$ac_lines" || test "$ac_lines" -eq 0; then break; fi + # Write a limited-size here document to conftest.frag. + echo ' cat > conftest.frag <> $CONFIG_STATUS + sed ${ac_max_here_lines}q conftest.vals >> $CONFIG_STATUS + echo 'CEOF + sed -f conftest.frag conftest.in > conftest.out + rm -f conftest.in + mv conftest.out conftest.in +' >> $CONFIG_STATUS + sed 1,${ac_max_here_lines}d conftest.vals > conftest.tail + rm -f conftest.vals + mv conftest.tail conftest.vals +done +rm -f conftest.vals + +cat >> $CONFIG_STATUS <<\EOF + rm -f conftest.frag conftest.h + echo "/* $ac_file. Generated automatically by configure. */" > conftest.h + cat conftest.in >> conftest.h + rm -f conftest.in + if cmp -s $ac_file conftest.h 2>/dev/null; then + echo "$ac_file is unchanged" + rm -f conftest.h + else + # Remove last slash and all that follows it. Not all systems have dirname. + ac_dir=`echo $ac_file|sed 's%/[^/][^/]*$%%'` + if test "$ac_dir" != "$ac_file" && test "$ac_dir" != .; then + # The file is in a subdirectory. + test ! -d "$ac_dir" && mkdir "$ac_dir" + fi + rm -f $ac_file + mv conftest.h $ac_file + fi +fi; done + +EOF +cat >> $CONFIG_STATUS <> $CONFIG_STATUS <<\EOF +am_indx=1 +for am_file in config.h src/config.h; do + case " $CONFIG_HEADERS " in + *" $am_file "*) + echo timestamp > `echo $am_file | sed -e 's%:.*%%' -e 's%[^/]*$%%'`stamp-h$am_indx + ;; + esac + am_indx=`expr "$am_indx" + 1` +done + +exit 0 +EOF +chmod +x $CONFIG_STATUS +rm -fr confdefs* $ac_clean_files +test "$no_create" = yes || ${CONFIG_SHELL-/bin/sh} $CONFIG_STATUS || exit 1 + diff --git a/configure.in b/configure.in new file mode 100644 index 000000000..17418fd64 --- /dev/null +++ b/configure.in @@ -0,0 +1,210 @@ +dnl $Id$ +dnl Process this file with autoconf to produce a configure script. +AC_INIT(lib/urldata.h) +AM_CONFIG_HEADER(config.h src/config.h) +AM_INIT_AUTOMAKE(curl,"6.3.1") + +dnl Checks for programs. +AC_PROG_CC +AC_PROG_INSTALL +AC_PROG_MAKE_SET + +dnl Check for AIX weirdos +AC_AIX + +dnl ********************************************************************** +dnl Checks for libraries. +dnl ********************************************************************** + +dnl nsl lib? +AC_CHECK_FUNC(gethostbyname, , AC_CHECK_LIB(nsl, gethostbyname)) + +dnl resolve lib? +AC_CHECK_FUNC(strcasecmp, , AC_CHECK_LIB(resolve, strcasecmp)) + +dnl socket lib? +AC_CHECK_FUNC(connect, , AC_CHECK_LIB(socket, connect)) + +dnl ucb lib? +AC_CHECK_FUNC(gethostname, , AC_CHECK_LIB(ucb, gethostname)) + +dnl dl lib? +AC_CHECK_FUNC(dlopen, , AC_CHECK_LIB(dl, dlopen)) + +dnl ********************************************************************** +dnl Check for the presence of SSL libraries and headers +dnl ********************************************************************** + +dnl Default to compiler & linker defaults for SSL files & libraries. +OPT_SSL=off +AC_ARG_WITH(ssl,dnl +[ --with-ssl[=DIR] where to look for SSL [compiler/linker default paths] + DIR points to the SSL installation [/usr/local/ssl]], + OPT_SSL=$withval +) + +if test X"$OPT_SSL" = Xno +then + AC_MSG_WARN(SSL/https support disabled) +else + + dnl Check for & handle argument to --with-ssl. + + AC_MSG_CHECKING(where to look for SSL) + if test X"$OPT_SSL" = Xoff + then + AC_MSG_RESULT([defaults (or given in environment)]) + else + test X"$OPT_SSL" = Xyes && OPT_SSL=/usr/local/ssl + LIBS="$LIBS -L$OPT_SSL/lib" + CPPFLAGS="$CPPFLAGS -I$OPT_SSL/include/openssl -I$OPT_SSL/include" + AC_MSG_RESULT([$OPT_SSL]) + fi + + dnl check for crypto libs (part of SSLeay) + AC_CHECK_LIB(crypto, CRYPTO_lock) + + if test $ac_cv_lib_crypto_CRYPTO_lock = yes; then + dnl This is only reasonable to do if crypto actually is there: check for + dnl SSL libs NOTE: it is important to do this AFTER the crypto lib + AC_CHECK_LIB(ssl, SSL_connect) + + dnl Check for SSLeay headers + AC_CHECK_HEADERS(openssl/x509.h openssl/rsa.h openssl/crypto.h openssl/pem.h openssl/ssl.h openssl/err.h) + + if test $ac_cv_header_openssl_x509_h = no; then + AC_CHECK_HEADERS(x509.h rsa.h crypto.h pem.h ssl.h err.h) + fi + + fi +fi + +dnl ********************************************************************** +dnl Check for the presence of ZLIB libraries and headers +dnl ********************************************************************** + +dnl Default to compiler & linker defaults for files & libraries. +dnl OPT_ZLIB=no +dnl AC_ARG_WITH(zlib,dnl +dnl [ --with-zlib[=DIR] where to look for ZLIB [compiler/linker default paths] +dnl DIR points to the ZLIB installation prefix [/usr/local]], +dnl OPT_ZLIB=$withval, +dnl ) + +dnl Check for & handle argument to --with-zlib. +dnl +dnl NOTE: We *always* look for ZLIB headers & libraries, all this option +dnl does is change where we look (by adjusting LIBS and CPPFLAGS.) +dnl + +dnl AC_MSG_CHECKING(where to look for ZLIB) +dnl if test X"$OPT_ZLIB" = Xno +dnl then +dnl AC_MSG_RESULT([defaults (or given in environment)]) +dnl else +dnl test X"$OPT_ZLIB" = Xyes && OPT_ZLIB=/usr/local +dnl LIBS="$LIBS -L$OPT_ZLIB/lib" +dnl CPPFLAGS="$CPPFLAGS -I$OPT_ZLIB/include" +dnl AC_MSG_RESULT([$OPT_ZLIB]) +dnl fi + +dnl z lib? +dnl AC_CHECK_FUNC(gzread, , AC_CHECK_LIB(z, gzread)) + +dnl ********************************************************************** +dnl Back to "normal" configuring +dnl ********************************************************************** + +dnl Checks for header files. +AC_HEADER_STDC +AC_CHECK_HEADERS( \ + unistd.h \ + arpa/inet.h \ + net/if.h \ + netinet/in.h \ + netdb.h \ + sys/select.h \ + sys/socket.h \ + sys/sockio.h \ + sys/stat.h \ + sys/types.h \ + getopt.h \ + sys/param.h \ + termios.h \ + termio.h \ + sgtty.h \ + fcntl.h \ + dlfcn.h \ + alloca.h \ + winsock.h \ + time.h \ + io.h \ +) + +dnl Check for libz header +dnl AC_CHECK_HEADERS(zlib.h) + +dnl Checks for typedefs, structures, and compiler characteristics. +AC_C_CONST +AC_TYPE_SIZE_T +AC_HEADER_TIME + +# mprintf() checks: + +# check for 'long double' +AC_CHECK_SIZEOF(long double, 8) +# check for 'long long' +AC_CHECK_SIZEOF(long long, 4) + +dnl Get system canonical name +AC_CANONICAL_HOST +AC_DEFINE_UNQUOTED(OS, "${host}") + +dnl Checks for library functions. +dnl AC_PROG_GCC_TRADITIONAL +AC_TYPE_SIGNAL +AC_FUNC_VPRINTF +AC_CHECK_FUNCS( socket \ + select \ + strdup \ + strstr \ + strftime \ + uname \ + strcasecmp \ + gethostname \ + gethostbyaddr \ + getservbyname \ + gettimeofday \ + inet_addr \ + inet_ntoa \ + tcsetattr \ + tcgetattr \ + perror \ + getpass \ + closesocket +) + + + +AC_PATH_PROG( PERL, perl, , + $PATH:/usr/local/bin/perl:/usr/bin/:/usr/local/bin ) +AC_SUBST(PERL) + +AC_PATH_PROGS( NROFF, nroff gnroff, , + $PATH:/usr/bin/:/usr/local/bin ) +AC_SUBST(NROFF) + +AC_PROG_RANLIB +AC_PROG_YACC + +dnl AC_PATH_PROG( RANLIB, ranlib, /usr/bin/ranlib, +dnl $PATH:/usr/bin/:/usr/local/bin ) +dnl AC_SUBST(RANLIB) + +AC_OUTPUT( Makefile \ + src/Makefile \ + lib/Makefile \ + perl/checklinks.pl \ + perl/getlinks.pl \ + perl/formfind.pl \ + perl/recursiveftpget.pl ) diff --git a/curl-6.3.1.tar.gz b/curl-6.3.1.tar.gz new file mode 100644 index 0000000000000000000000000000000000000000..38bba51aa8910f0d41d755f44a007753df656eb0 GIT binary patch literal 242680 zcmV(vKuG{MNc=LKi`P{DT<=aXIuR9`OZ`RssA?Ula0-t z=Q}%3H|h7yjptiC{}es@r+>h|Sy?4T6#dg6DXWh?H!RW*AO7k8x_^DY{|9gPPv0DN z|Neb!ZfxxAJhuN^o7${}gTfy8r*_|DsR+d(Z!SPygiiC~AD- zh4=6OJ(B;U7yiUQKlRdj66AMCKbKS$|^7BQ9g_gZj#A$S~eQrr$w3NlZfw6qwzYKWa%hc-P(>$^SgB1ON(gp z#fukfFB?%i>NM}t=q4FN)lF7LXGK4iX9rn2z(|u(KDmzWv+9PLOR2T~O*TpC_oRw$^0G)2PQe;VQlt$&Oe-kBT z)TFj1$vFMG8AqK8t=-e7m?*77MN5_Pf>YfgBGsy2JqdXbJ(E+A5 z$Oe;U6;UJ8Q9_T>EVGJ7JT203Qq78VG>?)V9Smx|mkwzsY$wx6l@+OLk>BEmQhFAX zr?1j7n&kJfKdPHAmL1iDn}Rm>BpFq`d9>TdUwg?6Bar#g3ehO~v>Qo<0riWl%KF*Q z>3}CUqH{ybi$N7Bjd?=jz~s86S{r14?$v|6+$MLxT}k;fyN zA&x8B%F$twPWm(pIvvy~{nf8hxl!Syo-do!c`_SCZ-w(oQQ)IEUT?R@$%l58jp?XNE4uHpacPOI!WrQ~;^A_X-$&(~j^tRT6^*jnlnww6 z8m%P`;_4cmBg{6(>o{k8pC@|zhuMc{o>r~sC!zqf9OWpxzNu)9N4UT}+SlCf`8c_y zmEbFpe#p>P!L)%csw^>vjLFbm7Aa8(ItF}zUlHkFmFhyNxWO=-?FH=e#8S-Mtb zhHFG;pMH$BLkxvZ9XC!bma-K0M58Wm@-dyax3hvqoqnMEl3}Cl{SxOM#A2V?NN|2Y zH!&KwXIo2YCN1r3f@8r%(r(Wry{FyJZ!}*8(eVSfObEh3^E)WA^~p>FUx4P z{qq{gEcQPc-6!)>Zb~_o(@b{`E!?L)C8~Vd@zEgf&&G7mv7?~Sa{o*IWI|KUM>5rG znrJH`LWbqy%am2_#1a|l-{=

nvsZ>BbmG`@@QQq}?4T^(|>sSdz_c;&M+h-HW4x zXlrM4r$tKu{&7p}V@&PS3(_v16Xq-+H?kKv@n~*LEcAY&x0}}fJ{^r{=Z12SxjCMk z9}~@%$BkRT$GRXwJ4_3-MhjuoFr<*H3C}|LoNjk1RK1tdXozs6*O2{qarI5$;^()Wv;~SF}C( zm`^CR%Pa@ndO{yu(@b(2O@*!pX-PzsuGS5$m#{#-T0~vSxW-fWiOfg43H^6(TGG?B z$jWr+_z|m4O8)0kkcTQ8!sewEkfxFzewPF0w{*h$PIej`ziF9FSe&C7AZYVz@)=TR)nc?uX zjO>8{j1!_bW9rfgeW^Z14PBLbu!?oG)o$~gqmm?RB9f~_Q|_{SR?;?upttkMXs#sV z;nqaEW!j@HDE9QH+{oDRn@+8s!p*LaEvF_9Bo5UeWgrwD}^y-hr5p=a52RaGV=z`k?} z(m_sQ(xhr1rzA+-yo`RJfB2G)1g$dhF}lE`)L$$izAYZqD5X<~qr=_hyvegkMv}Xp zzpH-ra~zhFh)b538>A9d z9!P?PP&Fihpt=#EGZDs3V#|kl3lB915Z_G3_Upsq9*J{wf#xwQj~(J^I6SiQc>zMA z$L$YSXP1Y}Ua$t~hqOO~lu<%KlZ%1f;m<44@8lLSSCYehP4mOcD)U2L6iT73#-2>d zWlkqJS7_^BXJAA69Di5LCV}#RQ&Lv5;Sk4!b-*gm<3=cdInk#5nh5YEV`_g- zAF5188zhpA$ttWV%31OxUs)Pvf%RVBj5k%*!3bzIDn|i?2*uHBmX{OKfwAZ}^VqW( zmQrvas`Ntzd4NZom3Af^zco2sF1aue-UIAE&8Iff4C<%wJ)S!3M5b)8a+T4!%@UQ^ zLiUU{mT+iWQkI%uC z-MyCPvI!BLWYAJ-D?MWTIn#mFFV={P50WuyvPGYomQm9Od->0z5V=?Q;PC|!;Z{kS zitse235a=?&@r8*awosdZ$LK6=uI4bM^mY2I8d8+2QR)PZE{ehw=u2QXbdu3lHkM_ zd&~#c?lrn%az;ZYEjDVurE{j|&J#rw?r5~6csg|$x?DjrH<4~pz$^c3%P7E2GM&N|`vcQ$A!*d)tfZ;Ywr3T+Hk31z42Tg_IA=O~AqMMI+jq@I} zloqpRI-#~wO`3nn62mx6CTfki5pqY}(I&`+e@mj~OML6jDy}RK@1D6znbzfu=S$>_ zZ}Z9ZZ5DNB_q4YpPs-o1{=G+(JuYVxVPLlNBw1!q=~#cDtAy@XNmsRzt*Mg6=XIEm zMtt2jL&u`$u=Bpa$PL6A6yuY!9Z^1KnftBYe%m*~|h z@8=`dL3lhOY31OAtSUOA0j&lTm|V4NqNdc$7t!kFgLXvzV!>E+gxoG3y&>1aeW#V8!wY$luMU-XI)eiwtSP#C>Z}r5t!U+h z4i5B4Sm}kpue^*_;y6AcdN5$~Z^?FT5ZE>`A`%6Ob>F4*$O^xOtE-F!wj{oDWl8c2 zpCQuwVL76=!OD5stl`u8-DLx@p4oyWN*`sGH47zlA(9e6ibxw(tr|uJb}FPWcHs1@ z!EbSe>pd>gVpvN^5smp01$G7MKEIxjz-pU$lJujqZuEn-&dvI9CZyM6#m(-g#DvDV zenMh2%fB+U1XK+t@z$*Lc{C)U3E~Sns2TT`sk)>-&}fQmLSlH9N4uoL?1`tMl4}fc zz{vt)MKNn4e}pp>qvtM@ly{_e=l3Pk71#^2DV-KCDsy}m290j!ua24jcwqVLYqgMqP}1~UW5DO^;kNJgeclXf=gizyT;AMKQ| zQ?_5=j=@oJS>*HRkOcIR8K)_9H zx=jI+<1QXI^D^ipnIZ8!7kR`zcx9?waGdvVMI+@y%8f%O7t77Ca&bJkGh zggRT6k#&#+@Cs6^ao?CynQB!U^`uqRM=<=cbFqv}OA`BOGV$|u21zlyf?z|RYdSU;x>6Sz>yjeK_HD(r0siV-m>va&w5q_F?8rc^cFQ1ap3zMs@vj zHWeeuAhrF#vW(&W8I*C*IQ7Xsv`Lz%sZC9nXk)6D9<@U&%@7Omw91Q?bV9ozMy`n% z7?~l2ZT09xr$xJ$;NZ}jCQhEZPeoObhDhYE;4PN%v0s6?CFyLV(K5oz-id6oy%jm7 z|Aw!y^ovpJ5Eq9IfmZ}yHe1nENvrVsK3#HsPgGz@qg4_}S*L^K)gR3UsjU;WOv}ng znYSKO?FlW0&mIy0PnMs+!E(n5MBq2p8sw_dwsn^c;V^D}BX^Wqh8U0t&0_Y7hDij6 z+NrdHc*n>@Gu1X#>v?FZUGRS`qg>;BAksb4c+iRJ`sZdqZ>MPiD>u!UzimRca7H5P zis*4ER>q=#Ln04W9-e|Kzm`MHcBKeb^0BnY#K_!-uzHNArOj9A%}qW{hcn!WwMtD3vu zK`v{%?HbD}Z3<@!Q2=yLiIS~uFWIYCYVY8~!^gu;AfLGKc+}(>k#$ZwCx_xTg@;J| zm+Y_sNliu^fiCd?;#Im*;^pu={Z83q?qb~spE0FuH z)4__rWSG*G@>CX?H`Qt$P6X!m@Lq0jMBS8Btp!)yQ98;#M0Yf&V`AkKD1JkHv`5#T zc)>M%{_F-dn-LL;3CW{v4d%e*6?0GFDMbvaON^4(({?^=(>ZGQ@((_gLEAC!o%sk# zNVFDM}kjL)+}LPE>4Q64U70h6@GrWomgaX)rdJgE>t~1CclO5bVN4CpF@l%>J36zDy1b#-?DZQkQ%jp8A#K> zLn^T|${OqG*+L`6_ftp#U_i5a9w>4ivW!>USjGRU;8YENqir9kC zi=2_dc{c)`VacgDaW3a0^E9)J? zoU|Z|Kv8p_Ib|>d+Fi}JC7DO7wzX>#ja zQxcwm%Ta1rBg7AoxY9!TY%sW0un1pM-v|8JOCE#1r`{9z7}x~3x$!~_rx~d%qSAGQ z9L;)_$w_p=16Lvop6tGxllcCD9TsbGE#zd$v0*8}hsLo;T*A-+87SnsqIS_<3rkgL zRBX+xB86QoB{Voiv#HQ#HI<8@T*WqBbX9Bk?w(&=#?gfj_+WcNw<4}LiN2$ixk+xL zUHLoKzxT%dn`vBTDN*eb99l1&kM9A|6z-}gBp%aD?5fpdgGcG5Zaqhs;W#i$r&~5k zl`MMaIvNb)5O?Ve(a$~jT{mMAg=p|;6%TH|p$<2r{n<6dTi4xr!u$xF1|x^xgN3v> zI?auFF&_dABt5WnQUp)5ydh4*l$rQW0V{wUXfIKiSui?&{rSF)m$M@&^mv4ni zl!3p)tC6FNs(N!sWLO2|+2!9D%G zcSE!ML~?;xW!hjf5_gNu?60nw_CSxhsQi9h3xveHcoKi?-~5^F8L+UinX5pon*^`5 z+;wtxb;&${NRdDk5p2yJTm>^MQ3CIu^R<^^mP|!~%dRtoYC|hVd_w;^YeOYx_iAZ=y@_}$I6$AXcTP#` zVq4X<55bO?T-DRF_vaU9Km2HB>yFw&Exxv#^+ZfAU4($dEvk8CEZkKYTEz}GwKl@C zz!sFu#jVmnClWf*3Ih+(76dB}D^YQy%Kg(IGjVhtI&E{vLB07>Le7yxOKCZ~(AdKm zXmc7WEWui;$I+%-C&j=e{A6|6{xJ%a(5S{>y|~{@=2!zV`A-BtnA7~hU@^-5$=8xM zBG^E7w_Bu_i-ij$oKnauqBSZdvM~uoRb?`;@=TV7#72y)B05!2zsvBNxd>@%S+zzn z(;=eC+5}tG$Y8m%LJ4F?n|C^eXm>Iz_c-|JIxl{Ti`*MypxjURV236}xn)y2uVT`@ z%h=l|*-q??Titv}g3U+o_fg7L4b_Pj9ErnB16b>JA6aV6Y;d+A zwcZE8-4YJUTvNYX*M@3bWv*}&H^Dd!WLjY=lxd{yI;uV?6TqK;Actq)gGVK~hC8Ie?pd`x>T zrA7nc*w%fMeE1MgWW4F;YFVG-%(!;c~Hb`r5+QL?yMbuYEtRt`n6CqhtyiQy|nknkW4}jF!EupN=&(5xM9ccA<~v95K>I#DShfG3&B8;UZdk1qe+= zA`kmF3(W#u;h0p7=ccY#%zo2~=mU<)K-|hCtEO4s0@ExZfT?J~BZ8WSv59|sd@z?pA1u9)4Y-4Nebhw7C>?6f-^0#8!i|Sj84nA%efn{U5E#~XAPQ@G zK})04W=bZRbtI!(?gSF48k>>cZz_YFBifc*c%m%HKRgwZuO(M7v6KP}FL>}Y_rB~Fl&C9%in^WC&JXQ>iN1dpKizt@wXyM3K@(^Ri3NW* zN@*m!Ko>uklEnB)2oO%9(>>BBT{Ct zTgK7ZO^XvxS%xri>^LJ$B09}*IA}opXRLqjmDNqKQQx>^S5`_{mJyR|QQ3{=5Cj(P zU^9V}VVv>V;im&riG;+%M9Pn|GotBEueA+rx5)`wbXwWQF>-RF26E8;K{{tU6rVR7 zY)$h~3LE&`q93I#pXwQ8UGZqlag$bkG02ok*~M@meZyZx>LwiB%IQM*V2?9y>3%H4_cQZ9I=eVHd`|-U*}?w%w~?5k-|l}Od^QG? z>%n_JWUCE0j%TjHl$SdrXAksq9SL=m!B?C z6NZ^4F6G>?kM*q)iDp?#6ky-FkJW2QRtNfr3#km;cACmS5gKq<+(I3D^~rp(Wl1W-WAR zMjc6H5RW7R(S%&^k??6?;0Y4pDA+c1&CIUE%^h3c|9oKA3 zy9R%!Ygm~51FL$R(9pk)qkW>tyCeD|*(04lp5))~x(ZPgr4mvY=Q|HvYY|!#WlwT5 zqV{jr+wHKkID*zoWGtbzPNH3sXZEsjQqJSNh<}=jx8vIxt+PL9m3VG-iOTd^;%4~1 zZ>~9amH6(E(^2qk$$OP%4MAyueQTZVA|&`ns~RlPY)_hN65F)3#+uZu%G*Aa)A@cLqt)IB@z*SvSS+ff%j`VeTvKbeXwc>i z$Cbn}csLh+86UTqJ@F1J7jW)_q_`GHj@4#+*3?juHH{sT!EoF=doWFa`)&;@7D8W7|b2H#p32#g|z<{qeC%DVjiH@sqJGevK>gnO- z#R1xc(I)Umx|N_U$wR47$b|SvWV6_11zkf=N*QnkO{RW=z?SwmSheZ>pyt(iQ47_7 za2iRFqg(qf8PS#5E${JjuTN^$uzKjwF_;xQ4Qd4*(P0jvH6a~IAfnp9N}tk^L`U@P zk>qhXQ=93^&dsU9OQ<`m?kyY@m`-NBB7*fUuNYcre9yn^^#Fww&#vQs8PCf3AWjFf zIGK4C#s=u71S}rAy9K=&Ypu|F$R=$0@5vkX`;1}({ibUSv~ z3}6vpdj;+da3L&*@0zX39KtX+Qzcr1Ic=-g^0DS3pl}#(X}B&Bj?mYCY;J5s^Av;* z_7G|!P3F|Zm&`sTP6LPeRxx2D{Fv8U1jEAKv2DQMMlhU+ikLWO*C!-pUeybqy&MKv zD3`kZ@Kj{a=(&kCj zy`fKMQ_P{ypOBc7-MRE9j~fw!VZbIw%XW2fT)MPPpKI&g9Kt2p$Q%K+B1*1dGsMS$ zn93?)hQ}#MmC^Z(l%fH-puP_$-MPf46;N_ynMgJ zIiyVqrwAUENna$R=}q*CXgu&aqTM3trF*jpoRxHJdwDToo$--b``qGQE{TiGBaY5U zWPS&!`Lc6%%IhGX?{|*RP7g0G&Mx4pAkv>qQqB|e_ASr9!l!{u<}ly3H@4awN#bC# zH1FFneV=r1GAXVXo9mc`aw04|$~V=RQw@E-G)xJlxuThZv&mVQAuKa|f4=$pDN!j2 zoFi#**{q?5rAlg=CA%(Qwu8Q@tf5FHN}jgX9>DIs*QZut!F0E`H*%rYry!TUQ+I~#ga&dj?pO_XIXLDg}n(WN`&Llf!(>P&8CR)t=B^iSe zPZEzy0C>vZh}MeeS>!MG$J5m{^Q=e?|72iVr=mLs%H`s4UE-5Pu)@hakG8g+D~et% z1?YUg`@IVl4nm4t?mWA$1MMt^DwG;D7JK{i4@7GYZV>attV;tc|WG1$4Nh)-O62J zG40i?;;^9}{~Ygq;N+lu5${6AHk!G^Sl8UQcBr+0tzURYpv5>y%Bq-Q%}1n{CeSVQ zZm3|&vWtA_ETyc$LSyZ)O+fJJK8pdk0479Xgcgi2Bqy$iTh(SI7MXAJNy4V}vZtR5U8b8C={}^F`$(B6j__kV=Q_>VqB(K$97Q zrax#%o#p@?MJs6T>lL;xTSk!q9++7Y(d7%OO1L0f^#x&j27|fumTC2n56f<>a#_YD=>}p%hQjiy`#Rbdlavwb0H=&crn>av z_|$g(reN8dZ%ZlW^K1ENZ`M-?TN#@MyMoMW5W1QQBo8bq=cK*f7D3$|CZ#3((w%Uos8*;t2qbrR2-O(JSqr}f2!-I?CBaG2=V;E89j~s0EiUhd=YI0NIsf2MlP)8M? z=^&pI*$`-^YhYPS=dwp4m@CFhAeswx4)Sw_AwEp3AB*K911gH-$W#kqS9Jmhj4P4@ zFsd@z)j#*TqhvmGPTz-dmz@w;L{9!QQVOFwkXQ{+m$nj|1!RAndF%%Uv^Mr;fSpNz zL`)Eoa*R4qQ^a0nc&13qLXztdU6YKm?(Wr=%$w9GXNYv|X-K z)5vM8YHh$4p7e&Yyaua`rMJLkv4+`L7xTfY~t3Wk=Sm@3#+@|yc_!Y*y$cXXh5-sr`d!d1F9$7W4#d`Nw= zDwG2I^Xq#KF3(-~lHAqR=k<4AIXJE|Wz!vPqDzss&~!V%)<;l z0g^SCy=%&4rHJWQ<0VRY!9)O$+u%e8c8T7J!65Q-3wu| ztr-7}No<{FaaPHT9Gt#80BJ9N+Su6KyGiboEQ*BD4`Kx| zqLR&ttcPoq<{)=qs(cuT(r9~nhCn`AdVtV3_5d5pPbZEuF={a{rNrB_jf7)Bn~H@f z2%iDsPn8?m1=2}GQ&|FW@UuYM(M0(t%m#FsOwEy06&T8Vi~$p2zSst(C~>AkT~ajQ zwAA$8c33cIY1pzt&9UTa2YGhMh=Y(F(o-)5Kp{e)%l?rV6)z@M)be|}-Q&Bh^}B5a^mHJlORx(@^2^>B2Cd<&-6M%T6T7L$ z(_TbvR?KOK+KfT3bcXE{wP>~3AiCnQMm1WW^fxdd$YZ1l6pRX?2hPQ#iIgk&`Lx3G zFGvuWW1n}^4~8f7jVi_d6K!-RxwUUjuaI3{dmt|ii-)rj0whg-5=sbeE$N3-R`N-B zDQ@!7nDs+^1jE88zvfsUPMezsxu55cTh^Hm7kv*N$I#QF#EL8G;>4-;0_gAjorv2} zKsHVKHjKFiD+~=L8wJkzF;b;C92)v6ZQt*s-A;kX;rH+I(J6^M^GI-7Xb%qS)09lRZ zB$frdauXhI$=R6pKjQwB7+Z!}Cq@&Z@aG@zR1C($;EVAaO`nC0P8l~`)jTfLM7 zsJS5LpheF}D@na~8K8r-&lVFj(pE%o)-5$Baep!=vhe$cVPnFm-rh!0kYY46@k}l3 zXQ#(MM)J)UjfcwY3fwzHh*pFsvjKyH4f2V?1*$qKb}9AA2r1{h-37EDBzCbFYH?Zy z1mLm7xjsmk(G;fe@mff-Yt4xwY7RT7=+(Bzw!o-Zm$O<&F1(wBAHVjbg+nm4JcB@V zsoT2b&8@mclFv4;G)T5kH(|Fsy!%>z&7jjl(#Wk3ta*(VLkEcj>oOy9KJhUfw_@Vl zZq9Jo6MRjXtxqmyZB5_|1E^Q^)o>n`go#A2SY|{4I{IsG+$%Fq{a=c)R)fKXpO7zt zY3h7tpi;)&DXry-56VXp8lRKtahfu!P zhs5Wc-hJS54=Qnxu`|r)drP)+=}>cG$JnIkktVTgs-^+B=u(S!u;+6JRH#w}o2+zZ zPqm0D3-=*ocv)mXD3Q&to5;-OENhWgSLgvQpgG{9u;Ox|7Iw<}(n?p6j>uilgf~qH z_VGHaE*7_BG+;4@4e~V&TQR<*L=bXiZP#5uY_yuisZvZqt>C^Uxj!X3u(j4>TS)Q( zE7jpH(wfVAw30>219#?>W%`ENA1=>cpXmTy;u+HzGs_k%;|L$KIM6scyyL()7%Q1P z7}g(nzEN1YY02C%b5lR0tfL57D=utS%>{sddh-2wJyg%ya+Jt4!jZ)V3u$j+yp2%urVt-zmgO-sU|GV# ztOB7}ctns3KgzXcU^ba+;EsSUE_3V%B)&M2I99-Uf#HQ{V(D%LEeC@SjpeLdXtK^c z<^RD!1m?WP1k7RUT1H#Bh||ft)lF09*hl<4ZT^^SYfRGA<=(UAvJl;|v%uW=#BK+X=;9KMRh2m47%Yv!BxkeQt(13@#y7PLBHWIXo|tpg!fCA;nYe)3(n0w2^e8 zQ8ONoHOQe2yq(sbO$hU}Gl)%wCK^K31sQzxjxn!WvjwHDev|QXix&z`svA;Mne8{D}+>99i+p;<=;Ky== zc)kvQ%}&oE27-b(N&L*LNAuT&+Qe!+d;YBpC`;}ko0t>Pb;dD@hIAHQ62)9R9{zM( z=7WKmSV^m@)W$m5O9regFRF*^qa1OmM>t!hsA;qG0GfQYL+hfX>JQa>jZ&E6c7Yr02Xp=9vw`Z(atUXC9DOt*|+>npDE*j z;Ni9xK@MHMO(#Vby&<{n=VO6c$g*cgWYVkiQB+; zG$8@%njI9iR=y>{dQ6A)JgtZz@9Lj1|GD=%yUwa)DFQFD^O0W_8qJl6Yxyb!TdB`X zWh@bj49W;)y1dzc!l-Wn;D@I8L^_7(3V4=xPveccxbV!MDL={0g-HrGWkl0blM{`t zhL_1v6b|OHc&d1551aKKc7Kv^He|#hh?OldzSNm(S!|~w)@GzLn%ZlYK)2f7MX)Y zfo41`l0u3fh>lwyzXXJ5{;BU@zARz&N6&rO}(D=x0f^OJ^gm_DBY!A@}06 zT(a7A(_7ur$qOxUdF*%57=f*glUGX*^7D^1-4-#SeaSJYd}p*QZqy$o+1MGak*k2f zh1%78`mn#ogAVJyU;b}=TDv@+A+%lPIgL3WiNWeBDTJr2go`(F)$>fJlmZx%n?h7M z8C%M;wa8UDL>iZ*T>*=9mN7=kutmaUK^jMm*1#S?J${EQx8gQIv046PZ(O0&Y@AeK z`XCe)0Lz_UN%$yR!8HC?Gp!r|QRWdiIJmBY3!OFxV`8vwC|vkV3x~1V)#9chH)?Ez zLkN~Q8+Hv^k>n!KlvM>++S0xhS`Bq3UR07($r-WYt2K3baed%Dr%(EMkC97=?ceT= ziL-=J(*WNeP-j8l$aqTHR5c6(u(htUJFz|l`N5u)f=c^+934Q&Vo2IP{kGR5N%R&` zm%#p#c-plAofR!S4^$u-jU|y5U_EC!nwwE=nGIxS4xNfX4mfSk!rR z@_kqDD;r6LCcaWHDh-(=aCo6dv|ppIzuZ{yAN5AJ^uY!`x>Q#cn^N;~`^CmOh|7XC zoL7(Wg6?yh2RF6iSJKoo0q&LIH~_*3{1mqzBL)AZYt5hr$sS$VrRMPcB$m)|2ERZc`u zMpzJ=9A*IHA2_!P%Y$yq;q;v5lTwOlXwvu;g>B$$%Umure;ZViUIl$$lUWRNHm3pH z#{6Th;vC1(c*3{E${k~8Oi*hbOo#)=cyg1U_L9+T91|DOQ_g4YX=~Ye6Z_nPA6#}k zyD)n;;%o0*v4>j9bCLcZ+(nSC!CK1D-MTu)>`L7U6tlye9*hyF6Vp(j) zaG2EM6qdVj-S2P3Us|m&zV3|9$~WGSTPp)dg=bcHO_`q_$|hX(He z7N^Mox3XtV-Vpf&|7kvk2dGdcvhB>wU0EWLAHAtL99zn}$Yp(8AIkTKigKw`vUa^U zqg6?Jf_;))jHbeSs`>bdc%ZdWEJb}RrCIFt?z$s{Ij#9 za5wu>#t))P+q*jr*WaP@8!EjE&$!NA;UBtys$@$2pOQ=2Mymqg0=Fcw0OD4ysQIMn z3IX6+qWKbR?Vqi{fHQ`3p#ihav_A-J7_~3Fo3_2k1}axPM!*r{&F?@872I6!RWi>$ zAckl~M-2SP-X3}LoulPieK07Zi8JbRLlY!4jl|kMnA2j>o~VUMt6~_LD@|1^)f~?h znhV`3dwt@RIZNRqu?IMbz^t07;~}s@#nD?UYTBx$Qwc=7RhH7>VA+OZ#EvXZ0r9tus%mB^Cq;Y~Fc`tXyh8+KP8%jfo};_rot+@pIzHf;=P{IYjh@ zWP>i|w;0SBjX%1iJtZE#OOnQ9k0gJtks`t;D8}{@VE`g|fa>2epMivfT2kdIFhM`8 z(E<+mNOQQ##rcWwIKk5J`IrKk!e>C-7L!Gr_oswq)>#dRZ85VTzU%Ms`5^i@UyS@IoJnI)a`DY!U1KHTpfM*9~B zZ#&-~Ld|=Ey6+4xoUtkg3o|0P7)I+IZS6n*Gus+3%@fReWBBiaiMlKLiub;zf3;`$ z6Zh}&Z@&K8vRGUi9{&q6?ntZXOFGi{=>puj7)J3n-dx>Wlb72O>81WVxl2?s2+8W#V7Y9x|mI(X1wkSM)N^q2(5>)H|F4UMc`cke8VtHk)wh@Xo;L^(+$;P zIQ%BCyg(DgY8AGwk>WR6TYObbi%XJRTM}Min9B?SN|(g>H4?==l%ze`NeA^AhIPAR zl8hbka;Sca50P^~qO={aNn@P=Iy9>Qa|j$R40l!r$Na#X=bD^fY+Tu5HwCc6+EQlTGX+`izlEL%@805Kc zRIG;{P^#H(%3^`iO*54|VGU1?!&qkP%W&d^moN$ zPYSU?U=3It(kqY)AjoLcTD}nUVtoCxw1kqqWq5()06##$zhjBtDj$wmb_AMLRk{+p za>w3D)+VwA{IT$(LUfL-2NzO(q#FH$Vala@P0fD6zkyB}3)NzV17{*}6cXpum)pf_ zM1dqw!4>_Gx}ZsoiquG6aP60JmCY|}xFF8ANGMMiV}1Gd<+CxE6&Hvo2Z(Z5mF zOocKbo`zR5Wl6AV)e;tp)NxJc$)z1~SwgA@Y8@j1&*jPxF0aKWqxgh(a{+6e4iPWw z&!9Q4)~NN}l@U=W3{ zx+Tq#MTj_%KUfxJc@7{J2RF%-6B2rT`E9SCOyTivk8i7T0aJUPR^fgGN!J{N$7UDQXme1z`{-lc$XV5<_R~-^e#!_dKbddal z3<4V9DkAvB!n5Y9ZMN^^sN4ajt4vL0VX(C_b^Zs~6b+WTlwf-Jmr=n{u&=G&8?WPe z$jbSHO^CGP)~eD784CrSd0CkNcBrTAUNy=ed%JXCavg z)H@?qd_NzjGND59EdneBawX7`qBn<^62ZR^4>}1_q%^f?JO@6GsMXmWP6v$Df}Ax2i@OnZnY&nNX+$|noa!X6nHgk;pG{#%#?`>DXCss{5sIi2E|RA z$a=|Oo&9+{AQp!}pLlk=9ur4JuUg=4)H3V>En#z)N?xX=Wm)hU>~X8GE3ZW--Ogcc znP`bGiI4g>lUy_UIX8NsK5ayEy<|p z)NzH`fbAbDCAti8{~FOuw3PH^wz!cBFFqr!LZR`(0u^n*iTOWtPJ|Jrt;cdmgt;YR$oG$>$298lLk%Nuum$dl1LRf z%Z|Nafo=h>?oSiV`qr}~oZ(N!pExON3CY+B?tI`54sh%;L!pq|FR6Mb^iQzcguWWA zsMo+(rMg9_(dlfrN)YQV|<2CcXAJtqRBePH-%E7sDtAt;{Ao zUsIVRBw4d-m8FY)0-RsNGLs3)h+QXAbNG`XQwncc(c|4JNm4esBJYtt*`uAlF7nwF zPsZLXhuezuBY07iHJWw-S<>_|F8`!S7VM7!x!@v=3gf}ByeP$S0!M&K^?~Nf6-PuO z(%kc!(8LBTpC1=s^gO=wp>@VZK?kAmZMO77r;->6njUN$@FkR?;|;H@Z^plu!t-p& zUCh2!!|=K!Dj}9eQcu-)60Ismj#_RZj|w(=NadO1UguL5tT^9L5(U@3kb}Dr6w?Mw zZPY$d3lhYJ8-YKT7<%w^7cyl+i#jJX5MQC$5=+JPk4vJo$P_?!g!9mf-1(=1h#oB< zWTlS~wmOki8O^z7DOyk=Tb6bfi<31#YN+La^88uQ-HD%SbY|4=JF(aKK*vEnVM}~w zK|-j5ijyTQ=@W*G*2Q@A=!8BJ^FWJ>S8BLCRtl;HZxw20*G~GFn|j zY%ptYL{kNKim7q43@E0C9x-T7z1p`)tn52bZwB95It6XE|I+5isWJQZDDOATj3IRt zxN4&WKRYp-pA&B>60hiw6(K{jN%pU^)VvANKFO{v2lL4ykHSDU+ieEtuGFfMl#02| zp2EzmPO77ec&r-KeVStD8)gnM5GQ)tWRDUxJYIMNTc+{HPG@LT}ACPo)V%}1xxoX8D)d`VF)E-2p4^WFg4UY+Vd*E zU0oB)m$|F0s)Y~=E4i}}Wq@qNl-IA+%HV;!hpSVWx8orze^GPfbCiC_jdj( z1#y83QZoyDbAGJsISr93&borsV7H1BOvQj2o+cOEjpY~Spx8rN)uW8suNlG+;P0I` z@83Q~C&HE6?Mdd8x=Dc`Nm19xJC+eD_%bC;EXMSoPV`-6PI(4QvBF zx*UPk_-DBXqwI z69*71ESEO#gRAGo&f|76;tJ`7c}@UV$bOkfW<#PMQISbMed%XHZOqLNx-cb3=eKHX zE?x0$UJq_GD4T_NG%Zlq9(^c@)JfI#L__Uo6R7}~3KRkg=B#R@aI>^xLHZJ=bDNRm zF%U~ZE&VXeT*n~l4g%P+N$UDZYt6A0JpcLpSf~r%qn2g|&GliQ2IaIPhxMZI2=M|; z@&Ye(81c@}Auu5#z4(ji!Fo_+lwAP=-Qu!{1k={Crb{8x45TG?iUm}jMXIx#jQN*6 z`Yaxg1VfhZZ)k@Q9#;3u!MF#@PB1s{=EulEXqUJ`aP-^twq;~8*esn&qT7%s+s-<9 z467D+3i`!$W@E5gBs@{I&8>%y`moV^ixyyO=$Jz%9jb($wnSSo8f(?=Bme;3rozAl zEsd&-c_voM=$Z=(7~qMZDe0`VY0SisGHG{Ww-&ExE$Ak-ld_*>9$bcPSmHb0?;dnI zY*4U*f@0dTeExC?YirVmAxEnu{iLZU4|LcIKtPRz_kBE9VT>=epv@>wGrRJ?@O4TY z9Ce6BZcJ41B-nE9kZM`FWB4UQFSKk-_1|;TswIdh%qD2B|M(21up<|76&T8l;y?v! zAIYv@H(0Ylu^kBkH;OHp(WK+8an$~<-UV9(k$5FJ%Yhi7k7XR7?C93N5?zWe-yTLs zor~^ebau`qfIMOLTA9DOFyM%JizmZKNvbtqGJ~vCy;}r~o<@;Ea#>kniVGWd_K@&| zJfU>&W6DZ*CyAoT`jRO)5;#uRxlj(izdk#LC5f?kt<-rjpgo=%nQ2dh(z{h@rWY2* zWt>XfKyAbT3zD{~)$Qr`->=p61G+{pck%c)NI(#?k!n58Wf25xw> zxTKDS1N(W)TJZ@WhnGDiOEtYaUYf@j_ee)8G7TS2+Cz3#=-k) ztzNuVrsumRmX&=oY>Hl#8-}>E=9FP{pb60u@vTwW92w|JEFm4;uBdcTwCC-lJz1Z$ z)Ap!cw(~a1|I8EAK(rJyLlF>Zu`;6+Yn@hUsn$iUzKjQRsR8#Ibc=eAYI*_FE)~$~ z-U?e`i*4~mU|~d%DILH$Aqi-f^Wzk2Z8C*Od1?$Q5wK@=_6>vCM+UXsP_a; zs!_eD9;&^$*)&}wlDLZCT&J(N+IrvcaPkR9$VG2KrtBZq(jasA-g*304!OzUP3iaR z-^80yG^Z9He6!=;>GvZ|b)jckPGCXq8p1(qU@9x-j#&#Ddm3-X+kODj7|z80X}1#{ zmyLCc#OuV-{Mg2Qit zB$E5ikv>|frW9+yt+#@Fkk(#)xlyZ*h3C#ym63bGt{5?`D`vj3OSVrI>D2j#YE0g8 zLusDAk~D|J-wIdYQ*1MEgJv?p%&k5f!6RjLQDs7?)Kay``sN8~vZeq9T5OP2r;^Ak zJNoi`0G`GaL0E{RjHVL_QIWzrVo?r+o_g32JG0x|nD|RLav>1V{8nZT7}Htug(3yj zd<7hbwT>dljq;^5+2B_O#e*0$FGO;c!5dPn%985tc7rlsJMV*x`mb% zDp%ab#0IMs8Hg)}4AK4$K*u_CQh(f`7&}aDr%0{pO(p$E@78KNpTX{J?Ca%8Kkm zGZI$-`&7}{ij?jt05ENKAU63w%=nPJur_#F_YFekfCH*JPggPy6f{D?2=i;sLa-7W z5N_kt++2*?aEJfr-C(pvSAR*`q2oKO`SZs4AS@lr(J6vr?O`d@uhh`MYgSjBraMTv zAUv2>C7h~uvJBmrbl2Jye<3&g`NuB!CwIhOZ1JJ-TAT7^h#@jYS$Eq@#k zjM-+tw|>Rx3=;SSP9tkUBwi4>B#_Q-ZErLydMaaIYxbC7bTL7$1=FoNA3N{yV0;tp z(tq}TqVoed7C$4l!)eKKHbDWFj&s!ZEx3#~!;ZMCAOx?JM^NSWxh)HrV=cs&%IVuf zY;OcHH!Co|1?YT7Q3}V&>0>Kz;+z<4GzQR_T&lHrA@$PCxevhh4OUHHcRU;<C9w%HO+@!<v_Q-Ar_5p5%5}2Vev(0TnCv3w1BgCrK2)6hdzul@EK}=bA3uz)6?=7#}f4+yTZ1c`s=E!w}lJUltS6t@r8ALO%Y zIK(m}3B<-mYkjGjF)dxF{Xr6TJ7e&njw3grb%qI*gsm!?i1(06EHFOI6b!(R#Y);% zImsZoBqdj2L3(C@8bJ&mCt%bZc%aC~B5_+Y2sXdb01~jbpyXe@Unl#mmPzJHF_7%q z2xnFdvR94T^KH)Pw>S zo=yi&w+B=@{7wsO-2rRXESIG(K`IB@lVl;&RbG<-zKowPM=vR(Z)b>8h%V@=6nS)- zr8Jh^p9=nSFPS9sgqfvzIa&rru1*gUyG0PMr&z_>`X%krEc$VjwGT%nQLkv11XCJC zneB14SYq4oFp{P-n#IGcW`eW~;d+%_+;^Ig#@!crk0|0?2u3|l%^4@x)b&yiiBl_} zETX9+W9GribtRhUlvF5|riE3L#=N?wwZXIrw&6mek(fDAQPtx1dF8`hF?6fPYEgK+ zxg$lT=Y_ZA7RhJjg7FX1Tm(a+O#*a+fO~hNuYdPDr_59cNRT)Y>?94T;<^nSzs!;= z4`eps#c*lrUVq~t#9uN;zC94=xuzY<5voc+j_J*=4ZFYrqr_sB@#yyn=jtQRzea;X zp3sQon=SOYdMuaP9J3(0WCblxQWqw52qJzE>%@;$ltLVfn8xa#NjsaHsJN zEk|%vjOKQtp9*FXzuH5jN=g>Hkz5#hfY~w4UU5_0qU34&cBHii4TtbPXa7)W^5W}M zx{VC->FWpb6{asDhDGUKt1{*Qw)Ie+bOTT_@m<$uw7HxjYoIKLS824H%aN+#LrQoD zBIL|pm6a|6Tx(RrBda)@>Kp_H9TF;q917Tt)a~N?z>#3t&%RN$({T^f39uj(yctmiTX}vlE^2O&zw`Q-FJo@wiUpjVFFT+mg!y9^IB<1mE*;} zs5)ih{hF(4I$&#!d>O{bi^T0}oUO%lJ?SZ|rCxnxSoBf{jM$s2l>*sRt7?)t;<48=Z z8(Lab(N?m)tDIH zi3gk)-r&oX3d{heX%+(cq9 zA<)_QY6SB6M~I0TX&^=SxD=p230AUZs#R09LZpM5OUC(3jP0xZOq-9yn&4Z)VqoIB zSY_=seHcVyjZL&cGE7p-d1*deh^FQv%f}ieV^$WN6OFyf1^sX#_tZ=rh{~!oL|t>h z1R+SvwoAmd9v!eK5{#}PLUACMWM@I1DpQ8e(vUu>)S$@u&fBROw?3~;AyWD`7JwF} z-CGz{Z3A~c$_+G7r$WLlZ=_gfS$blxgqWEpX%$+TIT6mqak0FtiGZy6Ic<*}DeNOL z3nJcG$k-&BHBks43!GEZwOE;jMB&0oM-GY4Y?o-dO(dL+)P+UB)&mkbvq=M?ln{u# z3l}wjU^HH;GAEyTnp703B~ZY_2T2#t9wHj4*%0cUFQzecuW*9Ux zS;`4-lOo;Ec(-t%(Hkf9==3b!hVE`Yf-hs;P6IOOZjw^ivU^vGIg4!(+_7>Q3|4SS zyps}B9Y?Ed4e+6kUM5*vHo4srzwaf9Liz+XkZihiMZxY?t|Y~1#YLsLnp9Wy`sa$E#@@`hk3H>6WP2z-lSxjzNsy;m>^+F06t<%(AP z5t7m~-6g{oXH`(1k>(#XqThNZgri;r(v%dNs9jQE{6iF=_4z)XmKCDk+Dp8b!|a2f zaC@IAFB@#GaQOFe_+Og5z9bI177|Xci_(e{kGyN`s;yqtaCi%YBjF2w?(u&)Vq0?H z3MrN4kxxq(3U4{<#xNM=73^vz^@GB>TI8ITk0$DWGb0UwlS2k3R*Gqt(KPO}zF1wI z=Ms0cH_BmQ4guf?r2Z)A`%+H@vh*?mH1DWO6zQAcQapWRDQ0Dy^~NlGvfb{3izj5Q z*rW!Yn0G8oI*+)~_$zqdU%H2yb_y6fHXO$GBUD{$xddPpVdTQ<_gOhhMgXOHwk8L< zeQr)A$e<8?CDBVbJKb?!1|O;`sUU{L%0Xln+aAbKH#L~kr%iF4-BcR;%* zu9x{^jrp!yXsr!o)$+^N>a~B{mqEl>5cRxVsk59ptLf%oq!Wb;w?lBgAgqf$TP}a+ z+(?n)d51Y;iHAWH7&WsRiqk`qvC_u@cIfR)SuiYnH(vta9vw ze{V{6SuUNc$^e#|;-cQ1$pWz?!KJ`y zQGC9Z)INV2sjr)~F%G~qXnoa@d-;bj(8R|cEo6&v_+*Hf@O`ru6tVPRV$5!(X|x*0 zuG&!mPRsy6sH@DgVVDoSw(6U5I0R6ZPrE8LKz1d$Bmp)LJ=!^MOIK|{rnJ-S-VB3b zUvYIye-XU1$dfU;FJaCwgn;8t_p*%Q^*Vy{BGD6!aink!XGCk_VYV)03FQzZ)z0Mx zWNNikHr5`ov9Z0=kPZOtE0xn29#PZ3*tE3-DU9emCw<{IePMW?GIJMo3~^XA^U`@a z1ldw_!h9l?(HY*7Wt>Eix&=y0u$x>smDnc**9cF#FF=`uhiET+y^%WyIBFcGBE^q7|+a$nFt~OPO7V z+B{ABaR#CTw9quz{B?l9r?f?-nI@fPBS1jz>jit8P1EbVAJe$E$lJANUDy3EFm zP?Tz6ZCH}>sV1pw0xx?@nC!UH-k7aBEY8EhvZf1~)WOm~Ya@HHWaYd-xYACeU7~v5 z5VvW!ixigTLOxk>8M{nE?^C9FDyx{XW^XXUadg(xis3ECgGlv;tpHIn6Jf(cz!h0+ ziTa9qvua^MmmAW+Dm4_woiwpXu&Pr!Y^+5=K>hzxyV?poGP%-JHEKdum)%_)mdr-{ zpbWZ?Pi`uo*o7qbO|#~*mz<5JIW>r1H`Q#E1!+NuRc*8{2-9B5|?OPHlxuk13Wdul?L+ua~S$3}3T<_Znx=8?PwsKEzmG9MZ^t6s2J+e}hOr#|NhJs;DAz|;@Bif z@deGk2bAE9aiXNEQm#m3xKuBV>ag)t?bWeEnuoN&0^7t}?le>a=r0m&tUDtWg-}^I zs4chPO=D>(<5V7Iw=r8`%or%jt3}9~2mz@}2qg1-H6(C)m$&vBnyH!Exrh{p-5a>% z2(>?&>rI~AmE3R+enO@4jLh_%}NX~BzeC#Z5Djsm;-o2`6<*c~N?tEw!?x~1lg2jY-+s^xnu?a>y)C&fiVUwV7 z028=oVz@THu?xgi{0kcmo7U}kCtA1`C3=#HD_cf)x*zgGX!cuL z7jB$gCqXnocfY%S5S9bR{yh@R<6yFK=>C-}u@rSLug*KKNesUO2}7)-3fQh_vPGt2 z{5A&s3gysDVn~|&R8!)~6>!|F6ZKTn3oAJeVpv9iAK=@pS}RV4qAqLJ66q2Z z7ZC7-k|wq-(zN1E(vnW$?*S%&DI~&MBuY=|PCo$DQM^PKGUd!l3Ib+UNnUWRyAp?H zR!$BcXOmf_Nwboihg~1{ig_-JqBYq}bW?gK7)xk?O@?LdxbHmf5!55QI?D6ung(pl zG%y0zS-{Y}KicmcpPe3FT%29Fm^K9{cU(j_K2YyTaz{*)&n9zHp;iXcLlt5s!iXe0 zz(I9fRLtKkK69J#Mo^mO>Bdu9b58P|^fS#%Qx9@S2kUZ=-_p{#dSgLcl^U1$Oi37` z<;k{PsZ76`&z2AmFRs=_TrB0=w{KsboV@IILz#>FGUt2P`qPgH5lg)M5>%;?9U*4- zH_@xBqoczM2_jROeoRNp;6g;}!+q&!P=^&WdDs}2(pC~;(vwCZ>kpt+OG<+QQ~?vI zNEFNIc4FAD70C)^5P$1*)H+^F4UK`wMEh#?{_*T8I@mvLUPj&X!-LMzkAQ1pgG86E-u~%p_!GMC&Msa@ z?>d)nWy_8`-yPC(`bf`eIK2tZ`klF!D^H1TH1A4!3|yEoh`p4+xj8 z^b2J0Y;u>^7RU7EIy8I$(Er#nc|x`QsHJ+PojYsvs_9&SD)*0EUA%eE^%76dF5e%W zU7fy;0?9$lc0vZ5Os&$FtTvvf1szCuoGhkmfXd~P`F6{`Tp|l9i-`Q?C@w@ROO}_s z5XKHv&$jvbAOmE5nhvv;HaFFB98q|V;7_N{3gR&6&6I7>h`^~C&I)#(4t!3z-Jn(F zXPXUi@-upBKGE0}3-?0GfubvnG6@V!Ot9Gyce&-c62sO&V@=*0GuRT2&p;9jkBQB5 z;Rz6g)s^%rcb>G>3L zi594d{sEinUeaZLzYj4;ya6tb-YB@MBV?!vFd|TELjmFN;j2r7-UG#4z}0&kt>x4N z!B@9ZYY2TT?gGgBS(!cn#h~jT2!KLJ&C>Cn55;>v)6MtqI;Y!P%>{2LCd|eC_*=sO zSI>AMk>(v2^rku!lw6r)QrC^Q8o2 zQN*Q)SW1CwKRGbU=mS$%#j&vF%+IVLsw4POrFyZ1I}J{gBI4+6qNShm;+o$4+3Xf< zT~OPN+!DI9Y@BLIB1FrOi+Cw5$zsdL?SSw4k^#JEbj4tv6C?@K$t{dIa6sG&4_P(D zNG}U%5#*t+HcFMbJ(_8dN=KuF7;6lMF19HW!Ux0f72 zFEPQTTD(=Yr+Famm|7vvc9pl;7BY$c$PqGsb~aC5%-3>nLeddLX*u;U67^6ogSOz@ zr)Ji4MOGD|I%<=Wo;^rf{Aw-SfQ?1)R!9~&|3M+-w1)a8nsh(E#=#yKbkjhi)rH)u zRBVvWO6&!GzH5GvMQKw{iS@P03x+%amKh7drp*zWH4`)_j>301_&_JDM@lE9lLXg- zQ@8nukCGu`ZnNooErPkml}kA^UgXx<6j3{ze8I)lOT$`m7#YL8aLQ;TuwuOWaW!5RV`v(JMqdxy}^qUb8Et+KfaAZWxbfUR%MZkFKD4v(;)M8NWCUOsXADSinvA z3%OYi2V|5A1qDJ2ibmJ^ULO1VE=2*wfagHoWjV}ha7vDVC?NT5sNDl9#S(ZW=8ltw zIry3M6X8t(lq%!_Z>U=hB0d8@ptG2Iu52Wu?tVe0*cWQ1H?AU9zGjg4Lc5B^Y&s4a z3ZnX)cuq8l)Gj24qxk|DQYHPEBcUMnNl7#IBapNh|KRexUC4(RjwCS)7<|4yiQkju z9Q<`w_EBqE$%GF+wklCVvec6rCXUDOV3b__!B<|_Y77!Pp}B?eqNFLKW^vf}CyF=U zO&X3Yu8qNL8wT8H1@mmJP=vUq#zea%|J=(a!+16oylK6n&2`a!U^JsE~^G`SZXCdBD>AUj-Jm`Mlr z>r=pSi=8m^uV4yG4FnN)kR8L2VV0X(5Rfe; z>zhxv<7dE{i+9$siSLOi=J9nljK1NJ9sC;J)6Ku_FuKGF_#A_@cdbn&OdoFYa-l+u zT8iE=HFQ+~B)t}A#6^9VPQNZ-dWHRS20PP`qeBIZHT``!6_Q*&?_RnDNfE+Pe`I9q zXfhoKW~qN21mugxKmGdezrjDQLA(=h$D8X1XQ!7JomW?vhkxfjHa9kQb~d7aq7%IN zY>R(B-+9VE@o#5i^C|uJ`LoUEJ3HG?H|VLYr`yl|Dcbl)EWivWH;VpgKyuQ@o*NeF zhY$bv?LSd7@chjeFJ81azHDziZ8R=(Fs;dLw9j%M$9EoB1u{;x6Vdd5G(4j9%;21L zSzMhC5LUuW*wb)5%Lb_=-iEnMiZTz6DztF++W}$IWv+WjFcCWvUk^-}!nNg1XXY9x>Z@{@{xU&70;k<+JK^B2=B<}R8KJ~s_8oNyg9)-n1w z=~yy@xW)_j?A@9Zk5$u9OnV3-7CUEA!P#i;y!UVtd*B5XS?fmELz4U?K)6?5aw>?uJEkY(u=2`kP>#mJ?0+eqV~t^6G&kgIl&VVd7#m%@iB<8) zh>4pjnbjnSg#ju$sg;yX%3EH0)JbBI3)N>DvZ}#%0q7a2oKkT@ip@3-B-Be5M*ooW z5sn%m2NS^*@SOwF%)sLrSPsaFsEOI|?{a$@FAgU+BfQeqaflFmg0xQ#4jr)V0fhj8 zsf529;^)=m`r(Z0rPM+*By5ngxuUB{zuubrE-JF}w&9AtS`=!abKp9I4zO;YD0Ujp zd!YVw^8w|O+&HBJN&Po#3k9M9=}n@p7+{C(gse@yQQ*xkgJLxpAXe7e-$RaYidFUJ zLo6{**hz^TcE&u7@h(Nr7r;S26hZaHarOaL4QDz7#Q<>_<-MMiHbThh86r3uLP^=i z$Al~-5V9liOHqR$J?7%g##~U|0`WLkQ-(3j27{3V%t0p$Z-N@&p)uOT;cO%+zh{}G znZ#P-R9lpXQjs*Da!SCRx`TZ%cyLW>{b&lQ6j$V$;!eKfPfh3Gi2xhcg&!y zZ0M{8yQxTUF<;*rzrJzojQ3_Q{fu#n4<1;7!;m8 z_`b`?Ze<3`D=w%|2RJ1YBzpqAqzVh`wlH8NVOrjmSgq!$dN)4~ZJ*(qTx58v@cuSN z^j)~V&8Nrops87zV&rK^gi2d0I`V26wJl-0h7DD7aHQFaVSobTr{+y2aO&Ety}6bd zD;+755Nk**+0Z4T-77FA}?^ zIhrLzdL*tleDI*?3(E^08APGxU40e2!y%>uB!)j-%wR7m)>)#%)1_iG1d)}TPsEXA z>Etde@(HV8PGUE!HqR(53le_p3O-4)QKJE?IKE;OaBBaGe<1jk|2*qn`gtRG+CHi0 za0}cXoQb>zqD2}~b{VX(mI2_XS{V_S79b9^4i*qRY523N&c>oDn8+CuEe>GG7ry9| zYvBP5TJW7EH~TNx?XUZRT7?hhXQ_*#74xL-vP2?(rB*91W;a@WvdP0(RqfwmFGX@# zlOw>&LP}B+>!<0`=8j}*>=J*qX;s7JDC@uUcHWle=shse@kvd69Ud-G|mKEKybh-e)(iG`r5|=oYAUw zyT|_9t;KIK#K!+@{=ff+|C~NP#s9Zp^C$lQY-?j{YjcyH+T7m$mH+=k{+aooGuYTX z1Xn<#4w7}G`Vz5@eJ=F;hnduju(FaUrqO6@LPvM_+YV!rh$h#twEUn3*UHd*95!kq zaz_|N&mteC%xnoiyx{821soOd%BJErqJ>;z19=U)3!@qp5{{_8l7r}OBYyEaxYRFQ zJ2mlOcq+tH8hy#6hx7~21NJPKk!;KIrQxtiD8mT@-|p349{3A3T*4BwrNmX$Z)ZuB$f#$j1UzX zqaUFPGf+BL)F56)vO>!LgID$Ua@K43y43DBJOTDXG_YOXG!)9aF}~FgNlPmm z2+W=g8}z|=+U7>VN;QT~et!~ANB9C|;GV>P?BD!ZezlKi-1sR-2J|fdGqb`|F)h!-+sQc$@agEU*-RQO#II$|Gnq`y{CWjdlWT3@xuG}{~pQz(F=d#pPzbZ zJ@PO8`}?)%b6)!QXq8`juRZPJcN*o#d-@ZGhySeO#Xr5ruk=Zy@u_uqo8Lp8*3#~c z2I_A$zNUW-Ltb^1#*iaiHC{=+U=J^nQ5>2m#Cp2P1;Vz)=E=##AEu+MpRqf!0Iw|8ctwX&-|AFY4KQpt(ZIDyJ1` zKrq@_&!^S8zSdfEPQE2Wg1q|ppuP?p3P(so$rxmpwHS#WlQO_h6!+ta=ysy4v?OFA zsO&mU<_?lMtLlp?VMMG|v_50(c90)Vfrjx*msX+@TymTo;*7&YEQ3eP&Ib0YnQU6s zuC^~NbB$Wyn`S3+d85}y$NO)(0vvdLE`KaHG#@Ce-uh`ZMm{St_Q^j}-etndS=kz`t#zuSlwN7GT~en_tdum4@lUNfZ+<-PEmMz+Y?GF&9gM(H%Mhw#LVuSKY7Mql@nT^=Jkt73o43h!xb= zbYG(HlG$)fH(+;gE5Gd($<1uUbw<{>t#=BwQ@e2-%tuGYx?7w!hr$HkLuPGQHuge| z;J-ke`U@imYK>q4Fcf;(6m%-NLQPt?X{Hg3tVtW(Oh7Ap*UNGB3sBXcweikC&mVBPXnTwxiIfQKTV^+u@%A{lKHaI2t< zdT%bR0D-y=uLobpOFbQ*R|ayevE<-Ke~jb!&-O*1%^qLz5%>y!#c}WzZTa%ArhFQB zz#w-__;_o%$FuXx&e^H0t3~Ox0?U^hjGDh{VA}n@W8*j$KpvHr`U0GUd{)NmlWM!I zB@DvTvV*Vb>F@$L(v%l964PINu+iWQV-|?MZbS>W&5_F!+NF0WB=Y9qpuH8pc(&$C zn4+q~BmdkuE@l!%)3IhKwn2GHef!ZlSQd8N|Jt#`9Mbfq8Su_Wyq zdy|Ua7R=*X`S^QA1!B*AL;k9e`(iPN3?|&kSSg2tN`OzuJzK6VL`mtn;ChFNn?B== zMl0c;wqwWQ!7ZWDFl2MfDGP9|I&x2Iu_t~ELHY@`M*R@Uc- zRx}E7MWPK9V=lf4D_3Xbnj_&-w^F4=sisjm3%DPbXCZPLeMoj$U!Wqnrwv0SV6-BY zmFU!!fcE8pQ3+F6@psdbTTZoWX5qdwP+DCq)X8YxmwEq|P795&X%`RV1w$@x^wa`{49=WAsG^7 zrzIdLO)inBQtP00;1(0ZEp^s4W)+u6v&n~TYOc)%c>MmjD=JCPShw|m8EIrjYRSk9Jd zJ7-fjAx_ws&I-C(so-pJLUsJ#oyl1Zb67l426yyXBKSL5X-&HX)`RVWc>@Enyc14s5Go zs=uV5C}tI_^xebv^xfh9k5M@v_i`|&Mt$s}8MuGETtABB#YRzYVe)ZziL(KOxOqrt zpuI!cNa{t&;kw+UPxWHNlg&wT_dea>ha#DeXenZ%>HRnz%+~+omK4}^>@o?5>H76# z)@C-ojs(XKisR>^%04=04vqV~Nsk7}RAw#hIAe**(~Nrpc2VANi6=+;0^lV{_0xPj zHI$iQ2JJsIVsnct?Y6wxmbO=7VNBz>mb}}FH{$Ibv~-&mlXPTAk2fBN26DHhTOwSb zRO^|KEK29Qpq{&$l+7Zf-u^ zf&YJJW8+u<-#_Btxgvp!Ia~=Er3ieAXj1B|6UfM2pkL zod*>OXw5Wi+qK65)j}^zwS6!C<^;K~ii!%CF~Q z3}v5!AR`l@=s8!|BLnBebxm+j5UM2PQv;n>oFrrgVpeZYB!IpqLQsOi2V~O;Hk(eueAhP!BwOFt_sIq0`0q8}M}u#^#vu1wM{u(>UO$ zwURb-I_HIrRu9$?^}5qWvCgG%ip$z>ME{r3|KLvkBkBLsou|*X7wG@iv!}ntfBjd- zf1I5COXv7_KRUm9b=*0K=zoW&-NR4DNrV7XpLqCz3WN~y*AAt*G^J`YrqBQKmjj=z z+iYqH4Pa+SP-ZJdF#uG2CEC8r?oCT)nPRGmM>JjeB*eP#{cSDuXR~tss)Y!UdjX7b zbVd{fRTZS21IAzxzjUo5VOBlB9Ug=!$mT4sJ#22rK`LqFb>za}eLwtd8NMI~VidJ; z+aURy=)u@T|5qo{<5QHkG2+_mEpS}k6+qgmdyZ90MhD0X#oPg>&WC=;Pch^}1fmmV zCl38Olow7?BsXW}*v%uMpZb}mvnfh=q`8Nl^*aWmwMEC0`8^)bCO9=_??_$WdQz-F zFU_0rE!|L`@lc&J!Hp?gaH%E3t&cU)pKBs_1M~C&htXFs0V3x4a z0Chl$zgbVc*m4*EJ1PAke<)4pas=p2uzeDX_GNzPd>wwc$xs<<-;eA$Ms|$)6h-td zFK&ZPkXn|CJ&L1}E-Zuj4Hq|FB(1&jcC>7~QF(0Lwa@K>#wa?eZ6#`>~icB|m$-NSTq`+ZHJ9Tnn z*jnMSDa}45NJz+?$OP3%td#>l*N3l?=`l)sC6;4y%;CATGb$66|g;3t$@D63Pq31MuHz=`%O%6G~-=Y z5?z*gKTCv2YcaZ@JcAu|G4?38l$aJ&Ky|DMSmr?;Fz-|rO(^m-n$bNHselUH3=b(K zjXB&HkW9(;%}Q3<6vFu9*IXg1_#7cx47GSBwB1grt<%JzD~xO63~KJ?nbZf=A%(|I zAyL?kiP04Tsg1si{!Mn5a7EN{%lj%E+wRQ&*CLEB#Ff->HvdQ@Z1Vp}cD#rZy zWJ3BW?T-;(Og?#8I6;;@@`*hr6QmAg0P1n^%+Fs7HyVA@E%$1&rm)5LSU(9n<9;Xd zyVwBCoN7m20T3fDeLG368I6~($IJ=UFz2Lv^m|ez zm#ZopWj_-;T&qR)M4z)564Quq4YTJdf@9?>80bIH2|lheKauVLCuUQ=q<*8t#9Cizw&u}2xwX3SMs2tWrM5i5={>E*^A#1DM zvqR{G;g|nYu2_8$#YVvgnNLT!BCB=b_rd7ivN#Q}S--yq-j!Q0K(8w>kj*BB~JhXZ}LNJ!!%15Zi-*PJ# z@8Wh`x1gNSIlZpm)NSy_eIIXz&3Ek6vBi2vBJE&RuLu6EEPIXjLdtsmJTYEDi;MxO-|4Uoznh5 zu9VHk+Kjo*xy36YB!9lVF^`fMJXD`8+VfM2rTqk@%=IJ*@-}3^G2}@;b~;C~Of6eG z#k8#0KcmMRNCHLH*Lp)5pNPBhn1Jod5cIQY1`^TKhFH>PLcxm^Bc%?rY`M|9#hEzc z1(9vD=>!uq(B|MNZN8?y+cs>+&-|&Uv$HRHjX3sb{J~o2(TDA#W@7mzC!aUk!mZeF z>ovh_Qd@aeygzXYr5#WBU3Ats9b^fci9%i1Z%o0ENy)^SM3oDF%F3!_iXmz-#eA$u zI=nU7$ix2JB)<}ce7HDwjOK8`%({F8Em^|?bxDGT1;e6J%(;qmZ4v=iH@DVwsc8#t zXf>D(XJ8SjU5;g%UY-sJ|*Ujsui}V)zjk3yzN~xH-j8ht_zp;p#UQ{#vn~fkiGs2l5(W$dSt(*MUqqm$ZE{|A# zt)cMZHBSwV3j6nrR}h6jj8~6p4W5;8eI|eNA3(YHO-X~9cgFHtKo$afP)O@7 zAF_S|xeOa0eqZ*!p63urceN;+DytxS|K%?n+0|_7_Sn{_6BCnOP+qJ`@7%1u{y_vQ z&xSC|;1)>5U0X#*$%3Xht&dBSGaIohjbsLmbIp5v!h-R(b zH&5x3N7?^YYoV?3hM~LZ8cuONMZ@EH@?yziD=@R>P6~aw4c9!N=3f6{GXpoz!MWo6 zE30%`Mym$kgqt>;hjIUPOYK+-7s6o8;{7DOFRzPyHZ9jeou!|QaQe6cZ635G0i^+O zQz7-b1`jR#ym@fb_{G0TLKTUbm+VqHh!>T?P+{9Y?<~1<#RKvPi6qcFv>xYJO8uHU zpnfE=_`ufkYNb;^taR6WZE>~;J$Ids$Duk$qwRjJ*I;G^9RM#tY@gR zpuV9~rlt>=;9w>*7j4p$T<=FR2l`M@@&mFRh80MxKxo(&B3>uT=H0H5ea=Aj!*aAb z5ZO(fW>T*xel;?!o2#Z2HE1vvy&8DKO^t#_Q_TF12@1 zV+c|u1FCgB1qj6^VHLoA3)osnuxnyC3l)b_8Oo zu;uSNHZ!-+7X+I?rcwWT82{ofna|YcDh9nWAI%s}rB8CcMq)U#kXw`G%hAxZtcPpD zCC!HtC`s}f3-2S&&oPZ(&6`r4!w8W!KKz)3C(3_#BZfL(HxL(EGb@UZ350$s)@Ul3ladtvY zM*Z+(3u5pLf3r=*Sfo8szEA|+3crT^=uJ?C^+(2RF|kXpHYbjLO79B&S&I=JUQGCe zreAZVtDCN_Um?Xy0t!GkoJ2dEjfkF%tZ-&tPl%d-ALCgZONBJy;#fjm?(X|l$%xE$eTeFis@XB?o8cLZ`QSUIbVY)h)_+zls68 zEYwTI-%DpIg5;7c~Tgv0uT0b5D9)e}+Qm(BGnXN(F>M}Z5dtlRGTqPwPa z+vwC{r@J#}+z@tYtSw|_PQwokipy;VPX&>9u@Q?$THrd$Y!_)~OyrJBJl7qQbUay$ z30$M4KOBC^74mu6th^b9)?W-UX5eSq;b}V;gGL2UsKezgEHVN#Zgyy2{Sy_y8jWWU z{DRA(3omQ8gA1LNa#BN^ZuMAZlTslqy!Mzf>~tBEEfy{uiJT@^+UhS1lS8{s)B8pF z^E9o>elktDLgsAZT$~4aLDH|Paew)XJ%&gTki989{v|HfT~^wH(-_yqNMqb=aWu++ z5cr9cKtE%NhA{32Ls`RM2v7x2s`7EskQsFdf@;r7#cw}BlIRZk5}?y1Q$3sX7w)=q zO6YW))GPB9E8( z^_SbQ!6QhPgQe$3DM&A4vwDB-TupC^1YwVe)#p6IX0wGqBnj#K*!^k0`iseb;bW(* zvqQ%UG}GJ+H%L0c{CQ^6DXanXuxL{TsW}R{mT@Hy>S98uvn43R!os1ewc-Nb9~Vs@ z%Te`g&mG8xB-Uv4h~5+H>0=(DAUcYfnm)KXeNAs%zNODJM=d%#jrLFJRP1-@Njev=_Pd>~PW)Zx^6lBxrE4F3?VtV_ zeb+gC-HHzBTWam_hx3cWZkJj=yNEg`=f|Bx`m%F+aD4T;bNXhXspHN`=W-t~el2UZ zbJ(RJ?O)P=4j&Bt=;DyZc%)vs!=uB4%Wf;8c>|68a{txwVJkZ7Tt-LK`F?c1e{tD4 zxH{gyh|aGr&d)Hvi|F+1wB0#9x}ed}|69Ngb#_RdUmQjko$hxL&HwU@KmEhi{&9yU zyMOvRIzPOimQVIi4={=cBUGZ(<>^H~o?Ve>MbkWf&C67q3-;hpXV9VFI;Z>$E!{bN zqN_wLM60J~vJ{=u&Shu+nBMvR@c8T;TYbUrobkFl82Yn|H5z^Q>f{iw*$L=g+HRd5 z9?<^mU;G$#4==v&9AHzZ-}C(rw|H=Nae*l2PFv zaxwMHkb4DtC$y&T_C_?|vMEC;JIdH`9RR zkmh!m-TAntT9#sHggA#8ru5NkEmbr#^tap%n;wLvVHuhKry#X)8ubo|d7j-Ys&d=#dEcwa#6-VE>gku!L3|Wn z#7KbI*o;=sU?ACi@!}Z~23Y#F7$uRhTKkqDsq{<}!qDMlu>8p&yE-)b>ma?;QuU-l zt49%m^<&)JinlhmqSbCXwNY{k0Y=Fc>A{_zeyKu0?H!COnC#Z``1#hxR(lf=Qw)0N zK6)Chemk3_x(Lb|QS+9!g*6$D3pk_}uSx{KCVjRBE;D07iQ?FbM=asOM6vNeOCc_Q zNIJ~v;n`JpDPKpb0i!cJT!HB*g>4mfWKCBm6~17rswO&^ixZ(xktWkaQ&bQ{VR=iE z-{{$q3gwoQmQEOGTEZbEQr||p|e^L~w0R{@KcPJod zE)3cXsfLx~eOWGml6p}M3NUIdHn{J(li_JMxRMvHx%q`KlpO>1u?%(~2 zm35zJ?7vy?CDJta-Su)qD>Re!G9tT_-B? zT2@Q#+WlZqBif1U&mU7Qvq>-QPqQK`2U$M^<~T|R>|v#$7L~I|^4{EJay?Vr&cvtJx~&JRt_q|pTOPVk-z_BCP@YwD zR)8<&?TbjyhDJ_uO(&4uSo3uJNWB#BPO}+K|66TDEejb!~E@b^I{7c<42_nEO++Tgg3Z=r%C00EZ zzfGMg-uLO*5wEBQC2=|++?Nsyz}bMbw}(Hl;Ox;{{_>a01>g@}HTHvHr|QJ!F}%M; zpeK}@Poow6dS&e^SJVXuQ_{|@m()(0hjCa8hH$#O`35vbIH{#WIje{+>qpT76;i=u z)urHufshnFAZxqAwnW8b*JR6&n-Vo)M@faIVvRD8if)=d@Thp;Wz^Uj0;%4pgNR5T zEg=%LW#<`f)Pl*=hmN|%)M1+8`_K9pHnAksU>SJJN7_~^<+Zjrs0CE%Z9@o6>d5w0o{xk`D>5A8rY0mKE5)|pkgE&WRLePu z&mZFGh%0Q92&3ry;D!fMyb98-OXHHVT)rlkgW(Hm>w0*z2hAD=__C(0d~Z~TM{^~- zOAdmZ+_tT(n?%X#cZ%7aYixY|+$QXC8me<%z9l)W~C{(_SGdMP zZd~F%9|m*d0wL_O;L@3s@*cJsizPyhAuAW|%88TonrbOAQH=KgP@nj|ge+8r`0#n6 z_h~OGNl$QW7~v)*XU2pW5h`TxX5AzoKE#t5z65{Fhl*C?>dB9@qTuQ<70bG5&`$S0 z1(a;NO|#_|>A!I~o1|4-rt8yL4|2>p3ziT8rJk>Q`%PMmp^?+;{_WwcP2w%>V?2-+ zP}E_aT7+b|(7?eBF>LNV6q}~y4Wkyvbnf+qUlG#($KbyQbmkw)|DSDbZ$I<(pEsTY z|99v4vtRlDKjPo<{^eo!GW!1T0`3f>wHnjKBo_n_rC(6)mDobFBz1&+2NPKM8SYNw zqm*J=1RMytLz*-a3)V)O6DLZ+tWkZ6wssMHaTr~7_unvcexvnZ*iXxhk~^7LG!TZ= zYqQK>1a0#G0#awsGpP&PA<7JVK^U8bIqSb5&3`Tx~zsCtafV;CV2Mfl)_>* zS6%pV&-c6CcV`!`QLU6VTo4W? zy>ZefQ6-HBIWGK5oaFW4Y&3Fpiy5`HA))HB1as-iS(Dl%JC2g;dZ|;L{45GO)9ydF z%eR-d0@Mlq;AtWI28C%fiB1wbaT2(Xya=~PE5XGqfpWEWr0&?8md-+?nA2IsdW>vN z5FwP5s%J~n3$rq;tUk^9w~Fh#bhUNgA7AcIuk^#&l_?#_gi~|4lwCIY_?qh=KC9!? zv&+LTqHYFbp)Gi+1?wMOZ&w<2?4voPUwmZxmX=- z#NAw70-ZT;5UDTow*1K_aR#@5aFQ>-d_YA$xTjyz*8$ZZA^Ho9fk}#Ei9#wpgH2>Z zm2Gi{nvGK~+fu6|MTAo7)bTizQfkz_e0b#0h8?-Z!3Ok?XmAXY3385t@!W96j#3E* z;DZm>iS+*22ajHjeH0Sn1RM|9}NRg zpwn=%e~R#^hL)M+E!d1VX%0LI0B15e5eCgpJ`I}EdeE)?k)JZf#)8ho(yMYPd= z@#3*Hc8!kU%zyUTZMN~~V{P)3c;{?hh)18&$=4Oe1%>z|EL4T+h0^C(N*I;&m_cc& zOu(2Ti7IosWS_M#dP=F=$ChaLa5gFyMkJzhrA57VIqD)E_P z3FSI7OR3C;Ns1S6Rz8sSSay>Kx&B_BzidSRr^9nx@};xh!2!o9qnsxuClEW2U640j ztdvs!FIb=v$9qGw$pj5W53UsO8i2pWQ!Iu_4glgld4e*+mMc+yjzD;;$YnwS zsqn9m8?YX|K74hBi-~YB5vxh?HQ+{uqk~NVf|HYaMKj4~70_Bnxv&Pn?nvoe+hQ7ZnN9|FjMV*J z*3y_pO85BMm#F~F342nVUF7AYAEw>9GjaFWm3n=6xldZ;YmKhuKu@ky=JM3(CRBMp zr!_Vq-RH31Yj8X*0tfn7re=sO1p7G~Se)yZS;4vyYs9z6GFsVJ7-~P>l*@z`vKZ7a z#}2hS>+LqGAZvANHs~w7ajDs@A!g+;XM0cBCesC$7_d{s1Y)lU)o_yp1c&xkWB`uZ zD>JPme58#yDcz~TTBA8^YSkfM64_{X6fXyB0RTw+ocMc}%E|EpSw>S@od-Br(uvV6h9{tdLo_R5thbS(igQM*l7?Dg zVw|#mp5KB)Ahgxe`_;r0onV@BRHeTBq+yBO_LALGCU>h?jy0xgFqaW`60I28ln_bY zWuB`r{|~?T_4fAG#`7;XR-!*Wa9f7PIgoB9N8C@` zzh=|lyBih^2BMo)^$@uA4{dt2joZ`qvx&yEVeM)@C7KY{&C;uo=j^pRc++W0l!<0e zwq!DODONmisG^fh70zQk8&w%Z{B`b^mlU1pmW(7^8J~pB(EgNSEf8H)s4r&NK2n~_ z_~f*V3{A|B(pR#u7RkRyh6oP17VuCnAaw z!u2#2Rp9C^g#_%ExeCnQ zP2!SN5U3pm=bl&PYyrTpAjzZ9#RP@aoiZ)2Nb43`F|l)f6b_Ca%>%+UNQVjCEKo@F z(gYspI$MRBd`%9=3<4?Vb3|ND@Uo=5_E8)ivx}ij*dNc&2nRywA)gD`&;|?p<2X9A zBP6i_USUy82RVo>f7I|?fay0GXh!{FBLR>F-L6z`s-A0i@b6PWwL;7~?TeVBs5L%I zm^%*33JXOe6N(18mcVhDEmA#)rN>EGv8==7fj1?&qhH|e?-jJkfT^1smKFo&rTyDT zcoP`$$+4N^d0pAMuYxU876v#q+r10D&L$9QWqlcl1`CvaNWeo{i%;mQ0-E2%GBjIJ z6T`(9l7Yh?2TRzDm)tiz^YvbBrTBAe>T4-*`+(!vyFvS3A0Xsq0erUaKBHwNS@%Ih zpT4i%oa;V7qK~TkyiU6KC>VJKQh~&A&|?s#nZj%$f|9XWz-?3>H5o}H)D>RT6%DBM za;vTMLuH$$Kg}5Kkto$5zXqXd5i7;dm53kT(tc&kd~L)uWq->izKoV^3(4}@ylY+d zg}QKG`0g4PhewAOV&mNxQBcim4vs=a)5>F(hO)AGY&kt;FhB@uBQnFPR()fQRWOd} zL~G$K;qxPqKBrApdEi@N^SQQB*fsF9OoOe%&?yTSO4WKgan@st7qNyE!V=s zCbqZUQA-$3nfH+tCft0sO$5}rgAttl=Rg)*&IB8`ebnVG4KO>WcjG_3Qo1L%d+!N8+gVXjf1iR^-F4F`<<;!<2>XvOX@*v=pcs zSkQ^sIZAW!tggs+v=FM>kT3*$v&%V3mPPt3)YmohnfU!()M>EsrIZ2924DB`d~<92 zD_+m9S4eZuSH42mG;m)lR=c@RCdLrNzl2?92aC*$7gWPsuniEIF6kh z&1Oh7@AY%8ugV8c>~5mk9tV~f4yh7%2k%S($Ntiw(DEVF$*goB1VPobM&$GxOm@v%Pcn8^ zLs=9bge?bqC|oD4AoNB6+N4sULM=G|V3A!1c1}O9<*Rs%B>{@>ye%r&!?nCLwV6>8 zlRxK*2`yG^4rsw&z^Ep)Qc_2 zwSkWW`-t}2Ro>=II8gMqZhXNO!O?6y;o`$=1d)onnpo`2D&7rj87#1Fqa`;tPwy+9 ziBFl87y|Jc7?C=oOxZig^}@1P{1g*FU^;%LeMRL z?0W(PC_nGdioIn0_?hvyJ}^ZWq7;u9p8+1I|AK=(-236hWP}K-K#z2L!QZpEfs+~2 z$?$$GTx-r>_IBkGWho7fSUYTR-FmKqZVox9t?bn&!qZQE?T$&aLKx8)-SW_e$)rCw zU!=jJs^mlzq8g_kVxH!G_8%5=51dXibakhK{_3nrBa|^i7dgo zz&XDP?;BX2`6xA_nmsfjeR{xX@RE#VF;9fORsN^1(#L(dL(!$mdMx;Oz9M^Tx%Oi!@n- z+7k`hm@-Doxiy7&_gUh4AAZ0ypKNb&?jRAAak=ItE}U!P$2W*c9At&WypWDIn+l7Q zI238fX&Vi#J~^Apnob}CjOq%l9AH3b00)`fO6n4Fp{ZHO&H3i~@UoF`=3E>Y69uhm z{-)X1Z!|ol^027v7+|6++24s}T3ULZQv`5{)%BqiYbHT&67H!gfSY)*pTBX=g~V?- zw?R#KeMomacnv}`%a^GNanjXLanloy+)2xzi4PhrOxIPTmoLU5cWfQQ+? zI3#*`J>mFX46f2>PWDY;X-cVPjK1!JH=#LeLMLsea}qM|zey0%!iKw{6prGJ;9?Wk zle{n&HUn5xL3Tx$B5KRb2gt`v{Hx{mn4A$>7`;ojwOn}pSH3*BtRW#d0wR=)6A(pl z;0V6O)7_+_snROJBr$aS$z6WSVwGXYAdtT2O4TLxtFTOs`i+~dAH$-z5#7h=f$ywK zh~$qYBO-F1Su;%-T1q$ov7Ipm=!JZv{oQ)IEf3;iA*j`KM`c~E3D$b4ot5?qtwEE8 z4kak|7x13?#NVt@^R43m(e^Wl~r%78BuE8vnA{L;q7_5v?biA5iz|7Y?VzJ zLbhS#w_EcdFo%a5R#{PB9-C-%3M>$0l`;%Q3^$M^8kRo9XVquiApVm`TbVfMQoyxTxAXaGVqmBc zgrre*PD5%+gmY6a1)m;pTqMrB*A4F5!kAmMILq^xg1fOdp2rW9Afi{Zs(v?JW_*wu zu{`CDS4Xaf;G_mUrp)c zAeJ@1*ThKDdpZQADgXGw0w{gX2WJhK8~rXH-PPfcNaFLxEVfWhr1~nOPUiAceE*ib zYW{k!v!eS#7^S(F#UVKm46WFPXzT)+SPW;TvDNVImE}x>a`(I6JJHH$umxtZI4yQs z8@w_L&edQ`(tU!;MxKYLVHnc5LN7`PopTcSIJaxWZK+nF2^k<==?!BhxHXqUBf-7w zP2|vC1#J#Y(ecBh5t|-ibf*(W4D+hE$cE4AI_$5(5M6#fN+Cd7n^HcPHN~H}cIHBI z-Qv2h8D5tQrq)<$ksZ{qDh zopWkStsyMJ()is0YoEJd>CpeqP-%`%E5nWj2u%~_m<7Us#V1T6j5_CS_4tdCQc9CB z41~`ZEFXCL=Tc~>Oh*DQY9>=LRLk0-Mupr3?O~DiJj}5;kJ?KQ&}&19U&b5p<_2g6Itsd$Sug3T_TIxjUEW_; z{5&p3fQehTdz{MA+>#C~Q)D1a&xlNKmW{Ytvgy4V*V=MVX!s@L;ib?z?*y@P z;G&^iAbFTLC&`H{=@IoEJ@DZ#WQvv+3&At0srC*qhfBEl(MV^^Es2N$$8l6kZ&aGh z(Luu84KqL>Q^GXB=q?#$gWBsNkVr+7BDwD+{adl1d1tDBnz>@>);u~tJZXzfJjU;$ zw{k2vT;3eP1~M&=2qh4=O>F`=P@=KBGNONX;&x&m(LV$d}csc?+A*E6dJ#+$L~!r#_v@o#J|m^=Bwj`TW= zDGU$@Vn{Tma{k6-VjoG%+FG;JP(txIEbckh+kZ=EnYQwE5p}C{ij#jDM{m;!9TzPV zWnqBqK}20-qGxu6I7fQG@%sQ63~R7^X&!uE@^GYq)p~v@J)zC%U1T$q8eeWW>j|-y zY&QtvRtCilG&mI1gUK=;q_oR)CF0rbdT^J(DiousZXeRSnm)|ROKJyKu{9HahaSym zJB(b?G+KzK>G-9~2ewNr7ubt--pfooe?78lae?sYnphIsB_b!=!r9;?CDnrpdHuYA z*yhfcV}-3a;vZB5(aC)iU%JrI2vt0F*O-)$pg>GHVSa>dNk zB7`9!QglX_nI452>oBcaQnlU8)7WVEld`eo9BZhQ5ANom0}RJ1{qUmutQw@o5-;b` zw6_+6<{%%@GGGw;zUZpU_{-KuH|xycox`|hG0+4hKXK)0Wi&;L)aWfF{2q3%P8gBD zgR%=3`={L_QNb^BU&2d0(#}5ZGRNSV3*6#t*LLC6K5G}1CdYE{X&S5LnjChT$5g4g@fh~V&+F|r#?lsF ziW-lOLUqXk7-)U6(Old{i3gGM!I#$v0Q1_QIVd&TShGx&`bmj%wWR_zmnZ28%(Giy zsm=Chd8Y<;BRz!YPd`yh=vfg2Z0oQSb85Jf-C_1~eVjgLx&dh*h6%`wZ$xf1W5$Bh zQVj^T*zRV#$v7F=WXWXOzkD_i%(~IakTIH5gwpc>BuPll7D=I?XC{JafjwD;Mv(tA zGy*!C4%qKe@)4V-K>Z&i^Cg3K-+k`TeS`*+e2vy6Y6F8WqYZ!;@)Sh=G7xIP`*Ns6 z1Fjw=SrF`qbLw|OVPmq&_F@1#5N!w@a@1q73{R5Fka+WX2u>e;X7KVRCC)eL z&8}bmloZzn_5S$t0}cXvNd$NE#pbraKW2<^4x-Q;H`xHx978g6X%>?~v!xlx!LtK> zR?4j)oRJ?#Xyt6$jBD5W6LUou3Ro4f=S`DP5fN3S$*qG3TB!fd7Q&;0Xcan#Mal9~ zN6w12##tmE?;oKwF9*HPc&J4E1YWip#ss)PPh|^WW_{&+Zt?{hl>&@sKk5T9}!NSg&&r3nCST;BYUsQ`)3e$p?XcYdcmc3_y3lV5?NK3SpL}RH{0As8XuG*wE zGJ1yS1T|BQud^};lxu$=flYn>u*f0=rO=`skH9WbODFrCV`x>!oi6jdcbdQm;2v0! za0@U)UU#YH(4WD0N++?!kvIbZ)#sK)Wy7q*iN&QOtgwe8476-qm9@pKb5m`VX!p<$ zuKNP!qJ~_%SE;34Hrv!L`!_2VAKA+XbL&qsG;@vNK=P;S_Ob5l)!Br4{2Ry0?=Fni zeKPpOz<-7J{TuLq6_WcOhyTCB(Xczuw>Nj5KYjXi8v(Q1I~%{^|NfWa|G($|TmDVs zW03r7K;f4%09HFd!2Lh+7XGjKKKfIw4nXsB-jZSgK_P&D=WiZ=>plK2e*b>mRRUfc2e;xZ%zv9_3}@lXVo3h;)&RrZ>?mQmc^W5$zU9FWs9> zGGcZlgY@zO*zMmC%amAL6_H6abcsfKJ7XlZ6ZaA+Mk>E>T3^eGo0}^j9}ODU{eBw> zZXZyhH?eQbSROS=x&n*s%_Y^mOkrJR<$}E>6?fAvlOd@!=7NH?C1C+zHc9UCY`{*R z?%^BATT%@3X#eW?lGFo~Zpr&JZ1CL8I7-&Ad`WcBURb@~Sg!1fK-O@z9sI9nZ~X3e zi|+urp_oJ~2P@IPeXJS!_t!?$*orw|E_y=We7zD{^IhoP%2y4QbKledAbGA{UA(#6 zfAgLrO_*f|+pXUn9q+&Ca@F0V_oru;=g@li;Niu^*~P1?qa&2sO;I4=)eNf3l1JZN zbS@8l_1IN}TEC~^JXu@Cibqd?u3PDUI1=^A+8QFhM(KN))|WI1TiV&xWh>g=X!+_J zPoz4brfdCZ;V9w1CtN%rj^l@IzCJrWT>Glg*p4F|VK4?{gQ9Sm40u` zHZEI_T_ZMElNvz>aSW^{x7WN7Yx2cc%L)-t@YQKY=`o!uY zWW#86l@@bNMicFR9c`?+uDI$}HKW6(8?m(0g6x?Y1u z<5>*ia9e+)%5m+vXgFRCUnC;4?g-5zG_i|FF7M+ShD1`|Z8X|{mwydfwxb#KrV4O? zN9)NUGBPCcyv+u!d2t#tVe+vqk^t0>N{KmzX@e&cCqMuz8#Q%%*s-F$?4g8wO`C9!<(ogVwg;xXi9T7~gyo1)m}w zH>c0&qv0SOl3>%Hj%FqP*QhbAhwSRFjo*MSEcxa)u(%Ez4I`n9+xCm8Y@M7kffG7P zFMjnnNu}e&QCML8psAjMhSZhm*CHWYk)s~{=C_$zUg(!sNH&T8G+Ajal_;4K>)O6A z)6sBsttB6>$~>N6R%>ftH9TRKFX$s8m9iGJa7-7{V%2>hQ+|}g2mcnC{SuDv{w=V6 z5<~eD)Pg4l39jFIq@@Ku|Cx;5ZT@4;DqnW1b9!}r{8fadp?0`{hHSO0hDk-6U$3yU zai+o$OJMHXE%|nw^@|*3om60g^;vhSQhD)xHrQ9fB0kVI1 z{lBN1&z?Q!`ajRMHnz5&L;v5}c)s(i{{N5o7yoI+IXv&O^gbxmDhwPCOp1IsjM^wo zCx?VTeWzhrB<~2&0s^=uy|lQ-*Nyn{t%y6D(aM+6X?~Y-?Ca)>7cW+b^WhshclPT^ zG9l51-s(ywK!acXQ(M6x;0a^d

a~mxsrvhor;6v0)bW7JI>jI*K(OwS*K_eYJZ{c|JkfPU~(uMfKi7oBs4`qc*;Sv}SO19Nee>j5UL1}j;S z0*+)7SG_u=(t$?|w(LC#s6uFGiUctUz;h*mbBR_h8UcW@s%(;c&!EZr)g5Br8nS?z z8JnP*JiFyNDpNw60R5zhFzQ;6;kBfzdWC~l5Ur!jD-eK)XIhnLrL{1oyJav0Ej~>R z7fhtVL6|PULuFS`GV#)iqKF?YD}7qPfL+ZT@=k}f$>C0t#bOZ1q1P>&G~i_0+J3P^ z>#*p~cc5`xJOr*6t4P2f0I^4Xf{cN~s5_Dc+2|D#IBl^8YChoLtbapDZgrox7*+AF z5*nKqHCW@43l(aec&G?;=*KDT1I~=1`pBXAz@Jh z_o*j0HvF?JU-5;qw8EcLV(4p)TICKnB7+8!_RrE$L*iu|E>jSBBiV^BWZCk35GUb5vJ;h6LHaDqO>kQ#b|(|92CHQupshfG>k@KGGEc0f`5+5WR@@`jNDz=366!SL^uj$!#Yba02Q zqZ<=swl$W*?fB(c0le!6-MOmA6IMh8uKaGzvm^%P$@_Y(;|*h7mV3zsSCKcmflXu4TZ;kIwrjj!VJL}a`ZT2I zz<>T04N#l{7h<>0)Vis~E(ImE1o)aZi_0e%KJ7B*kE7dg(c6|a%SVwnX~dP)7K)q` z1CrcdMG62kj%RFH9qEbIY6XS{EkdxO6oA)K?x~T0=`#LYD`pzt`ZL;l1MtF0sg(=#uGKCzA#hN9%c+pPBy2!SSb^f5Lh{hBtu#11laS#s4)2A91$Lx#8 zsN7)#N$GP2hQ=U>e=IwpD;N5}ImxgqH4M~`3#JVxm_}YOZ92&`{2S*(72PqU(Wfjq{f-#nG{OX!Oqw;NM*Ldl3+>uJD>Pdr* z7RG-S98fVM4YL}FUjEBLnvCQu4B1}L&_pT0wL6wokV*Ow{8fj&I6Bz;a_6}=FS}kgd@2`2i3|m! z6)uDh0t0PQw2_hOH6oMMjxL#%+cYsq%Ddl^;* zl*80g3ASm^H1(o2xc#8aL|aMjkg5zdx z-<4vbx(v7ySDkS6Zvy@#2WlYFw6B}f4p5_+r12DlRa%8SJA*e&en-<4(qIs8%ScN4 zU7*zO%1?hb4_U}CTpA&^ABFFM3g{7;=3c^Vq(M_cy)=8Afq|Ny_uDg=2d94l49Uk{jG-WrfSsAbhOy0p7}an1M9~i5e>HJW)K^z z*>EVSRm;$K2Dz-1&R0@3H2+{?<7@cwmCgnYL`Sxaro}L2!H{z~83a~U?E!-%>c$2o z*W8A7d_8a`vTaxBEx?@gwdDNQ{F;@E5*8p=s*Sy9Nm`SOAvf~OZCJvtGdjmMLK9_b z($WzJk}M7o68jhOiRB|}-Q`+RG*GP?S|{g51SA7Gz*2M6Pj6PMaaXI%8b{6$*1dTcN0fCCW zgdQtTaAFp52|Za|4ow)^SDh)1o@ut5?k4svxy0{JDCf%tjbLla%BqcBtJ$AN3Ky+r z90&QNRvU#IWnPA{VFcU=JMZGg;e%oy3(#*08`CDvXIK$|)*-z%JkXTnC`#fm%Siq! z_7<7}Td)#cVlgt};QXi?wL%M<-8U7e>u5qmjSK~-3Jaky1{8P)?~6yqu|^xK*<`@d z=)ep94hWz2_t*fz*HrIuQkLPSHi8U#90L90Ce?!0YQVb>U~FenL^X(}YqT@g0Xr>6 zK}E6{jTWX-dRqsoSK3OAX{E-=2hJRhb`{f?uJ1|mAsf%eT6J;a(0(f=z^>q~VIvzd zswh`%c2a8`gj$SJ~B=6`<KW1dn++LbdismbXh4PO<*)tZ3KC`Uka_Q9VFK8WyR zg}LpjtSoV~qQn%9_SHqiqg{Qv)?gSYc663CQ>ek$_^e+p_N=j3LQ4}N(G9vX*Z{sv z9FRSQ3Mf?zxZ+(P41iSUg-8t1b&=1eEFELSTAX899#pjQ_UzlH5Yipg1ILaw zn&UYF%9^#Ujhcc}*|fC)6{{nNl8C+XSQp&7wCkIc7FYC$=5$0=-!&VJ*j)5OnuL5F z3V{-5Yz9yKembdC zWy64^8Xmej^9)>pfmj(xRAR6Ohy=Y&EivCANxfWOH*fi09kL1HG`arV``>JG(K_~? zW7Gy~<`V8aa6zp}20+BF{58gZ|G3$H_Gj1fZ#LimX3O^BjO|oNoM+MT;VvYLmD&f9 znjF#^+=3K3iKEps)NXMXlhsO3*yGzUC8jMsE<=i>Tde7jwj*`_kW z1=hlfy=IfF$`ZO!>yR2!+}0u=nF+(Z9p-I?OP`5XLxl(_vMz;?m!aYXXAl^Bu#_~W z9AVNYS(G2G*bY`h%v+9^*9`2(4Fgv*7(8~~jTFf*DR0X~WI=$DPNU$phM@n2oyC5! z0%NUcXD=HbHV&5An1~f|>y4EUR_@K6K@NkIb7WTXfC0AVOhPf^Ga?Q!4MBb;FLOEy~ z&C(SWm1Fm>E6y2GgM4-9URiuW zO9ljQwDJ2#x{!Jn{`nW^;v>(CmylOM-HCWZOrUvjPs#_Twb5#Cerj5LhS57OJ8m+< zt>3Q6ET3;|w07{5W*ff0?TRFXW1u(q%}sh^^Tmr6T6nhbCLm^AZS_sp4DWZTT{q}w z^fg!F2#oT9o2*W1!I|dGgmxjD)TNu0l)^F*nq|y()ruVc zjIXp(pP?7(%y3j_vG9hM+bnv`y~RvrUr z^mvt1Jju`|=`2YRYVOiZAU4pz6=6Ws95RS4x^-O_i_P;3>d*@%QuAUndf}yuykWA}I5?J;)V9zmz={V~=^-szq10n73Rk#j z;fAW2WuRxuBr_@DH_1cS>e52;4H8tjQLayIq1UN5!d@AW$lp34G=9#3*^3qe9%18C zBaA*Z!aEw_9n#JL$s;xsW{WFY&Fg;5 z5ra&eo$As2rm2<1BdYwlVTMMsOU;DTiX--9j3_p%%%TPI)Ftn5fWH6H@v26*6_D=6SoZ2Q|T1f+hh$W_Gl zVWz$fb?5X$N*W(l&ieI;GrRnQmDiVGdk8r|yq~8Q8yG6AvGp*uxxs25P zF-lCuf=%Rr46}NfET(f3&&DseT!p%ZuTUp-Vx>{8L}!NDtP&JQMNW;wXE^4n68WY5 zW2E^Y+Z$l;7UZJS_|Z*6DuV4|Hf|bd?Gv*I=KG+$USlvT#IYI-j=s)vwOqJH>r%T6uGN#RFK~Tw7@%nM=wDDGDU^gr+65sg>uI zzB)PWM!Vo7*Bnp<9(A7$Dp%gsM}f+naGpGYb{rza$Kseku{Z&%Mu+Sg`8Z(Y&UW_S zoStGn`EI*q@;}Z-Pa8zW|x|?noS*uEYj$4o{g1rWqv!yHBBTyvLcaN z6%|2}w`|b6)a^?_6q#m!_+rp(ieuwgf7hB zmY@7K2ix9fz*So2-JkIH9=yYN9?m*`?7N>pbPo&SMtF+EQR`wB)B=6Db?ffjNw$cj=8Vl>TjzvCxKaf@nrBUnm${Bykb zK?4-rQ@o&b_38N0iqao@*Nlye`_|6F#`@8#djjDk?S7k+3K84idlen0+k9+2og@`eto!JInz@C?ZAAT6dvxI9G10TqRtvyQ zWptVWkcfuPf5!S}jp7{9wtR^0Xbq0jteS8h3O?GC0zubEe7DYtaz+1=v9EG>@H79i zCqLY}ew$COi6C`n_e8)m%m#nQ`u85)a)YSh#}96ZH`1g=RgW%YAAjv7GgN1nM?hNN zy?fWtU;)8XlF^IYc6r_iYJ1E;w90gSI_n|%e0^4_l*ezb^D8Ue!^3F*xO=w3>J_3; zNV973ANLF@WPg>Dq!{AQ#{bvxU!cmwka_-b_%G4cv#l-QzwSJLw!O2tvkCmyr_Y}M zivRMD`1f0>Wgun)I{^**l$NHKDBywn(Dc}yc*A`LUWID2o9+|Mo>-ri#X9>*8tyAp zv>Tv^`Tx2&KY9P^s&o7r2yE-W{WtCJukGLdoA&b8Mx#3;;kuZ=3{5*~_uzD9k^Uo9 zQ=H~}iW;ZUZ~qN5`)lKSX$~K_mM>(`_)N$D*Tz9UopXTP%jo3%m|mL<^5W$$kiE_! z3Xs74@)J_Y8^qPUjIJDEAr-rXTeQomtQgdi)rje{`1YJ$IF+&sXzsb@Jq0I<>AZ?+8E<&emcDPz-EoidM;Pd9Gzi)JnrB0)t+b}3fdEu3Qh&syWR{L#kqXU~F9BR7-v zUN%`*Dwg*Z#Y+8yPojgj`=@UXyI$iujE?sIAhw*SbK1S!KR%9*58vz`gDA8&;|<2p zxj5{eU0oc|GnZ$t&tM`a$>6^k==>u7+uxh_e-8iOe)e>M|8MQ=Z2!vt|4aD)KZ4CO zOa7I|yOIANGWf+de&z1}Xzq^L{hb-SXXNPzcHA%L=Z#;)(1jEK%9(%tx3vC?F4{ks z|3BM${*3Wox1K)Ve!le#{C|6U>sS8&Ut0eqDEGoOTu{zM3&J!a#HIZN5AM@lGKvbqxXR*J$$^astmfoQePr|b_Lua?)g)s;kBd}+ zvp6v}FZ^TApVMOlZ3)go29h(TZ;ySsf!0XI;>f^HH~Zxdnmq!zMK8gU9D(;LaF$m7 zv)OFEc(y?g|I2ab72`Jv&In0qRl+SK98Topzx->PScF63kHjs0*_&JR=Jn5+lnb#y z7m20_hK0C(UJj2|t6y$yJbl)t|KN#3A2}_h)kPu#gaTrwNMbnYoE&};t>PO?Af>LB z9A8;05na|?S36jH7YnzV_aItUa?bb(Ql{L~n;S3eX*xGm3czJLVtmw3(*6yJy5$&E z1Q?N!0VLKMwLFadQJJ?Sljl?c41HFYhTtVtee?l*tAQReoa`jMFNyuHm(^fhx_pm@ z1gq6X{N*FBAVNq%D>_al*E3vR$rw`X zJc&YdeQ$q>y<53p+#s9~?pCF59MSUSG9Vl-WOSv0${gD>anY?7H^X<#_48r}{XDpr z9bhSQ(kFGq^(C`@)Rn{v&VNY9T=b({VQMN7Gf1h>GgdMok%)VN2w=j3rx@S}$BM>8 ztJeVz46qrs*tg+@A|fKTVLsjB9l?>N=2k9elS#@c3zrAyN`ait=VDdf zfmH=jG<0Cv4zUZcFw~R>x(Y(=p)Cby;Xe39xF3hVG-`9gn0Z#V_-&p`sZ$!wXl#>o z(x&${?!K}qv^O>dx4NNqa0=#`C-l|3ZP5Inn-4`YCl-4X-)ChXPVe>qxFzbiZajPa zdNOM>Y{5DMOl#@wu6~VnQNI}TtF^0UQOrOeVHWb>8Lp=*5B)sKdi4kT1HiF>g2FM0 zKtEzu>v(Qm=0;)y^ILkGU64$<#jgoHG)^+}{&Nf0FepUopNtk3B9RD*b^aEQjpmaN zQTP}>hOJ;>bH-u-|hrgmXCnzyey%ALrq*=+}s* z^2~t44R2BsTp@T1YC%ODaaM_>$+&@IMugy4PKk6MYa$>J8^91rsHsR>_%T&b4-S$X zSfyyr5bIt^<5+E|pl=M)xL8UO$6eQR4AN3!r|=2vuN?IP(& zqZ`I}Fg7yCwsy^BC2;U!A_i#?T69~DgdvXq`&*app6<~IaN_mZ=e$Xt1kFr$^{u+P zs=6*11*mI?tIB_aOgJf}Kqr#lw2&?1brUS)p)EB+z5;y5c+7pLBD(Bk5Fl% z(#-0-5SMfGCeO3p9=SaX+=5VseY6E8FTyB1Gk5tY8!vSYD?)sGRyud;D*yUP**N%~DvSN+s*pP@%X2|MjJ@T+>DwfQc z?>1zRCN&rpHbq9c15h03t~R>EmEh245hB5^dBqnnGA7SwpDt^p3QCC$m|q7#X~#Sn z>Lv_EI#3I{N6?)NUx|=+ms~S|3X4DVdlcA@2FTJPo3X1IN*TVEOD0FoOo~HN09*oQ z23aC9O*8)jBcNd4Ujk7=tSaCY!3&I>lkkRWazIk!TNHr7AF++LR`E$sY@=5cdvQu6 zlee*+DZU-!?S{!6=1irKXvw`raSJbGxS&^}#cu=Pq7hUo>Qc&xsiLrZA>fcqvN%;S zheC3Q8ofeT3Nx z$K>4Bhm#Rq;>lbbwM{a@3TrXwfIvmajStv^jtf%%w6r;H1@8qd;f>S^?BFm(r4~+k zZ2~KYf_AsfwX9ZWhTKKFLD zLkMbtq(=D2&@zxGJWaG@s92FYy3-1SzG9s?I-Js-D9r-Q1}#9POnNIG83sI1CnKL~ zA(K!H_B}RkjB!~881GBQ(v{j=WD4;GB`K#(yQL=Hu_R&kV>DXpGNrKs`5)2 zA&d(=Cn&ZRP18K2n1>B1MK_qM1O%i5Sa%rC3`8~DE99(7QQj$rfyBR27u|hRte}uNub9pmmx7YexnZLy&5ikIa#x6FWm#s}-n{`-P7MbcTeP z`QO+7VAp58U;iWepJ&gO>wnfO)hg;FvcL(ioF}3s z@p{a*d&=CeAX6^N`{*Z*6LhY|B84}z$|8!Rki1H99tHWDYzqe9p9b84$$JFaf z03cdwAQ(}--rQ0K#^iy+HgV35{1#3-MOhx+Ixv=|jA(DeM|MZ04+P%Vb5OCc8Wx{O zn?)EBC4~P_Z?+l-`)+R87m->`M}u2U6?>~9&7Bc1aDEQ1{4jvnLA;|HlK={olfbH^O#jv6SM zS)k`}ChK6fa)b^TRYob~Qs!{QF`pA=r4MUI?|uV@NUVCR0{%VUg!6|)0~CUwBHgQ| zNp_;wz($>l!mYqBv#XRi+oWSosuG{52wbTB_({H$dA`f^c-hB`F62ENEIvYp0}jR8l4Sy(zw`ndD7h5c}h((j_Ja&0|l2 z(%cyRA~6c5JLRCOA;j-MGQNG zL2qJ_bc=OYa#4{Y_-802#lL`ale zNMiDnM!nedQa^NJlR`I`gle`EKK*AVe;;~`GdvWR*Y;FL&yQF-;yL8fr#HII(DI35QWP!!655*+BtS`Lua&=hPMT^ zQ#Y|NrfFmKC55w>@{wL(#fFS0q$gz+AIVqUe#jRzWYommPim8J5{`+fNRNyYf}!l{ z?x}Q$lv+fmk-(W8UXz!^h(1GSWS$82{^xGxS+t>;;S?({ir)W| zgA8n;b14eqyaOX7ZYLYx34EqA{*<1HBhw7)?1UcwtAytL3x~8@1TLA zdhs7Xb4BvETkq=c-*59QNQPDErcK&HlZ9w2x9sn!o^mjl?G`y#ApK9LDFcH_8)245 z!wd5n*-+zIavgnSen%0zfd^13^kk0FZ9)XbMp$RRPDd@x9TCQ<62&Z#3 z#H+afnMPd@)P>yujmcyz8W<>U1~tafpVl2eSpGK<_ea`)RGvL6t&{!7`m^=*wKDnt zmn-Xk%Ktw^{bGz{AQ$P-VJEho!NNOj^0L3+s+3R=*^^$t#RtR`PaPumz2)R(X2Pk?Y2qHLvr=qLDc1&GC&wYQ2G$@Uqt|V7;K8M7^LlXzM9o$)DR8!c)HDUs#Id4qZ?^Z95=&S|3f9eaG3Y zw~lrjO|j)Tlj~kI+H^+#&K9>1Yde3hy{&I!3EjVRhJVJsTTP`i(W6<8)>}IXZwX8b zwe$X9r-o>UcNoR*ZL_v# zd{eKsq4%T|u->xoWmebUtsT|O%J>{XZ|yW2hezgjegg)EgHuC474`atNQQ_<5le?b>fbbXTF zww;|F{JpcY?cfqL_TL=fv--X5>^BeI(Av?DZAUIYzR{R)SZ~t8;NNWrs2ysS;hBHI z_Lmw-cqM;sJ0EM@GX8~0QaFIFvGBbGpHPzR_b^;|fzv$%qYmEQ;l63_)u;@+n>tSY z1UTgs`dvh)b>G*RV6NEZUd>{ZUBT-dm%x5uM5w{SIwpcen;Zoph^(42>^ib&XJ=t2ZCd3?;Pyy z(L72ATj3U=am*Z#$E`vGQ#)fG$K*@<$-!*Q+$|A}S9P^F$7^g=z}31rH=JJ>nyXKa zrLxl=$X9~SYcwLWCdQ%utAVF8#%ORxrQ<68ti_7JrX`NiByXj+ zg@ueQ1B2ZdP{$gWCv0`BY||bi7l);=Aen=Ta3!6QJpt@II&QUh>xcFI-TMAc16JHw zS=KFqIo>)~LFd{@fSTCU;v%WGkAZZ?+D#ahJe{IpU3o(8FK1;N^D&}%$xosH^6fV3 zk8t)^Q0BcR_%zC>-L@HX+XLB3ub1@F10DaEnA@Z>-sAUmL>}+k;XI|;q=`yu-<~yR zNEtXNPDA0UJM{qJjNd487|$yOo*msS2hA$+x+j z_(TDesl?_cmk2_?LqAb7Mn6pGP&|UK(8j_L04DK=?h<1kxCz7w{)+D|_50hI(o(1U z;y2Rg6#}|ba&wbvH;E90jdHNq6Q~Z&dNmgQAl+T98V?+)=9aVCm8X!00sZau(4z;0ibS- zEOqdQRi>pB&>@Nhlt@iBKhahq425b&C}jUtf-m$L>u(dP1zl z1-Trd5j3MJf?~E8D&qH!AaitFkSV?#G&`fQH9gDvXiW+BO*Tbm2{H`CNBoNAuuCbM6^n2!{v5Gn<~CU1 z!~QUOPJ^4RRlu}wMn0^l@d>`dvs&mxT*HN4z%acE%a#CZQA@7b#N+o=d<+2MKem7V zFK-oWdjXYaelN5z@SBlnaaLXI^kYYj9mpDNB|dxN2);Q^W7o5lJBG^VeWP`lHM+Z~ z3}WUJPLqGngRS!F9@^>6#V#)4u<=z4b+uSx<;atUMLEEA?L#? zN4rbt-KB}oe?J~XTQ5_mMX5Cb|Bb~`i!PUk=OM){sSRc7o&uUD3!0FVXQ4n0mqcN# zX7-3KG_2E%wx7~0$cN}0;}=S|Kix5YbVjQ4vve0^mXW`+T0D^C zd=AiMUSBdlA}N);Qdm+Dd{wCQGcsW+x%Z)r08+r*$D7bVIg2e=K@q1uxGYGMSiWB! z@~I+SNC6V`f&~Yf5oA0)0wZSxEm)#4te~2CE1gl=W>QYqnpyGdtyxaReqE6UVfsUH ziz9(1d_dM0aKF=*Ja8M$?zYYeLF`h9Cwf=MzO%W%qCu`5Q7F^Me!FHM63^nhT3<%d^6DA^vM zbqpw_*&nyKRqXL{sUln@WxbQtlFAWsGG3x-)k=Xau?kH##(D&T0=!=nP}HiMFe~_@ zKsPD>J8i=cPu>!dCOf(0!gkWV#PEmKBAW()Cftbk=|(EV7@Ju@?x$O1jhfA4l0hZ1 z+eNK!)0tLEgABEuhg z^uvqkH5}Ay;79oD*-8$nD1nc3qv;PFc~ZqRC61*);fA6Y-V*(atplP~qMMIpGiKF^ zt{g~1WHd}Kyd?^xs2b^;uwg@^XnpjSsHP$i#^j(L^M388?52pduYh@rDl9`+iY-~X z&*+<%r0H^0C2f)|HMh|;oA=b7h_8oZ1@`uqFUm3tm#spmMr5k&^e}Dxou$>owOqVG zifgMQiv^qY>~Tm+&3#7C5d*5h;fZ2@I`n z*X%GZlZf5Qi8wPY5{77v+Y^b}BsB}vNCe&hY=IPZ$7F3!EI^Isk|0~xhQj9b#lpOc z2)_R2CF!~16R(U07ABVGFyU%aBnlODue)q@ggG{K$(kZT!pKyBZsj8tdp80V${>}S zDP0p|1O*)VRBGN;o>CRTh2qTk7;AvyV`6kA;;P-$;!r)YT=TbVy4=He2m2qr1thaq z?VdTqm!GUV-q=lyNkr{WM!lGZKPvWE)qhkY_9^*JKo^g_{}j7{_sdr+UIa#%M`83}8C%Jtm^`5D>p?Rukw zWt>*sr_b|McfFd$TS4@AWLLZ~IUvdm9ylm{jfhu{2kJr&V@lkGvtTI5a$RJQAhqto z4?2`;mWa&-T7P%Q*V1*|{e$`m2E*{2@9Y2J4}WOt%whXtuq0B~I}VinV255%wWL3&Yt)jOeX7M7Nl*cVmMIjZ0@d!lU`BQ* zD!h~{jQa0tAL{M5^`paDt7QV|OyX3NDxp(|eeattYoB{alPCi5s_ zj#BN(8(RzSU^V;QKnFUeV8Bsm5kE9S?#LzxfC@IQHw+wJKg*U$-Aa)hW&Wp$AI^-J zh$%0{%Z_TOq+$d7kt(KKoDRT=!((=Ks_pN#GHj&!@A-HZWL~_;zkHbmP)`36uTL@) ze-_R!!Wn!?mtVfjix)3We-UT=3ySieyz}CPwn2cBFJIb@9&Gs*_e)5C{mZA!=`Y?{ zuJ|eY%FXe+Pw*`(XB-=Y-f@fmu-zYZZ@0=6P6M9Qg&Mx${PmUfAQShU;eTxA5MQMp5@Z;d@j46mR%;$o0|?>m}96P zIh1pd?5A=H<-3&lA5lK1cpZB5S;t(o)BIUBdq$QGyJJ!c$Pgaaq=&3YM|)T1Is#^A zI*tOgVmx6AKRm<$V}$}hpqE@d(Pvh)m3LO?6mHs@@5v6zz*s2e=egXQsjp zV{Bd6#@LoGE&%Jh@IYjM!@`O()4k&m;Cb|OA#9dxEiV-$d2veeATn?`aFZlh6`3Re zJveSO>lr2w2XEEo1XPv0=oV511OtL%>qr}vC`VEFTroatBNN)V0f$No17b*}zqyLp zqwOBLj=ruWV+vVL+EAp#Ph0STe`;I0OI6HvhSGt8phJ7Dx9xhfc>r`xhLi3t#0`r2 zut`?jDN-eAeN;*Yqa#`ZQ*zl?oBuRjJ^An%+4mpE2S@c?H9>iiO3R-qSQEwg z%hh7)8?P!S539Ttl6rSVx^*_t#QR)p=4bqPBOTM#APH1x>4dbjCCXBXy9zSA`3U z;(<{BY_bFjMmPQGctlb1(H_c2`~N5Q#x<9f_bnnfJwlH&r=PC^3YxqWB6R18_!}OW z=p_tf-w6jnFai3qK*eztaF3A>ERoIgFqo}!4goxru23Btj`8s4=-{x{7Z);^xr$mw zrB*T8oImZUR3c&zdoY9jS9mYaXW1RYT^U7OMSy*zgm=S1e{{Xcq?c8rC5CM_$FbIW$~G<}vMtLT$dED|QnQn%m5DaI4amG6yaA8Pg7 zQSmb4%^^)ad7yTRZ9aw2WY?-}4Q~OG8jBuG;}XuvKB4K5lJ9i$Y>uL1X^M;K_!?ed zo^z&2=x}u9PbS8k^npZ>F)3b9Q0fHbu}ncvpwb0KxT9M~L@#KsKMOgJ1_98G2#&m< zGiDguMzv2FKqNA10Nf$sLR-ie==+3@j)G_>OHAPoOsVCwPbOYPgy{2KDB6ePPBF+u zz`Ftgt2uJG@BI;T97fmAvU1HGW!i&_R!PYS2YP42*Q}$k?TI*G^zu{~##lE;!DlUU zbhQvU9&|aU%E*$$WMDWZebhfSL2xKs^D!FTyJC-Wj%==3Zymos%G?DZQBcY7Sd@9c zwg=Q-9%Fg23j}!Q=%D#AD}{|f3y35jzyqcvzcX?G6;$MP*CMiJD+xpvkq);Zc|25* zo;ET3X23)&B8`$znZeyd=~l+Z$uL_1Cf@;6M)Ei^BG;;AmZ4fn$VA3z2J<{+8%HKY z6t`0})lDAWO_CsvA^1=dl9qD<-X zR=Q$fh+H!2a#o`cluD(mMHOKpT}drgksk>kGy|C~)5`xJ*Z-LjJbqyO_w`a0K4Sd$ zwbFWZy@c`KtJSA}=KuTg@!xAR48us`5yx@y@w6L{P`jh(B?cvO$vt&J|5wS2=T-P` z4gPxy|Ez39r3>32{2;~99k261EdlaYtEB@S?YgV-!MFoHg2)ALzv`{0`4Aw~LG$zn%SxQT}ooL4Gghg6_is|mH^ z7?>ANpNpelNZE2IW^4gCDFjfhmh$5DIGkb8y_zUh%H?vQTrB}=AGc~epc?KKWdepK z8WS^_+wyVbrGkdId5zdJy%P{MWuRnVBMD)GlmtSOM=W<2m7XNh;P;Vzes2@CL=h4d)#+xe4=}^|6mB?N};{VBoA%{ya|o`Gjn_r2tq0NC%PY zeSc9k2yHl>K*Jq_j7g!L?nYj z+ltbc3VWXA_76s+?!)w;N}8pONnzRju8i%jGq-Q5+@_d-lw6`noW%r*~%4kB-^4? z5}v98-=r-UzNU!Y$H@D)_i8)u8vFIF^9+xmFwC0a>CaK2ZkL>oFzWnB)^FC|*J~}K z{&ZP=Rno5C`q(gqSks;iQ!K87%yh*g%Hy7S@i&h5y*WB$7- z-5OR!8BWUbQ-^}r&jJrl89b>a^-smtv6*a=jF0dB!RRA0d*oD*4&a(C9JH( z7LWpKhQw0!e}(ZCZp3fwKl+75t#tM4>N!Rea8}^l5FbYFNE1Cu_9uhycOy1|3LY&l zc-apIG6|zy=OkVS4SRJpK;>ZCNAVLVB6{%+fKM1u)v{aRRB$Qyl_Gkt5EH&*l=&Ag z>IZMcOJ3{HS#f)V@x_3QCE)=@TKb9q^WeoLX1o-i(r}oT@}JU`^?V85!jUl;19cYo zK<9bscI{bEs&+R@s8@mG81tc};q##DL-k6&^7Oe?wo>X;%23va^Wz$1x_r9qtc246 z6fWmCuqk*%Cnv0HK9=%Tcm&8m!?-lQGv8FAH&Y;&(D`ycgMH8D%QVI=j}a!qSxJA{ z*(r27UnTa3=vzxa&7EY%r+9_xkCLV~D{hgB!!L>3uLw6+R#u*6@&79}{YVkQrs&J& zCjKcuU0yD@d1@71ySM1NRkpOe?4;wz3a{S>*epsnX|xMW;t>it3G9a*+unt4&?$_= z%X90i+S_&%r_&EdCuhats-QeTr>C{TKhMtKFUD#*gZ)QTsl>N>LR8A7^)>HjID*EX z!}k7>_q60yv$7l1dusc0e>9p^-KX*DwPC;K=e*+qP}noVGb_+qP{?+n#CLwrv}`ZTs~(_rCiBl2j#M zR#j5TT6=F=OfUFAX@T!<2I?ys_Sl{Fp&Zz6Eju;#hBe<^JWp+$m*G2(>mR4H)*M>A z+%*@uspBcE0WY}SgJy3n!`fZ2#REY**a{Nh4E2?vrGZvM{ijedXSBvHcXnU&>k}oR zPZ?RXeooO9u(&Ntm7O#xUGA~{w^EMRH?uZpRxGy@c5Mzzc?Eq$A2~Y+lt~&AMXMSI3e5o_lX;3=!}oD$gZE`JIkpmpnu>eDs~5 zSn{T89{TR^p$dD`GmuaP^_*&HxPyeF&_0(r0aJ_=%AW6LK>ll|gtW z)*I1}sl1mWAcLM~i7xK-ij#8?PkhXYPw@qZZb0gm)t>#eI;yxJVe9~8xE@t=(ui); z2!2ih&Qq{?uTRK^?Nk*KF&L3!BqHOtSOHyBU!@9OocUIIuaLO6Cp{)mgOw+w*VEqck~b8#ITHavKmrtof7(ef58>O`wd)afM?7AS%> zdgxQ{$8$3*A9Dv>nO<8T-qx`fXQogQXkTQrzELnr!LhO=aDt$b$yEY0Jp**5J0U9D zljTfpxoXdkuhKOxsY+f#AO)v)MM!}~d9>tgXuxpKCj?cB^1s8&&KB=^><3B*Q4FeB zcl$GiYM7fdVU596WBs^ioN)U5s5fu~PdpHhlnG~W@-9rqkb)$j{rNO4sD#^+E_s3} zKRc%M0XTnG4(9E1)kCKjFBP9aP$&K8dm--Qv8d0yX9 z5-GBIUuqU=E$}zO`l*8(Mq(EGJaOu)Y0FnS+TSJ_${3^jNd}9T`V64o1#M469=lt9 zlpd=X)=P9&?}wE46C#%&PCv?`uj(+B8NaZ5{Nz*%Tu9KP;$(+-PzsDF=iLSgY_Z#Msj{&a%_zh+&AOgmG;M23q5`$-b z*b9~0D)xbBO9Bt?knegeoIUK1SQe8F?-*V+Rhz9ur|4tgc%LI?z+0#x?I;RYhW7>~ z+gA8&EhK&_ckxNix~VMA#m4Lbpg3+E9OM5`#M-s*nsiXiwYH78^y93ie(p1#&WHV~ zUhB421Q#(({^6|44 z>PVo9sOoGU&`gR9r$xp ztd^!bj}H5H7Tyt@&&zxhesKEdNorOR+OnVzyl6{KZp>CkIoQCB4?DSGwNZ_lChU!s zF+Swp5IRu3dNgWODDB_TP~WXA2vkRAgo>0BwYLTmt@7BdiWjl`?W)W%NdU_(U5ffC zBM@{{3{=iUuJ_}707B-2ptCq9wzz437q0a#XQSB}xX z--ao<#jQZ-47c{4ZrjctIL81`O8vVz$}~Y8#uRBa`#+MJ_w7%%_w8U;nQ|W(Fl1#- zPAH7a9%V%`t->cWW-3ahJt8V2jwN7pAg(VryT@M6mMb_l&+AQq=?;23-Dk<3w2A@W zy~f#=UwH~YHIsSS#CZ0sN5o-b3fLU&-n!AuEXlp4oQSglb#}@R7%M+r4tlSS)ugt3 zvkokI^X<$I@w+*Ds}XN$XTt^HMDgWB!$TC})r}rjanm?5Hag$L+d(5%SWbQod@^E= z0)xzg7_`*+EUa5#JS-6jS6&m9fO+(pjq_l&`9WQvVlKziB*cwm@5s z7@#UtnQvn}5gejRmYP`eXJ-ZAR%knJ&(xFtq8?a*P{!*q&W}%_QM_8#%)PyvRUL$z62vywZQrRZVNfmV}y{t35!Htg<*mm;J*9dz1 zK|HE@mH}ESY&x~((HW+E4bc}n1`bfSGvnv~w3qx_(NY*kC%dTOs#8ZjY(|?5#n+_g zr$2gW|22K_Nn+#D9H0XPhK`7yY@LIS@gszTiN~QE;ZEVa%VtWWoM74Fw(bB$s~t`^ zrNAsPENgzQDZ^XqYmf zg)4UFgln5a2KOr8@R4(yJb&uwx_f^djNRx19)flPG~%~QRgi%d0vAJ@brhwq+Bu2z zHLMbz3>=MC>DFk0Q0! z5CMa8h-?9+h;%>DA8Sa`_B&*#)KZ;}{@=nXvZ*%MR%_;{z==CFKUR2JbN~mO5Ogf% zB60OvvvpKDI)`eIv6NngC|q>2paxU_Y}EWsJzuBV=ET7`<*glRXYScy=kuo~5&(tK zfie`>FJ@(v`nWUa_JpF5tYl<&A?Z(eyU(c&_t>7#&(H0zzCFRrs-go# z!91T2^SPdrUdOqPv+r{+CcIe6@7%D4*Qw);4*lpzP%f)A-#mUs-*YlF8V;yRJMJTwo`k%cM4gU^{PT+ldJK zC|;Va+20j{u*abfm_;i3MU+6#>`gxDN8VvlRYIhuTcaOtPNd$}S()R>fwM}S=5fx# zP=9dBOUx%2ZUX`Yt{~#cqpn>J#3>PbsnzxvQG@XKH(EMiH_YdSrDy%2e5RAS7oI^> ze8s~HN3d~Cr#D4eBmR1C{G0NHTqqud-99Rztr;V;9W4E0e`)4J$;|B~FQujGrwqnsrvTi*O($aCKo{zoS!o<6;L zj@b}jXsn2pSOUY-UIYt4EuWj;0ROftBy#XNxuo2~PD6hGzCe6+GRv4I({>T%X^Oh` zDIZ=YIX{e{_~i3xhN&X0CnCdzOpGh+$RVBRGx)NvfAUMVTQHp_#fbjM5NlHkZl36% zg(|!i8zLY*oB=1Qr6#EFZ!Cdq(f0ByP;q^Lz2tzqJb3>rSd*Y|3qIU2Xx!^RdAJS% zF>L+0=crl=FE{Q>l~w(tl>2hVAtWaG|gKoAq_TcBSlXC|^;K37CrYxtT{K`@9p>NdMke0xSxMWU<8ncbI(3W?M7>pE( zu8q41h8-qY0@$?k)W(tOVV9}5fAqsH({J<5#W&eWud|M>e*Gi0${W@i5J z&ih1uhbcN|&3?c4^B`vkS~GVEXv#unA$N13lH`h&>3u4d$}i;nv;#U9XrG8w-5<-_ z&&-x1yOAIUhk^;UnutZ&7{*FUZXb>5sM%gXdS~tK*N`ID3JafcITIV#U^N$OAeLbW z{$u^e3xN3Z4k#F~{B3+afxFI?*!`@3uHs^X61NoCYGZuB-nY7^3C9=U%s1Q@%+^~; z9;-&`XtV#^(DPVPeszi+3&y2K*-_^nY*yS+aea2i<1L3iHJZSkCbz_%IYyF*y^ITE z=#MZnvs{p_K*ez&A0HvgL7MVUxIsbUE`2IfT19>!ASISa;nh~#!}%TDmX9ki@i|S1 zxj7x@y)jqBqTL#ZgbY<6)F~nITqk8G7^9(eO~L718l% zf~2mkiF z7>5ohbKi&ERA%L2;TpT6VY%Y2pjHvuon?wr>ofW6bJWEvGE-h07+U`|Ow(O1&9T2p zQO2oYrO{EOc58jD9J{%m{fMho^ISZYL;`h9!OkO{Ngb~`#;H&IFakGxLlC{ro<#j> zJ?h-ZIDAWhTFTKPK9!RzHUJYXig=txQ0>t)Rm{Pe`Ztbhr1fq=uqV+2qN$C4eQvIn zH3xWj@qud4G>ps7FU!%b)J_i}I<)+ESF!1HNyp^rXBjWr2{7MxUYfTz#m^~vB{JiR zy#ya&PBtQEQaD**x0VmQn8QV`Ki#pXP>*jd%?u?w?7~YxD$D?f1yFG$`^_UoE3fs< zb^bWablB1!TuYyd9t~a`TwAF@_eToC+>w*^B!ZxNvH@O1+cbkzJn9|;Q%E?u0kq*C z)@}fk3GDMtW$vb{G9d*0*E7zU;@POO=5Z9x#%X?j|T zhM4Qge5w+bh}YpxDA;%N=AUl~!?fl0AD>xADUeoubX*noOv^hpd@h66Y!mD(QNs(= zTf50_ss&bYwr`l$iX@BnDQ%N0|H3EkPa(@ao&yr59vW95R$rIiLOQt)IhKkutO&|O zR-U*?{g?g(e*YbYbBImF$qY4c%DHk!X{`{9n>*N#Z-7p5%J1+jXsxQMiL}6QQOs>D?clS1y^@3+!mjLiu$T;5t1{Ye@B(_D zHV*MGwoDxNx@743o4m7l!?kPltL!fNCZW6~5oy~I6|wK_f=Bbd^n@PX-D{pEm*dSM z%}g_)A9#GB6i!PClPRp0DTsh_FC6Qq%M!Ho)sDr z-NoTV?82U^UbqMy8(3Q2_HQJ(S@nAD?_^%qtTV3rWeV@}vJZ~2{}$!se+%H1&Tx-^ z;LCH*lDKr|-QMxiqoY zn4(v=o!w9Xs+~RYONICMNgMHnj>{;8CAb_@+WKR3t}emS)SmmHW{rbnI3_XjDNx#1 zu;5G$sOQ~H34u8cv|6~WZ3oNih*`IqoNt&3LJbSWw+~t1^xslGf0#R!i3g-xr6IGv z-!q#T?lXLhQMn$C3DmCM9eRDh<&meOe`A_W|F(LIl**m*tH-FWq=n0^xDlVAl&Y9y znBJ=)5@0vg#5HXXzYhJp&rfr(dpw8k3B`N(`#S-9RT(ohy$Z(;p!hPSoqU&xDl;Dg zT*j1JAI6bC$9qzM7;<^C5c=*4B9M$PPWQMKOpfTAk~R*LrKZ-FU0?Q~UyVEtc93_G zk535sDZi|oF3_hd|3!*)UAY73G|q8S`nR^OAr}tpf8>j6w&zv;_4C9L$c6IbRx!0- zUC+5-wcE9|&GE&{|NbR?o_y+11#aaymguEqoEc<#R^p{2qR&t;mUXzjiCfj)L58&` ztYgji)-eur4Za5ABRtjY+Pd!7G-r(wF4Kge4@E2(PghF|eb;A~_`$Vd4{kF(@BT9Z z$}gCj7Q`04s_zr+@T?35u!szw8tR$n3{xsmsnvhz41=q!U6;aZ9*|-Zyyn7sAax!5en8ri*}KXhrcptzx_L%s+#z6z>MJay(A35a(+7Fdeot zIBnXI-)cpWF!(X?b#__0{KNUI;P~~N7pi8KUKf{0x@>_D>b!QLmK?3 zw`i}N?H!u_*q3Oq%Z6=_3XNnu9>faH?u*iNyBj|uTtLcEr-WP&kV;YPTxdokV%bT{Ak!%-$oW zx~sv?Dl3+G8IBvItL?_VUU77#p_Og=#DMI0z|jrtHCx8m2Gr>_JtiE{OlGX-%BdIS z*kno@H`RhMl5?LiA!uayo2y1_YX;}L{IAp3u{HAhlY;Tem@5PB1@Be8Or%)q3`|9@#&709(tRjEK( zsmk~fXbw|*qbDyOgnIhJz6uH9pgFH~W5^QLib!iZ46SrU-Lt6ZB(-XEJ8{~MH8X*o zPKMKY*H@RlL%1Uat39D!HO>*|K|hH9m1XbO*b*TetJpdn?r( z@d3Uz0!i6DA-V?b+duNfHu}w9@uS5Dms>e$jX-+-9bKNVTraE`FkiAbx+LHZ8+>gD zT2)^m{~ny~Z#uSu2kiZ|{J(s@F@Q2Y+K}-y^f-ae!CfpAz#3cp92`KAz>Wply4&O+ zv)*_7-xuh$LYq+XnuE^AZfXtO^!fC^Em64MIJmkEUs~Ka5aaD}ydW0w2m9m#+z{MX zD1pzQY48zE;|DI~KmvP#YnQQL_YIuAosCKSWcC5?4kQsjRL3Si}FCI+c z@3`lXS-3S%c0fxw+dzQV^DLokC#ac7A-%&oSzxTUZxf=2Zz&=OIjw;UFmt}-0eG$6 z^KedJX*=MPT{EEpT#n=OERG}8LdktIAe$?E^rC>1)txO3!7n?ON1a><%?&L&ip+0|%yqWOFG%*8~w`A z)iz+dukYz{IXu)iYpp53KGzhs3DeCE-qrqoiN4?|X?I!i8FASjI_0Z_UG>AAw^V)N zKHd)gNn+dwbaNx-WQx=?3%S$tFtMR;_f4D&k`WQnza4s>e)tQ({2c1V+4}~)9r(1O zzXejLNZA5H?J{m_z|!W#n=aeBiDHJfg9BK;vNf3Z^yQ6kvDg90?Ks+kLTVWf#wDsZ z9GT)5*xdAYHMR#=bCNOOY?^#s&xE^poW|Iav=4Blg>zyB{23T%EK2g5?crcuYWB&% z2Zsno72u`lvu^U$sB&Y@KHf+&a7ltg@}du`cVDlQV z^6d|%(vJe(-gip4v}CC+flTt|vB`ZgIBCL~Jdd@N(4d0jnc8`lc92>hW>Be^EnTW}v=}Km8zdKIZf?k;c)HbhRWSueCh8C0 zK92P}NtS(*$!wy5JoNSbQBp+l1r_`!!mjMjV2oxG1!#V~gV&2Ao!=V2?;ww6!pOpy zev&6XN|K$^$v+_N5jA5ePjY_t>hpd2aU)IlszMGBI6!j7i?AER$D0jVASXh-nTyOB zwbs;?BD+>jEUB$ZM}dlhb9<(X7ZuxYGNpRl-x;-B{GhYPB0>zD z;50`-kMHV(Gv?5$fWMHE}c9U?+i z7tp@D4+Z}gpV{=QaDt9yf$%v>Lb#D&vJxBler3k0QOqy*K2^)zXYSzgd=zj;TQ=X# z&6fqq&pHQtAwLv(q~Fv$h(8f`lDI&}@iVx}ar{GWq%tA`wd<3_0S$95UYh^(cHoGn z)qh-in?A=puQY7c-`d*P)EC@b_bh9lC3l+^5+nXJ^-cRrf*E;(qE56Q_M@kUUBCO7T<;E>1}aedaEziXB^(6D#qE5=$&9)Mw?bE$2}61uTl@ zh}Ng*8*fx)mU+_coK;|+@UWL>kBRDz2#z;)cQxh8b%wCF`LxvKRCRkIQ`CuxrG@@B zn1pqU9wKS%<0dX^aON&GzA)qMa|%p5Sz9#ZvPnO{b7t_u^*(h(2HuVPVP{?D!%s7q zhwERo#jN>a&Gzp!VS>QzsCjY-G2XZ$Fj&8=#7DAqk18fc>wHD{q(EB?9Q8-T9o?3U zM!}a{ET`Mkiv05}<$=e$q8qztx<4bq+SFFGb~ZPel~-YZT>kNF;a2X~2;^_a0@U0| zrOy2fZuMK-p@IR{pBp-{)U(pqvqTzq*_X6}!4jM^FzHTZ`mt!Rcq}=H7Ln#IbwRVB z!r_M{WyxzP$ncV3{Asn+QIx0U`8w+o37B#rLvdXDT*iR~_%kP@HxZ{OJ*AsO58sQM|64jFT{DNKksWUpL;nTHMI z5vI=I{CenjEChlf#B%BJnZkdQ@m+ws{U8&r=tIuoz+r)u@;)ILK8@_W<8ZO}*J0X^~2Kx6yu;=^3isNBHS$1N-aO9((VA0n!>k@`QGp z6glE=b%S$cw=ko*4+-dnRJitd8*d2N9``T;EnG3vLL>Ewy_+@*&mnh6(Jl8>suzA5 z8%Rr~)I+O=cB=+KVDd)lzV7axbQ6cVd92eD>uE3jS|-}|ynRUcD2;upfk=KplSj76 zxV8Le7ZO%a-F9@N-e5wI8xsDFc|k*jqC^~9%BD&-hAi@;pYfJ+8?(*}{Y~Lt%f7jT zUzeP~A}=C#x)}Wy`Jy#XK_Bj=$Pi6-e1q-F6ps+oYYl65P zAUa?g>5n_2Y}RQ~9lm{ew%*ueXii*#V15cF(%$X-lpyz#$u40Bf^Y})dk1g?P@ZU5 z-wz@H^f!_Gcnw~5jNfW9=w86P+}DPoInf7Nw`E>0c5~Q;c!r&^pRn`-s!^hpnJAvf zX{ZEH(+3iFp@h!+>wp*o5Ubj!~6?A<{jC6&Kq_^ z@3wDgpEOCJovqo1^KAnG@(TF^#TQV{NWd@?fA#00y*{k8J^MO1zc15c#abShgnQ5x zTZ!zN?SPGCEroR<-L%k>=P^vC0-@Tzz()qQnxrn_Dk~#YQ?I_V$jaC`d5Y+w83nf( z4@sfFLDFb0kT2YP^JHotMaQVryE!uFwC+}3wGARBct6dc|J|FD7xwgwvLK?axm zU9vwCL(7+GJ^;M~^qkSO&%O%k*Q)u5h0x|4IN!MNyBcCI6{7ThLgh^D;wx`vo$w_8n$n#S%mf} zhep}qnBUQL%oP}_9kpgf0Wr;~j-(4_u=HqXTCHWXMoMKvS<&?9=-Tads{@5bh(DSE zXpF7ijp?y2MWJlcGFsK8`V6HqN(G!#eS+Iohv`A}naVo&`q$xGx6v6+767$csKubX zx()D1jt*nG0>!uq(b95Mozr+ckQ_-?D+u~|`qIc8=ukOzWD=}zm`I$Yjb&erFWoy& z4}5IA@G$GYa90EA1nVX}cj00icZM7dTj|lw2G>@B9g#bQw+}`->qkQg47#V>^!y{9 z!)zerf-R!;|WHnPi7`&4gy5&@Eca&9-3W)}u1Lt@^j$j*ED zJ_OV|M)hW6ZMu&}W?C5(ShLiegqW?oV}3#0sfE8jYh{Nh`^zRy$cK)m1YP=)TSv@& zZzrEd!8^k!S7g+96P5$F@K7KQ|1wgSnMs$ocB zkp9}pcF+Dx?4j^P7JtBVoTX`#rZIXOw4Lo4H;^H=|05Pj0*J!#ozqp<7)!IYA97?y z*?RIdCEIYsd=Srv$1#WN?l^>BWWu|qXOlonCR961bNi^BbI5esyH zVt5rV%$9B83~9b)C~0GNY6`WAyNpPtr8h7#k)kAS!`9fa zwzGkOPD1O}tcfdIWY~*0^#sA~wV<&${t8pP<;kLWsE~h~Uq73Ww-Y-k-}5ML z_v$t4-%-oZ5rI4nrmOZ!yjm2-2Wul-TQ*9CD2iPQRyP#1J>EB zJ&wd~3JWE8x&~Hgu<#*EPRx(c^T=DF@fuTu&Pj_!1+3YD39N3;tuiswfZxJsIR_}0LJt_JuF z8$};jc?%X)4>`Jac7@q&AWg(?Ud+dpTNwHKIT z00z)Q-yFz|GSp_z5IeSN1?}KV{?+j2IL!8RJJub04*jV^yXMCjGFd5xG8s0XQM}gy zY6ZRH!RV!Dh$%WvZx;(Rq-}?%jHzD(QS{Toqs(h1Xs=qWo1cr`E#Dn4-v*Un6u=al zEVQ|T4aa2g>T1(xtUmevJp6k^}VK&r4(vVl(~SM+^2G66Ncixv4V|+ZsE`%?y9WRM1Ocbs3;icE%J+m zy-jFZ8cvQ%eF5KWO6TA6@*?C5e2ea*z2M%qzm+?*{4nl}OhLdfOV2_KrkKxxi_Fa& zBDOOyeP7`*8}0;~J%%ewbtiIYyJGL30?bi8jmEehwrH4i@E>jpF}=%0^3TcG*Q48U z%U6^6A^%eMu6S#PFu&j#aLe@h6b@u~TB=XWDD`(ft(`3Btiuz#} zSe!0*@Kb4&S%B0CD35k2?D2D*RTT~l`=NMaZqAxWMza~V)uH-PJ-gq{8iJ(`Bs0^W zR+|`7pOuPbwh_d0Fi>d@sL=9~a`GloMv3J}``v+c*Ho|!R8lCV(_5$Ce5~9SMBML< zIA{X@Y(yH1kJ>ntuy56~F4YUt{T>@7$W5Em*~%#}KmVzAEE=or!R_{Xt*H(sHgH3| zFR7^QtTwmV^zi)6Xr7rCpB)79cvB!18E>v*t^!FX(@b&Kvd|y`>dROapb@%ow~*Hh z0W6&di!`*|Z`xd@yRxby2a`vdg&< zoB4=}XR{HZ_Q}esY0Iw-&Tj0zSK(DDbsJj2qmR$!o5jjwnU8a|-};#+vd=mNU>=Dw z4i@mp$X*E3L5DpVs}oC$6l7~9cZkK%x4iLFro|Az&WR3yD<>P_yPlZpNa+wi17+t@ zCPmCjN$?>HdoJPJ1_FIUF!A5vL@eIv0uk!-MJY9xe`V`%AAlLU6?Um>VfIH$Q*N{w z22nJmqi2tYgkD89#hP9j4fg**mN8)86CujfhJm2G0}5rqk7q(7jcw3?#}6{BMw~il zEtgR7wwgCQPJ<%zJb5&><3_Yy9g~9v+0vznSR{+wa9is5gT(S~NI3|oNOzc@?lRmd zH+q>WwV=aEgm3f#O+4bmSYbGnso5-ih@$U0Nhy|Fi%&wEJL^chpydAGgWBo1F00h6 zjuwL!W|dx=SJ^7JayCeqCmJL2&ML^FOJ7SSPB|Wh#n}no2kUEXd{B zVbPhqp~wDIeD1tcxhtWv5LA)U($3WDv|v#K+F%Qm`i&eT&mBz{gVL+MGb^=bMnu^8 z313X=GXDex(GmGM7FDTJNHA=1GDcpUNYGn{d{^_>E*dZ|#TK*S3~JrxJK+h$Z@I&g zsL$wo#U^c_Hv5ca_(bA1X{#J~p6J0!rOd&|RT{%tT{1n`B;_m>4|=mr84?!MoFt}Y zFNDGf$N$|=M@iX)De5*Sm)-HUfn_jjO6zkqJ%q5>AI#it!b3Y&0QKF9gj~i1<3&in z8c5|vnb;Ek<`L69ig~ryJc-T-DJN$#HAuL#5vwFrvF8ONRV7uXFfUjGXE+C9&VXc2 zu%K^iLDMArQVmvWeGzipQeyYRHcXoqzTuFej!BXapp`FBq-Z8-^s_KE zG7e!OWg0Yab`BS1DP?SeO{YDvFZxmZ6{p1K#7C%@LZ;{8Ek9&ChGng)okyr@GDuf3 zz2s&hIMPKgI`%;y~>>Q;Kp1P!phlUu6MAA)o?^OGbZ4L< zZ=MJhW8=M>Brm6{#11ATH@Y|hDDXM+6HF4w(D9p`r!QPxE_^wvaA^uTKJVG0A?H_d z#lkU2DQ+!=pbd_oX_=8b0q?JW_^qCgKj9QaD*L^a?)fn-N6ZtrSa0f+53#fx@CI(V zl$icww3^4hu%RhM=4sdXGyd=F-ZIgC*BlIo5q}wg;-vaStv?yq0Ds7 z5Z5liSzv(FmuKbHGWX-zF=9PcI~q4lpmnEE;8cOMOG;|DvXx#aaO%fSGk*YNQWIyt zxH#PB)IWh~Hl=9aZ;VUns*Czc6D?0%`*3IrD`~NOn@`I9K zstI~706PbYVFoq{bI2Olshw3Wac&weG!)e4eh!31zqd&E(k}c?J?%-s<%iPpSEa@; z{TdM8x{`|pgww)nfc=N8Lh}?Z-WQvk?@h|iLQelSy?5U(pC>PIIcs04jD!(>A25MY z-~8e@_>0^+ZtK3E_ArwTu}=J`g@)0e>fDfs<0NZW>XWVCwq9qR=)*%+d!-;!)TH%5 zty!>%&eBU34HiV+fz}h`FD6(`+Sa@syjh|+Y%>GKbc;=yk8a~T(tE#G8yosHk(Wht z+i&YC@7TRAl(()}x6Z>+h8hkrmpVoq=UPlWcZS6m9EP{G+4N{sW4+EtcM7LC7#REso)cMKL5Q^ zp~i;|+r5a!{bDazIH6h{{DX65OigRLHCFklzbAK>7~W^k`BOSg$BcFWJ`Dv zpJbo>3IhkV?ji*_!Nk?h)=uqR=u(-5F^TbL_ji2oShh)Nbam#cpGSm6Wxb6IQ z0xv^bt6TpE<{gz>sONX6!Hy2A!YN4fC-dq7kQC2+3lEvoOqd z=ou>$OY^G!-BRVbKsfn=Rueu!xl{Vti*1)5$LI9O-{Ij(dS0+b8alvl!u4`z;S$1D z{C!*HqIC`eYY$^rAPp|E*WusiBNhqaiy{auUVM)-nePKyoNfz5r#!GvM|Mg1|11z5 z7PM@y8ssC~-98d1O(wa=WQFlk;-u2KAF3@EKQ!7oWiMUYmx>ppC{QYCOcExYr4!qp zt@b)L7OzwQQ~tNP3nQ|gKTd1L9JWZ+Ca%y7v3{W&FznnVFcL^R5jtno*JN;hlS5L= zIVoTqywcP4dzk~DH+uBku~uZ6KL4aSdjWPmvlDX_q^7Cxfi1>f4bdP-juR$WU%_8I zr7j{E>uEX5!gpearj@RmFj66&*GJMT#aRu33dR&wt69|`sD`y(b!MEyb%R}K@$Hr63{ zS$6bYv2`aGQG%(!xD3H1agj9u>YY=+*+ zvl$4C~8RW-{P z9PnGfjel_H^9_H~sOb7#Is8r)zI6hBF5!qV%{Iib%XB_%yqF$Xz&8-Q!l+1f!VKlx zK@K%yRLK(UXz%}g^z~K&4cj7k!IDzO4Ueel$j@c%EOG5V3mRmjuGqP`)8pIK^to9< zg3n8bFg@_5p-alWb2EcOA~BK9B7;$rk!sfGaF@j@$=sicrjmNP_x3e0HNZT?b{qR) zmBScvfi4^luT9KfuReg8bv}DIMo`Ux6DgNncO1|GY6+v8Vs=C}?&H@WUgcpezS~(a zLo~fz?Bfp)VkUDVY(yH2en?5uhcU*n#t2|vsTp8@DnDzT+U9tjV^`H}3o2?_-RU(-z6XQMggG^T##MeJCS&z7;=YcMz&u1f$W-a|C za>f6CrfYK;op-@s67Lq%2@@?56%S3H;xA9QmE=3>t`oJcH?hWg9Q>a?e$XwQLmvjS zNq5?YA;I58Va?2n!}1@&t1|)6_mFpU?3}FedLdap{qL7d&wKsNhjH(>lU#8xBU*>9 zI<^y?YUtM=P`#*Vng8#A-o{21)OeVAl1crjJ%@sSV;y(?2SC(W{sXtd{?4G;mc?<7 zVf)#*m-2lra|&Nj9W}2uKV6(dfeEg8|HsCxX4!^lGxe-Xafp`Yb5{=eX!tMjg0(77@=i61&4`<3{;o0;J^(QUT< zpBMo<$o~^^Qt~dmCOOnnO`q1;IoHdA?2Ga`bu;{?%qP0c^;zvb9rTQTCgmb{3vUg8 zd5Ih!oBe-w=VHq{g!S>h{h!gYyVGVhAzFTSB?*jnE?x0Io?CbCbelz;`vb~()Mx7p z+r06($uCmqiUkA}>7+7gtM9u=V0&yl2{-f8y*><{f zelL_nwT&Udrg;~^U*qw%Y0_$ba-norb3apMnM(8MnJl$``WYke-&Oi4%t2FN`{t7s zfvP?Le&YJ}EG4BS#m^s0F#G~K30;`&8|tcw_ss7<-ZR~CLO1&Vjp?sqkDQ!;*Ot#m z&5j_P!9VHVPU0(`ec8@O(>}sMB-iMEV$zWJG>9X#U1q~4b@t`xbj`><|N ze)B(WI%0j$phMsO$8^o)%=L6Ct;fLt=eFWQ!Ncu_n(YFoqv+sjQKG}2DTQBF9Fk`U5 zM>iVh>n06@<k)~#Ps-Ld4jS1AK|B-AnxH-A zdD5i^RNa6N%3>Bzu&I9mOyTp-_ab0YCw50stN|ZFmqSmIZq#yt3AVTn4z&`q)l8dR z4o6W>ry`k&5f~}B8^X9m0e()zHVHvI$f5T&MT;o4Kjn(9LIioOEbEO}{f6B4CZmtqBQo zwZ0UksE!-_$YQ;cs@k%-?v!Itc9% z=8>0Z-uH$nQp z)l<)W@~C%*_t?j6<8|@B`Aa;<7svStya6n(EC3cyCuv295)u+U1pESCP7e4_$I zR*~0;w=NDy+>QozaXod7s14ka8V*E+Wqmt>T3|CMnR8G_&+yST8-(e}$!3p25|;JM zQ`8_2iP)^KC|@hr3fzEZ$NvY0KzYCT)83}daY8*44=PRe)yg=j=HZfG(7eAAkPl@# zJJ!%w!6@49$9zMC6(oOnEa#73e&cw3ds`u7%5wrB*z)}0@o0J5|6(9EH4DjpEda*@ z;JTCt$EngU4;+7etfwoDrahTz=O(y_qgG;e4}kMnjR1DFhEVX?;M}mA0KN1)-+Xbv zXFYt=hOJr&2VVcQ;J~ZFczu2AN7L-}Ogo0l-k4+WhMnF(bmG{sl#N=X9p>wD$&Lh>hzvWc+(Ip)T!Px91 zyrKby)#TMV8KB~Yt2r)(^lCwVSx1r`NjeU_-wH3v{3V=cT zgLQYUJ1_Njj3IW!&A)Ika;+(CLsiNrYXuOtaHC=?-$U-A-(l~3;4u=iLcPmjl6yg) zZLF2RkI&Yo=2HX*&X!Lc#b>_?Y4mmd&Cm6>_-}6N>#zByXz9tcD3-l^K*_TC<{KX_ z>QuI)SH?5J{)!fw(f-$`vP10=sS2Z36Dw<_5Q>JW8<)I|bt~}cE-V0;r&ewvmod$} zpghHEuj`_5T|^&ipFRq{uAc&^G#2!K9X@Mv{)@bSNG;C4KAOQiAI;Wjs*f6&>=HZr zJY_47UOQ?=>~1k^)1nL2CI*C3#$Sp{j@gezW{q2q0b7Tg<K$ri6p0|Gn%FZWh#tnN1PY(M$yu$T%z2g^yxgjmhzw_E4A!wt}$zn;A>RH89cPoYlyq06lA)E8WBE{CGr#ANX z4E`|OX(5c6-iITMjg4xv`N341ltn6bS=~`ro08@+P0s+}cg8OryS&UPql*b;|4;yO zYWw*Z*i+kE-yUcU&3>FD+DaNkL6aAZOplxNh-4izRKz}cU@t?DF=lo~CIRrN_)(K) zmA^D93zfxL+TdsXuxFYkyr+ILln6vZX zU(vH>5cO*P;ouCnj<7XUUmDT`x}|F)@+|<0N$S;Z{i<8H4Z7+UwTMxAca4|9+H`3e z4}-Pod(-|F<}6iND{GP?e=0Z-M@@ynD-Zubbq}wO*)@%BS3d9^7Inu3-F(wW`hR}& zo(gJ+U=hT2Ce`FT+Y?)n=ChwQ`*CtEC`hw;U}%lXzGgC*J3qeK+NY_uR#2@)AsIxT z7QGEKCUa(aJ&gOttN0efU&x?w*Q#SSpjq?#r5KtMyo|~4q$nGG&fKF5@_?39d*9SG zao)d5&5?wGIg4Z0XRF_#{vqXL4d@l`QGsPrOm1swrPWYg#CnU!!BJL zIK|5g-$DCC`{#4xK2RV1v?Kt$gp;IY$?#SjvL|8qP&6u;q2Z{WnbURvpTg@ev;o0s za+&y0EQn5&i2F{Q9$j{;3si>7HM#&)#sG%RlYG$ubGG4iD-rWwZBrz@3G~Tg;jGqSOzSr%r@TIIXI+it=+?vCPE<2aiqNK>8a`IU#9g)3I^vE ziA?h~b^6_r-gu3K{x@7eOmS8F#bpgok)8+g{gBgSe8@p!r`Jq{?%{xDG zxGh|ERXTaN;doGf6+aTdOV7>R(qAi&GzZ7#J$G)J z1-u}_mkK;!v)BzwE`ppV2-gHz@!t9`mr7jNV-StDWR&eB`${&pG99x;GIt>wDloF! zfp~m~`-6%@h)FxXRBp4JLUL}kc)W*oiMfI$f|!)F~XA6(x>QR2vn47nOQHnZ@9PUrw`Mmg0cr2`&)a5nWFN^D`|lh zLwLS^xSlDG4}QI-+A%9jOVg#|6Y%mpzJ_{Lhdv86*Bu(hdpVGz2z8n6xrFJ!MRy*L-~i#ud)BdNQP`kv+n`^mKQ$;}iHk zEo=duh$N)sRdEL zWzP7xNW)hU)rkIZWELrlX3T_V>`WHqLO&b~``u(DJL3TwS=5r6P zCSj|TRF015|MZ7QMS7X4OifkJN}73mv#f$mak41?o%%Js!#STFJ=9M_nj0vO84X^v z5U1l>kyL)Jz|F2-^aG9QxM5c^BB1kv2Xo3v%%Zby4EG&yQ=4m%m`B~ZMMqN@#b2_e zCpHRai;a8Kjb+ucpt>Laa~QEx5y!(Q-MFsGOcRW6A68xY29jXv7dRfSVq`u5(I@6e zK7F_aP4Hl$fF_s#k%v+KH;uQeW)pi{Jg}9WRFyHl#!Dr_y;kC3c$XP)Z`W}h3*I$O*}~kacO#l# zw!z+@0Q}?;Wr?YkRNNxFNDi~u0jVlaES%Ro$muLhnN48ioUCO8SJM%?d3cP$TFXjT zG$-_M^BK$h*B|1tu(_@O8wAQImA>EHKiJycSu1nMjB+XuD!*&C9NQJU^^y=I(=_ko z(b77&(r3t;8cb}4$t~Ew`75B)S#eogkJ)t-uP;6rS$D3iM?90og@+(7cVBUURy!|Z zdV`*Wbq-XX(x)=7@f*wOa8WsZ(sHGe>J>6?orf;v5ZmD!&*cNr%1Vh%_6cz_27AzW zm}BncLFheZe<+fd?3F|>2$uQFX=d+H-(rB#J?9589#BY-H9vNv{XSyDIqX z9wNckH@0^-*0n-Mbu`zD0 zEsX!3$+i|fcc1Oohr77rtXUAZn{Qic%!Jzk{!}v#Ja&s2Us{?l;|$}!YQ`D6f7Fcg zA!k9{ddB5|96RGYz@KWy#ckv*=6w0VggI9z|5dZD4mCe&-oM*if4;fDmV&wU+-u44 zv#&$_Ddryw3C`1QG5ZhZ$IQNi@n19dwnulLdF?FQZc?o0?yjh!uWMHrI~KA zo*w40i7RV`y|=lFZfyMan`h>_wy}}XV@>N><1};MY-UFxC$`M!w6FrDXs=q$)v-cNjB7!^Dt$gl}lrXH!G{c;QF&te1F6m&+27*04FZ}k6Zble&IiCd|CLph0hiB z*_c^WpnvD>kkP32b1`essYEoJSs_nBU%%Un^O~t%4z(+Fhg|^xgWl0>qJ;j(a)QD7NUlsLd z`9_x9ye}Tj&ld=n?otJBpD&gWA7KfRm2x>i8pfe?pKTl;H5%T0l}q=nkCAf9_Ai%8 zognJY%>E+!FEjJAk3TT0pLWA9W`;2v&%8JBjg?ixb5lAPN99>=`(w>*zt7@QOJ6^v z5|pHHtctK$llT7n#2Nf;ovP8|^nfKL0o0c-qQI$?SCEc1LGLGQs;hCU4Ud^ylGa>9 zjOfu8*+R3vBra=8kRN}cEqzmrksQ+O)Er}ElS7%q3(0XAB&)I?M1(mqwUSgcLY~CV z^Um;PTYbc~$|CxL!OrQF6lI~ay&K;`CYXuA9rxY-k`GwK?Xa`z<5F7uUf?h<(o?Zj z$R{`npmrzQr)sm_;#^o-_~>(?s6t-)lV*nVYh&&(&*O$h(THFVr~+)w5Lm!hjK|j+@$=Y<1Un7La6!{i}As7q1MkRsJpC2 z+C68#eK`tjHrF~OqT|DKW^rbCa_`bb2jc>N4P#ZjE03WY&c-YZPAXDwnJZ0RDkwOj zOqiYay#0Zj?dF^S9Yij~;nDYBDrcNZaiK6DAdJH8CSp=$9Zx+qIk| zX>ZRnB53KC^s2bGx8^%*6X8&r^XtKfVWy%Yuyc@UUvsh8bt!8@Z;U9XY zmzTcGbUM>@_@Sk-En@24?o(E!gclDEU%8&jdp1M4fVG@0ms1zP@h{h_u{<)m(%*t+ zX*_t8V~3#}574bv_QTuZFcAz9Xb}oonUEC<$x0i$sLQhW%&(YxURXjGj+5yWOl&bx z`PdZMEFSqri^qJw+kL&iv1uA&uc&i%Q!T#Q&WLcJG-2k5)0ng)J z2vx~za~fU(EevA#I!`JRNXN0HQ9(Ou4n*w_j{mbmH#7T~DA9I&Su2p@-B6mN**; z4s)#&kce|^EIh0sR_xG01|zl8Q=YM??a?^2FX8zVNLvPeb7%M9rvuozzz!#c0YSHO z(SvriM1d7|rE}&^4}v~B$Yn6c$94pW6z_Lv_*tbhVooM|FtO8ksx5Ds8Cg8pbw6u< z{dFYAaV`%HTTEBw270rgPo>Xa*c0Po*{d_EW$z>7hGCG!1^rC3)dK8Kd8BbzCezy4`W{XF$ujBhZ(_UR0}xV*alSAG54jpv&$UVgXrKY!nT zwX?hTzxxM=ufPA{$DjUBqBq{;#be4f(9*-k_2kBvy9M%G zoX;aqulQZa-?Z50p?w$USN=e>Z`%7m5#gKZ^q-9CP5VBED}zOeH5{~xbW!r zBX-mF|6Y`?*Mi?j=BAK72aTK7CR8c(AletV;Z!UxJs69pv#^S(Tuq(!d;A|l=4#XL zMCvXsFaL>1-ARbpPrD0l|H-IZ?f4kd)~4p^T5q^Mil|*$SpNNpT5bIAMbX;o zeA3!bP6DlQqW|f3gi(uG1xdpmjUVJnjU8jJG ziCjvV&UExYgvzCM--*OsUV8B7Q%0DmitsUt2+PY4zmU5BF{Cc`$RC}~MH@d6k=tq$ zrPjR-!hD!Vm|FBMq^%VBJXG!SqoqF(RVzLJ6A`qo!+$bbR{A}LjMc(XWb$e zCrL%{;iHnUh#hryfyDvy>NFpvd)|p)s@t|COjXOJd)9BQ*o%t))9RMXq=>%`Oo$~i znnWCUz{WlgJ6Yf6Fs-)b?2=T$nLJk)f0ve;(!X}7*f&UQAmOC0CK6o(y zCqlvAe2${vOyV6;@WaLz6#So~-jXvu{A1$Z?Wd`aM5%O~qr{0(rcmx?bpCLJw03pgP9z~5 z|Kllb`R5T!JZ#*}Taxza>A%fC(!+(tKbn7}8&FJc-U^W1XY;5usafNh(vxwV!kM;! zJ_g6piV+<5&aGWw0Jj&%qp(`N`t^7$c6`jc_tuCEl?oy=H{vYzd|b-JHp`BPqMTzO zujBJ<)R<9JrzlQPn?q@W$^?b|j;L#S`9BeLt<3+yP}j=x7u59yb^TFLmxfYI<9?JT zdqP{^IoL8AR`CEXUT+aYu<>Xoy2Ce4j!6A?4??(Pm%ZM0;VnpT}UGwta z*d=x5+i5!vSf}FOg@3%Tet%&6GcwZ|$Jn12>5R5zOn9MU3IHWWA}mX6nx)#6v5SC% z$*{xXR@iJq`J)qd<|=?cV0Dv0%$ufmD~`yc#l<@=S-TWJ+W#Xpw|U+l?*ejlf|tfy z53wK7{T9Q#b+BO;YV)-PWB26fFrW6r@S}%$x$%*h;iHEc&HZByGKYw1HbK8`^`oom z5)Jq=G*daGQI#=$let=|mNx7Xwzq*XszEo2e934owqHJk)#{xv_k)Ey%?~$|5wf1E zTL;^_KWy&LG-u7sbTDn6tQkCi^9}#d+w{MtXI<{Y-Pe12n%gV+H#5CHZT@Oz@KQAd zXV$C&Kw9$0-TfI_g{M?-W+vnczM46mWtFU%uk;H(%sO_T0l$ygkI`d3QfDF>s`q(;dYRz^;k`ZolW?}YmiQ`Tp zbS#|LYa1Of>0jJVO87YQF;qLc>I>8!@Nv9N~QkL-^4bq!go4R@(4-r|2?qmcUVPpmLk8@HJct!{isc~dE z+CBZh-vKO$+`A?^t%g^78L~oHK3MzSuuic*v%ZGJC@~s zT&6K>_UQeaGm!IVMA@HJ&xn>Mni&23ZtwMv<^gptGn8Qx)&TUcf8|*~`5Azoo0~N< zFHQF?H*K?ql7BIn^o?D!SX;PQDxM~zjU7C;j|u^S>gTDQ0-XTP^VP%4L7yIj|2H@I z>tFc-QTm`&#+?u&?*;m!r6-!AgsIxsdbP8`-Z{3DG%eFIUNmpsVnr-0S4`u<2X166 zAvmc8r!khxH&<`w-y-F&f29v;E2zqY4O%!RTbn-yrdl;8bhKek(ahi^zK}6D#_lYy zzNk0oqays8p7a^j_FSct7pzHwYg!FLbCuuMn&pZS{7_qXuxc91^DEW)g=I5yFl%<{ zRt04b8)_>sowya9N=(Eyp|+uIsBWZ0FLnQT>^C{+y;*#V80vn;xs%7{r26z9)PrT$ z^w-;m`&&O&7Z=R;i-aI%_QMPFXx3chmW?hNSA)z!gJ=IvY9k9?AS#`lA~HpjykPJ* zG5-{?k23!LeLOx}Wiel5+$~N^72n`AF)R4H@$x2R(o5TT$Dh%^!sFYVwvD9`f6P+! zmd7l%(XkZyJV$L~Y2|LLwe&Xkl#Sf{3-Ha%c>>7a#Fp)&xpOl=|7sO+j_0e7-p%K6Cf|ul7sc|0_e!=~UCTKd7qgs|OW~4pHQ5d>jZ{qPBZ2cd-9&hjNygYus`}$j2BV$1dS}554_;Z`R zk3YBB`O9N>K12A3ea|iYJ$F6+tS#MX&#(Mp_dNdGdB;EaBMUtFmMIcH2=cAc7KUd$*9nDt#ryBiC)sGr5 zOkn^QbYGAA9|L2-!HAQODZf~^f>O7KQQQUrzG=(u9>56zN_;5mwk%xRIa4xRoe8O) z(_OV4_HUtjN%WYnwtWM*yD@`M_VZkC7Z>M0$@P|-tPCPBh2=x({;=!62@lAINTx;F z9wzv&MC}S`^vWA$!v=ygb2@-Cbf{MBw^_W+&dSeYb(fUOKRauD*GZY1wW##m?MBUE zeEtnLYHz03(1p)+rS|Kk@wm&K+ADg?<8y!W@L=oZ;ZJ*;W)#Mx%?U#JLMW=+?8Fg) zr!9LIcXV3jGwr(vjX#h-x(my&_|rI~OMCn$^GK&1ALEkFrsjRpdBgQFPU#jFA1(cU zPU*Dqzn51!Tm5fzOQ&G&q84)_CzEw$zTey5+Btk-d6+jE6Q@`D(N313^WDAuox@wBc2A8R4TJKRMo}5ngBBI@qJ%-e zHS859(Ep1QPFWB)nl$9qUs%M(L>*1^eesV?J-H5At$uMjVZ;lGGhdvJ#>S_u;JP3g ziu=c7KyzAm5C;WmgC-qF!Ju$}2Ff4;eBR;=f;kz8g zw$Nufi~mr5zir?DM2E507(ok89fyk!VKB()Nh>RZE3=Njiz`!NOvkk+OaCZ9#fbc?fSc_g^H zD}2kds22>*kM}nBw?D->#KJ28D~oulJ~!(auCAgro8`XQ4rPc5CHGBi(LBCzdu1FA zNKnvT9!ue z1f%x#!|zr-FTRjcVcO*z-g2o10F=;dMQmg+W#K)h<{823zNHjpD+5u<<614_8Hjec z=Be9tknsgHI$*inWzBff4}!jV@VxlOkw)9lv8W3u3a9*I7Fw< zUsDr&xmgMwTMr}G?Z>C5=8S(p>rLFnQ(Ew2cCsz|>38$Pl~1voclLK*y!d3>nW2r_ z&z!jCGJVP&{gI&meS7+kwSVpKe9{f<0nOBt+rsi~%pTVHy4@zu!^Fr))9qnAaToW4 zF1(?C#2%KCpL_?eEd1sjOie%DU*Fl@`u5Xlo$&|@&~i@G%&TwB<+*XU)ocyFZDZZA zef~YW$M3K%pu2CHOsld`Z3FXlt(MhOgB$J9qNRy5mfdK!w%hHr++jI=5+!lhRIjJa z$#u|d{%0PTE6Wc*#diB?ePiPjZ#IA|+-gWz)AaxPZKj>IOXsfJOtwo3#0Q((D%tVQ zZWI~oyBi7+JK^?-R6dneT!&B5jyUH zZH9h;dq`Afbb1>0!Tn2H@K`1;N(jp3xpHr$2i%NH;T%$lc02JB?IaL|eIFL-w6VhG zAnr$DQgL(1lbCiHL;o_mVE0yjV^bYj4YQMQe#%#oFlph*@a#-oAV~cHWz}*A!C*-1 ztlPdO8v2^n#b7{v)ShR@8v~5lMPkjK%nAwJHBK- zBP|PB;g|i0r!cLp6D6WPNHZB;wwWtRD2y$e6HGe{voAyQz8hZxLN{hV4?#a3GRuze`H{$Bm>=LUVs$+Ii zs9n^Q83Mtq%m$l_^6l;24De|$XohRkX8JKVQN6R+1S#@P?ss!8`;pw6;C<~Km6}d> z(m#js09&T79l#O|S}pmWm>Dtns7f|k&dDGe46zmz9N4#sIii2y!pHPf(Gh65G)fn1pWQ18h}m0lmyVbET>?gJ6^!+#DVMzPmsZ}(v9M;;Tp{jmoKH#C{fXxOqF z8%phDec(E^j@n2qU7+?&r|n~H>8IWqgL4t$z-nTq_`@+T9+y7q=gu9ZmwpNFOqb(w z*lP)Pl_lwAmEp1sYe|0UXRuMQQeb?nSb)PW_6<8MD1RZn*ZwjA;0tEpZ;JdLhE3|>LW9)y5=T4UlzPN`%0R1!L_ z1B-|7s>g`sDr{A1CNw;DJ>f;&n9aBy!x*Ej$BQ1ta%5s!x?$J~TY9(;IBXizC{j?-5_kg@ zpd#e9=R2R{PA%$cD(N?wlBBNId|LRTM|fdvy8iPUbMNgOcZi?X-u%4!c5bTPnig6t zonJF$_5Tmo4__aovpqV2&o_yXtUhP4gBJP@Bl&{_%;VOVYjwWIbV8xL5{U{&edEE! zNtrnkYo%4sR)w3e<_HqW@qN*?C=rh<&Gj9NM1s1LhgKft*W31+ourH#P6sYY^yT+!Hxv!}?sI3BuV+RDNsN6pZS! zS1cWxA!Ho&!Z{*7uHDqMaoJ@;km)~~M>sHRCdb1hI1AUxuko{*pMW=xig}A?x|G3d z4?ojl>Afx6%e2rqCB8ukxAbVreO8vKBZz+Wh@4<3V0WN} z##XgZYb@H{(JGkNR$&?$vj3pJ^5fUYlWG@D`Edr+-0Y-Gjr5FGh9+g=XpzT)8`l&^ zrr)=AsAJm@qv%sPchISWMVQy|EEwX>$Uxa zvvA;j&T81S>$LPcr%|_+E2Q&&5uOfu1OTbV;?Q&J1(Im9)i*zzw{vwO+TKk-;y{2Z z;VndtwCVTyL{l}1zB-2>a(icgL+pSD`=G~S*jcs9mlFyw$hejUcqhgcez5U&n`|GbL zHTNZ(?OX4}B;x8e)7p4%r?lwms;zg~yY*(I;|GKZyom6_(&F z(~H7pDEexIR}&TofUDIZauuHSup&)&*g2sCz8!UE)VJ;Y%2%dKvw1Dfj>TzUE6*yd6*n;NM%WHwIWLe%N0<38MR3c` z0=}r258XyZ91n$ufFbajdk5d2#%3{pHH~*R9qVmM2H1YW(n?Fv8x_bewRbYkOjF)G z2!2m!r{i)xao2OAegymbU@g5C@O$+?f&46gm`F!5YO_lI%+RKbW6kB`ezFdS$I!5o z4C}6|S}hZ9MWWl6=?04|Z&v9@_I_)%+S|9~iWP6Lkb)D|Y>8UbE!R@D8&{PuW>@K= zp`VVUuJ2`?bNwn*?AOddS^Zj^G@I-iEH1HHn?rVYoAD}O|J79ZTfAe$wE&iLE(m~2t@iDiG=GGg2s}r0_uX*@I z{St`aV6W#y}#_mIcBPZk5v^Kmjf1v{`@Pdh@NZ9jfKs@2hfvNmDe zlxwwmnMXJbn&%!j$4Yx0%$lnv9wciS@R}ntT613$@mr-clc@vkxuGuA-OpB6R4%sz^J8rJ1v1EQ>Qis2fhjv-G@tE6CQr8FY+hS) zmeE=E&ptV|GoMnHQPd^UY^^+wo5}vRv-_5c*x9Vj@ruv#Jj-Jdraf~6r4i`~mUFog z9UXxanQK$oM}L|(+vT)9ls#E1ZY7JKzW({^{KVD2E^FHA*Jd>Ftc<;70Zh3jfMU-z zl!*7-7rmzT_0B5~@-bagl#sq;?r`b#jXszC9-*H^>3AM$9bqvGrnM!l=>Ib6BuNP+#nGSb9vqDtiRec-^$O1`F?%-^`?1FN9H9&5Cn=7B9;61 zdSZ&Cd>?C8f@4EUYDN~+vT!5OtUUIjZh+;UN?tW<*OaXh0oTaj%5uA4%DuI|#u#{p zWfn)X_w`8%;ZYN&Irq0~(~?2IzWEuyUmrE@A1z3Z4a%`7kI&bp3Dru|hAIv%tMeGN zrYs6pgMPryd`K;>%+MZ^{I=0c$=BddD)zW7nsClO*67P^RU9 z`qoXnS$vL0T9oisB6PCj&4h^xfP4KILDxiGMS$4ViBSNvL_}@rXJgh0iL&H)^;7cM z$AOZ-8pAFtNwf^hn_F>HY%52>?(Nt3h*yh! z2%W4~|1YTi>-eocSp5q#Ckhx}^Ezy;e>iH$)3@$v|8z=(iY1nYV~?cjF)) z8Xl8%U7d+BvXq zh%6SVVPfNJHBBws(szvKZ6feYV!}>uaBU^$e42Fi8=on5J`i!lDQ=G5xVT={XicxX z`mGxN6ZW=z8DnMG$HL&cZ+?Kfn;oRE#Z2Jb4pxlguyDA6|@DJ|pcp^RvK*UcjGs z;+FaARiWlq-%~5h=@6=V-&8j~7EKs6lt;y5wP~__KoeO5qE!0J=l<6m_S@B!+G4Fy z??eeACV%=m8uRlH9?YA+(1K_zFYxb!l_mbgr=^AY1!GoL9xTi+H4v7^G!~YY=Ko^m zKgR$J;p)PezqDvqPs(@N53jEN@?ZBaqiDE6q#_6gxO!nyf_=N_x?m3_s;R+VNchG| zqu0i@zQ)CS*K#MA*_btrM~_x2`1`=T=!c;>h))NX;QqXTW5NlMtHAhWCg3=PeYKXDWn+MAI$s89*212q9co#M9qxG4+F>9> z_DQH3lh#NAv08RtADZ=@pUe;I`}^xVhd(`b{F(3~6iBd?hzKzCfo27?Ye$ip zJgmvwGOd{9N9HiZJ<06hnq{iyU9+onL4)8r8<){DX>leXw5h z;@#i(32IA8!B@H|ANH@!(YvX6)l8gDM+OQ${SG&#ticoLw1BWhSv3u2(y(&luT}Xk zC!wlYqIGy z#)>R>eXFycpj#5>Txwtxd3xpDm<@Nj;v(FdaVk7&!Y=QOWR-hXu_~MVk2V3_cCTe> z`Lk%=M+4S8t#~S@#@>(Y2X8#nQYB@e(IT@Q63)pg-_2O9OKGEcNcUioX}{ByT4xD% z8BPavB%h;!Z8mkXRhW$#G&Uov_^0qdRvx{x5)R}uLWvk7X1)4P6?2c?UDMs*r1qwH z{&u>8(eK4HM{ESeG8a~k#?W&X5NGZ1%8WpvkG1RTTJr`NO#DQ`u9p$~dVV!H8?VHlL|s&MP2W zerkTzyza^tpsnAS*0Z3T&vOwHj-*-uze?oAEh+x3{_dg-T*@IHUXBcLKRPJuoO)p5l&Xxf+zmy-Ma3B zY2L4dlEQv_+Vq0v``|1DZ|h}0I6>YH&vOb1Cn{zn=r_+Yu%QEDNZ9U;MBzr(t+Nb*yxs@o1)3dSG3 zqCsP9y!KAnyfE~8W8TiKzu9>8_BeAroq6-~EQBQp|1k@8^K5Mn(MM=|`(1iBs_n*A zWcA!`U+a<9JGnkHQXMX;Qj30pNG7j0r_E4Si!Es7+tjSpx~ZQjLqjP~&y&wB1n2$Lee;*9>xQxXu++O^O`78e9sPR8|H zG|dfU$@5D~^97O&XX}6ix(n21Ao|X@DX^92>1o&;_~BD+ z(d|r^%}w$3RK1CyL-$+@SeHi&mR&RMr9@ZHPuGq}I_>P+S9|{3t3CItr4@LOg~T3? zVaQ*l1Ad+Y=B7RM$A3(jX0FV%_2TOLC7rgQGS$nbAQJdjP}jf5mS|7f5-+Gx|IQsD z@Nc&v>^LNs$W8lGRs z)?femSrW415Xgu+tOiU7ObUfyT;Sm$t-r6V=m#=G|SDI&U8#t%Al(=g`-L~gE($mSKWP{SjW-=Wk&UE zu<^GnihZKQUv28{@b&_h`v8nsRzg6hf)neuK)MUv3)Qz^FivLks%NH3D7)8>p-blZ9T6XpmJROd7zQI=&uXRh zjpMDIt-~4EiP1`gWp?d+wzU2#$Fi_&08T=QV{7|6gB4sU^Aax4mbg)jX$3P{fhAW3 zw*K+PhI>@qclQo>#|N8-9ux)w<*Cas>bK$qdFfSh%zcu7`6f#Y2sV%Ugq1L?ZUUXO zlfR)C8{chi{QdaF>z$1m7YhdGc*RtVOWxl4c7_U7OeV{$j&nau;x;s5MnR^LX-42_ zsfri9#sbtZI|cA)0d$EP904XJ*k2&hEudlZWI{&^yGcbVe#{&Ts#Q2-tu`W~j{s@W zP)U+4{;Ai9Ud5o?8zz>nJvi7-myLvHVb*N&$yd;GQ63k?K6Tsk4a_6nhkdJAF3T8g z66)z2e@XA|9UfEC8r-yFFYUiPhG2Rop;bl|l-?LqtpbNs>C2n7=Ue-4Eg2%Zq*ODz zYqE8`vF)g5Tfrt-$=i{DKHQR+LG?Q+i zrP)-z`v84Fg1=*VN|T`n^kX-+!Q`p0uMViMM8(cfYW;jL=p`mmoqhG!*qSvOr~;l* zGgJPJMo~^9&rqAwkz!Lyt%H{%k;*fL12*faf96_?IWhKdW0Lf)1sqZ@zJ(mmS&CJ@^(`E3=CcQ{A>D>+GQUp7n7; z8SJB}Zn;d#a;;pp|YVqF{w z1oYUV-IA*+U9mD$4ija7sCwRvPFVeFdHzxD+}PKC5_oUY67NHg?o;U-R)6{y_WK|c zGFM<7eQC+D<~&B7$LBQo-8geI9%-aDP8#JJBaM*CwNky;I-iA~?*RBenw3A?2~dFj z0Ra0B?Oh|}hF0nl)W#G%l4H=?%Qiee=sXRwi9FtC0 z724_(3KPi^bjGAZ&ozpZiK&!W4Et;_xE@pTwAmfBIqlv(LOgAHA2)k#Y)49@#hpWy zv`zk{DW>8fUqa3egyeWD5IG18d3}+yJxT;1G|8 zKkaQEA8h^K=JBDoIuEyAZ9*xvW8=RIiIuG4V@fbiv%aY~+MP~UGr;Y>nDG)T=HYBX zN&Fd84u2|UNxS@#?#SxxzZrDnE(~or00$Rd-`U;S+F0K{{%%(~^?dWi*3Rbf>z)67 zO-IY~ncag5jGuAQ{ZPO%u`wuJxX7BF1!j`G+@N9FUw^&@_0jchZ`5AuE0CIvr=Gnw z)0X}cN%ucJk}ftZv&_~HzvCq_W8jOf!oHYric!gr2!=Ncmz`z+XxylZaaGw5N^afQ5Ctub5vbCd-PebE zuMcO;e}HGL*)JlS|4R9f-gv6X`RBF&T6nN9pR@m3oL~N8|Mi*dznu9OY@t-Sq3WJo zfUku6ncpkK-_Go_FJRe0I&{_duj3Ng9}^!j?f5wd|^R zR#G;^h`l0PBQgFQ4d5=rTCB@`|5Wu=dc%GXN>6NI(hsSPXRwKab(CrZoQ8-h(~mEr zRw&_S)D|o_i8;2A?PND5dNV{|@G#&YT;db8XW2DuyLA$?tr7znEy}qd)K7ap0#zBx z;u=5GsY+T6YZHJNp;3KR+o~PbSaCuu#@M7RXkCN^MYMz9A%d;ln$dtG8AImJiVbl( z$Y_nK>bT*xg9Jq$D2>4q4K`QMa3E3|;yKrqnz2oRvJ6`W^+REC4OH38sX}n1B!mo! z+R;F5!Tf2>O`nTq<>sjzfFV*wbFBH>73xZ`xbp^Zx?DxSLTeHyEGfoRrx>S1J5fnQ zax>|IuZR>B7Iv6e)jHy8XhbC#hio3_%q9?7Dzut-LS!>?o@l@kro>v$Sy4G1UT*B6 z-$>q`J%W2;rL&l%Zx5b3xOQiAC?y&iog)IoHBxdgXr9Y3Lb;E5(zbBiRcmtSldzd} zg}p*zUGV(@vn4^uxbhBWX7^w^aS&1&E$&l@SMq#!>kyO|22QNEV__$GqmR7LIbIWd zcdS+oEmqnJOSMIGjjg(ZK22oby7Z9XPV8?OzD8PcG=P60TUYf%nd`UygHMvU4a~#* zLmTf(V6dJL>sv>vIfqP-v3SsyuzOL{uuP@S1$u{iUVYECbS|i#X3u`z*yFFw9=^f^ z-6eeYYWKOM;WH=4m)$gZ_lF%#rq7&w)=$BH_i|q$<1-~=I$ZL>;r^B+^Jhx#cWm1J zD^BQl=qp?MyAJ&Q`PRPl0iQoeXaaFobV7G0U=;W-PQADX{WE;PJU2Tnf+3@!J(W+c z(`Np`^0M}lleA0v%njA&en-kmqfPacT6&SKfe2^hY$XH!iTbuN>T>0cxniqHc+rB= zrN%*I&C#g_Ym8Q#vnFl2Oj%h}I+OG0bRdsVfr`4r5Q=N}s;yaL>l*Zj;SISvU?dcb z#MHuQJ!65y0Aj~%$}N(+0XYK@JJ?fhDcuc7GHcRVnsN*7rZF3=&CMFOXfSl@5u=eR zB~qrk)5skQ=_CWmt;qs#C$|7cutYr$by;G`o7Q3++{F zKxq$UxIVe3>Uk==#li*C+QQWpoo*I^&h4c-OZRlM-7DP_W$BigqQo@kJ-dyln>tMP z3!{?KJ*rN`-uKN9frJ1QF_(^vnD%To%%pbcE%pwlZ`Us&MQG4Uj>ojj+* z3Qr71Th^(S=rhvykjF(F*90vCqWDy*m=XGEnApl@)5w?8bJK+E?^#`O&R>mrB=AV9 zMn^)hf(}AAgZh5c!p;y*7sL^$I_Yr>i9mZ^dQiD%%~lZ) zJ(bGiq*9lkpQkFd3gH$wO@L`cGVF&b+3k;P>ZRGnr@HUdcKb}Y!M36+MA%LooSPT4 zfLqimBAz<$b)E@|PZAxxk9ss_5-=9x1&uhWejrF=|%~S@AlBeO1H8|zyq-@@T?NwZLy)3AF0@hWOJ_WMXq__|3@tbc- zDO#|!Ko(mYEoW1?;A8cqO^q|`Cz}9yaD*Hf2S-wGhGQv$VmLPSHti8YXRM zmgrN8mWtEO)Cd7Xn}D+4WB+%4jqgUYS{yF-6v)^vHw)s4#y70VWz9imA*d?#{3u9k!a=V9& z2LnAAMlA%zNp!_=L1v7=*G&+$IdEoh0<}Lh_VPT2S{I@;AnM`0hfVsLo2J{+9K{nadCYMz|x z6G8y?YC%-%M1xw`8a@RNRqkA?;P@|A=a;LE6)^I}Z&xdZu`9L{+oNRK!Uie)Ke0)f zUu2tCIzmh#Lv{)e5qu$5XHYP}s!wW+_Q8E>rg zo-yfkOeqLgTrEIVW43sp>SYxY8i}|6pZd`9VYM{}vV+55D04&oBRF%q#1FQSO4G+lTeVc{TxjxH`Y$qgxb$ z997Nz>dsvq%Ump5g2?t(6wb{4Vp)wN6sT00@(if~ScK@qa7Lv^>Ii?1qOSQkpkX{0GgRIzZxa1@dWx-kADK7qo^mMF@w z7>|_)uhQ@zDp0ge#i;Zd-N?T?Jltb{;)i=BFQ!f_HeoAL59u{j*KZmdCyhUTxBF@n z%n6M$14-;^sd{CeNUc!Hf4ZtKP>Oq6DrrDM?F_2`Qh%*Z+R3$f9(1FyZ4T)5B4$-nO?CGkI(^?BL~f1YO8aXUVP z)!d!ciI8O#nDb$WV=4qKwnmo(w9dJyda=9zY9^Ug^W;Iz{D4*3fsqVrThPmESc_;d zF;*dfOqk7o*mOE<+lo@S#6$#zAhaT=;`n)>#A|0jN)uPvLZ*%-36j3}?)ud?zD_e?r@5}rZ?n{D5GZG}og@Yf0v zv5i%m#d5A0w+L4){`e!693Yen2E_&kLlxVxxKBlZP2Y!Ln@5Rx|7N|_Qs=Bh(44k| zGdb*8^I8WO9%NSQbyMYLYO5Yl+1>XQn|OJ7S-Xga-LrrOrw##2?R?OoLn3NHK>*T8 z1nrX;8g!a>W9GuUhCw4da8yZ+J51;ndR;sYrP36lw3gwuk(6aJR)N>gWW8jJiE=wqlC&CJ*Y zR8gMgNM#%&Mr#rm;HLaKp)I{?5GWIf@Kt1ylBhaydRWXbP5%rm|i&!II#{KMVW458BqcbNY z2{+)|_2;sO{p=S87~({I8Haw-m37kDjk{IhNzd3(|J$sh18hMm^w{~e%Vg4b4&Pxi}vJ4X_bD9w~Z|t=O`3IAi^J0a=TgM#y1`<)fN^X)EY|* zwWY@D!+C7W``m0s8DYP|nAV1e5=~B_=hJw;)|$qu3t>}~RB2Mfs>9?%TW*&hW7*dtke!k5YyZ#Gf1W`k?!V5i z9@UTP^n6r*J2y*DHT$>DsO27z0ksqo6NX32kiW4$6AlYGk=wUx%cpDw&LP&2o^ct!qS}w@b*_UqoP)rb?I*u004)8ueV2YiN4OmY9m&)k z0<>b14XCQ)^zOMurmaed3A+gZ|nX43q@_WCV(q@lp4UpeGxQ7Jrk%>WU++&qK}ixll>FMj3ItaOh> zer}wwEiL09uYb$~4GAM7E|#?mKIEDT!sF{p`p>!^>$lvu1U(H(;28Z-o<>tNpKk)fLWK zirPuHxaDuNO$VVJ(^(IXq-|ZJqiNP#e|s24_pUQ>>{$@l<4e1Suc6k!)&4{@JJpY-&xhrK<0(0`myVHdX_z1Y}X|1SZ~m&ok% z)knvKGHcbhv-M$<5SMt=DS!R-*YgWk$LJH8V%8 zzdGbEH$b~lv5(}-6SFiwZ`_X7Xb$C4E*#@4Nk#2qSjj?c^u9@Zec|i^L z?DbqwG45o}z!e+%E6OrDcuWjs2JqfJJ9_hY;X4F%Tye*TY>SDcF6U54Hi?!KubP+P zV4LY>pJYi_jDCC850hbgz=N&)=XM>RUf7Z;cnYo#xG7&uGw@2k)X~E1sCCaBB>51k7h)jX1V9J0S z%h(=`Jt{N3R-Td;`%S)NTDlBP=k8e9_EQ= zUTfkVdUPLD+5OsFeX0R`;Wb8YifI!hh$r7IxFtlWpNn~X0ExqWW=df6*rtoxhBSBymtc(%l2};!G^Yvdn1mos23oL7moa~tJie#f1-+5RLQC)$H2K3wYrzYq zt^{pxui0NJGP9rwfb9^a5cvEouGm)TTt*0`Q%B3_&jG%2<@D-j4JKc6MJ)zaY zNM*JzWXC-Zl^w3XBsA8Lb48j;<>2y6>UZ;cFWs8yQ)a8WT}OR*Cb!x(^NroHd;nla zrn`|&(;3N_@?P}z;gJk()mqY67A@{U1Ko`Gxxf4Yl=%$URKK3me`j%z$OhdR*-Xfz z-*Y>*Ylhv#1#Pu-D%)4+_C?lGI)&c+eUJl^4>6vKQF@!vw_g8U^`me~_k1M6Fk=xV zB>`K606njkavQtu;~>7^_v2VieQm?aKKZ>`ucx#&02Le@_ftcUq#1O(7!{(1rV%o_ zudut?7F8}kD1@h8A z;Ma_(FFk2|<`ZKj#YpTn5m8pqxLBS~kz2xGnoW4;Ju{yoB& z|13uMS5vGjo7qBX4Q39h^~fkwXiC(8*O+x_xu5clOX%a=n)3T(4{4$Q$Ki!t7Urz~ zItzyBQ5jry@U0i>XOU$s*p_C1lxc9wVAERFV)<^l5dm90r0ugGq;7ecT({TDVbgYQ zR=$VbCU`q*Y40J}k&oPe`%DAi_1_kgMx=Sris@g|h8#_gG{qtiTL|QShq@hss^QCi z6~3I6wV$>y%_O?e!yYU9zrl^G`r>U_L4U|K5l7}x7mg$Fw(7o@i|54ER(1?^MQZ>7 zMRL{Vs^NB#*hvH#2_o#MtkXje3QA5X2S#}2G}^iEuQm_A+l5q60OnHHHxSxl)mZ4l zt>T65xL+Tf(?<-i+XMIf^-s(HsP1ooaSh9K8|vvq8l(4_n&)-D7?mUXytTQxIr9R< zw)&N};nvkl5FKK6xd%x?8#>`D_zBFkCsSaq9(>o@6+zDy)j`}5p5l%5@qa}E~A8#22OJzXxz5wbF1%Wkj9 zZIP!6n7qW3NiSLKE9q#dJms1yC8Vu3!yPfNfJobA(Y~Dk8Fjx_9q0p2Se1@>(=SIZ zW*y`R5>t_wMv-A&NKs=l_}2+@E&jF0H?phWrl9*C)*ah>f5p3s1RbO?Fn8RZJt}Go_H66n{Y6lu#FEB ziZbmSO$rY2O5U#gmd$Qffr&ZSQQ2rCb-I*1!j`NU%~YN+P~a5mQt?(Np$gYL9wf=O z=E38sw$0kYZq{|fd5c>$vVy4Z%y`J!9jz)JWR!=zAGG2eIvPbdx)>GZ<`V7yF;j&;R!=KtICzr!s1a8Ni$b5_GsC z?9v0GBPhqtWBaAXoT+Uj+iK!&DwSEr95{r|LetCy?IiZtE(Ne>?;7R=># zoJQ+HH`4&?vGP+28+Hi+Jh+Rj;ooY5GXksS!D>ZGuT7NX?_e!cXx+jLtElh3HT0WU z1KY0)W9?v2jeG_aUpAsWwV7_Vm$`U5DlIWj(v|bnyx~^8{Y{26C~;I4B`-RB)ycdw zfWE!WP0N_)I+@l;+C}*QAwZcpO6I@MO6HF$JNjbD^F@O6#ggZXCC?Y((HG&-A6t0z#q#2d<;54v zi!YWJb%$#v88~E2DO|wAtOY~oiv`0U$%4VoxB!8&y=8CIo#l+fe$9c9 z`rz0wCq|hyr%|6u5q^U!#{1@fhfpTyP8+%$T&t`C*m{_7DCE+V&kknx%9QdTeI9XX zsuNtXSq`s59(HYY{v> z^qaY#%jM97-#f3C*$TG_h8VS45ldLPz@=vaa~8%1U}~pT!ktJdCjwzhHqVKAqz*UXZ}Rk%z+N)fkbMl`skbIfyqPi^h#fl%Khfoo z`&sYJ)P4T7oVqDqkZtz#wno=4x)sc5&iS_$1J85*W!%fni>T##mcJ8;pU;X8b?D`x zl>v@#4Qf8M8g@%F<}6-hmKjg7UlSi+{ulb>*XtX$hL3XuY-Snov}<%$X57=CDaTBe z&7qs5p6YE7DGKnsG}hcAsWu+xDtI?FpF*r>0htuUyAc-U=)hLT4lMY;6<&bRz{?QR zs_%FKJAF^E8lY2F}i|6waT#+03)J46ud3ZbJbIcndt;8@i`R4)9L znX8xXN8M(7*b2=P@c84}`P0%x9JP#HOfz_!E&WpJ!O`kWscdficg+7C(?5AOAe>Ne zuOI&d8d8OYj*ove@;@qcbi@y?V?_P6$+ zGCfj6n7i!=3=(imr1{RteO-K?3(H5@Oi8B2BGqPPX3#mj5KZdx!}L|DS}0-WL} ztT9iGRtMyRegtk3yJr%81nozz!*Ccp1TS_Fi4>{AUf@LoUuUluCxePH2M626un(1F zbvDzMxZ9Ng4hfX9;`b3ktc%4ghYV&vsR_*j%dR_64^2BnYs&|Qapm=Th8(iskAUVg7JJ(}q9}qMqWQunj{3MiwTWDmfU$v{*~y=b5wp6|BJdF)R$`WN97uDBducbd1%Z@JAgcgr?9v+ z(&`FMu)b*O>47G_kptZTH(-ab0I>i{C+NSI^9~A7kla8A_Jm`PD+q>K{f>rQf+rS0 zVW0Ajbx_O9)d>}pQ^P!AqY~JNO_(IJ7bJ<+imbA``PH8Q=JFLS8m_9AVhP^Rv>j-g ze4y|vauLOJvR)TJ>4(iQg78(z2?=}8^>PrLqw+yGsBUmwt4HFFs8#?6#~s&~oI@W0 z18b+$*ho4A3=~>p?fdoZ*PD&U1z?cAAn6OVRz`7=B1Z6X%=Fr{QQn0_EOF6j&`REO zP%4zoRRAThd<}^~9y2zPSzt2`Z{&>V$F;`J0|)7`R9VGnoEC31(&lBUEVo%WW{S$G zRh<+Dd?KXA-9oJRc-exUDndsW)Kj~pj>_7y;4XKss>3jipHF0b=*N_SuuJ2U}I}5B{(lRnw2uS!0yN0r3f>j4NO-7lwt2d zgdASr3*UBh^gYy9040Rap(fOtl-xp%pkg_W21kjOxjHI8W}B<^qFq{TGAblmygMwa zWkZwd`$A3QYG(JE?TH-#McD;Va6b2kFs`s?xvf$UbsjN6g7MhXMU-7x{~2d=kodd4 z9iGzJt>hQhdovg&MNmMr5{(?c=g3<28eypldy*bA-*b8yBUL%mq-`wA4r~f~EW~R>?iQ3c!sKSAoULiFTmka-5uu zvH4Jio>7mrkcJ#p&MJNsKsgD|qOQ#K>4fSakkfB0^PwQ?G6kcuA-@p@w zN}q{{Vhc6!C14N&$s^Np1yBT$VyT2z@Xcly#R+U_zz-LSz6BEh(B8g^<}k>_kOK|u z`jEkwdH@x#ZER}lZI#W78F%)2ZDsw`uc~xct+Jm6sz%#YE8O#Jd53zdFD6l&91?K= zrig2+Gmuac^jSscs$V>pN^0;D4?J@Us@oY2Ghm@0X%!ajMh(b^kdkf;M~h3qoSGRo zmpXdR*(tY%&n2sE2#PhG(}FGV99v+B(B~3p{s~}=-3fKQv(t4s%q(f8wPfb8kqJuC zOi4+Olt{(&etsHf%JJx!>Xu&Mig!NS0F8Dhq(TxnvoE>`6Yg#4ramg~YZ)ko6MgOb zY@B?(wtM-8%k^|(#$T^%6K=B{1TDSG^3ApQr19^vnK9YK;Th7Je}cb+HfVc=Z&tBo ziN3N7 zz-yTH=!|j(;#1gF%f40a{t4(ksBoELk{kkuSz zD%N2W0o*zgH4(@JudR){9Wt4bVj!WkgoaUe1fN1a9Z@voqh6n|w3=X#2oRdR{TCaJ zhbs@p-&AEmCrTeHK@RQ*>~C3^M=QJrwkY4e$DojDZR@m(XHfS^D5t+V6%ZvI8Y~q* zk3+3Yc!=Iy*E}STPhn;ol>NrA9G<{yU)~`MDAREXxI@dNWDU@4TZl~iW zS?Xyzu}jG#z+_Xg1R)qR73?~}RCT}{EyklF6yx+o$o3}%JM)~6_ja%7;+=5#a44l@ zig*;k6ZxI6kvI8npxN~p&+wzt(Befj8$^-JCv+k!NQpJzB#lYvfluUM9EY!z>{S{X z)&v2~W-_3Ww#`E}po%d<1PrJQEABy_BQ23og9M1X7GYeXngS>^02SF2xCKcuW)4F@ zuMP3;>Yz2pFs^vr zbS+1;FjXUF{DRz4l^F~gzSyO#Y=1rY#$I9lB1S92f}s|vihi3X>)EjZ0YHD&>8$URebHEwK6EtO5f5TF^ihn=oW zsCJfHTzE=Uv9giI{y2jcNEk((oI)?Eqss_B!kxk_xSk|eHfs?Exgaw=DMeP7lmtY{# z3$DvtMByb!EYoQoODGv7Azkx;zR2Fz~|;@^SE`@!uw4BnuX;;X4;EUYB7O^ zIpqZ$_(Ab~rrQdL{AIaAYmljM`hbF5NTvZ2A z2WqM8N+&5oxUbZp#c)o(&}nX&C=e}7zoc$-iVjjD6H--X9ftf1yhFg4} z6>97R@^bT!_(TP}@SS8WF3!Q=GOZz>1qrpP=*SBPmmIA#?yKvxvsiroTq++GTioso zma!FGi~8sj-==A>yNe4Zxu)^&6v+@?@nAz=xNv}xP;=g;cv%jWqUYnN0AiOQQa}35 zLV)jqf_QbpM3^DgIJZ04BU^mO4j?OeB!q`1NeEC8sD-%C^myOEO+$}QI&^ea zh?KB-{AlsYfdh98^4s9zK67uvD!lr9N z#HNUzN#Z$>02Iy!)PHlmxEW{Y<%OGxb>XC7_UtQwavmpxS}TTS8!qlDkHm^l zv!B8qD7=xAH?#XyG1V#@f2gtkF($AI zy+icq_=y#!3$Y8W&5rhNPxPKZ!I>vPs|6PB)3HSMJ|@6=5v94022nuRrw+P11QH~~))oeN z*ew=mver%aOyvTDo*qO(m-Ce&5p=HNr~)W^yZeW!IfS=6_tp=-$KLGXkcawR6PzGq zFBJAb_~nbTML7u#v@&k7@0eDRe4*k6gi1PYa=^muLA(rcd+0v&KFLtbV-7gl@KJ9B zRJKvIiF1_d$qD0ZwP;T;yXX{*qpFE&ICzM5ou`8*qqc7E&z!rk-voiiWoys1*h##V z2We(r6P>_}gQ7DXMO|6fmd2xnT4Uv5tubF~P@4v^YZ2>56cOQj<27{n$gm8>s^L1Q zlFoI_J4Q zv}Zhqf!Lm1_ViDpK_9Xg+XdZ{7XOXWu(YxbwwZCdDdvA)?;dVCP*&4Qr29o0&a6t; zw#r4;3?t*1v%-U7H};^I2brl?{MRe8(KEbRAOY^<#9_CxPx$91g^m3XE@3Z38x9(2 zG)P>01`9sm(<3Up!B{e6Hg$NN>Q}w+6d?8ik6C2Je6Un!fOV!)@d4Bki$>VYSC<|= z@->JZ41Yl{&(DjFT@eUMtUmI9LGdDZ)-R!tweK0>?S-~%c*RN>N z4#f=}A|PYHHwbLw(W45gStjtA;kv{n1Xzq(*_bfuyuK5!4@FyKZq}@s9c;iUw^u->0M8JH^kuy((+qJtB{ZL{%0f>tbdOm;&kTrCwF z$W5B?4?DIakSy&Ra~Vl_T;OU2I&vZ(V{=9)=VJTSVuDLtEIXmXxQ;W+RWMKL>z)~@ zDgF%Y?NbacizMi*!dFcOac|npSk)g$sW20)q~aLb8V_DD&)?!F0xCjUL5)QMoB1Ea2ap7IMw< zewgy@3o%j#Cw2ssp!;Ymst!^7>(S5Vg(b?hA2F4U?a7`!+SIZlhYJ z1Z$Rs4PGJs;}L^Uu!v(pcgLAz){zx}xA!`|ePo=LX9nuf4OEp$sY>Sz`v49mSrdgN`F`>o{cq zu^eW_zM=K~AF)r}y4{C-woVp;2yY&{pElJ6^M<*3R;#)nij(-UCPhN~W5uhmovlsJ z;bPD-!TVlAQ0X`*s`xkJYF+L-%8C)It+?>)1rq=))%5t$*mD^kJ9eH*0*ftbl61w6 zU7x8`d9v)XV22OYn${2{`}QuO*G@+d&!#9 zD}yo-gwLo|?f(iFU6kksz;bXc$vPKH`O$POA9E2GNB8OvAuJSozos!_M+cv5q)_o5 zyG~HgITBJS*+V2AZ$N9!uriJP{ z%%zl>KN)fq2QU|*=fk9c;}%Unoo1hU$vDFYwt1q9A9`Og(@!+JBswEn+ziK;rxT9x!&ek5ZT9N86vo<_1S=5q-u&vDKxPLF>o)pVtpJ!Aw z5Zl67#TMQv(tT>@iQv3qMb(%^mS(Zv5>>@(EL>NNr861jZ>WVNurFfw2@In#|8Tyb zu|GoRhj3|CrLlDLmWPQZ2JYVC^xSN5AODTh`xth4JKNP=WI`kkN+zAyw!)OjuQtq% zD=M^@ssg;+JS@76?_1*(t{)c@$DdH+-;4-u%!&%HXjzKUSrO@Y4f?eghAk_)#`73t ziKVw4b*#e%TwLsxf~Ow>V$mlYYpg9MeOyTe`&e$RJvJEwU!bC$(%KHALf*cWm}5D? zi?In#*dIqt%b}Q9b*V{5^`|0~%YJ+4@@yR(!Y*WVgnn`()JEUU6AaY&5klR(NAja% zheyUoau-sbsAObdOl#N|y-}}=lpMvaaV$hvdv=JZX&wkiY>$KDViRg9X`dyr8$|fG zajUXJU1Ww{bcp?nMim2D<<7wv5ZH{B)oGu=W|qsdsH#~VR`xef_rGylQ|uFU ziCPm=Uiw%LXa*aQvBzzNSxBgPwOE5tA%A)L)u)5sr7_|}F>2$mUFuwj%L#v)bt>fQ zr}`6xd~nEUz`)3;<1(%t^dqOOsM9$p-crhHl=1K*7OC4cXak`9%bnNU!kNZwvD#c3 zL?br<7Ez5?UGuF3GbNSX(}J7Ynd+=ioVY_5QQ`v+|1vH~H7`{onufLA@>aoEJcV}D zF<_N+7et97J_YH>lS0*)OMkIt3|R$m!OmC&zDe2_ixX_bUWi_tZzKlaT$bQilrydy zp2fu!t9QZ$_U;4#KJz`(s0D4*!pApi;gdJ&z7R9a)~TKZ{V~+Ab7yDOXgy|7#_W*Q z+k;}|B*{*dhQn$^W@3;1McV2DoWW?UsI>&qayFdP9 z-gvPY-aY|g{!}URB3y|hUA_7_Zn?d(0_f=K;9dG}sp}v^y}tN2^yo!Vhs5pVC$CGu zj#jt6z5UU3X=P43SF2;X(|Il3^kz0<9_k3&p<<9QG;nv1M&eJ7CN8;-nK0LckZhWeLErJ0nkx*Kr6J#0= zhA`TrHw2i(0|^O#gH4LVYoNzKEM5nLYg52JV)ECz%Diw9lKVp2vL10Ow1On)D&TgB*U{aI8dQJ&BAkf))@Q7 z2omSP)m5!KeCoAi{q^B@yZZ;GPRncOaDVID*N60)na%3$0q4r?2d4qb1!u!{K=*3? zeMaO)ZFt&0OKKFkP$wvAARK0J%wN43)^pLv^>bz;5`dqj66=1Ci` z&-gFAOy+Zc`;WNarPDtor1RvYkKbn)!A30^#HT@*kV@-)zR>@~AY9kG(3Yp^eDV*x zKZDLIib6>*U*hloz`?uOCn5+1__e05`4AqtqKEzX+H7{uXvm(>$kOjKDik%L<2o|5 z*VL|^u+5e9>4k>1d0x~Y>32GJ{603SNUrdD_iUID1=)O0B;%8y!w=8sTdmVB8f0`7 za%S3tPeRJs>|gf=NqjmeYS}^5q1Hc#hS8G*&#h;JcmSbFE$Z7yu0^%%5?-LIdq1YT z&=cC4-DgyIa9tzphN&qUFX}IDGcRkH(k_o$!k_-}ENBlqHE?vo*2oHe8MRM9sO|?H zBAxza{-<9vPtN*5=NX}oR@5BShJ*8@nFK|JY1u#<{$E%p#R={I~=sZ^grR>&a*4k z7%wWo6Gd2&whPS^y*xV$yDIFdMq{dIns4J_6NuoJTtr9Aq1{Z z@KTePXSB9!2g7b{WA{~2*UjI9;VG`qPg?Kg=~+KGAGV9;^LcPVV?(`opYUY1@cwM! zERI`6jo*h;VDoL*d{0oZV}g_L*{~Z`doYAK!H#H+?#G(>iI#jTKn(HdS=0#<_^++~ zqc?(yf_`HDr)Jg}57A5Tj23jQ8;{_VqcUyA@92_G1P?9V|A|AY+P*&<(4v1IcM96_ zDj3iSaA`IO`g^FWwW(!;XS73V9XcP9f@vW1NPBlDLew$pGQZaJbsWZiK?~x_T+oPa zhtZ(Ro_X-;S(9&UXK=Dy&^kH~%>PBKRrsX!FMfC?KSgu*KXLbraQngVk`CAigMjy% zzCR<(S4)P4t9Ij@Xek^f+5|LgETk)`Qe8EJwU?0AN-=KY0W|n?YVcu z$?EH+u9m40bSNZYy*E68|Kj>^p!Xw&RQLS1Z*CH8e6X8?Gt;0``tmFs@I%rK`lps> z#DBKe4>u1E&G(!82iB9jLimYIpx9*|lLOuGlG&FC7fbZdv^6k-tThoc>A>oR4Z!wM zj)SGkT!253zp2@MQW4`e7DJ48-CR6u2V1Z9wl~e|gY}o2e$khq7bZv;VW`}Cy_`mK zPt*vxpiW;i9zGRpId*tmR1X3ms;Jhp**wMEQC)DIIk~QMzPSw18Fhh{uPmT3?*aKa zzE`FuO`KerWTN`y!Bsh0R~m~~xRM#KW-Kv!I6pssivhe0qkc>IM>K}3C{`b>&t8Ju zkfzpJsbMHA6>c$(bbCojio!{2g{Q2fFC=p6dj@uw?EEt5UyrK@IjAN+ec?^Kv)arC zN7(&gXM1=3xjEc5>l}Y!!st3p9nlX>?IXt3UKQOo_F4f~=Q)ZOt*CbgrST&oe_yQ^xWr><;deWUGv6~`(S>uNzRQfc$Ynb>%X5nx37q4iAl*HyQk zSrv7NsOzvrsSo11WAs^Qao_3qbJeM1w4oUCq5H0EY-6mB95V!c%WN_UMJp&E77Z1g>!c)CwV*!;$ zO`08DN8_jG_A@iuYs>h7170x%yWJdVqwdrY=$U;*_ZZm2+lfgun)}#!sn}st6L}21 z1t=qZDf*Jw39M9h5d|i&3?`5U$53B8c8>9?LoLYaE^dB>7m^UgZkkb_Pz0py%?x)} zc$b+z?e*i60RD=hEXL|utSOtSZx*>o%tHKAba`s*#C+Ne6W3kNBz%SsFR7rR;b}+8!_gcrpH98k$twt2NRA4|l_m z52)WiqS%onazj|E4K(UrV$>{JH=lF!U44CX^Ird^=7pi?tPj+7Id7+|8p;`T#({x| zKI=2@jO!9;aCy;>ef_5W^_`cSnSJns^%TikCs0KY)0aeCsYHO#8aBh0?`FS}hF*eT zJL{TPMbNyP*bc5QT4~Af#6{H!d;zKRmE(8K9@uI$V2>nm(OD~^wZ!E-xv7o~31m;RZ^yvu>g$YH|II=|=!J-xzFmuJeO9+UJH#cg z5@S6$bY_b5?t`eifSPdAaGs9#RIe_^Bc1j@z7qK~foM`E*5GHe5+VF*vJyH=9X#bt~3eq7tYq`WRTZ z!PdqsSxt%03%L#H@un@cd?%-3pBitdKZ15FM;@yl1HM}p(SY5D`pZ#uq!F%-&P{bF z*;d@ls3r+Tx+lkP)kPt4aRzJS*3!jITlV?p;riD0=5w>P^I~`Z)%szMS@+zDDqUzq zcY#X9n7jz6zt;PuvnKG=Zxo;~`m88ij+v@X7#yK2T{QV)xyGKo;SAj@ZdUq2%b@>ETorKU(F~=qf*g25IP7hF}sLw zo|&l^3eeq}96Q8$Z%o0?@cLF~Z`CdJV2SauntJTKD&5oS^*$wJJx7wdX44(udj}oy zV6T$!jDu65NBFEfi6w3*kBjt&b#Dhg|Al?}31cYjU@~GKHEPX%;L7+Rh=jZ3%vL9I zwK9FNPE`@Au$cMlqg7j*#JDP`)Z$C_@uRM}0_HgesS9t`KP`$+!0{e5>XNmi@WbM~ zLf2)9i)v%nQOJJ5JPu%VEBdqgB3D~$o@KbzKd?iQYD=Aho`*Nb(l8w;J;P@< zLc&Apn0lAh-4@4eg|hK-Yg%kuXg~<>^woeUdl``Mll@Rs*qpjvk@sy>sx#OQSYE{; zKs->XH&#B+-EGtK>Wnv1x)(s;YbR|;oZ!gM{sgmHU!Zk{LN~&)pOAs(h#3|kd45CO8#3H57#CnETFL zPr&hoBRy&TE-Dg))E7j8tRm{eSVZ_jLf=WnYZ(4U?JPQ#frvW6Sy-pn3VmMye#FC~ zu)aq&ledX5D!hmA5RGgi&~Sc88od@2+6NBA`V^ZnN#%Nac)BxxCQ?oVoGNpq!tipo zV*OP~1PB+XEInDc_8D1*UBZKXqNe)ZSOY^_XIFaL?vFUxfGBB}{dz`SbxvxLr0+Y% zNNv;bM_6ah;dEx7ZDu_G)2S?O|HYW)Ma^up*ewaJdATExoRqXWWEsia+tyRrn%T9h zPSkWgclP2`H`XxEv7e7kah;>WxSKA%EFe$u3kn?0=@4%Tw`VRx(de=|zs#akh_dw9 zK_j~zV^XheNxhcrJYGUJELW7+h)_-=+jF{q8eGr|oPeG5X&Jx}7h@%^8)DNu51a2z ztbUp~422EpgOO%gm6G)iRbf3jX;hMWK?g}Mqs}2SFl3>P2$0L6MFVFZKg~YyD`px^ zN8&V(G=KI6b-Ffb(<1ZQv+VduiiNr+YHMRoJqN_AaczUZdH$Pu?KRyu8g!!Z$H2S& z?mwWrnTx7>8E0`MFCL4}X$3@LFHhNUp~#@IMoqjFIcI(jkfYJjLz)4^@)R2bN4wj3 z8PD{<`1GPC^Xu21wc<12#R?tt_&u^kwBUlaMf$^=QJ9tXT^7NrnKY$z<e zn!i5S+&Aklt+BvwpG0 z$>D=sSyFbmwI^9UagD)}!3r_~>t@;p(q631o0%V??xW?$W@~mjBh?oh*^{9AeuQng z%d9Ms2U^>_)REs<=&YM>Bi?@RjI+Qepj<5s@1x~HFiQ^3Yk~6-U>0ig3v4a4;Gm3x zSzs{8Gzwq|?RXP*-T*sO2;XqIXOa3{D>kZOW(zDWr+IEe>cM_a)uEK9iZmdpgn^y0{Srwp3$_qdA~XmP*ZsLfAj zj?lk9-!w09?!F4TgjL~(A$bo`jWGFA7~9v~E1K&EwFX=T;L7>p6}>l>rVWxZ*fWCz z_|L}f?%%hv(!UMm8-TiXS5%RKpIoydkKMI2+V8`#$F^@dtm8*{O&xYdEj5m{{`NT3 zmDYE1&18Vw=q$5UqbvA!nlA7mRs-DV>jiY$i?^=qh-oi65R-~MH8Jg`RJi)oR+OGF z1BbQ25K&zMs#CFuDx68}YPhYPs2R86lzRH{w8Mh$!+fyzOlbDUN9Ebf5R6<^vBECX z(~;f9O2kANC_3tMvC&at=H%MH5)-vT<<>5O_K*t9R)ja_O^JlxRzTrZ4-U`YlHQSOEa z3%`pnbr%v8=?C(H@aEA)BX}QXy{`HTMZ?EOt+kUlZY(T5<`G{zD%a`2Ix0W*8v^Sk z_8#JSsl!DlvEIwY-DlKi!JqV*2VOh~L&r!QXE{DyAoH8X8)ib$R$g?zRn+WVE-38X zh+ELPwpwpVVlSgI%VV$mCzfI3?gmVd5Hh=F6~9~tyH&f1vYVT4 zu%IYX28)h-;+RCt*Y{)0yO~Xu2CX7o;C%1fOYZI297X(I?z&#u@*S_$YVH=oY-(lm zvg?A3b7Go}8TJ~?vaeYcyk?yyXL^WHoYp2x->f`FQ+A8?re|dqDNt#2L!JKnI7NIR zc0u3^zf~9w+c}n68aqbjQf1B@<->+&l<17sA6CSkR!%hPwd428O%lT}o3g+nRsq3< zT_j+3pjbZUDyrlZ@5GN8ya%!!ofSRseDtF;j}xADa`G5&W1!%m@mie3O&IAz%h+(C zlKjcF>~1+0acrmtGuuaJq!qjS79k|QwzxJt^~@)1uvRFBjiKP?_Yq4|Fz6>i;s|t~ zb>*0+8D+AU`eafON3K$YCl3|i6iB6UIuc#W5dyyN}Q*=TyBPK zHeNkv9xIDP*+YioTBa;3rk+Gds!le;5ySx;OmEo<{F=?%73)B;b^yPJR=owUQ# zflI+~_G`Wumc}Anq%JHqmf(DL@!?Wqd2xlFmKGl2XMVM@u)4e;PfM%IOIR@rj~2w^ zv@f;8+@r4QAg*!*3w!!hb-|>8q$)0QZP$ZgdnIo%Hj23JiSrpdVq{oNL~aTT&HRL_=7-Y_5Wdd#SJ)$`}HM(4m1}gG$ZA&(hQHa_0}qc$8k9OC*%PgsS3@x`_V!o~Wx#{{ zAQebRkU1$}E4HLi!rV|NP6nHR^a&MeO}u(sY;i;b&r!5c!~qq@CGh1I zc|S5f-#j>>2EzG{I)k#>nnFJ^p`LZzwK(te{CaM-y^Y&2bnpy8*7S$nv1jPDz@dRz zndbwPc6OD{-|MR7fn^UIjm0iE^)Pkcnj;`mrO%k@kYc{1Xy}(p3Y!b~gx(5$?qcI!Zoy`%|Ey#go+^y3^pP?Wd z0nU;)Br>53+31w!qdYZ|3#q6f8DbHib=8Z^^!;fYtU;BpoQYOD4g0`||Az30?&1Ul zVcqozwj7EIta{hzW@9E4%>R8S+6vNz!m#4uAbZEuRgx=?s|3^6p%SiAHE(IyF|s~g znB+iRsr>_?1uxdp>cjbm^Eq_{5YN2;ZkX2hH#s^rTPbu0%8@alL|R~Xnd04;T>*I| zEhi%sWI>bfq~1)o*l3n~Ai*BMhU}z?JL|^%yi&(VjP-tK(NO9=i5Fk0iS*BG1dUNn zbEx?24!8?a4p~yI_ zJ{b#SE~3P8cxiVuJ>ittM1+H8!61jtb8ccrZ<*TrtFD*769uQ^j73wE&}FsJ#k2Y2 z;r=>@2j1Mz8c(DKObjyWiVz*dl0G!SkfcUx zCSLogZDiL5a7#v5)LumN6eQYG%NXD@&e>Z({EivLnYHvhhDagwB1&Y{D;+r`TD;b> z)%vy6P-9Nc+GfAcf_R;Uv#^8)9JelZ3Z}fJr^P;FTDBdpJ}=~93c|Wn9 zj?8S;REYxGMOSnKAi5hKEx{Uv#dzl8&)Q|Pqw9nY#PE_9Qj%xbAcIxGPOa=D=9ns> zT*U1Qj%eE-D2Yjwamvbc{K;-t6!Bs95X-OV*;qFWRxc*yBd9AY4ydB)8L2>?b$6ny zwD!RY<&iFM*89nwRNt>Kt^co{?k|Ljxo z18z8A&WS)LFR)6rUEx{9-rUs04QMnxj~K7mIgte?rUfiLcZLPjem)OU!AEWUvZ~p; zS|0Ch`8EtZVouBGR?YG2w~D%5la5s)2ymgnmkbf&`~w%Jyt#FLUS=!a;5oAowfYcR zNks%=?BPWUw9x|l!{#6x{Ks34Bf{b4dpkoD64zU zq{G)?VTZQv{7`a)57@qog^D8_OiQ;aMOScZud3QJ!pyD{C=HsN+Lb3GS~EaVe0H@% z7h}(|*hLItV_aCzlQwW)?r0oueYQu$&ZGtR+Zq5#pO~>Zj5PPg2*u?#S2yh9L^jjZ!#?=?Mx5TNzlGg zKPKmwAh9}0+|xozTn?fI__Z-g%P9ajC8S^+nK* zS{V>Rh_Px#s~=pR1kLxtVa+NVq$T)-Pu$#?z0Fru8=RV+h0ox;@Uwm^jt|L_VjvMb zW;%mKDYs|AZqWO%3KF7`pLZW%d5x;MWM-Tu4(fe%u(>5>GA;%hMwge;-rqM4?l%^+ zS+n;3WidkDT!fLN-&Wue4ts!k~*RAXl|y0MPubM0s&yEW=yn1L?g`z-tyJ9&H1 zwVwpKLYz)K8YOxU1`7*X-2HcOkp0OP#P=#bK746DkB+wp)6ED0RH$I~He_0Mr* zP6!)=&0TAS9d>_r@78s$671MJ)2kt252L1uw_9`}QE-`!|+ylI?U4?wH+ z!j21+;}C%$fs~{j)yRM^@3x-JJ`wFe6~#LhN?yVT*jb=~?G3_IFw~6u?4{ZPQXvEU zf-)tl`~s_Gkim1WkV_oA(==ACt`bWVsV2f#9lbbF^2H)l4-dBwDr)r09@}#c#0b6Z z5@LWa@^H`;**48Z#q*CUXn>Ox*& zR^sjYUe!|`!K5>9;Z~E%N{*LN68aVw!hrK476O&fsHstG*IX?4t|T@OUcZ9xBk;M+ z;r{y0!HX<=7*-a_BWRcS^0%Gv;j2<#4BRmi4RZTL=xQ5=On6 z_)8X6F-cs@v}0jHJ1$Q~ngPYa5TaQd6I83qG~+f^A8x(cgm>ZRTQHnH$T5!wFHrpIk+fJNnTuOYC?##jXH7#%@B9(G%~DU1f0xHU9&8Hey2hj~kXqF7T2 zodV{#bGq}xJ z{e3q*#_?2Voz33OZGuwVYU|{d8EK0vX=sNy<8q7%%K=9)g-dH%Su-vutzJF#Omo*y z>W}Yf_xbu>0rAcRamukkIZ(OCtuY6$^=MHa3tJuk$L) zEJekQn{I1LC0QP zZq_H7AsO$4(S!PGeQO)H;O(u0%qjnan!m#(A2^L24Zh8D#W*Z!4wFP<#X>W$6<&nx zxW_fgl^Z=y1-cw2LL?q}0b9&NOc?MalyE5w*2YqOhB|?GavrO#0g5ZD;GQsVFN1rY zLd`>{+LO3-ov&Ri|6|qIf@1;Kh;fzYK@7XpjF0UB7cS_7``Wr?cg(DLT>4P@%a?zj z;2+Q6N^P;$s3-kqU3A$#aUG5M`IVJ<^B2NFjpYUYeXz2`zj%DG*jT0?WNI`P8uOHE z;laYfU(EdH7=R&kFOB&NT?z)1^3k>H>gvC5{_As}@?Xi!nH&Ed^MA+mPo9n8Vtf7g zA7C;U7CAot)yV&-$Pxc)u?hd`CN1{s@vOOBv0u#$7dzJ4p5U35K1upM;IhM+sn zKw+>2C|eBKp!S_;AZ`g5%t$Y4{%r43NjM#%+i#2e2SPcMV+&y?D8qB1D#W;FP*gM* z^~^!pqiY>gSxwct)*I(2WX!+@O(b{6%xuikUF*@q8betpl5AhPxgYZFr)6uX{)T@j z|B9Co`)yric()JWrY*Qv5cx%urVfaJXojn%-n`H_IQ%C)$to9SigWIV&`*V3WTUq5 zKtDdGAzQ^bJgPV5>x=VrJgqJ*uQnDmeO=lOhS5Mj9Spe4=2cHWY{$*_A?4xMPcUMi z@L#=Dx^G>OJb{*PTswc7{nU<5^4~Z(Lq1>7&wsm4>TolV{n})ocJwLzR+bqFVcu|F z&VQFl9r@hpQ7Z4!eZ*T9REVlAjXXsP((%B92<-e0UZ@p?n5!vyU@rdukf`ig3jY z4I3qwIQnr@%Tl@18Q2M!xzi5O{k2+cw)9I0!8ecjsuT1c(_3^pL&>uSDV)YuDKkN@ zV(|Sje?ILE2gwZ2(yA#}G*mGiJ@q*-TTi1aFdJy;F^p50#~I1Ra4J-r!lEjut26rk zp#}Ykc=Wv$z>7|oATFucheKR{2Euz zRpHpYu{ve7+FP2We*3APb5{~q&CGYRYVFCQDbe?l*s3!xY!Y-qtz!iX!Bhjf(u$Kq z$4Zbl5COE|LhI;@71*6zlE7x+tP>pQy;cKuX`);Bsqf~*dGv}cbBo%Yg>u5i1#I5@ zgq;uw7?xc=RUaf)`oZq>##vd9K>n5>BXUcSG^2<=LZ;5lrc~BE(yOKzJBXlEgJrX5 zIdG!ryrlZlnx_u3pf)^E)qqAQK0PIb^whPfR5T984FK=x5GE(IxItitpC-|#6(6)Bm`9<&r3Pb1_aB0PQHDLbgEQmJ_l$(q;^97*6q2CkV zHEB8(EQTE!Sr5Q@U2uROXBejJ_{37NOm*L>Cuz(9)Lm#L`=%Psn8R(1+GvwKH_SFf zZW;xO8(eknpM6{25kStZbvlx8N$yFI#f>!vmB#_rEOj6cNZ510Qez+|hR^#}^(~69 zPqP5p1OV8-$`#_@HnS-4=KLvYthH2)e`KF-1C08D&`yajif!kK;yl8gXJj}!RI(FX zu?(BAmRMCkC5rJX>I^#~Zf9Y*r-|fSJ*SXfF{JJ=aEtW0nvCJx9Je;QROmlaV_u;OtACI#qRQ83nUx*K9`b#H=j@);akik*QN=~B_l$xT3_;dXGLQpTI@WTqd zgBzni*7^6m$CKDiC=%Q5F{5;DTFdLGZPE>Yv>U5n!<;1(}=NMZp=392k z+N+P~mm}B624-TG>o@p!80pV*T%+gRVebVw8-l(3`{~h1-6+Dr;v$rbR-3N`6&vCd zH;P`WpVP++02`wnh=$toj_pKTLX8zAabXzE_)Uh;B;!+amigCk+#{6)d>+s^R(uxu zEwr$O%kfo#1C(P6_$EfbiX19%WX945j-sp4f<3^w9%nfDbyAcq%iUGygv*5 z2JFkob9|tAA!nQev}Ls|0v%PjC(EU$r3gU(h}RPE*jkVeaLr!~_0V-s3d)sYxcnO7 z4_zk|*e3#o0hl=6G0r)Rh;j>&8UiOEvR^^Fr^w{qnRe+q(4J#Z9a=j+flJP9l#~;V z4F=up)so++uQ>G_zrN6SdKg#q^35q@Q?K9;h}PXR0l&w_Kulcc2lrrf8&*jKhMzRDVh4w^#Sc{nTB>G<_;N9*tQTe5MO1R zV{XT^2PN9fHxLs&nh6)t#tXpK!sj=3t7OxJzQ=^Y7@y_Yae*xWKX3_c0u!2E8skd8 znB2{nFdw1Ufq){9Oc@W%fOm2V({-iC4rjDY$Ei)nDV~gDG;_yWgf0==8ql!bP;db! zS3PGT5HlsGns%9ZMVi&D4JJ9QP6y701k;)StIh0>Z4ZDvx`B~}1q3K)ZwuKCQkZ_k z7bFQc`sV_*7K%lC6?NfyDDp_t6F34Bfo@2$l}AKl+GMT=i1wcr~CWnm;|Hk zlK#Q@kVMOm(lzWs#A{a=sw8`k`nFl_Do^g6#^>@Aoqb|?T|p`6oTk;ioSG^t@24vw zO`|TLjK!2VTprHi>Z99MH?u*(5PaxiIyiQ8Cq5-qexuS`1R9%#d*wzU`y=~Dl4(AQ{urIRoF zv+Y8ewge|ZTOrPfdK)_FMHYc`5J|3oyRdMR3g_UkX&H0Fr&C3BQG^E>K-i zpo0Zi{;Ny)1!`Ep3U;xOjDhpdXcBanMaIbauQ1;TUa5%RL6;j~!6-N37uazN6goHr zuLm4>2IX{i8NK{n%C~aRXnpK7BSeri;pNwxQ44RlfQ&vq1YFmQNC%~W-#|k*u&9UcWs%`PCiZ}n%NRjj!Zz+x0g<*PZ6nS; zqa|%z!0X|F^HF}542jrkhQwkEV0nxMSU{0Dha=u-Bi(|Zx&bS)`Za^QkUetM%0Jc-o>+NR(I~EHi?#bV=0MTWpBd>ue4HwDcAG7pz4Ej64Pl`2}Wl zwu!AuZsEihAel+@=*%^8Sa38>X(^3}BZfRaVZKN%64&SlDG(Z1ovvWw$WY9yZS^l8kN5|9bzkq5||9YM=oq;L#uMb6HVDn0Mm8StXl%cM9Q$??eVoDweEVqK81B{b1xOunvUf2J~ ze#0hwNvDu>#Ky4w6tA9W-?QX|1TCaFoX1x>4(F;bmU~30D0!#ONcfaO;Q=+!8J+>% z0vsy}2b8ngDMO;2Hea{*C@N~Zao9M4EEv*~$)zH5`r^=pFcZvuu1a>TWMK0Vdsx*2 zd_W4mc>*0n!Y&#T^}yO^hRl=>G;!o^3AV`;X`1}?7^vjc!!QdI#pb!^CW@Ddwd4_4 zp|GY(J9gaWUcO@@Z*%2+X@xu2lqQs*gFWc?1(NU!qK}omh%oyQz0f;D3h5TJ08SU)$KuP`FlYLMRADV*$eSaugp;>GU_BgE4 znRWd(uv;xnq~9a?9*GFN#x*05kc0T^cGE~}1`_9Si)l!k4$R}_K_EZupeLXiN>4Q- zMWxxdYSsb@Nh#68-O4X3n}qdz$+5VZnosoQVcO8FpIuFE=kdy>!K+f_@nb!IIf}Lf z^cXWP-o&sd>`kk@R;)Zl`E7G=r&8K@nzO@DB4R7N&~hhSfW|=`ZKKBo1-gAL4!o$Y{M@(ZN0Ymci}US|>2L z+mB0Q4>-5m*kBf!Yy;xDD=qrlz6fS*RCmi7S;0f7=}KJ+WyECBitbHM!iy_J3K;Vz z(5AnUsFO46Y>>d1-Y@0x_MW>O!eFEPgZ`Y&&$nDcga?E<&Y-1WgaSeN2t^9dlNkF` z5IsRox6Ak8@aVAak|f5zsJ&-Rmy&EzO!Y_81XGf5ZR&;JpJks zFm2f#PV9DO3YlCkc0S}e8K@VurgBPO%`(X{zF19u2wFJ!zwzKvW4E+Xexe3I!F23M zJxxd}R*W@MfoAOTI__IkCBCSRz#axzS=eax+Z(MeY_wzW7qm%=PDAs)%-RGTvxlg$ z+VOGSRkvuJ95oYw1U}V&ZKD^Ay*9LgwGMX|j-VDBL1Z3#F+VOFJNhcy1 z=+Rgfx*=nXz9gcXdpCE;p|=-x8e6ni?oJVPjvF8tXSup~l;ra)SfFr1feJy+}icY+00=eeFow9RTlTmHoyFBQEyruOErn_%D4 zv4-=KM=xd`F+$A(8^B-g$uRu!bqC`xkkz^2Xh#pK9m(Q@3ZsY@kKdkj?0%DDhZ?X8 zVQbfgEmzGLNjQRZOVuqz$5xZz7Wg3zJ7#A!(+$TSmaCkJu^jbp-7;o5-_jT9>`;{97~guihTuYK6iJFl&L8? zs@0Re2@3!4AuwrqS?c6KO{;SL(>d6%1*a4MRg$f zs8LRUbG%HPvJ4baFOyE0yzS1$7Z-RIj+)NREQ{={@+DIy>=J<#i%nrNHMy0rf}46{ zHjI?Qw-G_d9#?bv^_xXnu@X6#6~uN#7S-t$Uf|k8v;2xHX@V)X?YlPX)BX}n$A<1V z;O^FOz+H2cnqM@5Jx7Fa(kZ(0`s^1Pp=lIck;4dV+d+qpib@U-V?w%_1-~+<1Rpzv zwJC)u@&yKv(2^-|!&&W{ZAmaIrca_dUdq> zj-|OIx;-be1MOKs%r=$`_j@y3lNLZCC!kGdbKx_5@i-JMo00zs~ z3y4&7?QwLt&$A>O26p0c8CYWm%`{=qrNxuozoDwgRvAM*Jk-An=qaxA!(?Df%&omz@Y>vQ6KmNFT~Un3nL%Z#WohAU>mLeGQQW$6X- z3(vJ%_A>fqe*qNOHIWPAIKQZBI(Ra>7C>SFM?n64$j*Qa^sZgGVn!s`8Qo41YH=(? zOPB!JH@ZMe_5et^K6!{Czl6N~=mr!r*NWwPP&XM2ezRx+C%v^`S4D$hA^B?`w0N~A z$;Xv6>&-yKKK32Q$0n#J|3wpdqsg-$LXN1%GEWH(eLkO|JA3O$SRO>Qg>5>@1BoK9 zx`AVj@D)v_c=Rg!qt`RHPj5W+pBa&$dK#T$BpLE>X&_p^CdI4~k%ItNd43_pX`f3_W!+%_v+WxW!&V1lOZ zSR6wiPX~AbmxKjx%OlkeUoSrLp~w5tYLY3BA0IgHW(kY2x%jkXspEswllpH$Fz8^! zv7s7`Z-bmjPC>*o+RZN6%a(V3oRP()qf0v(893yq*vqcincL?T`&zN4)XQ&?)8qZ4 z+G4@z$u~6pTVm5uXkiulTR`MIBJr~}Olr9tc7ojPt)TI=Rc{`@UAzjX?hx2s>b3)M z4FPUB8uDLv(~v$bC*XdlH(wozas%3Ak&@4B2@L&U+Dr5vkdGLud<6~l*`uLo@myB= zo+}kZo=SAuq$tUBfpgW40!8+NJeD`{huiA^XIC#-z@;K}yanHi%Ri{kuMmLz=+4wc zZ1E_$n1IS!WZdE?ymLD+hGq-sXy2M;(FKY-5U)Y1XgP<&^mCxG^1?x0Cl8V$`wiS|RvD7>8dIw&g-x+_UKDD>`^T!$QY z$fW?(2=OLogZcE#c6_ty2W#wzlKB_0uXyzMF>6#ke5meeRSz}|a9TY2p6o;ZP$L&M zSFw8YzJ#5crN5WLJO@uEvg3 zSmH;JbtIYInvll&Aspih0-t=3Rl6J?I?Wxmdvwy?c~fh$dzNWe{4I5U=rUtkH`8DbLcbRgnu`#DBUOj!L*3z^RQ6g_D$AC8R2Xwv73 z==~*V{?WR6oo@Nw1n>#$Z!1=VMWDX)fsq%z=xG!J^HhF0W8@>p9ZSGb?}rpRIZNJ< zFcIa%@PRV_)kmf=RN;k>$Vz3@`x#>-nBCIJog96?sTCTrlZ2@iR`AUUGDWvo8~zNo zJV7WN77~DxJ)4`jWl=avOpI9@cb6Is?AwS_&KP!KA0uuW`n1MeU%X}0I?ysqO>J0~ z+!!utR0!-JZ-ze{J2`4VRC-3i6-kB(x0t%voI8A-v1IHlSJn@a)|?9Af1A!k%ECc~ zaDEIDDmiKqzacdEO+0c!snM(S>)9_R^(y7XQma=%YrWkcWv&p^k;#o{^u1*2iU} z2e5k@%6Ir@6R%vI{7_r($!{YiPtjS|?c}t$DV2m}0Ldu$s35jcz?Q>jj|D_2du(j~ z85}?cRq8@#XN|nwT#ZDUVER2x8CmsxTqqRVjxZ~)WH0#8^L>NM%#Zj+N18cdBlw~K zdMLm{M$qBXBg)PG%Y52yj$U5LRYq+nkSxbDOrh+#5N6Kt?-99H7 zF8PO3kKE(fp3#T-0d&gnEbleMBwlO;XtTeajVI@H_cUje;v;^7&%z67&(drh_K;#q z0p+HnG06HkRkoR;pcIF!xH{8H6S%i-7d~kO#Ik;mM#&?!@2s;dj=L;*y%27rOgz(y zcKRbcm#FdG&C5o>_fJ24aBNLUvLjdpD6H4@lQz9}CPOjo@_`iqetKTTpwBajwUZFv6iKxQIpGG)L7E zGGI@`V5V8`yegSHDWOFcaEK*uFr)Bb^m?o4?@DPFHYb>(uVwp>Q0 z%F54HjdAsn*f*2cV1BS?19Kg*mIAXV?TLu-07j+hFi&mu!5(ph=b3(3X2J(LqXzF8 zJL)CYJPmbn+B~f9s-wLQ*g2fVJcJzfr-sh5Q)FqSsp2f0(VQ{op%)l*5i4@|A`uA=t}-Xc zQKU=BthaGlc|BD@m2=<8h#!|fYzhKRBD_?V0bi&oqorsQ9?B9L0!$ns3T>A}0*U=1 zRm%wtLq6G2ABo*eg&+G9s~)2e0+Or;J#9f~RNzsIy+|(s^ynj^ZHMAe2LCoWjVM8fLt+#j1Tj#1!X ztT+|H1OtK}&=PI%l;DKdQR5h{fv2vOHjQcPv?V#tFFjj}W1%zLIa z2V*+g29PR~egOv(woTTAZsu0~xYn$l95q{-NHx}`+$NdUb!T#1h_=Y1x&e9Y*UZui2L{Th%MZrTjx-tsmn>xJB0KD@ws3Mi2{vUofd5v9 z{m(&f3o!T`gQQ+>BMcH0dLG5y`|*o=x0JTz3?VWjP(w%q*7)(`zP)EuR_|ZVdnnK# zVWlyqoCR-33)z&nN12Jy$VrvZnkzF2gw8%1-C(`9JiAKZFVg*Qzo{4uIy{gjSF|OC zgU5WMH4X>Q+94rXDv$Cg@D^QQ-A)gxqtC#rKtiY4@a%46Q*5{1l^a9a zyap-KY8?#J%HPT>=@ECVV~Zin0KO% zE=7Yxd4f3H6p!;-5zHDUJ64_83TpGY^kvBybw(HCp)PJD$9R9S4|ST1xD=+b;cz#d zH)?m8^`V0)Mb6pyi_r}8C!YMqU6mfV-Juuh(%B;#<)+u|ZF zCr>!h6^M8AU8ZxE*>of^_6pXGCLEC+Lbo)ol?UOFzg&ch=oAZhI21eZAoN5+>Sx_K42RtLJdU z{*zYdfb5+f?x4X@-acFAxup*3(<6o%i$%)v)*6RAD#YCEpcVt25Zx8tsw%$H$!MZ@g9X(m9k>K7I2J@eShb5>bjbtcASpo0^Ujq#KVuI{9jxxV5zx zup6uXP}@Ishs%DvZiJ6!{qLvs2#9EVgk^Pij}Ggs>)aUtd#q0X}5j+h$cLSG;KS9daI>=QU>HYGxnwa+=PA_B>>qGd=kO zxu-{B8K=Y&fSWC8+$V|~nF9`;;lA0RtX?8(gkwc&U&a-i;ZQ{#%wHxwLMubCK_P6~ zR`T-$ESXEjyS=#STZuv~w=@z`QY`E8MQ#~4eanB1G0&)u?r)JP+$3T?>zC((3to5P zZ+!8dT(RPp#l*Bvz^9|Mb)m5Axyw?@ju9pfq78Iw*2P$SZs<+=GU$E`IV7D^0EN(G z(ZG*0%tmHe(eX?A|K0uj+JCqsg^gmhSf;4iI&gCLkL;sdDs60()c*sZDX&-P^U1~< zeZs%Wda3jTQc9(ArBvOhR-sgNt-ALARO!!HfH|tLDE0p^#`m&v0I#1v|Mm8N^^XiV z&N1n4`q!rax8WauM{SWusKOHLIe7j^0J&3@RqCUro5-PWD3lLlbhsgdq@I2rWO z@so9}A7t#!qultKj|Xb6d-&DGVbtE=LW$6OpwFIEqZ_gD4A zTjTTD70$8OM=xz>bG-fMqaKGeG!4Q)-2!8Le^8lPOEp>;|8L z0fvjzs~oGk+Zh4Vs#*X(XTkKsv~moLB54`%15Qt!T~h<`mT?DmU?W+knBB>t7uBal zYNa+9s3uRd8IU7|p6;RWJN{w)0|KG>>~cKar1qjyQO`M{s1sgZc0PYDj^;091Sx?r zys3(kCt3Gf`v+Ab{GCi#HHdxT;c5?Nv#>xsehhG!v47XF@Q4k^AA|FKky%!=ZOa?l*#tT#mg6d(x879 zO+#0TewtZYFFB*v_%f4D(^DYn%30O^_Cf8(_I~~F^~swLTWO=0Po-FUPE0W<1+7Hr zMez}e7iT#)57pCkWGYhI$g`R5IAn=7%jmk~ng*4ggPEg)XK@@mB|8f)`&v#v3Fwfo z{JO%t%u0TxAS5iDreF{Z31Q>u>5c~j=3VBaS)V;flXEhp@u`t7*a)k=<23N)R4Wi# zb5U4^W374ulOc8hKGFZ1&3cr3=&VxVh0OXVFOh_e(z=)j;}WqQj~~ZoMT%F3WdxL(iy@YB6LyxAeh`sP@m;7xFec_!1a9Vm_cJiHDClo9pzrS;H4kbh zIoIC*SF!i!Uq6`vj>Z5u7q&@{lX?X`bpm`9#0d&4 ziT*V%S2m_p5OZ&_u)m)YXYj$QW;(dQw2D3o5^6chR~F{UZsf~Kjy4E`QcnYS8vZ_| ztPG0SY1aQj&!52*XoD;gd1rveGdcK}T?N6&q7bYukF?3V^2kBjGy}%U@O2zoZG=P& zXeNzSoP_aW2Y??8RKgJsE@1Q;>EcQF7|a$P7+qek(C<6Z@86q&1Yx%`frUnZL^WhI zkwYtimG>*I!wlFvG@*M8FucvD1%Q$oz{hC71k?`B1Yi@hIULeA%p$dX0v3E1ti4`f z+Gq~1cn)WFb~zo-FD~_*B0)$H3p{=dd#oY!@nhCaC#J!y4SVad_{1!bv+Y`k%ud5m zC1xu_Ll4lC)7MZ0{6_V4G{H|o6BH!SGB&ZPg5pI{WjcjlK45&YSB1ZS$mnAD$nKRY z6`oP4@{>ZPR4OHuvF_vJu~OGR`xT0n=tL2pD+ztK7G zB4P!O(zg&PCU&w|cl1e2Bf6wwWjU)567pq>q$7+q12EQ0{c!u|0{{m>17`y|5 z38ww-?V$Z|K6HTH8>r4IPC7l-)Yo+WqEpc;Jm|$wg=q)pJ6fCzi#1wwCj2&HMW=e)1&z}opT@PqQ^V}u?tRlSD)>y;0Zp-`kXI-NqeIKE0YM7iInbQaQu=ai@7Cv zrPtAh>VX>^2|a*~j?%_CJV1BsAu`EgI=OOXr)ADk;xZ(e-YczZY?%^!s} zfIZQ8gV~ei+{tn#EZ+K8@-AO7=UehF{P!z(4h@$wWivl)C?denu%aO;O0x>dDlOhX zvX&rg&62EMgVMrJy2B;nfkaYw!Oplis;rqgJU8Wq$r$|T-NoIT>hdiOSd~yRc-+U1%{Uc*%?1|)g!j2QnGq?pwQCY^omA{T(1Ry8RH2sSaIXV|lHTb35 znNF__=XOu`#(?bfUEcEDh)_LFH~K{=^&-JShj$2{(mu)C9G_|eBHpfnA?U1@AUU!i z&u=Ew06vHf$KfnW*BHBPTmy?A(2d2G3=S;@kUlMKsY0Re26^S7mmG;Hy7b_dG|Q}= zI#`jnq1PkvVp(9ni4H7OHbIUkg8A)a8J@WNS|-jpN&eY@D#c;3$eDc)=^oI65p5HvbF{UDyARLY`2fw7(embA%zv-;fJHVtuKxq{ z1!Ip>%=5uLDEB~Bn7bwF20FS{Y@dkwmDmuZ!8Y_=a@6!cAn(B3gT8C|Ht*r!Qn9+V#SGWnb275Qa{5-ofF2b{A6a#T)C zB4KDQa>qk~@1)u|!Lt|p?QUHxF%yUe$Q|MmItxsTW4jQ2YuEQCxJoi?_rNU){jh zV29$r4LKBVzzxMksNs*t48^ZO49NbuUQ81#Vl5}E3$kCbuf`{LiqLoZ->%l&<)5ej zt=7urjhOy-`N^IB_n-0aZ~gNTntZhJLPA56_8SxK!A-l<6Tj0Fzta=H(-Z&8>WN?e z-_{dH!W8d;0Hw^oG7GU?&btJA-l4j`I6NbI!vt1Qw-8!S{C*iChe?(_Ld5i|>)y-v zjQmJ57lz}Zz)-G3I8Gs6Lug|qs>{i3iY^Wb7`NOEVKTUhh}uu2A#!og>I)?Ei;TrQ zqC3TjlhCc}#be*t8p{Lu?JQLCLh_@87F?A}AL3j)@rchp7)SQBR$sInU~AEFKc*YL<}fG(I%dE^z{F7`d`fP|5W-P5{dpVZ#>!9sBCNy{l9i+|M}<8 z|4wK(3C4gRk?~@_*|-b@DUr;^u3K9z3*~Tk-u{Q5|AWp)auiVPkN&LlUw%@p+Vj6w zF5~%sQm)>e|3BsYD`(5qMKB83@(oDw@enluI)lMAatoaBF#w`?jh$a zEsuZK3s33uncABIXJxp&J#v=LA<-M7ZV_4_4}R`&kSWDVp;X%9$o31`ffms1D+bUZ z1`PEv(De%I%#&AT;7@@+TLo^;@{kJMB>j!~TU4fpPqY*oj(bLx4%o>~s0QdRuoE(~ z44gBtayUZdAcYmub0BYione$$6?e3kW2A*CaElEE4_x^9e1HQ%)hf-rBEzZ~*t}-? zfkHz~2b$YVc)3C6YD*6t+Q6q!)_q{ER>4wDJEIw~=LhxX&Kqd4_NuYp0LB<5z1KK7 zthZWf@2IJ2Q2)5rJZbEl?$?^?__TR^)T-m;Ame_cx9M&?FiqtmutPp)v|ie*mY5e} z_UCW7G%XD2$$rqpc`!K=o=vZjea8Kvu<$Tc#-lVtnrWg1|%Bgyg=TDT6;*@0o_1YPd2@$nTVjJIxVC0AR?6}{y6WB~2H|zfIqt=O+Aaza;qqQO_SkF(o z9EY=ZXVCAUR?$oQ>m}y^f<&W5o%b@mvxDDvc3!4&3mS)eNBCQRf0>s3#zeFA$Mq&{ z1b)6u1IFBMyu#o74bHpJqmU$DU#8#HxF`ICMcFw%HppgIoG!t)sFPCIgq{6UfNw0< zC>AZu!>QNX*%FVS=`{H~Y8{<6cc=zBt1oud<@_Q*uetEmcq-tc`@6N>U4q?JI0*QE zl4x}}cej3AKisV!?lh>iSfN*^jr|j+JKIlsXTM%!51xMdVG{#+!7|VnScm$LC(T-W zx6wiX8-Ao>lYvG1pSl}qb6DC($LN-=Me&WNLH`0{(ieIGMi~f3-F^_JhaX8@asc>( zJel3k66Vgq7mJZ|t6s4*9?8b*wmEq)Q|*XN=h1}PdPZqy<)LMFFLG(bM|+s_5J^<^4hhZErQC2zsetN*O;oKQEknPa<{W3!oKy_venw7JM$ z?nv7^M+e8~8WvY%X9t%92Zx^;!g7o%G+^RS_d90U3_&0}JNvu3Nf`d&_wr+ZcTpAi zCgX&K7_0j))42C-7~TOL827?==`&o_271`!4S?a>YS^eiA%5j;q^~FSAMq5^cMEB- zMJF}fXQ0N@um90FZr2Zgzynq|3&L620`&c?d!TY@yBm@t3D6*b(k7~n6s7^Yol6&6 zr+a&iAM346=c_8V6dXg?ykeL(AmOq?9?27d+OC8~B!U&zm#>)i!CFqGQ{A3l8WlsK zj2sLY?Ci=45 zUWv50vPCaO6Qua>-^U_b=wAFihgViSf0*R`$rd|?f6oz&gYM;6WfUO*k2uI-*`yJy z{*&rJ?r*5qzY?zEp{m2V%H6-ey1K%tu=$z*$gP-y_ifqLm49Zo^eFyYx|iNbqjD3L zuTKf6MVd~}M@if0Zkr)DU`xJwM>NF!yJyFfDRztFO$0B&{(uC!>i%=c2p46v7G$`` z4qs{!L%{Lk`8+Bj!;8+vi}<0BqABN`sD!$+4$>p>(`Bo(2hj-5)xTXT1y2b#OY{)T z11}|0)Z9D^nj&(Dt|+*H0TH0z)J=5)Re%uN-SqDk=f>G@w2mEUNVtnuXjcHZex3*0 z|3vWUN5Dh2zrV$S1b$<9>0EtOD-=zE1JV6-|2_tEMeYAD<_swX3xFk9$+^#w8vu=v z?wEomzX({MmBaQwCs)0Hk{j2a#qkD7119Rh0^YxmWmg-!FeVv9Yu}uuCeY!6(&=K zIFNFY=jRdROnHm#rINW6qh)mg*to&S=`*2Z<%L@91)o+&^TEKWM&nst6H0B$pxmnm zP}Dd#0@sz|n>Tu@*{%_iJ| zULjjTs#xj=B`$84lwiwCwk_|>0xwynRf%`NuY#{5y~SFS-?ke_vo|?*k$A7$GHwB= zt7~b(7Y1ZWIG4&dW7m~Y0z07_GSN#Rm|{)7%}9wlI?v2mbWmtscHcWp%Q2uJe{d1(p3pd?XCZ&^83`=K)uKN^?P*s@p_02#k9MrY=Ye` z>MW6!Q898%`S%8O72EivUN)86VZ!F|f-hm5cv=f+Kb3f0C0Eg-^ahlA$$Snyl|Z9I zibx-_^&fEt(vbbA&v z@%7kL2`dC-_wk#f!*`ntAv1X!lh$(SQYRw8BxH{bB^-u0+(Zw{!i|ib8%l_QoqNa< zw_ejJay`8c5dA}FlEBG54iCi<@wc}hh`m1+`*dNf4du7OtVI7=^ ztTF+qK+Q#`Q2$zZ4Ct4?k9N6Z)zaoYQ9sLu{C;Rf$0Q!Izc*1zic#_o>P2LpNN9?3 z;j$Iurc;cP9RV<0XC(Rs+7`~DQ|ULnW9!ZRoFfH}^zg!M2*(@15{ed4sD7#z*PrF9 z#f@qXUmjl{o+^4nh69PJ$H8X`&4jD|sWa_kc*+nTf{#!+_o|QT!z#QEXTgwFYE>3d zL+d*H0X<2;8ili*63;EDxQvgA#dPuTsQx2H)Y-h#H~D7$kIwK<)Bh@0D(l+*L+gKS zRPXFR{v7>}|5=av|CgWOw*PGpaR1xxkvp{f--Z9p{``shztz%{s!|(IDv-IhvGIiU zfA94F{v7;&kJNTZS%~zgCIMp1zo~aY=Q6Jv>f;FAc}%9`Ga%2d73^h6{BA(Wko=Yp zra`B7jq!9Tgm~DU_9y6j?PCD#ptc+b-fgU4lv1P*uREKBlit+dsokT)l@nAzQwMdm z3AY1eybfmQFT6Jl#PSV&3r;%}6n8UypYaBYMQhF1Km3H&5b6GTR;LF)lN-NZZImjN znTH+p$~*kX%_0JN&c$E6A7vzv`)Bl3^aaT7$vnJNFEP3#zQ%pMogy{qH}Vx$i`r~4 zp_Q*UV*IK`7MV1D-ALZEg`+ibeBXXAMvl}_`aXt3+b(UT2jlT%Gc6t_o}>8e@P*#E z`vX)khdpkKnPqAiDzq;ppPi|oY67ftGKKuyeS#AdYqlUS1`93amO-S?3DNt~ZH{z+>5C-r{z z;nDliDz$(A3UknaAG*2<*arr&OZa{g3@5W|MRkXr&+!gS^VEvdpzCgmgALLste9sFz9Iq}$boorY31dZb0|K9Cjy`>oo53+?zq}GC=SGjWzai)TJXZ^BXwB+ zq25&VC+PJh1_RJ9bJTp!D^&i(UioI!$PI-AFdp=91T#!;>GtB$R`~32?x%6TXXu

r)8zq&sr^I52}d|-gC%i>&2#EVPZb_QZtOZSxUZ-nXh@8LiAbFmf8$Y4gs0KE2Q z@jmk)eE)v*K11Frusp8R7qeC>r?%dYzTkYxJo=7!`U~^_z+(Ja^k3ykwT$#%d3|Gj ztz4>*{l|Lcj{f^o=)Z6L_aEuMS9A9QO-c%>k@wKXtE&`zK zW&wV_1p2h!EslcOi~mUfhgJ|}L$z%)PR#mU%Ww$vFiw1k>Nc}6KAxWigYgw#C3w@_ z<33cAC-5KXogLJ5?D9IT9_*{tql#MHRhh%x`m58|ng1ZoO)LY|KXNI!TBc+c-5G3- z#tJ14lg{jNGs6;yjP$XK3y3}JdOh^i>g%Ce{YL}3>QPs1?h4ZX!QJgH?Cv@U@nxMF z{tv6kx;h#U#uqS@w^eB6M{4zLUpK6l&j#b~41<>Dh>HkR6rjg=@8NY31_qMILpzE#E zrX#kYW&yBW&EnO63@gAex`oWDZi*l-sh-YpA=+E~k;O%kBAQnBAVizZDHlDd~p5=cR|87%ud@Bd-7 z^5@mGo4N0 zE?3Vl<=e|ncZiOPUZmM3>7v_Bw@#XkV|LlzpQu8ZK02-+!dTj3Pzbj%{D+)v7!C?F z8I)&jVNc0BegxKSZrsMPTbo%#f&MhdD=vxZCr}&R5 z_O<3h6@X4z_A=udyu{2~T(cH!uHsmzEHz2tx0lG%4uaU%8|8e(OVCYkJ>GLsVW0C= zVL)#hg@F(t>Hax7bO9hiUoN)FW2|#O>jF>?Ng${hbglu$3j=^5`fRpp7lV0_W`d#bKZ14roBGN}tG}uEb>79)KTHMU57h5x3dFtTBb(;a1F?d3O>cGoBV_+u?ijUJ zdh+DSV*f8nm8}1V62AYG*URPqr`GT8|36dygZqCG%zB+!P`v*0-v2f#)e6af*4Nfx z|2Nj}{Qvxk{~r9BUVW5)^hgP7|4zemf5-NOn^dr(;p0q zO6_+jWY1O5`A9A;xFw9{F#+Nd8khuQ`ZhwE5C}P_vm?=NVaVu)@v<`?use)qzk8|f zcLu*uE6=APe0_O#HsX<@zUhDVhcKgQ02Jf%f1S}6TL30mn_mEAkmr(85n7>!L}Qg* zEs8gf3A^6xjfdpH5Sqq_2qX43LjF*oI>lip8sJUshk9F^R>H+&L#&H&^9xM0MQi(L zPfA5?S&ARi;j&B+i2pU%OV#S5yUrQub@yoH%%Rq?@3iv-J%{?R(+w3WSk7mtgopC| z{wxdz=XuPZ23%2y*Rj&>pG>S6>p&ECrH%jtgF&MXJ&G%8!F*X6=>)#o0qWAN)^Tm8j-|4ZnhFy!^iCK~FnBxs%sKUH`^Rr; z%j;3_*l4}eV;}&R*PBn!b!w#EZsT?1q)q1FHw>4;BXD&*!BSPhyw6epoxCmi?U6&G z^D%}*;MeSeYM}Gk>4nyZ#q)yCb^rnMkqy7Jg{OwjF(LvgXYjJcj^Qd#USp#nOcpUaWqYg>6SSbK%t*9`d zkbbICTrXCD-lk{u^%C)>A&?8}8wL3DRD~G15!L*$8IBH7T2VSS^$Ny^AlJdLkYN$k zEdp3Nvyw1+fBn!$R1k)Y=wP({A!;JST*cUc@DnM;1dvNx%2De8o&J-0Sz#wjtnGM7 z=mwpa0A2_f$s$4@Grpo}3%c;ZgWw{oHy}qKQJ|?k-&W6ZH=Rq9bJ}{H^Ra-zDb4|J zw_hKg?zG$LIfYk6Z4XJ<#(=8;i;{5AI6P`nxhKwHZnxpGXJ=OJcJ_15ZJW?u?F4wb zSEncF66Um3-?devIeuHP1nu^Ggcz#b&gHz@4E0OLgPzqXhaEU06sENqQ8y?gI}x-3 z!Oc6vyO#j&1e5UPKSaWTUlF7rbC_^NeCqdjzjb`cyb8y7Um*8McL17?$VBAMF}Od9 z17GbN9lxVv?WZ5q4|XKO)}V1Z3rxSWc-+z1R~{p<0^b=7yOV2JqS-i?SCosNnCGoj z6Rx0%u*vGW)9uQ-kX_C691$Wq{|Qz0`kHd`>iT*Re8vxoUy)bAtec~VXnDB52CLw-(I3LW=p$|4hGFxRcuIl z8*8ClIHRbM231^N4?CZG!342V3u>5DfaRCS{fb!Sfcw5)hQ)3Tdd(Ww=$@pDdvFWy)_DjCa1 zx5tYyC&L#fnZ|+1{y2iq-3}$=7k_0?mtEEdzdD()xv;a4MPJ;$LmB_XOZ}u%KRKzP zl2o^7o6;c>KHakDyp77@7bjyjoNy!X#Yz68+y3OY{Ylz(lWC`^thduhoiYT#7k7)0 z>ZL8BFGlI`k$Q^){&(-_dC}lJ=c0qrjz4l;{_<6I2bZCe(Zg2{v_~c*82MlWW8@tE z?q*($;hb?Eesvd{!$k5X(06zGPUbY4dEsPUL^Fx8k%2OA<$^NWyKx?UPp6&en|yq; zxh+4D4=*O0mg>hxJ8x2{^0Ox;llJE5vXF(g4HAs|2CLh>_?+y~L06iJ}P;`y26T z-ae_l0wPSb*~S<$3sFnzk&Sf(U8PdmW4!!C0+hU(Q*~71lW`mb(|)gyrktt+cjpBD z4~tY;D_oA}Q|RH}$~fRBR)&uWe^l0>D_zLx?KR&L)?`hg#F`Wp zk=Ir*7Fh4EqFH52ZAZ};4UsoLr zQ4tr<1ZeOlLwCQfuN$MueCEPv>iT-ObA2@J;b`L-hx6eXMxFE0-vHf!Ar=youM<+6!5|^^ zq(4k*;veHtG#N|&5>HO(3;-ySbkH9G)fz@q$0Kz8@1?Z@SgT&N}E-b`hZC2XJEqqtvYS`bf=oYwzd}I(s^y zZ~r(ttizWU{6cgm8I4_2&m8a>Ff`13V2OjH!;?4iK}n`UtG**;T8F0xuj)-TJJny_ z)oZ#7>=;J}*d+CwC-Wk;aDdL(oMFVOCymN4@in89x_UWZIEyiE4>1)c@Bl6x*r(Jc z;(mBkOtKbb?_zg{Bqo1&Scy%Rz1d-I(J>>gr#x5*{Z%AJ3i5rwhc(#}n`7 zUq`dAZ7v`oKNmpM=8kBIXtX#?9IaUy2g~c~cqweF`{ga2BB#d0JjOIR8D5%RPOM$g zotv&!HdpKqS>@aHdcS(>Zr7G~Ye3^``*r%Dt8XiDCpk%DPmF4Qe@#7Cr8JysrM^=I z`1t?@JnFH^;*VAQ!2}4G*;ECpWJ>vkFbw*#`TfCbe1AQ0kvG0#5Z}DwH;v-!wqe8H zh7ETcHWqDzQ_3%-w*d|m_J9Y9klC*Zecvye)zUaGxfpc0QIfJ)U}h2cjTK-ZfFN)j zh-OW3OKC{hY?I7bGd4W6l3)4O>So6m58?iTMk>xMW*&Z8S#@B^G)lL1tUV1s5zus7 zh&P7sRe>j)^jNy}eDSI*GCk`ow!_I%@mlijEd8=1~HcdvDtd#9e%?QdpI3ELHzEKbe7otHQL-`x;GxV z0MYukYB!Z$u(R?ux7U^6XNMS{7UdjM5zGMygESVc0}&opCLrEWL_ zrk&!!#QHR>v6(h3>~o^8C5>yOd~P9?it?fe#BbRghxI5kwI6Ra z%5^U0MN&fX7}AHgUKp{6Ai-?={res}BaknAd9+HUE-^KXEvV(T867%kX?-dR0t^YYq88CqZP6)GwC!&bDEB{V0<=A zJ-Qf@s0Bs*@l4W5i00$(_AHeeel$6_YJ4A{N*c;mSQxLY9G7MAEX}2&a4=4=&`;=) zndNoAs?5L86n=W0$%}|8uT)um$?NR%;A|SruQ>Tb)DnbDn_G2qJCkXD;N`A)b+5g= zbtms%^HJbsZg`mkzvdISPg3pkvY$HHVKA8mh{@a;J&P3ZYP*@^?riMWEtj0^5ddVQ z?XtU?y`US*cULpSU}rovxNq~yZF@NO^W1i4^C09*&Z|W7Y%MqED(H>;devC2t?A~? zF6UFP;#wrrR*U9@$yw)sU)_!(p#-3o*$CfYWXQV6nzz2eM?GK3cfr_Mjf4*H;ft~j1r!+~ zT?;%$OM=A8EH4n!twCipoe(RqI5%l$YGDW~6ZDV;fbIAc6bPeTjiB#<>d_4cS&~^mVNQtTk$MdOxy2Od9;9wK|2>?>Hzri z8(|+MY%?wXT#A>pkTe14fq1~tpky^qR2rUtl~tu2be@7 zI3l;Us2QTZW62z@^TejA#dY1*VQ_Vh(OIcEJBCsCRTUFvG3q74!J-y`t{srRgPn=q z-v!IDW;S>>AjhOhqv#}$BB8Q70F7G~^lWBO@9;55=r~x=ajb4azug7>Zs@u@sL<0% z1fK4Keq(hL`W-Il_ld510NaJ$uai0+F6cO3Iicstf}Wr1%Ez59M*2>0En5z^Pk9(BdfI;kss6cLu_j`k@#0mzd(_`7FBO1XZnc7DsEV?0_Nk{Lof;1GJ zbizG0ys7R%zt?KCocXz?L?YKwn(kI3SNza@YNt zd)j_k&`ibQ8q`06PLyByCH$I-Ni@nYi&i4Bg@h#lvL(1-42$R%Tw~jkD|xV@hXd52 z>7aS^t>h27c!K<)V@8=0s+DkR1NO|6A=44Fo!&&?r=8d(C zw25{_lp{XBjl#6m#mC0OtNsi~+^k<)OnA`i5Iyj2rnR4O=?>LW(bkxMyik>DE}fEr z7RuVqxFk5k&`o04%6OAyw@KK6geGnA?QJe1zpOj-#l24cq+ZoyD8w1!=T`UIIYaG9 ze9G0%*724&I%(ExJ8u|JqMJ-g3R(Q?>@4e5;WpvWs0i!`7tjh=V(UR&{CNC&O@;G| z3!u`(1{R;YLRBgiHl8Z9F`kW8r361KrH!XV^>S}qY~xws*)v_N{0x3#7$H^)^v1C9 z%o)VvZE6xHOF?0sa-=ii7A!x*f)?C)^!{S(lL6Y>@f5AB=jZ3%@xcUrU@rPdfk+1V z(vPJ5?5DB(o$kU%Gb+y!iRDY@>}(o*(rbzS3ejSGFun?=2wFn?Q(WT-tUQeb`&E<2 zk8^1aK;m=4@eDwN0kU?IlbOI*s6QK1(<%!Y)G5{mQmQ+g@VxVIBM&n<1V%cA(Y)fY zD7o%&R$>cW^ff>_!w3k^tZ|$M(u4s_mJDF>RRfsZH~?PvRuG8G7cxkP>bx&~qK;_! zJBl7@ixwxVng87sbq3QYLxr|Jj%y;5B9r{p(;|4eDM^1ifU z7m>7lyebUv1UEC>cu!wrOU)*Q7i2mK-!vfo>R=>p2awUPS{E9IKXNugH;~8Mo_8av z&rJJaG}^I(m}92=ErAR++qBxuT)_ahCJ-|ta4VRaOY{3imdw#0wuM#mVz(7}*2-7@bNYzpE#@v4+?Q_*hwd+MMs zmx26m+dw_(-RT&Bdp={}h8t(x3q9!exnd8%X-){`K-1&Qezv#z&s*weclRFstnNA2 z0$$;dA472_F&wN9#Zh-u?syIV*hHVJeiepO|3;i^iLhB?H%fzP2L?W+<-v*SZY`j~ z=qmwS1><`$b+v=feEJ7AW0B?7mJe$ZR7$*sCBUaxt^CdB z)1?zoSh3$9uef*Xf_(2j#lfHxV_oz+;33qevbI9l&^eguq+z=^e~ zHB`Ax0f9Q}kLE$Ld6M+XmZh|A(LFD1slCx{81s`1uDsP4%0^2)7Zx30LN=Z(!y zVAKx@EYVelc*?*#?SoNRms8!PVLK-{wh%I<7^@PQNtdujcExg=j~syIa&$0U9{Z+`jmSkVp3dwp)|9U#u^ZlY=&CQ64n` z=njdwBZzEL*}EaTffz#mk{%^Z0&4T* z$w`ZzJpRbZKskE|UF%%Y?;wLA%_b6_G3O}px6HK6(A^VQi;!mY*zP^Bl#aK z4Z3jJR*p9RLuw$WZ~A*sz~c>A#AGZ{AlrpU9~`-)w!YIvf#F4Q6KAs3p2 zNxOR1x+`Mr1(hRw0(W%DTdQT)44QcdXmYO1)v3dDMNBd)!|%&9wUw)ziMV82IevR$ z0-3}ix-Gj6Ie{{r@{hNbV@K@t6}Am4Jog!FpGk3LaYb#zu80jn|nTg zvk=Lk;A0L0_NwXyQ z+(Ffnyk2+Md)tz9LVOo0oS;{?La7Y@sZwc^{!^zXJH($}v5(BB>XP0PIvAhTwghAb z6wGT!mDG=O<0SU*lzZ3`|J^b<=w>p(V6?o}B-oFS>MCF#+~@)gL%p(3(QtgbhAO6W z<0})V*y&N|SiStVE#k+4YyovSwRZ*=<7t0(IaHl6oNKS1&T2c} z&B>9}v;%x1Nr^FX5jvyLBwHc`=mX#zw<0#zTnEq+2(u+aSv$D;`8NCRi=pT!w`ftX zasT2uODSw?`;;5pQrL!s35hiHII*GRv&Q_to_X?-(`Z=8CQl}6afE+2BwYq{>%ic$ zS=X^jL2|Ds7axirs3+RG^)c%1sI2Fp1t{GT+z)PAE@$qM?lVUa@7|c4l zeTPlC7~&wb6{tfO8nFQ6CEak;AYEW)KXE7bg^)+y=poXzSlw+;CiYkwc+OMFA>WzR zNu`|EBZ(m7G+^k3a||kFPJ*-vFI0xsP->r_4=~^~@SZ)4(@YJ=`v0J50^y6#FEIRsh~(UY$h87+ z=FE#y>4OhHJp>TL+i(L(T!!A^9zrbvYjn1+0MD}T7&sgz);5qBu&FrHjA@6lNwofh zFaz9_fNIa4rD!?3Voq*s)eOD$8U5k2yddG(n-$iGx%OZObMHbr|DO0io#~|0o&^Jp zuX6e4#Q&+Rtzpb(iU0GYT7^<;)l%s${?DKBZ}m|cE{Po-tA+v)l%GAVQskQ|iD z0uCLqL&_Q4$Nx)}N^vLm)J^@2uE5mUQEp9sOs2|DSNiZFvL)@Nr=HD|;chKn%DLTd@Rf!J-I&@Y<4@7&e|M!eVoHXWUeRTAut-^jV zV>85%O?_aS?84KAk-KPT8Z^0Tkzk|K!;7U)e3Gp%Y$hh22jo#Bq`)O%z#vDS<<4hU zux&CdS_$Z6GU!}KX42_?9F4CALGOaXS8p;9_jS|&6aL7y3D?M{U@)F=K!F&9V*?h* z^B6bkV=xG=X%+kAY-Gfo-Gh=KOPB@Vwr$(iw0nBmwr$(CZQHhO+qP|Md*kjCY(zam zWmZ(?f4-9d>KsSbp{y9fm($iG5#14M>nv=LA;o}hB{7pk+%5}%U&tri#WmEYTGGEWN#)?gY9M zlOe*(;=D)Y{RGE!QLg5r#mjB>o8_%u=ioH#8Z0oD_!YzOcYc*#^5M2# z)}VD-RE!EZ_yTJLhGnw|A&+vWu3_glJ-Gc-d4C3}{b}A~H_Ps)PcGti36CAVqA21) z!MEuK%xh7D^%0fe!jjuHJVxl;0{*qMXjkPnzsj*y^JnSK?BTUksA{j%8M`X$OZ_0X zJE9s4KF>hu2e7zE-NyXmW1BmV)F!>=oIy|#VxYMcKlRwUKy8Pk?`_qFtJa*M{j1X) zcf|$kwdmUbw^-hydqSe2>U~Eh55Z91qN6Eb-6B=`Y9n>o4cJm7c<^XT|nsUY&xCRoPboS`|j@s@v&dq41Ufb**MB?2b-WGghN*)IfrJ zgWGSel^v)W1b*?cr>uP^jL~%ks%bq1O7$&I&Y@c6y8haA3mG&NVdsVg)C4}Qf@ip8 zL#u%DUHgMr)y+dRe!vKqxd1~GK?hyCRDwBoWhq;Y=;L!sfknVcm3$`y+ip&JcO;Z#{6QOA4 z2$xEQt6PYXer!%GnNHeD0XQ2%P4!j>Dz^(1T{vT~@|n)wO?l*N;YW@LnM0Di3`f%~ zKQtKoZToH@nD}x zk!4>D`~ZLQ$8aHDOPPzUy=m-*e8=JdKu!n+3^ZCrX<1SBQ!a4d617Ocq4oi73gWdKo-ek0^SwTJ-XPp1~0kGpLji;`!QfE9Qi#rt=n))6*mVlD}T&C zP``&7#Byvi%c_XKCwc((3}+nyr_k8_b6oKwBHgL6>gk6TEN=d!S0Sq}m`;1cGUa}m zzR$g2^bgK$0jkdEaVMN?jF*M$$G;pdb86oQQHpJy5NYXtxF6nj?IwTy%cmHA^Uu*d z?RAccmRYaC3bFMo5pSK4fj0TV%*hrraZZzM?|wL@P%1{A>%!^iB?C?80!R;Z_M5)3 zU3Cuh;`D<&((rvMFGOI;`G*Ry8^PEELW1(Q61P#_BG4-L_SFGj%r>`s0Ab)-?lC10 zPuiTkq-v2z+P9B>G!|>hvozX6s{Am%Hh7C5d8{{~iv zHNLKsh-BH@VO~6GLad2?WZ|2>7AFhv94oltjzn`21SZ$s0htZn*alv`oUAF3=7a-` zsiQ6m-@kZ3dn_=LuV*)sEzYJtK+~yQ9ZNfS6YvVL>sC07Y&S0#hSW zWZjAGok5f{@f!v|7 z2-Du|H9O8$RVKzo1~4EIl=Sf!S>PWX4V=MWu=O^1JE}2zQbms6wE$!u8V9$X`C5!o zG{hp@>sn$9iKIMRKz5RTS8tmGI8+h_+Dd;kE@S%CSeH>gOP90gY|cg7>0461Bf#j7 z21mLW;D*QI2b5ox1W6PhF3aM4$ud{6y*p*Nwq?cNWqu?EnJT19rWC}Afh;=al*)32 zUoq0OrI_^mI--x7y0|4c`PH0MK3}c$uuBYRD*=Da;MJirN*EM@%E%E|0XvDy?teFI9_LJs;>6T;N>Y zG+%`9vZVK_E1TuSfbl2+U|lNsaN^1Bs$s)2{jFN3ymjgozFCa5QCcDwg`K`5#E~1L zL41dENxzAfkzXp2ymTsA;VuY5=Bn&z3h*qBYPI1VeUA|t`4}AF2rVWE6!r^r7A02a z&$wukU%NkeMX-ls3@f5xgrp7TJsXdiNUt<(4}$Dx6FdVv>kB+)oG{hKFT)bfAib}5 zmNhX?C-NM`fbFIug{=PjAXU-_OS0qLt66;?Ft&Yi`I|U; z8qgA2#q?pWCY68L62lFyTj0(gr41-R8$|BB$UPPP(E`@ji4cgc5&6h;heXCb;BLJ6*^#z~m(BV*y>Fz~BAhI~v#~GCh1NIF)ScOBbx0 zf_&Ltq*<6Py9ZLrACzI|Woxhr1WpMq_{A*}W{F=g_AYX9Q_}S1TrdREhH@R!pCvT0 z_X`+Ev#Du9>0xnia_P5g7I#BB9E2!1w-Vfi#R*w9#;cny$Gq&=A%7=Z0cmWJ8`>!# zyF#R`_E;xwVq!w~4z8>vMOPfpe4uvpXkew%DB8CtF z{iwH&2qpRaf)rs%l!vYUp13jbg<+oh2+|-i#a~M7rVCq1R2^a-B2z6*WVX|^xv-m& z%iq#eN=-|3)*am&>|#lOQ^vjT#TuM9%{zxP!*dii-tZJwEMKK0g~~{R`vxmZyqCQN zUI*t->?!BDV3FqExN)N66w>A|qKohEp^QW@d{c9v`@e00$U%4h_)dr6fLzCh0;DUH z9iGfGm`cxO4ioA^jjKl(1JW(J$rQNNE^|GhOjRCE!Ya2<0VUL@JVTBCF_B>?vy1fD zFJ9CQweTMANKiE2lHfmQYT8R7GMh^fWn?Fm`LfGvJWbPq+RfLzPk1IA!}r8RYr2H* zh76$pDA?f*%z$krr@s^7w7-aBVec~Xfr4l^+EvmIL)GQSnfD{WRCvwJMI%zD)OIT7 ziN}!PWKEn`$~}lPFbH)}M;cex27U4%>d|>gB4S-0ucil?0Web0kq>cQzC(9a8HT;wB)kC2s9gpWfP<}nkq9}RLiH&MrpHLR}z(HL8F8EHarU7J6 zE)T7k%pQDmDff-=%)YI6?JLJ05_`Cp3*N;Soj<<(K?yof9@|_zn_-UaEjk`s;ZH3- z;aP7dC{))X@+hP63>oz+$O)k&avz3}x zT$0d&=LvMfEOo5W_1lTm-9tx2O+nqF3r=D6;1w6rb!C}%EWq5SuGlN_Ub+Dc#LTTa*88WgHWn0iL-EE*fR1yA9CfW-%b(Aog%Hl-9dO|wuWgQatURIN+? zP5hHFcX|+LI5ft9EWt|-uo!#X1OMTi??KDH8|`e?ZySRkXjWh&1TYbC2urFn9>zOJ< zssz^dhBo)^c~0KEA9OpwxmMz!C3~B1n^l>M_Tr4x1y_ zk?(hL5Y=3eJg>o!6}^gtM_ZhF0-V2u4OG%8%U$M2Un5bnxe7HamsE-p&ufeCjx1T% zG_|_g+o|B(CWr1G^`CZKeUxN6jS?-J#2IuS-%82b>)QD+N;P~71E>VB3Ng*WWfgcQ zD_WwE4X+!o$;IH8Nti<1mkl!UqxuUT?k*YkUDY%pDVy{YuxEOmT*O2uZT-uy(k!mXv)X$juj8V}Aj^^0%_0S__cNvjbv?H?t z$Zmht?2uGsSL&HzX1~El@~2O1NsZO}Dtn7qnJt}{A?H+-*=nmXIP-lJ5{>8J601ak zmgh6U68K6YvT=5Sux1AO{?v%XsKYdgATQQHSI<+PlVuJhZ3ThxTQ)NyN1PCHg4mhw zg#(l=Igct;1 z`$<3Iy8YO8uYMVUV{?9siB3-J7&%&CTP&MhJWzMOjG?&xdBJQuIUX0y(wN5abrC4| z==Tq{ymV!_QUC5sbS3XJZX_}vkUWO z1(mF8Bi?_lm@*5LxwBKrfP)RW5+CQz!s6P0=T5h;neP~!o>|0}&7JLOuJU-{F7tmv zwidFGH@B`Tb|b?MXqT`HUYf4q@wja9O=T6lRzWdNW9Qdf?GueNYiq4JAtQ@?451QB!>lWkx&X}O9K!0pqylnSM zf6sZ*UEG*L9e(93?^*M5gCTq}lS62It8I`t1!U%j&o+dgSI6Ip)sFFZnED&WD(g&yl#_pYes5xdzly#J>MxHXhr ztA{RtEZB1(Ja(qP3m(f*pj9O%m?Ez zK3}>LHLRuaXYpx|PVO1ySqW1NXRZPVx&*gaIV^w;a^CFHNtvIfFTD>w<2lN(-umhX z?|1J8Yk zPPQDwvJcvl(2q$fLYd6sHz2j;R!zp8<<3pxiS-mB7~3!{*CU*mIz^@$JpI*(j9^Fj zj9po|JHl8UE~wk!FNHGKpG%X?#CAKvPOxSigxv&xX&5E6T-;hfnDAgJn8DBPc+ z+{jJdO^3cgXR!rM5PRaJGkAzgCbr(Klt6ILA4^i)iW*Kz$dQ2njK6P~UeWp+1e3$8 zT7DW5D>&$Sf00n#b_M@}tpv(6-t$r6ZBA&dO=Q7t42O0yYQX^PiZ6H(nv-97`Zh4e3KZyq zWw6dQ%Bbd&BiSWi?km&o0bJ6#FkfV48bB1tK4R!L916ddJ?eRQ9NAFgS)07V#wsky zoy^8zcLAq4{mlUb)HG=mMNw@3m-S-XXv_+TT~{=Q;S2-o;^#mSIRo9OIh+!9mMe4H zM%xnD)}y>Fqmo(MAe-N4M8EreIecD#UC{s)O{4n>IJE5==l^74@im` zBZkp`!;!mZx8+YTx`YQ}zkxj{F?nbWBMBhOC{oiBq6dPULB3S2z@f0+6e24!92s3T zov^sHI(i_g4f_CDLb!w(Gj7j0P4oz{rCek|jb5YkJY2U>VA1+lZ52Kd<1M=6As2ez zAa>cS0fCQ33m)H6jb&^>UkQwBC^fSLw)z8heTtO{>-7$Mq*G6`PtLZY+dvIYn@P&z z_dXDD?XARYz_^n1@+S5*(f| zhF%YOYibuRQK?Sk(orhUfvWfte^M9Jp=(+sZ4W!pKYl&&XcSU$Qtd@z-9m~gbAB~x zHb7zL(!? zB^KQ_7HFf>)&*l=ZiL3`IJxjCxa{`J*YP!SYY{NG#z0^aL@Jv3Kj`BfsG8$rY0J$L ztU^TUz;QUZeO)8~&njWqjSaT;TXGXbwi<-JgZ@soD*n$>%YM5)glngYqZ|8j>bz#V zEhM|>|AdKfuPY0)`?_AowEt#~0wg=%4FA>ch6Ks%GXe4hR98G4n(8wZ0V#@=O^qDG zu0Z7%Y_<~&1*)+sX3|rXCv~Lf>PYxoJnuR@wjo}M(x>K48`ZkMl)rnv5<##<(Mnr> zoTt+gucw2))Ck&q$@F*r75qrcS?TRemY!O?@)UE9rp%IYAcIeDTDn+jHv6&*0>(7{ zD)Y#oQO9*jkER7ic^czyuOAXT&$=HR7d~($CRl(BAB8QE9BAVRz4`d!$ndaw)e`rY z>}@8mCiP4l?7~778XUc6J*gQ6ZBwT`om<0DvyEqylElqzv`2Q+~fv zD|`ZklwNW%#v`tK-^@M{^u2M>hnYc+TvscAdBFlEDDDx}5=|FwNZ~~o*_8!JYXt>S zhOCD$;WkM&S=U0E1pc@raBrjiO?l6PC_yCu8!@hXyc~4-a?NQWIwjz&YYUNV<;ok0 z2=2C@X952}Ch&OsBh2Q%i4X+8pTa?WxZkyI2U{d*No2OWY^px^Ou54S{HSzEG9%Mdc(USH;5$G( zL+6oSNB3niAQurym=;CSMe57Awv7c-(8}b|hs0hkX>%lYvC|YHHQO6=j3)x^W4ZI# z&Wxr>|IHs00Ee90tAK#6-|#THq1F28p_pg`L9IR+f%7TK&r^oSixB>Ua1LxsWQ`pl zP=nw-f=o5fM(YR$lU?cJO$SG+L>mQ&NY~9$Tt+PC-l3C|)FVFwwN`;UI8-A^Yy!%< zc{M=3Gm}PSOhNkIFe-(ek$`5%3NLs{ygY9{I_gfCa%t_53QsK45iiW!@jfsavP{l! zrRxYuzky%iJzZUfMXjyUt52`FGjG(ayDkDn$41D&&bKS2$iOU zC&k8EW3gHZI-T3yya`BUGJwq0Lr{>Ks6P|1Lra>MS0v6`pdO$mP-&j=)_)Xe7@v$8 zU&ibeqNxm`cs)MgMxMtyJ#F>3RlCAPqGYA`m|YhC^4y1t9IRT=+QQU}vT;3=RtpYE z&&8E&iww+5KYUXk!8Yi^*6c(o|!{(=i#%pk~oHo@%8^}+GSz;@hq9M~K^Mz7)G44Lci@`o3%+*?-u(pw9AZ~>;)EUs_QzN~ z+J6aP0clNpZV(BzI5H{7`~aih77zRLCf9#cYMEGy$Sb~uBQ5@pb;lqE$C}QBbwh09 z9?mMzIn*zPTvY*qpB&5cUVH9I`~U17}rJCXiCh7|Hu3R9%^5d9HEd}5~8KKJWl z!{@W?xhE-n)hBT!M^OU%!th6~`{C!2eB&qFb*Sm*kC>RXAjxL$#;{(~{vq*+;2KGo z%ehua1*^=bIpWycHAI00Sfaj4;t0*xg?ZGcx5|41dFegUnBEYUgFMmWC2R(@i= zQAGHzgn26|;+|!ZB%hnBG{xwv#l+lQtciV1R@ zpGIWY>b=_`jq3~#-TVZsBEEu?1xPh4KfzVyct3cnvGW3Pei zmQa2?gc8wxqePk-eNXv$p=3f1AZ{{M-j|RE!V5q?0rb(*UZWjShhqn%{Z{d*YG6m5 z`ckT*rjiIIH3?{O?lBrXpqJ=x8>bXu5!zFj(Dv0xH~>@{B_l85WD1_@8k25$=5$aZ zbwMDu^{T+_Ir|pG>C?ZLs0_dqrL*F7G$pKOSG#m+;NsooC+ny`7g`ltoa=Ad0-YZU0<)zssZghp zx?6jlWj_l8!WV`s7ao6sxYsonZRqQ@eg{?>*73*wZN*o7J-o8N|0Yck#IAJ!%I81! zt0wKL)VM-vVcg_yj{xF8t8P|YkkD8#a_7nv80o}D0djXcl>PIn(CAm|fA6bI8Ll5Y z`!PMUdC504GJ^G1?}YaZX$d&kty$q@o+&s5txBYwnF-HaFu~yoq364RMG7$MD}>aW zAI~21qo>hO^l5*AA8GK8NB)q9JNyoC1DHYIYtjx3t01GnS9j)gEp-7o!(-eAxpe{lWA6yYa@ND^{V@I$Akkb z&W{Yr;f+PEgCttEYJ)Vcx?q&Fs zHzGZzzjR z`X#dZjc9tzOZocEqj~>TX;pchY|!EL^tunmP_@1*`3}j1W8ck^&x-I3HCa^?$|zD^ z6jwC(T;6^10FWFA&q)NpXHxfR`QDw9S^XXY$kl=_6oZiR)b<+OI%%$aZae1dF8tZQ z;Z5;5|A;A1Hn{7d!j`%I^!Xlp#}_A^x1s+xJl%exn8vY zR)5U#Mm+mAd(?6IZCyzCz8PL$PiP`XRfJUck#8&bxqkGy4(;IDzm9J0AinMnYGr0q zWAalGmj$A#Q7$ikbZn?^R$F_u2=;k9}9p z$}NS8Dm{r!^Vfy1+x-ViZkig2#{)~c@iY)Zc2{U8YeURbaMY{QmQiV>PrYwm#Qsj5 zKyVs|`J&&2re3_D-1QanHB4Qyqr>8P+Fi-R|LpM1SyI0?(}uowvFUQ#2ARWwE3JA4 z970EF>>CwKb`L3L<>aVmz{Utw4Yopc`h;j@mVw&qBm9{`ERe{2AH#v{V8~~4vhWwi z);6ktBVhWm!2M4SEWj8KZ^6vo#LS~L3tpbi54upVdC)gRRYgrucz`Vx6E8>X~?bQKsp ziP`(YXnA=9+wCw{kmZYTjX|KtvcXIw6T9}L>Q1zS0;z?F;RKQ; zasK$0(0Yd0w@IYcTDsyBM!3M2lR>8oMmS77ozFIa8Ua1|>-gf6b;eeV@U)pHFBlCi z?X~L`!0wr(wS6gq(Y!hR1K6i8b|?J`3^{6%3VU3j1<*ON{7RCf3VXD1^4QInv0(bWu= z_^_Rv5x6JhC=Ws%ndt+yWtPuTC)W#6GxQ|1gQ5D!=;?Q#Cl=+bA z5JQWhq^^O@cFUer0DAfTZ&a$hvZ9F;Zk(R2sxF?Racf>@({d3rzh%5h`N z`|vKkhn5`L6<*~z~fD46^Z^xrAZ#yDmBtC>QO$6fb-+0 zx4ROYq~ZvFhpqvAOB+Qu(0g`MXas~Bm+Fap|9QEYuoK1z4M_F>+wZz4^N!=@K49IF z-6(QA&vYt}GX&lYgzMCaF*)bE;Q>AGt+oPht!>?aa!&W^ceu=;-V{IfU34WH3}6f? zexfTonHBm0^6LNR!(o;V(em~t^LP>PkHC4LyNZM$mnu(D-*+A|k}%e#t2geTBimJl z>3S2OC>D&MQIF^lL*?mGf5>zxX))reu#Qo7Fn56+EM!QkM0YtBTw&LsZQ@_)4JlDC zuy6zeO5JGp7V3=DVH5f}bNy1tMt2GPJBN0w$uE}RDI)K1`7hDd#D$f-+@2fNz7<>$ z7x{rbEZMbk?mEv{|LB!n#Chp<wo$jr_-TyvHQb(X|IR{r!+Lifg1DVBVTIf z^m^m2NJXvyj(hnXAnQwr06K}yQFP#N3XwN^5CoSI*o+5vLlp96@n3b6B^KScXVgU6 zL=rYx2tbS@AgU}G5dTJp&NoImFYxd;s_kRSE0R8^X7O;R3&iQR^MIik+=@}4Artj! z?vZBxS-6&qa1^S|)~GdFYtNA9xj5dE(UQ_8Q@EP@Gc=fNF4$Kx+Q~*Z-u&9J&u`jf zdBifP6>2qC%@w)+w-TH&VcifG-QW2 z)9sN5toSw&=-f$BM@Xl1qb8o#qhNnSL=*F8I;MlzMG;G^z|4A49^1gnLubK+;z)J0 zkrO@Z4VvY25rqy3^r%52EbUvk#3kV8_YDHOP%U*@xFlNG#de&dze5!q2Qc3Yq-U$9 zWgZ^~r=!(vU9Ei_yU%w$>+q=7%=R(zmNxaVvgJ~E?aLp#P(h{5R(Z^=yA!Nt)cO5H z+Nk*vV){iKVx>Co$PR@e2Msg35uXvw|Lq$yL6Q(f!g2GT z22&A)+jiIvLt9DX@uI!SksGdX+>|Wx8R||~CRjvC(rQ`Nefkv#m!)r@UvD{M#+el2 zFbUV|YJ{eCoH&;iw8bWo%N{4R-PZ4`DWB)ZXeL4+Dusf@@v%d@XT(u{2uG>an|lI} zG;S;Q)I}Za%~cd^xzt|OGDx#}po8MXOZBU8tnNMX2f9utdID8b?f7$xoy%NU4%i=d z`xErqA*={hxE_4{G_SFj(USqlkF`#!M$cDz#U+<;-HJxd3<8^OZ;25}8vO)v3>F(> zv|430Y9GUTGgEe6u3WFxZ;5Y5K1QkJccA=OeKhI*;JA~$ZsxdM#t#szN%*%SeK7SZ zqm-p?_)Az7czWgttD{;>W}N(}{qpWx{pxHoMVu zsxDwp3E(TI(Uiv|t-k<|X+P&{N*SvNS*0{^&U{ukllpDnAxI^%%ahHGZo0dwgZ19y{^@YRjCnk{*lL^#+opTOyy9!F~XC7x|_LzzPnx1S`ChI#$n(Tanp7u@WlN8?Fd*>nKxU)%k;i~#xSgSJx ziYyuJm2apw4#~cChkN>zD-gq-`Keg#8LInuh{&0B16-iW{%_^LE7z*kBd$;I!5-Qr zVk98m&a>&P0EFeQx0?%efORV_Pt%zBJhFc{Vkt&3qkXj$cBCu&dL!NdVVeK6BJ%xc#aL=`8Yy-2+c z5nE53Ya8xaysNv7h++82^2TgZG?9ts^I6rxJZgK`><3#-;?KmUf-f6zobiRJt849J zAxk2y_s?^xlm4(mJ>xypTd1I6U;}!@MwRHd6+vHO=&i2=nzj6~Q&56)bJXVct-$n} zCVo6--0y~7d{?@woI8tk|G3u}M$^dB7eI9`$DwG&f(GICuQ+zp@u^qKaY=8(ZG<+4 zqs#g9rE?Zvr7$4!osk(c9IgA}-@2<1c2q>@ZFbHJ)P_0?#2Uw1kmGp-cbdMcL4kmQ z4j++sASZDX(WtY~KJ2Oral4_3GsY%H6d#@y!?qcLjetp?kdL54>{F85i@--EGZVH% z)hxlIc977+A-er7^%@Y7zS}fC3K#J0fkkqxdMy^gT!XLzSSk7u5)xD_fF48@S0$vj z?mJ~z{wjHGs^>P>?4sx6oFvLy3`Fs*CmD}nCiJ7(@5d%SU6_PevX@hg1xe)6F)RzT z^Uq&``gJU`3C2A`MTk36G=V7zP0O};_X7f)s>yikDF%q()%fW1Yp^@*$XyEQ&K=iE zQY6MXMF1>kPGS%_JexZ(MbSZ@2ItpyZ!XG;Jci8)$G&^9$HRxT(i{uh;PbQx#%_IV z)O;A856}j|y@6BD%UzFZhy)QmUIfs8N`a4#*HNZtg-tQl*d=LFxeu!$_`s;uul{2z zubQjoDWzoLmxR*Dq*euWmT5+~3Aw|YEl3qeFWL@wj}U8Jmy)(&6HEF{t-&D?orzY7 zY)C_9g;W>efQ}4haJ+}i83do+YT!W{1Ss``)cF`8R%k(`Zo0NI{cgLfS1tKPQOZ!~ z1ii>Bp(i$$aUIW~zsgF0-VmEEY%z z4(aVtM?FLjRYk&m?AFlux3vA}<*J8!_@DlWu@NH*X(gKZ0M?NZFBd$jH7}~z;+GlGgphF%zdK?L z8?;v=hA~D7^$<1DcDiB8P zJ0`ZyWBG@Eo8-8EIcVx$s`1uS*Wl0>_r!`M=!z!-WCh`s#l*o50)NA`tOsN>LK5IM zWj}M2B(gbpw@SB(9<^?hxPhttj;?1fx?Guu!tL~(eTx~qn2v-AAC14+TBBua3l{pu zm3F~dhU0>pd79NDzN9!ZeQdu)_xcwUzYC!xB!C@do_oy6o$0w%PxyLZ1)V6z$kfzp zYwVRWx%JfXFNVZ5bdNM0ixo8Q4EN5dhrLtpCIIOmsdA7Jj(g2Wk(-Y>fM_dUIzG7@ zWXI0CDF66Kef&)DPJQbrt&Asy{*;`*4`+S-1cPy%UYDfoCiGl}{@q3Dmc2<X)0xhU8I(^Ke-hDX z=XjJ7Y!_5qB}tHrZ++0+%CE!=M+OBb7b{17Hc>&rYrWy5+pBC^k0YwnQoZBiEaL^aSYcKFBJ7m?hE5tIxZCU>un#ops zFFR^YZt5ber+tPijycfEV6sgNLbB!}5x&^T&-yX*ck$w#u!ad9kDEftd-Bk3td4;G z)%nl6YQa;DU9;i!D4B8ozx}JF=6|8sYJSgZ`P{Pkn83Y|Rk_aex;rE+GDz_tTYh$4 z+$sER^T|0r0GZgn%VbBU4k0A-YyhtY;Jsy$$f5iLPvgK^qanY+&v?>Ny(8tcodc$8 zvYR6Tj9f2>l%ET+GDnf0t+AgQhz_p)>*(5# z7ewco@Ag349m6ogEn)rBkb7n&_j)z8A80ejS_^Nu5MR2CVt_@SA@5fkOu&BX%ym12;#p%lP4vTt}OSW9tvx>07~b#jsx08(j(R=M{^}%L|IyH4Mb*+8ih0 z6E?P^lz}fV%%(g?SXS&1YqL^brYTcnfU}3GOLW#PpR4a*jZA>E=qXrrz$TYy=@%Dx znN^<>3v>`K%I9O(=-o6@`X8XuVcjrTx(-7+(b&zLIFAm*3c>goz^`L!G(|i^W=Fk* zA=~9;>3=2K|zW!qV_?y_^5yYF{<8W;gE-n3z+{bY!*o`;6e1`0fHrn#A zg)9Do1aeg8b?i3U_f;Vp>nLntZPeShAGB;~?jTWllgoJts*mm=@IGp3qIWxB+j1eV zi3mreAW6?(9;O}RRCxZrJuU3UTqEm>)h`RnM%W(#N*2plI18A<*l=wJ$qeuw9369o z-z_bbX4LOTWYPn*&srnQ$;h(?|1y(iTpXs!>!9&i6zJ{5_*KqDvH)dRy2y42+v7%; zkHWFcqlzpik&;+-<4Dih*!$Ivzk_q~kSC>k#zr3{(Z70V ze!4ytj(W<~=~RfHeUhTcUG8^y-@bA}pF@5-`((laqxZM1>3~u4txrl6T zA-e4FZ>D9?#Pw3AASVG(DJg+L*;qBS-=WI`iBbauHoOHP=2S%JqRbw^_VlB20y~z0 z^#-Ko{mwv|jQBV9B3%JZFO!8s)3<9WtrnRmI}&fYZh03#Md{lqq0$i)bh#{Yo8Bzz zWOWPo)oer1<>xS6J;wsrPv?K3W_1FIu%AwwJnDvuzz47bC!@?vBbh>iv46Y5WA~mq zQwuemQ3cQ^ZNR8uCZ$D=Y!uwF2W;DoY?x%383(Du?)`)3T2{){#88YBFEZ`IzCn_sU2TaVud=-K}mE?f7d#ul`!TLVW?}U4t z&d-qGia}qXI{X=QmLsbpr!gUnt|FcAmyTzRxs`x-(uw`vE+CS&PcrHeq%-obnR zN{@a@z_J~;jYsYLCrp0`-R(3H=)(cT5f66TPHC)JFi`1#v9rg5mmz61ZoOo+{Ws-cyeXpk=Ee5Ei5dc^2nFd#R4ncKRSXcbQMO5}>v8l~HfUz!k|K;Q0l`6Ky| z<+8&phr2_#o{Gqu2brb9j)euAdt4HH1p-g7sv^B$WcLrYYB`-mUxWw>73g0Nqyn!3 z^jwN61YKazI-V%+#I1}-0eNA+FMTZLNa^AIDWW_M@~ivAJ}?37x@xvedS~$(pzX?d zW4R?Lrxq6ET$h;qi!$y~p>%Y*Icd-S39_;MeT%Z|JoIr!yIXXb#xyi4831DcmN8I~ zQ)7_G&fh8EYGc{i&FSz!L3K=+`TKI%5{z@sk>z^AQ-F*eTQj`Xd6}fAD0ty8A+`_X zO$H16W@gL;=F3kD?k`9>EDhIHd=4>^PELGBI{qqMVrA0V!@+OC(I6m8{c7a9GEPQf z7_#k{@PcFmbmSC9MqqZ{apIQmQE)V2B&>nDjb?Fn-{FbZYkIPIAoVoxq^GBxZwae{ z>|Wqbcc1r~mjZZUe3K#=c__X5&=?f$JBaW=((cn|4C^~-UBhocT z1-~3|{7YiaigX5StkRSqz#U`Xh&`&4i+EdnI7aN_$^q>!2zqRzYh!M#kfwlkZ`Tq! zT%WDh=#5T}cz(NuF`hJ7;Fty@Pd^S`3|1slMX2Q9zdW-D(N3}icyXMPW#=Dyb(x*g)@mklEqfYEirw0j`~;H6du0f zwN0=mF>FR-Mbp698br>K?Y`*dC~gTC@1N_KWfVPS%xwQ~*vX@_<&_z(fSC3zQK9I!e3-BZo~3f-$xr{a`eBv7 z{=pOqWEz7(aM3~Hkk1kF<{o^}^?vXDC}U%H%f-Q-H~QQ_1SqdZv(D#xPSDGg4MHnk z^v;6ou|%~=251{FnZSk@O0N@5FsEar@jM@woe;+7eQDfLAVNTKTh+i0Ul)NoM`(io zjQt)&{lT_H|U3LY4X=h5ok2HE>y-)Y?&{4llia7g_HTONpRuk2AI7dclLQk zbsZ+k$-SHn2Uyq5mGR4|))#NifS^Pm(ZW(Jz=3)(0L&_~w)TVw64H%C&<=(eok`r6 z=H5>E>BbWi#s!r_BfO^V*v8W`;|7)vH*W#JO44G zKEJiX;>HA3F6bpC)7IItDbZM_^66l?FLJh>a3R>z*)^d)zSrpVlBF>aBt*Cxl&~j~ zUOsRJFVF$j_R4fL`y@GK28VceqEBUDBNMfZsSUMlT%=lxE+-CnWPc+0IYxd6*mi($ zu>c4Lvn=xmC62YQu(Hye|3fTac)>HlzW@cA_PPj|W+C*afzGd|i8&?^C%G-Ro_Va$ zb-9kF%IMSjX!7pf1^w{-N+oSixQRB9q&}zHv5HiKZ#X&kQ8V+TYmvl;E|PGY=!Z_g z+pNp($Y|U&jDPhRH=HSX6BN{z)f`pM6yiL$6`hr0*p^r&_70S&vb~;=sJwe|L}%xY zAemR?LcWTMCsb2vLT6EOW!^jw&N zl#n5F1CPrzMgaZp7Qoy(g1HTXZoocd=?b2 zV4yq3utv$iaK028gad5y)6B*qjq7H$D*KKiABreHs=690t>y8=fNxjt~0(z(3bV+=**p;6#*8f zS{x%!U*sw?9828rtFeB0?90Pjea2`Y`lpf6 z3-HDou&T6uncAxzV2)nDY5eE+`v-?d$A53OPELP#`{TQRbk4fKpIuz`|MhV&9E~SG z1ED|vboKfAmr}V>U0dIH^7Pr`)r?*`^V$`G;>a7MG2^>u>g3WufWr*OdmEd$7U4`NdtEpJFX)kC^x>>1`YeH;b2Se>A5S={|`}2rlF3t>QlroZBA$3FYTJ1a(OLvH1=Jtc|{S;#% zM~mnJG-kekcaPA_Qn3Xl;YS*_euC)C*kiH|%^nNMu9Vq4WKZN4(+5F6-g( zZD@$;v^6Ka0W`JW;2YLV@v1L^x?%q_%s8WqCIA}exC6>hFh=C#Y?LhNFv z_>o6z5EQ63lJqyvL;3KN2n#@Tce4!c`&!~F#Z@w zle^Ua6H)h8aK!s4(Udh3@%U$Qb>XNCi?$g}9Gl{+l5Or&ba%3g56u9iD7=6~Ohz|G zrF1IB&>AI4jre*13W5}3r$(%AQt6cLnRz(b?m{MZ(!N9G#*rJh9Pbm}NsitHEF+Lp z)r#s)I}<+u^f|f1@LPl-PtWKfQ$Ub>7_bbDDW$A-gK$oM5O__<3Ln>nM@W_ITSUS} zJNulHCg?l+Opr%KFIcu&5`5*wS?9b9{9Nqdb?;jdaqQAd^`|}3itU8R&zvJ#BL&(4 zdaL-5;kJ@v4InN~0xo%izwIGfinKJ1nw5KkcZ{wBA%eA1R|Jw-C!XvE@PgELyT7n&nJ{p49D(J?$jUz~2FV|3J}g|=Isbi9`eg#{O;r%yrz{(}3|EEg$}2=#)L zePprRMWOHoy@H_^s1WMUBKv#66Inh9O=sG9n9Dy-Uy_a{vIKa($?=MIJL4A;I^5v^ zzE~A8Gz@ULFyuPn5*CDLFt5#}5WLz~QqdU(wPjPO@Hb?rTg0}N_E zH<$t^)UG}agPQ0$(N|l6zB1p>flEKGtGP{PBVF@jhwl{7AV2IQ1%9A?<+3mw+$iqVHJCu z=}LC^aE9Ey@O`iNyJSdYe_}4?Up_~-q--||if&lpobnfB$#TROL%Lb85($Sa;YjMS zv2X>%0IcUWj zUO=kX9|HM;59)(!deI?y5N{hINfITU1?Sk}Rj~4j971(3gPzv6D{@;}R0Z2!I$PlPR1qIQZgECYsth2F6$bHFr z>nNJ|;&>YqVX2Ax!+N=i3a0w)Wji7(vL(zr%;F+ieN~H#^mpI2osha~rDv$GyGU#m zkyjB63PG$Tnq`z|;<_6VronSo&lxx7(@*^ma$7!hG@9wReO_`LJALKb(WY8?5U$+g zJ6YV%aj#MLPi5=y>5I7s=Wt0tYDE6_n4@=(MnxxC8q z<(4xIn%PH?j<~-nJ19pFJ-SHP2XLc35+2#Xdzbf}6M(;z{r}~kX8*6&pFAl={6AIK zH}35J|7`zHaR2SrPHMgnD4Tfa2kOpMz@4jrJ68bf9w~}`%-2fW*P!q zPXK9$>iGbFzNEhhOH%07zs5k7Gy@o(dVV&=&zJpSrw8yhFZMo4ss9|K0cH)iB?Jh1 z{xAIf@^TD3W2ZkT0@zEz@BaluQuS%SOXcWiQGU9<3Xn;ej;~dHbOG~y4$BXpFDF1- zc6$B!us8~4QmlCmJs$=GYHtcZU^%*%PM16b>mh-DCpt)g!ZiTHP#tu-AK@TA?+oe7 zOGqmY2YOZh8lD`IU3IPf4|dgsEnaM@_zd&}X#9zTrg37?9rC%|Qv{b}9w}pU+NkO_ zp01Xw7{;Qywz>8s-Ugm`4C*E3n*8b77qqQBV@#h*?{B5R8=oG$5qy4&h%xeWaLW~I7`zJA9fb2uasAJS)n|zH)96PpQOj3>F*_Nj@lH3lzxTCrW#!nl~ z9Gw?uNW!YqgDgrCMf`A1u7N{+dFUp%HmWLI;(iX0HM}eJe{_yZ`H}HQO z8B8 zR{HC>e*2anZ?_5PcDoR5Um1}s67Z|OU*Aax`9%?2B9X%W9kJj@R|oa<$HTxlAA?bU zjs(y1qq^M~&TT<#HEd=+3-L`b){cZ{TRPounXTDG8xZX#A9P9a(QL>wC#`>8=}-J( z7(gtVmK;NkpFI6E9p#7mLHe5?pF;Ab#CF+as%=>{>nly@U~&r;avpuOf&6b{{cJ)B z{EH90saRg>5fbTQH3z$a@pAydPC67rY>s+R_>P*_?_=8h7UTBZ<7QJSS6QB0BCAF1 zMgqg}Xh$0~L+p}U!7tl1#jSKoq77l9=qr(ty%e&^tk@=<^6**VrZbr!$JjA}#Kzh% z!gy3e7YUugRp*)`eUGN%fUVc#JN8^(tE{7s{`RK5yfF?!ngl&$i1S7yNVIo6i4$c@(m=JbW2Y}@ zghC-<@F?qC4qt|+;~_T3c1>ai$vF`RP5P{xF8Fwz1;EmGS$l?rVro87I&df1)Dp|?01PVh zwP9tx7AMImUxKX?@DC+>2!%anrDVlC1d>9;a;}jLZ8Vilkq)Ahie+V|nFfu<|(ij1-G?9Jnf%;2SW0y^uY9(mdF4Da+}4 zv*PR%45tf=Qzj!UPMLEOYkP%&d%Bk@t0UN9@90j8`_IdT!+#(4w8l%fgAv%uo1WIC zXzdPy*$T2;f$@nH3r@(p!25L7VMmjAMrCF)mrO#O!jt3n@lo@ny;p1O*LSz{P)eJu zFbvB)p3lB+Feg&!j~R}5^4WA^B9dksTwXyRgCrAHa|dHAYY>pO(lJq=2LOE7}-h@`vyRa!4SVduRd=Qv2H&%XBjP+S=Ai0wYLn z!&J06#BQU`UMLbEL;A|$M#MKEwR{IW!>R$JM#JJ zOs|;`$DMGa@0rMmUy?%INs#OUn&Sb8!btU808LMTwFWd@;E>ryF9L5B6q#qqq!bo2 z>;b<%%i^k%y*&9r1hPDyQRa;Ih&SW870%7BDDtUDY1I$8oM(^zI+*Rl0GcwqtVV4Z zT+&FKwct7lVTwawSACCcz2SR%+TAWYPA_Lu&jJ^IZ&TRYwBwV4DBklqP)=;#Zw!OQ z+inMMMbFZ9JY}UewmB95Ih68T0%OuL$bf7aD)RVo9>>9IfxwOkS`Ex-Qz5mZ_rWx>XnZq^q^`B*O)nWgDXUqf#7o;g(ZJGgtKRO1#lc*Bctg!IB>lQaHjZ^MNazO63KyxF32`4mj1ea^5&>@Lb-hRzm+Rw zG?q}+6ybK%(|%Ps8ny|eeNXH|*!G_X2H1~E;rEPH0Z(B0alI18nWj4gtJ58#TZQ>j zYwQF=P=bgX)cj&J6mtZXom0Jsn3hw|b#z(T1!r(nffpIu8@Y49%0=YJ*^5nOeVsjm z=(S(xn9ZdXN1s`G;4;oe_X1cmBceW^O$0gLQ?l<)0IS*LHsoP6fK?=0%-v@bz#G#= zdC2Nt^%8R@6uDXZOV->3-YUofjOdO0^R=}Na>Ik0sld$x#L3c#;cn|>h)K!ZuGlN- z6~l{{V&>X+Ve)kjs7l8vkCP?1%x(PP>T$cg$j`)9U|-C#X#s^32%6X@wuK_ch>GmQ z`ZF`SOr=tKl%Z=w?7pH-@;LMIAJV>O#>dP<`TnhlQjVb zI!4nybpJ@6%<-l|W(^jt5TOAUP?c}%jV7`KO+cpYX8m~oof{3C-r@ndH)Xp~PL?zi z85ET?Hu?gBmbK6ecOC@2vyKi*{f!GI)<^!5tyldegI*yC!#GdTpAC^?A*@?4>IXdy z{8@+Bp&a6K2IGr}l`Ksrk+QG3&9c$6dWey)*FGe#dTnQ?-fFdX>xT`dC5?lq_?)WM za&%6Rq>k|fkEdvf^7Fhu6(9F7$)ssX8LRSvc{m^7Sth!n*?4TGchgQE*IF%arx~Hh zY`=X=Z?mapTldEoeH6Zlzwe^OW?4NycD6j~t;%^dlf}E&)O0*|d;9uztt7_N#@)ta z(Z&^fdjw~#akz8TY}R*9wxS-~;#03AO}*kmG=S*^8GN|2$1$sLPEd(t?X@kIb8VrM zm={e1Bv-eN$Pzryd24sn(?(LjQUT^>MJil{h3mw)2#Z)ur0r3hB~r`R=;jqN&|&lF zhDPRGZ>?FUZ&;kDx3`;@1tDZ9f+i4(q30F}zDL(`fr)pt?~HdeK5swI$1`K^{IdwL zoUARqY}_1hL0)sXI^=EyRs~;SL$XgphuNcE!DWg>9QL!8y&8a}cEwwj#~%Fb3*tDB0HbS`bPAlhlbd@^Z||TS1K#+;3E5pOQq*V5@BKZ#q~v0i06;krbjlN zHlST^HjkRNRMZw#gTtd&N4xJhb^y`&^vZFCPV)hrDUOO* zzq3UdzEp6ZZ!i1ZO9Tic2fH0{gGO%kZAcg$U52Q`dl6uC`8OVib8eC5Lf%<}7m{0T zSk*SVwpP#9pSga^JA92z(ehFa@f7f7XFSMiHIk4c>$^_VZ?TTs5nG92))r&jG%W+TOk)ek{m$Dmf(^^n$c^EF>kj$_!EM7S znoSat1zLE#wg@@z9G&j(9-biE*v84Yw}9iOlLU#z#YiXY_WN=?j9&!3a4_Z0Y~0W4 zZh0N$rG;ms{i|@KFk`@{Tkux_T|Oe?jfYm&&S(0aGI=QhC_lPXO0U%(`@_=#ir8CM z;^pX`lw+5eYv6knsue^^ zIgWR^oVzubj2YgbNQn1G$}AA?Ij&;_0Q}BglwAih@z#@vM(tg?HDwLF;zY4-3-}kX?>%^Tyw5>F_qOa1eAReg3Z?UfIP3CWpeIraK2TEbzKCaJ?R)cK*zp`BcXH0!i5CZ_Y%%PQNH`HA5iScaE|=tp zzgye3v~}JY_6O+jO{NelfK3)d`hZf6!`kj{vt2uU7b{42r39C9+}Lb8Q}bx0>{)-* zGi#anWJ8NX2%FZ?C#S??6;jlJSYcp`zR#vb&rVJWZ;+7bj*`adzD+G1F267>ev|c{ zo}Ndh6S;8RPIKa7HRF+fH$C)4$v^g+Bxnhrqi5sG5GQPQFFJF8eUx|sDzMWolWAT=fJaQMQ zF?79!@IJg&7y+SiZ1j?-+ZevTsq-)1W3NEBAOQH(%|tG`{^Y0i4?0i8;)1pw0_)6( zBM+CSMo(?l{^9e6M?%V2yeBcK6zU4L0ZKbiD2MFZ<-F+pKgK0J>|+$RJbjksvm&2W z>$T!W5f#!A4|;k3znBM9=}h{PuBa!!oIP?cUZ|&w@*bMU0^`Exk0tL*rDf!OOQe|N zfE^!ROvfLIpvqHxVJ+kUPAGGGc+&KZ6>CHS;~m#pKe!azZ6%05crFhA*mbHrS+-6K zg;PJ=ES&lwDx8X(aB^%j`Dx9ZCjDFikhS3Oje;weeB!W?!4*ZV~Qj1>IX5y}shdJT;D9NJ>4=E78 zmCT~9r7FEm6&F^DM1|yMWZW(G6p0t~2C1wt!VK}{Jrl!R;vaB1c9b#%Zd8iCl~DmB zS_K( z{a+@(1WQ}SA&BuZ(wfU)-Mb8Oi|+j$5@?}r;{ad5;lvP|Li36?6_=0HL^y(v>Wu zaDiV2hDDL@5vIhiWjGUCk3*&<6_zEsoB`_3%9457UANEzNhEqu1ECx(U@$2lukb3E zI&`za(Dd3a6xo)i$Us^PxEXEar968D)^RY6X@YK>X(9ZXjRO>qfw^MLI=iNVb|*P7)@@^R5ew)jQ%-|( z^sw{lX9eYc^DVOKjl+{>q-#vNO`oFa%W{d^^{P`n4c&#;jiXO}L-TRwIq3>& z(yE&0Wy^{R1@EW|BkhiOD95_OU3aBBJ?*A75$T>D?;q86b51memJS}r@*DIfoSlyb zi1w@sMXj~dXxv)K00W7tgs>IPcphq5Ft_|&rk2^vH2zII#d6-uP)Mkk52yfX!UzIb zI&l1i!AJeZ%N{SO8hfH?;gy7W7W9&eylNcQn(sVb)$BFuZw-SsN>n4^&{w9wE}bD4 z$;JR2FNR*!$>@z<49<1%M|0$%Zn?-0YwVjt1)l-gk_J4zvk@vP;=6!mEAf@dE}!Nv zjdSlSdW+PLeAJru3L_eJwsO+LBG!WP&Apvx>(7c#1PxRmD6+d&LN^lowpnkT6xFNw zOyZ!xDMF*L-dL=<(37m~QG)2|xP5T4rE8iZ$DaDwpYU+WmL}p(e0+Y6y~-=+2)nBt zAJ-3esmc_6tB#$w*8T`cnNH82Mzu&B3VTi`0cq5Wie4}~0&mOKP<`S`UP|HS(=T_V zc<5quD7*c_@>LyNx;e+iiqdWlXvIX3jGS03_DOvBI_N{z#5^zR-Q@6fZcLjw^Rdv_ zNBQja>2TTs{jN9LKSs^q#<$zw^L~5lH(clZfBj>wWm(*PjlAqe`dE%-I6yWl;o1)F6!TiVng4s+G@(yd_*5i^eUYrzez1F)V8Za#HRaR@M;o3@a3(3!u) zM1=gdZQg(xC&p;6RSb83l^3%tS~S=`ZTL#wB!(2-%3wkb=4sF5ZZe-0MTh1i3IzHy zi4!5M5P-QT3o*OrracUTkJ%hjt#hkmqvPz%U}QtjNGlQrNrOAi0B=1WHKMd_m4HtR zaxT1GArIgZ&E0sZb^s#Y_6wzrSR$`H@j*yIuT8fzwVjTilXJ&n#c>23YhND*vOja5 zzt~Xy@pfch-n6_?+}n<~zVz*jfSxyt8hFr)zzG9KQb08`z~zr*i%&=LOBss|W$H%7 zWdWYhL6&;~T8#@qMd)1ovrHqW%iv^t%fE=cY)11{Az=_v;EGjx9(w?epkazhqlrXv z^AnH_JCm0|&#Is%EG#RTEL%nBYo*cx&Pw!=Q0I_=VAI?`RRapJh~x2unqf zv_$_%iOCCUV8o5Sc_RAt-IYh{YPl#=Z!KudI2@aw?UJ=%d@JmMP`b#VSyrqQ367N4 ze2b>>T&{x-=w#X-Pfa{`LZZ^1Ws;7?>j^nAboGYpK{wjWvMQ(4gjYBwzq0d_+H^Z% z1G)6V#j(0q*+SVOMrR~skQzfoP|{h@MO^*c>3AlWHby<{ODIN_g$n_hU^tliYRE;d z0@p-q(eikZcwB3qG-~@E0LHY*SJCMx(BJ^#JQCQfULWlb#x|7Z*?2s_RFr3K@74BO z(jE!3wIdoF2ANOAft*DQ&D!DXI{D^dERP;obKW~AV*EV7iu=?#8_zle)3#?>#ZA>vV{3Sok1TGAkw*;cSXSdnBLPei%+V-GEF^NfuAvwzpRbE4iFK zT@&}+Yc|#$QWw}!#q9|rhOq%F=ENCQ;VDU~F}hY{3+-O2(7s&*=aG#q)Mw*Ji$AKu zO>7lkvB_a3HAfw3weZeuRN8U0yWpg6tAg9GvU`YemdBAy9@nt*SpyOkk_tCyCE_d# z{u2FBJ$Xa~flk3xW6eMk3lOT1|I8*nil?!QC0HbyKft7Ku%qYzb3zM2c= z56U+gI`ItIun-0&3bl26IOv3zzD7N9HAv-rq^a1|q2RU_;gIQotGt{iHW5e6!ZL}B zBqj#7ol#&#Yb30+d^*3Tn{^UA2770v3`RFL`H<3VCDV6~_&bM40Y}qEbHWbYV*a)&ik$#eq89Z&`h7QiwQn zqZ$S?6!eiGRL6hj?KO35CuD75rFGM^qrcg~o1RRq5LKeVg%!o!Z1AHJqgN-$#Pw16 zE`#&RY-TVaQq84;6BKy9?J?uqpEJJZLF4yIfPN>0CO>O@+r!2m^|W#G&IsICmw4@wa$Rp<~iu2I{vv^jYO|RuO*nP$@XNA1tUEl>lFDSy4yUhuI zE`lW_<}ZMW=pd1yB~dQ<&LQ`-9X-B`cBXD~6m1S43-H82@5ChZ&!uTQS`l=f1=nLS z53V2W71jSjdAUaigjOMvU|3ASaHI>Rm~5TWbtUaadJ?-L*$7UrDrNa+1162623?!T zL3kTH2+n6>a0b`!0JSqOE}bVVzbQh_^mJrdTj$aCO87vA#zTZS21rNiF{7+%=|e?auaut% zfH~y25^|jE#4smOVi@ZuZ`W?Q9Pw3cx4nDx_7ETBQIL3gP+w#=z*2Dl5T?lD&w*F$ z%RBfyVM|e1H$y{v%jEKq6uVP~T1XHGCciP=z0&+Ic%_MK+|5gL(o7aM{xQ1n5$_0P zSrzgn6v?Wrn+1z$L#vvdBebE8CIR_LXPSW>%|ta~Q0-tfm~~g#(S^!ZDr;7skmWys zOS0pSc}IGS7=SKV0q&reGt7cguQn5h!JN$EQ2-&eItY~ommR+yuD`5mwp@KuEN{U7 zOKZhv<$U$Y+S+R3Iv%&(U=s z6)EBM3?y99EmZ&9q3}MtsE~tN=x|+!Oba4|$Ku~Xe>NlZ+V6gJyKr>z*h3R;#+DD! zC>?|U00m0WF5Z)qM$Mj?y0Rp z&cB0L4p=BqPtj``ofjdUd~RH}V3?rGAnbD>1k$OKe!W&{Rx4SOt?;7cBDY9H9nZ4d zBqb)T9+CuxF1@iro?-y{f(h)!cz!lW>i3>@s3<*0XQlVWwLD%jtS`|)jz<#u8bvh| zg-)2RfGZE9Ly=uwLPyYC`_{RH1bU}eZl3*SjIg3s+3R6sT$;vadgNYoIG(ovT9`#6 zb5O{ah-L^3pn^hwv9e&8e(>n0|H^*IYC+(GZbpI|qcj*nCYOuYn36;{qN3}|VLjUD zg(^4(*D?{eL?i+|$^dOe=jFm7HC~iFz*zDY>k<^nkFS3S`I>SB z!L;^|eD4-AR-|VWMsSl^@9mwbL^@z)f6>woIADk2iwH3E!)txi%Ua?XFS|=byhzYE zS_r@z@m=b=^X9v#H`b1uLJ}q(SBHxX?sAc5d+?#$dyLyWy3YQvWf zv!`DKNaQdHra0K3xA}WL1ELCVWy2DNT8+f`6Ny@jZY=h+7~9RLX`Al>zTX81ybBO`7a;Jj z86fa~UqtagG(O<}NZ;u;PV?^%skQa>;g#YclK(H!e;2_F7B2W>V?ZyZ|H^Am%Ijr` z|GfTW;|a#H2a<5@j{f^I{$ZR2Ra39}AzY~J-X_mh=ky+^;o&-s7l(R%cq&Cd87iZ) zo>pFToOkbDHCji9s?08QdqB|i&#$E(t2-6F8mU?B^--#_{?sPy*4{zFGcN(dh@PY> z8znFGA4i9ENGv;vEi6^B2|x}sb>*r}ZtTMEHT(OZ-fZkPYKM@z?xZ#jPfzN)`i7Hn zba?UxlAc78bWvwEt@@5mb*9uhJUw_-Z>B0woEe>(L}y0t>NP!qC(gWh>QAb$kmO0a zOb+vSzcNUka*h;ueKf$+yqIwk!2IEg~2|o{qXD@*&3Odv7WwA4x z6@dzT!4C!0k_aVEM}6A;8PR-)Kww;|oz8R&W9VR+oy*Py?(a81?7=?ocTfXvb`^9! z67|6?p@IlLzCZ($U`*de=yV(dqbeXnjNJ-SS(lypfGL+I8ZF=N41S?jo=-#g`ts~- z#3Mxt>_7WMn9(!#&ghFR0Fz{`B+^ML6`>Vsh^&>nLP_Zek4#zj#zP`dpy^Ap zaUo)tXe6k<>c_c7QEKBga#6}gQXP-Z`y6FgIYn#x`$s!9Dr(DeKtwJpJ{UxFi%MWe*n8u zM}T3uy&1(-z&`w!c1ympC)4p6{Gdm)EB)Gz=HH??L;cT*7lqO|xGk|%N4*^qe3G&a z*2lI6_)^GEDCnFGYO@1h_|nl6_|%#9c>rwg-rxsBo`F`*<%!@Dgsic_$Vv7!z`4M7 z@W{AbCl;^XIgYM*tN6;%Fw7>rGQDJQ{Nt0|{l+UFj!a}`9p2@iNXo2iDecsQ@hjlt zCp7$cxL}oqc6Zuu>b2c^v&CBe_e@?tBn4V8)R7V|JuOx!%)xjBLK=td9n{Ed?;ai0 z8i&~~a0_CUx~z&@l$<`d+MBK39~uNxjJd)yL6kJ1H}|@yT@bnZ3lE-wOA z6xWNDVi`ya;F;G;iT*Re8vw7`kGh4teYc_+li-r0ZTkb*q?`R=q?6uI}czXhiBsfw`cT60h5rD z!f-yA^(Rb4&^Yu)^~_FbhbU;NL$Td4MmCU$v%n~zhAhv-qpm3leNBg0r#J8NeTH2? z<;J;UFEBD|>2wUeWeHwrVrN*IC#oAkzj1W7VO}ylUMCs}o?@WyW=OCOh!p4#*$c{y zPd=&$$Gg;&(i!TgeGYoAi81y^vHr$PrATiQe}F@&yL{61HQHtc6Cj^2dTssP$>xZp zkVjvf4A@mIj6!GZ!8~`jOC--(NJwSzi<2=MPPh^H z;v|34ZGZCH{v>U?$+Xi{*4t^MP8kB=i@QZg_0ks67gw(w#s2T!?bctNzBV||x#(cD z-@Wj?e0(uvgO|vMH%szIX{mmEwDTsFDnGLV0)?^+ zxS~_3Ec{iE)J7?1D;(5*Y`;3)+iUOF4_W#1sVMV_?+S?$Nf%#-4OMzX`Jvkc#7!bI zsEvUCM7By0I*b^JKDcqmALkQA6DIZ-c^77kNSfL{sl5UsjP(Ej#iFqVpqA7l#D!Zr z_)jWjU6|5OBtYT!7e&>#(q^8In?9Wvy_DF)zc}bz~U9Xg*YJ zEy$5^z)!3U9~1tltU*`0kki|1z9r0c1hGIGfoiCkbMlbM3paPs~&K>w63_^#T-no zbA5&yE5o4Ix!&TpDDAw9$Z2Gmu_dPgRF_p#xP=GTw0b&1uCrg)*9~;g;=*X^`g*r> zeKhUiXyX}&q>1UnitCgF!+n#(qyo{>OL}O~#VH#FG;`0|1I79rQbL$i0M%cY5?o=)8`LrQ=w<#_=)k#VSM9X=`JkEJ69$DJ3s!9 zHB%`iC6@ol(UhP4-(KRoX6~A~Yv!(*|E6YqTwdjmHU3zaW;Xce6aIM0AB?ukd_k1C znX;gCZl=u5l%<(6H&fLYs_@4ee^8Aw&!)_?DVNvzgE}npOBr2HjSEJ>4ZMKxoL3q^SreIz)t%=UCPWGhFVKV6mqTX zFL5k0{wp%Yb?-DsGAl`|SxIWG;*F+KTGC@>aiXn|b`G!d!S7j8eQ#~`q@MVbdXiMJ znpDwGtR}6ET2H9xC#onErd>?ySMY0^l`-rDG)`f!^F#cN4Z^ue#31Y*huM*WL1 zyz@SGGp3&+H!SFd$6qN?bCpt=Ki2qzwy45gRd^dJJemq0zY3$IN`>)rg^^!{5qo8g z%WQC?8=SYnjXvQbPx#kUF7lK?q{3LcTB7<@UZX0Xn<`_tD&wmvcUWEHJnpc%&R27l zFOTXv?O&CLQRQJ&c^K6v+zgMV$~Q@sZ<6X$Y33<6^OT#BvGI*keMZf!@$#*es{BDE z*LYBCYwNg0hNq8ik@o`n?j0EinLtHJ%=aVt0Zcdw8qGD4xu3~rNU#c@_eq5V8!f^w zR5`8USuac9i;DG?+U)n$C~~~`#;@}^`wuDqz}QNa^40PZI;gUkB=w2wTYOaftKO$&H)oK=^MMcRbu+v>U(#TTCx@B4Wm1AwxgVMpI4u{_Zp)>wdUPtRgd1+ySl~|s~#7T z%rf~`{u2)tHBa)?Jz!NXvsQB14!%0nnn!VJs#G|X>NA%QTdTNdvFdRzF)})d4)h2K zjUb-5h-K}WOL$g<4qQ*9Cp>yUS1fzXVdekN-n;&%aU=`F=d1WV=YMFkaRf3T(9O26 z9AgRDI+279pg3N~4?BWEniv?ufMo5)&)@xieCyKJnE^?*&?Q|#ka)d@|p`~+WpdI#Z{-d3!5AB8yjmxV&SztSw(;*Q&az;BJ0USoO;EIS*g(d zMbMI95Cf8_;x1s+pl)iaxRuuamh+_ue%grFHs-@NbU(c}a?jZF$H-D#&|$zs31-3C z8Z^4iJlr@(#68(BA&0eAdueI2l9|&1dapHjyyYI?n-%8{okm|apV;(8Nhh|xOip8t zyo^Ok6e(J>$>h32pCq+Z1W8lbj738wnUW-Q!x0Qf60F9(X;X_$H8)$f%*ACHHf7$r zeSmL1wxu&$a!{L3=c5Iw2Bff64lRq_us3aT?_SLeIm+BZG&YxV#f5N>9dvk7Na^Bj zgm9ZqQ;xhs4ocB!=Z2|D#s;;S)|4v*d7L6(P*c3Qg{y+zy;q96@PDbIhOg*k`5FvR znXP*fejvL9bU(^gxg+s6dN*BWJyxkLNH3}DBD*?^CS*lLdTFHyEld3@t2=)12mVys zzbMTz)Z;cvY;o($C*(Wz$y2sg5c?C~H^#CQ>)B(q#)DCposN-qfmFOh-F{RNhhcFQ zw*EzRzKL%vX;Jgh8}(L0@*ExXuUU82GF_eelVPL`PtgMC73sqbV#dd)??6Tq(FGfN zNbSCP-L5KITxCkMM#>#IZ;Jh#h;WRh$hQjWJP*i@M3zk-t!*AG6<038u~a?8*hB1| z8C4?svjOW3!dfVUVKfp}M#EJd?VYrNDPj%V2@4noDo>;FONO;ec3(r4+RKB(gZ5h- z!u~<~xZY}s{YF#N1o>jwJw2>7#mQ;&1n#haHrm!$ESk|iEeh&C`%^C%L_BOXzm^d~ zNiS3RWQiGK&xcD>O17NRw%bf&6-_Ee;k00^DH3al)#KP#5L=Ho#Sw69-aOBFCk+Ntuk# zp$yzv*BjQ|%GGO%@&6_P=>(TFA|?95v8sAKV>CSvm1)a3HgOxc3e-Ji>L%43*u+O! zmnc1Lt(CypkbX7`22%{dEX$L>9C8#hrIp<^n#z_Dhf<<&6_q2PHr>3dSl;PSDi%#i zP9&ZOc}t_ivQx7AMO9U=bnT}k3YjSZFn5N$BkVy)ylwS%A2 zL5aVNC*Jwc6KOLkK^wT-3;?rCfI6Lv@$94dGP*1NN1#a~k=@OTf3T(Tid?{)ZJUv= zvV6sA*n)yBxpj3E<2j{GCU?zEqY7#SPU_r=bV|`GO6+nnY_!uEvd@^Wq-%PMx22mx z=|M0eS3*5sM?FybZnU9&uX`a40Jv;MXd?{qF!F~$bAxV2!s+?lfj5y(4&$!#CGAIg zHe|z>0}ecA**~HsA$rtrVJr)PjcIgX!wJY*+-N5dOs-9D$k2+ql;}=idA2v>N2X$1 z8rlufMbnwo$wTi^y>I{{5QrtNp&b&F0~r-!Jn*`P{E(G8Dw-4JiV8eu{3W&f5i*5n zmWKexpLWe{rLyUVrKKGGLgsXa;nmA|TZwhxdy`;7Y&6?KWmO!|DD_=hBE??n=D<6v;H(}7A9TL* zTG9&z+9WA8T0_()KALYv93*h+qcsqWYC!gaDzY0fDyY20mO%2z!+3>5-y6w@yt2Up zoyo6ucd3a6T4ch9VPVKf6wSs4XkXPcM}qV+PtNB<*JSAJ+x^YF2v;(bW4W=yMxqovh*jq?nD-4~|^UD!}|DLl({=XKPYJ_Za~z zE=uk;_UcP(aDUJTI*jAAS+`0Z)_-1FA|>yfV@YKfR$qs$lg@FyzK14NI<5XQ`tPe9 zrNjK5=f5DnXRZE%T_vwcZb1Z2E*BqTO^|(^N=fT_ zlbo>gw6pX8Ye1C0AT^Lmx$KVeWP+DtWUbf{7PMJ>!#ArU+$X0YYLiEfIlaE{FxoIy z0DoT*uFB?ZWQ*LjibVD?Q*ph}%4(IwPDs^4VA7!)ACcf4mT)0G8s?D zxFl4*n)wHL;XDt}z*`lx;^)P(rW9Dt$six*kSyV4q`z^I3yMWp(K2^wWeStJ1F$iu z;HQi^h+-F>f4K=(Q(3TPv0x@J|IeF1+gjrPC?k)jTMLDg=xJ_7w=-`f^uC7^yjACO zT$wUa1U|fgjEtWEHiqSJz&zK)zR}Juu@^gC)|OgPfH1!Isw zYrc{LiUCM1y;t8oTqqNm-^gvjr}gGW(SpMY+BmSNON+XKBh#yLd-iQCN^v3);UujjOBQ7Tpm}}w;JVXgpp9=ay0CsLq+svE@yf%nE|-5$BrF%>&d_g z&b$+>ON2$82uZ+n1!?FAsy`q;iKBucb4;AnknVz4HoKo-u(1`*V$U6~X1HTBb*TC` z;Qj%GYCL0HwQrB=Zi@^Zp;NI~ph=QH2KXa+Jz7*PZ~5`p_zrW+K@qG0RpZx98||vj z($l3z=krbB=J~@bO58BdK`6Q@sY%uJnB-@)dMNF2u1YSVNzXVkf;Oy&T~yl6M)Izs zJ3sJ8X?p!i;z1V_rY3#5k)Rjz9t;>G@5#V7d;{Q^re<8qUSEd&jfu=SiCqZjPgh{Z zbFoX2;yk&3`P4)sY#k*KZ?^ghB-wnmQDoqnH|TMPWPJX>rxO*Z5bsU$KI@<_SBXOH zdE*+>QTS+lbPUk@t2*5+A|czu!}|)`?5PGLa^Ara;;jpt9t7d4qz9rXDm)*TGVO9M zcF~TId#mc)F=i3Q*hOg^^-sC-LTM?!zaVd?mq>6wXeN0CkhfX z(`Sx&Mq*NaWvMOH9?$SuvxM`BKV@)uYLy5N-h?8H;&D$9Gp?xAHqOqR@oA+o z6w{x}nS12yZkR{LTr0-vE4&~Q)8-))NmuDOVU$RuV`4zH)5z!dw8&VnTPPyFN3Tfa zKnIR8>23~zBGN_7+W`+8PV6v-4*jm^g_hw}%rQ}scrgzL7?wp+D+z=!!nM14wkSRnl1J%4`R_7v zd)cqdl5)7^u0x8VqPs6tF46vOyb0|MLSLGVs}My7 z6AyXur~o}VqgWEq^pF$|@Ks!?M@&SXxKm%Mt1bYLbHQ3sT9F7xs>pT{x$q ztzk~nz+3d>@)kY0bb7J?>GHS0oSderx9HvA7QGudy<4y~^VKxzehgu)CDp9MBcV<{ zd!`i^;bbo!zG5oeD)VfEY}}L_<5C*C2&gY(?V($JNrh#Eszn6gRww7TRKR=79 zt>dYLYzi|ecIT#U$J__EjQ+Vz4A>rA!Nw>u0WN+@!V{FVAmH;rsYa<&m|$xjtce#| zFLAkLpRMFb4LMn4znJ4tVJV68f-DUP-Be*Dv~9yF?_>BP<@mMdchS`!M@>Qxu9l(? zh7Fa>QLG~t&pIL`Ar)*nLGP=2l1Kbdik?Mys^xsiP?#!W(s9UvtfBaG;xki6zG$Qj zN8TO+9rIGX(S{R#TxV1Yk?{itHqgLFg4IzlGFUhnYM7}nzKWmxyd8im%N#JZy)CR8 zll>4(r2DY`vlYb_Z$jY+cK_7egtVZ8{A%W4BvM3@r$;Yxy+t}1{H{kzYl*Q@a6YI$lh#W=lV&DaBT_?Nnp3i)B7vWd6 zUT_)oX0Vi!P4JX-o?ii3{0iF@co(T$fiMuC`wE*_#iBo(aKu;a@;S+HNBuCy7@sr` zj@t-8{xoATeWo{NJ+Ge+YSL|*@QlqA@h7q_sDaPltkn(a?{WSW zBF`fniuSOEKGv#gIzX#n5jB1Q#wQToI4D3@nnO%^d9jcEbC2E+fe=l6bcIl#;vNZazRi#OcSx`;uJGTy-d#qCEmP7Gpq-^B5q-NIA9<9rvTOxRi!o~Wv`@ocbVX9*S1 z#36w$sko%lds6G!A`!8xXked1pC`FOphOx8C3wr`A!FgLHAg>^w;<}GA{<>42?__@ zruCyhOar>sl13WvcIxI}k=_TAUUDZB;x8@vPz)SP9n<+XDyZ2uThhqgrS~u;c~^am zNR@zar7FBWz3SlozaR+V!hT;01mO~lWIn69T_z}w?+DYSi+h>$5c&H@g@!d zG50c%L&fbt51)` z?g|pdw^g14*U%rrqQ*uMsMAmIW3;143r*&;YKi?piC|TcJuAq)uW@; zy**?#zpJ1m7ByQ79A@GwU`tjivHJFHNivQ26n-AUOa*8@+YQf0!QYW7w85bs^}uK2 z60`xqr-=dFX}i}F$k6LvKu3!va7K?bk_Twg!XYOp)|hDSw&0q0P8L6`*?iEKFz^}s z3Ip0uU>nkMye{a_HV3VSc(PTlkSNWQoavI{s%f$}^q!C-&oktIDE62=S)0|_h^@{o z7I4uLGEcfBWn1y4V}Lhq0G!&g)BTjD(~w9Xmh0uz6Nkb##pm`K{uGD9Vy~wsIyrqw zx9vbDOtnZhc{MDf2TI+tRwD53%+2@@=|PUfi1-&VaSYrn!x;Fxg)^dVTz@ zZ_HVHzR5PYu3hP;jdWcf zf$N)Vb4NlM8#4R&>Bj9Fx(TY;wof15cp804 z_w`=hD3|}xh8~-S)^Fd?O;Dd0sHxkH?-oi#%(mo8SW9j{wBR&6ri{z)BC+jz2Q=D!C2w}B)Xs z$eRbhf}yu6asWd9KeQ9Eji*oMTI&5Dtx8|qQT7f>YtE!BQm?m4%~yb%`~D_XEupze zOu;|>ZOSqyz<^{~{fs3I841t>sd=6H9wr{5f8v!#kFe;1S1?xJaNoLOPtNq>yl8T8 zTiWlO=E3zJwl-n$c^@^;I<#8qiMnLcs%eG0;b1l##fx)ltir%Ez;m2d$y>>3#WnbN zh13?NsN|znp62Kn&FRY{nwvZKC|=F(*C+RR9~Gmr^sJwiwg>pYs$P!G8#gz)=c8{r zilisC=vAQE^N>QXO8t{FQqfd~FI4IZt^h+`D4$vr zssils6H66^iaz#UJhH3~wf^&z6t2sBZ1VTB9i>r3iAtl0wE_?`r518VD_F~Bl@^iF zAJA)S7gLUHWBsdUQuP~@uE92wIkI*^pA<0nUD7>a)e57b^FTNbYLxVh{K{$7N0gyn zvVtlZdjYwX!HOq72~LSdTIxSGg5u7W#%g9yJ8t3~b)ST4XH0A8xl|hB=|=S;o_?h% zXPJrcvnH!P52N#{%Kli;mfDz4N-C-}D*vE`nfMuX{#X+WCd2Oci zi|R6-Ch|+n+t?F-iz)lOIlFPvY~~FI<4t)mvUfYw4>;NU zk7K!o{+5L;9{%iBTm+jku>1 zFF-;M^EwE+!E|tq7FgsRKx-T&w7zgX))VG+P>7AECdj_wsnGX=fwEu4*Or9MHmRK% zGS-uNb-`4h8WOftgG7L{2`L%IRDt8BIhO7=D%lzPfX~!EmMVVs-u1xoU`Dz)@er%j%^eKyQj%8VDvh(4~UZ=2q(vwAj};*p6Wk45PO_WbTdnyk`M z!XOMjUBIFa^!cXL@mR;uR@gIshowxyvUg_YG;xIYN7*9!uU20p0c*HdH z+b3{Eh_jZ0@z5ZAzzWoI@E@o#`Ep>S19Pcyq;Z@a}T8Zn# zf41&7pyb!r{U)Hd)BXN3wQg&76ol)R;Ol5q->l#KNr@&lT^TRC;*UXLkXppGbURe^&|Ktie4L|4{oHc$5BEvT{jzKgpS?;FVwU>u=87qK_?s?a36Tw0H zy3GFSjb`5DI$K!cFjEB~D&kW?W%vEFNj!he${%`@?geC;+;uD01C$&%xf@R1YbS5h z%KLSOVW_OkEhlr})_iQYIXefI%gKIXWk+ys`5eB=6nGjd;MBG=!|pV6>sHEE_6QI% z2D@U6DsiaD1kFh4hKWol6bGXre(#2=8PqDU0&DxCD9d8a7w$|{c3Rmlv7d(8Jv$A zv-d*~-OvIY0WJUs%}@fIl8p|I-1XD>xc{{rjCwGMl~{N180{zBd}r4JgAvPiHg51S zp1tLu5BmMY0w&+y0zU4bSbdw6kAhJ=+osi1KauSaYk!c^zC*63SN@wXi zYOfkM;y$W=PL*o$Lb{|BkW-KzmN(9-@}O?Nn7EivXVjXhZBnLGw=b$&;(V8 zmvB!(4>u^(a(l^kUau&h?+Ytj?A6R0qC^)?^+~UkoQ6cV*3C3{e-8$_u2uE?rmBP< z1MHDqTRGQ|!Uo=4{ZvrvrA-Cv*uNs*Sp?4XVHDk|V#+8+y;MAy2Lbrn0eK%XBT?%+ zXF4|Y0#66*FfOGRUV1N5D%%}Uv}I1qdIWWkw?Rt7{+xyrbyM2y&S`f`)!ij`=c&lk zozrfjZc4kuIqg1Hb&pW4>;_eD3-0L~5#%iXtd6C{`MH9%^aPbX-v_>z|8%`#nkrpb7gi23s@5gWljOwSuPU2ka$8dN?EHqC*r+&0zqc?#_9H#){?_UTax@jD(D~uj@k?enTQ}HDuV+_ZQ=zN$ zfgQ{N!lx!;{)AD@JtO}<-bk&dk2%xky4B^sk2h1RZ6>R2B)b}=_jS|sbwsLDDNKrP ze=8NlRNgm{r=+Nz^1Jft@?gdp*g`-l{Kff=9dfQp_Pjr}ciZ3RfLXI{ z4dSo97r(FkJ-SQ9G#=&e^JXFyLdp~X+v4BQhk1Mp&ar`HOCF5q;Rww;J$ygEmHa^! zPmw=(x|d6mYvnt(KFN~#Yj%D&nZIu5_mcS=cD|p?-?a1l$^0!l|2&!h*v`L5=0CCX zgJk|wJO4u>zv75T2FZM9{)WkXXZ}X<{GvPmVKU#TKThU5^Z#2i-OKz@67*YGT)j1t3lJ80)D}I;8ParWh?2n082d_&NMLDhQ=yo;UG$C`Ue5 zAJv-&dk3{+VU*GTVY&2iYxBk@wRh5q-?m=M38;Fp=a1)NZ9Sinffz+mt2f95s~ZZW zH%tRru|dKLq<}QVG1wp$kzd9Q6koRg}JpwWlsF<(;8ANG@;G1@M$;w43$X z?rTPr_#%_dNDlwDR+f!N{~`4OsEAf=P*$c~hMV~Lzn?b_itE){2nj z$WX;DSb2&C4Z3sh-N`r%!w<9Zn-GrS+}W((ceW2Eq{f~ar^HP9%}rzZJDr6qQysh| zP(Qr0vx$GH=JLqIt?h#;EeC5a^(FdU8?+;$g!3lHW}z znU^DhpA^iAK#Lq?XiX7R+Z>L0+yyw1huJ(Ug97r#^Gd^#%uN^}BrRUNVGM<*ic}aR zP3gdRK?lZn>cIHM4oDw}zAxSXlIL60%%pV*Jnb;g6ZA-1GHA(4#}ZvEZB4GqUQ#UV zOcdWhwQl@+w@w3<7f_|e@-OA(6iW$Rg%O_cW{L~%=xbEPbX&mW8did+IqSv_@SEC z?MgrJi`q-J^~oTBnI-3)EPa-4?vGZoUeu*Thm>w~`j+Uyjlzbns_(Vhv4u7&2>-PH zlU>0i7?XcXROlQJW_X(<8-*Bek)F(&kq?Md~zSzX|;V-YijUv*@>9glD@uAc6jo-mU2?jYP)M{kuUoK`A=IwHR!!b2*^ESZRIhXIAJexu-m;A zI|#1*Z~{+{Bm2#q>c3URZ}#e~{DzvD`dGjtoTDoK#;ah35((H$kj{98{|F+Gikx?$ zaN-Z7xrPaw9_+<=Fbcm69IVS}Id~$v)j3=k{Un52E5BFV)h?SpDNCvIks+4Vs*7t< z`}v^NI;ri}Q}FZp`T%Vp@)QJwe&U>4Gj`D0J9u@_7P+q2F~yOG>Cz4;E}P$vmhH23 zPQGh=g!Z^Q2GkF5hY;J^6PvVf(|sW2THRqJG|`8EmEf_qvhGFmoY6EG&HQvz8`&z` zi_yHr*SuU6sRIXWs^-%-T%}Bo1MI{{FtDOnM#Lq&A`qw;uecBF$1}}k#32@)1RMLP z;tyilVr?6kF{OB883gg_Ny604Ye)1h*Bu*PLD*Hy(v_C0mi^iodi_12rHnv=zwu0a zuZ`H`uI^H|tsR`02sxz0RV6l(E>Vr#vbk-pSP0AIc8xt6C-g!&Xm^lR7e%38d51`L zV+C?5f7dd+(|jD4$vb6eY@ggs$h~_`ws4G;pG*wH_ECqlC>u>cx?{TBkwoNe;17DD z26OwefIj@A*@O+;S!vCUoI40d=b2v6?@xzB>R4M^tat@seVs8WqI()TX7YfN4LjF# ztrWRfM^J92NX;3RKD$k6>96L0z(^Cb^_Cjstx$yx{o+! z#idViuLnNdstGvNgkI#J*7N5m!7Bpt$lpjH;1jaQ%>sgzKl7#*XW4bFl)P%)?K@xa zSH$|(rtSd_I8TjXGkMO1>iMcU8**DnA>`krM@fT#+B|sFRn>#XkG$+CXAgss&V}E3 zLN}cY=%91qH+moi>|%}hjMm=I@x@&pFa>#!=Tc&26kaiE7-X3a;glT0p}sO5(t#w) zl7+1_AE8YJ3r+cKdb@)*I6$BfBoZf5$Iq#D@+AMGsR5`^*wW_zo&e<4N&f%}ICq1h zjBzMsHjr)Oql=DQQn?sYMd8BB5$BA%HJ#N%?_`$0Ta|G^9?e`wx4KdwJwq5*94ZSI zf(KcGk065Uj+IH@5@^DsM#4E;S*JM;NL=@8CV|IgRg#lnQse~61nod3mU8VTKs`5s zRLGr_zp_WzvSqO&!_F%{jO>(j<>xF;v?@C()Tvm?H6|pmLQnKHk4y;y8CP(7$B5M< zVY!u4l@U93G}Zt;Q^lljI$f?O9rckbEn$4yB^>lX$8%=(jDwz-zaFR@yC-l%7reAe zcFm|+u#hHi%UrEG%vU5Nv$Fev9Hw&RXJ;ZU*)a&cz;%VwMH{jW$nt$*l_!5l+F798 zFO_5U&45#xx^GOQ5B;f-WQ4BQA8dU0)xb#VT7vq^uq_vh~hBN-K3%Av8mOfyU$iry-lr|+jj zBLbC~a0WB!g-xJCn_9s=XZTD@w>fC0@4+GuuBBfHZ54;{X}pQP26iy^3>x7~0zXnw zX9P!n#qCaZ#W;Oz49qc?h|oAZwX}YY#;%f0R<@p?MSs_oj9p2JmD6qLPyxb!TA`P4W>rU zH3{~Uy}FWi*c6mZ+own2?EtOm#?gjvN-^DFh+fYG7lkSY7Tw2zZ2^9QM-RYIWyc>y z9R7sNp}oO*I0>c~L*Ydj+Kpc{tl1_LLJUF_ioI4_Py}?g+rzLW=p|XPY^fNKjBlx^ zxw>@#FM&8))||CPtDo(N`blH=b%I34Z;OWXYDe&nBl6;ovQN3e@v#9UFCj5Nk5U1p z?=`;vtC6Q~IYovg+vLbZ4UKTmhP1Ih9n-J1vq3LhgoSP*@3X#~z|BERs{j zAt#qqIN)5nj=pf>&*3Oa8lrA@&g&M0cWJ$Cdflr1uIF98d(ZEBMtXEq`?>S-bbr5d zSVzXE^4{X*dvspp&@)b6D06oXXh{y!>6|+oc%u)3Op~V=+&I7pdcRDc3pR$Awfp@6 z1`tQn>TovYgDBDdd&LvTdvTv!w@HzlT@Y`rfSh^#qEvqG;!h6|MBi-~K-w)st#A*q zmXI|*+Lu6Q+0Qs^jxM@?peTeKIzf-JP-=bs@z#Hd^0$}(;9`I#iT~<((R5L{{>1D%7R+d$7G;80*Qpl_A|CczSVifHh%T=azw5)T z6k|Mh0fTN{DVkDZu_%P^)SAXBxx@>n1#tz}0y@$cts%`JVqZaQJ{4^ruWjOl+^ZHv zYlaZk*UJU*GK{8(s7EzXUaM3p#maj5G3p`Ltf-r>Yd_UHyN%=hgIAr`nZF3-4&)h} zw*BC|bn)Ew8#F=}D=@dUqZXF!>!a?Z*=RQ~%zBF?EGoIvX|?xuJ00X1)bBjhl=UR2 zTy1h5^4vQL{|-EZmpDHG z&QFqSsg%lawS=-+nG3f#Vzkhk7CPDEkYK72^w2p5Ze&D2$c8TPMluR8wJE`r=$uC& z;Tf53yQjNmx~2r^VmcjfudZHQU6qF1=TbO1Up+cGTvY?t$G6QU87@x&jPX$+#X-x~ zTH>IUB{*kZ6hsBhH7SlsH1>&u`tjg+ub@~v|KoUqQL9mg&g@gkus#6GW^~AF7`k&r zd+~ucI-hyx80!sKK6>3H&Y1O%2Ej0x5(5$un8YYb_G&kvCP}w;(dQYAZx?8-Q{n(! zk)cr#Fna^w7$<6$6IJ)TQQ)KTzdt(jC+8Z<35vw=9iTh$DWKdLYepp@;|e4g{U;@Y zQUm_9$-`{=5x#5pbPKzHv$QDTBp2nkc^5RjzK7lM&S!w7&m#KwMKJ1@W_{pNN@tVj zT(IR0$D#Pq9}L2w_aVTdknke-5S03XEOQ7WjR3F5K#3#qY=ECH=x@X&S?J}j;ba88 zgYJoEXA}JQMKJVwfN!%>?}IG$Kj8&nO%0a?oz6Y`6~A9xghPJ_d~6BOUKafESLl+c zPl7I$qtBB3d~xA@{8$>zWYP8{ycYG*IgIxiOh5elV(bB;_k!85H1emiSo0cMJ_hau z;Z5KJrlWgdHOV7TD=41PcS(K68m$2uM&iipet?bm%p1~=7m!vO4%Dn*$>JCM!TLwE z!)I{in9$M|l-yO$9a;J<7}qi`v{qq0r^ zGC;z%4U}y|rlHh%8}an%Y8n3966LM!&8OQNWtm^&jte}yWm0QOb?P6-GT|`ne(<3T zeSVE81BmC_BHn-1ed>K`m#LRnbQf^)9NiQnP69>lhq7lDjCBR$$!cX?lpk-eZ)|To zNy5Ore%d_L*G}I9)K7w2Q{dJKTzPwQYrFi^fO{F7BTEb*F)jsMIeIg?gW;NXW%%<5 z=qQ{jV{GeZ5usmiAS-ydNTtjRJ`=DXu)_R!bH(?_2yHKmc=yvJ(&`=k&+1_X!!fR{ zZzC(HdU!A#vjeh-a4KRbU-1uJ2KAj}+6zLubJ$5RDoj)Ntv3h9>uXktt62lzzl7y-9#dp{Us605ZOUqYIemiT~RyKqp2TtjN7SeO1rnx}5pydL+$R zrM?w40eDH`?UP#j_4_Jm56dqW&4fdO>GuI7RpyROeNug4#Lnq%l5qtY+EIPz->M0^5Q7&?Fq#y@2AWozS+> z@~Hx{>7jyaAzA6T)10?0?_|~`DIwhpeQ&(~U3|;?-^M!1d}H^&&GP;I?_2y)60J_> zRlQw5{t2ZsQtV_U-QN=LZ;AJ}#QR&~{VnnSmiSM&C0?Z764(E2ZiyEux5V|Ya7$eK zy0^rCm3tUFwf#uM^i42YUz77_-1v84YvHY7(fta8FYu+|p3A=r|3CJk=<7ZJE$06# z<+b(AIRC$~e*gaSt@J;3zTzLEItl*4IjBm+NJxHZA{mLQ(Bw$-cL8yCJz`OjFF~b} z0T}`Ve}yDyJP9v@p3kDEZN-Y9UnLTwFqwlUNJ|lEpVyr-D}&Zm?X;L8i2N+Mno5CK zk0d7BHeb(#MwWITl%eQ&n&-mnvL8$-Ir51FJ)?M(vuOm~S8RSx@4Y-R<0TEHHoDf* zIb!|Y!Zv)IC*XH{)`;oCba|I>evpB?oS^pWgO+GD_S?W4*MVp!0~>n&9HY&69I@aqTgQ}WaY^;UsSgyY@A)4hY^R|WABIPT*{TO1x7 z9kiijyHSAV>M1pmACGIWK%)rnCM_0$-QGKB?H<++j_P|Q0X=|LMg6Dxaa*)r*A5S{ zQ3O>xgnGlvDyI;rm-;E(#xb?AAm`IZI> zb$1)bt@{6-LOIA6d$pt5D;P`ehADsv-aT#BkFbA@eFW7yec5Usv`^c0@v70-Ya#4b zz4_C@ZoO3%hm96Z&}pk)fJWN20_Fo0m>S5&5uLUUaFTfbF{IMzN&BF2oENVfZ(t&z zr!~^k#f5Af)0kmS8cn(g;bhR1!#(MB9nxWKk7?&Nj@!)|PDiWVJlJj9C85=JquI6w zD~{{04i8?{k9X^s+dx2X4qA0W|622)g=G$orG68%e2T*-gn+*BPYV?bw1VOQE^2!} z9T3j#tA&JhZyiW9fz;ON?rS;wv`fA+1tb3LptmjbCIkKrIkq&0jkrq1NYehIn_@5t zruqUuFt=9>!8SmpY@})`-=Ppl^sW)mSc*E%NLLQ7XCu6+b_XF64^$wFrl?rvkGfDD zZ=>Y!LxJ_F1|cpS>=X1I!C`Pwu6zmfWi*WxNnj4yT-yqVU)9^_p^X%{<9RKWN7_epYfpn3Q@xV1vV-H3 z(>Cde!)B_iJu%~I*4wRvSEv_eX>^%Hfg0DTV>vxOXtnpSQ9bzC2+qcyHTcCZ78nI< zz-jZQNb6YPp&CZEZkR|^O05%9+j6IerTt?vIr;$(rVnKDCgYtwkiJ*VM4wP>IBTA` zX6|D?86%Ct>_KO?#lwi=R({OKo?R9l(D*j6e}K-y;ATa3!u$niGJo0+Drd9)J9~l2 zR>4}r+)9Lkm}#E9!o_o@(R3`c@J$5ml&+_K)WJZ=+ELl4uYY47deu3LW-L;8#egIP z=hbBLDD=A*VRi9p#%iU*QlNyGzs}^rA|O`>jCHvdnoHq90z3HN)v+8s&4p8_-D;oM zrN}@hCvvzfJAEW!x$J7szg(S8uVIn1lWd-xqo65;KqXx^y};t+(x}JA&z}?=TF^8= zSLuMLJVOFJ)1Y8^AQ9QJQAmBG0ntjCbgG+I7NEe#M&yViT)r(Hl+Z#tb2 zj9x)}k4ur4;gMC}`n)!9VEdwjE`!3_Sj}z-Ue@t)$5e#qDDX1g1P-vE8x@F8L8RM1 zJZ-(kGsTOvX8H=|P6X*Av;M#o1-ACQQL!7gR0@hyYj@pUcSiBn9Z`JVRN^C4oSw>) zrt0J{5miTx<%1JV(CE!ujv>h|+~%lUvJXQnhhg8|Jwg9ZOY&Hjg&_fL=W?o0-gq`s zNmbWQEJU+5JF;>hS;2dov45ug?_1h`p$32uTU(FU*4Nh`SJuh?YqN4M|NAEEf7AZ2 z-tWTyp#6Ul!udS@w)P)emGT;-l*^U1^7>}EO!_~S$M^gH-u~lWv*%v3=U%htpQ+jN zZ>u_@PO?*Wz@XF1RSq#!9nY+0y3d z7UoLIJDpd@r)a;77S1N|=-~L(oAouaYqquFBbXUWqHJBC$rcz*r5*9MYlN&r+d8#c zjolyX?L;+f%Acl6#z+1X`Z-+@B^J;K4IFVK%O5}<>V;z+thf?Qk^=C3gb#lea3e@uq)P|`9Cpiv(j!+4L| zjhYe62BVJG>!I|U1*W4?#0fh$ivG2xf33fFMviI5eBcwUQfnHb<9o7%*uz6`V!yz#3j!cU z(wD?dI)(Nt#=&uIZ?D-oZXDOGry-pt+||yD|5sK$lPil<3pfPQX?hL6mDAkQ$pC1T zCsq&v3v$x1FnJ5NeWYp#=v@wu9a29oelyNdf8E?G4Axl!E~^j=nYx+SY|`Y_q<4-jK^n@yV!v{JkHdfN-v7U;{m*)3b1Py0vvu$P=^NYsAVoVk zaqNF|(!G@6UP^E;CAgOo{8^<0|9%E0Usp=-MYoUYO&8jGON@UX{ttH1SAPAuiT_*M ze2jKakFijtQhto@KWmTI*YEki`}d!F&hDPGyXWlgIlIr{?C2y*(=`{&}8%=uJW@)Olkxm;)T)XNViT9jV76reSqYInZqIQyGm#q~z3h^!K|k3K(p;Tq zXp)#2a=V+Dn6WqUhVyKAXhQ3U_1%;S^#^cB+7)m4O7~3D2B+uQUU)ScgkEpXlb%V! zPz=epKXP8}qq?M>ie^?@8*bWcoNT5Wh93f-o({Fh?dYU=aNOSSH0vja7$0?Yg)O>f z6K(tsr`l+6?e1V2-jJWpXdPCiDH0~|SBV1mP;c-?NF zNUPaM24jbnng-q3z(aQd%Az(0higChm@kn9*I5`2%wrHVAt5ZhJR)Pl<($W>*Fdyi zb0aGk(mY1m%wP?CwNr7ca~22{ZZ?PCPy$;jK9~KdQn&f<9sH~KeB^(e>emo@hZ*_5 z&AdU5v$T9z#D+{>gWy7w&c11nOzTwOfVHgWCFRf z*|k+HgT9Rd{Z<2Bx6MnH%QWQA&lvpWyb97R$IyjWyZFfX#`D0+6kB+u>l3RvHt zNCOaP0$8;$!f0e@$j+r@pZtlhR z>&*q7@-Zy$B)waH-|dhrE7Cf{d3JYHZ;0Z~Yo7^nYV)$D-2+)Vtpi*-ZzH{(5ozp2 z%Fk(?bAO5qg5(q}llSEv;kjK}t4( z%fl=h(oF6`pigkLjb&IvnQk~CZ?l*r>!Pw_7I-45+2M1*CI`ff$jvGe2;35yBAyS2dKuNJ;cSWvzCp3O!BJj*mV7Jd$+(5A+i)pwccKRU9at}BHpY5=U}1%s&a@`tCdoj+9SJCMDutt&Ov-vr$cIq zg_%TS=hqX=AEf3>@|BuLI5DTcw6dvra-kA=1?njiV99T~R0q)+y)*mK^oK;swpBdA zbsjffHum2Bki`Yb+9gw%SzNE*-CdvmA&dXcuc^30EO-j#vatHuyp0zLvYM=plu>ds zE(2vRe*TB_^zCeRA@o$hDKKvdj(7wYm_Ge&a5^y^AhyQ12cT9`(h`i~5Al?Az~SzPnSdn!wQLPks=FV>qBD;q3eZUFk^5 zzyXBeT$pw*e2e^0NKXeewN*x~NWM^88FwJCl3u9AGa)qj_?C{sumOw={8`|E7y+YN z#W`C{k8}1lg+)o-MxGN|S#o+1`|Jn4{3eAg>0xVTk)LJFL z%;?D4x$g})HHVHMnZ=Lo=01igb4151Vm64#ky&Bc+cQ{{%BDCDFYz5=LsZtbH#WD| zw#2KWcGip!`r4;HkOzpDr~9pgzt)QtyvqR>@vtWzo{5KV#lzRz50ADVw#37~W(#@{ zmcqVlpB`)I-n>GwVOM0>JP)I!V;H<4>vB(grwhn~QU|i5&~zy;qS+X|dS-1u`&0$) z@ZF2Wt3Zw$aKeB<>~#+Ij~aWegX7)$whn&W_htj@T)Z2S9rTMw7#=e4d&O2T>iQP1 z$IcB@(X)x~eW=dq)#-7(U!T#D)6wvYyK-1-wV^AY+lxaln(7I;UHhNxJ;mhEk&jv% z>h@j9&b|0Mu+bcEe@ivhvbpQb;0>%UjLZM>@8R&)&K3u>%EpA;D2}h}Br-=N z5#*lbfqkx7qW;t7D?&NKrw;ilvrm0%GSo;lhSL|FgJ)j%!)$CLR4~%TV3_G;NW^Qe zjRbEqYkH>R^K1ThT+eNI4=De0vr{m(f?ex0%f z$&fm0k3$U;Ep%jOzGr;-di#qgVyv8!I~3Q@C5^>8jm*mfqf}DDL=L9p{S9tMuh1iE z)soh$S3oiJr+j5pFivC+p(P`oB>>47^uk9L=*KC&63UV(GhkkUtlGGM7$-L;5uUns z44ks$xKPkTvYbIUb?&p)2zPit@y(aem#2o}K66@5=9;JA!(+Ub+F_mn?2OjpOFOr6pLZFhCCvrsdF|E=Tyj#OsN>Q;IVA z#qfcdpd^{q@PiSB{Q@+8UjF?1L;BX03=J+JE)R($9dxsCL3JbjeEQsbjXFK8^~&5p zFTR9YWabi!_%O}3|16Rb8%%QlTMHfE$gyo~FiJXk0}R5Z_{wWjLGyI2uJRVf-j4Hh zubQ8f=$lS$CEwJvX+%%3E@h~e8o3WZHfMQkFh8C45dA8}JG<5py*oOj-| ze?_6aCkB3hT0~VteYA=pzzvWe?SW$kgy{%`H^z5oAjZvTgztz-Si3HQc-_bTG|D&qGl;(t;V@r!@E2*h7iL;Mc9 zi8rYxj_(cq{_XAmg8tf9cmH@3|F>D$d>r%tcyIrAZ~u4C+}$&G_srcrbN89dojl1> zxx2^zk?tQ;jQo$e{gGoOC5EYN2;JCGScx7JMX{osLvoMgZxpEZy{`20hpJJ%*>HGm zY-)nB)}E27s#YCKXsHcus6M{B(A?*wtGa@~zM}?Ay>?U(<$P5tP@5j^>~LKr^>+ZX zY}OL&DhGGKJN*Vle`9g!&>sRW<-UgmXr!RL;lXEKig=}}3Z#^vZiiK$%#f_ zACSZq)PBgNW#qqCBkKWcN`5y0v_MP084AoB&dT?}2>P0fiq9k2l=Ov|*PUl4pHh}T zw!9%id%f8>;SSUch@#8!?8M#u1>>spp9$Lpb-&@PiftS=j+JQ5c^~sMY4`WSf2aH3 z#W%hGtyi|zlJ~#0`}^OwmH!{?uf^Q|sg(OW;{6@*{*HKmNBooC5z}7)Hvd!Zh>Nay z)~#*Py`*{@*6*GL{5RnL20iav`~RzKme;o8{NL8*z5nNX`Tsp{chB41^LGE%yd5g} z(wc^oT$CsFPQ3i}|4T$v8G6B>Qi`Tw-$U_k@52|ec6^ZC)~)lORQmt#bW=pd>x{Vxb~1+jaI1_jiwDReFPdcjVOgB1d#7F6aEH>y7^)_i!5G-rM6^=T*Jk z**`trZ67p_bGT3i(I0j5;+KpNIr_CDC_TS-J@Q`p(|y@i?k|{IrGn&Wg$uK1ue|sN zWjI>Ns+rDl1KMny9`AAOPw@9wlQWT9I_Z&);!v#smLfsWKF1Q77@kWzB(rmI#Er2( z%Hfv`&E*;l?;SQy>c@_`Fr^7;XAYm-^Imn7aK(UDkG90dxPkDsPYQJ3g~2ek&{~$>r|~V;G5$cv@i!Iy_@5% zk`qtu&(Z%lr6)RpP7-aGj*c#&_2#A1^8`q~T`I3WGV~OJ&C6$}uSgrT(j(5rEtDQp zeK2YuI7c&l&QoR={6;(JR`s&xR(efvH?1EP5_74V>I@Wx=o}2+UFkfnKE~dl5KchFP>(ABLXwQ5bt0exWjvq|X zA~&3vHRz4Z?-g%4ozx~1&(bHrq+~5jZPAjM2DBmqZGD)lskGqF#Nx~y?$u7vUx5lL zr+uKYp_M*nwa&qu6Vox^#yix=_t8ur;p4$F@g~=+{4Y9%A@3NYDdETrYw+_TE-G5&QY%w&fpkVw z^GOa*?OB%+6@(#C)zo_P@K|D{1mKde+dxt^H66QK^9})1plp&?yl6MT+E4L^zu90@B8cwE~ zDydovh!Rt}U2lYpw)B*XOguVm?PbZJ`-X;u%Tnw%P7n8v+wkx4aecRKh5nQ}SY0&= zXYa|r-smM3hXo)W>k|PUb^!C`$*+movvFQKe3=Nzc2^A@Sleb=33 z`~BEKoRX-38LFXSIpy+sto;uLK?kKgqw*@zo>#L~H8e!r7)+U%S%N=MolEfFn(Np8 z2)Il(ON&z0BTTHvT^Ho$6rvTI05+2r z@1KbO4b=Y-$NJN#)Suuk>XssZ_5UGV=V#&Dz8a_N16CG$1Xz3gr}GH#nZj}H1OUZe z>J&j))IGEHuh0LfN8;|c|X|NA%8|5Ft9ptmhFCIL0A zl-4B0++1B-Lm%0jkC9>$jZ|duE7CF9kCWMC4A)#%I;x2woE#M1^dm`_@h|mT=1>FB2j=tS^E4d6TN}l*U@A}u7XUGz&VWD4t3w_blL`8wL!Xr*+LA?c)y&J+nyI8}lGpv_`G43FIp|#XLc9G2Y(=e>hkuFk&geJcKSH3#2F5vvOV!#1-oI_*3c&#;+p#UW_V$ z3BRC1MwXTx0a8!`-Qv4?v-zHfM-4@|YNK<20Bb{?mqnqYn@k#bW_BMvQnSO!Clgj~ zVgw76dv2rJMt$z_9CqYgf%Rb618EozaOkGJ4ZFSGrKaTt_~^&>qqEbHto1lx1s@PJ z59Wxt^nw8)zTR;7lp{J^7=gmz+2t$GQb@PX71c-)Hs+Y7S&y!S%K-O(+_0G8^@!+u zqBnHUAnDXOoP3A`k$jy^>RyT_FqZdxd{m|zsX_!8F2jM-F$&IL$M~ax2Zv*XDqz7h z@&|p^9E0tK>q(7JqeeHar;j>yV-_R-%ANoi;neqfC2RTDd1_ljTwe~Rz%K4-9}m3` zq=bf|2NXz*;KqzQeF_T;?dT&}_n!`ONT84xCDY8BwSoc9l-a! z4*C#IV7WCg zLCMFcC`goG$tE7{!dW!9&U0w-9G)^`tD2aRLGh~v|vm-S|SPt=;PPLJxxZQN*QNIW@^^DQ*CZ|g%QsVbhP z7H(Y4XsPqd(|rn!Bi1&zC=vp5HF&t-BBP26RHNbaalfgAt~cnC6J!MlgDO(+@p`-7 zY!QD7;08#ekPC5jc8)R=+8Tr22T-XdEgxFP%CY)5**? zNdy4c5LQ4}qXR&6NNLS<8-U1>Mo2zaLH&YCJ|Bms^2>>Q0*sj^FgiMW53l@5k>bzv zf^(qjC1GhsTi7_jf*mfyNLj9|;T`<(lc(NU7aBRg2!8!A7>>g6ZwK~W3 zH|ps^4W80lCun>i(<{%O*;%g}Z(0Yhj#XC0WF6M`+rp}~X0mFBZDD7vI{=$)D{I37 z2s2{W+H|vIHf3$OSv-%N_1I*c)b={Z2ZtKq6O(m%jH3eLDYKrMtj2D;c4&2@Vok^E z`p?e5D%O0Qo}AR1cAhmMyslQ>I)y}7URlNmi{%xTCMJiS7$+=|t_MeDe^oz@={jE7wc4{~i6-9K#9+I6ew z6E2Eulz3QA6n$kCeM%ac56`LSE7~crJ=Fe}5^vfCdixOhP;E8TD zm4ra?W>U%^W0ylUJug*vmY}NnNUuH{VV)H|d{qXESYu@Z*f$0{wQ1mevFLh)bYq7xdofnDVl)J?!n_*) zaEvY-aDzj>1rZ&*IZ`#{s@lDoLN3@HGDL?=d9)*2DK3|nrM4h`a!5-VrdpQ8P}%$c3Gp>*3J#+GRic*TkmrMEqALwfC|aS&b-7{U zNS2Gs+w#{V{Y&Uyf6>26%iFq6S*KR?uQmN^UH{s!>TK%NE&c1U{`ExvdTQ0V(5VCc z>rnsttN!)d^0qx~$SmTdIgu4*9x;kMqo1^E!aZpqtyxA<0?%buS+?z z55>ymG-PF5*i#0r0&NT+V;TWl{az8mvtSw{knjbFoeKaDMeq!Frw9Nq9MYxestz^@ zEx!xim&n{umBd+anK2bVk+?eGBxj=!qwosDWhWva+O?T!b1P?gU*A*}__tU+DUrLW zB20a}w@~kGiFXAO^$=pz|ri4ik02EF@s8 zU=3&l_=SiB|2$i-(7y(kgk)iNghU_y1d;^j{aIkeO9O(X@+@99kNUt9I1O@&I%ioR zVPZh32wSn*lHE-KfLFvD>myH`QWwJl-B=fx=9H@5V0xQgH`D4y7bvs3vCpu|X??~e zzD?Z)^=}P>v1|?$$#L8SM{@gVOXu}Q!Qe&!>Q0aXK^rC91cNRQDFDLm)VsL{aJ@*W zd*Oe)x$k)SNb5LW(r>Iy*Nl|f%=O-?HeCnifgr~B<^_Z+N80LX{`ocl=Jf-i+^!pV zYe@k>=i5zn`5Kc_o1|O*?drdpSKsUa1e^ae z7^a#?l})(9)vxzD53Gl%&>QkDX{O_PwrsnIb)Yl3)Z=5^wYS zVGdOiFFnW#M#Q1#zmhO_HI*eN-YMrY@ChEuaOdMNqI{A!Nx2iVRuaSz%?ufkVx(xu z9Tdv!h_Xt=3tLAUO`AJt;%1q4T?H+WcH0WGr(Q-|G9rz#pW;P<0PC~#bUxNL`6 z<}52?iAq*8OQ^ycjAlOFix{jGeLi+xYeAD8Q}8wWBR~wW9y*BA$Q^%|w}K|>3F0e> z72VLx5*lx&-J+ns1@S$O*ET64;i{<&TMI{l+MaN&3a$PW@VS&<{_s`F3VgWaw5_{n z@gV$=EsH!iivq3b-(tsEX+1kC3Lx8*noU8QMqb92gJtWf4uwP|aZD!qS8RN0fJ{Rg z2MOJAN44Lc)YYq)242D!R7$cQdmI?(g2Y2B;*w6*i^Qjb#9*dFib7Lj>cVT8WX6fs zy67@UxJ#(0u7Zrcl%%hIXf?yYf8VirKr*k9jO~)XGNzT5JYPzMVrm6s@~S2s1B5yp zND838qyhqtFQsfLwJe@(R2Z=h<%WRPYI85i=_UlyYY{|Z9CSbUQatWiGCG50xFAbr z13S&pQ7WyJ6fsC_Qfat$n@y=r+=9F^eX=npkR|9TB_-e9cp8)`;BGtVV%^$&4jrXG zOVZ}bwmX|Q>uy)zbe@I-Gq{4NNXxlT$@RRLhjq=g)gN$a99t@zp3+IhgjdyI=9Wrn z?=T(3HBX*W<+r(2=CtuwGbZWLp5<+MSTvd7SpAZD@GZuAD}ak(rS!IJdix;ldY2B& z-uw7|Q#(9tziu{8Uy-i#(rx8WOLrGPC6|I2a_Wg9)e>Qg#T1lvN52BFaR4nO7V4D7 z5u~?bXoN!*;G5>~mSh3=U_}#DkAoOCt8|MBa7E5Y?ta4=Np{K_sus0bY1;AC<=G8YV$-GW?dib6y8)vMd^)6$cY_3%`E)ox-x<#D z)+Ik3X7_F|@s6tjEjf_-b0O&iA*Fp^uXp|C`mxUNrTKS}%Ryz$*Zg3Od7DU8O0(y> z*;k*}>?>;a)y>VSNiw7(wJ|Brj`ud5s5rvS9dog>@)X(AS3)b#VUFV5jdeGfE3HAM zhi^j{-X&8uZqIOvl6BM!V*#~sp#tglp}H6mTb;ce(Tzfob4OID9{UsaUbvJtAf}Q_ zLF_wqX4Rn6dfxs)<5u~y4;iS2smLI|}gI6a)0`6J%|OG~IMi+K;A?@KY8{N$V( z!BfhVn(q98)0&D4*7U~H{>7#^Hp5cBf`SUXd5A~QXM`%l6wwoRt2wSCuS(j;?9uYQx;oYdL00elL9Z}_0Ez8DR#$x`qLe^sCVoU zPvI6dhDw0R#Wgb5B-2Ei@($nn9$E_UMq`L;Y3cvC6TxYpC&eL5fHTTE zE1>*8_(*vP7*t%}l8Uv|LzeJLC0n;6veb^F&s&wJ(}^4`VU#gzk$u$QctonwF^iL- zdzL8|8U;=Lk*YHB&tV8qO6o+BYQ2){(&mz98lLjfiqOatl}0XsGNtjtzQde>DQk(? zGs1pqLF{)GzTX?SmCPE<&&LAPSNcTTh<8d0{e3mo(8^fN%pOl7Ov%g}z@m523j=gD z(kf!^Gm(nGs2_@ul~Auj3LgkKYfF7EyIp=ylfa^PcGv(pMfD6}G?@vH+&1&`ww3Y( zf%r6ww42Jl6)DoZL+OVh^lY{KOL^Hiua*ju#HUJg9t$<)jCup9^`$DkVFs@c{4A6o z^h|k;N`wg36$bHFvn^>g8FQeB+ti-4GL+<#)ExbDAZ3?+td~L5fgHCs?mli!KC1w- z0+STOf7$pM6qW)UsCs}6PM~FanT*nErk?j$-4$(GI-GPgB}>G$Gbxb^u-r?JiC^t# z9qq?FD(|gMoSef=v%ZuF+I1wb7BXr>GG zN0B2{+Waeh!w^bs#g#{o`m9m-a2dM`MRXbcyl6da(_c`>UBBH6zx#oZJp1rr7CLYo zPNf|iAmv3kJLgwsa=!{&eAM$MJ=#c-+Bw+17m!@oI4^I`n>?C%ivn~zCV>Na2{g4nes#fuphD> zd*W`!a@cf9Fv@|IJ{N{MmNH!HJ=m4{>L(&DQ7r1GbBQUoAewZdN7z5*8p#`6;R+)g zM&rvqT>CB(4=earl%=JCp%FupVXgtH0UAAw*yIkM)M)VQkZAKN+%}SWJie$C?+pQ= zYH)YArN_$RSg(0*Tzo!XwZ?sXrACU+>C>>~iRsZ|b6NDJ9vQS;&?`&N#yr!RK4} z_H!E^&2sQ~iVD_4UpfzA)2VVDqbz>-Qw1sd_iNVfhU`K?SJ%o3x}6k z(kyz)Op!+35006f*pBh?dV;oY?6W!CV_cAZ5?k{+T0O zAz5NB3(_(78Qu|OIhpYTpdKMA4BXm6pDZ0Xo6{k|mKi=yD~TcOx>loB$$4#?BG`pE z6J>frQ}52W!Fg;QrqbKbHF$_o&uTY!ydg0I8|wz^0kO@@4S903gV$f93NZ;{{<`H}03Hy)fAaPK3V|O~{@G5v7i1c< z-4DK~7;=l>0LxHY2lS^oovLi*9jI%%_Y#GE|2>7wXpQwb*`yAicL%iiP@>>lDQC1) zueQ$>0_co1cCOg{rxH59xU8geBJ~KfH1Vxkk8Y|Zwg2aIBst@}lDcqtSt}&WA?UGT z{wymPMFpMpk+Ohr-#FV}JlSPAM!b#F<<9IzwF?=>qeoYW@^XvBM!#~Ecd-2?uHvTE zcS)?nV$8MVQL1b$M~tP825EziG;K5+4A|`aJ#{$T8pa0Zl)JqjtYq**uU!2dJ0B}PBZR(RtsWV22O%Bt)q^8g^b zHl4r^w9_}cibnf@#*WCWRI!-8asVk^Uy@2qP=!ZxmL@70n_5EH}D| z;K8^Y*iwwwQy3oG@{*{qCpUq{L(Y^g3E|M9AWn)b*{Afaiq*AVoJN1O(*tXxFQ&Z< zP%eSt@;RE?MmiG=s;BGqK-&|r#Ui@1zoWXoo*$4 zx#>ig=0yje=sM+>TI1}&wYm|ss(%9L7v$r6D@1lalBAc#DvbVB|; zPlHkzHH<&%denDMo2`SN>f*FjdsSBouSf(R?HG%HOn??K?hmiOWSEd$lt=z&11%9$ z1fzk9^jo?!5nOqYoqxz^o3vP^*pWtb_lImfyPfs3i@9uVr51xYkC?+I{+{H2M_$;%L0c(o4#f zZ)?C9wFDAgZEd_SkbFuzI)QO<^K8bLD(0f+{uLB!=hd|?PvSM)2UQ`ZOI0O0s^~~) zx{l)_jU`T%@_RcvFb%c%Tsnezq;5V?n^pH@J~`B|Roi5`c6xwvpI?4iuBK%hD@Ug_ zlT7?u6(>ks(N3nbC8Y@x@ufgtN&&5TFo_pxx)pNCWaL{YQZLYv*|ZBpcMygjiXORF zG#=q_*}Ps40|rbSiVIuvT3its>Gu%Dz+s-q<1-HAs#-*plP(sq@s*w>SKceSQaMrrn^Nc^fP_=ck< znu0${(n-{gFn*{gU80D#&xRz#oE_6&ONnSQ&B<=5BzTS_Z+du z|K8<*tieC3S{l8dL8%ezcq)b}Siv7kdc7MqG71juZS3q}g(2myL2sR1bbG4HsE1v% z_k|(@D(~*pKrf;N&PIB>2v3q(xywaMcLyr_6&L5L%>UP!*?+Aivj{oygj{VQ6_-lP zdKo0`(nLFvmpANtPG;r#0+A#Xp7M^aC&z!z!+6xissMoiiw|NYqikQFyrvOOgBI#dg z#JX2sXULbg-y^pn#a{!_zZzEa0PlLZDB03oF-YImV*gEiV}5EP|~4 zqdv7PO^C~rAW{UKMud4WgY&OyY)Eq1hwI-})|A@u+IPS8#KVp6dgQb%+oQNB@QbRU z8%G%?6Oy(z9V^wLfd>#a89=36puk5e8aRrDHNTg|&=QOoB%C|*&aTD7$ovn(bnt%| zQhdS%(4&+mF35mQTw?$Sbf!59uO48Bv+Q1PI=z;*3T!Lz6_c=qRrjydLO5*t`)NU} zmCF_8C3D{ZkN^2^7yt7CpQS zU{OeT5qtk$5)1&lmJJ;?i>~)E~#}70);>>5E|K^#I>yrQQcw z>VLuuz?vE^O9UA7>{tALaS;L!=LLfjpuH^kIUY z$^07kn}gzUQfo?eR7`2{-C@}M;6oV|V){#G?CS;w{EX0gI%b{~TMs9dTs=93vv3RZ zN0+6GEJs1}&t~V+6%xR}AeFQ{d_LeYK)NH#3XPK{jli5ftmw3gNAJAh* zr=l5<6+CswdzB|jREj}P!%$RZjV_fz<(4`pUxOW);u}@>vy2*N^wG++nTN=2&wwR1l<@ zDOLW!CLzoYDHWq_f~T(H_=LJ`hdVrMygE20AI@7FI`O2|YQ1SR_f$GbDo(sfQl@1W!k^`GAbtyDDt z3M--}>A2o*?uxxeo1>3qX%N|reCwo6qM?+$_2YN`xpE?F4LDzvB?w+VFI7OS2f&Pp z>1x%Zt33V>M0{BP-}VfiV0A5$RX^9SkvN{DcsSuVhA?^#VjA(IhuOofm<$^^q5QW8!>=(E-QBm z-uMB4?WJ1#n1BowyW8HZ1-<9sEaT|KY>h9J$0Op~h*KknH{N6_BY;m~Bp6MA;w>{X z2w)^|ga68d0ZK>Ne>#O7_q|E?f~qYO!YxyLTvcgVq1$pvo7ynaYN9pA1GLUh%o6R@ z!~`Kdz4jwB59ntOi#|wcn241YLv{$qq#$$27RF%NZSgQ-Aq=!wwNy>DB-%)kdjZT~ zfC`1OaoP4K*V+vVSFNsO;F%Izt!ZDH4I7aGeu7&s}5# za=Kt6+74J14WrNwK!c=v><>9MWQvo)PbTgK6GP>2(xfvXHi0bqT@;=(0k6h9vDr^9 zX$YvFA4vUYa^BTJN8sbqdXu0PK?T~KY*wF)YO-}YA0-Iq*;?8e2ALEh!{Q^bop+V@ z65%bhQb$OfrU<=HL>wn+f#w1 z_wwIw@dqf%h~t_wO?j;uW0P_(Bfggr-^+;aWyJR~;(HnKx0exLq{@iblQQBm{I?~_ zTicsYw>K*PL>VzcJl__v?yKHY=Tm!3ouqh(fRX30Q3)eSfmC+Pg0ZGxJVD8L`SJGp z#`eaOBn;f?r_DptVXi0GNKLv7qwNfEr`#L~1APERde_G4#piG^^}o;U zHjei@$BmO_<5jcXYW+^%N2l$&`8md4e)^p6!Ukdac#&;FDfQt%P|;v7t+2>7I1)=vW;Z zvtjgAY2z05fmOANb}^a<6?Rh5tCRuR&pn{oWiPqPbD_0w*nh5?B-{+sOPseH^dz4* z5p(1=B7Fsne4?liD~ND>JYY~!%K#&#`#?c^(&H<+RbtOZX#seYe;E_jlU4zv0bjzA z2m6&Ug^)YL03=*eRFFKhV!@xDDj3fCCSxycrFB?wA0>q-2GYgBmS# z7D#;x<_=M-LVJwSE3DV*z3NESEz;@6J=T~Q#N_-7wrWn7eZHfYIsb$Hxvlf1gG(jf zQHzg2(qR|`GSJHQkfnMG`yTgTQIXN-nWYFy$l)0@<~5D1s5N|4atN!AS`pQmcWQdx z7gdVs^!xm3j;7!T`g^;gEXB$?Kn1^$A2;5JhrQgxUS70c*N@fjy@UOI@o>-=yN%Q1 zHl*sOa{;Fnd`b){I%VB|8Mb;{>2$>b!R+!@lAs1BjqOO2LO({(Ub@99&gphP~ zCntjd^8U2?QjM47e^x5xvIQk^q4xY|J8Xn|RLov+hexeZ^PLGUI(zvJ?+(^3l zl<}zp7gwqvRM%uNL)CEyl%|)RNCgB-IK-QCxW244w~nBIL@mZkNkt>8&ohcsg0X%R>qPStkT1Z$ET^r4RRG;GTPM9-U}e9aefY5W5O&wYhnuBJ z{~`Rz7R+e#DK+Kt7!!E@QqyQvNn#Uhbkt;)AVh*}q#;jiXDUaQx7da^@1oo6A?cF- zk~TBBv37U!?RVHsyDMd9-C<%rCGIQrQ7`qnB5zZ7JEP6Tu}>!2SyB<@k>r(UM--Gu zuc33LDEE(Qe}ebFi*NS+CpOCX_U-Eb!JfZ=|NFN3f0_}pRRFET`P>)BnOpsN2wnR@k>{Bd>Ba~!{5?S&}7C2@l0bSaQS z@ONN!BlK*`7KJ0%5I6aHBVL|TG&eFsk@b;}Je#S>Wcq)a1%}di#-4 z8I@He(f}gU6n0#c7lV3PYof@gl2`UL2+}_D@45N^H2yyVJm`O0|4(A`@z!R-|I^yN z{m;Gr-#u4<&(+^^_4i!;=WzA%Bui!KpWHhbl1bj=e4f*xg*t*LGJ0M6sops~K4`V~ zP-dh{&qlD1dyaPB7wZ(xR~`IJ4M8p}otx6ANN=GZQm{B?^_eRNI)VhjBkda8TUS6E zac=1f!Bx_4MA8}YFx>%qH7=qT-wTq-|5R_jY_#g?VZm}_T@V0Fz9&c_{fe-K^i)3n zm`ok;RQw+8yxJJk%ZMA+$mO6TR^fqhUtL_|)dh>;b1{)TbYMgQ;DPLmGkOi?Hw5iV z#bVU^K1f$ed@ksv zF=DSLB*Q*!!S%QWH}JPu#Tg&!m(iN#Xs)yu=O|CAEv(Fd4}shbK-*3f4b&ElgMvmn z42_FJ(FD-gqxkK6WBeH7G?_8+Op&YUi2Y>YZ$bzi;dR zVSNpa3}gNuHaG9@f8X}~r&T}R+jky+RLcDw@&1l@e@DE(BmPP6i2r^L2EOhc@n&8! z!ADjXU4G`3PG|R1O5Ypr|MTSks8LIr;a~9);3oP1S~+h2zfrD~@AV-RJOj)=8Gi;647&egx?M!J>APD7kDW$t(^^HmxuPKNqbTSp@96%B z%=6KFGaM-pa4LCcKxwG)UU)ScgkGAv7BJNC<=IhZUtnF z1MD+)o*rJfUu4<{=Y(Zh%C`!}4l-lRHh|m_k)|jO2&N>mGVc&i1+v^#25D$%CZ-c_ z6!pmqytV{|0&zyR^2e*sDafusW)rwgT^r#nZiL<-?J?|ge^1XX~CHk zvoUoHUr_?=C9kCiberk9oDOT&*$7UGlclAp5pXYfZ%RnoSIF}8xnp&jYATwJ%}!)K zcP@S;f%N?)>|gT!ck!+6e=Prx-~aCIKfbm6|D;~u+kIW%{n32{u#@j^i}$z1``hCE zZSl{1TTFir*!mB=Ehf~y(#%7?`rYkb{{PS9|Dpk$1Yg+z;3ogSn~%$J{g3s^ef;Np z`TspfchAw?b9DC{-Dh!h@+7-0H}_|^=}mS1o2Ko5gAiY7|69to8QbCP`5-*=1{}nX zqRPcw=u>kS5H9dh7kPLEHIUe=o= zp#NAdKP_(ne{q;ubPlY*ZbMIp9$MN?Ct+{aWd~&C($msLfu!I-Z6cqY1!WeWUo(m} zi9OnF|J;E}9chN!QG+|{px!%9VlICJFfGSU{ZkO6IkTd`88PbIKic;X&)^*GX&C?# z=G`d0|3eA#(bLs)rIYNerxg?yvN0kht(;pXCiRwZR8vyYP0t2eAzbRg(<=36qb^DB z;rGe~P^G~&T4qFJ5_|)F%W?c@4C2bi$^=f%!8J4#LPHty#1#(nI=nRom`0iiE9S$o zHpVzPK;e}xHbBInK6vbn&ark5O1{@AVQR0WISbu|EBx;>Fwi7sY6z@wEsN2X>6S=*U7 zMoSEFkV88cwE9{#uRtwdQ3#&-${8)e6 zK^_;7Y2pq2DR9_1+-3w6x(wZ=%6XatVUUsXc?z)%wkaFMTsGC9eyHa>^GeHy$X=_a zPaop4ao3q%5besy%|}_>7)>BXqg^s11n9@%6+IY^=$RO{u}1}wT;kMN53INr-noZX zOE!3a=lc9%BudzjYBN*hk9bUkQ z{Rz793>=TeLw^Xvi<6zQ4s{+o(5mv?Rkl-MBN?Uf0B!7i)*l&80L5c4d%NLigx9;d z-ujYEm3DDEnN+Qa?nqS)iXGMAGPEaFCjM_7^q(L046Y5m$p;+~{LClU`q4o6v>|(Z zERySIIBLV$R6plC7EoeGR1C;NAI@BK>OX?(4x7grQ$blByM^ij9m?)7*BRxkP0&J# zBE4OkGlo!)!?7DUa1M98UJv`x@doE19M~5_14;&%*Ctq6`8rN-``$ z@qo$0lI+r&>q_&JgRDdE1CEEW3%8y&IaD*rNG{J8kvL#51Nn_E@8AxH4mU`rCR-+u zg(i(z(DlS%J<=Q2;qa~mDpvW(W=VMu_HW=_Bgwb65w_d!3ERk!fA)h(G-VjFn`nc| zqv$G9ljtHY3CE#8V`05gT(#b8(s4$+HfNk*C$WXhF0r`1!Ea^xH+IXG+Js($8^_z4>AU5~sW z95Fz9!Y;{i(8+u_)~6kj&0p~`11?YDEP^Am`vHpMdKQbsBwrv_vh#Giu}GhzA&EO+ zLvtsL;ciugD4euz_+T0vkyVc5~rix$14k%F2t>IB9QVoT0^xLs-= z^F3c}TIq$s0#VXCgruDnY%C`0GAc`@atVH}wZ2fBH@J zzc!HVi~E0F+qmcd?)AU!IlFt#?w+%|=j=X*vr{KoDrfifUs#(TL69O0Vy-^~dcmSG zi5l(t;c>lhk$)Znsws^fKsEGTiN>kjZaC?YxGogU{asP1 zY^;miUP-)!ofS>}U_`yhB9#9XNBkxRqdZXK#=3I2jWIQFY#Phvxf5SkU5-MW335^^ zyfI8NMylknW;eLfO;xU2;9l1zPYuXNjTW?#PR%7?adfRatOhcm=Eyr=N$_CtnK22AHQOZOm+Qw9%|3n<5 zw}U%6EVkP1#g@yPjJ;LtjGIio>nHmWgx%>NmK>aqyg|a1GS19Ntyw!tObls+xQ-ZN z6Iws4@1{(sKLDn}u9$S?kgD!E&%cAV{lCe<1JZz`5~+!_lQr?hJ4YwYgX8vor&&Ka ztnJoO6py?Mte(~dgp+(UxOR78!hy2_h%}>d(r!5kyGMIg0$fSy0j6b71TJhx9vgNC zTc*nbV*J|n+eQ{flSii+Ij!)|17e`lg#ngTD2&0*Hp((4#CwFwO z>g^l`J9Vn%zb}96_w!D{lY0F}8ktiztz^Bik07lvJl~PC;TAlsAIpL`QAKN_^3r`Y zEEPM^O*c1_idwS~Za2Rtw5Bn-d|tu`Khm`_`*KEgs#sY0e02%S9nXem%$jioW4ns( z$)tO^s2{Oj1S8a&)t%5Wk?F{l$^oiFPIuD!qibV-q^dP_i}prHC+EDrEiIw@kE!ey ztI|So%AtmbJ=Vu&F!`$6f;#;Dd6FHwFp`Om#V#y}Bb98{1vKs8Ti~FxXmGa#H1UVw z)c+hv$+-p`ojcJQwag^Pu|ncEHv=5l`Sc>*;n~@Oj>^bYx)3Ro*t+?eG`ur3?S0iL zVr}07eZZnsrO?PY*>K4j=k~^HWe|VPnp`^|Gsw?%>VRxO4W{y7T@bF=nPWf)i5RR+fV#5)C5GF=K7(~ZR3gV`dsPtDT!UWOT5dI=c++>GDm=A=Wl214%L*II39|#c+B#2ULG9R znr|^GIABwCUa8irnq9(VdTJ`BpX9?p71y!f+WZ1P; zj-#n#F!f`}_f-R6QZja&@V>Kt6gHjuoQD%OahOPwU!Vd?H^xA6ry&8#Jx-FaKE;Rq z1&4I%xy19Ned<=t7ZlJlx7ZVuJ9)q*4tqFEpvy{c-ilU_1(?C^G=9v^1C~d#dIh*A(TdJ9QXO!=(Jffh?yMH`=_Zg+HjjxFat;x!CB< z*a?_C)^=3!PW|V`$>AJ`S<1{NL8TW*y)>!%W%`dTCcs-uNdLuGkX%7y#haUsf$Gfz z6`PY!w?nXpy%dnN;nI*Sv9-T|;pJWI@`u2Fy<30JQ;fgMNO@roR8>L+69AGiiKnJ6o8*P@0$gER3|)v=>A-;fua1*EF<*Thz6vIN z!G^dIHx&JY6QYB$&~7AqlF-e;8|L2>#?0Y6^-v6fq^faTxdXXdz%Jbu(_9eF`WbZA z#=a@!b6!P-tMLu@+rk~E5x~$9>@ZNW=*pMIpT)PZzOjlO{pW6y9?P7v%$jA^bgozbI9^75IKo9a#8NEW4=1V zFTiD&oGxDC8?g0GOw_l<>Dz4Iv>KnYG2>`@2l4b5v%$0I7CeV3bSoy9WUk+a4Mwr# zAIAk-(El}=;9Cy=EAqhZlzeR#_*U5XSsZWzg%>iwZ$6I!{z7cLE&qGBHTW7h^!Xd% zPRwsFyyM9n!C`utZS7{agdmlqh4oVs@mqqz3oeNOo`S)}ql@qi<80s73sA^iS3)PdhB zBzt;qtfA)s^e`AHz4UDCJty(N739;rC0Y}iEvRR%AfE)LU%AX{ml4ZdA7eh=cm|a|Q*~e@#|X`2{jAA(XB^$R`%{Q|cp|MC0O4+*^-> z<DRW29Tg>PpN-LYGZp&GaNc=XBp)&sX8wX!|;Rf zSjoiFdXhSlWb!hdT%!WbnJ+HlfRpZ=5_zrJR?xbmkJfl56k>e(w#u3}>uRPv@ph~FOd9q4 zkLFw=7n?bPTr4{0P!|eO58qLhM~@5*XQo2rY{jZnwt`gWkV}}Sg0;kIAarQ`QeIXU zP0bic4XyJLdJz4kEWAEy_U<-$UhwV+|H&t3et(vZfAimW3!*~*adtSH5*vl4a=~ck z>%pjwVu!Zv4v|)h?oVOxnbC(I`Tf5~_8WT!BXhi00QwSeiKTMP2iYwb1W)!A#zt1-Wwy}9kQUUD5t#9wo;~dn>z0dQFn~LMv@L%fH%`>gSBPBNbKp|C8U%4{1?)vZbYq|ax90Amx!9mq zd45}b&)~-NLn9aA#Q9s-wCWrwx^20J3)-eDoYgj7NWV(kjB)c@#-{|+ZZG^=t==@^ zz1WC*pEKfEtBm!xCR?q#O{q*t%Nj%#nBQdGG$|Q(4M(TSj!1Er_8Pskq|6W_l6s@S zrzFs&7n$PtAIH*O`P`pU;Vklm@c%5{>9WiqW}!yQzw{>_I{QRNplDf4#mO1%g*P6< zy&6i@M#NL1i+1EMd*KWv5(To@#o`Q)@&|r@3MXp6fDL&gVnpN(T)_35iU*^}C&oj& zSTq+v&Wf5oRnI}Ya0xDaE77vvVV2%1%|=c#NoS;NwSy5_Rso}Z&^T7Z01PRJH0ml_ zwIJjr({TZ_FmTvcYmAGy0r&&h5(?`KmN}nNciMsjYQZj@Ke_XYz%G>~(x*8-$9J8U z`K0S68UG(|aCM`-RSM4xr#tI9YTg-AIs}jTXPHXCI?`79CazinB^66Kgh!96CR4+& zRLw($RY{XonWn1%e{N}Q;ucXJ*kZn)h1+2?6`ZTN$&D0D$CR%_`}SzNbHP%~q?ao*M~0br8CntxOOVu*p7JUnaUiP4;`}dKW2s zuivv%FuZbKy4XGoLk=d6vOLjlp4Kf@dl-m@t}H=i+am-kg^iY7jI@c6%*y^==dbl< zL*%~aPDo3{?!X7=fwBOBQmuMhZ*7oOt+LrQ}cH|^^#hwZ1bI(Sdjwz;Y1M9 z#AL~=#(wRP*{3)oNPx-`4%&?avN?~>%GoIM|6C5+c)+D#lf%3ov|wiKiM7}&T3$K1 zScFh|ZFAE)Ld*_G5oAz#0+QD^PP^6kT65DWG{osmME~l_)QGZaE{cjK7fW-gg*q}7 zM5Gc7)S?n8aP0$Cl7={_n>)9(mx3FkwF|FcZA$k!E(h6J1LB0uy@P* zG@O~#7Qi_3f&r2u%7zJ>0xZ^75#ga%tJnK5BZwt3t^0>-HGF*D*8~FeFw*Fts zTbl|0ubb=l{=dGh|5x_3;`o2nN%sz5@7;vmy9v8@6ZWTd6PE4(cH=+A0qm{rPxpbj z{{#HL%E<2BZ^-{`Y^^8!|8G{$KAIyL-m&p0T@U>^_IFQzzMfHfN_?MUvA` z*NbN_yo%DCUS`$Q$!Omr?P~H>z1==IsyFucFzUAh8Dm|Z`%{vs_Ip4*6b~tZiIwSC zMYF~yTi977kZ-+hwd+R+RYWL#$KoBRg})VqA^bNTLIQ?o`+y~olEVH3d?iCWB%7!0 zT@s7G@~4NG*2ZGF?<0Cf!1|@>uoL;HE)`8nS1lhv^sKC5Fp^nE!DxnFzI4_Fx}xN~ z*YMM>gd^pgJ@4Ai2sJdI`4=e1v~sUejL+F`@h9XyEtjnVLDY-zb*V_T@RuBS?t3gk zLmC&KPcP+&Xu4#|%nb4f2yzh7NF%^Y;KQ&H6UxyznM^LP!V2jxG`5=4ON_Xhqa}=G zK}OYaQ0jmcE|Po?rKQkcKUqOiNslZy2mw``>CdQT=8TH^(Cc|&_&{xRp zClGR4Da5-zU84a>FgdQD&rK_;KSd}af9J&`k&{{2lOpHf&-^ORH2f)***yx50lGo| zB)eg^shj#%F~a8X{}QDm&;Ng8`7i9zpK6D$09dEp-xKcd3HSGe z`+LHl_MVU~0p9u-4ixd#?+ITkLV$M2FP;CVI_r=7p-+ieFz4cdJvIG;zG66m+Q~sD z-eaqCF{TR`F3FQIucg0c%z9OC$^KS9i^r_q#1MW%Nqda{n~ll6|F?|)Rl)2;{IAN! zJ^yzv|Gnqy?)kcVzV4o{`wYHLon-%Z@xQ({TbIsX-904I=S3WfiJ$vl9&;)lqDgX; zC>&PXSqYJ^$36fi#Z8C5HBAG>zca@!?ngCf+rjhfRh}N(-@+1)Agcx)(kU z>xO7bPTV94QC1X;-$0##X8PU`PYzF6BNsVhnNjOFrNVRUHsS}F(U4E(5y!fMO8umw zKW3$RsUA;?&8#sWQjTTW(9$MnjrgAhi`}_M5zf;OKAa)q z%%7q;k6O^7k6*c<&I64CSl2)7TWu7h>9qxt4FhO3@YMouQ8`k2#_QCMTBeLPfXIC>af(}T?H|~} z!Dz(mqGnyRt%F9*jI#QXrVi4^K;l%~T18sltLnxILfpy-LhdHQbn~PkU0~Q5<|!j% zc>`i%DhK$eqD&;zK=rqRlvkrs_7WmyErAtHKn|f4*LS4ay0npSY$l||gmCR8;!c6I z#RQh4?maNYg1&O8Ga2-a=aQ7ojkU*!d9V^*_X9G4IGr-?kg+OJmIKm!hiolKi@u^Q z2bAr1U^$&qBtksevCVL#$pfYA?38WWDCkcw9Qiix$8`OL8INl@XWVSbw@Puik3@R6 z3I9TS5zy=CgY9(7@;!tTg{B2MzzNbDLJ)Eyl7kh`^9az92xdNdly@BQATV+YLB?q1 zk7X|(bJU~g8`edeG$_-n&M6`DJv-lW?-DoqN>=8sxYf~AUfX~K)fi&P`iv831*z^v zBmc_6h~#v$tsoROt~u^%V&|BmD9enmYfzVF^l?kuxzyg>!ctB;m8BVfu;W6v```D1 zL0?(v?!yP(*NA~2PnYm*JKnJjRQB5^oj1*ccD++?HXBXXGLZjfI&Tqvy7$vr*t&o; zZdLEp0v`$JbLgtTJ5JVulX}N+P_iDBlG*4sa&n%}IDM3-yG4-{Ndq=8$0EEOwnUBQ zpF3spW{R8%V%Ca?V~-4m=tBLlCyiI}1kYL{(lcip_MFt4H8g`Jt`jb|^}T9Fqcu+4 z?dJ#?C~CuE(!`D_O(ZX2RCKQgd$0d%-#9N>+>{4taf{`RCT8qSyrHXd{CTP@u1fMxC(VQ7_C93N%_;ka ze5@`{>1@Rl7Y|l^54e=R`SZ#h{)4Qg9Af}-H*SU}UxjZ3M`&^jaD+E$;F9_+sfsM~ zlwM#>CtYbns?y-R9VRtl&V8Uomu?!I_WssJOfx1L08`_pU4+pz7`tgfe=VM*?)i3F zFT5HhQ&ZG$=4t9czsDYH<)rKCnAC0Q-2r%R!=U2 zOaH5#tgBys8rTsqP@`ou8|UzYb*bL8YP&L#jYnm14hj)W?V^q5p16`1f+okK^m|p( zd;u`%)>m9b9?Eb?PXR#yIiTN(YGOwm)qboaO!Qk>$xGD+_zUV_h^$tPmH;}IsEkS} z+>libAIY)m19Fs@k4F)Btki>b~ zo>{jHrFX+oKbQ=S6Yn={@DA4zq<6qkA08@_7XedPDKR+oKO9b_^Y4JUai{1d4?Pm+ z#BooAt_M}{T2?_VAg|X8$fYD;B_tJ4r3GE~3!ql;x9qa6Dr>2E1>DA~8TWyFd#h$~ zu5_)5n*NfW3pwrLu<`P3yPi|aU(%5CxEvM4O(nB?eXzJ_Ui{+=7B6-6RBs(zPg%@Q z=B>JndjWeeXDQK3eHX8|*m4Pl30+@J4D(T``v}IS8-V8KZcXuzPnInZ71Bb}4v@g} z1x~Zrc{UX4Py9K)vsnjn8cvZr$IUHy6h~oYuF{ECXK)lzQ0*kTm`(ARv+}EUwvVos z$^9w&19!?<1+nKM1&B_;pmL`ejl`&W7`3nIN4HnI?VlZpSipq{DJc-0!5a;%Rrae- z8e_2C!buOVE|Y7e|1*p5K2Itz^VMT`Ly=cl85aP~7T&9Hdmc$x5rct|6)U(oNyb{F@pRGwHss?q z?(FeZPeCV~om0eaAfCCS7VlHM6%?Wlf?#f?ASz(BxH;=+upcIb)sS`_5W~~s4I~Tcg;-^vJxl5w3 zcc;z6_hRS|LylpFquADJxoWJKiegfwD`t&VXGvP9>s4nGIatuh&ExLmr=#)i5FKhLC&ZeI-<^sF=;q>tASBsqMuD~_P z==$?~;7z5PF^c-mFlLlyC`AIs**fD$nf%`>c}Ka6}8Fo<+_=TucIedte@BT^`*tBusA zhNTz)gQsy;N3$YT`5yeB!%vllZ&aQ}%~#5Fs{wn-)q+t~*wup3Sh+c;T(_EaaPYx| zRYxH|D)juQI|;_qaN<@X*s3!W zMbVWLiL#nqU4fnO<5}SMakZ~d<(muB99+?j4u~Dzse(uaVN%ZgClh){gM5GjB}2GL zl{k`Bbb%KYI3c1?7X+RK=3*GJU;#CNeVj^~WqhaOt_YSV8#M=Gi-4yb%+NEMptmRW zPUGeO)OXt_jf3Mh>F}>wakSuG22(|y$6x{u)r4h$1>i*>r&pPW*3XmfNUOc~W8Wx_GqrY`E5qc}VfK#?pH9o<$P1M5?|-HqK< zGDUb@ukF<_wkfwj1fMxH?5m{3R$rIqg5!~ENZhOR0nZ0Qh7m7M_xG_+?%+vKFAZB3 zPUBqQ?yA__LdrmIhSoko+8zhkpOPT#GrRb@-9Cve39m+E?b_GV>G(CT(JiMH!8Ysv zds=U`4P1aCC1iJ9B?NcUh{1w$a~kX92`1eV=D~5=@{rTX&siM?hn8+hkQNtlBlSo^ zK5V?{v`*^48Xq1U9hf;7gjdX9bVvGrlh$|1S6?Ff!bs@7_i!UnS@piPk=P> zd)xQuacvUL&M)kPARfd}M<=%qtl0?f#v{C7(SkN;v^ATK!wr$YK zXs;Ne(2HM3Sx%U@j8aKz02e3B&pSd4VdS4Xw0K&8#(W>LEXGLp!90QL0zqA@B}C&L z16vlE&^1B{I%Q;BbP?mD%o*n$I0!Kw__#poHqQc&9M#>C=CSM}h8i6CR{+nEexR%I zDd`o$)iWT8f}UQ&TvY9NSJ~30@0{pOFHkz&Ija5KIjkSQYQKJO`69@zp}-}Iy52}h zoVn?O$UdxWzWcx1@3&W1A7+IMqSOAlok>+q&PH(e#-0?Y>AVyZtgK{~#L6BJStC>R zMxwdDE7rH43Y{k9OAB@q@>q&Bf}fO}4bV2ih&m ztIOtrlsC$|@_Sdl0I>E^l5I;9Nn3#&-Sk=9xQqg`ABqF^(Ib}`22YXJ-9dKQONpEn zMyq0k?^v{M9tD4QUFJwkAR+u@(!H4E?>AEzmGl06a?fc1BO5|W1q0E34)5fSb&(Gc5R#A&&Zev5WBPfi3eN^+V$!C1e*{h83VEmn)Riz#@)%mastS7IBZ1n-tASB{`uqH61yn z$p>vc*HTSD`@vzzaTblZEcP0s6>I4E-hIM$`z+m-7=15#8%7-!HeqPub%y+GQRo=p zcc;OCNdjtFl-K~lQt`qtFp!b6j8u(Nxk6@XNu<9q^BcGosGUFXcW2Vwsh9`r@szyL z!9P0yQoT)|lg5!cIk9iRQ}~l%Fe04<;`(*Bc_z@w6FZ;Mw1dB&NncjPg32CLZ5LSR z`U%=+-%n{OV+%bMNr+Z3Z`(l;z$GnE3sod>b{D^lFs0cfa^NZ91 zcF%G??r;qIg9RkJLIh0DvP3(he})2{@5OH8c)#;gz4@}y(l40(@oXC9vd=^oz39MY zVj>63w|DJSjAlDtgzM7gwlXZ8MTtR(#acICJHn)|X1(1ypm#j2h;5SSEl$n0l}wKH z@S4uZP4*CswlUp^Y|$GGf$ZjU@gCS={D31_S&^wqJ0go0j;#2df3)b=tH#OedXs+c zL#C|r2Kin1-c~TUDeS{L=nwE5&t$QV=WC;W+7zbDq=9m>v*xLIY%h9EthfRo0-fEES*QFHj*o8Y)$fXYKP6Eg4sNI{qoBj=fs;tzQi)x0?c`;%fgtlN%a|d8RM;UhQb?V#qsgF z0GD09F(Olld^xFoGZ=ZFqw5?V@^m?ZH6$s~6vhV)yFQfM< zyqu7d2Uiua=L0^_nJA(1&RONHYhFiC8JASzgQU#nJrm4CLBH&Ntq~k97Z5H@A+u?AC7NX3;W%R3< zhiYm8`I-}`Z2`;H>kV)N&>|vI27Xk~!Z0+H(6bFY9nlX@CVHVPz_m_rxxux%pOO{< zo}1)rP$>t=Zp-swhe}D#QBGUj!5&~RmyQV(4Xugm1EME9!{E}&u8HSqJK*8g2BJAj z;ee3h$LjmLZV1A#0+VA)E+?%x^gl4~XI>92ox;h`o0753fYb%26Snm}o51zMpGa4` z9ckFt5zEqWdfC!>g$QUOP>D)v6a}B64-e-hW(PA%h1k;&0I!7 zY|aCX%M@kxd6do)&xhZxA0F4+i~7z+f@&@_b|*pY9qb|?sjkYO`C?@rT+Y7{>fv7P z#DYqn3!rkofjWQEvhK?R@%g{+Fr$CmIB7Q8j-f-!bwEB{vIU<=DF8Fu+|65tHp|;2 zY+P|(PYnw47JC*yIJp>!@7Era{2qTqspq8oHmd{&{2-Rk$Gj68y?4cf7H}0tmQ*M_o2x;`1%c=&qMK-Tj*X?Xl!uQGD)ep=-9g(f; zVHFlhQ4Vjq&9-NB+_P@!na>wMKH^d-i>4~H;)W)CntM^SU$*Bif11I}JRGpg-W3sa z-GZI)N1%j(duzNfRcz!S_H+@7*dw?tp6Gd)k1S~U2QB~6I76Uz_%tLb5Q(FA=n$-C z)VgWDbVqPOiEa<(A)L(~AM_=Yf8|Bw&_^?(^a^H{St+V>X@7JXOv2F+_(V0U%CkRk zT)<`dBa-W5%z?w}(MQV{(6*LWQNu7*@Ti=DSQ#(oM$`gg#>qM-hDlk z7D_njqaBA*)9!xcR24;GLykQj8TJTs3%rt}f>R|Qch%39Gd%bD$qNzoLHyyzQRr}= z*3jEN&YhexjvYbM6;}Y^wdVQ4JLthw(;(a}KAFcT{~_Ef_W?Y_mo)mJ-@O5yWFq5M z)hho{K8GKp1M{<4FzAVA$h|do8;8#&2H_Rnki2NtMKL-aWKyt!9pIIgJ)q7DZurq7 zbUGi-#$$h?@*h3I*P~C=uzVtwO(7`BZDM7ZA+vQ@thD4j0PWRZp1#`V-tlX-MT1RP zm4^|DiuDW_0n`%N@=FUAC3xV1+v?f>quR-KeR`?G1ms_7Ceff>KU;CIi)>a)2J{;{ zX;9M4E3+p;Dd&mZev-{N*H)^n2#Y3b*}P+o#^ucF*gKE&RG+UCPxa?3oXR z8yZsD?IdS9`@40Y0m`tmGdELM+`}6(qdlMbk!;NG2Os^2rxG_43zgW~c8Yp3a;ZEe z$Gp<3t^|l)FM*;6Rf%p;O@uKGj!R{_rIgnmq#jcfpWa}lD2Cr&hn}(=dKjUAMd>bu zDQ~Dqsi^p?4Y6{I5)9FK%ES`e;IS-|Kz$kNBa)&% zdw~^tq!N!{y;@Req##q|@X#k+E6gRKJP>|{#-?|q%Z@Cz@XqioU{#D@I-`ehqSUP1 zgKnEpnoja)Y?Yy8QJys%PqVBQge??UeX*}F(;Ivs`FbcPVHI7a

1JPD=YjN!!om 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 z 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 literal 0 HcmV?d00001 diff --git a/curl-ssl.spec b/curl-ssl.spec new file mode 100644 index 000000000..1d69342d3 --- /dev/null +++ b/curl-ssl.spec @@ -0,0 +1,52 @@ +%define name curl-ssl +%define tarball curl +%define version 6.0 +%define release 1 +%define prefix /usr/local + +%define builddir $RPM_BUILD_DIR/%{tarball}-%{version} + +Summary: get a file from a FTP, GOPHER or HTTP server. +Name: %{name} +Version: %{version} +Release: %{release} +Copyright: MPL +Vendor: Daniel Stenberg +Packager: Troy Engel +Group: Utilities/Console +Source: %{tarball}-%{version}.tar.gz +URL: http://curl.haxx.nu/ +BuildRoot: /tmp/%{tarball}-%{version}-root + +%description +curl is a client to get documents/files from servers, using any of the +supported protocols. The command is designed to work without user +interaction or any kind of interactivity. + +curl offers a busload of useful tricks like proxy support, user +authentication, ftp upload, HTTP post, file transfer resume and more. + +Note: this version is compiled with SSL (https:) support. + +%prep +rm -rf $RPM_BUILD_ROOT +rm -rf %{builddir} + +%setup -n %{tarball}-%{version} + +%build +CFLAGS=$RPM_OPT_FLAGS ./configure --prefix=$RPM_BUILD_ROOT%{prefix} --with-ssl +make CFLAGS="-DUSE_SSLEAY -I/usr/include/openssl" + +%install +make install-strip + +%clean +rm -rf $RPM_BUILD_ROOT +rm -rf %{builddir} + +%files +%defattr(-,root,root) +%attr(0755,root,root) %{prefix}/bin/curl +%doc curl.1 README* CHANGES CONTRIBUTE FAQ FILES INSTALL LEGAL MPL-1.0.txt RESOURCES TODO perl/ + diff --git a/curl.1 b/curl.1 new file mode 100644 index 000000000..f93bc0ea0 --- /dev/null +++ b/curl.1 @@ -0,0 +1,402 @@ +.\" You can view this file with: +.\" nroff -man curl.1 +.\" Written by Daniel Stenberg +.\" +.TH curl 1 "8 November 1999" "Curl 6.3" "Curl Manual" +.SH NAME +curl \- get a URL with FTP, TELNET, LDAP, GOPHER, DICT, FILE, HTTP or +HTTPS syntax. +.SH SYNOPSIS +.B curl [options] +.I url +.SH DESCRIPTION +.B curl +is a client to get documents/files from servers, using any of the +supported protocols. The command is designed to work without user +interaction or any kind of interactivity. + +curl offers a busload of useful tricks like proxy support, user +authentication, ftp upload, HTTP post, SSL (https:) connections, cookies, file +transfer resume and more. +.SH URL +The URL syntax is protocol dependent. You'll find a detailed description in +RFC 2396. + +You can specify multiple URLs or parts of URLs by writing part sets within +braces as in: + + http://site.{one,two,three}.com + +or you can get sequences of alphanumeric series by using [] as in: + + ftp://ftp.numericals.com/file[1-100].txt + ftp://ftp.numericals.com/file[001-100].txt (with leading zeros) + ftp://ftp.letters.com/file[a-z].txt + +It is possible to specify up to 9 sets or series for a URL, but no nesting is +supported at the moment: + + http://www.any.org/archive[1996-1999]/volume[1-4]part{a,b,c,index}.html +.SH OPTIONS +.IP "-a/--append" +(FTP) +When used in a ftp upload, this will tell curl to append to the target +file instead of overwriting it. If the file doesn't exist, it will +be created. +.IP "-A/--user-agent " +(HTTP) +Specify the User-Agent string to send to the HTTP server. Some badly done CGIs +fail if its not set to "Mozilla/4.0". To encode blanks in the string, +surround the string with single quote marks. This can also be set with the +-H/--header flag of course. +.IP "-b/--cookie " +(HTTP) +Pass the data to the HTTP server as a cookie. It is supposedly the +data previously received from the server in a "Set-Cookie:" line. +The data should be in the format "NAME1=VALUE1; NAME2=VALUE2". + +If no '=' letter is used in the line, it is treated as a filename to use to +read previously stored cookie lines from, which should be used in this session +if they match. Using this method also activates the "cookie parser" which +will make curl record incoming cookies too, which may be handy if you're using +this in combination with the -L/--location option. The file format of the file +to read cookies from should be plain HTTP headers or the netscape cookie file +format. +.IP "-B/--ftp-ascii" +(FTP/LDAP) +Use ASCII transfer when getting an FTP file or LDAP info. For FTP, this can +also be enforced by using an URL that ends with ";type=A". +.IP "-c/--continue" +Continue/Resume a previous file transfer. This instructs curl to +continue appending data on the file where it was previously left, +possibly because of a broken connection to the server. There must be +a named physical file to append to for this to work. +Note: Upload resume is depening on a command named SIZE not always +present in all ftp servers! Upload resume is for FTP only. +HTTP resume is only possible with HTTP/1.1 or later servers. +.IP "-C/--continue-at " +Continue/Resume a previous file transfer at the given offset. The +given offset is the exact number of bytes that will be skipped +counted from the beginning of the source file before it is transfered +to the destination. +If used with uploads, the ftp server command SIZE will not be used by +curl. Upload resume is for FTP only. +HTTP resume is only possible with HTTP/1.1 or later servers. +.IP "-d/--data " +(HTTP) +Sends the specified data in a POST request to the HTTP server. Note +that the data is sent exactly as specified with no extra processing. +The data is expected to be "url-encoded". This will cause curl to +pass the data to the server using the content-type +application/x-www-form-urlencoded. Compare to -F. + +If you start the data with the letter @, the rest should be a file name to +read the data from, or - if you want curl to read the data from stdin. +The contents of the file must already be url-encoded. +.IP "-D/--dump-header " +(HTTP/FTP) +Write the HTTP headers to this file. Write the FTP file info to this +file if -I/--head is used. +.IP "-e/--referer " +(HTTP) +Sends the "Referer Page" information to the HTTP server. Some badly +done CGIs fail if it's not set. This can also be set with the -H/--header +flag of course. +.IP "-E/--cert " +(HTTPS) +Tells curl to use the specified certificate file when getting a file +with HTTPS. The certificate must be in PEM format. +If the optional password isn't specified, it will be queried for on +the terminal. Note that this certificate is the private key and the private +certificate concatenated! +.IP "-f/--fail" +(HTTP) +Fail silently (no output at all) on server errors. This is mostly done +like this to better enable scripts etc to better deal with failed +attempts. In normal cases when a HTTP server fails to deliver a +document, it returns a HTML document stating so (which often also +describes why and more). This flag will prevent curl from +outputting that and fail silently instead. +.IP "-F/--form " +(HTTP) +This lets curl emulate a filled in form in which a user has pressed +the submit button. This causes curl to POST data using the +content-type multipart/form-data according to RFC1867. This enables +uploading of binary files etc. To force the 'content' part to be +read from a file, prefix the file name with an @ sign. Example, to +send your password file to the server, where 'password' is the +name of the form-field to which /etc/passwd will be the input: + +.B curl +-F password=@/etc/passwd www.mypasswords.com + +To read the file's content from stdin insted of a file, use - where the file +name should've been. +.IP "-h/--help" +Usage help. +.IP "-H/--header

" +(HTTP) +Extra header to use when getting a web page. You may specify any number of +extra headers. Note that if you should add a custom header that has the same +name as one of the internal ones curl would use, your externally set header +will be used instead of the internal one. This allows you to make even +trickier stuff than curl would normally do. You should not replace internally +set headers without knowing perfectly well what you're doing. +.IP "-i/--include" +(HTTP) +Include the HTTP-header in the output. The HTTP-header includes things +like server-name, date of the document, HTTP-version and more... +.IP "-I/--head" +(HTTP/FTP) +Fetch the HTTP-header only! HTTP-servers feature the command HEAD +which this uses to get nothing but the header of a document. When used +on a FTP file, curl displays the file size only. +.IP "-K/--config " +Specify which config file to read curl arguments from. The config +file is a text file in which command line arguments can be written +which then will be used as if they were written on the actual command +line. If the first column of a config line is a '#' character, the +rest of the line will be treated as a comment. + +Specify the filename as '-' to make curl read the file from stdin. +.IP "-l/--list-only" +(FTP) +When listing an FTP directory, this switch forces a name-only view. +Especially useful if you want to machine-parse the contents of an FTP +directory since the normal directory view doesn't use a standard look +or format. +.IP "-L/--location" +(HTTP/HTTPS) +If the server reports that the requested page has a different location +(indicated with the header line Location:) this flag will let curl +attempt to reattempt the get on the new place. If used together with +-i or -I, headers from all requested pages will be shown. +.IP "-m/--max-time " +Maximum time in seconds that you allow the whole operation to take. +This is useful for preventing your batch jobs from hanging for hours +due to slow networks or links going down. +This doesn't work properly in win32 systems. +.IP "-M/--manual" +Manual. Display the huge help text. +.IP "-n/--netrc" +Makes curl scan the +.I .netrc +file in the user's home directory for login name and password. This is +typically used for ftp on unix. If used with http, curl will enable user +authentication. See +.BR netrc(4) +for details on the file format. Curl will not complain if that file +hasn't the right permissions (it should not be world nor group +readable). The environment variable "HOME" is used to find the home +directory. + +A quick and very simple example of how to setup a +.I .netrc +to allow curl to ftp to the machine host.domain.com with user name +'myself' and password 'secret' should look similar to: + +.B "machine host.domain.com user myself password secret" +.IP "-o/--output " +Write output to instead of stdout. If you are using {} or [] to fetch +multiple documents, you can use # in the specifier. That variable +will be replaced with the current string for the URL being fetched. Like in: + + curl http://{one,two}.site.com -o "file_#1.txt" + +or use several variables like: + + curl http://{site,host}.host[1-5].com -o "#1_#2" +.IP "-O/--remote-name" +Write output to a local file named like the remote file we get. (Only +the file part of the remote file is used, the path is cut off.) +.IP "-P/--ftpport
" +(FTP) +Reverses the initiator/listenor roles when connecting with ftp. This +switch makes Curl use the PORT command instead of PASV. In +practice, PORT tells the server to connect to the client's specified +address and port, while PASV asks the server for an ip address and +port to connect to.
should be one of: + interface - i.e "eth0" to specify which interface's IP address you want to use (Unix only) + IP address - i.e "192.168.10.1" to specify exact IP number + host name - i.e "my.host.domain" to specify machine + "-" - (any single-letter string) to make it pick the machine's default +.IP "-q" +If used as the first parameter on the command line, the +.I $HOME/.curlrc +file will not be read and used as a config file. +.IP "-Q/--quote " +(FTP) Send an arbitrary command to the remote FTP server, by using the QUOTE +command of the server. Not all servers support this command, and the set of +QUOTE commands are server specific! +.IP "-r/--range " +(HTTP/FTP) +Retrieve a byte range (i.e a partial document) from a HTTP/1.1 or FTP +server. Ranges can be specified in a number of ways. + 0-499 - specifies the first 500 bytes + 500-999 - specifies the second 500 bytes + -500 - specifies the last 500 bytes + 9500- - specifies the bytes from offset 9500 and forward + 0-0,-1 - specifies the first and last byte only(*)(H) + 500-700,600-799 - specifies 300 bytes from offset 500(H) + 100-199,500-599 - specifies two separate 100 bytes ranges(*)(H) + +(*) = NOTE that this will cause the server to reply with a multipart +response! + +You should also be aware that many HTTP/1.1 servers do not have this feature +enabled, so that when you attempt to get a range, you'll instead get the whole +document. + +FTP range downloads only support the simple syntax 'start-stop' (optionally +with one of the numbers omitted). It depends on the non-RFC command SIZE. +.IP "-s/--silent" +Silent mode. Don't show progress meter or error messages. Makes +Curl mute. +.IP "-S/--show-error" +When used with -s it makes curl show error message if it fails. +.IP "-t/--upload" +Transfer the stdin data to the specified file. Curl will read +everything from stdin until EOF and store with the supplied name. If +this is used on a http(s) server, the PUT command will be used. +.IP "-T/--upload-file " +Like -t, but this transfers the specified local file. If there is no +file part in the specified URL, Curl will append the local file +name. NOTE that you must use a trailing / on the last directory to +really prove to Curl that there is no file name or curl will +think that your last directory name is the remote file name to +use. That will most likely cause the upload operation to fail. If +this is used on a http(s) server, the PUT command will be used. +.IP "-u/--user " +Specify user and password to use when fetching. See README.curl for detailed +examples of how to use this. If no password is specified, curl will +ask for it interactively. +.IP "-U/--proxy-user " +Specify user and password to use for Proxy authentication. If no +password is specified, curl will ask for it interactively. +.IP "-v/--verbose" +Makes the fetching more verbose/talkative. Mostly usable for +debugging. Lines starting with '>' means data sent by curl, '<' +means data received by curl that is hidden in normal cases and lines +starting with '*' means additional info provided by curl. +.IP "-V/--version" +Displays the full version of curl, libcurl and other 3rd party libraries +linked with the executable. +.IP "-x/--proxy " +Use specified proxy. If the port number is not specified, it is assumed at +port 1080. +.IP "-X/--request " +(HTTP) +Specifies a custom request to use when communicating with the HTTP server. +The specified request will be used instead of the standard GET. Read the +HTTP 1.1 specification for details and explanations. + +(FTP) +Specifies a custom FTP command to use instead of LIST when doing file lists +with ftp. +.IP "-y/--speed-time " +Speed Limit. If a download is slower than this given speed, in bytes +per second, for Speed Time seconds it gets aborted. Speed Time is set +with -Y and is 30 if not set. +.IP "-Y/--speed-limit d3c!)lX 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 P+rRw%+`JOFldAp;WK5oY literal 0 HcmV?d00001 diff --git a/lib/formdata.c b/lib/formdata.c new file mode 100644 index 000000000..eff0212e4 --- /dev/null +++ b/lib/formdata.c @@ -0,0 +1,617 @@ +/***************************************************************************** + * _ _ ____ _ + * Project ___| | | | _ \| | + * / __| | | | |_) | | + * | (__| |_| | _ <| |___ + * \___|\___/|_| \_\_____| + * + * The contents of this file are subject to the Mozilla Public License + * Version 1.0 (the "License"); you may not use this file except in + * compliance with the License. You may obtain a copy of the License at + * http://www.mozilla.org/MPL/ + * + * Software distributed under the License is distributed on an "AS IS" + * basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See the + * License for the specific language governing rights and limitations + * under the License. + * + * The Original Code is Curl. + * + * The Initial Developer of the Original Code is Daniel Stenberg. + * + * Portions created by the Initial Developer are Copyright (C) 1998. + * All Rights Reserved. + * + * ------------------------------------------------------------ + * Main author: + * - Daniel Stenberg + * + * http://curl.haxx.nu + * + * $Source$ + * $Revision$ + * $Date$ + * $Author$ + * $State$ + * $Locker$ + * + * ------------------------------------------------------------ + ****************************************************************************/ + +/* + Debug the form generator stand-alone by compiling this source file with: + + gcc -DHAVE_CONFIG_H -I../ -g -D_FORM_DEBUG -o formdata -I../include formdata.c + + run the 'formdata' executable and make sure the output is ok! + + try './formdata "name=Daniel" "poo=noo" "foo=bar"' and similarly + + */ + +#include +#include +#include +#include + +#include + +#include "setup.h" +#include +#include "formdata.h" + +/* Length of the random boundary string. The risk of this being used + in binary data is very close to zero, 64^32 makes + 6277101735386680763835789423207666416102355444464034512896 + combinations... */ +#define BOUNDARY_LENGTH 32 + +/* What kind of Content-Type to use on un-specified files with unrecognized + extensions. */ +#define HTTPPOST_CONTENTTYPE_DEFAULT "text/plain" + +/* This is a silly duplicate of the function in main.c to enable this source + to compile stand-alone for better debugging */ +static void GetStr(char **string, + char *value) +{ + if(*string) + free(*string); + *string = strdup(value); +} + +/*************************************************************************** + * + * FormParse() + * + * Reads a 'name=value' paramter and builds the appropriate linked list. + * + * Specify files to upload with 'name=@filename'. Supports specified + * given Content-Type of the files. Such as ';type='. + * + * You may specify more than one file for a single name (field). Specify + * multiple files by writing it like: + * + * 'name=@filename,filename2,filename3' + * + * If you want content-types specified for each too, write them like: + * + * 'name=@filename;type=image/gif,filename2,filename3' + * + ***************************************************************************/ + +int curl_FormParse(char *input, + struct HttpPost **httppost, + struct HttpPost **last_post) +{ + return FormParse(input, httppost, last_post); +} + +#define FORM_FILE_SEPARATOR ',' +#define FORM_TYPE_SEPARATOR ';' + +int FormParse(char *input, + struct HttpPost **httppost, + struct HttpPost **last_post) +{ + /* nextarg MUST be a string in the format 'name=contents' and we'll + build a linked list with the info */ + char name[256]; + char contents[1024]=""; + char major[128]; + char minor[128]; + long flags = 0; + char *contp; + char *type = NULL; + char *prevtype = NULL; + char *sep; + char *sep2; + struct HttpPost *post; + struct HttpPost *subpost; /* a sub-node */ + unsigned int i; + + if(1 <= sscanf(input, "%255[^ =] = %1023[^\n]", name, contents)) { + /* the input was using the correct format */ + contp = contents; + + if('@' == contp[0]) { + /* we use the @-letter to indicate file name(s) */ + + flags = HTTPPOST_FILENAME; + contp++; + + post=NULL; + + do { + /* since this was a file, it may have a content-type specifier + at the end too */ + + sep=strchr(contp, FORM_TYPE_SEPARATOR); + sep2=strchr(contp, FORM_FILE_SEPARATOR); + + /* pick the closest */ + if(sep2 && (sep2 < sep)) { + sep = sep2; + + /* no type was specified! */ + } + if(sep) { + + /* if we got here on a comma, don't do much */ + if(FORM_FILE_SEPARATOR != *sep) + type = strstr(sep+1, "type="); + else + type=NULL; + + *sep=0; /* terminate file name at separator */ + + if(type) { + type += strlen("type="); + + if(2 != sscanf(type, "%127[^/]/%127[^,\n]", + major, minor)) { + fprintf(stderr, "Illegally formatted content-type field!\n"); + return 2; /* illegal content-type syntax! */ + } + /* now point beyond the content-type specifier */ + sep = type + strlen(major)+strlen(minor)+1; + + /* find the following comma */ + sep=strchr(sep, FORM_FILE_SEPARATOR); + } + } + else { + type=NULL; + sep=strchr(contp, FORM_FILE_SEPARATOR); + } + if(sep) { + /* the next file name starts here */ + *sep =0; + sep++; + } + if(!type) { + /* + * No type was specified, we scan through a few well-known + * extensions and pick the first we match! + */ + struct ContentType { + char *extension; + char *type; + }; + static struct ContentType ctts[]={ + {".gif", "image/gif"}, + {".jpg", "image/jpeg"}, + {".jpeg", "image/jpeg"}, + {".txt", "text/plain"}, + {".html", "text/plain"} + }; + + if(prevtype) + /* default to the previously set/used! */ + type = prevtype; + else + /* It seems RFC1867 defines no Content-Type to default to + text/plain so we don't actually need to set this: */ + type = HTTPPOST_CONTENTTYPE_DEFAULT; + + for(i=0; i= strlen(ctts[i].extension)) { + if(strequal(contp + + strlen(contp) - strlen(ctts[i].extension), + ctts[i].extension)) { + type = ctts[i].type; + break; + } + } + } + /* we have a type by now */ + } + + if(NULL == post) { + /* For the first file name, we allocate and initiate the main list + node */ + + post = (struct HttpPost *)malloc(sizeof(struct HttpPost)); + if(post) { + memset(post, 0, sizeof(struct HttpPost)); + GetStr(&post->name, name); /* get the name */ + GetStr(&post->contents, contp); /* get the contents */ + post->flags = flags; + if(type) { + GetStr(&post->contenttype, type); /* get type */ + prevtype=post->contenttype; /* point to the allocated string! */ + } + /* make the previous point to this */ + if(*last_post) + (*last_post)->next = post; + else + (*httppost) = post; + + (*last_post) = post; + } + + } + else { + /* we add a file name to the previously allocated node, known as + 'post' now */ + subpost =(struct HttpPost *)malloc(sizeof(struct HttpPost)); + if(subpost) { + memset(subpost, 0, sizeof(struct HttpPost)); + GetStr(&subpost->name, name); /* get the name */ + GetStr(&subpost->contents, contp); /* get the contents */ + subpost->flags = flags; + if(type) { + GetStr(&subpost->contenttype, type); /* get type */ + prevtype=subpost->contenttype; /* point to the allocated string! */ + } + /* now, point our 'more' to the original 'more' */ + subpost->more = post->more; + + /* then move the original 'more' to point to ourselves */ + post->more = subpost; + } + } + contp = sep; /* move the contents pointer to after the separator */ + } while(sep && *sep); /* loop if there's another file name */ + } + else { + post = (struct HttpPost *)malloc(sizeof(struct HttpPost)); + if(post) { + memset(post, 0, sizeof(struct HttpPost)); + GetStr(&post->name, name); /* get the name */ + GetStr(&post->contents, contp); /* get the contents */ + post->flags = 0; + + /* make the previous point to this */ + if(*last_post) + (*last_post)->next = post; + else + (*httppost) = post; + + (*last_post) = post; + } + + } + + } + else { + fprintf(stderr, "Illegally formatted input field!\n"); + return 1; + } + return 0; +} + +static int AddFormData(struct FormData **formp, + void *line, + long length) +{ + struct FormData *newform = (struct FormData *) + malloc(sizeof(struct FormData)); + newform->next = NULL; + + /* we make it easier for plain strings: */ + if(!length) + length = strlen((char *)line); + + newform->line = (char *)malloc(length+1); + memcpy(newform->line, line, length+1); + newform->length = length; + + if(*formp) { + (*formp)->next = newform; + *formp = newform; + } + else + *formp = newform; + + return length; +} + + +static int AddFormDataf(struct FormData **formp, + char *fmt, ...) +{ + char s[1024]; + va_list ap; + va_start(ap, fmt); + vsprintf(s, fmt, ap); + va_end(ap); + + return AddFormData(formp, s, 0); +} + + +char *MakeFormBoundary(void) +{ + char *retstring; + static int randomizer=0; /* this is just so that two boundaries within + the same form won't be identical */ + int i; + + static char table64[]= + "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/"; + + retstring = (char *)malloc(BOUNDARY_LENGTH); + + if(!retstring) + return NULL; /* failed */ + + srand(time(NULL)+randomizer++); /* seed */ + + strcpy(retstring, "curl"); /* bonus commercials 8*) */ + + for(i=4; i<(BOUNDARY_LENGTH-1); i++) { + retstring[i] = table64[rand()%64]; + } + retstring[BOUNDARY_LENGTH-1]=0; /* zero terminate */ + + return retstring; +} + + +void FormFree(struct FormData *form) +{ + struct FormData *next; + do { + next=form->next; /* the following form line */ + free(form->line); /* free the line */ + free(form); /* free the struct */ + + } while(form=next); /* continue */ +} + +struct FormData *getFormData(struct HttpPost *post, + int *sizep) +{ + struct FormData *form = NULL; + struct FormData *firstform; + + struct HttpPost *file; + + int size =0; + char *boundary; + char *fileboundary=NULL; + + if(!post) + return NULL; /* no input => no output! */ + + boundary = MakeFormBoundary(); + + /* Make the first line of the output */ + AddFormDataf(&form, + "Content-Type: multipart/form-data;" + " boundary=%s\r\n", + boundary); + /* we DO NOT count that line since that'll be part of the header! */ + + firstform = form; + + do { + + /* boundary */ + size += AddFormDataf(&form, "\r\n--%s\r\n", boundary); + + size += AddFormDataf(&form, + "Content-Disposition: form-data; name=\"%s\"", + post->name); + + if(post->more) { + /* If used, this is a link to more file names, we must then do + the magic to include several files with the same field name */ + + fileboundary = MakeFormBoundary(); + + size += AddFormDataf(&form, + "\r\nContent-Type: multipart/mixed," + " boundary=%s\r\n", + fileboundary); + } + + file = post; + + do { + if(post->more) { + /* if multiple-file */ + size += AddFormDataf(&form, + "\r\n--%s\r\nContent-Disposition: attachment; filename=\"%s\"", + fileboundary, file->contents); + } + else if(post->flags & HTTPPOST_FILENAME) { + size += AddFormDataf(&form, + "; filename=\"%s\"", + post->contents); + } + + if(file->contenttype) { + /* we have a specified type */ + size += AddFormDataf(&form, + "\r\nContent-Type: %s", + file->contenttype); + } + if(file->contenttype && + !strnequal("text/", file->contenttype, 5)) { + /* this is not a text content, mention our binary encoding */ + size += AddFormDataf(&form, + "\r\nContent-Transfer-Encoding: binary"); + } + + + size += AddFormDataf(&form, + "\r\n\r\n"); + + if(post->flags & HTTPPOST_FILENAME) { + /* we should include the contents from the specified file */ + FILE *fileread; + char buffer[1024]; + int nread; + + fileread = strequal("-", file->contents)?stdin: + /* binary read for win32 crap */ + fopen(file->contents, "rb"); + if(fileread) { + while((nread = fread(buffer, 1, 1024, fileread))) { + size += AddFormData(&form, + buffer, + nread); + } + if(fileread != stdin) + fclose(fileread); + } + else { + size += AddFormDataf(&form, "[File wasn't found by client]"); + } + } + else { + /* include the contents we got */ + size += AddFormDataf(&form, + post->contents); + } + } while((file = file->more)); /* for each specified file for this field */ + + if(post->more) { + /* this was a multiple-file inclusion, make a termination file + boundary: */ + size += AddFormDataf(&form, + "\r\n--%s--", + fileboundary); + free(fileboundary); + } + + } while((post=post->next)); /* for each field */ + + /* end-boundary for everything */ + size += AddFormDataf(&form, + "\r\n--%s--\r\n", + boundary); + + *sizep = size; + + free(boundary); + + return firstform; +} + +int FormInit(struct Form *form, struct FormData *formdata ) +{ + form->data = formdata; + form->sent = 0; + + if(!formdata) + return 1; /* error */ + + return 0; +} + +/* fread() emulation */ +int FormReader(char *buffer, + size_t size, + size_t nitems, + FILE *mydata) +{ + struct Form *form; + int wantedsize; + int gotsize; + + form=(struct Form *)mydata; + + wantedsize = size * nitems; + + if(!form->data) + return 0; /* nothing, error, empty */ + + do { + + if( (form->data->length - form->sent ) > wantedsize ) { + + memcpy(buffer, form->data->line + form->sent, wantedsize); + + form->sent += wantedsize; + + return wantedsize; + } + + memcpy(buffer, + form->data->line + form->sent, + gotsize = (form->data->length - form->sent) ); + + form->sent = 0; + + form->data = form->data->next; /* advance */ + + } while(!gotsize && form->data); + /* If we got an empty line and we have more data, we proceed to the next + line immediately to avoid returning zero before we've reached the end. + This is the bug reported November 22 1999 on curl 6.3. (Daniel) */ + + return gotsize; +} + + +#ifdef _FORM_DEBUG + +int main(int argc, char **argv) +{ +#if 0 + char *testargs[]={ + "name1 = data in number one", + "name2 = number two data", + "test = @upload" + }; +#endif + int i; + char *nextarg; + struct HttpPost *httppost=NULL; + struct HttpPost *last_post=NULL; + struct HttpPost *post; + int size; + int nread; + char buffer[4096]; + + struct FormData *form; + struct Form formread; + + for(i=1; i + * Sampo Kellomaki + * Linas Vepstas + * Bjorn Reese + * Johan Anderson + * Kjell Ericson + * Troy Engel + * Ryan Nelson + * Bjorn Stenberg + * Angus Mackay + * + * ------------------------------------------------------------ + * Main author: + * - Daniel Stenberg + * + * http://curl.haxx.nu + * + * $Source$ + * $Revision$ + * $Date$ + * $Author$ + * $State$ + * $Locker$ + * + * ------------------------------------------------------------ + * $Log$ + * Revision 1.1 1999-12-29 14:21:22 bagder + * Initial revision + * + * Revision 1.4 1999/09/06 06:59:40 dast + * Changed email info + * + * Revision 1.3 1999/08/13 07:34:47 dast + * Changed the URL in the header + * + * Revision 1.2 1999/07/30 12:59:47 dast + * FormFree() was added to properly cleanup after a form was posted. + * + * Revision 1.1.1.1 1999/03/11 22:23:34 dast + * Imported sources + * + ****************************************************************************/ +/* plain and simple linked list with lines to send */ +struct FormData { + struct FormData *next; + char *line; + long length; +}; + +struct Form { + struct FormData *data; /* current form line to send */ + int sent; /* number of bytes of the current line that has already + been sent in a previous invoke */ +}; + +int FormParse(char *string, + struct HttpPost **httppost, + struct HttpPost **last_post); + +int FormInit(struct Form *form, struct FormData *formdata ); + +struct FormData *getFormData(struct HttpPost *post, + int *size); + +/* fread() emulation */ +int FormReader(char *buffer, + size_t size, + size_t nitems, + FILE *mydata); + +char *MakeFormBoundary(void); + +void FormFree(struct FormData *); + +#endif diff --git a/lib/ftp.c b/lib/ftp.c new file mode 100644 index 000000000..d62891298 --- /dev/null +++ b/lib/ftp.c @@ -0,0 +1,1046 @@ +/***************************************************************************** + * _ _ ____ _ + * Project ___| | | | _ \| | + * / __| | | | |_) | | + * | (__| |_| | _ <| |___ + * \___|\___/|_| \_\_____| + * + * The contents of this file are subject to the Mozilla Public License + * Version 1.0 (the "License"); you may not use this file except in + * compliance with the License. You may obtain a copy of the License at + * http://www.mozilla.org/MPL/ + * + * Software distributed under the License is distributed on an "AS IS" + * basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See the + * License for the specific language governing rights and limitations + * under the License. + * + * The Original Code is Curl. + * + * The Initial Developer of the Original Code is Daniel Stenberg. + * + * Portions created by the Initial Developer are Copyright (C) 1998. + * All Rights Reserved. + * + * ------------------------------------------------------------ + * Main author: + * - Daniel Stenberg + * + * http://curl.haxx.nu + * + * $Source$ + * $Revision$ + * $Date$ + * $Author$ + * $State$ + * $Locker$ + * + * ------------------------------------------------------------ + ****************************************************************************/ + +#include +#include +#include +#include +#include + +#include "setup.h" + +#ifdef HAVE_UNISTD_H +#include +#endif +#ifdef HAVE_SYS_SELECT_H +#include +#endif + +#if defined(WIN32) && !defined(__GNUC__) || defined(__MINGW32__) +#include +#else /* some kind of unix */ +#include +#include +#ifdef HAVE_ARPA_INET_H +#include +#endif +#include +#include +#endif + +#if defined(WIN32) && defined(__GNUC__) || defined(__MINGW32__) +#include +#endif + + +#include +#include "urldata.h" +#include "sendf.h" + +#include "if2ip.h" +#include "hostip.h" +#include "progress.h" +#include "upload.h" +#include "download.h" + + +/* returns last node in linked list */ +static struct curl_slist *slist_get_last(struct curl_slist *list) +{ + struct curl_slist *item; + + /* if caller passed us a NULL, return now */ + if (!list) + return NULL; + + /* loop through to find the last item */ + item = list; + while (item->next) { + item = item->next; + } + return item; +} + +/* append a struct to the linked list. It always retunrs the address of the + * first record, so that you can sure this function as an initialization + * function as well as an append function. If you find this bothersome, + * then simply create a separate _init function and call it appropriately from + * within the proram. */ +struct curl_slist *curl_slist_append(struct curl_slist *list, char *data) +{ + struct curl_slist *last; + struct curl_slist *new_item; + + new_item = (struct curl_slist *) malloc(sizeof(struct curl_slist)); + if (new_item) { + new_item->next = NULL; + new_item->data = strdup(data); + } + else { + fprintf(stderr, "Cannot allocate memory for QUOTE list.\n"); + exit(-1); + } + + if (list) { + last = slist_get_last(list); + last->next = new_item; + return list; + } + + /* if this is the first item, then new_item *is* the list */ + return new_item; +} + +/* be nice and clean up resources */ +void curl_slist_free_all(struct curl_slist *list) +{ + struct curl_slist *next; + struct curl_slist *item; + + if (!list) + return; + + item = list; + do { + next = item->next; + + if (item->data) { + free(item->data); + } + free(item); + item = next; + } while (next); +} + + +static UrgError AllowServerConnect(struct UrlData *data, + int sock) +{ + fd_set rdset; + struct timeval dt; + + FD_ZERO(&rdset); + + FD_SET(sock, &rdset); + + /* we give the server 10 seconds to connect to us */ + dt.tv_sec = 10; + dt.tv_usec = 0; + + switch ( select(sock+1, &rdset, NULL, NULL, &dt)) { + case -1: /* error */ + /* let's die here */ + failf(data, "Error while waiting for server connect"); + return URG_FTP_PORT_FAILED; + case 0: /* timeout */ + /* let's die here */ + failf(data, "Timeout while waiting for server connect"); + return URG_FTP_PORT_FAILED; + default: + /* we have received data here */ + { + int s; + size_t size = sizeof(struct sockaddr_in); + struct sockaddr_in add; + + getsockname(sock, (struct sockaddr *) &add, (int *)&size); + s=accept(sock, (struct sockaddr *) &add, (int *)&size); + + if( -1 == s) { + /* DIE! */ + failf(data, "Error accept()ing server connect"); + return URG_FTP_PORT_FAILED; + } + infof(data, "Connection accepted from server\n"); + + data->secondarysocket = s; + } + break; + } + return URG_OK; +} + + +/* --- parse FTP server responses --- */ + +#define lastline(line) (isdigit((int)line[0]) && isdigit((int)line[1]) && \ + isdigit((int)line[2]) && (' ' == line[3])) + +static int GetLastResponse(int sockfd, char *buf, + struct UrlData *data) +{ + int nread; + int read_rc=1; + char *ptr; + do { + ptr=buf; + + /* get us a full line, terminated with a newline */ + for(nread=0; + (nreaduse_ssl) { + read_rc = SSL_read(data->ssl, ptr, 1); + } + else { +#endif + read_rc = sread(sockfd, ptr, 1); +#ifdef USE_SSLEAY + } +#endif /* USE_SSLEAY */ + if (*ptr == '\n') + break; + } + *ptr=0; /* zero terminate */ + + if(data->conf & CONF_VERBOSE) { + fputs("< ", data->err); + fwrite(buf, 1, nread, data->err); + fputs("\n", data->err); + } + } while(read_rc && + (nread<4 || !lastline(buf)) ); + return nread; +} + +/* -- who are we? -- */ +char *getmyhost(void) +{ + static char myhost[256]; +#if !defined(WIN32) && !defined(HAVE_UNAME) && !defined(HAVE_GETHOSTNAME) + /* We have no means of finding the local host name! */ + strcpy(myhost, "localhost"); +#endif +#if defined(WIN32) || !defined(HAVE_UNAME) + gethostname(myhost, 256); +#else + struct utsname ugnm; + + if (uname(&ugnm) < 0) + return "localhost"; + + (void) strncpy(myhost, ugnm.nodename, 255); + myhost[255] = '\0'; +#endif + return myhost; +} + +#if 0 +/* + * URLfix() + * + * This function returns a string converted FROM the input URL format to a + * format that is more likely usable for the remote server. That is, all + * special characters (found as %XX-codes) will be eascaped with \. + */ + +static char *URLfix(char *string) +{ + /* The length of the new string can't be longer than twice the original + string, if all letters are '+'... */ + int alloc = strlen(string)*2; + char *ns = malloc(alloc); + unsigned char in; + int index=0; + int hex; + + while(*string) { + in = *string; + switch(in) { + case '+': + ns[index++] = '\\'; + ns[index++] = ' '; + string++; + continue; + + case '%': + /* encoded part */ + if(sscanf(string+1, "%02X", &hex)) { + ns[index++] = '\\'; + ns[index++] = hex; + string+=3; + continue; + } + /* FALLTHROUGH */ + default: + ns[index++] = in; + string++; + } + } + ns[index]=0; /* terminate it */ + return ns; +} +#endif + +static +UrgError _ftp(struct UrlData *data, + long *bytecountp, + char *ftpuser, + char *ftppasswd, + char *ppath) +{ + /* this is FTP and no proxy */ + size_t nread; + UrgError result; + char *buf = data->buffer; /* this is our buffer */ + /* for the ftp PORT mode */ + int portsock=-1; + struct sockaddr_in serv_addr; + + struct curl_slist *qitem; /* QUOTE item */ + + /* The first thing we do is wait for the "220*" line: */ + nread = GetLastResponse(data->firstsocket, buf, data); + if(strncmp(buf, "220", 3)) { + failf(data, "This doesn't seem like a nice ftp-server response"); + return URG_FTP_WEIRD_SERVER_REPLY; + } + + /* send USER */ + sendf(data->firstsocket, data, "USER %s\r\n", ftpuser); + + /* wait for feedback */ + nread = GetLastResponse(data->firstsocket, buf, data); + + if(!strncmp(buf, "530", 3)) { + /* 530 User ... access denied + (the server denies to log the specified user) */ + failf(data, "Access denied: %s", &buf[4]); + return URG_FTP_ACCESS_DENIED; + } + else if(!strncmp(buf, "331", 3)) { + /* 331 Password required for ... + (the server requires to send the user's password too) */ + sendf(data->firstsocket, data, "PASS %s\r\n", ftppasswd); + nread = GetLastResponse(data->firstsocket, buf, data); + + if(!strncmp(buf, "530", 3)) { + /* 530 Login incorrect. + (the username and/or the password are incorrect) */ + failf(data, "the username and/or the password are incorrect"); + return URG_FTP_USER_PASSWORD_INCORRECT; + } + else if(!strncmp(buf, "230", 3)) { + /* 230 User ... logged in. + (user successfully logged in) */ + + infof(data, "We have successfully logged in\n"); + } + else { + failf(data, "Odd return code after PASS"); + return URG_FTP_WEIRD_PASS_REPLY; + } + } + else if(! strncmp(buf, "230", 3)) { + /* 230 User ... logged in. + (the user logged in without password) */ + infof(data, "We have successfully logged in\n"); + } + else { + failf(data, "Odd return code after USER"); + return URG_FTP_WEIRD_USER_REPLY; + } + + /* Send any QUOTE strings? */ + if(data->quote) { + qitem = data->quote; + /* Send all QUOTE strings in same order as on command-line */ + while (qitem) { + /* Send string */ + if (qitem->data) { + sendf(data->firstsocket, data, "%s\r\n", qitem->data); + + nread = GetLastResponse(data->firstsocket, buf, data); + + if (buf[0] != '2') { + failf(data, "QUOT string not accepted: %s", + qitem->data); + return URG_FTP_QUOTE_ERROR; + } + } + qitem = qitem->next; + } + } + + /* If we have selected NOBODY, it means that we only want file information. + Which in FTP can't be much more than the file size! */ + if(data->conf & CONF_NOBODY) { + /* The SIZE command is _not_ RFC 959 specified, and therefor many servers + may not support it! It is however the only way we have to get a file's + size! */ + int filesize; + sendf(data->firstsocket, data, "SIZE %s\r\n", ppath); + + nread = GetLastResponse(data->firstsocket, buf, data); + + if(strncmp(buf, "213", 3)) { + failf(data, "Couldn't get file size: %s", buf+4); + return URG_FTP_COULDNT_GET_SIZE; + } + /* get the size from the ascii string: */ + filesize = atoi(buf+4); + + sprintf(buf, "Content-Length: %d\n", filesize); + + if(strlen(buf) != data->fwrite(buf, 1, strlen(buf), data->out)) { + failf (data, "Failed writing output"); + return URG_WRITE_ERROR; + } + if(data->writeheader) { + /* the header is requested to be written to this file */ + if(strlen(buf) != fwrite (buf, 1, strlen(buf), data->writeheader)) { + failf (data, "Failed writing output"); + return URG_WRITE_ERROR; + } + } + return URG_OK; + } + + /* We have chosen to use the PORT command */ + if(data->conf & CONF_FTPPORT) { + struct sockaddr_in sa; + struct hostent *h=NULL; + size_t size; + unsigned short porttouse; + + char *myhost=NULL; + + if(data->ftpport) { + myhost = if2ip(data->ftpport); + if(myhost) { + h = GetHost(data, myhost); + } + else { + if(strlen(data->ftpport)>1) + h = GetHost(data, data->ftpport); + if(h) + myhost=data->ftpport; + } + } + if(!myhost) { + myhost = getmyhost(); + h=GetHost(data, myhost); + } + infof(data, "We connect from %s\n", myhost); + + if ( h ) { + if( (portsock = socket(AF_INET, SOCK_STREAM, 0)) >= 0 ) { + memset((char *)&sa, 0, sizeof(sa)); + memcpy((char *)&sa.sin_addr, + h->h_addr, + h->h_length); + sa.sin_family = AF_INET; + sa.sin_addr.s_addr = INADDR_ANY; + sa.sin_port = 0; + size = sizeof(sa); + + if(bind(portsock, (struct sockaddr *)&sa, size) >= 0) { + /* we succeeded to bind */ + struct sockaddr_in add; + size = sizeof(add); + + if(getsockname(portsock, (struct sockaddr *) &add, + (int *)&size)<0) { + failf(data, "getsockname() failed"); + return URG_FTP_PORT_FAILED; + } + porttouse = ntohs(add.sin_port); + + if ( listen(portsock, 1) < 0 ) { + failf(data, "listen(2) failed on socket"); + return URG_FTP_PORT_FAILED; + } + } + else { + failf(data, "bind(2) failed on socket"); + return URG_FTP_PORT_FAILED; + } + } + else { + failf(data, "socket(2) failed (%s)"); + return URG_FTP_PORT_FAILED; + } + } + else { + failf(data, "could't find my own IP address (%s)", myhost); + return URG_FTP_PORT_FAILED; + } + { + struct in_addr in; + unsigned short ip[5]; + (void) memcpy(&in.s_addr, *h->h_addr_list, sizeof (in.s_addr)); + sscanf( inet_ntoa(in), "%hu.%hu.%hu.%hu", + &ip[0], &ip[1], &ip[2], &ip[3]); + sendf(data->firstsocket, data, "PORT %d,%d,%d,%d,%d,%d\n", + ip[0], ip[1], ip[2], ip[3], + porttouse >> 8, + porttouse & 255); + } + + nread = GetLastResponse(data->firstsocket, buf, data); + + if(strncmp(buf, "200", 3)) { + failf(data, "Server does not grok PORT, try without it!"); + return URG_FTP_PORT_FAILED; + } + } + else { /* we use the PASV command */ + + sendf(data->firstsocket, data, "PASV\r\n"); + + nread = GetLastResponse(data->firstsocket, buf, data); + + if(strncmp(buf, "227", 3)) { + failf(data, "Odd return code after PASV"); + return URG_FTP_WEIRD_PASV_REPLY; + } + else { + int ip[4]; + int port[2]; + unsigned short newport; + char newhost[32]; + struct hostent *he; + char *str=buf; + + /* + * New 227-parser June 3rd 1999. + * It now scans for a sequence of six comma-separated numbers and + * will take them as IP+port indicators. + * + * Found reply-strings include: + * "227 Entering Passive Mode (127,0,0,1,4,51)" + * "227 Data transfer will passively listen to 127,0,0,1,4,51" + * "227 Entering passive mode. 127,0,0,1,4,51" + */ + + while(*str) { + if (6 == sscanf(str, "%d,%d,%d,%d,%d,%d", + &ip[0], &ip[1], &ip[2], &ip[3], + &port[0], &port[1])) + break; + str++; + } + if(!*str) { + failf(data, "Couldn't interpret this 227-reply: %s", buf); + return URG_FTP_WEIRD_227_FORMAT; + } + sprintf(newhost, "%d.%d.%d.%d", ip[0], ip[1], ip[2], ip[3]); + he = GetHost(data, newhost); + if(!he) { + failf(data, "Can't resolve new host %s", newhost); + return URG_FTP_CANT_GET_HOST; + } + + + newport = (port[0]<<8) + port[1]; + data->secondarysocket = socket(AF_INET, SOCK_STREAM, 0); + + memset((char *) &serv_addr, '\0', sizeof(serv_addr)); + memcpy((char *)&(serv_addr.sin_addr), he->h_addr, he->h_length); + serv_addr.sin_family = he->h_addrtype; + serv_addr.sin_port = htons(newport); + + if(data->conf & CONF_VERBOSE) { + struct in_addr in; +#if 1 + struct hostent * answer; + + unsigned long address; +#if defined(HAVE_INET_ADDR) || defined(WIN32) + address = inet_addr(newhost); + answer = gethostbyaddr((char *) &address, sizeof(address), + AF_INET); +#else + answer = NULL; +#endif + (void) memcpy(&in.s_addr, *he->h_addr_list, sizeof (in.s_addr)); + infof(data, "Connecting to %s (%s) port %u\n", + answer?answer->h_name:newhost, inet_ntoa(in), newport); +#else + (void) memcpy(&in.s_addr, *he->h_addr_list, sizeof (in.s_addr)); + infof(data, "Connecting to %s (%s) port %u\n", + he->h_name, inet_ntoa(in), newport); +#endif + } + + if (connect(data->secondarysocket, (struct sockaddr *) &serv_addr, + sizeof(serv_addr)) < 0) { + switch(errno) { +#ifdef ECONNREFUSED + /* this should be made nicer */ + case ECONNREFUSED: + failf(data, "Connection refused by ftp server"); + break; +#endif +#ifdef EINTR + case EINTR: + failf(data, "Connection timeouted to ftp server"); + break; +#endif + default: + failf(data, "Can't connect to ftp server"); + break; + } + return URG_FTP_CANT_RECONNECT; + } + } + + } + /* we have the (new) data connection ready */ + + if(data->conf & CONF_UPLOAD) { + + /* Set type to binary (unless specified ASCII) */ + sendf(data->firstsocket, data, "TYPE %s\r\n", + (data->conf&CONF_FTPASCII)?"A":"I"); + + nread = GetLastResponse(data->firstsocket, buf, data); + + if(strncmp(buf, "200", 3)) { + failf(data, "Couldn't set %s mode", + (data->conf&CONF_FTPASCII)?"ASCII":"binary"); + return (data->conf&CONF_FTPASCII)? URG_FTP_COULDNT_SET_ASCII: + URG_FTP_COULDNT_SET_BINARY; + } + + if(data->resume_from) { + /* we're about to continue the uploading of a file */ + /* 1. get already existing file's size. We use the SIZE + command for this which may not exist in the server! + The SIZE command is not in RFC959. */ + + /* 2. This used to set REST. But since we can do append, we + don't another ftp command. We just skip the source file + offset and then we APPEND the rest on the file instead */ + + /* 3. pass file-size number of bytes in the source file */ + /* 4. lower the infilesize counter */ + /* => transfer as usual */ + + if(data->resume_from < 0 ) { + /* we could've got a specified offset from the command line, + but now we know we didn't */ + + sendf(data->firstsocket, data, "SIZE %s\r\n", ppath); + + nread = GetLastResponse(data->firstsocket, buf, data); + + if(strncmp(buf, "213", 3)) { + failf(data, "Couldn't get file size: %s", buf+4); + return URG_FTP_COULDNT_GET_SIZE; + } + + /* get the size from the ascii string: */ + data->resume_from = atoi(buf+4); + } + + if(data->resume_from) { + /* do we still game? */ + int passed=0; +#if 0 + /* Set resume file transfer offset */ + infof(data, "Instructs server to resume from offset %d\n", + data->resume_from); + + sendf(data->firstsocket, data, "REST %d\r\n", data->resume_from); + + nread = GetLastResponse(data->firstsocket, buf, data); + + if(strncmp(buf, "350", 3)) { + failf(data, "Couldn't use REST: %s", buf+4); + return URG_FTP_COULDNT_USE_REST; + } +#else + /* enable append instead */ + data->conf |= CONF_FTPAPPEND; +#endif + /* Now, let's read off the proper amount of bytes from the + input. If we knew it was a proper file we could've just + fseek()ed but we only have a stream here */ + do { + int readthisamountnow = (data->resume_from - passed); + int actuallyread; + + if(readthisamountnow > BUFSIZE) + readthisamountnow = BUFSIZE; + + actuallyread = + data->fread(data->buffer, 1, readthisamountnow, data->in); + + passed += actuallyread; + if(actuallyread != readthisamountnow) { + failf(data, "Could only read %d bytes from the input\n", + passed); + return URG_FTP_COULDNT_USE_REST; + } + } + while(passed != data->resume_from); + + /* now, decrease the size of the read */ + if(data->infilesize>0) { + data->infilesize -= data->resume_from; + + if(data->infilesize <= 0) { + infof(data, "File already completely uploaded\n"); + return URG_OK; + } + } + /* we've passed, proceed as normal */ + } + } + + /* Send everything on data->in to the socket */ + if(data->conf & CONF_FTPAPPEND) + /* we append onto the file instead of rewriting it */ + sendf(data->firstsocket, data, "APPE %s\r\n", ppath); + else + sendf(data->firstsocket, data, "STOR %s\r\n", ppath); + + nread = GetLastResponse(data->firstsocket, buf, data); + + if(atoi(buf)>=400) { + failf(data, "Failed FTP upload:%s", buf+3); + /* oops, we never close the sockets! */ + return URG_FTP_COULDNT_STOR_FILE; + } + + if(data->conf & CONF_FTPPORT) { + result = AllowServerConnect(data, portsock); + if( result ) + return result; + } + + *bytecountp=0; + + /* When we know we're uploading a specified file, we can get the file + size prior to the actual upload. */ + + ProgressInit(data, data->infilesize); + result = Upload(data, data->secondarysocket, bytecountp); + if(result) + return result; + + if((-1 != data->infilesize) && (data->infilesize != *bytecountp)) { + failf(data, "Wrote only partial file (%d out of %d bytes)", + *bytecountp, data->infilesize); + return URG_PARTIAL_FILE; + } + } + else { + /* Retrieve file or directory */ + bool dirlist=FALSE; + long downloadsize=-1; + + if(data->conf&CONF_RANGE && data->range) { + int from, to; + int totalsize=-1; + char *ptr; + char *ptr2; + + from=strtol(data->range, &ptr, 0); + while(ptr && *ptr && (isspace((int)*ptr) || (*ptr=='-'))) + ptr++; + to=strtol(ptr, &ptr2, 0); + if(ptr == ptr2) { + /* we didn't get any digit */ + to=-1; + } + if(-1 == to) { + /* X - */ + data->resume_from = from; + } + else if(from < 0) { + /* -Y */ + from = 0; + to = -from; + totalsize = to-from; + data->maxdownload = totalsize; + } + else { + /* X- */ + totalsize = to-from; + data->maxdownload = totalsize; + } + infof(data, "range-download from %d to %d, totally %d bytes\n", + from, to, totalsize); + } + + if(!ppath[0]) + /* make sure this becomes a valid name */ + ppath="./"; + + if((data->conf & CONF_FTPLISTONLY) || + ('/' == ppath[strlen(ppath)-1] )) { + /* The specified path ends with a slash, and therefore we think this + is a directory that is requested, use LIST. But before that we + need to set ASCII transfer mode. */ + dirlist = TRUE; + + /* Set type to ASCII */ + sendf(data->firstsocket, data, "TYPE A\r\n"); + + nread = GetLastResponse(data->firstsocket, buf, data); + + if(strncmp(buf, "200", 3)) { + failf(data, "Couldn't set ascii mode"); + return URG_FTP_COULDNT_SET_ASCII; + } + + /* if this output is to be machine-parsed, the NLST command will be + better used since the LIST command output is not specified or + standard in any way */ + + sendf(data->firstsocket, data, "%s %s\r\n", + data->customrequest?data->customrequest: + (data->conf&CONF_FTPLISTONLY?"NLST":"LIST"), + ppath); + } + else { + /* Set type to binary (unless specified ASCII) */ + sendf(data->firstsocket, data, "TYPE %s\r\n", + (data->conf&CONF_FTPASCII)?"A":"I"); + + nread = GetLastResponse(data->firstsocket, buf, data); + + if(strncmp(buf, "200", 3)) { + failf(data, "Couldn't set %s mode", + (data->conf&CONF_FTPASCII)?"ASCII":"binary"); + return (data->conf&CONF_FTPASCII)? URG_FTP_COULDNT_SET_ASCII: + URG_FTP_COULDNT_SET_BINARY; + } + + if(data->resume_from) { + + /* Daniel: (August 4, 1999) + * + * We start with trying to use the SIZE command to figure out the size + * of the file we're gonna get. If we can get the size, this is by far + * the best way to know if we're trying to resume beyond the EOF. */ + + sendf(data->firstsocket, data, "SIZE %s\r\n", ppath); + + nread = GetLastResponse(data->firstsocket, buf, data); + + if(strncmp(buf, "213", 3)) { + infof(data, "server doesn't support SIZE: %s", buf+4); + /* We couldn't get the size and therefore we can't know if there + really is a part of the file left to get, although the server + will just close the connection when we start the connection so it + won't cause us any harm, just not make us exit as nicely. */ + } + else { + int foundsize=atoi(buf+4); + /* We got a file size report, so we check that there actually is a + part of the file left to get, or else we go home. */ + if(foundsize <= data->resume_from) { + failf(data, "Offset (%d) was beyond file size (%d)", + data->resume_from, foundsize); + return URG_FTP_BAD_DOWNLOAD_RESUME; + } + /* Now store the number of bytes we are expected to download */ + downloadsize = foundsize-data->resume_from; + } + + /* Set resume file transfer offset */ + infof(data, "Instructs server to resume from offset %d\n", + data->resume_from); + + sendf(data->firstsocket, data, "REST %d\r\n", data->resume_from); + + nread = GetLastResponse(data->firstsocket, buf, data); + + if(strncmp(buf, "350", 3)) { + failf(data, "Couldn't use REST: %s", buf+4); + return URG_FTP_COULDNT_USE_REST; + } + } + + sendf(data->firstsocket, data, "RETR %s\r\n", ppath); + } + + nread = GetLastResponse(data->firstsocket, buf, data); + + if(!strncmp(buf, "150", 3) || !strncmp(buf, "125", 3)) { + + /* + A; + 150 Opening BINARY mode data connection for /etc/passwd (2241 + bytes). (ok, the file is being transfered) + + B: + 150 Opening ASCII mode data connection for /bin/ls + + C: + 150 ASCII data connection for /bin/ls (137.167.104.91,37445) (0 bytes). + + D: + 150 Opening ASCII mode data connection for /linux/fisk/kpanelrc (0.0.0.0,0) (545 bytes). + + E: + 125 Data connection already open; Transfer starting. */ + + int size=-1; /* default unknown size */ + + if(!dirlist && (-1 == downloadsize)) { + /* + * It seems directory listings either don't show the size or very + * often uses size 0 anyway. + * Example D above makes this parsing a little tricky + */ + char *bytes; + bytes=strstr(buf, " bytes"); + if(bytes--) { + int index=bytes-buf; + /* this is a hint there is size information in there! ;-) */ + while(--index) { + /* scan for the parenthesis and break there */ + if('(' == *bytes) + break; + /* if only skip digits, or else we're in deep trouble */ + if(!isdigit((int)*bytes)) { + bytes=NULL; + break; + } + /* one more estep backwards */ + bytes--; + } + /* only if we have nothing but digits: */ + if(bytes++) { + /* get the number! */ + size = atoi(bytes); + } + + } +#if 0 + if(2 != sscanf(buf, "%*[^(](%d bytes%c", &size, &paren)) + size=-1; +#endif + } + else if(downloadsize > -1) + size = downloadsize; + +#if 0 + if((size > -1) && (data->resume_from>0)) { + size -= data->resume_from; + if(size <= 0) { + failf(data, "Offset (%d) was beyond file size (%d)", + data->resume_from, data->resume_from+size); + return URG_PARTIAL_FILE; + } + } +#endif + + if(data->conf & CONF_FTPPORT) { + result = AllowServerConnect(data, portsock); + if( result ) + return result; + } + + infof(data, "Getting file with size: %d\n", size); + + /* FTP download: */ + result=Download(data, data->secondarysocket, size, FALSE, + bytecountp); + if(result) + return result; + + if((-1 != size) && (size != *bytecountp)) { + failf(data, "Received only partial file"); + return URG_PARTIAL_FILE; + } + else if(0 == *bytecountp) { + failf(data, "No data was received!"); + return URG_FTP_COULDNT_RETR_FILE; + } + } + else { + failf(data, "%s", buf+4); + return URG_FTP_COULDNT_RETR_FILE; + } + + } + /* end of transfer */ + ProgressEnd(data); + + /* shut down the socket to inform the server we're done */ + sclose(data->secondarysocket); + data->secondarysocket = -1; + + /* now let's see what the server says about the transfer we + just performed: */ + nread = GetLastResponse(data->firstsocket, buf, data); + + /* 226 Transfer complete */ + if(strncmp(buf, "226", 3)) { + failf(data, "%s", buf+4); + return URG_FTP_WRITE_ERROR; + } + + return URG_OK; +} + +/* -- deal with the ftp server! -- */ + +UrgError ftp(struct UrlData *data, + long *bytecountp, + char *ftpuser, + char *ftppasswd, + char *urlpath) +{ + char *realpath; + UrgError retcode; + +#if 0 + realpath = URLfix(urlpath); +#else + realpath = curl_unescape(urlpath); +#endif + if(realpath) { + retcode = _ftp(data, bytecountp, ftpuser, ftppasswd, realpath); + free(realpath); + } + else + /* then we try the original path */ + retcode = _ftp(data, bytecountp, ftpuser, ftppasswd, urlpath); + + return retcode; +} + diff --git a/lib/ftp.h b/lib/ftp.h new file mode 100644 index 000000000..b7d265927 --- /dev/null +++ b/lib/ftp.h @@ -0,0 +1,52 @@ +#ifndef __FTP_H +#define __FTP_H + +/***************************************************************************** + * _ _ ____ _ + * Project ___| | | | _ \| | + * / __| | | | |_) | | + * | (__| |_| | _ <| |___ + * \___|\___/|_| \_\_____| + * + * The contents of this file are subject to the Mozilla Public License + * Version 1.0 (the "License"); you may not use this file except in + * compliance with the License. You may obtain a copy of the License at + * http://www.mozilla.org/MPL/ + * + * Software distributed under the License is distributed on an "AS IS" + * basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See the + * License for the specific language governing rights and limitations + * under the License. + * + * The Original Code is Curl. + * + * The Initial Developer of the Original Code is Daniel Stenberg. + * + * Portions created by the Initial Developer are Copyright (C) 1998. + * All Rights Reserved. + * + * ------------------------------------------------------------ + * Main author: + * - Daniel Stenberg + * + * http://curl.haxx.nu + * + * $Source$ + * $Revision$ + * $Date$ + * $Author$ + * $State$ + * $Locker$ + * + * ------------------------------------------------------------ + ****************************************************************************/ +UrgError ftp(struct UrlData *data, + long *bytecountp, + char *ftpuser, + char *ftppasswd, + char *ppath); + +struct curl_slist *curl_slist_append(struct curl_slist *list, char *data); +void curl_slist_free_all(struct curl_slist *list); + +#endif diff --git a/lib/getdate.c b/lib/getdate.c new file mode 100644 index 000000000..e3342ff3a --- /dev/null +++ b/lib/getdate.c @@ -0,0 +1,2101 @@ + +/* A Bison parser, made from getdate.y + by GNU Bison version 1.27 + */ + +#define YYBISON 1 /* Identify Bison output. */ + +#define tAGO 257 +#define tDAY 258 +#define tDAY_UNIT 259 +#define tDAYZONE 260 +#define tDST 261 +#define tHOUR_UNIT 262 +#define tID 263 +#define tMERIDIAN 264 +#define tMINUTE_UNIT 265 +#define tMONTH 266 +#define tMONTH_UNIT 267 +#define tSEC_UNIT 268 +#define tSNUMBER 269 +#define tUNUMBER 270 +#define tYEAR_UNIT 271 +#define tZONE 272 + +#line 1 "getdate.y" + +/* +** Originally written by Steven M. Bellovin while +** at the University of North Carolina at Chapel Hill. Later tweaked by +** a couple of people on Usenet. Completely overhauled by Rich $alz +** and Jim Berets in August, 1990. +** +** This code is in the public domain and has no copyright. +*/ + +#ifdef HAVE_CONFIG_H +# include +# ifdef HAVE_ALLOCA_H +# include +# endif +#endif + +/* Since the code of getdate.y is not included in the Emacs executable + itself, there is no need to #define static in this file. Even if + the code were included in the Emacs executable, it probably + wouldn't do any harm to #undef it here; this will only cause + problems if we try to write to a static variable, which I don't + think this code needs to do. */ +#ifdef emacs +# undef static +#endif + +#include +#include +#include +#include + +#if HAVE_STDLIB_H +# include /* for `free'; used by Bison 1.27 */ +#endif + +#if defined (STDC_HEADERS) || (!defined (isascii) && !defined (HAVE_ISASCII)) +# define IN_CTYPE_DOMAIN(c) 1 +#else +# define IN_CTYPE_DOMAIN(c) isascii(c) +#endif + +#define ISSPACE(c) (IN_CTYPE_DOMAIN (c) && isspace (c)) +#define ISALPHA(c) (IN_CTYPE_DOMAIN (c) && isalpha (c)) +#define ISUPPER(c) (IN_CTYPE_DOMAIN (c) && isupper (c)) +#define ISDIGIT_LOCALE(c) (IN_CTYPE_DOMAIN (c) && isdigit (c)) + +/* ISDIGIT differs from ISDIGIT_LOCALE, as follows: + - Its arg may be any int or unsigned int; it need not be an unsigned char. + - It's guaranteed to evaluate its argument exactly once. + - It's typically faster. + Posix 1003.2-1992 section 2.5.2.1 page 50 lines 1556-1558 says that + only '0' through '9' are digits. Prefer ISDIGIT to ISDIGIT_LOCALE unless + it's important to use the locale's definition of `digit' even when the + host does not conform to Posix. */ +#define ISDIGIT(c) ((unsigned) (c) - '0' <= 9) + +#if defined (STDC_HEADERS) || defined (USG) +# include +#endif + +#if __GNUC__ < 2 || (__GNUC__ == 2 && __GNUC_MINOR__ < 7) +# define __attribute__(x) +#endif + +#ifndef ATTRIBUTE_UNUSED +# define ATTRIBUTE_UNUSED __attribute__ ((__unused__)) +#endif + +/* Some old versions of bison generate parsers that use bcopy. + That loses on systems that don't provide the function, so we have + to redefine it here. */ +#if !defined (HAVE_BCOPY) && defined (HAVE_MEMCPY) && !defined (bcopy) +# define bcopy(from, to, len) memcpy ((to), (from), (len)) +#endif + +/* Remap normal yacc parser interface names (yyparse, yylex, yyerror, etc), + as well as gratuitiously global symbol names, so we can have multiple + yacc generated parsers in the same program. Note that these are only + the variables produced by yacc. If other parser generators (bison, + byacc, etc) produce additional global names that conflict at link time, + then those parser generators need to be fixed instead of adding those + names to this list. */ + +#define yymaxdepth gd_maxdepth +#define yyparse gd_parse +#define yylex gd_lex +#define yyerror gd_error +#define yylval gd_lval +#define yychar gd_char +#define yydebug gd_debug +#define yypact gd_pact +#define yyr1 gd_r1 +#define yyr2 gd_r2 +#define yydef gd_def +#define yychk gd_chk +#define yypgo gd_pgo +#define yyact gd_act +#define yyexca gd_exca +#define yyerrflag gd_errflag +#define yynerrs gd_nerrs +#define yyps gd_ps +#define yypv gd_pv +#define yys gd_s +#define yy_yys gd_yys +#define yystate gd_state +#define yytmp gd_tmp +#define yyv gd_v +#define yy_yyv gd_yyv +#define yyval gd_val +#define yylloc gd_lloc +#define yyreds gd_reds /* With YYDEBUG defined */ +#define yytoks gd_toks /* With YYDEBUG defined */ +#define yylhs gd_yylhs +#define yylen gd_yylen +#define yydefred gd_yydefred +#define yydgoto gd_yydgoto +#define yysindex gd_yysindex +#define yyrindex gd_yyrindex +#define yygindex gd_yygindex +#define yytable gd_yytable +#define yycheck gd_yycheck + +static int yylex (); +static int yyerror (); + +#define EPOCH 1970 +#define HOUR(x) ((x) * 60) + +#define MAX_BUFF_LEN 128 /* size of buffer to read the date into */ + +/* +** An entry in the lexical lookup table. +*/ +typedef struct _TABLE { + const char *name; + int type; + int value; +} TABLE; + + +/* +** Meridian: am, pm, or 24-hour style. +*/ +typedef enum _MERIDIAN { + MERam, MERpm, MER24 +} MERIDIAN; + + +/* +** Global variables. We could get rid of most of these by using a good +** union as the yacc stack. (This routine was originally written before +** yacc had the %union construct.) Maybe someday; right now we only use +** the %union very rarely. +*/ +static const char *yyInput; +static int yyDayOrdinal; +static int yyDayNumber; +static int yyHaveDate; +static int yyHaveDay; +static int yyHaveRel; +static int yyHaveTime; +static int yyHaveZone; +static int yyTimezone; +static int yyDay; +static int yyHour; +static int yyMinutes; +static int yyMonth; +static int yySeconds; +static int yyYear; +static MERIDIAN yyMeridian; +static int yyRelDay; +static int yyRelHour; +static int yyRelMinutes; +static int yyRelMonth; +static int yyRelSeconds; +static int yyRelYear; + + +#line 184 "getdate.y" +typedef union { + int Number; + enum _MERIDIAN Meridian; +} YYSTYPE; +#include + +#ifndef __cplusplus +#ifndef __STDC__ +#ifndef const +#define const +#endif +#endif +#endif + + + +#define YYFINAL 61 +#define YYFLAG -32768 +#define YYNTBASE 22 + +#define YYTRANSLATE(x) ((unsigned)(x) <= 272 ? yytranslate[x] : 32) + +static const char yytranslate[] = { 0, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 20, 2, 2, 21, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 19, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 1, 3, 4, 5, 6, + 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, + 17, 18 +}; + +#if YYDEBUG != 0 +static const short yyprhs[] = { 0, + 0, 1, 4, 6, 8, 10, 12, 14, 16, 19, + 24, 29, 36, 43, 45, 47, 50, 52, 55, 58, + 62, 68, 72, 76, 79, 84, 87, 91, 94, 96, + 99, 102, 104, 107, 110, 112, 115, 118, 120, 123, + 126, 128, 131, 134, 136, 139, 142, 144, 146, 147 +}; + +static const short yyrhs[] = { -1, + 22, 23, 0, 24, 0, 25, 0, 27, 0, 26, + 0, 28, 0, 30, 0, 16, 10, 0, 16, 19, + 16, 31, 0, 16, 19, 16, 15, 0, 16, 19, + 16, 19, 16, 31, 0, 16, 19, 16, 19, 16, + 15, 0, 18, 0, 6, 0, 18, 7, 0, 4, + 0, 4, 20, 0, 16, 4, 0, 16, 21, 16, + 0, 16, 21, 16, 21, 16, 0, 16, 15, 15, + 0, 16, 12, 15, 0, 12, 16, 0, 12, 16, + 20, 16, 0, 16, 12, 0, 16, 12, 16, 0, + 29, 3, 0, 29, 0, 16, 17, 0, 15, 17, + 0, 17, 0, 16, 13, 0, 15, 13, 0, 13, + 0, 16, 5, 0, 15, 5, 0, 5, 0, 16, + 8, 0, 15, 8, 0, 8, 0, 16, 11, 0, + 15, 11, 0, 11, 0, 16, 14, 0, 15, 14, + 0, 14, 0, 16, 0, 0, 10, 0 +}; + +#endif + +#if YYDEBUG != 0 +static const short yyrline[] = { 0, + 200, 201, 204, 207, 210, 213, 216, 219, 222, 228, + 234, 243, 249, 261, 264, 267, 273, 277, 281, 287, + 291, 309, 315, 321, 325, 330, 334, 341, 349, 352, + 355, 358, 361, 364, 367, 370, 373, 376, 379, 382, + 385, 388, 391, 394, 397, 400, 403, 408, 441, 445 +}; +#endif + + +#if YYDEBUG != 0 || defined (YYERROR_VERBOSE) + +static const char * const yytname[] = { "$","error","$undefined.","tAGO","tDAY", +"tDAY_UNIT","tDAYZONE","tDST","tHOUR_UNIT","tID","tMERIDIAN","tMINUTE_UNIT", +"tMONTH","tMONTH_UNIT","tSEC_UNIT","tSNUMBER","tUNUMBER","tYEAR_UNIT","tZONE", +"':'","','","'/'","spec","item","time","zone","day","date","rel","relunit","number", +"o_merid", NULL +}; +#endif + +static const short yyr1[] = { 0, + 22, 22, 23, 23, 23, 23, 23, 23, 24, 24, + 24, 24, 24, 25, 25, 25, 26, 26, 26, 27, + 27, 27, 27, 27, 27, 27, 27, 28, 28, 29, + 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, + 29, 29, 29, 29, 29, 29, 29, 30, 31, 31 +}; + +static const short yyr2[] = { 0, + 0, 2, 1, 1, 1, 1, 1, 1, 2, 4, + 4, 6, 6, 1, 1, 2, 1, 2, 2, 3, + 5, 3, 3, 2, 4, 2, 3, 2, 1, 2, + 2, 1, 2, 2, 1, 2, 2, 1, 2, 2, + 1, 2, 2, 1, 2, 2, 1, 1, 0, 1 +}; + +static const short yydefact[] = { 1, + 0, 17, 38, 15, 41, 44, 0, 35, 47, 0, + 48, 32, 14, 2, 3, 4, 6, 5, 7, 29, + 8, 18, 24, 37, 40, 43, 34, 46, 31, 19, + 36, 39, 9, 42, 26, 33, 45, 0, 30, 0, + 0, 16, 28, 0, 23, 27, 22, 49, 20, 25, + 50, 11, 0, 10, 0, 49, 21, 13, 12, 0, + 0 +}; + +static const short yydefgoto[] = { 1, + 14, 15, 16, 17, 18, 19, 20, 21, 54 +}; + +static const short yypact[] = {-32768, + 0, -19,-32768,-32768,-32768,-32768, -13,-32768,-32768, 30, + 15,-32768, 14,-32768,-32768,-32768,-32768,-32768,-32768, 19, +-32768,-32768, 4,-32768,-32768,-32768,-32768,-32768,-32768,-32768, +-32768,-32768,-32768,-32768, -6,-32768,-32768, 16,-32768, 17, + 23,-32768,-32768, 24,-32768,-32768,-32768, 27, 28,-32768, +-32768,-32768, 29,-32768, 32, -8,-32768,-32768,-32768, 50, +-32768 +}; + +static const short yypgoto[] = {-32768, +-32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768, -5 +}; + + +#define YYLAST 51 + + +static const short yytable[] = { 60, + 22, 51, 23, 2, 3, 4, 58, 5, 45, 46, + 6, 7, 8, 9, 10, 11, 12, 13, 30, 31, + 42, 43, 32, 44, 33, 34, 35, 36, 37, 38, + 47, 39, 48, 40, 24, 41, 51, 25, 49, 50, + 26, 52, 27, 28, 56, 53, 29, 57, 55, 61, + 59 +}; + +static const short yycheck[] = { 0, + 20, 10, 16, 4, 5, 6, 15, 8, 15, 16, + 11, 12, 13, 14, 15, 16, 17, 18, 4, 5, + 7, 3, 8, 20, 10, 11, 12, 13, 14, 15, + 15, 17, 16, 19, 5, 21, 10, 8, 16, 16, + 11, 15, 13, 14, 16, 19, 17, 16, 21, 0, + 56 +}; +/* -*-C-*- Note some compilers choke on comments on `#line' lines. */ +#line 3 "/boot/apps/GeekGadgets/share/bison.simple" +/* This file comes from bison-1.27. */ + +/* Skeleton output parser for bison, + Copyright (C) 1984, 1989, 1990 Free Software Foundation, Inc. + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2, or (at your option) + any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 59 Temple Place - Suite 330, + Boston, MA 02111-1307, USA. */ + +/* As a special exception, when this file is copied by Bison into a + Bison output file, you may use that output file without restriction. + This special exception was added by the Free Software Foundation + in version 1.24 of Bison. */ + +/* This is the parser code that is written into each bison parser + when the %semantic_parser declaration is not specified in the grammar. + It was written by Richard Stallman by simplifying the hairy parser + used when %semantic_parser is specified. */ + +#ifndef YYSTACK_USE_ALLOCA +#ifdef alloca +#define YYSTACK_USE_ALLOCA +#else /* alloca not defined */ +#ifdef __GNUC__ +#define YYSTACK_USE_ALLOCA +#define alloca __builtin_alloca +#else /* not GNU C. */ +#if (!defined (__STDC__) && defined (sparc)) || defined (__sparc__) || defined (__sparc) || defined (__sgi) || (defined (__sun) && defined (__i386)) +#define YYSTACK_USE_ALLOCA +#include +#else /* not sparc */ +/* We think this test detects Watcom and Microsoft C. */ +/* This used to test MSDOS, but that is a bad idea + since that symbol is in the user namespace. */ +#if (defined (_MSDOS) || defined (_MSDOS_)) && !defined (__TURBOC__) +#if 0 /* No need for malloc.h, which pollutes the namespace; + instead, just don't use alloca. */ +#include +#endif +#else /* not MSDOS, or __TURBOC__ */ +#if defined(_AIX) +/* I don't know what this was needed for, but it pollutes the namespace. + So I turned it off. rms, 2 May 1997. */ +/* #include */ + #pragma alloca +#define YYSTACK_USE_ALLOCA +#else /* not MSDOS, or __TURBOC__, or _AIX */ +#if 0 +#ifdef __hpux /* haible@ilog.fr says this works for HPUX 9.05 and up, + and on HPUX 10. Eventually we can turn this on. */ +#define YYSTACK_USE_ALLOCA +#define alloca __builtin_alloca +#endif /* __hpux */ +#endif +#endif /* not _AIX */ +#endif /* not MSDOS, or __TURBOC__ */ +#endif /* not sparc */ +#endif /* not GNU C */ +#endif /* alloca not defined */ +#endif /* YYSTACK_USE_ALLOCA not defined */ + +#ifdef YYSTACK_USE_ALLOCA +#define YYSTACK_ALLOC alloca +#else +#define YYSTACK_ALLOC malloc +#endif + +/* Note: there must be only one dollar sign in this file. + It is replaced by the list of actions, each action + as one case of the switch. */ + +#define yyerrok (yyerrstatus = 0) +#define yyclearin (yychar = YYEMPTY) +#define YYEMPTY -2 +#define YYEOF 0 +#define YYACCEPT goto yyacceptlab +#define YYABORT goto yyabortlab +#define YYERROR goto yyerrlab1 +/* Like YYERROR except do call yyerror. + This remains here temporarily to ease the + transition to the new meaning of YYERROR, for GCC. + Once GCC version 2 has supplanted version 1, this can go. */ +#define YYFAIL goto yyerrlab +#define YYRECOVERING() (!!yyerrstatus) +#define YYBACKUP(token, value) \ +do \ + if (yychar == YYEMPTY && yylen == 1) \ + { yychar = (token), yylval = (value); \ + yychar1 = YYTRANSLATE (yychar); \ + YYPOPSTACK; \ + goto yybackup; \ + } \ + else \ + { yyerror ("syntax error: cannot back up"); YYERROR; } \ +while (0) + +#define YYTERROR 1 +#define YYERRCODE 256 + +#ifndef YYPURE +#define YYLEX yylex() +#endif + +#ifdef YYPURE +#ifdef YYLSP_NEEDED +#ifdef YYLEX_PARAM +#define YYLEX yylex(&yylval, &yylloc, YYLEX_PARAM) +#else +#define YYLEX yylex(&yylval, &yylloc) +#endif +#else /* not YYLSP_NEEDED */ +#ifdef YYLEX_PARAM +#define YYLEX yylex(&yylval, YYLEX_PARAM) +#else +#define YYLEX yylex(&yylval) +#endif +#endif /* not YYLSP_NEEDED */ +#endif + +/* If nonreentrant, generate the variables here */ + +#ifndef YYPURE + +int yychar; /* the lookahead symbol */ +YYSTYPE yylval; /* the semantic value of the */ + /* lookahead symbol */ + +#ifdef YYLSP_NEEDED +YYLTYPE yylloc; /* location data for the lookahead */ + /* symbol */ +#endif + +int yynerrs; /* number of parse errors so far */ +#endif /* not YYPURE */ + +#if YYDEBUG != 0 +int yydebug; /* nonzero means print parse trace */ +/* Since this is uninitialized, it does not stop multiple parsers + from coexisting. */ +#endif + +/* YYINITDEPTH indicates the initial size of the parser's stacks */ + +#ifndef YYINITDEPTH +#define YYINITDEPTH 200 +#endif + +/* YYMAXDEPTH is the maximum size the stacks can grow to + (effective only if the built-in stack extension method is used). */ + +#if YYMAXDEPTH == 0 +#undef YYMAXDEPTH +#endif + +#ifndef YYMAXDEPTH +#define YYMAXDEPTH 10000 +#endif + +/* Define __yy_memcpy. Note that the size argument + should be passed with type unsigned int, because that is what the non-GCC + definitions require. With GCC, __builtin_memcpy takes an arg + of type size_t, but it can handle unsigned int. */ + +#if __GNUC__ > 1 /* GNU C and GNU C++ define this. */ +#define __yy_memcpy(TO,FROM,COUNT) __builtin_memcpy(TO,FROM,COUNT) +#else /* not GNU C or C++ */ +#ifndef __cplusplus + +/* This is the most reliable way to avoid incompatibilities + in available built-in functions on various systems. */ +static void +__yy_memcpy (to, from, count) + char *to; + char *from; + unsigned int count; +{ + register char *f = from; + register char *t = to; + register int i = count; + + while (i-- > 0) + *t++ = *f++; +} + +#else /* __cplusplus */ + +/* This is the most reliable way to avoid incompatibilities + in available built-in functions on various systems. */ +static void +__yy_memcpy (char *to, char *from, unsigned int count) +{ + register char *t = to; + register char *f = from; + register int i = count; + + while (i-- > 0) + *t++ = *f++; +} + +#endif +#endif + +#line 216 "/boot/apps/GeekGadgets/share/bison.simple" + +/* The user can define YYPARSE_PARAM as the name of an argument to be passed + into yyparse. The argument should have type void *. + It should actually point to an object. + Grammar actions can access the variable by casting it + to the proper pointer type. */ + +#ifdef YYPARSE_PARAM +#ifdef __cplusplus +#define YYPARSE_PARAM_ARG void *YYPARSE_PARAM +#define YYPARSE_PARAM_DECL +#else /* not __cplusplus */ +#define YYPARSE_PARAM_ARG YYPARSE_PARAM +#define YYPARSE_PARAM_DECL void *YYPARSE_PARAM; +#endif /* not __cplusplus */ +#else /* not YYPARSE_PARAM */ +#define YYPARSE_PARAM_ARG +#define YYPARSE_PARAM_DECL +#endif /* not YYPARSE_PARAM */ + +/* Prevent warning if -Wstrict-prototypes. */ +#ifdef __GNUC__ +#ifdef YYPARSE_PARAM +int yyparse (void *); +#else +int yyparse (void); +#endif +#endif + +int +yyparse(YYPARSE_PARAM_ARG) + YYPARSE_PARAM_DECL +{ + register int yystate; + register int yyn; + register short *yyssp; + register YYSTYPE *yyvsp; + int yyerrstatus; /* number of tokens to shift before error messages enabled */ + int yychar1 = 0; /* lookahead token as an internal (translated) token number */ + + short yyssa[YYINITDEPTH]; /* the state stack */ + YYSTYPE yyvsa[YYINITDEPTH]; /* the semantic value stack */ + + short *yyss = yyssa; /* refer to the stacks thru separate pointers */ + YYSTYPE *yyvs = yyvsa; /* to allow yyoverflow to reallocate them elsewhere */ + +#ifdef YYLSP_NEEDED + YYLTYPE yylsa[YYINITDEPTH]; /* the location stack */ + YYLTYPE *yyls = yylsa; + YYLTYPE *yylsp; + +#define YYPOPSTACK (yyvsp--, yyssp--, yylsp--) +#else +#define YYPOPSTACK (yyvsp--, yyssp--) +#endif + + int yystacksize = YYINITDEPTH; + int yyfree_stacks = 0; + +#ifdef YYPURE + int yychar; + YYSTYPE yylval; + int yynerrs; +#ifdef YYLSP_NEEDED + YYLTYPE yylloc; +#endif +#endif + + YYSTYPE yyval; /* the variable used to return */ + /* semantic values from the action */ + /* routines */ + + int yylen; + +#if YYDEBUG != 0 + if (yydebug) + fprintf(stderr, "Starting parse\n"); +#endif + + yystate = 0; + yyerrstatus = 0; + yynerrs = 0; + yychar = YYEMPTY; /* Cause a token to be read. */ + + /* Initialize stack pointers. + Waste one element of value and location stack + so that they stay on the same level as the state stack. + The wasted elements are never initialized. */ + + yyssp = yyss - 1; + yyvsp = yyvs; +#ifdef YYLSP_NEEDED + yylsp = yyls; +#endif + +/* Push a new state, which is found in yystate . */ +/* In all cases, when you get here, the value and location stacks + have just been pushed. so pushing a state here evens the stacks. */ +yynewstate: + + *++yyssp = yystate; + + if (yyssp >= yyss + yystacksize - 1) + { + /* Give user a chance to reallocate the stack */ + /* Use copies of these so that the &'s don't force the real ones into memory. */ + YYSTYPE *yyvs1 = yyvs; + short *yyss1 = yyss; +#ifdef YYLSP_NEEDED + YYLTYPE *yyls1 = yyls; +#endif + + /* Get the current used size of the three stacks, in elements. */ + int size = yyssp - yyss + 1; + +#ifdef yyoverflow + /* Each stack pointer address is followed by the size of + the data in use in that stack, in bytes. */ +#ifdef YYLSP_NEEDED + /* This used to be a conditional around just the two extra args, + but that might be undefined if yyoverflow is a macro. */ + yyoverflow("parser stack overflow", + &yyss1, size * sizeof (*yyssp), + &yyvs1, size * sizeof (*yyvsp), + &yyls1, size * sizeof (*yylsp), + &yystacksize); +#else + yyoverflow("parser stack overflow", + &yyss1, size * sizeof (*yyssp), + &yyvs1, size * sizeof (*yyvsp), + &yystacksize); +#endif + + yyss = yyss1; yyvs = yyvs1; +#ifdef YYLSP_NEEDED + yyls = yyls1; +#endif +#else /* no yyoverflow */ + /* Extend the stack our own way. */ + if (yystacksize >= YYMAXDEPTH) + { + yyerror("parser stack overflow"); + if (yyfree_stacks) + { + free (yyss); + free (yyvs); +#ifdef YYLSP_NEEDED + free (yyls); +#endif + } + return 2; + } + yystacksize *= 2; + if (yystacksize > YYMAXDEPTH) + yystacksize = YYMAXDEPTH; +#ifndef YYSTACK_USE_ALLOCA + yyfree_stacks = 1; +#endif + yyss = (short *) YYSTACK_ALLOC (yystacksize * sizeof (*yyssp)); + __yy_memcpy ((char *)yyss, (char *)yyss1, + size * (unsigned int) sizeof (*yyssp)); + yyvs = (YYSTYPE *) YYSTACK_ALLOC (yystacksize * sizeof (*yyvsp)); + __yy_memcpy ((char *)yyvs, (char *)yyvs1, + size * (unsigned int) sizeof (*yyvsp)); +#ifdef YYLSP_NEEDED + yyls = (YYLTYPE *) YYSTACK_ALLOC (yystacksize * sizeof (*yylsp)); + __yy_memcpy ((char *)yyls, (char *)yyls1, + size * (unsigned int) sizeof (*yylsp)); +#endif +#endif /* no yyoverflow */ + + yyssp = yyss + size - 1; + yyvsp = yyvs + size - 1; +#ifdef YYLSP_NEEDED + yylsp = yyls + size - 1; +#endif + +#if YYDEBUG != 0 + if (yydebug) + fprintf(stderr, "Stack size increased to %d\n", yystacksize); +#endif + + if (yyssp >= yyss + yystacksize - 1) + YYABORT; + } + +#if YYDEBUG != 0 + if (yydebug) + fprintf(stderr, "Entering state %d\n", yystate); +#endif + + goto yybackup; + yybackup: + +/* Do appropriate processing given the current state. */ +/* Read a lookahead token if we need one and don't already have one. */ +/* yyresume: */ + + /* First try to decide what to do without reference to lookahead token. */ + + yyn = yypact[yystate]; + if (yyn == YYFLAG) + goto yydefault; + + /* Not known => get a lookahead token if don't already have one. */ + + /* yychar is either YYEMPTY or YYEOF + or a valid token in external form. */ + + if (yychar == YYEMPTY) + { +#if YYDEBUG != 0 + if (yydebug) + fprintf(stderr, "Reading a token: "); +#endif + yychar = YYLEX; + } + + /* Convert token to internal form (in yychar1) for indexing tables with */ + + if (yychar <= 0) /* This means end of input. */ + { + yychar1 = 0; + yychar = YYEOF; /* Don't call YYLEX any more */ + +#if YYDEBUG != 0 + if (yydebug) + fprintf(stderr, "Now at end of input.\n"); +#endif + } + else + { + yychar1 = YYTRANSLATE(yychar); + +#if YYDEBUG != 0 + if (yydebug) + { + fprintf (stderr, "Next token is %d (%s", yychar, yytname[yychar1]); + /* Give the individual parser a way to print the precise meaning + of a token, for further debugging info. */ +#ifdef YYPRINT + YYPRINT (stderr, yychar, yylval); +#endif + fprintf (stderr, ")\n"); + } +#endif + } + + yyn += yychar1; + if (yyn < 0 || yyn > YYLAST || yycheck[yyn] != yychar1) + goto yydefault; + + yyn = yytable[yyn]; + + /* yyn is what to do for this token type in this state. + Negative => reduce, -yyn is rule number. + Positive => shift, yyn is new state. + New state is final state => don't bother to shift, + just return success. + 0, or most negative number => error. */ + + if (yyn < 0) + { + if (yyn == YYFLAG) + goto yyerrlab; + yyn = -yyn; + goto yyreduce; + } + else if (yyn == 0) + goto yyerrlab; + + if (yyn == YYFINAL) + YYACCEPT; + + /* Shift the lookahead token. */ + +#if YYDEBUG != 0 + if (yydebug) + fprintf(stderr, "Shifting token %d (%s), ", yychar, yytname[yychar1]); +#endif + + /* Discard the token being shifted unless it is eof. */ + if (yychar != YYEOF) + yychar = YYEMPTY; + + *++yyvsp = yylval; +#ifdef YYLSP_NEEDED + *++yylsp = yylloc; +#endif + + /* count tokens shifted since error; after three, turn off error status. */ + if (yyerrstatus) yyerrstatus--; + + yystate = yyn; + goto yynewstate; + +/* Do the default action for the current state. */ +yydefault: + + yyn = yydefact[yystate]; + if (yyn == 0) + goto yyerrlab; + +/* Do a reduction. yyn is the number of a rule to reduce with. */ +yyreduce: + yylen = yyr2[yyn]; + if (yylen > 0) + yyval = yyvsp[1-yylen]; /* implement default value of the action */ + +#if YYDEBUG != 0 + if (yydebug) + { + int i; + + fprintf (stderr, "Reducing via rule %d (line %d), ", + yyn, yyrline[yyn]); + + /* Print the symbols being reduced, and their result. */ + for (i = yyprhs[yyn]; yyrhs[i] > 0; i++) + fprintf (stderr, "%s ", yytname[yy